Whitelisting en SCI (Parte I)

Anuncios

En diciembre de 2015 el ICS-CERT publicaba un documento sobre las 7 estrategias que pueden ser implementadas para contrarrestar las debilidades más comunes en los sistemas de control industrial. El resumen y enlace lo podéis encontrar aquí.

Hoy vamos a hablar sobre la primera de ellas, “Application Whitelisting (AWL), o “Listas Blancas de Aplicaciones”. Veamos de qué se trata.

AWL ofrece un enfoque distinto respecto a la seguridad de un host más allá de un HIDS/HIPS, antivirus u otras tecnologías basadas en “Lista Negras», o “Blacklists”. Una solución este tipo, compara el objeto monitorizado contra una lista de lo que es conocido como “malo”, no permitiéndose ejecutar. Esto presenta dos problemas; uno, que la “Lista Negra” debe ser actualizada periódicamente, lo cual conlleva una labor de administración importante; y la segunda, que no hay forma de detectar ataques “zero-days”. O bien, no estén disponibles aún las actualizaciones de las que sí se conozcan.

Por el contrario una “Lista Blanca” crea una lista de lo que es conocido como “bueno” y le aplica un criterio simple: si no está en la lista, se bloquea.

Las soluciones basadas en “Listas Blancas” emplean esta lógica sobre aplicaciones y ficheros de un equipo tipo PC, Thin Client o cualquier otro dotado con un Sistema Operativo compatible. Por ejemplo, si un malware consigue vencer el perímetro de seguridad, y encontrar la forma de llegar a un equipo éste evitará su ejecución puesto que no se encuentra en su lista blanca. No lo “mata” pero lo “frena”. También puede ser empleado para prevenir la instalación de software autorizado en el sistema.

Los distintos antivirus dependen de continuas actualizaciones de sus firmas. A medida que éstas aumentan, y con toda certeza, la demanda de recursos también. Esto sobre hardware relativamente nuevo puede no llegar a ser un problema pero en entornos industriales donde el ciclo de vida es mucho mayor, puede afectar al rendimiento del equipo. Eso hablando de Sistemas Operativos que aún tienen soporte y del que existan productos comerciales compatibles.

Para el caso de estos Sistemas Operativos “legacy”, AWL es una buena solución ya que al no disponer de parches o actualizaciones, si un malware quisiera aprovechar una de ellas, y al no estar definido en la lista, no podría ejecutarse o realizar cambios en el sistema. Aparte, aunque las hubiera, tampoco sería necesario (aunque si aconsejable), su instalación (previa descarga, testeo y evaluación, claro) ya que sólo sería necesario actualizar las AWL cuando lo hagan las aplicaciones.

A diferencia de los de los antivirus los cuales pueden registrar un aumento en el uso de CPU o memoria en el momento de lleva a cabo el análisis, con AWL puede definirse un comportamiento base después de la instalación puesto que éste se mantiene relativamente estable durante su operación.

AWL se ubica dentro de las estrategias de Hardening de sistemas, como por ejemplo HMI, estaciones de trabajo u otro tipo de equipos involucrados en las áreas de automatización. No obstante, algunos fabricantes de este tipo de soluciones han incorporado más funcionalidades a las propias del control de aplicaciones, como pueden ser el control de dispositivos USB (fuente de infección y propagación), reporting con mayor y menor detalle de eventos en el sistema, creación dinámica de las Listas, Sandboxing, etc.

En el siguiente enlace podréis encontrar un informe sobre algunos aspectos adicionales sobre “Whitelisting” elaborado por el ICS-CERT. Enlace.

La administración puede efectuarse en modo Stand-Alone, esto es actuando sobre el agente o bien de forma centralizada desde un servidor.

Para esta entrada he elegido Symantec Embedded Security: Critical System Protection una solución que va orientada en esta línea.

En mi caso he desplegado el siguiente entorno virtual simulando distintos entornos:

El esquema lo he “decorado” con supuestos equipos conectado, aunque lo relevante aquí son los PC que quedan definidos de la siguiente manera:

Windows 2012 R2: 192.168.10.254/24

Windows XP: 192.168.10.10/24

Windows 7: 192.168.10.20/24

Windows 2000: 192.168.10.30/24

La solución cuenta con 3 componentes principales; el software del servidor de gestión; el cliente pesado (consola), para conectarse al servidor de gestión; y el agente que se instala en los equipos finales. Para el ejemplo he utilizado la versión 6.5.1 para todos los componentes, excepto para el Windows 2000 que ha sido la 5.2.4 por temas de compatibilidad. Además de esto, conviene resaltar algunas consideraciones más:

El servidor para  su funcionamiento requiere de una base de datos. Dependiendo del número de equipos podremos que ésta resida en el mismo o en uno dedicado. Para esta ocasión he seleccionado la “Express”, no recomendable para un entorno de producción.

