Laborator 12. Securitatea Rețelelor Locale

Arhiva laboratorlui se găsește aici

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

Pregătire infrastructură de laborator

  • Laboratorul va fi rezolvat direct pe calculatoarele din laboratorul de RL. Nu aveți nevoie de Openstack sau de mașina virtuală din cadrul laboratorului.
  • Pentru a pregăti configurația de laborator, pe calculatorul din laborator folosiți comenzile următoare din contul utilizatorului root (puteți da copy/paste la comenzi în terminal):
    root@mjolnir:~# # descărcați arhiva din browser: https://drive.google.com/file/d/1guW9Kx3S8PATZ_ljmPmadP16rq7pWd42/view?usp=sharing
    root@mjolnir:~# unzip Laborator12sec_rl.zip
    root@mjolnir:~# apt-get update
    root@mjolnir:~# apt-get install wireshark python3-pip tcpdump apache2 dsniff

Exerciții

În cadrul exercițiilor din laboratoarele de Linux vom folosi topologia de mai sus.

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 cs.curs.pub.ro într-un frame numit “FEEDBACK”.

Vă mulțumim!

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

Pentru început, vrem să aflăm adresa IP publică cu ajutorul căreia ieșim în internet din laboratorul de RL. Calculatorul de pe care lucrați la acest laborator se află în spatele unui sistem de NAT (Network Address Translation) și are un ip privat alocat. 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. [5p] Aflare informații despre adresa IP publică

Mai departe vrem să aflăm din ce subnet facem parte, cine se ocupă de acesta, al cărei organizații aparține și din ce țară se află. Whois este un protocol cerere răspuns care este folosit pentru a interogra informații despre resursele internetului cum ar fi numele de domeniu, subnet-uri de adrese IP sau un sistem autonom. Vom folosi utilitarul whois pentru a afla acest informații despre adresa aflată la exercițiul anterior:

root@mjolnir: 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

Vrem să vedem ce adrese IP sunt online pentru ca ulterior să analizăm serviciile ce rulează pe ele. Deși am aflat o anumită mască la exercițiul precedent, nu vrem să stăm foarte mult timp pentru a scana un subnet cu foarte multe adrese IP 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.

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

Scanarea va dura în jur de 1 minut.

04. [10p] Descoperirea porturile TCP deschise

Mai departe dorim 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 fișierul ping_scan_output.txt (aici se află outputul scanăriide la exercițiul precedent, dar cu masca /16) din arhiva de laborator căutați adresele IP pentru subdomeniile: vesa.cs.pub.ro, acs.pub.ro și cs.pub.ro. Scanați aceste adrese pe TCP pe porturile următoare: 21, 22, 23, 25, 53, 80, 138, 443, 8000 și 8080 (am ales aceste porturi deoarece sunt unele dintre cele mai frecvente porturi utilizate pentru anumite aplicații). 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.

