Alături de ... SATAN

Bogdan Crainicu

SATAN (Security Analysis Tool for Auditing Networks) reprezintă un puternic pachet soft de analiză și control a sistemului de securitate instalat într-o rețea de calculatoare. Datele obținute prin examinarea unor servicii specifice ca NFS, NIS, finger, ftp, rexd etc. pot dezvălui potențialele deficiențe legate de securitatea sau gradul de vulnerabilitate ale sistemului: setări sau servicii de rețea configurate incorect, bug-uri în sistem sau în utilitarele de gestiune și administrare a rețelei. Utilizatorii pot examina și chestiona ulterior, cu ajutorul unui browser HTML, această bază de date, care îi va ajuta în luarea unor decizii corecte privind modul de abordare și implementare a nivelului de securitate în sistemul implicat.

Deși programul este adaptat, în principal, analizelor de securitate, pot fi obținute și informații suplimentare de interes: topologia rețelei, servicii de rețea active, tipul hardware-ului și al software-ului utilizat în rețea.

Încredere și ...neîncredere

Noțiunea de TRUST rezidă dintr-un important concept de securitate și corespunde situației în care un server distribuie o resursă proprie unui anumit client cu sau fără autorizație. După cum se știe, există mai multe căi prin care un calculator poate primi „încrederea” altui calculator (fișierele de tip .rhosts și hosts.equiv permit accesul cu verificarea parolei, fișierele exportate controlează accesul via NFS etc.). Dacă un host a obținut acces prin login de la un alt host, se poate spune că primul „se încrede” în ultimul. În cazul în care nu sunt folosite metode suplimentare de autentificare, iar un utilizator este conectat de pe un host compromis, aflat la distanță (remote host), atunci atacatorul poate fura parola utilizatorului legitim și poate pune în pericol sistemul.

Deși conceptul de TRUST este bine cunoscut de către majoritatea administratorilor de sistem (câți dintre ei nu au petrecut zile și nopți în fața calculatorului încercând să bareze abilele atacuri de tip IP spoofing sau hostname impersonation, iar în cele mai nefericite cazuri, să recupereze date grav deteriorate), pericolul „încrederii” și implicațiile practice ale întregului proces vor rămâne teme de actualitate în implementarea securității unui sistem informatic. Este greu de înțeles cum pot exista uneori legături foarte strânse între calculatoare aflate în topologii complet diferite, însă situațiile neplăcute apar întotdeauna și ele nu pot fi neglijate.

Configurare și mod de operare

SATAN conține un program țintă de achiziții date care utilizează comanda fping pentru a determina dacă un calculator sau un grup de calculatoare dintr-o subrețea este activ. Fiecare host este examinat printr-un set de teste configurabile care emit, în final, un fișier ce conține numele calculatorului, testul rulat și rezultatele găsite în urma sondării. Interfața utilizator este de tip HTML, oferind o modalitate de analiză și gestiune a informațiilor într-un mod coerent, astfel încât administratorul de rețea să le poată ușor rezuma și înțelege (figura „Program țintă, utilizând fping”).

Din nefericire, SATAN nu este portabil, însă rulează sub  un număr larg de sisteme de operare: AIX, BSD, IRIX, HP-UX, Linux, SunOS, SYSV-R4, Ultrix. Spațiul necesar pe hard disk este de aproximativ 25 MB, în afară de dimensiunea browser-ului HTML utilizat.

În timpul, și după compilare (e nevoie de un compilator C si de Perl5), SATAN creează și utilizează relativ puține fișiere, însă utilizatorul trebuie să se concentreze, în principal, asupra fișierului config/satan.cf ce controlează întregul mod de operare al programului. Atâta timp cât un număr limitat de opțiuni de configurare este gestionabil via interfața HTML, anumite variabile pot fi setate prin editarea manuală a acestui fisier.Config/satan.cf conține de fapt cod sursă perl, care este rulat în momentul inițializării programului. Să explicăm puțin opțiunile care apar si care trebuie înțelese:

• Nivelul de atac

 # Deafault attack level (0=light, 1=normal, 2=heavy) 
 $attack_level=0  

Se specifică tipul testului utilizat asupra unui host țintă.