Los puertos empleados, importante si estamos detrás de un Firewall, son:

En lo referente a los agentes comentar el error que surge en sistemas operativos Windows 7 Professional ya que éstos requieren de un controlador firmado. En mi caso he aplicado los parches correspondientes y no ha habido más problemas. Más información aqui.

La instalación de los “Agentes” no es compleja. A lo largo del proceso habrá que definir el tipo de administración; funcionalidad IDS, IPS (o ambas); IP del servidor; certificado para el cifrado de las comunicaciones.

A partir de aquí a través del cliente pesado nos logueamos en el servidor y podremos ver nuestros equipos.

Desde la consola central tendremos varias pestañas, en “Home” localizaremos información básica.

Aquí conviene destacar dos conceptos importantes en “Prevention” y “Detection”. “Prevention” hace referencia a aquello que se permite, o no, esto es aplicaciones (Whitelisting), Usuarios que pueden hacer cambios, Sandboxing, etc. Mientras que “Detection” hace referencia a todo aquello que se registra o notifica, como si un usuario se ha logueado incorrectamente, intento de cambio en un registro, de conexión por red, etc. En cada equipo deberá aplicarse una política de cada. Cada una de ellas se podrá (y deberá) configurar según las características del equipo, con lo que se deberá permitir o no. En el caso de las de “Whitelisting” la herramienta emplea distintas “Sandboxes” predefinidas, aunque podremos crear las nuestras propias.

Por defecto la herramienta viene con un conjunto de políticas hechas, las cuales podremos copiar y ajustar según nuestras necesidades. Para ello se definen tres estrategias “Basic”, “Hardened” y “Protected Whitelisting”.

Con esta entrada de hoy hemos hecho una introducción a un software de Whitelisting para bastionar nuestros sistemas, en concreto bajo sistemas operativos Windows, aunque la compatibilidad del producto se extiende a Linux también.

En entras sucesivas iremos descubriendo más información al respecto.

Nos vemos en la siguiente!!

Nmap sobre SCI, sí pero con cuidado…

Anuncios

No hace mucho hablaba con una persona sobre la realización de auditorías en entornos industriales y de sus peculiaridades con respecto a los de IT. Aunque la metodología puede ser similar, no podemos considerarla igual.

Veamos porqué. El ciclo de vida de los dispositivos de Control y Automatización Industrial, y los equipos asociados como PCs, HMI, etc. es mucho mayor que los de IT. En concreto sobre estos últimos, provoca que nos encontremos con hardware con menos recursos que en los actuales, y Sistemas Operativos fuera de soporte como Windows 2000 o XP. Vulnerables y muy golosos para explotar alguna de ellas.

Para el caso de los PLCs, éstos disponen de muy pocos recursos en sí mismos. Podemos hablar de unos pocos Megas de memoria, véase el siguiente enlace el punto 8.1.4 página 148. Hablamos de expansiones de 4 y 2 Megas como máximo para el modelo de Siemens S7-300. A menudo podremos ver tarjetas dedicadas para las comunicaciones tanto de bus de campo como basados en Ethernet y así liberar a la CPU de este tipo de tareas. Un ejemplo de ello es la CP-343 de Siemens.

Uno de los aspectos que está permitiendo el desarrollo de la Cuarta Revolución Industrial, la llamada Industria 4.0, es la integración de protocolos de comunicaciones basados en Ethernet en lugar de los clásicos de campo bajo RS-485 o RS-422, entre otros. Esto no sólo permite su incorporación a las redes IT tradicionales, siempre y cuando las latencias en los procesos sean asumibles, sino su acceso por medio de servicios basados en TCP/IP y uso de protocolos como HTTP, NTP, SNMP o DNS.

Si unimos ambos puntos, hardware limitado y protocolos TCP/IP, un mal empleo de los mismos, o excesivo, podría llegar a colapsar o provocar un mal funcionamiento, comprometiendo así la disponibilidad que se requiere. Esto provoca que un DoS sea fácil de llevar a cabo si no se adoptan medidas adicionales que lo mitiguen.

Por ello es especialmente importante tener en cuenta, cuando llevemos a cabo una auditoría o pentesting contra este tipo de equipos y entornos, ser muy cautos en todos los pasos que llevemos a cabo. Sin pretenderlo, podremos dejar fuera de servicio una instalación al completo si bloqueamos el autómata que lo gobierna. He visto esta situación frente a un escaneo de la herramienta Qualys. Sobre esto también hay que puntualizar que depende también, cómo esté conectado a la red, pero eso es otro cantar.

