TDCTF Academy Logo TDCTF ACADEMY

Nmap: Network Mapping dan Port Scanning

Pengertian Nmap

Nmap (Network Mapper) adalah tool open-source untuk network discovery, port scanning, dan security auditing. Diciptakan oleh Gordon Lyon (Fyodor) pada tahun 1997, Nmap telah menjadi standar industri untuk inventarisasi jaringan dan pengujian keamanan.

Nmap bekerja dengan mengirimkan paket-paket yang dirancang khusus ke host target dan menganalisis respons yang diterima. Dari respons tersebut, Nmap dapat menentukan port yang terbuka, service yang berjalan, versi OS, hingga mendeteksi firewall dan IDS/IPS.

Jenis-Jenis Scan

Nmap mendukung berbagai jenis scan yang masing-masing memiliki karakteristik berbeda dalam hal kecepatan, stealth, dan kebutuhan akses root.

SYN Scan (-sS)

SYN scan adalah scan default (saat dijalankan sebagai root) dan yang paling populer - sering disebut half-open scan karena tidak menyelesaikan handshake TCP penuh.

# SYN scan dasar
sudo nmap -sS 192.168.1.100

# Mekanisme:
# 1. Kirim SYN → port terbuka balas SYN-ACK, port tertutup balas RST
# 2. Kirim RST setelah menerima SYN-ACK (tidak menyelesaikan handshake)
# 3. Tidak ada log koneksi penuh di aplikasi target

Keuntungan: Cepat, stealthy (tidak mencatat koneksi penuh), tidak butuh aplikasi target merespons.

TCP Connect Scan (-sT)

Connect scan menyelesaikan handshake TCP penuh. Ini adalah default saat berjalan tanpa root.

# TCP Connect scan
nmap -sT 192.168.1.100

# Mekanisme: Menyelesaikan koneksi TCP penuh (SYN → SYN-ACK → ACK)
# Ditutup dengan FIN setelah selesai

Keuntungan: Bisa dijalankan tanpa root - kekurangan: Lebih lambat dan tercatat di log aplikasi.

UDP Scan (-sU)

UDP scan mengirimkan paket UDP ke port target. Karena UDP tidak memiliki handshake, deteksi dilakukan dengan menganalisis respons ICMP.

# UDP scan (sangat lambat, kombinasikan dengan --top-ports)
sudo nmap -sU 192.168.1.100

# UDP scan terbatas ke port umum
sudo nmap -sU --top-ports 100 192.168.1.100

# UDP scan dengan rate lebih cepat
sudo nmap -sU --min-rate=1000 192.168.1.100

Karakteristik: Sangat lambat (karena rate limiting ICMP), hanya port dengan layanan UDP penting yang perlu di-scan (DNS 53, SNMP 161, DHCP 67-68).

FIN Scan (-sF), Xmas Scan (-sX), Null Scan (-sN)

Ketiga scan ini mengirimkan paket dengan flag yang tidak biasa untuk melewati firewall stateless:

# FIN scan - hanya flag FIN
sudo nmap -sF 192.168.1.100

# Xmas scan - flag FIN, PSH, URG (seperti pohon Natal)
sudo nmap -sX 192.168.1.100

# Null scan - tidak ada flag sama sekali
sudo nmap -sN 192.168.1.100

Teori: Port tertutup merespons dengan RST (RFC 793), port terbuka mengabaikan paket (tidak ada respons). Pada Windows, semua port (terbuka/tertutup) mengirim RST - scan ini tidak berguna untuk target Windows.

TCP ACK Scan (-sA)

ACK scan digunakan untuk memetakan aturan firewall - bukan untuk menentukan port terbuka/tertutup.

# ACK scan - filter stateful vs stateless
sudo nmap -sA 192.168.1.100

Interpretasi: Unfiltered (RST) $\to$ paket mencapai host. Filtered (no response / ICMP unreachable) $\to$ firewall memblokir.

TCP Window Scan (-sW)

Variasi dari ACK scan yang menggunakan TCP Window field untuk membedakan port terbuka dan tertutup:

# Window scan
sudo nmap -sW 192.168.1.100

Idle Scan (-sI)

Idle scan menggunakan zombie host untuk melakukan scan yang benar-benar anonym:

# Idle scan - butuh zombie host dengan IP ID yang predictable
sudo nmap -sI zombie_host:80 192.168.1.100

Cara kerja: Mengirim SYN ke zombie untuk mendapatkan IP ID-nya, memalsukan SYN ke target dari zombie, lalu mengecek perubahan IP ID zombie.

Service dan OS Detection

Service Version Detection (-sV)

# Deteksi versi service pada port terbuka
sudo nmap -sV 192.168.1.100

# Dengan intensitas lebih agresif (1-9, default 7)
sudo nmap -sV --version-intensity 9 192.168.1.100

