martes, febrero 11, 2020

Xencrypt: Evasión en Windows 10 con Powershell usando cifrado AES

Los investigadores Xentrooy y SecForce han publicado un crypter en Powershell. Es un proyecto bastante nuevo, ya que si se ve el Github consta de pocos días. Llamó mi atención, ya que todo lo que es Powershell me llama la atención, debido a que los amigos de HackPlayers publicaron un interesante artículo.

Figura 1: Xencrypt: Evasión en Windows 10 con Powershell usando cifrado AES

Sin duda Xencrypt propone una solución interesante al juego de siempre, el juego de la evasión. El gato y el ratón. El que detecta con el que intenta no ser detectado. Como digo siempre en las clases, las protecciones mejoran y otros intentan evadirlas, con el objetivo de mejorar la protección. Este es el juego de la ciberseguridad, en cualquier protección que se precie.

PowerShell para Atacantes

Además, quería probar esta funcionalidad y herramienta, ya que creo que es un factor interesante, todo lo que es la evasión de protecciones. Viendo que me queda poco tiempo para el taller de Rooted Lab el día 3 de marzo sobre Offensive Powershell. Un taller donde le daremos ‘cera’ a Windows 10 y la Powershell. Había que probarlo e incluirlo.

Figura 4: Libro de Pentesting con PowerShell 2ª Edición de Pablo González

En otras palabras, Xencrypt proporciona un crypter que permite llevar a cabo la ofuscación de scripts y código para evitar su detección. La idea de Xencrypt es poder generar infinitas formas diferentes, es decir, tener diferentes scripts para ejecutar lo mismo que permiten la no detección por parte de un antivirus. Xencrypt es un crypter de Powershell, el cual utilizar cifrado AES y compresión GZip. Cada vez que se invoca se genera un script nuevo, con una salida o ejecución igual a lo que se quiere. En definitiva, como bien dicen los autores de la herramienta, es esencia es para Powershell un PE Crypter.

Figura 3: Xencrypt en GitHub

En otras palabras, con cada ejecución de Xencrypt, lo importante, es el gran número de variantes de script que se genera. Es decir, si tenemos un Mimikatz en Powershell, el cual es ‘cazado’ por el antivirus, se puede pasar por Xencrypt y la salida de la ejecución será un nuevo código de Mimikatz ofuscado y cifrado. Cuando lo llevemos al equipo dónde antes se detectaba, la probabilidad de que lo detecte el antivirus habrá disminuido.

Probando Xencrypt

Lo primero era hacer una prueba con el propio script de Powershell. Si lo cargamos directamente en una Powershell con Windows 10 puede que nos salte el antivirus, ya que este código ya es detectado, por lo que se puede probar, pero hay que tenerlo en cuenta. Si vamos a una Powershell en un Windows 7, AMSI no estará para poder detectarlo.

La ejecución de la función Invoke-Xencrypt es muy sencilla. Tiene tres parámetros. El parámetro infile indica que el fichero de entrada. El parámetro outfile refleja el fichero de salida, el cual estará ya cifrado y ofuscado. El parámetro iterations indicará el número de iteraciones que se realizará. Este es uno de los factores que hacen que las variantes de la salida sean casi infinitas.

Figura 4: Función Invoke-Xencrypt

A continuación, se puede ver la salida del script prueba.ps1. El código hace lo mismo que el de entrada, solo que tiene un aspecto bastante diferente. En tiempo de ejecución se llevará a cabo un descifrado de la acción y realizará una ejecución del código. Se intenta evitar que palabras clave, rutas claves y etiquetas claves sean detectadas por AMSI.

Figura 5: Salida del script prueba.ps1

Las características que indican los autores y que son muy interesantes sobre esta herramienta son las siguientes:
• Evasión de AMSI y AV modernos. 
• Comprime y cifra scripts. 
• El overhead es mínimo, incluso negativo. 
• Variables aleatorias. 
• Cifrado aleatorio con máxima entropía. 
• Capas recursivas (o iteraciones) hasta 500.
Es fácil de modificar, quizá sea el punto más interesante, para poder crear una variante propia y que mejore la evasión en un momento determinado. Probando el prueba.ps1 con diferentes motores de antivirus, la salida es más que interesante.

Figura 6: Script ofuscado bypasseando frimas de AV

Por supuesto, hay que probarlo en Windows 10 con el AMSI y las posibilidades que este ofrece. Ya hemos hablado en este blog sobre AMSI y diferentes técnicas de bypass y que nuestra iBombshell ya implementa. Al final, esto es probar, probar y probar en busca de la evasión. El Ethical Hacking es así.

Saludos,

Autor: 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

1 comentario:

  1. Gracias Pablo, muy interesante. Podrías aclararme, ¿cómo se gestiona el intercambio de clave de AES siendo simétrica? Saludos desde Colombia

    ResponderEliminar