本サイトは、快適にご利用いただくためにクッキー(Cookie)を使用しております。
Cookieの使用に同意いただける場合は「同意する」ボタンを押してください。
なお本サイトのCookie使用については、「個人情報保護方針」をご覧ください。
ランサムウェアの新種の出現はもちろんですが、亜種の出現に関しても日々絶えることはありません。ここ最近では、国外で「AngleWare」と呼ばれるランサムウェアが発見されたという情報が流れています。
弊社のマルウェア解析チームにて「AngleWare」の検体を入手し解析を行った結果、過去にオープンソースとしてgithubに公開されたことで有名な「Hidden Tear」のコードと酷似する点が複数あることを確認しました。
「Hidden Tear」は2015年8月中旬に、トルコのセキュリティリサーチャー集団「Otku Sen」が教育目的で誰もが使えるようにオープンソースとして公開しました。公開にあたり「Hidden Tear」の作成者は、絶対に悪用しないよう強く警告しましたが、間もなく、「Hidden Tear」の公開されたコードを利用した複数の亜種が第三者によって作成されてきた経緯があります。(※参考1)
((※参考1)トレンドマイクロセキュリティブログ:http://blog.trendmicro.co.jp/archives/12785)
今回確認された「AngleWare」も、その「Hidden Tear」のコードを流用した亜種であるという事実を弊社解析チームは実際のコードを比較調査することにより把握することができました。
なお、今回注目する「AngleWare」についても「.NET(C#)」で開発されており、前回のブログ後半の分析結果(※参考2)で示した通り、ランサムウェアにおける開発言語割合の調査結果を裏付けるようなサンプルとなっています。
((※参考2)増え続けるランサムウェアへの対応 「LLTP ransomware」検証とランサムウェアの開発傾向について https://www.mbsd.jp/research/20170324/lltp-ransomware/)
以下では、ランサムウェアの「亜種」というものが具体的にどのようにオリジナルから改変されているのかという観点も踏まえ、「Hidden Tear」と「AngleWare」の実際のコードを比較しながら見ていきたいと思います。
以下は、「Hidden Tear」における、脅迫文が記載されたテキストファイルを作成する関数のコードです。
図1 「Hidden Tear」のテキストファイルを作成する関数のコード
そして、以下が今回の「AngleWare」の該当する箇所です。
図2 「AngleWare」のテキストファイルを作成する関数のコード
図3 上記の図1と図2を比較した様子
脅迫文の内容とそのファイル名は異なりますが、並べて比較すると、関数名が同一であり記述方法についても類似していることがわかります。
つぎに、以下は「Hidden Tear」の暗号化処理を開始する関数です。
図4 「Hidden Tear」の暗号化処理を開始する関数
上記に該当する「AngleWare」のコードは以下となります。
図5 「AngleWare」の暗号化処理を開始する関数
図6 上記の図4と図5を比較した様子
どこのファイルから暗号化していくのかを指定したフォルダ場所(の文字列)が異なり、コンセプトプログラムであった「Hidden Tear」では限定されたデスクトップ上の「test」という文字列のフォルダのみを暗号化対象としていましたが、「AngleWare」ではその場所が現実的なフォルダに変更されています。
さらに、以下は暗号化を行う心臓部の暗号化関数となりますが、まずは「Hidden Tear」のコード。
図7 「Hidden Tear」の暗号化関数
次に、「AngleWare」の該当するコードを以下に示します。
図8 「AngleWare」の暗号化関数
図9 上記の図7と図8を比較した様子
変数名や暗号化後のファイルにつける拡張子などが異なる点を除き、この暗号化処理の心臓部に至っては、ほぼ全てのコードが同一であることが確かめられました。
さらに、作成者の意識があまり及ばず、プログラムの開発環境(IDE)により自動的に記述されるコードであるInitializeComponent()という関数を比較すると、決定的な文字列が同一であることがわかります。
以下は、「Hidden Tear」のInitializeComponent関数です。
図10 「Hidden Tear」のInitializeComponent関数
そして、以下が「AngleWare」のInitializeComponent関数です。
図11 「AngleWare」のInitializeComponent関数
以下が比較した図です。
図12 上記の図10と図11を比較した様子
このInitializeComponent関数とは、プログラムの作者が意識せず開発環境により自動的に記述されるコードのため、「hidden tear」という文字列がそのまま残ってしまっています。
これはつまり、「AngleWare」の作成者は、githubから「Hidden Tear」のVisual Studioの開発プロジェクトファイル群一式をそのままコピーし、自身が変更したい点だけ上書きして編集し「AngleWare」として新たにコンパイルした可能性が非常に高いことを意味します。
「AngleWare」の作者は、この他にC&CサーバのURLと一部の文字列を変更したのみで、自身で「AngleWare」と新たに名付け(作成する脅迫文中に「AngleWare」という文字列が存在する)、この「Hidden Tear」の亜種を世に放っています。
例えば、図1のコード中にある「encrypted with hidden tear」といった文字列をパターンファイルの検知条件として入れていたウイルス対策製品が存在していた場合、こうしてほんの一部のみを改変するだけで、そうしたパターンファイル型のウイルス対策製品や、ハッシュ値ベースのウイルス対策製品からの検知を逃れることが可能となりうることを、ランサムウェアの作成者は十分に理解しています。
今回のように具体的なコードの比較を目にすることで、ランサムウェアの亜種がいかにたやすく作成されているのかがお分かりいただけたかと思います。ランサムウェアの亜種が日々とどまることをしらない背景には、今回ご紹介したように、実際に「Hidden Tear」というお手本ともいえるプログラムコードがオープンソースという形ですでに公開され、誰でも入手可能な現状がある点も、その要因の一つとなっているといえるでしょう。また、今回のように、ほとんど完成されたランサムウェアのC#の完全なサンプルコードが出回っていることも、前回のブログ記事の分析結果(※参考3)として得られた開発言語の割合の一旦に影響しているのかもしれません。
((※参考3)増え続けるランサムウェアへの対応 「LLTP ransomware」検証とランサムウェアの開発傾向について https://www.mbsd.jp/research/20170324/lltp-ransomware/)
おすすめ記事