Soy Greg Heffner, y esta es una conversación sobre cómo un hacker de Hollywood usa cámaras de vigilancia. Algunos de ustedes pueden saber o no que cuando se publicó mi trabajo sobre este tema, apareció un artículo en el portal de Internet de Reuters.

Para mí, como orador, fue realmente genial. Pero el problema fue que el artículo decidió enfatizar que trabajaba para una institución específica con un nombre de tres letras, sobre el cual había muy pocas notas en la prensa recientemente. Y llegaron tan lejos que afirmaron que presenté en BlackHat mi trabajo realizado para esta agencia de tres letras. Esta publicación generó algunas llamadas telefónicas muy interesantes de mi antiguo empleador.
Afortunadamente, tenemos personas que responden mis llamadas telefónicas, así que básicamente les gritaron a ellos, no a mí, pero aún así tuve que tranquilizar a las personas y, al final, pude convencer al antiguo empleador de que a veces las personas en Internet también están equivocados.
Por lo tanto, para ser muy claro, explicaré que la conversación de hoy no se trata de ningún trabajo que haya realizado para empleadores anteriores, sino de lo que hago para mi empleador actual. Trabajo como analizador de vulnerabilidades a tiempo completo para Tactical Network Solutions, también enseño cursos de operaciones de dispositivos integrados y ocasionalmente incursiono en la piratería de dispositivos inalámbricos.
Hoy hablaré sobre la seguridad de las cámaras de vigilancia, o más bien, la falta de esta seguridad. A principios del pasado, 2011, comencé a estudiar el tema de la seguridad del firmware de las cámaras conectadas a la red de vigilancia, y descubrí muchas cosas interesantes.
Dejaré de lado la amenaza del "día cero", hablaré sobre ello cuando llegue a ella, primero te mostraré cómo, al estilo de un verdadero hacker de Hollywood, puedo aprovechar las vulnerabilidades que descubrí.
Entonces, cuando comencé a estudiar cámaras de vigilancia, y debo decir que estudié muchos dispositivos incorporados, pero no cámaras, quería comenzar con algo simple, que seguramente me garantizaría una victoria. Elegí D-Link porque nunca decepcionan.

Opté por la DCS-7410, con un precio de alrededor de $ 900, esta es una de las cámaras climáticas para exteriores más caras D-Link, que funciona en modo diurno y nocturno. Al igual que las otras cámaras, de las que hablaremos hoy, tiene una interfaz administrativa y admite el acceso a la transmisión de video a través de Internet a un servidor web, y también se alimenta a través de una red (PoE). Esto lo convierte en un objetivo muy atractivo para un atacante.
Específicamente, esta cámara utiliza Lighttpd II, un servidor web de código abierto que a menudo no se usa con dispositivos integrados. Los desarrolladores crearon una configuración sensata y reglas que restringen el acceso a lo que se puede alcanzar a través del servidor web.
En la siguiente diapositiva, verá que si desea obtener algo en el directorio administrativo cgi / admin, debe tener derechos de administrador. Si desea obtener algo en el directorio de videos, puede ser cualquier usuario, pero debe estar autorizado. Tienen entradas y reglas de inicio de sesión para cada directorio individual en la interfaz web, excepto para el directorio cgi-bin.


La mayoría de los scripts cgi de la cámara se encuentran en el directorio protegido cgi. Un directorio cgi-bin desprotegido contiene solo un archivo, rtpd.cgi, que es un script de shell bash utilizado para iniciar y detener el protocolo de transporte de la cámara RTP en tiempo real.

Sin embargo, el script rtpd.cgi tiene una falla grave. Analiza los parámetros de la consulta reemplazando todos los símbolos & en la cadena $ QUERY_STRING con espacios, y luego obtiene el resultado usando la función eval:

