【技術本】データ分析によるネットワークセキュリティ
https://amzn.to/40lUTiJ
【技術本】データ分析によるネットワークセキュリティ
へポスト
python2.7環境(Mac)で検証済み。
膨大なログデータから攻撃の兆候や証拠を抽出するためのデータのクレンジング、分類、体系化の方法から、統計グラフなどの可視化を踏まえた分析方法の具体的手順を筆者の経験則によるノウハウを踏まえ紹介している。
本書で下記を学ぶことができる。
・NetFlow, tcpdumpなどのトラフィックデータをツールで解析&可視化する方法を紹介
->SiLK(クレンジング、分類、体系化など)
->R(クレンジング、分類、体系化、グラフ化など)
・他のツールの紹介
->イベント検知ツールとしてのIDS、検知性能の改善方法
->上記以外のグラフ化ライブラリや、通信の探査用ツールの紹介
・データ分析手法
->EDA(探索的データ分析)と可視化の方法(現象だけを闇雲に追わずに、データセット全体からきちんと調査する手法)
->ファンブル(アクセス試行失敗)、単位時間ごとの通信量、局所性などから攻撃の兆候を分類するノウハウ
->各種解析データを適切なグラフ化で分析する論理プロセス
->ネットワークマッピングの構築手順とノウハウ
本書を読み進めることで、効率的なトラフィック監視センサー(IPS,IDS,FWなど)の配置や取得データの選別方法を学び、tcpdumpログなどを各種解析ツール(SiLK,Rなど)のコマンドライン上で、抽出したい情報に自在に選別し、各用途に分けて加工できるようになる。
取得したデータをデータベースなどに永続化して連携することで、単一ホストだけでなく大きなネットワーク一連のトラフィックを取得し解析できる点についても言及している。
更に、膨大なログやアクセスの兆候から調査の足がかりを見出し、不審な兆候を徐々に洗い出していく論理思考によるアプローチと、併せて行う可視化による分析などの一連のプロセスは一見の価値があると感じた。
他のセキュリティ技術著書やネットワークインフラ技術の知識を踏まえることで、さらに価値が出てくる著書であると感じだ。
(注意事項)
・本書の着眼はデータ分析であり、「セキュリティ」における、具体的な攻撃手法、技術的な脆弱性の仕組みの記述に関しては、本書では扱っていないので注意。
・また、各種センサー(IDS,IPS,FW)やネットワーク機器の基本的仕組み、操作、設定の知識があること前提として述べられており割愛されている。
・本書のサンプルプログラムはpython2で記述されている。webからdownloadできるが、バグは改善されていない。また、一部しか公開されていない。
記載されている内容の補足メモ、正誤表、コードのバグ対策などは下記の様です。
---------------------------------------
第一部 データ
---------------------------------------
1章.センサーと検出器:入門
センサーとデータ種別:
それぞれ得意な領域が分かれている。
互いを補完するように使うのが最善
ネットワーク型
・ネットワーク上を流れるパケット
->取得データ(HTTP通信の例):通信一連のパケットを記録
->例:snort,tcpdump,IDSなど
ホスト型
・ホスト上のサービス利用状況
・ログイン、ログアウト、ファイルアクセス、デバイス仕様情報などの監視
・通信による暗号化前、復号化後のデータを把握できる
->取得データ(HTTP通信の例):ファイルアクセスを記録
->例:Tripwireなど
サービス型
・ホスト上の特定サービスの挙動(HTTP,SMTPなど)
・通信による暗号化前、復号化後のデータを把握できる
->取得データ(HTTP通信の例):HTTPセッションでどのページが表示されたか
配置:
設置場所を複数設ければ現象を多角的に分析できる。
収集するデータの網羅性と冗長性とのバランスに考慮しながら、センサーの個数と位置を決定する。
センサーのアクション:
・レポート生成型(tcpdump...etc)
->センサーが取得したデータを記録するのみ
・イベント通知型(IDS,AntiVirusSoftware...etc)
->データを参照して総合的に診断し異常を検出する
->どのような事象が発生したかを示すイベントを通知する
・自律防御型(IPS,Firewall...etc)
データを参照して総合的に診断し、イベントを通知し、同時に自律的に防御を行う。
---------------------------------------
2章.ネットワーク型センサー
2.1ネットワーク階層とセンサー
[欠点]
・データ収集時間がかかる
・データ量膨大
・暗号化されているものは読めない
[利点]
・ネットワークの様子がわかる
->不明ホストの存在、不要サービスの存在、バックドア、侵入者の存在、予想外のパケット経路など
2.2パケットデータ
・libcap
Linuxなどで動作しプロミスキャスモードでネットワーク上のパケットを全て取得できるツール(Windows版:WinPcap)
ほとんどの近代的なシステムではtcpdumpはイーサネット上のIPをキャプチャする。
TCP,UDP,ICMP(VPN使用時:ESP,GRE)がトラフィックの圧倒的多数を含む
収集するパケットを制限する方法(3通り)
・循環バッファ(リングバッファ):
規定サイズのログ用バッファを複数用意してそれを順に循環させる方法
循環時に最初のバッファに戻ったら順次上書きされていく
例:$ tcpdump -i en1 -s 0 -w result -C 128 -W 32
記録用ファイルresultを128MBのサイズにしてresult1〜32間で循環させる
・記録するパケット長の制限:
各パケットを丸ごと記録せず、パケットの頭から限定された長さ分だけ記録する
tcpdumpの(-s)パラメータで68(バイト)を指定すればTCP,UDPのヘッダ分は記録できる
・パケットのフィルタ:
スパニングポートでトラフィックを収集してからフィルタする。
または、tcpdumpなどではバークレーパケットフィルタ(BPF)を使って実現。
例:あらかじめsample.pcapにパケットを記録しておく
$ tcpdump -n -r sample.pcap src host 192.168.1.3 | head -1
送信元192.168.1.3以外をフィルタ
$ tcpdump -n -r sample.pcap dst host 192.168.1.3 | head -1
送信先192.168.1.3以外をフィルタ
$ tcpdump -n -r sample.pcap src net 192.168.1 | head -1
送信元192.168.1.0/24以外をフィルタ
$ tcpdump -n -r sample.pcap src net 192.168.1.3 | head -1
src host 192.168.1.3と同義
$ tcpdump -n -r sample.pcap src net 192.168.1.64/26 | head -1
送信元192.168.1.64/26以外をフィルタ
2.3 NetFlow
Cisco Systems社製 NetFlowの紹介
正誤表:
p25 図2-5
ルータ1,2の記載が抜けている(図上部の円柱2つが左からルータ1、ルータ2)
p33 2行目
src.netファイルに記録する
->
resultファイルに記録する
---------------------------------------
3章.ホスト型センサーとサービス型センサー:データの生成元でログに記録する
ホスト型センサー:IDS,OSログ,Anti Virus Software,McAfee製HIPS...etc
サービス型センサー:Webサーバログ,Mail転送ログ...etc
利点:
分析しやすい(理由:各種サービスを提供するプログラムが生成するため)
注意点:
ログ出力レベル設定変更が必要な場合あり
既存ログをさらに整形するプログラムが必要な場合あり
攻撃者にログが標的にされる場合あり(完全性:改ざん、消去)
ログ:Unix系では通常は/var/logに格納される(Windows系:イベントヴューアで閲覧が最適)
優れたログメッセージの特徴
・説明的(関連する必要資源をアナリストが特定できる情報を含んでいる)
・他のデータと関連付けできる(クライアントポートとアドレス情報があれば他のネットワークトラフィックデータを関連付けできる)
・完全である(特定のイベントに関する全ての情報を含んでいる)
分析に効果的なログを整形するプログラム
・時間をエポック時間に変換(UTCでの1970年1月1日からの経過秒数)
・各センサーの時刻同期
・アドレス情報(送信元IPaddr,送信先IPAddr,送信元ポート、送信先ポート、プロトコル)を入れる
・区切り文字のフォーマット変換(区切りスペースを|(パイプ)に変換など)
・テキスト内容でなく、エラーコードを使って省略する
ログファイルの種類
・カラムナ(列指向)型
区切り文字や固定テキスト幅で区別できる列に記録
※固定幅の場合、最大長を超えたらデータがトリミングされるのか注意すること
※区切り文字がデータ中にある場合、エスケープされるか
・テンプレート型
ログ内容がドキュメントテンプレートを基にしており列挙可能名もの
・注釈型
複数のテキストレコードを使って一つのイベントを表す
つまり、イベントを複数のメッセージに分散する
3.3ログの代表的なフォーマット
3.3.1 HTTP:CLFとELF
・CLF(Common Log Format):共通ログフォーマット
出力項目:
remotehost rfc931 authuser [date] "request" status bytes
※上記rfc931, authuserは古く使用されない。大概のログでは"-"と記される
・ELF(Extended Log Format):拡張ログフォーマット
ディレクティブを使って出力項目を指定できる
#ELF
#Vesion: 1.0
#Date: 2012/Oct/11 00:00:00
#Fields: time c-ip cs-method cs-uri
12:03:45 192.168.1.1 GET /index.html
・CLF(Combined Log Format):結合ログフォーマット
CLFにHTTP REFERER と User-Agentの2フィールドを追加したもの
以上を踏まえ、Apahceで各種CLF,ELFログフォーマットの設定方法を記載している。
3.4 ログファイル転送:転送、Syslog、メッセージキュー
3.4.2 syslog
体系的なシステムログ記録ユーティリティの祖先
ホスト上またはリモートに位置するロガーデーモンにメッセージを送信するための固定メッセージフォーマットと機能を定めている。
UDPベースのため、レイヤ2プロトコルのMTUで制限される。プロトコル上では1024文字制限。
UDPのため再送処理なし。破棄されると永遠に失われる。オープンソースのTCPベースのsyslogもあり。
CEF(Common Event Format):共通イベントフォーマット
syslog内で使用する広く受け入れられているメッセージ規定。
実際の仕様とキー割り当てはHewlett-Packard社から入手できる。
正誤表:
P48
コマンドラインを使ったHTTサーバへのアクセス
HTT => HTTP
---------------------------------------
4章.分析のためのデータ記録:リレーショナルデータベース、ビッグデータ、その他の選択
4.1 ログデータとCRUDパラダイム
大量データを扱う場合、操作がI/Oバウンドになるので、表現をバイナリフォーマットに変換することで空間の節約と性能向上。
->Google製のProtocol Bufferなどがある。
4.2 NoSQLシステムの簡単な紹介
ストレージの種類
・キーストア
MongoDB,Accumulo, Cassandra, Hypertable, LevelDB...etc
Key Value方式。巨大なハッシュテーブルとして動作する。スキーマなし
・カラムナ(列指向)データベース
MonetDB, Sensage, Paraccel...etc
各行を同じインデックスを持つ複数の列ファイルに分割する
・リレーショナルデータベース
MySQL, Postgres, Oracle, Microsoft SQL Server...etc
・ETC..
Hadoop, Redisなども有能
4.3 どのストレージを選ぶべきか?
・キーストア
データ構造がわからない場合、データ構造を持っていない場合
レコードサイズが大きい場合
・キーストアorカラムナデータベース
並列ノードで実行できる(ハードウェアの問題)
データ量が大きい場合(テラバイト以上)
・リレーショナルデータベース
単一ホストや利用できるホストが4つ未満(ハードウェアの問題)
データ量が大きくない場合
行を更新する場合
4.3.1 記録階層、問い合わせ時間、エージング
時間とともに古いデータを遅くて安価な記録システムに以降する。
・RAM
・SSDとフラッシュ記録
・ハードドライブと時期記録
・テープドライブと長期アーカイブ
データを以降する際に、データを要約、もしくは格納しやすいフォーマットに変換。
トラフィックを識別し要約、圧縮、削除できるものは実施する。->最適化->占有する空間が減る
---------------------------------------
第二部 ツール
---------------------------------------
5章.SiLKスイート
NetFlow分析ツールキット
インストール:
brew install silk
PATHが通らなかったので、~/.bash_profileなどに下記を追加
export PATH=/usr/local/Cellar/silk/3.10.2/bin:${PATH}
各種抽出、フィルタリングなどの分析や統計における操作の紹介
5.11.2 rwptoflowコマンド
tcpdumpしたデータをSiLKで読み込めるようにする
tcpdumpをSiLKを使って分析可能にできる。
$ sudo tcpdump -i en0 -w /var/log/testdump
$ rwptoflow /var/log/testdump > ~/test_for_netflow
$ rwcut ~/test_for_netflow | more
5.11.3 rwtucコマンド
様々な情報源のデータをSiLKフォーマットに関連付けたい場合、
カラムで構成されたテキストファイルをSiLK表現に変更できる。
正誤表
p102
sudo yaf -i en1 --live=pcap -out /tmp/yaf_yaf
=> sudo yaf -i en1 --live=pcap --out /tmp/yaf/yaf
---------------------------------------
6章.セキュリティ分析のためのR入門
オープンソース統計分析パッケージ
「R」インストール:入手先
cran.r-project.org
IDEフレームワーク
www.rstudio.com
tcpdumpデータをRで分析できるようにする
$ sudo tcpdump -i en0 -w /var/log/testdump
$ rwptoflow /var/log/testdump > ~/test_for_netflow
$ rcut ~/test_for_netflow >> ~/test_for_r
Rで読み込み
> s<-read.table(file='~/test_for_r', header=T,sep='|',strip.white=T)
表示
> s
以降、変数sに対して分析用のフィルタをかけることで解析、整形できる。
6.5.1 可視化コマンド
Rには時系列、ヒストグラム、棒グラフをプロットする高水準可視化コマンドがある。
正誤表:
p127
グラフ描画の際の変数sample_rnorm
sample_rnorm = rnorm(20,30,40)など初期化処理が事前に必要
6.5.4 可視化した画像のエクスポート
png,jpeg,pdfなどのフォーマットでの出力
6.6 分析:統計的仮説検定
取得したデータの統計分析用ツール(関数)が用意されている。
仮説検定:
・二項分布に対する仮説の検証
・シャピロ=ウィルク検定:
正規分布に対する適合度検定
・コルモゴロフ=スミルノフ検定:
正規分布や一様分布など連続分布に対する適合度検定
正誤表:
p132
#結果は表が1回、2回、3回、4回の順に表示される
⇨
#結果は表が0回、1回、2回、3回、4回の順に表示される
-----------------------------------
7章.分類およびイベントルール:IDS, AV, SEM
IDS:設置種類:
・ネットワーク型IDS(NIDS)
・ホスト型IDS(HIDS)
検出方法:
・シグネチャ型
偽陰性率(false negative)が高くなる
マルウェアシグネチャなどで判断
・アノマリ型
偽陽性率(false positive)が高くなる
正常な挙動で訓練され、正常から外れているものを探す
IDSの性能改善、検知向上のテクニックを紹介
・具体的な検知ルール、詳細な条件を設定して誤検知を減らす
->Snortを例にルールオプションを紹介
・アノマリー検知における有効な閾値の設定方法
現象の評価:予測可能=値が時間とともに収束するか
アノマリ検知の訓練中に異常と判断した現象の解釈を十分に分類し実運用時の負荷を減らす
攻撃者が必ず引き起こす現象に対して警告できるようにする
以下の攻撃者が回避しようとする方法を考慮する
->頻度を極度に減らす
->一連の攻撃を高速短時間に縮める
->攻撃を分散
->挙動を変化
・アナリストの負荷を減らすには、作業を高速効率的に行えるよう、警告を集約し、グループ化する。
リアルタイム分析でない場合は、事前にエクスプロイト、攻撃元のIPアドレスなどで分類。
---------------------------------------
8章.参照と検索:身元を確認するツール
MACアドレス
IPアドレス
IPv4,IPv6の仕様基礎知識
tracerouteコマンドによる中継地点特定
digコマンドでDNS問い合わせ、リバースルックアップ
DNSの仕様など
WHOIS検索
DNSBL(DNS Blackhole List)によるアンチスパムテクニック
---------------------------------------
9章.他のツール
9.1.1 Graphviz
・グラフレイアウト可視化パッケージ
ダウンロード:
www.graphviz.org/Download.php
グラフ表示:
例9-1 graphviz用dotファイル
p183 例1のコードをテキストで作成し、読み込めばOK
例9-2 pythonでdotファイルをコマンドライン上に出力する
p185 graph_output関数末尾の2重ループでtry〜exceptを追加しキー値以外を参照した場合でもループを続行するよう修正した。
p185 下から3行目のhost = values[-2][:-1]はバグ->(修正後) host = values[-2]
さらに、入力データが用意されていないが、下記のように打ち込み、
Ctrl+Dで結果表示しGraphvizに読み込めばグラフを再現できる。
※1行にhost refererの順にスペースを空けて入力する
www.nytimes.com www.nytimes.com
bs.serving.sys.com www.nytimes.com
graphics8.nytimes.com www.nytimes.com
c.brightcove.com graphics8.nytimes.com
admin.brightcove.com graphics8.nytimes.com
markets.on.nytimes.com www.nytimes.com
pagead2_googlesyndication.com www.nytimes.com
admin.brightcove.com graphics8.nytimes.com
graphics8.nytimes.com www.nytimes.com
9.2.1 netcat
出力をTCP socket, UDP socketにリダイレクトなどができる。
インストール:
brew install netcat
実行例:
$ echo "GET /" | netcat www.google.com 80
9.2.2 nmap
スキャンツール
インストール:
brew install nmap
実行例:
$ nmap -A 192.168.1.9
9.2.3 Scapy
Pythonベースのパケット操作、分析ライブラリ
インストール:
環境構築は仮想環境がおすすめ(for python2)
sudo pip install virtualenv
virtualenv ~/test
cd ~/test
source bin/activate
sudo pip install scapy
p190 例9-3
[Mac EL-Capitan環境での対策]
注意:コードは先頭に from scapy.all import * が必要
それには、dnetライブラリが必要で、makeやコードの修正が必要
詳細は下記URL(修正は自己責任)
stackoverflow.com/questions/26229057/scapy-installation-fails-on-osx-with-dnet-import-error
(上記URL内容を踏まえた手順)
入手先:
github.com/dugsong/libdnet
Make:
./configure
make
sudo make install
cd python
chmod 755 setup.py
./setup.py install
コード修正:unix.py
関数:def read_routes():
else分の後
(修正前)f=os.popen("netstat -rn") # -f inet
(修正後)f=os.popen("netstat -rn | grep -v vboxnet") # -f inet
p190 コードバグ
#TCPペイロードを持つ最初のパケットを探す
バグ:存在しないキー値を参照したら例外で処理が停止するので、
処理を続行するようにfor文内の処理をtry〜exceptで囲むなどの対応が必要。
p191
#PDFDumpを使って内容を書き出す
pyxライブラリが必要(python2 は0.12.1以前が必要)
インストール:
pip install pyx==0.12.1
(注意)
自分の環境では下記エラーのため断念。後調査で結果が出たら追記します。
RuntimeError: TeX/LaTeX finished unexpectedly
p192
バグ:存在しないキー値を参照したら例外で処理が停止するので、
処理を続行するようにfor文内の処理をtry〜exceptで囲むなどの対応が必要。
9.3.1 Wireshark
トラフィック分析ツール
9.3.2 GeoIP
IPアドレスを受け取り、アドレスの物理的位置に関する情報を返す。
インストール:
pip install pygeoip
データベースは下記からダウンロード
dev.maxmind.com/geoip/legacy/geolite/
Ctrl+Dで結果表示
---------------------------------------
第三部 分析
---------------------------------------
10章.探索的データ分析と可視化
現象だけを闇雲に追わずに、トラフィック全体のデータセットからきちんと調査する手法。
EDA(Exploratory Data Analysis:探索的データ分析)により、
取得したデータセットを人間が調査に値する現象を特定しやすいように可視化する。
・ヒストグラム
・棒グラフ
・QQプロット
・箱ひげ図
・散布図
・分割表
データを図表へプロット時にメモリを自動スケールなどにしておくと、ひとつの大きな事象のために、別の事象データが隠れて発見の妨げになる点に注意。
※大きな数値異常のために桁表示が大きくなり、それ以下の異常値が見つけにくくなる。
---------------------------------------
11章.ファンブルの処理
ファンブル:標的への系統だった接続ミスのプロセスのこと。
・スキャン
攻撃者は水平スキャンを行うことが多い
特定の標的に興味がある場合は垂直スキャン
・TCPファンブル
SYNフラグがあってACKがないものが多発する時はネットワーク上を無差別に検索している
5パケット以下のTCPフローはファンプルの可能性(3ウェイハンドシェイクで3つのオーバヘッド)
・ICMPファンブル
メッセージの急増に注目
ネットワークの方針によってフィルタもできるので注意
・UDPファンブル
UDPは配信を保証しないので失敗した接続の特定の場合はほぼ不可能
UDPファンブル自体の特定には、ネットワークマップ、ICMPトラフィックが有効
・サービスレベルのファンブル
明示的にエラーログとして記録される
・HTTPファンブル
404,401のエラーコードに着目。一般的なツールの管理ページの探索など
※Basic認証は近代的なWebサーバでは使ってはいけない
・SMTPファンブル
ホストが存在しないアドレスにメールが送信されること
APT型メール
11.5 ファンブルの分析
攻撃者が実際の標的に到達しているか
接続に失敗した証拠の調査
無害な失敗か、悪意あるファンブルかを見分ける閾値の設定
・ユーザが一定期間内にアクセスするであろうネットワーク上のホスト数の期待値
・逐次仮設検定
スキャンなどに応答したのか、スキャン以外にその後何が行われたか、不審な通信が発生したか、特定の標的の意思の確認
11.5.3 ファンブルを活用するためのネットワーク運用
悪意あるスキャンは、標準サイトの標準性を悪用するので、それを逆手に取った対策法
・IPアドレスを均一に分散させる。(x, x+1などで昇順スキャンを妨害)
・サービスポートをカスタマイズして変更する
---------------------------------------
12章.ボリュームと時間の分析
単位時間内のトラフィック量を比較することで特定できる現象
・ビーコニング(一定間隔でアクセス、攻撃の兆候)
・ファイル大量アクセス
・Dos
就業、就寝など社会的現象によるトラフィッックの増減現象
休日の価値:トラフィックが少ない分、アノマリーを検出しやすい
12.2 ビーコニング
ビーコン検出ツール:python2実装
12.3 ファイル転送/略奪
略奪検出スクリプト:python2実装
12.4 局所性
ユーザごとのアクセス先などのログ情報を、固定サイズLRUキューを用意して追加していく
・空きがある場合はキューの最後に追加
・キューがいっぱいだがすでに存在する場合はキューの最後に移動
・キューがいっぱいで存在しない場合は最後に追加し、先頭を削除
これらの処理を統計すると変換率が出されて、ファイルの局所性の傾向がわかる。
12.4.1 DDos、フラッシュクラウド、資源枯渇
・DDos
・フラッシュクラウド:何らかの通知によってサイトへの正規なトラフィックが突然増大すること
・インフラ障害
上記の帯域幅枯渇を理想化グラフを示して区別方法を可視化。
12.5 ボリューム分析と局所性分析の適用
異常検知システムを構築する際の、偽陽性を提言する様々な手法を紹介
12.5.1 データ選択
・正常通信(ダーク空間と通信しないもの)をフィルタ
・長いTCPセッションと短いTCPセッションを分離
・トラフィックを、コマンド、ファンブル、ファイル転送に分類
・受診したバイト数ごとに大別し、回数を記録
これによって余計なノイズを減らすことができる。
12.5.2 警告としてのボリュームの使用
簡単な方法:ヒストグラムの閾値を超える確率を元に閾値を設定する
12.5.3 警告としてのビーコニングの利用
常にやりとりしてるホストを検出。
ソフトウェア更新、ウィルス定義、SSH cron jobなどの偽陽性検知に注意
12.5.4 警告としての局所性の利用
ワーキングセットモデル
局所性は、ボリュームベースの略奪検知を補完する
---------------------------------------
13章.グラフ分析
ネットワークトラフィックログはグラフ化できる候補がたくさんある。
グラフはノードとリンク(有向[始点、終点あり]、無向)で構成。
・HTTP:Refererでリンクされた個々のページをノードとしてグラフ化できる
・メール:メールアドレスをノードとしてノード間をリンクしたものをグラフ化できる
13.1 グラフの属性:グラフとは何か
p275 例13-1 グラフ作成コード:バグ
neightbors関数
if self.nodes.has_key(address):
-> setにはhas_keyがないので下記で対応
if address in self.nodes:
13.2 ラベル付け、重み、経路
p278 例13-2 最短経路探索コード:バグ
最短経路を表示するmain文がない
apsp.py末尾に追加(例)
if __name__ == '__main__':
rd = sys.stdin.readlines()
w_graph=WeightedGraph()
for i in rd:
source, dest, weight = i.split()[0:3]
w_graph.add_link(source, dest, int(weight))
results = w_graph.apsp()
print results
データの中心性について
マルウェアなどに感染すると、そのノードが感染を広げるために中心的ノードの役割を担うようになるので、それを観測。
中心性を求めるコードも紹介。
13.3 成分と連結性
例13-4 成分の計算コード:バグ
main 文を追加し、basic_graph.pyを呼び出してグラフデータを入力し、calculate_components関数を呼び出す実装が必要
13.4 クラスタ係数
例13-5 クラスタ係数の計算コード:バグ
for i in g.nodes.keys()
->
for i in g.nodes
new_neighbor_list = g.neighbors[j]
->
new_neighbor_list = g.neighbors(j)
if k != i and neighbor_list.has_key(k)
->
if k != i and k in neighbor_list
悪意あるホストによる通信を発見したら、感染ホスト群が通信している相手を特定する。
それには反復的な幅優先探索が有効。
サイト近隣調査コードを紹介。
監視を効率的に行うために、重要ホストを特定。
トラフィックを分析して特定。本章で述べた中心性が指標になる。
---------------------------------------
14章.アプリケーション識別
通信の暗号化でパケットヘッダでのアプリ識別が難しい。
->ペイロードに依存しない識別方法->セッションの通信先ホストとパケットサイズから識別
p302 例14-6 PythonでのL1距離の計算:バグ
入力データが用意されていないの自力で用意が必要(引数のfile_1, file_2)
3
4
...
上記の様に数値と改行でヒストグラム値を模したデータを用意。空白行は削除。
・使用しているポート番号から特定する方法
・挙動から識別
->ファンブル
->制御トラフィック:サイズの小さい固定サイズパケット
->チャッター(サイズの小さい様々なサイズ:SMTP,BitTorrent...etcのコマンドメッセージ)
->ファイル転送:MTUサイズほぼギリギリの大きさで、他方がackを送信する非対称な通信(SMTP,HTTP,FTP)
・自動更新処理、定義更新処理などでアクセスする補助サイトからアプリケーションを特定
・アプリケーションバナーからアプリケーションを特定
・Webクライアントバナー(User-Agent)から特定
---------------------------------------
15章.ネットワークマッピング
主にSiLK問い合わせを利用して調査をしてネットワークマップを構築する手順を紹介。
フェーズ1:
・ネットワークを構成しているアドレスの把握
->IPv4 or IPV6か把握
->NATの背後に隠れているアドレス空間
->ホスト台数
・IDSなどのセンサーの位置の把握
->IDSで何を収集しているか
->NewFlow対応センサーがあるか
フェーズ2:
・監視されていないルートがあるか
・ダーク空間の把握
・ネットワークアプライアンスのIPアドレスの把握
->traerouteコマンド,BGP,RIP,OSPF,ICMPプロトコルなどで調査
フェーズ3:
トラフィックを混乱させる下記が存在するか把握
・NAT(複数IPアドレスを少数のアドレスに変換していまう)
->特定:一つのアドレスから複数のWebセッションで異なるUser-Agent,OSの初期値よりTTLが少ないなど
・プロキシ、リバースプロキシ、キャッシュ(複数IPアドレスをプロキシホストの背後に隠してしまう)
->特定:クライアントhostからはサーバの動作、代理接続先にはクライアントの動作
・VPN(通信内容をわかりにくくして関与しているホストを隠してしまう)
->特定:VPN固有のプロトコルを調べれば特定
・動的アドレス(時間経過とともにアドレス空間を移動してしまう)
フェーズ4:クライアントとサーバの特定
・サーバ
->特定:複数の送信元IP・ポートのフローが同じ送信先IP・ポートと通信
・優先順のサーバリストを作成。監視すべきor削除しても良いサーバの判別
15.1.5 検知および阻止インフラの特定
・IDS,IPSなどセンサーが適切に配置されているか、設定変更できるか
・どのログにアクセスできるか
・FWの把握
・ルータACLがあるか
・アンチスパムの配置
・アンチウィルスの配置
15.2 インベントリの更新:継続的な監査に向けて
ネットワークマップの継続的更新
------------------------
へポスト