くつろぎ備忘録

趣味で適当にくつろぐ人。真偽のほどは要検証で。

WannaCryと軽くふれあってみた。

WannaCryと戯れてみた? - くつろぎ備忘録

 

前回、微妙に異なるWannaCryを拾ってしまったので、ちゃんと動作するものを探してきました。

 

○検体

ファイルサイズ:3,723,264バイト

MD5:DB349B97C37D22F5EA1D1841E3C89EB4
SHA1:E889544AFF85FFAF8B0D0DA705105DEE7C97FE26
SHA256:24D004A104D4D54034DBCFFC2A4B19A11F39008A575AA614EA04703480B1022C

 

VIrusTotal

Antivirus scan for ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa at 2017-05-20 20:15:18 UTC - VirusTotal

 

○StringsやらResourceやら。

とりあえず覗いてみましたが、前回とは違い圧縮ファイルらしきものはResourceに見当たらず。

ただ、バイナリを見ていると所々に"MZ"が見えましたので、どうやら同じようなファイルを内包してそうな雰囲気。

 

○やっぱり展開をこころみる。

とりあえず、展開してみるとパスワードを要求されたので、同じパスワード"WNcry@2ol7"を入力してみると・・・展開できました!

f:id:rokutsugi_247:20170520202918p:plain

どうやら、中身はほとんど同じ気配。(上図は前回のもの)

 

○世間でうわさのキルスイッチとは?

本検体を実行すると、一番最初に滅茶苦茶なドメインに接続を試みるらしいので、さくっとIDA様で覗いてみる。

f:id:rokutsugi_247:20170521093738p:plain

"http://www.ieqerfsodp9ifjaposdfjhgosuri....."という適当にキーボードを叩いたようなドメインから応答があった場合、解析環境等と判断して動作を停止する仕組みを搭載したかったのかな?雑ですが。

 

つまり、この適当なドメインを取得して有効にしてあげれば、WannaCryは本来応答のないドメインから応答があったために動作を停止する訳ですね。

 

○動いちゃった場合は?

ぶっちゃけ面倒くさいので軽く続きを見ましたが、この後はサービスに登録されて、そこからWannaCryとして動作をしていく模様です。

 

00407C9B CALL CreateServiceA
hManager = 00BD3290
ServiceName = "mssecsvc2.0"
DisplayName = "Microsoft Security Center (2.0) Service"
DesiredAccess = SERVICE_ALL_ACCESS
ServiceType = SERVICE_WIN32_OWN_PROCESS
StartType = SERVICE_AUTO_START
ErrorControl = SERVICE_ERROR_NORMAL
BinaryPathName = "C:\[実行場所]\WanaCry.exe -m security"
LoadOrderGroup = NULL
pTagId = NULL
pDependencies = NULL
ServiceStartName = NULL
Password = NULL

 

こんな感じのを生成します。他にはC:\WINDOWS\tasksche.exeをWannaCryに置き換えて、CreateProcessしてみたり。何気に"/i"付けて起動してますが。

 

SMB関連の脆弱性をついた攻撃も、この後に行われるみたいですけど、詳細を出すといろいろ問題あるかもなので、後は個人で楽しみたい検証したいと思います。

 

まあ、本業があるので出来るかは微妙ですが・・・。

 

WannaCryと戯れてみた?

 

世間で話題のランサムウェア『WannaCry』と戯れてみたところ、微妙に違ったけど適当に書いてみようと思います。

 

○検体

ファイルサイズ:3,514,368バイト

MD5:84C82835A5D21BBCF75A61706D8AB549
SHA1:5FF465AFAABCBF0150D1A3AB2C2E74F3A4426467
SHA256:ED01EBFBC9EB5BBEA545AF4D01BF5F1071661840480439C6E5BABE8E080E41AA

VirusTotal

https://www.virustotal.com/ja/file/ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa/analysis/

 

○StringsやらResourceを覗いてみる

中を見ていく前に、StringsやResourceを確認してみたところ、意外にすんなりみえそうというか、Resourceに圧縮ファイルがマルッとついてますやん・・・。

f:id:rokutsugi_247:20170520202437p:plain

 

抽出して展開を試みると

f:id:rokutsugi_247:20170520202538p:plain

 

さらっと、パスワード入力が求められました。

 

○実行が怖いのでIDA様で覗いてみる

多分、いろいろなファイルを展開して悪さをするんだろうなーと適当にあたりを付けつつ、あっさりとパスワードが見つかりそうな気配だったので、IDA様で覗いてみた。

f:id:rokutsugi_247:20170520202742p:plain

詳しいことは割愛しますが、流れをみるとこれっぽい。

 

○圧縮ファイルの中身を覗いてみる。

f:id:rokutsugi_247:20170520202918p:plain

こんな感じ。

 

