Malware selalu menjadi hal yang merepotkan. Umumnya pembuat malware tidak membuat malware untuk sekedar ajang pamer layaknya defacement. Malware dibuat demi tujuan yang lebih besar dan masif, dan biasanya tidak berjalan secara sendiri-sendiri melainkan menjadi sebuah network atau perkumpulan.
Discovery
Disuatu pagi tiba-tiba salah satu website yang kami kelola menunjukkan tampilan yang aneh.
Melihat pesan error seperti ini tentunya yang langsung terpikir adalah memeriksa source code-nya, ada yang tidak beres. Setelah diperisa ternyata benar script-nya telah disisipi oleh malware.
Di tahap ini kita bisa meningkatkan asumsi kita terkait dampak lainnya, bagaimana jika yang telah disisipi tidak hanya file index.php
ini saja? untuk memastikannya maka perlu dilakukan pencarian lebih dalam.
Mencari potongan string dalam satu atau lebih dokumen dapat menggunakan beberapa perintah berikut:
$ grep -rnw . -e 'gacor' --include=*.php
$ grep -rnw . -e 'slot' --include=*.php
$ grep -rnw . -e 'product key' --include=*.php
$ grep -rnw . -e 'chr' --include=*.php
$ grep -rnw . -e '@include "' --include=*.php
Dari hasil pencarian kita menemukan dua script yang telah terinfeksi, yakni index.php
dan wp-settings.php
.
Recovery
Untuk membersihkannya kita perlu membuka script tersebut dengan vim
atau nano
, kemudian menghapus secara manual bagian yang terinfeksi tersebut. Opsi lain yang bisa diusahakan adalah dengan cara mengupload ulang script tersebut dari versi aslinya, misalnya dari repository atau sumber lainnya.
Cleaning
Sampai sini kita sudah melakukan memperbaiki script yang terdampak oleh infeksi malware. Membersihkan malware dari server tidak cukup hanya dengan menghapus file-file yang terdampak saja, namun pembersihan dilakukan sampai ke akar atau induknya.
Tahapan selanjutnya adalah memastikan kejadian yang sama tidak terulang kembali. Dari sudut pandang hacker, saat malware yang dibuat sudah berhasil masuk dan dieksekusi kedalam sebuah sistem, hacker umumnya akan membuat jalur pintas alternatif untuk memudahkan akses kembali di kemudian hari.
Dari hasil discovery sebelumnya kita bisa mencoba memahami apa yang dilakukan potongan code tersebut. Malware umumnya disisipkan dalam bentuk yang sukar untuk dibaca atau pahami. Itulah sebabnya hampir semua malware yang disisipkan kedalam script tertanam dalam bentuk obfuscated atau setidaknya dalam bentuk base64encode
. Dalam kasus ini kami mendapatkan sisipan dalam bentuk base64encode
, sehingga cukup mudah untuk di-decode.
Tool untuk decode
tersedia cukup banyak secara online, salah satunya malwaredecoder.com. Berikutnya cukup paste potongan malware pada tool tersebut kemudian kita aman mendapatkan target dari yang dijalankan oleh malware.
Dari tool tersebut kami mendapat bahwa yang dieksekusi adalah .2980a2fe.ico
. Setiap script index.php
dijalankan maka secara otomatis induk malware ini juga akan dieksekusi. Selanjutnya adalah mencari induk ini yang sudah tersebar didalam server.
find . -type f -name ".*.ico"
Yang menarik adalah nama yang digunakan induk ini cukup random sehingga tidak bisa mencarinya hanya berpatokan nama, pencarian perlu dilakukan menggunakan regex
. Kemudian induk tersebut menggunakan karakter dot/titik (.) sebagai prefix namanya, dimana ini merupakan hidden file untuk sistem linux.
Dari hasil pencarian kami mendapati beberapa induk yang tersebar ke beberapa directory. Yang perlu dilakukan adalah menghapusnya, bisa dilakukan secara manual satu persatu atau bisa menggunakan command.
find . -type f -name ".*.ico" -exec rm -rf {} \;
Namun perlu diantisipasi bahwa menghapus sekaligus menggunakan command berpotensi menghapus file yang sebetulnya merupakan file asli sistem dan bukan malware. Ada baiknya untuk meninjau daftarnya terlebih dahulu baru kemudian dapat mulai dihapus.
Bonus
Selama menggunakan web engine tersedia di internet tentunya potensi sepertinya akan tetap ada. Misalnya WordPress, dengan tingkat flexibilitas yang cukup tinggi semua orang bisa menginstall plugin dari berbagai sumber. Jalur masuk malware paling banyak berasal dari plugin dan theme WordPress.
Kita sebagai pengelola web server mungkin dapat “sedikit” memberikan kontrol terhadap akses terhadap file system. Kita bisa mengunci directory tertentu yang berisi script inti dari aplikasi web, sehingga dapat menghindari sisipan malware dari sumber manapun.
chattr [-R] +i path/to/dir/or/file
Command diatas membuat directory atau file tidak dapat dirubah, adapun jika ingin dirubah kembali cukup mengganti karakter +
menjadi -
chattr [-R] -i path/to/dir/or/file
Selengkapnya dapat membaca artikel saya lainnya tentang rekomendasi keamanan untuk web server.