
ghidra Ghidra_12.1.3_build
Ghidra è un framework di reverse engineering del software (SRE)
Ghidra in Docker
Build
Dalla directory principale della tua release di Ghidra, esegui il comando seguente.
./docker/build-docker-image.sh
Questo creerà l'immagine docker di ghidra con un tag corrispondente alla versione di release di Ghidra.
La variabile d'ambiente MODE
Il container Docker di Ghidra supporta le seguenti modalità di esecuzione MODE:
- gui
- headless
- ghidra-server
- bsim
- bsim-server
- pyghidra
La variabile d'ambiente MODE designa quale punto di ingresso di Ghidra eseguire.
Lo script entrypoint.sh viene eseguito all'avvio del container.
Configurazione di un Container
La configurazione di un container viene effettuata come qualsiasi altro container docker. I volumi possono essere montati, le variabili d'ambiente possono essere impostate, le porte possono essere mappate dal container all'host e così via. I passaggi di configurazione variano molto in base alla MODALITÀ con cui viene avviato il container.
La directory base per Ghidra all'interno del container si trova in /ghidra.
Tutte le posizioni predefinite di ghidra per file, configurazioni, ecc., sono le stesse all'interno di essa.
Ghidra viene eseguito come utente ghidra all'interno del container, con uid 1001 e guid 1001.
L'utente ghidra ha solo i permessi per le seguenti directory all'interno del container:
/ghidra/home/ghidra
Quando un container non riceve argomenti passati con il comando docker run, la corrispondente interfaccia a riga di comando (CLI) per la MODE eseguita visualizzerà il suo messaggio di utilizzo.
Mappatura dei Volumi Locali a un Container
I volumi all'interno del container potrebbero incontrare problemi di permessi se i volumi non sono accessibili dagli utenti del gruppo id 1001.
L'uid e guid predefiniti per il container sono 1001:1001.
I volumi che vengono mappati al container dovrebbero essere accessibili da questo uid/guid.
Aggiungere l'utente della macchina host al gruppo 1001 sull'host aiuta a gestire i volumi che verranno utilizzati nel container.
Questo può essere facilmente fatto eseguendo sudo usermod -aG 1001 <user> su Linux.
Esempio di Modalità Headless
docker run \
--env MODE=headless \
--rm \
--volume /path/to/myproject:/home/ghidra/myproject \
--volume /path/to/mybinary:/home/ghidra/mybinary \
ghidra/ghidra:<version> \
/home/ghidra/myproject programFolder -import /home/ghidra/mybinary
Analizzando questo comando riga per riga:
docker runavvierà un container docker usando l'immagineghidra/ghidra<:<version>--env MODE=headlessconfigura la variabile d'ambienteMODEall'interno del container al valoreheadless--rmrimuove il container dopo il completamento del comando--volume /path/to/myproject:/home/ghidra/myprojectmonta il volume locale/path/to/myprojectsull'host in/home/ghidra/myprojectall'interno del container--volume /path/to/mybinary:/home/ghidra/mybinarymonta il volume locale/path/to/mybinarysull'host in/home/ghidra/mybinaryall'interno del containerghidra/ghidra:<version>è il riferimento completo per l'immagine docker, doveghidra/ghidraè il gruppo e il nome dell'immagine, e<version>è il tag./home/ghidra/myproject programFolder -import /home/ghidra/mybinarysono argomenti passati all'interfaccia a riga di comando dell'analizzatore headless di Ghidra
Non passare argomenti comporterà la visualizzazione dell'utilizzo dell'analizzatore headless.
/path/to/myproject sull'host deve essere accessibile al guid 1001 con permessi rwx.
Esempio di Modalità GUI
Eseguire l'interfaccia grafica utente (GUI) di Ghidra nel container docker non è un metodo raccomandato per eseguire Ghidra. Le GUI non sono un caso d'uso tipico per applicazioni dockerizzate.
docker run \
--env MODE=gui \
-it \
--rm \
--net host \
--env DISPLAY \
--volume "$HOME/.Xauthority:/home/ghidra/.Xauthority" \
ghidra/ghidra:<version>
In questa modalità, il container si basa sul forwarding X11 per visualizzare la GUI. La configurazione di X11 può variare, ma in questo caso, il file Xauthority dell'host viene montato nel container, il container è configurato per utilizzare la rete dell'host, e la variabile d'ambiente DISPLAY viene passata al container. Ciò consente di reindirizzare la GUI al display della macchina host. I volumi contenenti binari dovrebbero comunque essere montati nel container, così come i volumi per i progetti ghidra.
Il file .Xauthority dell'host deve avere i permessi appropriati - assegnati al gruppo :1001 con permessi di gruppo rw.
Esempio di Modalità Ghidra Server
docker run \
--env MODE=ghidra-server \
--rm \
-it \
--volume /path/to/my/repositories:/ghidra/repositories \
--volume /path/to/my/configs/server.conf:/ghidra/server/server.conf \
-p 13100:13100 \
-p 13101:13101 \
-p 13102:13102 \
ghidra/ghidra:<version>
I volumi dovrebbero essere montati nel container del server per salvare i repository, gli utenti e anche per configurare il server.
Per utilizzare svrAdmin, esegui exec nel container del server ghidra in esecuzione (docker exec -it <container-id> bash) per una shell bash nel container. Dopo aver eseguito exec nel container, l'amministrazione e la gestione del server Ghidra sono le stesse di un ambiente non containerizzato.
Per fermare il container, esegui il comando docker stop <container-id>.
NOTA: le porte che mappi dall'host al container docker devono corrispondere. Puoi cambiare la porta base del server predefinita (es. 13100) nel file server.conf usando l'opzione -p<port>.
Esempio di Modalità BSIM Server
docker run \
--env MODE=bsim-server \
--rm \
-it \
--volume /path/to/my/datadir:/ghidra/bsim_datadir \
-p 5432:5432 \
ghidra/ghidra:<version> \
/ghidra/bsim_datadir
/ghidra/bsim_datadir è la directory utilizzata per memorizzare i dati di bsim nel container. Altre directory potrebbero essere usate sul container, ma assicurati che la cartella sulla macchina host abbia i permessi appropriati, assegnati al gruppo :1001.
Questo esempio avvia semplicemente un server bsim. Configurare il server bsim e popolarlo con dati potrebbe essere fatto dopo l'avvio all'interno del container in modo simile a come viene fatta l'amministrazione del server ghidra. Un amministratore dovrebbe eseguire exec nel container del server bsim in esecuzione (docker exec -it <container-id> bash), e dopo aver eseguito exec nel container, l'amministrazione e la gestione del server Bsim sono le stesse di un ambiente non containerizzato.
Per fermare il container, esegui il comando docker stop <container-id>.
Esempio di Modalità BSIM CLI
docker run \
--env MODE=bsim \
--rm \
-it \
ghidra/ghidra:<version> \
generatesigs ghidra://ghidrasvr/demo /home/ghidra \
--bsim postgresql://bsimsvr/demo \
--commit --overwrite \
--user ghidra
In questo esempio, la CLI bsim viene utilizzata per connettersi a un server ghidra ospitato su ghidrasvr, generare firme per il repository demo in quel server ghidra e salvarle in /home/ghidra, e poi inviare le firme al server BSIM ospitato su bsimsvr nel database demo.
Esempio di Modalità Pyghidra GUI
Eseguire l'interfaccia grafica utente (GUI) di Ghidra nel container docker non è un metodo raccomandato per eseguire Ghidra. Le GUI non sono un caso d'uso tipico per applicazioni dockerizzate.
docker run \
--env MODE=pyghidra \
-it \
--rm \
--net host \
--env DISPLAY \
--volume="$HOME/.Xauthority:/home/ghidra/.Xauthority:rw" \
ghidra/ghidra:<version> -c
In questa modalità, il container si basa sul forwarding X11 per visualizzare la GUI. La configurazione di X11 può variare, ma in questo caso, il file Xauthority dell'host viene montato nel container, il container è configurato per utilizzare la rete dell'host, e la variabile d'ambiente DISPLAY viene passata al container. Ciò consente di reindirizzare la GUI al display della macchina host. I volumi contenenti binari dovrebbero comunque essere montati nel container, così come i volumi per i progetti ghidra.
Il file .Xauthority dell'host deve avere i permessi appropriati - di proprietà di :1001 con permessi di gruppo rw.
Esempio di Modalità Pyghidra Headless
docker run \
--env MODE=pyghidra \
--rm \
--volume /path/to/myproject:/myproject \
--volume /path/to/mybinary:/mybinary \
ghidra/ghidra:<version> -H \
/myproject programFolder -import /mybinary
Non passare argomenti all'analizzatore headless pyghidra comporterà la visualizzazione del menu di aiuto, proprio come per l'analizzatore headless.
Questo caso d'uso è molto simile all'esempio della modalità headless con il vantaggio aggiuntivo di poter utilizzare python3 per gli script di Ghidra.
Ancora, in questo esempio, permessi appropriati e assegnazione del gruppo per /path/to/myproject e /path/to/mybinary sono necessari per non incontrare problemi di permessi.