☠️

4-3. スパイアプリ解析( Metasploit編)

に公開

最後に、 攻撃者の環境(C2サーバー)との通信を見ていきましょう。「Metasploit解析その1」で書いたとおり、このスパイウェアには、位置情報やSMS情報を盗む機能は備わっておらず、これらの機能を後からLoad(追加)する機能だけを持っていると書きました。

Load(追加)するには、まずもって攻撃者が用意したC2サーバーと通信をすることが必要となります。通信を確保して攻撃に関するコードをLoad(追加)することが可能となります。
その通信の方法が記載された部分が以下です。

興味深いのは、通信方法によってif文で条件分岐がされています。
if文のブロックは、アプリケーション層のプロトコルを使わず、TCP層の生のソケット(Raw TCP Socket)を直接開いて通信を行うものです。この利点は、HTTPのヘッダーなど余計なオーバーヘッドがなく、バイナリデータをそのまま送受信できます。そのため、リバースシェルなどの双方向通信に最適です。他方で、elseで始まるブロックは、HTTPまたはHTTPSプロトコルを使っています。利点としては、ファイアウォールが通常Webトラフィック(HTTP/HTTPS)の通過を許可するため、仮にスマートフォンがファイルウォール内で使用されていても、当該ファイアウォールによる防御を回避するのに役立ちます。
つまり、スパイアプリをインストールしたスマホの環境に合わせて最適な通信ができるよう切り分けが行われています。

なお、if文ブロックでもelseブロックでも共通する処理は、a関数でして、これは「Metasploit解析その1」で記載した処理です。つまり、tcp通信(if文ブロック)であれ、http/https通信(elseブロック)であれ、C2サーバーとスマホとの間で通信を無事確保できたあとは、a関数が発動して不正なコードのダウンロードとその実行がなされます。

以上がMetasploitの解析でした。
色々とよく考えて作られています。単にjavaでAndroidのアプリを作成する知識だけではなく、通信のプロトコルの理解やAndroidOSが提供している機能への理解なども詰まっています。

スパイアプリの開発者は、ソフトウェアプログラミング、ネットワーク、OS、ハードの知識を持った高度な技術者であることがお察しいただけると思います。さながら、打撃、組み技、寝技が必要とされる総合格闘家ですね。

Discussion