implementasi aplikasi anti-virus berbasis python-fuse

advertisement
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
Download
Study collections