(Translated by https://www.hiragana.jp/)
[書評] ハッキングAPI ―Web APIを攻撃から守るためのテスト技法 | 徳丸浩の日記

2023ねん3がつ27にち月曜日げつようび

[書評しょひょう] ハッキングAPI ―Web APIを攻撃こうげきからまもるためのテスト技法ぎほう

サマリ

ハッキングAPI―Web APIを攻撃こうげきからまもるためのテスト技法ぎほう(2023ねん3がつ27にち発売はつばいんだ。本書ほんしょは、Web APIにたいするセキュリティテストの全体ぜんたいぞう具体ぐたいてきなテスト方法ほうほう記載きさいしている。ペンテスターは、APIの検出けんしゅつ、APIエンドポイントの分析ぶんせき攻撃こうげき(テスト)をおこな必要ひつようがあり、そのために必要ひつよう情報じょうほうがすべて記載きさいされている。また、実習じっしゅうのためのツールと「やられサイト」を複数ふくすう紹介しょうかいし、具体ぐたいてきなトレーニング方法ほうほう解説かいせつしている。たんにツールやサイトの使つかかた説明せつめいにとどまらず、本格ほんかくてきなペネトレーションテストのかんがかた説明せつめいしている。
本書ほんしょ想定そうてい読者どくしゃはAPIのペネトレーションテストを実施じっしするペンテスターおよびペンテスターを目指めざひとであるが、API開発かいはつしゃやウェブアプリケーション脆弱ぜいじゃくせい診断しんだんいんにとっても有益ゆうえき内容ないようおおふくむ。

重要じゅうよう事項じこう説明せつめい

  • 本書ほんしょ監修かんしゅうしゃ一人ひとり洲崎すざきしゅん)と評者ひょうしゃ知人ちじん関係かんけいにある
  • 評者ひょうしゃんだ書籍しょせきはご恵贈けいぞういただいたものである
  • この記事きじのリンクにはアフィリエイトがふくまれる

APIセキュリティテストとはなに

まずは、本書ほんしょ主題しゅだいである「APIセキュリティテスト」を本書ほんしょでどのように定義ていぎしているかを紹介しょうかいしよう。以下いかは、本書ほんしょp3からの引用いんようである。

APIセキュリティテストは、一般いっぱんてきなペネトレーションテストともWebアプリケーション診断しんだんともことなります。APIが攻撃こうげき対象たいしょう領域りょういき(Attack Surface)の幅広はばひろさと複雑ふくざつさのため、おおくのペンテスターはAPIセキュリティテストを独自どくじサービスとして位置いちづけています。

通常つうじょうのWebアプリケーション脆弱ぜいじゃくせい診断しんだんでもAPIのテストは当然とうぜんふくまれるが、APIはウェブアプリケーションからだけ利用りようされるものではなく、IoT機器ききなどからもされる。この場合ばあい、IoTシステムとしてセキュリティテストあるいはAPI単体たんたいでのセキュリティテストがおこなわれる。本書ほんしょ説明せつめいされるAPIセキュリティテストは、脆弱ぜいじゃくせい診断しんだんというよりはペネトレーションテストである。

APIのペネトレーションテストを業務ぎょうむ経験けいけんできるエンジニアはかぎられているとおもうが、たとえばバグバウンティプログラムに参加さんかして、公開こうかいAPIをテストするような機会きかいは、意欲いよく技量ぎりょうさえあればだれにでもあたえらるし、本書ほんしょはバグバウンティプログラムに参加さんかするバグハンターけの注意ちゅうい心構こころがまえについても度々たびたび言及げんきゅうしている。

本書ほんしょ構成こうせい

ここで、本書ほんしょ構成こうせいについて紹介しょうかいしよう。本書ほんしょは4つの、16のしょう構成こうせいされる。ここからもかるように、本書ほんしょ非常ひじょう広範囲こうはんいのトピックについてあつかっている。

だい1 API セキュリティの原理げんり

だい1 API セキュリティの原理げんり」では、後述こうじゅつしょうてからもわかるように。Web APIの基礎きそ知識ちしきと、0しょうとしてAPIテストのスコープ(範囲はんい)、顧客こきゃくからテスト許可きょか取得しゅとくすることの必要ひつようせいなどを説明せつめいしている。2しょう Web APIの解剖かいぼうがくでは、RESTful APIにくわえてGraphQLについても簡単かんたん説明せつめいをしている。JSON/XML/YAMLとうのデータ形式けいしき、APIの認証にんしょう方式ほうしき(BASIC認証にんしょう、APIキー、JWT、HMAC、OAuth2.0…)について説明せつめいする。REST APIおよびGraphQLを前提ぜんていとすることから、Cookieによるセッション管理かんり本書ほんしょではあつかわれておらず、そのためかCSRF脆弱ぜいじゃくせいやCookieのSameSite属性ぞくせいかんする説明せつめい割愛かつあいされている。

  • 0しょう セキュリティテストへの準備じゅんび
  • 1しょう Webアプリケーションの仕組しく
  • 2しょう Web APIの解剖かいぼうがく
  • 3しょう 一般いっぱんてきなAPI脆弱ぜいじゃくせい

3しょうの「一般いっぱんてきなAPI脆弱ぜいじゃくせい」としては以下いか紹介しょうかいされている。おおむOWASP API Security Top 10 2019かさなっているが、3.1 情報じょうほうろうえいと3.11 ビジネスロジックの欠陥けっかん独自どくじ追加ついかしたものである。

  • 3.1 情報じょうほうろうえい
  • 3.2 オブジェクトレベルの認可にんか不備ふび (BOLA)
  • 3.3 ユーザ認証にんしょう不備ふび
  • 3.4 過剰かじょうなデータ露出ろしゅつ
  • 3.5 リソース不足ふそくとレート制限せいげん
  • 3.6 機能きのうレベルの認可にんか不備ふび (BFLA)
  • 3.7 マスアサインメント
  • 3.8 セキュリティ設定せっていミス
  • 3.9 インジェクション
  • 3.10 不適切ふてきせつ資産しさん管理かんり
  • 3.11 ビジネスロジックの欠陥けっかん

だい2 APIテストラボの構築こうちく

  • 4しょう API ハッキングラボの構築こうちく
  • 5しょう 脆弱ぜいじゃくなAPIラボ環境かんきょう準備じゅんび

だい2はAPIテストのための実習じっしゅう環境かんきょうとして、診断しんだんツールと脆弱ぜいじゃくなAPI環境かんきょう準備じゅんびする。診断しんだんツールとしては、Burp Suite、Postman、Wfuzzがだい活躍かつやくすることになるが、これら以外いがいにOWASP Amass、KiterunnerなどAPIを発見はっけんするためのツールも紹介しょうかいされており興味深きょうみぶかい。脆弱ぜいじゃくなAPI環境かんきょうとしてはcrAPIなどすうしゅ紹介しょうかいしている。また、訳注やくちゅうかたち拙作せっさくBad Todo紹介しょうかいいただいていた(APIではなく古典こてんてきなWebアプリケーションとして)。

だい3 APIへの攻撃こうげき

だい3は、いよいよAPIの実際じっさいのテスト(攻撃こうげき)を説明せつめいする。だい3しょうては以下いかとおりである。

  • 6しょう APIの検出けんしゅつ
  • 7しょう エンドポイント分析ぶんせき
  • 8しょう 認証にんしょうへの攻撃こうげき
  • 9しょう ファジング
  • 10しょう 認可にんかへの攻撃こうげき
  • 11しょう マスアサインメント
  • 12しょう インジェクション攻撃こうげき

まず6しょうと7しょうでAPIの検出けんしゅつ分析ぶんせきおこなうが、この2しょう十分じゅうぶん紙面しめん使つかってくわしく説明せつめいされている。このあたりが、よくある「ハッカー入門にゅうもんてき書籍しょせきとはことなり、本書ほんしょ実務じつむてき内容ないようになっていることのあらわれのようにおもえる。
6しょう APIの検出けんしゅつでは、OSINTてき手法しゅほう活用かつようしてAPIを検出けんしゅつする。通常つうじょう脆弱ぜいじゃくせい診断しんだんではAPIエンドポイントの情報じょうほう開示かいじされるので、このステップは省略しょうりゃくされるが、本書ほんしょでいう「ブラックボックスがたテスト」では、APIの検出けんしゅつからはじまるのでこのステップが必要ひつようになる。

7しょうのエンドポイント分析ぶんせきは、APIの正常せいじょうけい仕様しよう把握はあくするステップであり、ウェブアプリケーション脆弱ぜいじゃくせい診断しんだんのサイト巡回じゅんかい(クローリング)に相当そうとうする。APIの仕様しようはドキュメントされている場合ばあいおおいが、そうでない場合ばあい、アプリケーション経由けいゆのAPI通信つうしんをキャプチャすることになる。このステップは本書ほんしょではリバースエンジニアリングと表現ひょうげんされている。通信つうしんのキャプチャはBurp Suiteとう診断しんだんプロキシをもちいることもできるが、本書ほんしょではおもにPostmanを使用しようする。Postmanのプロキシ機能きのう評者ひょうしゃ本書ほんしょむまでらなかった)をもちいて、API仕様しよう明確めいかくにする。7しょう後半こうはん情報じょうほう漏洩ろうえい過剰かじょうなデータ露出ろしゅつとう、ファジングをともなわない脆弱ぜいじゃくせい検査けんさおこなう。

