Avoimien porttien lista on lista reiteistä palvelimelle. Kaikki muu — palomuurit, WAF, tunkeutumisen havaitseminen — on sen päälle rakennettua. Siksi tarkistus ”mikä täällä kuuntelee” on jokaisen auditoinnin ensimmäinen, ja juuri se antaa useimmiten epämiellyttävän tuloksen: puolet löydetystä ei ole sinun avaamaasi vaan jonkin paketin asennusskriptin.
Luetaan tuloste
sudo ss -tulpn
Valitsimet: t — TCP, u — UDP, l — vain kuuntelevat, p — prosessi, n — ei nimenselvitystä. Ilman sudo-komentoa prosessisarake jää tyhjäksi ja koko harjoitus menettää merkityksensä.
Katsottava sarake on Local Address:Port, ja ero siinä on ratkaiseva:
127.0.0.1:3306— palvelu on tavoitettavissa vain koneelta itseltään. Se on hyvä;0.0.0.0:3306— kaikista IPv4-osoitteista, siis internetistä. Tämä pitää tarkistaa;[::]:3306— sama IPv6:lle. Erillinen rivi, joka unohtuu säännöllisesti;203.0.113.25:443— tietyssä osoitteessa, yleensä tarkoituksella.
Sitten esität yhden kysymyksen jokaisen 0.0.0.0- tai [::]-rivin kohdalla: pitääkö ulkopuolisen päästä tänne? Porteille 80 ja 443 vastaus on kyllä. Lähes kaikelle muulle se on ei.
Tavalliset löydöt
Redis, portti 6379. Vaarallisin mahdollinen rivi. Oletuksena Redis ei vaadi salasanaa, ja sen komennoilla voi kirjoittaa tiedoston levylle — siis vieraan avaimen tiedostoon authorized_keys. Redisin ilmestymisen julkiseen osoitteeseen ja sen hyödyntämisen välillä kuluu tunteja, toisinaan vähemmän. Tarkista bind 127.0.0.1 ja protected-mode yes asetuksista.
Memcached, 11211/UDP. Vaikka sisällä ei olisi mitään arvokasta, palvelimestasi tulee vahvistin toisten hyökkäyksiin — ja valitukset tulevat palveluntarjoajalta.
MySQL ja PostgreSQL, 3306 ja 5432. Salasana on, mutta arvailu jatkuu keskeytyksettä, ja tietokantojen versiot päivittyvät harvemmin kuin pitäisi. Ulospäin niitä ei tarvita lähes koskaan: sovellus on samalla koneella, ja työhön riittää SSH-tunneli.
Elasticsearch 9200, MongoDB 27017. Historiallisesti ilman oletustodennusta. Näiden palveluiden julkiset ilmentymät ovat jatkuva vuotouutisten lähde.
Dockerin API, 2375. Avoin Dockerin ohjausportti on root koneella täysin ilman salasanaa. Se ilmestyy yleensä Dockerin etäkäytön kokeilujen jälkeen.
Hallintapaneelit ja phpMyAdmin omissa porteissaan: 8080, 8083, 10000. Ei niin, ettei niitä koskaan saisi avata, mutta juuri ne vetävät puoleensa yritysten päävirran.
Korjaa palvelussa, ei palomuurissa
Houkutus sulkea jokainen löytö UFW-säännöllä on ymmärrettävä, mutta se on toinen linja eikä ensimmäinen. Sääntö voidaan poistaa vahingossa, palomuuri kytkeä hetkeksi pois vianetsinnässä, ja Docker julkaisee portteja täysin UFW:n ohi. Sidonnan asettaminen palvelun omiin asetuksiin kestää tämän kaiken:
- MySQL/MariaDB —
bind-address = 127.0.0.1; - PostgreSQL —
listen_addresses = 'localhost'; - Redis —
bind 127.0.0.1 ::1; - Docker Compose — julkaisu muodossa
"127.0.0.1:5432:5432".
Palomuuri lisätään päälle vakuutuksena, ei sen sijaan.
Löydä prosessi, kun et tiedä mikä se on
ss näyttää nimen ja pid:n. Sitten:
sudo systemctl status <pid>
sudo lsof -i :8080
Ensimmäinen komento nimeää systemd-yksikön, johon prosessi kuuluu — se riittää yleensä ymmärtämään, mikä se on ja tarvitaanko sitä. Tuntematon prosessi, joka kuuntelee korkeaa porttia ja on käynnistetty järjestelmähakemistojen ulkopuolelta — esimerkiksi hakemistosta /tmp tai /dev/shm — ei ole enää asetuskysymys vaan syy omaan tutkintaan.
Tarkistus ulkoa on pakollinen
ss vastaa kysymykseen ”mikä kuuntelee”, ei kysymykseen ”mihin pääsee”. Näiden kahden välissä ovat palomuuri, NAT ja palveluntarjoajan säännöt. Ainoan rehellisen vastauksen antaa skannaus toiselta koneelta:
nmap -Pn -p- 203.0.113.25
nmap -Pn -p- -6 2001:db8::1
Älä ohita toista komentoa: lähes jokaisella VPS:llä on IPv6-osoite, sen säännöt kirjoitetaan erikseen, ja palvelu kuuntelee molempia protokollaversioita yhtä aikaa.
Tämä ei ole kertatarkistus
Avoimien porttien lista muuttuu itsestään. Asensit paketin — se toi mukanaan palvelun ja avasi portin. Päivitit paneelin — se palautti oletusarvon. Käynnistit kontin — se julkaisi portin palomuurin ohi. Kertatarkistus vastaa tämän päivän tilanteesta eikä sen enempää.
Arvo ei ole itse listassa vaan sen muutoksissa: uusi portti, jota eilen ei ollut, on lyhyt ja hyvin puhutteleva signaali. Juuri niin listaa kannattaa katsoa — tilannekuvana, jolla on historia, ei muistista toistettuna ss-tulosteena. Alla oleva esittelysivu näyttää tarkalleen tämän.