Laborator 11. Securitatea Rețelelor Locale

Cunoștințe și abilități ce vor fi dobândite

  • Descoperirea de informații despre o anumită rețea, entitate
  • Folosirea utilitarelor în linia de comandă în Linux (whois, nmap, wireshark)
  • Descoperirea vulnerabilităților
  • Înțelegerea tipului de atac MiTM (Man in the Middle) folosind ARP spoofing și DNS spoofing

Cheat sheet

Pregătire infrastructură de laborator

  • Schimbati utilizatorul curent ca root folosind comanda
     student@host:~$ sudo su
  • Pentru a pregăti configurația de laborator, pe mașina virtuală (stația host) folosiți comenzile următoare din contul utilizatorului root de pe stația host (puteți da copy/paste la comenzi în terminal):
    root@host:~# update_lab --force
    root@host:~# start_lab lab11
  • Deschideți trei noi tab-uri în terminal (folosiți combinația de taste Ctrl+Shift+t), și conectați-vă, din nou, la mașina virtuală folosind comanda ssh de mai sus.
  • De pe cele trei noi tab-uri, conectați-vă la cele trei containere (red, green și blue).
  • Pentru o conectare mai usoara puteti folosi aliasul go (ex. go red)

În mod implicit folosiți contul root pentru conectare pe toate stațiile. Aveți nevoie de drepturi privilegiate pentru configurare. Folosiți contul student doar unde vi se cere explicit.

Exerciții

00. Completare formular de feedback

Vă invităm să evaluați activitatea echipei de RL și să precizați punctele tari și punctele slabe și sugestiile voastre de îmbunătățire a materiei. Feedback-ul vostru este foarte important pentru noi să creștem calitatea materiei în anii următori și să îmbunătățim materiile pe care le veți face în continuare.

Găsiți formularul de feedback în partea dreaptă a paginii principale de RL de pe curs.pub.ro într-un frame numit “FEEDBACK”.

Vă mulțumim!

01. [10p] Aflare adresă IP publică

Pentru început, vrem să aflăm adresa IP publică cu ajutorul căreia ieșim în internet de pe mașina virtuală. Sistemul de pe care lucrați în cadrul acestui laborator se află în spatele unui rețele cloud private și poate accesa internetul datorită unei configurații NAT (Network Address Translation) și are un IP privat alocat de controller-ul de rețea cloud. Cum aflăm adresa noastră publică ?

Reamintiți-vă care sunt clasele de adrese IP private și care sunt cele pentru adrese IP publice.

02. [10p] Aflare informații despre adresa IP publică

Mai departe vrem să aflăm din ce subnet face parte adresa publică, cine se ocupă de aceasta, cărei organizații ii aparține și cărei țări a fost alocată.

Whois este un protocol cerere răspuns care este folosit pentru a interoga informații despre resurse din Internet precum: numele de domeniu, subnet-uri de adrese IP sau sistemul autonom (autonomous system) din care face parte. Vom folosi utilitarul whois pentru a afla acest informații despre adresa IP descoperită la exercițiul anterior:

root@host: whois <ip_ex_1>

Ce informații putem observa în output-ul obținut în urma rulării acestei comenzi ? Care este subnet-ul din care face parte adresa noastră publică ?

03. [10p] Descoperire adrese IP online

Procesul de scanare a rețelelor, în afara spațiului de adrese menționat în cadrul laboratorului, poate fi semnalat ca atac cibernetic de autoritățile abilitate și poate cădea sub incidența legii, în situații particulare. Folosiți astfel de unelte cu precauție.

Vrem să vedem ce adrese IP sunt online pentru ca ulterior să analizăm ce servicii rulează pe acestea. Din motive legale, nu putem realiza o scanare activa cu nmap in cadrul retelelor ce tin de domeniul pub.ro. In consecinta, strict in cadrul acestui exercitiu, vom scana subnetul din care face parte masina voastra virtuala de pe OpenStack.

In general, nu vrem să stăm foarte mult timp pentru a scana un subnet cu foarte multe adrese IP (in cazul nostru subnet-ul are masca /16) astfel încât la acest exercițiu vom scana doar primele 4094 adrese IP. Ce mască vom utiliza? Pentru a realiza acest exercițiu vom folosi utilitarul nmap.

Căutați în manual după Ping Scan.

Puteți găsi aici un Nmap Cheat Sheet având informații utile legate de nmap.

Redirectionati output-ul într-un fișier sau folosiți less.

Scanarea va dura aproximativ un minut.

04. [10p] Descoperirea porturilor TCP deschise

Mai departe, ne propunem să aflăm ce porturi sunt deschise pe anumite servere pentru a vedea serviciile ce rulează și versiunile acestora ce pot avea vulnerabilități.

