たれながし.info

とあるITエンジニアの備忘録

exeファイルと証明書を作成してデジタル署名を付与してみる

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の実行結果
f:id:tarenagashi_info:20201114022605p:plain

証明書の作成

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名は適当)

f:id:tarenagashi_info:20201113231222p:plain

デジタル署名の付与

「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作成時に設定したもの)

f:id:tarenagashi_info:20201114001137p:plain

「/t <URL>」オプションを付けない場合、署名時刻はなし(利用不可と表示)となりました。

f:id:tarenagashi_info:20201114001232p:plain

ファイルサイズは下記の通りでした。
「署名なし」 <「 署名あり(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」はセクションの後ろに付くようです。

f:id:tarenagashi_info:20201114020823p:plain

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

感想

デジタル署名の「電子メール」がCSR作成時に設定した「メールアドレス」となることが分かりました。
Capcomで使用されたランサムウェアはGlobalSignの正規の証明書で署名されているので、デジタル署名に記載されているメールアドレスは証明書発行時点(2020/06/09)では存在していたということでしょうか。
2020/11/14時点、DNSレコードを検索しても該当のドメインは見つかりませんでした。ググって調べた情報だと、2020/10/12頃はAレコードは引けていたようです。

f:id:tarenagashi_info:20201114025211p:plain
f:id:tarenagashi_info:20201218164757p:plain