Capcomがランサムウェアの被害にあったとニュースがありました。
犯人は「Team of Ragnar Locker」と自称していて、使用されたランサムウェアも「Ragnar Locker」と呼ばれているようです。
そして三井物産セキュアディレクションのブログにCapcomで使われたランサムウェアの解析結果が掲載されていて、exeファイルにデジタル署名が付与されていると記載がありました。
署名情報の画像も載っていて、ロシアの有限会社の署名&GlobalSignの正規の証明書でした。
マルウェアにデジタル署名が付与されていることはよくあるそうで、2010年のF-Secureのブログにもデジタル署名されたマルウェアの話が載ってました。
(盗んだ証明書使ったり、署名情報をコピペするらしい(コピペの場合、認証(って言うのか?)は通らない))
ということで、exeファイルのデジタル署名に興味を持ったので、exeファイルと証明書を作成してデジタル署名の付与を試してみた。
環境
exe作成:Visual Studio Community 2019(C++)
証明書作成:OpenSSL1.0.2
署名ツール:SignTool.exe ※Visual Studioに付属
exeの作成
MessageBoxを表示するだけのexeファイルを作成する。
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { MessageBox(NULL, TEXT("Hello, world!"), TEXT("Hello"), MB_OK | MB_ICONINFORMATION); return 0; }
作成したexeの実行結果
証明書の作成
OpenSSLで証明書を作る。自己署名証明書にしました。
証明書を作成したら、PKCS#12(pfx)に変換する。
openssl genrsa 2048 > server.key openssl req -new -key server.key > server.csr openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx
作成した証明書(Subject名は適当)
デジタル署名の付与
「SignTool.exe」でexeに署名を付与する。
「SignTool.exe」はVisual Studioに付属のものを使います。
signtool.exe sign /f server.pfx /t http://timestamp.digicert.com msgbox.exe Done Adding Additional Store Successfully signed: msgbox.exe
「/t <URL>」オプションを付けると署名時刻が付くようです。
署名者の情報の「電子メール」欄は、証明書のサブジェクト情報となりました。(CSR作成時に設定したもの)
「/t <URL>」オプションを付けない場合、署名時刻はなし(利用不可と表示)となりました。
ファイルサイズは下記の通りでした。
「署名なし」 <「 署名あり(timestampなし) < 「署名あり(timestampあり)」
exeタイプ | ファイルサイズ(Byte) | サイズ増(Byte) |
---|---|---|
署名なし.exe | 9,216 | - |
署名あり(timestampなし).exe | 10,736 | +1,520 |
署名あり(timestampあり).exe | 14,656 | +3,920 |
PEファイルのフォーマット
証明書、署名情報は「Attribute Certificate Table」に格納されるようです。
「Attribute Certificate Table」はセクションの後ろに付くようです。
PE Format
PE Format - Win32 apps | Microsoft Docs
Windows Authenticode Portable Executable Signature Format
https://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx