Caut vulnerabilitatea de securitate (docker)

Salut,
Am un VM pe care am pus un docker-compose care ridica mai multe containere printre care si postgres. Toata masina o folosesc pentru niste teste de QA. Deci nu am date sensibile si pot sa creez alta.
M-am hackuit. Astea inseamna ca in containerul de postgre mi-au sters db-ul care era gol si mi-au creat ei o alta baza de date numita “readme_to_recover” unde au pus 2 mesaje prin care sa le trimit bitcoini.
Acum caut gaura de securitate.
La vm ma conectez cu un ssh-key.
Containerul de postgres are o parola stupida care se gaseste in foarte multe tutoriale pe net ,dar portul nu este expus.
Ceva idei despre cum as putea sa gasesc cum au ajuns la DB-ul meu.

Am gasit problema.
Portul de DB era expus si parola e prea usoara.
Solutia activez firewallul si il activez si la nivel de vm.

Ce a facut atacatorul a fost sa scaneze porturile deschise si apoi a facut brut force.
Ce trebuie sa nu mai fac eu este sa:

  • ma asigur ca mereu am firewallul activat si probabil sa nu expun mai mult de ssh, http, https
  • sa nu mai folosesc parole stupide gen (admin:admin|password|…)
  • toate parolele sa aiba cel putin 16 caractere random

Firewall-ul care ruleaza pe VM-ul unde e instalat Docker nu se prea impaca cu acesta. Pentru ca Docker rescrie regulile de rutare si in plus de asta, traficul catre Docker este pe chain-ul FORWARD, nu pe INPUT. Cea mai simpla varianta este sa ai un firewall inaintea VM-ului (providerii de cloud iti ofera deobicei posibilitatea sa creezi diferite filtre direct din interfetele lor web). Dar oricum ar trebui sa fii atent ce porturi expui public.

o alta masura de securitate ar fi sa imparti front si back in retele diferite (vezi docker networks).
ex: pui masina cu db in reteaua “backend” si pui masina cu phmyadmin in ambele retele: “frontend” si “backend”.
db o sa aiba portul 3306 expus doar in “backend” (fara forward catre exterior), iar phpmyadmin se conecteaza in retea la db, dar expune public portul 80 din reteaua “frontend”.

nu inlocuieste celelalte masuri de securitate, dar izolarea asta adauga ceva protectie pentru backend.

eventual poti incerca portainer sa vezi mai bine ce retele / volume / containere / etc ai active…
si un nginx reverse proxy manager pentru usurinta cu care poti adaugl ssl.

Un pas mai departe ar fi sa vezi vulnerabilitatile applicatiilor din Docker. Poti folosi Docker Scout sau daca nu vrei ceva ce tine neaparat de Docker (sau chiar sa vezi vulnerabilitatile de Docker), inveti ce e ala un SBOM (eu folosesc CycloneDX) si folosesti Dependency Track.

3 Likes

Nu va pacaliti cu ufw. In sensul ca docker e suficient de destept ca sa scrie direct in iptables (iptables -L in consola si intelegi ce zic).
Cica problema cea mare este folositea -p 3000:3000 care il face pe socker sa modifice iptables. Solutia este sa folosesti inteligent docker network.