Hackers trackdown
Sunt la moda serverele web sharuite… si e normal. Cine vrea sa dea 150 Euro/luna ca sa inchirieze un server intr-un datacenter pentru o firma mica ? Mai bine isi pune site-ul pe un server web sharuit.
Ce inseamna server web in regim de sharing ? E un server inchiriat de o firma intermediara care ofera conturi de web hosting pe serverul respectiv. In felul asta se ajunge la preturi de genu’ 1$/luna pentru un cont de hosting mic (50MB). Oferta e
tentanta. Problema apare in alt loc. Un cont de hosting serios trebuie sa aiba si suport de PHP si MySQL, nu ? Odata ce ai acces la PHP se pot face multe gainarii, inclusiv rularea scripturilor de genul c99shell.
Presupunem ca toti clientii sunt de buna credinta dar nu toti se pricep sa securizeze o pagina asa ca se intampla ca altii sa le injecteze o pagina c99shell in cont din care pot rula un exploit sau pot accesa baza de date etc. Ce putem face ? Sunt softuri comerciale care se ocupa de “urmarirea” scripturilor dar nimanui nu-i convine sa dea o groaza de bani pe asa ceva cand poate sa gaseasca singur “infractorul” doar cu comenzile standard care le pune la dispozitie orice Linux/BSD.
Bun, sa o luam cu inceputul. Care sunt pasii care trebuie urmati ca sa prindem infractorul ?
1. Identificarea procesului cu probleme
2. Gasirea persoanei care a apelat pagina respectiva
3. Urmarirea procesului
4. Eliminarea procesului si securizarea zonei de acces
1. Identificarea procesului cu probleme
Cum ne dam seama daca am fost hackeriti ? E simplu. Apache porneste mai multe thread-uri (fire de executie) cate unul pentru fiecare cerere. S-ar putea ca la un moment dat cineva sa incerce sa ruleze un c99shell sau orice altceva. Ca sa il gasim e suficient sa folosim comanda ps. Cum ? Simplu: “ps auxf” ne va arata toate procesele care ruleaza. Fiecare linie din rezultat o filtram folosind grep in felul urmator: “ps auxf | grep nobody”. Comanda asta ia rezultatul returnat de ps si afiseaza liniile care contin “nobody” (adica userul pe care ruleaza apache de obicei). In rezultatul afisat cautam ceva iesit din comun. Adica, cautam toate procesele rulate de nobody si care au fost pornite cu “bash” sau “pstree” sau orice alta comanda Linux care normal nu e nevoie sa fie apelata de un site.
Un exemplu ar fi urmatorul:
nobody 1830 0.0 0.9 28000 15280 ? S 17:50 0:00 \_ /bin/sh
In exemplul asta puteti vedea ca nobody ruleaza un shell. E clar ca nu e un script care ruleaza de capul lui ci un user care stie ce face ( sau un copil care ruleaza comenzile primite de la vecinu’ ). Ce mai vedem interesant aici ? Vedem PID-ul sub care ruleaza procesul. PID-ul este important pentru ca trebuie sa stim cine si ce face. De asemenea putem vedea de cat timp
ruleaza procesul respectiv (in cazul nostru 0:00 - tocmai a fost pornit).
2. Gasirea persoanei care a apelat pagina respectiva
Am gasit un proces cu probleme. What’s next ? Trebuie sa aflam cat mai multe date despre procesul respectiv.
De exemplu, vedem ca procesul respectiv ruleaza “bash” sau “pstree”. Ce putem face ? Cautam toate paginile care contin “bash” sau “pstree” sau ce ne intereseaza pe noi. Pentru asta folosim find si grep in felul urmator:
#cd /home
#find . -name “*.php” -exec grep -q “bash” {}\; -print
Comanda de mai sus cauta toate fisierele php care contin “bash”. Odata ce am gasit fisierele avem cam tot ce ne trebuie. Daca fisierul care contine “bash” e fisier_hackerit.php studiem log-urile din apache. Intram in directorul in care sunt pastrate logurile si executam comanda:
#cat access.log | grep fisier_hackerit.php
Ca rezultat vom vedea IP-ul persoanei care a accesat pagina respectiva, deci IP-ul atacatorului. Urmatorul pas ar fi sa citim din nou fisierul access.log sa vedem ce alte pagini au mai fost incarcate ca urmare a cererii IP-ului respectiv. Asta se face exct ca mai sus:
#cat access.log | grep IP-ul_atacatorului
Avem IP-ul, tot ce avem de facut mai departe e sa intram pe dnsstuff.com si sa vedem tara si eventual orasul din care a intrat pe site.
3. Urmarirea procesului
Bun… am gasit un proces cu probleme, am gasit PID-ul si stim ca tocmai a fost pornit. Ce putem face ? Urmatorul pas ar fi sa aflam cui ii apartine initiativa. Cum facem asta ? Folosind strace. strace e un program care primeste un PID (Process ID) si urmareste toate apelurile de sistem care le executa procesul respectiv. Cu ce ne ajuta asta ? Urmarim tot ce face programul…
daca apeleaza un alt server sau daca incearca sa scrie ceva intr-un fisier cautam detalii. Sa iau un caz simplu, strace imi poate arata ca PID-ul de mai sus incearca sa scrie ceva in /home/user_hackerit/public_html/index.php ceva. Din asta observ ca user_hackerit e victima si PID-ul respectiv sigur are o legatura cu hackingul. De asemenea tot aici putem vedea daca ruleaza un program care incearca sa se conecteze undeva (un bot pentru IRC de exemplu).
4. Eliminarea procesului si securizarea zonei de acces
Bun, avem procesul, stim de unde a fost lansat, tot ce avem de facut e sa eliminam vulnerabilitatea. Cateva idei ca sa o eliminam ar fi urmatoarele:
1. Blocam din iptables/ipfw/pf sau ce filtru folositi IP-ul persoanei respective
2. Stergem scriptul cu problema si alte fisiere care ar putea sa fie cu probleme (poate si-a copiat un exploit sau ceva).
3. Incercam sa ne dam seama cum a ajuns sa aiba acces la server, de ce vulnerabilitate a site-ului s-a folosit
3.1 Verificam logurile sa vedem daca nu a intrat pe ssh, telnet sau alt serviciu care ruleaza
3.2 Daca nu a intrat prin alte servicii, probabil s-a folosit de PHP
3.2.1 Verificam permisiunile sa nu existe nici un director cu permisiuni mai mari de 755 si nici un fisier cu permisiuni mai mari de 644
3.2.2 Verificam paginile php din directorul userului hackerit si vedem care sunt vulnerabile la “code injection” sau alte chestii de genul asta.
Cam atat. Nu e un tutorial foarte detaliat dar sunt convins ca am dat suficiente informatii ca sa va descurcati in cazul in care sunteti atacat. Pentru mai multe informatii postati aici nelamuririle (sau completarile - ca mai sunt multe de facut).
Bafta !
P.S.
Sper sa nu fiti niciodata nevoiti sa cititi in disperare tutorialul
Autor: Agkelos