Chiến dịch của nhóm APT Goblin Panda lợi dụng đại dịch Covid-19

Giới thiệu

Trong khoảng thời gian từ giữa năm 2019 cho đến tháng 4/2020, theo nhận định của nhóm Viettel Threat Intelligence (VTI), nhóm APT có tên "Goblin Panda" (được biết với các tên gọi Hellsing, 1937CN…) thường lợi dụng các chủ đề nhạy cảm về để làm đòn bẩy thâm nhập sâu hơn vào hệ thống các tổ chức tại.

Trong chiến dịch gần nhất lợi dụng tình hình dịch bệnh Covid-19, mẫu mới của nhóm APT này có khả năng bypass vượt qua trên 95% các giải pháp Anti-virus (tại thời điểm ghi nhận phát hiện), Viettel Threat Intelligence đánh giá Goblin Panda là yếu tố nguy hiểm cần tiếp tục theo dõi trong tương lai lâu dài.

Định danh nhóm APT Golbin Panda

  • Tên nhóm: Goblin Panda (Hellsing, 1937CN…)
  • Phương thức phát tán: CVE-2017-0199, CVE-2017-11882, CVE-2018-0802, Template Injection (trong chiến dịch mới nhất).
  • Mục tiêu: các cơ quan nhà nước, quốc phòng, năng lượng tại các quốc gia
  • Mã độc được sử dụng: PlugX (trong các chiến dịch trước đây), NewCoreRAT (trong chiến dịch mới nhất),…

Các chiến dịch tấn công nổi bật của nhóm Goblin Panda được VTI ghi nhận trong thời gian qua:

Cách thức lây nhiễm, phát tán mã độc của nhóm APT Goblin Panda thường theo công thức:

  • Nhóm APT sử dụng một tập tin tài liệu có liên quan tới các chủ đề nổi bật về chính trị quân sự trong nước làm mồi nhử. Các văn bản này khai thác các lỗ hổng liên quan đến RTF (VD: CVE-2017-11882)
  • Mã khai thác sau đó sẽ drop xuống 3 tập tin: một tập tin thực thi exe có chữ ký hợp pháp của nhà sản xuất phần mềm nhưng chứa lỗ hổng cho phép thực hiện cơ chế DLL Side-Loading, một tập tin dll và một tập tin chứa backdoor đã bị mã hóa.
  • Mã độc trên máy người dùng sẽ kết nối và gửi dữ liệu tới các máy chủ điều khiển từ xa của nhóm tấn công APT. Lúc này, mọi thông tin nhạy cảm về tài khoản, những dữ liệu mật trên máy người dùng đều có thể bị đánh cắp.

Lợi dụng đại dịch Covid-19 để thâm nhập các cơ quan nhà nước

Trong tháng 4/2020, VTI ghi nhận chiến dịch mới của nhóm Goblin Panda sử dụng mẫu văn bản với tỷ lệ phát hiện ở Virustotal ở mức thấp (vượt  qua > 95% các giải pháp AV tại thời điểm phát hiện và phân tích). Phân tích của VTI cho thấy nhóm tấn công Goblin Panda với những cập nhật phương thức phát tán mới, những kỹ thuật cải tiến nhằm bảo vệ mã độc chạy trên hệ thống và vượt mặt các giải pháp ATTT được sử dụng trong doanh nghiệp.

Phân tích chi tiết kỹ thuật của chiến dịch lợi dụng Covid-19 của Goblin Panda APT

Hình 1 Tập tin tài liệu với tỷ lệ phát hiện thấp

Tập tin "Phương án trực ***.docx"

Thông tin về mẫu :

·      Tên tập tin: Phương án trực ***.docx

·      SHA256: 54f6bd17b04a946eaf0620a7833e9a0f9f42d797330d0d4d6c84d01d827a1b43

·      Tập tin Type: Office Open XML Document

Hình 2 Nội dung tài liệu được sử dụng làm phương thức phát tán mã độc.

Kết quả phân tích động:

  • CreateProcess:
  • Service Opened: WebClient
Hình 3 Kết nối khi mở file word
  • Tại thời điểm phân tích URL trên vẫn hoạt động và tải về tập tin RTF mới.
  • Tập tin mới này này có định dạng RTF khai thác lỗ hổng CVE-2017-11882.

Template Injection

Tại thời điểm phát hiện và đánh giá, mẫu văn bản chứa mã độc “Phương án trực ***.docx” sử dụng kỹ thuật Template Injection được đánh giá có khả năng vượt qua (bypass) trên 95% giải pháp AV.

