1 / 41

ニューラルネットワークによる 遠隔 OS 同一確認 Using Neural Networks for remote OS Identification

ニューラルネットワークによる 遠隔 OS 同一確認 Using Neural Networks for remote OS Identification. Javier Burroni PacSec/core05 conference . 概要. 1.序論 2. DCE-RPC Endpoint mapper 3. Nmap signatures による OS 探知  4.次元削減とトレーニング. 1.序論 2. DCE-RPC Endpoint mapper 3. Nmap signatures による OS 探知 4.次元削減とトレーニング. OS 同一確認.

keefe
Download Presentation

ニューラルネットワークによる 遠隔 OS 同一確認 Using Neural Networks for remote OS Identification

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ニューラルネットワークによる遠隔OS同一確認Using Neural Networks for remote OS Identification Javier Burroni PacSec/core05 conference

  2. 概要 1.序論2.DCE-RPC Endpoint mapper3.Nmap signaturesによるOS探知 4.次元削減とトレーニング

  3. 1.序論2.DCE-RPC Endpoint mapper3.Nmap signaturesによるOS探知4.次元削減とトレーニング

  4. OS同一確認 • OS同一確認 =OS探知 =OSフィンガープリンティング • 侵入テストプロセスにおける重要なステップ • テストパケットを送り続け、ホストの応答を調査 • 第一世代: TCP/IPスタックインプリメンテーションの違いを分析 • 次世代: アプリケーション層のデータ (DCE RPC endpoints)を分析 • ウィンドーズバージョン/エディション/サービスパックのより的確な探知

  5. OSフィンガープリンティングツールの限界 • 情報を分析するために、ある“best fit”アルゴリズムのバリエーションが用いられている • 非標準的な状況では通用しない • 重要要素が引き出せない • 我々の提案: • データを分析するために使用されるテクニックに注目 • ニューラルネットワークを用いたツールを開発 • 商用ソフトウェアとして統合に成功

  6. 1.序章2.DCE-RPC Endpoint mapper3.Nmap signaturesによるOS探知4.次元削減とトレーニング

  7. ウィンドーズDCE-RPCサービス • ホストポート135にRPCクエリーを送る事によって、どのサービスかプログラムが記録されているか確定できる • 応答に含まれているのは: • 各プログラムのUUID = universal unique identifier • 注釈された名前 • 各プログラムが使うプロトコル • ネットワークアドレスにあてられたプログラム • プログラムのendpoint

  8. 2000 Professional edition service pack 0のEndpoints • uuid="5A7B91F8-FF00-11D0-A9B2-00C04FB6E6FC" annotation="Messenger Service" • protocol="ncalrpc" endpoint="ntsvcs" id="msgsvc.1" • protocol="ncacn_np" endpoint="\PIPE\ntsvcs" id="msgsvc.2" • protocol="ncacn_np" endpoint="\PIPE\scerpc" id="msgsvc.3" • protocol="ncadg_ip_udp" id="msgsvc.4" • uuid="1FF70682-0A51-30E8-076D-740BE8CEE98B" • protocol="ncalrpc" endpoint="LRPC" id="mstask.1" • protocol="ncacn_ip_tcp" id="mstask.2" • uuid="378E52B0-C0A9-11CF-822D-00AA0051E40F" • protocol="ncalrpc" endpoint="LRPC" id="mstask.3" • protocol="ncacn_ip_tcp" id="mstask.4"

  9. ニューラルネットワークが活用される‥ • DCE-RPCサービスで用意されたendpointsコンビネーションによってウィンドーズバージョン/エディション/サービスパックを識別する事が可能 • アイディア: マルチ層パーセプトロンニューラルネットワークを加えたendpointsコンビネーションをOSバージョンにマップする関数を設計 • 問題: • どのようなニューラルネットワークを使う? • どのようにニューロンを整理する? • どうやってendpointsコンビネーションをニューラルネットワーク入力にマップする? • どうやってネットワークを学習させる?

  10. マルチ層パーセプトロンニューラルネットワークマルチ層パーセプトロンニューラルネットワーク 413 ニューロン 42 ニューロン 25 ニューロン

  11. 3層接続形態 • 入力層: 413ニューロン • 各UUIDにニューロンを一つ • UUIDに一致する各endpointにニューロンを一つ • 未知のendpointにつき柔軟に対応 • 中間層: 42ニューロン • 各ニューロンは入力コンビネーションを表す • 出力層: 25ニューロン • 各ウィンドーズバージョンとエディションにつきニューロンを一つ • Windows 2000 professional edition • 各ウィンドーズバージョンとサービスパックにつきニューロンを一つ • Windows 2000 service pack 2 • ある一つの次元の誤差は他の次元に影響を与えない

  12. パーセプトロンとは何か? • x1 … xn ニューロンの入力 • wi,j,0 … wi,j,n ウェイト • f 非線形関数 • ハイパボリックタンジェント関数 tanhを使用 • vi,j ニューロンの出力 ネットワークのトレーニング=各ニューロンのウェイトを見つけ出す

  13. バックプロパゲーション法  (逆誤差伝搬法) • バックプロパゲーション法によるトレーニング: • 出力層 • y1 … ymを期待出力と仮定 • 推定誤差を計算 • この誤差は前の層に伝送される:

  14. 新しいウェイト • 時刻t+1で新しいウェイトは: • で: 学習速度 運動量

  15. 教師付きトレーニング • 入力と期待出力を備えたデータセットを所有 • 第一世代: 各入出力ペアのウェイトを再計算 • 完全トレーニング = 10350世代 • ネットワークトレーニングを14時間(python code) • 入力の順番が影響を与えないように、各世代のトレーニングプロセスでは入力がランダムで再配列される

  16. サンプル結果 Neural Network Output (1に近いほど良い): Windows NT4: 4.87480503763e-005 Editions: Enterprise Server: 0.00972694324639 Server: -0.00963500026763 Service Packs: 6: 0.00559659167371 6a: -0.00846224120952 Windows 2000: 0.996048928128 Editions: Server: 0.977780526016 Professional: 0.00868998746624 Advanced Server: -0.00564873813703 Service Packs: 4: -0.00505441088081 2: -0.00285674134367 3: -0.0093665583402 0: -0.00320117552666 1: 0.921351036343

  17. サンプル結果 (続) Windows 2003: 0.00302898647853 Editions: Web Edition: 0.00128127138728 Enterprise Edition: 0.00771786077082 Standard Edition: -0.0077145024893 Service Packs: 0: 0.000853988551952 Windows XP: 0.00605168045887 Editions: Professional: 0.00115635710749 Home: 0.000408057333416 Service Packs: 2: -0.00160404945542 0: 0.00216065240615 1: 0.000759109188052 Setting OS to Windows 2000 Server sp1 Setting architecture: i386

  18. 比較結果 • 我々のラボの結果:

  19. 1.序章2.DCE-RPC Endpoint mapper3.Nmap signaturesによるOS探知4.次元削減とトレーニング

  20. Nmap テスト • Nmapはネットワーク調査ツールであり、セキュリティースキャナーでもある • 9つのテストに対し、ホストの応答によってOS探知が可能

  21. Nmap signature データベース • 我々の手法はNmap signatureデータベースに基づくものである • Signatureとはある特定のバージョン/エディションのOSがテストにどう応答するか記述するルールである。例えば: # Linux 2.6.0-test5 x86 Fingerprint Linux 2.6.0-test5 x86 Class Linux | Linux | 2.6.X | general purpose TSeq(Class=RI%gcd=<6%SI=<2D3CFA0&>73C6B%IPID=Z%TS=1000HZ) T1(DF=Y%W=16A0%ACK=S++%Flags=AS%Ops=MNNTNW) T2(Resp=Y%DF=Y%W=0%ACK=S%Flags=AR%Ops=) T3(Resp=Y%DF=Y%W=16A0%ACK=S++%Flags=AS%Ops=MNNTNW) T4(DF=Y%W=0%ACK=O%Flags=R%Ops=) T5(DF=Y%W=0%ACK=S++%Flags=AR%Ops=) T6(DF=Y%W=0%ACK=O%Flags=R%Ops=) T7(DF=Y%W=0%ACK=S++%Flags=AR%Ops=) PU(DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)

  22. Nmapの長所と短所 • 1464個ものsignaturesがNmapデータベースに含まれている • ホストの応答がNmapデータベースにある全てのsignatureと比較される: • 各signatureにスコアが割り当てられる • スコア = ルールがマッチした数/考慮されたルールの数 • Hamming distanceによる“best fit” • 問題: 有りえないOS • テストに対して応答が少ない • よってスコアが高い • 例: Windows 2000 versionがAtari 2600かHPUXとして間違われる

  23. 階層型ネットワーク構成 • ニューラルネットワークを用いて応答を分析 • OS探知とは侵入テストプロセスのステップである • 我々はWindows, Linux, Solaris, OpenBSD, FreeBSD, NetBSDのみ探知したい Windows DCE-RPC endpoint Linux kernel version 適切 Solaris version OpenBSD version 無関係 FreeBSD version NetBSD version

  24. 5つのニューラルネットワークが必要‥ • 適切なOSかを見分けるニューラルネットワーク • OSファミリーを見分けるニューラルネットワーク: • Windows, Linux, Solaris, OpenBSD, FreeBSD, NetBSD • Linux versionを見分けるニューラルネットワーク • Solaris version見分けるニューラルネットワーク • OpenBSD version見分けるニューラルネットワーク • 各ニューラルネットワークはそれそれ特別な接続形態とトレーニングを要する

  25. ニューラルネットワーク入力 • 各テストに入力ニューロンを割り当てる • テストT1...T7の詳細: • ACKフラッグにニューロンを一つ • 各応答にニューロンを一つ: S, S++, O • DFフラグにニューロンを一つ • 各応答にニューロンを一つ: yes/no • フラッグフィールドにニューロンを一つ • 各フラッグにニューロンを一つ: ECE, URG, ACK, PSH, RST, SYN, FIN • オプションフィールドに6つのニューロンを10グループ • 各グループにつきニューロンを一つ、以下のオプションのため活用 EOL, MAXSEG, NOP, TIMESTAMP, WINDOW, ECHOED • Wフィールド(ウィンドウサイズ)にニューロンを一つ

  26. ニューラルネットワーク入力の例 • フラッグやオプション: 入力は1か-1(ある/なし) • 他は数字で入力 • Wのフィールド(ウィンドウサイズ) • GCD(初期の数列の最大公約数) • Linux 2.6.0の応答例:  T3(Resp=Y%DF=Y%W=16A0%ACK=S++%Flags=AS%Ops=MNNTNW) • マップ:

  27. ニューラルネットワーク接続形態 • 560次元の入力層 • 冗長が多い • 未知の応答に柔軟 • しかしパフォーマンスが問題に • 次元削減は必須‥ • 4層あるニューラルネットワークに例えば一つ目のネットワークに: 入力層: 204ニューロン 中層1: 96ニューロン 中層2: 20ニューロン 出力層: 1ニューロン

  28. データセット生成 • ニューラルネットワークトレーニングに必要なのは • 入力(ホスト応答) • 符合する出力(ホストOS) • Signatureには1464ものルールがある • ネットワークトレーニングに15000台のコンピューターが必要 • そんなにアクセスできない‥ • インターネットを検索するのは問題外 • モンテカルロシミュレーションを用いて入力生成 • 各ルールにあった入力を生成 • 入力数はOSの経験分布に従属する • 統計調査に基づく • もしルールがオプションや値域を必要としたら • 一様分布を使って値を選ぶ

  29. 1. 序章2. DCE-RPC Endpoint mapper3. Nmap signaturesによるOS探知4. 次元削減とトレーニング

  30. 入力をランダム変数とする • 今まで入力に対し、厳しくなかった • 冗長に加え、560次元 • 入力データセットはすごく大きい • トレーニング収束が遅い‥ • 入力次元をランダム変数 Xiとする • 入力次元は桁数が異なる • フラッグは1か-1の値を持つ • ISN (initial sequence number/初期の数列) は整数 • ランダム変数を正規化: 期待値 標準偏差

  31. 相関マトリックス • 相関マトリックスR を計算: • 正規化: • 相関とは統計的な従属を示す、次元のない値である • 1か-1に近いほどより従属する • Rの線形従属カラム(列)は従属変数を示す • 一つをキープし、他を削除 • 定数は分散0なので削除 期待値

  32. Principal Component Analysis (PCA) • Principal Component Analysis (PCA)により、更に縮約 • アイディア: 入力空間に新しい基礎(座標系)を計算 • k次元の部分空間のデータセットのどの推計から最も大きな分散 • その分散は最初の kベーシスベクトルから得られる • PCA アルゴリズム: • マトリックス R の固有ベクトルと固有値を計算 • 固有値の大きい順に並び替える • データを推計するにあたって、最初の k ベクトルをキープ • 全体の分散の98%を保つためパラメーター kを選ぶ

  33. 結果として得られるニューラルネットワーク接続形態結果として得られるニューラルネットワーク接続形態 • PCAを行った後、以下のニューラルネットワーク継続形成が得られる (元の入力サイズは全ケース560)

  34. 順応学習率 • トレーニング収束を早める戦略 • 二次元推定誤差を計算 (期待出力 yi と実際の出力 vi ): • 世代の合間(データセット全ての入出力ペアのプロセス後)に • もし誤差が下がれば学習率を上げる • もし誤差が上がれば学習率を下げる • アイディア: 方向が合っていれば早く進む

  35. 誤差の発展(固定学習率)

  36. 誤差の発展(順応学習率)

  37. 部分空間トレーニング • トレーニング収束を早めるもう一つの戦略 • 幾つかの小さいデータセット(部分空間)でネットワークを学習させる • 誤差を推定するのに適合度Gを計算 • もし出力が0か1ならば: G = 1 – ( Pr[偽陽性率] + Pr[偽陰性率] ) • それ以外は: G = 1 – 誤差の数/出力の数 • 順応学習率: • 適合度Gが高ければ、初期の学習率も上がる

  38. サンプル結果(ホストはSolaris 8を稼動) • Relevant / not relevant analysis (適切分析) 0.99999999999999789 relevant(適切) • Operating System analysis    -0.99999999999999434 Linux 0.99999999921394744 Solaris    -0.99999999999998057 OpenBSD     -0.99999964651426454 FreeBSD     -1.0000000000000000 NetBSD     -1.0000000000000000 Windows • Solaris version analysis 0.98172780325074482 Solaris 8    -0.99281382458335776 Solaris 9     -0.99357586906143880 Solaris 7     -0.99988378968003799 Solaris 2.X     -0.99999999977837983 Solaris 2.5.X

  39. 今後の課題1 • 以下からNmapテストの重要要素の分析 • 最終ウェイトの分析 • 相関マトリックスの縮約 • Principal Component Analysis • 情報量を減らすためにNmapを最適化 • ノイズとファイアーウォールフィルターを加える • ファイアーウォールの有無を探知 • 様々なファイアーウォールを識別 • ロバストなテストを作り上げる

  40. 今後の課題2 • この分析は他の探知法にも応用が可能: • xprobe2 – Ofir Arkin, Fyodor & Meder Kydyraliev • ICMP, SMB, SNMPによる探知 • p0f (Passive OS Identification) – Michal Zalewski • SUN RPCによる OS探知 / Portmapper • Sun / Linux / other System V versions • MUA (Outlook / Thunderbird / etc) Mail Headersによる探知

  41. 何かご質問はございますか?どうもありがとうございました何かご質問はございますか?どうもありがとうございました

More Related