ChromeLoader puede parecer un secuestrador de navegadores común y corriente, pero su peculiar uso de PowerShell podría suponer un problema mayor.
ChromeLoader es un secuestrador de navegadores omnipresente y persistente que modifica la configuración del navegador de sus víctimas y redirige el tráfico de los usuarios a sitios web de publicidad. Este malware se introduce a través de un archivo ISO que atrae a los usuarios para que lo ejecuten haciéndose pasar por un videojuego crackeado o una película o programa de televisión pirata. Finalmente se manifiesta como una extensión del navegador.
Como la mayoría de las extensiones de navegador sospechosas, ChromeLoader es una amenaza relativamente benigna que secuestra las consultas de búsqueda del usuario y redirige el tráfico a un sitio de publicidad. Sin embargo, ChromeLoader utiliza PowerShell para inyectarse en el navegador y añadirle una extensión maliciosa, una técnica que no vemos muy a menudo (y que suele pasar desapercibida para otras herramientas de seguridad). Si se aplica a una amenaza de mayor impacto -como un recolector de credenciales o un programa espía-, este comportamiento de PowerShell podría ayudar al malware a conseguir un punto de apoyo inicial y pasar desapercibido antes de realizar una actividad más abiertamente maliciosa, como la extracción de datos de las sesiones de navegación de un usuario.
Encontramos por primera vez esta amenaza tras detectar comandos PowerShell codificados que hacían referencia a una tarea programada llamada «ChromeLoader», y sólo más tarde nos dimos cuenta de que estábamos detectando ChromeLoader en la fase media de su despliegue.
Acceso inicial
ChromeLoader se distribuye a través de un archivo ISO, que suele hacerse pasar por un torrent o un videojuego crackeado. Parece propagarse a través de sitios de pago por instalación y plataformas de medios sociales como Twitter.

Una vez descargado y ejecutado, el archivo .ISO se extrae y se monta como una unidad en la máquina de la víctima. Dentro de esta ISO hay un ejecutable que se utiliza para instalar ChromeLoader, junto con lo que parece ser una envoltura .NET para el programador de tareas de Windows. Así es como ChromeLoader mantiene su persistencia en la máquina de la víctima más adelante en la cadena de intrusión.

Ejecución y persistencia
La ejecución de CS_Installer.exe crea la persistencia a través de una tarea programada utilizando el proceso de host de servicio (svchost.exe). En particular, ChromeLoader no llama al Programador de Tareas de Windows (schtasks.exe) para añadir esta tarea programada, como cabría esperar. En su lugar, vimos que el ejecutable del instalador carga la API COM del Programador de Tareas, junto con una inyección cruzada de procesos en svchost.exe (que se utiliza para lanzar la tarea programada de ChromeLoader).

La figura 3 muestra la inyección cruzada de procesos en svchost.exe. La inyección cruzada de procesos es utilizada con frecuencia por aplicaciones legítimas, pero puede ser sospechosa si el proceso de origen se encuentra en una unidad virtual (como las que se espera que monte un archivo ISO). Es una buena idea estar atento a los procesos que se ejecutan desde rutas de archivos que no hacen referencia a la unidad C:\Npor defecto y que inician un control de proceso cruzado en un proceso que está en la unidad C:\N. Esto no sólo ofrecerá visibilidad de la actividad de ChromeLoader, sino también de los muchos gusanos que se originan en unidades extraíbles y se inyectan en procesos de C:\drive, como explorer.exe, para propagarse en la máquina de la víctima.
Una vez completada la inyección entre procesos, la tarea programada de ChromeLoader se ejecuta a través de svchost, llamando al intérprete de comandos (cmd.exe), que ejecuta un comando PowerShell codificado en Base64 que contiene múltiples variables declaradas. ChromeLoader utiliza el indicador -encodedcommand abreviado para codificar su comando PowerShell:

Una vez descodificado y embellecido, el comando tiene el siguiente aspecto:

En este comando, PowerShell comprueba si la extensión ChromeLoader está instalada. Si no se encuentra la ruta de archivo específica, extraerá un archivo comprimido de una ubicación remota mediante wget y cargará el contenido como una extensión de Chrome. Una vez encontrada la extensión, este comando PowerShell eliminará silenciosamente la tarea programada de ChromeLoader mediante la función Unregister-ScheduledTask.
A continuación, ChromeLoader carga su extensión en Chrome utilizando PowerShell para iniciar Chrome con el indicador –load-extension y hace referencia a la ruta del archivo de la extensión descargada.

