シーケンス図で理解する「攻撃手法と対策」【セキュリティまとめ】

## はじめに

◆この記事は何？
セキュリティ分野の攻撃手法と対策をまとめた記事です

◆対象は？
セキュリティを学びたい方、試験対策をしたい方

◆記事のコンセプト
**攻撃と対策の目的**や流れを抑えておくことで、情報処理試験の午前問題・午後問題が解きやすくなります。

この記事では以下のように整理します。
- 攻撃者側
    - 攻撃者の目的
    - 攻撃手段
    - 結果
- 対策側
    - 対策の目的
    - 対策手段
    - 結果

◆この記事の目的
試験対策として理解や暗記の一助になれば幸いです。


## 標的型攻撃

**攻撃側**

◆目的
機密情報を盗むため

◆手法
特定の個人や組織（標的）を狙って、攻撃メールを送付します。

1. 攻撃者は情報を収集する
1. 標的型攻撃メール送付
1. 感染
1. 情報の流出

◆結果
情報の漏洩やウイルスの感染

標的型攻撃の例をシーケンス図で示した例です。

```mermaid
sequenceDiagram
    participant Attacker as 攻撃者
    participant TargetUser as ターゲットユーザー
    participant TargetSystem as ターゲットシステム
    autonumber

    Note over Attacker: 情報収集
    Attacker->>+TargetUser: フィッシングメール送信
    TargetUser->>+TargetSystem: リンククリック
    Note over TargetSystem: 感染
    Attacker->>TargetSystem: 目的の実行
```

**対策**

◆目的
被害を抑えるため
完全に防ぐことは難しいので、被害を抑える対策を考えるのが現実的です。

◆手法
- 入口対策（攻撃の侵入を防ぐ対策）
    - ファイアウォール、IDS/IPSなど
- 出口対策（侵入後の被害の発生を防ぐ対策）
    - 通信監視で漏洩防止
    - ログの取得
- 社員・職員への教育
    - 標的型攻撃の訓練メール

◆結果
- 入り口対策の結果
    - 攻撃側は侵入が困難になります
- 出口対策の結果
    - 攻撃側は情報を盗み出すのが難しくなります
- 社員・職員への教育の結果
    - 訓練メールによって、社員の識別能力の向上や適切な対応の取得が期待されます

【関連】

- APT攻撃（Advanced Persistent Threat)
    - 特定の標的に対して高度かつ執拗に行われる攻撃

【参考】

https://www.youtube.com/watch?v=ZZJ7VMJ5Btw

https://www.soumu.go.jp/main_sosiki/cybersecurity/kokumin/business/business_admin_07.html

## DoS攻撃(Denial of Service attack/サービス拒否攻撃)

**攻撃側**

◆目的
サービス提供を妨害するため

◆手法
1台のパソコンからターゲットにデータを送る

◆結果
サーバーに過剰な負荷がかかる

```mermaid
sequenceDiagram
    participant Attacker as 攻撃者
    participant Server as サーバ
    autonumber

    Note over Attacker: 攻撃の準備
    loop 攻撃実行
        Attacker->>+Server: 大量のリクエスト
        Note right of Server: 処理過負荷
    end
    Note over Server: サービス妨害
```

**対策**

◆目的
不正アクセスを遮断するため

◆手法
- IPアドレス制限
    - IPアドレスを偽装したり、動的に変更したりするためIPアドレス制限だけでは不十分なことがある
- ツールを利用
    - ファイアウォール、IPS/IDS、WAFなど

◆結果
攻撃者はアクセスができなくなる


【関連】
DoS攻撃の種類
- DDoS攻撃(Distributed Denial of Service attack/分散型サービス拒否攻撃)
    - 踏み台を利用して、ターゲットに大量のアクセスやデータを送り、負荷をかける
- DRRoS攻撃(Distributed Reflective Denial of Service attack/DoSリフレクション攻撃)
    - ターゲットのIPアドレスになりすまし、不必要な応答を送りつける
- EDoS攻撃（Economic Denial of service attack）
    - 金銭的な負担をかける攻撃
- Smurf攻撃（DoS攻撃の一つ）

