🍋

5-4. スパイアプリ解析( L3MON編)

に公開

SMSManger

では、最後に本題のSMSの閲覧及び送信に関する機能について、Java風ソースコードを見ていきます。
まず、”SMS”という文字列で検索すると、下から5番目にSMSManager.javaが見つかります。

そこで、このファイルの中身を確認すると、getsmsメソッド(14行目)とsendSMSメソッド(83行目)が記載されています(なぜか前者はsmsが小文字で、後者はSMSが大文字です。統一感がないですね。。。)。

前者はSMSのメッセージを集める機能、後者は(勝手に)SMSを発信する機能のようです。

ConnectionManager

では、これらの機能はどのように呼び出されているのでしょうか。
前回の末尾で記載した通り、ConnectionManager.javaには攻撃者からの指示を受けて各種機能を呼び出すための一次受けをする役割が記載されており、そこを起点として各機能を個別に記載したファイル内のメソッドを呼び出しています。
そこで、ConnectionManager.javaファイルを見ると、以下のようにSMメソッドの中でgetsmsメソッドとgetSMSメソッドが呼び出されています。

攻撃者のC2サーバーから、req(攻撃者の指示)、phoneNo(電話番号)、msg(送信用メッセージ)の3つを引数として受け取ります(189行目)。

getsmsメソッド

そこからif文で条件分岐し、req(攻撃者の指示)が0の場合は(190行目)、上述のSMSmanagerクラスのgetsmsメソッドを呼び出してスマホ内に保存されているSMSのメッセージを集めて、emitでC2サーバーに外部送信しています(191行目)。

sendSMSメソッド

同様に、req(攻撃者の指示)が1の場合は(192行目)、同じく上述のSMSmanagerクラスのsendSMSメソッドを呼び出して、引数として受け取ったphoneNo(電話番号)に対して、同じく引数として受け取ったmsg(メッセージ)を送信し(193行目)、送信が成功したか否かの結果をemitでC2サーバーに外部送信しています(194行目)。

小括

詳細を割愛しているメソッドの中身は長くて複雑ですが、こうしてポイントだけ見ると、なんだか恐ろしく感じてしまうSMSの閲覧や送信機能であっても、非常にシンプルで基礎的な構成であることが分かります。

振り返ると、ユーザーとしての自衛手段として、Permissionって非常に重要なセキュリティ機能であることが分かりますね。
Permission(許可)は、アプリを操作するときにポップアップが表示されて正直かなり鬱陶しいですし、あまり深く考えずにポチポチと許可ボタンを押してしまってますが、実は不覚にもインストールしてしまったスパイアプリを自由にさせないための重要なセキュリティ機能です。

Discussion