今回はAndroidのARMアーキテクチャのバイナリ解析を行います。Android/iOS共にARMバイナリであることが多く、ARM解析の知識は脆弱性診断などでも必要になることが多々あります。今回の記事がそうした需要にお答えできれば幸いです。AndroidEmulator(ARM)今回やること等ARM(armv7)の簡単なcrkmeを解析します。Cyberistsで使用した問題をAndroid用にビルドしたもの)ただし今回は、gdb等のデバッガなど使わず簡易的なデバッガを作って解析を行います。ARMについての基礎知識は以下の方のブログをご参照ください。inaz2.hatenablog.com今回は使用しませんが、以下のサイトも有用です。実行ファイルとソースファイル(debuggerのみ)は以下からダウンロードください。drive.google.com今回はAndroidStudioのエミュレータ(ARM)を利用して解析を行います。AndroidStudioで仮想端末を作成する際、ABIにarmeabi-v7aを選択して端末を作成してください。armeabi-v7a"の項目のDownloadをクリックFinishをクリック上記設定が出来たらAndroidエミュレータを起動してください。(場合によっては起動するだけで数分以上かかります。)※通常Androidエミュレータでアプリの起動テスト等を行うときはx86を利用しますが、デバッグなどを行う関係上ARMにする必要があります。crkmeとdebuggerをエミュレータ内に転送し、実行権限を付与します。/data/local/tmp./crkme実行すると以下のようにkeyの入力を求められ、間違っていると終了してしまいます。ARMアーキテクチャバイナリなので、IDAのFree版はサポートしていません。今回はGhidraで解析を行ってみましょう。上記を見ると、(1)scanf関数で入力文字列を16進数整数として受け取る(2)decrypt関数に"B@AI@FC@"を引数として渡して呼び出す。(3)入力数値r4とdecrypt関数の戻り値r0を比較する(4)一致していればcorrect,一致していなければwrongという処理になっていることが分かります。深めたい方は実際にソースコードからビルドしてdebuggerを動作させてください。Android解析に慣れてない方は実際に手を動かして頂ければ充分です。gdb等を利用すれば簡単にレジスタの値などはわかりますが、今回はptrace含めた理解のために自分で実装を行いcrkmeをデバッグします。ARMの世界で行ってみます。th0x4c.github.io今回の対象バイナリのmain関数はthumbモードになっています。thumbモードのソフトウェアブレークポイントはリトルエンディアンで{0x01,0xde}です。r4,r0」のアドレスです。やることPTRACE_ATTACHでターゲットのプロセスにアタッチ。PTRACE_PEEKTEXTで対象アドレスの値を保存。0xde}に書換える。プロセスを再開させる。ブレイクするのを待つ。書換えたアドレスでブレイクする。PTRACE_GETREGSでR0レジスタの値を取得して出力する。プロセスからデタッチする。アタッチするためにcrkmeのプロセスidが必要です。crkme次にcrkmeの仮想メモリ空間のメモリマップを調べる方法は以下です。r4,r0」のアドレスは0xb21b48f4です。AndroidStudioのエミュレータを起動した状態で、crkmeを起動してください。次に下記のコマンドを入力してください。(上記で調べたcrkmeの先頭アドレス)+0x8f4上記を実行すると下の画像のように入力すべき文字列は「20190630」であると分かります。上記をcrkmeに入力するとフラグが現れます。ninja{g@me_s3curity_c0mp4ny}最後にARMのデバッガを自作する際に問題となるのは、ARMアーキテクチャではptraceのPTRACE_SINGLESTEPが削除されているということです。git.kernel.orgptrace(PTRACE_SINGLESTEP...)等とコーディングしても効果がないのでご注意ください。ソースコード適当に作成したフォルダにjniフォルダを作り下記のAndroid.mk、Application.mk、debugger.cを作成してください。作成したフォルダndk-buildでビルドが出来ます。/data/local/tmp上記コマンドでエミュレータ内に転送できます。//プロセスからデタッチする。0);}まとめ今回はAndroidでのARMバイナリの解析を行いました。ARMアーキテクチャの解説などは省略させていただきましたが、実際に簡易デバッガを作りcrkmeを解析出来ました。gdb等の汎用的なデバッガが存在する以上、原理などを知ることは不必要だと思われる方もいるかもしれません。いった解析ツールの内部の実装などを知ることにより、特に防御側に回った時に複合的な対策を検討できると思います。弊社では今後もこうした技術の研究を行い、対策などに活かせるようにしていきます。本レポートに記載されている内容を許可されていないソフトウェアで行うと、場合によっては犯罪行為となる可能性があります。そのため、記事の内容を試す際には許可されたソフトウェアに対してのみ実施するようにしてください。株式会社Ninjastarsセキュリティエンジニアの一瀬です。株式会社Ninjastarsセキュリティエンジニアの一瀬です。はてなブログPro株式会社Ninjastarsではスマートフォン向けゲームを中心としたセキュリティ診断及びチート対策等のサービスを提供しております。(1)このサイトについてプライバシーポリシーはてなブログをはじめよう!Ninjastarsさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。