Auditoría integral del firewall: ¿no se puede acceder realmente a Internet?

1

Tenemos muchos servidores Linux en varias ubicaciones conjuntas en todo el mundo. Por diseño, estas máquinas generalmente no deberían poder acceder a Internet. Según la ubicación y el rol, algunos sitios pueden tener acceso a Internet muy limitado (por ejemplo, denegar por defecto con uno o dos sitios en la lista blanca). Por lo tanto, dependiendo de las circunstancias, la política de no conexión a Internet se configura mediante reglas de enrutamiento en el nivel del conmutador o mediante un dispositivo de filtro (por ejemplo, Untangle).

Un equipo es responsable de configurar la red según la política, y un equipo independiente (yo) es responsable de la auditoría periódica para asegurarse de que las cosas realmente funcionen según lo previsto.

Por lo tanto, la pregunta es cómo comprensivamente verificar que no se pueda acceder a Internet. El método ingenuo es simplemente "hacer ping a google.com". Pero, ¿qué pasa si Internet está disponible, pero el DNS simplemente no funciona? OK, entonces haga ping a una IP pública conocida, por ejemplo, "ping 8.8.4.4". Pero, ¿qué pasa si se filtra ICMP, pero por ejemplo ¿Las conexiones TCP todavía están permitidas? ¿Qué sucede si se filtran TCP y UDP, pero no la IP sin procesar? ¿Qué sucede si el equipo de la red se dejó un pequeño agujero (no necesariamente por intención maliciosa, tal vez un error honesto, tal vez un error en el firewall o el interruptor)?

Obviamente, el ping es un buen cheque fácil cuando desea el acceso a Internet, pero es muy insuficiente para asegurar que Internet esté completamente bloqueado.

El enfoque ideal sería probar todas las combinaciones posibles de

  • puerto
  • IP pública
  • Protocolo

Pero eso no es práctico. Pero estoy buscando un compromiso razonable entre eso y una prueba de ping ingenua.

Mi idea fue tratar de usar nmap para buscar puertos abiertos en IP públicas que generalmente deberían estar arriba --- servidores DNS públicos. Entonces, por ejemplo (8.8.4.4 es un servidor DNS público):

# nmap -v -v -v -T3 -sS 8.8.4.4

