8-2-3. スマホ用ランサムウェア(screenLocker)
では、続いてソースコードを見ていきます。赤囲み部分の”View Source"をクリックします

探索
まずディレクトリの構造を見るとそんなに複雑ではないものの、一つ一つ見ていくのは面倒なので、アタリをつけます。
"8-2-2. スマホ用ランサムウェア(screenlocker)"で紹介した通り、このランサムウェアはSYSTEM_ALERT_WINDOWを悪用するという予測がつきました。そこで、”window”で検索すると”MyService .java”ファイルがヒットしました。攻撃者にとって「俺の機能」(MyService)なので、怪しさ満載のファイルですね。

スクリーンロック機能
このファイルを開いて注目すべきは、以下のコードです。これはスクリーンロック画面の大きさや設定を細やかに設定しています。”Layout”という文字列からもレイアウト画面に関するものであると推測がつきます。

ポイントは、カーソルをつけた”2002”という部分で、この部分(LayoutParams関数の第3引数)はウィンドウタイプを指定します。
ウィンドウタイプとしては、例えば、”TYPE_DIALOG” があります。これは、通常のポップアップでして、利用しているアプリ内に表示されます。そのためポップアップが表示されても、他のアプリに切り替えたりホームボタンを押したりすることを妨げられることはありません。
強力なウィンドウタイプとしては”TYPE_SYSTEM_ALERT” があります。これは”ALERT”という文字からも分かるとおり、ユーザーに緊急の警告を出すためのウィンドウで最前面に表示されます。バッテリーの低下を知らせるアラートがその例です。他に強力なウィンドウタイプとしては"TYPE_PHONE"があります。これは、電話着信時に表示されるUIです。スマホを利用する上で日常的に経験があると思いますが、いずれも他の操作を妨げるほど強力です。
上記コードの”2002”は、”TYPE_SYSTEM_ALERT”又は”TYPE_PHONE”を指しており、バッテリー低下を知らせるアラート又は着信表示のように他のアプリや画面の上にオーバーレイ(覆い被さる)の形式で脅迫画面を表示することを指定します。
そして、ここのコードは、"8-2-2. スマホ用ランサムウェア(screenlocker)"で紹介したPermission(許可)の一つである”SYSTEM_ALERT_WINDOW”と密接に関わります。
マニフェストファイルに”SYSTEM_ALERT_WINDOW”をPermission(許可)の対象と明記しておくことで、ユーザーがアプリを開いた際に以下のような許可を求める画面が表示されます。

そして、ユーザーが不注意にも許可してしまうと、ここの部分のコード、すなわち脅迫画面がスクリーン一杯にオーバーレイする形で表示されるという仕組みになっています。
そう聞くと「許可しなければいいじゃないか」ということになりますが、対策としてはその通りです。「7-2. iPhoneとAndroidのサイバーセキュリティの比較」で紹介した通り、iPhoneとAndroidはサンドボックスとPermission(許可)という強力なセキュリティ機能を持っています。
そのため、よほど高度な攻撃でない限りは、これらのセキュリティ機能が不正なアプリをロックして、ユーザーを守ってくれています(Androidの場合はPlay Protectによる駆除もしてくれます。)。
そうなると、問題はユーザー自身でして、ユーザーが不覚にも許可ボタンをポチポチすると不正なアプリが稼働してしまいます。
ユーザーに許可ボタンをポチポチ押させることは攻撃者の腕の見せ所であり、ユーザーに注意深く読ませず・考えさせないように、一見怪しくない魅力的なアプリ(例えばInstaの偽アプリ)になるよう作り込みます。
スクリーンロック解除
話を解析に戻します。
続いて、注目するのはonClickメソッドです。ユーザーがパスワードを入力してボタンを押した場合の処理が記載されています。カーソル部分が事前に登録されているパスワードでして、今回で言うと"s3cr3t"がパスワードとして設定されています。
ユーザーが入力したパスワードが"s3cr3t"と一致(equals)している場合、次の行のremoveViewに進み、脅迫画面をremove(除去)するという仕組みになっています。これ自体はシンプルなコードですね。

小括
以上がスクリーンロック型のランサムウェアの解析でした。通常のランサムウェアは、電子ファイルを暗号化しますが、このランサムウェアアプリは、スマホの既存の機能を巧みに利用して画面をロックするタイプのものであったことが分かりました。
ちなみに、パスワード以外の解決方法を一つ見つけました。画面下部の◁ボタンも、〇ボタンも、□ボタンもどれを押してもスクリーンロックを解除できませんが、画面右上をタッチして下に引くとクイック設定画面が表示されます。そこに「Screen Locker is displaying over other ap...」という表示があります。これをクリックすると、OSのバージョンによりますが、このアプリを強制アンインストールして削除できたり、オーバレイ(覆い隠す)機能をOffにできました。

おまけ
おまけとして、興味深い小ネタを見つけました。
以下のToast機能は画面上に警告文や表示文を表示させる機能です。その引数の中に「Ваш текст」という文字列がありました(カーソル部分参照)。これをGoogle翻訳で調べると、ロシア語で「あなたのテキスト」という意味のようです。
察するところ、このランサムウェアアプリのオリジナルの開発者から、それを改良して使う者に宛てた、「あなたが用意したテキストが警告文として表示されます」という解説文です。

サイバーセキュリティにおいては、攻撃者を特定することをアトリビューション(Attribution)といい重要な活動になります。例えば、米国政府は度々「ロシア系のハッカーからサイバー攻撃を受けた」、「中国系のハッカーから攻撃を受けた」と宣言しますが、それはアトリビューションの結果に基づいています。
ソースコードの静的解析を通じて、攻撃者が利用する言語が分かることがあり、その結果、アトリビューションに役立つことがあります。
今回でいうと、攻撃者はロシア圏のハッカーという推測ができます。
ただし、それを逆手にとって、自分のネイティブの言語ではない言語をあえて記載しておくことがあります。例えば、ロシア人のハッカーが中国語を残しておくことで、アトリビューションをミスリードさせるというものです。
そのため、ロシア語が使われているからこのランサムウェアアプリの開発者がロシア人であると直ちには認定できませんが、アトリビューションの重要な手掛かりの一つとなります。
Discussion