2. CHƯƠNG 2: CÁC KỸ THUẬT VƯỢT QUA CÁC CHƯƠNG TRÌNH
2.1.3. Đóng gói (Packing)
Đóng gói là một kỹ thuật thường hay được sử dụng để gây rối của các mã độc. Đây là một kỹ thuật sử dụng các phương pháp mã hóa và nén. Tuy nhiên, phương pháp này không chỉ tiến hành gây rối nội dung đoạn mã mà còn gây rối trên các thành phần khác của tập tin thực thi (như là section data …). Qua đó, phương pháp này gây ra nhiều khó khăn hơn trong việc phát hiện mã độc.
Theo [12], hơn 80% các loại mã độc xuất hiện sử dụng các kỹ thuật đóng gói. Hơn nữa, có nhiều thông tin khẳng định có hơn 50% mã độc mới chỉ đơn giản là đóng gói lại các biến thể mã độc cũ. Hình 2.4 mô tả tỷ lệ mã độc sử dụng các kỹ thuật đóng gói hiện nay [12]:
Hình 2.4: Tỷ lệ mã độc được đóng gói hiện nay
Hiện nay có nhiều phương pháp đóng gói khác nhau. Nội dung của các phương pháp đóng gói như sau:
- Phương pháp đóng gói truyền thống
Mã độc sử dụng phương pháp này sẽ tiến hành chuyển đoạn mã thực thi vào đoạn mã dữ liệu. Trong quá trình chuyển, đoạn mã cũng sẽ được nén hoặc mã hóa, làm khó khăn cho các chuyên gia trong việc phân tích tĩnh. Vì để phân tích tĩnh thì bước đầu tiên là cần phải giải nén hoặc giải mã.
Khi mã độc được kích hoạt và thực thi, các đoạn mã ẩn được giải nén hoặc giải mã để có thể thực thi và tiến hành các hành vi gây hại.
Có nhiều thuật toán nén hoặc mã hóa mà mã độc sử dụng. Một số thuật toán đơn giản chỉ là sử dụng một số câu lệnh như lệnh mã máy như lệnh: XOR, SUB, ADD, INC….
Nội dung phương pháp này được thể hiện qua Hình 2.5:
Hình 2.5: Phương pháp đóng gói truyền thống
Mã độc được đóng gói Mã độc không được đóng gói 20%
Cũng giống như phương pháp nén và mã hóa, mã độc có thể tiến hành đóng gói nhiều lần để gia tăng độ phức tạp và gây khó khăn trong việc phát hiện mã độc. Cấu trúc tập tin thực thi của mã độc khi đó cũng sẽ thay đổi, nhưng vẫn theo chuẩn của hệ điều hành Window. Hình 2.6 mô tả chi tiết cấu trúc tập tin của mã độc sau khi được đóng gói:
Hình 2.6: Cấu trúc tập tin được đóng gói
Nội dung tập tin của mã độc sẽ thay đổi khi được thực thi. Hình 2.7 mô tả chi tiết quá trình giải mã khi mã khi mã độc được thực thi:
Khi đó nội dung mã độc thay đổi, mã độc có thể thực thi đoạn mã gốc để thực hiện các hành vi gây hại của mã độc. Hình 2.8 mô tả nội dung mã độc trên bộ nhớ thực thi sau khi được giải mã:
Hình 2.8: Hình dạng mã độc sau khi được giải mã
Hiện nay có rất nhiều các công cụ đóng gói được sử dụng như là: UPX, FSG, ASPack, Morphine, Exestealph, Pecompact, Yodacrypt, MEW, Packman, Upack, RLPack, Icrypt, EXE Smasher, Themida …Ngoài ra còn có rất nhiều các công cụ đóng gói do những người lập trình mã độc tạo ra để vượt qua các chương trình diệt mã độc hiện nay.
- Phương pháp Shifting Decode Frame
Khác với phương pháp đóng gói truyền thống. Mã độc được đóng gói bằng phương pháp này, khi được thực thi trên bộ nhớ sẽ không tiến hành giải mã toàn bộ đoạn mã thực thi mà chỉ giải mã những đoạn mã cần thiết và tiến hành mã hóa ngay khi thực thi xong đoạn mã đó. Mô phỏng phương pháp này được thể hiện trong Hình 2.9:
Bằng cách chỉ giải mã một phần và tiến hành mã hóa ngay khi thực hiện xong các đoạn mã. Mã độc sử dụng phương pháp đóng gói này sẽ làm cho các chương trình phát hiện mã độc không thể nhận diện được. Mặt khác, mã độc sử
dụng phương pháp này còn gây ra rất nhiều khó khăn cho các chuyên gia phân tích mã độc để xác định đầy đủ các hành vi của mã độc.
Hình 2.9: Kỹ thuật gây rối Shifting Decode Frame
- Phương pháp ảo hóa chỉ lệnh và và mô phỏng mã độc (instruction Virtualization and Malware Emulators)
Đây là phương pháp khó thực hiện nhất và được sử dụng trong một số ít các mã độc. Phương pháp này đóng gói và sử dụng một trình giả lập. Trong phương pháp này, các đoạn mã gốc được đóng gói vào một “byte-code”, sau đó được mô phỏng bởi mã độc khi mã độc được thực thi. Nội dung phương pháp này được thể hiện qua Hình 2.10:
Sử dụng phương pháp đóng gói này, các đoạn mã gốc không bao giờ được tiết lộ. Qua đó, mã độc đã thay đổi được hình dạng nhưng gây rất nhiều khó khăn cho các chuyên gia phân tích mã độc.
Trên thực tế, kỹ thuật đóng gói không chỉ được sử dụng bởi những người lập trình mã độc mà còn được sử dụng bởi những lập trình viên phần mềm. Kỹ thuật đóng gói được sử dụng với mục đích khác là bảo vệ phần mềm khỏi những hình thức tấn công như là: bẻ khóa, dịch ngược phần mềm …