Entonces, si solo desea detener la cámara, simplemente envíe una solicitud: rtpd.cgi? Action = stop. Cuando se utiliza según lo previsto, la siguiente solicitud HTTP cambiará el nombre? Acción, cuyo valor se establecerá en la posición "inicio":
$ wget http://192.168.1.101/cgi-bin/rtpd.cgi?action=start
Pero dado que los datos en $ query_string se ejecutan ciegamente por el método eval, un atacante puede ejecutar cualquier comando simplemente al especificarlo como parte de los parámetros http GET:
$ wget http://192.168.1.101/cgi-bin/rtpd.cgi?reboot
Por lo tanto, el hacker puede reiniciar la cámara. De hecho, fue difícil para mí categorizar esta vulnerabilidad, porque ni siquiera es una inyección de comandos, no ingresamos nada, sino que simplemente permitimos que el programa se ejecute con otros parámetros. Llamé a esta vulnerabilidad "Ron Burgundy", porque literalmente hará lo que ingrese en la cadena de consulta.

Un atacante podría usar esta vulnerabilidad para obtener una contraseña de administrador de cámara normal de NVRAM. La secuencia de comandos de inicio de la cámara ejecuta el siguiente comando después de reiniciar y envía a su navegador una respuesta de este tipo:

Ahora no solo tiene acceso de root, porque después de recibir la contraseña, también se convierte en administrador, por lo que puede hacer cualquier cosa con la cámara y los videos.
Como resultado, D-link, como muchos fabricantes, realmente adora reutilizar el código instalando el mismo firmware, y este es el caso en muchos de sus productos. Pero esto no solo afecta a los productos D-link, ya que Trendnet y algunos otros fabricantes "no de marca" de dichos dispositivos utilizan una práctica similar. La reutilización de códigos ahora está muy extendida, tanto entre fabricantes de la misma marca como entre diferentes marcas. Esta vulnerabilidad está contenida en el firmware de muchos modelos de cámaras que están indexados en el recurso de recopilación de vulnerabilidad de computadora Shodan Dork.

Esta vulnerabilidad puede parecer familiar para algunas personas, y esto probablemente se deba a que después de mi discurso sobre este tema, Core Security estableció el índice de vulnerabilidad CVE-2013-1599 para estos productos, lo que indica que solo está presente en dispositivos D-link, sin mencionar ninguno de otro fabricante que usa el mismo firmware en sus dispositivos. Incluso si uno de los fabricantes corrige este error en la nueva versión de firmware, la mayoría de los dispositivos seguirán siendo vulnerables durante otros 3 años, porque generalmente nadie actualiza el firmware a tiempo, y algunos no saben qué es. Como dije, los productos D-link son uno de los objetivos más asequibles para el ataque, así que echemos un vistazo a las cámaras de fabricantes de mayor reputación, como Cisco con el modelo PVC 2300. Esta es una cámara IP de clase empresarial de gama media con un valor de $ 500.

Actualmente también tiene un servidor web y proporciona autenticación mediante un archivo de contraseña en formato HTTP.

La mayoría de las personas están familiarizadas con este sistema: instala su archivo de contraseña HTTP, o más precisamente, un enlace a un archivo de contraseña centralizado en cualquier directorio que desee proteger con una contraseña. Por lo tanto, si observa el firmware, la interfaz web de cada directorio contiene un archivo de contraseña .htpasswd, excepto un directorio, oamp, ubicado en / usr / local / www / oamp.

En lugar de un archivo de contraseña, contenía un montón de archivos XML que servían como enlaces al archivo binario oamp.cgi. Veamos qué hace este cgi. Resulta que implementa una especie de mini-API, que está completamente separada de todo lo demás que se ejecuta en la interfaz web.

Espera que se le soliciten ciertas acciones, incluida la descarga del archivo de configuración, la actualización del archivo de configuración, la descarga del archivo de actualización del firmware, la actualización del firmware y mucho más. Los desarrolladores no eran tan estúpidos, así que antes de ejecutar su solicitud, oamp.cgi verifica si tiene la ID de sesión válida correcta.

Si no tiene un identificador de sesión válido, lo único que puede hacer es ingresar un inicio de sesión.

Esto en sí mismo es interesante porque implementaron una verificación de autenticación que no se usa en ningún otro lugar de la interfaz. Comencé a entender cómo controlan la entrada, es decir, iniciar sesión. Confían en su nombre de usuario y contraseña y no más sorpresas.


