Nmap sender ikkje alltid pakken du trur du bad om. Når råsoklar ikkje er tilgjengelege, byter han ut standardskannet med eit TCP connect-skann, så ein køyring som vanleg brukar og ein køyring under sudo kan svare på ulike spørsmål om same port. Resultata ser ut som eit rettsproblem, og dei er oftast ei metodeendring. Å gjere metoden eksplisitt er den einaste måten å samanlikne dei to køyringane i det heile.

To prober, éin port, ulike kodestiar

Eit SYN-skann byggjer TCP-headeren sjølv, sender han frå ein råsokkel og les svaret frå nettet før TCP-stakken til kjernen nokon gong registrerer ei fullført tilkopling. Eit connect-skann ber operativsystemet opne ein vanleg sokkel og rapporterer kva connect() gjev tilbake. Begge kan kalle ein port open, men berre éin lèt att eit halvope forsøk, og berre éin er underlagd sokkel-nivå-policy knytt til prosessen som sender.

Råstien krev CAP_NET_RAW, og difor blir standardskannet stille dårlegare når den eigenskapen manglar. Nmaps eigen referanse for skanneteknikkar dokumenterer erstatninga: connect-skannet er reservevalet fordi det ikkje krev nokon spesielle rettar i det heile. Byttet skjer utan varsel i dei fleste køyringar, og det er nettopp det som gjer det så lett å feiltolke. Når du først veit at reservevalet finst, sluttar «open som root, lukka som brukar» å høyrast ut som ein rettsfeil og byrjar å høyrast ut som to ulike målingar.

Kva sudo eigentleg endrar i skannet

Auka rettar gjenopprettar råsokkelstien, og det endrar meir enn dommen. Val av kjeldeport, pakketiming, åtferd ved videresending og måten eit filtrert svar blir klassifisert på kjem alle frå ulik kode. Ein mellomvare som avgrensar SYN-frekvensen behandlar dei to køyringane ulikt sjølv når målverten er identisk.

Logging på målsida avvik òg. Eit fullført handtrykk er synleg for tenesta og for all sokkelrekneskap, medan ei tilbakestilt halvopen probe ofte ikkje er det. Viss du samanliknar køyringar mot ein vert du òg les loggane til, er ein del av skilnaden du ser sjølve observasjonen.

Hald metoden konstant i begge køyringane

Tving gjennom same teknikk i begge kalla, og samanlikninga byrjar å bety noko. Flagget -sT ber uttrykkeleg om connect-skann, -Pn fjernar vertsoppdaging, -n fjernar namneoppslag, og eitt enkelt -p fjernar skilnader i portlista.

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

Bytt ut adressa og porten med ein vert du har løyve til å teste; dokumentasjonsområdet ovanfor er eit døme, ikkje eit mål. Viss dei to køyringane no er samde, kom den opphavlege skilnaden frå skannemetoden. Viss dei framleis er usamde, er det noko anna som klassifiserer trafikken, og neste avsnitt er staden å sjå.

Kontokontekst er ikkje berre eit rettsflagg

Ein VPN-utrulling kan klassifisere pakkar etter UID, etter cgroup eller etter ei regel knytt til prosessen som opna sokkelen. Då forlèt root-trafikk og brukartrafikk ulike rutetabellar eller treffer ulike regelsett, og ingen skannemetodedisiplin sameinar dei.

Undersøk policyen i staden for retten. På Linux uttrykkjer nftables dette med meta skuid og iptables med eigarsamsvar, og begge kan sende éin enkelt UID ned gjennom ein tunnel medan den andre held fram med å bruke den fysiske standardruta.

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

Stadfest proba før du samanliknar resultat

Før du dreg konklusjonar, prov kva probe som køyrde. Nmap namngjev teknikken i sin eigen utdata, og --reason legg til beviset bak kvar tilstand, som er den delen som fortel deg om eit handtrykk faktisk vart fullført.

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øyringar som rapporterer same tilstand av ulike grunnar, er ikkje ei motsetning, og to køyringar som rapporterer ulike tilstandar av same grunn, peikar på ruting eller policy snarare enn på skannet. Hald mål, port, namnerom og timing identiske, og endra så éin variabel om gongen. Å køyre tenesta som root er ikkje reparasjonen for eit policy-avvik; å uttrykkje den tiltenkte policyen gjennom eigaren av tenesta er det.

Relaterte artiklar