セキュリティの脆弱性を発見し、アプリケーションの所有者に報告するエシカルハッキング(倫理的ハッキング)の事例から、ソフトウェアのバグを見つける方法と手順を解説します。
Twitter、Facebook、Google、Uber などのアプリケーションで発生した報奨金がかかった脆弱性の実例を紹介し、攻撃者がどのようにユーザーを騙し機密情報を抜き取るか、レース条件を利用する方法、サイトがユーザーに自らの脆弱性を公開してしまう過程などを解説します。
基本的なウェブハッキングの概要、攻撃者がウェブサイトを侵害する仕組み、脆弱性に共通する要素の見分け方を解説し、さらにクロスサイトスクリプティング、安全でないダイレクトオブジェクト参照、サーバーサイドリクエストフォージェリなど様々なバグについて説明します。
ウェブセキュリティの脆弱性について、報告された実例から学ぶ本書は、バグハンターはもちろん、セキュアなアプリケーションを開発運用したいエンジニア必携の一冊です。
リアルワールドバグハンティング
―ハッキング事例から学ぶウェブの脆弱性
Peter Yaworski 著、玉川 竜司 訳
- TOPICS
- Security
- 発行年月日
- 2020年09月
- PRINT LENGTH
- 280
- ISBN
- 978-4-87311-921-2
- 原書
- Real-World Bug Hunting
- FORMAT
- Print PDF EPUB
目次
序文 はじめに 1章 バグバウンティの基本 1.1 脆弱性とバグバウンティ 1.2 クライアントとサーバー 1.3 Webサイトにアクセスしたときに起こること 1.3.1 ステップ1:ドメイン名の展開 1.3.2 ステップ2:IPアドレスの解決 1.3.3 ステップ3:TCP接続の確立 1.3.4 ステップ4:HTTPリクエストの送信 1.3.5 ステップ5:サーバーのレスポンス 1.3.6 ステップ6:レスポンスの描画 1.4 HTTPリクエスト 1.4.1 リクエストメソッド 1.4.2 HTTPはステートレスである 1.5 まとめ 2章 オープンリダイレクト 2.1 オープリダイレクトの動作 2.2 Shopifyテーマインストールのオープンリダイレクト 2.2.1 教訓 2.3 Shopifyログインオープンリダイレクト 2.3.1 教訓 2.4 HackerOneインタースティシャルリダイレクト 2.4.1 教訓 2.5 まとめ 3章 HTTPパラメーターの汚染 3.1 サーバーサイドHPP 3.2 クライアントサイドHPP 3.3 HackerOneソーシャル共有ボタン 3.3.1 教訓 3.4 Twitterのサブスクライブ解除通知 3.4.1 教訓 3.5 TwitterのWebインテント 3.5.1 教訓 3.6 まとめ 4章 クロスサイトリクエストフォージェリ 4.1 認証 4.2 GETリクエストでのCSRF 4.3 POSTリクエストでのCSRF 4.4 CSRF攻撃に対する防御 4.5 Shopify Twitterの切断 4.5.1 教訓 4.6 ユーザーのInstacartゾーンの変更 4.6.1 教訓 4.7 Badooの完全なアカウントの乗っ取り 4.7.1 教訓 4.8 まとめ 5章 HTMLインジェクションとコンテンツスプーフィング 5.1 キャラクターエンコーディングを通じたCoinbaseコメントインジェクション 5.1.1 教訓 5.2 HackerOneの意図せぬHTML取り込み 5.2.1 教訓 5.3 HackerOneの意図せぬHTML取り込みでの修正のバイパス 5.3.1 教訓 5.4 Within Securityコンテンツスプーフィング 5.4.1 教訓 5.5 まとめ 6章 キャリッジリターンラインフィードインジェクション 6.1 HTTPリクエストスマグリング 6.2 v.shopify.comのレスポンス分割 6.2.1 教訓 6.3 TwitterのHTTPレスポンス分割 6.3.1 教訓 6.4 まとめ 7章 クロスサイトスクリプティング 7.1 XSSの種類 7.2 Shopifyの卸売り 7.2.1 教訓 7.3 Shopifyの通貨のフォーマッティング 7.3.1 教訓 7.4 Yahoo! Mailのstored XSS 7.4.1 教訓 7.5 Googleの画像検索 7.5.1 教訓 7.6 Google Tag Managerのstored XSS 7.6.1 教訓 7.7 United AirlineのXSS 7.7.1 教訓 7.8 まとめ 8章 テンプレートインジェクション 8.1 サーバーサイドテンプレートインジェクション 8.2 クライアントサイドテンプレートインジェクション 8.3 UberにおけるAngularJSテンプレートインジェクション 8.3.1 教訓 8.4 UberのFlask Jinja2テンプレートインジェクション 8.4.1 教訓 8.5 Railsの動的な描画 8.5.1 教訓 8.6 UnikrnのSmartyテンプレートインジェクション 8.6.1 教訓 8.7 まとめ 9章 SQLインジェクション 9.1 SQLデータベース 9.2 SQLiへの対策 9.3 Yahoo! SportsのブラインドSQLi 9.3.1 教訓 9.4 UberのブラインドSQLi 9.4.1 教訓 9.5 DrupalのSQLi 9.5.1 教訓 9.6 まとめ 10章 サーバーサイドリクエストフォージェリ 10.1 サーバーサイドリクエストフォージェリのインパクトのデモンストレーション 10.2 GETリクエストの発行とPOSTリクエストの発行 10.3 ブラインドSSRFの実行 10.4 SSRFレスポンスでのユーザーへの攻撃 10.5 ESEA SSRFとAWSメタデータへのクエリ 10.5.1 教訓 10.6 Google内部のDNSのSSRF 10.6.1 教訓 10.7 webhooksを使った内部ポートのスキャン 10.7.1 教訓 10.8 まとめ 11章 XML外部エンティティ 11.1 eXtensible Markup Language 11.1.1 文書型定義 11.1.2 XMLエンティティ 11.2 XXE攻撃の動作 11.3 Googleへの読み取りアクセス 11.3.1 教訓 11.4 Microsoft WordでのFacebookのXXE 11.4.1 教訓 11.5 WikilocのXXE 11.5.1 教訓 11.6 まとめ 12章 リモートコード実行 12.1 シェルコマンドの実行 12.2 関数の実行 12.3 リモートコード実行のエスカレーション戦略 12.4 PolyvoreのImageMagick 12.4.1 教訓 12.5 facebooksearch.algolia.com上のAlgolia RCE 12.5.1 教訓 12.6 SSH経由のRCE 12.6.1 教訓 12.7 まとめ 13章 メモリの脆弱性 13.1 バッファオーバーフロー 13.2 境界外読み取り 13.3 PHPのftp_genlist()の整数オーバーフロー 13.3.1 教訓 13.4 PythonのHotshotモジュール 13.4.1 教訓 13.5 libcurlの境界外読み取り 13.5.1 教訓 13.6 まとめ 14章 サブドメインの乗っ取り 14.1 ドメイン名を理解する 14.2 サブドメインの乗っ取りはどのように行われるか 14.3 Ubiquitiのサブドメインの乗っ取り 14.3.1 教訓 14.4 Zendeskを指しているScan.me 14.4.1 教訓 14.5 Shopify Windsorのサブドメイン乗っ取り 14.5.1 教訓 14.6 Snapchat Fastlyの乗っ取り 14.6.1 教訓 14.7 Legal Robotの乗っ取り 14.7.1 教訓 14.8 UberのSendGridメールの乗っ取り 14.8.1 教訓 14.9 まとめ 15章 レース条件 15.1 HackerOneの招待の複数回の受諾 15.1.1 教訓 15.2 Keybaseの招待制限の超過 15.2.1 教訓 15.3 HackerOneの支払いのレース条件 15.3.1 教訓 15.4 Shopifyパートナーのレース条件 15.4.1 教訓 15.5 まとめ 16章 安全ではないダイレクトオブジェクト参照 16.1 単純なIDORの発見 16.2 より複雑なIDORの発見 16.3 Binary.comの権限昇格 16.3.1 教訓 16.4 Moneybirdのアプリケーション作成 16.4.1 教訓 16.5 TwitterのMopub APIトークンの盗難 16.5.1 教訓 16.6 ACMEの顧客情報の暴露 16.6.1 教訓 16.7 まとめ 17章 OAuthの脆弱性 17.1 OAuthのワークフロー 17.2 SlackのOAuthトークンの盗難 17.2.1 教訓 17.3 デフォルトパスワード付きでの認証の受け渡し 17.3.1 教訓 17.4 Microsoftのログイントークンの盗難 17.4.1 教訓 17.5 Facebookの公式アクセストークンの盗難 17.5.1 教訓 17.6 まとめ 18章 アプリケーションロジックと設定の脆弱性 18.1 Shopifyの管理者権限のバイパス 18.1.1 教訓 18.2 Twitterのアカウント保護のバイパス 18.2.1 教訓 18.3 HackerOneのSignal操作 18.3.1 教訓 18.4 HackerOneの正しくないS3バケットの権限 18.4.1 教訓 18.5 GitLabの2要素認証のバイパス 18.5.1 教訓 18.6 Yahoo!のPHP Infoの公開 18.6.1 教訓 18.7 HackerOneのHacktibity投票 18.7.1 教訓 18.8 PornHubのmemcache環境へのアクセス 18.8.1 教訓 18.9 まとめ 19章 独自のバグバウンティの発見 19.1 探索 19.1.1 サブドメインの列挙 19.1.2 ポートスキャン 19.1.3 スクリーンショットの取得 19.1.4 コンテンツの発見 19.1.5 過去のバグ 19.2 アプリケーションのテスト 19.2.1 技術スタック 19.2.2 機能のマッピング 19.2.3 脆弱性の発見 19.3 さらに進む 19.3.1 作業を自動化する 19.3.2 モバイルアプリケーションを見てみる 19.3.3 新しい機能の特定 19.3.4 JavaScriptファイルの追跡 19.3.5 新機能へのアクセスに支払う 19.3.6 技術を学ぶ 19.4 まとめ 20章 脆弱性レポート 20.1 ポリシーを読もう 20.2 詳細を含める。そしてさらに含める 20.3 脆弱性の再確認 20.4 あなたの評価 20.5 企業への尊敬を示す 20.6 バウンティの報酬のアピール 20.7 まとめ 付録A ツール A.1 Webプロキシー A.2 サブドメインの列挙 A.3 発見 A.4 スクリーンショット A.5 ポートスキャン A.6 探索 A.7 ハッキングツール A.8 モバイル A.9 ブラウザープラグイン 付録B リソース B.1 オンライントレーニング B.2 バグバウンティプラットフォーム B.3 文献 B.4 ビデオリソース B.5 ブログ 索引