Nmap tidak selalu mengirim paket yang Anda kira telah diminta. Saat soket mentah tidak tersedia, ia mengganti pemindaian SYN bawaan dengan pemindaian TCP connect, sehingga eksekusi sebagai pengguna biasa dan eksekusi di bawah sudo bisa menjawab pertanyaan berbeda tentang port yang sama. Hasilnya tampak seperti masalah hak akses, padahal biasanya itu perubahan metode. Membuat metode menjadi eksplisit adalah satu-satunya cara membandingkan kedua eksekusi.

Dua probe, satu port, jalur kode berbeda

Pemindaian SYN membangun header TCP sendiri, mengirimnya dari soket mentah, dan membaca balasan dari jaringan sebelum tumpukan TCP kernel pernah mencatat koneksi yang selesai. Pemindaian connect meminta sistem operasi membuka soket biasa dan melaporkan apa pun yang dikembalikan connect(). Keduanya bisa menyebut sebuah port terbuka, tetapi hanya satu yang meninggalkan percobaan setengah terbuka dan hanya satu yang tunduk pada kebijakan tingkat soket yang melekat pada proses pengirim.

Jalur mentah membutuhkan CAP_NET_RAW, dan itulah sebabnya pemindaian bawaan diam-diam menurun ketika kemampuan itu tidak ada. Referensi teknik pemindaian milik Nmap sendiri mendokumentasikan penggantian itu: pemindaian connect adalah cadangannya karena sama sekali tidak membutuhkan hak istimewa khusus. Pertukaran terjadi tanpa peringatan pada sebagian besar eksekusi, dan itulah yang membuatnya begitu mudah disalahbaca. Setelah Anda tahu cadangan itu ada, “terbuka sebagai root, tertutup sebagai pengguna” berhenti terdengar seperti bug izin dan mulai terdengar seperti dua pengukuran berbeda.

Apa yang sebenarnya diubah sudo dalam pemindaian

Menaikkan hak istimewa memulihkan jalur soket mentah, dan itu mengubah lebih dari sekadar putusan. Pemilihan port sumber, waktu paket, perilaku pengiriman ulang, dan cara balasan yang difilter diklasifikasikan semuanya berasal dari kode yang berbeda. Perangkat tengah yang membatasi laju SYN memperlakukan kedua eksekusi secara tidak setara bahkan ketika host tujuan identik.

Pencatatan di sisi tujuan juga berbeda. Jabat tangan yang selesai terlihat oleh layanan dan oleh pembukuan soket mana pun, sedangkan probe setengah terbuka yang direset sering tidak. Jika Anda membandingkan eksekusi terhadap host yang lognya juga Anda baca, sebagian perbedaan yang Anda lihat adalah pengamatannya sendiri.

Pertahankan metode tetap sama di kedua eksekusi

Paksakan teknik yang sama di kedua pemanggilan dan perbandingan mulai berarti sesuatu. Flag -sT meminta pemindaian connect secara eksplisit, -Pn menghapus penemuan host, -n menghapus resolusi nama, dan satu -p menghapus perbedaan daftar port.

nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77

Ganti alamat dan port dengan host yang Anda berwenang uji; rentang dokumentasi di atas hanyalah contoh, bukan target. Jika kedua eksekusi sekarang sepakat, perbedaan awal berasal dari metode pemindaian. Jika masih tidak sepakat, ada hal lain yang mengklasifikasikan lalu lintas, dan bagian berikutnya adalah tempat mencarinya.

Konteks akun bukan sekadar flag hak istimewa

Penerapan VPN dapat mengklasifikasikan paket berdasarkan UID, berdasarkan cgroup, atau berdasarkan aturan yang melekat pada proses yang membuka soket. Lalu lintas root dan lalu lintas pengguna kemudian keluar melalui tabel perutean berbeda atau mengenai kumpulan aturan berbeda, dan tidak ada disiplin metode pemindaian yang mendamaikannya.

Periksa kebijakannya, bukan hak istimewanya. Di Linux, nftables menyatakannya dengan meta skuid dan iptables dengan pencocokan pemilik, dan salah satunya dapat mengirim satu UID ke dalam terowongan sementara yang lain terus memakai rute fisik bawaan.

sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77

Pastikan probe sebelum membandingkan hasil

Sebelum menarik kesimpulan, buktikan probe mana yang berjalan. Nmap menamai tekniknya di keluaran sendiri, dan --reason menambahkan bukti di balik setiap status, yang merupakan bagian yang memberi tahu Anda apakah jabat tangan benar-benar selesai.

nmap --reason -sT -Pn -n -p 8443 198.51.100.77
sudo nmap --reason -sS -Pn -n -p 8443 198.51.100.77
getcap "$(command -v nmap)"
capsh --print | grep -i net_raw

Dua eksekusi yang melaporkan status sama karena alasan berbeda bukanlah kontradiksi, dan dua eksekusi yang melaporkan status berbeda karena alasan sama menunjuk ke perutean atau kebijakan, bukan ke pemindaian. Jaga tujuan, port, ruang nama, dan waktu tetap identik, lalu ubah satu variabel setiap kali. Menjalankan layanan sebagai root bukanlah perbaikan untuk ketidakcocokan kebijakan; perbaikannya adalah menyatakan kebijakan yang dimaksud melalui pemilik layanan.

Artikel terkait