Anti Virus (AV) banyak diandalkan
sebagai tools keamanan utama untuk mencegah virus (secara umum disebut
malware). Banyak miskonsepsi dan mitos yang berkembang seputar AV ini.
Salah satu miskonsepsi adalah merasa aman dengan adanya AV dan percaya
100% dengan AV, kalau AV bilang suatu file aman, maka kita akan percaya.
Tapi tahukah anda bagaimana cara AV
mendeteksi malware? Boleh kah kita percaya 100% dengan AV ? Mungkinkah
ada malware yang tidak terdeteksi AV ? Dalam tulisan ini saya akan
menjelaskan cara kerja AV dan dengan memahami cara kerjanya kita bisa
meloloskan diri dari deteksi AV.
Blacklist vs Whitelist
Dalam
computer science, secara teoretis, mendeteksi sebuah program malicious
atau bukan dengan sempurna adalah pekerjaan yang mustahil dan problem
ini sekelas dengan halting problem.
Dengan kata lain, secara teoretis, tidak ada satu algoritma atau
prosedur yang bisa membedakan dengan sempurna mana program yang
malicious dan yang tidak.
Ini adalah kabar buruk bagi kita semua
pengguna komputer karena ternyata tidak mungkin ada AV yang bisa 100%
melindungi kita dari malware. Namun di sisi lain, ini adalah kabar baik
bagi pihak yang berniat jahat karena ini berarti terbuka lebar peluang
untuk membuat malware yang tidak terdeteksi AV.
Walaupun secara teoretis pendeteksi malware yang sempurna tidak mungkin dibuat, AV akan berusaha keras mencegah jangan sampai malware berhasil dieksekusi sambil tetap mengijinkan program yang baik untuk dieksekusi
Bayangkan bila anda mengadakan acara
hanya untuk orang baik saja. Bagaimana cara menyeleksi mana tamu yang
baik dan tamu yang jahat ? Anda bisa menggunakan 2 pendekatan, whitelist
atau blacklist.
- Whitelist. Pendekatan whitelist secara default akan menolak semua orang kecuali dia ada dalam daftar tamu (whitelist). Dalam pendekatan ini kita harus mempunyai daftar nama, ciri-ciri atau kriteria tamu yang baik.
- Blacklist. Pendekatan blacklist secara default akan menerima semua orang kecuali dia ada di dalam daftar terlarang (blacklist). Kebalikan dari whitelist, dalam pendekatan blacklist kita harus mempunyai daftar orang-orang yang dilarang masuk.
Dari sudut pandang security tentu lebih
aman menggunakan whitelist karena defaultnya adalah “deny all”,
sedangkan blacklist defaultnya adalah “allow all”.
Kapan kita memilih memakai
whitelist/blacklist ? Salah satu kriterianya adalah berdasarkan
jumlah/size dari whitelist/blacklist. Bila jumlah orang baik jauh lebih
sedikit dari jumlah orang jahat, seperti dalam packet filtering firewall
(deny all kecuali dari IP X.X.X.X) atau input validation (deny all
kecuali inputnya hanya menggunakan digit 0-9), akan lebih aman dan
sederhana menggunakan whitelist.
Namun bila jumlah orang baik jauh lebih
banyak dari orang jahat, kita akan menggunakan blacklist. Dalam hal ini
AV dan IDS (intrusion detection system) menggunakan blacklist karena
jumlah program normal/baik diasumsikan jauh lebih banyak dari program
yang malicious. Dengan mengikuti pendekatan ini AV harus selalu
mengupdate blacklistnya mengikuti perkembangan malware, setiap ada
malware baru yang belum ada di blacklist harus ditambahkan ke dalam
blacklist.
Virus Signature
Kita tahu AV menggunakan pendekatan
blacklist, namun pertanyaannya apa yang disimpan dalam blacklistnya itu.
AV menyimpan signature malware dalam blacklistnya. Signature adalah
ciri atau pola unik yang bisa dijadikan penanda keberadaan malware.
Signature ini bisa berupa string
tertentu atau kumpulan instruksi yang diambil dari sample malware. Bila
suatu file mengandung signature ini, maka AV akan mendeteksi file
tersebut sebagai malware. Signature dalam file bisa dalam jumlah lebih
dari satu dan berada di mana saja, bisa berada di awal file, di akhir
atau di tengah.
Apakah ada file normal (bukan malware)
yang “kebetulan” dalam filenya mengandung deretan byte yang sama dengan
signature virus ? Itu mungkin saja terjadi dan hal itu disebut sebagai
“false positive”. Hal sebaliknya, “false negative” juga mungkin terjadi
bila signature/ciri khusus malware tersebut belum terdaftar dalam
blacklist AV sehingga malware tersebut lolos dari deteksi AV. Dalam
tulisan ini saya akan menunjukkan bagaimana meloloskan diri dari deteksi
AV.
Seperti apa bentuk signature dalam AV ?
Berikut adalah salah satu contoh signature yang diambil dari signature
ClamAV (dari /var/clamav/daily.cld):
Format detail untuk ClamAV bisa dibaca di sini. Sekarang mari kita ambil satu contoh signature paling atas:
PUA.Win32.Packer.Expressor-29:1:*:e8530300008bf05656e8980300008bc8
- Nama malware: PUA.Win32.Packer.Expressor-29
- Jenis: 1 artinya Portable Executable, 32/64 Windows
- Offset: * artinya di posisi manapun dalam file
- Hex Signature: e8530300008bf05656e8980300008bc8 yang merupakan kumpulan instruksi assembly dalam hexa.
Jadi signature tersebut bisa dibaca sebagai:
Bila dalam file windows executable (PE
file) ditemukan deretan byte “E85303….8BC8″ di posisi manapun maka file
tersebut diyakini mengandung malware
PUA.Win32.Packer.Expressor-29. Dengan kata lain, bila suatu file windows
executable mengandung instruksi “CALL DWORD 0×358, MOV ESI, EAX” dan
seterusnya sampai “MOV ECX,EAX” maka file tersebut diyakini mengandung
malware Expressor-29.
Static Analysis vs. Dynamic Analysis
Secara umum analisis terhadap suatu file untuk menentukan malicious atau tidak bisa dibagi menjadi 2 cara:
- Static analysis. Dalam static analysis AV akan memeriksa isi file byte demi byte tanpa mengeksekusinya. AV akan membaca isi file dan mencari deretan byte yang cocok dengan salah satu signature dalam blacklist yang dimiliki AV. Bila di dalamnya terkandung signature, maka AV akan yakin bahwa file tersebut adalah malicious.
- Dynamic analysis. Dalam dynamic analysis AV akan mengeksekusi malware tersebut. Lho ? Kalau malware sudah berhasil dieksekusi berarti game over dong? Memang cara ini sangat beresiko oleh karena itu harus dilakukan dalam virtual machine/sandbox yang diawasi dengan ketat.
Kelemahan dari static analysis adalah
dia tidak mampu mendeteksi malware yang signaturenya belum terdaftar
dalam blacklist. Kelemahan ini coba diatasi dengan dynamic analysis yang
tidak hanya melihat signaturenya saja, namun juga mengeksekusi malware
dalam sandbox dan melihat apakah program ini melakukan aktivitas yang
tidak mungkin dilakukan oleh program baik-baik. Pendeteksian malware
menggunakan dynamic analysis ini disebut juga teknik Heuristik.
Jadi sebenarnya bisa dikatakan dynamic
analysis juga menggunakan signature, namun tidak statik berupa deretan
byte, signaturenya berbasis behavior/aktivitas. Bila aktivitasnya
setelah dieksekusi dalam sandbox terlihat mencurigakan berdasarkan
signature behavior tadi maka AV akan mendeteksi file tersebut sebagai
malware.
Metasploit Meterpreter vs. Antivirus
Mari kita mulai membuat malware yang
lolos dari deteksi AV. Dalam contoh ini saya akan menggunakan Metasploit
meterpreter bind TCP sebagai malwarenya. Meterpreter dikategorikan
sebagai malware oleh semua AV, namun dalam contoh ini saya akan gunakan
AVG.
Pertama kita akan membuat
meterpreter.exe dengan msfpayload. Perhatikan saya tidak menggunakan
msfencode untuk obfuscating/encoding, saya hanya menggunakan payload
murni apa adanya.
Saya akan memastikan bahwa AVG saya adalah AVG dengan update terbaru (7 November 2013).Agar tidak mengganggu, saya akan sementara mematikan resident shield. Nanti bila meterpreter yang lolos deteksi sudah selesai, saya akan menyalakan kembali untuk mengujinya.
Mendeteksi Posisi Signature
Sebelumnya kita coba scan dulu file
meterpreter.exe yang masih original. Hasilnya adalah meterpreter.exe
kita terdeteksi sebagai Win32/Heur.
Tentu di dalam file ini mengandung
signature sehingga terdeteksi sebagai malware. Pertanyaannya adalah pada
posisi/offset berapakah signature tersebut ? Kita perlu tahu di mana
posisi offset yang mengandung signature karena dengan mengetahui posisi
signature dengan tepat, kita bisa mengubah isi filenya di posisi
tersebut agar tidak lagi cocok dengan signature AV.
Kita tidak tahu signature yang
terdeteksi berada di posisi berapa antara 0 sampai 73802 (ukuran file
meterpreter.exe). Bagaimana cara kita mencarinya ?
Kita akan melakukan dengan memecah file
meterpreter.exe menjadi beberapa file dengan ukuran kelipatan dari suatu
blok. Maksudnya bagaimana? Sebagai contoh kita akan memotong
meterpreter.exe dengan panjang blok 10.000 byte. Maka hasil split akan
memecah menjadi 8 file:
- File pertama berukuran 10.000 byte
- File kedua berukuran 20.000 byte (file pertama + 10.000 byte)
- File ketiga berukuran 30.000 byte (file kedua + 10.000 byte)
- File keempat berukuran 40.000 byte (file ketiga + 10.000 byte) dan seterusnya.
Saya membuat script python kecil untuk melakukan itu pydsplit.py yang sebenarnya adalah versi saya dari dsplit.exe.
Pada gambar di bawah ini terlihat
pydsplit.py memotong mulai dari offset 0 sepanjang kelipatan 10.000
byte. File yang terbentuk adalah meterpreter_10000.exe berukuran 10.000,
file meterpreter_20000.exe berukuran 20000 yaitu file pertama ditambah
satu blok 10000 lagi, dan seterusnya.
Sesudah dipotong menjadi 8 file, kita scan semuanya dengan AVG.
Berikut adalah hasil scan yang diexpor
ke bentuk Excel. Terlihat bahwa semua file terdeteksi sebagai malware.
Ingat bila file yang berukuran 10.000 byte terdeteksi malware, file-file
lain yang lebih besar juga pasti akan terdeteksi malware karena
file-file tersebut juga mengandung file yang berukuran lebih kecil .
Oleh karena itu kita akan mulai mencari signature dari file yang paling
kecil dulu.
Karena file meterpreter_10000 terdeteksi
sebagai malware, maka hasil ini menunjukkan bahwa ada signature di
offset 0 s/d 10.000. Perhatikan kita sudah mempersempit posisi signature
dari tadinya signature ada di offset 0 – 73802, sekarang dipersempit
menjadi rentang offset 0 – 10.000.
Selanjutnya dengan cara yang sama kita
akan melakukan split antara 0 s/d 10.000 dengan ukuran blok 1.000.
Hasilnya adalah 10 file dengan ukuran 1000, 2000, 3000, 4000 s/d 10.000.
Selanjutnya kita scan juga dengan AVG untuk melihat mana di antara 10 file itu yang terdeteksi mengandung malware.
Berikut adalah hasil scan setelah
diekspor ke Excel. Jangan kuatir dengan “Corrupted executable file” itu
cara AVG untuk mengatakan file ini tidak mengandung malware dan namun
dalam keadaan terpotong (tidak lengkap). Di antara 10 file hasil split
ini ternyata file berukuran 7000 tidak terdeteksi malware, artinya pada
posisi 0 – 7000 tidak mengandung signature.
Namun file berukuran 8000 dan 9000
dikenali sebagai malware oleh AVG artinya dalam file ini mengandung
signature. Karena kita tahu file berukuran 7000 tidak mengandung
signature, tapi file berukuran 8000 mengandung signature, berarti ada
sesuatu antara 7000-8000 yang menimbulkan kecurigaan AV. Sesuatu itu
adalah signature, dari hasil ini kita yakin bahwa ada signature yang
berada di offset 7000 s/d 8000.
Hasil scan ini bisa digambarkan seperti gambar di bawah ini (icon tengkorak melambangkan signature yang dicari).
Kini sudah semakin sempit rentang posisi
signature, tapi masih belum cukup. Kita perlu split lagi kali ini
antara 7000 – 8000 dengan ukuran blok 100 byte. Karena ukuran blok 100
byte, maka akan terbentuk file berukuran 7100, 7200, 7300, 7400 s/d
8000.
Kita juga scan file-file hasil split ini dengan AVG.
Hasil scan menunjukkan bahwa file
berukuran 7400 ke atas dikenali sebagai malware sedangkan file berukuran
7300 ke bawah tidak. Ini artinya sampai dengan offset ke 7300 tidak
mengandung signature. Karena file berukuran 7400 dikenali sebagai
malware, maka signature bisa dipastikan berada di posisi rentang 7300 –
7400.
Hasil scan ini bisa digambarkan dalam ilustrasi berikut.Sekarang rentang signature semakin kecil lagi, hanya 100 byte saja. Kita lanjutkan melakukan split antara offset 7300-7400 dengan ukuran blok 10 byte. Hasil split akan menciptakan file baru berukuran 7310, 7320, 7330, 7340 s/d 7400.
Berikut adalah hasil scan file hasil split tersebut. AVG mendeteksi malware pada file berukuran 7370 ke atas. Karena file berukuran 7360 tidak mengandung signature, ini artinya signature berada pada posisi 7360 s/d 7370.
Hasil scan ini bisa diilustrasikan seperti gambar di bawah ini.
Sampai disini kita tahu signature berada di posisi 7360 – 7370. Namun kita perlu satu kali lagi melakukan split dengan ukuran blok 1 byte saja sehingga tercipta file berukuran 7361. 7362, 7363 s/d 7370.
Hasil Scan file menunjukkan file berukuran 7361 s/d 7369 tidak terdeteksi sebagai malware. Hal ini meyakinkan kita bahwa signature berada di offset 7370 karena file berukuran 7370 terdeteksi sebagai malware sedangkan 7369 tidak.
Modifikasi File Meterpreter
Setelah kita tahu pasti offset signature
yang memicu AV mendeteksi malware pada posisi 7370, sekarang kita akan
melihat dengan hex editor byte pada posisi tersebut. Pada posisi
tersebut 7370 terdapat 0×75.
Kalau byte pada offset 7370 (0×75) dan
satu atau beberapa byte sebelumnya kita “rusak” atau ganti dengan byte
lain, maka seharusnya AV akan gagal mendeteksi malware karena signature
yang tadinya ada disana kini sudah tidak ada lagi.
Namun sebelum kita menimpa byte
signature tadi dengan byte lain untuk mengelabui AV. Pertanyaannya
apakah pengubahan ini membuat meterpreter.exe menjadi corrupt/rusak ?
Mari kita coba lihat dengan ollydbg.
Kita pasang jebakan breakpoint di 2 byte
terakhir, EO 75 dan mulai menjalankan meterpreter. Ternyata setelah
dieksekusi, meterpreter.exe bisa berjalan normal dan membuka session
meterpreter dengan sempurna tanpa satu kali pun menginjak jebakan
breakpoint kita.
Gambar berikut ini adalah eksploitasi
meterpreter bind TCP. Eksploitasi ini dilakukan dalam keadaan
meterpreter.exe dipasangi jebakan breakpoint. Eksploitasi berjalan
sukses tanpa terhenti di breakpoint sama sekali.
Karena semua fungsi meterpreter jalan
normal, tanpa sekalipun menginjak breakpoint, ini artinya instruksi pada
posisi 7370 ini tidak berpengaruh pada jalannya program (menjadi
semacam code cave / unreachable code).
Hasil ini meyakinkan kita untuk mengubah
2 byte terakhir 7369 dan 7370 menjadi byte 00 (null byte) tanpa perlu
takut mengganggu/merusak program.
Setelah 2 byte pada posisi 7369 dan 7370
(E0-75) diubah menjadi 00-00, kita coba scan ulang meterpreter.exe.
Hasil scan ulang menunjukkan kini AVG tidak lagi mendeteksi
meterpreter.exe sebagai malware. Game Over, You Win!
Dengan hasil ini berarti kita telah berhasil menghindari deteksi AVG hanya dengan mengubah 2 byte menjadi null.
Sekarang kita aktifkan lagi resident
shield di AVG karena disitu ada fitur “Use Heuristics”. Setelah itu kita
coba double-click meterpreter.exe untuk mengeksekusinya, apakah bisa
berjalan dengan sempurna tanpa hambatan dari AV ?
Setelah di double-click, ternyata
eksekusi tetap berhasil walaupun opsi “Use heuristics” dan “Enable
Resident Shield” diaktifkan, ini artinya AVG gagal total mendeteksi
meterpreter kita. File meterpreter.exe yang sudah kita modifikasi 2 byte
pada posisi 7369-7370 sekarang bisa dieksekusi secara lancar tanpa
diblok oleh AV.
Terus terang saya agak kecewa juga
melihat AVG begitu mudahnya ditipu hanya dengan mengubah 2 byte saja.
Bahkan fitur Heuristic analisisnya pun tak berdaya dengan “obfuscation”
sesederhana ini. Bagaimana dengan AV lain ? Saya harap lebih baik dari
ini, mungkin di lain kesempatan saya akan bahas
Post a Comment