8しょうから12しょうはさまざまな攻撃こうげきによるセキュリティテストである。8しょう前半ぜんはんはパスワード認証にんしょうたいする辞書じしょ攻撃こうげきやパスワードスプレイなど古典こてんてき攻撃こうげきだが、Hydraのようなパスワード解析かいせき専用せんようツールではなく、Burp Suite IntruderやWfuzzとうのファジングようのツールを使つかっている。パスワードスプレイの場合ばあい、ユーザIDのリストが必要ひつようになるが、6しょう解説かいせつした偵察ていさつや7しょう過剰かじょうなデータ露出ろしゅつ脆弱ぜいじゃくせい利用りようできるとする。8しょう後半こうはんは、トークンやJWTにたいする攻撃こうげきで、ブルートフォースをふく攻撃こうげき手法しゅほう解説かいせつしている。

9しょう説明せつめいされるファジングとは異常いじょうなデータをAPIに送信そうしんして意図いとしない結果けっかこすことである。ファジングにはワイドファジング(ひろあさく)とディープファジング(せまふかく)があり、前者ぜんしゃにはPostmanのCollection Runnerをもちい、後者こうしゃにはBurp Suite IntruderやWfuzzをもちいている。評者ひょうしゃはPostmanを使つかってはいたが、もっぱらAPIの機能きのうてきなテストの目的もくてきであり、ファジングにもちいる発想はっそうがなかったので勉強べんきょうになった。

