Slide 1

Slide 1 text

ωοτϫʔΫΤϯδχΞ͕χϡʔϥϧωοτϫʔΫΛ΍ͬͯΈͨ Network Programabilty #12 @_norin_

Slide 2

Slide 2 text

ࣗݾ঺հ なまえ  こじま ただのり                   おしごと  元インフラ屋、޿域LAN作ったりとか twitter  @_norin_

Slide 3

Slide 3 text

✦ 神経細胞を計算モデル化したもの ͬ͘͟ΓχϡʔϥϧωοτϫʔΫ ೖྗ ग़ྗ Y Z [ z = w1 ɾ x + w2 ɾ y X X ͜ΕΛ૊Έ߹Θͤͯෳࡶͳ΋ͷʹͨ͠ͷ͕ ΠϚυΩͷχϡʔϥϧωοτϫʔΫ

Slide 4

Slide 4 text

//ͷ͔͍ͭͲ͜Ζ ✦ 分類 画像のタグ付け(検索エンジン) ✦ 判別 手書き文字判別(Tensorflowのチュートリアル) きゅうりの等級分け ✦ 予測 天気、気温など過去データからの未来予測 既存文章から新規文章の生成

Slide 5

Slide 5 text

ωοτϫʔΫ԰తظ଴ʁ ✦ フローからDDoS判別 ✦ 障害予測 この辺りは実データでやらないとおもしろくない そのうちどこかのIXかIDCさんが発表してくれるでしょう 期待の目

Slide 6

Slide 6 text

ຊ೔ͷϝχϡʔ ネットワークエンジニアなら一度は作る ɹɹ1JOHʹԠ౴͢ΔχϡʔϥϧωοτϫʔΫ "シェフのきまぐれICMP Responder

Slide 7

Slide 7 text

͜͜Λ//Ͱ࡞Δ 192.168.0.1→192.168.0.2のICMP Echoに対しReplayを生成する ߏ੒ 192.168.0.1 192.168.0.2 Echo Reply

Slide 8

Slide 8 text

σϞ

Slide 9

Slide 9 text

݁Ռ "γΣϑ͕ؾ·͙Ε͗͢·ͨ͠ //͸ؤݻΦϠξͩͬͨ

Slide 10

Slide 10 text

✦ フレームワークはTensorFlowを利用 ✦ 学習データはPingの実データをキャプチャしたもの ✦ パケットを1514バイトの配列としてみなす ✦ 先頭42バイトが入出力データ
 Ethernet/IP/ICMPヘッダ
 計算量とペイロードは変化しない・変化して欲しくないため ͭͬͯ͘Έͨ// &UIFS)FBEFS *1)FBEFS *$.1)FBEFS 1BZMPBE 14byte 20byte 8byte

Slide 11

Slide 11 text

ͭͬͯ͘Έͨ// ӅΕ૚ͻͱͭ 42コ

Slide 12

Slide 12 text

ͭͬͯ͘Έͨ//ˌ ……… ӅΕ૚ºશ઀ଓ

Slide 13

Slide 13 text

ͭͬͯ͘Έͨ//ˌ ࡾ૚っぽいナニカ

Slide 14

Slide 14 text

ύέοτ͕ᨅΔ༁ ✦ 元データのバリエーション不足 ✦ 192.168.0.1→192.168.0.2のPing実データから教師データを自動生成 ✦ L2やルータ越えだとMACアドレスも固定される ✦ データ数は多いが変化の少ないデータばかりに。。。 ✦ DDoSなどの実フローか自動生成でもバリエーションが必要 EtherDst EtherSrc IPDst IPSrc ID Chksum ICMP chksum Payload มԽ͢Δͷ͸͚ͩ͜͜

Slide 15

Slide 15 text

ύέοτ͕ᨅΔ༁ ✦ 教師データのバリエーション不足による部分最適化 ✦ 誤差関数がイマイチ
 チェックサムくらいが誤差と期待していた ✦ そもそもバイト単位での誤差ゼロが期待値
 パケット全体で誤差がゼロでは意味がない
 ✦ (推測)バイト計算の差が影響しているかも
 0x7Fと0x80の差分と127と128の差分の違い
 精度と桁が実数とバイトで異なる ✦

Slide 16

Slide 16 text

ύέοτ͕ᨅΔ༁ ✦ NNのネットワーク構成が不適切 ✦ アドレス入替、ICMP Code書き換え、チェックサム
 として隠れ層5で設計 ✦ 線形部分が多く、多層の意味をなさなかった
 非線形のチェックサム部のみで活性化関数を利用すべき? ✦

Slide 17

Slide 17 text

1JOHΛฦ͢ʹ͸ 1)Ethernetアドレスを入れ替える 2)IPアドレスを入れ替える 3)IPヘッダ内の設定(�ID、TTL、etc ) 4)IPチェックサム設定 5)ICMP Codeの設定(Reply) 6)ICMPチェックサム設定 7)送信

Slide 18

Slide 18 text

代数的に考えてみる アドレスの入れ替え 単純な線形変換 νϣτ຾͘ͳΔ࿩ [ 0 1 1 0] [ x y] = [ y x] A = [ 0 E E 0] A ⋅ [ Ether Dst Ether Src ] = [ Ether Src Ether Dst ] ※ &୯Ґߦྻ

Slide 19

Slide 19 text

