はじめに
APIセキュリティは現代のソフトウェア開発において非常に重要な要素です。マイクロサービスやクラウドネイティブの普及により、APIは企業システムの中核を担うようになりました。しかし、OWASP API Security Top 10の報告によると、API脆弱性の75%は認証不備、過剰なデータ公開、ビジネスロジックの欠陥が原因とされています。
設定ミスや認証の不備など、ちょっとした見落としが重大な脆弱性につながることがあります。特に開発の納期に追われる中では、セキュリティ対策が後回しになりがちです。
この記事では、API侵入テストの18の重要な技術とツールを紹介します。これらの知識を活用することで、より安全なAPIの開発・運用が可能になるでしょう。
1. 認証・認可の脆弱性を狙え!
1-1. JWT(JSON Web Token)の解読術
「JWTは安全」と思っていませんか?それ、大間違いかも!
私が先月テストしたあるサービスでは、HS256アルゴリズムに短すぎる鍵を使用していて、10分でトークンを偽造できてしまいました。
-
攻撃テクニック:
- 弱い暗号化アルゴリズム(HS256で短い鍵など)をチェック
- 有効期限の検証が抜けていないか確認
-
おすすめツール:
-
jwt_tool:キーの総当たり攻撃、トークン偽造(使用例:
jwt_tool <JWT> -C -d wordlist.txt
) - Burp Suite JWT Editor:リアルタイムでJWTの内容を変更してリクエスト再送
-
jwt_tool:キーの総当たり攻撃、トークン偽造(使用例:
-
防御策:RS256/ES256アルゴリズムの強制使用、適切な
exp
/nbf
タイムスタンプ設定
1-2. OAuth 2.0認可コード奪取の罠
OAuth 2.0の実装ミスは意外と多いんです。特にredirect_uri
パラメータの検証が甘いと、認可コードを盗まれてアカウント乗っ取りの危険が!
-
攻撃パターン:
-
authorization_code
の窃取 -
redirect_uri
パラメータを悪用したCSRF攻撃
-
-
テスト方法:
-
redirect_uri
を攻撃者のドメインに変更し、コードが付いたままリダイレクトされるか確認 - Postmanを使ってOAuthフローをシミュレーション、
state
パラメータの欠落や予測可能性をチェック
-
-
便利ツール:
OAuth Tester
(Burpプラグイン)で設定ミスを自動検出
効率化ポイント: 複数ユーザーロールのテストには、Apidogの認証設定機能が有効です。ユーザー権限を素早く切り替えて様々なシナリオでの認可問題を検証できるため、テスト効率が向上します。
1-3. API鍵の漏洩を探せ
API鍵が漏れると、システムへの不正アクセスが可能になるため、セキュリティ上の大きなリスクとなります。特にフロントエンドのJSコードに平文で記述されているケースは注意が必要です。
-
チェックポイント:
- クライアントコード
- Gitの履歴
- ログファイル
- 公開ドキュメント
-
便利ツール:
- TruffleHog:Gitリポジトリ内の機密情報をスキャン
- Gitleaks:コードコミットでの鍵漏洩をリアルタイム監視
-
注意点:フロントエンドJSにAPI鍵をハードコーディングすると、情報漏洩のリスクが高まります。開発時には十分注意しましょう。
1-4. 水平特権昇格(IDOR)を狙う
IDOR(Insecure Direct Object Reference)は単純ながら効果的な脆弱性です。リクエスト内のIDを変更するだけで他ユーザーのデータにアクセスできる可能性があります。
- テクニック:リクエスト内のユーザーID、注文番号などのパラメータを変更してリソースアクセス制御をテスト
-
ツール:
Autorize
(Burpプラグイン)で特権昇格の脆弱性を自動検出 -
ペイロード例:
GET /api/user/123/profile
をGET /api/user/456/profile
に変更
2. 入力検証の突破口を見つけろ!
2-1. SQL注入の裏技
RESTful APIやGraphQLでもSQLインジェクションは健在です。特にパスパラメータやGraphQLクエリは見落とされがち。
- API特性:RESTfulパスパラメータ、GraphQLクエリが注入ポイントになりやすい
-
テスト方法:
- 異常パラメータ送信:
/api/users?id=1'%20OR%201=1--
- GraphQLクエリ:
{user(id:"1' UNION SELECT null,version()--"){name}}
- 異常パラメータ送信:
-
ツール:SQLmap(
--level=5
で複雑な注入ポイントも検出)
2-2. NoSQLインジェクション対策
MongoDBやRedisなどNoSQLデータベースを使うAPIも増えていますが、JSON形式のパラメータ操作で認証をバイパスできることも!
- 脆弱性シナリオ:MongoDB、RedisなどJSON形式でパラメータを渡す場合
-
ペイロード例:
{"username": {"$ne": ""}, "password": {"$exists": true}}
-
ツール:
NoSQLi
(Burpプラグイン)で攻撃ベクトルを自動生成
2-3. XXE脆弱性の活用
XMLを受け付けるAPIで外部エンティティ解析が無効化されていないと、サーバーファイルの読み取りが可能になることも!
- トリガー条件:APIがXML形式の入力を受け付け、外部エンティティ解析を無効化していない
-
攻撃ペイロード:
<?xml version="1.0"?> <!DOCTYPE data [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <user><name>&xxe;</name></user>
- ツール:XXEinjector でファイル読み取り、SSRFなどのシナリオを自動テスト
2-4. SSRF(サーバーサイドリクエストフォージェリ)
内部ネットワークへのアクセスを許してしまう脆弱性です。特にクラウド環境ではメタデータサービスへのアクセスが危険!
- チェックポイント:URLパラメータ、Webhookコールバックアドレス、ファイルインポート機能
-
テクニック:
- 内部ネットワークサービスへのアクセス試行:
http://169.254.169.254/latest/meta-data/
- DNS再バインディング技術で制限を回避
- 内部ネットワークサービスへのアクセス試行:
- ツール:SSRFmapで内部資産を自動列挙
効率化ポイント: パラメータの異常値テストでは、Apidogのテストデータ生成機能を活用することで、境界値や不正入力を効率的に構築できます。Burp/ZAPと組み合わせることで、テスト効率が向上します。
3. ビジネスロジックの穴を突け!
3-1. 一括割り当て脆弱性(Mass Assignment)
APIが送信されたすべてのパラメータを無条件に受け入れると、本来変更できないはずのフィールドも更新できてしまうことがあります。
-
原理:APIがクライアントから送信された機密フィールド(
isAdmin=true
など)をフィルタリングしていない -
テスト手順:
- 通常リクエストを傍受し、追加パラメータ(
role=admin
など)を追加 - リクエストを再送して応答が有効かチェック
- 通常リクエストを傍受し、追加パラメータ(
-
ツール:Burp Suiteの
Match and Replace
機能でパラメータを自動追加
3-2. レート制限の回避術
APIの呼び出し回数制限は、ちょっとした工夫で回避できることが多いんです。
-
回避方法:
-
X-Forwarded-For
ヘッダーを変更してIPを偽装 - 異なるAPI鍵やJWTトークンでリクエストをローテーション
-
-
ツール:Wfuzzで並行テスト(
-t 100 -p 3
でスレッドと遅延を設定)
3-3. CORS設定ミスを突く
CORSの設定ミスは意外と多く、クロスドメインからのデータ窃取を許してしまうことも。
-
検出:
Access-Control-Allow-Origin
に*
や制御可能なドメインが含まれているか確認 - 悪用:悪意のあるページからクロスドメインリクエストを発行し、ユーザーデータを窃取
-
ツール:
CORS Scanner
(Chromeプラグイン)でリスク設定を素早く識別
チーム開発のヒント: 複数人での協業や複雑なビジネスシナリオでは、ApidogのAPI Schemaバリデーションがフィールド漏れや設定の不一致によるロジック脆弱性を減らせます。これは本当に便利ですよ!
4. 自動化と高度なテストツール
4-1. Apidogで自動テスト効率化
APIレスポンスのステータスやデータ整合性を検証するテストスクリプトを書くことで、継続的なセキュリティチェックが可能に。
- シナリオ:テストスクリプトを作成してAPIレスポンスのステータス、データ整合性を検証
-
サンプルスクリプト:
pm.test("ステータスコードは200", () => pm.response.to.have.status(200)); pm.test("レスポンス時間 < 500ms", () => pm.expect(pm.response.responseTime).to.be.below(500));
- 特徴:単一テストツールと違い、Apidogは設計、Mock、ドキュメント、テストを統合し、チーム協業とCI/CDパイプラインをサポート。侵入テストの継続的統合に最適です!
4-2. OWASP ZAPの活用法
無料で高機能なセキュリティスキャナーとして、APIテストにも大活躍します。
- 機能:アクティブ/パッシブスキャン、認証クローラー、API Swaggerインポート
- テクニック:OpenAPIドキュメントをインポートしてテストケースを生成、カバレッジ向上
4-3. APIFuzzerで異常値テスト
APIに特化したファジングツールで、予期しない入力に対する挙動をテストできます。
- 位置づけ:API専用ファジングツール、GraphQL、gRPCもサポート
- 戦略:文法変異ベースのパラメータ改ざん(境界値、異常データ型など)
4-4. Nucleiテンプレートエンジン
セキュリティテストの自動化に最適なツールで、コミュニティのテンプレートが豊富です。
- メリット:コミュニティテンプレートライブラリがAPI脆弱性(CVE-2023-1234など)をカバー
-
コマンド:
nuclei -t api/ -u https://target.com/api/v1
効率化のポイント: 複数ツールの切り替えは時間のロスになることがあります。Apidogは設計からテストまで一貫して行え、AI自動テストケース生成、CI/CD統合、Mock環境管理もサポートしているので、侵入テスト中のコンテキスト切り替えが減らせる可能性があります。効率アップにつながるでしょう。
5. クラウドネイティブ・マイクロサービスAPI対策
5-1. Kubernetes API監査
コンテナ環境では、KubernetesのAPIエンドポイントが新たな攻撃面になっています。
-
リスクポイント:認証なしの
/api/v1/pods
、/apis/extensions/v1beta1
- ツール:kube-hunterでクラスター設定の欠陥をスキャン
5-2. サーバーレス関数インジェクション
AWS Lambdaなどのサーバーレス環境も侵入テストの対象です。
- 事例:AWS Lambda関数が入力を検証せず、コマンド実行を許可
-
テスト:イベントパラメータに
; whoami
などのシステムコマンドを注入
5-3. GraphQL侵入テスト
GraphQLは柔軟な反面、適切に保護されていないと情報漏洩のリスクが高まります。
-
ツール:
-
GraphQLmap:自動インジェクション(
./graphqlmap.py -u http://api.com/graphql -i
) -
InQL Scanner
(Burpプラグイン)でSchemaを視覚的に分析
-
GraphQLmap:自動インジェクション(
-
テクニック:
__typename
を利用してイントロスペクションクエリが開放されているか探る
マルチ環境テストのポイント: 複数環境や多数のマイクロサービスがある場合、Apidogの環境切り替えとグループテスト機能を使えば、より実際のビジネスフローに近い侵入テストが可能になります。効率的なテスト実施に役立つでしょう。
6. 防御強化とベストプラクティス
技術的防御策:
- 厳格なCORSポリシーを有効化し、
Access-Control-Allow-Origin: *
を禁止 - すべてのAPIリクエストにレート制限を実施(トークンバケットアルゴリズムなど)
- OpenAPI仕様で入出力モデルを明確に定義
管理対策:
- API資産インベントリを構築し、脆弱性スキャンルールを定期的に更新
- サードパーティAPIの依存関係にサプライチェーンセキュリティ評価を実施
- 脅威モデリング(STRIDE)を実施し、高リスクインターフェースを特定
監視と対応:
- APIゲートウェイログ分析(ELK + Wazuhなど)を導入
- 異常行動アラート(単一IPからの高頻度呼び出し、非通常パラメータの出現など)を設定
実践アドバイス: CI/CDプロセスに自動回帰テストを導入すれば、セキュリティテストを開発ライフサイクル全体に組み込み、閉ループ防御を形成できます。多くの開発チームでは、この方法によりリリース後の脆弱性発見が大幅に減少したという報告があります。
まとめ
API侵入テストには、ツールの活用とビジネスロジックの分析を組み合わせたアプローチが必要です。効果的な戦略として、次の「3ステップ」が挙げられます:
- 資産整理: Swagger/OpenAPIドキュメントをベースにテスト境界を確立
- 自動スキャン: ZAP、Nucleiなどで一般的な脆弱性をカバーし、Apidogの自動テスト機能でカバレッジを向上
- 手動検証: ビジネスフローに特化したテストケースで深層ロジック脆弱性を検出
オープンソースツールとApidogのような統合プラットフォームを組み合わせることで、セキュリティテストの効率と品質を向上させることができます。
これらのテクニックを実際のプロジェクトに取り入れることで、APIセキュリティの強化が可能になります。