Las películas y los programas de televisión nos han enseñado a asociar a los piratas informáticos con tareas difíciles, tramas detalladas y esquemas elaborados.
Lo que el investigador de seguridad Carlos Fernández y yo encontramos recientemente en los registros de código abierto cuenta una historia diferente: los malos actores están favoreciendo la simplicidad, la efectividad y el pensamiento centrado en el usuario. Y para llevar su código malicioso al siguiente nivel, también están agregando nuevas funciones asistidas por ChatGPT.
Al igual que el software como servicio ( SaaS ), parte de la razón por la que las ofertas de malware como servicio (MaaS) como DuckLogs , Redline Stealer y Racoon Stealer se han vuelto tan populares en los mercados clandestinos es que tienen los canales activos de atención al cliente y sus productos tienden a ser ingeniosos y fáciles de usar. Marque estas casillas, complete este formulario, haga clic en este botón... ¡Aquí está su muestra de malware lista para usar! No hace falta decir que estos productos a menudo son creados por ciberdelincuentes profesionales.
En las ofertas de MaaS menos populares que hemos encontrado en la naturaleza, como el capturador de fichas de Discord Z3US , hay un intento de incorporar principios de diseño centrados en el ser humano, pero el producto falla en la atención al cliente. Principalmente operadas y consumidas por adolescentes, las cuentas de Telegram asociadas están llenas de quejas y "lenguaje de hermanos" hostil debido a una promesa incumplida de una "garantía de por vida":
Incluso antes de unirme a Sonatype, me preguntaba cómo sería la cara moderna del ciberdelito . Y ahora que estoy siguiendo una serie de campañas y malos actores de todo el mundo, algo se ha aclarado para mí: la mayoría de los paquetes maliciosos que el equipo de investigación de seguridad trae a mi atención no son producto de un genio peculiar con una sudadera con capucha. codificando desde un sótano oscuro lleno de monitores. Gracias a la naturaleza simplista de MaaS, cualquier persona puede crear y cargar fácilmente muestras de malware en registros de código abierto con un costo de configuración y un conocimiento técnico mínimos.
Los investigadores de Avast han observado que desde el comienzo de la actual pandemia de Covid-19, plataformas como Discord y Telegram se han vuelto cada vez más populares entre la población más joven. En lugar de usar las redes sociales convencionales, estos adolescentes crean comunidades de malware en Discord con el propósito de jugar, chatear y socializar lejos de la supervisión de los padres. Estas comunidades suelen estar dirigidas por los miembros más competentes técnicamente, que presumen al tomar posesión de los servidores de la competencia, o incluso al compartir capturas de pantalla con información que han robado a víctimas desprevenidas. También están buscando activamente a otros miembros en función de sus habilidades de programación o potencial para contribuir a sus campañas.
Como consecuencia no deseada de estas actividades, los registros resilientes de código abierto en los que confiamos se enfrentan a una sobrecarga de recursos. Solo el mes pasado, nuestros investigadores de seguridad confirmaron como maliciosos 6933 paquetes cargados en los registros npm y PyPI.
Recientemente rastreamos la campaña de un grupo de habla hispana llamado EsqueleSquad que ha subido más de 5000 paquetes a PyPI. La carga útil de estos paquetes intentó descargar un troyano de Windows desde Dropbox, GitHub y Discord mediante un comando de PowerShell.
Posteriormente investigamos las actividades de otro grupo llamado SylexSquad, posiblemente de España, que creó paquetes que contenían malware diseñado para filtrar información confidencial. Además de anunciar sus productos con videos de YouTube y venderlos en un mercado, tienen una pequeña comunidad de Discord para reclutar nuevos miembros. Y parecen tener mucho tiempo para contaminar la cadena de suministro de software de código abierto.
Durante la primera semana de abril, nuestro sistema de inteligencia artificial marcó una serie de paquetes cargados en PyPI como sospechosos, y luego nuestros investigadores de seguridad confirmaron que eran maliciosos. Estos paquetes tenían un patrón de nombres que consistía en el prefijo "py" seguido de referencias al software antivirus: pydefenderultra , pyjunkerpro , pyanalizate y pydefenderpro .
Carlos Fernández notó que los paquetes fueron acreditados al grupo SylexSquad, sugiriendo la continuación de una campaña que habíamos rastreado antes involucrando los paquetes reverse_shell y sintaxisoyyo . Después de hacer este descubrimiento, comenzamos a mapear sus actividades.
En un juego del gato y el ratón, cada vez que confirmábamos que uno de estos paquetes era malicioso, el equipo de PyPI nos ayudaba a eliminarlo y, un par de horas más tarde, los malhechores se infiltraban en un paquete con un nombre similar.
Para darle una idea completa de esta campaña, recapitulemos nuestros hallazgos iniciales:
Si los desarrolladores instalaran el paquete PyPI reverse_shell , setup.py
ejecutaría bypass.py
, un script ligeramente ofuscado alojado en GitHub y codificado como una serie de números que corresponden a códigos ASCII.
Después de la desofuscación, crearía nuevos valores de registro en Windows para persistencia y, en consecuencia, llamaría a otro archivo alojado en GitHub, WindowsDefender.py
, un ladrón de información. Los datos confidenciales, como la información del navegador (historial, cookies, contraseñas...), cuentas de Steam, cuentas de Telegram, tarjetas de crédito e incluso una captura de pantalla del escritorio de la víctima, se cargarían utilizando el webhook de Discord del atacante.
Avance rápido a los nuevos paquetes acreditados a este grupo y encontramos un setup.py
completamente diferente que consiste en un código fuertemente ofuscado (cifrado AES 256) generado con Pyobfuscate , un servicio que promete "protección por 4 capas de algoritmo". Antes de que Carlos se arremangara para el proceso de desofuscación, solo pudimos distinguir dos piezas de información del océano de código camuflado: la URL del servicio y un mensaje legible: ' why, are, you, reading, this, thing, huh
Cada palabra en ese mensaje era una variable utilizada para el proceso de desofuscación:
No entraré en detalles sobre cómo funciona Pyobfuscate, pero con paciencia y experiencia, Carlos logró desofuscar el código y revelar su verdadera forma. Encontró intrigante que el contenido ofuscado no solo estuviera presente en setup.py
, sino también en WindowsDefender.py
, legible anteriormente, que se tomó inicialmente de GitHub y ahora del servicio transfer.sh .
Cuando los malos actores no se mueven lo suficientemente rápido, existe una buena posibilidad de que los investigadores de seguridad como nosotros, y las reglas de GitHub sobre no permitir que la plataforma se use como una CDN de malware , arruinen sus planes. Tal es el caso de WindowsDefender.py
, que inicialmente estaba alojado en el repositorio de GitHub “joeldev27” cuando lo usaban los paquetes de PyPI pycracker y pyobfpremium , y quedó inactivo poco después.
Dado que ese nombre de archivo se usaba constantemente, investigué un poco y descubrí que WindowsDefender.py
estaba alojado en un repositorio de GitHub llamado CosasRandoms480 . Cuando compartí este hallazgo con Carlos, respondió con asombro: “En las próximas horas, aparecerá un nuevo paquete en PyPI con un setup.py
ofuscado. Después de la instalación, se descargará de ese repositorio en el que acaba de encontrar un script muy ofuscado llamado WindowsDefender.py
que establecerá un mecanismo de persistencia y descargará el ladrón de información que investigamos anteriormente, también llamado WindowsDefender.py
”.
Su predicción se convirtió en realidad cuando el paquete pyobfadvance apareció menos de 30 minutos después en PyPI, utilizando efectivamente "CosasRandoms480" como un CDN de malware. Se lo informamos al equipo de PyPI y se eliminó poco después.
Los científicos y los filósofos se han preguntado si vivimos en una simulación por computadora . Trabajar como investigador de seguridad ciertamente se siente así. Está atrapado en un ciclo de investigación, descubrimiento e informes, y las mismas amenazas siguen apareciendo una y otra vez.
Dos días después, se marcó en nuestro sistema un nuevo paquete acreditado por SylexSquad: pydefenderpro. El mismo setup.py
ofuscado. Misma URL del mismo repositorio de GitHub ejecutando el mismo WindowsDefender.py
con el mismo código de mecanismo de persistencia y la misma ejecución del ladrón de información en WindowsDefender.py
. Todo parecía igual, pero el archivo ya no estaba ofuscado y se invocaba un nuevo script desde transfer.sh :
“¡Es una RATA!” Carlos me envió un mensaje en Slack . “Y también un ladrón de información–”
"¿Un mutante RATA?" Respondí, refiriéndome a una tendencia que hemos estado siguiendo en la naturaleza de un tipo de malware que combina troyanos de acceso remoto y ladrones de información.
“Exactamente”, dijo Carlos.
La investigación de OSINT reveló que el nuevo código RAT no era original, sino una copia de una copia de DiscordRAT :
Enjuague y repita : un paquete malicioso se informa al equipo de PyPI y el equipo de PyPy lo elimina.
Por supuesto, un nuevo paquete, pydefenderultra, entró en escena poco después. Lo que fue diferente aquí es que los delincuentes migraron al servicio pastebin.pl en lugar de GitHub para descargar WindowsDefender.py
, probablemente debido a que el repositorio "CosasRandoms480" se desactivó.
Sospechamos que la versión legible de WindowsDefender.py
facilitó la confirmación de que estaba violando las reglas de GitHub . Pero, ¿por qué los malos actores decidieron desofuscar el guión? ¿Fue demasiado complicado para su proceso simplista?
La RAT siguió mutando. El menú y los comentarios ahora estaban traducidos al español y tenían funcionalidades adicionales.
El ciclo continuó cuando subieron otro paquete, pyjunkerpro . Esta vez, las funcionalidades agregadas incluyeron un registrador de teclas, una grabadora de audio, la filtración de datos del sistema operativo y la capacidad de cargar cualquier archivo de la víctima al canal Discord del atacante. Los comentarios sobre el código fueron inusualmente abundantes, lo que generalmente solo se asocia con el código tutorial y no con una pieza de malware.
“Espera”, dijo Carlos, pensando en voz alta, “¿Qué pasa si están usando IA para crear nuevas funcionalidades?”.
Herramientas como GPTZero y Copyleaks proporcionan un buen punto de partida para detectar texto generado por IA. Sin embargo, identificar el código generado por IA sigue siendo un desafío, ya que actualmente no hay herramientas disponibles (que yo sepa) capaces de hacerlo con precisión. Afortunadamente, los humanos siguen siendo muy buenos para reconocer patrones...
Rápidamente abrí una pestaña de ChatGPT y escribí un mensaje en español, que se tradujo como: "Escribe el código de Python para un bot de Discord que carga audio desde una computadora remota usando PyAudio". El resultado que obtuve fue inquietantemente similar:
Parece que estábamos rastreando a los script kiddies que copiaron el código de varias fuentes y luego usaron ChatGPT para agregar nuevas capacidades. El código único resultante les dio la confianza para anunciarlo en YouTube o venderlo a través de su propio mercado. Y nadie sospecharía que no era una creación original.
Esto plantea una pregunta intrigante: ¿cómo deberíamos llamar a estos malos actores? ¿Niños con guión de IA? ¿Niños rápidos?
Le pregunté a ChatGPT y me dijo: Si una persona está usando ChatGPT para agregar nuevas capacidades a su malware, se le puede considerar un tipo de pirata informático más avanzado que un script kiddie tradicional. Puede ser más exacto referirse a ellos como "piratas informáticos" o "piratas informáticos asistidos por IA".
Fascinante.
ChatGPT les está dando más estatus.
En aras de la experimentación, Carlos quería probar un aviso para ver si la herramienta también nos ayudaría a obtener más información sobre las actividades de los malos actores.
“Necesito código de Python que pueda usar la API de Discord como un bot (usando un token). El script debe conectarse al bot y mostrar la información del gremio, los miembros del gremio, los canales del gremio y el historial de mensajes”.
Como era de esperar, ChatGPT generó un código muy comentado e instrucciones claras para comenzar: para usar este código, reemplace "your_bot_token_here" con su token de bot y ejecute el script de Python . Así que copiamos el token que agregaron los "hackers asistidos por IA" en MicrosoftUpdate.py
y lo pegamos en nuestro script de Python generado por IA.
Ejecutamos ese código...
…¡y estábamos dentro! Recopilamos información sobre los miembros (MEE6, $Demon666, $̷y̷n̷t̷a̷x̷E̷r̷r̷o̷r̷, aitanaxx05 + 4 representantes, Esmeralda, SylexNaranjoDomina y AI Image Generator), canales e historial de mensajes. Resulta que ya habían infectado a un par de usuarios: identificamos una IP de Cuba y otra de India. Y la información del sistema operativo se filtraba a canales con el nombre del nombre de usuario de la víctima infectada:
Descubrimos que estábamos conectados a un bot llamado “SylexNaranjoDomina'' que tenía privilegios de administrador. Esto podría permitir que alguien agregue miembros, elimine webhooks o modifique canales existentes.
Alguien podría cambiar fácilmente el nombre del gremio de "El servidor de Demon666" a "El servidor de un Script Kiddie", una descripción adecuada para este tipo de mal actor, aunque creo que ChatGPT puede desaprobar esa idea.
Está claro a partir de esta investigación que la proliferación de MaaS y el uso de código asistido por IA ha creado nuevas oportunidades para los malos actores menos competentes técnicamente. Con más usuarios aprovechando estas herramientas y ofertas, existen aún más oportunidades para que los paquetes maliciosos infecten su entorno de construcción. A medida que el panorama de la ciberseguridad continúa evolucionando, también deben hacerlo nuestras defensas. Si nos mantenemos informados, cautelosos y protegidos, podemos estar un paso adelante contra la amenaza en constante cambio del delito cibernético.