Tipos de Malware

Preview:

Citation preview

Seguridad2013-2014

Cortafuegos: iptables

Recorrido de un paquete en Netfilter

InputChain

Route

FORWARD

Chain

Output

Chain

DROP

DROP

LocalProcesses

DROP

2

Cadenas de filtrado y tablas

iptables opera sobre el concepto de tablas separadas para distintas funcionalidades de procesamiento de paquetes: Tabla filter Tabla nat Tabla mangle

Por defecto, se opera sobre la tabla filter

3

Tabla filter

Tabla por defecto Permite (para tanto INPUT, OUTPUT y FORWARD

como para otra que quisiéramos definir): Operaciones sobre los paquetes:

Aceptar: ACCEPT Descartar: DROP Rechazarlo: REJECT Log: LOG y ULOG Otras: CLASSIFY, CONNMARK, TRACE, BALANCE Y CLUSTERIP

Selecciona paquetes basándose en cualquier campo, en la longitud del paquete, en el instante de recepción, en el número de orden, en la tasa de llegada…

4

Tabla nat

Para funcionalidad de NAT. Permite las siguientes acciones:

Source NAT: SNAT Destination NAT: DNAT MASQUERADE: (SNAT con IP dinámica) REDIRECT: caso especial de DNAT que redirige el

paquete al equipo local con independencia de la IP destino. Ej. Proxy transparente

5

NAT con iptables

iptables permite NAT fuente, destino y de puerto. Podemos modificar la dirección y puerto tanto fuente

como destino. Tiene 3 cadenas predefinidas:

PREROUTING: especifica cambios en el destino de los paquetes entrantes antes de que sean enrutados (DNAT)

OUTPUT: permite especificar cambios a los paquetes generados localmente antes de que se les aplique la decisión de encaminamiento (DNAT, REDIRECT)

POSTROUTING: especifica cambios en la dirección fuente de los paquetes que se enruten, después de que hayan sido enrutados (SNAT, MASQUERADE)

6

Recorrido de un paquete en Netfilter: NAT

InputChain

Route

Forward Chain

Output

Chain

Drop

DROP

LocalProcesses

Drop

Source NAT Post-routing

Destination NAT

Prerouting

7

Tabla mangle

La tabla mangle permite “marcar” los paquetes así como cambiar los paquetes antes de enviarlos al destino

Uso: QoS usando Linux (wondershaper)Cinco cadenas:

PREROUTING INPUT: después de PREROUTING POSTROUTING FORWARD OUTPUT

8

Manejo básico de Iptables

Con iptables manipularemos las tablas anteriores que especifican procesado de paquetes sobre alguna de las cadenas que hemos visto filter: INPUT, OUTPUT, FORWARD nat: PREROUTING (DNAT, REDIRECT), OUTPUT

(DNAT/REDIRECT), POSTROUTING (SNAT/MASQUERADE)

mangle: PREROUTING, INPUT, FORWARD, POSTROUTING, OUTPUT

9

Manejo básico de iptables

Se opera sobre una tabla de una de las cadenas Siempre hay que especificar la cadena Si no se especifica la tabla se asume que se modifica filter Operaciones sobre cadenas enteras:

Acción por defecto: iptables -P cadena accion

iptables –P INPUT DROP

Borrar las reglas: iptables –F cadena

Listar las reglas: iptables –L [cadena]

Resetear contadores de cadena: iptables –Z [cadena]

10

Iptables: operaciones sobre reglas

Añadir: iptables –A <cadena> <regla>

Insertar en una posición concreta: iptables –I <cadena> <número_de_orden> <regla>

Reemplazar: iptables –R <cadena> <número> <regla>

Borrar: iptables –D <cadena> <número> <regla>

11

Reglas en iptables

Hay que especificar: Paquetes a los que se aplica la regla Acción que se ejecutará (-j)

ACCEPT y DROP son las básicas

Se puede filtrar basándose en casi cualquier cosa: Interfaz de entrada (-i) Interfaz de salida (-o) Protocolo: tcp, udp, icmp (-p) IP origen (-s) o destino (-d)

12

Reglas en iptables

Hay posibilidades adicionales de filtrado: Si usamos –p tcp:

Puertos origen (--sport) y destino (--dport) (también válida para –p udp)

Flags (--tcp-flags) SYN flag (-syn)

Si usamos –p icmp: Tipo: --icmp-type

Lista de puertos (-m multiport): Puertos fuente:

-m multiport --source-port 1024,1025,1026 Puertos destino

13

Reglas en iptables: estado

Es el módulo más interesante Se habilita en una regla empleando –m state Estados soportados:

NEW: Segmento TCP con SYN activo o primer paquete UDP

ESTABLISHED: comunicación en curso. Permite también enviar respuestas a los pings que recibimos sin habilitar estas respuestas explícitamente.

RELATED: INVALID: situaciones raras

14

Construir un firewall

Vamos a ver cómo construir un firewall basado en iptables paso a paso

