Selasa, Desember 18, 2007

Bagaimana caranya virus menginfeksi program executable? (part I)

Written by ANVIE
Digg!

1. Prolog

Suatu hari saya mendapatkan offline message dari seseorang (lupa namanya) isinya kurang lebih begini: “Bagaimana sih cara kerja virus yang menginfeksi program EXE lainnya dengan cara membelokkan instruksi asli ke badan virus?”.

Setelah saya membacanya, saya langsung bisa menebak dengan ketepatan 100% “orang ini tidak mengikuti acara seminar di Jogja waktu itu pasti”, mengapa? Karena semua jenis dan tehnik-tehnik worm, virus, trojan dan spyware sudah saya jelaskan semuanya dengan gamblang pada acara seminar tersebut, dan hal itu memakan waktu dari sore hingga jam 1 pagi. Waks, waktu yang melelahkan menurut saya waktu itu :).

2. Entrypoint

Btt (Back to Topic).

Gimana sih? Cara kerjanya? Oke kita mulai, tetapi sebelumnya kamu harus tahu terlebih dahulu format PE (Portable Executable) dari mulai header sampai section-sectionnya, karena saya tidak akan menjelaskan panjang lebar tentang PE disini, maka lebih baik bagi kamu yang belum paham struktur dan format file PE, kamu bisa baca module seminar kemarin yang sudah dicetak versi digital dalam format pdf, silahkan download di sini .

Pada file PE (Portable Executable) seperti file yang berekstensi EXE,DLL,OCX dkk terdapat yang namanya entrypoint (EP), entrypoint itu sendiri apa? Entrypoint itu adalah apabila kamu menulis program dalam bahasa VB :

Sub main()

' kode instruksi

' kode instruksi

End Sub

Apabila kamu menulis program pada bahasa C :


int main(int argc, char ** argv[])

{

/*

* kode instruksi

* kode instruksi

*/

}


Sub “main” pada contoh kedua source code diatas itulah bentuk dari implementasi entrypoint, maksudnya entrypoint adalah alamat pada sebuah program yang akan dieksekusi pertama kalinya ketika program dijalankan, lain dengan contoh entry pada contoh source code di atas, entry yang saya maksud adalah entry pada file yang sudah berbentuk file executable.

Nah lalu apa hubungannya entrypoint dengan infeksi virus? Jelas ada hubungnnya dong, karena inti dari infeksi virus adalah entrypoint itu sendiri. Virus membelokkan entrypoint ke instruksi yang lain (bukan yang semestinya). Contoh kode dalam format pseudo :

1: masuk (EP)

2: inisialisasi

3: jalankan kode utama

4: keluar


Alur program diatas merupakan contoh program yang masih normal, program akan masuk melalui entrypoint (yang diberi tanda PE baris 1) lalu melakukan (2) inisialisasi – (3) menjalankan kode utama dan terakhir, (4) keluar. Lalu bagaimana apabila entry point dibelokkan? Seperti ini :

1: lompat baris 4

2: inisialisasi

3: jalankan kode utama

4: keluar


Pada contoh program yang pertama inisialisasi dan kode utama akan selalu dijalankan, namun tidak demikian dengan contoh program kedua, inisialisasi dan kode utama tidak akan dijalankan karena entry point telah dibelokkan untuk melompat ke baris 4, dimana baris 4 merupakan instruksi terakhir keluar dari program.

Contoh, tulisan yang dicetak tebal yang akan dieksekusi, sebaliknya baris yang tidak dicetak tebal tidak akan pernah dieksekusi :

Program asli sebelum entrypoint dibelokkan

1: masuk (EP)

2: inisialisasi

3: jalankan kode utama

4: keluar

Atau apabila digambarkan dengan urutan horizontal kekanan, maka yang akan dieksekusi pada program sebelum entrypoint dibelokkan adalah:

(1)->(2)->(3)->(4)

Program setelah entrypoint dibelokkan

1: lompat baris 4

2: inisialisasi

3: jalankan kode utama

4: keluar

Lihat apabila digambarkan dengan urutan horizontal kekanan, baris yang akan dieksekusi pada program setelah entrypoint dibelokkan adalah:


(1)->(4)

Baris 2 dan 3 terlewati.

3. Entrypoint dan Virus

Lalu bagaimana dengan virus? Lihat contoh program yang telah terinfeksi dalam pseudo di bawah ini :

1: lompat baris 5

2: inisialisasi

3: jalankan kode utama

4: keluar

5: masuk (EP virus)

6: cari mangsa

7: hapus data

8: lompat baris 2


Dari alur di atas bisa kita lihat komputer akan membaca entry point lalu melompat ke baris 5, dimana baris 5 ini merupakan entrypoint virus (kode virus yang diberi warna merah), instruksi jahat viruspun mulai dieksekusi satu persatu : (6) mencari mangsa dan (7) menghapus data. setelah selesai, (8) kembali ke kode program aslilnya di baris 2 : (2) inisialisasi – (3) menjalankan kode utama – (4) keluar. Bisa dipahami kan?

