Drive-by download

Trong an ninh mạng, drive-by download (tải xuống không chủ ý) là hành vi tải phần mềm xuống một cách ngoài ý muốn, thường là phần mềm độc hại. Thuật ngữ "drive-by download" thường chỉ các trường hợp người dùng vô tình cho phép tải xuống mà không thực sự hiểu mình đang tải gì – chẳng hạn như khi bị lừa bởi một phần mềm kiểu trojan. Trong những trường hợp khác, thuật ngữ này có thể ám chỉ việc tải xuống diễn ra hoàn toàn mà người dùng không hề hay biết. Các loại tập tin phổ biến được phát tán qua hình thức tấn công này thường bao gồm virus máy tính, phần mềm gián điệp hoặc crimeware (phần mềm phục vụ tội phạm mạng).

Drive-by download có thể xảy ra khi người dùng truy cập một trang web, mở tập tin đính kèm trong email, nhấp vào một liên kết, hoặc nhấn vào cửa sổ pop-up đánh lừa người dùng. Ví dụ, người dùng có thể nhấp vào cửa sổ đó vì tưởng rằng đó là một thông báo lỗi từ hệ điều hành hoặc chỉ đơn giản là muốn tắt một quảng cáo tưởng chừng vô hại. Trong những trường hợp như vậy, bên phát tán có thể tuyên bố rằng người dùng đã "đồng ý" tải xuống, mặc dù thực tế là người dùng không hề biết mình đã bắt đầu tải một phần mềm không mong muốn hoặc độc hại. Tương tự, nếu người dùng truy cập một trang web có chứa nội dung độc hại, họ có thể trở thành nạn nhân của một cuộc tấn công tải xuống không chủ ý. Nội dung độc hại trên trang có thể khai thác lỗ hổng trong trình duyệt hoặc các plugin, cho phép mã độc chạy mà người dùng không hề hay biết.

Cài đặt không chủ ý (drive-by install hoặc drive-by installation) là một hiện tượng tương tự. Thuật ngữ này dùng để chỉ việc cài đặt phần mềm mà người dùng không hề biết hoặc không mong muốn, thay vì chỉ dừng lại ở việc tải xuống như trong tải xuống không chủ ý. Tuy nhiên, đôi khi hai thuật ngữ này được sử dụng thay thế cho nhau.

== Quy trình ==
Khi thực hiện một cuộc drive-by download, kẻ tấn công trước hết phải tạo ra nội dung độc hại để phục vụ cho cuộc tấn công. Với sự gia tăng của các bộ công cụ khai thác lỗ hổng (exploit packs) – vốn chứa sẵn các lỗ hổng cần thiết để tiến hành tấn công – mức độ kỹ năng cần thiết để thực hiện kiểu tấn công này đã giảm đáng kể.

Bước tiếp theo là lưu trữ nội dung độc hại mà kẻ tấn công muốn phân phối. Một lựa chọn là kẻ tấn công tự lưu trữ nội dung này trên máy chủ riêng của họ. Tuy nhiên, do khó khăn trong việc điều hướng người dùng đến một trang web mới, nội dung độc hại cũng có thể được lưu trữ trên một trang web hợp pháp đã bị xâm nhập, hoặc một trang web hợp pháp vô tình phân phối nội dung của kẻ tấn công thông qua dịch vụ bên thứ ba (ví dụ: quảng cáo). Khi nội dung độc hại được tải ở phía người dùng (client), kẻ tấn công sẽ phân tích fingerprint của hệ thống người dùng nhằm điều chỉnh mã độc để khai thác các lỗ hổng cụ thể của hệ thống đó.

