SaAT Netizen の更新プログラム機能の別の脆弱性?

Ahnlab 製品 の解析から分かった SaAT Netizenの脅威のまとめ

アレで、終わりのつもりだったんですが…
復号した、NzSess.log を見てたら気になったログがあった

[CNzOtpUpdater::DownloadOtpFile] strSrcUrl(http://services.saat.jp/service/stnv601/update/otp/otp_ver.html) DST(C:\Windows\Temp\SaATNetizen\otp_ver.html)
[CNzDownload::DownloadFile] MoveFileEx 1st bResult(1)(0x000000b7) strTargetBak(C:\Windows\Temp\SaATNetizen\otp_ver.html_bak)
[CNzDownload::DownloadFile] bSuccess(1) bRecycle(0)
[CNzPlyUtil::GetStarterPlyVersion] version:(2016.02.01.00
)
[0308 21:41:56.889][P:03332][T:06228][000000][ERR] [CNzPlyUtil::GetStarterPlyVersion] file open fail, file:(C:\Program Files\AhnLab\SaATNetizen\\otp_ver.html)
 (LastError:2)
[CNzOtpUpdater::IsNeedUpdateOtp] ServerNew(1) : Server(2016.02.01.00
) Local()
[CNzOtpUpdater::DownloadOtpFile] strSrcUrl(http://services.saat.jp/service/stnv601/update/otp/otp_files.html) DST(C:\Windows\Temp\SaATNetizen\otp_files.html)
[CNzDownload::DownloadFile] MoveFileEx 1st bResult(1)(0x000000b7) strTargetBak(C:\Windows\Temp\SaATNetizen\otp_files.html_bak)
[CNzDownload::DownloadFile] bSuccess(1) bRecycle(0)
[CNzOtpUpdater::GetOtpFiles] Files:(nmotp.cfg,.\,05f087ba
big_bg_verisign.bmp,.\otp,1d69b363
joyo_hojin.bmp,.\otp,71a1c41b
nanto_bank.bmp,.\otp,5caf80ae
netmove_bank.bmp,.\otp,10b0833a
nm_otp_common.ini,.\otp,6f46a3ba
small_bg_verisign.bmp,.\otp,5fe412bd
SG_OATHEXE.exe,.\,17de2cc8
SG_OATHLib.dll,.\,f75e5a76
)
CNzOtpUpdater::FillOtpFileInfo szFileName(nmotp.cfg) szFilePath(.\) szHash(05f087ba)
CNzOtpUpdater::FillOtpFileInfo szFileName(big_bg_verisign.bmp) szFilePath(.\otp) szHash(1d69b363)
CNzOtpUpdater::FillOtpFileInfo szFileName(joyo_hojin.bmp) szFilePath(.\otp) szHash(71a1c41b)
CNzOtpUpdater::FillOtpFileInfo szFileName(nanto_bank.bmp) szFilePath(.\otp) szHash(5caf80ae)
CNzOtpUpdater::FillOtpFileInfo szFileName(netmove_bank.bmp) szFilePath(.\otp) szHash(10b0833a)
CNzOtpUpdater::FillOtpFileInfo szFileName(nm_otp_common.ini) szFilePath(.\otp) szHash(6f46a3ba)
CNzOtpUpdater::FillOtpFileInfo szFileName(small_bg_verisign.bmp) szFilePath(.\otp) szHash(5fe412bd)
CNzOtpUpdater::FillOtpFileInfo szFileName(SG_OATHEXE.exe) szFilePath(.\) szHash(17de2cc8)
CNzOtpUpdater::FillOtpFileInfo szFileName(SG_OATHLib.dll) szFilePath(.\) szHash(f75e5a76)
[CNzOtpUpdater::DownloadOtpFile] strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\nmotp.cfg) DST(C:\Windows\Temp\SaATNetizen\OathOTP\nmotp.cfg)
[CNzDownload::DownloadFile] MoveFileEx 1st bResult(1)(0x000000b7) strTargetBak(C:\Windows\Temp\SaATNetizen\OathOTP\nmotp.cfg_bak)
[CNzDownload::DownloadFile] bSuccess(1) bRecycle(0)
[CNzOtpUpdater::ValidFileHash] bRet(1) strHashSrc(05f087ba) strHashTgt(05f087ba) strFilePath(C:\Windows\Temp\SaATNetizen\OathOTP\nmotp.cfg)
[CNzOtpUpdater::UpdateOtp] VALID strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\nmotp.cfg) strDestPath(C:\Windows\Temp\SaATNetizen\OathOTP\nmotp.cfg) szLocalFullPath(C:\Windows\Temp\SaATNetizen\OathOTP\nmotp.cfg) szLocalPostfixFolder()
[CNzOtpUpdater::DownloadOtpFile] strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\otp\big_bg_verisign.bmp) DST(C:\Windows\Temp\SaATNetizen\OathOTP\otp\big_bg_verisign.bmp)
[CNzDownload::DownloadFile] MoveFileEx 1st bResult(1)(0x000000b7) strTargetBak(C:\Windows\Temp\SaATNetizen\OathOTP\otp\big_bg_verisign.bmp_bak)
[CNzDownload::DownloadFile] bSuccess(1) bRecycle(0)
[CNzOtpUpdater::ValidFileHash] bRet(1) strHashSrc(1d69b363) strHashTgt(1d69b363) strFilePath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\big_bg_verisign.bmp)
[CNzOtpUpdater::UpdateOtp] VALID strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\otp\big_bg_verisign.bmp) strDestPath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\big_bg_verisign.bmp) szLocalFullPath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\big_bg_verisign.bmp) szLocalPostfixFolder(\otp)
[CNzOtpUpdater::DownloadOtpFile] strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\otp\joyo_hojin.bmp) DST(C:\Windows\Temp\SaATNetizen\OathOTP\otp\joyo_hojin.bmp)
[CNzDownload::DownloadFile] MoveFileEx 1st bResult(1)(0x000000b7) strTargetBak(C:\Windows\Temp\SaATNetizen\OathOTP\otp\joyo_hojin.bmp_bak)
[CNzDownload::DownloadFile] bSuccess(1) bRecycle(0)
[CNzOtpUpdater::ValidFileHash] bRet(1) strHashSrc(71a1c41b) strHashTgt(71a1c41b) strFilePath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\joyo_hojin.bmp)
[CNzOtpUpdater::UpdateOtp] VALID strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\otp\joyo_hojin.bmp) strDestPath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\joyo_hojin.bmp) szLocalFullPath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\joyo_hojin.bmp) szLocalPostfixFolder(\otp)
[CNzOtpUpdater::DownloadOtpFile] strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\otp\nanto_bank.bmp) DST(C:\Windows\Temp\SaATNetizen\OathOTP\otp\nanto_bank.bmp)
[CNzDownload::DownloadFile] MoveFileEx 1st bResult(1)(0x000000b7) strTargetBak(C:\Windows\Temp\SaATNetizen\OathOTP\otp\nanto_bank.bmp_bak)
[CNzDownload::DownloadFile] bSuccess(1) bRecycle(0)
[CNzOtpUpdater::ValidFileHash] bRet(1) strHashSrc(5caf80ae) strHashTgt(5caf80ae) strFilePath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\nanto_bank.bmp)
[CNzOtpUpdater::UpdateOtp] VALID strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\otp\nanto_bank.bmp) strDestPath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\nanto_bank.bmp) szLocalFullPath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\nanto_bank.bmp) szLocalPostfixFolder(\otp)
[CNzOtpUpdater::DownloadOtpFile] strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\otp\netmove_bank.bmp) DST(C:\Windows\Temp\SaATNetizen\OathOTP\otp\netmove_bank.bmp)
[CNzDownload::DownloadFile] MoveFileEx 1st bResult(1)(0x000000b7) strTargetBak(C:\Windows\Temp\SaATNetizen\OathOTP\otp\netmove_bank.bmp_bak)
[CNzDownload::DownloadFile] bSuccess(1) bRecycle(0)
[CNzOtpUpdater::ValidFileHash] bRet(1) strHashSrc(10b0833a) strHashTgt(10b0833a) strFilePath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\netmove_bank.bmp)
[CNzOtpUpdater::UpdateOtp] VALID strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\otp\netmove_bank.bmp) strDestPath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\netmove_bank.bmp) szLocalFullPath(C:\Windows\Temp\SaATNetizen\OathOTP\otp\netmove_bank.bmp) szLocalPostfixFolder(\otp)
[CNzOtpUpdater::DownloadOtpFile] strSrcUrl(http://services.saat.jp/service/stnv601/update/otp\OathOTP\otp\nm_otp_common.ini) DST(C:\Windows\Temp\SaATNetizen\OathOTP\otp\nm_otp_common.ini)
[CNzDownload::DownloadFile] MoveFileEx 1st bResult(1)(0x000000b7) strTargetBak(C:\Windows\Temp\SaATNetizen\OathOTP\otp\nm_otp_common.ini_bak)
[CNzDownload::DownloadFile] bSuccess(1) bRecycle(0)

32bit のハッシュを参照して、ファイルをダウンロードしてインストールしてる
場所は%systemRoot%\Temp\SaATNetizen\OathOTP
もしくは %temp%\SaATNetizen\OathOTP

ワンタイムパスワード方式の実行ファイルみたいだけど…。

SG_OATHEXE.exe については、32bit のハッシュ値として、17de2cc8が割り当てられてるけど、
V3Hunt.dllのCRC計算では 55BACD398 だから別の値の様だ。

さらにログ見たらAhnTrust_GetHashFile 参照してることが分かったので
追加で、AhnTrust.dll も解析してみた。

int AhnTrust_GetHashLength(DWORD HashType);
HashType ハッシュの種類
ハッシュ文字列のバッファーサイズが返ります

HashType
1:20bytes
2:32bytes
3:20bytes
4:20bytes

int  AhnTrust_GetHashStringLength(DWORD HashType);
HashType ハッシュの種類
ハッシュ文字列をHEX表記したときの文字長が返ります

int AhnTrust_GetHash(DWORD kind, char *string, DWORD string_sz, BYTE* hash, DWORD hash_sz);
文字列 string のハッシュを作成しhashに格納します
基本的に 20/32バイトのハッシュバイナリが返ります

int AhnTrust_GetHashString(DWORD kind, char *string, DWORD string_sz, wchar_t* hashstr, DWORD hashstr_sz);
文字列 string のハッシュを作成しhashstringにUNICODE形式で格納します
基本的に 40/64文字のハッシュ文字列が返ります

int AhnTrust_GetHashFile(DWORD kind, wchar_t *file, BYTE* hash, DWORD hash_sz);
ファイル名file のハッシュを作成しhashに格納します
基本的に 20バイトのハッシュバイナリが返ります

int AhnTrust_GetHashStringFile(DWORD kind, wchar_t *string, DWORD string_sz, char* hashstr, DWORD hashstr_sz);
ファイル名file のハッシュを作成しhashstringにUNICODE形式で格納します
基本的に 40/64文字のハッシュ文字列が返ります

さて、ハッシュ計算アプリ作ってみた
v3f
なんか、HASH2 の最初の8文字と一致…。

v3g

だめだ、これじゃあCRC32と同じだ…。
しかも、ファイルリストを定義してる
http://services.saat.jp/service/stnv601/update/otp/otp_files.html
はCRCすらついてないので偽装し放題。

ちなみに、これは、SaAT Netizenのインストール直後に実行されるオプションパッケージのダウンローダー
実際に偽装できるかは後で試してみるよ

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です