ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus

Trong bài đăng này, chúng tôi sẽ cho bạn biết cách nhóm mạng OceanLotus (APT32 và APT-C-00) gần đây đã sử dụng một trong những cách khai thác được công bố công khai cho CVE-2017-11882, lỗ hổng hỏng bộ nhớ trong Microsoft Office và cách phần mềm độc hại của nhóm này tồn tại lâu dài trên các hệ thống bị xâm nhập mà không để lại dấu vết. Tiếp theo, chúng tôi sẽ mô tả cách kể từ đầu năm 2019, nhóm đã sử dụng các kho lưu trữ tự giải nén để chạy mã.

OceanLotus chuyên về gián điệp mạng, với mục tiêu ưu tiên là các quốc gia ở Đông Nam Á. Những kẻ tấn công giả mạo các tài liệu thu hút sự chú ý của nạn nhân tiềm năng để thuyết phục họ thực thi cửa sau và cũng đang nghiên cứu phát triển các công cụ. Các phương pháp được sử dụng để tạo honeypot khác nhau tùy theo các cuộc tấn công, từ tệp “mở rộng gấp đôi”, kho lưu trữ tự giải nén, tài liệu có macro, cho đến các cách khai thác đã biết.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus

Sử dụng cách khai thác trong Microsoft Equation Editor

Vào giữa năm 2018, OceanLotus đã tiến hành chiến dịch khai thác lỗ hổng CVE-2017-11882. Một trong những tài liệu độc hại của nhóm mạng đã được các chuyên gia từ Trung tâm tình báo mối đe dọa 360 phân tích (nghiên cứu bằng Tiếng Trung), bao gồm mô tả chi tiết về cách khai thác. Bài đăng dưới đây chứa thông tin tổng quan về một tài liệu độc hại như vậy.

Giai đoạn đầu tiên

Tài liệu FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) tương tự như nghiên cứu trên. Thật thú vị vì nó hướng đến những người dùng quan tâm đến chính trị Campuchia (CNRP - Đảng Cứu nguy Dân tộc Campuchia, đã giải thể vào cuối năm 2017). Mặc dù có phần mở rộng .doc nhưng tài liệu vẫn ở định dạng RTF (xem hình bên dưới), chứa mã rác và cũng bị biến dạng.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 1. "Rác" trong RTF

Mặc dù có các thành phần bị cắt xén nhưng Word vẫn mở thành công tệp RTF này. Như bạn có thể thấy trong Hình 2, có cấu trúc EQNOLEFILEHDR ở offset 0xC00, theo sau là tiêu đề MTEF và sau đó là mục nhập MTEF (Hình 3) cho phông chữ.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 2. Giá trị mục nhập FONT

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 3. định dạng ghi FONT

Có thể tràn trong trường tên, vì kích thước của nó không được kiểm tra trước khi sao chép. Tên quá dài sẽ gây ra lỗ hổng. Như bạn có thể thấy từ nội dung của tệp RTF (offset 0xC26 trong Hình 2), bộ đệm chứa đầy shellcode theo sau là một lệnh giả (0x90) và địa chỉ trả về 0x402114. Địa chỉ là một thành phần hộp thoại trong EQNEDT32.exe, chỉ ra hướng dẫn RET. Điều này khiến EIP trỏ đến điểm bắt đầu của trường tênchứa shellcode.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 4. Bắt đầu shellcode khai thác

địa chỉ 0x45BD3C lưu trữ một biến được hủy đăng ký cho đến khi nó đạt tới một con trỏ tới cấu trúc hiện được tải MTEFData. Phần còn lại của shellcode nằm ở đây.

Mục đích của shellcode là thực thi đoạn shellcode thứ hai được nhúng trong tài liệu đang mở. Shellcode ban đầu trước tiên cố gắng tìm bộ mô tả tệp của tài liệu đang mở bằng cách lặp lại tất cả các bộ mô tả hệ thống (NtQuerySystemInformation với một lập luận SystemExtendedHandleInformation) và kiểm tra xem chúng có khớp không PID mô tả và PID quá trình WinWord và liệu tài liệu có được mở bằng mặt nạ truy cập hay không - 0x12019F.

