異常檢測以及開源工具
背 景
互聯網的不斷發展促進了人類的發展和社會的進步,人們在享受互聯網帶來便利的同時,各類安全事件凸顯,安全也越來越受到個人、企業以及社會的重視。異常檢測作為網絡安全檢測手段之一,可以有效檢測網絡行為中的異常情況,提升網絡安全檢測效率,已經受到各類安全從業人員的關注。然而構建異常檢測工具往往需要大量資金的投入,例如需要大量人員參與,聘請軟件需求工程師、安全工程師,產品研發工程師,測試工程等人員。這對于一般企業科研機構而言是很難接受的。因此,為了減少在這方面的資金投入,許多安全從業人員都會選擇使用一些開源軟件來替代。事實上,無論是學習,科學實驗,還是在生產基礎上進行部署,安全從業人員長期以來都將開源軟件視為其工具包的重要組成部分。 下文我們為大家整理推薦22款開源軟件和數據集,你應該了解和值得使用的開源異常檢測工具集。
什么是異常檢測
異常檢測(又稱outlier detection、anomaly detection,離群值檢測)是一種重要的數據挖掘方法,可以找到與“主要數據分布”不同的異常值[1],具有非常廣泛的商業應用以及學術研究價值。例如,從信用卡交易中找出詐騙案例,從正常的網絡數據流中找出入侵,同時它可以被用于機器學習任務中的預處理,防止因為少量異常點存在而導致的訓練或預測失敗。
圖1 異常檢測
什么是異常點
異常點是指其值與其他值存在顯著不同的數據點。以時間序列為例,時間序列中的異常點,其時間超過了該序列的正常范圍,而不考慮數據點之間的時間關系。換句話說,即使將所有數據點都視為時間無關的[2] ,異常點就突出了,如下圖所示。
圖2 異常點
然而,并不是所有超出范圍的值都是異常點。在某些情況下,一個時間點是否正常取決于它的值是否與它“最近的過去”一致。如果價值突然增加或減少是暫時的,則稱為峰值;如果這種變化是永久性的,則稱為水平轉移[3]。請注意,雖然峰值看起來與離群值類似,但是峰值卻不能等同于離群值,峰值不是時間依賴性的,而離群值是時間依賴性的。如果在不考慮時間順序的情況下檢查所有數據點,峰值的值可能是正常的(見下圖)。
圖3 峰值
我們可以并排滑動兩個時間窗口,并跟蹤它們的平均值或中值之間的差異。這種隨時間變化的差異是一種新的時間序列,可以用離群值檢測器來檢驗。當左右窗口中的統計數據有顯著差異時,則表明在此時間點附近發生了突然變化。時間窗口的長度控制用來檢測變化的時間尺度:對于峰值,左邊的窗口比右邊的更長,以捕獲近過去的代表性信息;另一方面,對于關卡轉換,兩個窗口都應該足夠長以捕獲穩定狀態。
圖4 水平轉移
異常檢測開源工具
為了更好的對異常檢測進行分析。我們整理了下面6種異常檢測相關開源工具。
1、Arundo開源的ADTK[8]
ADTK是一個用于非監督、基于規則的時間序
列異常檢測的Python包。這個軟件包提供了一組具有統一通用檢測器、轉換器和聚合器的API,以及將它們連接到模型中的管道類。它還提供了一些處理和可視化時間序列和異常事件的功能。
圖5 ADTK包檢測結果
組件的特點:
豐富的算法:包含多種時間序列異常檢測算法;
標準的接口:支持標準化的對外服務接口,便于第三方系統調用
下載地址:https://github.com/arundo/adtk
2、LoudML[14]
Loud ML是一個建立在TensorFlow之上的開源時間序列推理引擎。該工具有助于預測數據、檢測異常值,并使用先驗的知識使異常檢測過程自動化。

