Monday, 16 October 2017

Memahami Cara Kerja Virus PE Infector

Jika melihat worm dimana cara penyebarannya dengan menduplikasikan dirinya ke flashdisk, jaringan lokal atau Internet, kemudian berharap dirinya diaktifkan oleh pengguna, maka virus berjenis PE Infector tidak akan menduplikasikan dirinya ke harddisk secara langsung. PE infector akan menginfeksi program lain agar menjadi virus dengan menaruh kode virus di PE file. Teknik ini tidak akan membuat pengguna curiga saat membuka program yang telah terinfeksi virus. Oleh karena itu, umumnya program installer menggunakan fitur file integrity checkers untuk tidak menjadi media penyebaran virus.

Cara kerja PE Infector
Untuk  memahami cara kerja virus PE infector, program yang diperlukan yaitu
-          Peid
-          W32Dasm
-          Hiew
-          PE Tools

Memahami Cara Kerja Virus PE Infector
Sumber:pixabay.com
Berikut ilustrasi cara kerja PE Infector secara reverse engineering, yaitu dengan menginject kode virus ke PE file berdasarkan informasi yang terdapat pada PE File.  Agar lebih memahami, kode virus yang akan ditularkan hanya berupa pesan sederhana. Untuk menampilkan pesan atau message box, cara umum yaitu menggunakan perintah winapi MessageBox.

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
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
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
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
Image4. Mengisi parameter dimulai dari ofset A7EA8

Image5. Melihat nilai Image Base pada Peid
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
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.
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