Để xác nhận rằng đã tìm thấy phần xử lý chính xác (chứ không phải phần xử lý của tài liệu đang mở khác), nội dung của tệp được hiển thị bằng hàm CreateFileMapping, và shellcode kiểm tra xem bốn byte cuối cùng của tài liệu có khớp hay không "yyyy"(Phương pháp săn trứng). Khi tìm thấy kết quả khớp, tài liệu sẽ được sao chép vào thư mục tạm thời (GetTempPath) thế nào ole.dll. Sau đó 12 byte cuối cùng của tài liệu sẽ được đọc.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 5. Đánh dấu phần cuối của tài liệu

Giá trị 32 bit giữa các điểm đánh dấu AABBCCDD и yyyy là phần bù của shellcode tiếp theo. Nó được gọi bằng cách sử dụng hàm CreateThread. Trích xuất shellcode tương tự đã được nhóm OceanLotus sử dụng trước đó. Kịch bản mô phỏng Python, mà chúng tôi đã phát hành vào tháng 2018 năm XNUMX, vẫn hoạt động cho giai đoạn kết xuất thứ hai.

Giai đoạn thứ hai

Loại bỏ các thành phần

Tên tập tin và thư mục được chọn động. Mã chọn ngẫu nhiên tên của tệp thực thi hoặc tệp DLL trong C:Windowssystem32. Sau đó, nó đưa ra yêu cầu đối với tài nguyên của mình và truy xuất trường FileDescription để sử dụng làm tên thư mục. Nếu cách này không hiệu quả, mã sẽ chọn ngẫu nhiên tên thư mục từ các thư mục %ProgramFiles% hoặc C:Windows (từ GetWindowsDirectoryW). Nó tránh sử dụng tên có thể xung đột với các tệp hiện có và đảm bảo rằng nó không chứa các từ sau: windows, Microsoft, desktop, system, system32 hoặc syswow64. Nếu thư mục đã tồn tại, "NLS_{6 ký tự}" sẽ được thêm vào tên.

tài nguyên 0x102 được phân tích và các tập tin được đổ vào %ProgramFiles% hoặc %AppData%, vào một thư mục được chọn ngẫu nhiên. Đã thay đổi thời gian tạo để có cùng giá trị với kernel32.dll.

Ví dụ: đây là thư mục và danh sách các tệp được tạo bằng cách chọn tệp thực thi C:Windowssystem32TCPSVCS.exe như một nguồn dữ liệu.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 6. Trích xuất các thành phần khác nhau

Cấu trúc tài nguyên 0x102 trong một ống nhỏ giọt khá phức tạp. Tóm lại, nó chứa:
- Tên tập tin
- Kích thước và nội dung tệp
- Định dạng nén (COMPRESSION_FORMAT_LZNT1, được sử dụng bởi hàm RtlDecompressBuffer)

Tệp đầu tiên được đặt lại là TCPSVCS.exe, điều đó là hợp pháp AcroTranscoder.exe (dựa theo FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).

Bạn có thể nhận thấy rằng một số tệp DLL lớn hơn 11 MB. Điều này là do một bộ đệm lớn dữ liệu ngẫu nhiên liền kề được đặt bên trong tệp thực thi. Có thể đây là một cách để tránh bị một số sản phẩm bảo mật phát hiện.

Đảm bảo tính kiên trì

tài nguyên 0x101 trong ống nhỏ giọt chứa hai số nguyên 32 bit chỉ định cách cung cấp tính bền vững. Giá trị đầu tiên chỉ định cách phần mềm độc hại sẽ tồn tại mà không có quyền quản trị viên.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Bảng 1. Cơ chế tồn tại không có quyền quản trị viên

Giá trị của số nguyên thứ hai chỉ định cách phần mềm độc hại đạt được sự tồn tại lâu dài khi chạy với quyền quản trị viên.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Bảng 2. Cơ chế tồn tại với quyền quản trị viên

