Skrip Bash atau PHP untuk melakukan audit dan pembersihan otomatis 

Share

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:PHPregister_shutdown_function('recreate_malware_file'); Malware menyuntikkan skrip ini agar saat proses PHP berakhir, ia memeriksa dan membuat ulang berkas mu-plugins jika 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:

  1. 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.
  2. Sebelum require_once ABSPATH . 'wp-settings.php';: Semua opsi resmi WordPress diletakkan di atas baris wp-settings.php. Jika ada fungsi kustom PHP yang didefinisikan di sekitar baris ini (terutama yang menyentuh direktori wp-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:

  1. Cek Jumlah Baris Berkas index.php:Bashwc -l index.php Jika hasilnya jauh melebihi 20 baris, berkas tersebut hampir dipastikan telah disuntikkan skrip malware.
  2. Periksa Adanya Eksekusi Obfuskasi:Bashgrep -E "eval|base64|gzinflate|assert|str_rot13|include|require" index.php Berkas index.php asli hanya menggunakan satu perintah require untuk wp-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

  1. Ganti Berkas index.php secara Total: Jangan mencoba mengedit atau membersihkan index.php. Timpa (overwrite) langsung berkas index.php dengan berkas bersih dari repositori resmi WordPress (fresh WordPress download).
  2. Bersihkan wp-config.php secara 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.
  3. Setel Izin Akses Berkas (File Permissions): Batasi izin tulis (write permission) pada wp-config.php agar skrip self-healing tidak dapat mengubahnya kembali:Bashchmod 440 wp-config.php # atau chmod 400 wp-config.php

Read more

Local News