Implementácia firewallu a simulácia sieťových útokov

1.1   Informácie k cvičeniu

Cvičenie má predpripravené virtuálne stroje Kali a Ubuntu, ktoré si študent spustí cez VMware.

  • Kali – verzia 2022.4, 64bit, user kali, password kali, viac info. –> úvodné cvičenie
  • Ubuntu – verzia 22.04.2 64bit, user:tuke, password secret, viac info. -> úvodné cvičenie
  • Webserver Apache/2.4.52 predpripravený vo virtuálnom stroji Ubuntu
  • Otvorený openssh-server vo virtuálnom stroji Ubuntu z predchadzajúceho cvičenia
  • UFW 0.36.1 – defaultne predpripravený vo virtuálnom stroji Ubuntu
  • Nmap 7.93 – defaultne predpripravený vo virtuálnom stroji Kali

    1.2   Motivácia

    Na tomto cvičení sa študent oboznámi s Firewallom a jeho limitmi. Taktiež absolvuje praktické činnosti na konfiguráciu firewallu a pomocou správnej konfigurácie ochráni internú sieť pred vonkajšími útokmi, ktoré sám zrealizuje.

    1.3   Ciele cvičenia

    1. Pochopiť základnú teóriu k firewallom a jeho limitom.
    2. Nasadiť firewall v operačnom systéme Linux
    3. Osvojiť si základné príkazy na konfiguráciu firewallu pomocou nástroja Uncomplicated Firewall
    4. Vyskúšať si praktické príklady, kde firewall chráni internú sieť pred:
      • nepovolaným prístupom cez SSH
      • nepovolaným prístupom do Webservera
      • skenovaním portovv

    1.4  Firewall

    Firewall je nevyhnutne dôležitý softvér alebo firmvér, ktorý bráni prístupu do siete neoprávneným zariadeniam. Firewall delí siete pomocou prístupových práv a kontroluje tok dát medzi týmito sieťami. Vo svojej najzákladnejšej podobe je firewall v podstate bariérou medzi súkromnou internou sieťou a verejným internetom.

    V rámci tohto cvičenia sa oboznámite s linuxovým nástrojom Uncomplicated Firewall (UFW). Ktorý umožňuje používateľovi jednoducho nastaviť pravidlá pre prístup do siete.

    1.5 Limitácie firewallu

    Firewall je úžasný bezpečnostný nástroj, ale taktiež má svoje limitácie. Medzi také základné hrozby pred ktorými vás firewall neochráni patria:

    • Sociálne inžinierstvo
    • Nové hrozby
    • Chyby v nasadených aplikáciach
    • Interné útoky – môžete redukovať útoky ďalšími vrstvami firewallu
    • Krádež

    Spomenutým hrozbám je možné sa vyhnúť inými spôsobmi, v prípade sociálneho inžinierstva to môžu byť security tréningy zamestnancov, v prípade krádeže MFA autentifikácia a použitie silného hesla atď.

    1.6 Uncomplicated Firewall – UFW

    Predtým než si predstavíme UFW, treba sa oboznámiť s netfilter-om. Netfilter je tradičný framework, ktorý sa nachádza v kerneli Linuxu a jeho hlavnou úlohou je filtrovanie paketov, preklad sieťových adries a preklad portov, ktoré umožňujú smerovanie paketov cez sieť a obmedzovanie paketov dostať sa na citlivé miesta v rámci siete.

    Základný interface k netfilteru je iptables, ktorý poskytuje kompletné firewallové riešenie, ktoré je vysoko konfigurovateľné a flexibilné. Iptables je náročný na pochopenie a preto vznikol uncomplicated firewall – UFW, ktorý je vlastne frontendom pre iptables.

    UFW je nástroj ktorý je nadizajnovaný na zjedušenie nastavenia a administráciu firewallových pravidiel a špecifických iptables pravidiel. UFW funguje ako služba, tzn. možeme ju stopnúť, spustiť, reštartovať atď.

    Poznámka: V prípade, že konfigurujete vzdialený server, najprv nakonfigurujte pravidlá pre firewall, napríklad vzdialený prístup cez SSH, a až potom spustite službu UFW. V opačnom prípade riskujete stratu prístupu do vzdialeného servera – „lockenete sa“.

    1.7 Základné príkazy UFW

    Poznámka: UFW konfiguračný súbor sa nachádza v /etc/default/ufw.
    Poznámka: príkazy ufw musia byť konfigurované v root režime

    • man ufw – linux manuál pre ufw
    • ufw show – zobrazenie kompletného zoznamu príkazov
    • ufw status – zobrazenie aktuálnej konfigurácie prístupov a obmedzení
    • ufw enable – zapnutie firewallu
    • ufw disable – vypnutie firewallu
    • ufw reset – vymazanie vsetkych existujúcich pravidiel
    • ufw deny – zabránenie prístupu (port, ip, subnet, interface, application)
    • ufw allow – povolenie prístupu (port, ip, subnet, interface, application)
    • ufw delete – vymazanie pravidla
    • systemctl start/stop/enable/disable/status ufw – základné nastavenia služby ufw

    1.8 Konfigurácia firewallu

    Otvorte si Ubuntu VM. Pri každej konfigurácii firewallu, je dôležité nastaviť základné pravidlá pre firewall. Najdôležitejším krokom konfigurácie firewallu je postupovať od najviac generických po najviac špecifické pravidlá.

    Poznámka: Predpokladame, že SSH máte nakonfigurovaný z minulého cvičenia.

    Prv než začnete uložte si IP adresu vášho virtuálneho stroja ubuntu pomocou príkazu ifconfig.

    $ ifconfig

    V prípade, že vo virtuálnom stroji nie je nainštalovaný balíček net-tools nainštalujte ho a napíšte príkaz znova:

    $ sudo apt install net-tools
    $ ifconfig

    Spustite službu ufw, ak náhodou nie je spustená, prvý príkaz nastaví aby sa po reboote spustila služba ufw, druhý príkaz umožní okamžité spustenie služby:

    $ sudo systemctl enable ufw   
    $ sudo systemctl start ufw

     

    Poznámka: Majte na pamäti, ze ak by ste konfigurovali vzdialený server, best-practice je mať pri konfigurácií vypnuté všetky pravidlá firewallu aby ste sa vyhli „locknutiu“.


    Vypnite firewall:

    $ sudo ufw disable

    Vyčistite existujúce konfigurácie:

    $ sudo ufw reset

    Definujme si najviac generické pravidlá pre firewall.
    Zabraňne prístup všetkým prichadzajúcim paketom z vonkajšej siete do našej siete:

    $ sudo ufw default deny incoming

     

    Povoľme všetkým paketom možnosť odoslania z našej siete do vonkajšej siete.

    $ sudo ufw default allow outgoing

     

    1.8.1  Konfigurácia prístupov

    Ďalším krokom je pridanie vlastných pravidiel firewallu.


    Povoľte prístup pre ssh port:

    $ sudo ufw allow 22

    Povoľte vstup pre ssh, https a smtp:

    $ sudo ufw allow https
    $ sudo ufw allow smtp

    V následujúcej úlohe umožníme prístup nášmu virtuálnemu stroju kali aby sa mohol pripojiť cez ssh do tohto virtuálneho stroja.

    Úloha: Pomocou príkazu ifconfig si zistite a uložte ip adresu vašho virtuálneho stroja kali.

    $ ifconfig

    Vo virtuálnom stroji ubuntu povoľte prístup do ssh pre virtálny stroj kali

    $ sudo ufw allow from <kali ip adresa> to any port 22

    Spustite firewall a zobrazte zoznam pravidiel:

    $ sudo ufw enable
    $ sudo ufw status

    Úloha: Skúste, či sa dokažete pripojiť pomocou ssh z VM kali na VM Ubuntu. Malo by sa vám to malo podariť.

    $ ssh tuke@<ip adresa ubuntu servera>

     

    Poznámka: V prípade, že si chcete skontrolovať zoznam pravidiel, ale nechcete spúšťať firewall, použite príkaz sudo ufw show added

     

    1.8.2  Mazanie pravidiel

    Keďže máme nastavený prístup cez ssh pre všetky zariadenia a aj samotné pravidlo pre náš virtuálny stroj kali, možeme vymazať pravidlo ssh pre všetky zariadenia vrátane v6. Pretože nám je zbytočné.

    $ sudo ufw status numbered
    $ sudo ufw delete <čislo pre port 22 TCP>
    $ sudo ufw status numbered $ sudo ufw delete <čislo pre port 22(v6)>

    Výsledný stav by mal vyzerať takto, samozrejme ip adresa je s vyššou pravdepodobnosťou iná:

    Poznámka: V našom prípade je ip kali: 192.168.126.128 a ip ubuntu: 192.168.126.129

     

    Upozornenie: Záleží na poradí pravidiel! Ak by ste mali nastavené pravidlá napríklad takto:

    $ sudo ufw status numbered

    [1] 22/tcp      ALLOW    192.168.0.0/24

    [2] 22/tcp      DENY       192.168.0.3

    Tak IP adresa 192.168.0.3 by mala prítup k SSH portu pretože pravidlo 1 by sa evaluovalo ako správne, aj keď je explicitne špecifikované obmedziť prístup tejto konkretnej IP adrese.

    1.9 Simulácia útokov

    1.9.1  Nepovolený prístup cez ssh

    V predchadzajúcom cvičení ste konfigurovali ssh daemona a momentálne sme vo firewalle pre virtuálny stroj kali otvorili ssh port, skúsme či sa pripojíme z kali do ubuntu zapomoci ssh na používateľa tuke.

    Vo virtuálnom stroji kali napíšte príkaz pre vzdialený prístup a potom sa autentifikujte heslom. Server by mal byť dostupný:

    $ ssh tuke@<ip adresa ubuntu>

    Vráťte sa do stroja ubuntu a zamietnime ssh prístup odstránením pravidla pre firewall:

    $ sudo ufw status numbered
    $ sudo ufw delete <číslo pre port 22 pre ip adresu kali>


    Odpojte sa
    (Ctrl+D) a skúste sa znova pripojiť z virtuálneho stroja kali na stroj ubuntu:

    $ ssh tuke@<ip adresa ubuntu>

    Všimnite si, že pripojenie do vzdialeného servera nie je možné.

     

    1.9.2  Nepovolaný prístup do http webservera

    Zapomoci Apache2 sme si vytvorili lokálny webserver. Ak by vas zaujímala inicializačná konfigurácia apache2 web servera môžete si pozrieť toto video.

    Na virtuálnom stroji ubuntu:

    1. Skontrolujte či je webserver spustený.

    $ sudo systemctl status apache2 

    Ak je neaktívny (Active na 3 riadku vypisuje inactive) spustite ho pomocou príkazu a overte status znova

    $ sudo systemctl start apache2
    $ sudo systemctl status apache2
    

    2. Skontrolujte či je webserver dostupný z prehliadača vášho hostiteľského zariadenia alebo z kali virtuálneho stroja:

    • otvorte prehliadač, vymažte historiu prehliadavania, nacacheovane data a vložte doň ip adresu virtuálneho stroja ubuntu

    3. Adresa je nedostupná, pretože sme nepovolili prístup cez http port. Vo virtuálnom stroji ubuntu napíšte príkaz:

      $ sudo ufw allow 80

      Refreshnite prehliadač a stránka bude tentokrát dostupná.

       

      1.9.3  Port scanning pomocou nmap

      Upozornenie: Nástroje na skenovanie siete a portov sú povolené len vtedy, ak sa používajú v spojení s domácou sieťou alebo ak sú výslovne povolené cieľovým hostiteľom a/alebo sieťou.

      Úloha: Vypnite oba virtuálne stroje, nastavte sieťový adapter oboch virtuálnych strojov v nastavení virtuálneho stroja (Virtual Machine Settings ->  Network adapter -> network connection) na host-only. Viac informácií nájdete v úvodnom cvičení. A opäť ich spustite.

      Poďme si zistiť základné informácie o zariadeniach v našej virtuálnej lokálnej sieti. Zistime všetky otvorené porty.

       

      Otvorte si virtuálny stroj kali a zistite koľko zariadení je aktívnych vo vašej virtuálnej lokálnej sieti:

      $ nmap -sP <adresa siete v ktorej je zariadenie>/24


      Napríklad v našej sieti sú dostupné 2 zariadenia.
      Poďme odhaliť všetky webservery, ktoré sú spustené v našej sieti. Bežné porty sú 80 pre http alebo 443 pre https.

      $ sudo nmap -sT -p 80,443 <adresa siete v ktorej je zariadenie>/24


      Hľadali sme port, ktorý bude open a k nemu zodpovedajúcu IP adresu. Všimnite si, že táto IP adresa je vlastne IP adresa vášho ubuntu stroja.

       

      Poznámka: Prepínač -sT je typ port scanu, pomcou TCP 3-way handshake-u.

      Tentokrát spusťme nmap na konkrétnu ip adresu nášho ubuntu systému. Všimnite si stavy portov.
      Stav closed vypovedá o tom, že port je dostupný, ale nebeží na ňom žiadna služba, stav open znamená, že port je otvorený a očakáva pripojenie. V rámci nmap penetračného testu hľadáme presne takéto zraniteľné miesta.  Skontrolovaných je len prvých 1000 portov.

      $ sudo nmap -sT <ip adresa webservera>
      

      Úloha: Otvorte v ubuntu porty 8796,2023,7543 len pre náhodný subnet v sieti: 10.10.10.0/24
      $ sudo ufw allow from 10.10.10.0/24 to any port 8796
      $ sudo ufw allow from 10.10.10.0/24 to any port 2023
      $ sudo ufw allow from 10.10.10.0/24 to any port 7543


      Z virtuálneho stroja kali si pomocou nmap vypíšeme všetky porty nášho webservera.

      $ sudo nmap -sT -p- 192.168.145.129

      Všimnite si, že pre správne nastavený firewall nmap nebol schopný odhaliť otvorené porty, ktoré sme pridali, pretože boli sprístupnené pre inú sieť.

      Nezobrazili sa nám novotvorené porty. Skontrolujme si ich dostpunosť:

      $ sudo nmap -sT -p 8796,2023,7543 <IP adresa webservera>

      Keď sme si dali zobraziť konkrétne porty, stav bol filtered. Pre nmap to znamená, že nevie konštatovať či port je otvorený alebo uzavretý, pretože firewall umožnil prístup k tomuto portu len v tom vybranom subnete (10.10.10.0/24) a VM kali doň nepatril.

      Zaujímavosť:
      Nmap obsahuje aj „agresívny mód“, ktorý umožňuje zistiť informácie o operačnom systéme, verziách aplikácií bežiacich na určitom porte, traceroute a iné. Pomocou použítia prepináča -A spustíte tento mód. Napr. sudo nmap -A -p <porty> <host>

      Ak by ste sa chceli o nmap dozvedieť viac, odporúčame vám pozrieť si ich dokumentáciu.

      1.10 Vyčistite za sebou konfiguráciu ufw v Ubuntu

      $ sudo ufw reset
      $ sudo ufw disable

      Úloha: Vypnite oba virtálne stroje a nastavte ich sieťové nastavenia späť na režim NAT. Viac informácií nájdete v úvodnom cvičení.

      1.11 Záver

      V rámci tohto cvičenia ste sa naučili nakonfigurovať firewall a vyskúšali si ako filtruje pakety. Samozrejme, v dnešnej dobe sa dá firewall obísť rôznymi útokmi, takisto sa dá firewall nastaviť tak, aby filtroval pakety napr. s pomocou IPS (intrusion prevention system). Taktiež existujú zariadenia, ktoré spadajú do skupiny Next generation firewall, tieto zariadenia ponúkajú veľké množstvo pokročilých bezpečnostných nástrojov.

      1.12   Zdroje

      1.13  Dotazník / Kvíz

      Dotazník resp. kvíz je hodnotený 0.5 bodom k zápočtu. Na jeho vyplnenie máte čas do 22. októbra. Odkaz na dotazník nájdete tu.