Diferència entre revisions de la pàgina «ASIX/M16/UF2/EX2»
| 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
Contingut
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
Banner grabbing automàtic amb script nmap
- 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.
Banner grabbing manual amb netcat / telnet
- 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
- 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