大手企業のようにWebスクレイピングをしたいなら (2021)
(incolumitas.com)- AWS LambdaとHeadless ChromeだけでもGoogle SERPを週あたり数百万件収集できたが、強固に保護されたサイトの前ではクラウドベースのボット構成は簡単に限界にぶつかる
- Lambdaの再呼び出しと複数リージョンの活用により、16リージョン基準で約
16 * 250 = 4000の公開IPを同時に使え、これは緩い対象には十分だった - DataDome、Akamai、Impervaのようなアンチボット事業者は、ブラウザ設定の不一致、自動化の痕跡、フィンガープリント情報を追跡し、実際の難題は検知そのものより誤検知率を下げることに近い
- より検知されにくい構成として、Dockerやクラウドサーバーの代わりに実際のAndroid端末とモバイルIPを使う方式を提案しており、4G/5G/LTE IPは大都市の多くの正規ユーザーが共有するため遮断しにくい
- 実機ファームでは端末購入、都市ごとのスペース賃貸、現地保守、ハードウェア障害を引き受ける必要があり、Androidエミュレーターにもエミュレーション検知のリスクが残る
AWS Lambdaで作った大規模スクレイピング構成
- 過去にスクレイピングサービスを運営していた当時、Google SERPを週あたり最大で数百万件収集していたが、Brightdata、Packetstream、Oxylabsのようなプロキシ提供業者は使わなかった
- 同じプロキシ帯域を共有する他の顧客を信頼しにくいと考えていた
- 公開情報に対する非DoS的なスクレイピングは問題ないが、広告詐欺、ソーシャルメディアスパム、自動SQL injection、XSSのようなWeb攻撃とは一線を画していた
- プロキシサービスの費用も負担だった
- 実際の構成は、AWS LambdaにHeadless Chromeを入れ、puppeteer-extraとchrome-aws-lambdaで300秒間ブラウザを実行する関数だった
- Googleは自社検索エンジンに対してボット遮断をそれほど強くせず、主にIPベースのレート制限を適用しているため、Google SERPだけを見るなら
curlでも可能だったかもしれないとしている - Lambdaでは関数呼び出し3回の後に新しい公開IPを得られ、1000個の関数を同時に呼び出すと約250個の公開IPに到達したという
- 16リージョンを使えば同時に約
4000個の公開IPを使えたと計算している - 共有データセンターIPではあったが、Google SERPを週あたり数百万件収集するには十分だった
- 16リージョンを使えば同時に約
- Google Cloud Platformも試したが、GoogleはAWSトラフィックより自社クラウドインフラのトラフィックをより強く遮断した
- この経験は2019年および2020年時点のもので、その後状況は変わっている可能性がある
クラウドボットが止められる理由
- Lambdaベースの構成はGoogle、Bing、Amazonのようにある程度スクレイピングを許容する対象には機能しうるが、強い保護を適用したサイトには向かない
- DataDome、Akamai、Impervaのようなアンチボット事業者は、ブラウザフィンガープリント、設定の不一致、人間が操作したブラウザとは異なる痕跡を探す
- 検知技術の例は広く存在する
- ボット検知の方法は非常に多く、ほぼすべてのボットアーキテクチャは何らかの検知に脆弱である
- ボットを作る側は検知する側より難しく、アンチボット事業者のより大きな課題は大半のボットを捕まえることより誤検知率を下げることに近い
検知されやすい経済的な構成
- 大量スクレイピングをしようとするボット開発者は、ブラウザをDockerコンテナに入れ、Docker SwarmやKubernetesでオーケストレーションすることが多い
- こうしたボットはHetzner、AWS、DigitalOceanのようなクラウド事業者上でホスティングされることが多い
- この構成は人間ユーザーの環境と大きく異なる
- 正規ユーザーがHetzner VPSのDockerコンテナの中でInstagramを閲覧している状況は自然ではない
- 成功するスクレイピングのルールとして2つを挙げている
- 2番目に重要なルール: ブラウザ設定について嘘をつかないこと
- 最も重要なルール: バレないときだけブラウザ設定について嘘をつくこと
実際のAndroid端末ファーム
- 難読化されたアンチボットのフィンガープリント採取ライブラリをリバースエンジニアリングするのは難しいため、実機をスクレイピングに使うアプローチを提案している
- 想定する構成は、低価格Android端末500台を購入し、フィンガープリントの多様性のために5社程度のメーカーの端末を混在させる方式である
- 低価格Android端末は1台58ドルから始まる
- 100台単位で買えば大幅な割引を受けられると見ている
- 各端末に安価なデータプランを付け、DeviceFarmer/stfで制御する
- London、Paris、Boston、Frankfurt、Los Angelesのような5つの主要都市にそれぞれ100台ずつ配置し、モバイルセルラーアンテナに近い安価な保管スペースを借りる構想である
- 端末には軽量なAndroid Goを入れ、不要な要素を取り除いたうえで電源に接続する
- 5分ごとに機内モードをオン・オフすれば、4G Carrier Grade NATを通じて新しいIPを取得できる
- モバイルIPアドレスは大都市では最大で数十万人の正規ユーザーが共有するため、実質的に遮断しにくい
- 例として、Instagramが一部のスパム利用者を理由にLAの20万人を遮断することはないだろうとしている
- CGNでIPv4アドレスが遮断されると加入者基盤全体に影響しうるというOfcom文書を引用している
- IPv6はアドレス空間が広すぎるため、ほとんどのアンチボット事業者はIPv6アドレスにIPレピュテーションをほとんど、またはまったく付与していないと見ている
実機構成の検知ポイントと運用負荷
- 実機を床に一日中置いたままにすると回転や動きのない状態が続くため、
deviceorientationとdevicemotionのJavaScriptイベントをカーネルレベルでスプーフィングする必要がある- WebサイトはAndroidの回転および加速度データに権限要求なしでアクセスできる
- この問題を除けば、その構成をボット検知システムがどう遮断できるのか明確ではないとしている
- 運用負荷は小さくない
- Android端末500台を購入しなければならない
- 主要都市で保管スペースを借りる必要があり費用がかかる
- 5都市で端末ファームの問題を修理する人が必要になる
- ハードウェアを扱う必要があり、継続的に問題が発生しうる
- このような構成は大きなプロジェクトになり、保守に数千ドルかかる可能性があるとしている
Androidエミュレーターという代替案
- 実機のAndroid端末の代わりにAndroidエミュレーターを使うほうが良いと見ている
- コストは下げられるが、アンチボット事業者がエミュレーション環境を見つけ出せる可能性がある
- 想定される検知方式はいくつもある
- ブラウザベースのred pillによって、ブラウザがエミュレーション環境で動作していることを露呈させられる可能性がある
- ブラウザベースのポートスキャンで、エミュレートされたAndroid端末でのみ動作するポートや
adbのようなサービスを見つけられる可能性がある - Googleがモバイル端末全体に広告IDを設定でき、このIDが存在しない、または常に同じであれば疑わしいシグナルになりうる
- Social Media Login DetectionでGmailやYouTubeアカウントへのログイン有無を確認でき、AndroidでGoogleアカウントにログインしていなければ疑われる対象になりうる
- そのほかにも、エミュレートされたAndroid端末の検知技術は多く存在しうる
- Androidエミュレーターは不完全である可能性が高く、その不完全さはモバイルブラウザの膨大なJavaScript APIを通じて露呈しうる
- それでもエミュレーションのアプローチを好んでおり、強力なサーバー数台に4Gドングルを接続する構成を提案している
- proxidize.comは4Gモバイルプロキシを提供しているが、プロキシ自体が検知可能であるため、Androidエミュレーターで4Gドングルを直接使いたいとしている
- 最終的な構成は地域別スクレイピングステーションの形になる
- 1つの地理的位置に、4Gドングル50本が接続された強力なスクレイピングサーバー1台を設置する
- 各サーバーで50〜100台のエミュレートされたAndroid端末を実行する
- こうしたステーションを5つの主要都市に配置する
- シンプルなコマンド・アンド・コントロールサーバーが5つのスクレイピングステーションをオーケストレーションする
1件のコメント
Hacker Newsの意見
そのデータも、法的に認識可能な意味で実際に「彼らの」データではない場合がほとんどだ。だからWebスクレイピングの倫理も、関連する法的論点も、それほど単純ではない。昨秋これについて書いた記事もここで関心を集めた: https://news.ycombinator.com/item?id=37264676
結局、自分たちが成長に使った手口を他人には使わせないということだ。
人間のコミュニケーションが始まって以来、会話は常にこういう方式だったのではないかと思う。一方で法的論点は、既存事業者を国家暴力の脅威で保護するために絞り出された布のように見え、特に新しくもなく、情けないが予測可能な類のものだ。さらに広く言えば、これを知的財産権の問題として包み、芸術家やクリエイターの保護に結びつけようとする試みも、論理的に非常にぎこちなく、眉をひそめてしまう。
WebスクレイピングSaaSや関連サービスは多く、住宅用プロキシの提供業者も数十社ある。ほとんどのボット対策メカニズムがあまりにも速く進化しているため、従来のソフトウェアエンジニアリング職の中でも、ボット対策の回避技術だけを専門にしてかなり良い収入を得ることができる。この変化の速さのため、Webスクレイピングを職業にするより、Webスクレイピング会社で働くほうが安定している。スクレイパーはプロジェクト単位で報酬を受け取るため長期的には不安定で、高度なスクレイピングには住宅用プロキシやサーバーレンタルのような運用投資が必要で、低価格の案件は報酬が非常に低い。BrightdataがWebスクレイピングのカンファレンスを開催していることを見るだけでも、大規模スクレイピングサービスの販売がどれほど収益性が高いか分かる。
こうした用途に、セキュリティの弱いIoT機器やマルウェアに感染した消費者向けハードウェアがよく使われているのか気になる。ISPと協力して住宅用IPを確保する方法は、収益性があるとも実現可能とも思えないので、住宅用プロキシサービスならかなり隠密な方法しかなさそうに見える。
この分野の背景はなかったが、企業が自慢している内容を照らし合わせれば難しくなかったし、スポーツベッティングを自動化するという実用的な目的もあった。実際の本業もそちらに近く、20代後半でプログラミングを素早く学ぶ助けになった。ところが、ほぼ即座に中国のスニーカーボット運営者たちや、英語が母語ではないような独特の英語を書く人たちから依頼が殺到した。法的な脅しのせいではなく、カスタマーサポートの仕事や他人の下で働くことをしたくなかったのでコードを下げたし、依頼の大半が「君が働けば収益は分けよう」という類いで、誰がそんな提案を受けるのか信じがたかった。インターネットは永遠なので、Cyberfed-Akamai 0.8〜2.3をまねていたコードの一部はまだ出回っている可能性がある。20代半ばでプログラミングを学び、3年以内に上げたコードが通用したのなら、そういう製品に高額を請求するサイバーセキュリティ企業は恥じるべきだと思う。高校2年以降は数学もやっておらず、ADHDのため動画も文章も長く見ていられないので、GitHubに似たサービスから写しながら動くまで学んだのがすべてだった。この業界ではおそらく蛇の油のようなソリューションが大量に売られているのだと思う。
脅威アクターがCloudflareのようなサービスを使って悪意あるペイロードへのアクセスを防いでいる。ブランドなりすましや認証情報フィッシングを見つけて検出しようとする顧客にとっては大きな問題だが、Cloudflareはまったく助けにならず、ただ気にしていない。
Akamaiの背後ではフィッシングをほとんど見ないのが面白い。私たちもこの分野で働いているので、今後もこうした脅威を検出できなければならないという利害関係がある。
現実世界の問題を解き、何かをする新しい方法を見つけなければならないので面白い。エクスプロイト開発も同じだ。こういう人たちは不適応者ではなく、自分が情熱を持てることをしている普通の人たちだ。「自分が嫌いな仕事をする人は不適応者だ」という考え方こそ、完全におかしい。
手順が明確で、プライバシーリスクや奇妙な小細工もなく、失敗しても人が少なくとも見て報告できる形で失敗する。原因不明の障害のように見えるよりはましだ。
拒否された場合をどう処理するか考えていたが、安価なAndroid端末1台が隙間を埋めてくれるかもしれない。