前言

好久沒有寫文章了,最近研究的主題是網路安全,在這方面做了一個專案。雖然原本期望是在兩年研究所時間都是投入在 SDN 的應用程式開發,但是人生總是會有一些意想不到的意外。

Snort Rules

Snort 是一款開源的入侵偵測系統 IDS 它的功能就不再花篇幅去贅述,主要精神在於深度封包檢查網路封包的特徵,利用的就是 Snort rules 去訂定這些特徵規則,達到 pattern maching 的功能。
一般通常如果沒有花錢去買 Snort rules 可以使用社群的 Rules 可以從 Snort 官方網站下載得到。

我們可以針對某些特定的攻擊特徵去制定規則,寫下這些規則後丟給 Snort 他就會自動幫你做偵測。

假設今天如果有非常多的 Malware 樣本如果要一一的側錄他的網路連線及行為寫下相關的規則,是不是有一個自動化的流程可以實作出來?

Snort Rules Generator

這個 Idea 不是我提的,而是我們 LAB 以前學長做過的一個專案,其實已經有一段歷史,後來又輾轉交到我的手上,原本專案是用 C 實作,看起來完成度很高,經過我的幾次思考之後決定用 Python 重新實作。

在這裡我分做兩個部分去實現:

  • 沙盒系統(分為三個步驟)

    • 建立沙盒與拍下快照
    • 活化病毒
    • 側錄封包
    • 返回快照的還原點
  • 分析網路封包與產生 Snort Rules (分為四個步驟)

    • 解封包重組 Payload
      • 抽取特徵
      • 判斷惡意或善意的連線
      • 如果是惡意連線產生 Snort Rules

由於使用 Python 的關係,廣泛的使用第三方套件,以下簡介一下所用的套件:

沙盒系統原應該是使用類似 Cuckoo sandbox 這類的工具去做,但我目前只做到側錄封包還不需要到那麼複雜,就自己寫一套流程用的是 Pyvbox

分析網路封包與產生 Snort Rules 解封包重組 Payload 用 Dpkt 判斷惡意或善意連線需要有一個 Knowledge Base 依靠的是 VirusTotal 所提供的 API 這邊我有去申請 Private 的 API 每分鐘能發 300 個 requests 相較於 Public API 每分鐘 4 個 requests 是天差地遠!

我想徵招興趣的朋友一起來做專案都在 Github 上!

https://github.com/John-Lin/malware

對此專案有興趣,或想加入一起開發的朋友可以來信 linton.tw@gmail.com

目前有幾項功能想要增加:

  • 產生非 HTTP Protocol 的規則 (沒錯!除 UDP 的規則目前尚在開發中, TCP 的 case 我目前只有針對 HTTP Protocol 產生的規則,因為 Windows 防火牆預設都把其他 port 關了,我就錄不到其他 port 的連線!)

  • 優化產出的規則(這個部分牽涉層面比較廣泛,包括產出的規則能讓 Snort 有更佳的搜尋效率,或是一個更佳的 Snort rule parser )

  • 一個 Web 介面功能:提供上傳具有惡意網路流量之 PCAP 檔,並即時產出 Snort rules 的 Web 介面(目前最期待想做的一個部分!我已經用 Bottle.py 做了一個非常陽春的版本,等一下後面會附上連結與截圖)

目前已經分析過一萬多個惡意 PCAP 產生出 800 多個在 TCP 上的規則(UDP尚在開發)

目前 Snort Rules Generator 網站在 http://snort.linton.tw:8080/
非常歡迎大家拿起你的 PCAP 來做測試 應該不會噴 500 才對 XDD
注意:因為 Host 在自家 OpenStack 的 VM 上面,隨時有斷線的可能 XD

以下是上傳 PCAP 與產生 Snort rules 的截圖:

螢幕截圖 2014-12-28 01.05.22.png

螢幕截圖 2014-12-28 01.05.33.png