Cara kerja PE
Infector
Untuk memahami cara
kerja virus PE infector, program yang diperlukan yaitu
-
Peid
-
W32Dasm
-
Hiew
-
PE Tools
Sumber:pixabay.com |
Berikut sintak dari MessageBox :
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
Berikut keterangan dari parameter fungsi MessageBox :
hWnd, yaitu handle Window dari program
lpText, yaitu isi dari tulisan pada kotak pesan
lpCaption, yaitu isi dari judul pesan pada kotak pesan
uType, yaitu jenis dari kotak pesan yang ditampilkan, misal
terdapat tombol OK, Cancel dan sebagainya.
Untuk lebih jelas, jika perintah MessageBox diisi dengan
parameter sebagai berikut :
MessageBox(0,’ Nice
to meet you!’,’Hello’,mb_ok)
Maka hasil output dapat dilihat pada gambar 1.
Image1. Mencoba perintah MessageBox |
Sekarang Anda telah mengetahui teori dari kode yang akan
digunakan. Skenario selanjutnya yaitu menginject
kode virus ke program. Untuk program yang akan dijadikan target, penulis
menggunakan bahasa pemrograman Delphi untuk membuat program “Hello World”. Compile
dengan nama Project1.exe.
Berikut kode program :
procedure
TForm1.FormCreate(Sender: TObject);
begin
MessageBox(0,'Hello
world',',mb_ok);
end;
Yang dibutuhkan sekarang yaitu program untuk melihat
informasi pada PE file program. Anda bisa menggunakan Peid.
Buka Project1.exe menggunakan peid. Klik tombol “>” disamping
kanan EP Section.Maka akan muncul window baru berisi informasi mengenai section
pada Notepad.exe.
Image2. Info section pada Project1.exe |
Pada kolom pertama terdapat .text section yang merupakan
tempat dari kode program yang telah ditulis oleh pembuat program. Oleh karena
itu, lokasi ini cocok untuk dijadikan tempat untuk menaruh kode virus. Section ini dimulai dari offset 400, yaitu nilai dari Raw Offset. Ukurannya dari
Virtual Size Size yaitu A4958. Untuk menentukan posisi offset kode virus
dimulai maka Raw Offset + Virtual Size = 400 + A4944 = A4D44. Untuk mengetahui sampai offset berapa kode virus dapat ditulis
yaitu Raw Offset + Raw Size = 400 + A4A00 = A4E00. Sedangkan untuk menghitung
jumlah bytes yang dapat dipakai pada section ini yaitu Raw Size – Virtual Size
= A4A00 – A4944 = BC bytes. Sepertinya cukup untuk menginject kode virus.
Pada kolom ketiga terdapat .data section. Di section ini
untuk menaruh parameter yang akan digunakan oleh perintah MessageBox. Sama
seperti kolom pertama, mari kembali lakukan sedikit perhitungan. Raw Offset +
Virtual Size = A5C00 + 22A8 = A7EA8. Raw Offset + Raw Size = A5C00 + 2400 = A8000.
Raw Size – Virtual Size = 2400 – 22A8 = 158 bytes.
Semua perhitungan yang telah dilakukan merupakan perhitungan
dalam format Hex.
Langkah selanjutnya yaitu tulis parameter pada MessageBox di
.data section, dimulai pada offset A7EA8. Untuk melakukan ini diperlukan
program hex editor. Penulis menggunakan Hex Workshop. Buka project1.exe menggunakan
Hex Workshop, tekan ctrl +g untuk membuka Goto agar dapat melompat ke offset A7EA8.
Karena perhitungan yang telah dilakukan dalam format Hex maka jangan
menggunakan Dec tetapi Hex. Klik tombol Go. Anda meluncur ke offset A7EA8.
Image3. Tampilan Goto Pada Hex Workshop |
Pada bagian kanan, yang berisi titik-titik, dimulai dari
offset A7EA8, isi dengan parameter-parameter, yaitu “Nice to meet you!” dan “Hello”.
Pada parameter pertama dimulai dari
offset A7EA8 sampai offset A7EB8. Pada
offset A7EB9, biarkan tidak diisi artinya tetap bernilai 00 jika dilihat pada
bagian kiri. Sedangkan parameter kedua dimulai dari offset A7EBA sampai offset A7EBE.
Offset-offset ini disebut Relative Virtual Address (RVA). Yang diperlukan
adalah Virtual Address yaitu RVA + Image Base = A7EA8 + 400000 = 4A7EA8.
Virtual Address dari A7EBA adalah 4A7EA8. Sedangkan Virtual Address dari A7EBA adalah
A7EBA + 400000 = 4A7EBA. Darimana nilai Image Base? Jika melihat hasil
perhitungan, nilai Image Base adalah 400000. Untuk lebih jelasnya berapa nilai
Image Base dapat menggunakan program Peid. Klik tombol “>” di samping kanan
Subsytem. Pada baris kedua terdapat nilai dari Image Base yaitu 400000.
Image4. Mengisi parameter dimulai dari ofset A7EA8 |
Image5. Melihat nilai Image Base pada Peid |
Sampai saat ini virus telah menemukan lokasi offset untuk
menaruh kode virus pada file target. Jika space yang tersedia ternyata tidak
cukup untuk kode virus, maka virus dapat memperbesar space dengan catatan harus
mengubah nilai dari SizeOfImage atau SizeOfCode dan beberapa nilai lainnya jika
diperlukan. Selain itu virus juga dapat membuat section baru untuk menaruh kode
virus. Otomatis nilai dari NumberOfSections pun mesti diupdate. Namun cara
membuat section baru ini agak kurang disukai virus karena antivirus dapat
dengan mudah menghapus section ini dan file yang terinfeksi pun menjadi bersih.
Sekarang virus akan menulis perintah untuk memanggil fungsi
MessageBox. Fungsi ini dapat dipanggil dari Import Address. Begitu juga jika
virus ingin menduplikasikan diri dengan memakai perintah CopyFile. Semua
fungsi-fungsi winapi ini terdapat di Import Address. Jika fungsi ini tidak
terdapat di Import Address, virus akan memanggil fungsi yang dibutuhkan secara
langsung pada file library Windows yang mengandung fungsi tersebut. Jika
fungski yang ingin dipanggil terdapat di file kernel32.dll, maka teknik
pemanggilan ini biasa disebut walk
kernel. Walk kernel juga sering digunakan virus untuk menghindari heuristik
dari antivirus., hal ini karena tidak ada fungsi mencurigakan yang terdapat di
Import Address.
Langkah selanjutnya yaitu mencari fungsi MessageBox di
Import Address. Agar mempermudah mencari, diperlukan program W32Dasm. Buka
project1.exe menggunakan W32Dasm. Masuk ke menu Search – Find Text. Isi dengan
MessageBox hingga menemukan reference dari MessageBox yaitu 004B08E8
Image6. Reference MessageBox pada W32Dasm |
Skenario yang telah dijalankan yaitu mencari posisi kode
virus, menulis data-data yang dibutuhkan virus kemudian mencari alamat dari
fungsi yang akan dipanggil. Saatnya membuat kode eksekusi virus. Buka Project1.exe
menggunakan Hiew. Normalnya tampilan yang muncul di dalam mode Decode. Jika
tidak dalam mode Decode, maka tekan tombol F4 dan pilih Decode atau cara lain
dengan menekan tombol Enter hingga muncul format seperti berikut :
.00400000: 4D dec bp
.00400001: 5A pop dx
.00400002: 50 push ax
.00400003: 0002 add [bp][si],al
Tekan tombol F5 dan isikan A4D44. A4D44 merupakan offset
yang didapatkan dari Raw Offset + Virtual Size pada .data section. Setelah itu,
tekan tombol F3 kemudian F2 dan isikan :
push 00
push 004A7EBA
push 004A7EA8
push 00
call d, [004B08E8]
jmp .A6C48
Isi dengan menekan tombol enter untuk setiap barisnya.
Setelah itu tekan tombol ESC dan F9.
Pada baris kedua dan ketiga merupakan offset dari parameter
yang telah ditulis sebelumnya. Pada baris kelima, fungsi MessageBox dipanggil
untuk mengeksekusi parameter di atasnya. Sedangkan pada baris terakhir
merupakan offset dari OEP untuk meloncat ke offset dari Original Entry Point.
Nilai OEP dapat dilihat di gambar 1 pada data Entrypoint.
Tampilan akan menjadi:
.004A5941: 6A00 push
000
.004A5943:
68A87E4A00 push
0004A7EA8 ---↓ (3)
.004A5948:
68BA7E4A00 push
0004A7EBA ---↓ (4)
.004A594D: 6A00 push
000
.004A594F:
FF15E8084B00 call MessageBoxA ;user32
.004A5955: E9EE0C0000 jmp
.0004A6C48 ---↓ (5)
Sampai saat ini, virus telah berhasil menginject dirinya
atau kode virus ke program lain. Tentunya cara penyisipan kode ini dilakukan
virus secara otomatis dengan menggunakan script program. Hal yang terakhir
dilakukan oleh virus yaitu mengubah OEP ke EP baru. Teknisnya, Anda dapat
menggunakan program PE Tools untuk mengedit nilai pada OEP. Buka PE Tools,
masuk ke menu Tools – PE Editor. Pilih Project1.exe, klik Optional Header dan
ubah nilai Entry Point.
Image7. Mengubah Entry Point menggunakan PE Editors. |
Bagaimana perlakukan
antivirus terhadap PE infector?
Pada worm, saat antivirus mengenali worm aktif di memory,
maka antivirus berusaha membunuh proses worm kemudian menghapus file worm
tersebut. Membunuh proses di memory sangat bervariasi caranya, terutama jika
worm memakai teknik rootkit. Pencarian handle dari proses worm merupakan hal
pertama yang dilakukan, selanjutnya handle tersebut diproses dengan rapi oleh
antivirus agar proses virus mati tanpa mengakibatkan Windows menjadi BSOD. Untuk worm teknik rootkit yang akut atau worm
yang membajak sekitar wilayah daerah kernel (ring0), pemodifikasian link list
EPROCESS pada kernel merupakan cara ampuh menghajar teknik rootkit pada proses
worm.
Sedangkan pada PE infector, antivirus menghadapi virus jenis
ini tergantung dari skenario dari si PE infector. Ada PE infector yang tidak
aktif di memory saat sistem start up. Namun akan aktif jika file yang telah
ditulari dijalankan, kemudian virus mencari mangsa file lainnya. Oleh karena
itu, selain membersikan memory dari gerombolan virus, maka memperbaiki file
yang telah terinfeksi virus pun merupakan langkah selanjutnya bagi antivirus.
Meskipun sangat disayangkan, bagi program installer yang telah dibersihkan
antivirus, kebanyakan tidak bisa dijalankan lagi. Hal ini tergolong wajar
karena bukankah antivirus tidak mengetahui bagaimana fisik file sebelum
terinfeksi.
Untuk membersihkan program yang terinfeksi oleh PE infector,
jika memandang lagi dari jendela reverse engineering, maka untuk membersihkan
rutin dari virus sederhana di atas yaitu saat OEP dipanggil, kode sebelum OEP
dapat dijadikan tersangka sebagai kode virus. Oleh karena itu, cukup dengan
memberi nilai null pada offset yang terisi kode virus merupakan cara paling
sederhana untuk membersihkan virus dari program yang terinfeksi. Langkah
selanjutnya, tentunya dengan mengembalikan EP ke OEP program dengan menggunakan
PEditor. Hal teknis atau secara reverse
engineering inilah yang diimplementasikan antivirus menjadi suatu script
program.
Penutup
Teknik virus dalam menginfeksi program cukup bervariasi.
Dalam keseharian, PE infector sering menginject kode virus ke section terakhir
pada suatu program. Skenario lain, virus menaruh kodenya pada lokasi akhir
tubuh program. Tidak penting dimana lokasi kode virus pada program yang
terinfeksi, yang terpenting yaitu program asli tetap dapat dijalankan dengan
baik. Tentunya virus akan kembali memanggil OEP dari program yang terinfeksi.
Sebelum virus menginfeksi program lain, virus akan mengecek
jika program tersebut mempunyai PE file yang valid. Namun, tidak semua virus
mengecek tanda PE file ini. Oleh karena itu, ketika Anda ingin menjalankan
antivirus portable di flashdisk untuk membersihkan komputer yang telah
terinfeksi virus, Anda bisa mencoba mengganti ekstensi dari program portable
tersebut menjadi ekstensi seperti .cmd, .bat atau .com untuk menghindari
penginfeksian dari virus, terutama yang berjenis PE infector. Selanjutnya virus
akan mengecek target, apakah target telah terinfeksi atau tidak. Hal ini untuk
mencegah penginfeksian secara berulang.
Untuk membersihkan virus PE infector, secara konsep caranya
sama seperti virus menginfeksi program, yaitu semua operasi dilakukan berdasarkan
data di PE file. Informasi yang terdapat pada PE file merupakan referensi utama
antivirus untuk membersihkan program yang telah terinfeksi virus.
Ditulis untuk PC Media edisi 5 2010
No comments:
Post a Comment