【致命的】サーバー侵害完了 (SYSTEM COMPROMISED)
DDoS攻撃による高負荷でおとり検知が遅れ、ハッカーによる不正コード(脆弱性攻撃)がサーバー内部のシステムシェル上で実行されてしまいました。
リアルタイム・レイヤー解析 (L2 - L7)
通信・カーネル制御ログ
パラメータ&攻撃コントロール
DDoS攻撃の開始
大量の攻撃パケットでサーバーを麻痺
おとり不正侵入攻撃
DDoS高負荷時に実行すると、IDS検知をバイパスし、L7攻撃コードでサーバーに侵入できます。
防御技術の有効化
SYN Cookies (L4防御)
接続をメモリ(TCB)に記録せず、暗号化シグネチャによる検証で接続を確認。
なぜおとり攻撃で侵入されるのか?
セキュリティ壁(IDS/IPS)は、受け取ったパケットのデータを1つずつ展開(L7デコード)して「悪意ある攻撃のシグネチャ」をチェックします。これは非常に高負荷な作業です。
DDoS発生時の挙動:
毎秒大量 of パケット(SYN/ICMP)が送りつけられると、IDSのキューやサーバーのCPUが100%に達し、パケットの処理遅延が発生します。これにより、検査が追いつかずに攻撃パケットが検知から漏れ、侵入を許してしまいます(フェイルオープン)。
💡 防御システム(SYN Cookies等)を有効化し、サーバーと検知器の余力を保つことで、この目くらまし侵入攻撃を防ぐことができます。
OSカーネルのメモリ構造:TCBメモリ vs カーネルパケット(sk_buff)
ステートフルな接続情報管理と、一時的な通信メディアハンドリングの決定的な差異
1. TCB (Transmission Control Block) の深層
OSカーネルにおけるTCBとは、TCPコネクションごとに作成され、ライフサイクル全体の「状態(ステート)」を保持する永続ソケットメモリ領域です。Linuxにおいては、`struct tcp_sock` およびベースの `struct sock` としてスラブアロケータ(`kmem_cache`)を介して割り当てられます。
- アロケーション契機: 正常通信時はSYN受信時にミニソケット(`struct request_sock`)が生成され、3ウェイハンドシェイク完了時にフルソケット(TCB:約$1 \text{ KB} \sim 2 \text{ KB}$)がヒープ上に割り当てられます。
- 保持する主なステート変数:
- - 送受信シーケンス番号(`snd_nxt`, `rcv_nxt`)
- - スライディングウィンドウバッファと輻輳制御パラメータ(SSTHRESH, CWND等)
- - タイマー(再送用、Keep-Alive用など)
- 性質: 長期永続的。コネクション確立中はずっとメモリ上に溜まり、`CLOSE` ➔ `TIME_WAIT`(通常60秒)が満了するまで完全に解放されません。
【Linuxカーネルソケット構造体レイヤー】
struct sock (汎用ソケット階層)
└─ struct inet_connection_sock (L4接続管理)
└─ struct tcp_sock (TCBの実態 - 状態機械)
├─ 送受信シーケンス状態 (`snd_una`, `rcv_wnd`)
└─ 輻輳制御アルゴリズム (BBR, Cubic状態)
➔ コネクション終了まで不揮発
2. カーネルパケット (sk_buff) の深層
一方で、カーネル内を流れる「パケット」そのものは、Linuxでは **`struct sk_buff`(Socket Buffer: 略称skb)** という完全に異なるデータ構造で管理されます。これはデータの入出力を担う一時的な「コンテナ」です。
- アロケーション契機: 物理的なネットワークカード(NIC)がパケットを受信した際、DMA(Direct Memory Access)によって物理メモリのリングバッファ(RX FIFO)に直接転送され、カーネルが `alloc_skb()` で制御ヘッダ構造体を確保します。
- ゼロコピー設計: イーサネット(L2)➔ IP(L3)➔ TCP(L4)➔ アプリケーション(L7)へ受け渡す際、パケットデータ自体はメモリ上で一切コピーされず、`skb->data` というポインタをシフト(`skb_pull`)してカプセル化を解除していきます。
- 性質: 超短期揮発的。カーネル内ネットワークスタックの処理を終え、アプリケーションがソケットから読み出す(`recv()` / `read()`)か、カーネル内で破棄・応答送信が完了した瞬間に `kfree_skb()` によって即座にメモリから消去されます。
【struct sk_buff によるレイヤーポインタ制御】
[ sk_buff 構造体ヘッダ ]
├─ head ──► [物理メモリ開始アドレス]
├─ data ──► [ L2 | L3 | L4 | ユーザーデータ ]
│ ▲ ▲ ▲
│ └──────┴──────┴── 各レイヤー処理でこのdataポインタ
└─ tail ──► [物理メモリ終了アドレス] を右にシフトするだけ (ゼロコピー)
両者の決定的なアーキテクチャ差異一覧
| 比較軸 | OS TCBメモリ (`struct tcp_sock`) | カーネルパケット (`struct sk_buff`) |
|---|---|---|
| 処理の性質 | ステートフル(接続状態を管理・同期する) | ステートレス(パケット単位で独立処理して消え去る) |
| メモリ上の寿命 | 長寿命(秒〜時間単位、切断完了まで固定保持) | 極短寿命(マイクロ秒〜ミリ秒単位、処理完了で即廃棄) |
| 消費単位 | 確立した(または未確立の)「コネクション数」に比例 | 流れてくる「秒間パケット数(PPS)」および帯域に比例 |
| 枯渇時のシステム挙動 |
新規TCPのSYN接続テーブルが満杯になり、SYN Cookies等の防御がない限り新規接続が全て遮断される。 (既存の確立済み接続やICMP等の他プロトコル通信は動作可能) |
NIC受信バッファが溢れ(Packet Dropped)、ソフト割り込み(`softirq`)によるCPU負荷が100%になりOSがフリーズ状態(コンテキストスイッチ破綻)に陥る。 ➔ 一切のネットワーク通信が全断する。 |
TCP SYN フラッド:メモリ(TCB)枯渇攻撃
状態(ステートフル)を狙うトランスポート層の脅威
1. カーネル内でのメモリ確保プロセス
LinuxなどのOSカーネルは、接続要求(SYNパケット)を受け取ると、ソケットごとにTCB(Transmission Control Block)という構造体をメモリ上にアロケート(確保)します。これには、以下の情報が保存されます。
- 接続元/接続先のIPアドレスおよびポート番号
- 初期シーケンス番号(ISN)および確認応答番号(ACK)
- TCPウィンドウサイズおよび制御フラグ
2. ハーフオープンキューと枯渇
TCP 3ウェイハンドシェイクの2段階目(SYN-ACKを送信後)で、このTCBは一時的にSYN_RECVキュー(ハーフオープンバックログ)に保存され、相手からの最後のACKを待つ待機状態(ステートフル)になります。 攻撃者はACKを送らないため、TCBはOSの設定値(通常タイムアウトまで約75秒〜数分)でメモリ上に蓄積され続け、キューの最大値を満たしてしまいます。こうなると、新規接続要求(SYN)がすべて破棄されます。
【OSカーネル内:TCB(Transmission Control Block)のデータ格納構成】
+-------------------------------------------------------+ | TCB (Transmission Control Block) - 約1KB〜2KB/接続 | +-------------------------------------------------------+ | * Source IP: 192.168.1.10 | * Dest IP: 10.0.0.100 | | * Source Port: 54124 | * Dest Port: 80 (HTTP) | | * Sequence Number (ISN) | * Window Size | | * TCP State: SYN_RECV | * Timeout Timer: 75s | +-------------------------------------------------------+
ICMP フラッド:帯域 & CPUパンク攻撃
量を競う(ステートレスな)ネットワーク層の脅威
1. ステートレス処理とNIC割り込み
ICMPはTCPと異なり、接続状態を記憶しません。ICMP Echo Request(Ping要求)パケットを受信すると、OSカーネルは単にそのパケットを展開して「ICMP Echo Reply(応答)」を即座に作成し、送り出します。
この時、メモリ空間の消費(TCBの確保)はありませんが、代わりにネットワークアダプタ(NIC)からCPUに対して、受信通知である「ソフト割り込み(softirq)」がパケットごとに大量に発生します。
2. CPUのコンテキストスイッチと帯域枯渇
CPUの性能限界(秒間パケット処理能力:PPS - Packets Per Second)を超えたり、ネットワーク回線(帯域幅)の限界を超えるギガビットクラスのデータが流れ込むと、サーバーの手前で物理的に通信がパンクします。OSカーネルは、パケットの受信すら追いつかなくなり、新規パケットを問答無用でドロップさせます。
【ICMPステートレス処理の流れ】
[ 受信パケット ]
│
▼ (L2/L3デコード)
[ NIC 受信リングバッファ ] ➔ CPU割り込み (softirq) 発生
│
▼ (L3 ICMP判定)
[ カーネル ICMP処理モジュール ] ➔ 即座に応答 Reply を作成 (メモリ保存なし)
│
▼ (送信キュー)
[ 送信 ] ➔ ネットワーク帯域幅の限界へ
OSI参照モデル各層におけるパケットのデコードプロセス
パケットがサーバーに到達したとき、OSやセキュリティデバイスはカプセルを剥がすように各層のヘッダを読み込みます。
イーサネットヘッダのデコード
パケット受信時、NICはパケットから宛先MACアドレスと送信元MACアドレス、そして上位プロトコルを示すイーサタイプ(IPv4=0x0800等)を解析し、自分宛てのフレームであればヘッダを剥ぎ、L3層に引き渡します。
IPヘッダのデコード
OSカーネルはIPヘッダを読み、宛先IPアドレス / 送信元IPアドレスを確認します。プロトコル番号(TCPなら6、ICMPなら1)を判別し、それぞれ適切なOSカーネルモジュール(TCPスタック、ICMPスタック)へ分配します。
TCP / ICMPヘッダのデコード
TCPヘッダの場合:宛先ポート / 送信元ポート / シーケンス番号およびコントロールフラグ(SYN等)を展開。SYNであれば接続テーブル(TCB)の確保を決定。ICMPヘッダの場合:タイプ(Echo Requestなど)やチェックサムを確認します。
データ(ペイロード)とIDSセキュリティシグネチャの検証
アプリケーションデータ(HTTPリクエスト等)をデシリアライズ(変換)し、IDSはペイロード全体の文字列照合(SQLインジェクションなどの既知の不正コード記述)を行います。非常にCPUパワーを必要とする「ディープパケットインスペクション(DPI)」が実行される層です。
ネットワークプロトコル・ヘッダフォーマット
IPv4 ヘッダ構成 (代表値) L3層
0 15 31 ビット +-----------+-----------+ | Version/HL| DiffServ | +-----------+-----------+ | Total Length (全長) | +-----------+-----------+ | Identification | +-----------+-----------+ |TTL | Protocol | ➔ TCP=6 / ICMP=1 +-----------+-----------+ | Header Checksum | +-----------------------+ | Source IP Address | ➔ 接続元のIP +-----------------------+ | Destination IP Address| ➔ サーバーのIP +-----------------------+
TCP ヘッダ構成 (代表値) L4層
0 15 31 ビット +-----------+-----------+ | Source Port (接続元ポート) +-----------+-----------+ | Destination Port (HTTP=80) +-----------------------+ | Sequence Number (初期シーケンス番号) +-----------------------+ | Acknowledgment Number (確認応答番号) +-----------+-----------+ | DataOffset|Flags (SYN)| ➔ 制御フラグが +-----------+-----------+ 格納される箇所 | Window Size | +-----------+-----------+ | Checksum | UrgPointer| +-----------+-----------+
ICMP ヘッダ構成 (代表値) L3/4境界
0 8 15 31 ビット +-----+-----+-----------+ |Type |Code | Checksum | ➔ Type=8 (Req) +-----+-----+-----------+ Type=0 (Reply) | Identifier| Seq Number| +-----------+-----------+ | Data (可変長ペイロード) | | (回線帯域を埋め尽くす | | ため、ダミーデータで | | 肥大化させることが可能)| +-----------------------+