10しょう認可にんかへの攻撃こうげきである。認可にんか脆弱ぜいじゃくせいかんしてはとく目新めあたらしいものではないが、テストの観点かんてんとツールの効果こうかてき使つかかた興味深きょうみぶかい。ここでも、Postmanを効果こうかてき使用しようしている。

11しょうはマスアサインメントにたいする攻撃こうげきである。マスアサインメント脆弱ぜいじゃくせいとは、おも更新こうしんけいのAPIで、「変更へんこうできてはいけない項目こうもく変更へんこうできる」問題もんだいであり、過去かこのGithub事例じれい有名ゆうめいである。たとえば、利用りようしゃ自身じしんのメールアドレスやパスワードを変更へんこうできるのは問題もんだいないが、テーブルじょうのadminれつをtrueに勝手かって変更へんこうできたらだい問題もんだいである。APIしにadmin=trueを追加ついかするだけで意図いとしないadminれつ更新こうしんができる場合ばあいがマスアサインメント脆弱ぜいじゃくせいである。Ruby on Rails 4以降いこうではStrong Parametersと機能きのうによりマスアサインメントに対策たいさくしている。マスアサインメントのテスト自体じたい簡単かんたんなのだが、問題もんだいは「変更へんこうできてはいけないパラメータ(さきれいではadmin)」をどう発見はっけんするかである。本章ほんしょうでは、マスアサインメント可能かのうなパラメータの探索たんさくについていくつかの方法ほうほう説明せつめいしている。