# Light scan - lebih cepat, sedikit probe
sudo nmap -sV --version-light 192.168.1.100

Nmap menggunakan database probe signature untuk mengenali ribuan service dan versinya.

OS Detection (-O)

# Deteksi sistem operasi
sudo nmap -O 192.168.1.100

# OS detection dengan verbosity untuk melihat detail test
sudo nmap -O -v 192.168.1.100

Nmap mengirimkan serangkaian test TCP/IP (TTL, window size, DF bit, TCP options) dan mencocokkan fingerprint-nya dengan database fingerprint OS.

Contoh output:

Device type: general purpose
Running: Linux 5.X
OS CPE: cpe:/o:linux:linux_kernel:5
OS details: Linux 5.0 - 5.14

Agresif Mode (-A)

-A menggabungkan OS detection, version detection, script scanning, dan traceroute:

# All-in-one scan
sudo nmap -A 192.168.1.100

NSE - Nmap Scripting Engine

NSE adalah fitur paling powerful Nmap yang memungkinkan eksekusi script untuk deteksi kerentanan, enumerasi, dan exploit.

Kategori Script NSE

NSE memiliki 14 kategori script:

Kategori Deskripsi Contoh
safe Tidak merusak, tidak crash target dns-brute, http-title
default Default (-sC), balance ssh-hostkey, traceroute-geolocation
discovery Enumerasi informasi whois-ip, dns-zone-transfer
vuln Deteksi kerentanan smb-vuln-ms17-010
exploit Eksploitasi aktif http-shellshock
auth Brute force / bypass auth ftp-anon, ssh-brute
brute Brute force credentials http-brute, mysql-brute
dos Denial of service http-slowloris
intrusive Bisa ganggu target Semua kategori intrusif

Penggunaan NSE

# Scan dengan script default
sudo nmap -sC 192.168.1.100
# Equivalent: nmap --script=default

# Scan dengan script tertentu
sudo nmap --script=http-title 192.168.1.100

# Scan dengan kategori vuln
sudo nmap --script=vuln 192.168.1.100

# Scan dengan multiple script
sudo nmap --script=http-headers,ssl-enum-ciphers 192.168.1.100

# Scan dengan argument untuk script
sudo nmap --script=http-brute --script-args userdb=users.txt,passdb=pass.txt 192.168.1.100

Script Penting untuk Web Research

# Deteksi teknologi web
sudo nmap -p 80,443 --script=http-server-header,http-title,http-tech-detect target.com

# Enumerasi direktori
sudo nmap -p 80 --script=http-enum target.com

# Deteksi SSL/TLS misconfiguration
sudo nmap -p 443 --script=ssl-enum-ciphers target.com

# Deteksi CVE spesifik
sudo nmap -p 445 --script=smb-vuln-ms17-010 192.168.1.100

Output Formats

Nmap mendukung berbagai format output:

# Normal output (default)
sudo nmap -oN scan.txt 192.168.1.100

# XML - untuk parsing dengan tools lain (Metasploit, etc.)
sudo nmap -oX scan.xml 192.168.1.100

# Grepable
sudo nmap -oG scan.gnmap 192.168.1.100

# Script kiddie format
sudo nmap -oS scan.kiddie.txt 192.168.1.100

# Semua format sekaligus
sudo nmap -oA scan 192.168.1.100

Parsing XML dengan tools command-line:

# Ekstrak hanya port terbuka dari XML
grep "state=\"open\"" scan.xml | grep -oP 'portid="\K[^"]+'

# Menggunakan xsltproc untuk HTML report
xsltproc scan.xml -o scan.html

Timing dan Performance

Nmap memiliki enam level timing (-T0 sampai -T5):

# Paranoid (0) - sangat lambat, menghindari deteksi IDS
sudo nmap -T0 192.168.1.100

# Sneaky (1) - cukup lambat untuk stealth
sudo nmap -T1 192.168.1.100

# Polite (2) - mengurangi bandwidth, sopan ke target
sudo nmap -T2 192.168.1.100

# Normal (3) - default, seimbang
sudo nmap -T3 192.168.1.100

# Aggressive (4) - asumsi jaringan cepat dan reliable
sudo nmap -T4 192.168.1.100

# Insane (5) - sangat cepat, asumsi latency sangat rendah
sudo nmap -T5 192.168.1.100

Parameter timing lanjutan:

# Set minimum dan maximum rate paket per detik
sudo nmap --min-rate=100 --max-rate=500 192.168.1.100

# Adjust waktu timeout
sudo nmap --host-timeout=30s 192.168.1.100

# Parallelism - jumlah probe simultan
sudo nmap --min-parallelism=10 --max-parallelism=50 192.168.1.100

Evasion Techniques

Nmap memiliki berbagai teknik untuk menghindari deteksi oleh firewall dan IDS.

Decoy Scan (-D)