ちなみに、本検体を実行すると同じファイルが生成されますが、本来は生成されないみたい。

 

各ファイルは拡張子が腐ってますが、ほとんどが普通のファイルです。

msgの中には感染後に表示される説明文が入ってます。

f:id:rokutsugi_247:20170520203302p:plain

 

b.wnryは感染後の壁紙

f:id:rokutsugi_247:20170520203341p:plain

 

s.wnryは圧縮ファイルで、展開するとTor関係のファイルが出てきます。

f:id:rokutsugi_247:20170520203416p:plain

 

u.wnryは実行ファイル。WannaDecrypt0r

f:id:rokutsugi_247:20170520203520p:plain

f:id:rokutsugi_247:20170520203531p:plain

 

c.wnryには.onionのアドレスやらTorのダウンロード先

r.wnryにはQ&Aが記載されてます。

 

で、t.wnryですけど

こいつだけ用向きが少し違いまして、WannaCryのメインコードを生成する際に使用する模様です。

そして、残りのexeファイルもそのメインコード上で活用されます。

 

そんな訳ですが、メインコード部はVirtualAllocでメモリ確保した後に、展開されますので、追っかけるのは簡単だと思います。

 

○メインコードを覗いてみたけれど・・・

しばらくolly先生で格闘してたんですけど、CreateRemoteThreadが多くて非常にイライラしました。

 

キルスイッチやSMBの脆弱性関係はどこにあるんじゃーっと調べていたんですけど、どうにも見当たらない・・・。

 

で、試しにWannaCryを実行してみたんですが、上記の通信が発生することなくファイルは暗号化されて、お支払い誘導画面が表示されるだけ。

 

この辺で、この検体おかしくね?と気づいて別のWannaCryを探してみると、最初にキルスイッチの通信が発生してるし、SMB関係の通信もバンバン出るし。

 

どうやら、今回戯れてみたWannaCryは亜種の模様・・・。

Uiwixかも知れませんが、果たして本当は何なのか?

 

とりあえず、メインコード部を抽出して、stringsを覗いたので、まとまってた拡張子だけ晒しておきます。

多分、こいつらが暗号化の対象になりそうなので。

.der .pfx .key .crt .csr .p12 .pem .odt .ott .sxw .stw .uot .3ds .max .3dm .ods

.ots .sxc .stc .dif .slk .wb2 .odp .otp .sxd .std .uop .odg .otg .sxm .mml .lay

.lay6 .asc .sqlite3 .sqlitedb .sql .accdb .mdb .dbf .odb .frm .myd .myi .ibd

.mdf .ldf .sln .suo .cpp .pas .asm .cmd .bat .ps1 .vbs .dip .dch .sch .brd

.jsp .php .asp .java .jar .class .mp3 .wav .swf .fla .wmv .mpg .vob .mpeg .asf

.avi .mov .mp4 .3gp .mkv .3g2 .flv .wma .mid .m3u .m4u .djvu .svg .psd .nef

.tiff .tif .cgm .raw .gif .png .bmp .vcd .iso .backup .zip .rar .tgz .tar .bak .tbk

.bz2 .PAQ .ARC .aes .gpg .vmx .vmdk .vdi .sldm .sldx .sti .sxi .602 .hwp .edb

.potm .potx .ppam .ppsx .ppsm .pps .pot .pptm .xltm .xltx .xlc .xlm .xlt .xlw

.xlsb .xlsm .dotx .dotm .dot .docm .docb .jpg .jpeg .snt .onetoc2 .dwg .pdf

.wk1 .wks .123 .rtf .csv .txt .vsdx .vsd .eml .msg .ost .pst .pptx .ppt .xlsx .xls

.docx .doc

 

大切なデータはバックアップとらんと、危ないね。

 

以上

CreateFile(kernel32)

使い方
HANDLE CreateFile(
LPCTSTR lpFileName, // ファイル名
DWORD dwDesiredAccess, // アクセスモード
DWORD dwShareMode, // 共有モード
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // セキュリティ記述子
DWORD dwCreationDisposition, // 作成方法
DWORD dwFlagsAndAttributes, // ファイル属性
HANDLE hTemplateFile // テンプレートファイルのハンドル
);

 

戻り値
関数が成功すると、指定したファイルに対する、開いているハンドルが返る。
dwCreationDistribution パラメータで CREATE_ALWAYS または OPEN_ALWAYS を指定し、lpFileName パラメータで指定したファイルが既に存在している場合、(CreateFile が成功した場合でも) 関数は 183(ERROR_ALREADY_EXISTS) が返る。
CreateFile を実行する前にファイルが存在していない場合、GetLastError は 0 が返る。

 

関数が失敗すると、-1(INVALID_HANDLE_VALUE) が返る。
拡張エラー情報を取得するには、GetLastError 関数を使う。

 

