
Driver de kernel do Windows para detecção em tempo real de técnicas de injeção de processos, incluindo shellcode, DLL e injeção reflexiva, com hooking de syscall e detecção de anomalias.
FalconEye é um software de detecção de endpoint do Windows para injeções de processos em tempo real. É um driver em modo kernel que visa capturar injeções de processos conforme elas acontecem (tempo real). Como o FalconEye é executado em modo kernel, ele fornece uma defesa mais forte e confiável contra técnicas de injeção de processo que tentam evadir vários hooks em modo de usuário.
Você pode conferir nossa apresentação no 2021 Blackhat ASIA Arsenal e slides.
A tabela abaixo mostra o status de implementação e a lógica de detecção para as várias técnicas de injeção de processo. WPM significa WriteProcessMemory. Para testar a detecção, consulte a seção de referências.
| Technique | Status | Detection | POC Used |
|---|---|---|---|
| Atombombing | ✓ | Hook do QueueUserAPC e procura pela família de funções GlobalGetAtom | Pinjectra |
| Instrumentation callback injection | ✓ | Detecta se uma nova thread é criada a partir de código flutuante | https://github.com/antonioCoco/Mapping-Injection |
| Reflective DLL Injection | ✓ | Detecta se uma nova thread é criada a partir de código flutuante e se o cabeçalho PE está sendo escrito na vítima | MInjector |
| PROPagate | ✓ | Hook do SetProp para obter o endereço da propriedade que está sendo escrita e correlacionar com as chamadas WPM anteriores para obter o endereço do código flutuante | Pinjectra |
| Process Hollowing | ✓ | Detectado usando cabeçalho PE escrito na memória do processo alvo | MInjector |
| CreateRemoteThread with LoadLibrary | ✓ | Nova thread com endereço inicial apontando para LoadLibrary. A versão do MInjector também escreve o caminho da DLL usando WPM, que também é detectado | MInjector, Pinjectra |
| CreateRemoteThread with MapViewOfFile | ✓ | Detecta se uma nova thread é criada a partir de código flutuante | Pinjectra |
| Suspend-Inject-Resume | ✓ | Detecta se uma nova thread é criada a partir de código flutuante(MInjector). Caminho da DLL sendo escrito via WPM (MInjector). Detecta se o contexto foi definido em uma thread previamente suspensa (Pinjectra) | MInjector, Pinjectra |
| QueueUserAPC | ✓ | Caminho da DLL sendo escrito via WPM | MInjector |
| QueueUserAPC com memset (Stackbombing) | ✓ | Hook do QueueUserAPC e procura por memset | Pinjectra |
| SetWindowLong (Injeção de memória extra de janela) | ✓ | Hook do SetWindowLong para obter o endereço do ponteiro de função sendo escrito e correlacionar com as chamadas WPM anteriores para obter o endereço do código flutuante | Pinjectra |
| Unmap + Overwrite | ✓ | Alerta se o processo atacante está desmapeando ntdll da vítima | Pinjectra |
| Kernel Ctrl Table | ✓ | Detecta se WPM está sobrescrevendo o campo KernelCallbackTable no PEB da vítima | https://github.com/odzhan/injection/blob/master/kct |

NOTA: Nosso foco tem sido a detecção e não a criação de um mecanismo de detecção com desempenho. Continuaremos esses esforços após a apresentação no BlackHat.
.
├── src
│ ├── FalconEye ---------------------------# FalconEye user and kernel space
│ └── libinfinityhook ---------------------# Kernel hook implementation
├── 2021BHASIA_FalconEye.pdf
└── README.md
BCDEDIT /set nointegritychecks ONAtombombing: Injeção de código nova em folha para Windows, 2016
Propagate - um novo truque de injeção de código, 2017
Injeção de processo no Windows: Extra window bytes, 2018
Pavel Asinovsky. Mergulhando na técnica não convencional de injeção de processo do zberp, 2016
Rotem Kerner. Ctrl-inject, 2018
Injeção de processo no Windows: Consolewindowclass, 2018
Injeção de processo no Windows: Facilidade de notificação do Windows, 2018
Um paradoxo: Escrevendo em outro processo sem abri-lo nem realmente escrever nele, 2007
Injeção de processo no Windows: Manipulador de controle de serviço, 2018
O FalconEye é licenciado para você sob a licença de código aberto Apache 2.0.
| USERDATA | ✓ | Verifica se o endereço alvo do WPM está no intervalo do conhost.exe. Se sim, verifica se algum ponteiro de função relevante do conhost corresponde ao endereço WPM armazenado anteriormente | https://github.com/odzhan/injection/blob/master/conhost |
| Ctrl-inject | ✓ | Detecta se o atacante faz WPM no intervalo KernelBase.dll da vítima | Pinjectra |
| ALPC Callback | ✓ | Extrai o pid da vítima em chamadas NtConnectPort para a porta ALPC. Para o par atacante-vítima pid, verifica chamadas WPM anteriores e aplica detecção de código flutuante | Pinjectra |
| WNF Callback | ✓ | WPM seguido por chamada UpdateWNFStateData | https://github.com/odzhan/injection/tree/master/wnf |
| SetWindowsHook | ✓ | Salva caminhos de módulo registrados no hook NtUserSetWindowsHookEx. Posteriormente, quando um módulo correspondente a esse caminho carrega em um processo diferente, gera alerta | MInjector |
| GhostWriting | ✓ | Detecta se o contexto é definido (NtSetContextThread é chamado) em uma thread previamente suspensa | Pinjectra |
| Service Control | ✓ | WPM sobrescrevendo o Service ID de um processo (serviço) | https://github.com/odzhan/injection/tree/master/svcctrl |
| Shellcode injection | ✓ | Nova thread iniciada a partir de código flutuante. Caminho da DLL sendo escrito por WPM | MInjector |
| Image Mapping | ✓ | Thread iniciada a partir de código flutuante. Cabeçalho PE sendo escrito por WPM. Caminho da DLL sendo escrito por WPM | MInjector |
| Thread Reuse | ✓ | Thread iniciada a partir de código flutuante. Caminho da DLL sendo escrito por WPM | MInjector |