Ngày nay, hầu hết các thông tin, dữ liệu của các cá nhân, tổ chức đều được lưu trữ trên máy vi tính. Mặc dù những thông tin, dữ liệu này đã được mã hóa với độ bảo mật cao, tuy nhiên vẫn có nhiều phương pháp, cách thức để tin tặc có thể lợi dụng nhằm mục đích đánh cắp thông tin của các cá nhân, tổ chức đó. Một trong những phương pháp phổ biến hiện nay đó là sử dụng mã độc (malware) [1].
Mã độc đa phần đều có thể bị phát hiện và tiêu diệt bởi phần mềm phòng chống mã độc và các công cụ kiểm tra an toàn thông tin. Những loại mã độc đó được gọi là mã độc đơn hình. Để có thể vượt qua được các phần mềm phòng chống mã độc thì mã độc trở nên càng ngày càng phức tạp, tinh vi hơn từ cách thức lây nhiễm, phương pháp ẩn mình và hành vi trên máy người dùng,… Những mã độc như vậy được gọi là mã độc đa hình.
Mã độc đa hình (polymorphic malware) khác với các mã độc thông thường ở chỗ nó có khả năng tự biến đổi bản thân thành nhiều dạng khác nhau [2]. Trong suốt qua trình tấn công, lây lan hay kết nối với máy chủ C&C của các tin tặc, mã độc đơn hình chỉ sử dụng duy nhất một biến thể. Khác với mã độc đơn hình, mã độc đa hình bằng các kỹ thuật khác nhau như mã hóa, thay thế các lệnh, hoán vị lệnh, chèn các lệnh vô nghĩa,… để tạo ra các biến thể khác nhau sau mỗi lần lây nhiễm hay sau một khoảng thời gian nhất định. Sau khi sinh ra phiên bản mới, chúng còn có khả năng tự xóa phiên bản trước đó để tránh bị các chương trình phòng chống mã độc hay các chuyên gia phân tích phát hiện, làm tăng khả năng hay thời gian sống sót của chúng. Do mã độc đa hình có thể liên tục biến đổi mã lệnh, nên khó có thể tìm được đoạn mã đặc trưng của nó, và do đó khó phát hiện bằng phương pháp so sánh mã truyền thống.
Mã độc đa hình đang được các tin tặc sử dụng ngày càng nhiều vì tính đa hình của nó. Chính tính năng này của mã độc có thể giúp nó vượt qua được một số phần mềm phòng chống mã độc thông thường hoặc cũng có thể kéo dài thời gian sống hơn khi mã độc bị phân tích bởi các chuyên gia phân tích mã độc.
Mã độc đa hình tồn tại ở nhiều dạng khác nhau, ví dụ như virus, bot, trojan, worm và keylogger. Bất kể tồn tại ở dạng nào đều làm cho mã độc này trở nên nguy hiểm vì sự phức tạp và tốc độ của nó. Mã độc đa hình sử dụng mã đa hình để thay đổi nhanh chóng, trong khoảng thời gian nhất định, hoặc mỗi khi lây lan sang máy khác sẽ sinh ra một biến thể khác so với ban đầu. Hiện nay, các công ty cung cấp phần mềm chống mã độc sử dụng các phương pháp phát hiện dựa trên dấu hiệu truyền thống để phát hiện và ngăn chặn mã độc, điều đó có nghĩa là vào thời điểm phần mềm phòng chống mã độc xác định được dấu hiệu, thì mã độc đa hình đã phát triển thành một thứ gì đó mới. Do đó, hầu hết các giải pháp bảo mật đơn giản là không thể theo kịp hoặc không thể phát hiện ra những mối đe dọa này.
CÁC PHƯƠNG PHÁP ĐA HÌNH CỦA MÃ ĐỘC
Để có thể tự biến đổi mã lệnh, các mã độc đa hình áp dụng rất nhiều kỹ thuật khác nhau. Dưới đây là một số kỹ thuật thường gặp [3]:
Mã hoá: Một mã độc đa hình có thể mã hoá chính mã lệnh của nó bằng cách sử dụng một giải thuật mã hoá nào đó. Giải thuật mã hoá thường khá đơn giản vì mục đích của quá trình này không phải để giữ bí mật mà là để biến đổi mã lệnh (giải thuật càng đơn giản thì tốc độ mã hoá càng nhanh).
Hoán vị: Một kỹ thuật khác để tạo ra các bản sao của mã độc mới là hoán vị ngẫu nhiên các module trong mã lệnh của mã độc [4]. Để có thể đổi chỗ các module mà không làm thay đổi tác dụng của chúng, mã lệnh của mã độc phải có khả năng định vị lại chương trình trong bộ nhớ, hoạt động của các module phải độc lập với vị trí, và sử dụng các địa chỉ tương đối thay thế cho địa chỉ tuyệt đối.
Thay đổi mã lệnh: Nguyên tắc cơ bản của thay đổi mã lệnh là phải biến đoạn mã ban đầu thành một đoạn mã khác, mà công dụng của nó vẫn giữ nguyên [5]. Các phương pháp thay đổi mã lệnh hay được các tin tặc dùng bao gồm:
• Chèn lệnh: Chèn các lệnh vô nghĩa vào trong mã;
• Thay đổi thanh ghi: Sử dụng thanh ghi khác mã không làm thay đổi chức năng của đoạn mã đó;
• Thêm biến: Cũng giống với chèn lệnh, việc thêm nhiều biến sẽ không làm ảnh hưởng đến code ban đầu của mã độc và sẽ gây khó khăn cho các chuyên gia phân tích mã độc;
• Thay thế lệnh: Sử dụng các đoạn mã tương đương để thay thế trong các biến thể của mã độc;
• Kết hợp nhiều kỹ thuật nguỵ trang: Phương pháp này có thể bù trừ được các ưu nhược điểm của các phương pháp trên.
MÃ ĐỘC ĐA HÌNH VIRLOCK
Virlock là một mã độc đa hình thuộc dạng mã độc tống tiền, lây nhiễm tệp tin lần đầu tiên được phát hiện vào năm 2014. Vào những năm trở lại đây, nó đã chứng minh khả năng mới cho phép lây lan qua các ứng dụng được chia sẻ và lưu trữ đám mây và hiện nay, mã độc này vẫn được tin tặc sử dụng. Với mỗi lần xuất hiện, Virlock lại thể hiện các khả năng mới, cho thấy rằng mã độc này đang được tin tặc tích cực phát triển và cập nhật. Với các cuộc tấn công mã độc tống tiền gây thiệt hại cho các cá nhân, tổ chức khoảng 13.000 - 15.000 USD cho mỗi sự cố, Virlock là một mối đe dọa mà các doanh nghiệp không thể bỏ qua.
Khi được thực thi, Virlock sẽ đa hình thành ba phiên bản khác nhau từ phiên bản gốc [6]. Một phiên bản thực hiện việc lây nhiễm tệp, một phiên bản khác khóa máy và phiên bản thứ ba tìm cách vượt qua các phần mềm diệt mã độc bằng cách đăng ký như là một dịch vụ trong máy tính nạn nhân. Mã độc Virlock lây lan rất nhanh qua các biến thể của nó, tin tặc sẽ yêu cầu thanh toán bằng bitcoin hoặc các loại tiền ảo khác nếu nạn nhân muốn các dữ liệu của họ được mở khóa.
Khi đã bị lây nhiễm, mã độc sẽ tìm các tệp trong máy nạn nhân có đuôi như:
• Tệp thực thi (*.exe);
• Tệp tài liệu (*.doc, *.xls, *.pdf, *.ppt, *.mdb);
• Tệp lưu trữ (*.zip, *.rar);
• Tệp âm thanh/video (*.mp3, *.mpg, *.wma);
• Tệp hình ảnh (*.png, *.gif, *.bmp, *.jpg, *.jpeg, *.psd).
Khi mã độc tìm thấy các tệp có đuôi như trên, nó sẽ mã hóa các tệp đó, nhúng nó vào bên trong phần thân của mã độc và thêm đuôi .rsrc vào tệp bị nhiễm. Những tệp này sẽ được ngụy trang giống như tệp ban đầu khi chưa bị mã hóa nhằm đánh lừa nạn nhân.
Trong quá trình phân tích mã độc đa hình Virlock, nếu không nắm chắc về mã độc thì sẽ không thể phân tích, vì mã độc Virlock được trang bị chức năng chống debug phức tạp. Mã độc Virlock được đóng gói bằng trình đóng gói do tin tặc tùy chỉnh sử dụng các lệnh gọi API ngẫu nhiên. Nó liên tục thay đổi trình đóng gói để tránh việc bị phát hiện. Điều này khiến các chuyên gia phân tích mã độc khó phát hiện hơn khi mã thay đổi mỗi lần chạy [7].
Trong quá trình thực thi, mã độc đa hình Virlock sẽ tạo và sửa đổi các mục bên trong Registry để tránh việc bị phát hiện và đảm bảo quá trình thực thi đó. Mã độc sẽ khóa màn hình của máy nạn nhân, vô hiệu hóa file Explore.exe và ngăn việc sử dụng file taskmgr.exe. Trong khi đó, nó cũng kiểm tra vị trí của hệ thống bị ảnh hưởng để hiển thị hình ảnh thích hợp cho thông báo đòi tiền chuộc.
Virlock là một trong những mã độc đa hình rất nguy hiểm bởi khả năng ngụy trang và lẩn trốn của nó đối với các nhà phân tích mã độc và các chương trình phòng chống mã độc hiện nay. Để có thể phát hiện và ngăn chặn mã độc Virlock, hiện nay các công ty phát triển chương trình diệt virus đều đã tích hợp AI nhằm tăng khả năng phát hiện và tiêu diệt mã độc. Ngoài ra, vẫn có thể dùng một số phương pháp khác để có thể phát hiện được mã độc đa hình như [8]:
Checksummer: Kỹ thuật phát hiện đối tượng mã độc trên cơ sở tính toàn vẹn của chương trình. Mỗi chương trình sau khi được xác định chắc chắn là mã độc sẽ được sử dụng để tạo ra mẫu mã hash (MD5, SHA, CRC…) tương ứng với loại mã độc đó. Do tính chất của mã hash nên một loại mã độc chỉ tương ứng với một mã hash nhận dạng (Xác suất trùng lặp là rất thấp). Sau đó, cập nhật mẫu đó vào cơ sở dữ liệu của chương trình diệt mã độc. Khi chương trình diệt mã độc quét tập tin để kiểm tra, nếu trùng mã hash trong cơ sở dữ liệu mẫu thì đó là mã độc, ngược lại là không;
Fuzzy Hashing: Để cải tiến nhược điểm dựa vào mã hash của kỹ thuật Checksummer, các nhà khoa học đã tìm ra một kỹ thuật khác có tên là Fuzzy Hashing [9]. Kỹ thuật mới này về cơ bản vẫn là nhận dạng chương trình mã độc qua mã hash nhưng đã được bổ sung thêm các phân tích và tính toán để từ một mã hash của mã độc, có thể nhận ra các mã hash “họ hàng”, nâng cao khả năng phát hiện chương trình mã độc.
Scan String: Scan string là cách đơn giản để phát hiện mã độc. Kỹ thuật này sử dụng một chuỗi trích ngang (chuỗi byte) là đặc trưng của tập tin mã độc và không tồn tại trong các tập tin sạch. Các chuỗi này sẽ được cập nhật vào cơ sở dữ liệu mẫu dùng để nhận dạng mã độc.
Code Emulation: Code Emulation là một kỹ thuật phát hiện mã độc được đánh giá cao. Bằng việc mô phỏng lại hệ thống CPU, hệ thống quản lý bộ nhớ, các chỉ thị máy ở cấp thấp… giống như máy quét thực tế [10]. Vì vậy, mã độc sẽ hoạt động trên máy ảo mà không ảnh hưởng đến bộ xử lý thật. Hiện nay, kỹ thuật này được sử dụng kết hợp rộng rãi với các kỹ thuật phân tích khác. Cùng với đó, kỹ thuật này đã trở thành một thành phần quan trọng trong công nghệ Sandbox để phát hiện mã độc.
KẾT LUẬN
Ngày nay, tin tặc sử dụng rất nhiều phương pháp khác nhau để đa hình cho mã độc nhằm mục đích qua mặt được các phần mềm phòng chống mã độc và công cụ kiểm tra ATTT. Mặc dù mã độc đa hình ưu việt hơn so với mã độc thông thường, tuy nhiên các phần mềm phòng chống mã độc hiện nay cũng được trang bị những phương pháp mới, hiện đại, thông minh hơn nhằm phát hiện ra các hành vi mà mã độc đa hình thực hiện trên máy người dùng. Chính vì vậy, trong thời gian tới, mã độc đa hình sẽ được các tin tặc phát triển thêm các tính năng, bổ sung các phương pháp để có thể giúp mã độc vượt qua được các phần mềm phòng chống mã độc và công cụ kiểm tra ATTT. Một số phương pháp có thể được các tin tặc sử dụng như biến mã độc đa hình thành mã độc siêu hình, bổ sung khả năng chống dịch ngược cho mã độc, sinh biến thể mã độc mới bằng nhiều cách khác nhau,… Đây sẽ là bài toán khó cho các nhà phát triển phần mềm phòng chống và các chuyên gia phân tích mã độc trong tương lai.