Tên dịch vụ là tên tệp không có phần mở rộng; tên hiển thị là tên của thư mục, nhưng nếu nó đã tồn tại thì chuỗi “Revision 1” (số lượng tăng lên cho đến khi tìm thấy tên không được sử dụng). Các nhà điều hành đã đảm bảo rằng khả năng duy trì ổn định của dịch vụ là mạnh mẽ - trong trường hợp xảy ra lỗi, dịch vụ sẽ được khởi động lại sau 1 giây. Sau đó giá trị WOW64 Khóa đăng ký của dịch vụ mới được đặt thành 4, cho biết đó là dịch vụ 32 bit.

Một tác vụ theo lịch trình được tạo thông qua một số giao diện COM: ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler. Về cơ bản, phần mềm độc hại tạo ra một tác vụ ẩn, đặt thông tin tài khoản cùng với thông tin người dùng hoặc quản trị viên hiện tại, sau đó đặt kích hoạt.

Đây là nhiệm vụ hàng ngày có thời lượng 24 giờ và khoảng thời gian giữa hai lần thực hiện là 10 phút, nghĩa là nó sẽ chạy liên tục.

chút độc hại

Trong ví dụ của chúng tôi, tệp thực thi TCPSVCS.exe (AcroTranscoder.exe) là phần mềm hợp pháp tải các tệp DLL được đặt lại cùng với nó. Trong trường hợp này, điều đáng quan tâm Flash Video Extension.dll.

Chức năng của nó DLLMain chỉ cần gọi một chức năng khác. Có một số vị từ mờ:

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 7. Vị từ mờ

Sau những lần kiểm tra sai lệch này, mã sẽ có một phần .text tập tin TCPSVCS.exe, thay đổi khả năng phòng thủ của nó thành PAGE_EXECUTE_READWRITE và viết lại nó bằng cách thêm các hướng dẫn giả:

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 8. Trình tự các lệnh

Ở cuối địa chỉ hàm FLVCore::Uninitialize(void), đã xuất khẩu Flash Video Extension.dll, hướng dẫn được thêm vào CALL. Điều này có nghĩa là sau khi DLL độc hại được tải, khi bộ thực thi gọi WinMain в TCPSVCS.exe, con trỏ lệnh sẽ trỏ tới NOP, gây ra FLVCore::Uninitialize(void), giai đoạn tiếp theo.

Hàm này chỉ đơn giản tạo ra một mutex bắt đầu bằng {181C8480-A975-411C-AB0A-630DB8B0A221}theo sau là tên người dùng hiện tại. Sau đó, nó đọc tệp *.db3 được kết xuất, chứa mã không phụ thuộc vào vị trí và sử dụng CreateThread để thực hiện nội dung.

Nội dung của tệp *.db3 là shellcode mà nhóm OceanLotus thường sử dụng. Một lần nữa chúng tôi đã giải nén thành công tải trọng của nó bằng tập lệnh mô phỏng mà chúng tôi đã xuất bản trên GitHub.

Kịch bản trích xuất giai đoạn cuối cùng. Thành phần này là một cửa sau mà chúng tôi đã phân tích ở phần nghiên cứu OceanLotus trước đây. Điều này có thể được xác định bởi GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} tập tin nhị phân. Cấu hình phần mềm độc hại vẫn được mã hóa trong tài nguyên PE. Nó có cấu hình gần giống nhau, nhưng máy chủ C&C khác với các máy chủ trước đó:

- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz

Nhóm OceanLotus một lần nữa trình diễn sự kết hợp của nhiều kỹ thuật khác nhau để tránh bị phát hiện. Họ quay lại với một sơ đồ “tinh tế” về quá trình lây nhiễm. Bằng cách chọn tên ngẫu nhiên và điền dữ liệu ngẫu nhiên vào các tệp thực thi, chúng làm giảm số lượng IoC đáng tin cậy (dựa trên giá trị băm và tên tệp). Hơn nữa, nhờ sử dụng tính năng tải DLL của bên thứ ba, kẻ tấn công chỉ cần xóa tệp nhị phân hợp pháp AcroTranscoder.

Lưu trữ tự giải nén

