- Portspoof membuat seluruh 65.535 port TCP tampak terbuka dan mengemulasikan signature layanan, sehingga tahap reconnaissance penyerang berubah dari pemindaian cepat menjadi pekerjaan panjang dan mahal
- Mengembalikan
SYN+ACK untuk setiap upaya koneksi, dan dengan lebih dari 9.000 signature layanan dinamis berbasis regex, setiap port merespons seolah-olah layanan sah yang berbeda
- Saat start, menetapkan mode penyampaian campuran per port seperti banner instan, respons tertunda, atau tetap tanpa respons, serta menambahkan jitter pada waktu mempertahankan koneksi agar penyaringan berbasis timing menjadi sulit
- Pada konfigurasi tarpit default, pemindaian versi penuh
nmap -sV -p- dapat memakan waktu lebih dari 10 jam dan menghasilkan ratusan MB data palsu, menghabiskan waktu dan thread milik scanner penyerang
- Implementasinya memakai event loop
epoll single-thread, berjalan di user space tanpa hak root, dan hanya mengikat satu port TCP per instance yang berjalan
Masalah yang Ingin Diselesaikan Portspoof
- Tujuan Portspoof adalah membuat reconnaissance penyerang menjadi lambat, mahal, dan sulit dipercaya
- Alih-alih pemindaian Nmap biasa selama 5 detik memetakan layanan nyata sistem, di depan Portspoof seluruh 65.535 port tampak terbuka
- Setiap port tampak seperti layanan sah yang berbeda, dan dirancang agar tidak ada cara cepat untuk membedakan port mana yang merupakan layanan nyata
Fitur Utama
-
Merespons Seolah Seluruh 65.535 Port TCP Terbuka
- Alih-alih memberi tahu bahwa port
CLOSED atau FILTERED, ia mengembalikan SYN+ACK untuk setiap upaya koneksi
-
Emulasi Layanan
- Menggunakan lebih dari 9.000 signature layanan dinamis berbasis regex
- Untuk setiap port, merespons probe dari scanner dengan identitas layanan berbeda yang meyakinkan
-
Mode Penyampaian Campuran
- Setiap port mendapat profil perilaku berbeda saat start
- Mode pengiriman banner instan, respons tertunda, dan tetap tanpa respons dicampur
- Waktu mempertahankan koneksi didistribusikan dalam rentang yang luas, membuat deteksi versi seluruh rentang
nmap -sV -p- melewati batas praktis
-
Pertahanan Agresif
- Dapat digunakan sebagai “Exploitation Framework Frontend” yang menargetkan kerentanan pada tool scanning milik penyerang itu sendiri
-
Model Eksekusi Ringan
- Berjalan di user space
- Tidak membutuhkan hak root
- Hanya mengikat satu port TCP per instance yang berjalan
- Penggunaan CPU dan memori kecil
Cara Membingungkan Scanner dan Deteksi Versi
- Pada pemindaian port sederhana, bahkan rentang kecil seperti port 1–20 semuanya muncul sebagai
open
- Contoh output menampilkan campuran nama layanan seperti
tcpmux, compressnet, echo, daytime, dan ftp-data
- Pada pemindaian deteksi versi, ia mengembalikan signature dinamis yang valid terhadap probe layanan
- Dalam contoh port 1–100, muncul berbagai layanan dan string versi seperti
irc, http, pop3, ssh, ftp, smtp, telnet, dan tor-control
- Akibatnya penyerang sulit menentukan nomor port yang benar-benar digunakan sistem
- Pemindaian versi penuh
nmap -sV -p- pada konfigurasi tarpit default memakan waktu lebih dari 10 jam dan menghasilkan ratusan MB data palsu
- Scanner menghabiskan waktu dan thread pada koneksi yang tidak menghasilkan hasil nyata
Pendekatan Desain: Tarpit epoll Single-Thread
- Layanan nyata seperti SSH, SMTP, FTP, dan HTTP mengirim banner, mempertahankan koneksi, lalu menunggu input klien
- Emulasi yang meyakinkan juga harus mengikuti alur accept, send, hold yang sama
- Model satu thread per klien menghabiskan memori dan CPU, dan biaya context switching dapat membuat pihak bertahan kehabisan sumber daya lebih dulu
- Portspoof menggunakan event loop
epoll single-thread
- Setiap port diberi mode penyampaian saat start
- Beberapa port segera mengirim banner, beberapa merespons setelah data klien, dan beberapa diam
- Waktu mempertahankan koneksi didistribusikan dalam rentang beberapa orde besaran, dari puluhan milidetik hingga beberapa menit
- Ada jitter pada setiap koneksi, sehingga deteksi berulang pada port yang sama tidak mengembalikan timing yang identik
- Cara ini menyulitkan serangan yang mengirim data sampah ke semua port lalu mengukur timing respons
- Tarpit sederhana dapat menahan koneksi selama beberapa detik, sementara layanan nyata cepat menutup koneksi pada protokol yang salah, sehingga muncul perbedaan
- Dalam mode campuran dan distribusi timing yang luas, ribuan port palsu juga menutup dalam rentang yang mirip dengan layanan nyata
- Tidak ada ambang batas bersih yang dapat dipakai untuk filtering
Asimetri Biaya
- Biaya pihak bertahan sekitar 1–2 KB memori kernel per koneksi idle
- Loop
epoll bersifat single-thread sehingga tidak ada overhead context switching
- Perangkat kelas biasa pun dapat menahan lebih dari 10.000 koneksi bersamaan
- Biaya penyerang bergeser menjadi waktu dan upaya
- Pemindaian port saja membuat semua port tampak terbuka, sehingga sulit memperoleh informasi bermakna
- Untuk menemukan layanan nyata, diperlukan deteksi versi pada seluruh 65.535 port dan deteksi level protokol pada target yang tampak masuk akal
- Pemindaian 5 detik berubah menjadi pekerjaan aktif lebih dari 10 jam, dan hasilnya tetap seperti mencari jarum di tumpukan jerami
Perubahan v2.0
- v2.0 meninggalkan pendekatan lama yang mengirim banner lalu menutup koneksi
- Pendekatan lama rentan terhadap bypass penutupan koneksi yang dibahas dalam tulisan blog Vicarius/Hored1971
- Mesin tarpit baru mempertahankan semua koneksi tetap terbuka dengan timing campuran
- Cara ini bertujuan mencegah filtering berbasis penutupan koneksi, fingerprinting timing, analisis banner, dan pemodelan pola statistik
Instalasi dan Konfigurasi Dasar
- Build membutuhkan compiler C++ dan CMake 3.10+
- Prosedur build dari source adalah sebagai berikut
mkdir build && cd build
cmake -DCMAKE_INSTALL_SYSCONFDIR=/etc ..
make
sudo make install
- Portspoof berjalan di user space, tetapi aturan firewall sistem diperlukan untuk mencegat traffic yang menuju port lain
- Port default adalah 4444, dan port layanan nyata harus dikecualikan terlebih dahulu sebelum sisa traffic TCP dialihkan ke Portspoof
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j RETURN
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -j REDIRECT --to-ports 4444
eth0 harus diganti dengan interface jaringan yang sebenarnya
- Untuk setiap port yang menjalankan layanan nyata, aturan
RETURN harus ditambahkan
- Penerapan permanen dapat dilakukan dengan menyimpan aturan iptables atau menggunakan
iptables-config di direktori system_files
- Untuk skrip startup, contoh di
system_files/init.d/ dapat digunakan
Mode Eksekusi
- Mode emulasi layanan adalah mode yang direkomendasikan
- Menghasilkan dan menyampaikan signature layanan palsu ke port scanner
portspoof -c /etc/portspoof.conf -s /etc/portspoof_signatures -D
- Timing tarpit kustom ditentukan dengan
-t dan -T
- Contoh mempertahankan setiap koneksi selama 10–60 detik
portspoof -s /etc/portspoof_signatures -t 10 -T 60 -D
- Open Port Mode hanya mengembalikan status
OPEN untuk semua upaya koneksi tanpa banner layanan
- Koneksi tetap diproses sebagai tarpit
portspoof -D
- Fuzzing Mode dapat digunakan untuk mengirim payload acak atau berbasis wordlist ke tool scanning
portspoof -1 -v
portspoof -f payloads.txt -v
Penguatan Berbasis iptables
- Aturan
REDIRECT default saja sudah berfungsi, tetapi scanner agresif dapat menekan Portspoof dengan jumlah koneksi
- Aturan penguatan menambahkan rate limiting dan pemblokiran otomatis
- Port layanan nyata dikecualikan dari redirect
- Dalam contoh, port SSH 22 dikecualikan
- Aturan pemblokiran global juga berlaku pada layanan nyata
- Contoh aturan mencakup elemen berikut
- Mengizinkan loopback
- Men-drop IP yang ditandai sebagai
PORTSCAN selama 60 detik
- Men-drop SYN baru per IP sumber jika melebihi 10 per detik dengan burst 30
- Jika satu IP mempertahankan lebih dari 100 koneksi ke port Portspoof 4444, tandai lalu drop
- Mengizinkan traffic established/related dan SYN baru, lalu men-drop sisanya
- Pada deployment traffic tinggi, ukuran daftar
xt_recent dapat diperbesar
echo "options xt_recent ip_list_tot=10000" > /etc/modprobe.d/xt_recent.conf
- Pengaturan terkait kernel connection tracking dan backlog juga dapat disesuaikan
sysctl -w net.netfilter.nf_conntrack_max=131072
sysctl -w net.core.somaxconn=4096
Portspoof Pro
- Portspoof Pro memperluas deception ke level seluruh jaringan, bukan hanya satu host
- Satu sensor mengemulasikan seluruh jaringan
/16
- Menyediakan ribuan IP
- Setiap IP memiliki layanan unik di semua port
- Mempertahankan percakapan multi-tahap yang stateful
- Menyediakan kemampuan deception di seluruh jaringan
- Mengubah ruang dark IP dan subnet yang tidak digunakan menjadi grid deception aktif
- Setiap host yang diemulasikan menampilkan layanan unik dengan karakter berbeda untuk setiap IP sumber
- Tarpit aktif menguras socket pool penyerang dan melakukan throttling pada tool otomatis
- Mendukung deteksi pemindaian dan fingerprinting tool
- Mendeteksi teknik pemindaian SYN, FIN, NULL, XMAS, dan ACK
- Melakukan fingerprinting terhadap Nmap, Masscan, ZMap, dan scanner kustom
- Men-stream telemetri JSON terstruktur yang mencakup pemetaan MITRE ATT&CK ke SIEM
- Mempertimbangkan deployment lingkungan operasional
- Berjalan di lingkungan sandbox di samping traffic produksi
- Kebijakan routing mengirim traffic deception ke sensor
- Dijelaskan bahwa tidak ada inline tap dan tidak ada risiko terhadap workload nyata
- Mendukung NIS2, DORA, ISO 27001, NIST CSF, dan CIS Controls
Lisensi dan Pelaporan Isu
- Portspoof menggunakan lisensi GNU GPLv2
- Untuk aplikasi komersial dan legal, disarankan menghubungi penulis guna membahas lisensi yang sesuai
- Bug dan permintaan fitur dapat dilaporkan melalui GitHub Issue Tracker atau email
1 komentar
Opini Hacker News
Ada 65536 port, dan port 0 juga pada sebagian sistem operasi merupakan port yang bisa dipakai untuk menjalankan layanan yang dapat diakses dari internet.
Dan jika pengembang MariaDB melihat ini, konfigurasi default yang membuat database listen di port 0 untuk mencegah akses internet sebenarnya tidak mencegah akses internet ke DB pada cukup banyak sistem.
if (mysqld_port)berarti ketikamysqld_portberbeda dari 0, dan tampaknya perilaku ini sudah ada setidaknya sejak MariaDB 5.5.Keamanan komputer pada akhirnya tampaknya tidak punya pilihan selain terus berevolusi menjadi pertahanan aktif seperti ini.
Jika melihat betapa kompleks dan berlapisnya sistem imun, suatu saat komputer atau jaringan mungkin juga akan terlihat mirip dengannya.
Suatu saat IT juga akan menjadi bidang yang cukup matang, tetapi hari ini belum.
Namun jika hal-hal seperti itu ikut dihitung, justru terlihat paralel yang mengkhawatirkan.
Saya pernah membuat halaman web yang menghasilkan alamat email acak tanpa batas untuk mencegah spambot pengumpul email: http://web.archive.org/web/20020610054821/http://www.sourtim...
Jika menjalankan hal seperti ini, seseorang bisa saja memindai mesin saya lalu mengirim puluhan permintaan bug bounty dengan klaim “versi X yang diketahui rentan sedang berjalan”.
Pada pertengahan 90-an ada produk honeypot bernama CyberCop Sting, dan itu mendahului Ballista dari Secure Networks.
CyberCop Sting bisa mensimulasikan layanan TCP/UDP dari berbagai implementasi, dan jika ingatan saya benar, perilaku stack TCP/IP-nya juga bisa dikonfigurasi agar terlihat seperti sistem operasi yang berbeda. Untuk ukuran hampir 30 tahun lalu, itu fitur yang cukup inovatif.
[1] https://theswissbay.ch/pdf/Gentoomen%20Library/Security/0321...
[2] https://news.ycombinator.com/item?id=26440139
Tentu saja ini hal yang tampaknya pasti pernah dilakukan seseorang, tetapi agak mengejutkan juga bahwa sebelumnya saya tidak pernah memikirkannya, dan lebih mengejutkan lagi bahwa ini pertama kalinya saya mendengar ide ini.
Dengan cara ini, bukankah akhirnya hacker atau bot justru akan melihat server lebih detail, atau setidaknya membuat trafik yang masuk lebih banyak?
Saya rasa kebanyakan script kiddie tidak akan menyaring potensi honeypot atau perangkat semacam ini dari alat mereka.
Namun setelah diketahui bahwa host itu hidup, persoalannya adalah port mana yang akan disentuh. Jika diasumsikan biaya memindai atau menyerang setiap port pada setiap server kira-kira sama, meskipun port yang di-spoof bisa dibedakan, lebih baik mencari mesin lain dengan peluang sukses lebih tinggi. Seseorang juga bisa menjalankan portspoof di 127.0.0.35 lokal untuk membandingkan data respons atau perbedaan timing, tetapi ruang pencariannya tiba-tiba membesar sekitar 5000 kali dibandingkan beberapa port yang biasanya terbuka, dan port pada server lain bisa terlihat memiliki peluang sukses lebih tinggi.
Kebanyakan alat tidak mempertimbangkan situasi ketika semua port terbuka sehingga menghasilkan false positive. Dalam penetration test ini situasi yang umum dan memang bisa membuang waktu, tetapi saya tidak ingin memberi penyerang alasan untuk melihat infrastruktur saya lebih jauh. Saya lebih memilih port knocking, yang hampir merupakan kebalikan dari pendekatan ini.
Untuk serangan luas, alat ini harus diterapkan pada puluhan juta host agar cukup efektif, sehingga tidak realistis bagi penyerang untuk hanya menemukan honeypot dan berinteraksi dengannya. Jika Anda menjadi target serangan spesifik, penyerang mungkin sedikit tertunda karena mencoba mengeksploitasi port honeypot, tetapi jika Anda menjalankan layanan yang rentan, pada akhirnya tetap akan ditembus. Selain itu, jika Anda vendor, ketika tim keamanan calon pelanggan memindai, Anda mungkin harus menjawab kuesioner keamanan yang sangat menjengkelkan.
Di situs web saya juga melakukan hal serupa. https://bini.wales mengembalikan 200 untuk semua endpoint dan mencatat semua upaya, sehingga menjadi honeypot yang lumayan untuk serangan otomatis
Umumnya menangkap pemindaian massal terhadap plugin WordPress yang rentan atau backdoor yang tertinggal. Mirip dengan itu, https://varun.ch/login meniru situs WordPress dengan sedikit kejutan
Bagus. Syukurlah kata “honeypot” tidak muncul sekali pun
Dulu saya mewarisi sebuah honeypot “sungguhan” dan saat memeriksanya, ada sekitar 30 port yang terbuka, dan saya benar-benar berkata keras-keras, “sampah macam apa ini”
Membiarkan port terbuka supaya script kiddie mengira berhasil mengakses sesuatu dan jadi bersemangat, padahal sebenarnya tidak ada apa-apa. Honeypot yang terkunci pada titik itu rasanya tidak terlalu seperti honeypot
Honeypot digunakan untuk menarik dan mendeteksi penyerang, biasanya dengan mencatat perilaku dan polanya untuk dianalisis atau diblokir. Akan bagus jika alat ini punya logging lebih banyak selain iptables, dan alat ini sendiri bukan honeypot, tetapi idenya tidak terlalu jauh. Hanya saja saya sama sekali tidak percaya klaim halaman GitHub bahwa ini “memperkuat keamanan OS”. Ini mungkin memberi sedikit obfuscation terhadap scanner layanan otomatis, tetapi jika server MySQL sedang listening di 3306 dan penyerang terhubung ke 3306, mereka tetap berbicara dengan MySQL. Tidak penting apakah 65.534 port lainnya mengeluarkan respons sampah
Tertulis “hanya bind ke satu port TCP per instance yang berjalan”, jadi saya penasaran bagaimana cara kerjanya
Apakah harus menjalankan 65.535 instance untuk menutupi semua port?
Lalu memanggil
getsockoptuntuk mengetahui port aslinya: https://github.com/drk1wi/portspoof/blob/c3f3c34531c59df229e...Saya tidak tahu hard limit sebenarnya atau penggunaan memorinya, tetapi mungkin redirect port lebih sederhana
Mungkinkah ini berpotensi menjadi amplifier DoS?
Jika mengirim paket yang dipalsukan dengan tepat, bisakah ia mengirim balik banyak paket ke sumber yang tampak?
Kalau UDP, itu bisa jadi benar-benar kacau