Una vez cargada en Chrome, la extensión maliciosa puede ejecutar su verdadero objetivo: redirigir los resultados de búsqueda de la víctima a través de dominios de malvertising y redirigir fuera de la página de extensiones de Chrome si el usuario intenta eliminar la extensión.
Variación de macOS
A finales de abril, Colin Cowie publicó un análisis de la versión para macOS de ChromeLoader, que es capaz de cargar extensiones maliciosas en los navegadores web Chrome y Safari. Después de leer el blog de Colin, analizamos retroactivamente algunas detecciones de amenazas de Red Canary que parecían constituir una ejecución parcial de esta variación de una detección publicada a finales de febrero. Como se ilustra a continuación, ChromeLoader redirige un comando codificado de un shell Bourne (sh) a un SHell de tipo Bourne (bash). El propio comando busca el proceso de Google Chrome utilizando grep, y luego carga la extensión maliciosa desde /private/var/tmp/ si se encuentra el proceso.

La variante de macOS tiene la misma técnica de acceso inicial que la variante de Windows, es decir, utiliza publicaciones en redes sociales con códigos QR o enlaces que dirigen a los usuarios a sitios de descarga maliciosos de pago por instalación. En lugar de originarse como una ISO, la variante de macOS se origina en un archivo de imagen de disco de Apple (DMG). Y a diferencia de la variante de Windows, el archivo DMG contiene un script instalador que deja caer cargas útiles para Chrome o Safari, no un archivo ejecutable portátil. Cuando es ejecutado por el usuario final, el script instalador inicia cURL para recuperar un archivo ZIP que contiene la extensión del navegador malicioso y lo descomprime dentro del directorio private/var/tmp, ejecutando finalmente Chrome con opciones de línea de comandos para cargar la extensión maliciosa.

Para mantener la persistencia, la variante para macOS de ChromeLoader añadirá un archivo de preferencias (plist) al directorio /Library/LaunchAgents. Esto asegura que cada vez que un usuario inicie una sesión gráfica, el script Bash de ChromeLoader pueda ejecutarse continuamente. Una vez instalado, ChromeLoader realiza la misma actividad que en las máquinas Windows: redirigir el tráfico web a través de sitios publicitarios.
Detección
Oportunidad de detección 1: PowerShell que contiene una versión abreviada de la bandera encodedCommand en su línea de comandos
Esta pseudo-lógica de detección busca la ejecución de comandos PowerShell codificados. No todo PowerShell codificado es malicioso, pero vale la pena vigilar los comandos codificados.
process_name == powershell.exe && command_line_includes (-e, -en, -enc, [continuando secuencialmente hasta la bandera completa, -encodedcommand])
Nota: Muchas aplicaciones codificarán legítimamente PowerShell y harán uso de estas banderas acortadas. Es posible que sea necesario realizar algunos ajustes, en función de su entorno. Para perfeccionar este análisis de detección, considere la posibilidad de buscar múltiples variables en el bloque PowerShell descodificado junto con el uso de la bandera encodedCommand acortada indicada anteriormente. Las variables se declaran en PowerShell utilizando $.
decoded_command_line_includes == $
Oportunidad de detección 2: PowerShell genera chrome.exe con load-extension y AppData\Local en la línea de comandos
La analítica de detección busca instancias del ejecutable del navegador Chrome que se generen desde PowerShell con una línea de comandos correspondiente que incluya appdata\local como parámetro.
parent_process_name == powershell.exe && process_name == chrome.exe && command_line_includes (AppData\Local,load-extension)
Oportunidad de detección 3: Proceso de shell que engendra un proceso de carga de una extensión de Chrome dentro de la línea de comandos
Esta analítica busca scripts sh o bash que se ejecuten en entornos macOS con líneas de comando asociadas a la variante macOS de ChromeLoader.
parent_process_equals_any (sh || bash) && process_name_is_osx? && command_line_includes (/tmp/ || load-extension|| chrome)
Oportunidad de detección 4: Comandos codificados en Base64 redirigidos a un proceso shell
Al igual que la idea de análisis de detección de PowerShell codificado anterior, este detector busca la ejecución de comandos sh, bash o zsh codificados en endpoints de macOS.
command_line_includes (echo,base64) && childproc_equals_any (sh,bash,zsh)
Nota: Como en el caso de PowerShell, hay muchos usos legítimos para codificar los comandos del shell. Es posible que sea necesario realizar algunos ajustes, dependiendo de su entorno.
Conclusión
Esperamos que este blog le ayude a mejorar su defensa en profundidad contra ChromeLoader específicamente, pero también para cualquier variedad de otras amenazas que aprovechan los archivos ISO/DMG sospechosos y la ejecución de PowerShell/Bash. Como siempre, cada entorno es diferente y ciertos flujos de trabajo administrativos o de usuarios pueden activar sus nuevos análisis de detección. Por favor, asegúrese de ajustarse en consecuencia. ¡Feliz caza!
Investigacion realizada por: Red Canary