Diferència entre revisions de la pàgina «ASIX/M16/UF2/EX2»
| Línia 91: | Línia 91: | ||
:*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? | :*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==== | ====Procediment==== | ||
| + | =====Preàmbul===== | ||
Per a poder aplicar un sistema de ''port knocking'' al nostre servidor de prova, haurem d'instal·lar el programari <code>knockd</code> que ens facilitarà la configuració de regles per a poder aconseguir l'objectiu. | Per a poder aplicar un sistema de ''port knocking'' al nostre servidor de prova, haurem d'instal·lar el programari <code>knockd</code> 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. | 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 | ||
| + | <source> | ||
| + | iptables -A INPUT -i lo -j ACCEPT | ||
| + | </source> | ||
| + | |||
| + | 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 | ||
| + | <source> | ||
| + | iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | ||
| + | </source> | ||
| + | |||
| + | 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'' | ||
| + | <source> | ||
| + | iptables -A INPUT -p tcp --dport 80 -j ACCEPT | ||
| + | </source> | ||
| + | |||
| + | A partir d'aquí, afegim al final la regla per a descartar tots els paquets entrants que no coincideixin amb cap regla anterior | ||
| + | <source> | ||
| + | iptables -A INPUT -j DROP | ||
| + | </source> | ||
| + | |||
| + | 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 <code>iptables-persistent</code> de manera que ens faciliti el desat i restaurat de regles del Firewall entre possibles reinicis del servidor. Podem desar les regles aplicades actualment | ||
| + | <source> | ||
| + | iptables-save > /etc/iptables.cnf | ||
| + | </source> | ||
| + | |||
| + | I restaurar-les des de l'arxiu en qualsevol moment | ||
| + | <source> | ||
| + | iptables-restore < /etc/iptables.cnf | ||
| + | </source> | ||
| + | |||
| + | Després d'això, instal·larem el ''software'' <code>knockd</code> | ||
| + | <source> | ||
| + | zypper in knockd | ||
| + | </source> | ||
| + | |||
| + | L'arxiu de configuració es troba a <code>/etc/knockd.conf</code>. 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 | ||
| + | <source> | ||
| + | [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 | ||
| + | </source> | ||
| + | |||
| + | 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. | ||
Revisió del 16:41, 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.