A Concept of Network Analysis Tool by Data Mining

1,369 views
1,206 views

Published on

implementing a concept to observe network status by Data Mining, these methods include data description ,clustering, frequent pattern

Published in: Technology

A Concept of Network Analysis Tool by Data Mining

  1. 1. DIY一個Data Mining based的 網路流量分析工具 Raymond, OSDC, 2014
  2. 2. Raymond http://systw.net 興趣/專長/研究: network (懂一點Data Mining,懂一點programing)
  3. 3. why? 為什麼要做這個事情?
  4. 4. 首先 做為網管,了解網路狀況是我們的工作
  5. 5. 本能? 想在網路流量中看到更多 (更多更多更多更多更多更多更多更多更多更 多更多更多更多更多更多更多更多更多更多 更多更多更多更多更多更多更多更多更多更 多更多更多更多更多更多更多更多更多更多 更多更多更多更多更多更多更多更多) 資訊
  6. 6. 工具回顧 回顧一下有那些工具可以看網路
  7. 7. MRTG
  8. 8. Monitorix
  9. 9. Cacti
  10. 10. ntop
  11. 11. sFlowTrend
  12. 12. nfsen
  13. 13. 沒有資料分析(用其他角度看資料)的Tool 著重在 資料呈現/視覺化 (然後讓管理者分析) 先資料分析(Data Mining) 後在呈現(管理者只要看 分析後的結果) MRTG 有 NTOP 有 CACTI 有 sFlowTrend 有 nfsen 有 ???????? 有 我找了又找,還是沒找到
  14. 14. 拋磚引玉 好吧 那自己做一個 “概念性的工具” 希望不久的將來,可以看到有類似的工具可以直接使用
  15. 15. Let’s GO 動手DIY了
  16. 16. 大致上的做法 料理名稱:Data Mining流量分析工具 1. 準備食材(資料) 2. 準備工具 3. 處理他們(資料前處理,資料轉檔…) 4. 煎煮炒炸(Data Mining) 5. 一點擺盤(將結果排版一下) 大功告成
  17. 17. 食材介紹(資料介紹) Flow 格式的data,大概長的像這樣 簡單來說,一筆記錄表示一個flow
  18. 18. 工具介紹 • Pmacct(運送新鮮的食材) • MySql (保存食材) • PHP和Perl (切,削,…處理食材) • Mahout(煎煮炒炸….) • Bootstrap和ChartJS(高級餐具)
  19. 19. 找一個網路設備(找食材) NetFlow sFlow or 輸出到用來分析的機器 啟用 netflow或sflow 我是 網路設備 我是 用來分析的機器
  20. 20. 運送新鮮食材 我是 用來分析的機器 MySqlNetFlow or sFlow pmacct 在要分析的機器上把pmacct裝好 flow資料就會進到mysql
  21. 21. 檢查食材是否安全抵達 pmacct會將收到的flow丟到acct_v8這個table 我們看一下食材到了沒 Select * from acct_v8 limit 1;
  22. 22. 開始處理食材(退冰,清洗,…) 我們要將以下原本的食材 處理像這樣
  23. 23. 透過類似這樣的方法 insert into 10m_flowg_mem (addtime,srcaddr,dstaddr,prot,srcport,dstport,byte,pkt,flow) select stamp_inserted as addtime,ip_src as srcaddr,ip_dst as dstaddr,ip_proto as prot,CONCAT(ip_proto,port_src) as srcport,CONCAT(ip_proto,port_dst) as dstport, sum(bytes)as byte,sum(packets)as pkt,count(*)as flow FROM `'.$table.'` where stamp_inserted="'.$addtime.'" group by ip_src,ip_dst,ip_proto,port_src,port_dst;
  24. 24. 切割食材 我們要將剛才的食材,切成以下
  25. 25. 透過類似這樣的方法 insert into 10m_stateip_mem (addtime,addr,srcaddr,sdtsport,sdtdip,sdtdport,sbyte,spkt,sflow,sflowg,ddtsip,ddtsport,dstaddr,ddtdport,dbyte,dpkt,dflow,dflowg) select * from ( ((SELECT addtime,srcaddr AS addr FROM '.$table.' where addtime="'.$addtime.'" and srcaddr like "%'.$x.'") UNION (SELECT addtime,dstaddr AS addr FROM '.$table.' where addtime="'.$addtime.'" and dstaddr like "%'.$x.'"))as tip left join (select srcaddr ,count(distinct srcport)as sdtsport ,count(distinct dstaddr)as sdtip ,count(distinct dstport)as sdtdport ,sum(byte)as sbyte,sum(pkt) as spkt,sum(flow) as sflow,count(*) as sflowg from '.$table.' where addtime="'.$addtime.'" and srcaddr like "%'.$x.'" group by srcaddr)as ts on addr=srcaddr ) left join (select count(distinct srcaddr)as ddtsip ,count(distinct srcport)as ddtsport ,dstaddr ,count(distinct dstport)as ddtdport ,sum(byte)as dbyte,sum(pkt) as dpkt,sum(flow) as dflow,count(*) as dflowg from '.$table.' where addtime="'.$addtime.'" and dstaddr like "%'.$x.'" group by dstaddr)as td on addr=dstaddr 下載相關數據 上傳相關數據
  26. 26. 小補充: IP 通訊方式簡介 IP (Dst) Byte (Dst) Packet (Dst) flow (Src) Byte (Src) Packet (Src) flow Src Port Dst Port IP Dst Port Src Port
  27. 27. 小補充: IP通訊方式簡介 IP Src Port1 Dst Port1 IP 1 Dst Port Src Port IP 2 Dst Port Src Port Src Port2 Dst Port2 (src) Distinct dip 幾種dst ip被使用 (src) Distinct dport 幾種dst port被使用 (src) distinct sport 幾種Src port被使用 (dst) Distinct sip (dst) Distinct sport (dst) distinct dport (Src) Byte (Src) Packet (Src) flow (Dst) Byte (Dst) Packet (Dst) flow
  28. 28. 屬性介紹 (src)Distinct dip (src)Distinct dport (src)distinct sport (Src) Byte (Src) Packet (Src) flow sdtdip sdtdport sdtsport sbyte spkt sflow (dst)Distinct sip (dst)Distinct sport (dst)distinct dport (dst) Byte (dst) Packet (dst) flow ddtsip ddtsport ddtdport dbyte dpkt dflow 該IP到幾種不同的目地IP 該IP到幾種不同的目地Port 該IP用幾種不同的來源Port到目地 該IP用多少byte到目地(upload) 該IP用多少packet到目地 該IP用多少flow到目地 幾種不同的來源IP到該IP 幾種不同的來源Port到該IP 來源到該IP用幾種不同的目地PORT 來源用多少byte到該IP(download) 來源用多少packet到該IP 來源多少flow到該IP
  29. 29. 透過PHP撈資料 以及bootstrap的排版 你的資料集大概會長這樣
  30. 30. Data description 了解資料的概況
  31. 31. 衡量資料位置 Data description中的其中一個方法 Q:這可以做什麼? A:用來找出outlier
  32. 32. Z-score • 說明: 一種衡量資料位置方法,可了解每個資料的分佈位置 • 應用: 可用來找出outlier離異值( Z-score > 3 ) Anomaly Photo http://zh.wikipedia.org/wiki/File:Standard_deviation_diagram.svg
  33. 33. 用Z-score找outlier IP • 簡單來講 假設今天有100個IP在這個網路, 我們用這方法, 就能發現這裡面幾個, 很不一樣的IP(或稱為異常IP)
  34. 34. (苦工)用PHP和SQL算 1 先將剛剛的屬性都正規化 讓數字介於0~1之間(min-max normalization) 2 每個IP把自己的屬性加起來 3 算出threshold 用統計的方法,算出標準差在*3(Z-score>3) 4 比大小 若IP的值比threshold大,視為outlier IP
  35. 35. Outlier IP 這些都是非常不正常的IP 結果大概會像這樣
  36. 36. 還可以做什麼之畫個圖吧 每10鐘計算正常IP和Outlier IP的比例 了解目前網路有怪咖的狀況(Outlier IP) 透過ChartJS,我們大概可以畫成這樣
  37. 37. 還可以做什麼之做個表吧 另外,也可以把 每個outlier IP發生outlier的時間 和 每個outlier IP上網時間 列出來做比較 大概會長這樣
  38. 38. Clustering 找出小團體
  39. 39. What is clustering? 假設這裡有100人 我可以根據一些特性(個性,啫好,…等) 將這些人分成幾個小組 clustering
  40. 40. Mahout上場 Canopy+kmeans=自動分群(最簡單的做法) clustering 剛剛的IP資料集會長這樣 可畫出一個正常群,和多個異常群 在巧妙的參數配合下
  41. 41. 動手做 mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job -t1 0.6 -t2 0.3 -x 10 -i ".$input." -o ".$output 我們在將mahout輸出結果處理一下 (資料轉換) 透過chartjs,結果大概會長這樣
  42. 42. 可以看到不同群有不同的長像
  43. 43. 把每個群展開來看
  44. 44. 還可以做什麼之JSON一下 • 剛剛的結果也可以把他們輸 出成json格式 • 讓其他系統(firewall,…)讀取 這裡分析的結果
  45. 45. Frequent pattern 找同時發生的事件
  46. 46. What is frequent pattern • 最有名的例子 買尿布的通常也會買啤酒 當某個事情發生時 另一個事情也會跟著發生 • 常見應用 購物籃分析
  47. 47. 所以我們也可以把這個例子 應用在網路 當大家連到某個IP時,通常也連那個IP ?
  48. 48. 動手做 我們先將以下這些資料 處理成以下這樣的資料
  49. 49. • 112.124.20.221 • 10.5.5.11 101.227.14.222 111.1.53.158 113.31.88.150 119.235.235.16 163.28.5.9 173.194.127.62 173.194.72.103 173.194.72.104 173.194.72.95 173.252.110.27 173.252.110.29 183.61.112.124 183.61.112.37 202.169.175.79 203.17.63.21 209.177.95.163 209.177.95.169 211.79.36.170 220.181.109.158 220.181.184.186 221.204.10.89 23.61.194.10 23.61.194.26 23.61.194.34 23.61.194.65 23.61.194.72 23.76.204.153 239.255.255.250 31.13.69.36 42.99.128.138 42.99.128.152 42.99.128.154 42.99.128.160 42.99.128.176 42.99.128.177 54.251.119.61 54.254.98.219 61.135.185.18 61.145.124.85 64.208.5.26 64.208.5.41 64.208.5.9 69.171.233.33 69.171.245.49 74.125.203.157 74.125.23.188 74.125.31.139 74.125.31.188 • 224.0.0.22 224.0.0.251 • 10.5.5.11 239.255.255.250 • 10.5.5.11 163.28.5.24 17.135.64.4 17.149.36.104 17.172.233.129 224.0.0.251 23.48.139.164 • 10.5.5.11 101.226.200.130 106.187.40.88 107.20.172.41 107.23.186.214 113.106.27.210 119.147.211.135 119.161.22.33 119.235.235.91 121.14.228.118 122.143.12.163 123.130.123.164 124.95.142.209 124.95.142.210 14.17.110.21 162.159.243.187 163.28.5.10 163.28.5.11 163.28.5.17 163.28.5.18 163.28.5.19 163.28.5.25 163.28.5.27 163.28.5.33 163.28.5.8 163.28.5.9 17.132.73.88 17.134.126.131 17.134.126.132 17.134.62.130 17.134.62.131 17.149.32.58 17.149.36.121 17.151.225.120 17.151.225.65 17.151.225.77 17.151.225.8 17.154.66.105 17.154.66.107 17.154.66.109 17.154.66.111 17.154.66.79 17.172.232.55 17.172.233.103 17.173.254.222 17.173.254.223 173.194.72.103 173.194.72.104 173.194.72.105 173.194.72.156 173.194.72.95 173.223.232.11 173.223.232.19 173.223.232.24 173.223.232.33 173.223.232.35 173.223.232.42 173.223.232.74 173.223.232.75 173.252.103.16 173.252.110.27 173.252.79.23 175.6.0.102 175.6.0.104 175.6.0.106 175.6.0.124 180.97.81.120 180.97.81.122 183.60.41.120 202.169.175.117 202.169.175.82 202.169.175.89 203.104.131.5 203.17.63.21 203.83.220.250 206.190.38.30 218.59.209.165 218.59.209.182 218.59.209.197 220.130.123.76 221.204.214.156 222.186.3.142 222.186.3.143 222.218.45.222 223.26.70.11 223.26.70.37 224.0.0.251 23.22.88.133 23.3.105.106 23.3.105.49 23.3.105.56 23.3.105.57 23.3.105.59 23.3.105.66 23.3.105.72 23.3.105.73 23.3.105.74 23.3.105.81 23.3.105.89 23.48.130.217 23.48.143.139 23.61.194.11 23.61.194.33 23.61.194.34 23.61.194.40 23.61.194.41 23.61.194.42 23.61.194.43 23.61.194.48 23.61.194.49 23.61.194.58 23.61.194.73 23.61.194.75 23.76.204.153 23.76.204.155 23.76.204.162 23.76.204.163 23.76.204.168 23.76.204.170 23.76.204.176 23.76.204.177 255.255.255.255 42.121.149.41 42.121.149.44 42.156.140.138 42.99.128.137 42.99.128.144 54.208.251.43 54.236.156.216 54.236.90.22 54.240.226.0 54.240.227.64 60.209.6.137 60.55.32.68 60.55.32.84 60.55.32.90 63.151.118.145 64.208.5.16 64.208.5.51 74.125.203.156 • …omit… Srcaddr Dstaddr
  50. 50. Mahout上場 mahout fpg -i ".$input." -o ".$output." -k 50 -s 2 -method mapreduce -regex [' '] 在透過PHP將輸出結果處理一下 加上bootstrap的表格 大概就會長這樣
  51. 51. 還可以做什麼之NTOP • 也可以做一個傳統的NTOP • 比較frequent pattern • 了解更多網路狀況
  52. 52. 合體 就是合體
  53. 53. 10minute 並放上bootstrap的外觀 就會像這樣 Data description clustering Frequent pattern 10 minute information 1 10 minute information 2 10 minute information 3 10 minute information n data
  54. 54. Downlaod http://flowdm.openfoundry.org
  55. 55. 注意事項 因為這個只是一個概念的呈現, 所以可以和大家保證三點 • 無任何安全保護機制(防火牆記得設一下) • 程式寫的有點笨(有些操作會很慢) • 你應該會遇到Bug(測試時間還不夠長)
  56. 56. Conclusion 引起高手們的興趣 開發更強的網路流量分析工具
  57. 57. 謝謝大家 有任何想法或覺得可以改的或任何問題 都歡迎來信交流 http://systw.net 最後

×