Securitate

Idei

  • Security vs. usability
  • Provide predictable behaviour.
  • Expect the worst, do your best.
  • Privacy, Authentication, Integrity, Trust
  • Whom or what do we trust?
  • Principle of least privilege
  • Security through obscurity
  • Honey pots and sacrificial lambs
  • You are going to get hacked.

Demo-uri

Gnu Privacy Guard

  • Acest exercițiu se va desfășura în perechi de câte 2, pe masina locala
  • Daca nu este deja instalat, rulati:
    sudo apt-get install gnupg
  • Generați o perechi de chei publică/privată cu comanda:
    gpg --gen-key
  • Alegeți opțiunile default (Enter sau numărul opțiunii).
  • Completați rubricile cerute cu numele vostru, o adresă de email și un comentariu.
  • După aceea, exportați cheia voastră publică astfel:
    gpg --armor --export email-ul_introdus_mai_sus > userul_de_pe_swarm.gpg
  • Copiați fișierul generat mai sus pe swarm, în ~/public_html:
    scp <userul de pe swarm>.gpg <userul de pe swarm>@swarm.cs.pub.ro:~/public_html
  • Acum, aflați userul de pe swarm al colegului cu care rezolvați exercițiul și deschideți în browser:
    http://swarm.cs.pub.ro/~<user-ul colegului>/
  • De aici, salvați fișierul .gpg cu numele său în folderul vostru de lucru.
  • Pentru a importa cheia colegului, executați în folderul în care ați salvat cheia acestuia:
    gpg --import <fișierul salvat anterior>
  • Pentru a vedea dacă a fost importată cu succes cheia acestuia, executați:
    gpg --list-keys
  • Creați un document cu un nume aleator și un text aleator.
  • În folderul cu acest fișier, executați:
    gpg --output <numele documentului>_encr --encrypt --recipient <email-ul colegului> <numele documentului>
  • Copiați fișierul <numele documentului>_encr în folderul ~/public_html de pe swarm.
  • Acum, accesați din nou în browser adresa colegului și copiați documentul creat de el, ce conține encr.
  • Inspectați documentul. Ce observați?
  • Salvați documentul. În folderul cu acesta, rulați:
    gpg --output <un nume nou pentru document>_decr --decrypt <documentului de la coleg>
  • Inspectați din nou documentul. Acum se poate citi. === iptables ===
  • Acest exercițiu se desfășoară pe mașina locală.
  • Toate exercițiile ce urmeaza se executa ca root.
  • Pentru ca bloca accesul la un anumit site, se execută:
    iptables -F
    iptables -A INPUT -s rosedu.org -j DROP
    iptables -A OUTPUT -d rosedu.org -j DROP
  • Examinați regulile din iptables:
    iptables -L -n
  • Încercați să vă conectați la rosedu.org. Merge?
  • Următoarea parte a exercițiului se desfășoară pe containerul LXC.
  • Accesati din browserul masinii locale:
    http://houdini.cs.pub.ro:4<id container>80

    Ar trebui sa vedeti o pagina HTML aleatoare.

  • Acum, pe container, executati:
    iptables -F
    iptables -A INPUT -p tcp --destination-port 80 -j DROP
  • Încercați să vă conectați reaccesati link-ul de mai sus. Ce observați?
  • Salvați următorul script într-un fișier numit firewall.sh:
    #!/bin/bash
    iptables -F
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -i eth+ -p udp -j DROP
    iptables -A INPUT -i eth+ -p tcp -m tcp --syn -j DROP
    iptables -A INPUT -i lo -j ACCEPT
  • În folderul unde ați salvat, executați:
    chmod +x firewall.sh
  • Executați scriptul:
    ./firewall.sh
  • Listați iarăși conținutul iptables. === fail2ban ===
  1. Instalare
    • Instalați pachetele fail2ban si rsyslog în containerul LXC:
      apt-get install fail2ban rsyslog
  2. Configurare
    • Inspectați următoarele fișiere:
      • /etc/fail2ban/filter.d/sshd.conf - identifică evenimente
      • /etc/fail2ban/action.d/iptables-allports.conf - acțiune care blochează toate porturile pentru un anumit IP
      • /etc/fail2ban/jail.conf - secțiunea [ssh] - mapează filtrele cu acțiunile asociate
        • Configurați fail2ban să baneze un IP după 3 încercări eșuate:
          [ssh]
          enabled = true
          port    = ssh
          filter  = sshd
          logpath  = /var/log/auth.log
          maxretry = 3
    • Restartați fail2ban:
      sudo /etc/init.d/fail2ban restart
  3. Utilizare
    • Conectați-vă cu success în containerul LXC
      • Atenție: s-ar putea ca în urma exercițiului de mai sus să fiți deja blocați de iptables - dacă nu merge să vă conectați, accesați containerul de pe swarm.
    • Verificați tabela iptables:
      iptables -L -n
    • De pe mașina locală, logați-vă în container prin ssh, dar introduceți o parolă greșită de 3 ori:
      $ ssh -p<port> root@houdini.cs.pub.ro
      root@houdini.cs.pub.ro's password: 
      Permission denied, please try again.
      root@houdini.cs.pub.ro's password: 
      Permission denied, please try again.
      root@houdini.cs.pub.ro's password: 
      Permission denied (publickey,password).
    • Încercați din nou să vă conectați prin ssh. Ce observați?
    • În containerul LXC verificați intrările iptables
      iptables -L -n
      • Intrarea a fost introdusă de fail2ban, conform configurărilor de mai sus
    • Ștergeți intrarea pentru a putea accesa din nou mașina:
      iptables -D fail2ban-ssh -s <IP> -j DROP
      • <IP> este IP-ul facultății, care a fost banat.
    • Verificați dacă vă puteți loga acum prin ssh, folosind parola corectă.
sesiuni/sysadmin/securitate.txt · Last modified: 2014/07/11 18:06 by mvasilescu