Mengirim scan dari banyak IP palsu untuk mengaburkan IP asli:

# Decoy dengan 3 IP palsu
sudo nmap -D 10.0.0.1,10.0.0.2,10.0.0.3 192.168.1.100

# Decoy dengan RND untuk IP random
sudo nmap -D RND:5 192.168.1.100

# Decoy dengan ME untuk IP sendiri di posisi tertentu
sudo nmap -D decoy1,ME,decoy2 192.168.1.100

Fragmentasi Paket (-f)

Memfragmentasi paket agar firewall tidak bisa membaca header TCP:

# Fragmentasi default (8 byte per fragment)
sudo nmap -f 192.168.1.100

# Fragmentasi kustom (16 byte per fragment)
sudo nmap --mtu 16 192.168.1.100

Source Port Spoofing (--source-port)

Beberapa firewall mengizinkan traffic dari port tertentu (misal: 53 DNS, 20 FTP data):

# Scan dari source port 53 (DNS)
sudo nmap --source-port 53 192.168.1.100

Spoof IP Address (-S)

Memalsukan source IP address:

# Spoof IP - butuh akses ke jaringan target untuk melihat respons
sudo nmap -S spoofed_ip 192.168.1.100 -e eth0

# Dengan interface spesifik
sudo nmap -S spoofed_ip 192.168.1.100 -e wlan0

Randomize Hosts

# Randomize urutan host dalam subnet scan
sudo nmap --randomize-hosts 192.168.1.0/24

Append Random Data

# Tambah random data di akhir paket
sudo nmap --data-length 50 192.168.1.100

Badsum

# Kirim paket dengan checksum salah (melewati beberapa firewall lama)
sudo nmap --badsum 192.168.1.100

Perintah Komprehensif

Berikut kombinasi perintah yang sering digunakan dalam pentest:

# Scan cepat: port umum + service + OS + script default
sudo nmap -sS -sV -O -sC -T4 192.168.1.100

# Comprehensive: semua port + semua teknik deteksi
sudo nmap -p- -sS -sV -O -sC -A -T4 192.168.1.100

# Stealth scan untuk target dengan IDS
sudo nmap -sS -T1 -f --data-length 50 -D RND:5 192.168.1.100

# Web server audit
sudo nmap -p 80,443 -sV -sC --script=http-enum,http-headers,http-title target.com

# Full subnet discovery dengan ping sweep
sudo nmap -sn 192.168.1.0/24

# List scan (tidak mengirim paket ke target - hanya resolusi DNS)
nmap -sL 192.168.1.0/24

Masscan - Alternatif Nmap untuk Kecepatan

Masscan adalah scanner asinkron yang diklaim mampu memindai seluruh internet dalam waktu kurang dari 6 menit pada koneksi 10 Gbps.

Perbandingan dengan Nmap

Fitur Nmap Masscan
Kecepatan 1000-10,000 port/detik Jutaan port/detik
Scan asinkron Tidak (kecuali idle scan) Ya (transmit rate tinggi)
NSE scripts Sangat lengkap Tidak ada
OS detection Ya Tidak
Service version Ya (sV) Tidak
Fragmentasi Ya Ya
Banner grab Ya Terbatas

Penggunaan Masscan

# Install masscan
sudo apt install -y masscan

# Scan port umum pada subnet
sudo masscan 192.168.1.0/24 -p80,443,22,21,3389

# Scan seluruh port TCP pada satu host
sudo masscan 192.168.1.100 -p0-65535 --rate=1000

# Scan dengan output
sudo masscan 192.168.1.0/24 -p80,443 -oJ scan.json
sudo masscan 192.168.1.0/24 -p80,443 -oL scan.txt

# Exclude IP range
sudo masscan 10.0.0.0/8 -p443 --exclude 10.0.0.1 --exclude 10.0.0.0/24

# Masscan dengan adapter dan source IP
sudo masscan 192.168.1.0/24 -p80 --router-mac 00:11:22:33:44:55

Kapan menggunakan Nmap vs Masscan:

  • Gunakan Masscan untuk menemukan host dan port di jaringan besar dengan cepat
  • Gunakan Nmap untuk analisis mendalam setelah target ditemukan

Kesimpulan

Nmap adalah tool fundamental dalam security testing yang wajib dikuasai. Pemahaman tentang perbedaan jenis scan (SYN, TCP Connect, UDP, FIN, Xmas, Null), penggunaan NSE scripts, dan teknik evasion sangat penting untuk pengujian keamanan yang efektif. Kombinasikan Nmap dengan Masscan untuk workflow optimal - Masscan untuk discovery cepat, Nmap untuk enumerasi mendalam.

Kunci penguasaan Nmap terletak pada eksperimen langsung. Cobalah berbagai kombinasi flag, analisis output, dan pelajari bagaimana firewall merespons setiap jenis scan.

PADA HALAMAN INI