Loading...
ブログとストーリー

SpiderLabsブログ

年間50万人以上の読者を魅了しているブログがセキュリティ コミュニティの主要目的地になっているのは、最新の脅威の技術的な分析、重要な脆弱性に関する開示、最先端の研究が掲載されているからです。

IoT およびその他の組み込みシステムのセキュリティ研 究のための Buildroot の利用

昨今、多くのベンダー(IoT ベンダーなど)は、組み込みソリューションのために ARM CPU 上で 実行される Linux を使用しています。これらのベンダーの一部は、buildroot (https://buildroot.org)というツールを使用して、デバイスのルートファイルシステムを作成して います。これは、特定の組み込みデバイスのファイルシステム上のバイナリを grep すると明ら かになります。同時に、セキュリティ研究に役立つ多くのバイナリがデバイス上に存在しない可 能性があります。この記事では、組み込み機器のセキュリティ研究に必要なツールを buildroot を使って追加する方法を紹介します。

ルータへのシェルアクセスがあり、バイナリ文字列を見て "Buildroot 2012.02"という文字列を 見つけたとしましょう:

strings – wget | grep -i buildroot
GCC: (Buildroot 2012.02) 4.5.3

これは、発見された Buildroot バージョンを使用して開発者が使用するビルド環境を再現しよう とすることができることを意味します。

ubuntu-12.04.5-server-i386.iso を http://releases.ubuntu.com/12.04/からダウンロード

なぜ旧バージョン 12.04 を使用するでしょうか? Buildroot 2012.02 はそのバージョンで構築さ れた可能性が高いため、新しいバージョンの依存関係との競合はほとんどありません。なぜ 32 ビットなのでしょうか?ターゲット ARM CPU バイナリは 32 ビットです。

VM を作成し、最新の状態にします:

sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt-get update
sudo apt-get upgrade

必要なコンポーネントをインストールしてください:

sudo apt-get install build-essential libncurses5-dev bison flex gettext texinfo unzip

buildroot-2012.02 をダウンロードして解凍してください:

curl -O https://buildroot.org/downloads/buildroot-2012.02.tar.gz
tar -zxvf buildroot-2012.02.tar.gz
cd buildroot-2012.02
make menuconfig

"Package Selection for the target": lsof, ltrace, strace 配下の構築する目的のユーティリ ティを選択します。 "System configuration" 配下の "Build gdb server for the Target" を選 択し設定を保存します。 最後にコンパイルを完了します:

make

必要なコンポーネントをダウンロードして作業をする時間を与えてください(1 時間ほどかかり ます)。完了したら、./output/target/ディレクトリから作成したばかりのバイナリを取得することがで きます。たとえば、gdb サーバーは次の場所にあります。

./output/target/usr/bin/gdbserver

どうすれば使えるのでしょうか?まず、バイナリを組み込みシステムにアップロードする必要が あります。私たちの場合、ルータには USB スロットがありますので、バイナリを USB メモリにコ ピーしてルータに接続する必要があります。その時点で、組み込みデバイスの調査にバイナリ を使用できるようにする必要があります。

私が非常に有用であると思ったいくつかの例を以下に示します:

  1. strace ユーティリティを利用して、追跡プロセスを開始します。
/path/to/usb_drive/strace -f -s 4096 -f -e execve -p <PID>
  1. Hex-Rays IDA を使用してプロセスをリモートでデバッグします:
/path/to/usb_drive/gdbserver --attach 192.168.1.1:9000 <PID>

IDA マシンで、「デバッガ - リモート GDB デバッガを使用する」を設定します。 Debugger- >Process options で、組み込みシステム、IP、およびポート(上記の例では 192.168.1.1 と 9000)上のバイナリへの適切なパスを指定します。最後に、 Debugger->Attach to process を使用してメニュー項目を処理し、実際にネットワーク経由で接続してデバッグしま す。 3. TCP / UDP ポートのプロセスへのマッピングを取得するには、lsof を使用します。それ以外 の場合は、 /proc/net/tcp ファイルを調べてファイル記述子を探して手動で行うことができま す。

最後に、GPL のコンポーネントを使用する場合、ベンダーによってデバイスの一部のソースコ ードが公開されることがあります。これは、必要なバイナリを生成する別の方法かもしれませ ん - カーネルのバージョンやソースなどを取得できます。場合によっては、ベンダの指示書を 使用してルートファイルシステム全体を構築することも可能です。 Buildroot は、多くの作業を するだけで時間を節約することができます。