Mã độc không dùng tệp và cách phòng ngừa
Fileless malware là loại mã độc hoạt động mà không ghi các tệp thi hành độc hại vào hệ thống tệp. Định nghĩa này bao gồm cả trường hợp mà việc lây nhiễm bắt đầu với một script độc hại, hay một tệp thi hành vô hại trên hệ thống tệp và trường khi mã độc lưu thông tin của nó trong registry, dù Windows vẫn ghi nội dung của registry trên đĩa.
Tuy ban đầu khái niệm mã độc không dùng tệp dùng để chỉ những mã độc chỉ tồn tại trong bộ nhớ và không có khả năng tồn tại lâu dài (sau khi khởi động lại máy), nhưng sau đó nó đã được mở rộng và bao gồm cả các loại mã độc dựa vào một số khía cạnh của hệ thống tệp để kích hoạt và tồn tại. Sau đây chúng ta sẽ xem lại một số mã độc không dùng tệp đã xuất hiện trong lịch sử.
2001-2003: Code Red và SQL Slammer
Các loại mã độc chỉ tồn tại trong bộ nhớ đã xuất hiện từ trước thế kỷ 21, nhưng chỉ tới khi sâu Code Red xuất hiện trên Internet và để lại dấu ấn năm 2001, thì thuật ngữ fileless malware mới thật sự xuất hiện. Code Red lợi dụng một lỗ hổng trong Microsoft IIS, chỉ tồn tại trong bộ nhớ của máy chủ bị lây nhiễm.
Một năm rưỡi sau đó, sâu SQL Slammer lây lan với tốc độ nhanh chóng bằng cách lợi dụng một lỗ hổng trong Microsoft SQL server. Trong bài viết năm 2003 trên ZDNet, Robert Vamosi mô tả mã độc này là “file-less” và cho rằng nó chỉ tồn tại trong bộ nhớ, giống như Code Red. Cũng trong năm 2003, nhà nghiên cứu Peter Szor, lúc đó đang làm cho Symantec, đã định nghĩa mã độc không dùng tệp trong một tài liệu đăng ký bản quyền như sau: “Mã độc không dựa trên tệp mà chỉ tồn tại trong bộ nhớ. Cụ thể hơn, mã của chúng gắn thêm bản thân nó vào một tiến trình đang hoạt động trong bộ nhớ”.
2012: Lurk - Bot cài đặt ngựa thành Troa
Năm 2012, Sergey Golovanov ở Kaspersky Labs trình bày kết quả phân tích về một loại bot không lưu bất kỳ tệp nào trên đĩa cứng: “Chúng tôi đang đối phó với một loại mã độc rất hiếm - loại được gọi là mã độc không dùng tệp, không tồn tại dạng tệp trên đĩa cứng và chỉ hoạt động trong RAM của các máy tính bị lây nhiễm”. Mã độc không được đặt tên đó lợi dụng lỗ hổng Java ở máy khách và chỉ hoạt động trong bộ nhớ của tiến trình javaw.exe bị lợi dụng. Sergey nói rằng, loại bot này có khả năng cài đặt trojan ngựa thành Troa chuyên tấn công ngân hàng - có tên là Lurk.
2014: Powerliks, Angler, Phase Bot
Đây là những chương trình độc hại chỉ tồn tại trong bộ nhớ, mà không để lại bất kỳ dấu vết nào trên hệ thống tệp. Do đó, chúng biến mất sau khi hệ thống được khởi động lại. Tuy nhiên, tới năm 2014 đã xuất hiện mã độc Poweliks, mà theo G Data mô tả là tồn tại bền vững mà không cần một tệp nào. Mã độc này lây vào hệ thống bằng cách lợi dụng một lỗ hổng của Microsoft Word. Nó dùng PowerShell và JavaScript, cùng với shellcode để khởi tạo hoạt động trong bộ nhớ.
Một tháng sau đó, nhà nghiên cứu an ninh Kafeine công bố công cụ lây nhiễm Angler với các đặc trưng không sử dụng tệp. Kiểu tấn công này nhắm tới lỗ hổng Java phía máy khách và chỉ hoạt động trong bộ nhớ của tiến trình javaw.exe bị lợi dụng.
Gần cuối năm 2014, nhà nghiên cứu an ninh của MalwareTech ghi chép về một loại rootkit không sử dụng tệp, được đặt tên là Phase Bot. Theo công bố, loại mã độc này ẩn mình bằng cách cài đặt trên các hệ thống Windows mà không ghi bất kỳ tệp nào lên đĩa và không có tiến trình riêng của nó. Phase che giấu mã lệnh có thể thay đổi địa chỉ được mã hoá trong registry và sử dụng Powershell để đọc và thực thi đoạn mã độc lập với vị trí đó trong bộ nhớ. Giống như Powerliks, loại mã độc này duy trì sự tồn tại của nó bằng cách gọi rundll32.exe từ một khoá autorun trong registry để thực thi JavaScript.
2014-2015: Duqu 2.0, Kovter
Giữa năm 2015, Kaspersky Labs công bố chi tiết về một mã độc cao cấp từng hoạt động trong khoảng 2014-2015 bằng cách sử dụng một nền tảng mã độc tinh vi được gọi là Duqu 2.0. Kiểu tấn công này lợi dụng một lỗ hổng của Windows để cài đặt mã độc ẩn (stealthy malware), chỉ tồn tại trong bộ nhớ của máy tính bị lây nhiễm. Mã độc không triển khai cơ chế nào để duy trì sự tồn tại sau khi khởi động máy. Thay vào đó, những kẻ tấn công nhắm tới những máy chủ có thời gian hoạt động liên tục cao và tìm cách tái lây nhiễm sau khi máy khởi động lại.
Một mẫu mã độc không sử dụng tệp khác thu hút sự chú ý trong năm 2015 là Kovter. Kỹ thuật lây nhiễm của Kovter gần giống với Powerliks. Tuy khởi đầu việc lây nhiễm bằng một tệp thi hành độc hại, nhưng mã độc này xoá ngay tệp đó, sau khi đã lưu các thông tin làm rối hay mã hoá trong registry. Ít nhất một trong những biến thể của nó đã duy trì sự tồn tại sau khi máy khởi động lại bằng cách sử dụng một shortcut thực thi JavaScript. Theo chuyên gia Andrew Dove của Airbus, script đó gọi PowerShell để thực thi các lệnh tải ứng dụng bình thường sau khi chèn mã độc vào ứng dụng đó.
2016: PowerSniff, PowerWare, August
Giữa năm 2016, Josh Grunzweig và Brandon Levene ở Palo Alto Networks (Mỹ) công bố về loại mã độc mà họ gọi là PowerSniff. Việc lây lan bắt đầu với một tệp Microsoft Word có chứa macro độc hại. Cơ chế hoạt động trong bộ nhớ của mã độc này giống một số khía cạnh của Kovter và liên quan đến một script PowerShell giải mã và thực thi mã độc bổ sung, chỉ nằm trong bộ nhớ. PowerSniff có khả năng lưu tạm thời một thư viện DLL xuống đĩa.
Một vài tuần sau đó, Mike Sconzo và Rico Valdez ở Carbon Black mô tả về một loại mã độc, họ gọi là PowerWare. Giống như PowerSniff, PowerWare bắt đầu quá trình lây nhiễm với một tệp Microsoft Office có chứa macro độc hại, tệp đó gọi PowerShell để tiếp tục quá trình lây nhiễm mà không ghi tệp thi hành độc hại nào trên hệ thống tệp.
Một mẫu mã độc không dùng tệp khác sử dụng macro của Microsoft Word và PowerShell được Proofpoint công bố sau đó với tên gọi August. Theo các nhà nghiên cứu, loại mã độc này tải xuống mã phá hoại dạng script PowerShell từ một website ở xa, thực thi mã trong bộ nhớ mà không lưu vào hệ thống tệp.
2017: POSHSPY và nhiều loại khác
Đầu năm 2017, Kaspersky Labs mô tả một sự cố, trong đó những kẻ phá hoại đã lưu mã độc dựa trên Meterpreter trong bộ nhớ. Thứ duy nhất có mặt trong hệ thống tệp là các tiện ích hợp phép của Windows như sc (để cài dịch vụ độc hại chạy PowerShell) và netsh (để tạo đường ống chuyển tải lưu lượng mạng độc hại). Mã độc này đã ảnh hưởng tới các tổ chức tại hơn 40 quốc gia, trong đó có hơn 100 ngân hàng và tổ chức tài chính.
Nhiều tháng sau đó, Matthew Dunwoody ở Mandiant mô tả một kiểu tấn công tinh vi khác liên quan đến mã độc không sử dụng tệp. Được đặt tên là POSHSPY, mã độc này dùng tính năng Windows Management Instrumentation (WMI) của hệ điều hành để duy trì sự tồn tại và dùng PowerShell để thực hiện các hành vi phá hoại. Mã độc này có khả năng tải xuống các tệp thi hành và lưu vào hệ thống tệp. Matthew kết luận rằng: Bằng cách “sống ngoài mặt đất” (“living-off-the-land”), mã độc này tạo ra một cửa hậu cực kỳ độc đáo bên cạnh các loại cửa hậu truyền thống để đảm bảo khả năng tồn tại cả sau khi đã bị xử lý.
Làm thế nào để ngăn ngừa các loại mã độc không dùng tệp?
Từ một kỹ thuật nguy hiểm hiếm gặp, mã độc không dùng tệp đã trở nên khá phổ biến. Một phần ba trong số các tổ chức trả lời khảo sát SANS 2017 Threat Landscape cho biết, họ đã đối mặt với các cuộc tấn công không dùng tệp.Vậy phải đối phó với chúng như thế nào? Việc phân biệt những lần sử dụng PowerShell hợp lệ với những hoạt động của mã độc là rất khó khăn. Những người quản trị hệ thống sử dụng PowerShell cho rất nhiều tác vụ hàng ngày khác nhau nên việc sử dụng PowerShell không phải là một dấu hiệu báo động. Do PowerShell được sử dụng quá thường xuyên, nên các chuyên gia an ninh không đủ thời gian rà soát log, xác định các hành vi đáng nghi và điều tra kỹ.
Hơn nữa, một số tính năng của PowerShell khiến chúng ta rất khó biết khi nào kẻ xấu sử dụng công cụ này. Chẳng hạn như, PowerShell 2, một phiên bản khá phổ biến, sinh nhật ký ghi lại thời điểm PowerShell khởi động và dừng lại, nhưng không cung cấp những thông tin chi tiết hơn. Và như vậy những thông tin đó không thể dùng để phân tích, xác định liệu mã độc có thực thi hay không. Trong PowerShell 3, Microsoft bổ sung tuỳ chọn ghi nhật ký thủ công, cho phép các chuyên gia và các sản phẩm an ninh xác định các script đã được gọi và các tham số đã được truyền cho chúng. Tuy nhiên, việc ghi nhật ký của PowerShell 3 vẫn có những hạn chế: các chuyên gia và sản phẩm an ninh không thể xử lý nổi khối lượng dữ liệu mà nó tạo ra. PowerShell 5 bao gồm những cải tiến nghiêm túc nhưng những tính năng đó lại không được bật theo mặc định và những kẻ tấn công có thể tránh được những tính năng đó bằng cách hạ bậc (downgrading) xuống phiên bản 2.
Một nhầm lẫn phổ biến là quan điểm cho rằng vô hiệu PowerShell sẽ giúp ngăn chặn các cuộc tấn công của mã độc không dùng tệp. Cách làm đó chỉ khiến công việc của các chuyên gia CNTT trở nên khó khăn hơn. Microsoft đã khiến cho PowerShell trở nên gần như không thể thiếu cho việc sử dụng bất kỳ sản phẩm nào của họ. Chẳng hạn như bắt đầu từ Exchange 2007, Microsoft thiết kế giao diện đồ hoạ chỉ cho phép người dùng thực hiện những chức năng quản trị cơ bản. Các chức năng khác không thể được thực hiện nếu thiếu PowerShell. Thêm nữa, tất cả các sản phẩm của Microsoft đều sử dụng PowerShell. Nếu người quản trị sử dụng thành thạo PowerShell, thì họ có thể quản lý phần lớn các sản phẩm mới hơn của Microsoft. Cấm sử dụng PowerShell sẽ hạn chế rất lớn khả năng của bộ phận quản trị hệ thống.
Cách tốt nhất để xác định những lúc PowerShell bị mã độc lợi dụng là phân tích hành vi, tìm kiếm những dấu hiệu như gọi PowerShell thực thi các lệnh mã hoá, từ đó điều tra sâu hơn từng trường hợp cụ thể.
Tương tự, WMI không thể gỡ, nhưng có thể được vô hiệu. Tuy nhiên, điều đó sẽ hạn chế rất nhiều công việc của những người quản trị, chẳng hạn như không thể cập nhật phần mềm trên nhiều máy tính.
Khi không thể vô hiệu PowerShell và WMI, các biện pháp để đối phó với mã độc không sử dụng tệp là áp dụng những bản vá mới nhất, triển khai nguyên tắc quyền tối thiểu và cung cấp những môi trường cô lập (sandbox) cho người dùng. Người dùng cũng có thể và nên sử dụng những sản phẩm an ninh tốt để dò quét bộ nhớ máy tính, chặn các trang web độc hại thường dùng để phát tán mã độc.
Nguyễn Anh Tuấn
Tổng hợp