Sau tệp RTF, nhóm chuyển sang kho lưu trữ tự giải nén (SFX) với các biểu tượng tài liệu phổ biến để khiến người dùng bối rối hơn nữa. Threatbook đã viết về điều này (liên kết bằng Tiếng Trung). Khi khởi chạy, các tệp RAR tự giải nén sẽ bị loại bỏ và các tệp DLL có phần mở rộng .ocx được thực thi, tải trọng cuối cùng của chúng đã được ghi lại trước đó {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Kể từ giữa tháng 2019 năm XNUMX, OceanLotus đã sử dụng lại kỹ thuật này nhưng thay đổi một số cấu hình theo thời gian. Trong phần này chúng ta sẽ nói về kỹ thuật và những thay đổi.

Tạo mồi nhử

Tài liệu THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) được tìm thấy lần đầu tiên vào năm 2018. Tệp SFX này được tạo một cách khôn ngoan - trong phần mô tả (Thông tin phiên bản) nó báo đây là ảnh JPEG. Kịch bản SFX trông như thế này:

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 9. Các lệnh SFX

Phần mềm độc hại đặt lại {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), cũng như một bức tranh 2018 thich thong lac.jpg.

Hình ảnh mồi nhử trông như thế này:

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 10. Hình ảnh mồi nhử

Bạn có thể nhận thấy rằng hai dòng đầu tiên trong tập lệnh SFX gọi tệp OCX hai lần, nhưng đây không phải là lỗi.

{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)

Luồng điều khiển của tệp OCX rất giống với các thành phần OceanLotus khác - nhiều chuỗi lệnh JZ/JNZ и PUSH/RET, xen kẽ với mã rác.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 11. Mã bị xáo trộn

Sau khi lọc hết mã rác, xuất DllRegisterServer, gọi điện regsvr32.exe, như sau:

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 12. Mã cài đặt cơ bản

Về cơ bản, trong cuộc gọi đầu tiên DllRegisterServer xuất bộ giá trị đăng ký HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model để bù đắp được mã hóa trong DLL (0x10001DE0).

Khi hàm được gọi lần thứ hai, nó sẽ đọc cùng một giá trị và thực thi tại địa chỉ đó. Từ đây tài nguyên và nhiều hành động trong RAM được đọc và thực thi.

Shellcode là trình tải PE tương tự được sử dụng trong các chiến dịch OceanLotus trước đây. Nó có thể được mô phỏng bằng cách sử dụng kịch bản của chúng tôi. Cuối cùng anh ấy đặt lại db293b825dcc419ba7dc2c49fa2757ee.dll, tải nó vào bộ nhớ và thực thi DllEntry.

DLL trích xuất nội dung tài nguyên của nó, giải mã (AES-256-CBC) và giải nén (LZMA) nó. Tài nguyên có định dạng cụ thể dễ dịch ngược.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 13. Cấu trúc cấu hình trình cài đặt (KaitaiStruct Visualizer)

Cấu hình được chỉ định rõ ràng - tùy thuộc vào mức đặc quyền, dữ liệu nhị phân sẽ được ghi vào %appdata%IntellogsBackgroundUploadTask.cpl hoặc %windir%System32BackgroundUploadTask.cpl (hoặc SysWOW64 đối với hệ thống 64-bit).

Sự kiên trì hơn nữa được đảm bảo bằng cách tạo một tác vụ có tên BackgroundUploadTask[junk].jobĐâu [junk] đại diện cho một tập hợp byte 0x9D и 0xA0.

Tên ứng dụng nhiệm vụ %windir%System32control.exevà giá trị tham số là đường dẫn đến tệp nhị phân đã tải xuống. Nhiệm vụ ẩn chạy hàng ngày.

Về mặt cấu trúc, tệp CPL là một tệp DLL có tên nội bộ ac8e06de0a6c4483af9837d96504127e.dll, xuất một hàm CPlApplet. Tệp này giải mã tài nguyên duy nhất của nó {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, sau đó tải DLL này và gọi lệnh xuất duy nhất của nó DllEntry.

Tập tin cấu hình cửa sau

Cấu hình cửa sau được mã hóa và nhúng vào tài nguyên của nó. Cấu trúc của tệp cấu hình rất giống với cấu trúc trước đó.

ESET: kế hoạch phân phối cửa sau mới cho nhóm mạng OceanLotus
Hình 14. Cấu trúc cấu hình cửa sau (KaitaiStruct Visualizer)

Mặc dù cấu trúc tương tự nhau nhưng nhiều giá trị trường đã được cập nhật từ những giá trị được hiển thị trong báo cáo cũ của chúng tôi.

Phần tử đầu tiên của mảng nhị phân chứa DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), được xác định bởi Tencent. Nhưng vì tên xuất đã bị xóa khỏi tệp nhị phân nên các giá trị băm không khớp.

