J2TEAM Security: A must-have extension for Chrome users. Install now!

J2TeaM ghé thăm trang web baovecho.org

Ngày này năm trước (16/04/2015), trang web baovecho.org xuất hiện với chiến dịch "Về đi Vàng ơi" - kêu gọi mọi người Hãy chấm dứt nạn đánh cắp chó...
Baovecho.org hacked by J2TeaM
Ngày này năm trước (16/04/2015), trang web baovecho.org xuất hiện với chiến dịch "Về đi Vàng ơi" - kêu gọi mọi người "Hãy chấm dứt nạn đánh cắp chó, buôn lậu và đối xử tàn nhẫn!".

Mục tiêu của chúng ta là 1,000,000 chữ ký để trình lên quốc hội!

Tất cả những chữ ký ủng hộ của các bạn sẽ được trình lên chính phủ Việt Nam để kêu gọi ban hành quy định về phúc lợi động vật
Việc thu thập chữ ký được thực hiện như nào? Các bạn sẽ phải điền vào một biểu mẫu với các thông tin gồm: Họ và tên, Email, thành phố và số điện thoại.

Cùng ngày, trên diễn đàn VOZ lập tức xuất hiện chủ đề "Sự thật trang web baovecho.org" với nghi vấn về việc trang web này thu thập thông tin người dùng để chuộc lợi (bán thông tin). Bài viết nhanh chóng thu hút được sự quan tâm và số trang thảo luận lên tới hơn 150 trang.

Nhà tôi thì không nuôi chó, tôi cũng chả ăn thịt chó nên ban đầu cũng không có quan tâm tới trang web hay chiến dịch của họ lắm. Tuy nhiên khi vô tình đọc được bài viết của VOZ trên News Feed thì cũng khá tò mò. Chiều hôm đó, tôi cùng K-20 có bàn bạc về trang web này.
Baovecho.org hacked by J2TeaM

Ngay sáng ngày hôm sau (17/04/2015), K-20 thông báo với tôi đã xâm nhập vào máy chủ baovecho.org
Baovecho.org hacked by J2TeaM

Tổng quan về trang web baovecho.org

Trang web sử dụng máy chủ Linux, quản lý hosting bằng Kloxo-MR (một phiên bản Kloxo được phát triển riêng bởi Mustafa Ramadhan). Backend sử dụng framework PHP phổ biến là Laravel.
Baovecho.org hacked by J2TeaM

Tại thời điểm đó, trang này hầu như để dữ liệu ở dạng plain (thuần), không mã hóa. Mọi thông tin nhạy cảm chúng tôi đều có thể lấy về một cách dễ dàng. Tuy nhiên, sau đó tôi có đọc được bài báo Liên minh bảo vệ chó Châu Á phủ nhận tin đồn "trục lợi" của chiến dịch "Về đi Vàng ơi". J2TeaM đã quyết định giữ im lặng và tiếp tục theo dõi trang web này.

Sau bài viết phủ nhận việc "trục lợi" (thu thập thông tin người dùng), tôi nhận ra có hai sự thay đổi lớn từ phía baovecho.org đó là:
  • Họ loại bỏ phần số điện thoại từ biểu mẫu ký tên. Tức là chỉ còn Họ và tên, email và thành phố.
  • Email đã được mã hóa trước khi chèn vào Cơ sở dữ liệu.
Đây là Cơ sở dữ liệu ở lần đầu tiên J2TeaM ghé thăm:
J2TeaM ghé thăm trang web baovecho.org

Lúc này vẫn còn cột "phone" (điện thoại) và email hoàn toàn ở dạng plain.

Và dữ liệu sau khi mã hóa:
J2TeaM ghé thăm trang web baovecho.org

Các bạn có thể thấy cột Email đã được mã hóa và cột Phone trở thành NULL.

Vì sao tôi nói đây là "2 thay đổi lớn"? Vì trong 4 thông tin thu thập từ biểu mẫu khi người dùng ký tên thì emailsố điện thoại là 2 thông tin nhạy cảm và có giá trị nhất (nếu đem bán). Các bạn cứ Google mấy từ khóa như "Email marketing" hay "SMS (mobile) marketing" thì biết.