Đây là kỹ thuật Template Injection cho phép kẻ tấn công chèn vào Office XML một tham chiếu đến tập tin phía server. Để minh họa ta có thể so sánh tập tin văn bản trước và sau khi kẻ tấn công sử dụng Template Injection:

Hình 4 Tập tin văn bản gốc trước khi bị chèn mã độc

So sánh 2 tập tin này có thể cho ta thấy trước và sau khi mã độc được chèn vào.

Word Office XML format tạo ra các tập tin dựa trên định dạng XML, sử dụng Zip để nén các tập tin và thư mục với nhau và lưu dưới dạng docx (docm, dotx, dotm cho các các tập tin macro hoặc template), dùng zip để đọc các tập tin này ta có kết quả như sau:

Hình 5 Đọc file docx bằng zip

Ta có thể dùng hash để so sánh:

Hình 6 File word\settings.xml bị sửa đổi

Ở đây ta thấy có 2 sự khác nhau như sau:

  • Tập tin word\_rel\settings.xml.rels được thêm vào
Hình 7 File word\_rel\settings.xml.rels được chèn và nội dung
  • Tập tin word\settings.xml được chèn thêm thẻ <w:attachedTemplate r:id="rId1"/>
Hình 8 Thẻ <w:attachedTemplate r:id> được chèn vào tập tin word\settings.xml

Để thực hiện kỹ thuật template injection này đối với một tập tin bất kỳ, ta có các bước thực hiện như sau:

  • Thêm tập tin settings.xml.rels vaò thư mục word\_rel với các thuộc tính Type = attachTemplate,

