Ai đó sử dụng mã Google Analytics của tui, tui lần theo và hack vào Database của hắn

JUNO_OKYO
JUNO_OKYO 27/09/2020
Share:

Ngày hôm qua, trong lúc ngồi ở công ty, mình ngó qua Google Analytics để xem tình hình trang J2TEAM.dev ra sao. Chợt nhận thấy trong số các trang đang có người truy cập có tên là “clone-j2team.html”. Mình nghĩ thầm “haiz, thấy giao diện landing người ta đẹp nên chôm đây mà”.

J2TEAM


Tại sao mình nghĩ vậy? Đơn giản là vì khi ai đó sao chép mã nguồn của một trang web mà vô tình sao chép luôn cả mã theo dõi của Google Analytics (GA) thì khi mở trang đó lên nó sẽ được hiển thị luôn trong Dashboard của chủ mã GA. Điều này khá buồn cười vì lẽ ra Google nên xác minh truy vấn gửi về server có phải là từ tên miền được thiết lập khi tạo mã theo dõi mới.

Nghĩ thầm vậy thôi, do trước đây cũng có ông nào đó chôm giao diện Blog cá nhân của mình và cũng giữ luôn mã theo dõi trong đó nên mình nhanh chóng hiểu ra vấn đề. Điều này cũng chẳng quan trọng lắm, “giao diện mình đẹp thì người ta mới sao chép thôi” – mình nghĩ vậy, tắt tab GA đi rồi làm việc tiếp.

Tối về, ngồi ở nhà mở GA lên xem tình hình, chợt nhận thấy lưu lượng truy cập tăng cao so với mọi khi nhưng các trang hiện ra khá kì lạ. Một loạt các trang có chứa tham số theo dõi do FB thêm vào tự động (?fbclid=xxx) và một trang có tên “tutorial-gc.html” xuất hiện trong bảng báo cáo. Mình đã dùng CloudFlare để loại bỏ tham số theo dõi của FB nên các trang kia dù có đường dẫn là index nhưng chắc chắn không phải index của mình. “Nhiều trang mới xuất hiện thế này hẳn là thanh niên kia đã làm xong trang web và chia sẻ lên đâu đó nên có nhiều người vào rồi đây” – mình nghĩ thầm.

Lần này thì khác với lúc ở công ty, mình bắt đầu thấy khó chịu bởi khi có nhiều lưu lượng truy cập từ trang không phải của mình sẽ làm sai lệch báo cáo lưu lượng hàng tháng trong GA. Ngay lập tức, mình mở tab ẩn danh và tìm thử trên Google xem khi gặp trường hợp người khác sử dụng mã GA của mình trong trang của họ thì nên xử lý như nào.

Quả nhiên, mình không phải là người duy nhất gặp trường hợp này:

Nhờ câu trả lời trên Stackexchange, mình biết tới tính năng tạo bộ lọc trong GA. Ngay lập tức mình làm theo, và đây là lúc câu chuyện thú vị hơn bắt đầu diễn ra.

Khi tạo bộ lọc mới, GA cho phép chúng ta xác nhận thử xem bộ lọc mới hoạt động đúng hay không, mình nhấn thử “Verify this filter” (Kiểm tra bộ lọc này) thì thấy hiện ra các danh sách tên miền bị lọc khỏi kết quả. Phải nói trước là vốn dĩ mình chỉ định lọc đống kết quả sai ra khỏi Dashboard của mình chứ không quan tâm chúng là gì. Nhưng nhờ tính năng xem thử các tên miền bị lọc, mình vô tình phát hiện ra một chiến dịch tấn công người dùng FB đang diễn ra nhắm vào những ai muốn tiếp tục sử dụng giao diện cũ của FB.

J2TEAM


Từ bảng trên, mình dễ dàng nhận ra trang đang tạo ra rất nhiều lưu lượng sai về tài khoản GA của mình là 2 trang old-xxx. Nhìn theo sub-domain, ta có thể đoán 2 trang này là 1, được deploy lên netlify và thêm tên miền tùy chỉnh vào.

Vào ngó thử coi, quả nhiên giao diện chôm từ J2TEAM.dev qua, thậm chí cái logo JUNO_OKYO trên góc trái của mình vẫn còn giữ nguyên chưa thay đổi.

J2TEAM


Cũng chưa có gì đáng để bàn cho lắm, mình chợt có chút tò mò về cái extension này hoạt động ra sao, bởi trước đó mình đã biết về một extension khác với tên là Old Layout với cùng tính năng chuyển giao diện mới của Facebook về giao diện cũ. Mình biết Old Layout hoạt động bằng cách chuyển đổi User-Agent của trình duyệt rồi, nên tự nhủ trong đầu rằng “cái Old XXX này hoạt động dựa trên cái gì ta?”. Thế là nhấn luôn nút đầu tiên, cái extension này chưa có mặt trên Chrome Store nên tác giả đang để link tải file nén về. Tốt thôi, ta sẽ dễ dàng hơn để ngó qua mã nguồn.

Giải nén xong, mình mở ngay file đầu tiên trong thư mục: “background.js”.

Trời ạ, ra là vậy! Hóa ra không chỉ sao chép giao diện trang web, tới cái extension cũng chỉ là chôm mã nguồn từ Old Layout và đổi tên thành extension mới, dựng trang web mới rồi kiếm người dùng. Mình nhận ra ngay bởi mình đã ngó qua extension Old Layout khi nó mới ra mắt. Để kiểm chứng, đây là hình so sánh 2 file “background.js” (Old Layout ở bên trái).

