Nmap tidak selalu menghantar paket yang anda sangka anda minta. Apabila soket mentah tidak tersedia, ia menggantikan imbasan SYN lalai dengan imbasan TCP connect, jadi pelaksanaan sebagai pengguna biasa dan pelaksanaan di bawah sudo boleh menjawab soalan berbeza tentang port yang sama. Hasilnya kelihatan seperti masalah kebenaran, dan biasanya ia adalah perubahan kaedah. Menjadikan kaedah itu eksplisit ialah satu-satunya cara membandingkan kedua-dua pelaksanaan.

Dua prob, satu port, laluan kod berbeza

Imbasan SYN membina pengepala TCP sendiri, menghantarnya dari soket mentah dan membaca balasan dari rangkaian sebelum tindanan TCP kernel pernah merekodkan sambungan yang selesai. Imbasan connect meminta sistem pengendalian membuka soket biasa dan melaporkan apa sahaja yang dikembalikan connect(). Kedua-duanya boleh melabel port sebagai terbuka, tetapi hanya satu meninggalkan cubaan separuh terbuka dan hanya satu tertakluk kepada dasar peringkat soket yang terikat pada proses penghantar.

Laluan mentah memerlukan CAP_NET_RAW, dan itulah sebabnya imbasan lalai merosot diam-diam apabila keupayaan itu tiada. Rujukan teknik imbasan Nmap sendiri mendokumentasikan penggantian itu: imbasan connect ialah sandaran kerana ia tidak memerlukan sebarang keistimewaan khas. Pertukaran berlaku tanpa amaran dalam kebanyakan pelaksanaan, dan itulah yang menjadikannya begitu mudah disalah baca. Sebaik sahaja anda tahu sandaran itu wujud, “terbuka sebagai root, tertutup sebagai pengguna” berhenti berbunyi seperti pepijat kebenaran dan mula berbunyi seperti dua ukuran berbeza.

Apa yang sebenarnya diubah sudo dalam imbasan

Menaikkan keistimewaan memulihkan laluan soket mentah, dan itu mengubah lebih daripada keputusan. Pemilihan port sumber, pemasaan paket, tingkah laku penghantaran semula dan cara balasan yang ditapis dikelaskan semuanya datang dari kod yang berbeza. Peranti tengah yang mengehadkan kadar SYN melayan kedua-dua pelaksanaan secara tidak sama walaupun hos destinasi adalah sama.

Pencatatan log di sisi destinasi juga berbeza. Jabat tangan yang selesai kelihatan kepada perkhidmatan dan kepada mana-mana perakaunan soket, manakala prob separuh terbuka yang ditetapkan semula selalunya tidak. Jika anda membandingkan pelaksanaan terhadap hos yang lognya juga anda baca, sebahagian perbezaan yang anda lihat ialah pemerhatian itu sendiri.

Kekalkan kaedah tetap dalam kedua-dua pelaksanaan

Paksa teknik yang sama dalam kedua-dua panggilan dan perbandingan mula bermakna sesuatu. Bendera -sT meminta imbasan connect secara eksplisit, -Pn membuang penemuan hos, -n membuang penyelesaian nama, dan satu -p membuang perbezaan senarai port.

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

Gantikan alamat dan port dengan hos yang anda dibenarkan uji; julat dokumentasi di atas ialah contoh, bukan sasaran. Jika kedua-dua pelaksanaan kini bersetuju, perbezaan asal datang daripada kaedah imbasan. Jika ia masih tidak bersetuju, sesuatu yang lain mengelaskan trafik itu, dan bahagian seterusnya ialah tempat untuk melihat.

Konteks akaun bukan sekadar bendera keistimewaan

Penggunaan VPN boleh mengelaskan paket mengikut UID, mengikut cgroup atau mengikut peraturan yang terikat pada proses yang membuka soket. Kemudian trafik root dan trafik pengguna keluar melalui jadual penghalaan berbeza atau melanggar set peraturan berbeza, dan tiada disiplin kaedah imbasan yang mendamaikannya.

Periksa dasar, bukan keistimewaan. Di Linux, nftables menyatakannya dengan meta skuid dan iptables dengan padanan pemilik, dan mana-mana satu boleh menghantar satu UID ke dalam terowong sementara yang lain terus menggunakan laluan fizikal lalai.

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

Sahkan prob sebelum membandingkan hasil

Sebelum membuat kesimpulan, buktikan prob mana yang berjalan. Nmap menamakan teknik itu dalam outputnya sendiri, dan --reason menambah bukti di sebalik setiap keadaan, iaitu bahagian yang memberitahu anda sama ada 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 pelaksanaan yang melaporkan keadaan sama atas sebab berbeza bukan percanggahan, dan dua pelaksanaan yang melaporkan keadaan berbeza atas sebab yang sama menunjuk kepada penghalaan atau dasar, bukan imbasan. Kekalkan destinasi, port, ruang nama dan pemasaan sama, kemudian ubah satu pemboleh ubah pada satu masa. Menjalankan perkhidmatan sebagai root bukan pembaikan bagi ketidakpadanan dasar; pembaikannya ialah menyatakan dasar yang dimaksudkan melalui pemilik perkhidmatan.

Artikel berkaitan