• Testul corespunzător nivelului de atac - fiecare tip de test conține un set de programe utilizate în momentul probării unui sistem remote. Nu e însă necesar ca toate programele să ruleze, deși ele corespund unui anumit nivel de atac. Să considerăm, de exemplu, verificatorul de NFS inclus in pachet; nu există nici un motiv să fie rulat dacă pe sistemul aflat la distanță (remote) nu e activ nici proces legat de NFS; deci SATAN va lansa programul doar dacă descoperă existența NFS-ului pe host-ul țintă.

 #Probes by attack level 
    # 
    # ? Means conditional, controlled by rules.todo. * Matches anything 
    @light = ( 
     'dns.satan', 
     'rpc.satan', 
     'showmount.satan?', 
     ); 

Semnul „?” implică executare condiționată.

În exemplul de mai sus, de pe nivelul de atac light se vor lansa dns.satan și rpc.scan, iar showmount.satan, doar în cazul în care SATAN descoperă existența vreunui proces NFS.

• Fișierul status_file - păstrează tipul ultimului test rulat

 #status_file 
 $status_file = "status_file";  

• Timeout - anumite teste rămân „agățate” sau continuă să contacteze host-ul remote pentru o perioada lungă de timp. Pentru prevenirea posibililor timpi morți, există valoarea timeout, exprimată în secunde:

 #timeout values 
 $slow_timeout = 50; 
 $med_timeout = 30; 
 $fast_timeout = 10;  

Valoarea implicită este med_timeout.

Unele programe au nevoie uneori de o perioadă de rulare mai    mare. Astfel, se poate seta timeout-ul necesar testului în cauză:

%timeouts = ( 
 'nfs-chk' , $slow_timeout, 
 $heavy_tcp_scan, $slow_timeout, 
 );  

• Semnale timeout - semnale de stopare a proceselor active, al căror timeout a fost depășit.Valoarea implicita este „9” .

 # what signal we send to nuke things when they timeout: 
 $timeout_kill = 9;  

• Variabile de proximitate - reprezintă variabilele cele mai importante ale programului. Noțiunea de proximitate sau vecinătate se referă la distanța dintre host-ul pe care rulează un anumit test SATAN si cel care este supus analizei (host-ul țintă).

# Proximity variables; how far out do we attack 
# 
# How far out from the original target do we attack ? 
$max_proximity_level = 0;  

Valoarea implicită 0 forțează scanarea doar a primei ținte selectate.

# Attack level drops by this much each proximity level change 
$proximity_descent = 1;  

Această valoarea este scăzută din nivelul de atac curent.

# When we go below zero attack severity, do we stop (0) or go on (1)? 
$sub_zero_proximity = 0;  

Dacă nivelul de atac merge sub 0, se optează pentru oprirea sau continuarea testului.

# A question; do we attack subnets when we nuke a target? 
# 0 = no; 1 = primary target subnet 
$attack_proximate_subnets = 0  

Implicit, SATAN va examina doar o țintă la un moment dat. Dacă variabila $attack_proximate_subnets este setată pe 1, atunci toate țintele de pe o rețea secundară selectată vor fi scanate.

• Trusted sau ... untrusted

$untrusted_host = 0;  

SATAN presupune că programele sale sunt executate de pe un host de „încredere” care nu apare în fișierele de configurare rhosts, hosts.equiv sau de export NFS ale calculatoarelor analizate.

• Selecția site-urilor

SATAN poate sonda site-uri pe care nu intenționăm să le supunem analizelor. Variabila $only_attack_these reprezintă o listă a domeniilor și rețelelor ce se doresc integrate în mediul țintelor scanate. De exemplu, dacă se optează pentru „atacarea” doar a site-urilor comerciale:

$only_attack_these = "com";  

În mod similar, variabila $dont_at tack_these selectează domenii și rețele care nu vor fi „atacate” de SATAN.

$dont_attack_these = "192.220.53";  

Programul utilizează pentru un calculator numele întreg (host.nume_domeniu) și poate fixa un nume de host trunchiat. Variabila $dont_use_nslookup controlează utilizarea comenzii nslookup:

# Set to nonzero if nslookup does not work 
$dont_use_nslookup = 0;  

Înainte de verificarea unui host, SATAN așteaptă rezultatul unei comenzi ping. Dacă nu primește nici un răspuns, atunci testele ulterioare sunt anulate. Variabila $dont_use_ping specifică folosirea sau renunțarea la comanda inițială ping.