J2TEAM


Như các bạn thấy đó, file background.js của cả 2 extension này chẳng có gì khác nhau cả.

Chưa hết!! Khi mở tiếp file manifest.json – nếu bạn chưa biết thì đây là file khai báo thông tin, quyền hạn của extension – mình đã nhận ra có sự khác biệt giữa 2 extension.

J2TEAM


Extension “xịn” (Old Layout) chỉ “xin” 3 quyền, trong khi extension “rỏm” thì xin thêm những 6 quyền mới. Để làm chi ta?? Không những vậy, extension rỏm còn yêu cầu được hoạt động ở cả chế độ ẩn danh! “Chết thật, nhỡ người ta coi phim bị lưu lại link thì sao?” – :chim-cánh-cụt:.

Mở tiếp file options.js, mình không thấy có gì lạ, à thì… cũng không có gì khác file options.js của extension xịn. Nhưng tới file popup.js, mình chợt để ý là extension xịn làm quái gì có file này. Hmm… có gì đó hay ho đây.

Mở file lên, đập vào mắt mình là một đống hổ lốn những tên miền gì đó. Nhìn số dòng code, file này lên tới 8420 dòng. Kéo luôn xuống cuối thì thứ “hay ho” xuất hiện:

J2TEAM


Giải thích cho bạn nào chưa hiểu, hàm trên sẽ lấy toàn bộ cookies, rồi kiểm tra xem có cookie nào được tạo ra cho tên miền “.facebook.com” hay không, nếu có thì gửi cookie này về Database (cơ sở dữ liệu).

Hack ngược vào Database của kẻ tấn công

Đây là phần hấp dẫn nhất của bài viết, nếu bạn nào còn nhớ thì đây không phải là lần đầu mình làm chuyện này (xem lại bài phân tích và “hack ngược” năm 2017).

File popup.js ở trên được nhúng vào popup.html cùng các thư viện để kết nối với Database (DB), mình hiểu ra là có thể lợi dụng điều này để gửi các truy vấn khác tới DB. Ngay lập tức, mình tạo một hồ sơ mới trên Chrome (để đảm bảo an toàn cho tài khoản của mình thì hồ sơ mới sẽ giống như sandbox vậy). Cài extension kia vào hồ sơ mới rồi nhấn chuột phải vào biểu tượng extension > chọn Inspect popup (tính năng này giống như bạn Inspect element trên các trang web ấy, nhưng cái này thì dành cho việc debug extension).

DevTools thần thánh hiện lên, mình chuyển qua tab Console, gõ hai chữ thân thương “db” > ENTER. Vì sao là “db” thì bạn chú ý xem lại ảnh ở trên mà mình chụp flie popup nhé.

J2TEAM


Đúng như kết quả mình mong đợi, biến này truy cập được từ “global” và mình có thể gọi các phương thức mình muốn bằng DevTools để gửi truy vấn tới DB. Thực ra thì kể cả không như mong đợi chúng ta cũng đang nắm trong tay mã nguồn mà. Có thể sửa tầm vực của biến thoải mái (tầm vực là phạm vi biến hoạt động trong một chương trình).

Giờ thì, dựa trên kinh nghiệm làm việc với loại DB này trước đây (mình từng dùng loại DB này hồi 2014-2015 khi làm trang “get link phim Nhật”), mình nhanh chóng truy vấn thử để kiểm tra xem có thể đọc record từ DB hay không.

J2TEAM


Rồi xong, thanh niên này đã không cấu hình quy tắc bảo mật để phân quyền đọc DB, khiến bất cứ ai cũng có quyền truy cập vào DB này. Mình ngay lập tức mở Sublime lên code nhanh một chương trình để quản lý DB dựa trên thông tin cấu hình nhúng trong extension và các câu truy vấn mà mình đã biết từ ngày xưa khi làm việc với nó. Kết quả:

J2TEAM


Đây là toàn bộ cookie mà kẻ xấu đã chôm được của người dùng, mình viết thêm một hàm nhỏ để bóc tách ID người dùng từ cookie để biết ai đang bị tấn công.

Kết luận

Qua bài viết sau, mình muốn gửi lời cảnh báo tới mọi người không nên vì muốn sử dụng giao diện cũ của FB mà cài đặt tùy tiện các extension từ những người không đáng tin, đây là nguy cơ cao dẫn đến việc mất tài khoản FB của bạn. Chia sẻ bài viết này tới người thân và bạn bè để cùng cảnh giác nhé!

Trên J2TEAM Community cũng đã có một bài hướng dẫn cách chuyển về giao diện cũ mà bạn không cần cài gì cả.

Như vậy là chỉ từ việc bị người khác sử dụng mã Google Analytics, mình đã truy vết và lần ra cả một chiến dịch tấn công người dùng FB dựa trên ham muốn sử dụng giao diện cũ của mọi người. Và mình tin, kẻ tấn công đến từ Việt Nam. Tại sao à? Hãy nhìn nơi tên miền được đăng ký:

J2TEAM


Và bây giờ thì…

J2TEAM

Chào tạm biệt và hẹn gặp lại trong bài tiếp theo!

j2team-community

Follow us on Facebook, Twitter, and YouTube.

Share:
JUNO_OKYO
Written by

JUNO_OKYO

If you like my post, share it with your friends!!

Got a question?

Contact Us