はじめに〜事前知識
多くの組織は、ネットワークを分割し、
①セキュリティ要件の低いアセット
②セキュリティ上重要なアセット
に分けることをして、セキュリティ向上を図る。
②にIoTのネットワークが含まれていたとしよう。例えば、監視カメラとリモート操作可能なドアロックが含まれているケースを考える。
ネットワークを分割する際に用いられるものは、
①境界でのファイアウォール
②スイッチやルーター(ネットワークを複数のゾーンにわける)
VLAN(=より大きな物理ネットワークの部分集合)を用いて、ネットワークを分割するが。その際、異なるVLANに属するデバイス同士の通信はLayer3のスイッチ、またはルーターを経由しなければならない。そのようなスイッチ、ルーターではACLで決められたルールをもとにパケットを通すか拒絶するか決める。
しかし、もし組織がこのVLANの設定をミスっていた、または安全でないプロトコルを通信に用いていた場合、これらの制約を超えてVLAN-hopping attackを行うことができる。
VLANとネットワークスイッチを理解する。
スイッチのポートは以下の2種類に設定できる。
①アクセスポート
②トランクポート(タグポート)
IoTデバイスをアクセスポートに接続すると、スイッチはそのIoTデバイスが特定のVLANに属すると判断する。対して、トランクポートに接続された場合は、トランクリンクというコネクションを確立し、どのVLANから発生したパケットもそのコネクションを通ることができる。
トランクリンクを通過するパケットがどのVLANに属するかを特定するために使われる技術がVLANタギングである。VLANタギングとはパケットにVLANの識別子(VLAN ID)を付与することである。VLANタギングは様々なプロトコルで実装されている。(以下、プロトコルの例)
・Inter-Switch Link (ISL)
・LAN Emulation (LANE)
・IEEE 802.1Q & 802.10 (FDDI)
スイッチスプーフィング
多くのスイッチはシスコのDTP(Dynamic Trunking Protocol)を用いて、動的にトランクリンクを確立する。DTPを用いると、スイッチ同士を接続した際に、トランクリンクを確立し、VLANタギングのメソッドを決めるために通信し合う。
スイッチスプーフィング攻撃では、その名の通り(スプーフィング=なりすまし)、対象のスイッチに対して攻撃者のデバイスをスイッチだと偽り、トランクリンクを確立させる。
実践編〜機器の準備
今回行うスイッチスプーフィングのネットワーク構成図を手書きで書いてみた。
スイッチ2台とホストコンピュータ2台と攻撃ホスト1台が必要になる。
スイッチとして用意したのは、CiscoのCatalyst 2960。
ホストコンピュータと攻撃ホストは全てラズパイにした。
実践編〜スイッチの設定
スイッチスプーフィングを成功させるために、スイッチの設定を各2台に行う。
なお、スイッチの設定をコンソールから行うために、以下のRJ45-USB変換ケーブルを用意した。
Amazon.co.jp: KAUMO CONSOLE(RJ45) USB変換 コンソールケーブル (ブルー 1.8m FTDIチップ) : パソコン・周辺機器
行った設定内容は以下。
- ホスト名変更
- VLAN作成
- アクセスポートの設定
- トランクポートの設定
Ciscoコンソールでのコマンドは以下の通り。 ! ホスト名変更 # hostname SW1 ! VLAN作成 # conf t (config)# vlan 10 (config-vlan)# name critical_scope (config-vlan)# exit ! アクセスポート設定 # conf t (config)# interface fa0/1 (config-if)# switchport mode access (config-if)# switchport access vlan 10 (config-if)# no shutdown ! トランクポート設定 # conf t (config)# interface gi0/1 (config-if)# switchport mode trunk (config-if)# no shutdown
設定後の各スイッチのインターフェース設定は以下。
今回は攻撃マシンをスイッチ2のFa0/15に繋いだ。
実践編〜攻撃マシンからDTPパケットの送信
DTPの送信にはレイヤー2の攻撃ツールであるyersiniaを用いた。
GitHub – tomac/yersinia: A framework for layer 2 attacks
aptでyersiniaインストールして、 # apt install -y yersinia
GUI版を起動 # yersinia -G
Launch attackからDTPを選択し、”enabling trunk”にチェックを入れOK
スイッチ2のインターフェース状況を見に行くと、Fa0/15がtrunkになっており、trunkポートとなっていることがわかる。
実践編〜VLAN10へ通信可能か確認する
前ステップで、攻撃マシンがスイッチになりすまし成功したことがわかった。
では、実際にVLAN10へアクセス可能か確かめるために、ターゲットホストへpingを打ってみることにする。
まず、VLAN10へ接続するためのインターフェースを攻撃マシンに追加しなければならない。 # modprobe 8021q # vconfig add eth0 10 # ifconfig eth0.10 169.254.218.218 netmask 255.255.0.0 up
vconfigでインターフェースeth0にVLAN10を追加し、新たなIPアドレス169.254.218.218を割り当てた。
現在のネットワーク構成図をアップデートすると以下のようになる。
では、pingを打ってみる。(送信元インターフェースをeth0.10に設定するところに注意) # ping -I eth0.10 送信先IP
ping成功です。
まとめ
クリティカルなネットワークセグメントとそうでないセグメントを分ける手段としてVLANがあり、その設定ミスからスイッチスプーフィングという攻撃につながることを確認した。
スイッチスプーフィングはVLAN Hopping攻撃の一つであり、VLAN Hopping攻撃には他にもDouble Taggingという手法がある。スイッチスプーフィングは双方向の通信を可能にするが、Double Taggingは基本的には攻撃マシンからターゲットへの単方向の通信にしかつながらないことが違いである。
ただ、Double TaggingもターゲットマシンにRCE脆弱性が存在する場合その限りでないことを次回の記事では見ていきたい。
引用
ポートVLANとタグVLANの違いとは? | 日経クロステック(xTECH)
VLANの設定 – Catalyst – ネットワーク入門サイト
コマンドの使い方 – Catalyst – ネットワーク入門サイト
VLANの設定と確認コマンドを詳しく解説!これでCiscoのVLANの設定はマスター
CatalystスイッチでのイーサネットVLANの作成 – Cisco
Solved: 2960 will not allow “switchport trunk encapsulation dot1q” CLI – Cisco Community
https://fabian-voith.de/2020/10/27/bidirectional-communication-in-vlan-hopping-via-d
はじめに〜事前知識
多くの組織は、ネットワークを分割し、
①セキュリティ要件の低いアセット
②セキュリティ上重要なアセット
に分けることをして、セキュリティ向上を図る。
②にIoTのネットワークが含まれていたとしよう。例えば、監視カメラとリモート操作可能なドアロックが含まれているケースを考える。
ネットワークを分割する際に用いられるものは、
①境界でのファイアウォール
②スイッチやルーター(ネットワークを複数のゾーンにわける)
VLAN(=より大きな物理ネットワークの部分集合)を用いて、ネットワークを分割するが。その際、異なるVLANに属するデバイス同士の通信はLayer3のスイッチ、またはルーターを経由しなければならない。そのようなスイッチ、ルーターではACLで決められたルールをもとにパケットを通すか拒絶するか決める。
しかし、もし組織がこのVLANの設定をミスっていた、または安全でないプロトコルを通信に用いていた場合、これらの制約を超えてVLAN-hopping attackを行うことができる。
VLANとネットワークスイッチを理解する。
スイッチのポートは以下の2種類に設定できる。
①アクセスポート
②トランクポート(タグポート)
IoTデバイスをアクセスポートに接続すると、スイッチはそのIoTデバイスが特定のVLANに属すると判断する。対して、トランクポートに接続された場合は、トランクリンクというコネクションを確立し、どのVLANから発生したパケットもそのコネクションを通ることができる。
トランクリンクを通過するパケットがどのVLANに属するかを特定するために使われる技術がVLANタギングである。VLANタギングとはパケットにVLANの識別子(VLAN ID)を付与することである。VLANタギングは様々なプロトコルで実装されている。(以下、プロトコルの例)
・Inter-Switch Link (ISL)
・LAN Emulation (LANE)
・IEEE 802.1Q & 802.10 (FDDI)
スイッチスプーフィング
多くのスイッチはシスコのDTP(Dynamic Trunking Protocol)を用いて、動的にトランクリンクを確立する。DTPを用いると、スイッチ同士を接続した際に、トランクリンクを確立し、VLANタギングのメソッドを決めるために通信し合う。
スイッチスプーフィング攻撃では、その名の通り(スプーフィング=なりすまし)、対象のスイッチに対して攻撃者のデバイスをスイッチだと偽り、トランクリンクを確立させる。
実践編〜機器の準備
今回行うスイッチスプーフィングのネットワーク構成図を手書きで書いてみた。
スイッチ2台とホストコンピュータ2台と攻撃ホスト1台が必要になる。
スイッチとして用意したのは、CiscoのCatalyst 2960。
ホストコンピュータと攻撃ホストは全てラズパイにした。
実践編〜スイッチの設定
スイッチスプーフィングを成功させるために、スイッチの設定を各2台に行う。
なお、スイッチの設定をコンソールから行うために、以下のRJ45-USB変換ケーブルを用意した。
Amazon.co.jp: KAUMO CONSOLE(RJ45) USB変換 コンソールケーブル (ブルー 1.8m FTDIチップ) : パソコン・周辺機器
行った設定内容は以下。
- ホスト名変更
- VLAN作成
- アクセスポートの設定
- トランクポートの設定
Ciscoコンソールでのコマンドは以下の通り。! ホスト名変更 # hostname SW1 ! VLAN作成 # conf t (config)# vlan 10 (config-vlan)# name critical_scope (config-vlan)# exit ! アクセスポート設定 # conf t (config)# interface fa0/1 (config-if)# switchport mode access (config-if)# switchport access vlan 10 (config-if)# no shutdown ! トランクポート設定 # conf t (config)# interface gi0/1 (config-if)# switchport mode trunk (config-if)# no shutdown
設定後の各スイッチのインターフェース設定は以下。
今回は攻撃マシンをスイッチ2のFa0/15に繋いだ。
実践編〜攻撃マシンからDTPパケットの送信
DTPの送信にはレイヤー2の攻撃ツールであるyersiniaを用いた。
GitHub – tomac/yersinia: A framework for layer 2 attacks
aptでyersiniaインストールして、# apt install -y yersinia
GUI版を起動# yersinia -G
Launch attackからDTPを選択し、”enabling trunk”にチェックを入れOK
スイッチ2のインターフェース状況を見に行くと、Fa0/15がtrunkになっており、trunkポートとなっていることがわかる。
実践編〜VLAN10へ通信可能か確認する
前ステップで、攻撃マシンがスイッチになりすまし成功したことがわかった。
では、実際にVLAN10へアクセス可能か確かめるために、ターゲットホストへpingを打ってみることにする。
まず、VLAN10へ接続するためのインターフェースを攻撃マシンに追加しなければならない。# modprobe 8021q # vconfig add eth0 10 # ifconfig eth0.10 169.254.218.218 netmask 255.255.0.0 up
vconfigでインターフェースeth0にVLAN10を追加し、新たなIPアドレス169.254.218.218を割り当てた。
現在のネットワーク構成図をアップデートすると以下のようになる。
では、pingを打ってみる。(送信元インターフェースをeth0.10に設定するところに注意)# ping -I eth0.10 送信先IP
ping成功です。
まとめ
クリティカルなネットワークセグメントとそうでないセグメントを分ける手段としてVLANがあり、その設定ミスからスイッチスプーフィングという攻撃につながることを確認した。
スイッチスプーフィングはVLAN Hopping攻撃の一つであり、VLAN Hopping攻撃には他にもDouble Taggingという手法がある。スイッチスプーフィングは双方向の通信を可能にするが、Double Taggingは基本的には攻撃マシンからターゲットへの単方向の通信にしかつながらないことが違いである。
ただ、Double TaggingもターゲットマシンにRCE脆弱性が存在する場合その限りでないことを次回の記事では見ていきたい。
引用
ポートVLANとタグVLANの違いとは? | 日経クロステック(xTECH)
VLANの設定 – Catalyst – ネットワーク入門サイト
コマンドの使い方 – Catalyst – ネットワーク入門サイト
VLANの設定と確認コマンドを詳しく解説!これでCiscoのVLANの設定はマスター
CatalystスイッチでのイーサネットVLANの作成 – Cisco
Solved: 2960 will not allow “switchport trunk encapsulation dot1q” CLI – Cisco Community