IPもまとめて送受信アドレスを入れ替え νϣτ຾͘ͳΔ࿩ 0 E 0 0 E 0 0 0 0 0 0 E 0 0 E 0 Ether Dst Ether Src IP Dst IP Src = Ether Src Ether Dst IP Src IP Dst

Slide 20

Slide 20 text

TTLやICMP Code(Replay)の設定はゼロ乗算と加算で対応 (代入の代わり) ��0 × A + B = B νϣτ຾͘ͳΔ࿩

Slide 21

Slide 21 text

チェックサム計算は非線形なのでここは関数化 ������������������IPヘッダ ヘッダを16bit×10の配列としてみると ��sum = IP[0]�+ IP[1] +�… IP[9] ��sum = (sum & 0xffff) + (sum >> 16)������桁上がり分を下位に加算 ��sum = (sum & 0xffff) + (sum >> 16)������加算後再度繰り上がった場合 ��fchk (IP) = ~sum�����������������������������������������ビット反転 νϣτ຾͘ͳΔ࿩ 7FS)-FO UPT MFO JE qBHͱ͔ 55- 1SPUP DIFDLTVN 4SD *1 %TU *1

Slide 22

Slide 22 text

まとめるとこんな感じ νϣτ຾͘ͳΔ࿩ Pkt = Ether Dst Ether Src IP Dst IP Src IP TTL IP Chk ICMP Code ICMP Chk ΞυϨεೖସ θϩΫϦΞ ύϥϝʔλઃఆ Pkt tmp = 0 E E 0 E E 0 0 0 0 0 ⋅ Pkt + 0 0 0 0 IP newTTL 0 ICMP newCode 0

Slide 23

Slide 23 text

まとめるとこんな感じ やればやるほどNNより関数型言語が向いてる気が νϣτ຾͘ͳΔ࿩ IP newchk = f chk (Pkt tmp ) ICMP newchk = f chk (Pkt tmp ) Pkt reply = Pkt tmp + 0 0 0 0 0 IP newchk 0 ICMP newchk νΣοΫαϜܭࢉ ઃఆͯ͠ Ͱ͖͕͋Γ

Slide 24

Slide 24 text

これを期待してアドレス入れ替え行列が学習されると。。。 νϣτ຾͘ͳΔ࿩ 0 E 6 0 0 E 6 0 0 0 0 0 0 E 4 0 0 E 4 0 ظ଴ͯ͠ΔϞϊ ͤΊͯର֯੒෼͕θϩʹͳͬͯ͘ΕΕ͹ͳʔ ͜Ε͕ݱ࣮ −0.02153469 0.09266856 −0.02674774 ⋯ 0.08597313 −0.03119319 0.1256434 ⋯ 0.04272136 −0.07684021 0.03384783 ⋮ ⋮ ⋮ ⋱ ܭࢉ͞ΕͨϞϊ

Slide 25

Slide 25 text

·ͱΊͱࡶײ NWエンジニアがニューラルネットワークをやってみた �今日は ニューラルネットワークプログラマビリティ勉強会
 君も今日から�ニューラルネットワークエンジニア

Slide 26

Slide 26 text

·ͱΊͱࡶײ ✦ ニューラルネットワークに必要な数学は教養課程の線形代数 ✦ �遊んでみるだけならフレームワーク利用が簡単
 TensorFlow、Caffe、Chainer ✦ オンラインならplayground
 ��http://playground.tensorflow.org/

Slide 27

Slide 27 text

·ͱΊͱࡶײ ✦ TensorFlowがとっつきにくい ✦ �フレームワークが難しいのはWebでもAPIでも一緒
 Rails、Play、etc… ✦ ��やりたいことを実現する手段を探すのが一番の手間
 チュートリアルから先をやってる記事が思いのほか少ない ✦ 数学用語の英語表記がガガガ
 �abs/squareくらいはなんとか
 �determinant = 行列式、transpose = 逆行列 辺りになると? ✦

Slide 28

Slide 28 text

·ͱΊͱࡶײ ✦ 本質的な難しさはデータの理解とNNの設計 ✦ データの特徴と期待する出力の理解が必要
 データへの異常な愛は必須 ✦ �ニューロンや隠れ層の数、特徴を掴むのは経験則
 通信ネットワーク同様 ✦ �まずは先駆者や既存のものの写経から始めましょう
 ナナメウエなネタは大変です


Slide 29

Slide 29 text

·ͱΊͱࡶײ ✦ NNは通信ネットワークに向いてる?? ✦ 「プロトコル」はルールそのものなのでルールベースの方が簡単 ✦ NNフレームワークが実数を前提としている
 パケットの値の範囲は 0≦χ≦255�(u_int8_t)
 ���https://example.com:443.141592/��とかやだなー
 でもIPv4アドレスが実数ならIPv6いらないんじゃ? ✦ 整数、ビット演算など計算機向けのNN/FWがあっても良さそう

Slide 30

Slide 30 text

·ͱΊͱࡶײ ✦ パケット加工以外の使い所 ✦ フロー解析、予測 ✦ RFC読み込み→プロトコル自動生成 ✦ キュウリの等級判別→パケットの等級判別?

Slide 31

Slide 31 text

·ͱΊͱࡶײ ✦ フレームワークは無償だが学習コストは高い
 それなりの時間が必要 ✦ 計算コストはクラウドで解決
 いい時代になりました

Slide 32

Slide 32 text

Thank you