フォティーンフォティ技術研究所 先端技術研究部の松田です。

弊社のAndroid端末セキュリティ分析サービスでは、製品出荷前のAndroid端末に対して、セキュリティ上のリスクを分析し、発見したリスクとその対策案をレポートするサービスを提供しています。本サービスの検査項目には、カーネルイメージや各種モジュールの静的解析なども含まれていますが、そこで解析対象となるARMアセンブリについて、エンジニアの方でも普段なかなか触れる機会が少ないのではないでしょうか。そこで、今回の勉強会では、「Android解析入門~IDA ProによるARMアセンブリ解析~」と題して、ARMネイティブコードの解析方法についてお話することにしました。

まずは、ARMアーキテクチャについてのおさらいです。ARMは、組み込み機器や携帯電話など低消費電力のデイバス向けに、できるだけ単純な命令セットで高速な処理を行えるよう設計されたRISCのアーキテクチャを採用しています。特徴としては、固定長の命令と比較的多くのレジスタを使用し、レジスタ間のみの演算を行うことで、複雑な演算やメモリアクセスによる遅延を避け、処理の効率化を図っている点が挙げられます。

今回は、ARMのシェルコードを実際にIDA PRoで逆アセンブルし、アセンブリ言語の構文や命令について簡単に説明しました。IDA Proは、マルウェア解析、脆弱性解析などリバースエンジニアリングには欠かせない高機能な逆アセンブラです。無償版も配布されていますが、対応プロセッサなどに機能制限があるため、ARMアセンブリの解析にはStarter Edition以上が必要となります。

逆アセンブルされただけの状態でも解析に必要な情報は十分得られますが、さらにQEMUと呼ばれるエミュレータ上で動作させ、動的にコードを追うことも可能です。QEMUは、仮想化環境の構築を可能にするオープンソースのプロセッサエミュレータです。これに、IDA Proをデバッガとしてアタッチすることで、コードを一行ずつ実行しながら解析できます。勉強会で使用したシェルコードは、自己書き換えを行うタイプのものでしたので、実際にシステムコールの呼び出し先が変更されるところを確認することでデモを行いました。

RIN : 00010118で実行されるシステムコールの呼び出し先が書き換えられる

今回の勉強会では、静的解析、動的解析の方法を、実際にデモを交えて説明しましたが、業務でExpert SeminarAndroidセキュリティコースの講師も担当させていただく機会がありますので、こういった内容も今後のカリキュラムに組み込んでいきたいと思います。

関連記事

FFRI-Tech-Meeting #1

FFRI-Tech-Meeting #2

FFRI-Tech-Meeting #3-1(DBとtabaruの話)

情報提供: FFRI BLOG