Concesión imperceptible de derechos de administrador

Todo el viernes, amigos. Hoy compartimos con ustedes otro material traducido en vísperas del lanzamiento del curso de ingeniería inversa .



Tuve una idea genial de cómo hacer que un usuario ejecute su aplicación sin ingeniería social o utilizando exploits de terceros. Además, simplemente puede avanzar e iniciar una infección masiva de archivos ejecutables, pero esto puede causar muchos problemas imprevistos, y también significa que las aplicaciones firmadas digitalmente de proveedores confiables aparecerán como archivos no confiables. Es una buena idea "capturar" solo un dll. No llamaré a este método para omitir UAC (Control de cuenta de usuario), porque aún necesita obtener permiso para ejecutar la aplicación (no la suya).

Loadlibrary


Es posible que ya esté familiarizado con este concepto, pero sin embargo le explicaré de qué se trata. Cuando la aplicación llama a LoadLibrary en el archivo dll, pero no proporciona la ruta completa al archivo, el sistema primero verifica la clave de registro KnownDlls, en la que busca la ruta, si no está allí, el sistema buscará en el directorio desde el que se ejecutó la aplicación y luego buscará en rutas de sistema como system32 / syswow64.

Puede colocar su archivo dll en el mismo directorio que la aplicación y asignarle el mismo nombre que tendría un archivo dll del sistema cargado normalmente, pero en cualquier caso, su archivo dll debe cumplir los siguientes requisitos:

  • La aplicación debe descargar el dll por nombre y no por la ruta completa (como suele ser el caso);
  • La biblioteca requerida no debe existir en HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ KnownDLLs;
  • Su dll debe coincidir con la arquitectura del procesador (recuerde que los procesadores de 64 bits simplemente omitirán las bibliotecas de 32 bits y viceversa);
  • La biblioteca está ubicada en System32 o Syswow64, ya que las rutas específicas a menudo no funcionan.

El virus ZeroAccess utilizó este método para aprovechar la "ingeniería social" y obligar al usuario a ejecutar el archivo. Para empezar, el instalador de Adobe Flash se descargó del oficial, el dll del bot se grabó en el mismo directorio que el instalador y luego se inició el instalador. Cuando se ejecuta el instalador, el control de cuenta de usuario muestra un mensaje de que la aplicación es suministrada por una fuente confiable de "Adobe Systems Incorporated", y es más probable que el usuario instale esta aplicación (esto lleva a la ejecución de un dll de bot malicioso).


¿Es esta una actualización real de Flash Player? ¿O ZeroAccess? Nadie lo sabe

Método menos invasivo


Imagine que hay una carpeta en la que se encuentran el 90% de las aplicaciones que requieren derechos de cuenta elevados y que se puede escribir sin este tipo de derechos. Bueno, dicha carpeta existe y esta es la %userprofile%Downloads . Probablemente entiendas a lo que me refiero.

No esperaba encontrar un archivo DLL que carga la mayoría de las aplicaciones y al mismo tiempo cumple con todos los criterios para un dwmapi.dll malicioso, y después de unos cinco minutos de búsqueda encontré una mina de oro: dwmapi.dll . Esta biblioteca no solo cumplió con todos los criterios, sino que también descargó todos los archivos de instalación. Ahora “dwmapi.dll” nuestro propio dll, “dwmapi.dll” nombre “dwmapi.dll” , “dwmapi.dll” en la carpeta Descargas y ejecute el archivo de instalación.



Éxito! Pero el hecho es que tan pronto como comencemos la instalación, no funcionará, ya que hemos reemplazado una biblioteca importante, pero esto es fácil de solucionar. Infectamos el dll.

Crear un dll infectar


Al principio, solo quería agregar un nuevo encabezado de sección, cambiar el campo NumberOfSections en el encabezado PE y luego agregar mi sección al final del archivo PE. Resultó que inmediatamente después del último encabezado de sección hay un directorio de importación relacionado que será sobrescrito por nuestro encabezado de sección. Por lo tanto, después de aproximadamente 2 horas de escribir una aplicación para restaurar todo el PE desde cero, alguien me recordó que el directorio de importación vinculado solo existe para acelerar la descarga de archivos importados y puede sobrescribirse, y luego simplemente deshabilitarse en el encabezado del PE.

Durante los siguientes 15 minutos sostuve CTRL + Z para volver a donde comencé y me sentí estúpido. Después de dos líneas de código, mi infector funcionó como debería y podría pasar al siguiente paso. Ahora el infector simplemente desconecta y reescribe el directorio de importación relacionado con un nuevo encabezado de sección, agrega una nueva sección al final del archivo PE, ajusta SizeOfImage para acomodar la nueva sección y luego cambia AddressOfEntryPoint para que apunte a nuestra nueva sección.

Todo lo que necesitamos ahora es el código que ponemos allí.

Shellcode


La elección obvia era forzar a la sección agregada a ejecutar shellcode, por lo que no teníamos que preocuparnos por las reubicaciones e importaciones. El código real es bastante simple y está escrito usando algunas macros FASM convenientes, voy a repasar rápidamente cómo funciona.

  • La pila se verifica para asegurarse de que DLL_PROCESS_ATTACH ha llamado a dwmapi.dll;
  • La estructura Ldr PEB se utiliza para obtener la dirección base de Kernel32 y Ntdll;
  • Se utiliza una implementación simple de GetProcAddress para importar las siguientes funciones: NtOpenProcessToken, NtQueryInformationToken, NtClose, ExpandEnvironmentStringsA, CreateProcessA;
  • El token de proceso actual se abre y el código le solicita que confirme que la aplicación desde la que estamos comenzando tiene derechos de administrador de UAC;
  • Resulta la ruta cmd.exe y luego se llama a la línea de comando;
  • La ejecución se transfiere nuevamente al punto de entrada real de dwmapi.dll, por lo que la ejecución puede continuar.

Poniendo todo junto


El resultado final de la operación infecta dwmapi.dll con nuestro shellcode y lo coloca en la carpeta de descarga, tan pronto como el usuario descarga y ejecuta el instalador, que requiere derechos de administrador, se llamará a una línea de comando como administrador (debido a Wow64FsRedirect y al hecho de que la mayoría de las configuraciones funcionan con wow64, podemos usar el mismo código en sistemas Windows de 32 bits y 64 bits).

Puede encontrar el infector completo y el código de shell en mi github: https://github.com/MalwareTech/UACElevator .

Eso es todo. ¡Nos vemos en el curso!

Source: https://habr.com/ru/post/457082/


All Articles