TSALVIA技術メモ

CTFのWriteupや気になったツールについて書いていきます。また、このサイトはGoogle Analyticsを利用しています。

Ghidra プロジェクトの共有方法

はじめに

Ghidraには、プロジェクトの共有機能が実装されています。 複数人で解析する場合は、この機能を使うと便利です。 ちなみにIDA Proには、デフォルトでプロジェクト共有機能がありません。 IDArlingのようなプラグインを別途導入する必要があります。

Ghidraサーバの詳細については、<Ghidraのディレクトリ>/server/svrREADME.htmlを参照してください。

また、Ghidraのインストール方法は、こちらを確認してください。

プロジェクトの共有手順

プロジェクトの共有は、下記の手順で行えます。 各項目について説明していきます。

  1. Ghidraサーバをインストールする
  2. Ghidraサーバにアクセスできるユーザを追加する
  3. リポジトリとプロジェクトを作成する
  4. 解析したファイルをリポジトリに追加する
  5. 別のPCからリポジトリにアクセスする

検証した環境

今回は、LinuxDebian 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. リポジトリとプロジェクトを作成する

  1. 「File」→「New Project...」から新しいプロジェクトを作成します。 今回は、プロジェクトを共有したいので「Shared Project」を選択して「Next >>」をクリックします。 f:id:tsalvia:20190315034546p:plain

  2. 「Server Name:」にGhidraサーバを立てたPCのIPアドレスもしくはドメイン名を指定して、「Next >>」をクリックします。 今回は、下記の通りに設定しました。

    • Server Name: → 「localhost
    • Port Number: → 「13100」(デフォルトのGidoraサーバのポート番号) f:id:tsalvia:20190315034739p:plain
  3. svrAdminで作成したユーザのパスワードを入力して「OK」をクリックします。 デフォルトパスワードは、「changeme」となっています。 f:id:tsalvia:20190315034820p:plain

  4. パスワードの変更を要求されるので、「OK」をクリックします。 f:id:tsalvia:20190315035030p:plain

  5. 新しいパスワードを入力して、「OK」をクリックします。 f:id:tsalvia:20190315035107p:plain

  6. パスワードの変更が完了しました。「OK」をクリックして次に進みます。 f:id:tsalvia:20190315035132p:plain

  7. リポジトリ名を指定して「Next >>」をクリックします。 今回は、「mySharedProject」という名前にしました。 f:id:tsalvia:20190315035253p:plain

  8. 共有プロジェクトにアクセスできるユーザを指定して、「Next >>」をクリックします。 今回の例では、「alice」というユーザしかいないので、「Admin」権限以外選択できません。 f:id:tsalvia:20190315035358p:plain

  9. 共有プロジェクトのローカルの保存先を指定して、「Finish」をクリックします。 今回は、下記の通りに設定しました。

    • Project Directory: → 「/home/alice/GhidraProjects」
    • Project Name: → 「mySharedProject」 f:id:tsalvia:20190315035501p:plain
  10. 「mySharedProject」という共有プロジェクトが作成できました。 f:id:tsalvia:20190315035549p:plain

4. 解析したファイルをリポジトリに追加する

  1. 「File」→「Import File...」で解析したいファイルをインポートする。 f:id:tsalvia:20190315035820p:plain

  2. インポートしたファイルを右クリックし、「Add to Version Control...」をクリックする。 f:id:tsalvia:20190315040016p:plain

  3. コメントの入力欄が出てくるので、コメントを書いて「OK」をクリックする。 f:id:tsalvia:20190315040132p:plain

  4. リポジトリにAddすると、ファイルのアイコンに緑のチェックマークが付きます。 上記の手順でリポジトリにAddしたファイルのみが共有されます。 f:id:tsalvia:20190315040206p:plain

5. 別のPCからリポジトリにアクセスする

アクセス権の割当て(ユーザ名か異なる場合のみ)

手順2で追加したユーザ以外を使ってGhidraサーバにアクセスしたい場合は、新たにユーザを追加する必要があります。

  1. Ghidraサーバを起動しているPCで「svrAdmin」を使用してユーザを追加します。 今回は、「bob」というユーザを追加しました。
$ sudo ./server/svrAdmin -add bob
Using server directory: /home/alice/ghidra_9.0/repositories
1 command(s) queued.
  1. 「Project」→「Edit Project Access List...」をクリックします。 f:id:tsalvia:20190315042058p:plain

  2. 「bob」を選択して「Add >>」をクリックします。 次に右にある「bob」の「Read/Write」チェックボックスにチェックを入れて、「OK」をクリックします。 f:id:tsalvia:20190315042223p:plain

上記の作業により、「bob」ユーザに読書き権限を割り当てることができました。

リポジトリにアクセスする

  1. 手順3と同様に新しいプロジェクトを作成します。 今回も「Shared Project」を選択します。

  2. 「Server Name:」にGhidraサーバのIPアドレスもしくはドメイン名を指定して、「Next >>」をクリックします。 今回は、下記の通りに設定しました。

    • Server Name: → 「172.16.0.2」(GhidraサーバのIPアドレス
    • Port Number: → 「13100」(デフォルトのGidoraサーバのポート番号)

f:id:tsalvia:20190315041331p:plain

  1. bobユーザでログインすると、リポジトリ選択画面に遷移します。
    手順3で作成したプロジェクト「mySharedProject」が確認できるので、選択して「Next >>」をクリックします。 f:id:tsalvia:20190315042417p:plain

  2. 手順3と同様にプロジェクトのローカルの保存先を指定して「Finish」をクリックします。

  3. 手順3で追加したファイルが共有されていることが分かります。 f:id:tsalvia:20190315042553p:plain

トラブルシューティング

サポートされている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.

参考にしたサイト