WordPress Server Compromise
Pendahuluan
Sebuah server Linux yang menjalankan beberapa instalasi WordPress terindikasi mengalami kompromi pada salah satu website. Investigasi dilakukan untuk mengetahui bagaimana attacker memperoleh akses, file apa saja yang ditanam, bagaimana payload dieksekusi, apakah terdapat persistence, serta apakah terdapat indikasi komunikasi dengan command-and-control (C2).
- eksekusi PHP dari direktori
mu-plugins; - beberapa PHP webshell dengan nama yang tidak lazim;
- penyalahgunaan fungsi WP File Manager;
- upload dan ekstraksi archive dari remote request;
- eksekusi binary native oleh
www-data; - binary yang sengaja dihapus tetapi masih berjalan di memory;
- file PHP yang sudah dihapus tetapi masih dipegang process melalui file descriptor;
- koneksi network dari malware ke external endpoint;
- mekanisme self-replication;
- indikasi penggunaan Telegram sebagai C2/telemetry;
- dan aktivitas yang menyebabkan PHP-FPM mengalami timeout.
Dengan demikian, klasifikasi insiden paling tepat adalah server/application compromise dengan webshell, malware persistence, dan post-exploitation activity.
1. Environment yang Diinvestigasi
Environment yang ditemukan selama investigasi secara umum memiliki karakteristik:
Linux Server
|
+-- Nginx
|
+-- PHP 8.3-FPM
|
+-- WordPress
|
+-- Multiple WordPress Sites
|
+-- wp-content/
|
+-- plugins/
+-- mu-plugins/
+-- themes/
+-- uploads/
Target utama yang menjadi fokus investigasi:
[REDACTED-WP-SITE]
Dalam artikel ini domain tersebut akan disebut:
target.example
User web server:
www-data
PHP runtime:
PHP 8.3-FPM
2. Scope Investigasi
Investigasi mencakup beberapa layer.
Application Layer
- WordPress
- WordPress plugins
- Must-use plugins (
mu-plugins) - WP File Manager
admin-ajax.php- PHP scripts
Web Layer
- Nginx access log
- Nginx error log
- HTTP request method
- Source IP
- URI
- HTTP status
- request timing
Runtime Layer
- PHP-FPM logs
- PHP-FPM worker
- slow execution
- timeout
- process termination
- process tracing
Operating System Layer
- running process
- deleted executable
- deleted file descriptor
/tmp/var/tmp- filesystem metadata
- process ownership
Network Layer
- outbound connection
- listening socket
- connection state
- remote IP
- remote port
- process-to-network mapping
3. Initial Indicators of Compromise
Beberapa filename pertama yang menjadi perhatian:
exp.php
rev.php
jokowi.php
dongak.php
File tersebut berada di lokasi:
wp-content/mu-plugins/
Lokasi ini sangat penting karena mu-plugins merupakan mekanisme WordPress untuk must-use plugins.
File PHP yang ditempatkan di lokasi tersebut dapat menjadi persistence mechanism yang lebih sulit terlihat dibandingkan plugin biasa.
4. PHP-FPM Evidence: exp.php
Salah satu bukti terkuat berasal dari PHP-FPM.
[18-Aug-2026 21:55:49] WARNING:
[pool www] child 285394,
script '/var/www/[REDACTED]/wp-content/mu-plugins/exp.php'
(request: "POST /wp-content/mu-plugins/exp.php")
executing too slow (5.577702 sec)
Kemudian:
[18-Aug-2026 21:56:44] WARNING:
[pool www] child 285394,
script '/var/www/[REDACTED]/wp-content/mu-plugins/exp.php'
(request: "POST /wp-content/mu-plugins/exp.php")
execution timed out (60.620911 sec), terminating
Artinya:
exp.phpbenar-benar dieksekusi oleh PHP-FPM.- Request menggunakan HTTP
POST. - Script berjalan lebih dari 5 detik.
- Script akhirnya mencapai timeout sekitar 60 detik.
- PHP-FPM kemudian melakukan termination terhadap worker tersebut.
Ini berbeda dengan sekadar attacker melakukan:
GET /wp-content/mu-plugins/exp.php
yang menghasilkan 404.
Dalam kasus ini, PHP-FPM sendiri mengkonfirmasi bahwa PHP interpreter menjalankan file tersebut.
5. Native Binary Execution
Investigasi kemudian menemukan indikator yang jauh lebih serius.
Process:
bad-epoll
berjalan menggunakan user:
www-data
PID yang ditemukan antara lain:
365958
365959
365960
365963
Process tersebut mempunyai working directory:
/tmp/xpl2026 (deleted)
dan executable:
/tmp/xpl2026/bad-epoll-static (deleted)
Contoh evidence:
bad-epoll 365958 www-data cwd
DIR ... /tmp/xpl2026 (deleted)
bad-epoll 365958 www-data txt
REG ... /tmp/xpl2026/bad-epoll-static (deleted)
malware binary
|
v
/tmp/xpl2026/
|
+-- bad-epoll-static
|
+-- execution
|
+-- delete file
|
v
process tetap berjalan
Menghapus file dari filesystem tidak otomatis menghentikan process.
Process masih dapat menjalankan executable yang sudah di-unlink selama inode/file descriptor masih digunakan.
6. Deleted rev.php yang Masih Digunakan Process
Temuan yang sangat signifikan adalah:
FD 6r
/home/[REDACTED]/rev.php (deleted)
pada beberapa process bad-epoll.
Dengan kata lain:
rev.php
|
| executed/opened
v
process
|
| rm/delete file
v
filesystem entry hilang
|
+----> process masih memegang FD
Sehingga:
ls rev.php
dapat menghasilkan:
No such file
namun malware tetap mempunyai akses terhadap file tersebut.
Ini merupakan teknik umum untuk meninggalkan process aktif setelah file payload dihapus dari filesystem.
7. jokowi.php
File lain yang ditemukan dalam PHP-FPM log adalah:
wp-content/mu-plugins/jokowi.php
Evidence:
[21-Aug-2026 19:09:18] WARNING:
[pool www] child 358145,
script '/var/www/[REDACTED]/wp-content/mu-plugins/jokowi.php'
(request: "POST /wp-content/mu-plugins/jokowi.php")
executing too slow (5.381112 sec)
Pada timestamp yang sama worker lain juga menjalankan script tersebut:
child 358047
POST /wp-content/mu-plugins/jokowi.php
Kemudian:
[21-Aug-2026 19:10:13]
child 358125
POST /wp-content/mu-plugins/jokowi.php
executing too slow
dan:
[21-Aug-2026 19:10:13]
child 358115
POST /wp-content/mu-plugins/jokowi.php
executing too slow
Kemudian:
[21-Aug-2026 19:12:03]
GET /wp-content/mu-plugins/jokowi.php
executing too slow
Interpretasi
Ini merupakan bukti bahwa jokowi.php bukan hanya file yang pernah ada.
File tersebut benar-benar dipanggil dan dieksekusi oleh PHP-FPM.
Namun, Nginx access log tidak memberikan request langsung terhadap jokowi.php pada pencarian yang dilakukan.
Hal ini dapat terjadi karena:
- access logging berbeda antar virtual host;
- log telah mengalami rotation;
- request masuk melalui mekanisme tertentu yang tidak tercatat seperti yang diharapkan;
- PHP-FPM menerima execution path yang tidak mudah direlasikan langsung dengan Nginx log;
- atau log request sudah tidak tersedia.
Karena itu, evidence PHP-FPM menjadi sumber penting dalam kasus ini.
8. dongak.php
Script lain yang muncul sebelum jokowi.php:
wp-content/mu-plugins/dongak.php
Evidence:
[21-Aug-2026 18:26:28]
POST /wp-content/mu-plugins/dongak.php
executing too slow (5.663986 sec)
dan:
[21-Aug-2026 18:27:38]
POST /wp-content/mu-plugins/dongak.php
executing too slow (6.449326 sec)
9. rev.php
rev.php merupakan indikator yang bahkan lebih kuat karena muncul pada beberapa layer.
PHP-FPM:
[21-Aug-2026 18:29:16]
GET /wp-content/mu-plugins/rev.php
executing too slow
Kemudian:
[21-Aug-2026 18:30:11]
GET /wp-content/mu-plugins/rev.php
execution timed out
Sementara pada OS ditemukan:
bad-epoll
yang masih memegang:
/home/[REDACTED]/rev.php (deleted)
Jadi terdapat hubungan temporal dan teknis:
rev.php
|
+--> PHP-FPM execution
|
+--> timeout
|
+--> deleted
|
+--> process masih memegang FD
|
+--> native malware process
10. WP File Manager Abuse
Salah satu temuan utama adalah penyalahgunaan plugin:
WP File Manager
Attacker tidak hanya melakukan scanning.
Mereka menggunakan functionality internal plugin:
admin-ajax.php
dengan action:
mk_file_folder_manager
Salah satu request penting:
GET /wp-admin/admin-ajax.php?action=mk_file_folder_manager&_wpnonce=4a15aa6730&networkhref=&cmd=extract&target=l1_d3Blci56aXA&makedir=0&reqid=1a0287f0f42304
HTTP response:
200
Source:
[REDACTED-IP]
Referer:
https://target.example/wp-admin/admin.php?page=wp_file_manager
User-Agent:
Firefox/150.0
11. Analisis cmd=extract
Parameter penting:
cmd=extract
Parameter:
target=l1_d3Blci56aXA
merupakan encoded representation dari nama archive.
Hasil decoding mengarah pada:
wper.zip
Dengan demikian request tersebut dapat direpresentasikan secara konseptual sebagai:
WP File Manager
|
v
admin-ajax.php
|
v
mk_file_folder_manager
|
v
cmd=extract
|
v
wper.zip
|
v
extract files
|
v
Webroot / WordPress filesystem
Ini merupakan salah satu evidence paling penting dalam rekonstruksi attack chain.
12. File Manager sebagai Post-Exploitation Tool
Setelah attacker memperoleh kemampuan menggunakan File Manager, functionality tersebut dapat digunakan untuk:
- listing directory;
- upload file;
- download file;
- extract archive;
- delete file;
- membaca konfigurasi;
- memindahkan file;
- dan melakukan file manipulation tanpa perlu SSH.
Dengan demikian, attacker tidak harus mempunyai shell OS untuk melakukan banyak aktivitas filesystem.
13. Indikasi Pengambilan wp-config.php
Dalam log ditemukan request dengan functionality:
cmd=get
terhadap target yang mengarah pada:
wp-config.php
File tersebut merupakan salah satu file paling sensitif dalam WordPress karena dapat berisi:
DB_NAME
DB_USER
DB_PASSWORD
DB_HOST
AUTH_KEY
SECURE_AUTH_KEY
LOGGED_IN_KEY
NONCE_KEY
Jika attacker berhasil membaca wp-config.php, maka dampaknya dapat melampaui filesystem compromise.
Potential impact:
WordPress compromise
|
+--> DB credential exposure
|
+--> database access
|
+--> WordPress user manipulation
|
+--> content manipulation
|
+--> persistence
Catatan: dari evidence yang tersedia, request untuk mengambil file tersebut tercatat. Apakah seluruh isi file berhasil dieksfiltrasi perlu dibuktikan lebih lanjut dari response body, network capture, atau log aplikasi yang relevan.
14. Archive wper.zip
Archive:
wper.zip
muncul dalam attack chain sebagai object yang diekstrak menggunakan WP File Manager.
Keberadaan archive tersebut penting karena archive dapat berfungsi sebagai:
payload container
yang membawa beberapa file sekaligus.
Dengan pendekatan tersebut attacker tidak perlu meng-upload setiap PHP file satu per satu.
Attack chain dapat berupa:
Upload archive
|
v
wper.zip
|
v
File Manager extraction
|
+-- PHP webshell
+-- utility
+-- loader
+-- payload
+-- supporting files
15. ALFA TEaM / Webshell
Dalam filesystem investigation juga ditemukan indikasi webshell dengan karakteristik:
ALFA TEaM Shell
Webshell tersebut memiliki kemampuan seperti:
- file management;
- command execution;
- process/network functionality;
- backdoor installation;
- CMS manipulation.
Function yang menjadi indikator kuat:
passthru()
shell_exec()
popen()
proc_open()
Function tersebut memungkinkan PHP memanggil command atau process OS.
Jika webshell dapat diakses dari internet, attacker pada dasarnya memperoleh interface remote administration dengan privilege:
www-data
16. Native Malware
Tidak berhenti pada PHP.
Investigasi menemukan binary native:
bad-epoll-static
yang berjalan sebagai:
www-data
Lokasi awal:
/tmp/xpl2026/
Nama directory:
xpl2026
Setelah execution, file tersebut dihapus.
Namun process tetap aktif.
Pattern:
/tmp/xpl2026/bad-epoll-static
|
v
execute
|
v
PID
|
v
rm
|
v
bad-epoll-static (deleted)
|
v
still running
17. Executable Stack Indicator
Dalam investigation juga ditemukan indikator executable stack pada binary/payload terkait.
Executable stack bukan bukti tunggal bahwa sebuah program pasti malware.
Namun dalam konteks:
WordPress compromise
+
webshell
+
/tmp staging
+
deleted binary
+
www-data
+
outbound connection
indikator tersebut menjadi bagian penting dari keseluruhan evidence chain.
18. Network Communication / C2
Process malware kemudian dikorelasikan dengan koneksi network.
Remote endpoint ditemukan pada:
[REDACTED-C2-IP]:4444
Process yang berkaitan:
bad-epoll
Port:
4444
Status yang terlihat:
CLOSE-WAIT
Port 4444 sendiri tidak otomatis berarti C2.
Namun kombinasi:
www-data
+
malicious-looking binary
+
deleted executable
+
/tmp/xpl2026
+
webshell
+
remote connection
+
port 4444
merupakan indikator compromise yang sangat kuat.
19. Self-Replication / Persistence
Investigasi juga menemukan mekanisme replikasi PHP.
Payload menggunakan sebuah variable payload, misalnya:
$M
dan melakukan write/copy terhadap sejumlah lokasi.
Lokasi yang terindikasi antara lain:
.cache.php
themes/index.php
wp-includes/.tmp.php
wp-includes/js/.loader.php
.well-known/.srv.php
mu-plugins/defender.php
wp-content/themes/.index.php
wp-uploads/.thumb.php
initial malware
|
v
replication routine
|
+--> .cache.php
+--> .tmp.php
+--> .loader.php
+--> .srv.php
+--> defender.php
+--> .index.php
+--> .thumb.php
Tujuannya adalah meningkatkan kemungkinan malware tetap bertahan walaupun salah satu file ditemukan dan dihapus.
20. defender.php
Nama:
defender.php
secara naming terlihat seperti security component.
Namun berdasarkan code behavior yang ditemukan, file tersebut justru terkait dengan persistence/reinfection mechanism.
Ini merupakan teknik umum malware:
menggunakan nama file yang terlihat legitimate atau security-related agar tidak langsung menarik perhatian administrator.
Karena itu, filename saja tidak boleh digunakan untuk menentukan apakah file aman.
21. Telegram C2 / Telemetry
curl
serta token bot yang hardcoded.
Komunikasi tersebut digunakan untuk mengirim informasi seperti:
HTTP_HOST
dan informasi identifikasi server lainnya.
Secara konseptual:
Compromised WordPress
|
v
Malware PHP
|
v
curl
|
v
Telegram Bot API
|
v
Attacker
Malware mempunyai mekanisme telemetry / command-and-control communication.
22. Function _t() dan Fatal Error
Payload yang direplikasi mendefinisikan function:
_t()
Masalah muncul ketika dua payload berbeda berhasil berada pada environment yang sama dan keduanya mendefinisikan:
_t()
PHP kemudian menghasilkan:
Fatal error:
Cannot redeclare _t()
Akibatnya WordPress dapat mengalami:
HTTP 500
atau:
White Screen of Death
Ironisnya, persistence mechanism malware sendiri kemudian menjadi salah satu penyebab application failure.
23. XML-RPC Activity
Investigasi juga menemukan banyak request terhadap:
xmlrpc.php
Contoh:
GET /xmlrpc.php?rsd
dan:
GET /wp-content/languages/plugins/xmlrpc.php
serta:
GET /wp-content/mu-plugins/uploads/xmlrpc.php
dan:
GET /cgi-bin/xmlrpc.php
Sebagian besar mendapatkan:
404
atau:
429
Contohnya:
20.63.219.114
GET /wp-content/xmlrpc.php
404
dan:
20.196.209.81
GET /wp-content/mu-plugins/uploads/xmlrpc.php
429
Apakah ini normal?
Scanning terhadap xmlrpc.php dari internet sangat umum pada WordPress.
Itu sendiri belum membuktikan compromise.
Yang penting adalah membedakan:
GET /xmlrpc.php
dengan:
POST /xmlrpc.php
Karena XML-RPC legitimate memang dapat digunakan WordPress untuk beberapa functionality.
Sedangkan attacker juga sering melakukan:
- XML-RPC brute-force;
- multicall abuse;
- vulnerability probing;
- endpoint discovery.
Pada evidence yang diberikan, mayoritas request XML-RPC yang terlihat adalah:
GET
dan banyak mendapatkan:
404 / 429
Tidak terdapat evidence yang cukup dari potongan log tersebut untuk menyatakan bahwa XML-RPC merupakan initial access vector.
24. IP Address Activity
Beberapa source IP muncul selama investigation.
Untuk keperluan publikasi, IP disamarkan:
[ATTACKER-IP-01]
[ATTACKER-IP-02]
[ATTACKER-IP-03]
[SCANNER-IP-01]
[SCANNER-IP-02]
Penting untuk membedakan:
Confirmed malicious activity
IP yang melakukan:
admin-ajax.php
cmd=extract
cmd=get
cmd=rm
lebih kuat hubungannya dengan compromise.
Opportunistic scanning
IP yang hanya melakukan:
GET /xmlrpc.php
GET /cgi-bin/xmlrpc.php
GET /wp-content/.../xmlrpc.php
belum dapat dianggap sebagai attacker yang sama.
25. Tidak Ditemukannya bepas2.php
Investigasi juga mencoba mencari:
bepas2.php
berdasarkan dugaan bahwa:
bepas2
mungkin merupakan slang atau naming convention untuk:
bypass
Search dilakukan pada:
/home/[REDACTED]
/tmp
/var/tmp
dan kemudian dilakukan pengecekan langsung terhadap:
/home/[REDACTED]/bepas2.php
/var/www/[REDACTED]/bepas2.php
Hasil:
No such file
Tidak ditemukan:
bepas2.php
di lokasi yang diperiksa.
Kesimpulan
Tidak ada evidence filesystem saat ini yang membuktikan keberadaan:
bepas2.php
Namun absennya file tersebut tidak membuktikan bahwa file tersebut tidak pernah ada.
File bisa saja:
- telah dihapus;
- berada pada path lain;
- berada pada filesystem lain;
- dibuat sementara;
- atau hanya merupakan filename yang tidak pernah digunakan.
26. Korelasi Timeline
Berdasarkan evidence yang berhasil dikumpulkan, timeline paling kuat adalah:
18-Aug
|
+-- exp.php executed
|
+-- PHP-FPM slow execution
|
+-- exp.php timeout
|
+-- native payload activity
|
v
21-Aug
|
+-- dongak.php
|
+-- rev.php
|
+-- rev.php timeout
|
+-- jokowi.php
| |
| +-- POST
| +-- POST
| +-- POST
| +-- GET
|
v
22-Aug
|
+-- WP File Manager activity
|
+-- admin-ajax
|
+-- cmd=extract
|
+-- wper.zip
|
+-- cmd=get
|
+-- sensitive file access
|
+-- cmd=rm
|
+-- rev.php deletion
|
v
23-Aug
|
+-- deleted malware processes discovered
|
+-- deleted rev.php FD discovered
|
+-- malware replication indicators
|
+-- application errors
27. Attack Chain yang Direkonstruksi
Berdasarkan evidence yang tersedia, attack chain dapat digambarkan sebagai:
INTERNET
|
v
WordPress Target
|
v
Vulnerable Component
|
v
File Management
|
v
Remote File Access
|
+---------+---------+
| |
v v
Upload archive Upload PHP
wper.zip payload
| |
v v
extract webshell
| |
+---------+---------+
|
v
mu-plugins/
|
+---------+----------+
| | |
v v v
exp.php rev.php jokowi.php
| | |
+---------+----------+
|
v
Code Execution
|
v
www-data
|
+---------+---------+
| |
v v
PHP Webshell Native Binary
|
v
/tmp/xpl2026
|
v
bad-epoll-static
|
v
C2 / Remote IP
28. Persistence Model
Persistence terlihat berada pada beberapa layer.
Layer 1 — WordPress
mu-plugins/*.php
Layer 2 — Hidden PHP files
.cache.php
.tmp.php
.loader.php
.srv.php
.index.php
.thumb.php
Layer 3 — Native process
bad-epoll
Layer 4 — Deleted-but-running payload
bad-epoll-static (deleted)
Layer 5 — External communication
C2 endpoint
Artinya, menghapus satu webshell saja tidak cukup.
29. Mengapa Menghapus File Saja Tidak Cukup
Misalnya administrator melakukan:
rm /path/to/rev.php
Filesystem kemudian terlihat bersih.
Namun jika process masih membuka file:
rev.php (deleted)
maka payload masih dapat berjalan.
Karena itu incident response harus mencakup:
FILE
+
PROCESS
+
MEMORY
+
NETWORK
+
PERSISTENCE
bukan hanya:
FILE
30. Impact Assessment
Berdasarkan evidence, potential impact meliputi:
Confidentiality
Potential exposure terhadap:
wp-config.php
database credentials
WordPress secrets
application configuration
Integrity
Attacker dapat:
upload files
modify files
delete files
extract archives
modify WordPress
install webshell
Availability
PHP-FPM timeout
worker termination
application errors
Fatal PHP errors
HTTP 500 / WordPress failure
Persistence
Terdapat:
multiple webshell
self-replication
native process
deleted executable
Command & Control
Terdapat indikasi:
external network communication
Telegram telemetry
C2 endpoint
31. Tingkat Keparahan
Berdasarkan keseluruhan evidence:
SEVERITY: CRITICAL
Alasannya bukan hanya karena terdapat malicious PHP file.
Melainkan karena terdapat kombinasi:
Remote file manipulation
+
Webshell
+
Code execution
+
Native binary
+
Persistence
+
Deleted running malware
+
Potential credential exposure
+
C2 communication
Ini harus diperlakukan sebagai full server/application compromise, bukan sekadar infected WordPress file.
32. Hal yang Sudah Terbukti vs Hal yang Masih Hipotesis
Confirmed / Strong Evidence
Terbukti
exp.php dieksekusi
rev.php dieksekusi
jokowi.php dieksekusi
dongak.php dieksekusi
Terbukti
WP File Manager digunakan
Terbukti
cmd=extract
digunakan terhadap archive:
wper.zip
Terbukti
bad-epoll
berjalan sebagai:
www-data
Terbukti
Binary telah dihapus tetapi process masih hidup.
Terbukti
rev.php telah dihapus namun masih direferensikan oleh process melalui FD.
Terbukti
Terdapat aktivitas network yang berkorelasi dengan malware process.
Terbukti
Terdapat mekanisme PHP self-replication.
33. Hal yang Belum Dapat Dibuktikan 100%
Beberapa hal masih membutuhkan evidence tambahan.
Initial Access
Belum dapat dipastikan dengan absolut apakah initial access berasal dari:
WP File Manager vulnerability
atau:
vulnerability/plugin lain
sebelum File Manager digunakan.
wper.zip origin
Kita dapat membuktikan archive tersebut diekstrak.
Namun source upload-nya harus dikorelasikan dengan request upload untuk memastikan timestamp dan IP yang tepat.
wp-config.php exfiltration
Namun keberhasilan exfiltration seluruh content perlu dikonfirmasi dari:
HTTP response
network capture
application log
bepas2.php
Belum ditemukan.
XML-RPC
Belum ada evidence yang cukup untuk menyatakan XML-RPC sebagai initial compromise vector.
34. Recommended Incident Response
Untuk server yang sudah mengalami level compromise seperti ini, pendekatan paling aman adalah rebuild, bukan sekadar cleanup.
Prioritas:
1. Isolate host
2. Preserve evidence
3. Stop malicious processes
4. Block C2
5. Rotate credentials
6. Rebuild server
7. Reinstall WordPress
8. Reinstall plugins from trusted source
9. Restore clean content
10. Rotate WordPress salts
11. Rotate DB credentials
12. Validate filesystem
13. Harden WordPress
14. Monitor post-recovery
35. Credential Rotation
Karena terdapat indikasi akses terhadap:
wp-config.php
semua credential yang terdapat atau mungkin terdapat di dalam file tersebut harus dianggap compromised.
Minimal:
Database password
WordPress admin credentials
API credentials
SMTP credentials
Cloud/API keys
SSH credentials
Application secrets
jika ada.
36. WordPress Salts
Authentication salts juga sebaiknya diregenerasi.
Tujuannya untuk invalidasi session/token yang masih aktif.
Secara konsep:
Old session
|
v
OLD SALT
|
X
invalid after rotation
Ini sangat penting jika attacker pernah memperoleh access terhadap WordPress authentication material.
37. WordPress Hardening
Beberapa baseline yang direkomendasikan:
define('DISALLOW_FILE_EDIT', true);
Kemudian:
- hapus plugin yang tidak digunakan;
- update WordPress;
- update semua plugin;
- gunakan plugin dari source terpercaya;
- batasi akses
/wp-admin; - gunakan MFA;
- gunakan WAF;
- monitor perubahan file;
- batasi permission filesystem;
- jangan menjalankan web application dengan privilege tinggi.
38. Monitoring yang Direkomendasikan
Monitoring sebaiknya mencakup:
Filesystem
Monitor:
wp-content/
wp-content/plugins/
wp-content/mu-plugins/
wp-content/uploads/
wp-includes/
terutama:
*.php
Process
Alert jika:
www-data
menjalankan binary dari:
/tmp
/var/tmp
/dev/shm
Network
Alert outbound connection dari:
php-fpm
nginx
www-data
ke internet yang tidak diharapkan.
PHP-FPM
Monitor:
execution timeout
slow script
worker termination
child process restart
39. IOC Summary
Untuk publikasi, IOC berikut disamarkan.
| IOC | Type | Status |
|---|---|---|
exp.php |
PHP webshell/payload | Confirmed execution |
rev.php |
PHP payload | Confirmed execution |
jokowi.php |
PHP payload | Confirmed execution |
dongak.php |
PHP payload | Confirmed execution |
alpa.php |
Webshell | Found |
bad-epoll |
Native process | Confirmed running |
bad-epoll-static |
Native binary | Deleted but running |
/tmp/xpl2026 |
Malware staging | Confirmed |
wper.zip |
Archive | Used in extraction |
defender.php |
Persistence | Suspicious/malicious |
.cache.php |
Persistence | Suspicious/malicious |
.loader.php |
Persistence | Suspicious/malicious |
.srv.php |
Persistence | Suspicious/malicious |
.thumb.php |
Persistence | Suspicious/malicious |
[REDACTED-C2]:4444 |
Network IOC | Correlated |
| Telegram Bot API | C2/telemetry | Embedded in malware |
bepas2.php |
Suspected IOC | Not found |
40. Final Technical Conclusion
Terdapat evidence yang menunjukkan attacker berhasil mencapai tahap:
Remote File Manipulation
↓
File Upload / Extraction
↓
PHP Code Execution
↓
Webshell
↓
Persistence
↓
Native Binary Execution
↓
Process Hiding / Deleted Files
↓
External Communication
↓
Self-Replication
Komponen paling signifikan adalah adanya process:
bad-epoll
yang berjalan sebagai:
www-data
dari staging directory yang telah dihapus, serta adanya file descriptor terhadap:
rev.php (deleted)
Lebih lanjut, penggunaan WP File Manager dengan:
cmd=extract
terhadap:
wper.zip
Temuan jokowi.php, dongak.php, rev.php, dan exp.php juga menunjukkan bahwa attacker menggunakan lebih dari satu PHP payload, sehingga kemungkinan besar aktivitas tersebut merupakan bagian dari satu rangkaian post-exploitation/persistence, bukan satu file yang berdiri sendiri.
Dengan adanya indikasi credential exposure, webshell, native malware, persistence, dan C2 communication, server harus dianggap fully compromised sampai dilakukan rebuild atau validasi forensik yang membuktikan sebaliknya.
Important forensic note: tidak semua aktivitas scanning yang ditemukan, khususnya request terhadap
xmlrpc.php, dapat secara otomatis dikaitkan dengan attacker utama. IOC harus dikorelasikan berdasarkan timestamp, source IP, URI, HTTP method, response, process execution, dan filesystem evidence sebelum dimasukkan ke attack chain utama.
No Comments