Detektor port scan (nmap -sS, -sT, -sU) untuk Windows, bagian dari honeypot
n0z0/scpd.
Setiap kali sebuah IP men-scan port di mesin ini, synwatcher menyimpan pasangan
IP → port ke cacheDB. Server SFTP scpd lalu
menerima login dengan:
| Field | Nilai |
|---|---|
| Username | IP penyerang |
| Password | Port terakhir yang di-scan |
flowchart LR
A[Penyerang] -- "SYN / UDP probe ke port X" --> B[synwatcher]
B -- "Set(IP, X)" --> C[(cacheDB :50051)]
A -- "login SFTP user=IP pass=X" --> D[scpd :60606]
D -- "Get(IP)" --> C
Honeypot ini menggunakan konsep dinamis: port terakhir yang Anda scan otomatis menjadi password Anda, dan alamat IP mesin Anda sendiri menjadi username.
Contoh:
Jika IP Anda adalah 192.168.1.50 dan Anda men-scan port 8080 pada server target,
maka username Anda = 192.168.1.50 dan password Anda = 8080.
- Windows (PowerShell):
(Atau unduh installer resmi
winget install Insecure.Nmap
.exedari nmap.org/download.html). - Linux (Debian / Ubuntu / Kali):
sudo apt update && sudo apt install -y nmap - macOS (Homebrew):
brew install nmap
-
Scan satu port tertentu (Paling disarankan agar password langsung diketahui):
nmap -p 8080 <IP_TARGET>
(Setelah perintah ini selesai, synwatcher langsung mencatat password Anda =
8080). -
SYN Stealth Scan (cepat, membutuhkan hak Administrator/root):
sudo nmap -sS -p 8080 <IP_TARGET>
-
Fast Scan range port umum:
nmap -F <IP_TARGET>
(Password Anda adalah port tertinggi/terakhir yang disentuh oleh nmap).
Jika Anda tidak memiliki Nmap atau tidak ingin menginstal Npcap/Nmap di mesin Anda, Anda bisa menggunakan alat bawaan sistem:
Cukup jalankan satu baris perintah bawaan Windows:
Test-NetConnection -ComputerName <IP_TARGET> -Port 8080Kenapa berhasil? Perintah ini langsung mengirimkan paket
TCP SYNke port target, yang otomatis ditangkap olehsynwatcherdan mengeset password Anda menjadi8080.
Buka browser favorit Anda dan ketik URL IP target beserta port yang Anda inginkan di bilah alamat:
http://<IP_TARGET>:8080/
Meskipun web browser menampilkan pesan This site can't be reached, browser telah berhasil mengirimkan paket TCP SYN ke port
8080, dan synwatcher sudah menguncinya sebagai password Anda!
Buka terminal dan jalankan:
curl http://<IP_TARGET>:8080/ --connect-timeout 2nc -zv <IP_TARGET> 8080Setelah menyentuh port (misalnya port 8080), segera login ke server SFTP honeypot di port 60606:
sftp -P 60606 <IP_ANDA>@<IP_TARGET>Contoh jika IP mesin Anda adalah 192.168.123.45 dan target berada di 192.168.123.102:
sftp -P 60606 192.168.123.45@192.168.123.102Saat diminta password, masukkan nomor port yang baru saja Anda sentuh:
192.168.123.45@192.168.123.102's password: 8080
Anda akan berhasil masuk ke sesi SFTP, dan honeypot akan memproses forensik file serta mencatat log CTI!
- Windows 64-bit
- Npcap: saat instalasi, centang Install Npcap in WinPcap API-compatible Mode
- cacheDB berjalan di
127.0.0.1:50051 - (Opsional) scpd berjalan di port
60606
Buka PowerShell dan jalankan perintah satu baris berikut untuk memasang versi terbaru dan otomatis mendaftarkannya ke PATH pengguna:
irm https://raw.githubusercontent.com/n0z0/synwatcher/main/install.ps1 | iex(Skrip ini juga bisa dijalankan kapan saja untuk upgrade ke versi terbaru).
Jalankan perintah berikut di terminal:
curl -fsSL https://raw.githubusercontent.com/n0z0/synwatcher/main/install.sh | bash(Binary otomatis dipasang ke /usr/local/bin atau ~/.local/bin dan siap dipanggil langsung).
Tersedia di halaman Releases:
- Binary Langsung (siap pakai tanpa ekstrak):
- Windows:
synwatcher_windows_amd64.exe - Linux:
synwatcher_linux_amd64
- Windows:
- Bundel Arsip (berisi dokumen + script):
- Windows:
synwatcher_vX.Y.Z_windows_amd64.zip - Linux:
synwatcher_vX.Y.Z_linux_amd64.tar.gz
- Windows:
Integritas semua file dapat diverifikasi dengan checksums.txt.
-
Cari GUID interface jaringan yang ingin dipantau:
Get-NetAdapter | Select Name, InterfaceDescription, InterfaceGuid, ifIndex, Status
(atau jalankan
.\getnet.ps1) -
Jalankan synwatcher (PowerShell Administrator), ganti
{GUID}denganInterfaceGuiddi atas:.\synwatcher.exe -iface "\Device\NPF_{A91E7D86-E24B-4761-94EF-DE993C6116BD}"
Tanpa
-iface, synwatcher memilih interface pertama yang punya alamat IP. Pilihan otomatis ini belum tentu interface yang benar. -
Periksa log saat start. IP mesin ini harus muncul:
[*] Local IPs on \Device\NPF_{...}: [192.168.1.10 fe80::... 127.0.0.1 ::1]Kalau hanya
127.0.0.1dan::1yang muncul, interface-nya salah dan scan tidak akan terdeteksi.
| Flag | Default | Keterangan |
|---|---|---|
-iface |
(auto) | Nama device Npcap \Device\NPF_{GUID} |
-sftpport |
60606 |
Port SFTP honeypot (scpd) yang diabaikan dari penulisan knock password |
-classrootport |
8443 |
Port WebRTC decoy (ClassRoot) yang diabaikan dari penulisan knock password |
-lemesport |
50505 |
Port Honeybeacon HTTP decoy (lemes) yang diabaikan dari penulisan knock password |
-cachedbport |
50051 |
Port gRPC bus (cacheDB) yang diabaikan dari penulisan knock password |
-ignoreports |
(kosong) | Daftar port tambahan yang diabaikan (dipisahkan koma, contoh: 8080,9000) |
-logfile |
synwatcher_cti.jsonl |
File output log CTI (format JSONL, kosongkan untuk mematikan) |
-sensor |
(hostname) | Identifier sensor node honeypot |
-bpf |
(lihat bawah) | Filter BPF untuk paket yang ditangkap |
-snaplen |
96 |
Jumlah byte yang diambil per paket |
-promisc |
true |
Mode promiscuous |
-timeout |
BlockForever |
Timeout pembacaan pcap |
-version |
Tampilkan versi lalu keluar |
Secara default, setiap aktivitas reconnaissance otomatis dicatat ke file synwatcher_cti.jsonl dalam format JSON Lines yang siap di-ingest ke SIEM, Elastic, Wazuh, atau MISP/OpenCTI.
Data log telah memenuhi standar Advanced Cyber Threat Intelligence (SOC-Grade) mencakup:
- TCP SYN Fingerprint & Hash:
syn_fingerprint(Ver:TTL:WS:Flags:OptionsOrder) dansyn_hash(MD5 hash 32-karakter unik) berfungsi sebagai IOC permanen mirip JA3/HASSH untuk melacak tools dan signature penyerang meskipun IP berubah. - Identifikasi Sasaran & Niat Ancaman:
target_service(SSH, HTTP, SMB/RPC, RDP, MySQL, Redis, dll.) danintent_category(LATERAL_MOVEMENT_PROBE,REMOTE_DESKTOP_EXPLOITATION_PROBE,DATABASE_DISCOVERY,WEB_RECONNAISSANCE). - Dynamic Risk Scoring & Severity:
risk_score(skor 0 – 100 terkalibrasi otomatis) danseverity(INFO,LOW,MEDIUM,HIGH,CRITICAL). - Scan Velocity & Profiling Timing:
scan_velocitymendeteksi ritme serangan (BURST_AUTOMATED_SCAN[<200ms],STEADY_PACE_SCAN[200ms–2s],SLOW_AND_LOW_STEALTH[evasive probe >2s], atauINITIAL_PROBE). - Passive OS Fingerprinting:
estimated_os(Linux/Android/macOS, Windows, Network Appliance) sertaestimated_hopsberdasarkan initial TTL dan TCP stack. - Scanner Tool Footprinting:
scanner_tool(mendeteksi Nmap Stealth SYN Scan, Masscan, ZMap, atau Standard OS Socket / PowerShell / Browser). - Identitas & Perilaku: Timestamp ISO 8601 UTC, Sensor ID, Event Type,
scan_behavior(SINGLE_PORT_KNOCKvsPORT_SWEEP_SCAN), danscan_hit_count. - Source & Target: IP, Port, status
is_private. - IP & TCP Layer Forensics: TTL, IP ID, IP Length, Protocol, Window Size, Sequence number, Flags, dan TCP Options (
MSS,WScale,SACKPerm,TS,NOP). - MITRE ATT&CK Mapping: Tactic
Reconnaissance, TechniqueNetwork Service Discovery(T1046) atauActive Scanning: Port Scanning(T1595.002). - Arsitektur Asinkron Go Routine: Pembacaan paket dan penyimpanan knock password berjalan di jalur cepat mikrodetik, sedangkan pengayaan CTI, kalkulasi fingerprint hash, logging JSONL, dan sinkronisasi metadata CacheDB didelegasikan secara mandiri ke Go Routine (
go func) non-blocking sehingga tidak pernah terjadi packet drop saat dihantam ribuan probe nmap per detik. - Inter-Service CacheDB Threat Intel: Selain menyimpan password SFTP, synwatcher otomatis menginjeksi metadata pelaku (
actor:syn_hash:<IP>,actor:risk:<IP>,actor:severity:<IP>,actor:target_service:<IP>,actor:intent:<IP>,actor:velocity:<IP>,actor:os:<IP>,actor:scanner:<IP>,actor:scan_hits:<IP>) ke CacheDB secara instan.
Contoh satu baris log SOC-Grade:
{
"timestamp": "2026-10-08T01:40:15.123456789Z",
"sensor_id": "honeypot-node-1",
"event_type": "TCP_SYN_SCAN",
"scan_behavior": "PORT_SWEEP_SCAN",
"scan_hit_count": 8,
"scan_velocity": "BURST_AUTOMATED_SCAN",
"estimated_os": "Linux / Android / macOS",
"estimated_hops": 0,
"scanner_tool": "Nmap (Stealth SYN Scan)",
"syn_fingerprint": "4:64:1024:SYN:MSS,SACKPerm,TS,NOP,WScale",
"syn_hash": "a8f5c389e63470123efb69201a0912cb",
"target_service": "RDP",
"intent_category": "REMOTE_DESKTOP_EXPLOITATION_PROBE",
"risk_score": 90,
"severity": "CRITICAL",
"source": {"ip": "192.168.1.150", "port": 54321, "is_private": true},
"target": {"ip": "192.168.1.10", "port": 3389, "is_private": true},
"ip_layer": {"version": 4, "ttl": 64, "id": 41235, "protocol": "TCP", "length": 60},
"tcp_layer": {
"seq": 298123712,
"ack": 0,
"window_size": 1024,
"flags": ["SYN"],
"options": ["MSS", "SACKPerm", "TS", "NOP", "WScale"]
},
"mitre_attack": {
"tactic": "Reconnaissance",
"technique": "Active Scanning: Scanning IP Blocks / Ports",
"technique_id": "T1595.002"
}
}| Jenis | Sumber yang diterima | Disimpan ke cacheDB |
|---|---|---|
TCP SYN (-sS, -sT) |
IP mana saja (LAN & internet) | ✅ |
UDP (-sU) |
Hanya IP privat (10/8, 172.16/12, 192.168/16, link-local) |
✅ |
| ICMP Port Unreachable | – | ❌ hanya log |
Semua paket hanya diproses jika tujuannya IP mesin ini. Paket berikut diabaikan:
- trafik keluar dari mesin ini sendiri dan loopback
- port layanan decoy internal dan honeypot ekosistem aktif agar tidak menimpa password knock:
- SFTP honeypot
scpd(60606atau-sftpport) - WebRTC meeting room decoy
ClassRoot(8443atau-classrootport) - Honeybeacon HTTP decoy
lemes(50505atau-lemesport) - In-memory threat bus
cacheDB(50051atau-cachedbport) - Port kustom lainnya via
-ignoreports
- SFTP honeypot
- UDP port
53, 443, 123, 161, 1900, 5353(DNS, QUIC, NTP, SNMP, SSDP, mDNS)
Catatan: UDP dari internet sengaja tidak dideteksi. Balasan UDP dari aplikasi biasa (Zoom, game, VPN) tidak bisa dibedakan dari scan, dan akan mengisi cacheDB dengan data palsu.
| Gejala | Penyebab / solusi |
|---|---|
Tidak menemukan interface Npcap |
Npcap belum terinstal, atau terminal tidak dijalankan sebagai Administrator |
OpenLive gagal |
GUID di -iface salah. Cek lagi dengan Get-NetAdapter |
Failed to connect |
cacheDB belum berjalan di 127.0.0.1:50051 |
| Scan tidak terdeteksi | Cek log Local IPs, dan pastikan firewall tidak memblok paket sebelum Npcap |
- Go sesuai versi di
go.mod - Npcap (untuk menjalankan, tidak diperlukan untuk compile)
- Tidak perlu cgo/gcc. Di Windows, gopacket memuat
wpcap.dllsaat runtime
go build -o synwatcher.exe .
.\synwatcher.exe -iface "\Device\NPF_{GUID}"Build lokal menampilkan versi dev. Untuk mengisi versi secara manual:
go build -trimpath -ldflags "-s -w -X main.version=v0.0.0-local" -o synwatcher.exe .Sebelum commit:
go vet ./...
gofmt -l . # di Windows bisa muncul karena CRLF; Git otomatis mengubahnya ke LF| File | Isi |
|---|---|
main.go |
Entry point: pilih interface, buka pcap, konek cacheDB, loop paket |
config.go |
Flag CLI, filter BPF, alamat cacheDB, port SFTP yang diabaikan |
cti.go |
Modul CTI Logger (format JSON Lines, passive OS fingerprinting, MITRE ATT&CK) |
paket.go |
handlePacket: logika deteksi TCP / UDP / ICMP |
localip.go |
Daftar rentang IP privat (isLocalIP) |
helper.go |
Kumpulkan IP lokal milik interface |
report.go |
Tabel jumlah hit per IP di console |
Ada di config.go:
cacheDB = "127.0.0.1:50051": alamat cacheDBsftpPort: default60606(dapat diubah lewat flag-sftpport)
Untuk mendeteksi UDP dari rentang lain (misalnya CGNAT 100.64.0.0/10),
tambahkan CIDR-nya ke cidrs di localip.go.
- Hanya Windows amd64. gopacket v1.1.19 tidak mendukung windows/arm64.
Build Linux membutuhkan cgo +
libpcap-dev. - cacheDB menyimpan satu nilai per IP, jadi hanya port terakhir yang tersimpan.
Release dibuat otomatis oleh GitHub Actions.
Workflow ini menjalankan go vet, compile synwatcher.exe, lalu meng-upload zip
dan checksums.txt ke halaman Releases.
Otomatis: push ke main
Setiap push ke main langsung merilis versi patch berikutnya
(contoh v0.1.3 → v0.1.4). Pengecualiannya:
- push yang hanya mengubah
*.mdatauLICENSEtidak memicu release - tambahkan
[skip ci]di pesan commit untuk melewati release
Naik versi minor/major: lewat tombol
GitHub → tab Actions → Release → Run workflow → pilih minor / major.
Versi tertentu: push tag manual
git tag v1.0.0
git push origin v1.0.0Kalau langkah release gagal dengan error permission, buka Settings → Actions → General → Workflow permissions dan pilih Read and write permissions.