Starting Nmap 6.40 ( http://nmap.org ) at 2014-03-18 10:24 CDT
Initiating Ping Scan at 10:24
Scanning 8.8.4.4 [4 ports]
Completed Ping Scan at 10:24, 0.01s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:24
Completed Parallel DNS resolution of 1 host. at 10:24, 13.00s elapsed
DNS resolution of 1 IPs took 13.00s. Mode: Async [#: 2, OK: 0, NX: 0, DR: 1, SF: 0, TR: 4, CN: 0]
Initiating SYN Stealth Scan at 10:24
Scanning 8.8.4.4 [1000 ports]
Completed SYN Stealth Scan at 10:24, 0.07s elapsed (1000 total ports)
Nmap scan report for 8.8.4.4
Host is up (0.0015s latency).
All 1000 scanned ports on 8.8.4.4 are closed

Read data files from: /usr/local/encap/nmap-6.40/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.14 seconds
           Raw packets sent: 1004 (44.152KB) | Rcvd: 1001 (40.040KB)

Esto se ejecutó desde un servidor donde se cree que el bloqueo de acceso a Internet funciona correctamente. Sin embargo, ¿por qué dice "Host is up"? ¿Cómo lo sabe? Un simple ping falla y no puedo usar ese servidor con dig.

Tenía la esperanza de salirme con un simple script que buscaba "Host is up" para marcar el acceso a Internet, pero parece que eso generaría demasiados falsos positivos.

¿Alguien tiene mejores sugerencias o enfoques para este problema?

    
pregunta Matt 18.03.2014 - 16:37
fuente

4 respuestas

2

Por lo que está describiendo, diría que la única forma de lograr su objetivo es una auditoría con credenciales del servidor y el firewall, en lugar de la exploración de la red desde el servidor.

La razón de esto es que el tráfico saliente solo se permite a un solo puerto alto en un solo host, no hay forma de que el método de escaneo de puertos encuentre eso.

Recomiendo hacer una revisión manual del conjunto de reglas del cortafuegos para asegurarse de que las reglas funcionen como se pretende. Dependiendo de lo que se use / de cuán familiarizado esté con ese tipo de cosas, puede hacerlo manualmente o usar algo como nipper para ayudar .

Para explicar lo que está viendo en el escaneo del puerto.

Todos los puertos responden como cerrados en lugar de filtrados. Esto es algo inusual para una conexión con firewall, ya que la mayoría de los firewalls eliminarán el tráfico bloqueado en lugar de rechazarlo explícitamente.

Sin embargo, eso explica por qué nmap piensa que el host está activo. Nmap utiliza un par de mecanismos para determinar que un host está activo y uno de ellos es un ping TCP (consulte la sección -sP de esta página) ). Si obtiene una respuesta a eso, se supone que el host está activo. Como su servidor de seguridad parece estar respondiendo con RST / ACK (el mensaje cerrado), esto causaría que nmap piense que todo está funcionando, ya sea que esté o no.

    
respondido por el Rоry McCune 18.03.2014 - 17:19
fuente
0

En una vida anterior usamos una herramienta llamada Firemon para hacer esto. Firemon no realiza pruebas físicas "reales / en vivo" basadas en el host, como las que se describen anteriormente, sino que analiza las reglas del firewall y luego determina qué puertos pueden estar abiertos.

Uno de los informes que pudimos ejecutar sería determinar qué puertos / protocolos están permitidos entre dos hosts. Incluso podría expandir eso para comparar puertos / protocolos entre dos redes.

Por supuesto, esto solo le daría resultados válidos si sabe que no hay forma de que el tráfico de su servidor pase por alto su firewall. Esto podría requerir una revisión de la arquitectura de la red y luego una prueba de tráfico básica para determinar la ruta de los paquetes, etc.

Si reúne algunas de esas pruebas, probablemente pueda lograr lo que desea hacer sin tener que escanear a Internet. No es una prueba física real, pero le daría cierto nivel de confianza. (es decir: no está probando que el firewall no tenga fugas). Luego, puede combinar esto con el registro de sus enrutadores e interruptores y listas de observación en una solución de tipo SIEM. IE: alerta si el host de ShouldNotHitInternetList se comunica con una ip no local.

Puede comenzar a organizar una serie de controles que le darán la confianza que necesita.

    
respondido por el CtrlDot 18.03.2014 - 16:54
fuente
0

Por lo tanto, un escaneo SYN no le mostrará ninguna conexión basada en UDP, puertos abiertos, etc., ni hará nada en contra de, digamos, túneles ICMP. Pero volvamos a lo básico aquí. Tiene un objetivo, evitar conexiones o, más bien, auditar esas conexiones. Para eso, solo debes auditar las reglas de FW para los principiantes. Por ejemplo,

iptables -L -n 

Lo que le mostrará qué reglas se están ejecutando actualmente en una máquina. Si fuera yo, lo diagramaría todo (Visio). Qué servidores realizan qué tareas y qué reglas de firewall se implementan actualmente en esos servidores. ¿Coinciden con lo que necesitas / quieres hacer / se está haciendo?

Yo: Instalaría syslog remoto (syslog-ng) con TODOS los paquetes / conexiones que se están registrando, a los que puedo poner en algo como Splunk para análisis y alertas. Tal vez incluso lanzando AlienVault para alertarme de anomalías, etc. No me molestaría en escanear una vez que lo haga. auditado las reglas de fw, mi objetivo sería saber / entender lo que está llegando y dejar mis servidores. Para eso, tendría un análisis de archivo de registro (syslog remoto) y preferiblemente un SIEM.

    
respondido por el munkeyoto 18.03.2014 - 18:12
fuente
0

Si fuera yo, entonces mi primera línea de defensa para un servidor coubicado estaría en el mismo servidor. No tengo acceso a todos los otros dispositivos involucrados en mover datos alrededor del centro de datos. No tengo tiempo para probar todos los cambios aplicados en el centro de datos (incluso si los operadores me lo han dicho).

Lo que describe puede implementarse en unas pocas reglas de iptables sin estado, que ofrecen una prueba por inducción de que el sistema se comportará como se define. Estaría tentado de ir un paso más lejos y asegurarme de que no haya una ruta predeterminada configurada en los dispositivos, solo para los puntos finales definidos explícitamente.

    
respondido por el symcbean 19.03.2014 - 13:54
fuente

Lea otras preguntas en las etiquetas