Nmap neposiela vždy paket, o ktorom si myslíte, že ste ho požiadali. Keď surové sockety nie sú dostupné, nahradí predvolené skenovanie SYN skenovaním TCP connect, takže beh pod bežným používateľom a beh pod sudo môžu odpovedať na rôzne otázky o tom istom porte. Výsledky vyzerajú ako problém s oprávneniami, no zvyčajne sú zmenou metódy. Urobiť metódu explicitnou je jediný spôsob, ako oba behy vôbec porovnať.

Dve sondy, jeden port, rôzne cesty kódu

Skenovanie SYN si TCP hlavičku zostaví samo, odošle ju zo surového socketu a prečíta odpoveď zo siete skôr, než TCP zásobník jadra vôbec zaznamená dokončené spojenie. Skenovanie connect požiada operačný systém o otvorenie bežného socketu a hlási, čo vráti connect(). Obe môžu označiť port ako otvorený, ale len jedno zanechá polootvorený pokus a len jedno podlieha politike na úrovni socketu naviazanej na odosielajúci proces.

Surová cesta vyžaduje CAP_NET_RAW, a preto sa predvolené skenovanie ticho zhorší, keď táto schopnosť chýba. Vlastná príručka k technikám skenovania od Nmap túto zámenu dokumentuje: skenovanie connect je náhradou, pretože nevyžaduje žiadne špeciálne oprávnenia. Zámena sa vo väčšine behov deje bez varovania, a práve preto sa tak ľahko prehliadne. Keď viete, že náhrada existuje, “otvorené ako root, zavreté ako používateľ” prestane znieť ako chyba oprávnení a začne znieť ako dve rôzne merania.

Čo sudo v skenovaní skutočne mení

Zvýšenie oprávnení obnoví cestu surového socketu, a to mení viac než verdikt. Voľba zdrojového portu, časovanie paketov, správanie pri opakovanom prenose aj spôsob klasifikácie filtrovanej odpovede pochádzajú z iného kódu. Sprostredkovateľ, ktorý obmedzuje rýchlosť SYN, zaobchádza s oboma behmi nerovnako, aj keď je cieľový hostiteľ totožný.

Protokolovanie na strane cieľa sa tiež rozchádza. Dokončený handshake je viditeľný pre službu aj pre akékoľvek účtovanie socketov, zatiaľ čo resetovaná polootvorená sonda často nie. Ak porovnávate behy proti hostiteľovi, ktorého protokoly tiež čítate, časť rozdielu, ktorý vidíte, je samo pozorovanie.

Udržte metódu konštantnú v oboch behoch

Vynúťte rovnakú techniku v oboch volaniach a porovnanie začne niečo znamenať. Prepínač -sT vyžaduje skenovanie connect výslovne, -Pn odstraňuje zisťovanie hostiteľov, -n odstraňuje preklad názvov a jediný -p odstraňuje rozdiely v zozname portov.

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

Nahraďte adresu a port hostiteľom, ktorý smiete testovať; rozsah z dokumentácie vyššie je ukážka, nie cieľ. Ak sa oba behy teraz zhodujú, pôvodný rozdiel pochádzal z metódy skenovania. Ak sa stále nezhodujú, prevádzku klasifikuje niečo iné a ďalšia časť je miesto, kde hľadať.

Kontext účtu nie je len prepínač oprávnení

Nasadenie VPN môže klasifikovať pakety podľa UID, podľa cgroup alebo podľa pravidla naviazaného na proces, ktorý otvoril socket. Prevádzka rootu a prevádzka používateľa potom vychádzajú inými smerovacími tabuľkami alebo narážajú na iné sady pravidiel a žiadna disciplína metódy skenovania ich nezmieri.

Skúmajte politiku, nie oprávnenie. V Linuxe to nftables vyjadruje pomocou meta skuid a iptables zhodou vlastníka, a ktorýkoľvek z nich môže poslať jediné UID tunelom, zatiaľ čo druhý ďalej používa fyzickú predvolenú trasu.

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

Potvrďte sondu, než porovnáte výsledky

Pred vyvodením záverov dokážte, ktorá sonda bežala. Nmap techniku pomenuje vo svojom vlastnom výstupe a --reason pridáva dôkaz za každým stavom, čo je časť, ktorá vám povie, či sa handshake naozaj dokončil.

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 behy, ktoré hlásia rovnaký stav z rôznych dôvodov, si neodporujú, a dva behy, ktoré hlásia rôzne stavy z rovnakého dôvodu, ukazujú na smerovanie alebo politiku, nie na skenovanie. Udržte cieľ, port, menný priestor a časovanie totožné, potom meňte jednu premennú po druhej. Spúšťanie služby ako root nie je opravou nesúladu politiky; opravou je vyjadriť zamýšľanú politiku prostredníctvom vlastníka služby.

Súvisiace články