IMPLEMENTASI APLIKASI ANTI-VIRUS BERBASIS PYTHON-FUSE DAN CLAMAV PADA SISTEM OPERASI UNIX Farchan Abdi Pahar – Wahyu Suadi, S.Kom, MM, M.Kom – Bagus Jati Santoso, S.Kom Jurusan Teknik Informatika, Fakultas Teknologi Informasi, Institut Teknologi Sepuluh Nopember, Email: [email protected] merusak data pada dokumen), membuat pengguna komputer merasa terganggu, maupun tidak menimbulkan efek sama sekali. Virus komputer umumnya dapat merusak perangkat lunak komputer dan tidak dapat secara langsung merusak perangkat keras komputer dengan cara memuat program yang memaksa over process ke perangkat tertentu misalnya VGA, Memory bahkan Procesor. Serangan virus dapat dicegah atau ditanggulangi dengan menggunakan perangkat lunak antivirus. Jenis perangkat lunak ini dapat juga mendeteksi dan menghapus virus komputer, asalkan basis data virus komputer yang dimiliki oleh perangkat lunak antivirus telah mengandung kode untuk menghapus virus tersebut. Perkembangan open source telah membawa dunia Teknologi Informasi (TI) memasuki era baru. Banyaknya aplikasi yang gratis dan dapat dibangun ulang memberi kemudahan yang luar biasa bagi para pengguna TI. Tak terkecuali bagi aplikasi anti virus, dengan mudah dapat kita jumpai aplikasi ini dalam bentuk open source. Salah satunya adalah ClamAV. Source code, libray, dan update nya dapat diperoleh dengan mudah dan gratis. Selain aplikasi anti virus, dunia open source juga merambah open filesystem, salah satunya adalah FUSE (Filesystem in UserSpace). Dengan dikembangkannya interface FUSE, diharapkan pengguna mampu menggunakan fasilitas yang disediakan oleh sistem operasi tanpa bantuan super user, melainkan hanya menggunakan otoritas yang dimilikinya. Beberapa fasilitas yang bisa digunakan dengan bantuan FUSE pada dasarnya merupakan fasilitas inti dari suatu sistem operasi yang berhubungan sistem manajemen berkas / direktori (Sistem Berkas), dengan bantuan FUSE segala macam fasilitas yang mampu melakukan operasi penyimpanan data dalam hal ini berkas mampu difasilitasi oleh FUSE, termasuk membuat sebuah filesistem virtual. Dengan memanfatkan fitur-fitur FUSE diatas sebagai scanning cache, serta adanya library dan update ClamAV yang gratis. Abstrak Virus komputer merupakan program komputer yang dapat menggandakan atau menyalin dirinya sendiri dan menyebar dengan cara menyisipkan salinan dirinya ke dalam program atau dokumen lain. Perkembangan open source telah membawa dunia Teknologi Informasi (TI) memasuki era baru termasuk aplikasi anti-virus, dengan mudah dapat kita jumpai aplikasi ini dalam bentuk open source. Salah satunya adalah CalamAV. Source code, library, dan update-nya dapat diperoleh dengan mudah dan gratis. Selain aplikasi anti-virus, dunia open source juga merambah open filesystem, salah satunya adalah FUSE (Filesytem in UserSpace). Dengan dikembangkannya interface FUSE, diharapkan pengguna mampu menggunakan fasilitas yang disediakan oleh system operasi tanpa bantuan super user, melainkan hanya menggunakan otoritas yang dimilikinya. Dengan memanfaatkan fitur-fitur FUSE diatas sebagai scanning cache, serta adanya library dan update ClamAVyang gratis. Maka aplikasi anti-virus yang memanfaatkan library ClamAV dan berbasis PythonFUSE dapat dikembangkan. Sehingga gangguan pada pengimplementasian TI sehari-hari, terutama Karena avirus dapat dikurangi Kata Kunci : FUSE, Python FUSE, Cache, ClamAV 1. Pendahuluan Perkembangan IT yang begitu pesat membawa banyak keuntungan dan kemudahan bagi manusia. Namun selain kemudahan, terdapat beberapa pihak yang melakukan penyalahgunaan dengan menciptakan program yang bersifat merusak, atau biasa dikenal dengan virus. Virus komputer merupakan program komputer yang dapat menggandakan atau menyalin dirinya sendiri dan menyebar dengan cara menyisipkan salinan dirinya ke dalam program atau dokumen lain. Virus komputer dapat dianalogikan dengan virus biologis yang menyebar dengan cara menyisipkan dirinya sendiri ke sel makhluk hidup. Virus komputer dapat merusak (misalnya dengan 1 Maka aplikasi anti virus yang memanfaatkan library ClamAV dan berbasis PythonFUSE dapat dikembangkan. Sehingga gangguan pada pengimplementasian TI sehari-hari, terutama karena virus dapat dikurangi 2. 3. dibatasi oleh ukuran alamat virtual. Untuk beberapa aplikasi, ukuran ini cukup, namun untuk yang lainnya terlalu kecil. Masalah berikutnya adalah apabila proses tersebut berhenti, maka informasinya akan hilang. Padahal ada beberapa informasi yang penting dan harus bertahan beberapa waktu, bahkan selamanya. Adapun masalah ketiga adalah terkadang sangat perlu lebih dari satu proses untuk mengakses satu informasi secara bersamaan. Untuk memecahkan masalah ini, informasi ini harus dapat berdiri sendiri tanpa bergantung pada sebuah proses. Pada akhirnya, kita memiliki masalahmasalah yang cukup signifikan dan penting untuk dicari solusinya yaitu : • Kita harus dapat menyimpan informasi dengan ukuran yang besar. • Informasi harus tetap ada, meskipun proses berhenti. • Informasi harus dapat diakses oleh lebih dari satu proses secara bersamaan. Solusi ketiga permasalahan tersebut bisa diatasi dengan keberadaan file. File adalah kumpulan dari informasi yang saling berhubungan yang disimpan di secondary storage. File dapat dipandang sebagai bagian terkecil dari secondary storage, sehingga dapat dikatakan bahwa data tidak dapat disimpan di secondary storage kecuali jika data tadi ditulis dalam file. Secara umum, file dibagi menjadi dua jenis menurut isinya, yaitu : file text dan file biner. File text adalah file yang isinya terdiri dari text (alfabet, angka dan karakterkarakter ASCII). Sedangkan file biner adalah file yang ditulis berdasarkan blok-blok memory dari suatu program. Python Python adalah sebuah bahasa pemrograman berbasis object yang dinamis dan dapat digunakan dalam berbagai pengembangan software. Python menawarkan dukungan yang kuat terhadap berbagai bahasa pemrograman lain dan alatalat pengembangan software. Python di desain untuk mempertinggi produktivitas programmer dan kemudahan kode program untuk dibaca. Meski syntax python dibuat minimalis, dukungan berupa standard library-nya sangatlah luas dan lengkap. Python menggunakan cara yang unik untuk memisahkan satu blok program dengan blok program yang lain, yaitu dengan menggunakan spasi atau tab. Hal ini sangat berbeda dengan bahasa-bahasa pemrograman yang lain. Python mendukung banyak paradigma pemrograman, utamanya pemrograman berbasis object, pemrograman terstrurktur dan berbasis fungsi. Python adalah bahasa yang umum dipakai dalam bentuk script (tanpa harus melalui proses kompilasi terlebih dulu). Seperti halnya bahasa lain yang berbentuk script, python menggunakan dynamic type (penggunaan variable tanpa harus menentukan type variable secara eksplisit) dan secara unik juga mengatur penggunaan memory secara otomatis seperti halnya pada java virtual machine. Dalam sejarahnya, python pertama kali dipublikasikan pada tahun 1991 oleh Van Rossum dengan versi 0.9.0. Python mencapai versi 1.0 pada Januari 1994. Sekarang python telah dipublikasikan pada dua versi, yaitu versi 2.x dan 3.x. Hal ini dilakukan karena sejak versi 3.0, python melakukan perubahan yang sebagian diantaranya tidak compatible dengan versi sebelumnya. Oleh karena itu, python dipublikasikan dengan dua versi bersamaan karena untuk masalah kompabilitas dengan program-program yang telah dibuat menggunakan python sebelumnya. Python versi 3.0 sendiri mulai di lepas ke publik sejak tanggal 3 Desember 2008. 4. File Semua aplikasi komputer membutuhkan penyimpanan dan pengambilan informasi. Ketika sebuah proses sedang berjalan, proses tersebut menyimpan sejumlah informasi yang 2 Filesystem In Userspace Filesystem in Userspace adalah suatu library yang memungkinkan suatu aplikasi yang berada dalam userspace bisa berperan sebagai filesystem yang direferensikan oleh kernel. Library ini tercatat telah berjalan di berbagai sistem operasi, antara lain : GNU/Linux, Unix, MacOS, bahkan Microsoft Windows. Di GNU/Linux, library ini bisa digunakan untuk menciptakan filesystem melalui suatu device file /dev/fuse. Melalui file tersebutlah semua komunikasi antara program yang berjalan di userpace berkomunikasi dengan kernel. FUSE adalah suatu kernel module pada sistem operasi unix-like yang mengijinkan user non-administrator membuat filesystemnya sendiri tanpa harus merubah kernel. Hal ini bisa tercapai dengan menjalankan filesystem code pada level user dengan FUSE sebagai “jembatan” pada interface kernel sebenarnya. FUSE secara resmi masuk dalam source code kernel linux sejak linux versi 2.6.14. FUSE sangat bermanfaat untuk membuat virtual filesystem. Tidak seperti filesystem tradisional, yang menulis dan membaca data dari disk, vitual filesystem tidak melakukan penyimpanan sendiri. FUSE berfungsi sebagai mediasi dengan filesystem triadisional yang memegang penulisan dan pembacaan data secara fisik pada disk. Virtual Filesystem tersebut akan berfungsi sepenuhnya sebagai filesystem tapi belum tentu benar-benar menulis ke suatu media penyimpanan. Virtual Filesystem ini hanya menjadi jembatan komunikasi dengan layer dibawahnya yang bisa berupa filesytem lain atau bahkan suatu sistem yang tidak berkenaan dengan media-penyimpanan sama sekali. Operasi file atau direktori yang dilakukan oleh user masuk ke kernel melalui glibc, di dalam kernel ditangani oleh Virtual FileSystem (VFS). Oleh karena yang diakses oleh pengguna adalah FUSE, maka request tersebut diteruskan ke library FUSE dan berkomunikasi dengan program yang ada di sisi userspace untuk memberikan response terhadap request yang telah dikirimkan. Response yang dikembalikan oleh program yang berada di sisi userspace, kembali masuk ke dalam kernel melalui library FUSE dan glibc. Kemudian dikembalikan ke sisi pengguna oleh VFS sebagai response atas request yang telah dikirim. Seperti itulah FUSE bekerja dan menyediakan sebuah kemampuan bagi para pengembang untuk memberikan suatu filesystem yang fleksibel dan mudah disesuaikan. Penggunaan FUSE dalam berbagai bahasa pemrograman telah banyak dimudahkan oleh keberadaan wrapperwrapper yang dikembangkan pada masingmasing bahasa. Sebagai contohnya, dalam bahasa pemrograman Python, wrapper library yang berupa sebuah template kode FUSE telah memberikan abstraksi menyeluruh pada fitur-fitur FUSE. 5. lain menggunakan file descriptor. Keunggulan dari penggunaan socket ini dibanding apabila menggunakan pipes biasa adalah kita dapat melakukan komunikasi antar proses/program melalui jaringan berbasis yang TCP/IP, bahkan dengan program lain yang berjalan pada platform non-unix seperti Microsoft Windows, sepanjang program tersebut berbicara dalam protokol transfer yang sama. Fasilitasfasilitas yang disediakan oleh mesin Unix seperti rlogin, ssh, ftp, dan lain-lain menggunakan socket sebagai sarana komunikasi mereka. Socket dibentuk dan digunakan dengan cara yang berbeda dengan proses pipes di Unix. Komunikasi socket terutama diciptakan untuk tujuan menjembatani komunikasi antara dua buah program yang dijalankan pada mesin yang sama maupun berbeda. Kelebihan lain dari komunikasi socket adalah mampu menangani banyak klien sekaligus (multiple clients). Ada dua golongan socket di Unix yang paling umum dipakai yaitu: 1. Socket Lokal (AF_UNIX) 2. Socket Networking atau (AF_INET) Socket Networking sendiri memiliki beberapa jenis, yang paling umum digunakan yaitu: 1. Socket Stream (SOCK_STREAM) 2. Socket Datagram (SOCK_DGRAM) Socket Stream adalah socket komunikasi full-duplex berbasis aliran (stream) data. Pada model komunikasi Socket Stream, koneksi dua aplikasi harus dalam kondisi tersambung dengan benar untuk dapat bertukar data. Ini dapat dianalogikan seperti komunikasi telepon. Jika sambungan telepon di salah satu titik putus, maka komunikasi tidak dapat terjadi. Koneksi model seperti ini akan menjamin data dapat dipertukarkan dengan baik, namun memiliki kelemahan dalam hal penggunaan jalur data yang relatif besar dan tidak boleh terputus. Pada Socket Stream, data dikomunikasikan (dikirimkan) secara simultan, Socket Stream menggunakan protokol TCP, yang mana mengantar data secara simultan, selalu mencek dan mengirim ulang jika terjadi error. Inter-Process Communication Inter-Process Communication (IPC) atau komunikasi antar proses adalah cara atau mekanisme pertukaran data antara satu proses dengan proses lainnya, baik itu proses yang berada di dalam komputer yang sama, atau komputer jarak jauh yang terhubung melalui jaringan. Salah satu jenis IPC adalah socket. Socket adalah sebuah cara untuk berkomunikasi dengan program atau node 6. 3 Desain dan Implementasi Sistem Pengerjaan tugas akhir ini akan membangun sebuah aplikasi yang bernama Clam FileSystem (ClamFS). Aplikasi ini berfungsi sebagai filesystem dalam suatu sistem operasi yang memberikan fasilitas kepada penggunanya berupa setiap pengaksesan file yang berada pada filesystem tersebut akan di scan terlebih dahulu oleh daemon dari anti-virus. Aplikasi ini berbasis PythonFUSE (Filesystem in Userspace) dan menggunakan ClamAV sebagai anti-virus scanner-nya. Jadi dengan adanya aplikasi ini, pengguna dapat melakukan pengaksesan file tanpa perlu harus khawatir file tersebut terinfeksi virus atau tidak. Untuk menghindari pengulangan scan terhadap suatu file yang berakibat menurunnya performa pada waktu pengaksesan file, aplikasi ini menyediakan sebuah cache untuk menyimpan informasi dari setiap file yang telah di-scan. Selain itu jika ada perubahan terhadap suatu file, maka aplikasi ini akan mengecek atribut dari file tersebut pada cache apakah berubah atau tidak. Jika beubah maka file tersebut akan di scan ulang dan disimpan kembali di cache. Jadi ketika aplikasi ini berjalan dan pengguna akan melakukan pengaksesan file (baik itu berupa baca, tulis, menambahi, dan lain-lain), maka aplikasi ini akan mengecek terlebih dahulu pada cache, apakah file tersebut sudah pernah di-scan atau belum. Jika belum maka file tersebut akan di scan oleh ClamAV daemon. Aplikasi ini akan menolak pengaksesan apabila file mangandung virus. Arsitektur Sistem Implementasi ClamFS sehingga dapat digunakan selayaknya sebuah filesystem dengan menggunakan kerangka FUSE (Filesystem in Userspace) yang memanfaatkan keistimewaan media virtual filesystem ini dikembangkan dalam bahasa pemrograman Python. Sistem dikembangkan berbasiskan kerangka FUSE dan memanfaatkan semua kelebihan yang dimiliki oleh virtual filesystem-nya. Pemakaian bahasa pemrograman Python menjadikan sistem dikembangkan diatas library yang terdapat di pemrograman Python yang telah mendukung sepenuhnya terhadap kerangka FUSE atau lebih dikenal dengan library Python FUSE sehingga semua fungsi dasar yang terdapat pada kerangka FUSE lebih disederhanakan dan tentunya memiliki semua kelebihan yang dimiliki oleh bahasa pemrograman Python yang berbasiskan bahasa pemrograman intrepeter. Cara kerja ini sepenuhnya dijalankan dalam area pengguna biasa dan tidak membutuhkan suatu hak akses istemewa. Ketika modul daemon dijalankan dengan menggunakan suatu direktori sebagai mountpointnya, semua operasi filesystem yang terjadi di dalam direktori tersebut ditangani oleh library utama yang membangun sistem operasi UNIX (glibc) dan diteruskan pada area kernel. Pada area kernel ini, FUSE yang telah menjadi modul standar kernel sekarang ini menggunakan ClamFS ix t U n cke o l k So oto Pr 7. sebuah Virtual Filesystem (VFS) sebagai media komunikasi dengan area pengguna, yang tentu saja modul FUSE pada tingkatan kernel ini yang menanganinya. Dari area kernel, modul FUSE akan meneruskan permintaan file dari pengguna di dalam direktori mountpoint tersebut pada proses daemon melalui library glibc dan library FUSE (libfuse) dan Python FUSE. Pada proses daemon ini semua permintaan file dari pengguna akan diterjemahkan dan disederhanakan oleh Python FUSE untuk kemudian dilanjutkan oleh operasi scan oleh Clamd / libclamav. Program antivirus berbasis FUSE ini terbagi menjadi tiga bagian utama sebagai berikut: - libFUSE binding Digunakan untuk berkomunikasi dengan FUSE - Cache Menyimpan hasil scan per file untuk mempercepat performa pengaksesan. - Clamd/libClamAV binding Digunakan untuk berkomunikasi dengan daemon ClamAV. Get attribut file (path, timestamp, block status) clamd file user Gambar 7.1: Arsitektur Sistem Pada Gambar 7.1 dapat dilihat bagaimana alur dari aplikasi ini akan berjalan. Dimana ketika user akan mengakses suatu file, maka ClamFS akan mengambil atribut dari file tersebut berupa (path, timestamp dan block status) untuk dicek keberadaannya di cache. Hasil dari respon cache tersebut akan menentukan apakah filesytem ini akan membuka koneksi ke clamd untuk dilakukan operasi scan atau akan dikembalikan ke sisi user berupa allowed atau denied akses. 8. Uji Coba Pada bagian ini akan dibahas tentang hasil uji coba dan analisa kinerja aplikasi Clam File System. Uji coba ini akan dibagi menjadi dua studi kasus meliputi uji coba fungsionalitas dan uji coba performa. 8.1. Uji Coba Fungsional Uji coba ini bertujuan untuk mengetahui apakah masing-masing proses 4 pada sistem sesuai dengan kebutuhan sistem dan fungsi proses. Uji coba fungsionalitas meliputi beberapa pengujian fungsi pokok, antara lain: Gambar 8.3 : Log Filesystem pada pembacaan pertama Uji coba pembacaan file baru Uji coba pembacaan file yang telah tersalin Uji coba copy file Gambar 8.4 : Log Filesystem pada pembacaan kedua Hasil uji coba pembacaan file adalah sebagai berikut: Dari lima kali percobaan skenario di atas, maka dihasilkan data yang dapat dilihat pada Tabel 5.1. Tabel 8.1 Rata-rata hasil uji coba baca file Pembacaan ke- Rata-rata waktu (detik) 1 1.329 2 0.000143 Dari data diatas (Tabel 8.1) dapat kita lihat bahwa waktu yang dibutuhkan pada setiap kita melakukan pembacaan file untuk pertama kalinya, akan sangat jauh jika dibandingkan dengan pembacaan yang kedua. Hal ini disebabkan karena pada pemabacaan pertama aplikasi akan melakukan proses pengecekan cache lalu kemudian proses scan. Sedangkan pada pembacaan kedua, aplikasi hanya melakukan pengecekan pada cache saja tanpa melakukan proses scan lagi karena path file sudah berada dalam cache. Gambar 8.1: Log Filesystem saat cat coba.txt 9. Gambar 8.2 : Log Filesystem saat cateicar.com Uji coba kali ini kita akan melakukan pembacaan terhadap dua buah file yang belum pernah diakses sama sekali dan memiliki status yang berbeda. Status berbeda yang dimaksudkan disini yaitu terdapat file yang bersih (coba.txt) dan file yang mengandung virus (eicar.com). Hal ini dimaksudkan untuk menguji fungsionalitas dari anti virus tersebut dan melihat tindak lanjut setelah proses scan dilakukan. 8.2. Uji Coba Performa Uji coba ini ditujukan untuk mengetahui waktu komputasi yang dibutuhkan ketika melakukan pengaksesan terhadap suatu file. Simpulan Dari serangkaian uji coba dan analisa yang dilakukan terhadap sistem yang dibuat, maka dapat dibuat suatu kesimpulan antara lain : 1. Implementasi aplikasi anti-virus yang memanfaatkan library ClamAV di lingkungan UNIX dapat diterapkan. 2. Penggunaan fitur cache pada aplikasi dapat meningkatkan waktu yang dibutuhkan untuk mengeksekusi sebuah file. 3. Komunikasi antara filesystem yang dibangun dengan daemon dari ClamAV dapat diimplementasikan. 10. Daftar Pustaka Miklos Szeredi, 2006, FUSE: Filesystem in Userspace, http://fuse.sourceforge.net Tomasz Kojm, 2009, Clam AntiVirus, http://www.clamav.net/ Krzysztof Burghardt, 16 Mar 2009, ClamFS Project, http://clamfs.sourceforge.net/ 5 -,2006, Python Manual, http://www.python.org Xavid Pretzer, 2009, Building File System, http://stuff.mit.edu/iap/2009/fuse/examples 6