Datahorses

Otvorené databázové porty: MySQL, PostgreSQL, MongoDB, Redis a Elasticsearch

Autor: · · 4 min čítania

Databázový port je otvorený, keď sa k nemu môže pripojiť ktokoľvek na internete. Vaša aplikácia sa k databáze dostať potrebuje, náhodný počítač v inej krajine nie. Napriek tomu stačí jediné pravidlo firewallu, zmenený riadok konfigurácie alebo predvolené nastavenie v cloude a MySQL, PostgreSQL, MongoDB, Redis či Elasticsearch začnú odpovedať celému internetu.

Otvorený port ešte neznamená únik údajov. Ak je prihlasovanie dobre zabezpečené a softvér aktuálny, útočník musí prekonať aj tie. Otvorený port však znamená, že databázu môže ktokoľvek skúmať, skúšať na nej heslá a testovať známe zraniteľnosti. Keď ho zatvoríte, celý tento druh rizika zmizne.

V článku nájdete predvolené porty, postup, ako ich skontrolovať zvonku, a návod, ako ich správne zatvoriť.

Predvolené porty, ktoré by ste mali poznať

Toto sú predvolené porty podľa dokumentácie jednotlivých výrobcov:

Služby môžu bežať aj na iných portoch, preto tento zoznam berte ako východisko, nie ako úplnú kontrolu.

Ako sa databázy dostanú na internet

Väčšina týchto produktov je dnes v predvolenom nastavení bezpečnejšia než kedysi:

Databáza sa preto na internet zvyčajne dostane zámernou zmenou, ktorá mala byť len dočasná:

  • niekto nastavil bind-address = 0.0.0.0, listen_addresses = '*' alebo bindIpAll, aby sa vývojár mohol pripojiť z domu,
  • niekto vypol chránený režim alebo zabezpečenie, „aby to fungovalo“,
  • bezpečnostná skupina v cloude alebo pravidlo firewallu povoľuje port z 0.0.0.0/0,
  • Docker s -p 6379:6379 zverejní port na všetkých rozhraniach hostiteľa,
  • starý testovací alebo staging server s vlastnou databázou nikto nevypol.

Dokumentácia Redisu hovorí o riziku priamo: Redis je navrhnutý pre dôveryhodných klientov v dôveryhodnom prostredí a vystavená inštancia môže prísť o všetky dáta jediným príkazom FLUSHALL.

Ako to skontrolovať zvonku

Kontrola musí bežať mimo vašej siete, inak otestujete len internú cestu. Použite počítač na inom pripojení (virtuálny server v cloude, hotspot z telefónu) a testujte len IP adresy, ktoré vlastníte:

for port in 3306 5432 27017 6379 9200 9300; do
  nc -z -w 3 203.0.113.10 $port && echo "$port open" || echo "$port closed"
done

Priamo na serveri zistíte, na akých adresách jednotlivé služby počúvajú:

sudo ss -tlnp | grep -E ':(3306|5432|27017|6379|9200|9300)\b'

Chcete vidieť 127.0.0.1:5432 alebo súkromnú adresu. 0.0.0.0:5432 alebo [::]:5432 znamená, že služba počúva na všetkých rozhraniach a medzi ňou a internetom stojí už len firewall.

Otvorené porty každej IP adresy na internete si indexujú aj internetové skenery. Ak chcete rýchlo vidieť, čo zaznamenali pri niektorej z vašich adries, Shodan ponúka jednoduché vyhľadávanie na https://internetdb.shodan.io/<your-ip>.

Ako port správne zatvoriť

Zatvárajte na 2 úrovniach, aby jediná chyba databázu znova neotvorila do internetu:

  1. Nechajte službu počúvať len na súkromných rozhraniach. bind-address = 127.0.0.1 (MySQL), listen_addresses = 'localhost' alebo súkromná IP (PostgreSQL), net.bindIp (MongoDB), bind 127.0.0.1 s protected-mode yes (Redis), network.host na súkromnej adrese (Elasticsearch).
  2. Obmedzte prístup na úrovni siete. Firewall alebo bezpečnostná skupina v cloude by mala povoliť databázový port len z vašich aplikačných serverov.
  3. Vzdialený prístup cez tunel. Vývojári sa pripájajú cez tunely SSH alebo VPN, nikdy cez otvorený port.
  4. Vyžadujte overovanie všade, aj vo vnútorných sieťach: používatelia s minimálnymi oprávneniami, dlhé heslá a TLS pre spojenia, ktoré vychádzajú mimo daného servera.
  5. Udržiavajte softvér aktuálny, aby port, ak ho niekedy omylom otvoríte, aspoň nebežal na verzii so známymi zraniteľnosťami.

Ak bola databáza vystavená so slabým alebo žiadnym overovaním, počítajte s tým, že jej dáta mohol niekto skopírovať: zmeňte prístupové údaje, prejdite logy a zvážte, či vám nevznikla oznamovacia povinnosť.

Krátky kontrolný zoznam

  • Spíšte všetky IP adresy, ktoré vaša firma na internete používa, vrátane starých serverov.
  • Otestujte bežné databázové porty zvonku.
  • Overte, že každá databáza počúva len na localhost alebo na súkromnej adrese.
  • Databázové porty povoľte vo firewalle len z aplikačných serverov.
  • Kontrolu zopakujte po každej migrácii, novom serveri alebo zmene v Dockeri.

Otvorené služby sa zriedka vyskytujú osamote. Často bežia na tých istých zabudnutých staging serveroch, z ktorých unikajú aj súbory .env a zálohy.

Ako pomáha Datahorses

Datahorses stráži vašu firmu každý deň zvonku. Ukazuje, ktoré služby na vašich IP adresách vidí útočník, vrátane databázových portov a vzdialeného prístupu ako RDP či SSH, aj známe zraniteľnosti verzií, ktoré tieto služby prezrádzajú. Do vašich systémov nevstupujeme a nepotrebujeme žiadne prístupy. Každé zistenie príde s presnými krokmi pre vášho vývojára, ako opisujeme v časti čo sa stane, keď niečo nájdeme. Ako taká správa vyzerá, uvidíte v ukážkovom dashboarde.

Ďalšie články

Všetky články