Bakit nagbabago ang port scan kapag pinapatakbo ito gamit ang sudo
Kapag walang raw socket, tahimik na pinapalitan ng Nmap ang SYN scan ng TCP connect scan, kaya root at ordinaryong user ay may iba’t ibang sinusukat na landas.
Hindi laging ipinapadala ng Nmap ang packet na akala mo ay hiniling mo. Kapag walang raw socket, pinapalitan nito ang default na SYN scan ng TCP connect scan, kaya ang pagpapatakbo bilang ordinaryong user at ang pagpapatakbo sa ilalim ng sudo ay maaaring sumagot ng magkaibang tanong tungkol sa parehong port. Mukhang problema sa pahintulot ang mga resulta, at kadalasan ito ay pagbabago ng paraan. Ang gawing malinaw ang paraan ang tanging paraan para paghambingin ang dalawang pagpapatakbo.
Dalawang probe, isang port, magkaibang landas ng code
Ang SYN scan ay mismo ang gumagawa ng TCP header, ipinapadala ito mula sa raw socket, at binabasa ang sagot mula sa network bago pa man maitala ng TCP stack ng kernel ang isang kumpletong koneksyon. Ang connect scan ay humihiling sa operating system na magbukas ng ordinaryong socket at iniuulat ang ibinabalik ng connect(). Puwedeng tawagin ng dalawa ang isang port na bukas, ngunit isa lang ang nag-iiwan ng kalahating-bukas na pagtatangka at isa lang ang nasasakop ng patakaran sa antas ng socket na nakatali sa prosesong nagpapadala.
Ang raw na landas ay nangangailangan ng CAP_NET_RAW, kaya tahimik na humihina ang default na scan kapag wala ang kakayahang iyon. Ang sariling sanggunian sa mga teknik ng scan ng Nmap ay nagtatala ng pagpapalit: ang connect scan ang kapalit dahil wala itong kailangang espesyal na pahintulot. Nangyayari ang pagpapalit nang walang babala sa karamihan ng pagpapatakbo, at iyon ang dahilan kung bakit napakadaling mabasa ito nang mali. Kapag alam mo nang may kapalit, hindi na tunog bug sa pahintulot ang “bukas bilang root, sarado bilang user” at nagsisimula nang tunog dalawang magkaibang pagsukat.
Ano ang aktwal na binabago ng sudo sa scan
Ibinabalik ng pagpapataas ng pahintulot ang landas ng raw socket, at mas marami ang binabago nito kaysa sa hatol. Ang pagpili ng source port, tiyempo ng packet, pag-uugali sa muling pagpapadala at paraan ng pag-uuri ng sinagot na tugon ay nagmumula sa magkaibang code. Ang middlebox na naglilimita sa rate ng SYN ay tinatrato ang dalawang pagpapatakbo nang hindi pantay kahit na magkapareho ang destinasyong host.
Nagkakaiba rin ang pag-log sa panig ng destinasyon. Ang kumpletong handshake ay nakikita ng serbisyo at ng anumang socket accounting, samantalang ang na-reset na kalahating-bukas na probe ay madalas na hindi. Kung ihinahambing mo ang mga pagpapatakbo sa isang host na binabasa mo rin ang mga log, bahagi ng pagkakaibang nakikita mo ay ang obserbasyon mismo.
Panatilihing pare-pareho ang paraan sa dalawang pagpapatakbo
Pilitin ang parehong teknik sa dalawang pagtawag at magsisimulang magkaroon ng kahulugan ang paghahambing. Ang flag na -sT ay tahasang humihiling ng connect scan, inaalis ng -Pn ang host discovery, inaalis ng -n ang name resolution, at isang -p lang ang nag-aalis ng mga pagkakaiba sa listahan ng port.
nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77
Palitan ang address at port ng host na may pahintulot kang subukan; ang saklaw ng dokumentasyon sa itaas ay halimbawa, hindi target. Kung nagtutugma na ngayon ang dalawang pagpapatakbo, ang orihinal na pagkakaiba ay nagmula sa paraan ng scan. Kung hindi pa rin nagtutugma, may ibang nag-uuri ng trapiko, at ang susunod na seksyon ang lugar na titingnan.
Ang konteksto ng account ay hindi lamang flag ng pahintulot
Ang deployment ng VPN ay maaaring mag-uri ng packet ayon sa UID, ayon sa cgroup, o ayon sa panuntunang nakatali sa prosesong nagbukas ng socket. Pagkatapos, ang trapiko ng root at ng user ay lumalabas sa magkaibang routing table o tumatama sa magkaibang set ng panuntunan, at walang disiplina ng paraan ng scan ang makakapagkasundo sa kanila.
Suriin ang patakaran, hindi ang pahintulot. Sa Linux, ipinapahayag ito ng nftables gamit ang meta skuid at ng iptables gamit ang pagtutugma ng may-ari, at alinman sa dalawa ay makapagpapadala ng isang UID sa tunnel habang ang isa ay patuloy na gumagamit ng pisikal na default na ruta.
sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77
Patunayan muna ang probe bago ihambing ang mga resulta
Bago ka magbigay ng konklusyon, patunayan kung aling probe ang tumakbo. Pinapangalanan ng Nmap ang teknik sa sarili nitong output, at ang --reason ay nagdadagdag ng ebidensya sa likod ng bawat estado, at iyon ang bahaging nagsasabi kung tunay na natapos ang handshake.
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
Ang dalawang pagpapatakbo na nag-uulat ng parehong estado sa magkaibang dahilan ay hindi kontradiksyon, at ang dalawang pagpapatakbo na nag-uulat ng magkaibang estado sa parehong dahilan ay tumutukoy sa routing o patakaran, hindi sa scan. Panatilihing magkapareho ang destinasyon, port, namespace at tiyempo, pagkatapos ay baguhin ang isang variable sa isang pagkakataon. Ang pagpapatakbo ng serbisyo bilang root ay hindi ang pag-aayos ng hindi pagkakatugma ng patakaran; ang pagpapahayag ng inaasahang patakaran sa pamamagitan ng may-ari ng serbisyo ang pag-aayos.