Atau apabila digambarkan dengan urutan horizontal kekanan, baris yang akan dieksekusi adalah:

(1)->(5)->(6)->(7)->(8)->(2)->(3)->(4)

Di sini saya gambarkan program A terinfeksi oleh virus X, setelah A terinfeksi maka ketika dijalankan program A tetap lancar-lancar saja, tidak terjadi hal-hal yang mencurigakan, mengapa? Karena walaupun si A telah terinfeksi, kode si A akan tetap dieksekusi walaupun sebelumnya kode si X lah yang terlebih dahulu dieksekusi, tentu kode X dieksekusi secara diam-diam tanpa sepengetahuan user. dan ternyata tanpa sepengetahuan juga, si X telah membuat si X -si X kecil lainnya yang siap didistribusikan :).

Dasar alur kerja virus adalah sebagai berikut :

1: Cari mangsa

2: Ketemu?

3: Tidak Kembali ke baris 1

4: Infeksi

5: Lompat ke baris 1


Mungkin alur tersebut sudah umum untuk mengimplementasikan basic virus, dan saya yakin sudah banyak yang tahu, tetapi yang akan saya jelaskan secara khusus pada artikel ini adalah pada baris 4 yakni “Infeksi”. Bagaimana prosesnya? Bagaimana caranya virus bisa menginfeksi program lain tanpa merusak program yang ditempeli (host) ? Di sinilah letak seni sesungguhnya dalam dunia per-virusan yang nyata, no worm inside :P. Dan inilah pertanyaan terbesar pertama saya ketika mulai mempelajari struktur PE.

FYI:

Worm semi virus W32/Trafox bukanlah satu-satunya yang saya jadikan objek belajar pertama saya tetapi sebelumnya ada worm semi virus mancanegara yang bernama W32/Beagle, inilah worm semi virus pertama yang saya pelajari, seperti disebutkan “worm semi virus” ya beagle memiliki kemampuan menggandakan diri dan menginfeksi program lainnya untuk dijadikan inang. Dibandingakan dengan rival-nya W32/Netsky, beagle memiliki tehnik-tehnik yang jauh lebih canggih dari netsky, beagle dibuat menggunakan assembly dan menggunakan 101 tehnik infeksi, reproduksi, stealth, Mass mailer dengan menggunakan SMTP sendiri dan Open Source !!, sedangkan netsky dibuat menggunakan C++, menyebar melalui e-mail dengan SMTP sendiri, dan tidak ada tehnik-tehnik yang menonjol selain exploitasi kecil dan social engineering. Tetapi kenapa dalam medan pertempuran virus dunia justru netsky yang memenangkan pertarungan dan menjatuhkan kedudukan beagle di bawah kedudukannya? Bahkan rumornya pernah menjarah 60-70% bandwith dunia!!?? karena penyebarannya yang luar biasa melalui pesan elektronik (e-mail). Kehebatan netsky sendiri adalah kemampuan SE (Social Engineering) yang hebat, dan yang lebih mencengangkan lagi ternyata worm netsky hanya buatan anak berumur 18 tahun. Cape dech :D


4. Rutin Infeksi

Btt.

To the point, dalam rutin infeksi ada beberapa subrutin yang harus dijalankan terlebih dahulu sebelum proses infeksi dimulai, diantaranya :

  1. Memeriksa jenis file host (file/program yang akan ditumpangi)

  2. Memeriksa apakah host merupakan PE/ELF yang valid?

  3. Memeriksa apakah host diproteksi atau ada dalam daftar SFC? (Win 2k kearas).

  4. Memeriksa apakah host memungkinkan untuk ditumpangi?

  5. Memeriksa apakah host boleh ditumpangi?


Ke-lima langkah tersebut merupakan dasar rutin yang biasa digunakan oleh virus yang “baik” untuk memastikan target-nya, atau bisa diungkapkan dalam pertanyaan “Is Infectable?”.

1. Memeriksa jenis file host


Rutin pertama sebelum infeksi adalah memeriksa jenis host yang akan ditumpangi, rutin ini berguna untuk memastikan apakah jenis target di-”support” untuk ditumpangi? Sebagai referensi virus Lin32/Shrug yang akan memeriksa apakah target dari jenis file PE (program Windows) atau dari jenis ELF (program Linux). Linux? Ya linux virus Lin32/Shrug memiliki kemampuan menginfeksi dua sistem operasi sekaligus (Cross Platform) Windows dan Linux. Tahapan ini tidak harus ada dalam setiap pembuatan virus, kecuali vxer berniat untuk membuat virus cross platform seperti Lin32/Srhug tersebut.

