Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Crear un bastion en tu casa

HackMadrid27
April 04, 2020
700

Crear un bastion en tu casa

Cómo bastionar tu casa u oficina y proteger tu privacidad por poco dinero con una raspberry pi. Construiremos nuestro propio servidor “openvpn” para poder conectarnos a nuestros dispositivos de manera remota con seguridad, construiremos nuestro propio fw mediante scripts con bash e iptables. Crearemos nuestra propia red local asignando ips por dhcp y crearemos nuestro propio punto de acceso wifi aprovechando el interfaz wlan. Instalaremos maltrail para detectar ataques, intrusiones, fuga de información y malware en nuestra red, programaremos nuestro propio sistema de respuesta ante incidencias, y configuraremos ntop-ng para poder analizar el tráfico de nuestros dispositivos en nuestra red.

Bueno, esto da no para una sesión sino para más. Esta primera parte hará hincapié en cómo montar la rpi, el fw, la wifi y el servidor vpn, y luego viene más …..

HackMadrid27

April 04, 2020
Tweet

Transcript

  1. # whoami José Luis Navarro Adam Técnico Superior de Seguridad

    Informática Perito Judicial de Seguridad Informática Director de Proyectos e I+D GirsaNet ( https://girsanet.com ) # cat /home/jlnavarro/.profile "Constructor de Murallas". Apasionado de la seguridad informática y la privacidad en Internet. Creador del firewall CDC-data. Email: [email protected] Twitter: @JLNavarroAdam @JLNavarroAdam [email protected]
  2. # ./charla.sh Cómo crear nuestro propio sensor de Malware IDS

    y analizador de tráfico en red sobre una RasberryPI y ofrecer seguridad y privacidad tanto en el hogar como en entornos industriales (IoT) Objetivo: Detectar las alertas de malware y bloquear automáticamente los destinos hacia Ips maliciosas y rechazar las peticiones entrantes en el firewall HW: Rasberry Pi b 3+ SW: Raspbian + Maltrail + NTOPNG + iptables + iproute2 + Postfix + un poco de imaginación (autoreject.php) - Sí, pone PHP ;) - @JLNavarroAdam [email protected]
  3. ¿Nos podemos fiar de las nuevas tecnologías que inundan el

    mercado sin haber sido probadas o diseñadas desde la seguridad por defecto? @JLNavarroAdam [email protected]
  4. IP: 192.168.10.1/24 DHCP:192.168.10.101-199 IP AUTOMÁTICA (ASIGNADA POR EL ROUTER) ROUTER

    ¡Bienvenido a la república independiente de mi casa! (y en mi casa decido yo) @JLNavarroAdam [email protected]
  5. Accedemos como root: Cambio de contraseñas de root (creamos una

    contraseña, la que queramos) # sudo passwd root Y a continuación logueamos como root ejecutando: # su E introduciendo la contraseña de root creada anteriormente Ahora instalamos los paquetes necesarios maltrail y ntop-ng: La instalación paso a paso la tenemos aquí (VOL1): https://sistemasit.girsanet.com/wp-content/uploads/sliders/Hackandbeers-Cuenca-2019.pdf @JLNavarroAdam [email protected]
  6. ¿¿ LO VEMOS EN ACCIÓN ??? Para conectar a maltrail:

    https://192.168.10.1:8338 Usuario: admin Contraseña: changeme! Para conectar a ntopng: http://192.168.10.1:3000 Usuario: admin Contraseña: admin @JLNavarroAdam [email protected]
  7. Dónde tenemos cada cosa… - Configuración del fw: /etc/rc.local -

    Configuración wifi ap: /etc/hostapd/hostapd.conf - Configuración dhcp wifi y bloquear dominios: /etc/dnsmasq.conf - Configuración reglas automáticas de bloqueo: /root/maltrail_reglas.conf - Tareas programadas automáticas: /etc/crontab - Correo electrónico: /etc/postfix/main.cf - Nombre de la raspberry: /etc/hosts , /etc/hostname , /etc/mailname y /etc/postfix/main.cf - Scripts y autoreject.php: /root/ - Logs: /var/log/maltrail/ Reiniciar los servicios - Ntopng: service ntopng restart - Maltrail: /root/servicemal.sh - DNSMasq: service dnsmasq restart - Postfix: service postfix reload - Tareas programadas: service cron restart - Actualizar el sistema: apt update && apt upgrade - REINICIAR LA RASPBERRY: reboot - APAGARLA: halt @JLNavarroAdam [email protected]
  8. Inicio: /etc/rc.local @JLNavarroAdam [email protected] !/bin/sh –e ## rc.local ## This

    script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other value on error. ## In order to enable or disable this script just change the execution bits. ## By default this script does nothing. # Print the IP address_ IP=$(hostname -I) || trueif [ "$_IP" ]; then printf "La dirección IP es %s\n" "$_IP“ fi ### RESETEAMOS CAPTURAS DE MALTRAIL rm -f /tmp/maltrail_fwd && touch /tmp/maltrail_fwd ### REGLAS DEL FW ## PERMITIMOS ENMASCARAMIENTO DESDE WLAN0 HACIA ETH0 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT ## BLOQUEAMOS PETICIONES MALICIOSAS iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP iptables -A INPUT -f -j DROP iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP iptables -A INPUT -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
  9. Inicio: /etc/rc.local @JLNavarroAdam [email protected] ## RECHAZAMOS LAS CONEXIONES ENTRANTES DESDE

    ETH0 iptables -A INPUT -i eth0 -p tcp --dport 8338 -j REJECT iptables -A INPUT -i eth0 -p tcp --dport 3000 -j REJECT iptables -A INPUT -i eth0 -p tcp --dport 53 -j REJECT iptables -A INPUT -i eth0 -p udp --dport 53 -j REJECT #iptables -A INPUT -i eth0 -p tcp --dport 22 -j REJECT ## REDIRIJIMOS EL TRAFICO SALIENTE DNS HACIA RPI iptables -t nat -A PREROUTING -s 192.168.10.0/24 -p tcp --dport 53 -j DNAT --to 192.168.10.1 iptables -t nat -A PREROUTING -s 192.168.10.0/24 -p udp --dport 53 -j DNAT --to 192.168.10.1 iptables -A FORWARD -s 192.168.10.1 -d 192.168.10.0/24 -p tcp --sport 53 -j ACCEPT iptables -A FORWARD -s 192.168.10.1 -d 192.168.10.0/24 -p udp --sport 53 -j ACCEPT ## BLOQUEAMOS BROADCAST REDES MICROSOFT Y SNMP HACIA LA RED EXTERIOR iptables -A OUTPUT -o eth0 -p udp --dport 137:139 -j DROP iptables -A OUTPUT -o eth0 -p udp --dport 445 -j DROP iptables -A OUTPUT -o eth0 -p udp --dport 161:162 -j DROP ## Y MOSTRAMOS LAS REGLAS iptables –nL exit 0
  10. DNS y DHCP: /etc/dnsmasq.conf @JLNavarroAdam [email protected] ### RANGO DHCP PARA

    EL INTERFAZ WLAN0 interface=wlan0 dhcp-range=192.168.10.101,192.168.10.199,255.255.255.0,24h ### Logueamos las consultas dns log-queries ### PARA BLOQUEAR DOMINIOS POR DNS address=/taobao.com/0.0.0.0 address=/thebrighttag.com/0.0.0.0 address=/dropbox-test.com/0.0.0.0 address=/aliexpress.com/0.0.0.0 address=/alicdn.com/0.0.0.0 address=/.mobi/0.0.0.0 address=/.ru/0.0.0.0 address=/.tt/0.0.0.0 address=/.tc/0.0.0.0 address=/.cn/0.0.0.0 address=/.cc/0.0.0.0 address=/.website/0.0.0.0 address=/spotxchange.com/0.0.0.0 address=/.br/0.0.0.0 address=/dartsearch.net/0.0.0.0 address=/socialpointgames.com/0.0.0.0 address=/xiaomi.com/0.0.0.0 address=/unity3d.com/0.0.0.0 address=/tapjoy.com/0.0.0.0 address=/mopub.com/0.0.0.0 address=/applovin.com/0.0.0.0 address=/gemius.pl/0.0.0.0 address=/baidu.com/0.0.0.0
  11. SCRIPTS: /root/autoreject.php @JLNavarroAdam [email protected] #!/usr/bin/php –f <?php #### DEFINIMOS LAS

    REGLAS DE FILTRADO EN EL ARCHIVO /root/maltrail_reglas.conf #### PONIENDO CADA EXPRESION DE DETECCION EN UN LINEA DIFERENTE # SI HAY OTRO PROCESO AUTOREJECT EN EJECUCION, SALIMOS... if (file_exists("/tmp/autoreject.tmp")) { exit; } function es_ip($ip) { if ( (preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(\s*)$/" , $ip, $matches)) && ($matches[1] < 256) && ($matches[2] < 256) && ($matches[3] < 256) && ($matches[4] < 256) ) { return 1; } else { return 0; } } date_default_timezone_set('Europe/Madrid'); $dia=date("d"); $mes=date("m"); $ano=date("Y"); $log="/var/log/maltrail/" . $ano . "-" . $mes . "-" . $dia . ".log"; $fwd="/tmp/maltrail_fwd";
  12. SCRIPTS: /root/autoreject.php @JLNavarroAdam [email protected] ### GENERAMOS EL FILTRADO DE REGLAS

    PARA LA BUSQUEDA $MisReglas=file("/root/maltrail_reglas.conf"); $reglas=""; foreach ($MisReglas as $linea) { $linea=trim($linea); if ($linea != "") { if ($reglas == "") { $reglas=$linea; } else { $reglas=$reglas."|".$linea; } } } # SI NO HAY REGLAS DEFINIDAS, CANCELAMOS... if ($reglas=="") { exit; } # BUSCAMOS COINCIDENCIAS Y EXTRAEMOS EL “TRAIL” $cmd="cat $log | egrep '(". $reglas . ")' | cut -d ' ' -f 10"; $cmd=$cmd . " > /tmp/autoreject.tmp"; exec($cmd); # GENERAMOS EL REGISTRO DE AMENAZAS DE MALTRAIL DEL DIA DE HOY FILTRADO CON NUESTRAS REGLAS $regs=file("/tmp/autoreject.tmp");
  13. SCRIPTS: /root/autoreject.php @JLNavarroAdam [email protected] # COMPROBAMOS SI SON NUEVOS touch($fwd);

    $IPs=file($fwd); $cont=count($IPs); $f=fopen($fwd,'a'); foreach ($regs as $linea) { $linea=trim($linea); if ($linea != "") { if (!in_array($linea."\n",$IPs)) { # SI ES UNA NUEVA IP LA AÑADIMOS Y BLOQUEAMOS if ( es_ip($linea) ) { $IPs[$cont]=$linea."\n"; fwrite($f,$IPs[$cont]); $cmd="ip route add blackhole $linea"; exec($cmd); $cmd="iptables -A INPUT -s $linea -j DROP"; exec($cmd); $cmd="iptables -A FORWARD -d $linea -j DROP"; exec($cmd); $cont++; } } } } fclose($f); # ELIMINAMOS EL TEMPORAL Y LIBERAMOS PROXIMOS PROCESOS unlink("/tmp/autoreject.tmp"); # Y SALIMOS exit; ?>
  14. SCRIPTS: /root/autoreject.php @JLNavarroAdam [email protected] Curiosidades... ip route add blackhole a.b.c.d

    = ip r add a.b.c.d via 127.0.0.1 => Enruta hacia el interfaz loopback y genera TTL=0 => TIEMPO DE VIDA CADUCADO (PAQUETE NO ENRUTABLE) PILA TCP (kernel) APP (servicios) ENRUTAMIENTO (kernel) PAQUETE IP LOGS LOOPBACK TTL = 0
  15. SCRIPTS: /root/autoreject.php @JLNavarroAdam [email protected] Curiosidades... Protegemos cualquier servicio a partir

    de sus registros (logs): • Apache • Nginx • SSH • … Y todo tipo de dispositivos: • Centrifugadoras • Sistemas de Control de Tráfico • Cajeros automáticos • IoT en general…