Web APIは近年急速に利用が拡大しています。APIの呼び出しが全Webトラフィックの80%以上を占めるほど、Webサービスに欠かせない技術となっている一方で、Web APIに対するサイバー攻撃も急増しており、そのセキュリティ対策はあらゆる組織で重要な課題となっています。
本書の目的は、Web APIの基本をしっかり押さえ、脆弱性が存在しないかどうかテストする方法を示すことです。攻撃者(APIハッカー)の視点から、あらゆるAPI機能と特徴を活用するための知識を学ぶことで、これから起こり得る情報漏えいの危機を防ぐことができます。まず、WebアプリケーションやWeb API脆弱性の種類などの基礎知識を学んだのち、実際に検証用ラボを構築しながら、脆弱性の調査方法、ツール、さまざまな攻撃手法などを、実践的に解説していきます。Webアプリケーションで最も一般的なAPI形式であるREST APIのセキュリティテストに焦点を当てていますが、GraphQL APIへの攻撃もカバーしています。情報セキュリティに携わるエンジニアのみならず、Webアプリケーションのエンジニアリングチームにとっても有益な内容です。
ハッキングAPI
―Web APIを攻撃から守るためのテスト技法
Corey Ball 著、石川 朝久 訳、北原 憲、洲崎 俊 技術監修
- TOPICS
- Security , System/Network
- 発行年月日
- 2023年03月
- PRINT LENGTH
- 432
- ISBN
- 978-4-8144-0024-9
- 原書
- Hacking APIs -Breaking Web Application Programming Interfaces
- FORMAT
- Print PDF EPUB
目次
本書への推薦の言葉 序文 はじめに 第1部 APIセキュリティの原理 0章 セキュリティテストへの準備 0.1 テスト許可の取得 0.2 APIテストへの脅威モデリング 0.3 テストすべきAPIの機能 0.3.1 API認証テスト 0.3.2 WAF(Web Application Firewalls) 0.3.3 モバイルアプリケーションテスト 0.3.4 APIドキュメントの監査 0.3.5 レート制限テスト 0.4 制限事項および例外事項 0.4.1 クラウドAPIへのセキュリティテスト 0.4.2 DoS攻撃テスト 0.5 報告書と再テスト 0.6 バグバウンティプログラムのスコープに関する注意点 0.7 まとめ 1章 Webアプリケーションの仕組み 1.1 Webアプリケーションの基本 1.1.1 URL 1.1.2 HTTPリクエスト 1.1.3 HTTPレスポンス 1.1.4 HTTPステータスコード 1.1.5 HTTPリクエストメソッド 1.1.6 ステートフルとステートレス 1.2 データベース 1.2 SQL 1.2 NoSQL 1.3 APIの位置づけ 1.4 まとめ 2章 Web APIの解剖学 2.1 Web APIの挙動 2.2 Web APIの標準形式 2.2.1 RESTful API 2.2.2 GraphQL 2.3 APIの仕様 2.4 APIデータ交換フォーマット 2.4.1 JSON 2.4.2 XML 2.4.3 YAML 2.5 API認証 2.5.1 BASIC認証 2.5.2 APIキー 2.5.3 JSON Web Tokens 2.5.4 HMAC 2.5.5 OAuth 2.0 2.5.6 認証なし(No Auth) 2.6 APIの活用:Twitter APIの分析 2.7 まとめ 3章 一般的なAPI脆弱性 3.1 情報漏えい 3.2 オブジェクトレベルの認可不備(BOLA) 3.3 ユーザ認証の不備 3.4 過剰なデータ露出 3.5 リソース不足とレート制限 3.6 機能レベルの認可不備(BFLA) 3.7 マスアサインメント 3.8 セキュリティ設定ミス 3.9 インジェクション 3.10 不適切な資産管理 3.11 ビジネスロジックの欠陥 3.12 まとめ 第2部 APIテストラボの構築 79 4章 APIハッキングラボの構築 4.1 Kali Linux 4.2 DevToolsによるWebアプリ分析 4.3 Burp Suiteによるリクエストの取得と変更 4.3.1 FoxyProxyのセットアップ 4.3.2 Burp Suiteの証明書の追加 4.3.3 Burp Suiteの使い方 4.3.4 トラフィックの取得(Intercepting) 4.3.5 Intruderを使ったリクエスト変更 4.4 APIブラウザPostmanによるAPIリクエストの作成 4.4.1 Request Builder 4.4.2 環境 4.4.3 コレクション 4.4.4 コレクションランナー 4.4.5 コードスニペット 4.4.6 テストパネル 4.5 PostmanとBurp Suiteの連携 4.6 補助ツール 4.6.1 OWASP Amassによる偵察の実施 4.6.2 KiterunnerによるAPIエンドポイントの発見 4.6.3 Niktoによる脆弱性スキャン 4.6.4 OWASP ZAPによる脆弱性のスキャン 4.6.5 Wfuzzを利用したファジング 4.6.6 ArjunによるHTTPパラメータの検出 4.7 まとめ 5章 脆弱なAPIラボ環境の準備 5.1 Linuxホストの作成 5.2 DockerとDocker Composeのインストール 5.3 脆弱性アプリケーションのインストール 5.3.1 crAPI(The completely ridiculous API) 5.3.2 OWASP DevSlop's Pixi 5.3.3 OWASP Juice Shop 5.3.4 DVGA(Damn Vulnerable GraphQL Application) 5.4 他の脆弱なアプリの追加 5.5 TryHackMeとHackTheBoxのAPIハッキング 5.6 まとめ 第3部 APIへの攻撃 139 6章 APIの検出 6.1 受動的偵察 6.1.1 受動的偵察プロセス 6.1.2 Google Hacking 6.1.3 ProgrammableWebのAPI検索ディレクトリ 6.1.4 Shodan 6.1.5 OWASP Amass 6.1.6 GitHubでの情報漏えい 6.2 能動的偵察 6.2.1 能動的偵察のプロセス 6.2.2 Nmapによる検出スキャン 6.2.3 robots.txtから隠されたパスの検出 6.2.4 Chrome DevToolsで機密情報の検出 6.2.5 Burp SuiteでのAPI検証 6.2.6 OWASP ZAPによるURIクローリング 6.2.7 Gobusterを利用したURIブルートフォースの実施 6.2.8 KiterunnerによるAPIコンテンツの発見 6.3 まとめ 7章 エンドポイント分析 7.1 リクエスト情報の調査 7.1.1 ドキュメントから情報調査 7.1.2 APIの仕様をインポート 7.1.3 APIのリバースエンジニアリング 7.2 APIの認証要件をPostmanに追加 7.3 機能分析 7.3.1 正常リクエストのテスト 7.3.2 管理者用操作の実行 7.3.3 APIレスポンスの分析 7.4 情報漏えいの検出 7.5 セキュリティの設定ミスの検出 7.5.1 詳細なエラー 7.5.2 不十分な通信経路上の暗号化 7.5.3 問題のある設定 7.6 過剰なデータ露出の発見 7.7 ビジネスロジックの欠陥の検出 7.8 まとめ 8章 認証への攻撃 8.1 古典的な認証攻撃 8.1.1 パスワードへのブルートフォース攻撃 8.1.2 パスワード初期化と多要素認証に対するブルートフォース攻撃 8.1.3 パスワードスプレー攻撃 8.1.4 ブルートフォース攻撃におけるbase64認証の取り込み 8.2 トークンの偽造 8.2.1 手動分析 8.2.2 ライブトークンキャプチャ分析 8.2.3 推測可能なトークンへのブルートフォース攻撃 8.3 JWTの悪用 8.3.1 JWTの把握と分析 8.3.2 NONE攻撃 8.3.3 アルゴリズム変更攻撃(Algorithm Switch Attack) 8.3.4 JWTクラック攻撃 8.4 まとめ 9章 ファジング 9.1 効果的なファジング 9.1.1 適切なファジングペイロードの選択 9.1.2 異常検知(アノマリー検知) 9.2 ワイドファジングとディープファジング 9.2.1 Postmanによるワイドファジング 9.2.2 Burp Suiteによるディープファジング 9.2.3 Wfuzzによるディープファジング 9.2.4 不適切な資産管理に対するワイドファジング 9.3 Wfuzzによるリクエストメソッドのテスト 9.4 入力値検証を回避するディープファジング 9.5 ディレクトリトラバーサルへのファジング 9.6 まとめ 10章 認可への攻撃 10.1 BOLAの検出 10.1.1 リソースIDの特定 10.1.2 BOLAのA-Bテスト 10.1.3 サイドチャネル攻撃を活用したBOLA 10.2 BFLAの検出 10.2.1 BFLAのためのA-B-Aテスト 10.2.2 PostmanによるBFLAのテスト 10.3 認可テストのヒント 10.3.1 Postmanのコレクション変数 10.3.2 Burp SuiteのMatch and Replace 10.4 まとめ 11章 マスアサインメント 11.1 マスアサインメントの対象の発見 11.1.1 アカウント登録 11.1.2 組織への不正アクセス 11.2 マスアサインメント変数の発見 11.2.1 ドキュメントから変数調査 11.2.2 未知の変数に対するファジング 11.2.3 ブラインド・マスアサインメント攻撃 11.3 ArjunとBurp Suite Intruderによるマスアサインメント攻撃の自動化 11.4 BFLAとマスアサインメントの組み合わせ 11.5 まとめ 12章 インジェクション攻撃 12.1 インジェクション脆弱性の検出 12.2 クロスサイトスクリプティング(XSS) 12.3 クロスAPIスクリプティング(XAS) 12.4 SQLインジェクション 12.4.1 メタ文字の手動送信 12.4.2 SQLmap 12.5 NoSQLインジェクション 12.6 OSコマンドインジェクション 12.7 まとめ 第4部 実世界におけるAPI攻撃 13章 バイパス技術の応用とレート制限テスト 13.1 APIセキュリティ制御の回避 13.1.1 セキュリティ制御の仕組み 13.1.2 APIセキュリティ制御の検出 13.1.3 使い捨てアカウントの利用 13.1.4 バイパス技術 13.1.5 Burp Suiteによるバイパスの自動化 13.1.6 Wfuzzによるバイパス自動化 13.2 レート制限のテスト 13.2.1 緩いレート制限に関する注意点 13.2.2 パスの回避 13.2.3 オリジンヘッダの詐称 13.2.4 Burp SuiteにおけるIPアドレスのローテーション 13.3 まとめ 14章 GraphQLへの攻撃 14.1 GraphQLリクエストとIDE 14.2 能動的偵察 14.2.1 スキャン 14.2.2 ブラウザ上でのDVGA の表示 14.2.3 DevToolsの利用 14.3 GraphQL APIのリバースエンジニアリング 14.3.1 GraphQLエンドポイントのディレクトリに対するブルートフォース 14.3.2 GraphiQL IDEを有効にするためのCookieの改ざん 14.3.3 GraphQLリクエストのリバースエンジニアリング 14.3.4 イントロスペクションを用いたGraphQLコレクションのリバースエンジニアリング 14.4 GraphQL APIの解析 14.4.1 GraphiQL Documentation Explorerを使ったリクエスト作成 14.4.2 InQL Burp Extensionの利用 14.5 コマンドインジェクションのファジング 14.6 まとめ 15章 データ侵害とバグバウンティ 15.1 データ侵害 15.1 Peloton 15.1.2 USPS Informed Visibility API 15.1.3 T-MobileのAPI流出 15.2 バグバウンティ 15.2.1 優れたAPIキーの代償 15.2.2 プライベートAPIの認可問題 15.2.3 スターバックス:なかったことにされた情報漏えい 15.2.4 InstagramにおけるGraphQL BOLA 15.3 まとめ 最後に 付録A APIハッキングチェックリスト 付録B 参考文献 訳者あとがき 技術監修者あとがき 索引