セキュリティの脆弱性を発見し、アプリケーションの所有者に報告するエシカルハッキング(倫理的ハッキング)の事例から、ソフトウェアのバグを見つける方法と手順を解説します。
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 ブログ
索引