他の例
hTemplateFile = NULL
Attributes = NORMAL
Mode = CREATE_ALWAYS
pSecurity = NULL
ShareMode = 0
Access = GENERIC_WRITE
FileName = "C:\Users\[ユーザ名]\AppData\Local\Temp\ファイル名.exe"

 

説明
FileNameで指定したパスを参照し、既にファイルがあれば上書き、なければファイルの作成を行う。
作成されるファイルには属性の指定がない。

 

補足
dwDesiredAccess(Access)
0x00000000…0(デバイス属性の問い合わせ)
0x40000000…GENERIC_READ(読み取りアクセス)
0x80000000…GENERIC_WRITE(書き込みアクセス)

 

dwShareMode(ShareMode)
0x0…0(オブジェクト共有しない)
0x1…FILE_SHARE_READ(読み取りアクセス要求を許可)
0x2…FILE_SHARE_WRITE(書き込みアクセス要求を許可)
0x4…FILE_SHARE_DELETE(削除アクセス要求を許可)

 

dwCreationDisposition(Mode)
0x1…CREATE_NEW(新しいファイルを作成。既にファイルがある場合は失敗)
0x2…CREATE_ALWAYS(新しいファイルを作成。既にファイルがある場合は上書き)
0x3…OPEN_EXISTING(ファイルを開く。指定したファイルがない場合は失敗)
0x4…OPEN_ALWAYS(既にファイルがある場合、そのファイルを開く。ない場合は新しいファイルを作成)
0x5…TRUNCATE_EXISTING(ファイルを開き、ファイルのサイズを 0 バイトにする。ない場合は失敗)

 

dwFlagsAndAttributes(Attributes)
0x00000000…SECURITY_ANONYMOUS
0x00000001…FILE_ATTRIBUTE_READONLY(読み取り専用)
0x00000002…FILE_ATTRIBUTE_HIDDEN(隠しファイル)
0x00000004…FILE_ATTRIBUTE_SYSTEM(オペレーティングシステム用のファイル)
0x00000020…FILE_ATTRIBUTE_ARCHIVE
0x00000080…FILE_ATTRIBUTE_NORMAL(特に属性を設定しない)
0x00000100…FILE_ATTRIBUTE_TEMPORARY(一時ファイル)
0x00001000…FILE_ATTRIBUTE_OFFLINE
0x00002000…FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
0x00004000…FILE_ATTRIBUTE_ENCRYPTED(ファイルまたはディレクトリを暗号化)
0x00010000…SECURITY_IDENTIFICATION
0x00020000…SECURITY_IMPERSONATION
0x00030000…SECURITY_DELEGATION
0x00040000…SECURITY_CONTEXT_TRACKING
0x00080000…SECURITY_EFFECTIVE_ONLY
0x00100000…FILE_FLAG_OPEN_NO_RECALL
0x00200000…FILE_FLAG_OPEN_REPARSE_POINT
0x01000000…FILE_FLAG_POSIX_SEMANTICS
0x02000000…FILE_FLAG_BACKUP_SEMANTICS
0x04000000…FILE_FLAG_DELETE_ON_CLOSE
0x08000000…FILE_FLAG_SEQUENTIAL_SCAN
0x10000000…FILE_FLAG_RANDOM_ACCESS(ファイルにランダムアクセスする)
0x20000000…FILE_FLAG_NO_BUFFERING(バッファやキャッシュを使わずにファイルを開く)
0x40000000…FILE_FLAG_OVERLAPPED(オブジェクトを初期化)
0x80000000…FILE_FLAG_WRITE_THROUGH(キャッシュに書き込まれたデータを直接ディスクに書き込む)


参考
Microsoft MSDN
https://msdn.microsoft.com/ja-jp/library/cc429198.aspx
ちょくとのページ
http://chokuto.ifdef.jp/index.html

広告を非表示にする

WriteFile(kernel32)

使い方
BOOL WriteFile(
HANDLE hFile, // ファイルのハンドル
LPCVOID lpBuffer, // データバッファ
DWORD nNumberOfBytesToWrite, // 書き込み対象のバイト数
LPDWORD lpNumberOfBytesWritten, // 書き込んだバイト数
LPOVERLAPPED lpOverlapped // オーバーラップ構造体のバッファ
);

 

戻り値
成功すると0以外が返る。
失敗すると0が返る。

 

他の例
pOverlapped = NULL
pBytesWritten = 0012F4E0
nBytesToWrite = C000 (49152.)
Buffer = 01520048
hFile = 0000005C (window)

 

説明
メモリアドレス0x01520048から0xC000バイトのデータを、ハンドルで指定した0x0000005Cのファイルに書き込む。
書き込んだデータのバイト数(0xC000)は、0x0012F4E0に書き込まれる。

 

参考
Microsoft MSDN
https://msdn.microsoft.com/ja-jp/library/cc429856.aspx

広告を非表示にする