13 ポイント 投稿者 GN⁺ 2024-12-31 | 1件のコメント | WhatsAppで共有
  • curl-impersonate は、主要なWebブラウザである Chrome、Edge、Safari、Firefox を模倣できる特別な curl ビルド
    • TLS および HTTP ハンドシェイクを実際のブラウザと同じように実行
    • コマンドラインツールとして使用することも、ライブラリとして統合することも可能
  • 重要性
    • HTTP クライアントが TLS Web サイトにアクセスするとき、TLS ハンドシェイクを実行し、この過程でクライアントの特性を識別できる
    • curl-impersonate はこれらのハンドシェイクを実際のブラウザと同一にすることで、Web サービスがクライアントを識別できないようにする
  • 技術的実装
    • Google の TLS ライブラリである BoringSSL を使って curl をコンパイルする。
    • さまざまな TLS 拡張および SSL オプションを変更する。
    • HTTP/2 接続設定を変更する。
    • 非標準フラグを使って curl を実行する。
  • 対応ブラウザ
    • Chrome、Edge、Safari、Firefox など、さまざまなバージョンのブラウザを模倣できる。
    • 各ブラウザ向けのスクリプトが提供されている。
  • 基本的な使い方
    • 各対応ブラウザ向けに curl-impersonate を実行するラッパースクリプトが提供されている。
    • 例: curl_chrome123 https://www.wikipedia.org
  • 高度な使い方
    • libcurl-impersonate ライブラリを使って API 経由で設定できる。
    • CURL_IMPERSONATE 環境変数を使って、ライブラリを実行時に置き換えられる。
  • インストール
    • Windows、Linux、macOS 向けの事前コンパイル済みバイナリが GitHub Releases ページで提供されている。
    • Docker イメージ経由でも利用できる。
  • このリポジトリは curl-impersonate のより活発なフォークであり、次のような主な違いがある
    • Encrypted Client Hello(ECH) 対応: Chrome 119 で導入された ECH 機能を追加。
    • ZSTD 圧縮対応: Chrome 123 で導入された ZSTD 圧縮プロトコルをサポート。
    • X25519Kyber768 曲線対応: Chrome 124 で導入された新しい暗号曲線を追加。
    • Akamai HTTP/2 フィンガープリントオプション拡張: Safari を含む HTTP/2 フィンガープリントオプションを強化。
    • 最新の curl バージョンへアップグレード: curl 8.7.1 に更新。
    • TLS 拡張順序および GREASE 設定が可能: TLS 拡張の順序と GREASE の有効化/無効化オプションを追加。
    • WebKit および Gecko ベースのブラウザ対応を準備中: Chrome と Firefox 向けの単一バイナリを開発中。

1件のコメント

 
GN⁺ 2024-12-31
Hacker Newsの意見
  • Pythonバインディングを通じてrequestsに似たAPIを提供するプロジェクトがある。これにより、ブラウザスタック全体を実行せずにHTTPリクエストを簡単に行える

    • オープンインターネットの終焉を感じさせる。大企業は自分たちが承認したソフトウェアだけを使わせ、ユーザーを識別しようとしている
    • セキュリティ、ボット、DDoSなどさまざまな角度から進んでおり、ブラウザだけに限らない
    • 最終的な目標は、大企業がユーザーのあらゆる行動を追跡し、承認された行動だけを取らせることのように見える
  • 特定のサイトではJavaScriptベースのブラウザ検出が必要になる。puppeteer-extra-plugin-stealthも無力化されることがある

    • TLSフィンガープリンティングは、深刻なボット検知を行っていないサイトでは使われないと思う
    • ヘッドレスブラウザで短命なトークンやCookieを取得し、それを軽量クライアントからのリクエストに使う用途で有用かもしれない
  • ビルドスクリプトが複雑。autotoolsを使っているが、サブディレクトリでビルドする必要がある

    • デフォルトのビルドターゲットはプロジェクトのビルドではなくヘルプテキストになっている
    • ビルドターゲットを使う際、依存関係が正しく設定されておらず、複数回実行する必要がある
    • BoringSSLのビルド失敗により最後までビルドできなかった。Ubuntu 20で試したが失敗した
    • Ubuntu 22でも試したがBoringSSLのビルドに失敗した。makeスクリプトのほうがよりうまく動いた
    • -Werrorを削除して問題を解決。依存関係リストが不完全
    • libc++-XX-devlibc++abi-XX-devが必要。インストール手順がやや不完全
    • BoringSSLは大きなライブラリで、ビルドに時間がかかる
  • Python向けに似たプロジェクトを作った。Windowsビルドを手伝ってくれる人を探している

  • JA3/JA4フィンガープリンティングを使っているWebサイトは少数だけ。ヘッダーとフィンガープリントを関連付ける高度な手法を使うサイトもある

    • Burp Suiteのフィンガープリントを使ってセキュリティ作業を行える
  • ja3proxyを使ってutls経由でHTTPプロキシを公開している。HTTP/2向けの特別な機能はない

  • Go言語ではtls-clientパッケージが主に使われている

  • AIスクレイパーファームがサイトをDDoSしていることに関する話があり、興味深い

  • こうしたプロジェクトは公開されるべきではないと思う。敵は我々の中にいるかもしれない

    • ユーザーエージェントによる差別は違法であるべきだ。EUが変化をもたらすかもしれないが、デジタルアイデンティティに強い関心を持っている
  • 特定のWebサイトからデータを読まなければならない場合、ハンドシェイク情報を使ってソフトウェアでは読めないようにしている

    • HTTPリクエスト時にはヘッドレスブラウザをデフォルトで使っている。一部のWebサイトはCAPTCHAなどのため読めない