Bagaimana Cara Membuat Antivirus Part 1
Mungkin sudah sangat banyak artikel tentang bagaimana cara membuat sebuah program komputer (software) dari yang sederhana hingga yang sangat kompleks. Mungkin juga sudah banyak artikel-artikel tentang bagaimana cara membuat virus komputer. Tetapi tahukah Anda, bahwa ternyata tidak banyak artikel tentang bagaimana membuat Antivirus. Padahal ini sangat menarik, nah pada kesempatan kali ini saya akan menunjukkan bagaimana caranya membuat antivirus.Dalam dunia komputer, antivirus adalah program komputer yang didesain untuk membantu mendeteksi program jahat dan atau object-object yang diketahui dapat menimbulkan kerusakan, program jahat biasanya disebut dengan istilah malware, virus, atau worm, sedangkan object-object yang dapat menimbulkan kerusakan non-program biasanya disebut sebagai exploit.
Bagian-bagian Antivirus
Sebelum memulai praktik membuat antivirus, terlebih dahulu Anda harus mengetahui bagian-bagian yang membentuk antivirus.Pada dasarnya antivirus terdiri dari beberapa bagian:
- Scanner engine.
- Database.
- Update engine.
- Daemon engine (optional).
Scanner Engine
Sebuah antivirus haruslah dapat melakukan pemindaian (scanning) pada object-object seperti berkas dan program komputer. Element ini merupakan bagian inti dari sebuah antivirus agar dapat mengenali sebuah object, bagus atau tidaknya sebuah antivirus tergantung pada bagian ini.Scanner engine pada Antivirus biasanya dibuat menggunakan bahasa pemrograman low level seperti Assembly atau C, hal ini dikarenakan agar proses scanning bisa bekerja seoptimal mungkin menggunakan performa semaksimal mungkin, sehingga proses scanning bisa berjalan dengan cepat. Contoh pada Antivirus AVI scanner engine-nya dibuat menggunakan bahasa C.
Kami akan memberikan tutorial cara membuat scanner engine yang sederhana pada bab berikutnya.
Database
Sebuah antivirus haruslah memiliki database yang menyimpan definisi atau signature malware dan atau exploit. Seperti apa bentuk definisi atau signature-nya? Hal ini tergantung dengan tipe object malwarenya, sebagai contoh, apabila malware itu berjenis worm atau trojan, maka bentuk signature-nya biasanya berupa hash tetapi tidak untuk jenis virus atau polymorphic malware, mengapa? Karena virus menginfeksi program sehingga nilai dari hash-nya tidak bisa dijadikan patokan untuk menyebut apakah suatu berkas adalah virus atau bukan, sekalipun teknik hashing bisa digunakan untuk memindai virus namun harus dengan cara mengeluarkan (extract) code virus yang menempel pada prgoram yang terinfeksi terlebih dahulu untuk kemudian di-hash.Gambar 1, Teknik hashing menggunakan algoritma SHA-1
Ada banyak algoritma hashing, diantaranya yang paling populer adalah MD5 (Message Digest) dan SHA-1 (Secure Hashing Algorithm). Pada Gambar 1 tampak bagaimana saya mendapatkan nilai hashing pada file
trojan-fakeav.exe
dan wormshortcut.lnk
, nilai hash-nya terlihat dengan serangkaian kode heksa desimal.Nah untuk mempermudah kita dalam mempelajari bagaimana cara membuat antivirus, saat ini mari kita mulai dari teknik hashing terlebih dahulu.
Setelah kita tahu bagaimana cara mendapatkan nilai hash suatu berkas maka kita bisa memulai dengan memasukkannya ke dalam database. Biasanya skema database hashing untuk antivirus memiliki 3 kolom:
- Ukuran file.
- Nilai hash, dan
- Nama malware.
235008:7d91c1a62f6359ba65199ddb33459ab4:Worm.Autorun-9463
39424:bf2df6ba13aa91397088f8f9feb6848d:Trojan.Ramnit-5
299186:c8cde36b7164a3acc6e9a11e2cb7190c:Worm.27
Di mana formatnya adalah:
[UKURAN FILE] : [NILAI HASH] : [NAMA MALWARE]
Pada contoh ini kolomnya dipisahkan menggunakan karakter
:
.Mungkin Anda terlintas pertanyaan “mengapa tidak menggunakan database engine aja seperti MySQL” ? Sebenarnya sah-sah saja mau menggunakan engine apapun untuk database antivirus, tetapi harus diingat antivirus harus memiliki performa yang tinggi untuk proses pemindaian, saya rasa terlalu mahal apabila kita menggunakan database engine sendiri, sehingga sebisa mungkin database kita buat seringan dan sesimple mungkin.
Tentang cara membuat database antivirus akan kita pelajari pada bab selanjutnya.
Update Engine
Antivirus haruslah bisa melakukan update, karena antivirus akan menjadi kurang ampuh apabila bertemu virus atau malware jenis baru yang belum dikenalinya.Adapun komponen yang perlu di-update adalah engine dan database. Update engine biasanya dikenal dengan istilah upgrade, yakni memperbaharui komponen dari antivirus itu sendiri, biasanya update meliputi pembaharuan teknik scanning, heuristic, bug fixing, dan atau penambahan fitur baru. Sedangkan update database biasanya meliputi penambahan, pengubahan, atau penghapusan signature di dalam database tanpa mengubah engine-nya.
Setiap antivirus biasanya memiliki teknik update database yang berbeda-beda. Teknik yang biasanya digunakan adalah whole dan partial. Whole update adalah teknik update dengan cara mengganti database lama secara keseluruhan dengan database baru, kelemahan dari teknik update ini adalah apabila database semakin besar ukurannya maka akan menyusahkan proses update secara online, terutama bagi pengguna internet dengan bandwith kecil. Partial update adalah teknik update dengan cara menambahkan beberapa bagian yang perlu diupdate saja, dalam hal ini update database hanya akan menambahkan, mengganti, atau mengurangi signature dalam sebuah database.
Gambar 2. Script pada teknik partial update untuk menambahkan 3 signature baru pada AVI.
Detail cara membuat update database akan dijelaskan pada bab selanjutnya.
Daemon Engine (optional)
Bagian ini tidak harus ada, tetapi bisa menjadi nilai tambah pada antivirus. Daemon engine adalah engine yang didesain agar antivirus kita bisa melakukan pemindaian secara real-time.Dalam proses pembuatan antivirus ini adalah bagian ter-kompleks, mengapa? Karena tidak semua sistem operasi memiliki API yang mendukung atau setidaknya memudahkan melakukan intercepting / monitoring aktifitas user, sehingga bagian ini sangat tricky dan tidak cross-platform. Kesalahan dalam membuat bagian ini akan berakibat ketidak-stabilan sistem operasi, sebagai contoh apabila kita membuat daemon engine pada level kernel, dengan maksud agar kita bisa menghandle setiap aktifitas I/O secara exclusive maka kita harus benar-benar mengetestnya di semua versi sistem operasi, karena kesalahan pada bagian ini akan mengakibatkan kerusakan sistem yang serius.