Script PowerShell WinRM para descubrir Hidden Networks
Hace tiempo nuestro compañero Chema Alonso habló en un artículo de las Hidden Networks que se crean en las organizaciones gracias al - o por culpa del - uso de los dispositivos de almacenamiento USB. En el equipo de ideas locas de CDO de Telefónica estamos trabajando en diferentes experimentos y uno de ellos tiene que ver precisamente en cómo descubrirlas de forma rápida para tener un mapa actualizado de estas redes.
Antes de nada, vamos a repasar someramente lo que son las Hidden Networks y por qué son importantes ya que, seguramente, muchos administradores desconocerán estos riesgos. Cómo se menciona en el artículo de 2014 sobre las Hidden Networks, muchas organizaciones hablan de segmentos de redes aislados controlado e tráfico de uno a otro por un dispositivo de seguridad de red, pero, ¿realmente están aisladas? ¿o están unidas gracias a los dispositivos de almacenamiento USB?
Las redes de equipos aislados como, por ejemplo, una red de sistemas de control de fábricas puede estar aislados por seguridad. Esto sería algo lógico, pero si repasamos la historia de la informática nos encontramos con incidentes como Stuxnet, el cual se coló totalmente en una red aislada. Y recientemente hemos sabido del software de Brutal Kangaroo de la CIA que utilizaba los dispositivos de almacenamiento USB para infectar equipos totalmente desconectados.
En otras palabras, la historia nos ha demostrado que para tener una red aislada no es suficiente con tener una red de equipos no conectados con cable Ethernet o ß, y que para contener lo que pasa en una red de una empresa, no es suficiente con segmentar las conexiones de red con Routers, Firewalls o Switches L3. Es decir, cualquier conexión que tengamos con el exterior, por ejemplo, a través de un puerto USB, puede conllevar una amenaza y la materialización de ésta provocando un incidente de seguridad.
PoC: Descubriendo a los USB que crean tus Hidden Networks
Hoy queremos mostrar un pequeño ejemplo en forma de prueba de concepto. Mi compañero Francisco José Ramírez ha creado un script en Powershell aprovechándose de la característica de gestión remota de Powershell WinRM. Esta característica permite a los administradores de IT poder lanzar instrucciones remotamente través de un dominio de Microsoft Windows. Existe una rama del registro que almacena los dispositivos que se conectan al equipo, como ya explicaba Chema Alonso en su artículo.
Estos datos se pueden obtener en la siguiente ruta del registro SYSTEM\CurrentControlSet\Enum\USBSTOR, así que con un poco de programación podríamos ver todos los de los equipos de nuestra red. El código a modo de prueba de concepto en Powershell tiene el siguiente aspecto:
Este hecho, puede ayudarnos a relacionar qué equipos han insertado el dispositivo USB, es decir, por cuáles equipos ha ido pasando el mismo dispositivo USB. Incluso, se puede trabajar en un timeline de un dispositivo USB y los equipos por los que ha ido pasando para conocer, en un momento de crisis, cuál ha sido el camino seguido de la infección, por lo que tener estos logs diarios en tu organización es de gran valor.
Nosotros hemos utilizado una herramienta llamada Gephi para realizar un grafo que relaciona diferentes equipos, que harán de nodos, con dispositivos USB insertados en esos equipos, que serán sus aristas. Cuando dos equipos tienen una unión, significa que dicho USB ha estado conectado en ambos creando una Hidden Network temporal dentro de la organización. Incluso, una red segmentada o equipos que se encuentran en diferentes VLANes pueden quedar expuestos ante este tipo de redes ocultas.
Os dejamos un video dónde se puede ver a Hidden Networks actuando sobre un dominio de Microsoft Windows. ¿Has comprobado en tu red corporativa dónde se encuentran tus redes ocultas? ¿Has mapeado sobre un plano de red tus posibles redes ocultas? ¿Tienes estos logs bien guardados? Lógicamente, en este proceso nos quedarían aún los equipos macOS de Apple, pero esto lo vamos a atacar desde otra perspectiva que ya os contaremos más adelante.
Autores: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths y Fran Ramirez (@cyberhadesblog) escritor de libro "Microhistorias: anécdotas y curiosidades de la historia de la informática" e investigador en ElevenPaths
Figura 1: Script PowerShell WinRM para descubrir Hidden Networks |
Antes de nada, vamos a repasar someramente lo que son las Hidden Networks y por qué son importantes ya que, seguramente, muchos administradores desconocerán estos riesgos. Cómo se menciona en el artículo de 2014 sobre las Hidden Networks, muchas organizaciones hablan de segmentos de redes aislados controlado e tráfico de uno a otro por un dispositivo de seguridad de red, pero, ¿realmente están aisladas? ¿o están unidas gracias a los dispositivos de almacenamiento USB?
Figura 2: Lista de dispositivos USB conectados a un equipo Mac OSX |
Las redes de equipos aislados como, por ejemplo, una red de sistemas de control de fábricas puede estar aislados por seguridad. Esto sería algo lógico, pero si repasamos la historia de la informática nos encontramos con incidentes como Stuxnet, el cual se coló totalmente en una red aislada. Y recientemente hemos sabido del software de Brutal Kangaroo de la CIA que utilizaba los dispositivos de almacenamiento USB para infectar equipos totalmente desconectados.
Figura 3: Brutal Kangaroo para infectar discos -USB |
En otras palabras, la historia nos ha demostrado que para tener una red aislada no es suficiente con tener una red de equipos no conectados con cable Ethernet o ß, y que para contener lo que pasa en una red de una empresa, no es suficiente con segmentar las conexiones de red con Routers, Firewalls o Switches L3. Es decir, cualquier conexión que tengamos con el exterior, por ejemplo, a través de un puerto USB, puede conllevar una amenaza y la materialización de ésta provocando un incidente de seguridad.
PoC: Descubriendo a los USB que crean tus Hidden Networks
Hoy queremos mostrar un pequeño ejemplo en forma de prueba de concepto. Mi compañero Francisco José Ramírez ha creado un script en Powershell aprovechándose de la característica de gestión remota de Powershell WinRM. Esta característica permite a los administradores de IT poder lanzar instrucciones remotamente través de un dominio de Microsoft Windows. Existe una rama del registro que almacena los dispositivos que se conectan al equipo, como ya explicaba Chema Alonso en su artículo.
Figura 4: Claves del registro con IDs de discos USB conectados |
Estos datos se pueden obtener en la siguiente ruta del registro SYSTEM\CurrentControlSet\Enum\USBSTOR, así que con un poco de programación podríamos ver todos los de los equipos de nuestra red. El código a modo de prueba de concepto en Powershell tiene el siguiente aspecto:
$Key = "SYSTEM\CurrentControlSet\Enum\USBSTOR"
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($Hive,$Computer)
$USBSTORKey = $Reg.OpenSubKey($Key)
ForEach($SubKey1 in $USBSTORSubKeys1)
{
$Key2 = “SYSTEM\CurrentControlSet\Enum\USBSTOR\$SubKey1”}#end foreach SubKey1
$RegSubKey2 = $Reg.OpenSubKey($Key2)
$SubkeyName2 = $RegSubKey2.GetSubKeyNames()
$Subkeys2 += “$Key2\$SubKeyName2”
$RegSubKey2.Close()
ForEach($Subkey2 in $Subkeys2)En breve lo subiremos al Github de ElevenPaths para que podáis utilizarlo a través de la característica WinRM. En la siguiente imagen os mostramos cómo ejecutando el script HiddenNetworks sobre un dominio que tiene varios equipos se puede hacer un listado de dispositivos USB que fueron insertados en dichos equipos, y estos podrían ser discos de almacenamiento, webcams o cualquier otro dispositivo que pueda realizar una función "polinizadora" de tu red.
{
$USBKey = $Reg.OpenSubKey($Subkey2)}
$USBDevice = $USBKey.GetValue('FriendlyName')
$USBContainerID = $USBKey.GetValue('ContainerID')
If($USBDevice)
{
$USBDevices += New-Object -TypeName PSObject -Property @{}
USBDevice = $USBDevice
USBContainerID = $USBContainerID
USBComputerName= $ComputerName
ComputerIP = $ComputerIP
}
$USBKey.Close()
Figura 5: Dispositivos USB detectados por cada equipo |
Este hecho, puede ayudarnos a relacionar qué equipos han insertado el dispositivo USB, es decir, por cuáles equipos ha ido pasando el mismo dispositivo USB. Incluso, se puede trabajar en un timeline de un dispositivo USB y los equipos por los que ha ido pasando para conocer, en un momento de crisis, cuál ha sido el camino seguido de la infección, por lo que tener estos logs diarios en tu organización es de gran valor.
Figura 6: Grafo de conexiones USB en la red hecho con Gephi |
Nosotros hemos utilizado una herramienta llamada Gephi para realizar un grafo que relaciona diferentes equipos, que harán de nodos, con dispositivos USB insertados en esos equipos, que serán sus aristas. Cuando dos equipos tienen una unión, significa que dicho USB ha estado conectado en ambos creando una Hidden Network temporal dentro de la organización. Incluso, una red segmentada o equipos que se encuentran en diferentes VLANes pueden quedar expuestos ante este tipo de redes ocultas.
Figura 7: PoC detectando Hidden Networks con PowerShell WinRM
Os dejamos un video dónde se puede ver a Hidden Networks actuando sobre un dominio de Microsoft Windows. ¿Has comprobado en tu red corporativa dónde se encuentran tus redes ocultas? ¿Has mapeado sobre un plano de red tus posibles redes ocultas? ¿Tienes estos logs bien guardados? Lógicamente, en este proceso nos quedarían aún los equipos macOS de Apple, pero esto lo vamos a atacar desde otra perspectiva que ya os contaremos más adelante.
Autores: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths y Fran Ramirez (@cyberhadesblog) escritor de libro "Microhistorias: anécdotas y curiosidades de la historia de la informática" e investigador en ElevenPaths
1 comentario:
Hola chema, he visto por ahí que hubo un nuevo ciberataque cuyo malware se denomina Petya y tiene la misma función que WannaCry, de tipo ransomware... Es fake ¿o? Exijo seriedad xD
Publicar un comentario