12しょうはインジェクションということで、クロスサイトスクリプティング(XSS)やSQLインジェクションなどがふくまれる。有名ゆうめい脆弱ぜいじゃくせいであるからか、このしょう説明せつめい簡潔かんけつなものである。12.4.1こう説明せつめいされるSQLインジェクション攻撃こうげき文字もじれつは、あまりったものではないし、本番ほんばん環境かんきょうためすには危険きけんなものがふくまれていて評者ひょうしゃはぎょっとした(p304)。だが、直後ちょくご訳者やくしゃによる適切てきせつなコラム「SQLインジェクションのテストを実施じっしするさい注意ちゅうい補足ほそく(pp305-306)」があり、評者ひょうしゃ安心あんしんした。もっとも、コラムない文字もじれつ「’||’」や「’+’」もMySQLの場合ばあい危険きけんなので、SQLインジェクション検査けんさ厳重げんじゅう注意ちゅうい必要ひつようである(参考さんこう:とある診断しんだんいんとSQLインジェクション)。

だい4 じつ世界せかいにおけるAPI攻撃こうげき

だい4は、「じつ世界せかいにおけるAPI攻撃こうげき」というテーマで、13しょうはバイパス技術ぎじゅつ応用おうようとレート制限せいげんテストとして、バリデーションやWAF、APIの利用りよう制限せいげん回避かいひする技術ぎじゅつといういかにもハッカーてきなテーマ、14しょうみなさん大好だいすきGraphQLへの応用おうよう、15しょうでは、APIの脆弱ぜいじゃくせい情報じょうほう漏洩ろうえいやバグバウンティでどのように発見はっけんされたかを紹介しょうかいしている。

  • 13しょう バイパス技術ぎじゅつ応用おうようとレート制限せいげんテスト
  • 14しょう GraphQLへの攻撃こうげき
  • 15しょう データ侵害しんがいとバグバウンティ

本書ほんしょのすごいところ

本書ほんしょ眼目がんもくは、APIセキュリティテストの方法ほうほうろん徹底てっていしているところである。それは、APIを検出けんしゅつするところからはじまる。種々しゅじゅ検出けんしゅつ手法しゅほうは、APIそのものをさがすだけではなく、マスアサインメント可能かのうなパラメータをさが場合ばあいにも応用おうようできるもので、このたね解説かいせつ非常ひじょう貴重きちょうなものだ。
また、テストに使つかうツールの説明せつめいくわしい。筆者ひっしゃおもにBurp SuiteやPostmanなどの汎用はんようてきなツールを使つかい、Burp SuiteのIntruderやPostmanのCollection Runnerによりファジングだけでなく、パスワードにたいする辞書じしょ攻撃こうげきやマスアサインメントのパラメータ探索たんさくにももちいる。そのにもおおくのツールが紹介しょうかいされているが、評者ひょうしゃには、汎用はんようツールの使つかいこなしこそ勉強べんきょうすべきだとおもえた。
さらには、テストにたいする心構こころがまえや、方針ほうしんかたなど、現役げんえきのペンテスターならではの知見ちけんまなべるところも、本書ほんしょならではの価値かちといえる。

本書ほんしょあつかってない内容ないよう

本書ほんしょあつかっていない項目こうもくについても紹介しょうかいしよう。
まず、現在げんざいAPIの主流しゅりゅうであるRESTfulAPIはステートレスだからCookieによるセッション管理かんりおこなわないという主張しゅちょうから、Cookie関連かんれん記載きさい一切いっさいない。これに関連かんれんして、以下いか項目こうもくもない。

  • Cookieにかんする説明せつめいたとえばSameSite属性ぞくせいふくめ、Cookieの言及げんきゅうがない)
  • セッション管理かんり(トークンるい保存ほぞん場所ばしょはlocalStorageかCookieかとう
  • APIのCSRF(Content-Type、CORSとの関連かんれんふくむが、そもそもCSRFの言及げんきゅうがない)

また、Web APIの基礎きそとしてJSONなどの説明せつめいはあるが、どういちオリジンポリシーやCORSの説明せつめいはない。
XSSの話題わだいすこているが、Content-Typeの話題わだいはない。たとえば、以下いかのケースは、レスポンスボディのかけじょうはXSSだが、Content-Type: application/jsonなのでJavaScriptは実行じっこうされない。このたね話題わだいは、ほんたとえば拙著せっちょ)でまな必要ひつようがある。

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 43

{"message": "<img src=x onerror=alert(1)>"}