Crearemos un script de shell que contendrá las reglas

El script será parametrizable para facilitar su modificación, lectura y comprensión IPT=“/sbin/iptables” INTERNET=“eth0” PRIVPORTS=“0:1023” UNPRIVPORTS=“1024:65535”

15

Paso 2: Habilitar protecciones del kernel

Ignoramos ping a broadcastDeshabilitamos encaminamiento de fuenteHabilitamos SYN Cookies para detectar y

recuperarnos de un ataque de SYN floodDeshabilitamos el ICMP redirectHabilitamos rp_filterRegistramos paquetes recibidos con direcciones

raras

16

Paso 3: Reseteamos el fw

Eliminamos reglas existentesReseteamos las políticas por defecto a ACCEPT

iptables –F iptables –t nat –F iptables –t mangle –F iptables –X iptables –t nat –X iptables –t mangle –X

17

Paso 4: Habilitamos la interfaz lo

Todo el tráfico de la interfaz de loopback debe estar habilitado para que el equipo funcione: iptables –A INPUT –i lo –j ACCEPT iptables –A OUTPUT –o lo –j ACCEPT

18

Paso 5: Definimos la política por defecto

La política por defecto debería ser DROP. La establecemos para todas las tablas: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -t nat -P PREROUTING DROP iptables -t nat -P OUTPUT DROP iptables -t nat -P POSTROUTING DROP iptables -t mangle -P PREROUTING DROP iptables -t mangle -P PREROUTING DROP iptables -t mangle -P OUTPUT DROP

19

Paso 6: Comprobamos flags

Realizamos una serie de comprobaciones de combinaciones raras de flags TCP para evitar escaneos: iptables –A INPUT –m unclean DROP iptables –A INPUT –p tcp –tcp-flags ALL NONE –j DROP iptables –A INPUT –p tcp –tcp-flags SYN, FIN SYN,FIN –j

DROP iptables –A INPUT –p tcp –tcp-flags SYN,RST SYN,RST –j

DROP iptables –A INPUT –p tcp –tcp-flags SYN,RST SYN,RST –j

DROP iptables –A INPUT –p tcp –tcp-flags FIN,RST FInN,RST –j

DROP iptables –A INPUT –p tcp –tcp-flags ACK,FIN FIN –j DROP iptables –A INPUT –p tcp –tcp-flags ACK,PSH PSH –j DROP iptables –A INPUT –p tcp –tcp-flags ACK,URG URG –j DROP

20

Paso 7: Permitimos las conexiones establecidas y relacionadas

iptables –A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

iptables –A OUTPUT -m state --state ESTABLISHED, RELATED --j ACCEPT

21

Paso 8:Rechazamos las direcciones “extrañas”

Rechazamos los paquetes entrantes por una interfaz provenientes de otra interfaz de la máquina y las direcciones privadas

Rechazamos los ping a direcciones de broadcast (dirección de la red y dirección de broadcast de la red)

Rechazamos paquetes con direcciones de multicast (clase D) que no vaya sobre UDP

Rechazamos las direcciones definidas como reservadas por el IANA 0.*.*.*, 169.254.0.0/16, 192.0.2.0/24

22

Paso 9: Impedimos las conexiones a puertos no privilegiados

X Windows iptables –A OUTPUT –o $INTERNET –p tcp –syn –destination-port $XWINDOW_PORTS –j REJECT

NFS, OpenWindows, SOCKS o SQUID: iptables –A OUTPUT –o $INTERNET –p tcp –m multiport –destination-port $NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT –syn –j REJECT

iptables –A INPUT –i $INTERNET –p tcp –m multiport –destination-port $NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT –syn –j REJECT

Para UDP debería considerar NFS y RPC lock (4045)

23

Paso 10: Habilitamos los servicios que necesitemos

Empezando por DNS Todo se simplifica mucho si usamos el módulo state Ejemplo DNS:

iptables -A OUTPUT –o $INTERNET –p udp –s $IP –sport $UNPRIVPORTS –d $NAMESERVER –dport 53 –m state –state NEW –j ACCEPT

iptables -A OUTPUT –o $INTERNET –p tcp –s $IP –sport $UNPRIVPORTS –d $NAMESERVER –dport 53 –m state –state NEW –j ACCEPT

24

Ejemplo: FTP

Cliente FTP: (requiere cargar el módulo del kernel ip_conntrack_ftp): iptables –A OUTPUT -o $INTERNET –p tcp –s $IP –sport $UNPRIVPORTS –dport 21 –m state NEW -j ACCEPT

Modo activo: iptables –A INPUT –i $INTERNET –p tcp –sport 20 –d $IP –dport UNPRIVPORTS –m state –state ESTABLISHED,RELATED –j ACCEPT

Modo pasivo: iptables –A OUTPUT –o $INTERNET –p tcp –s $IP –sport 1024: $UNPRIVPORTS –dport 1024: -m state --state RELATED –j ACCEPT

25