Nmap ei aina lähetä pakettia, jonka luulet pyytäneesi. Kun raakasoketit eivät ole käytettävissä, se korvaa oletusarvoisen SYN-skannauksen TCP connect -skannauksella, joten ajo tavallisena käyttäjänä ja ajo sudon alla voivat vastata eri kysymyksiin samasta portista. Tulokset näyttävät oikeusongelmalta, ja ne ovat yleensä menetelmän muutos. Menetelmän tekeminen eksplisiittiseksi on ainoa tapa verrata kahta ajoa ylipäätään.

Kaksi koetinta, yksi portti, eri koodipolut

SYN-skannaus rakentaa TCP-otsikon itse, lähettää sen raakasoketista ja lukee vastauksen johdosta ennen kuin ytimen TCP-pino koskaan kirjaa valmistunutta yhteyttä. Connect-skannaus pyytää käyttöjärjestelmää avaamaan tavallisen soketin ja raportoi, mitä connect() palauttaa. Molemmat voivat kutsua porttia avoimeksi, mutta vain toinen jättää puoliavoimen yrityksen ja vain toinen on lähettävään prosessiin liittyvän sokettitason käytännön alainen.

Raaka polku tarvitsee CAP_NET_RAW, minkä vuoksi oletusskannaus heikkenee hiljaisesti, kun tuo kyvykkyys puuttuu. Nmapin oma skannaustekniikoiden viite dokumentoi korvauksen: connect-skannaus on varavaihtoehto, koska se ei tarvitse lainkaan erikoisoikeuksia. Vaihto tapahtuu useimmissa ajoissa ilman varoitusta, ja juuri siksi se on niin helppo lukea väärin. Kun tiedät varavaihtoehdon olevan olemassa, “avoinna rootina, suljettuna käyttäjänä” lakkaa kuulostamasta oikeusvirheeltä ja alkaa kuulostaa kahdelta eri mittaukselta.

Mitä sudo oikeastaan muuttaa skannauksessa

Oikeuksien korottaminen palauttaa raakasoketin polun, ja se muuttaa enemmän kuin tuomion. Lähdeportin valinta, pakettien ajoitus, uudelleenlähetyksen käyttäytyminen ja suodatetun vastauksen luokittelutapa tulevat kaikki eri koodista. SYN-paketteja rajoittava välilaite kohtelee kahta ajoa eriarvoisesti, vaikka kohdeisäntä olisi sama.

Lokitus kohdepäässä poikkeaa myös. Valmistunut kättely näkyy palvelulle ja kaikelle sokettikirjanpidolle, kun taas nollattu puoliavoin koetin usein ei näy. Jos vertaat ajoja isäntään, jonka lokeja myös luet, osa havaitsemastasi erosta on havainto itse.

Pidä menetelmä vakiona molemmissa ajoissa

Pakota sama tekniikka molemmissa kutsussa, niin vertailu alkaa merkitä jotain. Lippu -sT pyytää connect-skannausta eksplisiittisesti, -Pn poistaa isäntien löytämisen, -n poistaa nimien selvityksen ja yksi -p poistaa porttiluettelon erot.

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

Vaihda osoite ja portti isäntään, jota sinulla on lupa testata; yllä oleva dokumentaatioalue on esimerkki, ei kohde. Jos kaksi ajoa nyt täsmäävät, alkuperäinen ero tuli skannausmenetelmästä. Jos ne yhä eroavat, jokin muu luokittelee liikennettä, ja seuraava jakso on paikka, josta katsoa.

Tilin konteksti ei ole vain oikeuslippu

VPN-käyttöönotto voi luokitella paketteja UID:n, cgroupin tai soketin avanneeseen prosessiin liittyvän säännön mukaan. Silloin root-liikenne ja käyttäjäliikenne lähtevät eri reititystaulukoista tai osuvat eri sääntöjoukkoihin, eikä mikään skannausmenetelmän kuri sovita niitä yhteen.

Tutki käytäntöä, älä oikeutta. Linuxissa nftables ilmaisee sen meta skuid:llä ja iptables omistajan täsmäytyksellä, ja kumpi tahansa voi lähettää yhden UID:n tunnelin läpi, kun toinen jatkaa fyysisen oletusreitin käyttöä.

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

Varmista koetin ennen tulosten vertaamista

Ennen johtopäätöksiä todista, mikä koetin ajettiin. Nmap nimeää tekniikan omassa tulosteessaan, ja --reason lisää todisteen jokaisen tilan taakse, ja juuri se osa kertoo, valmistuiko kättely todella.

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

Kaksi ajoa, jotka raportoivat saman tilan eri syistä, eivät ole ristiriita, ja kaksi ajoa, jotka raportoivat eri tilat samasta syystä, viittaavat reititykseen tai käytäntöön eivätkä skannaukseen. Pidä kohde, portti, nimiavaruus ja ajoitus identtisinä ja muuta sitten yhtä muuttujaa kerrallaan. Palvelun ajaminen rootina ei ole käytännön ristiriidan korjaus; korjaus on ilmaista aiottu käytäntö palvelun omistajan kautta.

Aiheeseen liittyvät artikkelit