Diferència entre revisions de la pàgina «ASIX/M16/UF2/EX2»

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca
Línia 150: Línia 150:
  
 
Veiem com definim la '''seqüència''' de ports que s'han de "tocar" per a fer saltar l''''''start_command''''' i que hi ha un màxim de 15 segons per a fer això enviant paquets amb el ''flag'' de SYN activat. Una vegada es compleix aquesta regla, s'insereix (diferència -I amb -A) una regla nova a IPTables per tal d'obrir el port SSH NOMÉS per a l'adreça IP que ha fet el ''knock''. Al cap de 10 segons, s'elimina la regla; però la sessió SSH no s'interromprà perquè hi ha la regla d'ACCEPT per a les connexions que estiguin en estat ESTABLISHED.
 
Veiem com definim la '''seqüència''' de ports que s'han de "tocar" per a fer saltar l''''''start_command''''' i que hi ha un màxim de 15 segons per a fer això enviant paquets amb el ''flag'' de SYN activat. Una vegada es compleix aquesta regla, s'insereix (diferència -I amb -A) una regla nova a IPTables per tal d'obrir el port SSH NOMÉS per a l'adreça IP que ha fet el ''knock''. Al cap de 10 segons, s'elimina la regla; però la sessió SSH no s'interromprà perquè hi ha la regla d'ACCEPT per a les connexions que estiguin en estat ESTABLISHED.
 +
 +
 +
Activarem el servei creant l'arxiu <code>/etc/default/knockd</code> i posant el següent contingut
 +
<source>
 +
START_KNOCKD=1
 +
</source>
 +
 +
Després d'això, el podem posar en marxa com qualsevol altre servei
 +
<source>
 +
systemctl start knockd
 +
</source>
 +
 +
=====Prova de funcionament=====

Revisió del 16:44, 28 feb 2019

Previa

Amb una màquina virtual, instal·la i arrenca alguns serveis (postfix, dovecot, ssh, apache...)

Plantejament

  • Per a aquesta pràctica faré servir OpenSuse Leap 15.0 i instal·laré servidor Postfix, Dovecot, SSH, Apache i MariaDB.
zypper in mariadb apache2 postfix dovecot 
<source>
<source>
systemctl start mariadb
systemctl enable mariadb

systemctl start apache2
systemctl enable apache2
echo -n "<html><head><title>Banner Grabbing</title></head><body><h2>It works!</h2></body></html>" > /srv/www/htdocs/index.html

systemctl start postfix
systemctl enable postfix

systemctl start dovecot
systemctl enable dovecot
  • La màquina es troba a la xarxa amb adreça IP 10.16.2.10.

Reptes

Descobreix quin és el software i la versió mitjançant nmap i el mòdul de banner grabbing

Procediment

root@kali-gsb:~# nmap -sV --script=banner 10.16.2.10


Starting Nmap 7.70 ( https://nmap.org ) at 2019-02-28 16:42 CET
Nmap scan report for 10.16.2.10
Host is up (0.00016s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE    VERSION
22/tcp  open  ssh        OpenSSH 7.6 (protocol 2.0)
|_banner: SSH-2.0-OpenSSH_7.6
80/tcp  open  http       Apache httpd
|_http-server-header: Apache
110/tcp open  pop3       Dovecot pop3d
|_banner: +OK Dovecot ready.
143/tcp open  imap       Dovecot imapd
| banner: * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE ID
|_LE LITERAL+ STARTTLS LOGINDISABLED] Dovecot ready.
993/tcp open  tcpwrapped
995/tcp open  tcpwrapped
MAC Address: 08:00:27:64:8E:09 (Oracle VirtualBox virtual NIC)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 22.26 seconds

Podem veure els serveis SSH, web i Dovecot amb el seu corresponent banner, des del qual podem treure informació de cada programari que està escoltant en aquell port:

  • SSH: OpenSSH 7.6 amb versió de protocol 2.0.
  • Web: només es llista que és un Apache.
  • POP/IMAP: tampoc tenim informació de versió però veiem que hi ha un servidor Dovecot escoltant i tenim informació del protocol IMAP que executa: IMAP4rev1 entre altres.

  • Prova de fer banner grabbing amb nc a un dels serveis detectats
  • Prova de fer banner grabbing amb telnet a un dels serveis detectats

Procediment

  • Amb netcat podem mirar el banner que mostra pel port 22 (OpenSSH):
root@kali-gsb:~# nc 10.16.2.10 22
SSH-2.0-OpenSSH_7.6
  • Amb telnet podem mirar el banner que mostra pel port 143 (Dovecot):
root@kali-gsb:~# telnet 10.16.2.10 143
Trying 10.16.2.10...
Connected to 10.16.2.10.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS LOGINDISABLED] Dovecot ready.

