弊社のAndroid端末セキュリティ分析サービスでは、製品出荷前のAndroid端末に対して、セキュリティ上のリスクを分析し、発見したリスクとその対策案をレポートするサービスを提供しています。本サービスの検査項目には、カーネルイメージや各種モジュールの静的解析なども含まれていますが、そこで解析対象となるARMアセンブリについて、エンジニアの方でも普段なかなか触れる機会が少ないのではないでしょうか。ProによるARMアセンブリ解析~」と題して、ARMネイティブコードの解析方法についてお話することにしました。ARMアーキテクチャについてのおさらいです。ARMは、組み込み機器や携帯電話など低消費電力のデイバス向けに、できるだけ単純な命令セットで高速な処理を行えるよう設計されたRISCのアーキテクチャを採用しています。特徴としては、固定長の命令と比較的多くのレジスタを使用し、レジスタ間のみの演算を行うことで、複雑な演算やメモリアクセスによる遅延を避け、処理の効率化を図っている点が挙げられます。PRoで逆アセンブルし、アセンブリ言語の構文や命令について簡単に説明しました。Proは、マルウェア解析、脆弱性解析などリバースエンジニアリングには欠かせない高機能な逆アセンブラです。Edition以上が必要となります。逆アセンブルされただけの状態でも解析に必要な情報は十分得られますが、さらにQEMUと呼ばれるエミュレータ上で動作させ、動的にコードを追うことも可能です。QEMUは、仮想化環境の構築を可能にするオープンソースのプロセッサエミュレータです。Proをデバッガとしてアタッチすることで、コードを一行ずつ実行しながら解析できます。勉強会で使用したシェルコードは、自己書き換えを行うタイプのものでしたので、実際にシステムコールの呼び出し先が変更されるところを確認することでデモを行いました。SeminarのAndroidセキュリティコースの講師も担当させていただく機会がありますので、こういった内容も今後のカリキュラムに組み込んでいきたいと思います。