Do đó, động thái loại bỏ số điện thoại ra khỏi biểu mẫu ký tên và mã hóa email cho thấy phía Baovecho.org sẵn sàng chứng minh họ không "trục lợi" từ chiến dịch "Về đi Vàng ơi!". Nhưng chúng ta cần ghi nhớ một điều rằng: Người mã hóa cũng là người có khả năng giải mã. Trừ khi là họ mã hóa một chiều. Mà nếu mã hóa một chiều thì họ còn bắt nhập Email làm quái gì nữa?

Để kiểm chứng, tôi quyết định tìm hiểu về thuật toán mà Baovecho.org đã sử dụng để mã hóa Email.

Baovecho.org mã hóa dữ liệu như thế nào?

Như tôi đã nói trong phần tổng quan thì trang web này sử dụng framework Laravel, đây cũng là một PHP framework theo mô hình MVC (Model – View – Controller). Mượn tạm cái hình của CodeIgniter cho các bạn (không phải dân lập trình) dễ hình dung:
Model-View-Control

Trong hình trên là luồng dữ liệu đầy đủ của CI nên hơi nhiều thành phần, các bạn chỉ cần quan tâm tới 3 thành phần chính mà tôi đang nói tới là Model-View-Controller là được. Dữ liệu do người dùng nhập vào sẽ được xử lý ở Controller và Model, View chỉ là thành phần hiển thị nên chắc chắn email không thể được mã hóa tại đây.

Theo như cấu trúc thư mục của Laravel thì thư mục app sẽ chứa mã nguồn chính của ứng dụng, đây là nơi mà chúng ta có thể tìm thấy các Controller và Model.

Sau khi xác định được khu vực cần tìm kiếm, tôi sử dụng công cụ FileSeek Pro và trỏ vào 2 thư mục chính là controllersmodels, từ khóa tìm kiếm là "email" cho tôi kết quả sau:
J2TeaM ghé thăm trang web baovecho.org

Nhìn thấy "encode" với "encrypt" là đã thấy liên quan tới vụ mã hóa chúng ta đang quan tâm đúng không nào? Tôi liền nhanh chóng mở tập tin HomeController này bằng Notepad++ và sau khi kiểm tra thì đoạn phía trên nằm trong method postData() để xử lý biểu mẫu ký tên ngoài trang chủ. Như vậy đây chắc chắn là đoạn mã được sử dụng để mã hóa email của người dùng.

Có điều, khi tôi dùng tiếp FileSeek tìm thử với hai từ khóa là "base64_decode" và "mcrypt_decrypt" thì không có kết quả nào? Bạn có đoán ra điều tôi đang nghĩ không? Đúng vậy, trong mã nguồn của baovecho.org chỉ có đoạn code mã hóa email chứ không có đoạn code để giải mã. Có 2 khả năng:

  1. Họ chưa hề viết phần giải mã email người dùng.
  2. Họ đã viết phần giải mã nhưng không upload lên máy chủ để đảm bảo an toàn cho người dùng (?!).

Tôi không chắc họ nằm trong trường hợp nào, nhưng với việc nhanh chóng tìm ra đoạn code mã hóa trên thì trong trường hợp nếu một hacker/attacker xâm nhập thành công vào máy chủ (ví dụ như tôi) thì anh ta hoàn toàn có khả năng viết một hàm giải mã dựa trên đoạn code mã hóa kia.

Tóm lại thì, việc mã hóa email này có vẻ như cũng không chứng tỏ được việc baovecho.org thực sự không "trục lợi" từ dữ liệu người dùng khi mà họ có thể dễ dàng khôi phục lại email ban đầu nếu có ý định đem bán. Tất nhiên, tôi cũng không dùng điểm này để chứng minh họ có "trục lợi" hay không.

Bài viết này chỉ để giúp bạn cảnh giác thêm với dữ liệu của mình, nếu bạn vẫn có thiện ý ủng hộ chiến dịch này thì nên dùng email phụ cho an toàn. Cẩn thận vẫn hơn mà. Be careful!
Leader at J2TEAM. Website: https://j2team.dev/

Đăng nhận xét

Cảm ơn bạn đã đọc bài viết!

- Bạn có gợi ý hoặc bình luận xin chia sẻ bên dưới.

- Hãy viết tiếng Việt có dấu nếu có thể!