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 ( ), parte de la razón por la que las ofertas de malware como servicio (MaaS) como , y 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. No hace falta decir que estos productos a menudo son creados por ciberdelincuentes profesionales. SaaS DuckLogs Redline Stealer Racoon Stealer Marque estas casillas, complete este formulario, haga clic en este botón... ¡Aquí está su muestra de malware lista para usar! En las ofertas de MaaS menos populares que hemos encontrado en la naturaleza, como el capturador de fichas , 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": de Discord Z3US Incluso antes de unirme a Sonatype, me preguntaba . 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 en registros de código abierto con un costo de configuración y un conocimiento técnico mínimos. cómo sería la cara moderna del ciberdelito de malware Los investigadores de Avast 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. han observado 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. nuestros investigadores de seguridad confirmaron como maliciosos 6933 paquetes cargados en los registros npm y PyPI. Solo el mes pasado, Recientemente 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. rastreamos la campaña Posteriormente 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. investigamos las actividades Código patinado con una pizca de IA 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: , , y . pydefenderultra pyjunkerpro pyanalizate 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 y . Después de hacer este descubrimiento, comenzamos a mapear sus actividades. reverse_shell sintaxisoyyo 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 , ejecutaría , un script ligeramente ofuscado alojado en GitHub y codificado como una serie de números que corresponden a códigos ASCII. reverse_shell setup.py bypass.py 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, , 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. WindowsDefender.py Avance rápido a los nuevos paquetes acreditados a este grupo y encontramos un completamente diferente que consiste en un código fuertemente ofuscado (cifrado AES 256) generado con , 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: ' Cada palabra en ese mensaje era una variable utilizada para el proceso de desofuscación: setup.py Pyobfuscate why, are, you, reading, this, thing, huh 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 , sino también en , legible anteriormente, que se tomó inicialmente de GitHub y ahora del servicio . setup.py WindowsDefender.py 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 , arruinen sus planes. Tal es el caso de , que inicialmente estaba alojado en el repositorio de GitHub “joeldev27” cuando lo usaban los paquetes de PyPI y , y quedó inactivo poco después. no permitir que la plataforma se use como una CDN de malware WindowsDefender.py pycracker pyobfpremium Dado que ese nombre de archivo se usaba constantemente, investigué un poco y descubrí que estaba alojado en un repositorio de GitHub llamado . Cuando compartí este hallazgo con Carlos, respondió con asombro: “En las próximas horas, aparecerá un nuevo paquete en PyPI con un ofuscado. Después de la instalación, se descargará de ese repositorio en el que acaba de encontrar un script muy ofuscado llamado que establecerá un mecanismo de persistencia y descargará el ladrón de información que investigamos anteriormente, también llamado ”. WindowsDefender.py CosasRandoms480 setup.py WindowsDefender.py WindowsDefender.py Su predicción se convirtió en realidad cuando el paquete 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. pyobfadvance Los científicos y los filósofos se han preguntado si . 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. vivimos en una simulación por computadora Dos días después, se marcó en nuestro sistema un nuevo paquete acreditado por SylexSquad: El mismo ofuscado. Misma URL del ejecutando el mismo con el mismo código de mecanismo de persistencia y la misma ejecución del ladrón de información en . Todo parecía igual, pero el archivo y se invocaba un nuevo script desde : pydefenderpro. setup.py mismo repositorio de GitHub WindowsDefender.py WindowsDefender.py ya no estaba ofuscado transfer.sh “¡Es una RATA!” Carlos me envió un mensaje en . “Y también un ladrón de información–” Slack "¿Un mutante RATA?" Respondí, refiriéndome a una tendencia de un tipo de malware que combina troyanos de acceso remoto y ladrones de información. que hemos estado siguiendo en la naturaleza “Exactamente”, dijo Carlos. La investigación de OSINT reveló que el nuevo código RAT no era original, sino una copia de de : una copia DiscordRAT : un paquete malicioso se informa al equipo de PyPI y el equipo de PyPy lo elimina. Enjuague y repita Por supuesto, un nuevo paquete, entró en escena poco después. Lo que fue diferente aquí es que los delincuentes migraron al servicio en lugar de GitHub para descargar , probablemente debido a que el repositorio "CosasRandoms480" se desactivó. pydefenderultra, pastebin.pl WindowsDefender.py Sospechamos que la versión legible de facilitó la confirmación de que estaba violando . Pero, ¿por qué los malos actores decidieron desofuscar el guión? ¿Fue demasiado complicado para su proceso simplista? WindowsDefender.py las reglas de GitHub 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, . 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. pyjunkerpro “Espera”, dijo Carlos, pensando en voz alta, “¿Qué pasa si están usando IA para crear nuevas funcionalidades?”. Herramientas como y 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... GPTZero Copyleaks 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 o venderlo a través de su propio mercado. Y nadie sospecharía que no era una creación original. YouTube 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. OSINT con una pizca de IA 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: . Así que copiamos el token que agregaron los "hackers asistidos por IA" en y lo pegamos en nuestro script de Python generado por IA. para usar este código, reemplace "your_bot_token_here" con su token de bot y ejecute el script de Python MicrosoftUpdate.py 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. Mantente alerta 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.