Module 8:入侵偵測系統實習 網路安全 學習目的 1. 2. 網路的攻擊隨著愈來愈普遍的資訊科技應用而愈來愈嚴 重。除了透過防火牆來阻擋惡意的攻擊外,我們還需要 知道入侵的情況正在發生。透過入侵偵測系統,可以實 現對於安全的監看(Monitor),即早發現入侵狀況,進一 步避免安全事件的發生。本模組透過網路入侵偵測系統 的架設與實作來讓學員了解入侵偵測機制的運作 本模組共有六個小節包括 (1)入侵偵測系統簡介 (2)入侵偵測系統工具介紹 (3)攻擊特徵與檢測規則介紹 (4)入侵偵測系統的實務 (5)防火牆入侵偵測聯合防禦系統 (6)入侵偵測系統的專案實作 共需三個鐘點 網路安全 8-2 Module 8:入侵偵測系統實習 • • • • • • Module 8-1:入侵偵測系統簡介(*) Module 8-2:入侵偵測系統工具介紹(*) Module 8-3:攻擊特徵與檢測規則介紹(**) Module 8-4:入侵偵測系統的實務(**) Module 8-5:防火牆入侵偵測聯合防禦系統(**) Module 8-6:入侵偵測系統的專案實作(**) * 初級(basic):基礎性教材內容 **中級(moderate):教師依據學生的吸收情況,選擇性介紹本節的內容 ***高級(advanced):適用於深入研究的內容 網路安全 8-3 Module 8-1:入侵偵測系統簡介(*) 網路安全 8-4 何謂入侵? • 有任何嘗試威脅到機密性(Confidentiality)、完整 性( Integrity) 、可用性(Available)及穿過網路或電 腦的安全機制則稱為入侵 – 例: • 阻斷服務攻擊(DoS) • 資料濫用 • 電腦蠕蟲與惡意程式碼 • 入侵偵測(Intrusion detection, ID):在電腦系統或 是網路上,監測事件的發生並且分析入侵的訊息 網路安全 8-5 入侵偵測系統種類介紹 • 入侵偵測系統(Intrusion Detection System, IDS)分 為兩大類 – 網路型入侵偵測(Network-based IDS, NIDS) • 擷取網路封包來分析資料,直接放入現有的網路環 境且能正常運作 • NIDS的優點是只需要少量的NIDS並且放入恰當的 位置,則能監測大網路且不會被駭客發現有使用IDS – 主機型入侵偵測(Host-based IDS, HIDS) • HIDS常佈署於重要的伺服器或主機上,針對系統上 的重要檔案與資源進行監控,或對使用者的行為進 行監督,一旦符合入侵規則便發出警告 網路安全 8-6 IDS偵測模式 • IDS偵測效能主要由兩個因素來決定 – 分析方法與工具(Method & Tool) • 用來建立攻擊規則(Attack Rules)或行為模式 (Behavior Model) • 用來進行比對工作 – 資料特徵(data feature) • 入侵偵測系統在比對入侵行為的方式分成兩大類 – 不當行為偵測(misuse detection) – 異常偵測比對(anomaly-based) 網路安全 8-7 IDS偵測模式 (續) • 不當行為偵測(misuse detection) – 嘗試將已知的攻擊行為,用各種語法描述成攻擊樣 式(attack pattern),並建立一個特徵比對資料庫,用 這些攻擊樣式來辨認攻擊 – 用於辨認攻擊的分析方法常見的有三種 • Rule-based分析方法 • 貝式網路(Bayesian network)分析方法 • Finite-state-machine分析方法 網路安全 8-8 IDS偵測模式 (續) • 異常偵測比對(anomaly-based) – 此模式定義哪些行為在系統裡算是正常行為,與正 常行為偏差很多的則算是一種異常行為,因此能偵 測出未知的攻擊 – 分析方法常見的有兩種 • 統計分析方法 • 類神經網路(Neural network)分析方法 網路安全 8-9 Module 8-2:入侵偵測系統工具介紹(*) 網路安全 8-10 IDS工具比較 • 商業軟體 – 優:功能比較強大,但需定期更新,以達到有效的 防護 – 缺:需要費用才能使用 – 例:TANDBERG • 免費軟體 – 優:不需費用就能夠使用,有些有開放程式碼 – 缺:功能沒有商業軟體強大,規則要手動或是自行 更新才有辦法達到有效的防護 – 例:Snort與IDSwakeup 網路安全 8-11 IDS工具 - Snort • 開放原始碼的網路入侵偵測系統 • 功能強大 – – – – – 獨立(stand-alone)做即時(real-time)的流量分析 封包的紀錄(log) 偵測各種不同的攻擊(attack)與探測(probe) 通訊協定(Protocol)分析與內文(content)搜尋與比對 記錄檔(log)有很好結構性與可讀性佳 網路安全 8-12 IDS工具 - Snort (續) • 有彈性 – 有規則描述語言(rules description language)來描述 網路資訊 – 偵測方式使用外掛模組(plug-in) • 安裝所需之相依函示庫 – Libpcap、Libpcre、Libdnet、Daq、Libc、Libgcrypt Libgnutls、Libltd及Libprelude 網路安全 8-13 Snort元件 • 封包擷取函式庫(Packet capture library) – 實質上與Snort分開用來從網路卡擷取封包的library, Linux用libpcap,windows則用winpcap • 封包解碼(Snort Packet decoder) – 從第二層到第四層依序將封包解開。在完成後, Snort會得到封包中所有相關的Protocol的資訊 • 偵測引擎(Detection Engine) – 此 部 份 是 Snort 的 核 心 。 將 從 packet decoder 與 Preprocessor蒐集來的資訊將其與預先制定好的規 則(detection signature plug-in)做比較 網路安全 8-14 Snort元件 (續) • 預先處理器(Preprocessor) – Snort的Preprocessor有很多plug-ins,負責將解碼後 的封包轉換成Snort更易處理的格式 – Preprocessor在將資料送至Detection Engine前便能 先執行警告、分類或丟棄封包 • 偵測特徵(Detection Signature) – 提供Snort識別是否有入侵的特徵,以script語言描 述。由於plug-in方式不包含於Snort本身,所以具有 很好的彈性。通常能找到現有的module或是自行制 定 網路安全 8-15 Snort元件架構 Detection Signature (plug-ins) Packet Capture Library Snort Packet Decoder Preprocessor (plug-ins) Detection Engine Output (plug-ins) 網路安全 8-16 Snort元件 (續) • 輸出(Output) – 當Preprocessor或rule對應到任何事件,便會產生 alert與log。Snort支援各種不同的output plug-ins以 產生各種不同的輸出格式。例如二進位表示 (binary)與文字(text)、資料庫(database)及系統記錄 檔(syslog)等 網路安全 8-17 Snort工作模式 • 監聽模式(Sniffer mode) – 擷取收到的封包,並顯示在螢幕上 • 封包記錄模式(Packet logger mode) – 將擷取到的封包存至硬碟記錄 • 網路入侵偵測模式(NIDS mode) – 對收到的封包進行分析,並根據使用者所訂定的規 則執行相對應的動作 • 線程模式(Inline mode) – 透過防火牆(iptables),根據規則告知防火牆是否讓 封包通過 網路安全 8-18 Module 8-3:攻擊特徵與檢測規則介紹 (**) 網路安全 8-19 摘要 • Snort 採 用 簡 單 與 輕 量 的 規 則 描 述 語 言 (rules description language),具有彈性且功能非常強大 • 大部分Snort rule都是單行,能在後面加個反斜線 (\)將規則拆成多行 • Snort rule 分 為 兩 部 份 , 分 別 為 規 則 標 頭 (Rules Header)與規則選項(Rules Options) – Rules Header 包 含 了 Rule Action 、 protocol 、 source/destination IP address及netmask – Rules Options包含了警告訊息與決定是否該採取 Rule Action的資訊 網路安全 8-20 Rules Header • Rules Header清楚表示Snort rule要做的動作與要檢 測從何處來往何處去的packets • Rule Header格式 – action protocol IP port -> direction IP port – 例: • log tcp 127.0.0.1 9527 -> 192.168.1.100 2266 • 從127.0.0.1 port:9527 至 192.168.1.100 port:2266的 TCP封包做log action 網路安全 8-21 Rule Actions • Rule Actions用來告訴Snort若rule與找到的封包符 合,則採取何種動作 • 預設的五個Rule Actions – – – – alert:根據規則產生警告,並將過濾封包做記錄 log:只根據規則記錄封包,不產生警告 pass:忽略此封包 activate : 顯 示 警 告 並 且 開 啟 其 它 Rule Action 為 dynamic的rule – dynamic:閒置直到被Rule Action為activate的rule 啟動,便視同Rule Action為log的rule 網路安全 8-22 Rule Actions (續) • Snort線程模式(Snort Inline mode)也具有三種 Rule Actions – drop:讓iptables丟棄封包並存入資料備份 – reject:同drop,但若protocol為TCP,則送一個TCP reset;若為UDP則產生ICMP port unreachable message – sdrop:讓iptables丟棄此封包且不存入資料備份 • activate/dynamic並不常被使用在Snort rule,但可 做更進階的入侵偵測,為方便的選擇 網路安全 8-23 Rule Actions (續) • Snort 也 可 自 行 制 定 rule type , 做 為 Snort 的 Rule Actions ruletype suspicious { type log output log_tcpdump: suspicious.log } – 以上範例設計一個rule type名為「suspicious」,動 作為產生記錄檔(log)到tcpdump 網路安全 8-24 Protocols • 用來告知Snort rule要過濾的protocol • 一般的Snort版本目前規則訂定支援TCP、UDP、 IP 及 ICMP protocol , 也 許 在 未 來 會 支 援 ARP 、 802.11、HTTP、OSPF及RIP等protocol 網路安全 8-25 Source/Destination • 以IP來表示source或destination的位址 • 可配合netmask表示一個網段,以CIDR方式做切 割 – 例:127.0.0.1/24與192.168.1.100/13 • Port number能指定特定範圍的port – 1:1024 表示1~1024 – :6000 表示小於等於6000 – 500: 表示大於500 • 亦可使用「any」表示規則為將包含所有IP或port 網路安全 8-26 Direction Operator • Snort規則會運用「->」來表示傳輸的方向,藉此 也可得知左邊為source,右邊為destination • 另外也有表示雙向的符號,< >用來表示兩邊的流 向皆須套用這規則 • 必須注意的是,沒有「<-」這個符號 網路安全 8-27 Rules Options • Rules Options是整個入侵系統偵測中最重要的部 份,藉由簡易的使用就能達到強大的功能與彈性 • 所有的Rules Options都用分號(;)隔開,而在參數 後面所接的關鍵字採用冒號(:)隔開 • Rules Options分成四個種類 – – – – general:提供資訊,不影響Snort過濾規則 payload:看封包裡的payload部分 non-payload:看封包裡的header部分 post-detection:在一個規則結束後的特定事件 • Snort rule有許多options,以下將介紹常用options 網路安全 8-28 General Rule Options • msg – 自訂告知logging和alerting engine要顯示的訊息 – 格式:msg: "<message text>"; • sid – 用來代表每個Snort rule的編號 • <100 • 100~1000000 • >1000000 保留給未來使用 Snort預設保留的rules 給自訂的rules使用 – 格式:sid: <snort rules id>; 網路安全 8-29 General Rule Options (續) • reference – Snort另一個強大功能,讓Snort rule能reference到其 他的攻擊辨識系統 – 格式:reference: <id system>,<id> • 例,alert tcp any any -> any 7070 (msg:"IDS411/dos-realaudio"; \ flags:AP; content:"|fff4 fffd 06|"; reference:arachnids,IDS411;) 網路安全 8-30 General Rule Options (續) • rev – 用來表示Snort rule的revision number(修正版本編號 ),很少有Snort rule的版本只有1種 – 格式:rev: <revision integer>; • priority – 用來排定Snort rule的優先權,若值設相同,後項設 定會覆蓋前項 – 格式:priority: <priority integer>; 網路安全 8-31 General Rule Options (續) • classtype – 用來將Snort rule分類到各種不同的class – 格式:classtype: <class name>; • 例:alert tcp any any -> any 80 (msg:"EXPLOIT ntpdx \ overflow";dsize: >128; classtype:attempted-admin; priority:10 ); 網路安全 8-32 General Rule Options (續) Snort 部份預設classtype 網路安全 8-33 Payload Detection Rule Options • content – 為Snort rule的一個重要功能,用來比對packet的 payload裡是否存在特定資料來觸發這個Snort rule – 格式:content: [!] "<content string>"; • 加上驚嘆號(!)表示content string不符合則觸發Snort rule • content string的表示方式為ASCII或Hex,亦能混合 使用 – 例 : alert tcp any any -> any 139 (content:"|5c 00|P|00|I|00|P|00|E|00 5c|";) 網路安全 8-34 Payload Detection Rule Options (續) • depth – 用來告知Snort rule要從payload取出多少byte的資料 可供查看,使用給定content範圍的方式 – 格式:depth: <number>; • offset – 類似depth,用來告知從payload的第幾個byte開始查 看 – 格式:offset: <number>; – 例 : alert tcp any any -> any 80 (content: "cgibin/phf"; offset:4; depth:20;) 網路安全 8-35 綜合範例 • 說明 – Header • 發出警告並記錄資料(log) • source非「192.168.1.0/24」,destination為「 192.168.1.0/24且port為111」的TCP封包 – Options • Payload包含「|00 01 86 a5|」觸發rule • 顯示「external mountd access」 alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 \ (content: "|00 01 86 a5|"; msg: "external mountd access";) 網路安全 8-36 綜合範例 (續) • 說明 – Header • 當有tcp封包目標為7070 port,產生警告(alert)並存記 錄檔(log) – Options • TCP flag為ACK+PSH • payload包含:「fff4 fffd 06」便觸發rule • 顯示「IDS411/dos-realaudio」 • Reference到arachnids的IDS411 alert tcp any any -> any 7070 (msg:"IDS411/dos-realaudio"; \ flags:AP; content:"|fff4 fffd 06|";reference:arachnids,IDS411;) 網路安全 8-37 綜合範例 (續) • 說明 – Header • 當tcp封包目標為80 port,產生警告(alert)並存記錄檔 (log) – Options • 若從payload的第4個byte算起的下面20個byte內含有 「cgi-bin/phf」便觸發rule alert tcp any any -> any 80 (content: "cgi-bin/phf"; offset:4;\ depth:20;) 網路安全 8-38 綜合範例 (續) • 說明 – Header • 當tcp封包目標為80 port,產生警告(alert)並存記錄檔 (log) – Options • Payload size大於128 bytes 觸發rule • Rule為attempted-admin type,優先權為10 • 顯示「EXPLOIT ntpdx overflow」 alert tcp any any -> any 80 (msg: "EXPLOIT ntpdx overflow"\ ; dsize: >128; classtype:attempted-admin; priority:10 ); 網路安全 8-39 結論 • 本小節可瞭解撰寫Snort規則不困難,重要的是我 們要學習去如何訂定簡潔有效的規則,這需要紮 實的基礎與努力來累積經驗 • Snort rules尚有許多options無法詳盡介紹,若遇到 不瞭解處請參考Snort網站的教學手冊 – http://www.snort.org/docs/snort_htmanuals/htmanual_284/ 網路安全 8-40 Module 8-4 :入侵偵測系統的實務(**) 網路安全 8-41 說明 - 入侵偵測系統架設 • 架設實作(一),Snort環境架設實習 – 使用Snortpc主機,利用Snort軟體來偵測入侵行為 • 架設實作(二),封包產生工具(Nemesis)架設實習 – 使用Nemesispc主機,利用Nemesis軟體以產生攻擊 的情形 • 架設實作(三),封包產生工具(IDSwakeup)架設實 習 – 使用Nemesispc主機,利用IDSwakeup軟體以產生典 型攻擊的封包 網路安全 8-42 說明 - 入侵偵測系統架設 (續) • 架設實作(四),Snort功能實習 – 請延續架設實作(一),利用Snort軟體進行功能性測試 • 架設實作(五),Snort攻防實驗實習 – 請將架設實作(一)與(二)結合測試,利用Nemesis軟 體產生封包 • 架設實作(六), Snort與Iptables之聯合防禦系統 – 使用snort主機,利用Snort軟體偵測入侵行為 – 使用attacker主機,利用Nemesis軟體以產生攻擊的 情形 – 使用firewall主機內建的Iptables軟體設置阻擋攻擊 網路安全 8-43 實驗環境介紹 系統主機(Snort) 使用網路攻擊攻擊主機 駭客(Nemesis) 網路安全 8-44 實驗環境介紹 • 以Testbed建立一實驗,相關拓樸及設定如下圖 Snortpc OS:FC6-STD IP:10.1.1.2 安裝軟體:Snort Nemesispc OS:FC6-STD IP:10.1.1.3 安裝軟體:Nemesis 網路安全 8-45 實驗拓樸on Testbed@TWISC - 建立完成的實驗拓樸 網路安全 8-46 架設實作(一) Snort環境架設實習 網路安全 8-47 IDS工具 - Snort • 版本 – Snort rules 2.9.2.1 • 支援作業平台 – Linux • 其他需求工具 – Libpcap、Libpcre 、 Libdnet、Daq及Snort rules • 下載位址 – http://www.snort.org/dl/snort-current/snort2.9.2.1.tar.gz 網路安全 8-48 其他需求工具 - Snort rules • 版本 – Snort v2.9 • 支援作業平台 – Linux • 下載頁面 – http://www.snort.org/snort-downloads? • 其他說明 – 有興趣者可以至https://www.snort.org/申請帳號。需 先註冊並登入後方能下載30天試用版 網路安全 8-49 Snort rules申請流程 • 先連至Snort官方網頁 https://www.snort.org/ • 步驟一 : 網頁右上點選 Sign in 網路安全 8-50 Snort rules申請流程 (續) • 步驟二: 點選 Sign Up for an Account 網路安全 8-51 Snort rules申請流程 (續) • 步驟三:Login 輸入帳號 Email Address 輸入e-mail Password 輸入 自定密碼 Accept 接受VRT License 完成申請 網路安全 8-52 Snort rules下載流程 • 步驟一:點選申請流程之步驟一的Sign in,並在 申請流程之步驟二的畫面中輸入剛申請好的帳號 密碼 網路安全 8-53 • 步驟二:登入至註冊帳號的e-mail,並驗證帳號 • 帳號已開通 網路安全 8-54 Snort rules下載流程 (續) • 步驟三:重新整理網頁,確認右上角Sign in已變 成Sign out,並點選Get Rules 網路安全 8-55 Snort rules下載流程 (續) • 步 驟 四 : 在 Registered User Release 中 下 載 Snort v2.9版本的rules • 每15分鐘只能下載一次 網路安全 8-56 其他需求工具 - Libpcap • 版本 – Libpcap 1.0.0 • 支援作業平台 – Linux • 下載位址 – http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz 網路安全 8-57 其他需求工具 - Libpcre • 版本 – Libpcre 7.9 • 支援作業平台 – Linux • 下載位址 – http://sourceforge.net/projects/pcre/files/pcre/7.9/pcre7.9.tar.gz/download 網路安全 8-58 其他需求工具 - Libdnet • 版本 – Libdnet-1.11 • 支援作業平台 – Linux • 下載位址 – http://prdownloads.sourceforge.net/libdnet/libdnet1.11.tar.gz?download 網路安全 8-59 其他需求工具 - Daq • 版本 – Daq-0.6.2 • 支援作業平台 – Linux • 下載位址 – http://www.snort.org/downloads/1408 網路安全 8-60 安裝libpcap • 使用”sudo su -”切換成root權限 • 到下載安裝檔目錄(本範例為tmp)下輸入以下內容 [child@snortpc ~]$ sudo su [root@Snortpc ~]# cd /tmp [root@Snortpc tmp]# cp /share/isc/Module08/libpcap-1.0.0.tar.gz /tmp [root@Snortpc tmp]# tar -zxvf libpcap-1.0.0.tar.gz [root@Snortpc tmp]# cd libpcap-1.0.0 [root@Snortpc libpcap-1.0.0]# ./configure [root@Snortpc libpcap-1.0.0]# make [root@Snortpc libpcap-1.0.0]# make install 網路安全 8-61 安裝libpcre • 使用”sudo su -”切換成root權限 • 到下載安裝檔目錄(本範例為tmp)下輸入以下內容 [root@Snortpc libpcap-1.0.0]$ cd .. [root@Snortpc tmp]# cp /share/isc/Module08/pcre-7.9.tar.gz /tmp [root@Snortpc tmp]# tar -zxvf pcre-7.9.tar.gz [root@Snortpc tmp]# cd pcre-7.9 [root@Snortpc pcre-7.9]# ./configure [root@Snortpc pcre-7.9]# make [root@Snortpc pcre-7.9]# make install 網路安全 8-62 安裝libdnet • 使用”sudo su -”切換成root權限 • 到下載安裝檔目錄(本範例為tmp)下輸入以下內容 [root@Snortpc pcre-7.9]$ cd .. [root@Snortpc tmp]# cp /share/isc/Module08/libdnet-1.11.tar.gz /tmp [root@Snortpc tmp]# tar -zxvf libdnet-1.11.tar.gz [root@Snortpc tmp]# cd libdnet-1.11 [root@Snortpc libdnet-1.11]# ./configure [root@Snortpc libdnet-1.11]# make [root@Snortpc libdnet-1.11]# make install 網路安全 8-63 安裝daq • 使用”sudo su -”切換成root權限 • 到下載安裝檔目錄(本範例為tmp)下輸入以下內容 [root@Snortpc libdnet-1.11]# cd .. [root@Snortpc tmp]# cp /share/isc/Module08/daq-0.6.2.tar.gz /tmp [root@Snortpc tmp]# tar -zxvf daq-0.6.2.tar.gz [root@Snortpc tmp]# cd daq-0.6.2 [root@Snortpc daq-0.6.2]# ./configure -with-libpcapincludes=/usr/local/include -with-libpcap-libraries=/usr/local/lib [root@Snortpc daq-0.6.2]# make [root@Snortpc daq-0.6.2]# make install 網路安全 8-64 安裝Snort • 使用”sudo su -”切換成root權限 • 到下載安裝檔目錄(本範例為tmp)下輸入以下內容 [root@Snortpc daq-0.6.2]# cd .. [root@Snortpc tmp]# cp /share/isc/Module08/snort-2.9.2.1.tar.gz /tmp [root@Snortpc tmp]# tar -zxvf snort-2.9.2.1.tar.gz [root@Snortpc tmp]# cd snort-2.9.2.1 [root@Snortpc snort-2.9.2.1]# ./configure [root@Snortpc snort-2.9.2.1]# make [root@Snortpc snort-2.9.2.1]# make install 網路安全 8-65 安裝Snort rules • 使用”sudo su -”切換成root權限 • 到下載安裝檔目錄(本範例為tmp)下輸入以下內容 [root@Snortpc snort-2.9.2.1]# cd .. [root@Snortpc tmp]# cp /share/isc/Module08/snortrules-snapshot2912.tar.gz . [root@Snortpc tmp]# tar -zxvf snortrules-snapshot-2912.tar.gz [root@Snortpc tmp]# mkdir /usr/local/lib/snort_dynamicrules [root@Snortpc tmp]# cp so_rules/precompiled/FC14/i386/2.9.1.2/*.* /usr/local/lib/snort_dynamicrules/ [root@Snortpc tmp]# cp -r rules/ snort-2.9.2.1/ [root@Snortpc tmp]# mkdir /var/log/snort #建立log資料夾以便存log 網路安全 8-66 測試Snort是否安裝成功 • 若輸入「snort -V」顯示Snort的版本,則代表安 裝成功,若失敗請參照p69至p72。 [root@Snortpc snort-2.9.2.1]# snort -V , ,_ -*> Snort! <*o" )~ Version 2.9.2.1 IPv6 GRE (Build 78) i386-linux '''' By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2011 Sourcefire, Inc., et al. Using libpcap version 1.0.0 Using PCRE version: 6.6 06-Feb-2006 Using ZLIB version: 1.2.3 網路安全 8-67 執行Snort • 在snort-2.9.2.1路徑下輸入指令 – snort -de -l /var/log/snort -c etc/snort.conf • 如果正常 則會出現 Using PCRE version: 6.6 06-Feb-2006 Rules Engine: SF_SNORT_DETECTION_ENGINE Version 1.10 <Build 16> Preprocessor Object: SF_DCERPC Version 1.1 <Build 4> Preprocessor Object: SF_DCERPC2 Version 1.0 <Build 1> Preprocessor Object: SF_Dynamic_Example_Preprocessor Version 1.0<Build1> Preprocessor Object: SF_SMTP Version 1.1 <Build 7> Preprocessor Object: SF_SSLPP Version 1.1 <Build 2> Preprocessor Object: SF_DNS Version 1.1 <Build 2> Preprocessor Object: SF_SSH Version 1.1 <Build 1> Preprocessor Object: SF_FTPTELNET Version 1.2 <Build 11> Not Using PCAP_FRAMES 按Ctrl + C可結束執行會出現 網路安全 HTTP Inspect - encodings (Note: streamreassembled packets included): POST methods: 0 GET methods: 0 Headers extracted: 0 Header Cookies extracted: 0 Post parameters extracted: 0 Unicode: 0 Double unicode: 0 Non-ASCII representable: 0 Base 36: 0 Directory traversals: 0 Extra slashes ("//"): 0 Self-referencing paths ("./"): 0 Total packets processed: 9 ============================= dcerpc2 Preprocessor Stat Total sessions: 0 ============================= Snort exiting 8-68 執行可能出現的問題與處理方法 • 如在安裝snort過程中,出現下面問題畫面 ./configure: line 21039: daq-modules-config: command not found checking for daq_load_modules in -ldaq_static... no ERROR! daq_static library not found, go get it from http://www.snort.org/. • Daq沒有安裝成功,請重新安裝daq。 網路安全 8-69 執行可能出現的問題與處理方法 (續) • 如輸入「snort -V」後,出現下面問題畫面 snort: error while loading shared libraries: libdnet.1: cannot open shared object file: No such file or directory • 則輸入「cp /usr/local/lib/libdnet.1 /usr/lib」,將先 前所安裝函示庫之檔案複製到snort所連結之檔案 系統位址。 網路安全 8-70 執行可能出現的問題與處理方法 (續) • 如輸入「snort -V」後,出現下面問題畫面 snort: error while loading shared libraries: libsfbpf.so.0: cannot open shared object file: No such file or directory • 則輸入「cp /usr/local/lib/libsfbpf.so.0 /usr/lib」,將 先前所安裝函示庫之檔案複製到snort所連結之檔 案系統位址。 網路安全 8-71 執行可能出現的問題與處理方法 (續) • 如輸入「snort -de -l /var/log/snort -c etc/snort.conf」 後,出現下面問題畫面 Initializing rule chains... ERROR: etc/snort.conf(270) Config option "detection" can only be configured once. • 則需再輸入「nano -w etc/snort.conf」,開啟 snort.conf,並搜尋detection字串,如紅色部份, 在前面加入「 # 」符號將其註解掉 #config detection: search-method ac-bnfa config detection: max_queue_events 5 config event_queue: max_queue 8 log 3 order_events content_length 網路安全 8-72 執行可能出現的問題與處理方法 (續) • 如輸入「snort -de -l /var/log/snort -c etc/snort.conf」 後,出現下面問題畫面 Initializing rule chains... ERROR: ../rules/exploit.rules(323) ***PortVar Lookup failed on '$FILE_DATA_PORTS'. Fatal Error, Quitting.. [root@snortpc snort-2.9.2.1]# • 則需再輸入「vi etc/snort.conf」,開啟snort.conf, 並加入下列紅色內容 # List of ports you run SIP servers on portvar SIP_PORTS [5060,5061,5600] # List of file data ports for file inspection portvar FILE_DATA_PORTS [$HTTP_PORTS,110,143] 網路安全 8-73 Snort基本語法 • • • • • • • • • 參數說明 -v 詳細顯示封包的 header -d 顯示應用層(Application Layer)封包內容 -e 連結層(Data Link Layer)的資訊也顯示出來 -l 設定 log 存到那個檔案 -Q 從iptables取得封包 -i 指定要監聽(listen)哪個網路介面 -D 以daemon模式執行 -c 讀取指定的設定檔 網路安全 8-74 Snort 設定檔 • Snort設定檔預設為snort.conf,可自行修改增加 • Snort 功能及啟動參數 – 設定log存放的地方 • config logdir: /var/log/snort – 設定網路 • 利用var來宣告變數,用『 $變數名稱』來存取 – var HOME_NET 192.168.1.0/24 » 表示宣告HONE_NET變數的值為192.168.1.0/24網段 – var HTTP_SERVERS $HOME_NET » 表示表示宣告HTTP_SERVERS變數的值與HONE_NET 變數相同 參考資料:Snort Setup Guides, http://www.snort.org/docs/setup-guides/ 網路安全 8-75 Snort 設定檔 (續) – 設定preprocessors • 設定snort內提供對於封包的預處理程序,如對於 stream封包先進行重組等(建議使用預設值即可) – preprocessor frag2 – preprocessor stream4_reassemblt – 設定output • 設定當match rules時的output格式:有多種格式可供 選擇,也可輸出到資料庫中。例: – output alert_syslog: LOG AUTH LOG_ALERT – output database: log, mysql, user=root – dbname-snort host=localhost 參考資料:Snort Setup Guides, http://www.snort.org/docs/setup-guides/ 網路安全 8-76 Snort 設定檔 (續) – Rules • 可直接在設定檔中加入偵測的rule,例: – alert tcp $HOME_NET 7161 -> $EXTERNAL_NET any (msg: "MISC Cisco Catalyst Remote Access"; flags: SA; reference:arachnids, 129; Reference:cve, CVE-19990430;classtype:bad-unknow; sid:513; rev:1;) – 加的 rules 的文件 • 利用附加檔案的方式加入包含偵測Rules的檔案 – include $RULE_PATH/exploit.rules – include $RULE_PATH/scan.rules – include $RULE_PATH/ftp.rules 參考資料:Snort Setup Guides, http://www.snort.org/docs/setup-guides/ 網路安全 8-77 Make Rules • 不僅可使用現有的rules,更可使用自訂的rules • 在下載下來的rules中有一個檔案為「local.rules」 # $Id: local.rules,v 1.11 2004/07/23 20:15:44 bmc Exp $ # ---------------# LOCAL RULES # ---------------# This file intentionally does not come with signatures. Put your local # additions here. • 在這檔案中可自行輸入rules達到偵測功能 網路安全 8-78 架設實作(二) 封包產生工具(Nemesis)安裝實習 網路安全 8-79 封包產生工具 - Nemesis • 版本 – Nemesis 1.4 • 支援作業平台 – Linux • 其他需求 – libnet1.0.2a • 下載位址 – http://sourceforge.net/projects/nemesis/files/nemesis/1. 4/nemesis-1.4.tar.gz/download 網路安全 8-80 其他需求工具 - libnet • 版本 – libnet 1.0.2a • 支援作業平台 – Linux • 下載位址 – http://ips-builder.googlecode.com/files/libnet1.0.2a.tar.gz 網路安全 8-81 Nemesis工具 • 由於IDS的實驗需要一些入侵的情境,我們使用封 包產生器來模擬實際產生攻擊的情形 • Nemesis是一個指令型(command-line)的封包產生 器,運作於UNIX-like和Windows系統 • 常用於測試入侵偵測系統、防火牆及IP網路其他 相關的實驗 • 目前Nemesis支援ARP、DNS、ETHERNET、 ICMP、IGMP、IP、OSPF、RIP、TCP及UDP 封 包,幾乎所有Ethernet與IP網路的封包皆可自訂產 生 網路安全 8-82 Nemesis安裝步驟 • 使用”sudo su -”切換成root權限 • 安裝libnet1.0.2a [child@Nemesispc~]$ sudo su [root@Nemesispc ~]# cd /tmp [root@Nemesispc tmp]$ cp /share/isc/Module08/libnet1.0.2a.tar.gz /tmp [root@Nemesispc tmp]$ tar zxvf libnet-1.0.2a.tar.gz [root@Nemesispc tmp]# cd Libnet-1.0.2a/ [root@Nemesispc Libnet-1.0.2a]# ./configure [root@Nemesispc Libnet-1.0.2a]# make && make install 網路安全 8-83 Nemesis安裝步驟 (續) • 使用”sudo su -”切換成root權限 • 安裝nemesis1.4 [root@Nemesispc Libnet-1.0.2a]# cd .. [root@Nemesispc tmp]# cp /share/isc/Module08/nemesis1.4.tar.gz /tmp [root@Nemesispc tmp]# tar zxvf nemesis-1.4.tar.gz [root@Nemesispc tmp]# cd nemesis-1.4 [root@Nemesispc nemesis-1.4]# ./configure [root@Nemesispc nemesis-1.4]# make && make install 網路安全 8-84 如何使用Nemesis產生封包 • 執行「nemesis」會出現本工具的使用介紹與所支 援的protocol [root@Nemesispc nemesis-1.4]# nemesis NEMESIS -=- The NEMESIS Project Version 1.4 (Build 26) NEMESIS Usage: nemesis [mode] [options] NEMESIS modes: arp dns ethernet icmp igmp ip ospf (currently non-functional) rip tcp udp NEMESIS options: To display options, specify a mode with the option "help". 網路安全 8-85 如何使用Nemesis產生封包 (續) • 執行「nemesis <protocol> help」會出現如何產生 此protocol封包的說明,以下以udp為例 [root@Nemesispc nemesis-1.4]# nemesis udp help UDP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26) UDP usage: udp [-v (verbose)] [options] UDP options: -x <Source port> -y <Destination port> -P <Payload file> IP options: -S <Source IP address> -D <Destination IP address> -I <IP ID> -T <IP TTL> -t <IP TOS> -F <IP fragmentation options> -F[D],[M],[R],[offset] -O <IP options file> Data Link Options: -d <Ethernet device name> -H <Source MAC address> -M <Destination MAC address> 網路安全 8-86 如何使用Nemesis產生封包 (續) • 加「-v」顯示詳細資料,若不對任何欄位指定數 值,則為預設,其中某些欄位預設值為隨機數 [root@Nemesispc nemesis-1.4]# nemesis udp -v UDP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26) [IP] 129.247.236.25 > 130.40.19.80 [IP ID] 54955 [IP Proto] UDP (17) [IP TTL] 255 [IP TOS] 0x00 [IP Frag offset] 0x0000 [IP Frag flags] [UDP Ports] 40515 > 33435 Wrote 28 byte UDP packet. UDP Packet Injected 網路安全 8-87 如何使用Nemesis產生封包 (續) • 若試著去設定source IP、port及TTL,會發現除了 有設定的欄位,其他仍是預設值 [root@Nemesispc nemesis-1.4]# nemesis udp -S 10.1.1.3 -x 9527 -T 168 -v UDP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26) [IP] 10.1.1.3 > 153.167.155.56 [IP ID] 41249 [IP Proto] UDP (17) [IP TTL] 168 [IP TOS] 0x00 [IP Frag offset] 0x0000 [IP Frag flags] [UDP Ports] 9527 > 33435 Wrote 28 byte UDP packet. UDP Packet Injected 網路安全 8-88 架設實作(三) 封包產生工具(IDSwakeup)安裝實習 網路安全 8-89 封包產生工具 - IDSwakeup • 版本 – IDSwakeup 1.0 • 支援作業平台 – Linux • 其他需求 – hping2 – libnet 1.0.2a • 下載位址 – http://www.hsc.fr/ressources/outils/idswakeup/downlo ad/IDSwakeup-1.0.tgz 網路安全 8-90 其他需求工具 - hping2 • 版本 – hping2 • 支援作業平台 – Linux • 下載位址 – http://www.hping.org/hping2.0.0-rc1.tar.gz 網路安全 8-91 其他需求工具 - libnet • 版本 – libnet 1.02a • 支援作業平台 – Linux • 下載位址 – http://ips-builder.googlecode.com/files/libnet1.0.2a.tar.gz 網路安全 8-92 IDSwakeup • IDSwakeup是用來測試入侵偵測系統的工具,可 產生許多典型攻擊的封包,目的是觀察入侵偵測 系統的誤判行為 • 典型攻擊的封包 – – – – – – teardrop syndrop msadcs dos_chargen back_orifice …等相關典型攻擊的封包 網路安全 8-93 安裝hping2 • 使用”sudo su -”切換成root權限 [root@Nemesispc tmp]# cp /share/isc/Module08/hping2.0.0rc1.tar.gz /tmp [root@Nemesispc tmp]# tar zxvf hping2.0.0-rc1.tar.gz [root@Nemesispc tmp]# cd hping2 [root@Nemesispc hping2]# ./configure [root@Nemesispc hping2]# make && make install 網路安全 8-94 安裝libnet • 使用”sudo su -”切換成root權限 [root@Nemesispc tmp]# cp /share/isc/Module08/libnet1.0.2a.tar.gz /tmp [root@Nemesispc tmp]# tar zxvf libnet-1.0.2a.tar.gz [root@Nemesispc tmp]# cd Libnet-1.0.2a/ [root@Nemesispc Libnet-1.0.2a]# ./configure [root@Nemesispc Libnet-1.0.2a]# make && make install 網路安全 8-95 安裝IDSwakeup [root@Nemesispc tmp]# cp /share/isc/Module08/IDSwakeup1.0.tgz /tmp [root@Nemesispc tmp]# tar xvf IDSwakeup-1.0.tgz [root@Nemesispc IDSwakeup]$ cd IDSwakeup-1.0 [root@Nemesispc IDSwakeup-1.0]$ make 網路安全 8-96 IDSwakeup操作示範 • 執行 [root@Nemesispc IDSwakeup-1.0]# ./IDSwakeup -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=--=- IDSwakeup : false positive generator - Stephane Aubert - Herv?Schauer Consultants (c) 2000 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=--=-=-=Usage : ./IDSwakeup <src addr> <dst addr> [nb] [ttl] – src addr:封包的來源(IDSwakeup),亦能偽造其他 任意IP – dst addr:封包的目的(Snort) – nb:送出的數量 – ttl:封包的ttl值(time to live) 網路安全 8-97 IDSwakeup操作示範 (續) • 示範 root@Nemesispc IDSwakeup-1.0]# ./IDSwakeup 10.1.1.2 10.1.1.3 20 64 – 表示封包從10.1.1.2傳輸到10.1.1.3 – 傳送數量20次 – TTL值為64 網路安全 8-98 架設實作(四) Snort功能實習 網路安全 8-99 Snort監聽模式(Sniffer mode) • 監聽模式常用指令 – snort -vde [-i interface] • • • • -v 表示監聽封包,只用-v僅顯示封包標頭 -d 顯示封包的application layer -e 除了原先封包,再加上Ethernet資料 -i 後面接要監聽的interface 網路安全 8-100 監聽模式範例 • 在Snortpc上使用Snort 輸入「snort -vde」擷取封包 – 封包 header + payload 06/12-18:16:01.089206 0:90:FB:10:DA:4C -> 0:17:5A:BD:CC:FF type:0x800 len:0x14A 192.168.36.19:22 -> 192.168.72.194:3119 TCP TTL:64 TOS:0x10 ID:3393 IpLen:20 DgmLen:316 DF ***AP*** Seq: 0xC066EB1F Ack: 0x56BA7A0 Win: 0x2180 TcpLen: 20 1B 3B D7 DE B5 87 74 A6 2C 63 A0 E7 DA FD C6 5A .;....t.,c.....Z F8 3F 67 F0 F8 4B 7F 3F 6A C2 02 A7 F8 21 60 4E .?g..K.?j....!`N 7B F4 1D 98 7E 94 8E A6 29 71 73 40 79 64 CC 1E {...~...)qs@yd.. 57 84 F6 79 22 E0 73 65 21 4E 1C 80 F5 0C CF C1 W..y".se!N...... 57 67 9B 8C 6A 61 D9 DF BD 1F DA A0 00 13 2A 54 Wg..ja........*T 53 16 EB 38 56 04 1E 10 86 67 26 CB 90 28 1A 29 S..8V....g&..(.) 6E E6 59 1F 3E 0C 45 87 CB 38 DD 3E E5 6F BA E2 n.Y.>.E..8.>.o.. 45 03 AF 68 40 18 4A 93 04 3F 2D E2 20 F1 F2 62 E..h@.J..?-. ..b 4A 34 A9 49 B9 15 6C AA 9B 51 7C 49 7B 15 FB 50 J4.I..l..Q|I{..P 1A D8 8C C8 EA E7 31 80 09 C1 1B 1E F2 E9 B6 64 ......1........d 86 5C 94 3F 82 25 C7 C6 0E 8B 2C 72 CB 6B 05 B8 .\.?.%....,r.k.. C2 D7 51 48 BA E5 00 B7 0E 42 6B 1F 75 FB F3 BE ..QH.....Bk.u... F3 CD 32 ED 6A A9 6F 56 5C D3 43 F3 1B D4 C6 E5 ..2.j.oV\.C..... DA 8B A6 0F A3 12 15 BE 1C 9F EC C5 D1 85 AA B7 ................ 36 60 1B 27 1A D3 B6 E5 A3 CD E5 5D 88 8C EC 69 6`.'.......]...i 77 5B 95 C2 E7 3C 64 C2 20 6D BE A2 5C 3B 9F 83 w[...<d. m..\;.. BE 46 92 C3 12 39 6E 8D 35 AB F9 E8 7F 49 2B CD . F...9n.5....I+. 4C 04 87 9B L... 網路安全 8-101 監聽模式範例 (續) – 鍵入「Ctrl + c」結束執行 – 出現分析結果 網路安全 Packet Wire Totals: Received: 260 Analyzed: 84 (32.308%) Dropped: 142 (54.615%) Outstanding: 34 (13.077%) ====================================== Breakdown by protocol (includes rebuilt packets): ETH: 84 (100.000%) ETHdisc: 0 (0.000%) VLAN: 0 (0.000%) IPV6: 0 (0.000%) IP6 EXT: 0 (0.000%) IP6opts: 0 (0.000%) IP6disc: 0 (0.000%) IP4: 84 (100.000%) IP4disc: 0 (0.000%) TCP 6: 0 (0.000%) UDP 6: 0 (0.000%) ICMP6: 0 (0.000%) ICMP-IP: 0 (0.000%) TCP: 84 (100.000%) UDP: 0 (0.000%) ICMP: 0 (0.000%) TCPdisc: 0 (0.000%) UDPdisc: 0 (0.000%) ICMPdis: 0 (0.000%) FRAG: 0 (0.000%) FRAG 6: 0 (0.000%) ARP: 0 (0.000%) EAPOL: 0 (0.000%) ETHLOOP: 0 (0.000%) IPX: 0 (0.000%) OTHER: 0 (0.000%) DISCARD: 0 (0.000%) InvChkSum: 0 (0.000%) S5 G 1: 0 (0.000%) S5 G 2: 0 (0.000%) Total: 84 ====================================== Action Stats: ALERTS: 0 LOGGED: 0 PASSED: 0 8-102 監聽模式範例 (續) • Snortpc監聽eth4接收Nemesispc封包 – 輸入指令 • snort -vde -i eth4 [root@snortpc snort-2.9.2.1]# snort -dev -i eth4 Running in packet dump mode --== Initializing Snort ==-Initializing Output Plugins! pcap DAQ configured to passive. The DAQ version does not support reload. Acquiring network traffic from "eth4". Decoding Ethernet --== Initialization Complete ==-,,_ -*> Snort! <*o" )~ Version 2.9.2.1 IPv6 GRE (Build 107) '''' By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2012 Sourcefire, Inc., et al. Using libpcap version 1.0.0 Using PCRE version: 6.6 06-Feb-2006 Using ZLIB version: 1.2.3 Commencing packet processing (pid=20921) 網路安全 8-103 監聽模式範例 (續) • 在Nemesispc使用Nemesis傳送data內容為"this is a book"的封包給Snortpc – 先輸入指令 • nemesis tcp -v -S 10.1.1.3 -D 10.1.1.2 -P- – payload底下再輸入指令 • this is a book [root@ Nemesispc proj]# nemesis tcp -v -S 10.1.1.3 -D 10.1.1.2 -P TCP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26) [IP] 10.1.1.3 > 10.1.1.2 [IP ID] 51297 [IP Proto] TCP (6) [IP TTL] 255 [IP TOS] 0x00 [IP Frag offset] 0x0000 [IP Frag flags] [TCP Ports] 34475 > 64685 [TCP Flags] SYN [TCP Urgent Pointer] 0 [TCP Window Size] 4096 [TCP Seq number] 245410913 this is a book Wrote 55 byte TCP packet. TCP Packet Injected 網路安全 8-104 監聽模式範例 (續) • Snortpc監聽eth4接收Nemesispc封包,可看到data 為"this is a book"的封包 06/12-18:59:09.932435 0:90:FB:10:DA:62 -> 0:90:FB:10:DA:50 type:0x800 len:0x45 10.1.1.3:517 -> 10.1.1.2:24833 TCP TTL:255 TOS:0x0 ID:7047 IpLen:20 DgmLen:55 ******S* Seq: 0x182BED9F Ack: 0x6E2A3325 Win: 0x1000 TcpLen: 20 74 68 69 73 20 69 73 20 61 20 62 6F 6F 6B 0A this is a book. 網路安全 8-105 Snort封包記錄模式(Packer logger mode) • 要記錄封包需先指定一個目錄來儲存資料 • 常用指令 – snort -vde -l /var/log/snort • • • • -v 表示監聽封包,只用-v僅顯示封包標頭 -d 顯示封包的application layer,即payload -e 除了原先封包,再加上Ethernet資料 -l 此參數後面接儲存(log)到哪個資料夾 • 若要儲存二進位(binary)檔,使用 – snort -l /var/log/snort -b • -b 表示log成tcpdump格式,即binary code 網路安全 8-106 讀取封包紀錄 • 封包的紀錄有特定格式,用一般文字編輯器無法 正確檢視 • 假設讀取的檔案為snort.log,使用 – snort -dvr snort.log • -r 後面接讀取的封包檔案 • 讀取時可過濾出封包的通訊協定 – snort -dvr snort.log tcp 網路安全 8-107 封包記錄模式範例 • 情境 – Nemesispc傳送數個tcp與udp封包到Snortpc – Snortpc將其記錄成log並閱讀tcp封包 • Snortpc輸入指令 – snort -vde -l /var/log/snort -i eth4 • Nemesispc輸入指令 – nemesis tcp -S 10.1.1.3 -D 10.1.1.2 [*3 (執行3次)] – nemesis udp -S 10.1.1.3 -D 10.1.1.2 [*5 (執行5次) ] 網路安全 8-108 封包記錄模式範例 (續) • Snortpc鍵入「 Ctrl + c 」中斷後 – 所有收到封包皆會被log • 事實上只有送出3個TCP封包 – 但TCP連線會有ACK封包,所 以右圖中會記錄6個TCP封包 網路安全 Breakdown by protocol (includes rebuilt packets): ETH: 27 (100.000%) ETHdisc: 0 (0.000%) VLAN: 0 (0.000%) IPV6: 0 (0.000%) IP6 EXT: 0 (0.000%) IP6opts: 0 (0.000%) IP6disc: 0 (0.000%) IP4: 16 (59.259%) IP4disc: 0 (0.000%) TCP 6: 0 (0.000%) UDP 6: 0 (0.000%) ICMP6: 0 (0.000%) ICMP-IP: 0 (0.000%) TCP: 6 (22.224%) UDP: 5 (18.5194%) ICMP: 5 (18.5194 %) TCPdisc: 0 (0.000%) UDPdisc: 0 (0.000%) ICMPdis: 0 (0.000%) FRAG: 0 (0.000%) FRAG 6: 0 (0.000%) ARP: 2 (7.4074%) EAPOL: 0 (0.000%) ETHLOOP: 0 (0.000%) IPX: 0 (0.000%) OTHER:92 (33.333%) DISCARD: 0 (0.000%) InvChkSum: 0 (0.000%) S5 G 1: 0 (0.000%) S5 G 2: 0 (0.000%) Total: 27 8-109 封包記錄模式範例 (續) • /var/log/snort資料夾產生以電腦時間秒數名稱之log 檔,「snort.log.1243123912」 [root@Snortpc log]# ls snort.log.1243123912 • 下此指令以讀取先前之記錄 ===================================== Snort processed 27 packets ===================================== Breakdown by protocol (includes rebuilt packets): ETH: 27 (100.000%) ETHdisc: 0 (0.000%) VLAN: 0 (0.000%) ‧‧‧‧‧ ‧‧‧‧‧ IP6disc: 0 (0.000%) IP4: 16 (59.259%) IP4disc: 0 (0.000%) TCP 6: 0 (0.000%) UDP 6: 0 (0.000%) ICMP6: 0 (0.000%) ICMP-IP: 0 (0.000%) TCP: 6 (22.224%) UDP: 5 (18.5194%) ICMP: 5 (18.5194 %) TCPdisc: 0 (0.000%) ‧‧‧‧‧ FRAG 6: 0 (0.000%) ARP: 2 (7.4074%) EAPOL: 0 (0.000%) ETHLOOP: 0 (0.000%) IPX: 0 (0.000%) OTHER:92 (33.333%) DISCARD: 0 (0.000%) ‧‧‧‧‧ Total: 27 – 「snort -dvr snort.log.1243123912」 05/23-13:27:40.585458 10.1.1..3 -> 10.1.1.2:1335 TCP TTL:255 TOS:0x0 ID:33673 IpLen:20 DgmLen:40 ******S* Seq: 0x7C350C05 Ack: 0x558737DF Win: 0x1000 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 05/23-13:27:46.002166 10.1.1.3:736 -> 10.1.1.2:52561 TCP TTL:255 TOS:0x0 ID:34205 IpLen:20 DgmLen:40 ******S* Seq: 0x52F0E8D Ack: 0x78B7E6B2 Win: 0x1000 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 05/23-13:27:49.604146 10.1.1.3:40055 -> 10.1.1.2:49537 TCP TTL:255 TOS:0x0 ID:9969 IpLen:20 DgmLen:40 ******S* Seq: 0x16F6081B Ack: 0x59F18945 Win: 0x1000 TcpLen: 20 網路安全 8-110 封包記錄模式範例 (續) • 過濾只含有tcp的封包 – 輸入指令 • snort -dvr snort.log.1243123912 tcp • 只出現tcp封包如右圖 網路安全 Breakdown by protocol (includes rebuilt packets): ETH: 6 (100.000%) ETHdisc: 0 (0.000%) VLAN: 0 (0.000%) IPV6: 0 (0.000%) IP6 EXT: 0 (0.000%) IP6opts: 0 (0.000%) IP6disc: 0 (0.000%) IP4: 6 (100.000%) IP4disc: 0 (0.000%) TCP 6: 0 (0.000%) UDP 6: 0 (0.000%) ICMP6: 0 (0.000%) ICMP-IP: 0 (0.000%) TCP: 6 (100.000%) UDP: 0 (0.000%) ICMP: 0 (0.000 %) TCPdisc: 0 (0.000%) UDPdisc: 0 (0.000%) ICMPdis: 0 (0.000%) FRAG: 0 (0.000%) FRAG 6: 0 (0.000%) ARP: 0 (0.000 %) EAPOL: 0 (0.000%) ETHLOOP: 0 (0.000%) IPX: 0 (0.000%) OTHER:0 (0.000 %) DISCARD: 0 (0.000%) InvChkSum: 0 (0.000%) S5 G 1: 0 (0.000%) S5 G 2: 0 (0.000%) Total: 6 8-111 Snort入侵偵測模式(IDS mode) • Snort在IDS mode下,為一個signature-base IDS • 藉著設定好的規則來對所有經過的封包進行比對偵測 • 基本指令 – snort -dev -l /var/log/snort -h 192.168.1.0/24 -c snort.conf • -h 後面接某個網段 • -c 後面接規則檔案 • snort.conf 檔案可讀取與管理許多規則 • 若不加參數,alert將會一併存至log資料夾下 • 稍後實驗課程將介紹如何編輯導入規則 網路安全 8-112 Snort入侵偵測模式(IDS mode) (續) • Snort alert 顯示方式 – -A fast快速警告模式 – -A full完整警告模式(預設) – -A unsock將警告訊息送至UNIX的socket上,供其 他裝置檢視 – -A none關閉警告功能 – -A console將警告訊息送至終端機(Console) • 若不設定便會將alert以檔案型式存至log資料夾 網路安全 8-113 架設實作(五) Snort攻防實驗實習 網路安全 8-114 實驗一 • 近幾年DoS攻擊漸趨頻繁,尤其又以ICMP DoS攻 擊傷害最為嚴重。在此實驗我們假設有一攻擊者 發出ICMP封包,並包括特殊的內容,而受害者要 使用Snort去擋下封包並發出警示 網路安全 8-115 Victim - 設定rules • 在local.rules裡面加入所需要的rules來防止攻擊 – 在snort-2.9.2.1路徑下輸入指令 • vi rules/local.rules – 在local.rules裡面加入rules • alert icmp any any -> any any (msg:"Under attack";content:"This is attack";sid:100002;) # $Id: local.rules,v 1.11 2004/07/23 20:15:44 bmc Exp $ # ---------------# LOCAL RULES # ---------------# This file intentionally does not come with signatures. Put your local # additions here. alert icmp any any -> any any (msg:"Under attack";content:"This is attack";sid:100002;) 網路安全 8-116 Victim - rules設定規則說明 • 其規則設定順序如下所示 – (action) (protocol) (source ip & port) (direction) (dest ip & port) (rule) • 在rule1部分,(msg:"Under attack";content:"This is attack";sid:100002;) – msg為當偵測有此攻擊時,所顯示的訊息 – content為偵測封包內容是否有此訊息 – sid為規則編號,但若自行定義規則時,請注意編 號不可相同 網路安全 8-117 Victim - 執行 • 建立完rules則啟動Snort執行防護 – 在snort-2.9.2.1路徑下輸入指令 • snort -de -i eth4 -l /var/log/snort -c rules/local.rules -A console • P.S:Victim要先執行Snort才有辦法防止攻擊,所 以攻擊發出前記得要先執行Snort 網路安全 8-118 Attacker - 準備攻擊 • 使用Nemesis作為攻擊的工具 – 輸入指令 • nemesis icmp -v -S 10.1.1.3 -D 10.1.1.2 -P - – 在payload底下輸入 • This is attack [root@ Nemesispc nemesis-1.4]# nemesis icmp -v -S 10.1.1.3 -D 10.1.1.2 -P ICMP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26) [IP] 10.1.1.3 > 10.1.1.2 [IP ID] 21552 [IP Proto] ICMP (1) [IP TTL] 255 [IP TOS] 0x00 [IP Frag offset] 0x0000 [IP Frag flags] [ICMP Type] Echo Request [ICMP Code] Echo Request [ICMP ID] 64486 [ICMP Seq number] 24526 This is attack Wrote 43 byte ICMP packet. ICMP Packet Injected 網路安全 8-119 Victim - 查看結果 • 查看是否有攻擊,如果有遭受攻擊則即時反應出 alert Commencing packet processing (pid=21516) 06/17-01:08:47.337095 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.1.3 -> 10.1.1.2 06/17-01:08:47.337114 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.1.2 -> 10.1.1.3 網路安全 8-120 Victim - 查看結果 (續) • 結束執行中的Snort • 可發現收到ICMP封包並 且在Action Stats處顯示 「ALERTS」 網路安全 IP4: 2 (4.651%) IP4disc: 0 (0.000%) TCP 6: 0 (0.000%) UDP 6: 0 (0.000%) ICMP6: 0 (0.000%) ICMP-IP: 0 (0.000%) TCP: 0 (0.000%) UDP: 0 (0.000%) ICMP: 2 (4.651%) TCPdisc: 0 (0.000%) UDPdisc: 0 (0.000%) ICMPdis: 0 (0.000%) FRAG: 0 (0.000%) FRAG 6: 0 (0.000%) ARP: 2 (4.651%) EAPOL: 0 (0.000%) ETHLOOP: 0 (0.000%) IPX: 0 (0.000%) OTHER: 39 (90.698%) DISCARD: 0 (0.000%) InvChkSum: 0 (0.000%) S5 G 1: 0 (0.000%) S5 G 2: 0 (0.000%) Total: 43 ======================================= Action Stats: ALERTS: 2 LOGGED: 2 PASSED: 0 8-121 Victim - 查看結果 (續) • 打開log指定路徑底下同樣有Alert資訊 – 在snort-2.9.2.1路徑下輸入指令 • cd /var/log/snort/ • snort -dvr snort.log.xxxxxxx(讀取檔案中的log) 網路安全 8-122 實驗二 • 假設在實驗一中我們發現攻擊封包皆來自於同一 個可疑位址,因此在實驗二便用Snort 將所有來自 於可疑位址50.100.0.0/16 的封包紀錄皆過濾出來 網路安全 8-123 設定Rules • 在snort-2.9.2.1路徑下輸入指令,並加入規則 – vi rules/local.rules – log ip 50.100.0.0/16 any -> any any (msg:"Data coming from strange address.";sid:1000003;) • 執行Snort # $Id: local.rules,v 1.11 2004/07/23 20:15:44 bmc Exp $ # ---------------# LOCAL RULES # ---------------# This file intentionally does not come with signatures. Put your local # additions here. log ip 50.100.0.0/16 any -> any any (msg:"Data from strange address.";sid:1000003;) – 輸入指令 • snort -de -i eth4 -l /var/log/snort -c rules/local.rules 網路安全 8-124 用Nemesis產生封包 • 產生數個來自可疑位址的封包 – 輸入指令 • nemesis tcp -S 50.100.1.1 -D 10.1.1.2 • nemesis tcp -S 50.100.2.2 -D 10.1.1.2 • nemesis tcp -S 50.100.2.3 -D 10.1.1.2 • 兩個正常位址的封包 – 輸入指令 • nemesis tcp -S 10.1.1.3 -D 10.1.1.2 • nemesis tcp -S 50.50.1.1 -D 10.1.1.2 網路安全 8-125 從Log 觀察記錄 • 於Snortpc主機,新開連連視窗觀察log – 輸入指令 • snort -dvr /var/log/snort/snort.log.xxxxxxxxx 06/07-13:27:40.585458 50.100.1.1:7187 -> 10.1.1.2:1335 TCP TTL:255 TOS:0x0 ID:33673 IpLen:20 DgmLen:40 ******S* Seq: 0x7C350C05 Ack: 0x558737DF Win: 0x1000 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 06/07-13:27:46.002166 50.100.2.2:3736 -> 10.1.1.2:52561 TCP TTL:255 TOS:0x0 ID:34205 IpLen:20 DgmLen:40 ******S* Seq: 0x52F0E8D Ack: 0x78B7E6B2 Win: 0x1000 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= 06/07-13:27:49.604146 50.100.2.3:40055 -> 10.1.1.2:49537 TCP TTL:255 TOS:0x0 ID:9969 IpLen:20 DgmLen:40 ******S* Seq: 0x16F6081B Ack: 0x59F18945 Win: 0x1000 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= Run time for packet processing was 0.633 seconds =================================================================== Snort processed 3 packets. =================================================================== • 成功過濾三個來自可疑位址的封包,並包含了日 期與時間等資訊 網路安全 8-126 結束Snort查看結果 • 「Ctrl + c」結束Snort後,同樣顯示收到與過濾的 by protocol (includes rebuilt 封包 Breakdown packets): ETH: 351 ETHdisc: 0 VLAN: 0 IPV6: 0 IP6 EXT: 0 IP6opts: 0 IP6disc: 0 IP4: 5 IP4disc: 0 TCP 6: 0 UDP 6: 0 ICMP6: 0 ICMP-IP: 0 TCP: 5 UDP: 0 ICMP: 0 TCPdisc: 0 UDPdisc: 0 ICMPdis: 0 FRAG: 0 FRAG 6: 0 (100.000%) (0.000%) (0.000%) (0.000%) (0.000%) (0.000%) (0.000%) (1.425%) (0.000%) (0.000%) (0.000%) (0.000%) (0.000%) (1.425%) (0.000%) (0.000 %) (0.000%) (0.000%) (0.000%) (0.000%) (0.000%) ARP: 4 EAPOL: 0 ETHLOOP: 0 IPX: 0 OTHER:342 DISCARD: 0 InvChkSum: 0 S5 G 1: 0 S5 G 2: 0 Total: 351 (1.140 %) (0.000%) (0.000%) (0.000%) (97.436 %) (0.000%) (0.000%) (0.000%) (0.000%) Action Stats: ALERTS: 0 LOGGED: 3 PASSED: 0 網路安全 8-127 Module 8-5 :防火牆入侵偵測聯合防禦 系統(**) 網路安全 8-128 實驗環境介紹 偵測主機(Snort) 防火牆(Firewall) 使用網路攻擊 受害者(Victim) 駭客(Nemesis) 網路安全 8-129 架設實作(六) Snort與Iptables之聯合防禦系統 網路安全 8-130 實驗環境介紹 • 以Testbed建立一實驗,相關拓樸及設定如下圖 snort OS:FC6-STD IP1:10.1.2.2 IP2:10.1.3.2 安裝軟體:Snort attacker OS:FC6-STD IP:10.1.1.2 安裝軟體:Nemesis IP1 IP2 IP1 victim OS:FC6-STD IP:10.1.3.3 安裝軟體:N/A IP2 網路安全 firewall OS:FC6-STD IP1:10.1.1.3 IP2:10.1.2.3 安裝軟體:Iptables 8-131 實驗拓樸on Testbed@TWISC - 建立完成的實驗拓樸 網路安全 8-132 說明 • 架設實作(六),依實驗拓樸 – 使用snort主機安裝Snort軟體來偵測入侵行為 • Snort的安裝請參考第61頁至66頁 – 使用attacker主機安裝Nemesis軟體以產生攻擊的情 形 • Nemesis的安裝請參考第83頁至84頁 – 使用firewall主機內建的Iptables軟體設置阻擋攻擊 網路安全 8-133 Snort - 執行 • 啟動Snort執行防護 – 在local.rules裡面加入rules • alert icmp any any -> any any (msg:"Under attack";content:"This is attack";sid:100002;) – 在snort-2.9.2.1路徑下輸入指令 • snort -de -i eth4 -l /var/log/snort -c rules/local.rules -A console 網路安全 8-134 Attacker - 準備攻擊 • 使用Nemesis作為攻擊的工具 • 輸入指令 – nemesis icmp -v -S 10.1.1.2 -D 10.1.3.3 -P - • 在payload底下輸入 – This is attack [root@ Nemesispc nemesis-1.4]# nemesis icmp -v -S 10.1.1.2 -D 10.1.3.3 -P ICMP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26) [IP] 10.1.1.2 > 10.1.3.3 [IP ID] 21552 [IP Proto] ICMP (1) [IP TTL] 255 [IP TOS] 0x00 [IP Frag offset] 0x0000 [IP Frag flags] [ICMP Type] Echo Request [ICMP Code] Echo Request [ICMP ID] 64486 [ICMP Seq number] 24526 This is attack Wrote 43 byte ICMP packet. ICMP Packet Injected 網路安全 8-135 Victim - 查看結果 • 查看是否有攻擊,如果有遭受攻擊則即時反應出 alert Commencing packet processing (pid=22825) 01/21-00:21:55.185081 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.1.2 -> 10.1.3.3 01/21-00:21:55.188105 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.3.3 -> 10.1.1.2 • 由其alert可觀察到IP:10.1.1.2攻擊IP:10.1.3.3 網路安全 8-136 Firewall - 設定阻擋 • 於firewall主機,利用iptables阻斷攻擊 – 輸入指令 • sudo su • iptables -A FORWARD -i eth4 -s 10.1.1.2 -d 10.1.3.3 j DROP • 查看是否成功設置 – 輸入指令 • iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DROP all -- 10.1.1.2 10.1.3.3 Chain OUTPUT (policy ACCEPT) target prot opt source destination 網路安全 8-137 驗證是否成功阻擋 • Attacker繼續攻擊Victim [root@ Nemesispc nemesis-1.4]# nemesis icmp -v -S 10.1.1.2 -D 10.1.3.3 -P ICMP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26) [IP] 10.1.1.2 > 10.1.3.3 [IP ID] 21552 [IP Proto] ICMP (1) [IP TTL] 255 [IP TOS] 0x00 [IP Frag offset] 0x0000 [IP Frag flags] [ICMP Type] Echo Request [ICMP Code] Echo Request [ICMP ID] 64486 [ICMP Seq number] 24526 This is attack Wrote 43 byte ICMP packet. ICMP Packet Injected • Snort並無偵測出新的alert Commencing packet processing (pid=22825) 01/21-00:21:55.185081 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.1.2 -> 10.1.3.3 01/21-00:21:55.188105 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.3.3 -> 10.1.1.2 網路安全 8-138 驗證是否成功阻擋 (續) • 防火牆確實收到封包並阻擋使其無法繼續傳送 01/21-01:00:01.424449 00:90:FB:10:DE:7F -> 00:90:FB:10:DD:71 type:0x800 len:0x3C 10.1.1.2 -> 10.1.3.3 ICMP TTL:255 TOS:0x0 ID:12017 IpLen:20 DgmLen:43 Type:8 Code:0 ID:17151 Seq:12574 ECHO 54 68 69 73 20 69 73 20 61 74 74 61 63 6B 0A This is attack. =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 網路安全 8-139 驗證是否成功阻擋 (續) • firewall主機,解除阻擋 – 輸入指令 • iptables -D FORWARD -i eth4 -s 10.1.1.2 -d 10.1.3.3 j DROP • Attacker繼續攻擊Victim – 輸入指令 • nemesis icmp -v -S 10.1.1.2 -D 10.1.3.3 -P – • Snort便能偵測出新alert Commencing packet processing (pid=22825) 01/21-00:21:55.185081 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.1.2 -> 10.1.3.3 01/21-00:21:55.188105 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.3.3 -> 10.1.1.2 01/21-01:07:25.235984 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.1.2 -> 10.1.3.3 01/21-01:07:25.237437 [**] [1:100002:0] Under attack [**] [Priority: 0] {ICMP} 10.1.3.3 -> 10.1.1.2 網路安全 8-140 結論 • 學習在Testbed建立實驗環境,用Snort訂定規則來 進行防護 • 學習到Snort工具的運作機制與方法 • 學會針對各種不同攻擊自行產生防護規則 • 學會使用Nemesis工具來自行練習 • 將原有的偵測軟體搭配上可以阻斷的防火牆後, 便能達成一聯合防禦系統,不再只是一個偵測攻 擊的系統 網路安全 8-141 習題 網路安全 8-142 習題 1. 請圖示說明Snort如何根據Snort rules來防止外在 的攻擊 2. 在Rule Actions 中提到如果發現攻擊,要如何做 處理,請提出五項方式且說明之 3. 當使用Nemesis以icmp封包進行攻擊時,Snort所 偵測之警告為何會有兩個封包? 網路安全 8-143 習題 (續) 4. 試說明圖中Detection Engine和Output的作用 Detection Signature (plug-ins) Packet Capture Library Snort Packet Decoder Preprocessor (plug-ins) Detection Engine Output (plug-ins) 網路安全 8-144 Module 8-6 :入侵偵測系統的專案實作 (**) 網路安全 8-145 專案實作(一) 網路安全 8-146 專案目的 • 用Snort建立有效的入侵偵測系統 • 用知名的攻擊封包來實際測試,瞭解建立的系統 可靠度 網路安全 8-147 專案描述 • A公司為貪圖方便,使用Snort且直接套用官方網 站免費下載的規則檔來架設IDS,但不知道能否順 利偵測一些常見的攻擊。扮演最佳網管的同學們 ,需自定方法攻擊並對IDS建立與修改規則來抵擋 這些攻擊 • 參考環境配置圖,模擬下列狀況 學習使用IDSwakeup產生攻擊的封包 針對這些自訂的攻擊,對Snort制定相對應的規則 來抵擋這些入侵 練習攻擊模式並且自我防護 網路安全 8-148 專案描述 (續) 網管同學建立rule來防護主機 攻擊方同學 使用網路攻擊測試系統 系統主機(Snort) 測試主機(IDSwakeup) 網路安全 8-149 環境配置圖 IDSwakeup OS:FC6-STD IP:10.1.1.2 安裝軟體:IDSwakeup eth4 Snort OS:FC6-STD IP:10.1.1.3 安裝軟體:Snort 網路安全 8-150 專案實作(二) 網路安全 8-151 專案目的 • 利用防火牆入侵偵測聯合防禦系統阻絕惡意攻擊 • 利用不同協定(protocol)分別進行阻擋 網路安全 8-152 專案描述 • 當IDS偵測到之異常來源時,其來源不一定是真正 的攻擊者,有可能只是Attacker藉由某台電腦進行 操控與攻擊,因此在防禦端只能從相關之協定進 行阻擋,而不能直接將此來源IP全部阻擋 • 參考環境配置圖,模擬下列狀況 學習使用Nemesis產生相關之攻擊封包 針對IDS所偵測到這些自訂的攻擊警告,利用防火 牆分門別類的將其阻擋 網路安全 8-153 專案描述 (續) 不同的攻擊方式(Nemesis) 受害者(Victim) 防火牆(Firewall) 偵測主機(Snort) 網路安全 8-154 環境配置圖 snort OS:FC6-STD IP1:10.1.2.2 IP2:10.1.3.2 安裝軟體:Snort attacker OS:FC6-STD IP:10.1.1.2 安裝軟體:Nemesis IP1 IP2 victim OS:FC6-STD IP:10.1.3.3 安裝軟體:N/A IP1 IP2 網路安全 firewall OS:FC6-STD IP1:10.1.1.3 IP2:10.1.2.3 安裝軟體:Iptables 8-155 作業繳交說明 • 請參考情境完成作業,並將過程擷圖列於報告中 • 基於基本情境再多實作一些擴充情境可額外加分 • 請於 2012/05/16 23:59 前將報告上傳FTP • 若在實作方面有問題,請寄信給助教,謝謝。 網路安全 7-156 祝大家5/2期中考順利!! 網路安全 8-157 參考資料 • 陳瑞文(民94年)。WIPS:針對Web 應用安全實作之入侵防禦系統。 國立中正大學通訊工程研究所論文,未出版,嘉義縣。 • 蔡文能(民94年)。預防擬態攻擊之入侵偵測防禦系統。國 立 交 通 大 學資 訊 工 程 研究所論文,未出版,新竹市。 • 沈文吉(民90年)。網路安全監控與攻擊行為之分析與實作。國 立 台灣 大 學資訊管理研究所論文,未出版,台北市。 • Snort. Wikipedit. Retrieved June 22, 2009, from the World Wide Web: http://en.wikipedia.org/wiki/Snort • Hping2, http://www.hping.org/ • Scott Charlie. (Ed.). (2004). Snort for Dummies. California: Baker & Taylor • Nemesis, http://nemesis.sourceforge.net/ • Snort, http://www.snort.org • Snort Setup Guides, http://www.snort.org/docs/setup-guides 網路安全 8-158