Skip to content

Releases: Aryoksss/WPDetector

v1.1.0 — Tiered Scoring + Obfuscated Webshell Detection

Choose a tag to compare

@Aryoksss Aryoksss released this 10 May 07:23

Apa yang baru di v1.1.0

Major release dengan fokus drastic false positive reduction dan obfuscated webshell detection.

🎯 False Positive Reduction

  • Tiered keyword scoring untuk judol detection (high=3, medium=2, low=1) + regex (bobot 2). Flag hanya kalau score ≥5 AND minimal 1 sinyal kuat fire. Artikel berita yang kebetulan punya kata scatter/jackpot/bonus tidak lagi jadi false positive.
  • Auto word-boundary untuk short keyword — slot tidak match slotted, cq9 tidak match icq9xxx.
  • Skip judol scan di PHP code files (themes/plugins/mu-plugins). Plugin filter, anti-spam, atau plugin security lain tidak lagi ter-flag gara-gara punya gambling strings sebagai data array.
  • wp-admin / wp-includes total skip — core WP harusnya diverifikasi via checksum API, bukan regex.
  • Known security plugin whitelist — akismet, wordfence, sucuri, all-in-one-wp-security, dll auto-skip.
  • Path segment exclusion menggantikan substring match yang terlalu longgar.

🔍 Obfuscated / Encoded Webshell Detection (NEW)

Deteksi webshell yang di-obfuscate, bukan cuma signature statis:

  • Composite heuristic scoring dengan 16 indikator:
    • eval+gzinflate+base64_decode pipe
    • chr(X).chr(Y).chr(Z).chr(W) concat chain (membangun "eval" dari byte code)
    • 'e'.'v'.'a'.'l' string concat chain
    • \x5f\x50\x4f\x53\x54 hex escape chain
    • Long base64 blob ≥400 char
    • Variable-variable ${'_'.'P'.'O'.'S'.'T'}
    • Dynamic function call $f($_POST['cmd'])
    • $_GET['x']($_POST['y']) superglobal-as-callable
    • create_function(), preg_replace(/e), ini_set('disable_functions')
    • Long single-line (minified webshell)
    • Goto spaghetti (≥10 goto statement)
    • Shannon entropy pada string literal terpanjang
  • Recursive decode peel 1 layer — base64 + gzinflate/gzuncompress unwrap, lalu re-scan signature. Catches pattern seperti:
    eval(base64_decode("PD9waHAgZXZhbCgkX1BPU1RbJ3gnXSk7"));
    // decode -> <?php eval($_POST['x']);  -> match webshell high signature
  • FP mitigations: skip *.min.js, *.bundle.js, file dengan @license/@copyright header dari Apache/MIT/BSD/GPL. Strip komentar PHP via token_get_all sebelum scoring.

🛠 Scanner Engine Improvements

  • Batched pagination untuk posts/pages/comments (no more numberposts=-1 memory issue)
  • Recursive scan depth 3 → 8 (webshell sering di path dalam seperti vendor/lib/src/...)
  • Simple log rotation (trim ke 2000 baris terakhir saat log >256KB)
  • Merge webshell signature + obfuscation verdict per file dengan severity gabungan

📱 Telegram Alert Improvements

  • Fixed header yang sebelumnya missing baris "Judol Content" count
  • Severity labels: [CRITICAL], [HIGH], [MEDIUM] di entry webshell
  • Obfuscation score + indicator yang fire ditampilkan inline
  • Auto-split pesan kalau melebihi limit 4096 char Telegram
  • Disable URL preview, proper UTF-8 entity escape
  • Header elevates ke "CRITICAL: OBFUSCATED/WEBSHELL DETECTED" kalau ada entry severity critical

📚 Documentation

  • README.md fully rewritten as user guide (install, Telegram setup, scan, troubleshoot, FAQ)
  • TECHNICAL.md baru — architecture + detection engine details untuk developer/researcher
  • readme.txt updated untuk WordPress.org format dengan changelog + FAQ

🔒 Security

Plugin itu sendiri aman dari Wordfence bug bounty scope perspective:

  • Semua AJAX handler cek nonce + current_user_can('manage_options')
  • Tidak ada endpoint nopriv, REST route, atau shortcode
  • Output escaping konsisten, input sanitization proper
  • Logs directory protected dengan .htaccess Deny + silence index.php

Installation

  1. Download judol-webshell-detector-1.1.0.zip di bawah
  2. WP Admin → Plugins → Add New → Upload Plugin
  3. Pilih file ZIP, Install NowActivate
  4. Menu Security Scanner muncul di sidebar admin
  5. Configure Telegram bot (opsional, recommended)
  6. Run first scan

Panduan lengkap: README.md

Upgrade dari v1.0.0

Kompatibel penuh. Cukup:

  1. Deactivate plugin lama
  2. Delete folder plugin lama (settings tetap aman, disimpan di option table)
  3. Upload ZIP v1.1.0, activate
  4. Re-run scan untuk rasakan FP reduction

Settings Telegram bot token, chat ID, dan auto-scan schedule akan tetap terjaga.

Known Limitations

  • Polymorphic shell yang generate diri dari network payload (runtime) — tidak terdeteksi tanpa dynamic analysis
  • Multi-stage shell lintas file — butuh cross-file correlation (belum diimplementasikan)
  • Encoding non-standard custom — mungkin lolos, tapi biasanya masih fire indikator long_single_line + high_entropy_literal

Untuk coverage maksimal, kombinasi dengan file integrity monitoring (hash baseline) lebih efektif.


Full changelog di readme.txt.