Nghiên cứu bổ sung

Trong khi thu thập mẫu, chúng tôi nhận thấy một số đặc điểm. Mẫu vật vừa được mô tả xuất hiện vào khoảng tháng 2018 năm 2019 và những mẫu vật khác giống như nó xuất hiện gần đây vào giữa tháng XNUMX đến đầu tháng XNUMX năm XNUMX. Kho lưu trữ SFX được sử dụng làm vectơ lây nhiễm, đánh rơi tài liệu mồi nhử hợp pháp và tệp OSX độc hại.

Mặc dù OceanLotus sử dụng dấu thời gian giả nhưng chúng tôi nhận thấy rằng dấu thời gian của tệp SFX và OCX luôn giống nhau (0x57B0C36A (08/14/2016 @ 7:15 tối UTC) và 0x498BE80F (02/06/2009 @ 7:34 sáng UTC) tương ứng). Điều này có thể chỉ ra rằng các tác giả có một loại “nhà thiết kế” nào đó sử dụng các mẫu giống nhau và chỉ thay đổi một số đặc điểm.

Trong số các tài liệu mà chúng tôi đã nghiên cứu từ đầu năm 2018, có nhiều cái tên khác nhau chỉ ra các quốc gia mà những kẻ tấn công quan tâm:

— Thông tin liên hệ mới của Campuchia Media(Mới).xls.exe
— 李建香 (个人简历).exe (tài liệu pdf giả của CV)
— phản hồi, Cuộc biểu tình ở Hoa Kỳ từ ngày 28 đến ngày 29 tháng 2018 năm XNUMX.exe

Kể từ khi cửa hậu được phát hiện {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll và việc một số nhà nghiên cứu công bố phân tích của nó, chúng tôi đã quan sát thấy một số thay đổi trong dữ liệu cấu hình phần mềm độc hại.

Đầu tiên, các tác giả bắt đầu xóa tên khỏi các tệp DLL trợ giúp (DNSprov.dll và hai phiên bản HttpProv.dll). Sau đó, các nhà khai thác đã ngừng đóng gói DLL thứ ba (phiên bản thứ hai HttpProv.dll), chọn chỉ nhúng một.

Thứ hai, nhiều trường cấu hình cửa sau đã được thay đổi, có khả năng tránh bị phát hiện khi có nhiều IoC. Các trường quan trọng được tác giả sửa đổi bao gồm:

  • Khóa đăng ký AppX đã thay đổi (xem IoC)
  • chuỗi mã hóa mutex ("def", "abc", "ghi")
  • số cổng

Cuối cùng, tất cả các phiên bản mới được phân tích đều có C&C mới được liệt kê trong phần IoC.

Những phát hiện

OceanLotus tiếp tục phát triển. Nhóm mạng tập trung vào việc cải tiến và mở rộng các công cụ và mồi nhử. Các tác giả ngụy trang các tải trọng độc hại bằng cách sử dụng các tài liệu thu hút sự chú ý có chủ đề liên quan đến nạn nhân dự định. Họ phát triển các kế hoạch mới và cũng sử dụng các công cụ có sẵn công khai, chẳng hạn như khai thác Equation Editor. Hơn nữa, họ đang cải tiến các công cụ để giảm số lượng thành phần còn lại trên máy của nạn nhân, do đó làm giảm cơ hội bị phần mềm chống vi-rút phát hiện.

Các chỉ số của sự thỏa hiệp

Có sẵn các chỉ báo về sự xâm phạm cũng như thuộc tính MITER ATT&CK trên Welivesecurity и trên GitHub.

Nguồn: www.habr.com

Thêm một lời nhận xét