セキュリティの設定不備
「セキュリティ設定の不備」とは、コードの欠陥ではなく、アプリケーションの設定に起因する一般的な脆弱性を指す包括的な用語です。これは非常に広範なテーマであり、使用する技術スタックなどの要因に大きく依存します。
こうした問題への対処は、設定ファイルの変更やコードのわずか1行の修正といった単純な作業に見えることも多いですが、その脆弱性がもたらす影響や結果は甚大になる可能性があります。
以下のカテゴリーを順に見ていきましょう。
カテゴリー
Webサーバー
Webサーバーにおける典型的な設定ミスとして、ディレクトリリスティングの有効化が挙げられます。
ディレクトリリスティングを有効にしても、それ自体が直接的な影響を及ぼすことはほとんどありませんが、攻撃者が他のミスを発見しやすくなるというリスクがあります。例えば、意図的に隠していたページやバックアップファイルなどがこれに該当します。
そもそも、こうした隠蔽行為自体が「セキュリティ・バイ・オブスキュリティ(隠蔽によるセキュリティ)」であり、本質的に推奨されない慣行である点には留意が必要です。
ディレクトリリスティングを無効化するのは非常に簡単です。これを無効にすることで、攻撃者がホストを調査して攻撃の糸口を見つけるためのコストを高め、多層防御を強化できます。
フレームワーク
デバッグモード
多くのフレームワークには、開発者向けの「デバッグモード」が用意されています。このモードでは、未処理の例外が発生した際にスタックトレースの詳細が表示されるのが一般的です。中には、スタックトレースとともにコードの断片を表示するフレームワークもあります。開発時には非常に便利ですが、攻撃者にとっては本来知るべきではない情報を与えてしまうことになります。
監視用エンドポイント
多くのフレームワークには、本番環境やテスト・開発環境を問わず、アプリケーションを監視するためのエンドポイントが用意されています。
これには以下のようなものが含まれます:
- メトリクス(Prometheus)
- ログ
- 環境情報
- パス/URLマッピング
これらの情報は通常機密性の高いものではありませんが、攻撃者がアプリケーションをより深く理解するための手がかりになる可能性があります。もちろん、環境設定やログに実際には機密情報が含まれている場合もあるため、第三者の目に触れた場合に悪用されるリスクを常に意識しておくことが重要です。
本番環境と非本番環境の区別
ディレクトリリスティングやデバッグモード、デバッグ用エンドポイントの無効化といったガイドラインを、本番環境では守っていても、開発・テスト環境では守らないというミスが頻繁に見受けられます。その理由は、非本番システムはテスト用であり、これらの機能から得られる情報が必要だという考えにあります。
しかし、この考え方は誤りです。攻撃者は非本番システムを調査して情報を引き出し、その情報を利用して本番システムを攻撃することが可能です。また、テストシステムに本番データベースのコピーを使用している企業も珍しくなく、その場合はリスクがさらに高まります。
XXE
セキュリティ設定の不備の中でも、特に深刻なのがXML外部エンティティ(XXE)攻撃です。
これは、エンティティ解決が有効な状態で信頼できないソースから解析を行う場合に発生します。かつてはこれが一般的な設定でした。XXEは、任意のファイルの読み取りやサーバーサイドリクエストフォージェリ(SSRF)など、さまざまな被害を引き起こす可能性があります。
詳細や具体的な例については、以下のサンプルをご覧ください。
実践的なセキュアコーディング
OWASP Top 10のようなソフトウェアの脆弱性を理解し軽減するためのセキュアコーディングガイドラインを確認しましょう。また、実践的なアプリシミュレーションを通じて学べるトレーニングミッションにもぜひ挑戦してください。