Ukratko: Odlazne veze poslužitelja provjeravate naredbama ss -tunap ili lsof -i, koje svaku vezu pridružuju procesu. Normalne su veze prema bazi podataka, poslužitelju e-pošte, poslužiteljima za ažuriranje i poznatim sučeljima. Veze PHP procesa ili procesa web-poslužitelja prema nepoznatim odredištima, neuobičajeni portovi i trajne veze bez povoda znakovi su upozorenja na daljinsko upravljanje ili odljev podataka. Trajno pomaže filtriranje izlaza koje dopušta samo potrebna odredišta.
Zašto pogled prema van toliko otkriva
Pri traženju provale većina gleda datoteke. No napadač sa svojim pristupom želi nešto postići: dohvatiti alate, primati naredbe, iznijeti podatke ili poslužitelj koristiti za spam ili napade na druge. Sve to traži veze prema van.
Web-poslužitelj sam od sebe uspostavlja samo nekoliko veza, a većina je predvidljiva: upituje bazu podataka, predaje poštu, poziva sučelja plaćanja ili dostave i dohvaća ažuriranja. Zato strane veze ovdje osobito upadaju u oči. Prema izvješćima koja su nam dostupna odlazne veze spadaju među opće znakove upozorenja nakon provale; potvrđenih Indicators of Compromise posebno za PHP2Shell nema. Daljnje znakove sažima članak Jesam li već kompromitiran?.
Popisati odlazne veze i pridružiti ih procesima
Sljedeće naredbe samo čitaju. Izvedite ih kao root, inače nedostaju podaci o procesima.
# Sve uspostavljene TCP veze s procesom
ss -tnp state established
# TCP i UDP uključujući usluge koje osluškuju
ss -tunap
# Veze po programu i korisniku, bez razrješavanja imena
lsof -i -n -P | grep -v LISTEN
# Samo veze procesa korisnika web-poslužitelja
lsof -i -n -P -u www-data 2>/dev/null
U ispisu pazite na tri stupca: proces, odredišnu adresu s portom i korisnika. Veza php-fpm prema bazi podataka na portu 3306 je normalna. Veza programa nepoznatog imena iz /tmp prema stranoj adresi na neuobičajenom portu nije. Pod kojim korisnikom PHP radi, ovisi o distribuciji i panelu.
Normalno ili sumnjivo? Razvrstavanje
| Opažanje | Prije normalno | Prije sumnjivo |
|---|---|---|
| Odredište | vlastita baza podataka, poslužitelj e-pošte, poznati API-ji, poslužitelji za ažuriranje | nepoznate adrese bez veze s aplikacijom |
| Proces | php-fpm, web-poslužitelj, usluge pošte i ažuriranja | nepoznati programi, procesi iz /tmp ili /dev/shm |
| Port | 443, 3306, 5432, 587 | neuobičajeni visoki portovi, portovi tipični za IRC |
| Trajanje | kratko, u skladu sa zahtjevima | trajno otvorena, i noću bez posjetitelja |
| Količina | mala i ujednačena | iznenadni skokovi u odlaznom volumenu podataka |
| Promet e-pošte | slanje preko predviđenog poslužitelja e-pošte | mnogo izravnih veza na port 25 |
Mnogo veza na portu 25 upućuje na slanje spama; za to postoji zaseban članak, Poslužitelj šalje spam.
Procijeniti nepoznato odredište
Strana adresa na popisu još nije dokaz. Prije odluke razjasnite kamo veza vodi i tko ju je uspostavio. I ti koraci ništa ne mijenjaju:
- Odrediti proces: Uzeti PID iz
ssi pomoćuls -l /proc/PID/exei naredbenog retka provjeriti koji program stoji iza. - Potražiti odredište: Pomoću
dig -x <IP>utvrditi naziv, a pomoćuwhois <IP>operatera mreže. - Uskladiti s aplikacijom: Pitajte razvojnog programera ili pružatelja usluge koristi li Vaša aplikacija tu uslugu.
- Provjeriti tijek: Zapisnici vatrozida i mreže pokazuju otkad veza postoji i koliko je podataka teklo.
- Osigurati rezultate: Ispise spremiti s vremenom prije nego što išta prekinete ili blokirate.
Računajte s višeznačnim rezultatima. Mnoge legitimne usluge rade kod velikih cloud i CDN pružatelja, čije adrese ne dopuštaju zaključak o klijentu. Obrnuto, i napadači koriste unajmljene cloud poslužitelje. Poznati operater mreže stoga nije ni otkaz uzbune ni dokaz; odlučuje odgovaraju li proces i svrha Vašoj aplikaciji.
Trenutna snimka naredbom ss pokazuje samo ono što je upravo otvoreno. Kratke veze koje se uspostavljaju u minutnom taktu vidite samo u zapisnicima. Zato su zapisnici vatrozida ili tokova za pitanje odljeva podataka često važniji od pogleda na sam poslužitelj.
Ako su podaci možda napustili Vaš poslužitelj i pogođeni su osobni podaci, može postojati obveza prijave prema GDPR-u, u pravilu u roku od 72 sata. Razjasnite to rano sa službenikom za zaštitu podataka; pozadinu donosi članak Obveza prijave prema GDPR-u u 72 sata. Ovo nije pravni savjet.
Ne zaboraviti DNS i kontejnere
Ne treba svaki odljev podataka vidljivu vezu prema stranoj adresi. Razrješavanja imena putem DNS-a idu prema resolveru Vašeg podatkovnog centra i u popisu naredbe ss jedva upadaju u oči. Napadači mogu podatke pakirati u duge poddomene naizgled slučajnog izgleda i tako ih iznositi putem DNS upita. Naznake daju zapisnici resolvera: neobično mnogo upita prema istoj stranoj domeni, vrlo dugi nazivi ili upiti u vrijeme kad nitko ne koristi web-stranicu.
Ako Vaše aplikacije rade u kontejnerima, host veze kontejnera često vidi samo kao promet mreže kontejnera. Tada provjerite u svakom kontejneru zasebno, ako su alati tamo dostupni, ili analizirajte veze na razini hosta i vatrozida.
# Veze unutar kontejnera (ako je ss sadržan u image-u)
docker exec <container> ss -tnp 2>/dev/null
# Na hostu: veze koje prati jezgra, ako je conntrack instaliran
sudo conntrack -L 2>/dev/null | head -50
Trajno ograničiti odlazni promet
Najučinkovitija prevencija je filtriranje izlaza: poslužitelj smije doseći samo odredišta koja doista treba, sve ostalo se blokira i bilježi. Napadačima je time znatno teže dohvaćati alate ili izvlačiti podatke, čak i ako mogu izvršavati kod.
Put do toga počinje popisom potrebnih odredišta koji izvodite iz gore prikupljenih veza. Zatim slijedi faza u kojoj se blokirane veze samo bilježe, prije nego se blokada aktivira. Usluge plaćanja, poslužitelji za ažuriranje i sučelja s promjenjivim adresama traže pritom osobitu pažnju. Kako se vatrozid za web-poslužitelje gradi u cjelini, opisuje članak Vatrozid za web-poslužitelje: otvoriti samo potrebne portove.
Kako PHP SOS konkretno pomaže?
- Provjeriti veze: Sve aktivne veze pridružujemo procesima i svrhama te procjenjujemo nepoznata odredišta.
- Procijeniti odljev podataka: Analiziramo zapisnike vatrozida i mreže i razjašnjavamo jesu li i kada podaci preneseni.
- Ograničiti izlaz: S Vama izrađujemo popis dopuštenih odredišta i postupno uvodimo filtriranje izlaza.
- Trajno nadzirati: Uz sigurnosni nadzor javljamo nove ili neobične veze.
Česta pitanja
Koje su odlazne veze kod web-poslužitelja normalne?
Tipične su veze prema bazi podataka, poslužitelju e-pošte, uslugama plaćanja i dostave, poslužiteljima za ažuriranje i poznatim sučeljima aplikacije. Sve što se ne može pridružiti nekoj od tih svrha zaslužuje pomniji pogled.
Kako vidim koji je proces uspostavio vezu?
Naredbom ss -tunap ili lsof -i -n -P kao root. Obje uz svaku vezu prikazuju ID procesa i naziv programa. Tako prepoznajete potječe li veza od PHP-a, web-poslužitelja ili stranog programa.
Znači li nepoznata veza da su podaci iscurili?
Nužno ne. No to je naznaka koju treba razjasniti. Jesu li i koji podaci preneseni, često se može odgovoriti samo zapisnicima vatrozida ili mreže. Ako su pogođeni osobni podaci, mogu postojati obveze prijave.
Smije li web-poslužitelj uopće imati odlazne veze?
Samo prema odredištima koja mu trebaju. Filtriranje izlaza koje blokira sve ostalo napadačima znatno otežava dohvaćanje alata i odljev podataka. No mora se pažljivo testirati.