事前の準備〜知識収集
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を持っていないことを意味する。
Double Tagging(ダブルタギング)
ダブルタギングは名の通りタグを二重で付与することで、ISP(インターネットサービスプロバイダ)がすでにVLANタグのついたフレームに追加で独自のタグを付与することができるようになった。
Native VLAN
VLANタグの付与されていないフレームは、スイッチのトランクポートにてNative VLANに属すると判断される。またNative VLANに属するフレームはVLANタグが付与されずに送信される。
どのVLANがNative VLANなのかはスイッチ毎、またはトランクポート毎に設定できる。
送信側のスイッチは、そのスイッチで設定されたNative VLANに相当するVLANからのフレームはVLANタグを付与せずに送る。
受信側のスイッチは、VLANタグのついていないフレームを受け取った際、そのスイッチで設定されたNative VLANに属するものと判断する。
Native VLAN周りのスイッチ上の挙動は以下の動画が参考になる。
Double Tagging Attackの概要
本攻撃を成功させるためには、以下の条件を最低限満たす必要がある。
- 攻撃マシンが攻撃経路のトランクリンク(下図ではSW1-SW2をつなぐトランクリンク)のNative VLANに所属する(???というよりかは、攻撃マシンとスイッチ間のトランクリンクをNative VLANに属するフレームが通ることができる、っていうほうが正確か?)
- 攻撃マシンとスイッチはトランクリンクで結ばれている必要がある。
メモ
攻撃マシンをスイッチのアクセスポートにつなぎ、ダブルタグされたフレームを送ったとしても、VLANタグのついたフレームはアクセスポートではドロップされてしまう挙動が多い。私の持っているCatalyst 2960ではドロップされるようだが、これは機器の実装によるのでお持ちのスイッチで確かめてみるといいだろう。
ちらほら、アクセスポートにつないでDouble Tagging Attackができるって言ってる記事があるので、それもやってみよう。
よって、実験は2つ
①トランクポートにつないでDouble Tagging攻撃が成功するか
②アクセスポートにつないでDouble Tagging攻撃が成功するか
実験①:トランクポート経由でのDouble Tagging Attack
ハッキング環境、機器の準備
ネットワーク環境
スイッチ、ホストコンピュータは前記事のスイッチスプーフィングでも用いた、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に接続された攻撃ホストからダブルタグされたフレームを送信します。
ダブルタグされたフレームの生成と送信には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がダブルタグされた状態でフレームを受信しています。
↓)SW2にて受信したフレームは、外側のVLAN1タグが外れていることが確認できます。
↓)RS3(標的マシン)にてフレームを受信したことで、攻撃が成功したことがわかります。(直写真で申し訳ないです)
まとめ
本記事では、前記事のスイッチスプーフィングによって確立したトランクリンクから、ダブルタギング攻撃を使って、通常ではアクセスできないVLANに割り当てられた標的ホストへフレームを送信することができるを確認しました。
ダブルタギング攻撃に関する実験は、以下のようにあと1つあります。
①トランクポートにつないでDouble Tagging攻撃が成功するか(本記事で実施済み)
②アクセスポートにつないでDouble Tagging攻撃が成功するか
次回の記事では②の実験を行っていこうと思います。
引用
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