Kenapa file malware yang sudah dihapus bisa terbuat kembali secara otomatis?
wp-content/uploads atau public_html, script dropper yang bersarang di folder lain—sering kali menyamar sebagai file inti CMS seperti wp-settings.php atau file tema—tetap aktif di background. Begitu ada request HTTP yang memicu file tersebut, atau ketika proses background berjalan, script dropper akan langsung mengecek ketersediaan payload. Jika file tidak ditemukan, ia akan membuatnya kembali menggunakan fungsi PHP seperti file_put_contents() dengan konten yang dikodekan dalam format base64.
Selain dropper berbasis file, mekanisme pemulihan malware sering memanfaatkan cron job server atau scheduler internal CMS. Jika attacker sudah berhasil menyusupkan jadwal eksekusi ke crontab user hosting, server sendiri yang akan menjalankan perintah pengunduhan malware setiap beberapa menit sekali, terlepas dari berapa kali kamu menghapus filenya secara manual.
Di mana saja tempat persembunyian backdoor yang sering terlewat?
touch() di Linux agar timestamp file terlihat sama persis dengan file sistem aslinya. Ada beberapa titik persembunyian klasik yang kerap luput dari pemeriksaan:
Titik pertama adalah konfigurasi PHP tingkat direktori, khususnya file .user.ini atau .htaccess. Attacker bisa menambahkan direktif auto_prepend_file atau auto_append_file. Dengan direktif ini, web server dipaksa mengeksekusi script PHP berbahaya sebelum atau sesudah file PHP apa pun dijalankan di situsmu. Script tersebut bahkan tidak perlu berada di folder web publik; ia bisa disembunyikan di direktori temporer atau folder root akun hosting.
Titik kedua adalah basis data (database). Pada platform seperti WordPress, malware sering menyuntikkan payload ke dalam tabel wp_options, khususnya pada baris dengan status autoload aktif. Script jahat juga sering disisipkan ke dalam hook JavaScript di tabel post, atau didaftarkan sebagai pengguna baru dengan role administrator tersembunyi. Scanner berbasis file biasa tidak akan mendeteksi infeksi ini karena seluruh kodenya tersimpan rapi di dalam baris database MySQL.
Titik ketiga adalah symlink dan direktori cache. Terkadang malware membuat tautan simbolik (symlink) dari dalam direktori situs menuju folder /tmp atau file sistem lain yang tidak terpindau oleh scanner direktori lokal. Mereka juga kerap memanfaatkan folder cache plugin optimasi, menyaru sebagai file asset statis yang tampak tidak berbahaya.
Bagaimana cara mengecek apakah proses malware masih berjalan di memori?
BASH
# Periksa proses aktif milik user web
ps aux | grep php
# Periksa daftar crontab terjadwal milik user saat ini
crontab -l
# Cari file PHP yang dimodifikasi dalam 24 jam terakhir di direktori publik
find ./public_html -type f -name '*.php' -mtime -1/tmp, /dev/shm, atau folder uploads. Jika ditemukan proses asing yang terus berjalan, proses tersebut harus dihentikan paksa (kill) terlebih dahulu sebelum kamu membersihkan file dari disk, agar proses di memori tidak sempat memulihkan file yang baru saja dihapus.
Apakah plugin security atau antivirus hosting sudah cukup untuk membersihkan infeksi?
index.php atau wp-config.php, yang berujung pada error website tidak bisa diakses (White Screen of Death atau HTTP 500).
Tool otomatis harus diposisikan sebagai pemberi petunjuk lokasi, bukan penuntas masalah. Analisis manual terhadap bagaimana file tersebut masuk, file mana saja yang memiliki izin eksekusi mencurigakan, dan integritas file inti tetap menjadi tugas wajib administrator.
Bagaimana urutan pembersihan yang benar agar malware tidak balik lagi?
wp-admin, wp-includes, dan semua file PHP di direktori root dengan unduhan resmi versi yang sama. Lakukan hal yang sama untuk plugin dan tema: hapus folder plugin lama sepenuhnya lalu pasang ulang versi bersih dari repositori resmi. Attacker sering menyelipkan backdoor di dalam file plugin yang namanya terdengar asli.
Langkah keempat: periksa direktori penyimpanan data dinamis. Folder seperti wp-content/uploads biasanya hanya ditujukan untuk menyimpan file media (gambar, PDF, video). Jika ada file .php, .phtml, atau file skrip executable lain di dalam folder uploads, file tersebut hampir pasti merupakan malware dan harus dihapus. Pastikan juga konfigurasi web server melarang eksekusi script PHP langsung di dalam folder uploads.
Langkah kelima: audit database dan konfigurasi. Buka database melalui phpMyAdmin atau MySQL CLI, periksa daftar user administrator, dan hapus user yang tidak dikenal. Periksa tabel konfigurasi untuk memastikan nilai seperti siteurl dan script inject tidak mengarah ke domain luar. Periksa file wp-config.php baris demi baris, pastikan salt keys diperbarui agar sesi login lama yang mungkin dicuri attacker otomatis hangus.
Langkah keenam: tambal celah asal (root cause). Mengapa malware bisa masuk pertama kali? Apakah karena versi plugin lama yang memiliki celah Arbitrary File Upload? Apakah password FTP lemah? Atau kamu menggunakan tema/plugin bajakan (nulled) yang memang sudah ditanami backdoor sejak awal? Menghapus infeksi tanpa menambal celah masuknya hanya menunda waktu infeksi berikutnya.
Membersihkan malware web membutuhkan pendekatan sistematis dari lapisan proses, konfigurasi, file, hingga database. Begitu kamu memutus jalur komunikasi attacker, membersihkan proses di memori, dan mengganti seluruh komponen kode dengan file sumber yang valid, siklus kemunculan kembali malware akan terhenti permanen.