Nmap no sempre envia el paquet que creieu que heu demanat. Quan els sockets raw no estan disponibles, substitueix l’escaneig SYN per defecte per un escaneig TCP connect, així que una execució com a usuari normal i una altra amb sudo poden respondre preguntes diferents sobre el mateix port. Els resultats semblen un problema de permisos, i normalment són un canvi de mètode. Fer explícit el mètode és l’única manera de comparar les dues execucions.

Dues sondes, un port, camins de codi diferents

Un escaneig SYN construeix la capçalera TCP ell mateix, l’envia des d’un socket raw i llegeix la resposta de la xarxa abans que la pila TCP del nucli registri mai una connexió completada. Un escaneig connect demana al sistema operatiu que obri un socket ordinari i informa del que retorna connect(). Tots dos poden qualificar un port com a obert, però només un deixa un intent mig obert i només un està subjecte a la política de nivell de socket associada al procés que envia.

El camí raw necessita CAP_NET_RAW, i per això l’escaneig per defecte es degrada silenciosament quan falta aquesta capacitat. La referència de tècniques d’escaneig del mateix Nmap documenta la substitució: l’escaneig connect és el recurs perquè no necessita cap privilegi especial. El canvi es produeix sense cap avís en la majoria d’execucions, i això és el que el fa tan fàcil de malinterpretar. Un cop sabeu que el recurs existeix, “obert com a root, tancat com a usuari” deixa de sonar com un error de permisos i comença a sonar com dues mesures diferents.

Què canvia realment sudo en l’escaneig

Elevar els privilegis restaura el camí del socket raw, i això canvia més que el veredicte. La selecció del port d’origen, el temps dels paquets, el comportament de retransmissió i la manera com es classifica una resposta filtrada provenen de codi diferent. Un equip intermedi que limita la taxa de SYN tracta les dues execucions de manera desigual fins i tot quan l’amfitrió de destinació és idèntic.

El registre al costat de la destinació també divergeix. Un handshake complet és visible per al servei i per a qualsevol comptabilitat de sockets, mentre que una sonda mig oberta reiniciada sovint no ho és. Si compareu execucions contra un amfitrió els registres del qual també llegiu, part de la diferència que observeu és l’observació mateixa.

Manteniu el mètode constant en les dues execucions

Forceu la mateixa tècnica en les dues invocacions i la comparació comença a tenir sentit. L’indicador -sT demana explícitament l’escaneig connect, -Pn elimina el descobriment d’amfitrions, -n elimina la resolució de noms, i un sol -p elimina les diferències de llista de ports.

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

Substituïu l’adreça i el port per un amfitrió que tingueu autorització per provar; el rang de documentació de dalt és un exemple, no un objectiu. Si les dues execucions ara coincideixen, la diferència original venia del mètode d’escaneig. Si encara no coincideixen, alguna altra cosa classifica el trànsit, i la secció següent és on cal mirar.

El context del compte no és només un indicador de privilegis

Un desplegament de VPN pot classificar paquets per UID, per cgroup o per una regla associada al procés que va obrir el socket. Llavors el trànsit de root i el de l’usuari surten per taules d’encaminament diferents o toquen conjunts de regles diferents, i cap disciplina de mètode d’escaneig no els reconcilia.

Inspeccioneu la política, no el privilegi. A Linux, nftables ho expressa amb meta skuid i iptables amb la coincidència de propietari, i qualsevol dels dos pot enviar un sol UID per un túnel mentre l’altre continua utilitzant la ruta física per defecte.

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

Confirmeu la sonda abans de comparar resultats

Abans de treure conclusions, demostreu quina sonda s’ha executat. Nmap anomena la tècnica a la seva pròpia sortida, i --reason afegeix l’evidència darrere de cada estat, que és la part que us diu si un handshake s’ha completat realment.

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

Dues execucions que informen del mateix estat per motius diferents no són una contradicció, i dues execucions que informen d’estats diferents pel mateix motiu assenyalen l’encaminament o la política, no l’escaneig. Manteniu idèntics la destinació, el port, l’espai de noms i el temps, i després canvieu una variable alhora. Executar el servei com a root no és la reparació d’una discrepància de política; la reparació és expressar la política desitjada mitjançant el propietari del servei.

Articles relacionats