シャドーAPIやシャドーAPIパラメータについて、API開発の経験が豊富な人からでさえよく質問される。シャドーAPIは通常、APIを開発する過程で考えるようなリスクではないからだ。実際、シャドーAPIはセキュリティベンダーがツールを売るために使う脅し文句に過ぎないと確信している人もいる。
しかし実際には、シャドーAPIは比較的簡単に構築・利用できる。シャドーAPIをよりよく理解するにはどうすればいいのだろうか?実例を見ることだ!ということで、この投稿で取り上げるのはこれだ。
シャドーAPIとは何か?
まず、私が遭遇したAPIリクエストの例から見てみよう:
これは、あるウェブサービスの認証に使われるワンタイムパスワード(OTP)を生成するためのGraphQL APIへのリクエストだ。よく見ないと問題に気づかないかもしれないので、大きな赤い矢印でマークした。これは otpDigit
パラメータは実は大きな問題である。
実はこのパラメーターはAPIで変更可能であることがわかった。このパラメータを変更することで、認証に必要なワンタイムパスワードの長さを調整することができる。どんな意味があるのだろうか?私はこの値を 1
.これにより、パスワードの可能性は100万通りからわずか10通りになった!
当然ながら、私がこのパラメーターのことを話すと開発チームは警戒し、すぐに修正してくれた。それにもかかわらず、これはシャドーAPIとそのパラメーターの完璧な例である。ほとんどの場合、このパラメータはプロトタイピングやテストのために使われた初期の開発者の便宜的なものだったのだろう。APIが本番稼動しても、このパラメーターのサポートは削除されることはなく、影のAPIパラメーターとなった。
文書化されていないパラメータで何ができるのか、誰かがこの特定のエンドポイントを探らなければ、この重大な脆弱性は発見されなかっただろう。さらに重要なことは、開発チームは、脆弱性が提示されるまで、これを熱心に探そうとはしないということだ。
この例は、影のAPIエンドポイントとパラメータに関する作業ガイドラインの基礎を築く:開発者が直接注目しないAPIエンドポイントやパラメータは影に隠れて存在し、セキュリティチームも見落とす可能性が高いので、リスクをもたらす。
シャドーAPIについてはどうすればいいのか?
シャドーAPIのエンドポイントとパラメータが何であるかわかったところで、次の問題はそれに対して何ができるかということだ。明らかに、セキュリティチームにもっと警戒するように言うことはできない。
ほとんどの場合、APIのセキュリティを評価するためのツールやプロセスが必要になるでしょう。必要なツールのタイプは、ビジネスの規模やデプロイしているAPIの数によって異なります。API Gatewayや API Securityツールは、必要なセキュリティの確保に向けて長い道のりを歩むことができるが、必要以上のものかもしれない。APIコンシューマーが利用できるエンドポイントがいくつかしかない場合、スタック全体のトラフィックを追跡し、不審なアクティビティに警告を発する堅牢なツールのセットを導入するのは、間違いなくやり過ぎだ。
もっと簡単な方法は、APIがきちんと文書化されていることを確認することだ。これも素晴らしいスタート地点だ。APIを文書化するためにOpenAPI標準を採用することから始めよう。エンドポイントやパラメータに注意を払わないとき、影のAPIが存在することを覚えておいてほしい。OpenAPI標準の全体的なポイントは、API全体のすべてのエンドポイントとパラメータを特定し、それについて知るためのモデルを提供することだ。
そこから、デプロイ時にこのAPIドキュメントをセキュリティチームに提供するよう、開発者に要求することもできる。そして、セキュリティチームはAPIをドキュメントと照らし合わせてテストし、不正確な点やギャップを見つける。これにより、盲点を防ぐことができる。
結論
あなたがそれらのスペースに光を当てれば、物事は影に潜むことはない。結局のところ、あなたがデプロイしたAPIの詳細を知っていれば、影のAPIは存在し得ないのだ。世界で最もエキサイティングな作業ではないかもしれないが、APIを文書化することは、悪意のある攻撃者にAPIを開放することを防ぐのに役立つ。
この投稿がシャドーAPIの定義と危険性について啓蒙してくれたことを願っている。Go セキュリティ侵害を防ぐために、APIインフラ の影の部分に光を当てよう!
コメント