Port knocking

  • Port knocking és una tècnica per obrir ports mitjançant una seqüència preestablerta d’intents de connexió.
  • Si intentes connexions a una sèrie de ports amb una combinació predefinida s’obrirà el port.
  • L’ús més comú és per a SSH però també hi ha gent que l’utilitza amb altres serveis de connexió com VPN.
  • Fa una mica més segur el servidor però sobretot s’utilitza per evitar atacs de força bruta a aquells serveis.
  • Configura port knocking per SSH amb la teva pròpia seqüència d’obertura i de tancada i verifica que pots accedir-hi
  • +info
https://www.endpoint.com/blog/2009/11/16/pknocking-with-knockd (404 not found)
https://www.digitalocean.com/community/tutorials/how-to-use-port-knocking-to-hide-your-ssh-daemon-from-attackers-on-ubuntu).
  • Fes un nmap abans, durant i després a veure que passa amb els serveis.
  • Posa't una contrasenya d’aquelles que pots trobar fàcilment en qualsevol llista i executa l’script nmap per esbrinar la contrasenya SSH. T’ha funcionat?

Procediment

Preàmbul

Per a poder aplicar un sistema de port knocking al nostre servidor de prova, haurem d'instal·lar el programari knockd que ens facilitarà la configuració de regles per a poder aconseguir l'objectiu.

Per a l'exemple d'aquest exercici farem servir combinacions relativament simples; però en un cas en un entorn de proves o productiu podríem fer servir seqüències més difícils d'endevinar o fins i tot més llargues per a dissuadir possibles atacants i mitigar els intents d'accés per SSH mitjançant força bruta.

Instruccions

Primer de tot, afegirem una política per a l'interfície de loopback perquè s'acceptin les connexions entre els serveis que es troben a la mateixa màquina

iptables -A INPUT -i lo -j ACCEPT

Per a evitar quedar-nos fora de la sessió SSH que tenim oberta per a fer la pràctica, farem ús del mòdul Conntrack d'IPTables de manera que les connexions existents o relacionades amb les existents es permetin

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Després, afegirem una regla per al port 80 (web) per a permetre'l sempre. Aquestes regles es poden aplicar per a tots els serveis EXCEPTE el que volguem accedir mitjançant port knocking

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

A partir d'aquí, afegim al final la regla per a descartar tots els paquets entrants que no coincideixin amb cap regla anterior

iptables -A INPUT -j DROP

En aquest punt, si provem qualsevol connexió al servidor OpenSuse que no sigui pel port 80, no se'ns donarà resposta.


A partir d'aquí és on començarem a preparar el terreny per a dissenyar el nostre sistema de port knocking. Necessitarem instal·lar el programa iptables-persistent de manera que ens faciliti el desat i restaurat de regles del Firewall entre possibles reinicis del servidor. Podem desar les regles aplicades actualment

iptables-save > /etc/iptables.cnf

I restaurar-les des de l'arxiu en qualsevol moment

iptables-restore < /etc/iptables.cnf

Després d'això, instal·larem el software knockd

zypper in knockd

L'arxiu de configuració es troba a /etc/knockd.conf. Per defecte hi ha un exemple per a obrir i tancar el port 22 per a un servei SSH. El podem modificar per a ajustar-lo una mica a les nostres necessitats

[options]
        UseSyslog

[opencloseSSH]
        sequence      = 1234,5678,9101    
        seq_timeout   = 15
        tcpflags      = syn    
        start_command = /usr/sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport ssh -j ACCEPT
        cmd_timeout   = 10
        stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport ssh -j ACCEPT

Veiem com definim la seqüència de ports que s'han de "tocar" per a fer saltar l'start_command i que hi ha un màxim de 15 segons per a fer això enviant paquets amb el flag de SYN activat. Una vegada es compleix aquesta regla, s'insereix (diferència -I amb -A) una regla nova a IPTables per tal d'obrir el port SSH NOMÉS per a l'adreça IP que ha fet el knock. Al cap de 10 segons, s'elimina la regla; però la sessió SSH no s'interromprà perquè hi ha la regla d'ACCEPT per a les connexions que estiguin en estat ESTABLISHED.


Activarem el servei creant l'arxiu /etc/default/knockd i posant el següent contingut

START_KNOCKD=1

Després d'això, el podem posar en marxa com qualsevol altre servei

systemctl start knockd
Prova de funcionament