Hvorfor en portscanning ændrer sig, når du kører den med sudo
Nmap bytter stille en SYN-scanning ud med en TCP connect-scanning, når råsockets ikke er tilgængelige, så root og en almindelig bruger måler forskellige veje.
Nmap sender ikke altid den pakke, du tror, du bad om. Når råsockets ikke er tilgængelige, erstatter den standard-SYN-scanningen med en TCP connect-scanning, så en kørsel som din almindelige bruger og en kørsel under sudo kan svare på forskellige spørgsmål om den samme port. Resultaterne ligner et rettighedsproblem, og de er som regel en metodeændring. At gøre metoden eksplicit er den eneste måde overhovedet at sammenligne de to kørsler.
To prober, én port, forskellige kodestier
En SYN-scanning bygger selv TCP-headeren, sender den fra en råsocket og læser svaret fra netværket, før kernens TCP-stak overhovedet registrerer en afsluttet forbindelse. En connect-scanning beder styresystemet om at åbne en almindelig socket og rapporterer, hvad connect() returnerer. Begge kan kalde en port åben, men kun den ene efterlader et halvåbent forsøg, og kun den ene er underlagt socketniveau-politik knyttet til den sendende proces.
Råstien kræver CAP_NET_RAW, og derfor forringes standardscanningen stille, når den egenskab mangler. Nmaps egen reference til scanningsteknikker dokumenterer udskiftningen: connect-scanning er fallbacken, fordi den slet ikke kræver særlige rettigheder. Bytter sker uden advarsel i de fleste kørsler, og det er netop det, der gør den så let at fejllæse. Når du først ved, at fallbacken findes, holder “åben som root, lukket som bruger” op med at lyde som en rettighedsfejl og begynder at lyde som to forskellige målinger.
Hvad sudo egentlig ændrer i scanningen
Forhøjede rettigheder gendanner råsocketstien, og det ændrer mere end dommen. Valg af kildeport, pakketiming, gensendelsesadfærd og måden, en filtreret respons klassificeres på, kommer alle fra forskellig kode. En mellembox, der begrænser SYN'er, behandler de to kørsler ulige, selv når destinationsværten er identisk.
Logning på målsiden afviger også. Et afsluttet håndtryk er synligt for tjenesten og for enhver socketregnskab, mens en nulstillet halvåben probe ofte ikke er. Hvis du sammenligner kørsler mod en vært, hvis logfiler du også læser, er en del af den forskel, du ser, selve observationen.
Hold metoden konstant i begge kørsler
Gennemtving den samme teknik i begge kald, og sammenligningen begynder at betyde noget. Flaget -sT anmoder udtrykkeligt om connect-scanning, -Pn fjerner værtsopdagelse, -n fjerner navneopløsning, og et enkelt -p fjerner forskelle i portlisten.
nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77
Byt adressen og porten ud med en vært, du har tilladelse til at teste; dokumentationsområdet ovenfor er en pladsholder, ikke et mål. Hvis de to kørsler nu er enige, kom den oprindelige forskel fra scanningsmetoden. Hvis de stadig er uenige, er det noget andet, der klassificerer trafikken, og næste afsnit er, hvor du skal kigge.
Kontokontekst er ikke kun et rettighedsflag
En VPN-udrulning kan klassificere pakker efter UID, efter cgroup eller efter en regel knyttet til den proces, der åbnede socketten. Så forlader root-trafik og brugertrafik forskellige routingtabeller eller rammer forskellige regelsæt, og ingen mængde scanningsmetodedisciplin forliger dem.
Undersøg politikken i stedet for rettigheden. På Linux udtrykker nftables det med meta skuid, og iptables med ejermatch, og begge kan sende en enkelt UID ned gennem en tunnel, mens den anden fortsætter med at bruge den fysiske standardrute.
sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77
Bekræft proben, før du sammenligner resultater
Før du drager konklusioner, skal du bevise, hvilken probe der kørte. Nmap navngiver teknikken i sit eget output, og --reason tilføjer evidensen bag hver tilstand, hvilket er den del, der fortæller dig, om et håndtryk faktisk blev afsluttet.
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
To kørsler, der rapporterer samme tilstand af forskellige grunde, er ikke en modsætning, og to kørsler, der rapporterer forskellige tilstande af samme grund, peger på routing eller politik snarere end på scanningen. Hold destination, port, navnerum og timing identiske, og ændr så én variabel ad gangen. At køre tjenesten som root er ikke reparationen på en politik-uoverensstemmelse; at udtrykke den tilsigtede politik gennem tjenestens ejer er.