Ghidra プロジェクトの共有方法
はじめに
Ghidraには、プロジェクトの共有機能が実装されています。 複数人で解析する場合は、この機能を使うと便利です。 ちなみにIDA Proには、デフォルトでプロジェクト共有機能がありません。 IDArlingのようなプラグインを別途導入する必要があります。
Ghidraサーバの詳細については、<Ghidraのディレクトリ>/server/svrREADME.htmlを参照してください。
また、Ghidraのインストール方法は、こちらを確認してください。
プロジェクトの共有手順
プロジェクトの共有は、下記の手順で行えます。 各項目について説明していきます。
- Ghidraサーバをインストールする
- Ghidraサーバにアクセスできるユーザを追加する
- リポジトリとプロジェクトを作成する
- 解析したファイルをリポジトリに追加する
- 別のPCからリポジトリにアクセスする
検証した環境
今回は、Linux(Debian 9)環境で試しました。Windowsの場合は、「~.bat」を実行すれば同様の動作になるはずです。
$ uname -a Linux debian 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3 (2019-02-02) x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 9.8 (stretch) Release: 9.8 Codename: stretch $ java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
1. Ghidra サーバをインストールする
プロジェクトを共有するためには、Ghidraサーバを立てる必要があります。
サーバのインストールは、<Ghidraのディレクトリ>/server/svrInstallで行えます。 これを実行すると、Ghidraサーバがインストールされ、サーバが起動します。出力の最後に「Service ghidraSvr started」と表示されれば成功です。
$ ./server/svrInstall alice password: : 省略 : Service ghidraSvr started
Ghidraサーバは、デフォルトで13100番ポートで待ち受けています。
$ ss -l | grep 13100 tcp LISTEN 0 50 *:13100 *:*
2. Ghidraサーバにアクセスできるユーザを追加する
Ghidraサーバが起動したら、次にユーザの追加を行います。 追加したユーザだけが、Gidoraサーバにアクセスすることができます。
ユーザの追加は、<Ghidraのディレクトリ>/server/svrAdmin で行えます。 デフォルトのパスワードは、「changeme」となっています。
$ ./svrAdmin -add <SID>
ユーザ追加例:
$ whoami alice $ sudo ./server/svrAdmin -add alice Using server directory: /home/alice/ghidra_9.0/repositories 1 command(s) queued.
3. リポジトリとプロジェクトを作成する
「File」→「New Project...」から新しいプロジェクトを作成します。 今回は、プロジェクトを共有したいので「Shared Project」を選択して「Next >>」をクリックします。
「Server Name:」にGhidraサーバを立てたPCのIPアドレスもしくはドメイン名を指定して、「Next >>」をクリックします。 今回は、下記の通りに設定しました。
- Server Name: → 「localhost」
- Port Number: → 「13100」(デフォルトのGidoraサーバのポート番号)
svrAdminで作成したユーザのパスワードを入力して「OK」をクリックします。 デフォルトパスワードは、「changeme」となっています。
パスワードの変更を要求されるので、「OK」をクリックします。
新しいパスワードを入力して、「OK」をクリックします。
パスワードの変更が完了しました。「OK」をクリックして次に進みます。
リポジトリ名を指定して「Next >>」をクリックします。 今回は、「mySharedProject」という名前にしました。
共有プロジェクトにアクセスできるユーザを指定して、「Next >>」をクリックします。 今回の例では、「alice」というユーザしかいないので、「Admin」権限以外選択できません。
共有プロジェクトのローカルの保存先を指定して、「Finish」をクリックします。 今回は、下記の通りに設定しました。
- Project Directory: → 「/home/alice/GhidraProjects」
- Project Name: → 「mySharedProject」
「mySharedProject」という共有プロジェクトが作成できました。
4. 解析したファイルをリポジトリに追加する
「File」→「Import File...」で解析したいファイルをインポートする。
インポートしたファイルを右クリックし、「Add to Version Control...」をクリックする。
コメントの入力欄が出てくるので、コメントを書いて「OK」をクリックする。
リポジトリにAddすると、ファイルのアイコンに緑のチェックマークが付きます。 上記の手順でリポジトリにAddしたファイルのみが共有されます。
5. 別のPCからリポジトリにアクセスする
アクセス権の割当て(ユーザ名か異なる場合のみ)
手順2で追加したユーザ以外を使ってGhidraサーバにアクセスしたい場合は、新たにユーザを追加する必要があります。
- Ghidraサーバを起動しているPCで「svrAdmin」を使用してユーザを追加します。 今回は、「bob」というユーザを追加しました。
$ sudo ./server/svrAdmin -add bob Using server directory: /home/alice/ghidra_9.0/repositories 1 command(s) queued.
「Project」→「Edit Project Access List...」をクリックします。
「bob」を選択して「Add >>」をクリックします。 次に右にある「bob」の「Read/Write」チェックボックスにチェックを入れて、「OK」をクリックします。
上記の作業により、「bob」ユーザに読書き権限を割り当てることができました。
リポジトリにアクセスする
手順3と同様に新しいプロジェクトを作成します。 今回も「Shared Project」を選択します。
「Server Name:」にGhidraサーバのIPアドレスもしくはドメイン名を指定して、「Next >>」をクリックします。 今回は、下記の通りに設定しました。
- Server Name: → 「172.16.0.2」(GhidraサーバのIPアドレス)
- Port Number: → 「13100」(デフォルトのGidoraサーバのポート番号)
bobユーザでログインすると、リポジトリ選択画面に遷移します。
手順3で作成したプロジェクト「mySharedProject」が確認できるので、選択して「Next >>」をクリックします。手順3と同様にプロジェクトのローカルの保存先を指定して「Finish」をクリックします。
手順3で追加したファイルが共有されていることが分かります。
トラブルシューティング
サポートされているJavaランタイムが見つかりませんでした。
下記のようなエラーが出る場合は、support/launch.propertiesの JAVA_HOME_OVERRIDEプロパティにJDKのディレクトリを指定してみてください。
Failed to find a supported Java runtime. Please refer to the Ghidra Installation Guide's Troubleshooting section. Failed to install Ghidra Server!
<Ghidraのディレクトリ>/support/launch.propertiesの JAVA_HOME_OVERRIDEプロパティ(5行目)の設定例
JAVA_HOME_OVERRIDE=/opt/java/jdk-11.0.2
ed: コマンドが見つかりません
下記のようなエラーが出る場合は、edコマンドをインストールしてください。
/home/analyst/ghidra_9.0/server/ghidraSvr: 行 85: ed: コマンドが見つかりません ERROR: failed to install fork_hack in server.conf
インストール方法
$ sudo apt-get install ed
svrAdminでユーザの追加ができない
下記のようなエラーが出る場合は、root権限で実行できていません。
$ ./svrAdmin -add alice Using server directory: /home/alice/ghidra_9.0/repositories Invalid Ghidra server directory specified: /home/alice/ghidra_9.0/repositories
sudoを先頭につけてコマンドを実行してください。
$ sudo ./svrAdmin -add alice Using server directory: /home/alice/ghidra_9.0/repositories 1 command(s) queued.