サイバーセキュリティ

概要

アイデンティティ攻撃・マルウェア・ネットワーク防御・インシデント対応をつなげる

サイバーセキュリティは、個別の攻撃名を覚える章ではありません。何を守るのか、どこから侵入されるのか、侵入された後にどう広がるのか、そしてどう検知・復旧するのかを、ひとつの流れとして捉える章です。

要点
この章の土台は、`CIA`、脅威モデル、認証、マルウェア、ネットワーク防御、インシデント対応です。攻撃手法をばらばらに覚えるより、攻撃の流れと防御の置き場所を対応づけることを重視します。

この章で重視すること

  • 攻撃名の暗記より、守る対象と侵入経路を整理すること
  • 認証、ネットワーク、マルウェア、運用対応を別々ではなく連続した攻撃面として見ること
  • 単一の対策ではなく、多層防御と検知・復旧まで含めて考えること
  • 実装、運用、教育、組織プロセスをまとめてセキュリティとして捉えること

目次

  1. サイバーセキュリティの基本概念
  2. 脅威モデルと攻撃の分類
  3. マルウェア攻撃の完全ガイド
  4. ネットワーク攻撃
  5. ソーシャルエンジニアリング攻撃
  6. 暗号化とパスワード攻撃
  7. 高度な攻撃:APTとゼロデイ
  8. Webセキュリティとの接続
  9. インシデント対応
  10. セキュリティベストプラクティス
  11. セキュリティフレームワーク
  12. 実装チェックリスト
  13. 参考資料
  14. まとめ

サイバーセキュリティの基本概念

初心者向けメモ
まずは「何を守るのか」「どこから攻撃されるのか」「一つの対策だけでは足りない」の3点をつかむ章です。
要点
サイバーセキュリティの土台は、`CIA`、攻撃の見方、深層防御です。ここを先に押さえると、後ろの章で出てくる対策の意味が追いやすくなります。

セキュリティの三本柱(CIA: Confidentiality, Integrity, Availability トライアド)

サイバーセキュリティのすべての対策は、以下の3つの要素のバランスを取ることが目的です:

次の図は、どの対策も最終的には 機密性完全性可用性 のどれかを守るためにあることをまとめたものです。

graph TD CIA["セキュリティの三本柱(CIA)"] C["機密性 / Confidentiality / データが不正アクセスから保護 / 例: 暗号化・アクセス制御"] I["完全性 / Integrity / データが改ざんされていないこと / 例: デジタル署名・ハッシング"] A["可用性 / Availability / システムが必要なとき利用可能 / 例: 冗長性・DDoS対策"] CIA --> C CIA --> I CIA --> A

1. 機密性 (Confidentiality)

定義: データが権限のないユーザーから保護されている状態

実現方法:

  • 暗号化 — AES-256(Advanced Encryption Standard 256-bit)などの強力な暗号化アルゴリズムを使用
  • アクセス制御 — ロールベースアクセス制御(RBAC: Role-Based Access Control)の実装
  • 認証 — 多要素認証(MFA: Multi-Factor Authentication)による本人確認
  • データ分類 — 機密度に応じたデータの分類と管理

実装例:

次のコードは、機密データをそのまま保存せず、暗号化して扱う最小例です。

// 機密データの暗号化保存
const crypto = require('crypto');

function encryptData(data, key) {
  const iv = crypto.randomBytes(16);
  const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
  let encrypted = cipher.update(data, 'utf8', 'hex');
  encrypted += cipher.final('hex');
  return iv.toString('hex') + ':' + encrypted;
}

2. 完全性 (Integrity)

定義: データが改ざんされることなく、正確で信頼できる状態

実現方法:

  • デジタル署名 — メッセージ認証コード(MAC: Message Authentication Code)や HMAC(Hash-based Message Authentication Code)
  • ハッシング関数 — SHA-256(Secure Hash Algorithm 256-bit)などで変更検知
  • チェックサム — データ転送時の検証
  • バージョン管理 — 変更履歴の追跡と監査ログ

実装例:

// HMACによるデータ整合性検証
const crypto = require('crypto');

function createHMAC(data, secret) {
  return crypto.createHmac('sha256', secret)
    .update(data)
    .digest('hex');
}

function verifyHMAC(data, secret, expectedHMAC) {
  const computedHMAC = createHMAC(data, secret);
  // タイミング攻撃を防ぐために定時間比較を使用
  return crypto.timingSafeEqual(
    Buffer.from(computedHMAC),
    Buffer.from(expectedHMAC)
  );
}

3. 可用性 (Availability)

定義: システムとデータが必要なときに、正規のユーザーに利用可能である状態

実現方法:

  • 冗長性 — サーバーやネットワークの複数化
  • フェイルオーバー — 障害時の自動切り替え
  • DDoS対策 — トラフィック制限と分散
  • バックアップ — 定期的なデータ復旧方法の確保

攻撃の分類フレームワーク

攻撃は以下のレイヤーで分類できます:

次の図は、攻撃を「どこが狙われるか」で大づかみに並べたものです。

graph TD L1["アプリケーション層 / SQLインジェクション・XSS・CSRF"] L2["トランスポート層 / MitM攻撃・TLS脆弱性・プロトコル攻撃"] L3["ネットワーク層 / DDoS・ポートスキャン・IPスプーフィング"] L4["物理・ソーシャル層 / フィッシング・ソーシャルエンジニアリング・デバイス盗難・物理的不正アクセス"] L1 --> L2 L2 --> L3 L3 --> L4

深層防御 (Defense in Depth)

単一のセキュリティ対策に依存することは危険です。複数の重層的な防御層により、1つが破られても他が保護を続ける体制を構築します。

次の図は、防御を1か所に置かず、層として重ねる考え方を示しています。

graph TD D1["物理的セキュリティ / アクセス制御・監視カメラ"] D2["ネットワークセキュリティ / ファイアウォール・IDS/IPS"] D3["認証・認可 / MFA・RBAC・最小権限の原則"] D4["アプリケーションセキュリティ / 入力検証・出力エンコーディング"] D5["データセキュリティ / 暗号化・アクセス制御"] D6["ログ監視・検知 / SIEM・異常検知・アラート"] D1 --> D2 D2 --> D3 D3 --> D4 D4 --> D5 D5 --> D6

脅威モデルと攻撃の分類

初心者向けメモ
攻撃は無秩序に起きるのではなく、ある程度決まった段階を踏むことが多いです。この章では、攻撃者の動きを地図のように見る考え方を紹介します。
要点
攻撃を理解するときは、単発の手口より「どの段階で何をするか」を見る方が整理しやすいです。`MITRE ATT&CK`(攻撃者の行動を戦術・技術ごとに整理した知識ベース)と `APT`(Advanced Persistent Threat: 高度で持続的な脅威)の流れは、そのための共通地図になります。

MITRE ATT&CK フレームワーク

