初めに
セキュリティ分野を学習するための基本的な知識をまとめた。
1. セキュリティの基礎概念
・機密性 (Confidentiality): 情報が許可された人だけにアクセスできるように保護すること。
・完全性 (Integrity): 情報が不正に変更されていないことを保証すること。
・可用性 (Availability): 必要なときに情報やサービスが利用できること。
2. セキュリティ脅威
・SQLインジェクション: ユーザーの入力欄に悪意あるSQL文を注入し、データベースを不正に操作する攻撃手法。
・クロスサイトスクリプティング (XSS): Webページに悪意のあるスクリプトを埋め込み、他のユーザーのブラウザ上でそのスクリプトを実行させる攻撃。
・クロスサイトリクエストフォージェリ (CSRF): ユーザーが意図しない操作を別のサイトに対して実行させる攻撃。
・DoS(サービス妨害)攻撃: サービスを過負荷にして、正常に機能しなくさせる攻撃。
・DDoS(分散サービス妨害)攻撃: 複数のコンピュータを使って、ターゲットに過剰なトラフィックを送る攻撃。
3. セキュリティ対策
・認証と認可
・認証 (Authentication): ユーザーが誰であるかを確認するプロセス(例: ユーザー名とパスワード)。
・認可 (Authorization): 認証されたユーザーがどのリソースにアクセスできるかを制限するプロセス(例: アクセス制御リスト)。
・暗号化: 情報を可読な形から、第三者には解読できない形に変換する技術。
・対称鍵暗号(例: AES):同じ鍵で暗号化と復号を行う。
・公開鍵暗号(例: RSA):異なる鍵で暗号化と復号を行う。
・ファイアウォール: 外部からの不正アクセスを防ぐため、ネットワークにおけるトラフィックを制御する装置。
・IDS/IPS (侵入検知・防止システム): ネットワークやシステムへの不正侵入を検出し、または防止するためのシステム。
4. セキュリティの脆弱性
・バッファオーバーフロー: メモリに予期しないデータを書き込むことによって、プログラムが誤動作し、攻撃者がコードを実行することができる脆弱性。
・セッションハイジャック: ユーザーのセッションを乗っ取り、不正アクセスを行う攻撃。
・不適切な入力検証: ユーザー入力を適切に検証せず、そのまま使用することによって発生する脆弱性(SQLインジェクション、XSSなど)。
・不十分なパスワード管理: パスワードが短すぎたり、辞書攻撃に弱かったり、平文で保存されている場合、攻撃者に悪用される可能性がある。
5. セキュアなプログラミング技法
・プリペアドステートメント: SQLインジェクションを防ぐために、ユーザー入力をパラメータとして渡し、クエリの構造を変えないようにする技法。
・エスケープ処理: ユーザー入力に含まれる特殊文字(例: <, >, ', ")を適切に処理して、XSS攻撃を防ぐ方法。
・最小権限の原則: ユーザーやシステムには、その業務を遂行するために必要な最低限の権限しか与えない。
6. セキュリティツール
・Wireshark: ネットワークのパケットをキャプチャして、通信内容を解析するツール。
・Burp Suite: Webアプリケーションの脆弱性をテストするための統合ツール。XSSやSQLインジェクションなどを試すことができる。
・Nmap: ネットワークスキャニングツールで、ネットワーク上のデバイスを発見し、サービスや脆弱性を検査する。
7. セキュリティの脅威分析フレームワーク
・STRIDE: 脅威分析のフレームワーク。スプーフィング、改ざん、情報漏洩、否認、サービス妨害、権限昇格の6つのカテゴリを基に脅威を分類。
・DREAD: 脅威のリスク評価フレームワーク。脅威の「Damage(被害)」「Reproducibility(再現性)」「Exploitability(攻撃可能性)」「Affected users(影響を受けるユーザー数)」「Discoverability(発見の容易さ)」の5つの要素で評価する。