În cadrul acestui exercitiu (precum si a exercitiilor urmatoare), vom folosi urmatoarele host-uri:

  • hermes.codacloud.net
  • midgard.codacloud.net

Scanați aceste adrese doar pe conexiuni TCP, utilizând porturile următoare: 21, 22, 23, 25, 53, 80, 138, 443, 8000 și 8080 (am ales aceste porturi întrucât sunt cele mai uzuale porturi pentru expunerea serviciilor/aplicațiilor în rețea).

Veți observa porturi ce se află în starea open, closed, filtered (port filtrat de un firewall) și alte tipuri pe care le puteți găsi descrise aici.

05. [10p] Descoperire porturi UDP deschise

De asemenea ne interesează și porturile UDP expuse, nu doar cele TCP.

Scanați aceste adrese pe UDP pe porturile 53, 123, 139, 161, 444, 500, 4567, 5353, 45320, 51413 și 60202.

06. [10p] Determinare versiuni aplicații descoperite

Pe lângă porturile expuse, descoperite anterior, am dori să aflăm și versiunile aplicațiilor și serviciilor ce rulează pe acele porturi.

Acestea sunt foarte importante când vine vorba de securitate, pentru că anumite vulnerabilități se găsesc doar pe unele versiuni.

Dorim să determinăm versiunile serviciilor ce rulează peste protocoalele TCP și UDP, întâlnite la exercițiile anterioare.

Căutați în manual după Version detection.

Procesul de detectare de versiuni îngreunează scanarea. Astfel, recomandăm folosirea parametrului de timing template cu valoarea maximă 5 (-T5). Acesta ne spune ca scanarea va fi foarte agresivă cu ținta (default-ul este -T3 normal mode).

Folosind această valoarea (insane mode), se pot depista mult mai ușor sistemele de securitate implementate în infrastructura țintă. Tot pentru a economisi timp, putem folosi parametrul -n pentru a nu face rezolvare de DNS.

Pentru a fi mai greu detectabili de către sistemele de securitate, este recomandat să se evite trimiterea pachetelor de ICMP (fără ping) folosind opțiunea -Pn

Pentru ca utilitarul nmap să ofere mai multe informații despre ceea ce a scanat, puteți utiliza noțiunea de verbosity.

Mai exact, puteți crește nivelul de informații afișate prin adăugarea parametrului -v. Puteți, de asemenea, crește nivelul de abundență a informației prin utilizarea unui număr mai mare de v-uri.

07. [10p] Scanare porturi frecvent utilizate

În general, se scanează toate cele 65535 de porturi, deoarece pot exista anumite servicii obscure ce rulează pe porturi cu valori mari, nestandard, care pot prezenta vulnerabilități.

Pentru a micșora timpul de rulare, există posibilitatea de a scana un anumit număr de porturi ce sunt asociate celor mai folosite servicii. Scanați primele 100 de astfel de porturi TCP pe serverul hermes.codacloud.net.

Căutați în manual după –top-ports (sunt porturile pe care le găsim listate în fișierul /etc/services)

08. [10p] Detecție sistem de operare

Putem folosi nmap și pentru a detecta sistemul de operare ce rulează pe un anumit server.

În outputul oferit veți observa mai multe variante posibile. Cele cu un procentaj mai mare sunt, în general, mai aproape de adevăr. În general, nmap te va informa dacă sistemul de operare e Linux, Windows sau MacOS, dar există situații în care va fi capabil să menționeze atât distribuția, cât și versiunea acesteia. Scanați adresa IP asociată domeniului hermes.codacloud.net.

Căutați în manual după Enable OS detection și Guess OS.

Nmap nu oferă întotdeauna informații relevante și, astfel, pot apărea rezultate false positive.

09. [10p] Descoperire vulnerabilități

În procesele ce implică analiza securității unei infrastructuri se folosesc tool-uri de descoperire a vulnerabilităților, precum: Nessus, OpenVAS, Nexpose, etc. La acest laborator nu vom folosit un tool anume, ci vom căuta vulnerabilități pe anumite platforme cunoscute.

În urma rezolvării exercițiului 7 ați obținut pentru serverul hermes.codacloud.net o listă de aplicații și versiunile lor ce rulează peste TCP.

Căutați pe platforma https://www.cvedetails.com/ vulnerabilități pentru aplicațiile găsite și versiunile lor, incluzând și patch number. Găsiți-le pe cele mai importante și discutați cu asistentul și colegii despre ele.

Observați formatul vulnerabilităților: CVE-2017-15710 (prefixul CVE, anul și indicele vulnerabilității din anul respectiv). Fiecare dintre acestea are un anumit scor în funcție de cât de mare este impactul pe care îl poate avea asupra serviciului respectiv:

  • none pentru 0.0
  • low între 0.1 și 3.9
  • medium între 4.0 și 6.9
  • high între 7.0 și 8.9
  • critical între 9.0 și 10.0