Target có thể thực hiện bằng giao thức SMB ( tập tin://) hoặc WebDAV( http://)

TargetMode = “External”

  • TRong tập tin  word\settings.xml cần thêm thẻ <w:attachedTemplate r:id>, trong đó r:id liên kết với  ID trong settings.xml.rels
  • Nén lại tập tin dưới dạng zip và đổi đuôi thành docx

Phía Server ta cài đặt một Webserver, ở đây chúng tôi sử dụng IIS server:

Hình 9 Lưu lượng mạng trong wireshark

Tập tin tải về là một tập tin RTF được lưu ở bộ nhớ cache và mã độc được thực thi nhờ vào lỗ hổng  CVE-2017-11882.

Phân tích tập tin RTF độc

Hình 10 Các OLE Object

Object thứ nhất ( Object id 0) chứa dữ liệu bị mã hóa, object thứ 2 chứa shellcode để giải mã Object thứ nhất.

Shellcode Exploit

Shellcode encode sử dụng khóa Key = 0x90C3, kích thước  0xB4B bytes

Khóa key = 0x90C3 được nhắc đến trong tài liệu nao_sec [2]được sử dụng nhiều trong các phiên bản khác nhau của RoyalRoad (Royal Road  là môt phương pháp RTF Weaponizer được chia sẻ bởi  một số nhóm APT),  các phiên bản trước đây cũng sử dụng key tương tự [3]

Hình 11 XOR key sử dụng trong các phiên bản của 1937CN

Get Function By Hash

  • Thuật toán hash được sử dụng là ror7.
  • Một mảng các hash được sử dụng để so sánh với hash của tên hàm trong thời gian chạy, mảng này được lưu tại offset 0x13A1.
  • Mảng các  hash này sau đó sẽ được sử dụng để lưu địa chỉ hàm tương ứng, các địa chỉ trả về được cộng thêm 5 byte ( 5 byte hot patch) trước khi lưu vào bộ nhớ.

Thư viện mlib [4] lưu giữ một cơ sở dữ liệu chứa tên hàm và kết quả băm tương ứng theo nhiều thuật toán khác nhau, ta có thể tạo một struct trong IDA chứa tên hàm tương ứng với băm.

Hình 12 Đổi tên function theo hash trong IDA

Patch msvcrt.clearerr

  • Shellcode không gọi trực tiếp các hàm API mà gọi gián tiếp qua  msvcrt.clearerr
  • Hàm clearerr của thư viện msvcrt được patch bằng 50 bytes. 50 bytes này tạo thành function với đối số truyền vào theo định dạng:
Hình 13 Định dạng của hàm patch để gọi gián tiếp các API
  • Hàm patch này cũng bỏ qua các hàm hook  WinAPI, các windows api luôn được dành ra 5 byte cho mục đích hotpatch, các trình sandbox thường sử dụng 5 byte này để hook và ghi log các đối số truyền hàm API. Bằng cách so sánh với các jump opcode 0xFF78, 0xE9, 0xEB, mã độc có khả năng tránh được sandbox.
Hình 14 Bỏ qua các hook WinAPI
  • Shellcode sau đó đọc tập tin wd32PrvSE.wmf, giải mã ra một tập tin PE khác trong bộ nhớ, mã độc dùng hàm GetModuleTập tinNameA để lấy tên của tiến trình cha (ở đây là eqnedt32.exe),  sau đó tạo một tiến trình mới ở dạng SUSPEND để thực hiện kỹ thuật Process Hollowing.
Hình 15 Tạo suspend process để hollowing

Tập tin exe giải mã từ wd32PrvSE.wmf

  • Dump xuống tập tin từ bộ nhớ thu được một tập tin exe.
Hình 16 File dump xuống từ shellcode exploit
  • Tập tin này sẽ gải mã 3 tập tin khác và ghi xuống bộ nhớ vào thư mục  %Appdata%Microsoft\Windows\TempPictures.
  • Ba tập tin này được nén tại .data section, xor với một Key cho trước,  sau đó được giải nén bằng zlib library .
Hình 17 Giải mã các file bằng XOR key và unzip
  • Sau khi giải nén và drop xuống 3 tập tin, trong đó QcConsol.exe có chữ ký của McAfee, dùng cho mục đích side-loading QcLite.dll, stdole.dll chứa payload NewCore RAT bị mã hóa. Mã độc thực thi QcConsol.exe  với đối số -LowIntegrityServer:
Hình 18 Mã độc drop 3 file
  • QcConsol.exe sẽ load QcLite.dll khi đối số truyền vào có chứa -LowIntegrityServer
  • QCLite.dll khi được load vào sẽ đọc tập tin stdole.tlb và giải mã bằng phép XOR với một dãy số cho trước
Hình 19 QCLite.dll đọc và giải mã stdole.tlb
  • Dữ liệu khi giải mã xong là một shellcode, shellcode này chứa một tập tin DLL khác, khi shellcode được thực thi sẽ tiến hành kỹ thuật reflective DLL Loader để load và thực thi DLL này.
Hình 20 Backdoor sau khi giải mã

Anti-kill process

DLL này khi thực thi sẽ tạo một thread, trong thread này sẽ:

1. Lấy đường dẫn đến tiến trình hiện tại, mã hóa bằng phép xor với khóa key tương tự và ghi vào tập tin C:\ProgramData\Desktop.ini, setup thuộc tính cho tập tin này thành tập tin ẩn và tập tin hệ thống

Hình 21 Mã hóa đường dẫn đến tập tin thực thi và ghi vào tập tin tạm

2. Liệt kê các process đang chạy và kiểm tra xem có tiến trình nào tên là BKA.exe thì sẽ thoát, việc này nhắm đến trình anti-virus BKAV.

Hình 22 Kiểm tra BKAV anti-virus

3. Tạo một Mutex tên là {52078609-DD21-40AF-9720-76EDB23E948D},nếu mutex trên chưa tồn tại đọc và giải mã stdole.tlb một lần nữa, kết quả là thu được shellcode tương tự như trên nhằm cho mục đích process hollowing vào tiến trình dllhst3g.exe.

Hình 23 Tạo mutex và process hollowing dllhst3g.exe bằng shellcode

Nó sẽ thay thế tiến trình hệ thống dllhst3g.exe bằng shellcode vừa giải mã, nếu thành công mã độc sẽ chạy trong không gian tiến trình dllhst3g.exe và thoát khỏi QcConsol.exe.

Hình 24 Setup đặc quyền Debug để cho phép ghi vào tiến trình khác

4. Tạo một Mutex khác {2087D4E2-288F-452E-B3C3-F093C9014E9C}, đọc từ C:\ProgramData\Desktop.ini để lấy tên đường dẫn đến tiến trình ban đầu (QcConsol.exe), thực thi với đối số - LowIntegrityServer

  • Kết quả của các hành vi này là luôn có hai phiên bản của tiến trình chạy trên hệ thống (QcConsol.exe và dllhst3g.exe). Mục đích là để dự phòng và tạo sự bảo vệ lẫn nhau giữa 2 tiến trình.
  • Nếu một trong hai tiến trình bị kết thúc, tiến trình còn lại có trách nhiệm thực thi lại tiến trình bị kết thúc (sleep một khoảng thời gian nhất định trước khi thực thi QcConsol.exe với đối số -LowIntegrityServer, hoặc process replacement  dllhst3g.exe với shellcode chứa payload).
  • Mỗi tiến trình được đại diện bằng một mutex({52078609-DD21-40AF-9720-76EDB23E948D}- dllhst3g.exe, {2087D4E2-288F-452E-B3C3-F093C9014E9C}- QcConsol.exe). Có hai vòng lặp vô hạn để kiểm tra các mutex này và sinh ra các tiến trình mới khi mutex không tồn tại
Hình 25 Hai tiến trình song song tồn tại
  • Ở trên ta thấy mã độc kiểm tra sự hiện diện của trình anti-virus BKAV ( bằng cách so sánh tên tiến trình với “Bka.exe”), nếu có bkav chạy trên hệ thống. mã độc sẽ không triển khai cơ chế bảo vệ, bỏ qua việc tạo process replacement  dllhst3g.exe, do đó chỉ có một phiên bản của mã độc là QcConsol.exe chạy trên hệ thống)