Y luego hacen dos llamadas a la función PRO_GetStr, y no tengo idea de lo que afectan. Pero sé que la primera llamada a esta función le da dos líneas: OAMP y el nombre de usuario L1_usr, y la segunda llamada: dos líneas más, OAMP y la contraseña L1_pwd.


Luego, se devuelve el primer valor para el usuario L1 y se compara con el nombre de usuario user, L1_usr especificado durante la autenticación, y también se devuelve el segundo valor de la cadena: contraseña de contraseña, L1_usr, que se compara con la contraseña ingresada por el usuario al iniciar sesión.


Presumiblemente, este nombre de usuario y contraseña L1, independientemente de los valores que tomen, proporcionan el inicio de sesión correcto para esta interfaz OAMP. El único otro lugar que pude encontrar en el firmware, y que está realmente asociado con el nombre de usuario y la contraseña del usuario, es el archivo de configuración.

Y estos valores están codificados en dispositivos que usan el archivo de configuración de la sección OAMP durante la operación. Verá que el valor de inicio de sesión del usuario L1 se establece en la línea L1_admin, y el valor de la contraseña del usuario está en la línea L1_51.
Y este es un problema real, porque toda esta interfaz OAMP y estas cuentas codificadas están completamente indocumentadas, por lo que nadie sabe que están allí, excepto aquellas personas que se molestaron en buscar el firmware. Por supuesto, el administrador nunca hará esto.
Pero incluso si se entera al respecto, no hay forma de que cambie estos valores, ya que no hay una interfaz de administrador en esta cámara. El problema con las contraseñas secretas codificadas es que, gracias al uso de puertas traseras, permanecen secretas por un corto tiempo.
Por lo tanto, podemos usar estas cuentas de puerta trasera para iniciar sesión y obtener una ID de sesión. Ahora que podemos enviar esta ID de sesión junto con nuestras solicitudes, también podemos invocar cualquier otra acción compatible con oamp.cgi, incluida la descarga del archivo de configuración de configuración.


El problema es que si intentas descifrarlo usando Base64, esto no funciona, solo obtienes un montón de basura. Este es el caso cuando Base64 no es Base64.

La razón de esto se vuelve obvia cuando observa el código final de Base64 en el archivo binario del firmware PVC-2300: la base para la codificación se crea aquí, pero utiliza una cadena de clave Base64 no estándar, que se descubrió al analizar el cifrado y descifrado del código 64. Afortunadamente, con Con Python, es muy fácil cambiar una cadena de clave en un módulo Python Base64 a una cadena de clave personalizada, como se muestra en la diapositiva.

Entonces, con un par de cadenas de Python, podemos descifrar fácilmente el archivo de configuración y convertirlo en texto sin formato, lo que nos da opciones de inicio de sesión bajo el inicio de sesión del administrador.

Habiendo ganado el control de la cámara, podemos ver la sala de servidores. El problema es que ver las salas de servidores realmente captura los primeros 10 segundos, pero luego se convierte en una tarea bastante aburrida.

Por lo tanto, volví al código y comencé a estudiar la posibilidad de descargar firmware. Esto es realmente muy interesante, porque en lugar de descargar el archivo de firmware al dispositivo desde el sitio oficial, puede especificar su propia URL, el dispositivo irá a esta dirección y descargará lo que supuestamente considera firmware.

La función system2 simplemente genera un comando a partir de la cadena de formato y la url antes de llamar a la función del sistema libc, lo que permite a un atacante ingresar comandos de shell arbitrarios a través del parámetro url. El comando del atacante se ejecutará con derechos de superusuario y, dado que la verificación se realiza mediante el valor de url, es muy fácil omitirlo con el siguiente script:
$ wget --header=”sessionID: 57592414” http://192.168.1.101/oamp/System.xml?action=loadFirmware&url=https://127.0.0.1:6 5534/;reboot;
Después de eso, la computadora ubicada en esta URL se reinicia y puede ejecutar cualquier comando que desee.

