mDNSとDNS-SDのエクスプロイトー事前知識①:mDNSとは
mDNS
ネームサーバーのないLAN内で名前解決を可能にするプロトコル
mDNS単体で使うこともできるが、DNS-SDと使われることが多い
IPマルチキャストを使い、UDPを用いて送信される。クエリもレスポンスもマルチキャストでLAN内(スイッチ内、サブネット内)のホスト全てに情報が共有される。その結果、レスポンスに含まれるホスト名=IPの対応情報はLAN内の全てのホストがmDNSキャッシュに保存することができる。
送信先IPアドレスは常に224.0.0.251(IPv4) / ff02::fb(IPv6)が使われる
送信先MACアドレスは01:00:5E:00:00:FB (for IPv4) or 33:33:00:00:00:FB (for IPv6)
送信元ポートと送信先ポートは共に5353が使われる。(DNSは53)
Read moreDouble Tagging Attackやってみた② ー アクセスリンクからの攻撃
はじめに ー 前記事の内容と本記事で扱う実験内容について
今回は前記事に引き続いて、レイヤー2での攻撃手法であるDouble Tagging Attackに関する記事です。前記事では、Double Tagging Attackをトランクリンクで繋がれた攻撃ホストから行い、通常ではアクセスすることができないVLANにいる標的ホストへとフレームを送信できることを見ました。
前記事の準備段階でDouble Tagging Attackに関する情報をWebで漁っている際、アクセスポートからDouble Tagging Attackを行えると書いてあるページを見つけたので、実際に攻撃可能か検証していこうと思います。
正直なところ、本攻撃が成功するかどうかは、私の持っているスイッチ(Catalyst 2960)の仕様に依ると思います。というのも、アクセスポートにてVLANタグのついたフレームを受け取った際に、そのフレームをドロップするか、それともそのままトランクリンクに流すかはスイッチの仕様依存だそうだからです。ちなみにCatalyst 2960はドロップするそうです笑 「じゃあ実験する前から失敗することわかってるやん」、となると思いますが、見てみるまで信用できないのです。
そんな感じで実験開始ですが、温かい目で失敗する様子を見守って下さい。
実験準備
今回の実験をまとめたネットワーク構成図です。
前記事と同様にスイッチにはCatalyst 2960を用いて、攻撃ホスト、標的ホストはともにRaspberry Pi 3 model Bを使います。
また、フレームのVLANタグ構造を確認したいので、監視ホストであるUbuntu22.04にWiresharkをインストールし、スイッチの各ポートにSPAN設定をし、受け取ったフレームを監視ホストに流せるようにしました。
ここまでの流れは前記事と全く同じです。
異なるのは攻撃ホストにつながれたスイッチのポートが、トランクポートではなくアクセスポートであることです。
スイッチの監視設定と接続状態を載せておきます。
ダブルタグされたフレーム送信
以前の記事と同様にscapyを用いてダブルタグされたフレームを送信しました。
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で確認
WiresharkでSW1での受信フレーム、SW2での受信フレーム、標的ホストでの受信フレームを確認しましたが、攻撃ホストから送信されたフレームは全くキャプチャできませんでした。
まとめ
アクセスポートにダブルタグされたフレームを送っても、Catalyst 2960ではドロップされることがわかりました。また、ドロップされたフレームは、その受信ポートでSPAN設定をしていても拾われないことが追加で判明したのが個人的に有益でした。
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を持っていないことを意味する。
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
スイッチスプーフィングをやってみる
はじめに〜事前知識
多くの組織は、ネットワークを分割し、
①セキュリティ要件の低いアセット
②セキュリティ上重要なアセット
に分けることをして、セキュリティ向上を図る。
②に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)
スイッチスプーフィング
多くのスイッチはシスコの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
コンピューターサイエンスの未来を作る技術について ー IoT(関連技術編)
IoTの関連技術
今後IoTとの結びつきが強くなる関連技術を紹介します。
ブロックチェーン ー IoTデバイス間のセキュアなデータ交信を可能に
IoTを用いて何らかのシステムを実現する際、真っ先に上がる課題が「信用性と安全の確保」です。「IoTデバイスが他のデバイスとデータ交信する際に、そのデータが盗聴、改竄されないか」が重要なポイントとなるわけですね。
そこで、データ漏洩や外部からのサイバー攻撃が問題となる従来の中央集権的なシステムから、暗号技術とコンセンサスアルゴリズムを用いたブロックチェーンをデータ交信に適用することで、通信の信用性と安全性を担保するわけです。
Markets and Marketsによれば、IoT x ブロックチェーン市場は2020年の2億5800万ドルから2026年には約10倍の24億900万ドルに拡大すると言われています。
5Gネットワーク ー IoTのパフォーマンスを最大限に引き出す
5G技術によりIoTの技術は最大限にその可能性を発揮するといってもよいでしょう。
5Gネットワークを通じて、最小限の遅延で交信でき、リアルタイムでデータを処理できるようになります。
人工知能 ー モノに考える力を
AIによってIoTは大量のデータを分析し、分析結果に基づいてよりインテリジェントな出力を生み出すことができます。AIを搭載したIoTはセンサー入力から得られる大量のインプットから、特定のパターンや傾向を判別し、最適化やリソース配分などのタスクをこなすことができます。
例として自動運転車や自動ドローンが挙げられ、それらはAIによって自律的制御が可能となり、障害物を避ける、最適なルート探索を行うわけですね。
Digital Twins
2020年に提唱された技術で、Digital Twinsとは物理的なオブジェクトやプロセスをリアルタイムで仮想化したもので、分析や最適化、モニタリング、パフォーマンスの制御に用いられます。IoTデバイスに取り付けられたセンサーによって現実の空間情報を蓄積することで、後述するメタバースのような仮想空間で現実世界の空間を再現することができます。
IoTによってより多くのモノが相互作用しデータ共有する中で、仮想化された現実空間の複製を用意しておくと、データサイエンティストや他のIT技術者が最適化や様々なケースを実験できるようになります。
実際に、NVIDIA社開発のプラットフォーム「NVIDIA Omniverse」を用いて、工場のデジタルツインを構築し、生産ラインのシミュレーションなどを行った実例があります。
サイバーセキュリティ ー
デバイス間で頻繁に起こる通信において、いかに機密性・完全性・可用性を確保するのか。これまでのセキュリティ対策がIoTという新技術においても適用できるのか。IoTのサイバーセキュリティにはこれらの課題があり、それがIoT x サイバーセキュリティが新しいセキュリティ分野として確立された理由の一つです。
エッジコンピューティング
エッジコンピューティングとは、「データはそれを作り出した場所から最も近い場所で処理すべきだ」という考えのもと、IoTにおけるデータの発生源であるモノの中でデータを処理してしまおうという演算手法です。
エッジコンピューティングによって、処理量、処理スピードが共に上がり、リアルタイムでIoTからの出力を得ることができます。
IoTで実現する未来
すでにメタバースやデジタルツインなど、IoT技術無しでは実現できない構想が台頭してきています。そのほかに、今後IoTで実現する未来例を2つ紹介します。
スマートシティ
スマートシティはIoTの実現する未来として真っ先に議論に挙がりますね。
スマートシティと似た概念としてスーパーシティがありますが、スーパーシティとは住民の課題解決を目標として技術を街に適用するものであり、技術に焦点をあてたスマートシティと混同しやすいですね。スーパーシティとスマートシティの違いをより知りたい方はこちらを参考にされると良いと思います。
交通量のコントロール
IoTにおいてインターネットに接続されるものは家電やガジェットだけではなく、車、バイクも含まれます。不要な交通量によってもたらされる渋滞、事故などの課題を解決する可能性をIoTは持っています。
まとめ
本記事では、「コンピュータサイエンスの未来を作る技術について」の第一歩目の技術としてIoTを選び、その関連技術と将来の活用方法について紹介しました。IoTの関連技術は、AIからメタバースまで可能性を秘めた最新技術を幅広くカバーしていることが確認できました。将来の活用方法については、今回挙げた三つの例にはとても収まらないので、興味のある方は書籍や他Webページをご覧になってみて下さい。
引用
Top IoT Trends in 2023 That You Must Know About | Antino Labs
Blockchain IoT Market worth $2,409 million by 2026
IoT技術が支える「メタバース」 デジタルツインのビジネス利用、その最新動向とは? | IoT設計構築支援 TED REAL IoT|東京エレクトロンデバイス
コンピューターサイエンスの未来を作る技術について(はじめに)
こんにちは、ヤマダです。
本記事から始まる「コンピューターサイエンスの未来を作る技術について」では、
2025年~の近い未来を見据えた「取り組む価値のある技術」について執筆していこうと思います。
私自身20代の終わりが近づきつつも、フラフラとしているエンジニアであり、
「そろそろ腰を据えて一つの技術を掘っていこう」という思いがあります。
そこで、年齢関係なく新しい技術に触れようとする全ての方を応援すべく、
「AIとかIoTとかブロックチェーンとかいろいろあるけど、何すりゃいいの?」という疑問に真っ向から応えていこうと思います。
"Emerging Technologies in Computer Science"とググってみても、
- Blockchain
- XR(AR/VR/MRを統合したもの)
- AI
- Cybersecurity
- IoT
- 5G Networks
- Edge Computing
- Metaverse
等々、頭の追い付かないほどのだだっ広い技術タイトルがでてきます。
これらの技術タイトルの中から、独断と偏見で技術をピックし、
それぞれの技術の取り組むべきメリット、市場規模、選んだ際のキャリア等、
随時論じていきたいと思います。
シリーズ最後には、私が選んだ技術とその展望で締めくくればいいなと思います。(これが本シリーズ執筆の真の目的です笑)
それでは、どうぞ!
HackTheBox Responderを理解する
HackTheBox上で公開されているResponderボックスのエクスプロイットが難しかったので、理解する。
とりあえずnmapで全ポートスキャン。
HTTPが空いているので、ブラウザからアクセスする。
Server Not Connectedエラーが出るので、Wiresharkでパケット見てみると、http://unika.htbにリダイレクトされるが、そのホストネームを解決できてないっぽい。
よって、/etc/hostsを編集して解決。
アクセスするとこんなページが。
このWebページ上で色々といじってると、デフォルトでは英語のページで、他の言語はフランス語とドイツ語をサポートしており、それらのhtmlはpageパラメータで指定しているっぽい。
pageパラメータでローカルのファイル(今の例だとfrench.html)を読み込めるので、ファイルインクルージョンの脆弱性があるかもしれない。
ファイルインクルージョンについて
ファイルインクルージョンには2種類ある。
①ローカルファイルインクルージョン
サーバー内のファイルを読み込むことで、内部ファイルの閲覧を許してしまう。
②リモートファイルインクルージョン
攻撃者がサーバー外に用意したファイルを読み込むことで、攻撃者のコードを実行したりする。
nmapの出力によりサーバーサイドレンダリングはPHPで行われていることがわかるので、phpのincludeを調べてみる。
PHPのincludeはリモートのPHPファイルを読み込めることがわかった。
引用