Nmap ne šalje uvijek paket za koji mislite da ste ga tražili. Kada sirovi sockete nisu dostupni, zamjenjuje zadano SYN skeniranje TCP connect skeniranjem, pa pokretanje kao obični korisnik i pokretanje pod sudo mogu odgovoriti na različita pitanja o istom portu. Rezultati izgledaju kao problem s dozvolama, a obično su promjena metode. Izričito navođenje metode jedini je način da se dva pokretanja uopće usporede.

Dvije sonde, jedan port, različite putanje koda

SYN skeniranje samo gradi TCP zaglavlje, šalje ga sa sirovog socketa i čita odgovor s mreže prije nego što TCP stog kernela uopće zabilježi završenu vezu. Connect skeniranje traži od operacijskog sustava da otvori običan socket i prijavljuje što connect() vrati. Oba mogu nazvati port otvorenim, ali samo jedan ostavlja poluotvoreni pokušaj i samo jedan podliježe politici na razini socketa vezanoj za proces koji šalje.

Sirova putanja zahtijeva CAP_NET_RAW, zato zadano skeniranje tiho degradira kada ta mogućnost nedostaje. Nmapova vlastita referenca za tehnike skeniranja dokumentira zamjenu: connect skeniranje je rezerva jer ne zahtijeva nikakve posebne privilegije. Zamjena se u većini pokretanja događa bez upozorenja, i upravo to je čini tako lakom za pogrešno čitanje. Kada znate da rezerva postoji, “otvoreno kao root, zatvoreno kao korisnik” prestaje zvučati kao greška u dozvolama i počinje zvučati kao dva različita mjerenja.

Što sudo zapravo mijenja u skeniranju

Podizanje privilegija vraća putanju sirovog socketa, a to mijenja više od presude. Odabir izvornog porta, tajming paketa, ponašanje pri ponovnom slanju i način na koji se filtrirajući odgovor klasificira dolaze iz različitog koda. Posrednik koji ograničava brzinu SYN-ova tretira dva pokretanja nejednako čak i kada je odredišni host identičan.

Zapisivanje na strani odredišta također se razilazi. Završeni handshake vidljiv je servisu i svakom obračunu socketa, dok resetirana poluotvorena sonda često nije. Ako uspoređujete pokretanja prema hostu čije zapise također čitate, dio razlike koji vidite je samo opažanje.

Držite metodu konstantnom u oba pokretanja

Nametnite istu tehniku u oba poziva i usporedba počinje nešto značiti. Zastavica -sT izričito traži connect skeniranje, -Pn uklanja otkrivanje hostova, -n uklanja razrješavanje imena, a jedan -p uklanja razlike u popisu portova.

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

Zamijenite adresu i port hostom koji smijete testirati; dokumentacijski raspon iznad je primjer, a ne meta. Ako se dva pokretanja sada slažu, prvotna razlika dolazila je od metode skeniranja. Ako se i dalje ne slažu, nešto drugo klasificira promet, a sljedeći odjeljak je mjesto za traženje.

Kontekst računa nije samo zastavica privilegija

VPN raspoređivanje može klasificirati pakete po UID-u, po cgroupu ili po pravilu vezanom za proces koji je otvorio socket. Tada root promet i korisnički promet izlaze kroz različite tablice usmjeravanja ili udaraju u različite skupove pravila, i nikakva disciplina metode skeniranja ih ne može pomiriti.

Ispitajte politiku, a ne privilegiju. Na Linuxu nftables to izražava pomoću meta skuid, a iptables poklapanjem vlasnika, i bilo koje od njih može poslati jedan UID kroz tunel dok drugo nastavlja koristiti fizičku zadanu rutu.

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

Potvrdite sondu prije nego što usporedite rezultate

Prije izvođenja zaključaka dokažite koja je sonda radila. Nmap imenuje tehniku u vlastitom izlazu, a --reason dodaje dokaz iza svakog stanja, što je dio koji vam kaže je li handshake doista završen.

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

Dva pokretanja koja prijavljuju isto stanje iz različitih razloga nisu proturječje, a dva pokretanja koja prijavljuju različita stanja iz istog razloga upućuju na usmjeravanje ili politiku, a ne na skeniranje. Držite odredište, port, imenski prostor i tajming identičnima, pa mijenjajte jednu varijablu po jednu. Pokretanje servisa kao root nije popravak za neusklađenost politike; popravak je izraziti namjeravanu politiku kroz vlasnika servisa.

Povezani članci