Unhooking Bitdefender

3xploit
4 min readJul 8, 2023

--

Que es Unhook?

El término “unhooking” se refiere al proceso de eliminar o desactivar un “hook” que ha sido establecido en un sistema o aplicación. Un hook es un mecanismo que permite interceptar eventos o funciones en un sistema operativo o una aplicación para realizar acciones adicionales o modificar su comportamiento.

Cuando se realiza el unhooking, se deshace la conexión establecida por el hook, lo que permite que el sistema o la aplicación vuelva a su estado original sin la interferencia del hook. Esto puede ser necesario en ciertos casos, como cuando se desea restaurar el comportamiento predeterminado de una función o desactivar una modificación realizada por un hook malicioso.

Cuando Windows crea un nuevo proceso, BitDefender inyecta la DLL atcuf64.dll en el proceso y enlaza muchas de las funciones ntdll.dll/kernelbase.dll . Si, por ejemplo, CreateRemoteThreadEx una llamada de un código malicioso, BitDefender puede interceptar la llamada

Prueba de Concepto

Bitdefender premiun licenciado

la siguiente imagen muestra cuando se ejecuta el binario en este caso la prueba de concepto, se inyecta las DLL de bitdefender.

La siguiente imagen muestra la ZwCreateProcess cuando Bitdefender se conecta a Ndll.dll. se genera la instruccion JMP (el gancho o Hook)

En pocas palabras tenemos una funcion hookeada por bitdefender a la espera de analizar comportamientos o llamados anomalos.

En este caso se puede observar CreateRemoteThreadEx desenganchado, despues de realizar en unhook. se debe reflejar de esta manera.

Una de las maneras de retonar el API a su estado natural es leer los bytes originales de la funcion original despues de manipularla por medio de un depurador logrando el desamblado de la func directamente desde la DLL.

Se escriben los bytes originales en lugar de sus bytes alterados mediante una simple tecnica de parcheo en la memoria donde podemos escribir data en la direccion especifica.

Bytes originales del api

Como se puede analizar podemos obtener los bytes originales del api al desamblara los cuales corresponden a

4C-8B-DC-53–56

los cuales el bitdefender inyecta y remplaza por una instruccion JMP para redirigir el flujo hacia una funcion personalizada de la solucion de defensa para su analisis y deteccion.

adjunto mi pequeño fragmento de codigo para realizar el parche en memoria 🔥

Direccion de memoria y parcheo exitosamente

.text:00007FFFA000C980 kernelbase.dll:$2C980 #2BD80 <CreateRemoteThreadEx>

HANDLE CreateRemoteThreadEx(
[in] HANDLE hProcess,
[in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] SIZE_T dwStackSize,
[in] LPTHREAD_START_ROUTINE lpStartAddress,
[in, optional] LPVOID lpParameter,
[in] DWORD dwCreationFlags,
[in, optional] LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
[out, optional] LPDWORD lpThreadId
);

omitire algunos pasos y dejare algunas imagenes del bypass a bitdefender con HAVOC C2

  1. paso por medio de obfuscator customizado generare el shellocode el cual pasara por varios procesos de cryptografia para despues servirlo y sera entregado por medio de autenticacion de api-key.

peticion al server customizado. respuesta cifrada mas obfuscacion personalizada. 🔒

  • parcheo de ETW
  • unhooking
  • debsofucacion
  • decodificacion
  • descifrado
  • inyeccion

Resultado final obtuvimos un bypass a bitdefender realizando un flujo de tecnicas de evasion 💥

happy hacking

3xploit666

--

--

3xploit

Ethical Hacker | Pentester Cloud | Red Team | Offensive Developer | Adversary Simulation | Golang Developer