Artikel ini akan menjelaskan bagaimana memeriksa infeksi skrip pemulihan otomatis (self-healing / auto-recovery) pada berkas wp-config.php dan index.php membutuhkan pendekatan analitis berbasis perbedaan struktur berkas (diffing), pemeriksaan hook eksekusi dini, serta pelacak manipulasi berkas secara real-time.
Berikut adalah panduan teknis langkah demi langkah untuk melakukan audit dan memastikan kedua berkas utama tersebut bersih.
1. Indikator Khas Infeksi pada wp-config.php & index.php
Skrip pemulihan otomatis WordPress Must Use Plugin Stealth Malware umumnya menyuntikkan kode tepat di baris paling atas (sebelum <?php atau tepat setelah <?php) agar berjalan sebelum sistem WordPress memuat plugin pertahanan.
Cari pola-pola kode mencurigakan berikut:
- Pemuatan Berkas Tersembunyi (Auto-include):PHP
@include_once('/path/to/hidden/backdoor.php'); // atau menggunakan require/file_get_contents dengan base64 - Penggunaan Fungsi Obfuskasi Dini: Fungsi seperti
eval(),base64_decode(),gzuncompress(), atau dekoder substitusi abjad kustom yang dipanggil sebelum konstanta WordPress didefinisikan. - Registrasi Shutdown Function:PHP
register_shutdown_function('recreate_malware_file');Malware menyuntikkan skrip ini agar saat proses PHP berakhir, ia memeriksa dan membuat ulang berkasmu-pluginsjika dihapus. - Modifikasi Timestamp: Tanggal modifikasi berkas (
mtime) terlihat baru atau justru dimanipulasi agar tampak lama (touch attack).
2. Cara Memeriksa Berkas wp-config.php
wp-config.php adalah berkas konfigurasi sensitif. Struktur resminya tidak pernah memuat perintah include, require, atau hook fungsi dari direktori luar.
Langkah A: Bandingkan dengan wp-config-sample.php
Jalankan perintah diff di terminal (SSH/CLI) untuk membandingkan struktur wp-config.php Anda dengan sampel standar WordPress:
Bash
diff -u wp-config-sample.php wp-config.php
Yang Harus Diperiksa:
- Atas Berkas (Baris Pertama): Pastikan baris 1 dimulai dengan
<?php. Jika ada teks terenkripsi, baris kosong yang sangat panjang, atau kode heksadesimal sebelum<?php, berkas tersebut dipastikan terinfeksi. - Sebelum
require_once ABSPATH . 'wp-settings.php';: Semua opsi resmi WordPress diletakkan di atas bariswp-settings.php. Jika ada fungsi kustom PHP yang didefinisikan di sekitar baris ini (terutama yang menyentuh direktoriwp-content/mu-plugins), itu adalah skrip self-healing.
3. Cara Memeriksa Berkas index.php (Root & Theme)
Berkas index.php resmi di direktori utama (root) WordPress hanya berisi 17 baris kode standar.
Tampilan index.php Asli WordPress:
PHP
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to display the loaded page.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define( 'WP_USE_THEMES', true );
/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';
Cara Memeriksa Singkat Lewat CLI:
- Cek Jumlah Baris Berkas
index.php:Bashwc -l index.phpJika hasilnya jauh melebihi 20 baris, berkas tersebut hampir dipastikan telah disuntikkan skrip malware. - Periksa Adanya Eksekusi Obfuskasi:Bash
grep -E "eval|base64|gzinflate|assert|str_rot13|include|require" index.phpBerkasindex.phpasli hanya menggunakan satu perintahrequireuntukwp-blog-header.php.
4. Perintah Bash CLI untuk Memindai Infeksi Otomatis
Jalankan perintah gabungan ini di root direktori WordPress Anda untuk memindai tanda-tanda injeksi pada kedua berkas sekaligus:
Bash
grep -RnE "(\@?include|\@?require|eval|base64_decode|register_shutdown_function|show_advanced_plugins)" wp-config.php index.php
Hasil Normal: Hanya akan menampilkan baris require __DIR__ . '/wp-blog-header.php'; pada index.php dan require_once ABSPATH . 'wp-settings.php'; pada wp-config.php. Selebihnya menandakan adanya injeksi malware.
5. Langkah Pemulihan Jika Terinfeksi
- Ganti Berkas
index.phpsecara Total: Jangan mencoba mengedit atau membersihkanindex.php. Timpa (overwrite) langsung berkasindex.phpdengan berkas bersih dari repositori resmi WordPress (fresh WordPress download). - Bersihkan
wp-config.phpsecara Manual:- Buka
wp-config.php. - Hapus semua kode asing di luar variabel
DB_NAME,DB_USER,DB_PASSWORD,DB_HOST,keys/salts, dan$table_prefix. - Simpan berkas.
- Buka
- Setel Izin Akses Berkas (File Permissions): Batasi izin tulis (write permission) pada
wp-config.phpagar skrip self-healing tidak dapat mengubahnya kembali:Bashchmod 440 wp-config.php # atau chmod 400 wp-config.php


