Defensive Research

防御的脅威調査:プロキシ分離による不審なURLへのアクセス

3 min read Published Updated 654 words

研究用ワークステーションから怪しいURLに直接アクセスするのは無謀です。悪意のあるランディングページの70%以上が接続元IPをフィンガープリントし、無害なページを表示するか、リクエストを完全にブロックします。プロキシ分離はオプションではなく、信頼できる脅威インテリジェンス収集の基本です。これがないと、インフラのネットブロックを敵対者に渡し、数分以内に内部サービスを標的にされることになります。

脅威インテリジェンスにおいて直接ブラウジングが失敗する理由

最新のエクスプロイトキットやフィッシングキットは、REMOTE_ADDRを脅威インテルブロックリスト、地理位置情報データベース、さらには逆DNSルックアップと照合します。既知の研究ASNからの直接接続は、クリーンなページまたは404へのリダイレクトを引き起こします。さらに悪いことに、多くのキットはJavaScriptを使用してWebRTCリーク(RFC 8834)を介してクライアントのローカルIPを列挙し、VPNの背後でも実際のネットワークを露呈させます。プロキシ分離は、インフラの評判を共有しないリモート中間点で接続を終了することで、この連鎖を断ち切ります。プロキシ自体は使い捨て可能でなければなりません。つまり、シングルユースのクラウドインスタンスか、ローテーションするレジデンシャルプロキシプールです。単一プロバイダの静的プロキシは数日で焼かれてしまいます。

多層分離:プロキシ+VMまたはコンテナ

ブラウザがDNS、時間ベースのサイドチャネル、またはブラウザフィンガープリンティングを介してデータを漏洩する場合、プロキシだけでは不十分です。プロキシを、永続ストレージがなく、ホストファイルシステムのマウントがなく、最小限のブラウザプロファイルを持つ専用のVMまたはコンテナと組み合わせてください。コンテナ上でiptablesを使用して、すべての出力をプロキシ経由に強制し、RFC 1918アドレスへのトラフィックをすべてドロップします。例えば、--network noneを備えたDockerコンテナと、ssh -D 1080を介したSOCKS5トンネルを使い、使い捨てジャンプボックスに接続します。これにより、ブラウザがWebSocketやWebRTCを介してプロキシをバイパスするのを防ぎます。これはブラウザレベルのプロキシ設定のみを使用する場合の一般的な障害モードです。VMまたはコンテナは各セッション後に破棄する必要があります。スナップショットは、すべてのCookie、キャッシュ、localStorageを消去する場合にのみ許容されます。

ツール:プロキシチェーンとヘッドレスブラウザを用いたBurp Suite

手動分析の場合、User options > Connections > SOCKS Proxy127.0.0.1:1080に設定し、Do DNS resolution via SOCKS proxyを有効にして、Burp SuiteをSOCKS5プロキシ(RFC 1928)経由でチェーンします。これにより、すべてのDNSルックアップがプロキシ経由になり、DNSリークを回避します。自動収集には、PuppeteerまたはPlaywrightを使用したヘッドレスブラウザファームが標準です。以下は、すべてのトラフィックをSOCKS5プロキシ経由でルーティングし、WebRTCを無効にする最小限のPuppeteerスクリプトです。

const puppeteer = require('puppeteer');
const proxy = 'socks5://127.0.0.1:1080';

const browser = await puppeteer.launch({
  args: [
    `--proxy-server=${proxy}`,
    '--disable-webrtc',
    '--no-sandbox',
    '--disable-setuid-sandbox'
  ]
});
const page = await browser.newPage();
await page.authenticate({ username: 'user', password: 'pass' });
await page.goto('http://malicious.example', { waitUntil: 'networkidle0' });
// Capture screenshot, HAR, DOM snapshot
await page.screenshot({ path: 'screenshot.png' });
await browser.close();

このアプローチは機能しますが、注意点があります。多くのヘッドレスブラウザはnavigator.webdriverchrome.runtimeの欠如によって検出可能です。puppeteer-extra-plugin-stealthまたはPlaywrightの組み込みステルスパッチを使用してフィンガープリンティングを低減してください。それでも、高度なキットは、欠落しているwindow.chromeプロパティや異常なnavigator.pluginsの長さをチェックすることでヘッドレスChromeを検出します。唯一の信頼できる対策は、実際のディスプレイドライバを備えたVMでフルブラウザ(ヘッドレスではない)を実行することですが、これはスケーラビリティに劣ります。

urlscan.ioに代わるセルフホスト分析の選択肢

urlscan.ioは便利ですが、スキャンメタデータをコミュニティと共有し、あなたのIPをログに記録します。機密性の高い調査では、キャプチャプラットフォームをセルフホストしてください。PhantomJSは廃止されました。代わりに、カスタムHARロガーとローカルのmitmproxyインスタンスを備えたPlaywrightを使用してください。mitmproxy--mode socks5 --listen-port 8080)はすべてのリクエスト/レスポンスペアを記録し、ヘッダーやレスポンスのインライン変更を可能にします。PCAP分析のためにwiresharkと組み合わせてください。別のオプションとしてThreatPinch Lookup(ローカルの脅威インテルフィードを照会するChrome拡張機能)がありますが、完全な分離ソリューションではありません。バルクスキャンには、PhishingKitTrackerまたはrequestsを使用したカスタムPythonスクリプトを、proxybrokerからのローテーションプロキシリストとともにデプロイしてください。トレードオフ:セルフホストシステムはプロキシプールとブラウザプロファイルのメンテナンスが必要ですが、データ保持を完全に制御でき、調査対象を第三者に漏洩するのを防げます。