Cuối cùng, kẻ tấn công sẽ khai thác các lỗ hổng cần thiết để khởi chạy cuộc tấn công drive-by download. Drive-by download thường sử dụng một trong hai chiến lược sau: 
- Chiến lược đầu tiên là khai thác các lệnh gọi API của nhiều plugin khác nhau. Ví dụ, API DownloadAndInstall của thành phần Sina ActiveX không kiểm tra đúng cách các tham số, từ đó cho phép tải xuống và thực thi các tệp bất kỳ từ Internet.
- Chiến lược thứ hai là ghi shellcode vào bộ nhớ, sau đó khai thác các lỗ hổng trong trình duyệt web hoặc plugin để chuyển hướng luồng điều khiển của chương trình đến đoạn shellcode đó. Sau khi shellcode được thực thi, kẻ tấn công có thể tiến hành các hoạt động độc hại tiếp theo. Điều này thường bao gồm việc tải xuống và cài đặt phần mềm độc hại, nhưng cũng có thể là bất cứ hành động nào khác, chẳng hạn như đánh cắp thông tin để gửi về cho kẻ tấn công.

Kẻ tấn công cũng có thể thực hiện các biện pháp để tránh bị phát hiện trong suốt quá trình tấn công. Một phương pháp phổ biến là che giấu mã độc (obfuscation). Việc này có thể được thực hiện thông qua việc sử dụng iframes. Một phương pháp khác là mã hóa mã độc để ngăn chặn việc bị phát hiện. Thông thường, kẻ tấn công sẽ mã hóa mã độc thành một ciphertext (bản mã), sau đó chèn phương thức giải mã ngay sau ciphertext đó.

== Phát hiện và ngăn chặn ==
Phát hiện các cuộc tấn công drive-by download là một lĩnh vực nghiên cứu đang được quan tâm phát triển. Một số phương pháp phát hiện dựa trên phát hiện bất thường (anomaly detection), theo dõi các thay đổi trạng thái trên hệ thống máy tính của người dùng trong khi họ truy cập một trang web. Điều này bao gồm việc giám sát hệ thống máy tính của người dùng để phát hiện những thay đổi bất thường khi một trang web được tải và hiển thị. Các phương pháp phát hiện khác bao gồm việc phát hiện khi mã độc (shellcode) được ghi vào bộ nhớ bởi sự khai thác của kẻ tấn công. Một phương pháp phát hiện khác là tạo ra các môi trường runtime cho phép mã JavaScript thực thi và theo dõi hành vi của nó trong quá trình chạy. Ngoài ra, còn có các phương pháp khác như kiểm tra nội dung của các trang HTML để nhận diện các đặc điểm có thể dùng để xác định các trang web độc hại, và sử dụng các đặc tính của máy chủ web để xác định xem một trang có phải là trang độc hại hay không.

Một số phần mềm diệt virus sử dụng chữ ký tĩnh (static signatures) để đối chiếu các mẫu mã độc trong script, mặc dù phương pháp này không hiệu quả lắm do các kỹ thuật che giấu (obfuscation). Việc phát hiện cũng có thể được thực hiện bằng cách sử dụng các honeyclients với mức độ tương tác thấp hoặc cao.

Drive-by download cũng có thể được ngăn chặn bằng cách sử dụng các tiện ích chặn tải script như NoScript, có thể dễ dàng được thêm vào trình duyệt như Firefox. Với các tiện ích này, người dùng có thể vô hiệu hóa toàn bộ script trên một trang web nhất định, sau đó bật lại từng script một cách chọn lọc để xác định script nào thực sự cần thiết cho chức năng của trang. Tuy nhiên, một số công cụ chặn script có thể gây ra hậu quả ngoài ý muốn, chẳng hạn như làm hỏng một số phần của các trang web khác, khiến người dùng phải cân bằng giữa bảo mật và trải nghiệm sử dụng.

Một hình thức phòng ngừa khác, được gọi là "Cujo", được tích hợp vào một proxy web, nơi nó kiểm tra các trang web và chặn việc truyền mã JavaScript độc hại.

== Xem thêm ==
- Tấn công giả mạo
- Malvertising