w0s1np

w0s1np

记录学习和思考 快就是慢、慢就是快 静下心来学习
github

NetAttackClassifier

NetAttackClassifier#

一個基於 Snort 規則和 ATT&CK 框架的網路流量分析與威脅分類工具

  • 🕵️♂️ 基於 Snort 的異常流量檢測
  • 🎯 ATT&CK 技戰術映射
  • 🧬 高細粒度流量分類

地址: https://github.com/w0s1np/NetAttackClassifier

專案簡介#

在訓練流量分類模型時,大部分都使用網路上的公開數據集,但都存在一個共同的缺點,就是對於流量的分類細粒度不夠,如果能把流量中使用的漏洞編號、漏洞細節都區分出來才是在使用在實戰中,但大部分數據集的構造方式要麼是根據已知漏洞方式、惡意軟體類型去產生對應的流量 (例如https://github.com/yungshenglu/USTC-TFC2016​、https://github.com/safest-place/ExploitPcapCollection​), 要麼就是大量人工根據搜尋引擎、漏洞編號庫等方式進行人工分類 (我了解到的一些安全公司).

所以寫了一個根據 Snort 對流量進行檢測,讓大模型對日誌進行分析,使其和 ATT&CK 技戰術進行映射,從而能讓流量進行高細粒度分類

專案功能#

  • pcap 文件檢測:使用 Snort 規則對大量 pcap 文件進行檢測,快速識別出符合規則的可疑數據包及其對應的網路流。
  • ATTCK 技戰術映射:通過調用 DeepSeek API,將檢測到的可疑數據包所觸發的 Snort 規則與 MITRE ATTCK 框架中的技戰術進行映射,明確攻擊者可能採用的攻擊手法和階段。
  • 高細粒度多分類:對檢測出的可疑 pcap 流進行進一步的細分和分類,從多個維度(如攻擊類型、目標系統、攻擊工具等)進行詳細標註和歸類,為後續的安全分析和響應提供更精準的信息。

環境搭建#

  • 安裝 Snort, 配置相應的規則庫 (https://www.snort.org/downloads#rules​), 我的搭建配置:

    安裝 Snort 3 依賴#

    # 更新系統
    sudo apt update && sudo apt upgrade -y
    
    # 安裝編譯依賴
    sudo apt install -y build-essential autotools-dev libdumbnet-dev \
    libluajit-5.1-dev libpcap-dev libpcre3-dev zlib1g-dev pkg-config \
    libhwloc-dev libcmocka-dev liblzma-dev openssl libssl-dev cpputest \
    libsqlite3-dev uuid-dev libtool git autoconf bison flex libnetfilter-queue-dev \
    libmnl-dev libunwind-dev libfl-dev libsafec-dev
    
    # 可選:安裝Hyperscan(高性能正則表達式庫)
    sudo apt install -y libhyperscan-dev
    
    # 安裝CMake(用於構建依賴項)
    sudo apt install -y cmake
    

    安裝 DAQ 3.x 依賴#

    # 安裝編譯DAQ 3.x所需的依賴
    sudo apt install -y libpcap-dev libdumbnet-dev libssl-dev liblzma-dev \
    libcurl4-openssl-dev libhwloc-dev libcmocka-dev libpcre3-dev bison flex
    

    下載並編譯 DAQ 3.x#

    # 下載DAQ 3.x源碼
    cd ~/snort3_build
    git clone https://github.com/snort3/libdaq.git
    cd libdaq
    
    # 配置、編譯和安裝
    ./bootstrap
    ./configure --prefix=/usr/local
    make -j$(nproc)
    sudo make install
    
    # 更新動態庫鏈接
    sudo ldconfig
    

    下載並編譯 Snort 3#

    # 創建編譯目錄
    mkdir ~/snort3_build && cd ~/snort3_build
    
    # 下載Snort 3源碼
    git clone https://github.com/snort3/snort3.git
    cd snort3
    
    # 配置編譯選項
    ./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
    cd build
    
    # 編譯並安裝
    make -j$(nproc) && sudo make install
    

    步驟 4:配置環境變量#

    # 添加Snort 3到PATH
    echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
    source ~/.bashrc
    
    # 驗證安裝
    snort -V
    
  • pip install openai
    

使用方法#

  1. 將 pcap 文件放置在指定的輸入目錄下。

  2. 運行run_snort.py​, 對 pcap 進行批量檢測,並對日誌內容進行解析,提取威脅信息到指定 json 文件中。

  3. 運行extract_tcp_streams.py​, 首先使用SplitCap.exe​(https://www.netresec.com/?page=SplitCap​) 對 pcap 進行 TCP 雙向流分流操作,再檢索 json 文件中存在告警的包,計算整條流中每個包的規則優先級​、觸發頻次​、協議一致性​, 得到同一條流中每個包的加權平均分數​, 選取得分最高包的告警最為該流的告警,這是為了讓 Snort 的包檢測機制與大部分模型的流檢測機制對應起來,從而得到分流後的 pcap 數據包和與之對應的 json 文件,例如:

    {
      "timestamp": "09/06-01:18:41.206357",
      "gid": 1,
      "sid": 45015,
      "rev": 3,
      "description": "FILE-OTHER Jackson databind deserialization remote code execution attempt",
      "classification": "Attempted User Privilege Gain",
      "priority": 1,
      "protocol": "TCP",
      "src_ip": "192.168.56.1",
      "dst_ip": "192.168.56.11",
      "src_port": 1056,
      "dst_port": 8090,
      "pcap_path": "/Users/lnhsec/Desktop/NetAttackClassifier/extracted_streams/fastjson1224ldap/192.168.56.1_1056_to_192.168.56.11_8090.pcap",
      "weight_score": 0.8031363764158987,
      "priority_score": 1.0,
      "frequency_score": 0.47712125471966244,
      "protocol_score": 0.8,
      "alert_count": 2
    }
    
  4. 運行gpt_analysis.py​, 從上面的 json 文件提取重要流量信息,構造相應提示詞,提交給 gpt 對其與 MITRE ATTCK 框架中的技戰術進行映射,得到對應 json 結果,例如:

    {
      "attack_tactics": {
        "TA0006": "T1110"
      },
      "rule_trigger_reason": "An attempted Oracle login with a suspicious username triggered a misparsed login response alert",
      "attack_type": "Credential Brute Force Attempt",
      "behavior_pattern": "Suspicious username used in login attempt to Oracle server via TCP/1521",
      "threat_level": "medium",
      "suggested_action": "1. Investigate source IP 192.168.1.20 for compromise 2. Review Oracle account activity 3. Enforce strong authentication policies",
      "confidence": 0.9,
      "dynamic_behavior": {
        "network": {
          "ip": "192.168.1.20",
          "dns": ""
        }
      },
      "pcap_path": "/Users/lnhsec/Desktop/NetAttackClassifier/extracted_streams/msf_oracle_sid_brute/192.168.1.20_1521_to_192.168.1.14_34055.pcap"
    }
    

    提示詞如下:

    def construct_prompt(key_info):
        prompt = """根據Snort告警進行網路安全事件分析,要求:
            1. 嚴格遵循MITRE ATT&CK技戰術框架分類
            2. attack_tactics字段必須包含相關TA和T編號
            3. 每個TA編號必須對應具體且正確的的T技術編號
        """
        prompt += "根據以下 Snort 告警信息,進行分析並按照 JSON 格式返回:\n"
        for entry in key_info:
            prompt += (
                f"時間: {entry['timestamp']}, 告警ID: {entry['sid']}:{entry['gid']}:{entry['rev']}, "
                f"描述: {entry['description']}, 分類: {entry['classification']}, "
                f"優先級: {entry['priority']}, 協議: {entry['protocol']}, "
                f"源IP: {entry['src_ip']}:{entry['src_port']}, 目的IP: {entry['dst_ip']}:{entry['dst_port']}\n"
            )
    
        prompt += '''\n請回答以下問題並返回 JSON 格式:
            {
            "attack_tactics": {"TAxxxx": "Txxxx"},
            "rule_trigger_reason": "xxx",
            "attack_type": "xxx",
            "behavior_pattern": "xxx",
            "threat_level": "low/medium/high/critical",
            "suggested_action": "xxx",
            "confidence": 0.9,
            "dynamic_behavior": {
                "network": {"ip": "xxx", "dns": "xxx"}
            }
        }'''
        prompt += "\n請嚴格返回符合 JSON 格式的內容,不要包含其他說明文字,只返回 JSON 串。"
        print(f"構造的 DeepSeek API 輸入內容: {prompt}")
        return prompt
    
  5. 最終根據技戰術或者attack_type​對相應文件進行分類操作

未來方向#

  1. 規則庫優化: 因規則庫的不同類型、版本,很多已知惡意 pcap 並沒有被 Snort 檢測出來,這會導致很多漏報或者誤報
  2. 檢測機制改進: 在包檢測與流檢測的對應方法需要進一步完善,查看是否有更好的辦法
  3. 性能優化: 調用 gpt api 進行映射的時間成本較高,嘗試過 deepseek-v3 模型 (較快,但存在亂說的情況), deepseek-r1 模型 (很慢,但是較為準確), 看後續用不用添加部分知識庫,使用其他較快模型進行映射
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。