Esta vulnerabilidad se probó en todas las versiones de firmware de dos modelos de cámaras de vigilancia Cisco: PVC-2300 y WVC-2300, una cámara similar con dos antenas. Al momento de escribir este artículo, Shodan mostró más de 500 cámaras IP públicas y potencialmente vulnerables que pertenecen a hoteles, salas de servidores y compañías de ingeniería que desarrollan equipos para la Estación Espacial Internacional.
Por lo tanto, D-link y Cisco no protegen adecuadamente las cámaras de vigilancia, aunque sabe que estas cámaras no son su producto principal. Por lo tanto, echemos un vistazo a las marcas que se especializan específicamente en el diseño y fabricación de cámaras de vigilancia. Elegí IQ Invision, que produce costosas cámaras de alta definición, como la IQ 832n, que cuesta más de $ 1000 cada una, lo que no es nada económico.

La razón principal de mi interés es que estos son los tipos que fabrican cámaras instaladas en el complejo comercial donde trabajo, por lo que hubo razones personales para esto. Entonces, ¿qué obtienes usando una cámara de vigilancia profesional por mil dólares?
De manera predeterminada, estas cámaras proporcionan una imagen de video no autenticada, y ninguno de los estudios exhaustivos de instalación de cámaras ha podido cambiar esta configuración predeterminada. Si bien la interfaz administrativa está protegida por contraseña, la interfaz de usuario proporciona acceso a los recursos de la cámara sin autenticación, lo que crea un amplio campo de ataque.

El administrador puede cambiar la configuración de autenticación del administrador, pero intente adivinar cuántos administradores han conectado sus cámaras a Internet sin cambiar la configuración predeterminada, casi todo. Sin embargo, la mayoría de los administradores en nuestro complejo eran lo suficientemente inteligentes como para cambiar esta configuración, así que comencé a ver qué más podía hacer sin autenticación. Resultó que puedo acceder libremente a la página.

Contiene una gran cantidad de configuraciones de la cámara, como la configuración de enfoque, que no son tan interesantes como los nombres de usuario y las contraseñas. Más interesante fue el código detrás de esta página oidtable.cgi. Si desmonta este binario, puede ver que la página acepta solo un parámetro, grep, que se utiliza para filtrar los resultados devueltos a la página oidtable.cgi.

Después de comprobar que el valor del parámetro proporcionado tiene menos de 32 caracteres, oidtable.cgi coloca este valor en la línea de comando y lo pasa a popen:


Lo que vi me hizo retratar el "facepalm" y me impulsó a inyectar algunos equipos.

Usted ve que aquí, al igual que en el caso de D-Link, puedo ejecutar el comando PS y obtener la salida enviada de regreso a mi navegador. Por lo tanto, sin autenticación, puedo ingresar fácilmente comandos de shell arbitrarios que se ejecutarán como root. Las listas de procesos muestran que Netcat ya está instalado en estas cámaras con la capacidad de ingresar guiones dash-e, así que estoy seguro de que la mayoría de las personas aquí pueden encontrar comandos más interesantes para ejecutar que la lista de procesos. Sin embargo, mi objetivo principal era ingresar al panel de administración, y descubrí cómo hacerlo.
16:30 min
SOMBRERO NEGRO Conferencia de Estados Unidos. Cómo un hacker de Hollywood usa cámaras de vigilancia. Parte 2Gracias por quedarte con nosotros. ¿Te gustan nuestros artículos? ¿Quieres ver más materiales interesantes?
Apóyenos haciendo un pedido o recomendándolo a sus amigos, un
descuento del 30% para los usuarios de Habr en un análogo único de servidores de nivel de entrada que inventamos para usted: toda la verdad sobre VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD 1Gbps de $ 20 o cómo dividir el servidor? (las opciones están disponibles con RAID1 y RAID10, hasta 24 núcleos y hasta 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD 1Gbps hasta diciembre de forma gratuita al pagar por un período de seis meses, puede ordenar
aquí .
Dell R730xd 2 veces más barato? ¡Solo tenemos
2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TV desde $ 249 en los Países Bajos y los Estados Unidos! Lea sobre
Cómo construir un edificio de infraestructura. clase utilizando servidores Dell R730xd E5-2650 v4 que cuestan 9,000 euros por un centavo?