
ESF strumento modulare di ingestione per sviluppo e ricerca.
Questo è uno strumento progettato per il consumo modulare degli eventi EndpointSecurity Framework (ESF) dall'ambiente macOS. È il mio tentativo di superare una serie di problemi riscontrati con gli strumenti esistenti, tra cui la perdita silenziosa di dati, il consumo rigido dei tipi di evento, la mancanza di supporto per tipi di dati alternativi e il sovraccarico dell'handler di accesso ai file.
Questo strumento si basa fortemente sull'eccellente lavoro svolto da Chris Ross, Omark-Ikram e dal team di Objective-See per i loro strumenti ProcessMonitor, Appmon e EndpointSecurityDemo. La mia comprensione di base e l'applicabilità dell'ingestione dei dati ESF sono state notevolmente migliorate e avviate dall'esame dei loro lavori, che hanno fatto gran parte del lavoro pesante per rendere possibile questo sviluppo. Questo strumento ha tentato di estrapolare i migliori elementi di questi strumenti ed espanderli al fine di consentire un'azione di consumo ESF caso per caso in base alle esigenze degli investigatori.
Gli strumenti esistenti, inclusi strumenti più raffinati come Crescendo di FireEye, incorrono in una serie di problemi associati a ESF stesso che, nei test, sembrano legati al modo in cui il client ESF ingerisce i dati dal sottosistema. Il problema principale riscontrato è stata la perdita silenziosa di dati. Nei test, quando venivano ingeriti numerosi tipi di evento, i risultati confrontati con l'ingestione di un singolo tipo di evento mostravano una disparità nei dati accumulati. Nei test, eventi critici legati ad attività dannose non erano presenti nel set di dati acquisito che invece era presente nell'ingestione di un singolo tipo di evento.
Lo scopo principale di questo strumento era triplice:
A tal fine, lo strumento consente all'utente di specificare quali tipi di evento desidera raccogliere durante le operazioni tra i 51 tipi di evento NOTIFY disponibili (i tipi di evento AUTH sono stati omessi per questo strumento). Ciò significa che i ricercatori possono indirizzare specifici tipi di evento legati a specifiche operazioni che desiderano monitorare, oltre a contribuire a ridurre la perdita silenziosa di dati associata diminuendo il numero complessivo di tipi di evento raccolti dal client.
L'output dei dati è distribuito in file di log per singolo tipo di evento, che a loro volta sono raggruppati in file per genere di evento come processi, file, socket, ecc. Tutti i log sono scritti in JSON per una facile ingestione e possono essere ampliati dagli utenti modificando il codice sorgente per raccogliere campi aggiuntivi descritti nella documentazione dei tipi di evento fornita da Apple.
NOTE FUTURE -
Per prevenire la perdita silenziosa di dati, una potenziale soluzione sarebbe quella di multi-threadare lo strumento per consentire a più client ESF di funzionare simultaneamente, ciascuno raccogliendo un sottoinsieme dei tipi di evento. Questo potrebbe potenzialmente superare la soglia interna raggiunta che causa la perdita di dati osservata. Semplicemente non ho avuto il tempo di implementare i controlli aggiuntivi per questo.
COME USARLO
Richiede che SIP sia disabilitato!
Sfortunatamente, poiché questo è un codice POC di sviluppo, non potrai usarlo con SIP abilitato poiché l'accesso al sottosistema ESF è limitato a binari firmati. Poiché questo non è firmato, SIP deve essere disabilitato per l'uso. Pertanto, usalo solo su macchine non di produzione.
Ci sono tre tipi di esecuzione: puoi specificare l'ID di un event_id dal file di configurazione, specificare un group_id dal file di configurazione, oppure puoi fare riferimento al file di configurazione con le righe degli ID dei tipi di evento o dei gruppi non commentate.
Esempio 1 = Raccogli solo eventi ES_EVENT_TYPE_NOTIFY_EXEC: ./ESFang -id 2
Esempio 2 = Raccogli eventi del genere File: ./ESFang -group 2
Esempio 3 = Raccogli tipi di evento o gruppi specificati dal file di configurazione: ./ESFang -config ./ESF_config.txt
NOTA SUL FILTRO CODIFICATO
All'interno del codice sorgente c'è un filtro di processo codificato che si trova alle righe 460 - 469. Questo filtro può essere manipolato per catturare su PID, PPID o nome del processo specifici. È stato aggiunto come soluzione "hacky" per scopi di filtraggio specifici. I tentativi di renderlo dinamico da riga di comando per alimentare Inspector sono tutti falliti. Quindi è rimasto codificato.
NOTA SUL MUTER DI PROCESSO CODIFICATO
All'interno del codice sorgente c'è una capacità di muting dei processi codificata trovata alle righe 471 - 491. Questo filtro può essere usato per silenziare la cattura di eventi specifici in base al percorso del processo o del processo padre rispettivamente. Deve essere usato con cautela poiché tutti i processi che corrispondono al nome specificato saranno silenziati se il processo o il padre di qualsiasi attività corrisponde. Questo era in beta-testing al momento del rilascio.