Deteksi dan Eradikasi konten Judi Online melalui inotify()

oleh Rendra Perdana

Artikel ini adalah detail dari implementasi Paper yang disampaikan pada 2024 Beyond Technology Summit on Informatics International Conference (BTS-I2C) dengan judul:

A Lightweight Design Approach to Detect Malicious Injections in Government Websites: Combating Hidden Online Gambling Pages

Penulis mempelajari serangan siber sehingga dapat menentukan mekanisme pertahanan siber yang efektif dan dapat diterapkan dengan segera untuk menangani permasalahan peretasan dan penyisipan halaman judi online. Beberapa hal yang penulis temukan adalah:

  • Kurang efektifnya implementasi manajemen keamanan informasi yang terstruktur dalam menunjang keberlangsungan layanan siber, masih kami temui adanya knowledge gap terhadap berbagai standard umum seperti ISO 27001 atau pun NIST SP-800 yang umumnya dipakai sebagai rujukan pembuatan strategi pertahanan siber.

  • Tidak adanya spesifikasi minimal keamanan perangkat lunak pada saat pembuatan Sistem Pemerintahan Berbasis Elektronik (SPBE). Hal ini membuat keamanan perangkat lunak bukan menjadi suatu standard kebutuhan atas SPBE. Contohnya masih sering kami temui SPBE yang pada halaman login backend menggunakan username dan password saja tanpa dilengkapi MFA dan sistem identitas terintegrasi Single sign on (SSO). Hal ini memungkinkan peretas menggunakan kebocoran username dan password untuk melakukan peretasan ke dalam sistem.

  • Tidak adanya kontrak perawatan perangkat lunak (software maintenance) dari website atau SPBE. Hal ini membuat lambatnya atau tidak dimungkinkannya perbaikan atas celah keamanan dari website/server. Serta Tidak ada atau tidak efektifnya sistem pertahanan berlapis siber yang diimplementasikan. Misalnya penambalan sistem operasi (OS patching), pemeriksaan atas source code yang berjalan di server (code security), tidak ada/efektifnya web application firewall.

  • Kurangnya pelatihan bagi personal internal dalam membuat strategi siber yang efektif dan berkesinambungan. Hal ini menjadikan setiap kejadian peretasan ditangani secara reaktif tanpa adanya perencanaan untuk mengatasi secara lebih efektif.

Berdasarkan keterbatasan sebagaimana disebutkan diatas, dapat disimpulkan bahwa deteksi dan eradikasi konten judi online pada media penyimpanan server (server storage) adalah hal yang efektif, karena tidak memerlukan perubahan pada aplikasi web serta sistem yang berjalan. Mekanisme pertahanan ini dapat diilustrasikan sebagai last layer of defense diantara lapisan defense-in-depth yang ada diatasnya.

Kami meyakini penghapusan atau alterasi halaman adalah cara yang tepat karena penyedia jasa judi online ini kami yakini ingin halamannya dengan mudah dicari pada search engine. Sehingga sulit bagi mereka untuk tidak memakai kata yang umum atau kata yang sulit diketik. Pengubahan karakter juga tidak akan mencapai hasil yang diinginkan karena akan diindeks dengan hasil yang berbeda pada search engine.

Gambar 1 - Ilustrasi serangan siber pada setiap lapisan arsitektur TI

Salah satu solusi yang diupayakan adalah dengan mendesain sebuah service aplikasi sederhana yang memanfaatkan fungsi inotify() yang ada pada OS berbasis GNU/Linux. Secara implementasi, kami memakai bash script yaitu bahasa pemrograman scripting yang terintegrasi oleh sistem operasi Linux. Service aplikasi ini akan secara berkala memeriksa direktori file website yang sudah ditentukan dan mendeteksi perubahan yang sesuai dengan keyword yang telah didaftarkan. Dengan demikian, service ini tidak hanya berfungsi sebagai deteksi dini untuk ancaman judi online tapi juga dapat mendeteksi dan menangkal backdoor/exploit yang dipakai dalam kegiatan peretasan.

Gambar 2 Skema Daemon anti-judol

Hal yang harus kita lakukan pertama kali adalah memeriksa halaman konten judi online untuk diambil sample keyword-nya. Didapati kata-kata ini yang seringkali muncul di halaman konten judi online tetapi tidak pernah ada di halaman web yang normal. Berikut adalah pola serangan yang kami deteksi:

  • Peletakan halaman secara langsung melalui vulnerability yang ada pada library PHP untuk fungsi file upload

  • Penyerang menaruh PHP Shell pada direktori upload

  • Penyerang melakukan eksploitasi agar dapat menaruh konten judi online pada direktori lain

  • Penyerang langsung menaruh file halaman konten atau memberikan referensi external untuk menghindari deteksi.

Setelah meneliti pola konten halaman, pola peretasan dan pola penyisipan halaman kami mendapatkan pola yang dapat dijadikan signature untuk deteksi.

Gambar 3 - Contoh Signature yang digunakan untuk mendeteksi konten judi online yang disusupi

Berikut adalah source code daemon dengan mengikuti skema pada Gambar 2

#!/usr/bin/env bash

quarantinedest=/tmp/quarantine/
monitorpath="/var/www/vhosts/[lokasiwebpapge]”
filetimestamp=null
file_size=0
file_size_limit=100000
keyword_match_count=0
keyword_match="$ContohSignature"

