Sản phẩm
Khi trình quét bỏ lọt mã độc: Cloudflare bảo vệ cửa hàng trực tuyến bằng AI như thế nào?
(giờ Việt Nam)
Tóm tắt AI
Các trang web thương mại điện tử thường bị tấn công bởi mã JavaScript độc hại khó phát hiện. Cloudflare sử dụng các mô hình học máy để nhận diện và ngăn chặn những cuộc tấn công tinh vi này, giúp bảo vệ doanh thu và dữ liệu người dùng.
Bản dịch AI

Một cửa hàng trực tuyến hiện đại có thể trông hoàn toàn bình thường trong khi các đoạn mã JavaScript độc hại vẫn đang âm thầm hoạt động bên dưới: đánh cắp doanh thu từ tiếp thị liên kết (affiliate), chiếm quyền điều khiển các lượt tìm kiếm và nhấp chuột, can thiệp vào dữ liệu phân tích, hoặc yêu cầu một máy chủ từ xa thực thi các lệnh tiếp theo. Các trang web vẫn tải, sản phẩm vẫn hiển thị và quy trình thanh toán vẫn hoạt động — nhưng trình duyệt có thể đang âm thầm thực hiện những hành động mà chủ sở hữu trang web không hề cho phép.
Đó chính là điểm mù mà mô hình học máy (ML) về Bảo mật phía máy khách (Client-Side Security) của chúng tôi được xây dựng để phơi bày. Bài viết này theo dõi bốn chiến dịch, bao gồm tám payload (tải trọng độc hại), mà Page Shield ML của chúng tôi đã phát hiện trong môi trường thực tế.
Việc phát hiện các payload độc hại này được thực hiện tự động; con người chỉ xác minh từng kết quả sau khi hệ thống đã gắn cờ cảnh báo. Khi chúng tôi kiểm tra lại các chiến dịch này bằng các công cụ quét bảo mật, bảy trong số tám payload hoàn toàn không xuất hiện trên VirusTotal, và URLScan cũng không đưa ra bất kỳ kết luận độc hại nào cho chúng. Trong khi đó, Page Shield ML đã bắt được cả tám trường hợp trong lưu lượng truy cập trực tiếp.
Ví dụ, trong khi các nghiên cứu bảo mật đã ghi nhận dòng mã độc Lnkr rộng hơn từ nhiều năm trước, một phiên bản payload cụ thể đã nằm trong danh mục của URLScan suốt gần hai năm rưỡi với trạng thái “Không phân loại”, bao gồm cả trong một lần quét trực tiếp vào tháng 1 năm 2024. Chỉ trong trường hợp này, VirusTotal mới tiếp nhận payload sớm hơn: mặc dù hiện tại nó đã gắn cờ tập lệnh là độc hại, nhưng lịch sử công khai không tiết lộ thời điểm phán quyết đó được đưa ra lần đầu. Trong khi đó, Page Shield ML đã độc lập phát hiện chính xác các byte đó trên cửa hàng của một nhà bán lẻ trực tuyến. Rộng hơn, một mã băm (hash) có thể đã tồn tại rất lâu trước khi đoạn mã đằng sau nó được phân loại là độc hại. Nếu hệ thống phòng thủ của bạn chờ đợi nhãn dán đó, bạn đã quá muộn. Bạn cần học máy có khả năng phân tích chính đoạn mã JavaScript và đánh giá nó ở quy mô lớn.
Thực tế, nhìn thấy một tệp tin không có nghĩa là hiểu được nó. Điểm khó khăn là bốn chiến dịch này không chia sẻ bất kỳ chữ ký (signature) chung hay kỹ thuật che giấu nào. Một chiến dịch vẫn nằm im trừ khi thiết bị, quốc gia, thời gian, nguồn giới thiệu (referrer) hoặc trạng thái trình duyệt khớp với những gì nó chờ đợi. Một chiến dịch khác che giấu yêu cầu tiếp thị liên kết không cần nhấp chuột bên trong một iframe vô hình. Những chiến dịch khác thì chặn các lượt nhấp, vô hiệu hóa tính năng giám sát hoặc tải thêm mã từ máy chủ từ xa một cách có điều kiện. Để bắt được chúng, bạn phải quan sát cách các thành phần đó phối hợp với nhau: khi nào tập lệnh kích hoạt, nó che giấu điều gì, nó chặn những gì và nó tìm nạp những gì tiếp theo. Kiểm tra trang web một lần là không đủ; như các trường hợp này cho thấy, những tập lệnh như vậy được thiết kế để giữ im lặng cho đến khi nạn nhân phù hợp xuất hiện. Đó là lý do tại sao khả năng hiển thị liên tục trên trình duyệt tạo ra sự khác biệt giữa việc bắt được một cuộc tấn công và bỏ lỡ nó hoàn toàn.
Cách chúng tôi phát hiện và gắn nhãn JavaScript ở quy mô lớn
Cùng một mô hình GNN (mạng thần kinh đồ thị) đã gắn cờ bốn chiến dịch trong bài viết này cũng đã từng bắt được các gói npm độc hại và một trình đánh cắp thông tin thanh toán Magecart trong thực tế. GNN không coi JavaScript là một khối văn bản phẳng; nó suy luận thông qua mã dưới dạng một đồ thị: một cây cú pháp kết nối các ký hiệu mã và phơi bày cái nào gọi cái nào, kẻ tấn công đã cố gắng chôn giấu điều gì và cái nào vẫn đang gửi dữ liệu về máy chủ chủ quản. Cấu trúc đó giúp nó nhận ra các mô hình đáng ngờ bất chấp việc rút gọn mã (minification), đổi tên và một số kỹ thuật làm rối mã (obfuscation) mà không cần dựa vào một URL hoặc chữ ký byte đã biết.
Một vài tập lệnh mà GNN gắn cờ là độc hại (dưới 0,3% tổng lưu lượng truy cập được phân tích) sẽ được gửi đến một mô hình ngôn ngữ lớn (LLM) gọn nhẹ trên Workers AI để lấy ý kiến thứ hai trực tiếp. Điều này giúp giảm thiểu hơn nữa các kết quả dương tính giả trong khi vẫn duy trì độ nhạy cao. Khi LLM xác nhận kết quả của GNN, khách hàng sẽ được cảnh báo.
Để điều tra các tập lệnh phức tạp nhất ở quy mô lớn, chúng tôi sử dụng một nhóm các mô hình tiên phong, mà chúng tôi gọi là các "giáo viên" (một tập hợp các giám khảo tự động). Nhóm này tập hợp các mô hình hàng đầu từ khoảng sáu dòng khác nhau, bao gồm cả các mô hình mã nguồn mở chạy trên Workers AI. Chúng tôi khởi chạy mỗi mô hình như một tác nhân (agent) để phân tích cùng một tập lệnh đáng ngờ trong phiên làm việc độc lập, mới mẻ của riêng nó. Khi cần thiết, quyền truy cập công cụ của các tác nhân cho phép chúng sử dụng trình đánh giá JavaScript bị hạn chế để giải nén các đoạn mã nhỏ và tiết lộ hành vi bị che giấu. Chúng tôi sẽ sớm mở rộng quy trình này với Cloudflare Sandbox để phân tích sâu hơn trong các môi trường cô lập.
Các mô hình tiên phong đôi khi không đồng nhất, đặc biệt là với các tập lệnh phức tạp nhất. Chúng tôi coi sự bất đồng đó là tín hiệu, không phải nhiễu. Mỗi nhãn trở thành một lá phiếu, được trọng số theo điểm số của mô hình trong Chỉ số Trí tuệ Phân tích Nhân tạo (Artificial Analysis Intelligence Index), tạo ra một phân phối xác suất trên bốn nhãn: lành tính, đánh cắp thanh toán (magecart), phần mềm độc hại khác và đào tiền ảo. Do đó, các chuyên gia đánh giá con người chỉ cần kiểm tra các tập lệnh được gắn cờ là độc hại hoặc thiếu sự đồng thuận rõ ràng từ hai phần ba số phiếu. Sau đó, chúng tôi đưa các phân phối nhãn đó trở lại quá trình huấn luyện GNN, giúp nó phân biệt các trường hợp ngày càng tinh vi hơn. Vòng lặp phản hồi này hiện vẫn còn một phần thủ công, mặc dù chúng tôi đang bắt đầu tự động hóa nó.
Bốn chiến dịch JavaScript độc hại mà chúng tôi đã bắt được
Bốn chiến dịch này thực hiện những hành vi rất khác nhau, từ trộm cắp hoa hồng đến đánh cắp dữ liệu phân tích về những người mua sắm mà cửa hàng đã phải trả tiền để có được. Đánh cắp hoa hồng không giống như đánh cắp thông tin thẻ tín dụng; tương tự, chiếm quyền điều khiển tìm kiếm không giống như đánh cắp mật khẩu. Nếu một mô hình ML chỉ biết một trong những thủ thuật đó, nó sẽ bỏ lỡ các thủ thuật còn lại. Thay vào đó, Page Shield ML của chúng tôi phải luôn nhạy bén với mọi loại hành vi thù địch.
Bây giờ, hãy cùng đi sâu vào từng chiến dịch và cách thức hoạt động của chúng.
Chiến dịch
Tác động đến khách hàng
Hành vi của tập lệnh
1) Kẻ chiếm đoạt hoa hồng tiếp thị liên kết ngoài giờ
Chiếm đoạt hoa hồng tiếp thị liên kết
Kiểm soát theo thiết bị di động & thời gian; giám sát trang động; chặn nhấp chuột; thời gian chờ (cooldown) nhiều ngày
2) Trộm cắp tiếp thị liên kết không cần nhấp chuột
Đánh cắp hoa hồng tiếp thị liên kết mà không cần người dùng nhấp chuột
Iframe ngoài màn hình; tự động nhấp vào liên kết ẩn dự phòng; tìm nạp tra cứu IP giả mạo & kiểm soát thời gian; xoay vòng tiếp thị liên kết hàng giờ
3) Kẻ phá hoại tìm kiếm cũ, nay là cửa sau (backdoor) của cửa hàng
Theo dõi người dùng và mở cửa sau để thực thi JavaScript từ xa tùy ý
Vô hiệu hóa từ khóa cũ; từ chối (opt-out) localStorage; đo lường từ xa (telemetry); tải mã từ xa
4) Kẻ che giấu (cloaker) trên thiết bị di động trả phí
Làm mù cửa hàng đối với khách truy cập di động từ các chiến dịch, cố gắng thay thế quảng cáo và dữ liệu phân tích, đồng thời ẩn các công cụ hỗ trợ
Kiểm soát theo máy chủ, khung nhìn (viewport) & thẻ UTM; danh sách 325 chuỗi con IP; vô hiệu hóa 9 công cụ giám sát/phân tích; beacon theo dõi không pixel
Chiến dịch 1: Kẻ chiếm đoạt hoa hồng tiếp thị liên kết ngoài giờ
Hãy tưởng tượng một buổi chiều Chủ nhật yên tĩnh: một người mua sắm trên điện thoại chạm vào một sản phẩm. Thay vì thực hiện thao tác chạm bình thường, tập lệnh sẽ mở một trang sản phẩm hoặc trang đích của chiến dịch từ danh sách do kẻ tấn công chọn trước trong một tab mới và chuyển hướng tab gốc qua một lộ trình tiếp thị liên kết. Cửa hàng trực tuyến vẫn có vẻ hoạt động bình thường. Nếu người mua sắm hoàn tất giao dịch mua hàng (ngay lúc đó hoặc sau này), hành động chuyển hướng này sẽ chiếm đoạt quyền ghi nhận công lao, gán giao dịch bán hàng (và bất kỳ khoản hoa hồng nào phát sinh) cho một tài khoản không hề tạo ra lượt giới thiệu đó.
Những gì cửa hàng đã mất
Cửa hàng có thể phải trả một khoản hoa hồng không xứng đáng cho một tài khoản không mang lại khách hàng. Tệ hơn nữa, nếu một đối tác hợp pháp đã thực hiện lượt giới thiệu, yêu cầu bị ép buộc này có thể ghi nhận sai, chuyển hướng quyền lợi và khoản thanh toán tiềm năng khỏi đối tác đã thực sự làm việc. Thiệt hại có thể kéo dài hơn một khoản hoa hồng: các đối tác mất niềm tin vào hệ thống ghi nhận có thể cũng sẽ ngừng tin tưởng vào nhà bán lẻ đứng sau nó.
Chuỗi tấn công
Khách truy cập di động đủ điều kiện → chặn thao tác chạm sản phẩm → trang do tập lệnh chọn mở trong tab mới + tab gốc đi theo lộ trình tiếp thị liên kết của kẻ tấn công
Cách nó ẩn mình
Chúng tôi đã tìm thấy năm bản dựng tập lệnh liên quan: hai bản đang hoạt động và ba bản đã tạm dừng khi bị bắt. Mỗi biến thể đang hoạt động sử dụng một bộ kiểm soát khác nhau trước khi thực hiện hành động, kiểm tra các yếu tố như thiết bị của khách truy cập và giờ địa phương, liệu thủ thuật này đã chạy gần đây chưa, liệu nút sản phẩm đã xuất hiện chưa và liệu có ai thực sự nhấp vào nó hay không. Mê cung các quy tắc đó giữ cho hành vi độc hại không bị phát hiện trong một lần truy cập tự động ngắn ngủi trừ khi các điều kiện cụ thể của biến thể được đáp ứng. Các tập lệnh đang hoạt động sử dụng MutationObserver (một API JavaScript) để theo dõi các ô sản phẩm và nút xuất hiện động sau khi trang được tải lần đầu. Điều này cho phép chúng chặn các lượt nhấp vào các phần tử xuất hiện muộn đó, trong khi một trình thu thập dữ liệu chỉ tải HTML một lần rồi dừng lại có thể bỏ lỡ hoàn toàn lộ trình chuyển hướng.
Trong các biến thể sau này đang hoạt động, tập lệnh chặn một lượt nhấp đủ điều kiện và ghi một khoảng thời gian chờ ba ngày vào localStorage (nằm im trên thiết bị đó trong nhiều ngày). Sau đó, nó thực hiện thao tác hai tab: bật một trang sản phẩm do kẻ tấn công chọn vào một tab mới để giữ chân người mua sắm, trong khi tab gốc thực hiện một chuyến đi vòng nhanh chóng, không bị chú ý qua liên kết theo dõi tiếp thị liên kết của kẻ tấn công rồi quay lại cửa hàng, để cài đặt cookie ghi nhận của kẻ tấn công trong nền. Việc che giấu bảng điều khiển (console) và kiểm tra nguồn tự bảo vệ khiến việc kiểm tra trở nên khó khăn hơn, trong khi thời gian chờ và lịch trình hạn hẹp giới hạn tần suất xuất hiện của lộ trình độc hại trong quá trình mua sắm bình thường.
Đoạn trích đã được làm sạch sau đây cho thấy cách payload móc nối vào các ô sản phẩm động và thực hiện việc chuyển hướng hai tab. Chúng tôi đã đơn giản hóa các định danh, định dạng lại mã và vô hiệu hóa các URL đích để dễ đọc hơn.
Các bản dựng đã tạm dừng cho thấy chiến dịch có thể biến mất mà không cần xóa tập lệnh. Cấu hình nhúng của chúng đặt trạng thái: "paused", vì vậy chúng thoát trước khi cài đặt các trình xử lý nhấp chuột. Các tập lệnh đã tạm dừng này mang các cấu hình thời gian chờ cho mỗi người mua sắm khác nhau (3, 4 và 5 ngày). Một trong những tập lệnh đã tạm dừng thậm chí còn ghi lại một bình luận về lịch sử phiên bản, ghi rõ rằng chiến dịch đã bị tạm dừng sau ngày Black Friday.
Bài viết được AI dịch và tổng hợp tự động từ Cloudflare Blog. Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.