圖6 Loud ML管理界面
工具特點:
- 內置HTTP API,方便與其他應用系統集成;
- 可以通過機器學習引擎處理來自不同數據源的異常數據;
- 支持ElasticSearch、InfluxDB、MongoDB、OpenTSDB等數據庫;
- 支持JSON配置安裝和管理;
- 近乎實時的數據處理,并提供給推理引擎以返回結果。
下載地址:https://github.com/regel/loudml
3、Linkedin開源的luminol[15]
Luminol是一個輕量級的時間序列數據分析python庫。它支持的兩個主要功能是異常檢測和關聯。它可以用來計算異常的可能原因。給定一個時間序列,檢測數據是否包含任何異常,并返回異常發生的時間窗口、異常達到其嚴重程度的時間戳,以及指示該異常與時間序列中的其他異常相比有多嚴重的分數。給定兩個時間序列,幫助求出它們的相關系數。
圖7 Luminol API調用方式
工具的特點:可以建立一個異常檢測分析的邏輯流程。例如,假設網絡延遲出現峰值:異常檢測可以發現網絡延遲時間序列中的峰值,并獲取峰值的異常周期,之后與同一時間范圍內的其他系統指標(如GC、IO、CPU等)關聯獲得相關指標的排序列表,根源候選項很可能位于最前面。
下載地址:https://github.com/linkedin/luminol
4、PyOD[16]
PyOD是用于檢測數據中異常值的庫,它能對20多種不同的算法進行訪問,以檢測異常值,并能夠與Python 2和Python 3兼容。
圖8 PyOD異常檢測庫
工具特點:
- 包括近20種常見的異常檢測算法,比如經典的LOF/LOCI/ABOD以及最新的深度學習如對抗生成模型(GAN)和集成異常檢測(outlier ensemble);
- 支持不同版本的Python:包括2.7和3.5+;支持多種操作系統:windows,macOS和Linux;
- 簡單易用且一致的API,只需要幾行代碼就可以完成異常檢測,方便評估大量算法;
- 使用即時編譯器(JIT)和并行化(parallelization)進行優化,加速算法運行及擴展性(scalability),可以處理大量數據;
下載地址:
https://pyod.readthedocs.io/en/latest/
5、PyOdds[17]
PyODDS是一個端到端的異常檢測Python組件。PyODDS提供異常檢測算法,滿足不同領域的用戶需求,無論是數據科學還是機器學習背景。PyODDS提供了在數據庫中執行機器學習算法的能力,而無需將數據移出數據庫服務器。它還提供了大量基于統計和深度學習的異常檢測算法。
圖9 PyOdds異常檢測庫
組件的特點:
- 全棧服務,支持從輕量級的基于SQL的數據庫到后端機器學習算法的操作和維護,使得吞吐量速度更快;
- 先進的異常檢測方法,包括統計、機器學習、深度學習模型與統一的API和詳細的文檔;
- 強大的數據分析機制,支持靜態和時間序列數據分析與靈活的時間片(滑動窗口)分割;
- 自動化機器學習,首次嘗試將自動機器學習與異常檢測結合起來,并屬于將自動機器學習概念擴展到現實世界數據挖掘任務的嘗試之一。
下載地址:
https://github.com/datamllab/pyodds
6、Twitter開源的AnomalyDetection[4]
AnomalyDetection是一個R語言程序包,Twitter通常會在重大新聞和體育賽事期間用AnomalyDetection掃描入站流量,發現那些使用僵尸賬號發送大量垃圾(營銷)信息的機器人。
圖10 AnomalyDetection 入站流量異常檢測
下載地址:
https://github.com/twitter/AnomalyDetection
其他開源工具包情況如下表所示:
開源異常檢測(入侵檢測)數據集
為了更好的研究異常檢測,數據集是必不可少的,我們整理了下面9種異常檢測(入侵檢測)相關數據集:
參考文獻
[1] V. Chandola, A. Banerjee, and V. Kumar, “Outlier detection: A survey,” ACM Computing Surveys, 2007.
[2] D. Hawkins, Identification of Outliers. Chapman and Hall, London, 1980.
[3] A. Javaid, Q. Niyaz, W. Sun, and M. Alam, “A deep learning approach for network intrusion detection system,” in Proceedings of the 9th EAI International Conference on Bio-inspired Information and Com-munications Technologies (formerly BIONETICS), pp. 21–26, ICST(Institute for Computer Sciences, Social-Informatics and Telecommunications Engineering), 2016.
[4]https://github.com/twitter/AnomalyDetection
[5]https://github.com/pridiltal/oddstream
[6]https://github.com/earthgecko/skyline
[7]https://github.com/hastic
[8]https://github.com/arundo/adtk
[9]https://github.com/tsurubee/banpei
[10]https://github.com/smirmik/CAD
[11]https://github.com/MentatInnovations/datastream.io
[12]https://github.com/KDD-OpenSource/DeepADoTS
[13]https://github.com/NetManAIOps/donut
[14]https://github.com/regel/loudml
[15]https://github.com/linkedin/luminol
[16]https://pyod.readthedocs.io/en/latest/
[17]https://github.com/datamllab/pyodds
[18]https://github.com/selimfirat/pysad
[19]https://github.com/kLabUM/rrcf
[20]https://github.com/khundman/telemanom
[21]https://github.com/ExpediaDotCom/adaptive-alerting
[22]https://github.com/yahoo/egads
[23]https://github.com/netflix/surus
[24]https://github.com/lytics/anomalyzer
[25]https://github.com/facesea/banshee
[26]https://github.com/Stream-AD/MIDAS
[27]https://github.com/pridiltal/oddstream
[28] A. Shiravi, H. Shiravi, M. Tavallaee, and A. A. Ghorbani, “Toward developing a systematic approach to generate benchmark datasets for intrusion detection,” computers & security, vol. 31, no. 3, pp. 357–374, 2012.
[29] Y. Yu, J. Long, and Z. Cai, “Network intrusion detection through stacking dilated convolutional autoencoders,” Security and Communication Networks, vol. 2017, 2017.
[30] A. Adam, E. Rivlin, I. Shimshoni, and D. Reinitz, “Robust real-time unusual event detection using multiple fixed-location monitors,” IEEE transactions on pattern analysisand machine intelligence, vol. 30, no. 3, pp. 555–560, 2008.
[31] C. Yin, Y. Zhu, J. Fei, and X. He, “A deep learning approach for intrusion detection using recurrent neural networks,” IEEE Access, vol. 5, pp. 21954–21961, 2017.
[32] T. A. Tang, L. Mhamdi, D. McLernon, S. A. R. Zaidi, and M. Ghogho, “Deep learning approach for network intrusion detection in software defined networking,” in Wireless Networks and Mobile Communications (WINCOM), 2016 International Conference on, pp. 258–263, IEEE, 2016.
[33] M. Yousefi-Azar, V. Varadharajan, L. Hamey, and U. Tupakula, “Autoencoder-based feature learning for cyber security applications,” in Neural Networks (IJCNN), 2017 International Joint Conference on, pp. 3854–3861, IEEE, 2017.
[34] S. Mohammadi and A. Namadchian, “A new deep learning approach for anomaly base ids using memetic classifier.,” International Journal of Computers, Communications & Control, vol. 12, no. 5, 2017.
[35] M. Lopez-Martin, B. Carro, A. Sanchez-Esguevillas, and J. Lloret, “Conditional variational autoencoder for prediction and feature recovery applied to intrusion detection in iot,” Sensors, vol. 17, no. 9, p. 1967, 2017.
[36] J. Stolfo, W. Fan, W. Lee, A. Prodromidis, and P. K. Chan, “Cost-based modeling and evaluation for data mining with application to fraud and intrusion detection,” Results from the JAM Project by Salvatore, pp. 1–15, 2000.
[37] K. Alrawashdeh and C. Purdy, “Toward an online anomaly intrusion detection system based on deep learning,” in Machine Learning and Applications (ICMLA), 2016 15th IEEE International Conference on, pp. 195–200, IEEE, 2016.
[38] N. T. Van, T. N. Thinh, and L. T. Sach, “An anomaly-based network intrusion detection system using deep learning,” in System Science and Engineering (ICSSE), 2017 International Conference on, pp. 210–214, IEEE, 2017.
[39] R. Fontugne, P. Borgnat, P. Abry, and K. Fukuda, “Mawilab: combining diverse anomaly detectors for automated anomaly labeling and performance benchmarking,” in Proceedings of the 6th International COnference, p. 8, ACM, 2010.
[40] C. G. Cordero, S. Hauke, M. Mühlhäuser, and M. Fischer, “Analyzing flow-based anomaly intrusion detection using replicator neural networks,” in Privacy, Security and Trust (PST), 2016 14th Annual Conference on, pp. 317–324, IEEE, 2016.
[41] “Jamk university of applied sciences,realistic global cyber environment (rgce),” 2009