【参考】
[図解まるわかり セキュリティのしくみ](https://amzn.asia/d/afxGf61)

[イラスト図解式 この一冊で全部わかるセキュリティの基本](https://amzn.asia/d/2XDAEw0)

## Smurf攻撃
**攻撃側**

◆目的
DoS攻撃と同様に、サービスを妨害するため

◆手法
pingの仕組みを悪用して、相手のコンピュータやネットワークに対象のパケットを送りつける

攻撃者によるICMPエコー要求(ping)
送信元IP：攻撃対象サーバ
宛先IP：ブロードキャストアドレス

◆結果
サーバーに過剰な負荷がかかる

```mermaid

sequenceDiagram
    participant Attacker as 攻撃者
    participant BroadcastAddress as ブロードキャストアドレス
    participant NetworkDevices as ネットワーク上のデバイス
    participant Victim as 攻撃対象サーバ
    autonumber

    Attacker->>+BroadcastAddress: ICMPエコーリクエスト（送信元: 攻撃対象サーバ）
    BroadcastAddress->>+NetworkDevices: ICMPエコーリクエストの中継
    loop 各デバイスからの応答
        NetworkDevices->>+Victim: ICMPエコーレスポンス
    end
    Note over Victim: レスポンス過多

```

**対策**

◆目的
攻撃トラフィックを拡散防止するため

◆手法
各機器でブロードキャストアドレス宛のICMPリクエストを破棄

◆結果
攻撃者が意図したように負荷をかけることができなくなる

【参考】
[smurf攻撃の中継への対策](https://www.tains.tohoku.ac.jp/news/st-news-15/1721.html)


## 中間者攻撃(Man-in-the-Middle attack)
**攻撃側**

◆目的
盗聴、改ざんのため

◆手法
攻撃者はユーザーとサーバの間に入り込む
典型的なのはプロキシタイプ

◆結果
盗聴や改ざんが可能になる

```mermaid
sequenceDiagram
    participant User as ユーザー
    participant Attacker as 攻撃者
    participant Server as サーバー

    Note over User: ユーザーはサーバーに安全に接続しようとする

    User->>+Attacker: リクエスト（サーバー宛）
    Note over Attacker: 攻撃者はリクエストを傍受

    Attacker->>+Server: リクエスト（ユーザーからのものと装う）
    Note over Server: サーバーはリクエストを処理

    Server->>-Attacker: レスポンス
    Note over Attacker: 攻撃者はレスポンスを傍受・改ざん可能

    Attacker->>-User: レスポンス（改ざんされたものも可能）
    Note over User: ユーザーはレスポンスを受信

```

**対策**

◆目的
認証を行うことで、接続先が正規のものと確認するため

◆手法
通信相手が発行しているデジタル証明書を使う

◆結果
攻撃者は盗聴したとしても暗号化により解読が難しくなる
署名の検証に失敗するため、受信側は改ざんに気づくことができる

```mermaid
sequenceDiagram
    participant User as ユーザー
    participant Attacker as 攻撃者
    participant Server as サーバー

    Note over User: ユーザーはサーバーに安全に接続しようとする

    User->>+Server: 接続リクエスト
    Note over Attacker: 攻撃者はリクエストを傍受しようとするが、介入できない
    Server->>-User: サーバー証明書（公開鍵含む）

    Note over User: 証明書の検証
    alt 証明書が有効
        User->>+Server: 暗号化された情報（公開鍵で暗号化）
        Note over Attacker: 攻撃者は暗号化されたデータを解読できない
        Server-->>-User: 暗号化されたレスポンス（セッション鍵で暗号化）
        Note over User,Server: 暗号化されたセキュアなセッションの開始
    else 証明書が無効
        User->>User: 接続中止
    end

```

【参考】
[イラスト図解式 この一冊で全部わかるセキュリティの基本](https://amzn.asia/d/2XDAEw0)

## MITB攻撃(Man-in-the-browser攻撃)

**攻撃側**

◆目的
盗聴、改ざんのため

◆手法
マルウェアなどを用いて、攻撃対象のブラウザに悪意のあるソフトウェアを潜り込ませる

中間者攻撃はネットワークに焦点があるが、MITB攻撃はユーザーデバイス（Webブラウザ）に焦点がある

◆結果
WEBブラウザを乗っ取る
通信を監視して、通信内容を改ざんしたり、操作をしたりする


```mermaid
sequenceDiagram
    participant User as ユーザー
    participant Browser as ブラウザ（マルウェア感染）
    participant Website as ウェブサイト

    Note over User: ユーザーはウェブサイトに安全に接続しようとする

    User->>+Browser: ウェブサイトへのアクセス要求
    Note over Browser: マルウェアがアクティブ化

    Browser->>+Website: リクエストの送信（ユーザーからのものと装う）
    Website->>-Browser: レスポンス（通常のコンテンツ）

    Note over Browser: マルウェアがレスポンスを改ざん
    Browser->>-User: 改ざんされたコンテンツの表示

    User->>+Browser: トランザクション情報の入力（例: 支払い）
    Note over Browser: マルウェアが情報を盗み出し、改ざん

    Browser->>+Website: 改ざんされたトランザクションの送信
    Note over Website: トランザクションの処理
    Website->>-Browser: 処理結果のレスポンス

    Note over Browser: マルウェアが結果をユーザーに正常に見せかける
    Browser->>-User: 処理結果の表示（改ざんされたものも可能）


```

**対策**

◆目的
通信が改ざんされていないことを確認するため

◆手法
トランザクション認証

トランザクション＝取引

◆結果
改ざんを検知して、取引を中止できる

```mermaid
sequenceDiagram
    participant User as ユーザー
    participant AuthDevice as 認証デバイス
    participant Browser as ブラウザ（マルウェア感染）
    participant Server as サーバー
    
    User->>+Browser: トランザクション情報の入力
    Browser->>+Server: トランザクション情報の送信
    Note over Server: トランザクション認証コードの生成

    Server->>-Browser: トランザクション認証コード
    Browser->>-User: トランザクション認証コードの表示
    Note over User: コードの確認

    alt コードが一致する場合
        User->>+AuthDevice: トランザクションの承認
        AuthDevice->>+Server: トランザクションの承認確認
        Server->>-AuthDevice: トランザクションの処理
        AuthDevice->>-User: トランザクション成功の通知
    else コードが一致しない場合
        User->>User: トランザクションの中止
    end

```

次の1分の動画で処理の流れが理解しやすくなります。

https://www.youtube.com/watch?v=w113sz1sH6E

## DNSアンプ攻撃(DNSリフレクタ攻撃)

「アンプ」は「増幅」を意味します。

**攻撃側**

◆目的
攻撃対象のサーバーの負荷を高めるため

◆手法
送信元IPアドレスを攻撃対象に偽装して問い合わせを行う

◆結果
DNSは要求の通信より応答の通信の方が大きいため、攻撃者は小さい要求で大きい応答を攻撃対象のサーバーに送りつけることができる

```mermaid
sequenceDiagram
    participant Attacker as 攻撃者
    participant TargetServer as 攻撃対象のサーバー
    participant CacheDNS as キャッシュDNSサーバー

    Attacker->>+CacheDNS: 攻撃対象のIPを偽装したクエリ
    CacheDNS-->>-TargetServer: 大規模な応答データ
    Note over TargetServer: リソース枯渇
```

**対策**

◆目的
攻撃の機会をなくすため

◆手法
キャッシュDNSサーバーをオープンリゾルバにしない

◆結果
外部からDNS問い合わせを受け付けなくなる

【参考】

[図解まるわかり セキュリティのしくみ](https://amzn.asia/d/afxGf61)

## DNS水責め攻撃（ランダムサブドメイン攻撃）
**攻撃側**

◆目的
コンテンツDNSサーバーの負荷を高めるため

◆手法
存在しないサブドメインに対して問い合わせを行う
キャッシュされていないため、コンテンツDNSサーバーへの問い合わせが必要になる

◆結果
コンテンツDNSサーバーの負荷が高まる


```mermaid
sequenceDiagram
    participant Attacker as 攻撃者
    participant CacheDNS as キャッシュDNSサーバー
    participant ContentDNS as コンテンツDNSサーバー

    loop 大量のクエリ
        Attacker->>+CacheDNS: ランダムサブドメインのクエリ
        CacheDNS->>+ContentDNS: クエリの中継
        ContentDNS-->>-CacheDNS: NXDOMAIN応答（＝存在しない）
        CacheDNS-->>-Attacker: NXDOMAIN応答（＝存在しない）
    end
    Note over ContentDNS: リソース消耗
```

**対策**
DNSアンプ攻撃(DNSリフレクタ攻撃)と同様

【参考】
[「ゼロからスタート! 教育系YouTuberまさるの情報処理安全確保支援士1冊目の教科書」](https://amzn.asia/d/dSYLc7n)

https://jprs.jp/glossary/index.php?ID=0137


## フィッシング・スミッシング
**攻撃側**

◆目的
機密情報を盗み取るため

◆手法
- フィッシング
    - メールでなりすましサイトのリンクを送付して、なりすましサイトに誘導する
- スミッシング
    - SMSでなりすましサイトのリンクを送付して、なりすましサイトに誘導する

◆結果
なりすましサイトで情報を入力してしまった場合、攻撃者は個人情報の取得、ログイン情報の取得などが可能になる

```mermaid
sequenceDiagram
    participant User as ユーザー
    participant Phisher as 攻撃者
    participant FakeWebsite as 偽ウェブサイト
    participant RealWebsite as 実際のウェブサイト
    autonumber

    Phisher->>+User: フィッシングメール送信
    Note over User: メールには偽のウェブサイトへのリンクが含まれている
    User->>+FakeWebsite: リンクをクリックしてアクセス
    Note over FakeWebsite: 攻撃者が制御する偽のログインページ
    User->>+FakeWebsite: 機密情報を入力
    FakeWebsite->>+Phisher: 機密情報を送信
    Note over Phisher: 攻撃者は情報を収集
    Phisher->>+RealWebsite: 収集した情報を使用してアクセス
    Note over RealWebsite: 攻撃者による不正アクセス


```

**対策**

◆目的
なりすましサイトにそもそもアクセスしないようにするため

◆手法
メールに記載されているリンクを利用せず、webブラウザの検索経由で目的のwebサイトを使用する

◆結果
機密情報を誤って入力する機会がなくなる

【参考】
[「ゼロからスタート! 教育系YouTuberまさるの情報処理安全確保支援士1冊目の教科書」](https://amzn.asia/d/dSYLc7n)

## ARPポイズニング
別名：ARPキャッシュポイズニング、ARPスプーフィング

ARPはAddress Resolution Protocolの略で、IPアドレスからMACアドレスを特定するためのプロトコルです。

**攻撃側**

◆目的
不正な通信先への誘導するため

◆手法
攻撃者は、正規の応答よりも早く不正な応答を届ける

◆結果
ARPテーブルを不正に作り上げ、不正な通信に誘導する


攻撃者がいない場合のARP応答のシーケンス図です。

```mermaid
sequenceDiagram
    participant DeviceA as ターゲット1
    participant DeviceB as ターゲット2

    Note over DeviceA: ターゲット2への通信を試みる
    DeviceA->>+DeviceB: ARPリクエスト（ターゲット2のMACアドレスは?）
    Note over DeviceB: ARPリクエスト受信
    DeviceB->>-DeviceA: ARP応答（私のMACアドレスはXX:XX:XX:XX:XX:XX）
    Note over DeviceA: ARPテーブル更新
    DeviceA->>DeviceB: IPパケット（ターゲット2のMACアドレス宛）
    Note over DeviceB: IPパケット受信
```

下の図はターゲット1がターゲット2への通信を試みる際、攻撃者が改ざんする例です。

```mermaid
sequenceDiagram
    participant Victim1 as ターゲット1
    participant Attacker as 攻撃者
    participant Victim2 as ターゲット2

    Victim1->>+Attacker: ARPリクエスト（ターゲット2のMACアドレスは?）
    Attacker->>-Victim1: 偽のARP応答（ターゲット2のMACアドレスはYY.YY.YY.YYです）

    Victim2->>+Attacker: ARPリクエスト（ターゲット1のMACアドレスは?）
    Attacker->>-Victim2: 偽のARP応答（ターゲット1のMACアドレスはZZ.ZZ.ZZ.ZZです）

    Victim1->>+Attacker: ターゲット2へのデータ
    Note over Attacker: トラフィック傍受/改ざん
    Attacker->>+Victim2: データの転送（任意の改ざんが可能）
```

**対策**

◆目的
不正を検出するため

◆手法
DAI（Dynamic ARP Inspection）
ダイナミックARP検査は、LAN上でARPパケットを検査するセキュリティ機能
ARPメッセージの正当性を検証する

◆結果
不正なARP通信を遮断する

```mermaid
sequenceDiagram
    participant U as ユーザーデバイス
    participant S as DAI搭載スイッチ
    participant D as DHCPサーバー
    participant N as ネットワーク

    U->>D: IP要求
    D->>U: IP割当
    U->>S: ARPリクエスト
    S->>D: DHCPバインディング情報に基づいてARP検証
    alt ARPが有効な場合
        D->>S: 検証成功
        S->>N: ARPリクエスト転送
        N->>U: ARPレスポンス (MACアドレス)
    else ARPが無効な場合
        D->>S: 検証失敗
        S-xU: ARPリクエスト破棄
    end
```

DHCPとは、Dynamic Host Configuration Protocolの略で、コンピュータがネットワークに接続して通信する際に必要な設定情報を自動で割り当てる機能です。

【参考】
[ARP Spoofing](https://www.infraexpert.com/study/dhcpz6.html)

[ARPポイズニングとは【用語集詳細】](https://www.sompocybersecurity.com/column/glossary/arp-poisoning)

[ARPポイズニング（スプーフィング）攻撃とは 定義と手法、防御と対策](https://www.okta.com/jp/identity-101/arp-poisoning/)

[DAI(Dynamic ARP Inspection)](https://www.infraexpert.com/study/dhcpz7.html)

[【Cisco】Dynamic ARP Inspection(DAI)の概要と設定方法](https://infrastructure-engineer.com/arp-inspection-cisco-001/)

## クロスサイトスクリプティング

**攻撃側**

◆目的
サービス利用者を攻撃するため

◆手法
攻撃者は任意のスクリプトをサービスに投稿する
投稿した悪意のあるプログラムを、他の利用者の環境で実行させる

◆結果
Cookie情報等が漏洩


```mermaid
sequenceDiagram
    participant User as ユーザー
    participant VulnerableWebsite as 脆弱なウェブサイト
    participant Attacker as 攻撃者

    Attacker->>+VulnerableWebsite: 悪意のあるスクリプトを含むデータの送信
    Note over VulnerableWebsite: スクリプトはサニタイズ（無効化）されずに保存/表示される
    User->>+VulnerableWebsite: ウェブページのリクエスト
    VulnerableWebsite->>-User: 悪意のあるスクリプトを含むページのレスポンス
    Note over User: ブラウザでスクリプトが実行される
    User->>+Attacker: スクリプトによる情報（例: クッキー）の送信
    Note over Attacker: 攻撃者は情報を収集

```

**対策**

◆目的
攻撃スクリプトを実行防止するため

◆手法
エスケープ処理

エスケープ処理の例
- ウェブページの表示に影響する特別な記号文字（「<」、「>」、「&」等）を、HTMLエンティティ（「&lt;」、「&gt;」、「&amp;」等）に置換
- HTMLタグを出力する場合は、その属性値を必ず「"」（ダブルクォート）で括る
- 「"」で括られた属性値に含まれる「"」を、HTMLエンティティ「&quot;」にエスケープ

◆結果
テキストとして扱われる。結果、スクリプトが実行できなくなる。


参考：
[安全なウェブサイトの作り方 - 1.5 クロスサイト・スクリプティング](https://www.ipa.go.jp/security/vuln/websecurity/cross-site-scripting.html)

## クロスサイトリクエストフォージェリ

CSRF：Cross Site Request Forgeries

「Forgery」は「偽物」という意味

**攻撃側**

◆目的
個人情報の盗み出しや権限を悪用するため

◆手法
セッションIDを悪用して、Webサイトにログインしている利用者に意図しない操作をさせる

◆結果
攻撃者が不正操作できる

```mermaid
sequenceDiagram
    participant User as ユーザー
    participant AttackerWebsite as 攻撃者のウェブサイト
    participant VulnerableWebsite as 脆弱なウェブサイト

    Note over User,VulnerableWebsite: ユーザーは脆弱なウェブサイトにログイン済み

    AttackerWebsite->>+User: 悪意のあるページを提供
    Note over User: ユーザーが攻撃者のページを閲覧
    User->>+VulnerableWebsite: 攻撃者が用意した操作を実行（例: パスワード変更、情報送信）
    Note over VulnerableWebsite: リクエストを正規のものと誤認
    VulnerableWebsite->>-User: 操作の実行結果をレスポンス

```

**対策**

◆目的
識別するため

◆手法
リクエストにトークン情報を付加する。

[IPA](https://www.ipa.go.jp/security/vuln/websecurity/csrf.html)では次のように説明されています。

> 処理を実行するページをPOSTメソッドでアクセスするようにし、その「hiddenパラメータ」に秘密情報が挿入されるよう、前のページを自動生成して、実行ページではその値が正しい場合のみ処理を実行する。

◆結果
トークンが不一致のため、リクエストが拒否される


```mermaid
sequenceDiagram
    participant U as 利用者
    participant I as 入力画面
    participant C as 確認画面
    participant P as 登録処理ページ

    U->>I: 情報入力
    I->>C: 情報確認画面表示(hiddenパラメータに秘密情報を含む)
    C->>U: 情報確認
    U->>P: POSTメソッドで登録リクエスト(hiddenパラメータを含む)
    alt hiddenパラメータが一致する場合
        P->>P: 登録処理実行
    else hiddenパラメータが一致しない場合
        P->>U: 処理拒否
    end

```

参考：
[安全なウェブサイトの作り方 - 1.6 CSRF（クロスサイト・リクエスト・フォージェリ）](https://www.ipa.go.jp/security/vuln/websecurity/csrf.html)

## パスワードクラッキング

**攻撃側**

◆目的
不正アクセスするため

◆手法

- オンライン攻撃
    - ブルートフォース攻撃
        - パスワードのすべての組み合わせを試す
    - リバースブルートフォース攻撃
        - パスワードを固定してユーザIDを変化させる
    - 辞書攻撃
        - 辞書に記載されている単語からパスワードを推測する
    - パスワードリスト攻撃
        - 他のサイトで流失したパスワードの組み合わせを試す
- オフライン攻撃
    - ファイルからパスワードを解析
        - パスワードをハッシュ化したリストから検索する

◆結果
パスワードを取得し、不正ログインなどが可能となる

ブルートフォース攻撃のシーケンス図です。
```mermaid
sequenceDiagram
    participant Attacker as 攻撃者
    participant Service as サービス

    loop 各アカウントに対する試行
        Attacker->>+Service: アカウントNへのログイン試行
        Service-->>-Attacker: ログイン成功または失敗
        Note right of Service: 多くのアカウントで試行
    end
    Note over Attacker: 成功したアカウントへのアクセス

```

**対策**

**①ブルートフォース攻撃や辞書攻撃の対策**
◆目的
ログインの試行回数を制限するため

◆手法
アカウントロックアウト

◆結果
IDとパスワードの組み合わせを試せなくなる


**②リバースブルートフォース攻撃**
◆目的
ログインの試行回数を制限するため

◆手法
接続元のIPアドレスなどの情報からログインの試行回数を制限する

◆結果
IDとパスワードの組み合わせを試せなくなる

【参考】
[「ゼロからスタート! 教育系YouTuberまさるの情報処理安全確保支援士1冊目の教科書」](https://amzn.asia/d/dSYLc7n)

## おわりに

この記事では、シーケンス図を用いて攻撃と対策について目的を中心に整理しました。

試験勉強の一助になれば幸いです。

## 参考

[図解まるわかり セキュリティのしくみ](https://amzn.asia/d/afxGf61)

[「ゼロからスタート! 教育系YouTuberまさるの情報処理安全確保支援士1冊目の教科書」](https://amzn.asia/d/dSYLc7n)

[イラスト図解式 この一冊で全部わかるセキュリティの基本](https://amzn.asia/d/2XDAEw0)