ShinoLockerの紹介と開発秘話

本ブログは[セキュリティツール系Advent Calendar](https://adventar.org/calendars/2968)の4日目です。
本記事では筆者の開発プロジェクトであるShinoLockerのご紹介をします。

#ShinoLockerとは
ShinoLockerはテスト用のランサムウェアシミュレータです。[https://shinolocker.com](https://shinolocker.com)で公開しています。
※通信環境によってはURLフィルターでブロックされる可能性があります。

実行すると以下の動作をします。デモ動画は[YouTube](https://www.youtube.com/watch?v=4qQz5JrRWDs)を直接ご覧ください。

* C&Cサーバと通信し、暗号鍵を取得します。
　※秘密鍵はサーバ側で動的に生成されます。
* 暗号化対象のファイルをローカルからスキャンします。
* 見つかったファイルを順次暗号化していきます（暗号化アルゴリズムはAES）。
* 暗号化が完了するとGUIにホストIDとトランザクションIDを表示し~~BitCoinを要求し~~ます。
* それぞれのIDをC&Cサーバ上に入力することで、復号するための暗号鍵が入手でき、それをGUIに張り付けます。
* 復号が開始され、終了すると自己消去します。

![shinolocker.png](https://qiita-image-store.s3.amazonaws.com/0/325297/50478aaf-98b6-c6e3-616b-38811f79f97a.png)


#開発の動機
2016年のBlack Hat USAに合わせて開発を開始しました。ランサムウェア自体は技術的な興味は正直あまりありませんでした。しかし、当時はランサムウェアの被害が広がっており、ShinoBOT同様のテスト用のシミュレータを開発してほしいという要望を方々からいただき、開発に踏み切りました。

#用途
他のShinoBOT Familyと同様、セキュリティのテスト目的での利用が多いです。
1.セキュリティ製品の評価
2.インシデントレスポンスチームの訓練
3.教育
4.サイバー攻撃のデモ
5.研究用マルウェア

#ShinoLockerの技術的な説明
ShinoLockerはVB.NETで開発されており、文字列の難読化に[ShinoEncode](https://github.com/Sh1n0g1/ShinoEncoder)を利用しています。また、ShinoLockerをダウンロードするWebサイトでは、ShinoBuilderというプログラムが動作しており、毎回文字列の難読化が動的にランダマイズされます。そのため、ダウンロードする度に新しいShinoLockerの亜種が生成されます。
また、ShinoBuilderの機能として、ShinoLockerのパラメータをWebサイトから編集することができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/325297/27900845-bcf8-f848-5daa-8a4490a620c9.png)
例えば、暗号対象の拡張子や利用するレジストリの名前が自由に変更できます。

##カスタマイズ例
* 通信をhttpsではなく、httpで行わせたい場合は、Server URLのhttps://～をhttp://～に変更すれば可能です。
* デフォルトのダウンロードオプションでは、ボリュームシャドウを削除します（多くのランサムウェアも同様の活動をします）。

##VirusTotalの結果
ShinoLockerは２つのコンポーネントに分かれています。

###本体
本体はC&Cとの通信、ファイルのスキャンなど、暗号処理以外の処理を担っています。
VirusTotalの結果：[49/66](https://www.virustotal.com/#/file/0cad1e50cd75583a4341973672be194bd43eeb3ee23bd0120719a962c9a7e663/detection)

###スタブ
スタブプログラムはファイルの暗号、復号を担っています。コマンドラインツールになっており、AES暗号復号便利ツールのようなものです。単体で[GitHub](https://github.com/Sh1n0g1/ShinoLocker/tree/master/ShinoLockerStub)で公開しています。
VirusTotalの結果：[27/66](https://www.virustotal.com/#/file/ece6413a079e1d7213e409e0a9dfec6339af7a66cf761f3bb6b18717de078452/detection)

###考察
スタブのほうが検知率が低い理由は、スタブプログラムは単なる暗号ツールであるためです。

#統計データと考察
データの範囲：2016年5月1日～2018年12月17日
ShinoLockerはC&Cサーバと通信をする際に、ユーザ名とコンピュータ名情報をポストします。統計データはこれらの情報を含むサーバのログから生成しています。




###ダウンロード数および実行数
|||
|---|--:|
|ダウンロード回数|9877|
|実行回数|14114|


![利用状況.png](https://qiita-image-store.s3.amazonaws.com/0/325297/f5d2d047-a30e-3ebd-2c80-8749299e668f.png)

* 著しく伸びているが原因は以下のヘビーユーザのためである
    * 2016年11月は1台の端末で199回実行されている
    * 2017年5月は1台の端末で420回実行されている
    * 2017年9月は2台の端末で462回、240回実行されている

###お得意様

|順位|ホスト名（一部伏字）|実行回数|
|--:|---|--:|
|1|Adm***|1623|
|2|Win***|512|
|3|Joh***|476|
|4|MD1***|420|
|5|TES***|284|
|6|TES***|247|
|7|win***|223|
|8|WIN***|210|
|9|PLA***|198|
|10|DES***|171|

お得意様の実体はいわゆるマルウェア自動解析用のホスト（いわゆるサンドボックス）です。例えば、誰かがVirusTotalに新しいShinoLockerをアップロードすると、各研究機関がその検体を入手し、自動的にサンドボックスで実行します。そのため、同じホスト（厳密にはゲストOSイメージ）で実行されるため、特定のホスト上での実行回数が増えるというわけです。こういったサンドボックスのユーザ名、ホスト名などのシステム情報はリサーチャーや攻撃者にもよく知られており、実際のマルウェアのなかには特定のホスト名では動作を止めるものも存在します。
もし、こういったシステムを開発される機会がある場合、ホスト名やユーザ名をランダマイズすることを推奨いたします。
参考情報）[サンドボックスのホスト名一覧](http://www.hexacorn.com/blog/2015/08/25/enter-sandbox-part-8-all-those-host-names-will-be-lost-in-time-like-tears-in-rain/)

#公開後のフィードバック
バックドアシミュレータであるShinoBOTとは異なり、ランサムウェアシミュレータであるShinoLockerは賛否両論ありました。安全にランサムウェアのテストができると意見が多数でしたが、こういったツールはリリースすべきではない意見もありました。教育目的のランサムウェアは過去にも発表されたこともあり、それが改ざんされて、悪用されたため、また同様の歴史が繰り返されることを危惧されたためです。
例）[New educational ShinoLocker Ransomware Project Released](https://www.bleepingcomputer.com/news/security/new-educational-shinolocker-ransomware-project-released/)
反論としては過去のランサムウェアはオープンソースであったのに対して、ShinoLockerはソースコードは公開していません。難読化も施しており、いわゆるスクリプトキディーが悪用することは防いでいるつもりです。リバースエンジニアリングができたり、難読化も解ける人はそもそも自分でランサムウェアくらい簡単に開発できるのではないかと思っています。ただし、自分が作ったツールが改ざんされて、悪用されるのはいい気はしないので、これらの意見は真摯に受けとめつつ、悪用対策は進めようと思いました。

#衝撃の結末
ソースコードがない！！
本ブログを書くために久しぶりにソースコードを確認しようとしたら、リポジトリごと消失していました。ということでShinoLockerの開発は凍結となります...次はスクラッチから作成することになるので、要望などがあれば、承ります。

@Sh1n0g1