Hình 26 Chỉ một phiên bản khi có mặt BKAV anti-virus
  • Sau đó nó sẽ tạo ra nhiều Thread mới cho mục đích khác nhau
Hình 27 CnC dùng cho chức năng backdoor

Thành phần Backdoor

  • Thread đầu tiên với mục đích persistence bằng cách ghi vào Run Key:
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run\Windows HD Audio Manager  =  C:\Users\*user*\AppData\Local\Temp\QcConsol.exe -LowIntegrityServer
  • Thread cuối cùng dùng để giao tiếp với C2 và thực hiện các chức năng backdoor, ta thấy domain "tintuc.mattrantoquocvnnhanoihcm[.]com" được sử dụng cho thread này. Phần mã bên  trong Thread này là Newcore RAT [5] đã được báo cáo trước đó bởi Fortinet, RAT này được phát triển dựa trên mã nguồn mở PCShare [6].
Hình 28 Tạo Thread mới chứa NewcoreRAT

Phân tích hạ tầng của nhóm APT Goblin Panda

Sử dụng tính năng graph trên trang cyberintel.io để phân tích hạ tầng của nhóm APT Goblin Panda, chúng tôi nhận thấy sự liên hệ giữa hạ tầng mà các nhóm này đã sử dụng trong các chiến dịch từ trước đến nay. Trong đó các tên miền cũ sau một thời gian sẽ cấu hình lại tới các IP mới, các IP mới được tiếp tục sử dụng để trỏ các tên miền mới phục vụ cho các chiến dịch tương lai.

Tổng quan sẽ thấy hạ tầng của nhóm Goblin Panda được phân bố

Hình 29 Hạ tầng nhóm APT Goblin Panda (Nguồn: Viettel Threat Intelligence)

Hạ tầng được sử dụng trong các chiến dịch khoảng từ 2015-2019

(Nguồn: Viettel Threat Intelligence)

Hạ tầng được sử dụng trong chiến dịch tháng 11/2019

(Nguồn: Viettel Threat Intelligence)

Hạ tầng được sử dụng trong các chiến dịch của năm 2020

(Nguồn: Viettel Threat Intelligence)

Dấu hiệu nhận biết mã độc:

Malware Hash IOC:

  • Phương án trực ***.docx: 54f6bd17b04a946eaf0620a7833e9a0f9f42d797330d0d4d6c84d01d827a1b43
  • QcLite.dll [SHA256: 47c5bdd321376806fe88956b81d48fb3cb4429423862d34ebe03f022e1a5c5db]
  • stdole.tlb [SHA256: f4e204e3aac55e84f5ada4b70f15a6e84c20bb83585213765eb0d1daf5555b9a]

Malware C&C IOC:

  • tintuc.mattrantoquocvnnhanoihcm[.]com
  • http://static.bambooairwaysshy[.]com/images/yfcpt.png?ccppt
  • static.bambooairwaysshy[.]com
  • 160.20.147[.]206
  • 92.38.135[.]81

Host IOC:

  • %AppData%\Microsoft\Windows\TempPictures\QcLite.dll

Persistent IOC:

  • HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run\Windows HD Audio Manager  =  C:\Users\*user*\AppData\Local\Temp\QcConsol.exe -LowIntegrityServer

ATT&CK

References

[1] "Template Injection," [Online]. Available: https://attack.mitre.org/techniques/T1221/.
[2] [Online]. Available: https://nao-sec.org/2020/01/an-overhead-view-of-the-royal-road.html.
[3] [Online]. Available: https://tradahacking.vn/là-1937cn-hay-oceanlotus-hay-lazarus-6ca15fe1b241.
[4] [Online]. Available: https://blog.malwarelab.pl/posts/on_the_royal_road/.
[5] [Online]. Available: https://www.fortinet.com/blog/threat-research/rehashed-rat-used-in-apt-campaign-against-vietnamese-organizations.html.
[6] [Online]. Available: https://github.com/xdnice/PCShare.

Author: Viettel Threat Intelligence