Dentro de los primeros pasos en una auditoría es la detección de host, servicios, versiones, etc. dentro de la fase de Recolección de Información. La herramienta estrella es Nmap (he aquí una Guía muy buena), la cual podremos emplear tanto por línea de comandos como por medio de su GUI, Zenmap. En cualquiera de los casos deberemos tomar ciertas precauciones, especialmente en pruebas de Pentesting de Caja Negra donde no sabemos ni lo que nos vamos a encontrar. Por ello resulta necesario ser cauto y emplear Nmap con una serie de parámetros para que las “sondas” que envía no dañen nuestro equipo final.

Veamos pues:

 

1.- No es aconsejable emplear las opciones -O de detección de Sistema Operativo. Esto genera una gran cantidad de tráfico. Mucho menos -A (Aggressive) que además de lo anterior incluye detección de servicios, –sV; ejecuta scipts de escaneo, –sC y traceroute, –traceroute.

2.- Emplear templates -T0, -T1 y -T2. Estos plantillas introducen ciertos cambios en los escaneos con las opciones más comunes. Por defecto nmap utiliza el equivalente  a -T3. Sobre todo lo hacen esperando más tiempo entre sonda y sonda. Es muy común emplearlo para evadir controles de Firewall e IDS/IPS.

3.- No utilizar el escaneo –sU, ya que no contiene payload y al no cumplir con el estándar podría tenerse un comportamiento inesperado.

4.- Si vamos a detectar equipos activos en nuestra misma subred, emplear la opción  -PR con la que realizaremos escaneo empleando peticiones ARP.

5- Emplear modificaciones en los temporizadores:

Importante señalar -scan-delay > 1 segundo y -max-parallelism  = 1

6.- No seleccionar gran cantidad de puertos, mejor especificar uno por uno aunque lleve mayor cantidad de tiempo.

7.- Si empleamos scripts, lanzar de uno en uno aunque podamos ejecutar varios a la vez.

Como podemos comprobar no tiene mucho misterio las pautas a seguir, basta con ser un poco cuidadoso y no lanzar la herramienta a lo bruto. Demás está decir que todas estas pruebas habremos de hacerlas sobre un entorno de laboratorio o de pruebas. Si lo hacemos en “producción” las consecuencias pueden ser impredecibles y catastróficas. No es un tema para jugar…

Como siempre, mucho cuidado.

Un saludo!

Moki, script para herramientas ICS/SCADA

Anuncios

Muchas son las distribuciones y compilaciones de software para llevar a cabo auditorías, investigaciones, test de penetración y pruebas varias sobre redes y sistemas.  Si bien muchas de ellas tienen características similares, cada cual tiene sus peculiaridades.

Como habréis podido comprobar la que más utilizo para mis entradas es Kali Linux, pero como decía no es la única. Por nombrar otras encontramos a Bugtraq, NST o para entornos inalámbricos WifiSlax. También, como no, la excelente labor de Oscar Banchiero con su compilación de herramientas para Windows llamada Pengowin.  Hace poco he descubierto otra pero me la reservo para una entrada futura, 😉

No obstante puede ser que no encontremos alguna aplicación concreta, descatalogada o bien que tengamos una distribución al uso y que queramos instalarla.

Para la entrada de hoy voy a hablar sobre la primera de las opciones, en concreto de unas aplicaciones dirigidas a entornos de Sistemas de Control Industrial. Hablamos de Moki Linux.

Moki Linux es una modificación de Kali mediante la incorporación de varias herramientas para entornos ICS y SCADA  recolectadas en Internet para crear una versión personalizada orientada a profesionales del pentesting. En realidad se trata de un script que descargará una serie de aplicaciones y las instalará en nuestro equipo.

Para hacernos con él deberemos descargarlo para su posterior ejecución:

wget https://goo.gl/Sn7Cwi -O setup.sh

Luego habrá que cambiar los permisos de ejecución. Puesto que es para un entorno de test, no me he querido complicar y le he metido “777”

# chmod 777 setup.sh

Mediante el parámetro –h veremos las características de cada uno de los modos de instalación. No obstante si abrimos el fichero setup.sh vemos qué implican los modos “ofensive”, “defensive”, “all”, etc.

En mi caso instalaré todas las herramientas con la opción –all   aunque podríamos hacerlo de forma más selectiva.

#sh setup.sh –all

 

En este caso no voy a realizar ejemplos ya que las utilicé en la segunda entrega sobre la creación de un honeypot para Sistemas de Control Industrial, Conpot. En ella, lanzaba las aplicaciones previamente instaladas con Moki y registraba el comportamiento en él. Estas son:

Conpot, Honeypot para ICS (Parte II)

Conpot, Honeypot para ICS (Parte I)

Otra entrada corta la de hoy, pero aunque sea poco, haya aportado ago.

Un saludo, nos vemos en la próxima!