Đặc điểm của virus siêu đa hình
Virus siêu đa hình không có bộ giải mã và cũng không thực hiện “bung” gói giống như virus đa hình, tuy nhiên, chúng có thể tạo một thế hệ virus mới với các đặc điểm khác biệt. Chúng không sử dụng phần dữ liệu riêng (dùng cho các chuỗi bất biến) mà sử dụng một phần Single- code chứa toàn bộ mã và dữ liệu trong quá trình nhân bản. Có thể thấy rằng, không có dữ liệu cố định nào tồn tại giữa các thế hệ của virus siêu đa hình khi nhân bản.
Để tránh sự phát hiện, virus siêu đa hình được trang bị những kỹ thuật khác nhau để “tiến hóa” mã của chúng thành thế hệ virus mới có mã khác hoàn toàn nhưng chức năng thì vẫn không thay đổi.
Các kỹ thuật tạo virus siêu đa hình
Một số kỹ thuật cơ bản được sử dụng để tạo ra virus siêu đa hình được mô tả sau đây:
Kỹ thuật chèn mã rác: Là kỹ thuật đơn giản, sử dụng nhiều virus đa hình và siêu đa hình để tiến hóa mã. Ý tưởng của kỹ thuật này là chèn thêm các mã mới vào, làm cho đoạn mã khác đi so với ban đầu để không thể tìm ra được các đoạn mã hexa khả dụng. Các mã đã chèn vào được gọi là mã rác, vì chúng không làm ảnh hưởng đến chức năng của toàn bộ đoạn mã.
Hoán đổi thanh ghi sử dụng: Phương pháp này có trong virus Win95/Regswap, được tạo bởi Vecna vào năm 1998. Các thế hệ khác nhau của virus sẽ sử dụng cùng mã nhưng các thanh ghi lại khác nhau.
Kỹ thuật hoán vị: Virus Win32/Ghost và Win95/Zperm thể hiện một mức độ mới của virus siêu đa hình. Mặc dù mã của virus không thay đổi, nhưng sự “đa hình” được thực hiện bằng cách chia mã thành các frame, định vị các frame một cách ngẫu nhiên và thực hiện kết nối chúng bằng các lệnh rẽ nhánh để duy trì dòng tiến trình.
Virus Win32/Ghost có khả năng thay đổi thứ tự của các chương trình con từ thế hệ này sang thế hệ khác. Nếu số chương trình con là n thì số lượng các biến thể virus có thể tạo ra sẽ là n!. Win32/Ghost có 10 chương trình con vì vậy nó có thể tạo ra 3.628.800 biến thể khác nhau.
Chèn vào các lệnh nhảy: Win95/Zperm la loại virus sử dụng kỹ thuật này. Virus thực hiện chèn và bỏ các lệnh Jump ở trong mã và mỗi một lệnh Jump sẽ trỏ đến một lệnh mới của Virus. Virus Zperm không tạo ra một đoạn mã cố định ở bất cứ đâu, thậm chí cả ở trong bộ nhớ, do vậy việc sử dụng kỹ thuật tìm kiếm chuỗi để phát hiện loại virus này là gần như không thể thực hiện được.
Thay thế lệnh: Virus Win95/Zperm có khả năng thực hiện lệnh thay thế, ví dụ, Virus có thể thay thế lệnh “Xor eax, eax” bằng lệnh “Sub eax, eax”.
Cả hai lệnh đều thực hiện cùng chức năng là xóa sạch nội dung của thanh ghi eax, tuy nhiên giá trị Opcode khác nhau (việc biểu diễn lệnh ở hệ thập phân - hexa decimal - của lệnh là khác nhau).
Các ví dụ khác của việc thay thế lệnh trong virus Win95/Zmist là: Đảo ngược các điều kiện rẽ nhánh; Thanh ghi di chuyển thay thế bởi lệnh push/pop tuần tự; Thay thế mã hóa opcode; Hoán chuyển sử dụng xor/sub và or/test.
Hoán vị mã: Virus Win95/Bistro không chỉ tự biến đổi nó trong thế hệ mới, mà còn thay đổi cả mã của nó khi nhiễm. Với cách này, virus có thể tạo ra thế hệ virus và sâu mới. Để làm được điều này, virus sử dụng các mã thực thi ngẫu nhiên đa hình, đồng thời do các điểm nhiễm vào ứng dụng có thể khác nhau nên việc diệt virus không thể thực hiện triệt để. Việc hoán vị mã của của các loại sâu và virus thực hiện như virus Bistro rất khó để phát hiện và tiêu diệt hoàn toàn.
Tích hợp mã: Virus Win95//Zmist sử dụng kỹ thuật tinh vi hơn, gọi là tích hợp mã (code integration). Virus Zmists có thể dịch ngược các file thực thi thành các thành phần nhỏ nhất, sau đó chuyển các khối mã, tự chèn vào các đoạn mã đích, tái tạo mã và các tham chiếu dữ liệu, rồi biên dịch thành các file thực thi.
Các kỹ thuật để phát hiện Virus siêu đa hình
Việc phát hiện virus siêu đa hình bằng cách sử dụng phương pháp tìm kiếm các chuỗi là gần như không thể thực hiện được. Để phát hiện người ta thường sử dụng các kỹ thuật như xem xét các cấu trúc file hay phân tích hoạt động của mã. Một số kỹ thuật phát hiện được mô tả như sau:
Phát hiện hình học: là dựa trên sự biến đổi mà virus đã thực hiện trên các cấu trúc file. Phát hiện hình học được sử dụng để phát hiện Win95/Zmist, bởi vì đoạn dữ liệu của file được tăng lên ít nhất 32kb khi nó bị nhiễm bởi phiên bản được mã hóa của virus này. Tuy nhiên, phương pháp này có thể gây ra nhiều sai sót.
Quét chuỗi ký tự đại diện và half-byte: Các virus siêu đa hình đơn giản thường sử dụng hoán đổi thanh ghi và thay thế lệnh, do đó, chúng có thể bị phát hiện bởi việc quét các chuỗi đại diện và half- byte. Ví dụ, trong Win95/Regswap tồn tại rất nhiều các Opcode phổ biến, không đổi ở tất cả các thế hệ virus của nó. Điều đó dẫn đến việc trích ra các chuỗi tìm kiếm khả dụng sử dụng các ký tự đại diện có thể xảy ra. Nếu bộ quét hỗ trợ điều đó, việc phát hiện half- byte có thể thích hợp cho file đã bị nhiễm.
Phân rã mã (code disassembling): có nghĩa là chia nhỏ luồng thành các lệnh riêng rẽ. Phương pháp này thuận lợi cho việc phát hiện các virus sử dụng kỹ thuật chèn mã rác vào giữa các mã của nó. Phân rã mã rất hiệu quả khi được kết hợp với một máy trạng thái, vì máy trạng thái có thể ghi lại trình tự trong đó các lệnh quan trọng được phát hiện.
Máy trạng thái là mô hình gồm hành vi được tạo từ lượng hữu hạn các trạng thái, các chuyển tiếp giữa các trạng thái và các hành vi. Máy trạng thái hoạt động hiệu quả khi nó được kết hợp với một bộ giả lập sử dụng trong việc phát hiện các loại virus khác nhau như Win95/Zmist hay Win 95/Puro dựa trên một phương tiện gọi là “Lexotan”.
Sử dụng các bộ giả lập: Giả lập đoạn mã thực thi cần thiết lập một máy ảo để mô phỏng hệ thống quản lý bộ nhớ và CPU, chạy các mã độc hại bên trong máy ảo đó. Mã độc hại không thể thoát khỏi máy ảo. Các chương trình quét diệt virus có thể chạy đoạn mã trong một bộ giả lập, sau đó kiểm tra định kỳ để tìm và phát hiện các lệnh quan trọng của virus. Một số kỹ thuật giả lập như sau:
- Sử dụng bộ giả lập dựa trên kỹ thuật heuristics: Phát hiện dựa trên kỹ thuật heuristics không nhận diện virus một cách rõ rệt nhưng chỉ ra được các đặc trưng và phát hiện các lớp của virus máy tính một cách tổng quát. Công cụ heuristics có thể dò tìm dấu vết các lệnh ngắt và thực thi ở mức sâu hơn thông qua việc sử dụng một máy ảo mô phỏng hệ điều hành.
Các hệ thống như vậy thậm chí có thể tái lập các virus trong hệ thống file ảo của máy ảo. Một số sản phẩm antivirus triển khai các hệ thống như vậy rất hiệu quả và cho ít cảnh báo sai. Kỹ thuật này yêu cầu việc mô phỏng hệ thống file. Ví dụ, bất kỳ khi nào một file mới được mở bởi các virus giả lập, một tệp tin ảo được chỉ tới nó. Sau đó, virus giả lập có thể làm lây nhiễm file ảo trong hệ thống ảo mà hiện tại nó đang lưu trú. Hai vấn đề lớn nhất ở đây là rất khó để giả lập hệ thống đa luồng và hiệu suất hệ thống giả lập thấp.
- Phát hiện các vòng lặp giả: Việc chống lại kỹ thuật tạo bộ giả lập xuất hiện trong một phiên bản cải tiến của Virus Bistro (được phát hành sau vài phiên bản so với phiên bản gốc). Kỹ thuật này được gọi là chèn mã ngẫu nhiên, chèn thêm các dòng lệnh rác và các vòng lặp giả một cách ngẫu nhiên trước khi giải mã. Điều này làm cho một số bộ giả lập mô phỏng hàng triệu các dòng lệnh rác và không thể dựng lại một virus thực sự nên việc phát hiện virus là không thể thực hiện được.
- Phát hiện việc giải mã ngăn xếp: Các biến thể khác nhau của virus Zmorph đưa vào file bị nhiễm một phần mã đa hình, sau đó chúng giải mã virus theo từng lệnh và tái lập lại nó bằng cách đẩy kết quả vào bộ nhớ ngăn xếp.
Nếu bộ giả lập không có khả năng phát hiện giải mã ngăn xếp thì những virus như thế sẽ bị bỏ sót. Bộ nhớ bị các virus này truy nhập có thể bị kiểm soát, giám sát bởi một bộ giả lập và khi lệnh điều khiển được truyền tới bộ nhớ ngăn xếp, mô hình này sẽ phát hiện nó và kết xuất toàn bộ đoạn mã virus được giải mã để nhận dạng. Hạn chế của kỹ thuật này là nó có tác động đáng kể tới hiệu suất của máy quét.
Phát hiện sự biến đổi mã: Sự biến đổi mã được dùng để biến đổi các dòng lệnh hoán vị sang dạng đơn giản, khi mà sự kết hợp các dòng lệnh được chuyển đổi thành dạng tương đương nhưng đơn giản hơn. Sau khi chuyển đổi, mã phổ biến được thể hiện bởi các virus có thể được nhận dạng. Virus đa hình đầu tiên sử dụng kỹ thuật này là Win32/Simile.
Kỹ thuật này bao gồm việc chuyển đổi mã virus về dạng nguyên thủy tương đồng với thế hệ đầu tiên. Tuy nhiên, để có thể đảm bảo việc phát hiện hoàn toàn mà không ảnh hưởng đến tốc độ quét, môđun chuyển đổi mã phải được tối ưu hóa và linh hoạt. Vị trí của virus có thể được chuyển đổi tới nơi mẫu quét được lưu trữ, điều đó sẽ làm giảm tác động lên hiệu suất của máy quét.
Phát hiện hoán vị chương trình con: được sử dụng để phát hiện các virus có sử dụng hoán vị mã của chúng thành dạng mới. Như miêu tả ở trên, việc biến hình đạt được nhờ việc chia nhỏ mã thành các frames và sau đó đặt vị trí các frames này một cách ngẫu nhiên và liên kết chúng bởi các lệnh nhánh để duy trì luồng tiến trình.
Virus Zperm sử dụng công cụ hoán vị thực (Real Permutation Engine - RPME) phức tạp để biến đổi mã của nó. Để phát hiện virus này, máy quét phải thực hiện giả lập từng phần để xây dựng lại mã virus từ dạng nguyên gốc trước khi hoán vị. Giả lập từng phần có nghĩa là mô phỏng các lệnh nhánh như bước nhảy. Quyết định khi nào dừng giải mã là vấn đề của kỹ thuật này. Cũng như vậy, việc đảm bảo rằng mã virus đã được phát hiện đầy đủ cũng là một vấn đề rất khó. Bên cạnh việc tái tạo lại mã virus, kỹ thuật này cũng có hiệu quả cho việc xóa các lệnh rác.
Kết luận
Virus siêu đa hình sử dụng nhiều kỹ thuật phức tạp như chèn mã rác, thay thế lệnh, hoán vị mã và tích hợp mã. Việc phát hiện virus siêu đa hình luôn là vấn đề khó và để phát hiện chúng một cách toàn diện, các chu trình phát hiện phải được viết sao cho có thể tạo ra chỉ dẫn cần thiết về tập hợp nhóm virus từ cách thức thực tế của việc xâm nhiễm. Có nhiều kỹ thuật phát hiện virus siêu đa hình đã được sử dụng như phát hiện hình học, phân rã mã, phát hiện hoán vị chương trình con... tuy nhiên chưa có kỹ thuật nào phát hiện một cách toàn diện. Do vậy, việc tìm các phương pháp mới để phát hiện Virus siêu đa hình là vấn đề cần được quan tâm nghiên cứu.