ハッキングAPI

―Web APIを攻撃から守るためのテスト技法

[cover photo]
TOPICS
Security , System/Network
発行年月日
PRINT LENGTH
432
ISBN
978-4-8144-0024-9
原書
Hacking APIs -Breaking Web Application Programming Interfaces
FORMAT
Print PDF EPUB
Ebook
4,400円
Ebookを購入する
Print
4,400円

Web APIは近年急速に利用が拡大しています。APIの呼び出しが全Webトラフィックの80%以上を占めるほど、Webサービスに欠かせない技術となっている一方で、Web APIに対するサイバー攻撃も急増しており、そのセキュリティ対策はあらゆる組織で重要な課題となっています。
本書の目的は、Web APIの基本をしっかり押さえ、脆弱性が存在しないかどうかテストする方法を示すことです。攻撃者(APIハッカー)の視点から、あらゆるAPI機能と特徴を活用するための知識を学ぶことで、これから起こり得る情報漏えいの危機を防ぐことができます。まず、WebアプリケーションやWeb API脆弱性の種類などの基礎知識を学んだのち、実際に検証用ラボを構築しながら、脆弱性の調査方法、ツール、さまざまな攻撃手法などを、実践的に解説していきます。Webアプリケーションで最も一般的なAPI形式であるREST APIのセキュリティテストに焦点を当てていますが、GraphQL APIへの攻撃もカバーしています。情報セキュリティに携わるエンジニアのみならず、Webアプリケーションのエンジニアリングチームにとっても有益な内容です。

目次

本書への推薦の言葉
序文
はじめに

第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 参考文献

訳者あとがき
技術監修者あとがき
索引