FIBER
Cuando se ejecuta una aplicación, se le asigna un proceso en la memoria. Este proceso puede tener varios subprocesos. Los subprocesos permiten que la aplicación ejecute varias tareas al mismo tiempo. Los subprocesos están controlados por el programador del sistema operativo.
Una fibra es esencialmente un hilo liviano, la principal diferencia es que utiliza multitarea cooperativa, en lugar de preventiva. Una fibra continuará hasta que ceda, en lugar de estar controlada por el programador del sistema operativo. Las fibras son invisibles para el planificador de Kernel, ya que se implementan en modo de usuario en Kernel32.dll.
Syntax
Esto no es nada nuevo pero quiero compartiles una implementacion con mi toque especial la cual he diseñado con c# y powershell,nim para generar un bypass al windows defender sin mas vamos a la practica.
- Paso
debemos tener nuestra carga preparada en esta ocasion construi una simple shell reverse usando el lenguaje Nim
2. Paso
compilamos nuestra shell y procedemos a extraer su shellcode gracias a Donut
creditos Wolver
despues de generar nuestra shellcode alojado en loader.bin crearemos un pequeño proyecto para realizar una conversion la cual nos ayudara a codificar el shellcode para no emberlo crudo
3 Paso
Loader
crearemos un script en powershell para cargar y ejecutar nuestro shellcode
- Importamos Kernel32.dll atravez de Pinvoke
para este caso haremos uso de
- VirtualAlloc
- CreateFiber
- SwitchToFiber
- ConvertThreadToFiber
ya tenesmos la estructura de las apis almacenadas en una variable ahora procedemos a cargarlas
creamos la variable $code para almacenar el resultado del converter (shellcode)
agregamos la funcion para retornar el string en matriz de Bytes
Creamos una variable de tipo Byte la cual almacenara nuestro shellcode descifrado
- Asignamos memoria ejecutable
- MEM_COMMIT 0x00001000
- PAGE_EXECUTE_READWRITE (0x40)
- - MEM_RESERVE (0x3000)
- copiamos el shellcode a la memoria
- Convertimos el hilo en una fibra
Las fibras solo se pueden crear a partir de otras fibras, por lo que nuestro hilo existente deberá convertirse en una fibra:
- creamos una fibra
Una fibra, a diferencia de un subproceso, no comienza la ejecución hasta que se selecciona manualmente mediante la función SwitchToFiber. La fibra continuará funcionando hasta que salga o hasta que llame a SwitchToFiber para ejecutar una nueva fibra.
- Ejecutar fibra
Tips
Codifique las importaciones del api
proyecto