Built To Last

廃れない計算機科学の知識体系を残す

Double Tagging Attackやってみた① ー トランクリンクからの攻撃

事前の準備〜知識収集

IEEE 802.1Qとは

Dot1qとも呼ばれるこのプロトコルはVLAN taggingという仕組みを定義している。
VLAN taggingはフレームにVLANタグを付与することで、ネットワークを流れるフレームは必ず一つのVLANに所属していることを保証する仕組みである。
タグのついていないフレームはnative VLAN(ネイティブVLAN)に所属することとなる。

VLANタギングによるフレーム構造の変化

VLANタギングによってフレームの構造は変化する。

Source MACとEtherTypeの間に4バイトの802.1Qヘッダーが追加され、それに伴いフレームの最大サイズと最小サイズが4バイト増加する。

802.1Qヘッダーの中身は以下のようになる。

    TPID ... 0x8100が固定で入る

    PCP ... フレームの優先度

    VID ... 12bitサイズでVLAN IDを指定する

VIDが12bitであることとVLAN IDが0~4095(0x000~0xFFF)の中から指定することがつながった。ちなみに0と4095は特別な意味を持ち、0はVLAN IDを持っていないことを意味する。

VLANタギングによるフレーム構造の変化

Double Tagging(ダブルタギング)

ダブルタギングは名の通りタグを二重で付与することで、ISP(インターネットサービスプロバイダ)がすでにVLANタグのついたフレームに追加で独自のタグを付与することができるようになった。

ダブルタギングによるフレーム構造の変化

Native VLAN

VLANタグの付与されていないフレームは、スイッチのトランクポートにてNative VLANに属すると判断される。またNative VLANに属するフレームはVLANタグが付与されずに送信される。

どのVLANがNative VLANなのかはスイッチ毎、またはトランクポート毎に設定できる。

送信側のスイッチは、そのスイッチで設定されたNative VLANに相当するVLANからのフレームはVLANタグを付与せずに送る。

受信側のスイッチは、VLANタグのついていないフレームを受け取った際、そのスイッチで設定されたNative VLANに属するものと判断する。

Native VLAN周りのスイッチ上の挙動は以下の動画が参考になる。

www.youtube.com

Double Tagging Attackの概要

本攻撃を成功させるためには、以下の条件を最低限満たす必要がある。

  • 攻撃マシンが攻撃経路のトランクリンク(下図ではSW1-SW2をつなぐトランクリンク)のNative VLANに所属する(???というよりかは、攻撃マシンとスイッチ間のトランクリンクをNative VLANに属するフレームが通ることができる、っていうほうが正確か?)
  • 攻撃マシンとスイッチはトランクリンクで結ばれている必要がある。

メモ

攻撃マシンをスイッチのアクセスポートにつなぎ、ダブルタグされたフレームを送ったとしても、VLANタグのついたフレームはアクセスポートではドロップされてしまう挙動が多い。私の持っているCatalyst 2960ではドロップされるようだが、これは機器の実装によるのでお持ちのスイッチで確かめてみるといいだろう。

Double Tagging Attackの概要

ちらほら、アクセスポートにつないでDouble Tagging Attackができるって言ってる記事があるので、それもやってみよう。

よって、実験は2つ

①トランクポートにつないでDouble Tagging攻撃が成功するか

②アクセスポートにつないでDouble Tagging攻撃が成功するか

実験①:トランクポート経由でのDouble Tagging Attack

ハッキング環境、機器の準備

ネットワーク環境

ネットワーク構成図

スイッチ、ホストコンピュータは前記事のスイッチスプーフィングでも用いた、Catalyst 2960とRaspberry pi 3 model Bを使いまわす。

Catalyst 2960

Raspberry Pi 3 model B

また、今回はネットワークを流れるフレームのVLANタグ構造を監視したいので、スイッチ1とスイッチ2でSPANを設定します。

! SW1でSPAN設定
(config)# monitor session 1 source interface fa0/13 rx
(config)# monitor session 1 destination interface fa0/21 encapsulation replicate
! SW2でSPAN設定
(config)# monitor session 1 source interface gi0/1 rx
(config)# monitor session 1 destination interface fa0/21 encapsulation replicate

このコードで特に重要なのが、各設定コードの2行目のencapsulation replicateで、これを設定しないとVLAN tag情報が含まれずに監視ホストにフレームが送られてしまいます。

攻撃ホストとスイッチ間でトランクリンク確立

まずは攻撃ホスト<->スイッチの間にトランクリンクを確立するために、DTPパケットを送信します。具体的な手順としては前記事のスイッチスプーフィングで紹介しているので、ここでは確立後のスイッチ1のインターフェース状態のスクショのみで割愛します。

Fa0/13にトランクリンク確立

ダブルタグされたパケットの送信

それでは、前ステップで確立したトランクリンクを用いて、Fa0/13に接続された攻撃ホストからダブルタグされたフレームを送信します。

ダブルタグされたフレームの生成と送信にはscapyを用いました。以下、VLAN1とVLAN10でタギングされたフレームを送信するコードです。

from scapy.all import *

dst_ip = '169.254.26.204'
packet = Ether()/Dot1Q(vlan=1)/Dot1Q(vlan=10)/IP(dst=dst_ip)/ICMP()
sendp(packet, iface="eth0")

Wiresharkによる攻撃成功の確認

↓)SW1ではVLAN1とVLAN10がダブルタグされた状態でフレームを受信しています。

SW1での受信フレーム(ダブルタギングされている)

↓)SW2にて受信したフレームは、外側のVLAN1タグが外れていることが確認できます。

SW2での受信フレーム(内側のVLAN10タグのみ残っている)

↓)RS3(標的マシン)にてフレームを受信したことで、攻撃が成功したことがわかります。(直写真で申し訳ないです)

標的マシンでのフレーム受信

まとめ

本記事では、前記事のスイッチスプーフィングによって確立したトランクリンクから、ダブルタギング攻撃を使って、通常ではアクセスできないVLANに割り当てられた標的ホストへフレームを送信することができるを確認しました。

ダブルタギング攻撃に関する実験は、以下のようにあと1つあります。

①トランクポートにつないでDouble Tagging攻撃が成功するか(本記事で実施済み)

②アクセスポートにつないでDouble Tagging攻撃が成功するか

次回の記事では②の実験を行っていこうと思います。

 

引用

IEEE 802.1Q - Wikipedia

https://www.practicalnetworking.net/stand-alone/vlans/

Native VLAN - the DEFINITIVE illustration - YouTube

https://notes.networklessons.com/vlans-when-a-tagged-frame-arrives-on-an-access-port

Solved: 802.1q tag on access switchport - Cisco Community

Exploiting VLAN Double Tagging | NotSoSecure

パケットキャプチャ - Catalystスイッチの設定 1(SPAN / RSPAN)

Catalyst 2960 スイッチ ソフトウェア コンフィギュ レーション ガイド Rel. 12.2(40)SE - SPAN および RSPAN の設定 [Cisco Catalyst 2960 シリーズ スイッチ] - Cisco

Catalyst 2960 Switch Software Configuration Guide, Rel. 12.2(37)SE - Configuring SPAN and RSPAN [Cisco Catalyst 2960 Series Switches] - Cisco