5-3. スパイアプリ解析( L3MON編)
ソースコードの確認
続いて MobSFのダッシュボードに戻って、"View Source"をクリックして、java風のファイルを見ていきます。

まず、以下のようなディレクトリ構造をしています。”l3mon”フォルダ以下を見ると、Permissionで確認した機能に似た名前のファイルが散見されることから、ここら辺にスパイアプリの機能ごとのファイルが集まっているようです。

PermissionManager
その中で、下から2番目の ”PermissionManager.java” が気になったので開いてみると、以下のコードが記載されていました。

9行目の”getGrantedPermissions”というメソッド名とその後のコード(グレー塗り部分)をみると、ユーザーが許可済みのPermissionを集める機能のようです。集めたPermissionを変数dataに格納しています。
おそらく、この後に集めた許可済みのPermissionの一覧リストを外部のC2サーバーに送信するのしょう。
攻撃者としては、ユーザーがどの機能について許可を与えたか把握することで、効率的に不正操作が可能になります。
ConnectionManager
許可済みのPermissionの一覧リストどのように外部に送信しているか気になったので、ついでに”getGrantedPermissions”で検索してみました。
すると、”ConnectionManager.java”ファイルにこのメソッドの呼び出し元が見つかりました。

PMメソッドの中で、getGrantedPermissionsメソッドが呼び出され、”emit”されているので、このPMメソッドが外部送信に関するメソッドだと思われます。
もうついでとして、”PM”で検索すると、同じく”ConnectionManager.java”ファイルの中の"sendReq"メソッドの中で”PM”メソッドが呼び出されていました。長いメソッドなので途中を省略しますが、攻撃者のC2サーバから”send”(送信)の”Req”(リクエスト)が届いた場合に呼び出されるようです


整理しますと、攻撃者がC2サーバーからリクエストを出すと、スパイアプリ側のsendReqメソッドが呼び出され、次に外部送信用のPMメソッドが呼び出され、その中でユーザーの許可済みのPermissionを集める”getGrantedPermission”メソッドが呼び出される、その結果、許可済みのPermissionが収集されてその一覧リストがC2サーバに送信される、という流れになります。
そうすると、ConnectionManager.javaには攻撃者からの指示を受けて各種機能を呼び出すための一次受けをする役割が記載されており、そこを起点として各機能が”PermissionManager.java”や"SMSManager.java"といった個別のファイルに詳細に記載されていることが分かりました。
Discussion