Selain pemeriksaan tipe berdasarkan lingkungan sistem operasinya, juga bisa berdasarkan arsitektur prosesor yang digunakan, misalnya program 32 bit, 64 bit atu program-program jadul Win versi 95, 16 bit.

2. Memeriksa apakah host merupakan PE/ELF yang valid?

Setelah virus mendapatkan jenis host yang disupport, dalam hal ini saya asumsikan file PE, maka virus harus memastikan apakah benar-benar file tersebut memiliki struktur PE yang valid? Awas jangan sampai virus salah infeksi, vxer yang professional tidak akan melewati bagian ini, karena salah dalam langkah ini akan mengakibatkan kerusakan pada host. Lalu bagaimana caranya? Apakah dengan melihat ekstensi .EXE sudah cukup untuk memastikan bahwa file tersebut merupakan file PE? Tidak, hal itu tidak cukup, virus perlu memeriksa kedalam tubuhnya, misalnya bagian DOS header, body dan section.

FYI:

Biasanya untuk memeriksa apakah suatu file merupakan PE yang valid bisa dengan cara melihat DOS signature pada 2 byte awal tubuh program yang pasti bertanda “MZ” lalu memeriksa NT signature apakah memiliki tanda “PE”, dan biasanya masih perlu ditambah jenis dari mesin yang dibutuhkan.

3. Memeriksa apakah host diproteksi atau ada dalam daftar SFC? (Win 2k kearas).

Pada sistem operasi Windows ada istilah yang dinamakan dengan WFP (Windows File Protection) dan SFC (System File Checker), apa itu SFC? Ialah semacam proteksi yang diberikan Windows terhadap beberapa file yang terdaftar atau file sistem bawaan windows, misalnya file cmd.exe file shell32.dll dkk dan biasanya terdapat pada direktori windows dan system32. Apabila file-file yang diproteksi tersebut dihapus makan secara otomatis Windows akan mencari cadangannya untuk dikembalikan, tetapi apabila cadangannya tidak ditemukan maka Windows akan menampilkan jendela dengan judul “System File Protection” diikuti dengan permintaan untuk memasukkan CD instalasi Windows.

Nah lalu untuk apa tahapan ini digunakan oleh virus-virus modern saat ini? Jelas untuk meminimalisir kecurigaan pengguna komputer dari ke-tidakwajaran komputernya yang bertingkah laku aneh, sehingga memacu user untuk memeriksa komputernya dari virus, hal ini sudah merupakan nilai minus bagi vxer professional kalo sampai membuat virus yang mudah diketahui jejaknya (mengundang kecurigaan user).

4. Memeriksa apakah host memungkinkan untuk ditumpangi?

Apakah host telanjang? Atau tidak di-pack di-proteksi menggunakan PE protector?, apakah masih memungkinkan tubuh virus disisipkan di sela-sela kosong diantara kode utama? (cave location), apakah jumlah section masih bisa di-tambah? Apabila salah satu instruksi di atas ada yang gagal atau yang menyebabkan kegagalan, maka proses infeksi pun tidak bisa dilanjutkan.

5. Memeriksa apakah host boleh ditumpangi?

Tahapan terakhir setelah semua tahapan diatas lulus yang artinya host sudah siap diinfeksi, adalah memeriksa apakah host boleh saya infeksi? Loh untuk apa? Bukannya virus itu dibuat untuk menular? Kenapa masih ada pertanyaan “boleh atau tidak”? Lagi-lagi vxer professional jarang melewatkan bagian ini, kenapa? Karena ada peraturan di dunia vxer untuk tidak menginfeksi program installer. Hah? Mengapa? Karena program installer biasanya menggunakan self-checksum untuk memastikan apakah dirinya dimodifikasi atau tidak, apabila program installer sudah dimodifikasi biasanya akan menampilkan pesan “File CRC failed, may be modified or infected by virus. Or you can using /NCRC command line to bypass CRC check” bla..bla...bla.., setelah itu proses installasi berhenti.

Apabila hal seperti tersebut di atas terjadi pada kita, maka apa yang ada dibenak kita? Langsung klik “OK” dan anggaplah angin lalu? Atau kita curiga dan mulai memeriksa-memeriksa? Seandainya semua orang memilih pilihan yang pertama (tekan tombol “OK” dan berlalu) maka tahapan ini tidak diperlukan oleh vxer, tetapi apabila yang terjadi justru sebaliknya? You are unlucky vxer ;) dan sudah bisa dipastikan umur virus relatif pendek, apabila ternyata yang memeriksa adalah pakar dari antivirus company.

Untuk saat ini segini dulu yak, untuk rutin infeksinya akan saya lanjutkan ke part II dan langsung saya implementasikan dari sudut programmingnya. Owkeh c u next paper ;)

Yk, 19-11-2007

anvie

anvie_2194 yahoo.com

anvie ansav.com

Tidak ada komentar: