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文字のハッシュ文字列が返ります
さて、ハッシュ計算アプリ作ってみた
なんか、HASH2 の最初の8文字と一致…。
だめだ、これじゃあCRC32と同じだ…。
しかも、ファイルリストを定義してる
http://services.saat.jp/service/stnv601/update/otp/otp_files.html
はCRCすらついてないので偽装し放題。
ちなみに、これは、SaAT Netizenのインストール直後に実行されるオプションパッケージのダウンローダー
実際に偽装できるかは後で試してみるよ
Comments