🪰

8-3-2. スマホ用ランサムウェア(filelocker)

に公開

ランサムウェアの一般的な仕組み

ランサムウェアの機能を大きく分けると、①端末内のファイルシステムをディープスキャンして暗号化の対象とするファイルを抽出することと、②抽出したファイルを暗号化すること、という二つのプロセスがあります。
今回は、前者の「①端末内のファイルシステムをディープスキャンして暗号化の対象とするファイルを抽出する」プロセスを見ていきます。

ディープスキャン

ディープスキャンの機能を持つコートは以下の部分です。

暗号化の対象となるファイルを指定

まず、赤囲み部分をご覧ください。ここは、暗号化の対象となるファイルの拡張子を指定しています。”txt”はテキストファイル、"jpg"・"jpeg"・"png"は写真データ、"pdf"はPDFファイル、"mp4"・"mp3"は動画データ、"zip"・"rar"は圧縮ファイル、"docs"・"docsx"はWordファイル、"xls"・"xlsx"はエクセルファイル、"db"はデータベースです。これらの拡張子を持つファイルが暗号化されるということです。
このようにランサムウェアは、暗号化の対象となるファイルを指定したり、逆に除外したりします。その理由は、色々ありますが、例えば全てのファイルを対象とすると暗号化に時間が掛かってしまいアンチウイルスソフトによって途中で阻止されてしまう可能性があるので、被害者が暗号化されて本当に困るファイルに絞った方が効率的です。また、仮に拡張子”apk”を暗号化の対象とすると、自身も暗号化の対象となるので途中で暗号化が止まってしまいます。
そのため、ディープスキャンにおいては拡張子ベースで暗号化の対象ファイルを指定/除外します。

ディープスキャンの起点ディレクトリを指定

続いて青枠部分は、ディープスキャンをどこから始めるかが記載されています。

File file = new File("/storage/emulated/0");

”/storage/emulated/0"は、ユーザーがアクセスできる内部ストレージのトップ階層であり、以下のようにその下位フォルダが分かれて、それぞれのデータが格納されます。

・カメラで撮影した写真データ → ””/storage/emulated/0"/DCIM/”フォルダ
・動画データ → ”/storage/emulated/0/Movies"フォルダ
・文書ファイル → ”/storage/emulated/0/Documents"フォルダ

そのため、まずは、”/storage/emulated/0"を指定して、その下のフォルダをディープスキャンすることになります。

ディープスキャンの対象となるディレクトリを指定・除外

続いて緑枠部分です。

”k.a.a.a.f.f fVar = j.b;”

ここは難読化されていたためか詳細は不明ですが、おそらく暗号化の対象となるディレクトリ(フォルダ)を指定したり、除外したりしていることが予想されます。ランサムウェアは、上記のように暗号化の対象となるファイルを拡張子ベースして指定したり除外するのに加え、暗号化の対象となるディレクトリ(フォルダ)も指定したり除外したりします。

ディープスキャンの結果をリスト化して暗号化処理スタート

続いてオレンジ枠部分です。

for (File file2 : (List) k.a.a.a.b.a(file, fVar, fVar))

file(="/storage/emulated/0")を起点として、指定・除外フォルダをフィルタリングしつつ、ファイルを集めてList化します。
そのList内の要素(つまり暗号化の対象となるファイル)をfor文ループで一つ一つ取り出して暗号化処理を始めます。
暗号化処理は、紫枠部分です。コンパイルの過程で関数名が失われた結果 ”b”とだけ記載されいますが、元々は”encrption”的な関数名であったと推測します。

Discussion