修平科技大學 -...
TRANSCRIPT
修平科技大學 資訊網路技術系
應用入侵偵測
軟體之實務運用
指導老師:高國峯
組長:BN99509蔡汯錡
組員:BN99503吳俊澤
BN99036游本福
中 華 民 國 103 年 6 月
1
應用入侵偵測
軟體之實務運用
指導老師:高國峯
組員分工項目:
蔡汯錡(實測部分、編輯文本)
吳俊澤(實測部分、整合資料、最後總編輯)
游本福(實測部分、整合資料、最後總編輯)
2
目錄
第一章 緒論
1-1 研究動機與目----------------------------6
1-2 專題成果--------------------------------7
1-3 未來改善方向----------------------------7
第二章 應用軟體介紹
2-1 軟體介紹
2-1-1 Microsoft SQL Server2008 的介紹------10
2-1-2 Wireshark 的介紹--------------------10
2-1-3 NMAP 的介紹-------------------------11
2-2 名詞解釋
2-2-1 三向交握---------------------------12
2-2-2 三向交握實例-----------------------14
第三章 系統安裝建置
3-1 NMAP 安裝步驟---------------------------18
3-2 Wireshark 安裝步驟-----------------------20
第四章 實驗環境與測試結果
4-1 測試環境--------------------------------25
3
4-2 實驗說明及操作方法
4-2-1系統架構圖--------------------------26
4-2-2 使用 wireshark 探測封包-------------27
4-3 使用 SQL Server 分析 Wireshark 紀錄的封包資訊
4-3-1 測試 1------------------------------30
4-3-2 測試 2------------------------------33
4-4 NMAP
4-4-1 測試 1----------------------------37
4-4-2 測試 2----------------------------40
第五章 結論---------------------------------43
參考文獻------------------------------------45
附錄(一)---- -------------------------------45
附錄(二)- ----------------------------------46
附錄(三) -----------------------------------48
4
第一章 緒論
5
1-1 研究動機與目的
何謂入侵?入侵指的就是試圖破解資訊資源的可用性、保密性和
完整性的行動。一般來說,入侵偵測指的就是用以偵測入侵行動的方
法。這包括偵測擅自闖入系統的入侵者或誤用系統資源的用戶。入侵
偵測是在一個電腦台系統或者網路中監控入侵的發生,其定義為試圖
損害祕密性,完整性,有效性的入侵特徵,並分析他們的入侵事件的
過程,或者繞過網路的安全機制的行為。
近年來網際網路蓬勃發展,成長速度飛快,所以讓訊息可以快速
傳遞,資訊能迅速流通,也帶來了全球化網路和電子商務的發展熱
潮。和大多數人的方便,同時也不能忽視網路安全,不然將招致駭客
利用惡意程式進而入侵、破壞、竊取你的電腦和資料。導致最後隱私
被侵犯或損失財物等問題發生。
所以我們這組要研究的就是怎麼做才能預防被入侵,並把傷害降
到最低,雖然現今網路一天比一天進步,也越來越方便,不過也代表
著,我們要更重視自己的權益。然而傳統的網路安全技術,已經無法
抵擋日趨成熟與多樣化的網路攻擊手法。其中入侵偵測系統可全程監
控網路安全狀況,於網路發危險狀況時,採取警告通知,管理人員可
即時採取阻止等防護動作,降低駭客連續攻擊的效果。 如何需求統
計?提供解決方案,在不同的硬體與環境,更需要一致的解決方案。
6
如何提升網路安全,減少不必要的網路訊息,停止不必要的網路服
務,降低網路系統的被入侵點,異常流量分析,病毒與異常流量(ICMP,
Broadcast Storm)分析,立即得知來源主機,這些方便網路資訊的管
理,清楚的流量使用情形分析都是我們所要探討的。
1-2 專題成果
網路上的不安全使用方式有很多,例如:下載非法軟體、遊覽不
安全網頁又或者是遭到有心人士的盜用等等……。在這個專題研究中
我們利用 Wireshark軟體,測試網路問題、檢查網路安全的問題,以
此來評估網路安全問題。利用 SQL Server 整理出 Wireshark的封包
資訊以便觀察與分析。
1-3 未來改善方向
高速網路的普及造成日常網路流量的增加,再加上攻擊手法的不
斷的翻新,隱匿性攻擊將可潛伏一段時間而不被發現,因此封包數量
如果很多的同時也意味著較長的分析時間,無法有效率的檢視出攻擊
來源,資料越複雜代表著干擾越多,所以要找出問題來源所在就更加
麻煩。
入侵偵測系統雖然成本較低可以偵測到主機型式入侵偵測系統所
偵測不到的還可以偵測到未成功或惡意的入侵攻擊,但網路上的型態
如果過大時往往會 LOST掉許多封包,無法完全監控網路上所有流通
7
的封包數這樣就代表其它被 LOST的封包潛在的危險就大大增加,若
要擷取大型網路上的流量並分析,往往需要更有效率的 CPU處理速
度,以及更大的記憶體空間。使用 Wireshark學習的網路問題,可以
知道問題的癥結點並加以改進。
所以我們希望未來可以研究出當如果網路型態過大時 LOST掉的
封包可以減少,並試著監控網路上所有流通的封包數同時將需要的記
憶體空間減少,以達到簡單操作,然後能夠有效的對網路封包進行初
步篩檢,僅保留與攻擊相關的資料,減少儲存空間的需求以及降低分
析上不必要的干擾作為目標。
8
第二章 應用軟體介紹
9
2-1 網路技術軟體介紹
2-1-1 Microsoft SQL Server2008 的介紹
Microsoft SQL Server 是由美國微軟公司所推出的關聯式資料
庫解決方案,SQL Server 2008 在 2008 年 8 月 6 日正式發表,並且
同時發布 SQL Server 2008 Express 版本,研發代號為「Katmai」,
作為 SQL Server 2005的功能強化版本
Microsoft SQL Server的使用目的
利用 Server資料庫系統的功能來整理出 Wireshark的封包資訊
2-1-2 Wireshark 的介紹
Wireshark是一個網路封包分析軟體。網路封包分析軟體的功能
是截取網路封包,並盡可能顯示出最為詳細的網路封包資料。
在過去,網路封包分析軟體是非常昂貴,或是專門屬於營利用的軟
體,Wireshark的出現改變了這一切。在 GNU GPL通用許可證的保障
範圍底下,使用者可以以免費的代價取得軟體與其程式碼,並擁有針
對其原始碼修改及客製化的權利。Wireshark是目前全世界最廣泛的
網路封包分析軟體之一。
10
Wireshark使用目的
1. 檢測網路問題
2. 檢查資訊安全相關問題
3. 使用 Wireshark來為新的通訊協定除錯
4. 使用 Wireshark來學習網路協定的相關知識
2-1-3 NMAP 的介紹
Nmap可以檢測標的機是否線上、埠開放情況、偵測執行的服務型
別及版本訊息、偵測作業系統與裝置型別等訊息。 它是網路管理員
必用的軟體之一,用以評估網路系統安全。
Nmap 提供簡單易用的視窗操作介面與指令執行模式,可幫我們掃描
網路上的電腦與主機、支援多個網段或大型網路的快速掃描,並執
行資訊彙整、安全監控、服務運作狀態與漏洞偵測等任務。
NMAP(Network Mapper) 使用目的
1. 列舉網路主機清單
2. 管理服務升級排程
3. 監控主機
4. 服務執行狀況
11
2-2 網路封包技術
2-2-1 三向交握
三向交握是 TCP重要的協定,網路上有許多文章,本章節是參考
「維基知識」做修改。TCP 被稱為可靠的連線封包,主要是透過許多
機制來達成的,其中最重要的就是三向交握的功能。TCP傳送資料的
機制非常複雜,TCP的表頭來確認這個封包有實際被對方接收,並進
一步與對方主機達成連線? 以下圖示來作為說明。
圖 2-1 三向交握之封包連接模式
在上面的封包連接模式當中,在建立連線之前都必須要通過三個
確認的動作, 所以這種連線方式也就被稱為三向交握(Three-way
handshake)。 那麼我們將整個流程依據上面的 A, B, C, D 四個階
段來說明一下:
12
A:封包發起
當用戶端想要對伺服器端連線時,就必須要送出一個要求連線的
封包,此時用戶端必須隨機取用一個大於 1024 以上的埠口來做
為程式溝通的介面。然後在 TCP 的表頭當中,必須要帶有 SYN 的
主動連線(SYN=1),並且記下發送出連線封包給伺服器端的序號
(Sequence number = 10001) 。
B:封包接收與確認封包傳送
當伺服器接到這個封包,並且確定要接收這個封包後,就會開始
製作一個同時帶有 SYN=1, ACK=1 的封包, 其中那個
acknowledge 的號碼是要給 client 端確認用的,所以該數字會
比(A 步驟)裡面的 Sequence 號碼多一號 (ack = 10001+1 =
10002), 那我們伺服器也必須要確認用戶端確實可以接收我們的
封包才行,所以也會發送出一個 Sequence (seq=20001) 給用戶
端,並且開始等待用戶端給我們伺服器端的回應喔!
C:回送確認封包
當用戶端收到來自伺服器端的 ACK 數字後 (10002) 就能夠確認
之前那個要求封包被正確的收受了, 接下來如果用戶端也同意與
13
伺服器端建立連線時,就會再次的發送一個確認封包 (ACK=1) 給
伺服器,亦即是 acknowledge = 20001+1 = 20002 囉。
D:取得最後確認
若一切都順利,在伺服器端收到帶有 ACK=1 且 ack=20002 序號
的封包後,就能夠建立起這次的連線了。
2-2-2 三向交握實例
此由序號 6791將封包送出到序號 6794接收封包
步驟一:建立連線
圖 2-2 由 A送出同步封包(SYN1)
14
步驟二:資料連線
此由序號 6855發送出封包,利用序號 6846的 ACL1來回應
圖 2-3 由 B送出同步封包(SYN2),並利用 ACK1回應步驟一的同步
封包(SYN1)
步驟三:關閉連線
此利用序號 6858的 ACK2 回應步驟二的同步封包
圖 2-4 A利用 ACK2回應步驟 2的同步封包(SYN2)
15
1. 連接埠(Port):包括來源主機與目的主機的『連接埠號』(port
number) 。
2. 序號(Sequence Number):此處的序號是圖 2-2的 A隨機所選擇的
一個初始序號 SEQ1,目的是要和圖 2-2 的 B 達到同步作用。在實作
上,有些作業系統對此序號的初始值,也會選擇由 0開始。
3. 確認號碼(Acknowledge Number):因為此 TCP封包是第一個發送,
所以沒有確認號碼,因此會暫時填入 0來表示。
4. 同步訊息(Synchronize)的旗標位元:在 TCP 封包中的 flags( 6
bits),會有一個 Synchronize 的同步位元,將會被設定成為 1,用
以代表此 TCP封包是送出 SYN的資訊。
5. 可接受的視窗大小(Window Size):可接受的視窗是設定 A自己的
『接收視窗』大小,也就是告訴對方 B,主機 A同時能接受封包的多
寡,藉由此『接收視窗』大小來控制流量。
16
第三章 系統安裝建置
17
3-1 NMAP 安裝程序
Nmap 支援多種進階網路掃描與偵測技術,可在各種防火牆、路
由器等網路環境中運作,協助我們找出可能的網路安全漏洞並提供主
機或伺服器的系統版本、應用程式名稱版本與所使用的服務與連接
埠…等等各種資訊。我們到 NMAP官方下載並安裝 Nmap V6.46網路掃
描探測工具,以下是安裝過程與步驟。
步驟 1 .先開啟 NMAP安裝檔,再按下我同意
圖 3-1 : 閱讀相關條例,並圈選同意
步驟 2. 選擇要安裝的物件,然後按下一步
圖 3-2 : 勾選 NMAP內相關程式
18
步驟 3.開始安裝。
圖 3-3 : 等待安裝 NMAP
步驟 4 .NMAP安裝完成
圖 3-4 : 安裝完成
19
3-2 Wireshark 安裝步驟
Wireshark是一個網路封包分析軟體。網路封包分析軟體的功能是截
取網路封包,並盡可能顯示出最為詳細的網路封包資料。我們到官
方下載 Wireshark1.10.6(64-bit)版本,以下是安裝過程與步
驟。
步驟 1. 開啟安裝檔後按下一步
圖 3-5 : 安裝 Wireshark(64-bit)
20
步驟 2. 閱讀相關條例,選擇我同意
圖 3-6 : 閱讀相關條例,並圈選同意
步驟 3.選擇要安裝的物件,選好後按下一步
圖 3-7:選擇 Wireshark內相關程式
21
步驟 4.可選擇是否要建立捷徑,選好再按下一步
圖 3-8 : 勾選 Wireshark新增的捷徑
步驟 5.安裝中
圖 3-9 : 等待安裝 Wireshark
22
步驟 6.Wireshark安裝完成
圖 3-10 : 安裝完成
23
第四章 實驗環境與測試結果
24
4-1 測試環境
這次實驗中我們使用了以下圖表 1 的硬體設備構成整體測試環
境。所使用的軟體為 SQL Server、Wireshark、NMAP來做為應用的測
試,這些主要是針對資料分析、擷取封包以及掃描資料的來源。
在資料分析,我們使用 Wireshark來記錄封包,將這些封包轉換
成 EXCEL 資料,再由這些資料匯入到 SQL Server 裡,最後再查看這
些資料是否有偵測到可疑的封包資料。
中央處理器 Inte(R) Core(TM)2 Quad CPU Q9400 @ 2.66Hz 2.67GHz
記 憶 體 8G
顯 示 卡 NVIDIA GeForce 8400 GS
作 業 系 統 Windows 7 旗艦版
圖表 1 電腦規格
25
4-2 實驗說明及操作方法
4-2-1 系統架構圖
以下圖表 2是說明使用 wireshark探測上網的封包,紀錄修平 SIS
登入首頁、yahoo登入首頁,網站登錄的封包,在匯出轉成 CSV檔,
再匯入 SQL資料庫,查看封包是否加密。
圖表 2 探測封包流程圖
26
4-2-2 使用 wireshark 探測封包
1. 搜尋封包是用搜尋 login的封包
圖 4-1 利用收尋功能來找封包
2. 使用 Wireshark了解網路傳輸過程,並學著看封包
圖 4-2 以搜尋的方式找到的封包
27
3. 利用 wireshark 來查詢學校的 SIS 系統有無加密動作,我們的方
法是過濾封包那裡是用 HTTP 然後搜尋封包是用搜尋 login 的封包
Login封包都是由使用者端這裡送給遠端所以在檢查遠端傳回使用者
端封包這樣就能清楚了解使用者端傳出有無加密 也能知道遠端傳回
有無加密最後測出學校的 SIS系統有加密的動作
圖 4-3 上圖是學校的 SIS系統有加密
圖 4-4 上圖是 YAHOO 也有加密 28
4. 之後我們從 Wireshark上抓到的網路封包轉成資料,然後匯出成
CSV檔後再匯入到 SQL-SERVER內中顯示
圖 4-5 上圖是將封包匯出並轉成 CSV檔
圖 4-6 上圖是將 CSV檔匯入到 SQL內的結果
29
4-3 使用 SQL Server 分析 Wireshark 紀錄的封包資訊
4-3-1 測試 1
針對 Yahoo首頁網站,使用 Wireshark 記錄使用者所有
瀏覽的網站封包,在記錄的封包資訊裡我們並沒有在 Yahoo
網站裡找到可疑的封包。
1. 紀錄包含各種測試封包的 pcap檔並,轉出 csv檔
圖 4-7 含 ack等欄位的 wireshark畫面
30
2. 匯入 EXCEL,使用 EXCEL的置換字串功能整理一下資料
圖 4-8 EXCEL 資料整理好的畫面
3. 匯入到 SQL
圖 4-9 利用 EXCEL整理的資料轉為 CSV檔 將檔案匯入
31
4. 整理過的資料,匯入 SQL Server,並設好主鍵及資料型態
圖 4-10 SQL 開啟資料表畫面
5. 開始分析資料庫,先執行附錄(一)做簡單對應的 address port把
每個 session資料列出來
圖 4-11 執行成功畫面
32
4-3-2 測試 2
針對學校 SIS、Yahoo以及 Google搜尋網站,我們使用 Wireshark
記錄使用者所瀏覽的網站封包,有發現 SIS以及 Yahoo所需要登入帳
密,在記錄的封包資訊裡,並找不到相關的帳密資訊,表示這些的資
訊都有做好防盜的措施,在 GOOGLE搜尋這裡,並沒有發現到有可疑
封包資訊。
1. 紀錄包含各種測試封包的 pcap檔並,轉出 csv檔
圖 4-12 含 ack等欄位的 wireshark畫面
33
圖 4-13 增加欄位
2. 在 Wireshark上所抓到的封包匯入 EXCEL,使用 EXCEL的置換字
串功能整理一下資料
圖 4-14 EXCEL 資料整理好的畫面
34
3. 在 SQL Server上檢視資料類型
圖 4-15 將 CSV檔匯入到 SQL Server (資料類型)
4. 整理過的資料,匯入 SQL Server,並設好主鍵及資料型態,先執
行附錄(二) 的 Cursor 程式,是依照 address,port 的對應,把每個
session列出來,假設 session間不會交錯,每一個 session開始時,
印出其開始的訊息。若其封包順序有依照設定在 patternlst 的順
序,則印出其封包內容 。
35
圖 4-16 執行成功畫面
此畫面是利用 Wireshark 所記錄的封包,將資料整理好再將
他們匯入到 SQL Server裡,皆由 Cursor來做半開式掃描處理整
個資料的分析,將這些分析出來的資料一一列出來,然而分析出
來的資料,並沒有找到可疑的封包混進來攻擊使用者。
36
4-4 NMAP
4-4-1 測試 1
針對學校首頁和 Yahoo去做掃描,在掃描方面我們下了簡單的偵
測遠端主機、掃描一組 IP範圍以及快速掃描 Port,看看該掃描網段
的主機是否有開機、打開了哪些 Port。
1. 使用 NMAP成功掃描本校首頁後的畫面
www.hust.edu.tw
圖 4-17 成功掃描
37
2. 使用 NMAP來掃描 學校首頁、Yahoo首頁
圖 4-18 NMAP掃描學校首頁
圖 4-19 NMAP掃描 Yahoo首頁所經過路逕
38
圖 4-20 Wireshark紀錄封包時,同時利用 NMAP來做封包的掃描
3. 資料匯出為文字檔,並匯入到資料庫
圖 4-21 在 NMAP上所監控的資料
39
4-4-2 測試 2
使用 NMAP針對 YAHOO封包的掃瞄,指令做了檢查 UDP Port(SIP)
是否開啟,使用 TCP SYN掃描,來做半開式的掃描,可以列出有回應
的遠端主機已開啟的網路服務埠。
1. 先開啟 wireshark
圖 4-22 利用 Wireshark紀錄封包
2. 同時將 NMAP 啟動
圖 4-23 針對 Yahoo來進行掃描40
3. 在 wireshark上所抓到的資料匯入到 SQL server,執行附錄(三)
的 Cursor程式,是依照 address port的對應,把每個 session列出
來,假設 session間不會交錯,每一個 session開始時,印出其開始
的訊息。若其封包順序有依照設定在 patternlst的順序,則印出其
封包內容 ,並且將資料做分析,記錄到我們連接到 Yahoo網頁時,
對於 Http與 Https的連接埠顯示為 OPEN的狀態,由我們電腦連接出
去所經過五個路由才到達 Yahoo的首頁,也只需要花一點時間而已。
圖 4-24 由 SQL Server分析的 session來做比對
4. 這是在 NMAP上所掃描的資訊
41
圖 4-25 NMAP上分析使用者所瀏覽的資訊
42
第五章 結論
43
我們利用 Wireshark 跟 NMAP 捕捉 Yahoo 奇摩跟學校 SIS 的登入
的封包資料來分析。Wireshark是一個網路封包分析軟體。網路封包
分析軟體的功能是截取網路封包,並盡可能顯示出最為詳細的網路封
包資料。NMAP 可以掃描指定的 IP Address 或某個 IP 網段,看看
該掃描網段的主機是否有開機、打開哪些 Port、開啟的服務、OS 版
本及類型,因此我們利用此套件來對內部網路進行掃描來查看內網主
機是否有開啟不正常的 Port 及相關問題,最後測出學校 SIS 有加
密,Yahoo也有加密。
隨著網路的發達,IDS系統對網路環境也越顯得重要。入侵偵測
與預防系統,需要經常關心及調校,遇到新的攻擊手法,必須進行完
整的更新。安全是持續進行的行為,例如:像防毒軟體的要定期的掃
描、更新,我們要不斷地進行內部教育訓練,防護人員的充實新知、
密碼須經常更換,使用外來的檔案,應先掃毒…等。網路安全不是只
有靠防毒軟體來於防資料外洩,使用者也必須自己去做好預防的動
作,才能有效降低被入侵的風險。
44
參考文獻
參考 SQL Server 2008資料庫設計與應用:
作者:陳祥輝
出版社:博碩
應用入侵偵測軟體 Snort之案例分析/江立凱著;李政勳著
資料庫效能測量與調校/林郡洋作;陳献軍,陳願至,黃大華,謝宗穎
作
Wireshark網路協定分析與管理
作者:九米原榮、上田浩
出版社:博碩
附錄(一)
--select * from hustscantest
declare c1 cursor
for select Source,SourcePort, Destination, DestPort from hustscantest
open c1
declare @sadd char(100), @sport int, @dadd char(100), @dport int
fetch next from c1 into @sadd, @sport, @dadd, @dport
while(@@FETCH_STATUS=0)
begin
print @sadd
print @sport
print @dadd
print @dport
45
print '=========='
fetch next from c1 into @sadd, @sport, @dadd, @dport
end
close c1
deallocate c1
附錄(二)
--select * from hustscantest
---- 依照 address,port的對應,把每個 session列出來 version1: 假設 session 間不會交錯
----
---- 每一個 session開始時,印出其開始的訊息。若其封包順序有依照設定在 patternlst 的順
序,則印出其封包內容 ----
-- 尚待解決問題: 只有前面一樣也會印出
declare @patternlst Table(pid int primary key, syn int, ack int, fin int, rst int)
-- half-open pattern
insert @patternlst values(1,1,0,0,0)
insert @patternlst values(2,1,1,0,0)
insert @patternlst values(3,0,0,0,1)
--- fin,ack then reset ---
/*
insert @patternlst values(1,0,1,1,0)
insert @patternlst values(2,0,0,0,1)
*/
declare @ptnseq int
set @ptnseq=-1
declare @psyn int, @pack int, @pfin int, @prst int
declare c1 cursor
for select Time, Source,SrcPort, Destination, DestPort, syn, ack, fin, rst from
hustscantest where Protocol='TCP'
open c1
declare @ptime float, @sadd char(20), @sport int, @dadd char(20), @dport int , @syn int,
@ack int, @fin int, @rst int
-- @pstatus: S for second , N for None
declare @pstatus char(1)
set @pstatus='N'
46
-- @snum for count session number
declare @snum int
set @snum=0
declare @add1 char(16), @port1 int, @add2 char(16), @port2 int
fetch next from c1 into @ptime, @sadd, @sport, @dadd, @dport, @syn, @ack, @fin, @rst
while(@@FETCH_STATUS=0)
begin
if @pstatus='N' or not((@add1=@sadd and @port1=@sport and @add2=@dadd and
@port2=@dport) or (@add2=@sadd and @port2=@sport and @add1=@dadd and @port1=@dport))
begin
set @snum=@snum+1
set @pstatus='S'
set @add1=@sadd
set @port1=@sport
set @add2=@dadd
set @port2=@dport
print '==== session ' + convert(char(6),@snum) + 'begin: ' + @add1 + ':'+
convert(char(6),@port1) + ' <==> '+ @add2 + ':'+ convert(char(6),@port2) +' ===='
select @psyn= syn, @pack=ack, @pfin=fin, @prst=rst from @patternlst where pid=1
set @ptnseq=-1
if (@psyn=@syn and @pack=@ack and @pfin=@fin and @prst=@rst)
begin
set @ptnseq=1
print 'Time:' + convert(char(10),@ptime)+ 'Source: ' + @sadd +
convert(char(6),@sport)+ ' ,Destination: '+ @dadd + convert(char(6),@dport)
end
end
else if (@ptnseq>0)
begin
select @psyn= syn, @pack=ack, @pfin=fin, @prst=rst from @patternlst
where pid=@ptnseq+1
if (@psyn=@syn and @pack=@ack and @pfin=@fin and @prst=@rst)
begin
set @ptnseq=@ptnseq+1
print 'Time:' + convert(char(10),@ptime)+ 'Source: ' + @sadd +
47
convert(char(6),@sport)+ ' ,Destination: '+ @dadd + convert(char(6),@dport)
end
else set @ptnseq=-1
end
--print 'Source: ' + @sadd + convert(char(6),@sport)+ ' ,Destination: '+ @dadd +
convert(char(6),@dport)
fetch next from c1 into @ptime, @sadd, @sport, @dadd, @dport, @syn, @ack, @fin, @rst
end
close c1
deallocate c1
附錄(三)
--select * from hustscantest
SET NOCOUNT ON
---- 依照 address,port的對應,把每個 session列出來 version1: 假設 session 間不會交錯
----
---- 每一個 session開始時,印出其開始的訊息。若其封包順序有依照設定在 patternlst 的順
序,則印出其封包內容 ----
-- 尚待解決問題:
declare @patternlst Table(pid int primary key, syn int, ack int, fin int, rst int)
-- half-open pattern
insert @patternlst values(1,1,0,0,0)
insert @patternlst values(2,1,1,0,0)
insert @patternlst values(3,0,0,0,1)
--- fin,ack then reset ---
/*
insert @patternlst values(1,0,1,1,0)
insert @patternlst values(2,0,0,0,1)
*/
-- 比對符合的封包暫時存放的地方
declare @possiblepkt Table( ptime float, sadd char(20), sport int, dadd char(20), dport
int , syn int, ack int, fin int, rst int)
declare @ptnseq int
48
set @ptnseq=-1
declare @psyn int, @pack int, @pfin int, @prst int
declare c1 cursor
for select Time, Source,SrcPort, Destination, DestPort, syn, ack, fin, rst from
hustscantest where Protocol='TCP'
open c1
declare @ptime float, @sadd char(20), @sport int, @dadd char(20), @dport int , @syn int,
@ack int, @fin int, @rst int
-- @pstatus: S for second , N for None
declare @pstatus char(1)
set @pstatus='N'
-- @snum for count session number
declare @snum int
set @snum=0
declare @add1 char(16), @port1 int, @add2 char(16), @port2 int
fetch next from c1 into @ptime, @sadd, @sport, @dadd, @dport, @syn, @ack, @fin, @rst
while(@@FETCH_STATUS=0)
begin
if @pstatus='N' or not((@add1=@sadd and @port1=@sport and @add2=@dadd and
@port2=@dport) or (@add2=@sadd and @port2=@sport and @add1=@dadd and @port1=@dport))
begin
set @snum=@snum+1
set @pstatus='S'
set @add1=@sadd
set @port1=@sport
set @add2=@dadd
set @port2=@dport
print '==== session ' + convert(char(6),@snum) + 'begin: ' + @add1 + ':'+
convert(char(6),@port1) + ' <==> '+ @add2 + ':'+ convert(char(6),@port2) +' ===='
if (select COUNT(*) from @patternlst)=(select COUNT(*) from @possiblepkt)
begin
select * from @possiblepkt
delete @possiblepkt
49
end
select @psyn= syn, @pack=ack, @pfin=fin, @prst=rst from @patternlst where pid=1
set @ptnseq=-1
if (@psyn=@syn and @pack=@ack and @pfin=@fin and @prst=@rst)
begin
delete @possiblepkt
set @ptnseq=1
print 'Time:' + convert(char(10),@ptime)+ 'Source: ' + @sadd +
convert(char(6),@sport)+ ' ,Destination: '+ @dadd + convert(char(6),@dport)
insert @possiblepkt values( @ptime, @sadd, @sport, @dadd, @dport, @syn, @ack, @fin,
@rst)
end
end
else if (@ptnseq>0)
begin
select @psyn= syn, @pack=ack, @pfin=fin, @prst=rst from @patternlst
where pid=@ptnseq+1
if (@psyn=@syn and @pack=@ack and @pfin=@fin and @prst=@rst)
begin
set @ptnseq=@ptnseq+1
print 'Time:' + convert(char(10),@ptime)+ 'Source: ' + @sadd +
convert(char(6),@sport)+ ' ,Destination: '+ @dadd + convert(char(6),@dport)
insert @possiblepkt values( @ptime, @sadd, @sport, @dadd, @dport, @syn, @ack, @fin,
@rst)
end
else set @ptnseq=-1
end
--print 'Source: ' + @sadd + convert(char(6),@sport)+ ' ,Destination: '+ @dadd +
convert(char(6),@dport)
fetch next from c1 into @ptime, @sadd, @sport, @dadd, @dport, @syn, @ack, @fin, @rst
end
close c1
deallocate c1
50