
Firewall RPC do Windows que audita, detecta e bloqueia chamadas de procedimento remoto maliciosas para impedir movimento lateral, reconhecimento e exploração de ataques baseados em RPC como DCSync e ZeroLogon.
Confira nossa postagem no blog RPC Firewall ou nossa palestra no BlackHat para entender melhor sobre RPC, ataques RPC e a solução: RPC Firewall.
Junte-se ao nosso espaço de trabalho da comunidade Slack |Zero| Labs para qualquer dúvida, problema, ou apenas para se manifestar.
Adoraríamos ouvir de você também por e-mail (se você é desse tipo). Entre em contato conosco pelo [email protected]
O tutorial a seguir mostra a instalação e configuração básica do RPC Firewall, além de uma demonstração de como ele protege contra vários ataques baseados em RPC.
RPC é o mecanismo subjacente usado para inúmeras técnicas de movimentação lateral, reconhecimento, ataques de retransmissão (relay), ou simplesmente para explorar serviços RPC vulneráveis.
Ataque DCSync? via RPC. DCOM remoto? via RPC. WMIC? via RPC. SharpHound? via RPC. PetitPotam? via RPC. PsExec? via RPC. ZeroLogon? via RPC... bem, você entendeu a ideia :)
Ao longo deste documento, usaremos os seguintes termos:
Pode ser usado para auditar todas as chamadas RPC remotas. Ao executar qualquer ferramenta de ataque remoto, você verá quais UUIDs RPC e Opnums foram chamados remotamente.
Veja um exemplo de configuração aqui.
Quando a RPCFW Configuration está configurada para auditoria, eventos são gravados no Log de Eventos do Windows. Eventos RPC Filter são gravados no log de segurança, com ID de evento 5712. Logs do RPC Firewall são gravados em Application/RPCFW.
Os usuários podem encaminhar esses logs para seu SIEM e usá-los para criar linhas de base de tráfego RPC remoto para vários servidores. Quando uma chamada RPC anormal é auditada, use-a para disparar um alerta para sua equipe SOC.
Integramos várias regras Sigma que podem ser usadas para detectar atividades e ataques RPC incomuns.
A RPCFW Configuration pode ser configurada para bloquear e auditar apenas chamadas RPC potencialmente maliciosas. Todas as outras chamadas RPC não são auditadas para reduzir ruído e melhorar o desempenho.
Quando uma chamada RPC potencialmente maliciosa é detectada, ela é bloqueada e auditada. Isso pode ser usado para alertar sua equipe SOC, mantendo seus servidores protegidos.
Para complementar a proteção, você pode usar os recursos de Filtragem RPC, que também são suportados via RpcFwManager.exe.
Um exemplo dessa configuração pode ser encontrado aqui.
É composto por 3 componentes:
Embora existam prós e contras para usar cada método, há alguns benefícios importantes em usar o RPC Firewall que requerem atenção especial. São eles:
Por outro lado, RPC Filters são ótimos para permitir ou negar em massa UUIDs inteiros, pois fazem isso sem problemas.
Antes de executar qualquer comando, é recomendável verificar o status da implantação. Isso é feito emitindo o comando '/status':
RpcFwManager.exe /status
Isso mostrará o status tanto do RPC Firewall quanto dos RPC Filters. Isso exibirá informações detalhadas sobre o status da instalação e também o status de execução da implantação.
Quase todos os comandos podem ser sufixados com fw ou flt no final. Isso informa ao RPCFW Manager se o comando é aplicado ao RPC Firewall ('fw'), aos RPC Filters ('flt') ou a ambos quando nenhum sufixo é usado.
Realize a instalação do recurso relevante (RPC Filters / RPC Firewall / ambos).
Certifique-se de que o visualizador de eventos esteja fechado durante a instalação/desinstalação. Além disso, é uma boa prática parar e desinstalar antes da instalação, para garantir que não haja versões anteriores instaladas.
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RpcFwManager.exe /install
Desinstalar faz o oposto. Também aqui é uma boa prática garantir que o serviço esteja parado antes da desinstalação.
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RPC Filters, por sua natureza, são aplicados em todo o sistema, a qualquer servidor RPC. A aplicação desses filtros também é persistente entre reinicializações. Qualquer processo novo ou antigo será protegido pelos RPC Filters, de acordo com a RPCFW Configuration.
RPC Firewall é injetado e protege qualquer processo de servidor RPC que esteja ouvindo chamadas RPC remotas. Isso é feito injetando o RPC Firewall em processos que carregam a RPCRT4.DLL (o Runtime RPC). Uma vez carregado, o RPC Firewall detectará se o servidor RPC está ouvindo chamadas RPC remotas. Se não estiver, ele se descarrega. Se o processo for um servidor RPC válido, o rpcFirewall começa a auditar e monitorar chamadas RPC recebidas, de acordo com a RPCFW Configuration.
O método recomendado para proteger serviços RPC é usando o comando '/start'. Isso inicia o serviço RPC Firewall (para 'fw' ou sem sufixo) e cria RPC Filters (para 'flt' ou sem sufixo).
RpcFwManager.exe /start
Também é possível usar o RPC Firewall ad-hoc, para proteger processos específicos. Isso não iniciará o serviço RPC Firewall e não persistirá entre reinicializações.
Para proteger um único processo pelo ID do Processo (PID):
RpcFwManager.exe /start pid <pid>
Para proteger um único processo pelo nome:
RpcFwManager.exe /start process <process name>
Para interromper a proteção, basta emitir o comando '/stop' com o sufixo apropriado (não é possível interromper a proteção para um processo específico).
RpcFwManager.exe /stop
De acordo com o sufixo usado ('fw' ou 'flt' ou nenhum), isso interromperá o serviço RPC Firewall e descarregará a DLL do RPC Firewall de todos os processos. Para RPC Filters, ele excluirá todos os filtros gerados pelo RPCFW Manager.
Uma vez iniciado, o RPC Firewall persistirá entre reinicializações. RPC Filters também são persistentes.
O RPCFW Manager procura um arquivo RpcFw.conf no mesmo diretório do executável. Este arquivo usa as seguintes opções de configuração:
Importante: Cada linha de configuração deve ser prefixada com 'fw:' ou 'flt:' para indicar se a linha é aplicada ao RPC Firewall ou ao RPC Filter.
Para ver mais "coisas" relacionadas a RPC, existe um comando show. Por enquanto, ele mostra apenas processos protegidos, que não podem ser protegidos com o módulo RPC firewall.
RpcFwManager.exe /show
A ordem da configuração é importante, pois a primeira correspondência determina o resultado da chamada RPC.
Por exemplo, o seguinte trecho de configuração protegerá um DC de um DCSync usando RPC Firewall. Isso é feito habilitando o opnum 3 DRSGetNCChanges "perigoso" do UUID MS-DRSR apenas de outros controladores de domínio.
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr1> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr2> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 opnum:3 action:block
Sempre que a configuração mudar, você precisa notificar o rpcFirewall.dll através do comando update:
RpcFwManager.exe /update
Para RPC Firewall, abra o Visualizador de Eventos -> Logs de Aplicativos e Serviços -> RPCFW. IDs de Evento 1 e 2 referem-se a eventos 'proteger' e 'desproteger'. O Evento 3 audita as chamadas RPC reais. Além disso, adicione a coluna Palavras-chave. Essa coluna conterá Sucesso/Falha de Auditoria, indicando se a chamada RPC foi bloqueada ou não.
Para RPC Filters, abra o Visualizador de Eventos -> Segurança -> RPCFW. Filtre para o ID de evento 5712.
Sim! Não seja tímido para fazer um pull request.
Nós também queremos! Entre em contato conosco com qualquer pensamento, ideia ou problema que você esteja tendo: [email protected]
Para mais detalhes, veja LICENSE.
| Nome do Parâmetro | Explicação | Suportado por ... |
|---|
| opnum: | Corresponde a um opnum RPC | RPC Firewall |
| verbose: | Pode ser true ou false. Quando true, gera informações de depuração para chamadas RPC específicas (padrão false) | RPC Firewall |
| prot: | Corresponde ao protocolo usado a qualquer uma das constantes de sequência de protocolo | ambos RPC Firewall e Filters |
| addr: | Corresponde a um endereço IP remoto (IPv4 ou IPv6, incluindo CIDR) | RPC Firewall e parcialmente pelo RPC Filters, leia mais aqui |
| uuid: | Corresponde a um uuid específico | ambos RPC Firewall e Filters |
| action: | Pode ser allow ou block (padrão allow) | ambos RPC Firewall e Filters |
| audit: | Pode ser true ou false. Controla se eventos são gravados no log RPCFW (padrão false) | ambos RPC Firewall e Filters |
| sid: | Corresponde a um usuário autenticado a um identificador de segurança. Pode ser um usuário ou grupo específico. | ambos RPC Firewall e Filters |