root@host:~# nmap -sT -p21,22,23,25,43,80,138,443,8000,8080 141.85.241.57
Starting Nmap 5.21 ( http://nmap.org ) at 2018-01-06 17:16 EET
Nmap scan report for 141.85.241.57
Host is up (0.00069s latency).
PORT     STATE  SERVICE
21/tcp   closed ftp
22/tcp   open   ssh
23/tcp   closed telnet
25/tcp   closed smtp
43/tcp   closed whois
80/tcp   open   http
138/tcp  closed netbios-dgm
443/tcp  open   https
8000/tcp closed http-alt
8080/tcp closed http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

05. [10p] Descoperire porturi UDP deschise

Deasemenea ne interesează și porturile UDP deschise, nu doar cele TCP. Tot în fișierul folosit la exercițiul anterior aflați adrese IP ale serverelor ns1.cs.pub.ro, pub.pub.ro, swarm.cs.pub.ro. 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 deschise descoperite am dori să aflăm și versiunile aplicațiilor și serviciilor ce rulează pe acele porturi deschise deoarece acestea sunt foarte importante când vine vorba de securitate și vulnerabilități ce pot avea. Dorim să determinăm aceste versiuni atât pentru serviciile ce rulează pe protocolul TCP cât și pe cele de pe 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) ce reprezintă faptul că va fi foarte agresiv cu ținta respectivă, accelerând scanarea. (default-ul este -T3 normal mode) Problema cu această valoarea de insane este că te pot depista mult mai ușor sistemele de securitate implementate în acea infrastructură. Tot pentru a economisi timp putem folosit 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) - în versiunea de nmap instalată pe mașina virtuală nu există această opțiune (-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 acest nivel prin adăugarea parametrului -v. Puteți de asemenea crește acest nivel prin mărirea numărului de v-uri.

07. [10p] Scanare porturi frecvent utilizate

În general se scanează toate cele 65535 porturi deoarece pot exista anumite servicii obscure ce rulează pe porturi cu valori mari și nesemnificative care au probleme. Există de asemenea posibilitatea de a scana un anumit număr de porturi ce sunt cel mai frecvent deschise și care conțin cele mai folosite servicii. Scanați pentru primele 100 de astfel de porturi pe TCP serverul cs.curs.pub.ro.

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 te va informa dacă e Linux, Windows sau MacOS, dar există situații în care îți va menționa și distribuția cu versiunea corectă. Scanați adresa IP de pe cs.pub.ro.

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

Nu întotdeauna oferă informații relevante și astfel pot apărea false positives.

09. [10p] Descoperire vulnerabilități

În procesele ce implică analiza securității unei infrastructuri se folosesc tool-uri de descoperire a vulnerabilităților cum ar fi: Nessus, OpenVAS, Nexpose și altele. 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 cs.pub.ro niște aplicații cu versiunile lor ce rulează pe TCP. De luat în considerare portul 22 și 80. Căutați pe platforma https://www.cvedetails.com/ vulnerabilități pentru aplicația și versiunea ei cu tot cu patch. (Atenție: versiunea 1.2.3a poate fi un patch la o vulnerabilitate prezentă în versiunea 1.2.3). Găsiți-le pe cele mai importante și discutați cu asistentul și colegii despre ele.

Observați formatul vulnerabilităților: CVE-2013-2249 (prefixul CVE, anul și indicele vulnerabilității din anul respectiv). Fiecare dintre acestea are un anumite scor în funcție de cât de mare este impactul pe care îl poate avea asupra serviciului respectiv: low între 0.0 și 3.99, medium între 4.0 și 6.9 și high între 7.0 și 10.0

Deasemenea se pot găsi informații despre CVE-uri și pe https://nvd.nist.gov/ sau https://cve.mitre.org/, dar și pe alte site-uri.

În urma determinării CVE-urilor începe procesul de căutare de exploituri fie pe diverse site-uri (exemplu: https://www.exploit-db.com este unul dintre cel mai folosite) fie utilizând Metasploit ce conține o serie de astfel de exploituri. 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, hardware-ului de pe un calculator sau de pe alt dispozitiv electronic.

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

La acest exercițiu ne propunem să obținem un comportament neplăcut pentru un anumit serviciu. Astfel realizăm un Denial of Service asupra unui server web. Grupați-vă câte 2 studenți. Fiecare dintre voi va trebui să urmeze următorii pași:

root@mjolnir:~# apt-get install apache2     # Instalați serverul web
root@mjolnir:~# /etc/init.d/apache2 status  # Verificați că serverul web este pornit

Intrați în browser pe http://127.0.0.1/ și ar trebui să obțineți pagina default de la Apache2 Ubuntu.

În continuare vom folosit un utilitar de Denial of Service numit slowloris. Urmăriți README-ul de la această adresă. Faceți schimb de adresă IP cu colegul și porniți într-un alt terminal tcpdump pe interfața de rețea urmărind pachetele primite și într-un alt terminal pachetele trimise pe aceeași interfață. Acum puteți porni tool-ul asupra colegului. Încercați să accesați din nou serverul web. Mai funcționează ?

root@mjolnir:~# tcpdump -i <interfață> src <adresă_ip_coleg> -n
root@mjolnir:~# tcpdump -i <interfață> dst <adresa_mea_ip> -n

  • Dacă tot vă răspunde folosiți fereastră de private mode din browser.
  • Dacă încă funcționează serverul încercați să rulați tool-ul din mai multe terminale până nu mai răspunde.

11. [20p] Obținere informații confidențiale din captură de trafic

În arhiva de laborator se găsește un fișier numit special_capture.pcapng pe care va trebui să îl deschideți cu utilitarul wireshark. Wireshark este un analizor de pachete folosit în depanare și analiză de trafic. Să se studieze pachetele capturate și să se filtreze acestea după adresa IP destinație ca fiind 127.0.0.1 și portul 80 pe TCP urmărind indicațiile de aici. Dintre pachetele filtrate să se găsească pachetul HTTP ce are în body un secret key. Acesta este de fapt un hash ce va fi ulterior încărcat pe https://crackstation.net/ pentru a obține valoarea inițială.

root@host:~# apt-get install wireshark

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

Să se grupeze câte 2 studenți: unul va fi victima, iar celălalt atacatorul. Folosind ARP spoofing, DNS spoofing și făcând mirroring la site-ul http://cs.curs.pub.ro/ vom crea un scenariu de MiTM (Man in The Middle).

root@mjolnir:~# apt-get install dsniff  # pachetul conține atât utilitarul arpspoof cât și dnsspoof
root@mjolnir:~# cp index.html /var/www/html  # suprascripere fișier index.html default cu cel din arhiva laboratorului. 
 
root@mjolnir:~# arpspoof -i <interfață> -t <ip_victimă> <ip_gateway> -r # apoi, în alt terminal:
root@mjolnir:~# ip a s    # pentru a vedea adresa MAC
root@mjolnir:~# arp -n    # comparați adresa MAC a colegului 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 DNS. Astfel MiTM va răspunde la aceste cereri în locul serverul real și va trimite ca și adresă IP adresa scrisă în fișierul hosts. În cazul de față această este adresa IP a atacatorului unde rulează copia site-ului http://cs.curs.pub.ro/.

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

Resurse pentru exercițiul 12:

rl/labs/12.txt · Last modified: 2020/01/10 16:00 by mihai.chiroiu
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