## Lý Thuyết quá trình unpack mã độc Ngày nay, mã độc thường được thiết kế phức tạp và tinh vi hơn rất nhiều, nhằm lẩn tránh các biện pháp bảo mật truyền thống. Các tác giả mã độc sử dụng nhiều kỹ thuật khác nhau, chẳng hạn như sử dụng packer để nén và mã hóa mã nguồn, hay áp dụng các phương pháp mã hóa động để tránh bị phát hiện bởi các phần mềm diệt virus. ### Các Loại Packer Hiện Nay - **Packer miễn phí:** Dễ sử dụng nhất, thường được tạo ra trong các dự án nghiên cứu hoặc vì sở thích cá nhân, thường dùng để pack các mã độc kém phức tạp hơn. - **Ví dụ:** UPX, nPACK, MEW, PolyCryptor, MPRESS, PE Protector - **Packer thông thường:** Được tạo ra đặc biệt để làm khó khăn cho việc phân tích mã độc và tránh sự phát hiện của các phần mềm AV. Thường là những packer tùy chỉnh cho một nhóm cụ thể hoặc được bán trên các thị trường đen. - **Ví dụ:** Warzone Crypter, Yakuza Crypter, Atilla Crypter, Spartan Crypter, Aspire Crypt, Emotet, Dridex, ISFB, Trickbot, ... - **Packer thương mại:** Khó sử dụng hơn, thường được dùng để bảo vệ phần mềm hợp pháp, đặc biệt là các phần mềm có giấy phép. Đôi khi cũng được sử dụng để bảo vệ mã độc, nhưng không phổ biến trừ khi đã bị crack. - **Ví dụ:** VMProtect, Themida, Obsidium, Armadillo, ASPack, PELock ### Các Dấu Hiệu Nhận Biết - **Signatures:** Các công cụ như PEID hoặc YaraScan có thể nhận diện các chữ ký đặc trưng của packer và phát hiện mã độc dựa trên các quy tắc xác định. - **Section Names:** Các packer thường thêm các phần vùng mới vào tệp nhị phân, ví dụ như UPX. Các phần vùng này có thể được đặt tên theo tên của packer. - **Strings:** Việc thiếu chuỗi ký tự hoặc xuất hiện các chuỗi vô nghĩa trong tệp nhị phân có thể là dấu hiệu cho thấy chương trình đã được pack. - **Entropy:** Entropy được xác định dựa trên tần suất xuất hiện của các byte lặp lại. Độ entropy cao thường cho thấy dữ liệu đã được mã hóa hoặc nén. - **Imports:** Sự thiếu hụt các hàm nhập hoặc xuất hiện nhiều hàm nhập bất thường trong tệp nhị phân có thể là dấu hiệu cho thấy chương trình đã được pack. - **Raw/Virtual Sizes:** "Raw Section Size" thể hiện kích thước của các phần khi tệp không chạy, trong khi "Virtual Section Size" thể hiện kích thước khi tệp đang chạy. Sự khác biệt đáng kể giữa hai giá trị này có thể là dấu hiệu cho thấy mẫu tệp đã được pack. ### Quá Trình Mã Độc Được Pack ![image](https://hackmd.io/_uploads/HJyIabgTR.png) Mã độc được phát triển và sau đó được chuyển cho một phần mềm packer để nén và làm rối mã (obfuscate) tệp thực thi. Packer tiến hành nén và mã hóa tệp thực thi và thêm một đoạn mã nhỏ gọi là `unpacking stub` vào tệp thực thi đã được pack. Unpacking stub là một đoạn mã nhỏ có nhiệm vụ đảo ngược quá trình packing. Nó giải nén và giải mã payload khi tệp thực thi đã được pack được chạy. Sau khi giải nén, `unpacking stub` sẽ tải mã độc gốc lên memory và thực thi nó. ### Quá Trình Mã Độc Được Unpack ![image](https://hackmd.io/_uploads/H1rD6WeTR.png) Quá trình bắt đầu bằng việc bộ nhớ được cấp phát để chuẩn bị cho các hoạt động giải nén tiếp theo. Tiếp đó, unpacking stub được thực thi, đây là mã đã được đóng gói với nhiệm vụ giải mã hoặc giải nén mã chính của mã độc. Mã shellcode sau khi được giải mã hoặc giải nén sẽ được lưu trữ trong bộ nhớ đã cấp phát. Bộ nhớ được tiếp tục cấp phát thêm cho các thành phần tiếp theo của mã độc. Sau đó, mã shellcode được sao chép vào bộ nhớ, và cuối cùng, mã thực thi độc hại hoàn chỉnh được giải nén và sẵn sàng thực thi trong hệ thống. ## Lý Thuyết quá tình lây nhiễm mã độc Trong quá trình lây nhiễm mã độc, First stage loader đóng vai trò quan trọng trong việc khởi động toàn bộ quy trình nhiễm. Bộ nạp này thường xuất hiện dưới dạng các tệp tài liệu phổ biến như Word, PDF, hoặc bảng tính, và nó thường chứa các macro độc hại hoặc khai thác các lỗ hổng cụ thể trong phần mềm. #### Trình tự lây nhiễm mã độc điển hình ![image](https://hackmd.io/_uploads/H1YB0bl6R.png) Quá trình lây nhiễm phần mềm độc hại thường bắt đầu từ giai đoạn ban đầu gọi là Initial Stager. Trong giai đoạn này, các tài liệu như Word, PDF, hoặc bảng tính có thể chứa các macro độc hại hoặc khai thác lỗ hổng bảo mật, chẳng hạn như trong công cụ Equation Editor. Khi người dùng mở tài liệu, macro độc hại có thể được thực thi hoặc khai thác lỗ hổng bảo mật sẽ xảy ra. Sau đó, quá trình sẽ chuyển sang giai đoạn Loader, đóng vai trò là bước trung gian trong một số mẫu mã độc. Tài liệu Word có thể tải về payload cuối cùng hoặc một Loader khác, thường là một tệp thực thi. Loader này sẽ kết nối với một máy chủ C&C để tải về payload cuối cùng. Payload cuối cùng có thể tiếp tục kết nối với cùng một máy chủ C&C hoặc các máy chủ khác để tải thêm các plugin, thường ở dạng DLL hoặc tệp thực thi. Đây là một kỹ thuật lây nhiễm phổ biến mà các mã độc hiện đại thường sử dụng. Quá trình này thường bắt đầu với một tài liệu Word được gửi qua email spam độc hại. Khi tài liệu này được mở, nó có thể kết nối với máy chủ C&C hoặc chứa sẵn một tệp thực thi bên trong. Macro trong tài liệu sẽ giải mã tệp thực thi hoặc tải về từ máy chủ C&C, sau đó tệp thực thi sẽ tải về payload cuối cùng hoặc đã chứa sẵn payload này bên trong. ### Giai đoạn 1: Initial Stager Các giai đoạn ban đầu của lây nhiễm thường được thực hiện thông qua các chiến dịch, các cuộc tấn công có mục tiêu và nhiều hình thức phát tán khác nhau. Chúng thường xuất hiện dưới dạng các tài liệu Word, PDF, bảng tính Excel. Đôi khi, phần mềm độc hại đã được cài đặt trước đó có thể đóng vai trò là bộ tải giai đoạn đầu cho các dòng mã độc khác. Chúng ta sẽ tập trung vào các tài liệu Word độc hại trong phần này của chương, vì chúng là một trong những phương pháp phổ biến nhất. Như đã đề cập, chúng được sử dụng bởi nhiều dòng mã độc và thường có phương pháp làm rối độc đáo cho từng mẫu, ngay cả khi chúng thuộc cùng một dòng mã độc. #### Quá trình lây nhiễm của Word Documents độc hại Một trong những con đường mà nó có thể theo là sử dụng một macro bị làm rối, được thực thi bởi hàm auto open. Hàm này sẽ thực thi macro ngay khi tệp được mở. Ngoài ra, còn có hàm auto close, nghĩa là macro sẽ được thực thi khi bạn đóng tài liệu. Đây là một chiến thuật khá hiệu quả vì nhiều người dùng nghĩ rằng nếu họ vô tình kích hoạt macro, họ có thể đóng tài liệu để ngăn chặn việc thực thi. Tuy nhiên, thực tế là macro sẽ chạy khi tài liệu đóng thay vì khi mở. Từ macro bị làm rối này, nó sẽ giải mã và trích xuất một script PowerShell, sau đó được thực thi. Script này có nhiệm vụ tải về giai đoạn tiếp theo của mã độc hoặc có thể trích xuất từ mã nguồn của nó. Sự kết hợp giữa VBS và PowerShell script rất phổ biến, thậm chí có thể là một trong những phương pháp phổ biến nhất mà bạn sẽ gặp phải. Một cách khác mà tài liệu Word độc hại có thể đi theo là khai thác một lỗ hổng. Trong trường hợp này, chúng ta sẽ tập trung vào lỗ hổng trong Equation Editor, một trong những lỗ hổng phổ biến nhất bị khai thác trong Word. Có rất nhiều phần mềm và công cụ tự động khai thác lỗ hổng Equation Editor, cho phép bạn chỉ cần chọn payload và nó sẽ tự động chèn mã shell để khai thác lỗ hổng. Khi khai thác lỗ hổng này, quá trình được kích hoạt khi mở tài liệu, và ta không cần phải kích hoạt macro hay thao tác gì thêm, khiến quá trình này khá khó phát hiện. Từ đó, tài liệu sẽ tải về hoặc trích xuất mã shell và thực thi nó. Mã shell này sau đó thường sẽ tải về giai đoạn tiếp theo của mã độc từ máy chủ C&C. Khai thác này thường là BufferOverflow hoặc StackOverflow. Nếu bộ đệm lớn đủ lớn, tệp thực thi có thể được lưu trữ trong bộ nhớ. Nếu không, nó sẽ tải tệp này từ máy chủ điều khiển. ### Giai đoạn 2: Loader Tiếp nối chương trước, nơi chúng ta đã phân tích các tài liệu Word độc hại, giờ đây chúng ta sẽ chuyển sang phân tích các tệp thực thi hoặc DLL mà những tài liệu này tải xuống. Các payload được thả hoặc thực thi trên máy tính trong giai đoạn đầu, thông qua các phần mềm độc hại hoặc khai thác lỗ hổng bảo mật. Những payload này thường được dùng để tải về payload cuối cùng từ máy chủ C&C, thông qua các tên miền mã hóa cứng hoặc được tạo ra bởi thuật toán tạo tên miền (DGA). Mã độc thường chứa các cấu hình nội bộ, bao gồm danh sách máy chủ C&C đang hoạt động, khóa mã hóa dùng cho giao tiếp, và thông tin cần thiết để tải xuống các giai đoạn tiếp theo. Chúng ta có thể tận dụng điều này bằng cách viết script để trích xuất cấu hình và giả lập quá trình giao tiếp, nhằm thu thập payload tiếp theo mà không cần lo lắng về việc lây nhiễm máy tính hoặc cần sử dụng sandbox. #### Trình tự thực hiện phân tích ![image](https://hackmd.io/_uploads/Sk_tyMe6A.png) Đầu tiên, chúng ta cần thu thập thông tin về tệp nhị phân bằng cách kiểm tra xem tệp có bị nén hay không, đánh giá các khả năng xảy ra và tìm hiểu về những thuật toán có thể ẩn chứa bên trong. Tiếp theo, quá trình phân tích tĩnh sẽ được tiến hành để xác định cơ chế giao tiếp, tìm các giá trị mã hóa cứng, và phát hiện các thuật toán mã hóa hoặc phương pháp chống phân tích. Sau đó, chúng ta sẽ thực hiện phân tích động nhằm xác minh vị trí của các quy trình giao tiếp cũng như các cấu hình và thuật toán mã hóa bảo vệ chúng. Khi đã thu thập đủ thông tin, chúng ta sẽ phát triển trình trích xuất cấu hình. Cấu hình được trích xuất sẽ được chuyển đổi sang định dạng dễ đọc như XML, JSON hoặc một định dạng tùy chọn khác. Sau khi trình trích xuất hoạt động thành công, thông tin thu được từ quá trình giao tiếp và dữ liệu cấu hình sẽ được sử dụng để giả lập quá trình giao tiếp, với mục tiêu cuối cùng là tải được payload. Trong quá trình phát triển trình trích xuất cấu hình và giả lập giao tiếp, quá trình phân tích tĩnh và phân tích động sẽ được lặp lại khi cần thiết. Nếu gặp phải lỗi trong quá trình phát triển, chúng ta sẽ quay lại phân tích tĩnh để tìm giải pháp.