Se comprometió la aplicación de escritorio 3CX para red de voz sobre IP (VoIP) con el fin de distribuir malware a través de actualizaciones legítimas de 3CX. Huntress ha estado investigando este incidente y trabajando para validar y evaluar la amenaza actual a la cadena de suministro para la comunidad de seguridad.
ACTUALIZACIÓN N.º 1 - 30/3/23 @ 2:00 p. m. hora del Este: Se agregó un script de PowerShell que se puede usar para verificar ubicaciones/versiones de 3CX y ejecutarlo contra los hashes para ver si son maliciosos, pensado para ejecutarse en un RMM.
A las 11:40 a. m. hora del Este del 29 de marzo de 2023, Huntress recibió una solicitud de soporte de un socio, preocupado por un nuevo aviso y debate en Reddit publicado apenas 30 minutos antes. CrowdStrike fue el primero en dar la alarma sobre un incidente en desarrollo: las instalaciones del software 3CX VoIP estaban comprometidas y distribuían malware a los endpoints que ejecutaban la aplicación de escritorio 3CX.
Huntress aumentó de inmediato el monitoreo de actividad maliciosa relacionada con la aplicación 3CX, mientras trabajaba para validar este vector de ataque y así poder brindar la mayor cantidad de información posible a la comunidad.
Según la notificación publicada recientemente por 3CX, las versiones de 3CX DesktopApp actualmente conocidas como afectadas son 18.12.407 y 18.12.416 para Windows, y 18.11.1213, 18.12.402, 18.12.407 y 18.12.416 para Mac.
Impacto
Al momento de redactar esto, Shodan reporta que hay 242.519 sistemas de administración telefónica 3CX expuestos públicamente.
3CX afirma tener más de 600.000 clientes y, como era de esperar, esto tiene el potencial de convertirse en un ataque masivo a la cadena de suministro, comparable con el incidente de SolarWinds o el ataque de ransomware a Kaseya VSA de años anteriores.
Dentro de nuestra base de socios, Huntress envió 2.783 informes de incidentes en los que el binario 3CXDesktopApp.exe coincide con hashes maliciosos conocidos y fue firmado por 3CX el 13 de marzo de 2023. Actualmente contamos con un grupo de aproximadamente 8.000 endpoints que ejecutan software 3CX.
Si bien Huntress notificó a los socios correspondientes, decidimos no aislar automáticamente los endpoints con 3CX, ante la posibilidad de que esto dejara fuera de línea los sistemas de comunicación telefónica. Te recomendamos encarecidamente eliminar el software si es posible, ya que 3CX prometió lanzar una actualización no maliciosa en un futuro cercano.
Análisis e investigación
El 29 de marzo, numerosos proveedores de EDR y soluciones antivirus comenzaron a activar alertas sobre el binario legítimo firmado 3CXDesktopApp.exe. Esta aplicación había iniciado un proceso de actualización que finalmente derivó en comportamiento malicioso y comunicación de comando y control con numerosos servidores externos.
Lamentablemente, en las primeras etapas de la investigación de la comunidad, hubo confusión sobre si se trataba o no de una alerta antivirus legítima.
La descarga de 3CX disponible en el sitio web público oficial incluía malware. Las instalaciones ya desplegadas se actualizarán y, finalmente, descargarán este malware, que incluye un archivo DLL con backdoor, ffmpeg.dll y un archivo anómalo d3dcompiler_47.dll.
Para tener una visión general de la cadena de ataque, echa un vistazo rápido a este gráfico básico.
Un enorme reconocimiento a nuestro investigador de seguridad y ninja residente del análisis binario Matthew Brennan por este análisis a fondo.
Este archivo ffmpeg.dll con backdoor actúa principalmente como cargador del archivo d3dcompiler_47.dll.
Desde el mismo punto de entrada de la DLL, eventualmente ingresa a una nueva función (que renombramos como mw_main_function para fines de nuestra ingeniería inversa) --
Esto crea un nuevo evento AVMonitorRefreshEvent, resuelve la ruta del archivo actual y busca el archivo d3dcompiler_47.dll subsiguiente para cargarlo en memoria.
De nuestro análisis, vemos que d3dcompiler_47.dll está firmado por Microsoft, pero contiene un payload secundario cifrado incrustado. Este payload está marcado por un indicador de bytes específico, FE ED FA CE, como también han observado otros.
Después de obtener d3dcompiler_47.dll, el binario ffmpeg.dll localiza y desenvuelve este payload secundario descifrando un stream RC4 con la clave 3jB(2bsG#@c7. Según otra inteligencia de amenazas, se sabe que esta clave estática se atribuye a actores de amenazas de Corea del Norte.
Tras las llamadas a VirtualProtect para preparar este payload, pudimos extraer el shellcode descifrado para un examen más detallado.
Al profundizar más con GHIDRA, x64dbg y otras herramientas de análisis, descubrimos que hay otro archivo DLL incrustado dentro del shellcode. Parece que este shellcode es simplemente otro cargador PE.
Un dato muy importante sobre este archivo PE con shellcode incrustado: esperaba 7 días antes de intentar comunicarse con servidores C2 externos. El retraso de 7 días es peculiar, ya que es posible que no hayas visto más indicadores de inmediato... y esto podría explicar por qué algunos usuarios aún no han visto actividad maliciosa. (Quizás una observación interesante, considerando que estas nuevas actualizaciones maliciosas de 3CX se vieron por primera vez el 22 de marzo, y la industria detectó esta actividad maliciosa el 29 de marzo)
Este archivo PE final finalmente se comunica con un repositorio de Github y el contenido de un archivo sin procesar:
https://raw[.]githubusercontent[.]com/IconStorages/images/main/icon%d.ico
Este repositorio de Github, https[:]//github[.]com/IconStorages/images, almacenaba 16 archivos de ícono .ICO separados.
Cada uno era, de hecho, un archivo de ícono válido; sin embargo, al final de cada archivo había una cadena codificada en Base64.
Al intentar decodificar estas cadenas Base64, resultaron ser -- como era de esperarse -- aparentemente más datos cifrados.
Entre las solicitudes HTTP a Github, observamos rutinas de descifrado. Estas ayudaron a entender cómo podíamos descifrar lo que parecían ser datos cifrados con AES -- lo que finalmente reveló estas cadenas de texto plano y URLs referenciadas al final de cada archivo .ICO:
https[:]//www[.]3cx[.]com/blog/event-trainings/https[:]//akamaitechcloudservices[.]com/v2/storagehttps[:]//akamaitechcloudservices[.]com/v2/storagehttps[:]//azureonlinestorage[.]com/azure/storagehttps[:]//msedgepackageinfo[.]com/microsoft-edgehttps[:]//glcloudservice[.]com/v1/consolehttps[:]//pbxsources[.]com/exchangehttps[:]//msstorageazure[.]com/windowhttps[:]//officestoragebox[.]com/api/sessionhttps[:]//visualstudiofactory[.]com/workloadhttps[:]//azuredeploystore[.]com/cloud/serviceshttps[:]//msstorageboxes[.]com/officehttps[:]//officeaddons[.]com/technologieshttps[:]//sourceslabs[.]com/downloadshttps[:]//zacharryblogs[.]com/feedhttps[:]//pbxcloudeservices[.]com/phonesystemhttps[:]//pbxphonenetwork[.]com/voiphttps[:]//msedgeupdate[.]net/Windows
Estas URLs coinciden con el mismo puñado de dominios IOC compartidos por otros. El payload final elegiría al azar qué número de ícono, y en última instancia qué URL descifrada, sería seleccionada como el servidor C2 externo.
Curiosamente, el primer archivo .ICO, icon0.ico, apuntaba a https[:]//www[.]3cx[.]com/blog/event-trainings/ ... sin embargo, al revisar los commits anteriores del repositorio de Github IconStorage, originalmente hacía referencia a https[:]//msedgeupdate[.]net/Windows
El repositorio https[:]//github[.]com/IconStorages/images, que alojaba estos endpoints de servidores C2, ha sido retirado de línea. Si bien esto podría dificultar la ejecución en los endpoints que se actualicen a la versión maliciosa actual de 3CX, el impacto real se desconoce por el momento. Aún no está claro si los adversarios todavía tienen acceso a la cadena de suministro de 3CX para contaminar futuras actualizaciones; quizás esto cambie las tácticas que veamos en los próximos días.
En este momento veo que el repositorio github[.]com/IconStorages/images, incluido en el ataque a la cadena de suministro de 3CX, ya ha sido eliminado.
Reporté al usuario a Github hoy temprano. pic.twitter.com/ltWen5TnLo
Aún no hemos visto ninguna muestra de datos de red que se comuniquen con estas URLs de C2 para que podamos analizarlas.
Esfuerzos de detección
ACTUALIZACIÓN 30/3/23 @ 2:00 p. m. hora del Este: nuestro equipo ha creado un script de PowerShell que puede usarse para revisar ubicaciones/versiones de 3CX y comparar los hashes para ver si son maliciosos, de modo que pueda ejecutarse en un RMM.
Windows Defender actualmente detecta esta cadena de ataque con el nombre de amenaza Trojan:Win64/SamScissors.
Para los esfuerzos de detección, Huntress ha observado -- al menos para el primer contacto malicioso con la dirección IP relacionada con Github -- un árbol de procesos y una línea de comandos en particular:
El linaje parental ha sido:
explorer.exe \_3CXDesktopApp.exe \_ 3CXDesktopApp.exe
… con el padre 3CXDesktopApp.exe teniendo uno de los hashes maliciosos conocidos, y el 3CXDesktopApp.exe hijo correspondiente invocado con una línea de comandos de:
[DRIVE]:\Users\Username\Local\Programs\3CXDesktopApp.exe\3CXDesktopApp.exe autoLaunch
Cabe destacar que hemos observado procesos con este linaje y línea de comandos que no han intentado comunicarse con un dominio relacionado con Github... pero el factor distintivo parece ser el criterio de linaje de procesos combinado con los hashes maliciosos del 3CXDesktopApp.exe padre.
Estos hashes SHA256 conocidos ofrecen indicadores de calidad:
- a60a61bf844bc181d4540c9fac53203250a982e7c3ad6153869f01e19cc36203 (18.12.416)
- 5d99efa36f34aa6b43cd81e77544961c5c8d692c96059fef92c2df2624550734 (18.12.416)
- 54004dfaa48ca5fa91e3304fb99559a2395301c570026450882d6aad89132a02 (18.12.407)
- d45674f941be3cca2fbc1af42778043cc18cd86d95a2ecb9e6f0e212ed4c74ae (18.12.407)
Además, el investigador de Huntress Matthew Brennan ha creado una regla YARA para ayudar a detectar estos archivos maliciosos.
Puedes encontrar esta regla YARA incluida en este gist de Github:
Atribución
Si bien aún no hay una atribución definitiva, el consenso actual en la comunidad de seguridad es que este ataque fue realizado por un actor de amenazas estatal de Corea del Norte.
Mensaje oficial de 3CX
Las últimas recomendaciones del CEO de 3CX y del CISO son desinstalar el cliente de escritorio de 3CX. Informan que están preparando una nueva versión y actualización de 3CXDesktopApp que estará disponible pronto.
Ayuda de Huntress
Conscientes de la gravedad de este incidente, sabemos que nuestros esfuerzos son solo un grano de arena. Aun así, nuestra meta siempre es mantener seguros a nuestros partners y hacer todo lo posible para ayudar a la comunidad más amplia de pequeñas y medianas empresas (SMB) a evitar que esto siga escalando.
Si usas 3CX y todavía no trabajas con nuestro equipo, Huntress ofrece una prueba gratuita de 30 días de nuestros servicios Managed EDR durante el mes de abril. Para más información, revisa los detalles aquí: https://www.huntress.com/3cx-response.
Recursos y referencias
- Lo último de 3CX
- https://www.3cx.com/blog/news/desktopapp-security-alert-updates/
- El reporte original de CrowdStrike en Reddit
- https://www.reddit.com/r/crowdstrike/comments/125r3uu/20230329_situational_awareness_crowdstrike/
- La publicación formal del blog de CrowdStrike
- https://www.crowdstrike.com/blog/crowdstrike-detects-and-prevents-active-intrusion-campaign-targeting-3cxdesktopapp-customers/
- El reporte de Todyl
- https://www.todyl.com/blog/post/threat-advisory-3cx-softphone-telephony-campaign
- El reporte de SentinelOne
- https://s1.ai/smoothoperator
- Discusión en el foro de 3CX y el tablero público de anuncios
- https://www.3cx.com/community/threads/threat-alerts-from-sentinelone-for-desktop-update-initiated-from-desktop-client.119806/post-558710
- https://www.3cx.com/community/threads/3cx-desktop-app-vulnerability-security-group-contact.119930/
- https://www.3cx.com/community/threads/crowdstrike-endpoint-security-detection-re-3cx-desktop-app.119934/#post-558726
- Primera notificación oficial del director ejecutivo de 3CX
- https://www.3cx.com/community/threads/3cx-desktopapp-security-alert.119951/#post-558907
- Reglas Sigma y reglas YARA de Nextron Systems para la detección
- https://github.com/Neo23x0/signature-base/blob/master/yara/gen_mal_3cx_compromise_mar23.yar
- Pulso no oficial de OTX AlienVault
- https://otx.alienvault.com/pulse/64249206b02aa3531a78d020
- El comentario de Kevin Beaumont
- https://cyberplace.social/@GossiTheDog/110108640236492867
- El comentario de Patrick Wardle sobre la variante para Mac
- https://twitter.com/patrickwardle/status/1641294247877021696
- https://objective-see.org/blog/blog_0x73.html
- La línea de tiempo de Volexity, que incluye qué era cada uno de los archivos de íconos y algunos de los indicadores de red
- https://www.volexity.com/blog/2023/03/30/3cx-supply-chain-compromise-leads-to-iconic-incident/
Indicadores de ataque (IOA)
Dominios:
akamaicontainer[.]comakamaitechcloudservices[.]comazuredeploystore[.]comazureonlinecloud[.]comazureonlinestorage[.]comdunamistrd[.]comglcloudservice[.]comjournalide[.]orgmsedgepackageinfo[.]commsstorageazure[.]commsstorageboxes[.]comofficeaddons[.]comofficestoragebox[.]compbxcloudeservices[.]compbxphonenetwork[.]compbxsources[.]comqwepoi123098[.]comsbmsa[.]wikisourceslabs[.]comvisualstudiofactory[.]comzacharryblogs[.]com
Hashes SHA256 de 3CXDesktopApp.exe
a60a61bf844bc181d4540c9fac53203250a982e7c3ad6153869f01e19cc36203 (18.12.416)5d99efa36f34aa6b43cd81e77544961c5c8d692c96059fef92c2df2624550734 (18.12.416)54004dfaa48ca5fa91e3304fb99559a2395301c570026450882d6aad89132a02 (18.12.407)d45674f941be3cca2fbc1af42778043cc18cd86d95a2ecb9e6f0e212ed4c74ae (18.12.407)
Hashes SHA256 del instalador MSI de 3CXDesktopApp
aa124a4b4df12b34e74ee7f6c683b2ebec4ce9a8edcf9be345823b4fdcf5d86859e1edf4d82fae4978e97512b0331b7eb21dd4b838b850ba46794d9c7a2c0983
Hashes SHA256 de 3CXDesktopApp para macOS
92005051ae314d61074ed94a52e76b1c3e21e7f0e8c1d1fdd497a006ce45fa61b86c695822013483fa4e2dfdf712c5ee777d7b99cbad8c2fa2274b133481eadb
a64fa9f1c76457ecc58402142a8728ce34ccba378c17318b3340083eeb7acc67
Hashes del instalador DMG de 3CXDesktopApp para macOS
5407cda7d3a75e7b1e030b1f33337a56f293578ffa8b3ae19c671051ed314290e6bbc33815b9f20b0cf832d7401dd893fbc467c800728b5891336706da0dbcec