Active X Inseguros y una Prueba de Concepto


¿Qué es un ActiveX? Es una tecnología de reutilización de software creado en Microsoft COM. Por ejemplo, ActiveX permite un documento de Word embeberlo en una hoja de cálculo de Excel y esta publicarse por medio de un sitio o aplicación Web.

ActiveX habilita una interface de Scripts a través de la cual se pueden aprovechar todas las capacidades de componentes binarios pueden estar disponibles para los lenguajes scripts, tales como VBS y JS (lo que se conoce como Automatización OLE o simplemente Automatización). Es un modelo de plug-in de IE, permitiendo que IE cargue y use componentes binarios personalizados desde o dentro de sitios Web. La interacción entre las páginas se hace por medio de las interfaces script.

Dado que ActiveX es una tecnología de reutilización de código de propósito general y no es diseñado solamente para usarse en páginas Web. No todos los componentes son apropiados para su uso en la Web. Sin embargo, hay límites para estos componentes, por ejemplo, un ActiveX no podría ejecutar código malicioso en su computador sin su consentimiento.

El componente ActiveX debe afirmar que es tanto seguro para inicialización y seguro para scripting.

¿Qué es inicialización y scripting seguro?

«Seguro para inicialización» básicamente significa que el componente no violará la seguridad del usuario, incluso si inicializado con datos no confiables o maliciosos.

«Seguro para scripting» significa que sus interfaces de scripting no pueden ser objeto de abuso por un script malicioso que cause daño al usuario.

¿Cuál es la configuración por defecto de esta característica en IE?

IE por defecto deniega la carga de componentes ActiveX marcados como no seguros para inicializar o ejecutar scripting cuando son referenciados en sitios Web alojados remotamente y en cualquier zona de seguridad del IE, excepto la zona de maquina local que está en la opción “Preguntar”, es decir, en el resto de zonas está configurada en la opción denegar.

Esta configuración se puede hacer de manera diferente por cada zona de seguridad o mediante GPO a partir de IE 7.

Las interfaces del Windows Script Host son también un ejemplo más claro de un componente ActiveX inseguro, ya que permiten la manipulación del registro, manipulación de archivos, y lanzar programas o líneas de comando.

En IE6 en inferior, en la zona de sitios seguros esta opción está marcada para preguntar y no denegar como las versiones actuales, por tanto, le muestra un mensaje al usuario para que permita la interacción al darle clic en “Yes” o “Si”.

Question

La opción de “Preguntar” al usuario, tampoco es una buena idea, ya que los usuarios finales se acostumbraron a que cada vez que ven un aviso del navegador, dan en la opción “Si” para poder trabajar o visualizar lo que desean, por tanto, muchos no leen o son conscientes de que están permitiendo al hacer clic en sí.

Amenazas informáticas:

El problema radica en que IE no permite configurar de manera personalizada un componente ActiveX para fines específicos, sino que cuando se habilita esta opción en una zona del navegador, permite que cualquier o todos los sitios Web que funcionan en esta zona. Lleven a cabo cualquier acción en el computador sin el consentimiento del usuario, esto significa que un atacante o cualquier persona podría controlar el contenido, archivo, entre otras para todos los computadores que visitan el sitios Web.

Un atacante podría instalar un malware (ej. Spyware, virus, ransomware…) sin necesidad de permisos administrativos, configurar programas para ejecutarse al inicio de sesión del usuario, capturar o enviar información privada a externos, borrar citas del calendario o modificar/borrar archivos. Además puede hacer un escenario de ataque en donde con un script en un archivo HTML infecte los usuarios y luego lo restaure al original, sin que sea fácil de rastrear este tipo de ataque.

Prueba de Concepto – PoC:  (Se puede ejecutar codigo remoto desde la Red Interna o desde un sitio Web comprometido en Internet).

Verificar la opción en la configuración del Internet Explorer. (La que no se puede habilitar)

Opcion1

La prueba consiste en ingresar desde el Internet Explorer a un sitio en Internet donde se montó una página HTML que permita ejecutar una calculadora sin consentimiento del usuario. La prueba fue satisfactoria en un Internet Explorer 10 con Windows 7 Service Pack 1.

Se crea una página HTML básica con un llamado a un archivo JavaScript o se modifica una existen en un sitio Web.

Index

Se agregan las lineas de ejecución de codigo al archivo JS con el objeto ActiveX malicioso, que  para este ejemplo solo ejecuta una calculadora en el computador que visita la página.

js

Ejecución desde el navegador.

PoC

Remediación

Para asegurar un ActiveX no solamente basta con fírmalo digitalmente(este es más para la integridad y no repudio del control), sino que también existen dos métodos a nivel de código fuente para asegurarlo, usando un identificador de clase del control (CLSID).

  1. El primer método consiste en usar la interface ICatRegister del “Component Categories Manager” para crear unas entradas en el registro (CATID_SafeForScripting) del sistema operativo y el IE examina este antes de cargar el control ActiveX.

La ruta donde se crea esto es la siguiente:

regedit

Los pasos son:

  1. Create an instance of the Component Categories Manager and retrieve the address of the ICatRegister
  2. Set the appropriate members of a CATEGORYINFO
  3. Call the ICatRegister::RegisterCategories method, passing the address of the initialized CATEGORYINFO

NOTA: En el enlace de referencia está el código fuente de ejemplo con la implementación.

El segundo método tiene que ver con implementar una interface llamada IObjectSafety y su método SetInterfaceSafetyOptions (con 3 parámetros) en el control ActiveX, para poder que el navegador IE lo inicialice y ejecute de forma segura.

ActiveX-Seguro

En el siguiente articulo de Microsoft explican el detalle del asunto:

https://msdn.microsoft.com/en-us/library/aa751977%28v=vs.85%29.aspx

También es recomendable este post sobre el diseño seguro de ActiveX:

https://msdn.microsoft.com/es-es/library/aa752035%28v=vs.85%29.aspx

Espero este ejemplo sirva para que cuando se vaya habilitar una opción en el navegador, se evalue primero el riesgo y en lo posible con una prueba de concepto evidenciarlo; ademas que esto  pueda ayudar a crear lineamientos para los desarrolladores de las Apps corporativas que usan ActiveX, con el fin de no poner en riesgo la organización.