SNMPを用いたMACアドレスの追跡

Download Report

Transcript SNMPを用いたMACアドレスの追跡

SNMPを用いたMACアドレスの追跡
環境情報学部2年 松島隆太郎
Mail: [email protected]
概要







背景と問題意識
解決方法とその後
実現するためには
最終目標
今回の実装目標
実装における仕組みと仕様
最後に
背景と問題意識
 自由に機器をつなげることができるネットワー
クにおいて、挙動が怪しい端末がいることが
わかることがある。
 怪しい端末のIPアドレス・MACアドレスがわ
かっていても、対策や隔離するためにはその
端末を探し出す必要がある。
 多くの機器のあるネットワークでは、夜も寝れ
ない管理者が、怪しい端末を探してうろついて
いるかもしれない。
 少しは寝かせてあげたい。
解決方法とその後
 調べたいPCがどこに繋がっているのかわかる
 挙動の怪しいPCを早期に物理的に見つけられる
 DHCP鯖を立ち上げているPC
 ウイルスの感染しているPC
 物理的な場所がわかるので対象端末の所属する
ネットワークに近い管理者に対応を依頼すること
が可能になる
 対象端末に近い場所で隔離をしやすくなる。
隔離のイメージ図
ハブB
ハブA
調査端末がどこに繋がっているかわかるので
隔離したい端末の直前で隔離をすることができる
ハブC
実現するためには
 追跡対象のMACアドレスがわかっている時に
対象が、どのネットワーク機器のどのポートに
繋がっているのかを調べることが必須。
最終目標ー完成形ー
 身近なネットワーク機器を指定した際に、そ
のネットワーク機器から調査対象までの物理
的な接続方法をSNMPを使って追跡できる
ようにする。
 前提条件
 追跡対象のMACアドレス
 一番最初に通信するネットワーク機器
 ネットワーク機器の構成(繋がり方)
 追跡限界
 SNMPで通信のできるネットワーク機器のインタ
フェース
完成形のイメージ図
ハブB
ハブA
ハブC
後ろ側のポートに繋がっている
最寄のネットワーク機器に
情報がマネージャーに渡される。
追跡対象のMACアドレスが
ハブAの後ろ側のポートには
どこに繋がっているのかを
ハブBがあることを知っているため
SNMP経由で調べる。
次はハブBに通信する
完成形のイメージ図
ハブB
ハブA
ハブC
指定されたMACアドレスは
一番右のポートに繋がっている
ハブBに対象のMACアドレスが
情報がマネージャーに渡される。
どこに繋がっているのかを
ハブBの右端のポートには
SNMP経由で調べる。
ハブCがあることを知っているため
次はハブCに通信する
完成形のイメージ図
ハブB
ハブA
ハブC
指定されたMACアドレスは
一番右のポートに繋がっている
情報がマネージャーに渡される。
ハブCに対象のMACアドレスが
ハブCの右端のポートには
どこに繋がっているのかを
もうSNMPで通信できるハブが
SNMP経由で調べる。
ないことを知っているため
処理を終了する。
今回の実装目標
 SNMPを使用して、指定したあるネットワーク
機器のARPテーブルから指定したMACアドレ
スを探し、どのネットワークインタフェースを経
由しているのかを調べる。
ARPテーブルデータの中から
ネットワーク機器が持っている
調査対象のMACアドレスを持つ
ネットワークインタフェースの一覧
項目から接続されている
を取得するコマンド及び
インタフェース番号がわかり
各インタフェースごとの
詳細をインタフェースMIBから
ARPテーブルデータの取得
取得することができる
どうやってARPテーブルを取得するか
1.3.6.1.2.1.4.22.1.2
インタフェース【1】
1.3.6.1.2.1.4.22.1.2.1
1.3.6.1.2.1.4.22.1.2.1.192.168.0.1
192.168.0.1のMACアドレス
1.3.6.1.2.1.4.22.1.2.1.192.168.0.2
192.168.0.2のMACアドレス
インタフェース【2】
1.3.6.1.2.1.4.22.1.2.2
実装における仕様
SNMPサーバー
OID
GETNEXT
共有ライブラリ
main
UDP
帰ってきたOIDを次の
ARPテーブルの内容を
対象となるMACアドレスが
GETNEXTのOIDとして
全て取得するために
以下のOIDブロックを作成する
受け取ったデータの型を調べ
問い合わせを繰りかえして
含まれるインタフェースを
問い合わせようの
SNMPパケットを
SNMPパケットを解析して
OIDブロック部分を
以下のOID以下のMIBを
OID:1.3.6.1.2.1.4.22.1.2
型に合うようにデータを変換し
UDPでサーバーに送り出し
調べ、その情報をSNMPで
GETNEXT
全てのIP,MACアドレス、
PDUを生成し
OIDブロック部分を取り出す
STRING形式で取り出す
全て取得する
帰ってきたOID及び中身を返す
SNMPパケットに埋め込む
問い合わせ、取得する
インタフェース番号の
結果を受け取る
OID:1.3.6.1.2.1.4.22.1.2
データを集める
実際の画面
最後に
 勉強のためにいろんなことをしてみました。




UDPで通信を行うecho serverとclientの作成
実際にSNMPで通信ができるのか確かめるために、SNMPWalkの
通信をパケットダンプし、それをC言語によるシュミレーション実装
SNMPの通信仕様、及びMIBの仕組みを学習した。
オライリー社「入門SNMP」等を参考にSNMPモジュールの作成。
 C言語について、なんとかわかるようになりました。

C言語を学習したことで、Perl自体の仕組みの理解が深まった?
 Perlはポインタを一生懸命隠してる。
 エイリアスとポインタの関係が気になる。
 ポインタをもっとうまく使えば、きれいにかけるんだろうな。
 いつもはライブラリを使ってる側として。

公開されているライブラリとかヘッダってすごいなと思いました。