攻撃者の行動を体系的に分類するフレームワークです(参考:https://attack.mitre.org)。ここでいう MITRE は米国の非営利研究組織、ATT&CK は実際の攻撃観測をもとにした戦術・技術の体系です。

フェーズ 説明 攻撃手法の例
偵察 (Reconnaissance) 目標の情報収集 オープンソース調査、フットプリンティング
武装化 (Weaponization) 攻撃ツールの準備 マルウェア開発、エクスプロイト作成
デリバリー (Delivery) ペイロードの配送 フィッシング、ドライブバイダウンロード
エクスプロイテーション (Exploitation) 脆弱性の悪用 ゼロデイ、既知の脆弱性利用
インストール (Installation) マルウェアの常駐化 バックドア設置、永続化メカニズム
コマンド・コントロール (C2: Command and Control) 攻撃者の操作 C2サーバーとの通信確立
行動 (Actions on Objectives) 最終目的の実現 データ盗難、システム破壊、身代金要求

APT(Advanced Persistent Threat: 高度で持続的な脅威)攻撃のライフサイクル(図解)

graph TD A["偵察 / Reconnaissance"] -->|ターゲット調査| B["初期侵入 / Initial Access"] B -->|フィッシング・脆弱性| C["確立・永続化 / Establishment and Persistence"] C -->|バックドア配置| D["横展開 / Lateral Movement"] D -->|権限昇格| E["情報収集 / Data Exfiltration"] E -->|データ窃取| F["カバーアップ / Cover Tracks"] F -->|ログ削除| G["撤退 / Exit"]

マルウェア攻撃の完全ガイド

初心者向けメモ
マルウェアは「悪いソフト全部」の総称です。種類ごとに動き方と防ぎ方が違うので、代表的な型を分けて覚えると理解しやすくなります。
要点
マルウェアは「どう感染するか」「何をするか」「どう隠れるか」で見ると理解しやすいです。個別の名前を暗記するより、挙動の型で押さえる方が実務で役立ちます。

マルウェアとは?

マルウェア(Malicious Software) = 悪意あるソフトウェアの総称

コンピュータシステムに意図的に損害を与えるために設計されたプログラムで、個人情報の盗難、システムの破壊、経済的利益の獲得などを目的とします。

マルウェアの分類体系(図解)

図の中に出てくる用語は、まず「どう増えるか」「何をするか」「どう隠れるか」で見ると整理しやすいです。たとえば トロイの木馬 は正規ソフトに見せかける型、キーロガー は入力を盗む型、ルートキット は侵入後に見つかりにくくする型です。

graph TB Malware["マルウェア / 悪意あるソフトウェア"] Malware --> SelfReplicating["自己複製型"] Malware --> NonReplicating["非複製型"] SelfReplicating --> Virus["ウイルス / 他プログラムに寄生"] SelfReplicating --> Worm["ワーム / ネットワーク自動拡散"] NonReplicating --> Trojan["トロイの木馬 / 正規ソフトに偽装"] NonReplicating --> Ransomware["ランサムウェア / ファイル暗号化"] Malware --> DataSteal["情報窃取型"] DataSteal --> Spyware["スパイウェア"] DataSteal --> Keylogger["キーロガー"] Malware --> Monetize["金銭化型"] Monetize --> Adware["アドウェア"] Monetize --> Botnet["ボットネット"] Malware --> Stealth["隠蔽型"] Stealth --> Rootkit["ルートキット"] Stealth --> Fileless["ファイルレス"]

マルウェアの12+ 種類

1. ウイルス (Virus)

定義: 他のプログラムに寄生し、自己複製するマルウェア

特徴:

  • 感染したプログラム実行時に作動
  • ホストプログラムが必要(単独では動作不可)
  • 自己複製して他のファイルに感染拡大

感染経路:

  • 感染ファイルのダウンロード
  • USB等の外部メディア経由
  • メールの添付ファイル

実装的特性:

元のプログラムの実行ファイル
↓
ウイルスコードが挿入
↓
ウイルス実行 + 元のプログラム実行
↓
他のファイルに自己複製

対策:

  • アンチウイルスソフトの導入と常時更新
  • 信頼できないファイルの実行を避ける
  • メールの添付ファイルを慎重に扱う
  • ファイアウォール・エンドポイント検知と対応(EDR: Endpoint Detection and Response。端末上の不審挙動を検知し、隔離や調査まで行う仕組み)

2. ワーム (Worm)

定義: 自己複製し、ホストプログラムなしで独立して動作・拡散するマルウェア

特徴:

  • 単独で動作(ウイルスと異なる)
  • ネットワークを通じて自動拡散
  • ウイルスより伝播速度が速い

有名な例:

  • WannaCry (2017年)— Windows SMB脆弱性を悪用し、150カ国で23万台以上に感染
  • Stuxnet (2009年)— イランの核施設を狙った国家支援型ワーム

Stuxnet は、産業機器を制御するシステムまで狙ったことで有名なワームです。EternalBlue は、Windows のファイル共有機能 SMB にあった欠陥を悪用する攻撃手法として知られています。

被害例(WannaCry):

感染経路:EternalBlueという脆弱性(Windows SMB: Server Message Block)
    ↓
システムの全ファイルを暗号化
    ↓
身代金メッセージ表示
    ↓
150カ国で230,000台以上に感染
    ↓
推定損害額:50億ドル以上

対策:

  • OSとソフトウェアのセキュリティパッチを迅速に適用
  • ネットワークセグメンテーション(感染の隔離)
  • 定期的なバックアップ(ネットワークから分離)
  • ファイアウォール設定で外部ネットワークからのアクセス制限

3. トロイの木馬 (Trojan)

定義: 正規ソフトウェアに偽装し、ユーザーに実行させてシステムを侵害するマルウェア

特徴:

  • 自己複製しない(手動実行が必要)
  • 一見無害なプログラムに見える
  • 実行後、悪意ある活動を実行

種類と目的:

トロイの種類 目的
Backdoor リモートアクセスを許可 Emotet
Infostealer 情報窃取 Dyre
Downloader 他のマルウェアをダウンロード SmokeBot
Banker 銀行認証情報を盗む Zeus
Remote Access リモート操作 TeamViewer(悪用)

感染シナリオ:

ユーザーが「無料ソフト」をダウンロード
    ↓
実は悪意あるトロイが混在
    ↓
インストール時に自動実行
    ↓
・キーロガー起動
・バックドア開放
・ファイル窃取
    ↓
攻撃者がシステムを遠隔操作

対策:

  • 信頼できるソースからのみダウンロード
  • 実行ファイルのデジタル署名を確認
  • VirusTotal などのマルウェア判定サービスでファイルスキャン
  • サンドボックス環境で未知のプログラムをテスト

4. ランサムウェア (Ransomware)

定義: ファイルを暗号化またはシステムをロックし、身代金を要求するマルウェア

2026年の進化:

  • 二重身代金 (Double Extortion) — 暗号化+データ盗難+公開脅迫
  • 三重身代金 (Triple Extortion) — 加えて取引先や顧客への脅迫も追加

ランサムウェア攻撃のフロー:

flowchart TB A1["1. 侵入"] --> A11["フィッシングメール"] A1 --> A12["脆弱な RDP アクセス"] A1 --> A13["供給チェーン経由"] A1 --> A2["2. 展開"] A2 --> A21["ネットワーク偵察"] A2 --> A22["認証情報盗難"] A2 --> A23["横展開 (ラテラルムーブメント)"] A2 --> A3["3. 実行"] A3 --> A31["バックアップシステムを削除"] A3 --> A32["ファイル暗号化開始"] A3 --> A33["身代金メモを表示"] A3 --> A4["4. 要求"] A4 --> A41["身代金額の通知"] A4 --> A42["復号キーの販売"] A4 --> A43["データ漏洩の脅迫"]

暗号化の仕組み:

// ランサムウェアの簡略的な仕組み(教育目的)
// 実際にはこのようなコードで強力な暗号化を行う

const crypto = require('crypto');

// 被害者ごとに異なる鍵を生成
const victimKey = crypto.randomBytes(32);

// すべてのファイルを暗号化
function encryptFile(filepath, key) {
  const data = fs.readFileSync(filepath);
  const iv = crypto.randomBytes(16);
  const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
  let encrypted = cipher.update(data);
  encrypted = Buffer.concat([encrypted, cipher.final()]);
  
  // 復号に必要な秘密鍵は攻撃者が保管
  // ユーザーは復号不可能
  
  fs.writeFileSync(filepath + '.locked', encrypted);
}

有名なランサムウェア攻撃:

名称 被害者 特徴
WannaCry 2017 150カ国 ワーム型、自動伝播
NotPetya 2017 ウクライナ等 供給チェーン経由
Ryuk 2018-2019 大企業 身代金が高額(400K-1M)
REvil 2019-2021 Apple等 二重身代金開始
LockBit 2020-現在 多数 最も活動的、暗号化速度最速

対策:

  • バックアップ戦略 — 外部接続ネットワークから分離したバックアップ
  • セグメンテーション — ネットワークを小分けにして感染拡大を制限
  • EDR導入 — エンドポイント検出応答ツール
  • アクセス制御 — RDP、VPN等のリモートアクセスを制限
  • パッチ管理 — 既知脆弱性の迅速な修正
  • ユーザー教育 — フィッシング認識トレーニング

5. スパイウェア (Spyware)

定義: ユーザーの許可なく、個人情報やアクティビティを監視・記録するマルウェア

監視対象:

  • Webブラウジング履歴
  • キーストローク(パスワード等)
  • 位置情報
  • 金融情報
  • メール・メッセージ内容

実装方法:

// スパイウェアの例(教育目的)
// 実際の悪意あるコードではない

// キーストロークをログ
document.addEventListener('keypress', function(e) {
  logKeystroke(e.key);  // 入力内容を記録
});

// 位置情報を取得
navigator.geolocation.getCurrentPosition(function(pos) {
  sendLocationToAttacker(pos);  // 攻撃者に送信
});

// 定期的にWebブラウジング履歴を送信
setInterval(function() {
  sendBrowsingHistoryToAttacker();
}, 3600000);  // 1時間ごと

対策:

  • 信頼できるセキュリティソフト導入
  • ブラウザプラグインを慎重に管理
  • 定期的なシステムスキャン
  • プライバシー設定の強化

6. アドウェア (Adware)

定義: ユーザーの同意なく、目的を定めた広告を表示するソフトウェア

特徴:

  • スパイウェアとの組み合わせが多い
  • 閲覧履歴を追跡して広告をカスタマイズ
  • ブラウザのホームページやデフォルト検索エンジンを改変

被害:

  • システムパフォーマンス低下
  • プライバシー侵害
  • セキュリティリスク増加

対策:

  • 広告ブロッカーの使用
  • フリーソフト導入時に注意(アドウェアがバンドルされていないか)
  • 定期的なシステムクリーニング

7. ルートキット (Rootkit)

定義: 管理者(root)権限を取得し、システムの深層に隠れるマルウェア

特徴:

  • カーネルレベルで動作
  • 通常のセキュリティツールから隠蔽
  • 検出が極めて困難

動作イメージ:

flowchart TB K["カーネル層"] --> R["ルートキット (隠蔽)"] K --> B["バックドア (リモートアクセス)"] K --> L["ログ改ざん (痕跡隠蔽)"] N["通常のセキュリティツールからは見えない"] --> K

対策:

  • セキュアブート(UEFI)の有効化
  • カーネルパッチの適用
  • 信頼できるメディアからのOS再インストール
  • BIOS/UEFI更新

8. キーロガー (Keylogger)

定義: キーボード入力を記録し、パスワードや機密情報を盗むマルウェア

種類:

1. ソフトウェアキーロガー

// ソフトウェアキーロガーの例(教育目的)
// 実際に実装しないでください

document.addEventListener('keypress', (e) => {
  const keystroke = {
    key: e.key,
    timestamp: new Date(),
    url: window.location.href
  };
  
  // 攻撃者のサーバーに送信
  sendToAttacker(keystroke);
});

2. ハードウェアキーロガー

  • キーボードとコンピュータの間に物理的に挿入
  • 検出が難しい

盗まれる情報:

  • ログインID・パスワード
  • クレジットカード番号
  • 銀行取引情報
  • メールアドレス

対策:

  • スクリーンキーボード(オンスクリーン)の使用(銀行サイト等)
  • MFA導入(パスワードだけでなく別の認証方法)
  • セキュリティソフト導入
  • 定期的なパスワード変更

9. ボットネット (Botnet)

定義: 攻撃者がリモートから操作できる、感染コンピュータのネットワーク

「ボット」の意味: Robot(ロボット)の略で、自動化されたコンピュータという意味

ボットネットの構造:

graph TD C2["C2サーバー / コマンド・アンド・コントロール / 攻撃者が中央から操作"] B1["Bot 1 / 感染PC"] B2["Bot 2 / 感染PC"] BN["Bot N / 感染PC"] C2 --> B1 C2 --> B2 C2 --> BN

命令例:「DDoS攻撃を実行」 →すべてのボットが同時に目標を攻撃

ボットネットの用途:

用途 説明
DDoS攻撃 数百万のボットで標的を攻撃
スパムメール配信 メール配信にボットを悪用
クリプトマイニング CPU資源を利用して仮想通貨採掘
情報窃取 個人情報やクレデンシャルを収集
他マルウェア配布 ランサムウェア等を配布

有名なボットネット:

  • Mirai (2016年) — IoTデバイスを感染させ、100万超のボット化
  • Emotet (2018-2021年) — バンキングトロイ + ボットネット

対策:

  • ファイアウォール設定で不審な通信をブロック
  • ネットワークトラフィック監視(IDS)
  • 定期的なセキュリティ監査
  • メールフィルタリング(ボット配布メール検知)

10. 拡張マルウェア類

ファイルレス マルウェア (Fileless Malware)

定義: ハードディスクにファイルを書き込まず、メモリ上で動作するマルウェア

特徴:

  • ディスク検索では検出されない
  • システム再起動で消滅(永続性なし)
  • 既存のシステムプロセス(PowerShell等)を悪用
  • 検出が困難

例: Astaroth(PowerShellを悪用)

対策:

  • メモリスキャン機能のあるEDR
  • PowerShell の実行ポリシー制限
  • 監査ログの有効化と監視

ワイパー マルウェア (Wiper Malware)

定義: ファイルを暗号化ではなく、完全に削除するマルウェア

特徴:

  • ランサムウェアと異なり、復旧不可
  • 身代金ではなく、純粋な破壊が目的
  • 国家レベルの攻撃に利用

例: WhisperGate(ウクライナ侵攻時に使用)

対策:

  • オフラインバックアップ(ネットワーク分離)
  • 定期的なバックアップテスト
  • インシデント対応計画

ウーティスルマルウェア (Footpath Rootkit など)

定義: システムの正当な機能を悪用して隠蔽するマルウェア

対策:

  • カーネルレベルの監視(HIDS: Host-based Intrusion Detection System)
  • セキュアブート検証
  • メモリダンプ分析

11. 可視的な兆候:マルウェア感染の警告信号

flowchart TB S["システムが感染している可能性のある兆候"] --> P["パフォーマンス低下 理由不明の CPU / メモリ使用量増加"] S --> C["通信異常 不可解な外部通信、ネットワーク活動"] S --> O["動作異常 起動時間の延長、クラッシュ頻発"] S --> T["セキュリティツール無効化 アンチウイルス勝手に無効化"] S --> NP["新規プロセス 身に覚えのないプロセスが実行中"] S --> F["ファイル異常 ファイルが消滅、拡張子が変わる (.locked 等)"] S --> A["広告や迷惑メッセージ ブラウザにポップアップが増加"]

マルウェア対策の多層防御戦略

graph TD M1["侵入防止 / Prevention / ファイアウォール・メール/Webフィルタリング・ユーザー教育・パッチ管理"] M2["検出 / Detection / アンチウイルス・EDR・SIEM・動作分析"] M3["隔離・対応 / Containment and Response / 感染システムの隔離・インシデント対応チーム起動・取引先への通知"] M4["復旧 / Recovery / バックアップから復元・クリーンな状態の確認・根本原因分析"] M1 --> M2 M2 --> M3 M3 --> M4

ネットワーク攻撃

初心者向けメモ
ネットワーク攻撃は、アプリそのものではなく通信の流れや接続の仕組みを狙う攻撃です。「通信を盗む」「通信を偽装する」「通信を止める」に分けて考えると追いやすくなります。
要点
ネットワーク攻撃は、盗聴、なりすまし、妨害の3系統で整理すると見通しがよくなります。どのレイヤーで起きるかを意識すると、対策の置き場所も分かりやすくなります。

ネットワークセキュリティの基本

ネットワーク攻撃とは: データが転送される過程で、通信をインターセプト(横取り)・改ざん・破壊したり、サービスの可用性を奪う攻撃

ネットワーク攻撃と OSI(Open Systems Interconnection)レイヤー(図解)

graph LR subgraph OSI["OSI参照モデル"] L7["L7: アプリケーション層"] L4["L4: トランスポート層"] L3["L3: ネットワーク層"] L2["L2: データリンク層"] end HTTPFlood["HTTP Flood / L7攻撃"] Slowloris["Slowloris / L7攻撃"] SYNFlood["SYN Flood / L4攻撃"] DNSQuery["DNS Flood / L4攻撃"] IPSpoof["IP Spoofing / L3攻撃"] ARPSpoof["ARP Spoofing / L2攻撃"] HTTPFlood --> L7 Slowloris --> L7 SYNFlood --> L4 DNSQuery --> L4 IPSpoof --> L3 ARPSpoof --> L2

主要なネットワーク攻撃

1. DDoS攻撃(分散型サービス妨害)

定義: Distributed Denial of Service

複数のコンピュータから同時に標的システムへ大量のトラフィックを送信し、サービスをダウンさせる攻撃

一般的なDoS攻撃との違い:

項目 DoS DDoS
攻撃元 1台のコンピュータ 複数(数百~数百万)
検出 容易 困難
対策 攻撃元をブロック 複雑
被害 小~中規模 大規模

DDoS攻撃のタイプ:

L3/L4攻撃(容量ベース)
目的:ネットワークパイプを飽和
方法:大量のパケットを送信

・SYN Flood
  TCP 3ウェイハンドシェイクを悪用
  SYNパケットで接続リソースを枯渇

・UDP Flood
  UDPパケットで帯域を浪費

・ICMP Flood
  ping(ICMP)で帯域を消費

SYN Flood の仕組み:

1. 攻撃者が大量のSYNパケットを送信
2. 標的は各SYNに対しSYN-ACK返信
3. 攻撃者は確認ACKを返さない(半開状態)
4. 接続テーブルが満杯になり、正規の接続ができなくなる

時系列:
[SYN] → [SYN] → [SYN] → ...(攻撃者から)
      ↓      ↓      ↓
   [SYN-ACK](標的が応答、ただし応答ACK来ない)
      ↓
接続リソース枯渇 → サービス停止
L7攻撃(アプリケーションベース)
目的:アプリケーション層で処理を遮断
方法:アプリケーションの脆弱性や処理負荷を悪用

・HTTP Flood
  HTTP GETリクエストを大量送信(見た目は正常)

・Slowloris攻撃
  接続を遅くゆっくり送信、接続を開いたままにして枯渇

・DNS Query Flood
  DNSクエリを大量送信

実際のDDoS攻撃規模:

  • 2016年 Mirai攻撃 — 1.2 Tbps(テラビット/秒)
  • 2020年 AWS DDoS — 2.3 Tbps
  • 2021年 Google DDoS — 5.3 Tbps(当時最大)

DDoS攻撃の利用目的:

目的 説明
身代金要求(Ransom) サービス復旧の対価として金銭要求
競合他社妨害 ライバル企業のサービス妨害
ノイズとしての利用 本当の目的からの注意をそらす
抗議・活動主義 政治的な意思表示(Hacktivism)
データセンター停止 インフラストラクチャへの攻撃

DDoS対策:

// Node.js での DDoS 対策実装例

const rateLimit = require('express-rate-limit');

// レート制限:1分あたりのリクエスト数を制限
const limiter = rateLimit({
  windowMs: 60 * 1000,  // 1分
  max: 100,              // 最大100リクエスト
  message: 'Too many requests, please try again later',
  standardHeaders: true,
  legacyHeaders: false
});

app.use(limiter);

// さらに厳しい制限:ログインエンドポイント用
const loginLimiter = rateLimit({
  windowMs: 15 * 60 * 1000,  // 15分
  max: 5,                     // 5試行まで
  skipSuccessfulRequests: true
});

app.post('/login', loginLimiter, (req, res) => {
  // ログイン処理
});

組織的なDDoS対策:

  • DDoS対策専門ツール(Cloudflare、Akamai等)
  • WAF(Web Application Firewall)
  • ネットワークセグメンテーション
  • ISPレベルでの流入トラフィック監視
  • 事前にいくつかのISPと契約(バイパスルート確保)

2. 中間者攻撃 (Man-in-the-Middle / MitM)

定義: 攻撃者が通信の途中に割り込んで、送受信側に知られないうちに通信を盗聴・改ざんする攻撃

攻撃のシナリオ:

正規の通信(攻撃なし):
Aさん ←→ Bさん

MitM攻撃:
Aさん ←→ [攻撃者] ←→ Bさん
        ↑           ↑
   Aからのデータを盗聴・改ざん
   Bからのデータを盗聴・改ざん
   
双方に「相手と通信している」と思わせる

MitM攻撃の種類:

ARP スプーフィング
WifiネットワークでのMitM

攻撃手順:
1. 攻撃者がARP(Address Resolution Protocol)を偽造
2. ネットワークに「私はGatewayだ」と嘘を放送
3. デバイスが攻撃者を経由して通信
4. すべての通信が攻撃者に見える

IPv4アドレス ←→ MACアドレス の対応関係を改ざん

実装例(教育目的):

# ARPスプーフィング(scapy使用、教育目的のみ)
# 実際に悪用しないでください

from scapy.all import Ether, ARP, sendp
import time

def spoof(target_ip, spoof_ip):
    """
    target_ip: 標的のIPアドレス
    spoof_ip: なりすまし対象のIPアドレス
    """
    # 標的に「spoof_ipは私だ」と嘘をつく
    arp_packet = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(
        pdst=target_ip,
        psrc=spoof_ip,
        op=2  # is-at(応答)
    )
    sendp(arp_packet, verbose=False)
SSL/TLS 中間者攻撃
HTTPS通信をインターセプト

攻撃者が自分の証明書を使用して通信を仲介

被害者 ←→ [攻撃者(偽の証明書)] ←→ サーバー

被害者はHTTPSと思っているが、
実は攻撃者が間に入っている
DNS スプーフィング
DNS応答を偽造

被害者:example.com は何IPですか?
DNS:192.168.1.1」(正しい)

攻撃版:
被害者:example.com は何IPですか?
攻撃者が偽DNS応答:「192.168.1.100」(攻撃者のサーバー)

結果:被害者が偽サイト(フィッシングサイト等)へ接続

MitM攻撃の対策:

flowchart TB M1["HTTPS/TLS の使用 すべての通信を暗号化 中間で改ざんされても読めない"] --> M2["証明書のピン留め 事前に許可する証明書を指定 不正な証明書を即座に拒否"] M2 --> M3["VPN / TLS VPN の使用 すべてのトラフィックを暗号化"] M3 --> M4["DNSSEC の導入 DNS 応答を暗号的に検証"] M4 --> M5["ARP テーブル監視 不正な ARP 応答を検知"] M5 --> M6["公開鍵基盤 (PKI) デジタル証明書による認証"]

実装例:

// Node.js で HTTPS を強制

const https = require('https');
const fs = require('fs');
const express = require('express');

const app = express();

// HTTP → HTTPS リダイレクト
app.use((req, res, next) => {
  if (req.header('x-forwarded-proto') !== 'https') {
    res.redirect(`https://${req.header('host')}${req.url}`);
  } else {
    next();
  }
});

// HTTPS サーバー起動
const options = {
  key: fs.readFileSync('/path/to/key.pem'),
  cert: fs.readFileSync('/path/to/cert.pem')
};

https.createServer(options, app).listen(443);

3. ポートスキャン

定義: 対象システムのネットワークポートを調査し、どのサービスが実行されているかを探る偵察活動

ポートとは? ネットワーク通信の「窓口」(0~65535の番号で識別)

よく使われるポート:
・80   → HTTP (Webサイト)
・443  → HTTPS (暗号化Webサイト)
・22   → SSH (リモートシェル)
・3306 → MySQL (データベース)
・5432 → PostgreSQL (データベース)
・3389 → RDP (Windows Remote Desktop)

ポートの状態:

状態 意味
Open(開放) サービスがリッスン中、接続可能
Closed(閉鎖) サービスが実行されていない
Filtered(フィルタリング) ファイアウォール等で遮断されている
Unfiltered(フィルタリングなし) リーチ可能だが状態不明

ポートスキャンの種類:

TCPコネクトスキャン
各ポートに完全なTCP接続を試みる
(最も遅いが、検出可能性も高い)

1. ターゲットに SYN パケット送信
2. SYN-ACK 返信あれば、ポートは Open
3. ACK を送信して接続確立
4. 完全な接続がログに記録される
SYN スキャン
TCP 3ウェイハンドシェイクを完了しない
(「ハーフオープン」スキャン)

1. SYN パケット送信
2. SYN-ACK 返信あれば Open
3. 接続を完了しない(RST で切断)
4. ログに残りにくい(昔)

現在は検出されることも多い
UDP スキャン
UDPプロトコルでポートを調査
(ICMPレスポンスを基に判定)

実装例(nmap):
nmap -sU ターゲット

有名なスキャンツール:

  • nmap — 業界標準のポートスキャナ
  • Wireshark — ネットワークパケット解析
  • Masscan — 超高速マルチスレッドスキャナ
  • Shodan — インターネット上のデバイスを検索

ポートスキャンの検出と対策:

検出:
・IDS(Intrusion Detection System: 侵入検知システム)で異常なパケットパターン検知
・ファイアウォールログで大量の接続試行を記録
・SIEM(Security Information and Event Management。複数システムのログを集約し、相関分析で異常を見つける仕組み)で関連イベントを相関分析

対策:
・ファイアウォール設定で不要なポートを閉鎖
・デフォルトサービスポートを変更(SSHを2222等)
  ※ただしセキュリティ向上効果は限定的
・非常に疑わしいスキャンパターンをブロック
・IDS/IPS でアラート生成

ソーシャルエンジニアリング攻撃

初心者向けメモ
セキュリティ事故は、システムの穴だけでなく人の判断ミスからも起きます。この章は「だます攻撃」にどう気づくかを見る章です。
要点
ソーシャルエンジニアリングは、技術より先に人の判断を崩しにくる攻撃です。メール、電話、SNS、対面と手段は違っても、焦らせる、信じ込ませる、急がせる流れは共通しています。

概要

ソーシャルエンジニアリングとは?

技術的な脆弱性ではなく、人間の心理や信頼を悪用して、機密情報を盗んだり、システムアクセスを奪う攻撃。

特徴:

  • 技術的スキルが不要な場合が多い
  • 攻撃の成功率が高い(人間は最も脆弱)
  • 検出が難しい(技術ツールでは検知できない)

補足: 実務では、フィッシングや認証情報の窃取が初期侵入の主要要因として繰り返し報告されます。正確な比率は調査機関や対象業界で変わるため、年次レポートと併読してください。

ソーシャルエンジニアリング攻撃フロー(図解)

graph TD Attacker["攻撃者の目的 / 認証情報の盗難"] Attacker --> Tactic["心理的タクティック"] Tactic --> Authority["権威性 / IT部門です"] Tactic --> Urgency["緊急性 / 今すぐ必要"] Tactic --> Fear["恐怖 / ロックされます"] Tactic --> Trust["信頼 / 前から知ってる"] Authority --> Method1["メール・電話で問い合わせ"] Urgency --> Method2["緊急メッセージ"] Fear --> Method3["脅迫メール"] Trust --> Method4["なりすまし"] Method1 --> Victim["被害者"] Method2 --> Victim Method3 --> Victim Method4 --> Victim Victim -->|認証情報入力| Success["攻撃成功"]

ソーシャルエンジニアリングの種類

1. フィッシング (Phishing)

定義: 正規の組織を装ったメール、SMS(Short Message Service)、電話で個人情報やクレデンシャルを騙し取る

フィッシングメールの特徴:

典型的なフィッシングメール例

From: support@amazon.co.jp
件名: 【重要】お客様のアカウントが制限されました

本文:
セキュリティ上の理由により、
お客様のAmazonアカウントが一時的に制限されています。

以下のリンクをクリックして、
すぐに確認・再認証してください:

[このリンクをクリック]
↑ このリンクが詐欺サイト(example.jp ではなく attacker.com)

----------
⚠️ 赤い旗:
・緊急性を強調(制限、期限切れ、問題が発生)
・クリックを促す
・公式な見た目だが、ドメインが異なる
・個人情報入力フォーム

フィッシングのバリエーション:

種類 方法
Email Phishing メール 銀行装う詐欺メール
Spear Phishing 標的化メール 特定個人の情報を含む
Vishing 音声通話 「ITサポート」と称して電話
Smishing SMS/テキスト 「確認が必要」というSMS
Clone Phishing メール複製 正規メールをコピーして再送信

Spear Phishing の例:

一般的なフィッシング:
「すべてのAmazonユーザーへ」

Spear Phishing:
「John Smith さんへ」
・名前を知っている
・部門を知っている
・最近の取引を言及
・個人的な詳細を含む

一般的なばらまき型より信じ込ませやすく、被害につながりやすい

フィッシング対策:

// メール検証・フィルタリング実装例

const validateEmailSignature = (email) => {
  // SPF, DKIM, DMARC を検証
  
  // 1. SPF (Sender Policy Framework)
  // 「example.com からのメール」が本物か確認
  
  // 2. DKIM (DomainKeys Identified Mail)
  // メール署名を暗号的に検証
  
  // 3. DMARC (Domain-based Message Authentication, Reporting, and Conformance)
  // SPF + DKIM の組み合わせで強力な認証
};

// メール内のリンクを検証
const validateLinks = (emailBody) => {
  const links = emailBody.match(/href=["']([^"']+)["']/g);
  
  links.forEach(link => {
    const displayedURL = link.display;
    const actualURL = link.href;
    
    // 表示URL と実際URL が異なるかチェック
    if (displayedURL !== actualURL) {
      flagSuspicious();
    }
  });
};

ユーザー教育:

flowchart TB P["フィッシング詐欺の見分け方"] --> E["送信者のメールアドレスを確認 support@amazn.co.jp / amazon-security@attacker.com"] P --> H["ホバーして実リンク先を確認 表示: amazon.com / 実際: attacker.com"] P --> D["正規サイトへ直接アクセス ブックマークや直接入力で公式サイトへ"] P --> C["違和感を感じたら確認 銀行に直接電話 / アカウント画面で確認"] P --> F["添付ファイルは疑わしい .exe, .zip, .xlsm は特に注意 来源不明のファイルは開かない"]

2. スプーフィング (Spoofing)

定義: 信頼できるソースになりすまして、ユーザーを騙す攻撃

スプーフィングの種類:

メールアドレススプーフィング
flowchart TB S["FROM: president@example.com に見せかける"] --> M["SMTP には送信者検証がない"] --> C["対策: SPF / DKIM / DMARC メール認証プロトコル"]
IPアドレススプーフィング
攻撃者が別のIPアドレスになりすまし
パケットの送信元IPを偽造する

BGPハイジャッキング:
攻撃者が BGP(Border Gateway Protocol)を悪用
ネットワークルーティングを乗っ取る

例:CloudflareのBGP障害(2020年)
→ 某国のスポーフィングでインターネットが一時ダウン
DNS スプーフィング
前述(MitM攻撃内で説明)
Caller ID スプーフィング
電話のCallerIDを詐欺者の好きな番号に設定
「銀行です」と偽って電話

技術的背景:
・PSTN(Public Switched Telephone Network)は
  送信者を検証しない
・SIP(Session Initiation Protocol)で容易に変更可能

例:Vishing攻撃で利用
「あなたの銀行です。セキュリティ確認のため...」
実は詐欺犯

スプーフィング対策:

flowchart TB E["メール: SPF / DKIM / DMARC"] --> T["電話: STIR/SHAKEN 通信事業者が導入中"] --> I["IP: Unicast リバースパス検証"] --> D["DNS: DNSSEC"]

3. プリテキスティング (Pretexting)

定義: もっともらしい架空のシナリオを作成して、ターゲットが情報を開示するよう誘導する

例シナリオ:

攻撃者:「こんにちは、給与システムのITです。
        パスワードリセットのため、現在のパスワードを
        教えていただけますか?」

被害者:「分かりました...」

現実:攻撃者がパスワードを聞き出した

プリテキストの構成要素:

  1. 信頼できる身分の確立

    • 「私は会社のITサポートです」
    • 「Amazonのセキュリティチームです」
    • 「銀行の調査部門です」
  2. 説得力のある理由

    • セキュリティ侵害の調査
    • 定期的なシステムメンテナンス
    • アカウント検証
  3. 心理的プレッシャー

    • 緊急性(「すぐに対応が必要」)
    • 権威性(「これは必須です」)
    • 恐怖(「アカウントがロックされます」)

実例(大企業へのプリテキスト攻撃):

攻撃フロー:
1. HR部門のスタッフに成りすまし
   「新入社員のオンボーディング確認」
2. IT部門のスタッフを装う
   「セキュリティ監査のため、アクセス権確認」
3. 法務部からのメール
   「機密文書アクセステスト」

複数の部門の認識を巧みに利用
→ 被害者が統一された身分確認をしない
→ 情報開示

プリテキスティング対策:

flowchart TB O["組織的対策"] --> I["身分確認プロセスの確立 情報要求時は必ず確認 直接連絡先で検証"] O --> D["ドキュメント整備 社内手続きを明確化 誰が何を要求できるか定義"] O --> C["文化醸成 確認は恥ずかしくない 疑問を持つことを推奨"] O --> T["技術的対策"] T --> L["情報アクセスログ 誰がいつ何にアクセスしたか記録"] T --> P["DLP 機密情報の漏洩を検知"] T --> A["アクセス制御 必要最小限の権限のみ付与"]

4. ベイティング (Baiting)

定義: 物理的または仮想のアイテムで誘惑し、ユーザーが悪意あるアクションを取るよう仕向ける攻撃

物理的ベイティング:

USB スティック ベイティング(最も有名)

攻撃者が駐車場や会社の入り口に
感染ファイルが入った USB を落とす

「Lost USB - PRIVATE」というラベル

被害者が拾って接続
→ マルウェア自動実行
→ システム感染

対策:
✓ 外部デバイスのオートラン無効化
✓ USB使用ポリシー(禁止)
✓ ユーザー教育

仮想的ベイティング:

魅力的なファイル名のダウンロード

例:
・「2024給与表.xlsx」
・「セキュリティアップデート.exe」
・「CEO給与.xlsx」
・「ボーナス支給予定.pdf」

ファイルは実はマルウェア

対策:
✓ ファイルタイプ検証(拡張子だけでなく)
✓ サンドボックス実行
✓ デジタル署名検証

Web ベイティング:

魅力的なテキストリンク

例:
「有名人がこれを無料でダウンロード」
「激安チケット」
「クリック → $50ギフトカード」

リンク先:
マルウェア、詐欺ページ、ランサムウェア

対策:
✓ リンク検証(ホバーして確認)
✓ URLレピュテーション検査
✓ Web フィルタリング

対策実装:

// Web ベイティング防止実装例

// 1. ダウンロードファイル検証
app.post('/download', (req, res) => {
  const file = req.body.file;
  
  // ファイルタイプを Magic Number で検証
  const actualType = detectFileType(file);
  const claimedType = mime.getType(file.name);
  
  if (actualType !== claimedType) {
    return res.status(400).json({ error: 'File type mismatch' });
  }
  
  // ファイルスキャン
  const scanResult = await scanFileWithAntivirus(file);
  if (scanResult.infected) {
    return res.status(400).json({ error: 'Malware detected' });
  }
  
  res.download(file);
});

// 2. リンク検証
const validateLink = (url) => {
  // URLレピュテーション照会
  const reputation = checkURLReputation(url);
  
  if (reputation.isKnownMalicious) {
    showWarning('This link may be dangerous');
    return false;
  }
  
  return true;
};

5. その他のソーシャルエンジニアリング

Quid Pro Quo (見返りのための詐欺)
「何かを与える代わりに、情報をください」

例:
攻撃者:「HRです。給与計算システムのアップグレードのため、
        全従業員のID番号が必要です。
        情報を提供した方には$50のアマゾンギフトカード」

効果:
利益の約束で情報開示を促す
リバースソーシャルエンジニアリング
攻撃者が「助者」として現れる

例:
1. 攻撃者が偽のシステムエラーを作成
2. ユーザーがサポートに連絡
3. 攻撃者が「サポート」として応答
4. 「対策のため、これを実行して」とマルウェアを指示

ユーザーが攻撃者に連絡するよう仕向ける

ソーシャルエンジニアリング対策の統合戦略

graph TD S1["層1: 技術的防御 / Technical / MFA・SPF/DKIM/DMARC・メールフィルタリング・Webフィルタリング・EDR導入"] S2["層2: 管理的防御 / Administrative / ポリシー策定・最小権限の原則・アクセス制御・監査ログ"] S3["層3: 人的防御 / Human / セキュリティ意識向上トレーニング・定期的なフィッシング訓練・事件報告文化の構築・報酬プログラム"] S1 --> S2 S2 --> S3

暗号化とパスワード攻撃

初心者向けメモ
ここでは「秘密を守る仕組み」と「その仕組みを破ろうとする攻撃」をセットで見ます。パスワード、ハッシュ化、暗号化の違いを意識すると理解しやすくなります。
要点
この章では、守る仕組みと破る手口を並べて見ます。特に `暗号化`、`ハッシュ化`、`認証` は役割が違うので、混同しないことが重要です。

パスワード攻撃の種類

1. ブルートフォース攻撃 (Brute Force Attack)

定義: パスワードのあらゆる組み合わせを試行して、正しいパスワードを探す攻撃

計算量の例:

パスワードの長さと可能な組み合わせ数:

1文字:  26字  = 26通り
2文字:  26²   = 676通り
3文字:  26³   = 17,576通り
4文字:  26⁴   = 456,976通り
8文字:  26⁸   = 208,827,064,576通り(約2.08億)
12文字: 26¹²  = 95,428,956,661,682,176通り(約95兆)

大文字+小文字+数字+特殊文字 の場合:
8文字:  94⁸   ≈ 6.1 × 10¹⁵通り

攻撃の現実性:

GPU での試行速度は、利用するハードウェア、ハッシュアルゴリズム、
ソルトの有無、パスワードクラッキング設定で大きく変わる

単純パスワード破解時間:
・8文字(小文字のみ): < 1秒
・10文字(大小混在): 数秒~分
・12文字(複雑): 数時間~日
・16文字(複雑): 数ヶ月~数年

ブルートフォース攻撃の実装イメージ:

# ブルートフォース攻撃(教育目的、実際に実行しないでください)

import itertools
import string
import hashlib

def brute_force_password(target_hash, password_length=8):
    """
    target_hash: 破るべきハッシュ値
    password_length: パスワード長
    """
    characters = string.ascii_lowercase + string.digits
    attempts = 0
    
    for password in itertools.product(characters, repeat=password_length):
        password_str = ''.join(password)
        password_hash = hashlib.sha256(password_str.encode()).hexdigest()
        attempts += 1
        
        if password_hash == target_hash:
            return password_str, attempts
        
        # 進捗表示(毎100万試行)
        if attempts % 1000000 == 0:
            print(f"{attempts:,} 試行中...")
    
    return None, attempts

# 実行例(実際には実行しない)
# result, attempts = brute_force_password(target_hash)
# print(f"Found: {result} in {attempts} attempts")

対策:

flowchart TB P["強力なパスワード要件 最小 12 文字以上 大小文字 + 数字 + 特殊文字 予測可能なパターンを避ける"] P --> L["アカウントロックアウト N 回失敗後にロック 時間経過または管理者操作で解除 攻撃者の試行を制限"] L --> R["レート制限 1 分あたりのログイン試行数を制限 DDoS 攻撃の軽減にも有効"] R --> M["多要素認証 (MFA) パスワードだけでは不十分 2 番目の認証方法が必須"]

実装例:


```javascript
// ログイン試行の監視と制限

const failedAttempts = new Map();

app.post('/login', (req, res) => {
  const username = req.body.username;
  const ip = req.ip;
  const key = `${username}:${ip}`;
  
  // 過去の失敗試行を確認
  const attempts = failedAttempts.get(key) || { count: 0, timestamp: Date.now() };
  
  // 1時間以内に5回失敗したらロック
  if (Date.now() - attempts.timestamp < 3600000 && attempts.count >= 5) {
    return res.status(429).json({
      error: 'Too many failed attempts. Try again later.'
    });
  }
  
  // ログイン処理
  const user = authenticateUser(username, req.body.password);
  
  if (!user) {
    // 失敗をカウント
    attempts.count++;
    attempts.timestamp = Date.now();
    failedAttempts.set(key, attempts);
    
    return res.status(401).json({ error: 'Invalid credentials' });
  }
  
  // 成功時は記録をリセット
  failedAttempts.delete(key);
  res.json({ success: true, token: generateToken(user) });
});

2. 辞書攻撃 (Dictionary Attack)

定義: ブルートフォースと異なり、実際に使われる可能性の高い単語や既知のパスワードリストを試行する攻撃

有名なパスワード漏洩データベース:

2013 Adobe 漏洩
   600万パスワード

2016 Yahoo 漏洩
   5億アカウント

2019 Collection #1
   7.73億メールアドレス+パスワード

2021 LinkedIn 漏洩
   7億ユーザーのメール+名前+電話番号

これらの情報は辞書攻撃用のリストに組み込まれる

攻撃プロセス:

flowchart TB S1["1. 漏洩パスワードリスト取得 ダークネット、Pastebin 等"] --> S2["2. 頻出順にソート password, 123456, qwerty など"] S2 --> S3["3. 対象アカウントで試行 mail@example.com + password mail@example.com + 123456 ..."] S3 --> S4["4. マッチしたら侵害 クレデンシャルスタッフィング"]

よく使われるパスワード TOP 10(実際のデータ):

  1. password
  2. 123456
  3. 12345678
  4. qwerty
  5. abc123
  6. monkey
  7. 1234567
  8. letmein
  9. trustno1
  10. dragon

対策:

flowchart TB U["ユーザー教育 予測可能なパスワードを避ける"] --> V["パスワード検証 既知の悪いパスワード一覧でチェック Have I Been Pwned API 利用"]

実装例:


```javascript
// Have I Been Pwned API を使用してチェック

const crypto = require('crypto');
const fetch = require('node-fetch');

async function checkPasswordBreached(password) {
  // パスワードのSHA-1ハッシュを計算
  const hash = crypto.createHash('sha1').update(password).digest('hex').toUpperCase();
  
  // 最初の5文字を送信(プライバシー保護)
  const prefix = hash.slice(0, 5);
  const suffix = hash.slice(5);
  
  const response = await fetch(`https://api.pwnedpasswords.com/range/${prefix}`);
  const data = await response.text();
  
  // 返されたハッシュに一致するか確認
  if (data.includes(suffix)) {
    return true;  // ブリーチ済みパスワード
  }
  
  return false;  // 安全
}

app.post('/register', async (req, res) => {
  const password = req.body.password;
  
  // パスワードがブリーチ済みかチェック
  const isBreached = await checkPasswordBreached(password);
  
  if (isBreached) {
    return res.status(400).json({
      error: 'This password has been exposed in a data breach. Please choose another.'
    });
  }
  
  // ユーザー登録処理続行
});

3. レインボーテーブル攻撃 (Rainbow Table Attack)

定義: 事前に計算した膨大なハッシュ値テーブルから、盗んだパスワードハッシュに対応する元のパスワードを素早く検索する攻撃

仕組み:

従来のブルートフォース:
パスワード "password123" を入力
   ↓
ハッシュ計算 SHA256("password123") = 0x1a2b3c...
   ↓
盗んだハッシュと比較
   ↓(毎回計算が必要なので遅い)

レインボーテーブル:
事前に計算済みテーブル:
  password    → 0x1a2b3c...
  1234560x4d5e6f...
  qwerty      → 0x7g8h9i...
  ...
   ↓
盗んだハッシュ 0x1a2b3c... を検索
   ↓(テーブル検索は非常に速い)
即座に "password" が一致

特徴:
✓ ハッシュ値があれば即座にパスワード発見可能
✓ 計算は事前にすべて完了
✓ 数GB~TB規模のテーブル

有名なレインボーテーブル:

flowchart TB S["サイズ: 1-15 文字の全組み合わせ 900GB 以上"] --> U["用途 MD5, SHA-1, NTLM などの弱い関数対象"]

対策:Salting(ソルト化)とHashing(ハッシング):

問題:
password → SHA256("password") = 0x5e884...

同じパスワードなら同じハッシュ
→ レインボーテーブルで検索可能

解決策:Salt を追加

password + salt → SHA256("password" + salt) = 0x7g9h2...
password + salt → SHA256("password" + salt) = 0x9k1m3...
(salt が異なれば、ハッシュも異なる)

レインボーテーブルは無効化
(各ユーザーごとに異なるハッシュ)

実装例:

// bcrypt で自動的に salt が追加される

const bcrypt = require('bcryptjs');

// ユーザー登録時
async function registerUser(username, password) {
  // bcrypt が自動的に salt を生成してハッシング
  const hashedPassword = await bcrypt.hash(password, 10);
  //         ↑ salt ラウンド数(高いほど安全&遅い)
  
  // hashedPassword 例:
  // $2b$10$O4x6RZpQbVF8wQAhO3XFBuKeOlKfZGlXYrM0Y0Y2Y0Y0Y0Y0Y0Y...
  //  ↑    ↑  ↑ salt (salt rounds, salt値 を含む)
  //  version round   
  
  db.save({ username, hashedPassword });
}

// ログイン時
async function loginUser(username, password) {
  const user = db.findByUsername(username);
  
  // 入力パスワードとハッシュを比較
  const isMatch = await bcrypt.compare(password, user.hashedPassword);
  
  if (isMatch) {
    return { success: true, token: generateToken(user) };
  }
  
  return { success: false };
}

// ⚠️ 注意:MD5, SHA-1は password hashing に使用してはいけない
// NG: var hash = require('crypto').createHash('sha1').update(password).digest('hex');
// OK: var hash = await bcrypt.hash(password, 10);

推奨される Password Hashing 関数:

関数 用途 ステータス
bcrypt パスワード保存 ✅ 推奨
argon2 パスワード保存 ✅ 推奨(より新しい)
scrypt パスワード保存 ✅ 推奨
PBKDF2 パスワード導出 ⚠️ 許容
SHA-256 非パスワード用途 ⚠️ password不可
MD5 - ❌ 使用禁止
SHA-1 - ❌ 使用禁止

その他の暗号化関連攻撃

サイドチャネル攻撃 (Side-Channel Attack)

暗号化アルゴリズム自体ではなく、
実装の「副作用」を悪用

例:
・タイミング攻撃 — 処理時間の差異から情報推測
・キャッシュ攻撃 — CPUキャッシュアクセスパターン
・電力分析 — 消費電力の揺らぎから情報抽出
・音響暗号解析 — 電子機器の音声周波数パターン

例:タイミング攻撃
# タイミング攻撃の例(簡略版)

# ❌ 脆弱な実装:字句比較
def check_password_weak(input_pwd, stored_pwd):
    return input_pwd == stored_pwd  # 最初の文字で不一致なら即終了
    # 処理時間がパスワードの一致度で変わる

# 入力が "password1" の場合:
#   正答 "password123"
#   比較時間が短い → "p" だけ一致
# 入力が "passwordX" の場合:
#   正答 "password123"
#   比較時間が長い → "passwor" までは一致、次で異なる
#
# 攻撃者が処理時間を測定 → パスワードを段階的に特定

# ✅ 安全な実装:定時間比較
import secrets
import hmac

def check_password_safe(input_pwd, stored_pwd):
    # hmac.compare_digest = 定時間で比較
    return hmac.compare_digest(input_pwd, stored_pwd)
    # 入力内容に関わらず、常に同じ時間

対策:

✓ 定時間比較(Constant-Time Comparison)
✓ 実装時に CPU タイミングを意識
✓ ハードウェアレベルでの保護
✓ 継続的なセキュリティ監査

高度な攻撃:APTとゼロデイ

初心者向けメモ
APT やゼロデイは、誰でもすぐ遭う攻撃というより、重要組織や高価値な標的に対して使われやすい高度な攻撃です。まずは「普通の攻撃より発見しにくく、準備が長い」と捉えると十分です。
要点
`APT` は長期潜伏型、`ゼロデイ` は未修正脆弱性の悪用です。どちらも「検知が難しく、初動が遅れると被害が大きい」という点が共通しています。

Advanced Persistent Threat (APT: 高度で持続的な脅威)

定義: 高度で持続的な脅威。国家支援または組織的な犯罪グループが、数ヶ月~数年にわたって対象ネットワークに潜入し、情報窃取や破壊を行う攻撃

APTの4つの特性:

      高  度  な  (Advanced)
      ↓
    複雑なマルウェア、ゼロデイ悪用
    高度な偵察・エスケープ
    多段階の攻撃チェーン

      継  続  的  (Persistent)
      ↓
    数ヶ月~数年の潜入期間
    バックドア複数配置
    検出回避策の常時改良

      標  的  型  (Targeted)
      ↓
    特定の組織・個人を狙う
    事前調査の徹底
    カスタマイズされた攻撃

      脅  威  (Threat)
      ↓
    悪意ある意図
    実行能力
    攻撃機会

APT 攻撃のライフサイクル

flowchart TB A1["段階1: 偵察 ターゲット組織の調査 従業員情報収集 技術スタック特定 ネットワーク構成把握 脆弱性の事前スキャン"] --> A2["段階2: 初期侵入 スピアフィッシング ドライブバイダウンロード 脆弱な VPN / RDP サプライチェーン経由の侵害 ゼロデイ悪用"] A2 --> A3["段階3: 確立・永続化 バックドア配置 webshell インストール スケジュール済みタスク設定 OS カーネルレベルの変更 定期的なリコネクション設定"] A3 --> A4["段階4: 横展開・エスカレーション 内部ネットワーク探索 認証情報盗難 管理者権限の取得 認可されていないシステムへアクセス ドメイン管理者権限の奪取"] A4 --> A5["段階5: 情報蒐集 目的データの特定 機密文書の検索 データベースのダンプ メールの大量抽出 知的財産・技術情報窃取"] A5 --> A6["段階6: カバーアップ・撤退 ログの削除・改ざん マルウェアの痕跡消去 使用した認証情報の埋没 撤退ルート確保"]

有名なAPT グループと攻撃

グループ名 属性推定 特徴 有名な攻撃
APT28 (Fancy Bear) ロシア(GRU) 高度なカスタムマルウェア 2016年 DNC 侵害
APT29 (Cozy Bear) ロシア(SVR) ステルス重視 2020年 SolarWinds 供給チェーン攻撃
Lazarus Group 北朝鮮 ランサムウェア開発 2014年 Sony 攻撃、2017年 WannaCry
APT41 中国 ファイナンシャルゲイン重視 多数の金融機関侵害
Wizard Spider 犯罪シンジケート Trickbot, Ryuk運営 ランサムウェア配布

ゼロデイ (Zero-Day) 脆弱性と攻撃

定義: 開発者が知らない、または知っているが未修正のセキュリティ脆弱性。公開されていないため、防御策が存在しない。

用語の区別:

ゼロデイ脆弱性 = 未発見/未公開の脆弱性
ゼロデイ exploit = それを悪用するコード
ゼロデイ攻撃 = 脆弱性を実際に悪用する行為

    脆弱性発見 → (公開前) → 攻撃開始
    ← 0日(ゼロデイ)→

    脆弱性公開 → パッチ公開 → 脆弱性修正
    ← ゼロデイ期間 →

ゼロデイ攻撃の脅威

従来のセキュリティ対策が機能しない

シグネチャベース検出:✗
  → 既知のパターンをベース
  → ゼロデイは未知なので検出不可

パッチ適用:✗
  → パッチが存在しない
  → 修正は攻撃後に来る

既知の脆弱性対策:✗
  → ゼロデイは既知ではない

ゼロデイ の悪用フロー

flowchart TB Z1["ステップ1: 脆弱性の発見 セキュリティ研究者または攻撃者が発見"] --> Z2["ステップ2: 秘匿 攻撃者が情報を秘密にする デイゼロを独占"] Z2 --> Z3["ステップ3: exploit 開発 脆弱性を悪用するコード作成 APT グループが開発・保管"] Z3 --> Z4["ステップ4: 標的化攻撃 特定の高価値目標を攻撃 検出回避を優先"] Z4 --> Z5["ステップ5: 公開 (偶然) 研究者が発見 または攻撃者が放置しすぎて発見"] Z5 --> Z6["ステップ6: パッチ公開 開発者がアップグレード配布 ゼロデイ期間が終了"]

実例:SolarWinds サプライチェーン攻撃

2020年、SolarWinds Orion プラットフォーム侵害

流れ:
1. APT29 が SolarWinds のビルドシステムに侵入
2. バージョン 2020.2.1 に悪意あるコード挿入
3. 約18,000の SolarWinds 顧客が自動更新で感染
4. 米国政府機関、Fortune 500企業が侵害対象
5. 9ヶ月以上検出されず

被害者:
・Microsoft, Intel, Cisco, Malwarebytes
・米国財務省、商務省
・FBI, NSA, CIA 等の政府機関も侵害か

根本原因:
・供給チェーン経由の侵害
・ソフトウェア更新プロセスの信頼を悪用
・複数のゼロデイ脆弱性を使用

ゼロデイ防御戦略

flowchart TB N["不可能なこと ゼロデイを完全に防ぐ 修正プログラムは攻撃後にしか来ない"] --> R1["1. リスク最小化 ネットワークセグメンテーション 最小権限の原則 定期的なパッチ適用"] R1 --> R2["2. 検出・対応 EDR / SIEM / 異常検知 / 脅威インテリジェンス"] R2 --> R3["3. インシデント対応 事前計画 対応チーム訓練 定期的なシミュレーション ホットラインの確保"] R3 --> R4["4. Zero Trust アーキテクチャ すべてのアクセスを検証 信頼を前提にしない 継続的な監視"]

ゼロデイ対策の実装例:

// ゼロデイ対策:異常検知ベースの監視

class AnomalyDetector {
  constructor() {
    this.userBaselines = new Map();  // 通常の動作パターン
    this.threshold = 0.8;             // 異常スコアの閾値
  }
  
  // ユーザーの通常動作をプロファイリング
  buildUserBaseline(userId, activityLog) {
    const patterns = {
      accessTimes: this.extractAccessTimes(activityLog),
      dataAccess: this.extractDataAccessPatterns(activityLog),
      locations: this.extractLocations(activityLog),
      devices: this.extractDevices(activityLog)
    };
    this.userBaselines.set(userId, patterns);
  }
  
  // リアルタイムで異常を検知
  detectAnomaly(userId, currentActivity) {
    const baseline = this.userBaselines.get(userId);
    
    const anomalyScore = this.calculateAnomalyScore(
      baseline,
      currentActivity
    );
    
    // 異常スコアが高い場合
    if (anomalyScore > this.threshold) {
      this.logSecurityEvent({
        type: 'POTENTIAL_ZERO_DAY_ACTIVITY',
        userId: userId,
        anomalyScore: anomalyScore,
        activity: currentActivity,
        recommendation: 'INVESTIGATE'
      });
      
      // 即座にアラート発行
      this.triggerAlert(userId, anomalyScore);
      
      // 追加認証を要求
      return { allowed: false, requireMFA: true };
    }
    
    return { allowed: true };
  }
  
  calculateAnomalyScore(baseline, current) {
    // 複数の特徴から異常スコアを計算
    // (時間帯、データアクセスパターン、地域、デバイス等)
    
    let score = 0;
    
    // 時間帯の異常
    if (!baseline.accessTimes.includes(current.time)) {
      score += 0.3;
    }
    
    // データアクセスパターンの異常
    if (current.dataAccess > baseline.dataAccess * 5) {
      score += 0.4;  // 異常な量のデータアクセス
    }
    
    // 地域の異常(不可能な移動速度)
    if (this.isImpossibleLocationChange(baseline, current)) {
      score += 0.5;  // 数秒で別大陸への移動は物理的に不可能
    }
    
    return Math.min(score, 1.0);
  }
  
  isImpossibleLocationChange(baseline, current) {
    const lastLocation = baseline.lastLocation;
    const distance = this.calculateDistance(
      lastLocation.lat,
      lastLocation.lon,
      current.lat,
      current.lon
    );
    
    const timeDiff = (current.time - baseline.lastAccessTime) / 1000; // 秒
    const maxSpeed = 900; // m/s (Mach 3, 実現不可)
    const maxDistance = maxSpeed * timeDiff;
    
    return distance > maxDistance;
  }
  
  // ... その他のメソッド
}

// 使用例
const detector = new AnomalyDetector();

// ユーザーの通常動作をプロファイリング
detector.buildUserBaseline('user123', historicalActivityLog);

// ログイン要求時に検査
app.post('/login', (req, res) => {
  const currentActivity = {
    time: new Date().getHours(),
    location: req.geoip,
    device: req.headers['user-agent'],
    dataAccess: getExpectedDataAccess(req.user.role)
  };
  
  const result = detector.detectAnomaly('user123', currentActivity);
  
  if (result.requireMFA) {
    // MFA を要求
    res.json({ requireMFA: true });
  } else {
    // ログイン成功
    res.json({ success: true, token: generateToken(user) });
  }
});

Webセキュリティとの接続

初心者向けメモ
サイバーセキュリティ全体の中でも、Web は入力、認証、権限、表示、ブラウザ制御が密集する領域です。ここだけは個別に深掘りしたほうが理解しやすいため、専用の章を分けています。
要点
`14 サイバーセキュリティ` は広域の脅威と運用を扱い、`15 Webセキュリティ` は Web アプリ実装の脆弱性と対策を扱います。重複して覚えるより、全体像はこの章、実装の細部は次章、と役割を分けて読むのが自然です。
  • Web アプリの代表的脆弱性 XSSCSRFSQL インジェクションSSRFCORSCSP
  • 認証と認可の実装論 MFAJWTOAuth 2.0 / OIDC、セッション管理、Cookie 属性
  • ブラウザと HTTP の防御設定 HSTSX-Frame-OptionsReferrer-PolicyPermissions-Policy
  • 開発と診断の実践 OWASP Top 10OWASP ASVSOWASP WSTG、実装チェックリスト

詳しくは 15 Webセキュリティ を参照してください。


インシデント対応

初心者向けメモ
インシデント対応は、事故が起きてから慌てて考えるものではなく、事前に流れを決めておく運用です。「検知」「封じ込め」「復旧」の順で考えると把握しやすいです。
要点
インシデント対応は、技術調査だけでなく、判断、連絡、記録、復旧を含む運用プロセスです。事前に流れと責任分担を決めておくほど、初動が安定します。

インシデント対応計画(IRP)

定義: セキュリティ侵害や脅威が発生した際の組織的な対応手順

インシデント対応の5段階(図解)

graph TD Incident["セキュリティインシデント検知"] Incident --> P1["準備 / 対応チーム編成・連絡先確定・ツール準備・計画書作成"] P1 --> P2["検知・分析 / インシデント検知・基本情報収集・重大度判定・原因特定・チーム起動"] P2 --> P3["隔離・抑止 / 短期的隔離・中期的隔離・システム遮断・外部通知開始"] P3 --> P4["根絶・復旧 / マルウェア除去・パッチ適用・バックアップ復旧・アクセス制御更新"] P4 --> P5["事後対応 / RCA実施・ポストモーテム・再発防止策・プロセス改善"] P5 --> Resolved["インシデント解決"]

インシデント対応テンプレート

以下のテンプレートに出てくる IOCIndicator of Compromise の略で、侵害の痕跡を示す情報です。たとえば不審なハッシュ値、悪性ドメイン、攻撃者の IP アドレスC2 通信先などが該当します。

flowchart TB I["インシデント報告書テンプレート"] --> B1["1. インシデント基本情報 報告日時 / インシデント ID / 報告者 / 重大度レベル"] I --> B2["2. 事象の説明 検知日時 / 検知方法 / 影響システム / 原因 / 初期被害推定"] I --> B3["3. 対応状況 実施した対応 / 隔離措置 / 一時的緩和策 / 時系列"] I --> B4["4. 技術的詳細 攻撃ベクトル / 侵害対象 / IOC / C2 通信 / ログ情報"] I --> B5["5. 影響範囲 影響システム数 / ユーザー数 / データ / ビジネス影響 / 規制影響"] I --> B6["6. 外部連絡 通知先 / 規制当局 / メディア対応 / 顧客通知"] I --> B7["7. 根本原因分析 発生理由 / 検知できなかった理由 / 防止策"] I --> B8["8. 再発防止策 短期 / 中期 / 長期対策"] I --> B9["9. 教訓 組織として学んだこと / プロセス改善点 / フィードバック"]

セキュリティベストプラクティス

初心者向けメモ
この章は個別の攻撃手法ではなく、全体として事故を減らす考え方をまとめた章です。日々の運用で効く基本方針を確認する位置づけで読むとよいです。
要点
ベストプラクティスは、派手な対策より「基本を継続して守る」ための仕組みです。ゼロトラスト、サプライチェーン、クラウド運用は別々に見えても、根底では継続的な検証と最小権限につながっています。

2026年のセキュリティ重要戦略

1. ゼロトラスト セキュリティ

原則: すべてのアクセスを信頼できないものと仮定し、常に認証・認可・監視を実施

ゼロトラスト セキュリティアーキテクチャ(図解)

graph TB User["ユーザー"] Device["デバイス"] App["アプリケーション"] Data["データ"] User -->|"検証: 本人確認 / MFA / リスク評価"| AuthZ["認可エンジン / ユーザーID・デバイス状態・リスクスコア・時間・場所"] Device -->|"検証: デバイス / セキュリティ姿勢 / パッチ状況"| AuthZ AuthZ -->|"アクセス許可 / 条件付き / 最小権限"| App App -->|"監視: すべてのアクティビティ"| Monitor["継続的監視 / ログ記録・異常検知・アラート"] App --> Data Monitor -->|"検知: 疑わしいアクティビティ"| Response["自動対応 / アクセス遮断・MFA要求・インシデント作成"]

2. AIを活用した脅威検知

flowchart TB A["異常検知 いつもの挙動を学習し、外れた動きを見つける 逸脱を即座に検知"] --> B["振る舞い分析 ユーザーや端末の行動パターンから不自然さを検知"] B --> C["脅威インテリジェンス AI が既知の脅威を自動相関化 インシデントの全体像を把握"] C --> D["自動対応 AI が検知した脅威に自動対応 人間の介入時間を削減"]

3. サプライチェーン セキュリティ

flowchart TB C["脆弱性のチェーン 自社が安全 ← サードパーティが侵害 ← 結果として被害"] --> E["サードパーティ評価 ベンダーのセキュリティ姿勢を事前評価"] E --> K["契約条項 セキュリティ要件を契約に含める"] K --> M["継続監視 ソフトウェア更新、脆弱性スキャン"] M --> S["SBOM の要求 部品やライブラリの一覧化"] S --> G["サプライチェーンセグメンテーション 信頼できない供給元のコンポーネント隔離"]

4. クラウド セキュリティ

flowchart TB C["独特の課題"] --> R["共有責任モデル インフラはベンダー責任 アプリケーション・データは顧客責任"] C --> V["可視性の低下 クラウド内部のトラフィックが見えない コンテナとマイクロサービスの複雑性"] C --> M["設定ミス 公開 S3 バケット IAM ポリシーの不適切な設定"] C --> P["対策"] P --> CSPM["CSPM クラウド設定の安全性を継続的に点検"] P --> W["Workload Protection コンテナや仮想マシンの実行環境を守る"] P --> D["Data Protection クラウド上のデータを暗号化し重要度ごとに扱う"] P --> A["API Security クラウド API の保護"] P --> L["適切なログ有効化 CloudTrail / Azure Monitor"]

5. インシデント対応の自動化

従来:手動による時間がかかるプロセス

現代:
自動化された対応フロー

例:ランサムウェア検知時
1. EDR が疑わしいファイル動作を検知(自動)
2. システムを隔離(自動)
3. 管理者にアラート(通知)
4. インシデント対応チーム起動(手動→管理画面で管理)
5. 分析開始(半自動)

時間削減:
手動の場合:担当者の確認待ちや切り分けで長引きやすい
自動化:検知から初動隔離までを大幅に短縮しやすい

セキュリティフレームワーク

初心者向けメモ
フレームワークは「何をどの順番で整えるか」を整理するための共通言語です。技術そのものより、抜け漏れを防ぐ地図として使います。
要点
`NIST CSF` は全体整理、`CIS Controls` は優先順位付き実装、`MITRE ATT&CK` は攻撃者視点の分析に向いています。役割が違うので、1つで全部まかなうより組み合わせて使う方が実務的です。

NIST Cybersecurity Framework (CSF) 2.0

概要: 米国国立標準技術研究所(NIST)が策定したセキュリティ実装フレームワーク。政府機関から民間企業まで、あらゆる規模と業種で採用可能。

フレームワークの6つの関数:

1. ガバナンス (Govern)

目的: 全社的なセキュリティ戦略・方針・プロセスを確立

実装項目:

  • セキュリティポリシーとリスク管理フレームワークの策定
  • 責任と権限の明確化
  • ステークホルダーとのコミュニケーション
  • 規制要件の把握と対応
  • セキュリティ文化の構築
ガバナンス例:
- CEO(Chief Executive Officer)は CISO(Chief Information Security Officer: 最高情報セキュリティ責任者)に月次報告
- リスク委員会が四半期ごとにセキュリティ予算を決定
- 全従業員がセキュリティトレーニング受講(年2回以上)

2. 特定 (Identify)

目的: 資産、業務、依存関係、リスクを把握し、防御対象を明確にする

実装項目:

  • 資産・システムの棚卸
  • 脅威の特定
  • 脆弱性の評価
  • ビジネス影響度の分析
  • リスクスコアの算出
flowchart TB T["特定の例"] --> R1["DB サーバー 脅威: ハッキング 脆弱性: SQL インジェクション リスク: 高"] T --> R2["Web アプリ 脅威: DDoS 脆弱性: 古いフレームワーク リスク: 中"]

3. 保護 (Protect)

目的: リスクを低減するためのセキュリティ対策を実装

実装項目:

  • アクセス制御(RBAC、MFA)
  • 暗号化(転送中・保存中)
  • ネットワークセグメンテーション
  • エンドポイント保護
  • データバックアップ

4. 検知 (Detect)

目的: セキュリティインシデントを早期に発見

実装項目:

  • ログ収集・分析(SIEM: Security Information and Event Management)
  • 脅威インテリジェンス連携
  • EDR(Endpoint Detection and Response: エンドポイント検知・対応)
  • ネットワーク監視
  • 異常検知(AI駆動)
検知の効果測定:
- 平均検知時間(MTTD: Mean Time To Detect):短いほど良い
- 組織成熟度が高いほど短縮しやすい
- 比較するときは同じ定義・同じ計測条件で見る

5. 対応 (Respond)

目的: インシデント発生後の封じ込め、連絡、分析、改善を実施

実装項目:

  • インシデント対応計画(IRP: Incident Response Plan)
  • 対応チームの編成と訓練
  • 通信・報告体制
  • 封じ込めと根絶
  • 事後分析(RCA: Root Cause Analysis)

6. 復旧 (Recover)

目的: 業務を安全に再開し、再発防止を反映した状態へ戻す

実装項目:

  • 復旧手順の確立
  • バックアップからの復元
  • 再発防止策の反映
  • 利害関係者への復旧連絡

CIS Controls v8.1

概要: Center for Internet Security (CIS) が策定した、優先度付きの実践的セキュリティコントロール集です。

3つの実装レベル:

レベル 対象 説明
IG1 小規模組織 基礎的な対策を優先して整備する段階
IG2 中規模組織 IG1 に加えて監視や運用統制を強化する段階
IG3 大企業 高度な脅威や複雑な環境に対応する段階

CIS Controls の18個のコアコントロール(概要):

# コントロール IG1 IG2 IG3 説明
1 インベントリと資産管理 端末、サーバー、クラウド資産の把握
2 ソフトウェア資産管理 許可されたソフトウェアのみ利用
3 データ保護 機密データの分類、保護、持ち出し制御
4 安全な設定 端末、サーバー、クラウドの設定強化
5 アカウント管理 アカウントのライフサイクル管理
6 アクセス制御管理 最小権限、MFA、権限レビュー
7 継続的な脆弱性管理 脆弱性スキャンと修正
8 監査ログ管理 ログ収集、保護、分析
9 電子メールとブラウザ保護 フィッシングや危険サイト対策
10 マルウェア防御 EPP(Endpoint Protection Platform)/ EDR、検知、隔離
11 データ復旧 バックアップと復旧テスト
12 ネットワーク基盤管理 - ネットワーク機器と通信制御
13 ネットワーク監視と防御 - IDS/IPS、異常通信検知
14 セキュリティ意識向上と訓練 従業員教育
15 サービスプロバイダ管理 - 外部委託先とサプライヤ評価
16 アプリケーションソフトウェアセキュリティ - SDLC、コードレビュー、テスト
17 インシデント対応管理 - 計画、訓練、対応手順
18 ペネトレーションテスト - - 実戦的な侵入評価

実装ロードマップ例(小規模組織):

ここでいう IG1 IG2 IG3 は、CIS Controls が示す実装グループです。小さい組織はまず IG1 の基本対策から始め、運用が回るようになってから IG2 以降へ広げる考え方です。

Month 1-2   : コントロール1,2,5,6,9,10,11,17(基本)
Month 3-4   : コントロール3(監視開始)
Month 5-6   : コントロール8,9(スキャン・更新自動化)
Month 7-12  : 高度なコントロール(IG2へ向かう)

MITRE ATT&CK フレームワーク詳細

概要: 実際のサイバー攻撃に基づいて、攻撃者が使用するタクティクスとテクニックを分類したナレッジベース。脅威モデリング、検知ルール開発、防御戦略の策定に活用。

13のタクティクスと主要テクニック:

1. Reconnaissance(偵察)

目的: 標的システムに関する情報を収集

主要テクニック:

  • Active Scanning — ポートスキャン(nmap等)
  • Gather Victim Identity Information — 従業員情報の収集(LinkedIn等)
  • Gather Victim Org Information — 組織情報の収集
  • Phishing for Information — フィッシング経由での情報収集
  • Search Open Websites/Domains — DNSレコード、WHOIS等の公開情報収集

防御:

  • 公開情報の最小化
  • ファイアウォール設定でスキャン検知
  • ソーシャルメディア監視

2. Resource Development(リソース開発)

目的: 攻撃インフラを構築

主要テクニック:

  • Acquire Infrastructure — 攻撃用の サーバー・ドメイン取得
  • Develop Capabilities — マルウェア開発
  • Establish Accounts — 踏み台となるアカウント作成
  • Obtain Capabilities — 攻撃ツール取得

防御:

  • ドメイン登録監視
  • DNS Sinkhole(悪質ドメインへの通信を安全な宛先へ誘導して観測・遮断する仕組み)

3. Initial Access(初期侵入)

目的: 対象ネットワークへの足がかり確保

主要テクニック:

  • Phishing — メール経由のマルウェア配付(最多)
  • Supply Chain Compromise — 開発元や配布経路を汚染して侵入する手法
  • Exploit Public-Facing Application — 公開Webアプリの脆弱性利用
  • Valid Accounts — 盗んだ認証情報を使用

侵入経路の傾向:

  • Phishing: 人の判断に依存するため、訓練やメール防御の影響を受けやすい
  • Web Exploit: 公開面の脆弱性管理やパッチ適用状況に左右される
  • USB/Physical: 物理的な接触条件や運用統制の有無に左右される

防御:

  • フィッシング訓練(定期実施)
  • メールフィルタリング(SPF/DKIM/DMARC)
  • WAF(Web Application Firewall)
  • 脆弱性スキャン・パッチ管理

4. Execution(実行)

目的: マルウェア・コマンド実行

主要テクニック:

  • User Execution — ユーザーに実行させる
  • Command and Scripting Interpreter — PowerShell、bash等での実行
  • Exploitation for Client Execution — クライアント側脆弱性利用

防御:

  • AppLocker(許可したプログラムだけ実行させる Windows の実行制御)
  • PowerShell Logging(スクリプト実行ログ記録)
  • User Access Control(UAC: User Account Control)

5. Persistence(永続化)

目的: システムへのアクセスを長期維持

主要テクニック:

  • Create Account — バックドアアカウント作成
  • Boot or Logon Autostart Execution — スタートアップ登録
  • Scheduled Task/Job — タスクスケジューラに登録
  • Web Shell — Webサーバー上に置く遠隔操作用スクリプト
  • Registry Run Keys — Windows 起動時に自動実行されるレジストリ設定

防御:

  • 定期的なアカウント監査
  • 重要システムの監視
  • ファイル整合性監視(FIM: File Integrity Monitoring)

6. Privilege Escalation(権限昇格)

目的: 限定的な権限を管理者権限に昇格

主要テクニック:

  • Exploitation for Privilege Escalation — 脆弱性利用
  • UAC Bypass — ユーザーアクセス制御回避
  • Token Impersonation — 他ユーザーの認証トークンを借りて成り代わる手法

防御:

  • OS パッチ管理(優先度:高)
  • 最小権限の実装
  • 特権アクセス管理(PAM: Privileged Access Management)

7. Defense Evasion(防御回避)

目的: 検知・対応を回避

主要テクニック:

  • Modify Registry — レジストリ改変
  • Clear Logs — ログ削除
  • Disable or Modify Tools — セキュリティツール無効化
  • Obfuscated Files or Information — マルウェア難読化
  • Living off the Land — OS 標準ツールを悪用して不審な実行ファイルを減らす手法

防御:

  • ログの不変性確保(リモート記録)
  • EDR(Endpoint Detection and Response: エンドポイント検知・対応)
  • File Integrity Monitoring

8. Credential Access(認証情報窃取)

目的: ユーザー認証情報を盗用

主要テクニック:

  • Brute Force — ブルートフォース攻撃
  • Credential Stuffing — 流出パスワードの再利用
  • Keylogging — キーロガー
  • Input Capture — フォーム盗聴
  • OS Credential Dumping — メモリから認証情報を抜き出す手法(mimikatz 等)

防御:

  • MFA(Multi-Factor Authentication: 多要素認証)
  • パスワード管理ツール
  • EDR(異常なアクセス検知)
  • Have I Been Pwned 監視

9. Discovery(探索)

目的: ネットワーク・システム構成を把握

主要テクニック:

  • Network Share Discovery — 共有フォルダ検索
  • Account Discovery — ユーザーアカウント列挙
  • Software Discovery — インストール済みソフト確認
  • System Information Discovery — OS・ハードウェア確認

防御:

  • ネットワークセグメンテーション
  • アクセス制御(RBAC)
  • ネットワークトラフィック監視

10. Lateral Movement(横方向移動)

目的: ネットワーク内を横に移動し、他システムに侵入

主要テクニック:

  • Remote Services — RDP、SSH等を悪用
  • Windows Admin Shares — 管理者共有フォルダ利用
  • SMB/Windows Admin Shares — ネットワーク共有利用

防御:

  • ネットワークセグメンテーション
  • MFA(リモートアクセス)
  • 異常なネットワーク通信検知

11. Collection(情報収集)

目的: 機密情報を収集

主要テクニック:

  • Email Collection — メール盗聴
  • Screen Capture — スクリーンショット
  • Clipboard Data — クリップボード内容盗聴
  • Data from Cloud Storage — クラウドストレージからのデータ窃取

防御:

  • DLP(Data Loss Prevention: データ損失防止)
  • 機密情報の分類・ラベリング
  • クラウドアクセス制御

12. Command and Control(通信・制御)

目的: 侵害されたシステムをコントロール

主要テクニック:

  • Web Service — HTTP/HTTPS通信
  • DNS — DNS通信
  • Application Layer Protocol — メール、IRC等

防御:

  • ファイアウォール(出口制御重要)
  • DNS フィルタリング
  • ネットワークトラフィック分析

13. Exfiltration(データ流出)& Impact(影響)

目的: 盗んだデータを流出、またはシステムに被害を与える

主要テクニック(Exfiltration):

  • Data Compressed — 圧縮してからアップロード
  • Data Obfuscation — 難読化
  • Exfiltration Over C2 Channel — C2経由での流出
  • Scheduled Transfer — スケジュール実行で徐々に流出

主要テクニック(Impact):

  • Data Destruction — ランサムウェア、データ削除
  • Resource Hijacking — 侵害した計算資源を暗号資産マイニングなどに勝手に使う行為
  • Service Stop — サービス停止

防御:

  • DLP(Data Loss Prevention: データ損失防止)
  • ネットワーク出口監視(Egress Filtering: 外向き通信を制限・監視する対策)
  • バックアップ(復旧用)

MITRE ATT&CK活用方法:

flowchart TB M1["1. 脅威モデリング 対象になりうる APT を特定 使用テクニックを確認 防御ギャップを特定"] --> M2["2. 検知ルール開発 各テクニックに対応する検知ルールを実装 SIEM / EDR / IDS/IPS でルール化"] M2 --> M3["3. セキュリティ評価 侵入テストで実際のテクニック利用を検証 検知・対応の実効性を確認"] M3 --> U["https://attack.mitre.org で検索可能"]

実装チェックリスト

初心者向けメモ
すべてを一度に満たす必要はありません。まずは認証、パッチ、バックアップ、ログ監視のような基本項目から埋めると、効果が出やすいです。
要点
このチェックリストは、実装と運用の着手順を意識した要約版です。監査や要件定義には `OWASP ASVS`、診断観点の整理には `OWASP WSTG`、組織全体の優先順位付けには `NIST CSF 2.0` と `CIS Controls v8.1` を併用すると使いやすくなります。

組織全体のセキュリティチェックリスト

ガバナンス・リスク管理

  • [ ] セキュリティポリシーが文書化され、全社に周知
  • [ ] リスク評価が定期的(年1回以上)に実施
  • [ ] セキュリティ委員会が設置され、定期的に開催
  • [ ] セキュリティインシデント対応計画が策定・テスト
  • [ ] 規制要件(GDPR: General Data Protection Regulation、個人情報保護法等)が把握され、遵守
  • [ ] サードパーティセキュリティ評価が実施

アクセス制御

  • [ ] 最小権限の原則が実装
  • [ ] ロールベースアクセス制御(RBAC)を使用
  • [ ] 定期的なアクセスレビュー実施(年1回以上)
  • [ ] 離職者のアクセス即座に削除
  • [ ] 特権ユーザーは PAM(Privileged Access Management: 特権アクセス管理)下
  • [ ] MFA が すべての管理アクセスに必須

認証・認可

  • [ ] パスワード要件が強力(最小12文字、複雑性)
  • [ ] パスワード履歴管理で再利用を防止
  • [ ] パスワード有効期限が設定(又は無期限だが変更強制)
  • [ ] MFA が すべてのユーザーに導入
  • [ ] 認証情報の安全な保管(bcrypt, argon2 等)

暗号化

  • [ ] 転送中のデータはHTTPS/TLSで暗号化(全通信)
  • [ ] 保存データが暗号化(機密データ)
  • [ ] 暗号化キーが安全に管理・保管
  • [ ] 前方秘匿性(PFS: Perfect Forward Secrecy)が実装
  • [ ] TLS 1.2以上のみを使用(TLS 1.0/1.1は無効化)

脅威検知・監視

  • [ ] SIEM(Security Information and Event Management)が導入・設定
  • [ ] ログが中央で集約・保存
  • [ ] リアルタイムアラート設定
  • [ ] 定期的なログ分析と監査
  • [ ] インシデント検知の平均時間が測定
  • [ ] EDR(Endpoint Detection and Response)がエンドポイント配置
  • [ ] 異常検知が実装

インシデント対応

  • [ ] 対応計画が文書化・テスト済み
  • [ ] 対応チーム 24/7 体制で待機可能
  • [ ] 対応時間目標(RTO: Recovery Time Objective)が定義
  • [ ] ホットラインと連絡体制が確立
  • [ ] 定期的な訓練・シミュレーション実施
  • [ ] ポストモーテムプロセスが確立

脆弱性管理

  • [ ] 脆弱性スキャンが定期実施(週1回以上)
  • [ ] 脆弱性評価が実施(年1回以上)
  • [ ] パッチ管理プロセスが確立
  • [ ] Critical パッチは 24-48 時間以内に適用
  • [ ] 依存関係の脆弱性も追跡(SCA: Software Composition Analysis)
  • [ ] ペネトレーションテストが定期実施(年1回以上)

ユーザー教育・意識向上

  • [ ] 全従業員がセキュリティ意識向上トレーニング受講
  • [ ] 定期的なフィッシング訓練実施
  • [ ] セキュリティニュースレター配信
  • [ ] 新規入社時のセキュリティ研修
  • [ ] 事件報告を奨励する文化醸成

データ保護

  • [ ] データ分類が実施(公開、内部限定、機密等)
  • [ ] 機密データへのアクセスが記録
  • [ ] DLP(Data Loss Prevention: データ損失防止)が導入
  • [ ] 定期的なバックアップ
  • [ ] バックアップのテスト復旧が定期実施
  • [ ] データ保有期間ポリシーが確立

セキュアな開発

  • [ ] Secure SDLC(Secure Software Development Life Cycle)プロセスが確立
  • [ ] コードレビューがセキュリティを含む
  • [ ] 静的セキュリティテスト(SAST: Static Application Security Testing)が実施
  • [ ] 動的セキュリティテスト(DAST: Dynamic Application Security Testing)が実施
  • [ ] 依存関係が定期的にスキャン
  • [ ] セキュアコーディング標準が文書化

物理・デバイスセキュリティ

  • [ ] オフィス アクセス制御が実装
  • [ ] デバイス暗号化が標準化
  • [ ] USB 等外部デバイス使用ポリシーが確立
  • [ ] デバイス紛失時の対応手順が確立
  • [ ] デバイスのリモートワイプ能力あり

参考資料

まず見る資料

実装・診断で使う資料

学習用リソース

まとめ

サイバーセキュリティは、単発の対策を増やすことではなく、攻撃の流れに沿って防御・検知・対応・復旧を配置する営みです。認証、Web 防御、マルウェア対策、ネットワーク防御、インシデント対応、フレームワークを横断して見ることで、個々の対策がどこで効くのかを整理しやすくなります。