[TOC] :::info Keywords: Anomaly detection, Outlier detection, Log Analysis, Web-server Log Anomaly Detection(WLAD), AIOps ::: # Introduction 分析系統日誌是一種重要的IT管理活動,它可以提供許多有價值的信息和見解,像是: 1. 故障排除和問題解決:當系統出現問題或錯誤時,日誌通常是最先查看的資訊來源。日誌可以提供有關問題發生時間、問題的性質以及可能的原因等詳細信息。這可以幫助IT專業人員快速定位和解決問題。 2. 安全監控和事件響應:日誌可以記錄系統中的所有活動,包括可能的惡意活動。通過分析日誌,安全專家可以檢測到攻擊或入侵,並迅速採取行動。此外,如果發生安全事件,日誌可以提供寶貴的證據來幫助調查。 3. 性能監控和優化:日誌可以提供有關系統性能的詳細信息,例如CPU使用率、記憶體使用情況、網路流量等。通過分析這些數據,IT專業人員可以識別性能瓶頸或效能問題,並進行優化。 4. 業務洞察:除了技術信息外,日誌也可能包含有關業務運營的有用信息。例如,網站伺服器的日誌可能包含有關用戶行為和網站使用情況的信息。這些信息可以幫助組織了解他們的客戶,並優化他們的產品或服務。 AIOps(人工智慧運維)即智能運維,基於已有的運維資料(日誌、監控資訊、應用資訊等),將AI應用於運維領域,來解決自動化運維無法解決的問題。日誌異常檢測作為AIOps中的一個重要研究方向,旨在通過日誌分析來了解系統運行中的異常情況。由於日誌數據的數量巨大,因此一旦發生日誌異常,運維人員需要在大量的日誌數據中查找異常,這是一項工作量巨大且非常耗時的任務。 ## Pipeline of existing log anomaly detection approaches ![Workflow](https://hackmd.io/_uploads/BkSm0xbth.png) 1. **Log Collection** (pass) 2. **Log Parsing** 因為開發人員通常為了方便和靈活性而使用自由文本記錄系統事件,日誌訊息通常是非結構化的,所以要通過解析日誌,得到結構化的日誌,提取參數。 範例: ![log parsing example](https://hackmd.io/_uploads/BJElE-bF2.png) 3. **Grouping** (optional) 由於日誌中存在上下文時間相依性,不應該僅考慮單個日誌訊息進行異常檢測。因此,可以使用不同的分組策略將原始日誌拆分為一組日誌序列。常見的方法包括 Fixed time windows, Sliding time windows, Session windows。 4. **Feature Representation / Feature Extraction** **日誌應該被轉換為適合機器學習算法的格式**。通常機器學習(ML)與深度學習(DL)演算法,其輸入格式為向量,而自然語言處理(NLP)演算法通常其輸入格式為字串經過處理後的向量。常見的日誌的特徵有兩種,即數值特徵和圖形特徵。其中,數值特徵是主流特徵,在日誌分析中被廣泛使用。數值特徵表示日誌的統計特性,包括可以直接從日誌中提取的數值和類別字段。它將日誌分區的信息傳達為**數值向量表示**。特別是,大多數現有作法使用的數值特徵相似且具有一些常見的形式。大致可分為以下6種,**關鍵詞、模板計數、模板序列、變量值、變量分佈、時間間隔**,後面有更詳細的介紹。 5. **Anomaly Detection** 把處理完的特徵輸入異常檢測模型,並輸出哪些日誌訊息為異常的。 ## Survey ### A Survey on Automated Log Analysis for Reliability Engineering (2021) \[[Paper](https://arxiv.org/pdf/2009.07237.pdf)\]\[[Github連結](https://github.com/logpai/awesome-log-analysis)\]\[[中文筆記](https://blog.csdn.net/huapingqi/article/details/126330231)\] 本文綜述提供了自動化日誌分析研究,包括如何自動化和輔助編寫日誌記錄語句、如何壓縮日誌、如何將日誌解析為結構化的事件模板,以及如何利用日誌來檢測異常、預測故障和進行診斷。 ### An Empirical Investigation of Practical Log Anomaly Detection for Online Service Systems (2021) \[[Paper](https://netman.aiops.org/wp-content/uploads/2021/09/logstudy.pdf)\] **摘要:** 現有的方法在實際部署中存在幾個限制,(1)無法處理各種日誌和複雜的日誌異常模式 (2)可解釋性差 (3)缺乏領域知識。作者發現,有豐富信息的日誌展現了多樣的異常樣式(如:關鍵詞、模板計數、模板序列、變量值和變量分佈等)。但現有的方法無法應對這些複雜的異常模式,所以作者提出了一個名為LogAD的通用日誌異常檢測系統,融合了多種異常檢測方法和領域知識。關於LogAD的有效性,平均F1得分達到0.83,優於所有基準方法。 **方法:** 1. 日誌預處理 即使是最先進的日誌解析算法 Drain,在某些日誌上表現也不佳,通常需要對模板進行手動調整(例如合併和刪除)。自動日誌解析無法處理複雜情況。現實的日誌時間戳的格式多樣,如"21\:40\:00", "09\:40\:00 PM", "214000"。對於一個算法自動識別各種時間戳,需要具有相應的領域知識。為解決這個問題,LogAD引入一個知識庫從三個方面輔助日誌預處理。(1)一些通用日誌的模板(例如Oracle和DB2)通常是固定的,可以將這些模板存儲為知識,想在類似的日誌上檢測異常,將節省日誌解析的工作。(2) 對於一些不適合使用解析算法的特殊日誌(例如訪問日誌),LogAD直接採用規則匹配(拆分為時間戳、IP、URL和返回碼)。(3)一些關鍵變量(如Garbage Collection heap space)可以選擇進一步進行變量異常檢測。 2. 日誌異常檢測 日誌消息包含豐富並多樣的日誌異常模式,單一算法面對這樣的複雜情況往往難以表現良好。LogAD借鑒了集成學習的思想,結合多種異常檢測技術。工程師可以基於領域知識選擇一個或多個合適的異常檢測組件來檢測不同日誌的特定異常模式。 <center> ![feature example](https://hackmd.io/_uploads/SJWk7f-F2.png) </center> * **關鍵詞** : 雖然基於關鍵詞的策略相對簡單,但它不能被替代,因為這是最直接的識別失敗的方法。設置稀有、具體且致命的關鍵詞(如"OutOfMemory", "IOException")更有價值且準確。 * **模板計數** : 現有的方法對每個時間窗口編碼一個模板計數特徵向量,並在該向量上檢測異常,但對工程師來說不夠直觀。在LogAD中,使用定期間隔(例如一分鐘)的模板時間序列來描述模板計數的行為。每分鐘的模板數量應該遵循正常模式。通常一個日誌文件可能有幾十到幾百個模板。對每個模板序列進行異常檢測將消耗大量資源並引發大量警報。根據觀察,不同模板的數量之間存在某種關係。例如,模板A的減少可能導致模板B的增加。因此,可以使用多變量時間序列異常檢測技術(LogAD中使用的基於LSTM的算法\[[Paper](https://arxiv.org/pdf/1802.04431.pdf)\]\[[Code](https://github.com/khundman/telemanom)\])將所有模板序列視為整體實體,這不僅可以提高準確性並識別潛在相關的異常,還可以節省計算資源。 * **模板序列** : 模板序列通常描述任務執行的過程。一些方法採用基於LSTM的模型(DeepLog, LogAnomaly)來學習正常的模板序列。一旦到達的日誌模板違反了預測的前k個模板,則被視為異常。 * **變量值** : 一些有特定含義的變量是關鍵的。變量值可以按照固定間隔(如 1 min)聚合成時間序列。可以利用時間序列異常檢測技術來檢測變量值的異常。具體而言,發現變量值序列通常有兩種類型,即季節性和平穩型。首先使用自相關係數(\[[Paper](http://alumni.cs.ucr.edu/~mvlachos/pubs/sdm05.pdf)\],\[[Paper](https://ieeexplore.ieee.org/document/8723601)\])來確定變量序列是否具有季節性。然後,對季節性序列採用Holt-winters算法,對平穩型序列採用3-σ方法。 * **變量分佈**。一些變量不是連續值,例如訪問日誌中的IP地址、URL和返回碼,交易日誌中的城市、ISP、瀏覽器版本。例如正常情況下不同城市的請求數量往往遵循正常分佈。一旦某個城市的請求數量急劇下降,分佈會相應變化,表明該城市的系統不可用或城市ISP存在問題。因此,對於分類變量,主要關注分佈異常。LogAD使用Jensen-Shannon(JS)散度來刻畫兩個分佈之間的距離(範圍從0到1)。具體而言,可以從歷史數據中學習分佈距離的正常範圍。一旦當前數據的分佈與歷史數據相去甚遠(超過閾值),可以推斷當前時間是異常的。 <center> ![LogAD](https://hackmd.io/_uploads/r1Gkmhyjn.png) </center> ### Log-based Anomaly Detection with Deep Learning: How Far Are We? (2022) \[[Paper](https://arxiv.org/pdf/2202.04301.pdf)\] \[[Code](https://github.com/LogIntelligence/LogADEmpirical)\] 本文對四個公共日誌數據集上的五種最先進的基於深度學習的系統異常檢測模型進行了深入分析。實驗關注模型評估的多個方面,包括訓練數據選擇、數據分組、類別分佈、數據噪音和早期檢測能力。結果指出,所有這些方面都對評估有顯著影響,且所有研究的模型並不總是表現良好。 ![test_result](https://hackmd.io/_uploads/ByoGXBZYh.png) ### Experience Report: Deep Learning-based System Log Analysis for Anomaly Detection (2022) \[[Paper](https://arxiv.org/pdf/2107.05908.pdf)\]\[[Code](https://github.com/logpai/deep-loglizer)\] 在本文中,對六種較新的方法所使用的五種流行神經網絡進行了全面評估和回顧,並提供實作。其中四種方法是非監督的,另外兩種方法是監督的。 ### A Comprehensive Review of Anomaly Detection in Web Logs (2022) \[[Paper](https://hpi.de/en/meinel/security-eng/Document/mehryar.majd/A%20Comprehensive%20Review%20of%20Anomaly%20Detection%20in%20Web%20Logs.pdf/c22bd142869f218724009646132a9acc.html?tx_extbibsonomycsl_publicationlist%5Baction%5D=download&cHash=8892fc8c0fb500ea48ea935ffe32cc0f)\] **本文專注在Web服務器的HTTP日誌**,探討Web服務器日誌異常檢測(WLAD)的問題,並旨在對近期在WLAD上的研究和發展進行簡要回顧。此外,本文還考慮了與WLAD相關的Web服務器日誌分析以及其他相關主題的文獻。將現有的技術分類為不同的類別,基於採用的基本方法。在應用特定技術時,可以將這些假設用作評估該方法在此領域中有效性的指南。每個類別也提供了一種基本的安全異常檢測方法,並將現有方法作為基本技術的變體進行比較,並討論方法的計算複雜度。 ### Anomaly Detection Learning Resources \[[Github連結](https://github.com/yzhao062/anomaly-detection-resources)\] 這個repository包含許多anomaly detection與outlier detection的算法統整與工具。 1. Books & Academic Papers 2. Online Courses and Videos 3. Outlier Datasets 4. Open-source and Commercial Libraries/Toolkits 5. Key Conferences & Journals ## Challenge 雖然目前學術界有很多日誌異常檢測的工作,但是這項技術在實際應用中仍然存在較多挑戰,主要的難點有以下幾個方面: 1. **日誌模板解析的效果直接影響異常檢測的效果** 目前的異常檢測演算法的前置步驟基本都是模板解析,通過解析提取到結構化的模板和變數,採用合適的異常檢測演算法,然而,模板提取對於一些結構比較規範整齊的日誌是比較有效的,但是實際中的日誌可能非常複雜,尤其是一些應用日誌,經常會導致一些變數被當成模板,一些模板詞會被認為是變數。不準確的模板和變數會直接破壞異常檢測的效果。此外,實際中很難做到完全自動化的模板提取,比如不同日誌有不同的時間格式等等,這些都需要人工額外配置以及對演算法提取的結果進行調優,因而又需要額外的人力開銷 2. **演算法的可解釋性** 目前學術界的方法主要是通過一些特徵表示+異常檢測方法來實現日誌異常檢測,但是這兩個步驟都存在可解釋性不足的問題,比如一些抽象的語義特徵以及一些黑盒的異常檢測方法。模型只能給出日誌是否異常的判定結果,但是為什麼是異常,哪裡異常,正常的日誌模式是什麼,對於這些工程師是無法理解的 3. **缺乏大規模、種類豐富的日誌資料集** 目前日誌異常檢測公開的資料集主要是HDFS日誌、OpenStack和BGL三個,但是根據實際的分析,這三類日誌的異常模式普遍比較簡單,很容易檢測出異常並達到不錯的效果,但是實際工業界日誌種類是非常多的,比如操作系統、資料庫、應用日誌等。 4. **依賴領域知識** 前面提到,由於實際中的日誌種類繁雜,不同日誌呈現的日誌異常模式可能也不盡相同。因此,什麼日誌適合用什麼樣的方法,是否需要配置關鍵字等等都是依賴領域知識的。此外,在經過模板提取後,如果直接把全部的模板和變數都輸入到模型中可能會產生很多誤報,並帶來額外的開銷。需要關注哪些模板以及需要對哪些變數進行異常檢測也是依賴領域知識的 # Log Parsing 在解析一般的日誌訊息時,它們依賴於開發人員提供的正則表達式和臨時腳本。日誌解析仍然是一項具有挑戰性的任務,原因如下: 1. 大量的日誌數據,因此需要大量的手動正則表達式構建工作 2. 軟體的複雜性,增加了事件模板的多樣性 3. 軟體更新的頻率,正規表達式需要頻繁更新 ## Method ### Tools and Benchmarks for Automated Log Parsing (2019) \[[Paper](https://arxiv.org/pdf/1811.03509.pdf)\] \[[Code](https://github.com/logpai/logparser)\] Logparser 這個repository提供了各種較新的自動日誌解析算法工具,與各算法之間的比較。通過應用Logparser,使用者可以從非結構化日誌中自動學習事件模板,並將原始日誌訊息轉換為一系列結構化事件。在文獻中,日誌解析的過程有時被稱為訊息模板提取、日誌關鍵字提取或日誌訊息聚類。 ![logpai_method_list](https://hackmd.io/_uploads/Bkr3iVZKh.png) ![logpai_experiment](https://hackmd.io/_uploads/ByCknMWY3.png) ### An Effective Approach for Parsing Large Log Files (2022) \[[Paper](https://users.encs.concordia.ca/~abdelw/papers/ICSME2022_ULP.pdf)\] \[[Code](https://zenodo.org/record/6425919)\] ULP結合了字符串匹配和局部頻率分析,以高效的方式解析大型日誌文件。首先,使用文本處理方法將日誌事件組織成群組。然後,局部對相同群組的實例應用頻率分析,以識別日誌事件的靜態和動態內容。 ### UniParser: A Unified Log Parser for Heterogeneous Log Data (2022) (Microsoft) \[[Paper](https://arxiv.org/pdf/2202.06569.pdf)\] \[[中文筆記](https://zhuanlan.zhihu.com/p/524187440)\] <center> ![problems](https://hackmd.io/_uploads/SyLuXEKKn.png) </center> **現有問題**: 1. 集中在提取日誌中的公共部分作為模板,忽略了日誌的語義信息。例如,在上述例子中,"/etc/data"應該是一個參數,而不是模板。現有的方法未充分考慮日誌的語義信息。 2. 對於來自不同服務和系統的日誌,其內容是多樣化的,現有方法的通用性較差。例如,Linux、Windows和Mac三種操作系統的日誌完全不同,需要累積足夠多的日誌數據並重新調整參數,才能獲得良好的效果。 3. 評估指標不合適。目前日誌模板解析的下游任務(如日誌異常檢測)同時關注模板和參數,然而現有方法主要從聚類的角度評估準確度(即屬於同一模板的日誌是否被分為一組),並未對模板和參數的準確性進行進一步評估。 這篇論文提出了一種名為 UniParser 的統一日誌解析器,該解析器能從異質的日誌數據中捕捉到常見的日誌行為。UniParser 利用一個 Token Encoder 模塊和一個 Context Encoder 模塊來學習日誌標記及其鄰近上下文的模式,並使用一個 Context Similarity 模塊來模擬學習到的模式的共性。該方法在大範圍內超越了最先進的日誌解析器,並且只需 2-3 分鐘就可以解析數百萬條日誌。現有的日誌解析器經常忽視日誌消息的語義含義,並且各種日誌來源之間的高度多樣性對於日誌解析在不同系統間的泛化構成了障礙。 # Feature Extraction 在日誌分析中,特徵提取是一個關鍵的步驟。它的主要目的是從數據中提取出有用的信息,這些信息可以用於進一步的分析,例如異常檢測、系統監控、預測模型等。特徵提取的過程通常包括以下步驟: 1. 數據清洗:這是特徵提取的第一步,目的是去除日誌中的無關信息,例如時間戳、日誌級別等。這些信息對於特徵提取並無太大的幫助。 2. 特徵選擇:這一步是從清洗過的數據中選擇出有用的特徵。這些特徵可以是日誌中的特定字段,例如錯誤碼、操作類型等。 3. 特徵編碼:這一步是將選擇出的特徵轉換為機器學習模型可以理解的形式。例如,將類別特徵轉換為獨熱編碼(One-hot encoding),或是用NLP的預處理方式,將字串(如URI)轉換成向量。 #### 可能的挑戰: 1. 特徵選擇的困難:在大量的日誌數據中選擇出有用的特徵是一個挑戰。如果選擇的特徵太少,可能無法充分反映日誌的信息;如果選擇的特徵太多,可能會導致模型過擬合。 2. 特徵編碼的問題:不同的特徵可能需要不同的編碼方式。例如,數值特徵可以直接使用,但類別特徵可能需要進行獨熱編碼。此外,如果特徵的分布不均勻(如:IP address),可能需要進行數據標準化或者歸一化。 3. 數據質量問題:如果日誌中的數據質量不高,例如存在大量的缺失值或者噪聲,那麼特徵提取的結果可能會受到影響。 ## Method 數值特徵可以選擇:標準化,歸一化,one-hot encoding 處理資料,並用autoencoder提取特徵。 而字串特徵可以選擇:各種NLP預處理的工具,像是Tokenizer有WordPiece, BPE(Byte Pair Encoding), Unigram等,而序列編碼的工具像是Word2Vec, USE(Universal Sentence Encoder)。 ### Amazon : Preprocess logs for anomaly detection in Amazon OpenSearch \[[文章連結](https://aws.amazon.com/tw/blogs/big-data/preprocess-logs-for-anomaly-detection-in-amazon-opensearch/)\] 簡單介紹了一些網頁伺服器日誌的預處理方法。 ![preprocess](https://hackmd.io/_uploads/rJXrdNYt3.png) ### An Improved Feature Extraction Approach for Web Anomaly Detection Based on Semantic Structure (2021) \[[Paper](https://downloads.hindawi.com/journals/scn/2021/6661124.pdf)\] **簡介**: 這篇論文提出了一種改進的特徵提取方法,該方法利用了URL的語義結構。語義結構是URL的內在解釋屬性,可以識別URL中每一部分的功能和漏洞。在不失去泛用性的情況下,本文主要分析使用GET方法的HTTP請求。雖然是專注於GET請求,但此方法可以輕鬆擴展到其他方法,只需將用戶的數據轉換為類似GET的參數-值對格式即可。可以有效地區分正常和異常的HTTP請求,並且可以應對Web應用中廣泛存在的請求不平衡問題。在CSIC-2020的評估中,此特徵提取方法比傳統的特徵提取方法有更好的性能,準確性、召回率和F1分數的平均改進超過5%。 **方法**: 提出了一種學習語義結構並構建模式樹的方法。根據每個邏輯部分的熵和不同值的數量來確定邏輯部分的屬性。作者提出了一種top-down的算法,這種算法可以遞歸地將URL分割成子組,並同時建立一個模式樹。在每個分割過程中根據等式(下圖)確定邏輯部分是否顯著或微不足道。如果邏輯部分是顯著的,則存值於V中。否則,將這些值一般化為“”,並將V設置為{''}。根據V\*中的值,可以將URL分割成子組。然後,在每個子組上進一步遞歸地確定下一個邏輯部分是顯著還是微不足道。這個確定和分割的過程重複進行,直到子組為空。最後,從子組Ui中學習一個模式樹Ni。這棵樹中從根到葉的每條路徑都是一條語義結構信息。模式樹中的每個節點都代表URL的一個邏輯部分。並且,節點的類型由其值來識別。 <center> ![equation](https://hackmd.io/_uploads/S1i_6NtY2.png) </center> # Anomaly Detection 機器學習主要有三種學習類型:監督式學習(supervised learning)、半監督式學習(semi-supervised learning)以及**非監督式學習(unsupervised learning)**。簡單來說,監督式學習使用帶有標籤的數據,半監督式學習同時使用帶有標籤和未標記的數據,而非監督式學習僅使用未標記的數據。這些學習方法的選擇取決於可用數據和學習任務的性質。 監督式學習(Supervised Learning): 需要已標記的訓練數據集,其中每個樣本都有對應的輸入特徵和預期的輸出標籤。學習算法的目標是根據輸入特徵預測相應的輸出標籤。常見的算法包括SVM(Support Vector Machines)、Decision Trees 和Neural Networks等。 半監督式學習(Semi-Supervised Learning): 有一小部分已標記的訓練數據,但同時也有大量未標記的數據。這種情況下,學習算法的目標是在盡量利用已標記數據的同時,通過利用未標記數據來改善模型的性能。半監督式學習的一個主要假設是,未標記數據中的相似樣本在輸出空間中也應該相似。因此,通常假設未標記數據在輸出空間中形成一些簇或連續區域。 **非監督式學習(Unsupervised Learning):** 沒有標籤或預期輸出的學習方法。只有輸入特徵的數據集,非監督式學習不需要預先知道結果或目標,而是通過學習數據的內在結構來進行學習。常見的算法包括Clustering、PCA(Principal Component Analysis)等。 ## Method - Unsupervised ### Python Outlier Detection \[[Github連結](https://github.com/yzhao062/pyod)\] PyOD包含超過40種檢測算法,從經典的LOF(2000)到最新的ECOD(2022)。自2017年以來,PyOD已在眾多學術研究和商業產品中得到成功應用,下載量超過1000萬次。 特點包括: 1. 統一的API、詳細的文檔和各種算法的互動示例。 2. 先進的模型,包括經典的距離和密度估計、最新的深度學習方法以及像ECOD這樣的新興算法。 3. 使用numba和joblib進行JIT和並行處理,優化性能。 4. 使用SUOD實現快速的訓練和預測。 ### No Features Needed: Using BPE Sequence Embeddings for Web Log Anomaly Detection (2022) \[[Paper](https://dl.acm.org/doi/pdf/10.1145/3510548.3519375)\] **摘要:** 在網絡日誌異常檢測中,手動數據分析以提取有用特徵可能既耗時又費力。另一方面,自動化技術(如基於自編碼器和卷積神經網絡)通常需要額外的網絡訓練來進行特徵提取。經常在這些特徵訓練的系統上會出現高偽陽性率(FPR),而修正這些問題可能會對準確性產生負面影響並增加訓練/調整的延遲。因此,手動分析延遲、強制額外訓練以及較差的檢測結果是當代網絡日誌異常檢測系統的局限性。 BPE(Byte Pair Encoding)是一種自動數據表示方案,不需要訓練,只需要進行一次解析運行以對可用數據進行標記化。建議使用從網絡日誌數據獲得的BPE標記,並通過預先訓練的序列嵌入模型將其向量化,進行網絡日誌異常檢測。使用兩個公共數據集進行的實驗表明,基於BPE序列向量訓練的機器學習模型相比於手動和自動提取特徵的訓練獲得更好的結果。此外,獲取日誌表示的技術是完全自動化的(僅需要一個超參數),不需要額外的網絡訓練,並且提供的表示在不同的機器學習算法中表現一致(這是特徵技術所缺乏的一個方面)。此方法的唯一取捨是系統內存消耗上限的增加,相比於使用手動特徵。這是由於所使用的預先訓練嵌入的維度較高,未來工作動機是減少這一點。 <center> ![framework](https://hackmd.io/_uploads/S1uy5AnF3.png) </center> ### LogUAD: Log Unsupervised Anomaly Detection Based on Word2Vec (2022) \[[Paper](https://zuscholars.zu.ac.ae/cgi/viewcontent.cgi?article=5654&context=works)\] 提出了一種基於Word2Vec的日誌無監督異常檢測方法(LogUAD)。LogUAD不需要進行日誌解析步驟,並將原始日誌消息作為輸入以避免噪聲。LogUAD使用Word2Vec生成詞向量,並使用TF-IDF生成加權的日誌序列特徵向量來處理日誌語句的演變。最後,利用計算效率高的無監督聚類方法來檢測異常。在Blue Gene/L(BGL)的公共數據集上進行了廣泛的實驗。實驗結果顯示,與LogCluster(2015)相比,LogUAD的F1-score可以提高67.25%。 >這篇paper使用自然語言處理,可以作為預處理其中一種方法的參考。2022的研究實驗結果拿2015的作比較,不優。 ![LogUAD_framework](https://hackmd.io/_uploads/H1Nw6m5F2.png) ### Unsupervised log message anomaly detection (2020) \[[Paper](https://dspace.library.uvic.ca/bitstream/handle/1828/12020/Farzad_Amir_ICTExpress_2020.pdf?sequence=1&isAllowed=y)\]\[[Code](https://github.com/logpai/deep-loglizer)\] 本文提出了一種無監督模型用於日誌消息的異常檢測,該模型採用孤立森林(Isolation Forest)和兩個深度自編碼器網絡(autoencoder)。autoencoder用於訓練和特徵提取,然後再用異常檢測,而孤立森林則用於正樣本的預測。該模型使用BGL、Openstack和Thunderbird的日誌消息數據集進行評估。實驗結果顯示,負樣本被預測為正樣本的數量很低,特別是使用孤立森林和一個自編碼器的情況下。 <center> ![](https://hackmd.io/_uploads/B1e1xrct2.png) </center> ### Deeplog: Anomaly detection and diagnosis from system logs through deep learning (2017) \[[Paper](https://users.cs.utah.edu/~lifeifei/papers/deeplog.pdf)\]\[[Code](https://github.com/Thijsvanede/DeepLog)\]\[[中文筆記](https://hackmd.io/@jaihuayen/rkqbxn4hs?utm_source=preview-mode&utm_medium=rec)\] 提出了DeepLog,一種利用長短期記憶(LSTM)的深度神經網絡模型,將系統日誌建模為自然語言序列。這使得DeepLog能夠從正常執行中自動學習日誌模式,並在日誌模式偏離正常執行時檢測異常。此外,還演示了如何以在線方式增量更新DeepLog模型,以便隨著時間適應新的日誌模式。 > 把深度學習應用到這領域的開拓者 ![DeepLog_framework](https://hackmd.io/_uploads/rJKFm4qKn.png) :::warning model 主要分成三個部分: 1. Log key anomaly:key(template)的異常檢測,用之前n個key預測下一個key,若預測錯誤則為異常 2. Parameter value and performance anomaly:參考參數的值與間隔時間(performance)檢測有沒有異常 3. Workflow construction:若經過第 1, 2項後判斷為異常,則嘗試重建workflow,診斷是哪裡出現問題。 github上主要實作的是第1項,這個\[[repo](https://github.com/Wapiti08/DeepLog)\]是都有實作的(但我沒試過)。 ::: ## Method - Semi-supervised ### Self-Attentive Classification-Based Anomaly Detection in Unstructured Logs (2020) \[[Paper](https://arxiv.org/pdf/2008.09340.pdf)\]\[[Code](https://github.com/logpai/deep-loglizer)\]\[[中文筆記](https://blog.csdn.net/MarkAustralia/article/details/119678166)\] 最近的研究主要集中在預先定義的不可學習數值日誌表示上的單類深度學習方法。主要限制在於這些模型無法學習描述正常日誌和異常日誌之間語義差異的日誌表示,導致對未見日誌的泛化能力差。作者提出了Logsy,一種基於分類的方法,以區分正常數據和從輔助日誌數據集中獲得的異常樣本。這些輔助數據集通過互聯網輕松獲取,並具有足夠的信息來增強正常數據的表示,同時具有足夠的多樣性來正則化避免過擬合並提高泛化能力。提出了一種基於自注意力機制的編碼器模型,並引入了一種新的球面決策邊界損失函數。 <center> ![self attention](https://hackmd.io/_uploads/r1AkiV9Y3.png) </center> ### DEEPCASE: Semi-Supervised Contextual Analysis of Security Events (2022) \[[Paper](https://sites.cs.ucsb.edu/~vigna/publications/2022_SP_DeepCASE.pdf)\]\[[Code](https://github.com/Thijsvanede/DeepCASE)\] 在許多情況下,單個事件可能不足以確定某種活動是否確實具有惡意。因此,安全操作人員經常需要關聯多個事件,以確定它們是否構成真正的威脅。不幸的是,需要關聯的事件數量通常會給安全操作人員帶來過大的負擔,迫使他們忽略某些事件,可能錯過攻擊。本研究探討如何自動關聯安全事件,從而自動化部分安全操作人員的工作量。作者設計了DEEPCASE系統,該系統利用事件周圍的上下文來判斷哪些事件需要進一步檢查。這種方法減少了需要檢查的事件數量。此外,上下文提供了有價值的見解,解釋為什麼某些事件被分類為惡意。作者展示了此方法自動過濾了86.72%的事件,將安全操作人員的手動工作量減少了90.53%,同時在少於0.001%的情況下低估了潛在威脅的風險。 ![DeepCase_framework](https://hackmd.io/_uploads/Hk0UO4qYh.png) :::success DBSCAN : sklearn實作的版本在大檔案速度較慢,這個repo可以用cuda加速\[[Github](https://github.com/rapidsai/cuml)\],同時,也可以嘗試用HDBSCAN。 ::: ### LogAnomaly: Unsupervised Detection of Sequential and Quantitative Anomalies in Unstructured Logs (2019) \[[Paper](https://www.ijcai.org/proceedings/2019/0658.pdf)\]\[[Code](https://github.com/donglee-afar/logdeep)\]\[[中文筆記](https://blog.csdn.net/hbhgyu/article/details/112573007)\] 提出了LogAnomaly,這是一個將日誌流建模為自然語言序列的框架。借助於template2vec方法來提取日誌模板中隱藏的語義信息,LogAnomaly可以同時檢測順序和數量上的日誌異常。此外,LogAnomaly可以避免定期模型重新訓練之間新出現的日誌模板引起的誤報。 <center> ![LogAnomaly_framework](https://hackmd.io/_uploads/rJvsqV5Fn.png) </center> ### Semi-Supervised Log-Based Anomaly Detection via Probabilistic Label Estimation(2021) \[[Paper](https://xgdsmileboy.github.io/files/paper/plelog-icse21.pdf)\]\[[Code](https://github.com/LogIntelligence/LogADEmpirical)\] 作者提出了半監督的PLELog,減少耗時的手動標記,並通過概率標記估計將歷史異常的知識納入其中,發揮監督方法的優勢。此外,PLELog能夠通過語義嵌入保持對不穩定日誌數據的免疫性,並通過設計基於注意力機制的GRU神經網絡高效地檢測異常。作者在兩個最廣泛使用的公共數據集上評估了PLELog,結果表明PLELog的有效性,在F1得分方面相比其他方法平均提高了181.6%。特別將PLELog應用於一家大型公司的兩個真實世界系統,進一步證明了其實用性。 ## Method - Supervised --> Pass # Others ## Graph ### Log2vec: A Heterogeneous Graph Embedding Based Approach for Detecting Cyber Threats within Enterprise (2019) \[[Paper](https://dl.acm.org/doi/10.1145/3319535.3363224)\] \[[中文資料](https://blog.csdn.net/hxhabcd123/article/details/127442670)\] ## Malicious URL ### URLNet: Learning a URL Representation with Deep Learning for Malicious URL Detection (2018) \[[Paper](https://arxiv.org/pdf/1802.03162.pdf)\] 最受歡迎且可擴展的方法使用URL字符串的語義特性,提取類似詞袋模型的特徵,然後應用機器學習模型如支持向量機(SVM)。還有其他由專家設計的特徵來提高模型的預測性能。這些方法存在幾個限制:(1)無法有效捕捉URL字符串中的語義含義和順序模式. (2)需要大量手動特徵工程. (3)無法處理未見過的特徵並泛化到測試數據。為了應對這些挑戰,作者提出了URLNet,一個端到端的深度學習框架,直接從URL中學習非線性URL嵌入以進行惡意網址檢測。應用卷積神經網絡對URL字符串的字符和單詞進行建模,以在一個共同優化的框架中學習URL嵌入。 ### URLdeepDetect: A Deep Learning Approach for Detecting Malicious URLs Using Semantic Vector Models (2021) \[[Paper](https://link.springer.com/article/10.1007/s10922-021-09587-8)\] 本文提出了一種名為URLdeepDetect的混合深度學習方法,用於時間點點擊URL分析和分類以檢測惡意URL。URLdeepDetect通過應用各種技術,包括語義向量模型和URL加密,分析URL的語義和詞彙特徵,以判定給定的URL是惡意還是良性。URLdeepDetect使用LSTM(長短期記憶)和k均值聚類的監督和無監督機制進行URL分類。 <center> ![URLdeepDetect_framework](https://hackmd.io/_uploads/SyIE1rqF2.png) </center> ### Isolation Forest Isolation Forest是一種機器學習算法,主要用於異常檢測。這種算法的主要思想是利用樹結構來"隔離"異常點。它假設異常點會比正常點更容易被隔離出來,因為異常點在特徵空間中的位置通常比較獨特。 工作原理:首先,它會隨機選擇一個特徵,然後隨機選擇這個特徵的一個分割值。然後,它會根據這個分割值將數據集分成兩部分,一部分的數據點的特徵值小於分割值,另一部分的數據點的特徵值大於分割值。這個過程會一直重複,直到所有的數據點都被"隔離"出來,也就是說,每個數據點都成為了一個單獨的節點。在這個過程中,異常點通常會比正常點更早被隔離出來,因為它們在特徵空間中的位置比較獨特。因此,可以用一個數據點被隔離出來的平均路徑長度來衡量它的異常程度。如果一個數據點被隔離出來的平均路徑長度比較短,那麼認為它可能是一個異常點。 優點:不需要先驗知識,也不需要對數據進行任何形式的標準化或轉換。此外,它的計算效率也相對較高,因為它只需要線性時間就可以處理大量的數據。 # DDoS ### Application Layer Denial-of-Service Attacks and Defense Mechanisms: A Survey (2021) \[[Paper](https://dl.acm.org/doi/pdf/10.1145/3448291?casa_token=EIZi-jFhMfQAAAAA:x6ovVp4DScl7SR3DGAR-NP0H62rVXdUvKdBeMx5XZMZmGLZV89LrG_FmiscxKSl_066XBLFqS6Ia5z8)\] 本文貢獻如下: 1. 對應用層DoS攻擊進行了全面的調查,並根據它們是否針對特定協議或大量協議進行了分類。 2. 討論攻擊的工作原理,並根據不同的參數進行了比較。還描述了可以用於發動攻擊的工具。 3. 回顧了對抗不同應用層DoS攻擊已知的各種防禦機制,並根據其工作原理進行了分類。描述了每種防禦機制的優點和缺點,並根據幾個參數進行了比較。 4. 根據它們對抗不同攻擊的能力,比較了幾種熱門商業DoS緩解產品。 整理出一些對抗HTTP flood attack的防禦機制與特徵。 * 請求速率,一定間隔內unique IP數量,數據包大小,網頁訪問序列等特徵 * 將平均用戶閱讀時間和頁面信息大小相關聯來檢測異常 * 用戶請求數量、平均請求數量和最受歡迎頁面的訪問頻率等特徵 * 擴展的隨機遊走模型,對於每個客戶端,生成一種瀏覽模式,如果該模式偏離預先建立的正常模式,則檢測到攻擊 * 擴展的隱馬爾可夫模型(HsMM),用於創建不同用戶的網絡瀏覽行為模型。特別是,作者近似計算了用戶閱讀網頁所需的時間,該時間以頁面中發出的內聯請求數量來衡量。 * 根據每個連接從每個連接發送的資源的請求計數來區分惡意和合法的HTTP連接。 * entropy作為特徵。合法的HTTP請求在大小、速率和意圖上存在變化,而洪水攻擊的請求則是統一的並遵循某種週期性。因此,屬於洪水攻擊的請求具有比合法請求更低的熵。 * User-Agent,合法的 User 通常不會頻繁更換User-Agent,有更低的entropy。 ![pros/cons](https://hackmd.io/_uploads/HyPqNpith.png) ### User Behavior Anomaly Detection for Application Layer DDoS Attacks (2017) **摘要:** 應用層DDoS攻擊利用合法的應用層請求來壓倒一個Web服務器。這些攻擊的主要目標是通過壓倒Web服務器的資源,使服務對合法用戶不可用。它們在連接和協議特徵上看起來是有效的,這使得它們很難被檢測出來。本文提出了一種基於用戶行為異常檢測的應用層DDoS攻擊檢測方法。從HTTP Web服務器日誌中提取用戶請求資源的行為實例。應用**主成分分析**(PCA)子空間異常檢測方法來檢測異常行為實例。收集了一個學生資源門戶網站托管的Web服務器日誌作為實驗數據,並通過滲透測試生成了九種不同的HTTP DDoS攻擊。在收集的數據上的性能結果表明,使用PCA子空間異常檢測方法來檢測用戶行為數據中的應用層DDoS攻擊,即使它們試圖在某種程度上模仿正常用戶的行為。 **想法:** 當從標準的Web瀏覽器發出對網站上某個頁面的請求時,通常瀏覽器會請求所有其他嵌入對象,以完全呈現頁面給用戶。這些對象可以包括腳本、圖像、CSS和字體等其他所需資源。根據頁面的不同,這通常會導致大量額外的關聯請求,超出了原始頁面請求。同一瀏覽器的後續請求通常會緩存一些先前請求的嵌入對象,因此不需要重新獲取近乎於同樣數量的嵌入資源。然而,當檢查其他HTTP GET DDoS工具時,它們的請求只包括目標頁面,而不包括其他嵌入對象。這使得對這些攻擊的檢測變得更加簡單,因為它們不遵循標準Web瀏覽器的行為。 **作法:** 採用非重疊滑動窗口將所有日誌記錄分成5分鐘的時間窗口。每個時間窗口內的記錄根據客戶端IP字段進行分組。對於每個客戶端IP,時間窗口內的記錄組顯示該客戶端在該特定時間窗口內請求的所有資源,即URL字段。將每個用戶的**瀏覽行為實例定義為從每個時間窗口內的URL字段組提取的特徵向量**。需要注意的是,如果選擇的時間窗口太短,無法充分錶示攻擊行為。而時間窗口太長則會延遲對攻擊的檢測。經過初步分析,5分鐘是性能和效果之間的平衡點。 為了定義特徵向量,首先將Web服務器日誌中出現的每個唯一URL視為一個單獨的特徵。有一些URL只被少數幾個用戶請求過,所以只考慮在Web服務器日誌中被至少5個用戶請求過的URL來構建特徵。所有其他被少於5個用戶請求的URL被視為一個單一的特徵。通過計算每個特徵在一組日誌記錄中出現的次數來構建特徵向量。每個特徵向量代表一個用戶的瀏覽行為實例。提取特徵的方法類似於自然語言處理中的**bag of the words**。下圖算法為提取特徵向量的過程。最後交給PCA檢測異常行為。 ![DDoS](https://hackmd.io/_uploads/S17TCFoY3.png)