
Strumenti di ricognizione per attacchi mirati in C#
Questo è un assembly .NET personalizzato che esegue una serie di attività di situational awareness. Sono disponibili diversi gruppi di funzionalità:
Non sapevo che GhostPack fosse in sviluppo quando ho scritto questo; alla fine abbiamo rilasciato i nostri strumenti più o meno nello stesso periodo. La realtà è che GhostPack ora è molto più ricco di funzionalità. Sto rimuovendo la funzione PrivescCheck perché SharpUp copre tutte le sue funzionalità e molto altro.
Il punto chiave è che tutto è implementato in .NET puro, quindi niente PowerShell.
È configurato e controllato tramite parametri da riga di comando, rendendolo adatto per l'uso con la direttiva execute-assembly di Beacon.
Questo ottiene una serie di informazioni dall'host. Attenzione: potrebbe esserci MOLTO output. Mostrerà:
Il verbo 'basic' deve essere passato sulla riga di comando, seguito dal controllo specifico richiesto. Se la parola 'all' viene passata come secondo parametro, verranno eseguiti tutti i controlli.
Nota che se viene usato 'all', viene automaticamente incluso un 'proxycheck http://www.google.com'. Vedi la sezione proxycheck per i dettagli.
Esegui tutti i controlli di base: beacon> execute-assembly /tmp/Reconerator.exe oppure beacon> execute-assembly /tmp/Reconerator.exe basic all
Esegui solo l'enumerazione MRU: beacon> execute-assembly /tmp/Reconerator.exe basic mru
Elenca solo le unità mappate: beacon> execute-assembly /tmp/Reconerator.exe basic mappeddrives
Abbastanza sicuro. Si interroga il registro di sistema; è improbabile che venga monitorato.
Questo permette di eseguire una query LDAP. Il modo più semplice per dimostrarlo è con un esempio.
Questo mostrerà tutti gli utenti nel dominio 'dc=stufus,dc=lan' con W2K8DC come controller di dominio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "objectClass=user" 0
Questo mostrerà un massimo di 5 utenti nel dominio 'dc=stufus,dc=lan' con W2K8DC come controller di dominio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "objectClass=user" 5
Questo mostrerà tutti i membri del gruppo Domain Admins nel dominio 'dc=stufus,dc=lan' con W2K8DC come controller di dominio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "(&(objectClass=group)(cn=Domain Admins))" 0
Questo mostrerà tutti i membri dei gruppi Domain Admins o Enterprise Admins nel dominio 'dc=stufus,dc=lan' con W2012DC come controller di dominio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2012DC/dc=stufus,dc=lan" "(&(objectClass=group)(|(cn=Enterprise Admins)(cn=Domain Admins)))" 0
Questo genererà traffico di rete verso il controller di dominio specificato. Per chiarezza, utilizza LDAP (a differenza di RPC o simili).
Esegue una query DNS utilizzando il server DNS dell'host.
Risolvi www.google.com:
beacon> execute-assembly /tmp/Reconerator.exe resolvehost www.google.com
Questo genererà una query DNS verso il controller di dominio, ma è improbabile che venga segnalato come allarme a causa dell'enorme volume di richieste DNS legittime.
Questo permette di interagire con Windows Search (ex Servizio di indicizzazione di Windows) che consente di cercare rapidamente file e cartelle interessanti (e i loro contenuti). Le e-mail sono solitamente indicizzate, ma le cartelle di rete no, quindi potrebbe non essere perfetto per cercare le home directory degli utenti se sono memorizzate in remoto. Tuttavia, è molto veloce.
L'interfaccia di Windows Search è simile a SQL; questa implementazione permette di specificare, di fatto, il contenuto della clausola 'WHERE'. È più facile da spiegare con esempi, ma se si vogliono conoscere tutti i possibili criteri, è necessario leggere MSDN.
Trova tutto ciò che è stato indicizzato e che contiene la parola 'password' da qualche parte (cioè cerca nel contenuto di file ed e-mail):
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "CONTAINS('password')"
Trova tutto ciò che è stato indicizzato e che ha la parola 'stufus' nel percorso o nel nome file:
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "System.ItemPathDisplay LIKE '%stufus%'"
Trova tutto ciò che è stato indicizzato e che ha la parola 'stufus' nel nome file OPPURE contiene la parola 'secret':
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "System.ItemName LIKE '%stufus%' OR CONTAINS('secret')"
Non sono a conoscenza di nulla che possa considerare questa attività sospetta.
Restituisce il server proxy che verrebbe utilizzato per visitare un determinato URL. Questo serve per gestire situazioni in cui potrebbero esserci proxy diversi per URL diversi, o varie esclusioni complesse in atto. L'URL di interesse viene passato come parametro.
Nota che se viene specificato 'basic all' (vedi sopra), include automaticamente un proxycheck a http://www.google.com, supponendo che la maggior parte delle organizzazioni abbia un proxy di uscita per tutto l'accesso a Internet non interno.
Mostra il server proxy che verrà utilizzato quando si visita www.google.com:
beacon> execute-assembly /tmp/Reconerator.exe proxycheck www.google.com
Mostra il server proxy che verrà utilizzato quando si visita https://www.mwrinfosecurity.com:
beacon> execute-assembly /tmp/Reconerator.exe proxycheck https://www.mwrinfosecurity.com
Questa è un'attività locale e legittima; non sono a conoscenza di nulla che possa considerarla sospetta.
Questo esplorerà una serie di vettori di escalation dei privilegi e riferirà se sono possibili o meno. Attualmente, questo numero è 1.
Proprio come il modulo BASIC qui sopra, è possibile specificare privesccheck all sulla riga di comando per tentare tutti i controlli, oppure un controllo specifico se necessario.
Il verbo 'basic' deve essere passato sulla riga di comando, seguito dal controllo specifico richiesto. Se la parola 'all' viene passata come secondo parametro, verranno eseguiti tutti i controlli.
| Controllo | Descrizione |
|---|---|
| alwaysinstallelevated | Determina se la chiave 'AlwaysInstallElevated' è impostata su 1 o meno. Se impostata, eseguirà qualsiasi file MSI come amministratore locale. |
| Controllo | Note |
|---|---|
| alwaysinstallelevated | Questa è una query di registro locale; è improbabile che venga segnalata come dannosa. |
Tenta tutti i controlli di escalation dei privilegi:
beacon> execute-assembly /tmp/Reconerator.exe privesccheck all
Controlla solo se la chiave di registro AlwaysInstallElevated è impostata:
beacon> execute-assembly /tmp/Reconerator.exe privesccheck alwaysinstallelevated
Compila questo in Visual Studio 2019. Attualmente ha come target .NET v4. Puoi cambiarlo nelle preferenze di compilazione se lo desideri.
| Controllo | Descrizione |
|---|
| env | Mostra tutte le variabili d'ambiente. |
| info | Mostra l'indirizzo IP dell'host e l'identificatore della versione del sistema operativo (major/minor). |
| mru | Cerca vari elenchi "usati più di recente". Attualmente includono la cronologia della casella Esegui e l'MRU dei file e dei percorsi di Office per tutte le versioni di Word, Excel, PowerPoint, Access, Publisher e Visio. Viene anche mostrata la posizione della cartella speciale "Recenti". |
| favourites | Mostra gli URL memorizzati nella cartella dei preferiti (essenzialmente i segnalibri dell'utente). Attualmente non supporta le sottocartelle; dovrò risolvere questo problema. |
| mappeddrives | Mostra le unità di rete mappate dalla sessione dell'utente. Utile per trovare rapidamente condivisioni file centrali e home directory. Se è mappata, probabilmente contiene dati utili. |
| installedapplications | Elenca le applicazioni installate. Include sia le applicazioni installate come amministratore (sulla macchina locale) sia quelle installate dall'utente corrente. Sono elencate in diverse posizioni del registro. |
| onedrive | Mostra informazioni su OneDrive (inclusi siti/tenant sincronizzati). |