Az Nmap nem mindig azt a csomagot küldi, amit úgy gondol, hogy kért. Amikor a nyers socketek nem elérhetők, az alapértelmezett SYN-vizsgálat helyett TCP connect vizsgálatot használ, így a hétköznapi felhasználóként és a sudo alatt futtatott vizsgálat eltérő kérdésekre adhat választ ugyanarról a portról. Az eredmények jogosultsági problémának tűnnek, pedig általában módszerváltásról van szó. A módszer egyértelművé tétele az egyetlen módja annak, hogy a két futást egyáltalán összehasonlítsa.

Két szonda, egy port, eltérő kódutak

A SYN-vizsgálat maga építi fel a TCP fejlécet, nyers socketből küldi el, és a választ a hálózatról olvassa le, mielőtt a kernel TCP-vereme valaha rögzítene egy befejezett kapcsolatot. A connect vizsgálat megkéri az operációs rendszert, hogy nyisson egy közönséges socketet, és jelenti, amit a connect() visszaad. Mindkettő nyitottnak nevezhet egy portot, de csak az egyik hagy félnyitott kísérletet, és csak az egyik tartozik a küldő folyamathoz kapcsolódó socket szintű szabályzat hatálya alá.

A nyers útvonalhoz CAP_NET_RAW kell, ezért az alapértelmezett vizsgálat csendben visszaesik, ha ez a képesség hiányzik. Az Nmap saját vizsgálati technikákról szóló útmutatója dokumentálja a helyettesítést: a connect vizsgálat a tartalék, mert egyáltalán nem igényel különleges jogosultságot. A csere a legtöbb futásban figyelmeztetés nélkül történik, és éppen ez teszi olyan könnyen félreérthetővé. Ha egyszer tudja, hogy létezik a tartalék, a „rootként nyitott, felhasználóként zárt” többé nem jogosultsági hibának hangzik, hanem két különböző mérésnek.

Mit változtat meg valójában a sudo a vizsgálatban

A jogosultságok emelése visszaállítja a nyers socket útvonalát, és ez többet változtat az ítéletnél. A forrásport kiválasztása, a csomagok időzítése, az újraküldés viselkedése és a szűrt válasz osztályozásának módja mind más kódból származik. A SYN-ek sebességét korlátozó köztes eszköz egyenlőtlenül kezeli a két futást akkor is, ha a célgép azonos.

A céloldali naplózás is eltér. Egy befejezett kézfogás látható a szolgáltatásnak és minden socket-elszámolásnak, míg egy visszaállított félnyitott szonda gyakran nem. Ha olyan gép ellen hasonlítja össze a futásokat, amelynek naplóit is olvassa, a látott különbség egy része maga a megfigyelés.

Tartsa állandón a módszert mindkét futásban

Kényszerítse ki ugyanazt a technikát mindkét hívásban, és az összehasonlítás elkezd valamit jelenteni. A -sT kapcsoló kifejezetten connect vizsgálatot kér, a -Pn eltávolítja a gazdagép-felderítést, a -n eltávolítja a névfeloldást, és egyetlen -p eltávolítja a portlista eltéréseit.

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

Cserélje ki a címet és a portot olyan gazdagépre, amelyet engedélye van tesztelni; a fenti dokumentációs tartomány példa, nem cél. Ha a két futás most megegyezik, az eredeti különbség a vizsgálati módszerből származott. Ha még mindig eltérnek, valami más osztályozza a forgalmat, és a következő szakasz az, ahol érdemes keresni.

A fiókkörnyezet nem csak jogosultsági kapcsoló

Egy VPN-telepítés a csomagokat UID, cgroup vagy a socketet megnyitó folyamathoz kapcsolt szabály szerint osztályozhatja. Ekkor a root-forgalom és a felhasználói forgalom különböző útválasztási táblákon keresztül lép ki, vagy különböző szabálykészletekbe ütközik, és semmilyen vizsgálatimódszer-fegyelem nem békíti össze őket.

A szabályzatot vizsgálja, ne a jogosultságot. Linuxon az nftables meta skuid segítségével fejezi ezt ki, az iptables pedig a tulajdonos-egyeztetéssel, és bármelyik elküldhet egyetlen UID-t egy alagúton, miközben a másik továbbra is a fizikai alapértelmezett útvonalat használja.

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

Erősítse meg a szondát, mielőtt eredményeket hasonlít össze

Mielőtt következtetéseket von le, bizonyítsa, melyik szonda futott. Az Nmap a saját kimenetében megnevezi a technikát, a --reason pedig minden állapot mögé bizonyítékot tesz, és ez az a rész, amely megmondja, valóban befejeződött-e egy kézfogás.

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

Két futás, amely ugyanazt az állapotot más okból jelenti, nem ellentmondás, és két futás, amely különböző állapotokat ugyanabból az okból jelent, az útválasztásra vagy a szabályzatra mutat, nem a vizsgálatra. Tartsa azonosnak a célt, a portot, a névteret és az időzítést, majd egyszerre egy változót módosítson. A szolgáltatás rootként futtatása nem a szabályzati eltérés javítása; a javítás az, hogy a szándékolt szabályzatot a szolgáltatás tulajdonosán keresztül fejezze ki.

Kapcsolódó cikkek