APIセキュリティ101:セキュリティの設定ミス


最も一般的なセキュリティミスコンフィギュレーションの概要、API実装に対する一定の脅威。


Anne NygårdによるUnsplash写真
あなたはおそらくOwaspトップ10またはWebアプリケーションを脅かすトップ10の脆弱性を聞いたことがあります.また、OWASP APIはトップ10の脆弱性のリストを定期的に選択します.現在のAPIのトップ10は壊れているオブジェクトレベルの承認、壊れたユーザー認証、過度のデータ露出、リソースの欠如&レート制限、壊れた機能レベルの承認、質量割り当て、セキュリティの設定、注入、不適切な資産管理、および不十分なログ&モニタリング.
セキュリティミスコンフィグレーションはAPIと非APIアプリケーションの両方に対する脅威です.今日、APIのセキュリティミスコンフィギュレーションについて話しましょう.

冗長なエラーメッセージ


まず第一に、最も一般的なセキュリティミスコンフィギュレーションの1つは、ユーザーに詳細なエラーメッセージを送ります.これらの冗長なエラーメッセージは、スタックのトレース、システムに関する情報、たとえばサーバーのバージョン、または基になるデータベース構造を含んでいるかもしれません.そして、アプリケーションがどのようにフードの下で働くかについて、ユーザー洞察をします.この場合、悪意のあるユーザーは、サーバーからの情報を収集するために、アプリケーションからエラーメッセージを送信することができます.
多くの既定の404ページには、攻撃者が使用される技術を指紋できるようにするカスタム署名も含まれています.

設定されていないHTTPヘッダ


別の一般的な設定は、誤植やHTTPヘッダーを欠落しています.多くのHTTPセキュリティヘッダーは、アプリケーションのセキュリティを高めるためです.彼らが適切に構成されないなら、攻撃者はしばしば彼らがデータを拡大するのを許すセキュリティホールを見つけることができるか、アプリケーションのユーザーに一般的なウェブ攻撃を実行することができます.
たとえば、コンテンツセキュリティポリシー(CSP)ヘッダーは、ブラウザがページの読み込みを許可するリソースを制御します.それはXSS(クロスサイトスクリプティング)攻撃を防ぐためにランダムなドメイン、インラインスクリプト、およびイベントをHTML属性を扱うことからスクリプトを許可しないように設定する必要があります.CSPを安全に設定する方法の詳細については、次のトピックを参照してください.
Intro to the Content Security Policy (CSP)
また、CRS(Cross - origin Resource Sharing)の設定はHTTPヘッダの誤設定から生じる問題です.クロス起源資源共有(Cors)は、同じ起源ポリシー(SOP)を緩和する安全な方法です.これは、サーバーが明示的にアクセス制御許可の起源ヘッダーを介してそのリソースにアクセスできるように許可されている起源のリストを指定することができます.アクセス制御は、起源を信頼できるサイトからのクロス起源コミュニケーションを許すだけであるように構成されるのを許します.誤って構成されたCors方針は、攻撃者がクロス起源のコミュニケーションでメッセージを出すことによって機密データを盗むのを許します.ここでは、どのように攻撃者が不適切に設定されているかを読むことができます.
Hacking the Same-Origin Policy

不要なサービスまたはHTTPメソッド


別の一般的な設定では、不要なサービスやHTTPメソッドを閉じることができません.例えば、前の記事で述べた例を見てみましょう.私が言及したアクセス制御バグは、未使用のHTTPメソッドを閉じないことに起因します.
API Security 101: Broken Function Level Authorization
APIは、このようにエンドポイントにGETリクエストを送信することによって、ブログ投稿を取得することができます.
GET /api/v1.1/user/12358/posts?id=32
この要求は、API 12358からポスト32を返すようにAPIを引き起こします.このプラットホームのすべてのポストが一般的であるので、どんなユーザーも他のポストにアクセスするためにこの要求を提出することができます.しかし、ユーザー自身だけがブログ記事を変更するべきであるので、ユーザ12358だけはポストを変更するか、または編集するポスト要求を提出することができます.APIがPut - and - Deleteのように、あまり人気のないHTTPメソッドで要求されたリクエストに対して同じ制限をしない場合、悪意のあるユーザーは別のHTTPメソッドを使用して他のユーザーの投稿を変更または削除できます.
DELETE /api/v1.1/user/12358/posts?id=32
サイトがどのように特別なAPIエンドポイントを介してサイトの統計情報を表示できるかについても話しました.
GET /api/v1.1/site/stats/hd216zla
この管理項目は、ユーザーベースの制約を実装しません.サイトはURLエンドポイントが無許可のユーザーがそれにアクセスするのを防ぐために最後にランダムなストリングを含むという事実に頼ります.この慣習は「不信を通してのセキュリティ」と呼ばれています.そして、それは部外者から知識を保持することによってセキュリティを増やすことを意味します.
しかし、あいまいさを通してのセキュリティは唯一のセキュリティメカニズムとして信頼できません.攻撃者が情報漏洩を通して不明瞭なURLを見つけることができるなら、攻撃者はエンドポイントの後で隠れた敏感な機能にアクセスすることができます.このような敏感なサービスを外部に開放すると、悪意のあるユーザーがそれにアクセスできるようになる.

デフォルトの設定


データベースやWebフレームワークのようなサードパーティ製の依存関係は、デフォルトで不安定で、開発者にカスタム設定を介してセキュリティを強化する必要があります.例えば、MongoDBの以前のバージョンはインターネットにアクセス可能で、デフォルトで認証を必要としませんでした.これにより、開発者がデフォルトの設定を変更しなかった場合、何千ものデータベースが公開された.
この例のような安全でない既定の設定では、開発者がその結果を認識しない場合、多くのセキュリティ問題が発生する可能性があります.今のところ、MongoDBはまだデフォルトで認証を必要としません.MongoDBデータベースに認証を設定する方法を確認するには、以下のドキュメントを読みます.
このリストはAPIに起こる可能性のあるすべてのセキュリティミス設定のリストではなく、最も一般的なものの概要です.私は、このリストがあなたのAPIシステムで最も一般的なセキュリティミスコンフィギュレーションをスタンプして、あなたがあなたのAPIで不安定であるかもしれない他の場所を考慮するのを援助することを望みます.どのような他のセキュリティ概念を学びたいですか?私は知りたい.Twitterでの接続をお気軽に.
アプリケーションのセキュリティについてもっと知りたいですか?我々の無料Owaspトップ10コースをここに持ってください:https://docs.mongodb.com/manual/tutorial/enable-authentication/.