そのれられてないテーマのれいとして下記かきがある。

  • JSONP(RESTfulAPIだから関係かんけいない)
  • CSP(APIがわだから無関係むかんけいというのはかる)
  • X-Content-Type-OptionsやHSTSなどのレスポンスヘッダ(侵入しんにゅうとは直接ちょくせつ関係かんけいがないからか?)
  • 脆弱ぜいじゃくせい対策たいさく方法ほうほう

注意ちゅういてん

筆者ひっしゃっからのペンテスター気質きしつというかんじで、たとえば、以下いかのような記載きさいがある(p301)。

プロバイダのAPIがコンテンツを追加ついかしたり、そのWebアプリケーションに変更へんこうくわえる場合ばあい脆弱ぜいじゃくせい存在そんざいしないかさがすべきかもしれません。

これにたいしては、下記かき訳注やくちゅうがついている。

一般いっぱんに、許可きょかなくサードパーティAPIをテストすることはゆるされていないケースがおおいため、注意ちゅうい必要ひつようです。

また、以下いかのような記載きさいもある(p115)。

筆者ひっしゃは、Webアプリケーションの存在そんざい発見はっけんすると、すぐにNiktoでスキャンをおこないます。

おそらく文脈ぶんみゃくてきには「セキュリティテストの過程かていでWebアプリケーションを発見はっけんすると…」ということであろうが、Niktoも脆弱ぜいじゃくせい診断しんだんツールのひとつではあるので、許可きょかなくNiktoスキャンをおこなうことは問題もんだいがある。

本書ほんしょ眼目がんもく訳者やくしゃ知見ちけんにある

本書ほんしょは、本格ほんかくてきなAPIセキュリティテストの書籍しょせき和訳わやくというだけで価値かちたかいものであるが、つぎてんにおいて、価値かち倍加ばいかしているとかんがえる。

  • 原書げんしょ出版しゅっぱん利用りようサイトやツールのバージョンアップ、サイトの閉鎖へいさとうともな利用りようほう変更へんこう代替だいたい手段しゅだん説明せつめいがあること
  • 豊富ほうふ訳注やくちゅう訳者やくしゃコラムにより、原書げんしょ説明せつめい不足ふそくや、日本にっぽん読者どくしゃになじみのない一般いっぱん知識ちしきたとえばAcmeの意味いみ)が補足ほそくされていること
  • 訳注やくちゅうでの参考さんこう情報じょうほう記載きさいがとても豊富ほうふであり、追加ついか勉強べんきょうのために役立やくだつこと

したがって、読者どくしゃ英語えいご堪能かんのうであったとしても、それでもこの和訳わやく選択せんたくする価値かち十分じゅうぶんにある。また、参考さんこうリンクが豊富ほうふであることから、うなら電子でんしばん(PDF)圧倒的あっとうてきにおすすめである。評者ひょうしゃはレビューをかみばんおこなったが、電子でんしばん購入こうにゅうした。
翻訳ほんやくはこなれていて、問題もんだいとなるような箇所かしょはなかった。

本書ほんしょ使つかかた

本書ほんしょのおすすめの活用かつようほう以下いかのようなものであろう。

  • 4しょう「APIハッキングラボの構築こうちく」と5しょう脆弱ぜいじゃくなAPIラボ環境かんきょう準備じゅんび」にしたが実習じっしゅう環境かんきょう準備じゅんびする
  • かくしょう
  • あきらまつしめされた実習じっしゅうおこな
  • 本書ほんしょむだけではからない箇所かしょ訳注やくちゅう参考さんこう文献ぶんけんしたがって勉強べんきょうする

かなり時間じかんがかかるはずだが、それだけの価値かちかならずある。

まとめ

  • 本書ほんしょはAPIセキュリティテストにかんする実践じっせんてきなガイドである
  • ツールの紹介しょうかいおおいが、読者どくしゃはツールを能動のうどうてき活用かつようする必要ひつようがあり、そのための情報じょうほう本書ほんしょにはある
  • 訳注やくちゅうおよび訳者やくしゃコラムは価値かち非常ひじょうたかく、それだけで訳書やくしょ選択せんたくする理由りゆうになる
  • うなら絶対ぜったい電子でんしばん(PDF)をおすすめする

0 けんのコメント:

コメントを投稿とうこう

フォロワー

ブログ アーカイブ