
Firewall RPC di Windows che controlla, rileva e blocca chiamate di procedura remota malevole per prevenire movimento laterale, ricognizione e sfruttamento di attacchi basati su RPC come DCSync e ZeroLogon.
Dai un'occhiata al nostro post sul blog RPC Firewall o al nostro talk al BlackHat per comprendere meglio RPC, gli attacchi RPC e la soluzione: RPC Firewall.
Unisciti al nostro workspace della comunità Slack |Zero| Labs per qualsiasi domanda, problema o semplicemente per fare un saluto.
Saremo lieti di ricevere tue notizie anche via email (se sei quel tipo di persona). Contattaci a [email protected]
Il seguente tutorial mostra l'installazione e la configurazione di base di RPC Firewall, oltre a una demo su come protegge da vari attacchi basati su RPC.
RPC è il meccanismo sottostante utilizzato per numerose tecniche di movimento laterale, ricognizione, attacchi relay o semplicemente per sfruttare servizi RPC vulnerabili.
Attacco DCSync? tramite RPC. DCOM remoto? tramite RPC. WMIC? tramite RPC. SharpHound? tramite RPC. PetitPotam? tramite RPC. PsExec? tramite RPC. ZeroLogon? tramite RPC... beh, hai capito l'idea :)
In questo documento utilizzeremo i seguenti termini:
Può essere utilizzato per controllare tutte le chiamate RPC remote. Una volta eseguiti strumenti di attacco remoti, vedrai quali UUID e Opnum RPC sono stati chiamati da remoto.
Vedi un esempio di configurazione qui.
Quando la Configurazione RPCFW è configurata per il controllo, gli eventi vengono scritti nel Registro eventi di Windows. Gli eventi Filtro RPC vengono scritti nel registro di sicurezza, con ID evento 5712. I log di RPC Firewall vengono scritti in Application/RPCFW.
Gli utenti possono inoltrare questi log al loro SIEM e usarli per creare baseline del traffico RPC remoto per vari server. Quando viene controllata una chiamata RPC anomala, usala per attivare un avviso per il tuo team SOC.
Abbiamo integrato diverse regole Sigma che possono essere utilizzate per rilevare attività e attacchi RPC insoliti.
La Configurazione RPCFW può essere configurata per bloccare e controllare solo le chiamate RPC potenzialmente dannose. Tutte le altre chiamate RPC non vengono controllate per ridurre il rumore e migliorare le prestazioni.
Quando viene rilevata una chiamata RPC potenzialmente dannosa, viene bloccata e controllata. Questo può essere utilizzato per avvisare il tuo team SOC, mantenendo protetti i tuoi server.
Per integrare la protezione, puoi utilizzare le capacità di filtro RPC, anch'esse supportate tramite RpcFwManager.exe.
Un esempio di tale configurazione si trova qui.
È composto da 3 componenti:
Sebbene ci siano pro e contro per l'uso di ciascun metodo, ci sono un paio di vantaggi principali nell'usare RPC Firewall che richiedono particolare attenzione. Questi sono:
D'altra parte, RPC Filters sono ottimi per consentire o negare in blocco UUID interi, poiché lo fanno senza problemi.
Prima di eseguire qualsiasi comando, si consiglia di controllare lo stato della distribuzione. Questo si fa emettendo il comando '/status':
RpcFwManager.exe /status
Questo mostrerà lo stato sia di RPC Firewall che di RPC Filters. Verranno fornite informazioni dettagliate sullo stato dell'installazione e anche sullo stato di esecuzione della distribuzione.
Quasi tutti i comandi possono essere seguiti da fw o flt alla fine. Questo dice al RPCFW Manager se il comando viene applicato a RPC Firewall ('fw'), RPC Filters ('flt') o a entrambi quando non si usa alcun suffisso.
Esegui l'installazione della funzione pertinente (RPC Filters / RPC Firewall / entrambi).
Assicurati che il visualizzatore eventi sia chiuso durante l'installazione/disinstallazione. Inoltre, è buona pratica fermare e disinstallare prima dell'installazione, per assicurarsi che non ci siano versioni precedenti installate.
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RpcFwManager.exe /install
La disinstallazione fa l'opposto. Anche qui è buona pratica assicurarsi che il servizio sia fermo prima della disinstallazione.
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RPC Filters, per loro natura, vengono applicati a livello di sistema, a qualsiasi server RPC. L'applicazione di tali filtri è persistente anche tra i riavvii. Qualsiasi processo nuovo o esistente sarà protetto da RPC Filters, secondo la Configurazione RPCFW.
RPC Firewall viene iniettato e protegge qualsiasi processo server RPC in ascolto di chiamate RPC remote. Questo viene fatto iniettando RPC Firewall nei processi che caricano RPCRT4.DLL (il Runtime RPC). Una volta caricato, RPC Firewall rileva se il server RPC è in ascolto di chiamate RPC remote. In caso contrario, si scarica. Se il processo è un server RPC valido, rpcFirewall inizia a controllare e monitorare le chiamate RPC in arrivo, secondo la Configurazione RPCFW.
Il metodo consigliato per proteggere i servizi RPC è utilizzare il comando '/start'. Questo avvia il servizio RPC Firewall (per 'fw' o nessun suffisso) e crea RPC Filters (per 'flt' o nessun suffisso).
RpcFwManager.exe /start
È anche possibile usare RPC Firewall ad-hoc per proteggere processi specifici. Questo non avvierà il servizio RPC Firewall e non persisterà tra i riavvii.
Per proteggere un singolo processo tramite ID processo (PID):
RpcFwManager.exe /start pid <pid>
Per proteggere un singolo processo tramite nome:
RpcFwManager.exe /start process <nome processo>
Per fermare la protezione, emetti semplicemente il comando '/stop' con il suffisso appropriato (non è possibile fermare la protezione per un processo specifico).
RpcFwManager.exe /stop
Secondo il suffisso usato ('fw' o 'flt' o nessuno), questo fermerà il servizio RPC Firewall e scaricherà la DLL RPC Firewall da tutti i processi. Per RPC Filters, eliminerà tutti i filtri generati dal RPCFW Manager.
Una volta avviato, RPC Firewall persisterà tra i riavvii. Anche RPC Filters sono persistenti.
Il RPCFW Manager cerca un file RpcFw.conf nella stessa directory dell'eseguibile. Questo file utilizza le seguenti opzioni di configurazione:
Importante: Ogni riga di configurazione deve essere preceduta da 'fw:' o 'flt:' per indicare se la riga viene applicata per RPC Firewall o RPC Filter.
Per vedere più "cose" relative a RPC, esiste un comando show. Per ora mostra solo i processi protetti che non possono essere protetti con il modulo RPC Firewall.
RpcFwManager.exe /show
L'ordine di configurazione è importante, poiché la prima corrispondenza determina l'esito della chiamata RPC.
Ad esempio, il seguente frammento di configurazione proteggerà un DC da DCSync utilizzando RPC Firewall. Lo fa abilitando l'opnum 3 "pericoloso" DRSGetNCChanges dell'UUID MS-DRSR solo da altri domain controller.
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
Ogni volta che la configurazione cambia, devi notificare rpcFirewall.dll tramite il comando update:
RpcFwManager.exe /update
Per RPC Firewall, apri il Visualizzatore eventi -> Registri applicazioni e servizi -> RPCFW. Gli ID evento 1 e 2 si riferiscono agli eventi 'proteggi' e 'non proteggere'. L'evento 3 controlla le chiamate RPC effettive. Inoltre, aggiungi la colonna Parole chiave. Questa colonna conterrà Audit Success/Failure, indicando se la chiamata RPC è stata bloccata o meno.
Per RPC Filters, apri il Visualizzatore eventi -> Sicurezza -> RPCFW. Filtra per ID evento 5712.
Sì! Non essere timido a fare una pull request.
Lo vogliamo anche noi! Contattaci con qualsiasi pensiero, idea o problema: [email protected]
Per maggiori dettagli vedi LICENSE.
| Nome Parametro | Spiegazione | Supportato da ... |
|---|
| opnum: | Corrisponde a un opnum RPC | RPC Firewall |
| verbose: | Può essere true o false. Se true, restituisce informazioni di debug per chiamate RPC specifiche (default false) | RPC Firewall |
| prot: | Corrisponde al protocollo utilizzato a una delle costanti di sequenza del protocollo | sia RPC Firewall che Filters |
| addr: | Corrisponde a un indirizzo IP remoto (IPv4 o IPv6, incluso CIDR) | RPC Firewall e parzialmente da RPC Filters, leggi di più qui |
| uuid: | Corrisponde a un uuid specifico | sia RPC Firewall che Filters |
| action: | Può essere allow o block (default allow) | sia RPC Firewall che Filters |
| audit: | Può essere true o false. Controlla se gli eventi vengono scritti nel log RPCFW (default false) | sia RPC Firewall che Filters |
| sid: | corrisponde a un utente autenticato a un identificatore di sicurezza. Può essere un utente o un gruppo specifico. | sia RPC Firewall che Filters |