4.3 セキュリティテスト (Security Testing)
セキュリティテストの目的
Section titled “セキュリティテストの目的”「セキュリティテスト(Security Testing)」 の主な目的は、ソフトウェアアプリケーションやシステムが、不正なユーザーや外部の脅威から情報、データ、機能をどの程度保護できているかを評価することです。これには、機密性(アクセス権のない人に情報が漏れないこと)、完全性(データが不正に改ざんされないこと)、可用性(必要な時にサービスが利用できること)などの維持が含まれます。
テクニカルテストアナリスト(TTA)は、システムのアーキテクチャや技術スタックを理解し、潜在的な脆弱性を悪意ある攻撃者に突かれる前に発見する重要な役割を担います。
主な脆弱性と攻撃タイプ
Section titled “主な脆弱性と攻撃タイプ”シラバスでは、TTAが深く理解し、テストで検出できるようにすべき代表的な脆弱性と攻撃のタイプとして以下を挙げています。
1. バッファオーバーフロー (Buffer Overflow)
Section titled “1. バッファオーバーフロー (Buffer Overflow)”プログラムが用意したメモリ領域(バッファ)の容量を超えたデータが書き込まれることで、隣接するメモリ領域が上書きされ、システムがクラッシュしたり、攻撃者の意図する不正なコードが実行されたりする脆弱性です。CやC++などのメモリ管理を開発者が行う言語で発生しやすく、適切な入力値の長さチェックや安全な関数の使用によって防ぎます。
2. クロスサイトスクリプティング (XSS: Cross-Site Scripting)
Section titled “2. クロスサイトスクリプティング (XSS: Cross-Site Scripting)”Webアプリケーションの入力フォームなどを通じて、悪意のあるスクリプト(JavaScriptなど)が不適切に埋め込まれ、それを閲覧した他のユーザーのブラウザ上でスクリプトが実行されてしまう脆弱性です。クッキーやセッショントークンが盗まれ、アカウントが乗っ取られるリスクがあります。
3. SQLインジェクション (SQL Injection)
Section titled “3. SQLインジェクション (SQL Injection)”アプリケーションの入力値に不正なSQL文を注入することで、データベースを不正に操作(データの盗難、改ざん、消去など)する攻撃です。エスケープ処理の不足や、プレースホルダー(バインド変数)を使用していない場合に発生します。
4. サービス拒否攻撃 (DoS / DDoS: Denial of Service)
Section titled “4. サービス拒否攻撃 (DoS / DDoS: Denial of Service)”システムに大量のリクエストや負荷を集中させることで、サーバーの資源(CPU、メモリ、ネットワーク帯域)を枯渇させ、正規のユーザーがサービスを利用できない状態に追い込む攻撃です。
5. 中間者攻撃 (Man-in-the-Middle)
Section titled “5. 中間者攻撃 (Man-in-the-Middle)”通信を行っている二者の間に攻撃者が割り込み、通信内容を盗聴したり、改ざんしたりする攻撃です。暗号化(HTTPS/TLS)の不備や、証明書の検証ロジックの欠陥によって引き起こされます。
セキュリティテストのアプローチ
Section titled “セキュリティテストのアプローチ”セキュリティテストは、開発ライフサイクルの様々な段階で異なる手法を組み合わせて実施する必要があります。
- 静的解析 (Static Analysis): ソースコードをコンパイル・実行せずにツールでスキャンし、既知の脆弱な関数、SQL文の組み立て方、ハードコードされた認証情報などの「セキュリティ上の欠陥(コードの脆弱性)」を早期に検出します。
- 動的解析と脆弱性スキャン (Dynamic Analysis & Vulnerability Scanning): 実際にシステムを稼働させた状態で、既知の脆弱性パターン(OWASP Top 10など)に基づいた疑似攻撃リクエストを自動ツールで送信し、システムの応答(エラー画面の露出、不正なパケットの通過など)を監視・評価します。
- ペネトレーションテスト (Penetration Testing): 高度なスキルを持つ専門家が、攻撃者の視点からシステムへの侵入を試みる実践的なテストです。ツールの自動スキャンでは発見できない、複数の脆弱性の組み合わせやビジネスロジックの欠陥(認可制御のバイパスなど)を突き止めるのに有効です。