Fortress – A Stealth Chromium Browser for Unblocked Agent Traffic

Fortress – A Stealth Chromium Browser for Unblocked Agent Traffic

Fortress provides a stealth Chromium environment that prevents automated agents from being blocks

Fortressは、ヘッドレスまたは自動化されたブラウザの兆候を隠すように設計された、修正済みのChromiumビルドを提供するオープンソースプロジェクトです。これらの兆候を隠蔽することで、Fortressは、ウェブスクレイピング、テスト、およびその他の自動化タスクが、通常であればトラフィックをブロックまたはレート制限するアンチボット防御を回避することを可能にします。


The core problem is that modern anti‑bot services detect standard headless Chromium

現代のアンチボットサービスは、navigator.webdriverのチェック、Chrome拡張機能の検査、またはタイミングの異常の分析など、フィンガープリント技術にますます依存しており、ヘッドレスChromiumを特定してブロックします。ブラウザがフラグを立てられた場合、リクエストはスロットリング(制限)され、CAPTCHAが表示されるか、または接続が完全に終了し、自動化ワークフローを中断させます。


Fortress solves this by embedding anti‑fingerprinting patches directly into Chromium

Fortressは、以下のパッチセットを使用してChromiumをソースからコンパイルします:

  • navigator.webdriverフラグの削除またはランダム化。
  • 一般的なユーザーエージェント文字列とプラットフォーム識別子を偽装。
  • 自動化を明らかにするDevToolsプロトコルを無効化または難読化。
  • 人間のインタラクションを模倣するためにタイミング情報をランダム化。

これらの変更はバイナリに組み込まれているため、通常のSelenium、Playwright、またはPuppeteerのAPIを介してChromiumを起動するスクリプトは、追加の設定なしでステルス動作を継承します。


How to get started with Fortress

  1. Clone the repository
    git clone https://github.com/tiliondev/fortress.git
    cd fortress
    
  2. Build the browser (requires a recent Linux/macOS environment with the Chromium build dependencies installed):
    ./build.sh   # The script pulls Chromium source and applies the stealth patches
    
  3. Run your automation script using the path to the built binary:
    from selenium import webdriver
    options = webdriver.ChromeOptions()
    options.binary_location = "$(pwd)/out/Release/chrome"
    driver = webdriver.Chrome(options=options)
    driver.get("https://example.com")
    
    同じバイナリは、executablePathオプションを指定することでPlaywrightまたはPuppeteerでも動作します。

Community reception and limitations

HN postは37件のup-votesと47件のコメントを受け取り、完成済みのステルスブラウザへの強い関心を示しています。しかし、コメントスレッドは現在空であるため、外部の検証や報告された問題はまだ利用可能ではありません。潜在的な制限事項は以下の通りです:

  • Maintenance overhead: Chromiumのアップストリーム・リリースに合わせてパッチを最新の状態に保つには、継続的な努力が必要です。
  • Platform support: リポジトリは主にLinux/macOSを対象としています。Windowsユーザーはビルドスクリプトを適応させる必要があります。
  • Legal considerations: Chromiumバイナリを修正することはライセンスコンプライアンスに影響を与える可能性があります。ユーザーはChromiumのライセンスおよび第三者コンポーネントを検討すべきです。

When to use Fortress versus existing stealth libraries

既存のJavaScriptライブラリ(例:puppeteer-extra-plugin-stealth)は、標準のChromiumバイナリに実行時にパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパject/stealth

  • Legal considerations: Chromiumバイナリを修正することはライセンスコンプライアンスに影響を与える可能性があります。ユーザーはChromiumのライセンスおよび第三者コンポーネントを検討すべきです。

When toject/stealth

既存のJavaScriptライブラpx/stealth

  • Legal considerations: Chromiumバイナリを修正をパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパッチをパalth/stealth
  • Legal considerations: Chromiumバイナリを修正することはライセンスコンプライアンスに影響を与える可能性があります。ユーザーはChromiumのライセンスおよび第三者コンポーネントを検討すべきです。

When to use Fortress versus existing stealth libraries

既存のJavaScriptライブラリ(例:puppeteer-extra-plugin-stealth)は、標準のChromiumバイナリに実行時にパッチを適用します。Fortressは、それらのパッチをコンパイル時に組み込むことで異なり、これにより以下のことが可能になります:

  • ブラウザが最初からステルス状態であるため、実行時のオーバーヘッドを削減できます。
  • 修正がChromiumのアップデートによって元に戻される可能性が低いため、より安定したフィンガープリントを提供します。
  • どのような自動化フレームワークでも、すぐに使える単一のバイナリを提供します。

素早いスクリプトレベルの解決策が必要な場合は、実行時のプラグインで十分かもしれません。一貫性とパフォーマンスが重要な大規模なスクレイピング操作では、Fortressのようなコンパイル済みのステルスブラウザがより信頼できます。


Conclusion

Fortressは、一般的な自動化のフィンガープリントを削除する強化されたChromiumビルドを提供し、エージェントがアンチボットシステムによってブロックされることなく動作することを可能にします。ステルスパッチをブラウザバイナリに直接統合することで、実行時のプラグインに代わるパフォーマンスに優れた代替手段を提供しますが、ユーザーはビルドの更新とプラットフォームの互換性を自身で管理する必要があります。

Sources