De asemenea se pot găsi informații despre CVE-uri și pe https://nvd.nist.gov/ sau https://cve.mitre.org/.

În urma determinării CVE-urilor, începe procesul de căutare de exploit-uri fie pe diverse site-uri (exemplu: https://www.exploit-db.com), fie utilizând Metasploit ce conține o serie de astfel de exploit-uri. Un exploit este o secvență de cod, un set de comenzi sau o succesiune de date ce profită de o defecțiune sau de o vulnerabilitate în scopul de a determina un comportament nedorit sau neprevăzut al software-ului, al hardware-ului de pe un calculator sau de pe alt dispozitiv electronic.

  1. Ce informații ați obținut pentru porturile 22 si 80?
  2. Ce fel de exploit-uri ați găsit pentru serviciile de mai sus?

10. [10p] Rulare Denial of Service pe un server Web

La acest exercițiu ne propunem să provocăm un comportament distructiv pe un anumit serviciu. Astfel vom realiza un Denial of Service asupra unui server web. Pe red există un server web (apache2) deja instalat. Verificați dacă acesta este pornit.

root@red:~# /etc/init.d/apache2 status  # Verificați că serverul web este pornit

Pe sisteme aveți instalat un text web browser. Dați comanda elinks și accesați adresa http://192.168.1.2/. Ar trebui să obțineți pagina default a serverului web Apache2 Ubuntu.

În continuare vom folosit un utilitar de Denial of Service numit slowloris pe care il avem deja instalat pe green. Urmăriți README-ul de la această adresă.

Porniți un nou terminal pe sistemul host. Rulati tcpdump pe interfața de rețea veth-red urmărind pachetele primite. Acum puteți porni tool-ul asupra webserver-ului de pe red. Încercați să accesați din nou serverul web. Mai funcționează ?

root@student:~# tcpdump -i veth-red -n

  • Dacă server-ul web tot vă răspunde, folosiți combinatia de taste CTRL+R pentru a da refresh la pagina din elinks.
  • Dacă încă funcționează serverul, încercați să rulați tool-ul din mai multe terminale până nu mai răspunde.

11. [Bonus - 20p] Rulare Man in The Middle

În cadrul acestui exercițiu ne propunem să simulăm un atac de timp Man-in-the-middle. Pentru aceasta, vom considera statia red ca fiind sistemul de pe care se inițiază atacul și stația green sistemul victimă. Vom încerca să capturăm traficul către https://curs.upb.ro/ și să îl redirecționăm către un server web malițios aflat pe stația red. Într-un scenariu real, un atacator ar putea să creeze o replică a unui site web cu scopul de a captura comportamentul victimei sau informații cu caracter personal (parole, adrese, opțiuni etc.)

Folosind ARP spoofing, DNS spoofing, vom crea un scenariu de MiTM (Man in The Middle).

Inainte de a porni la atac, va trebui sa pregatim infrastructura de laborator pentru acest exercitiu:

root@host:~# stop_lab
root@host:~# start_lab lab11 ex12

În primă instanță vom porni arpspoof:

root@red:~# arpspoof -i <interfață (red-eth0)> -t <ip_victimă 192.168.2.2> <ip_gateway 192.168.0.100> -r # apoi, în alt terminal:
root@red:~# ip a s    # pentru a vedea adresa MAC
root@green:~# arp -n    # comparați adresa MAC a statiei ''red'' cu cea înregistrată pentru gateway. Se poate observa pe mașina victimei faptul că adresa MAC a gateway-ului corespunde cu adresa MAC a adresei IP aferente atacatorului

Deoarece am pornit mai sus ARP spoofing, pachetele victimei trec pe la atacator, inclusiv cererile de tip DNS. Astfel sistemul atacator (MiTM) va răspunde la aceste cereri în locul serverelor dedicate și vor trimite drept rezoluție de nume pentru domeniul curs.upb.ro adresa IP scrisă într-un fișier hosts pe care va trebui sa il cream. În cazul de față aceasta adresa este adresa IP a atacatorului unde rulează o copie malițioasă a site-ului http://curs.upb.ro/.

root@red:~# cat hosts             
<adresa_mea_ip>    curs.upb.ro   
(folosiți TAB!)
root@red:~# dnsspoof -f hosts

Pentru a valida succesul atacului, de pe stația green rulați browser-ul text elinks si accesați pagina curs.upb.ro. Veți observa faptul că, în locul paginii clasice, vă va apărea o pagină web diferită (pagina default Apache).

Resurse:

rl/labs/11.txt · Last modified: 2022/01/17 13:54 by octavian.grigorescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0