echo "=========Configuration=========="
echo "Monitored Path: " $monitorpath
echo "Monitored Keyword: " $keyword_match
echo "Quarantine Path: " $quarantinedest
echo "File Size Limit: " $file_size_limit
echo "================================"
echo ""

intervensi_file () {
filesize=$(stat -c %s $path$files)
    if [ $file_size -le $file_size_limit ]; then
        keyword_match_count=$(grep -E $keyword_match $path$files | wc -l)
        
        if [ $keyword_match_count -ge 1 ]; then
            echo "OBSIDIAN: Found keyword match. " $keyword_match_count " string count detected"
            filetimestamp=$(date +%d_%m_%Y_%H_%M_%S)
            echo "OBSIDIAN: moving file " $path$files " to " $quarantinedest$files$filetimestamp
            mv $path$files $quarantinedest$files$filetimestamp -v
            echo $path$files >> $quarantinedest$files$filetimestamp
            chmod 400 $quarantinedest$files$filetimestamp

            curl -s --data "text=$path$files$filetimestamp" --data "chat_id=-[REDACTED]" 'https://api.telegram.org/[REDACTED]/sendMessage'

            echo "OBSIDIAN: quarantined to " $quarantinedest$files$filetimestamp
            echo "OBSIDIAN: process completed. Continue watching..."
        else
            echo "OBSIDIAN: Keyword match not found on file " $path$files
        fi
    else
        echo "OBSIDIAN: File" $path$files " larger than 1 MB, skipping file scanning"
    fi

}

inotifywait -m -e ATTRIB,CLOSE_WRITE -c $monitorpath -r -q | while IFS="," read -r path action filesoraction files; do
echo "OBSIDIAN: Watch variables: " $path $action $filesoraction $files

if ([[ $action == '"CLOSE_WRITE' ]] && [[ $filesoraction == 'CLOSE"' ]]) && ([[ $files == *.php ]] || ([[ $files == *.xmldata ]]) || [[ $files == *.htm* ]]); then
  echo "OBSIDIAN: Watch"  $monitorpath$files " : file written match the pattern, processing..." $files
    intervensi_file
fi

done

catatan editor: variable keyword_match menggunakan $ContohSignature pada gambar 3 untuk menghindari indexing mesin pencari atas keyword terkait judi online.

Script diatas diimplementasi dalam bentuk systemd daemon/service sehingga bisa berjalan ketika server boot. Pastikan anda melakukan instalasi package inotify-tools, misalnya dengan command apt install inotify-tools.

Workflow

  1. Daemon akan berjalan dan mengawasi path yang dicantumkan pada variable “monitorpath”. Syntax ini melakukan pengawasan tersebut:

inotifywait -m -e ATTRIB,CLOSE_WRITE -c $monitorpath -r -q | while IFS="," read -r path action filesoraction files; do echo "OBSIDIAN: Watch variables: " $path $action $filesoraction $files
  1. Ketika didapati aktifitas penulisan file yang ditandai dengan signal CLOSE_WRITE maka akan dicocokkan apakah file tersebut memenuhi kriteria tambahan, misalnya file extension, pada contoh diatas daemon ini hanya mengawasi file dengan extension *.php *.xmldata *.htm extension dapat ditambahkan menyesuaikan dengan pola serangan. Syntax ini melakukan pencocokan tersebut:

if ([[ $action == '"CLOSE_WRITE' ]] && [[ $filesoraction == 'CLOSE"' ]]) && ([[ $files == *.php ]] || ([[ $files == *.xmldata ]]) || [[ $files == *.htm* ]]); then
  echo "OBSIDIAN: Watch"  $monitorpath$files " : file written match the pattern, processing..." $files
    intervensi_file
fi
  1. File tersebut akan diperiksa dengan command: keyword_match_count=$(grep -E $keyword_match $path$files | wc -l)

  2. Ketika jumlah word match lebih dari 1 maka lakukan operasi pemindahan file ke direktori yang ditentukan pada variable “quarantinedest”

  3. (opsional) kirimkan notifikasi ke Telegram jika terdapat aktifitas deteksi dan karantina konten judi online diatas.

Karantina diperlukan untuk memperkaya signature serta sebagai barang bukti aktifitas peretasan. File yang telah dikarantina telah direname sehingga mengandung path awal serta timestamp proses deteksi tersebut.

Pada saat deteksi daemon ini akan menuliskan log pada /var/log/syslog. Berikut contoh log ketika terjadi deteksi dan karantina:

Gambar 4 - contoh log ketika terjadi deteksi dan karantina

Berikut flowchart aplikasi diatas:

Gambar 5 Flowchart aplikasi

Dalam percobaan yang kami lakukan deteksi dan karantina ini secara konsisten menangkal serangan dalam rentang waktu 1-2 detik sejak halaman dituliskan ke server storage.

Tentunya daemon ini bukanlah mitigasi utama, penerapan DevSecOps & Perimeter Security tentu diutamakan sehingga dapat menghadapi tantangan peretasan di masa mendatang. Semoga solusi ini dapat bermanfaat bagi rekan-rekan praktisi yang membutuhkan.

Tentang Penulis

Rendra Perdana Cybersecurity Professional

Last updated