PROGRAMACIÓN OFENSIVA
ÍNDICE
1. Introducción Linux
2. Configuración y conceptos básicos Linux
3. Linux Shell
4. Linux Firewalls
5. Linux servicios más conocidos
6. Microservicios y automatización
7. Introducción a python
8. Programación ofensiva + scripting para investigaciones
9. Resumen conceptos + Laboratorios + Examen
MÓDULO PROGRAMACIÓN OFENSIVA
1. Introducción Linux 28 octubre
2. Configuración y conceptos básicos Linux 28 octubre
3. Linux Shell 29 Octubre - 2 noviembre
4. Linux Firewalls 3 noviembre
5. Linux servicios más conocidos 3 Noviembre
6. Microservicios y automatización 4 Noviembre
7. Introducción a Python 4 Noviembre
8. Programación ofensiva y scripting para investigaciones 5 Noviembre
9. Resumen conceptos & Laboratorios y Ejercicios prácticos 8 Noviembre
Estructura del módulo Programación Ofensiva
Linux Sprint (bases de sistemas, servicios, herramientas seguridad informática).
Contenido teórico.
Ejercicios de desarrollo y Laboratorios intercalados sobre el temario.
Python Sprint (bases de python para usar herramientas o crear nuevas toolkits).
Contenido teórico.
Ejercicios de desarrollo y Laboratorios intercalados sobre el temario.
Offensive Develop Sprint (Objetivo uso de python para investigaciones).
Contenido teórico.
Ejercicios de desarrollo y Laboratorios intercalados sobre el temario.
Módulo Programación ofensiva
ATENCIÓN DESCARGAR E INSTALAR
Descargar Firewall PFSENSE
https://frafiles.netgate.com/mirror/downloads/pfSense-CE-2.5.2-RELEASE-amd64.iso.gz
4 Linux Firewall
Linux es un sistema operativo muy potente y con muchas herramientas gracias a la comunidad.
En UNIX se basa Linux o el sistema operativo FreeBsd, ambos son muy usados en distribuciones firewalls,
como PFSENSE o fabricantes de Firewalls perimetrales, Sophos/Fortinet/Palo alto/Check Point etc…
Por lo tanto es vital conocer los firewall basados en Linux, porque nos dará ventaja a la hora de aprender
cómo funcionan realmente a bajo nivel los firewalls.
Por definición los firewall suelen estar en el perímetro, aunque esto depende de lo grande que sea una
organización y el esquema de red o de seguridad que use.
4 Linux Firewall
Dirección de IP pública ¿Qué es?
Una dirección IP pública es aquella dirección ip única que se le asigna a cualquier dispositivo que se
conecte de forma directa a Internet, por ejemplo, el router de casa o los servidores donde se alojan las
páginas web. Toda IP pública es visible desde Internet.
Dirección de IP privada ¿Qué es?
La dirección IP privada es una ip que se asigna a cada dispositivo conectado a una red privada o
doméstica, es decir, la dirección IP que el router asigna a cada ordenador, smartphones, smart TV, tablet,
videoconsola o cualquier otro dispositivo conectado a él.
Así, cada dispositivo conectado a un router tiene su propia dirección IP privada, mientras comparten la
misma IP pública para poder navegar.
4 Linux Firewall
NAT: Network Address Translator
El encargado de hacer NAT generalmente es el router, aunque linux también posee esa capacidad, ya que
los routers también en su mayoría corren un sistema operativo basado en Unix o Linux.
La similitud de las centralitas de teléfono de empresas, llamadas internas, externas.
En ocasiones es conocido como enmascaramiento de direcciones IP, ya que se encarga de enmascarar
nuestra dirección ip privada y mostrar una pública.
En realidad es conocido como enmascaramiento, eso viene de linux, la opción MASQUERADE
4 Linux Firewall
VIP/PAT /NAT outside
Esto lo aplicaremos cuando necesitamos exponer a internet un servidor que tenemos en la LAN.
Esto se puede configurar en un router o en un firewall, como decíamos anteriormente un firewall tiene
también esa capacidad de router y además proporciona seguridad, ya que según la tecnología puede
inspeccionar o controlar el tráfico en diferentes capas (MODELO OSI).
4 Linux FirewallSERVICIOS
MODELO OSI
IP
VLANS
4 Linux Firewall
El Router
El router es el encargado de enrutar el tráfico que le llega por un puerto hacia donde diga su tabla de
enrutamiento, por defecto, en los routers sencillos o domésticos la ruta es internet y no permiten realizar
configuraciones de enrutamiento.
Fuente imagen incibe.es
4 Linux Firewall
Un cortafuegos trabaja en la frontera, entre internet y la lan “red local” y por tanto es el encargado de
gestionar el tráfico saliente y el tráfico entrante.
Además, como se encuentra en el borde de la red, también hace de enrutador.
También es el encargado de hacer los nat/pat “port address translation”.
Port Address Translation (PAT) es una característica del estándar NAT, que traduce conexiones TCP y UDP
hechas por un host y un puerto, en una red externa a otra dirección y puerto de la red interna.
4 Linux Firewall
PAT/NAT outsite ejemplo:
Ejemplo de PAT servidor web:
Ip pública: 1.2.3.4
Interfaz: eth0
Ip servidor web: 192.168.1.200
Puerto usado por apache “servidor web”: 80
Regla sería: 1.2.3.4:80 → 192.168.1.200:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.200:80
4 Linux Firewall
Regla sería: 1.2.3.4:80 → 192.168.1.200:80
Siendo la red lan 192.168.1.0/24
¿Qué riesgos corremos en la configuración anterior, si un pirata informático explotara un fallo de
seguridad y consiguiera acceso al servidor web?
4 Linux Firewall
INCIBE RECOMENDACIONES
https://www.incibe.es/protege-tu-empresa/blog/dmz-y-te-puede-ayudar-proteger-tu-empresa
Fuente imagen incibe.es
4 Linux Firewall
LAN: RED DE ÁREA LOCAL
¿Qué es y cuáles son sus características?
DMZ: ZONA DESMILITARIZADA
¿Qué es y cuáles son sus características?
4 Linux Firewall
VLAN: VIRTUAL PRIVATE LAN
¿Qué es y cuáles son sus características?
SEGMENTACIÓN primer paso para proporcionar seguridad en una red, seguridad por aislamiento.
4 Linux Firewall
Fuente wikipedia vlan
4 Linux Firewall
IPTABLES
iptables es el firewall o cortafuegos por defecto de todas las distribuciones Linux actuales, sustituye
desde la versión 2.4 del núcleo de linux a ipchains, proporcionando características nuevas que facilitan la
administración de red y seguridad.
4 Linux Firewall
IPTABLES
Características:
● Permitir o denegar tráfico saliente desde la red u ordenador hacia Internet.
● Permitir o denegar tráfico entrante desde Internet a la red local.
● Traducir direcciones y puertos de red de origen, enmascarando tráfico saliente en una dirección IP
pública.
4 Linux Firewall
IPTABLES
Características:
● Traducir direcciones y puertos entrantes, permitiendo el acceso desde Internet a servidores locales
en direcciones IP privadas.
● Configuración de políticas por defecto para tráfico no clasificado.
● Redirección de tráfico entre puertos locales y servicios de capa de Aplicación (TCP/IP).
4 Linux Firewall
IPTABLES
● PREROUTING: tráfico entrante, justo antes de entrar a la pila de red del kernel. Las reglas en esta
cadena son procesadas antes de tomar cualquier decisión de ruteo respecto hacia dónde enviar el
paquete.
● INPUT: tráfico entrante, luego de haber sido enrutado y destinado al sistema local.
● FORWARD: tráfico entrante, luego de haber sido enrutado y destinado hacia otro host (reenviado).
● OUTPUT: tráfico saliente originado en el sistema local, inmediatamente después de haber entrado a
la pila de red del kernel.
4 Linux Firewall
IPTABLES
● POSTROUTING: tráfico saliente originado en el sistema local, inmediatamente después de entrar a la
pila de red del kernel.
4 Linux Firewall
Reglas básicas:
DROP Descartar paquete.
REJECT Rechazar, informa al otro extremo que ha sido rechazado.
ACCEPT dejar pasar el paquete.
QUEUE redirigir paquete.
RETURN salir de la cadena actual, continuar con la siguiente.
4 Linux Firewall
EJEMPLOS TODO BLOQUEADO Y SOLO PERMITIMOS PUNTUALMENTE
Ver reglas de iptables : Iptables -L -n
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -s 2.3.4.5 -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -j DROP
4 Linux Firewall
iptables -t nat -A POSTROUTING -s 10.1.2.0/24 -o enp0s3 -j MASQUERADE
¿Qué está haciendo esta regla?
¿Y esta?
echo 1 > /proc/sys/net/ipv4/ip_forward
4 Linux Firewall
Construyendo un firewall para una Red Local
LABORATORIO 4.1
Clonaremos Ubuntu server
35 min.
4 Linux Firewall VPN
Los sistemas operativos Linux permiten configurar túneles VPN, en túneles VPN siempre debemos separar
el lado del servidor (el que es el concentrador de VPNs) de los clientes, que son aquellos que por medio
de un cliente VPN se conectan a un servidor, para acceder a recursos remotos o para navegar a internet
por a través del servidor.
Dentro de los tipos de VPN podemos decir que los 2 tipos más usados son IPSEC y OpenVpn.
4 Linux Firewall
OpenVpn
Es una tecnología de código abierto que utiliza la biblioteca de OpenSSL y los protocolos TLS, junto
con otras tecnologías, para proporcionar una solución VPN sólida y confiable. Es el protocolo
estándar de la industria.
La fortaleza de las VPN site to site openvpn reside en que es altamente configurable, pues está
disponible en la mayoría de las plataformas a través de software de terceros.
La conexión se establece entre un openvpn server y un openvpn client.
Tal es su aceptación que existen clientes openvpn para android, windows y MacOs.
4 Linux Firewall
OpenVpn
Openvpn usa un certificado por cada usuario y además se puede proteger con usuario/contraseña, lo que
refuerza la seguridad.
Todos los fabricantes lo usan, aunque lo llamen de diferentes formas, está muy estandarizado.
Se suelen usar los puertos 1194 UDP, aunque se puede personalizar.
4 Linux Firewall IPSEC
Internet Protocol Security o IPSec asegura la comunicación del Protocolo de internet mediante la
autenticación de la sesión, y encripta cada paquete de datos durante la conexión. IPSec funciona en dos
modos:
● Modo de transporte: encripta el mensaje en el paquete de datos.
● Modo de túnel: encripta todo el paquete de datos.
Layer 2 Tunneling Protocol es un protocolo que se combina con otro de seguridad, como IPSec, para crear
una conexión VPN altamente segura. Una nota importante, L2TP es el sucesor del PPTP, el cual fue
desarrollado por Microsoft y Cisco.
L2TP vs IPSec: L2TP crea un túnel entre dos puntos de conexión, y el protocolo IPSec cifra los datos y
maneja la comunicación segura entre el túnel.
4 Linux Firewall IPSEC
IPSEC necesita una clave compartida simétrica entre las partes para encriptar y desencriptar la
comunicación con esa clave.
Además IPSEC puede usar algoritmos de encriptación diferentes, por lo que solo funcionará un tunel IPSEC
si los algoritmos de encriptación coinciden.
4 Linux Firewall IPSEC
Algoritmos de Cifrado 3DES,AES...
Los algoritmos de cifrado protegen los datos para que no puedan ser leídos por terceros mientras estén en
tránsito.
Algoritmos de Autenticación HMAC-MD5,HMAC-SHA1...
Los algoritmos de autenticación verifica la integridad y autenticidad de los datos de un mensaje.
Protocolo IKE ikev1 y ikev2
IKE (Intercambio de Claves de Internet).
Algoritmo de Intercambio de Clave Diffie-Hellman AH, ESP
4 Linux Firewall IPSEC
PUERTOS IPSEC
L2TP: utiliza el puerto 1701 con TCP
PSec / IKEv2: usa los puertos 500 y 1500 UDP
4 Linux Firewall
LABORATORIO
OPENVPN SERVER
20min.
4 Linux Firewall UFW
UFW
Uncomplicated Firewall (ufw) es un cortafuegos diseñado para ser de fácil uso desarrollado por Ubuntu.
Fuente wikipedia
4 Linux Firewall
UFW Comandos
Fuente wikipedia
4 Linux Firewall
UFW Comandos
Fuente wikipedia
4 Linux Firewall
UFW Comandos
Fuente wikipedia
4 Linux Firewall
LABORATORIO
UFW
30 min.
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Firewalld (firewall daemon), es una utilidad cuyo propósito es entregar un firewall administrado
dinámicamente, el cual cuenta con soporte para zonas de red, en las que se define el nivel de confianza de
las conexiones o interfaces de red a usar. Firewalld es compatible con las direcciones IPv4, configuración de
firewall IPv6, puentes Ethernet y grupos de direcciones IP.
Además de tener que definir reglas de acceso, los firewalls por zonas permiten visibilidad entre los host
dentro de la misma zona por defecto, muchos firewall trabajan por defecto con zonas, por ejemplo zona
pública, privada, DMZ.
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Firewalld trae algunas zonas definidas por defecto.
Drop
Esta es la zona con el nivel de confianza más bajo, debido a que todos los paquetes de entrada se rechazan
de forma automática y solo permite la habilitación de los paquetes salientes.
Block
Al usar esta zona, el nivel de confianza es similar a Drop, pero solo difiere en que los paquetes entrantes
son rechazados usando mensajes icmp-host-prohibited para IPv4 y icmp6-adm-prohibited para IPv6.
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Firewalld trae algunas zonas definidas por defecto.
Public
Con esta zona el nivel de confianza se refiere a las redes públicas no confiables, de modo que solo acepta
conexiones confiables.
External
Es el nivel definido cuando usamos el Firewall como puerta de enlace y su enmascaramiento está
habilitado por los routers.
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Firewalld trae algunas zonas definidas por defecto.
DMZ
Es una zona donde el nivel de confianza aplica a equipos situados en una zona DMZ (Desmilitarizada), esto
significa que se cuenta con acceso público con restricción a la red interna. Solo acepta conexiones aceptadas.
Internal
Este tipo de nivel aplica a redes internas, de modo que todos los equipos de la red local serán aceptados.
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Firewalld trae algunas zonas definidas por defecto.
Trusted
Significa Confianza, lo cual implica que es el nivel más alto y confía en todas las conexiones entrantes.
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Está disponible para instalar con APT.
Después de instalarlo estos son los comandos para iniciarlo:
sudo systemctl start firewalld (permite iniciar el servicio)
sudo systemctl enable firewalld (habilita el servicio durante el arranque del sistema)
sudo systemctl status firewalld (permite ver el estado del servicio)
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Comandos para administrarlo:
sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --set-default-zone=external –permanent
sudo firewall-cmd –reload
sudo firewall-cmd --zone=home --add-interface=enp0s3
sudo firewall-cmd --zone=public --add-interface=enp0s3
sudo firewall-cmd --zone=public --change-interface= enp0s3
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=home --list-all
sudo firewall-cmd --info-zone public
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Comandos para administrarlo:
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public
sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd –reload
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Comandos para administrarlo:
sudo firewall-cmd --get-icmptypes
sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply
sudo firewall-cmd --zone=home --list-icmp-blocks
4 Linux Firewall
FIREWALLD FIREWALL CON ZONAS
Comandos para administrarlo:
El modo de pánico es un modo especial integrado en Firewalld, en el cual se eliminan todos los paquetes
entrantes y salientes, y las conexiones activas expirarán una vez que este sea activado.
sudo firewall-cmd --query-panic
sudo firewall-cmd --panic-on
sudo firewall-cmd --panic-off
4 Linux Firewall
LABORATORIO
Firewalld
20min.
4 Linux Firewall
PFSENSE
pfSense es una distribución personalizada de FreeBSD adaptado para su uso, como Firewall y Enrutador. Se
caracteriza por ser de código abierto, puede ser instalado en una gran variedad de ordenadores, y además
cuenta con una interfaz web sencilla para su configuración. El proyecto es sostenido comercialmente por
Electric Sheep Fencing LLC.
https://frafiles.netgate.com/mirror/downloads/pfSense-CE-2.5.2-RELEASE-amd64.iso.gz
4 Linux Firewall PFSENSE
La siguiente lista muestra algunas funcionalidades que se incluyen predefinidamente en el sistema:
● Firewall
● State Table
● Network Address Translation (NAT)
● Alta disponibilidad
● Multi-WAN
● Balance de carga
● VPN que puede ser desarrollado en IPsec, OpenVPN y en PPTP
● Servidor PPPoE
● Servidor DNS
● Portal Cautivo
● Servidor DHCP
4 Linux Firewall
LABORATORIO
PFSENSE
30min.
4 Linux Firewall
Sistemas de protección de ataques FAIL2BAN
Fail2ban es una aplicación escrita en Python para la prevención de intrusos en un sistema, que actúa
penalizando o bloqueando las conexiones remotas que intentan accesos por fuerza bruta.
Habitualmente los servidores sufren ataques de fuerza bruta (especialmente servidores SSH, FTP, etc) con
el fin de descifrar las contraseñas y acceder a ellas. En este punto es indispensable una buena política de
contraseñas. Sin embargo, los ataques por fuerza bruta también consumen un gran ancho de banda,
disparan el volumen de los archivos de registro (logs) de nuestro sistema y ocupan ciclos de CPU, que
podrían dedicarse a tareas útiles.
4 Linux Firewall
Sistemas de protección de ataques FAIL2BAN
Este sistema lee logs y según las expresiones regulares, bloquea cualquier tipo de ataque a cualquier
aplicación que escriba un log.
La configuración de Fail2ban se encuentra en la carpeta «/etc/fail2ban/». Allí encontraremos un archivo
llamado «jail.conf» con las configuraciones del sistema. Para encontrar más información podemos abrir ese
archivo con nuestro editor preferido.
4 Linux Firewall
En la sección «[DEFAULT]» encontramos la configuración global de las opciones. Allí veremos diversas
variables que definir, como las siguientes:
● bantime: es el tiempo que una IP será baneada, expresado en segundos.
● maxretry: es el número máximo de reintentos de login, que podrán realizarse antes de que la IP sea
baneada.
● ignoreip: una lista de IPs separadas por espacios que serían ignoradas por fail2ban.
4 Linux Firewall
● Podemos crear una configuración SSH entrante de esta manera:
● [sshd]
● maxretry = 5
● bantime=10800
● Nota: «sshd» es el demonio de conexión SSH, que permite que otros usuarios se conecten con nuestro
servidor.
● Para que estos cambios tengan efecto, tenemos que reiniciar el servicio. El comando puede depender
de la distribución con la que estemos trabajando, pero en Ubuntu sería algo como esto:
● sudo systemctl restart fail2ban.service
4 Linux Firewall
LABORATORIO
Fail2ban
20 min.