# Set to nonzero if ICMP does not work 
$dont_use_ping = 0;  

Alte grupuri de fișiere generate de SATAN ar fi:
• bin/*: programele principale ale pachetului;
• config/*: fișierele de configurare și setările implicite;
• html/*: fișiere html și programe perl utilizate la generarea paginilor pentru interfața utilizator;
• perl/*: module de cod perl utilizate de SATAN sau de instrumentele de achiziții date;
• results/database-name: baza de date a programului .Sunt trei tipuri de fișiere:
1. all-hosts - lista host-urilor găsite în timpul scanării;
2. facts - lista tuturor înregistrărilor realizate de programele *.satan;
3. todo - lista host-urilor și a testelor rulate într-un anumit moment.
• src/*: codul sursă al pachetului soft;
• rules/*: regulile folosite în evaluarea anumitor situații (cod perl); reprezintă o puternică facilitate a programului asupra căreia ar trebui să insistăm puțin. În general, fișierele din această categorie determină ce anume este periculos pentru sistem, ce elemente pot fi considerate sigure și fără risc ,ce servicii de rețea sunt active. Există șase fișiere:
• rules/facts -  reguli care implică colectarea unor informații suplimentare pe baza datelor existente;
• rules/hosttype - încearcă să recunoască tipul host-ului implicat într-o conexiune telnet/ftp/smtp;
• rules/drop - determină ce date colecționate ar trebui igorate;
• rules/services - clasifică host-urile după tipul serviciilor de rețea active;
• rules/todo - specifică testul ce ar trebui încercat ulterior;
• rules/trust - clasifică formele și legăturile bazate pe conceptul de „încredere” discutat înainte.

Înțelegerea rezultatelor

Rezultatele finale pot fi împărțite în trei categorii, fiecare cu diferențe fundamentale în modul de abordare și analiză:

1. vulnerabilitate - specificarea punctelor slabe ale rețelei. Există trei căi de evaluare:
• nivelul de periculozitate - toate testele generează un nivel-bază de periculozitate în ipoteza detectării unor probleme care vor fi ulterior sortate pornind de la acest nivel;
• tipul vulnerabilității;
• contorizarea host-urilor în funcție de gradul vulnerabilitate.

2. date despre un anumit host - cantitatea de informații obținută poate fi relativ mare (figura „Date despre un host”).Orice calculator cu posibile imperfecțiuni în sistemul de securitate va fi marcat cu un punct roșu. Trebuie menționat faptul că prezența unor firewall-uri, a filtrelor sau chiar a pachetului TCP wrapper poate oferi testelor SATAN o imagine diferită a structurii reale a rețelei. Un punct negru   în dreptul unui host indică absența problemelor, însă acest lucru nu implică securitate absolută; s-ar putea ca pe un alt nivel de scanare sau un alt test să ofere alte rezultate.

Mai precis, ce se poate analiza:
• tipul serviciilor de rețea active: anonymous FTP, WWW, etc. (sunt scanate porturile TCP și rezultatele comenzii rpcinfo)  (figura „Informații despre tipul serviciilor de rețea active”);
• tipul sistemului din punct de vedere hard (SGI, Sun, etc.) și al sistemului de operare;
• domeniul Internet al rețelei analizate;
• structura de subrețele, fiecare identificată printr-o adresă IP (figura „Identificarea adreselor IP”);
• numele calculatorului (hostname).

3. trust - posibilitatea urmăririi întregului complex de legături-trust existent: login la distanță, sisteme de fișiere distribuite, etc.

În final …

Programele SATAN trebuie mai întâi bine înțelese pentru a fi de un real ajutor administratorilor de rețea. Cei care l-au creat au urmărit rezolvarea unor probleme reale din mediul rețelelor TCP/IP: detectarea vulnerabilității sistemului, posibilitatea utilizării unor programe și a unor concepte deja cunoscute, culegerea unor informații specifice într-un mod simplu, care să nu aibă repercusiuni negative asupra sistemului testat. Și nu în ultimul rând, SATAN se dorește a fi cel mai bun pachet soft de investigare a securității rețelelor de calculatoare, fiind deschis oricăror dezvoltări și îmbunătățiri ulterioare.

Nu în ultimul rând: codul sursă poate fi „descărcat” free de pe Internet.


BYTE România - martie 1998


(C) Copyright Computer Press Agora