Зашто се скенирање портова мења када се покрене са sudo
Када сирови сокети нису доступни, Nmap тихо замењује SYN скенирање TCP connect скенирањем, па root и обичан корисник мере различите путање.
Nmap не шаље увек пакет за који мислите да сте га тражили. Када сирови сокети нису доступни, замењује подразумевано SYN скенирање TCP connect скенирањем, па покретање као обичан корисник и покретање под sudo могу одговорити на различита питања о истом порту. Резултати изгледају као проблем са дозволама, а обично су промена методе. Изричито навођење методе једини је начин да се два покретања уопште упореде.
Две сонде, један порт, различите путање кода
SYN скенирање само гради TCP заглавље, шаље га са сировог сокета и чита одговор са мреже пре него што TCP стек кернела уопште забележи завршену везу. Connect скенирање тражи од оперативног система да отвори обичан сокет и пријављује шта connect() врати. Оба могу назвати порт отвореним, али само један оставља полуотворени покушај и само један подлеже политици на нивоу сокета везаној за процес који шаље.
Сирова путања захтева CAP_NET_RAW, зато подразумевано скенирање тихо деградира када та могућност недостаје. Nmap-ова сопствена референца за технике скенирања документује замену: connect скенирање је резерва јер не захтева никакве посебне привилегије. Замена се у већини покретања дешава без упозорења, и управо то је чини тако лаком за погрешно читање. Када знате да резерва постоји, „отворено као root, затворено као корисник“ престаје да звучи као грешка у дозволама и почиње да звучи као два различита мерења.
Шта sudo заиста мења у скенирању
Подизање привилегија враћа путању сировог сокета, а то мења више од пресуде. Избор изворног порта, тајминг пакета, понашање при поновном слању и начин класификације филтрираног одговора долазе из различитог кода. Посредник који ограничава брзину SYN-ова третира два покретања неједнако чак и када је одредишни хост идентичан.
Евидентирање на страни одредишта такође се разликује. Завршени рукопис је видљив сервису и сваком обрачуну сокета, док ресетована полуотворена сонда често није. Ако упоређујете покретања према хосту чије записе такође читате, део разлике који видите је само запажање.
Држите методу константном у оба покретања
Наметните исту технику у оба позива и поређење почиње нешто да значи. Заставица -sT изричито тражи connect скенирање, -Pn уклања откривање хостова, -n уклања разрешавање имена, а један -p уклања разлике у листи портова.
nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77
Замените адресу и порт хостом који смете да тестирате; опсег из документације изнад је пример, а не мета. Ако се два покретања сада слажу, првобитна разлика је долазила од методе скенирања. Ако се и даље не слажу, нешто друго класификује саобраћај, а следећи одељак је место где треба гледати.
Контекст налога није само заставица привилегија
VPN распоређивање може класификовати пакете по UID-у, по cgroup-у или по правилу везаном за процес који је отворио сокет. Тада саобраћај root-а и саобраћај корисника излазе кроз различите табеле усмеравања или улазе у различите скупове правила, и никаква дисциплина методе скенирања их не мире.
Испитајте политику, а не привилегију. На Linux-у nftables то изражава преко meta skuid, а iptables поклапањем власника, и било које од њих може послати један UID кроз тунел док друго наставља да користи физичку подразумевану руту.
sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77
Потврдите сонду пре него што упоредите резултате
Пре извођења закључака докажите која је сонда радила. Nmap именује технику у сопственом излазу, а --reason додаје доказ иза сваког стања, што је део који вам каже да ли је рукопис заиста завршен.
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
Два покретања која пријављују исто стање из различитих разлога нису противречност, а два покретања која пријављују различита стања из истог разлога упућују на усмеравање или политику, а не на скенирање. Држите одредиште, порт, именски простор и тајминг идентичнима, па мењајте једну променљиву по једну. Покретање сервиса као root није поправка за неусклађеност политике; поправка је изразити намеравану политику кроз власника сервиса.