行政院國家科學委員會專題研究計畫 成果報告
新型網路攻擊、風險評估與入侵追蹤的誘捕預警技術
研究成果報告(完整版)
計 畫 類 別 : 個別型 計 畫 編 號 : NSC 98-2623-E-009-001-D 執 行 期 間 : 98 年 01 月 01 日至 98 年 12 月 31 日 執 行 單 位 : 國立交通大學資訊工程學系(所) 計 畫 主 持 人 : 謝續平 共 同 主 持 人 : 楊武、許富皓、趙禧綠、黃俊龍、彭文志 計畫參與人員: 碩士級-專任助理人員:林真如 學士級-專任助理人員:卓季榆 碩士班研究生-兼任助理人員:黃曜志 碩士班研究生-兼任助理人員:陳韋任 碩士班研究生-兼任助理人員:鄭有倫 碩士班研究生-兼任助理人員:顏志豪 碩士班研究生-兼任助理人員:蔡天浩 碩士班研究生-兼任助理人員:朱信儒 碩士班研究生-兼任助理人員:張書綸 碩士班研究生-兼任助理人員:游釗俊 碩士班研究生-兼任助理人員:李政輝 碩士班研究生-兼任助理人員:張翔任 碩士班研究生-兼任助理人員:趙梨華 碩士班研究生-兼任助理人員:張景旭 碩士班研究生-兼任助理人員:廖政博 碩士班研究生-兼任助理人員:詹智涵 碩士班研究生-兼任助理人員:劉人僖 碩士班研究生-兼任助理人員:楊濬仲 碩士班研究生-兼任助理人員:林育任 博士班研究生-兼任助理人員:沈柏曄 博士班研究生-兼任助理人員:林佳潤 博士班研究生-兼任助理人員:林佳純 博士班研究生-兼任助理人員:王繼偉博士班研究生-兼任助理人員:李秉翰 博士班研究生-兼任助理人員:許家維 博士班研究生-兼任助理人員:廖忠訓 博士班研究生-兼任助理人員:尤昱婷 博士班研究生-兼任助理人員:葉羅堯 博士班研究生-兼任助理人員:邱士銓 處 理 方 式 : 本計畫可公開查詢
中 華 民 國 99 年 03 月 29 日
行政院國家科學委員會補助專題研究計畫
■ 成 果 報 告
□期中進度報告
新型網路攻擊、風險評估與入侵追蹤的誘捕預警技術
計畫類別:■ 個別型計畫
□ 整合型計畫
計畫編號:NSC 98-2623-E-009-001-D
執行期間:
98 年
1 月
1 日至
98 年
12 月
31 日
計畫主持人:謝續平
共同主持人:楊武、許富皓、趙禧綠、黃俊龍、彭文志
計畫參與人員:
成果報告類型(依經費核定清單規定繳交):□精簡報告
■完整報告
本成果報告包括以下應繳交之附件:
□赴國外出差或研習心得報告一份
□赴大陸地區出差或研習心得報告一份
□出席國際學術會議心得報告及發表之論文各一份
□國際合作研究計畫國外研究報告書一份
處理方式:除產學合作研究計畫、提升產業技術及人才培育研究計畫、列管計畫
及下列情形者外,得立即公開查詢
□涉及專利或其他智慧財產權,□一年□二年後可公開查詢
執行單位:國立交通大學資訊工程學系
中
華
民
國
99
年
3 月
25
日
I
摘要
本計劃為期兩年,此報告為第二年度的成果報告,今年度計畫主要針對計劃 第一年所開發系統進行發展,並於今年度完成各系統的開發,實現兩大資安議題 -「Windows 誘捕網情蒐之核心技術與回追技術軟體發展」與「風險分析與威脅 預警之核心技術與軟體單元研發」-之目標:(一)利用誘捕網系統記錄攻擊者入 侵行為,有效偵測新型網路攻擊。(二)收集區域網路內防火牆日誌,進行網路風 險分析,偵測可疑主機並進行預警。此外,為有效運用協調各系統之功能性,於 今年度我們完成中央監控系統的開發,使得誘捕網系統、網路風險分析及預警系 統和封包標記追蹤系統可以完善的溝通,將各系統收集到資訊呈現在此監控中 心,提供適當的指揮機制,即時因應網路上的攻擊。 兩大議題目標皆針對目前網路安全急需解決之問題。首先,面臨每年不斷成 長的系統漏洞,使得各式各樣的新式病毒或攻擊手法產生,雖然傳統防禦機制在 防禦已知的攻擊行為有良好表現,但是在面對新型攻擊行為時,偵測與防堵能力 均十分有限。為了補強傳統防禦機制的不足,我們針對網路應用程式漏洞提出議 題一───Windows 誘捕網情蒐之核心技術與回追技術軟體發展,在第一年完成 之誘捕網系統雛型,進一步開發加入防護等級提升機制。利用不同的防護等級給 予不同程度的入侵阻力,使攻擊者以為網站管理者已對漏洞做修補,誘使攻擊者 使用進階方式攻擊網站,使攻擊者不易察覺落入了誘捕網中。為了立即追蹤查詢 攻擊者位置,防範 IP 假冒行為。本系統整合了封包標記追蹤功能,進行攻擊路 徑追蹤,讓攻擊者無所遁形。 然而,除了與網路應用程式相關的漏洞,許多區域網路內電腦主機或伺服器 本身也隱藏著未知弱點,同樣會遭攻擊或利用。於是,我們提出了議題二─── 風險分析與威脅預警之核心技術與軟體單元研發。在此研究議題中,本系統整合 了網路風險及分析主機,讀取使用者的防火牆日誌,運用網路風險預警分析技術 計算出可疑主機,進一步修補漏洞以預防攻擊。今年度我們加強第一年發展出的II 雛形,擴大成 2-tier 架構以方便管理並減少網路頻寬使用,並且運用資料倉儲技 術加速資料庫查詢,減少 20%~40%的查詢時間。此外,我們加入法則及失誤樹 編輯器,提供一客製化系統,同時我們也加入失誤樹風險量化分析技術,利用失 誤樹計算主機之風險值,協助管理者偵測出可疑主機。本系統亦和封包標記追蹤 系統整合,可預防 IP 的偽冒攻擊。 本計畫投入了大量研究人員進行理論研究與實務開發,每月至少與中科院研 究人員團隊面對面研究討論一至兩次,研究與開發成果達成計劃預期目標以及工 作項目,計畫成果除了論文的產出以及技術文件的撰寫,亦包含先進的技術研究 與實現,共計二十件論文、二十二件技術文件、可供轉移的十四項技術以及十九 件的系統軟體。本計劃系統的設計均開發成為雛形系統,能夠符合中科院實際的 需求,所開發雛形系統以實際網路攻防進行功能測試,確保能偵測與防禦網路攻 擊行為。此外,本計劃開發之技術及系統已全數轉移至中科院,並於小型區域網 路內試運成功,可望未來於中科院正式上線運行。 關鍵字:誘捕網、風險評估、入侵追蹤
III
Abstract
This is a two-year project, and we will sum up results of the second year in this
report. In the second year we mainly developed phototypes of systems that we
proposed in the first year to ahieve two goals of information security issues- “The Research and Development of Honeynet with IP Traceback”and “A profile-based network security remotemonitoring system”. The one goal is to use honypot attract attacks and record their actions. The other one goal is to analize the threats of
computers in local network. For effectively managing these systems, we developed a
suit of system, called Monitor and Control Center. It can make these systems
communicate well and provide administrators with better control.
Two issues all aim at the urgent problems of imformation security. First, more
and more vulnerabilities appeared, so hackers can use a variety of new methods to
attack others’computers.Itwilloverload thetraditionalIDS in thefuture.To makeup the weakness of traditional IDS, we propose the issue one- The Research and
Development of Honeynet with IP Traceback. We set up the honeynet system to
attract hackers to invide, and record their actions. Once we know their action, we can
defense their attacks. In the second year of the plan, we improve the phototype of
system, designing different security levels to gain the ability of attraction.
Furthermore, this system was integrated with the system of IP Traceback. It can trace
thehackers’IP,and preventIP spoofing.Thesystem wedeveloped assitthetraditional IDS to achieve effective defense.
However, except vulneribilities of Web applications, many PC or web severs
may also have lots of vulneribilities. Again we proposed another solution to solve the
problem. We construct a system to read firewall data of computers, and analize
IV
years’ssystem.Firstly,weexpand thesystem to 2-tier construction system, and it can analysis the security threat more effectively. In addition, the system now can allow
administratorsto adjustimformation security principles,and controlcomputers’ behavior in the local network. Finally we applied the technique of error tree to
compute the prability of threat PC. Also this system was integrated with the IP
Traceback system to avoid IP spoofing.
This project occupied a lardge number of researches, and we finished all
proposed action items. We also have fruitfull research results in the field of
imfornation security. Not only did we complete practical implement, but we also
tested these systems by real attacks. These systems can really defense attacks. We
expect that we can apply these technologies to the field of information security.
V
目錄
第一章、計畫簡介...1 第一節、計畫緣起...1 第二節、計畫時程...4 第三節、計劃目標...6 第四節、計劃工作項目...7 第二章、全系統設計描述...10 第一節、全系統硬體架構...10 第二節、全系統軟體架構...13 第三章、誘捕網系統...16 第一節、前言...16 第二節、SQL Injection 技術介紹...16 第三節、設計原理...23 第四節、Web Honeypot 系統架構...25 第五節、資料庫與程式碼設計...26 第六節、功能測試...45 第七節、Sebek(Honeypot) ...50 第四章、封包標記與路徑追蹤系統...62 第一節、前言...62 第二節、文獻探討...63 第三節、架構說明...65 第四節、封包標記...66 第五節、系統設計...73 第六節、封包標記實作...77 第七節、未來展望...102VI 第五章、網路風險分析與預警系統...103 第一節、前言...103 第二節、系統架構...104 第三節、軟體設計說明... 113 第四節、網路威脅分析及預警技術之研究...121 第五節、失誤樹分析...126 第六節、分群法與實作詳解...136 第六章、系統整合...146 第一節、中央監控系統...146 第二節、系統整合規劃...148 第三節、系統間傳輸加密...151 第四節、系統介面說明...154 第七章、議題一-Windows 誘捕網情蒐之核心技術與回追技術軟體發展 ...161 第一節、議題研究及說明...162 第二節、議題實作...165 第三節、實境模擬與成果展示...167 第八章、議題二-風險分析與威脅預警之核心技術與軟體單元研發...179 第一節、議題研究及說明...179 第二節、議題實作...183 第三節、實境模擬與成果展示...185 第九章、執行成果...192 第一節、成果統計及列表...192 第二節、成果比較...200 第三節、研討會及成果展示...202 第十章、結論與建議...204
VII 參考文獻...206 附錄一、誘捕網系統操作安裝手冊...210 附錄二、封包標記與追蹤系統操作安裝手冊...213 附錄三、網路風險分析及預警系統操作安裝手冊...228 附錄四、帳號權限管理系統操作安裝手冊...241 附錄五、中央監控系統操作安裝手冊...251 附錄六、誘捕網系統設計報告書...258 附錄七、封包標記與追蹤系統設計報告書...276 附錄八、網路風險分析及預警系統設計報告書...301 附錄九、系統界面整合文件...310 附錄十、論文發表...326 Windows 誘捕網情蒐之核心技術與回追技術軟體發展 ...326 以履歷為基礎之網路行為輔助監控系統...348
VIII
圖目錄
圖 1、全系統硬體架構圖...10 圖 2、軟體架構圖...13 圖 3、未知攻擊...24 圖 4、攻擊記錄...24 圖 5、誘捕網系統架構圖...25 圖 6、攻擊模擬圖...46 圖 7、誘捕網受攻擊成功...46 圖 8、誘捕網受攻擊失敗...46 圖 9、誘捕網錯誤嘗試攻擊...47 圖 10、誘捕網時差型攻擊...47 圖 11、誘捕網攻擊情境記錄...48 圖 12、誘捕網黑名單...49 圖 13、Sebek 結構...51 圖 14、Sebek 原理說明...52圖 15、Client Packet Export ...53
圖 16、Sebek Protool version 3 Packet header...54
圖 17、封包標記與追蹤系統架構圖...65 圖 18、IP 表頭 ...66 圖 19、Flags 欄位設計...67 圖 20、Identification 欄位 ...67 圖 21、標記示意圖...67 圖 22、mylistener.c 演算法修改 ...70 圖 23、Traceback 方式 ...72 圖 24、封包標記與追蹤系統硬體架構圖...73
IX 圖 25、MPC 軟體架構圖 ...75 圖 26、網路設定...83 圖 27、網路連線設定...84 圖 28、網路 IP 設定 ...84 圖 29、網路資訊...85 圖 30、eth0 屬性...86 圖 31、標記演算法流程...87 圖 32、標記演算法流程圖...90 圖 33、執行 mpcset.o help 查詢可執行指令 ...93 圖 34、執行參數 IID ...94 圖 35、執行參數 load...94 圖 36、phpMydmin 的登錄畫面...96 圖 37、建立新資料庫...97 圖 38、新增資料表...97 圖 39、欄位設定...97 圖 40、進入權限設定與新增使用者...98 圖 41、重新讀取權限...98 圖 42、註解原本的程式碼...98 圖 43、封包監聽流程...99 圖 44、網路卡封包監聽...100 圖 45、資料表內容...100 圖 46、Traceback GUI...101 圖 47、回追結果...101 圖 48、主機連線數量統計圖...103 圖 49、系統架構圖...104
X 圖 50、2-tier 之系統架構...105 圖 51、子法則拆解範例...106 圖 52、多重子法則拆解範例...106 圖 53、更新頻率異常法則之 XML 文件...108 圖 54、網路連結履歷初始圖...109 圖 55、連結履歷連結...109 圖 56、新增個別服務項目... 110 圖 57、主機履歷格式... 110 圖 58、時間序列樣式... 111 圖 59、主機分群圖... 112 圖 60、系統架構... 113 圖 61、物件導向分析... 117 圖 62、活動圖... 119 圖 63、循序圖...120 圖 64、合作圖...120 圖 65、違反未更新之主機法則...122 圖 66、違反未回報主機法則...122 圖 67、違反具有不安全服務組合法則...123 圖 68、違反未列管伺服器法則...123 圖 69、違反使用未申請的 Port 法則...123 圖 70、掃描通訊埠攻擊...124 圖 71、透過網路上的芳鄰傳染的蠕蟲...125 圖 72、同時遭受木馬攻擊的電腦...126
圖 73、Example of fault tree...127
XI 圖 75、回報頻率異常之失誤樹...128 圖 76、不安全的服務組合之失誤樹...129 圖 77、使用未申請服務之失誤樹...129 圖 78、使用未申請 port 之失誤樹 ...130 圖 79、回報數異常之 XML...131 圖 80、回報數異常之編輯畫面...132 圖 81、風險瀏覽器...134 圖 82、Example of clustering ...136 圖 83、首先取出 k(=3)個點作為群中心...138 圖 84、依中心點位置將資料分成 k(=3)個群聚...139 圖 85、根據群聚內成員的屬性決定該群聚的群中心...139 圖 86、反覆進行上述步驟直到群中心不再改變為止...139 圖 87、首先取出 k(=3)個點作為群中心...140 圖 88、依中心點位置將資料分成 k(=3)個群聚...140 圖 89、取出群集中最接近質量中心的點作為群中心...140 圖 90、反覆進行上述步驟直到群中心不再改變為止...141 圖 91、連線快照階層圖...144 圖 92、連線快照各階層資料紀錄...145 圖 102、系統關連圖...148 圖 103、系統整合關連圖...150 圖 104、SSL 加密流程...152 圖 105、SSL 加密運用...153 圖 106、使用者登入介面...154 圖 107、帳號權限管理介面...155 圖 108、中央監控系統...156
XII 圖 109、誘捕網管理介面...157 圖 110、封包標記與追蹤管理介面...158 圖 111、可疑主機分析介面...159 圖 112、法則編輯器...160 圖 113、失誤樹編輯器介面...161 圖 114、風險分析介面...161 圖 115、防禦策略示意圖...165 圖 116、系統架構圖...166 圖 117、實境模擬...167 圖 118、攻擊畫面...168 圖 119、成功畫面...168 圖 120、系統防禦...169 圖 121、路徑追蹤...170 圖 122、攻擊失敗...170 圖 123、攻擊畫面...171 圖 124、嘗試成功畫面...171 圖 125、網頁原始碼...172 圖 126、取得資料庫名稱...172 圖 127、取得資料表名稱...173 圖 128、取得欄位名稱...173 圖 129、取得帳號...173 圖 130、攻擊記錄...174 圖 131、中央監控系統...175 圖 132、攻擊路徑...175 圖 133、嘗試失敗...176
XIII 圖 134、攻擊畫面...176 圖 135、管理黑名單...178 圖 136、CLIPS...1 圖 137、描述語法...180 圖 138、Example of clustering ...181
圖 139、Example of fault tree...182
圖 140、防禦策略示意圖...183 圖 141、系統架構圖...184 圖 142、實境模擬...185 圖 143、Rule Editor ...186 圖 144、可疑主機分析...186 圖 145、攻擊記錄...187 圖 146、實境模擬...187 圖 147、攻擊畫面...188 圖 148、檢查網路安全...188 圖 149、可疑主機分析...189 圖 150、可疑攻擊路徑...190 圖 151、路徑追蹤...190 圖 152、國防科技學術合作計畫成果發表會...202 圖 153、國防科技學術合作計畫成果發表會...202 圖 154、98 中山科學研究院學合案期末成果展示...203 圖 155、98 中山科學研究院學合案期末成果展示...203
XIV
表目錄
表格 1、誘捕網系統開發時程表...1 表格 2、網路風險分析及預警系統開發時程表...1 表格 3、封包標記與追蹤系統開發時程表...1 表格 4、系統整合時程表...1 表格 5、全系統硬體統計表...10 表格 6、中央監控系統硬體規格表... 11 表格 7、誘捕網系統硬體規格表... 11 表格 8、中央網路風險分析及預警主機硬體規格表...12 表格 9、網路風險分析及預警主機硬體規格表...12 表格 10、封包標記與追蹤系統硬體規格表...12 表格 11、系統交換機廠牌...12 表格 12、中央監控系統功能表...13 表格 13、誘捕網系統功能表...14 表格 14、網路風險分析及預警系統功能表...14 表格 15、封包標記與追蹤系統功能表...15 表格 16、SQL injection 的 select 敍述命令表 ...22 表格 17、誘捕網防護等級表...23 表格 18、MySQL 的 Table 設計...69 表格 19、Table 和 list...70 表格 20、MPC 硬體規格 ...77 表格 21、資安法則...106 表格 22、法則表格...107 表格 23、子法則表格...107XV 表格 24、電腦軟體構型項目行為設計決策分析... 114 表格 25、Log DB... 114 表格 26、Host group... 114 表格 27、Group ... 115 表格 28、Combination Port ... 115 表格 29、Available Port... 115 表格 30、Port group... 115 表格 31、Rule ... 115 表格 32、Sub-rule... 116 表格 33、執行概念表... 116 表格 34、介面設計... 117 表格 35、資料庫及資料倉儲工具使用說明...228 表格 36、網路位置配置表...167 表格 37、系統整合成果比較...200 表格 38、誘捕網系統成果比較...200 表格 39、封包標記與追蹤系統成果比較...201 表格 40、網路風險分析及預警系統成果比較...201 表格 41、成果統計...192 表格 42、創新轉移技術...195 表格 43、系統軟體...196 表格 44、技術文件...197
1
第一章、計畫簡介
本章節中,分別敘述了計畫緣起、計畫時程、計畫目標及計劃工作項目。並於之 後的章節詳細敘述本計畫實作之系統。第一節、計畫緣起
隨著網路應用日趨複雜,許多 Internet 經濟犯罪也隨之興起,而各政府與金 融機構更是網路駭客垂涎的攻擊標的。網路的便利性與透通性則成了資訊安全防 護上的漏洞,因此,資訊安全防禦除了需要基本的防火牆與防毒軟體之外,針對 偽裝成各式合法通訊協定的攻擊與層出不窮的後門弱點來說,入侵偵測與防禦將 是建立更完整的資安解決方案的第一步。 傳統的防火牆僅能被動地就各式預定好的規則進行攔阻或放行網路流量, 而這些規則僅能就 TCP 或 UDP 協定的不同服務埠來辨別網路流量的好壞,就如 同銀行門口的警衛僅能用客戶是否頭戴安全帽或是手持尖刀來判斷客戶是否有 意行搶。 而在現今的網路環境中,駭客攻擊的手法往往隱藏於合法的服務中,例如曾 在全球造成無數網路癱瘓的 SQL Slammer 攻擊,它攻擊的手法就隱藏在合法的Microsoft SQL Server 所使用的 UDP 1434 埠中。如果使用傳統式的防火牆,固然 可以定下規則阻絕 UDP 1434 埠來避免 SQL Slammer 的攻擊,但同時也會因為該 服務埠被阻擋而造成 SQL Server 無法使用。 (1)Windows 誘捕網情蒐之核心技術與回追技術軟體發展 至於目前 IDS 與 IPS 上入侵偵測技術的限制,目前網路型與主機型入侵偵測系統 普遍有下列潛在不足之處: 一、只能偵測出已知的攻擊模式: 以比對特徵為基礎﹙Signature-based﹚的安全機制只能辨識出資料庫中有相 對應的攻擊特徵之非法行為,所以攻擊特徵(Signature)的 開發速度會影響安 全機制的有效性。以比對特徵為基礎﹙Signature-based﹚的入侵偵測系統在 1990
2 年中期成形,當時已知的安全漏洞數目並不 多。根據 CERT 的資料,在 1995 年,只有 171 個安全漏洞被發佈,Signature-based 的資訊安全產品只要每月更新 增加 10-12 個攻擊特 徵(Signature), 便足以應付當時的安全需求。 隨著公佈的安全漏洞的數目不斷快速增加,加上變形攻擊﹙Mutations﹚的出 現,上述情形已逐漸改觀。針對每一種不同的攻擊,Signature- based 的入侵偵測 產品都需要一個相對應的攻擊特徵。Signature-based 的安全機制無法跟已知上漏 洞增加的速度。以安全漏洞的數目之多,再加上以驚人的速度增加,極有可能目 前已知的安全漏洞知之中並沒有相對應的攻擊特徵(Signature)。 二、誤判率: 現行的攻擊模式與特徵比對的技術,常出現誤判(將正常的網路存取行為誤 認為攻擊行為;或無法精確的辨識出攻擊行為)的狀況,(現已有資訊安全廠商 針對此缺 點提出新的技術解決方案來降低誤判率),當誤判率過高,管理人員疲 於調查追蹤錯誤的警訊,會造成安全設備與安全管理人員的效率降低。誤判的狀 況,在軟體式 的網路型入侵偵測系統最為嚴重。因軟體式網路型入侵偵測系統 多半有效能上的瓶頸,當效能跟不上網路流量的速度,就會開始掉封包﹙Drop packets﹚,導致封包資訊不完全而容易造成誤判。 三、缺乏立即有效的回應: 入侵偵測系統,顧名思義強調偵測監控的功能。目前的入侵偵測系統如果偵 測到攻擊行為,能夠馬上通知管理者並提供即時分析,但卻普遍缺乏立即回應與 阻止攻擊的能力,所以比較不容易顯示出它的效益,也限制了它對網路系統所提 供的防護功能。 在第一年的計畫中,除了針對 Windows 系統主機攻擊實作外,也針對各項 新型網路攻擊研究議題現況進行深入的研讀及分析。
3 今年度我們將以 OWASP Top 10 十大資安漏洞為目標進行攻擊模式分析, 並從研究分析中選出一般防護系統無法偵測或誤判率高之攻擊手法做為今年研 究與實作的對象。 (2)網路威脅風險分析與威脅預警之核心技術與軟體單元研發 現今網路安全防護的議題已經受到全世界的注目,因為在資訊蓬勃發展的時 代中,網路已成為現代人不可缺少的一部份,然而其安全的管理和防護的疏忽所 造成的傷害更是不計其數,例如: eBuy、Yahoo 等等,都曾經因為資訊安全的重 大事件而損失慘重。因此許多資訊安全防禦機制也如雨後春筍般冒了出來,如防 火牆、入侵偵測系統。 現有的防火牆、入侵偵測系統等措施,仍然有其限制,它們只能夠發掘已知 的攻擊方式,對於新型的攻擊則無能為力。現有的系統無法定量地分析網路威脅 的風險程度,提供預警服務,由於網路攻擊可能造成巨大的損害,我們實在不能 承受網路攻擊,而只是在事後加以追查,一套有效的網路防禦系統,必須能夠隨 時提高警覺,主動監控網路,即時發出預警訊號,讓網安人員可以預作防備,進 而主動出擊,追查攻擊的來源。本計畫的目標之一即是對於網路威脅的風險分析 與預警系統,作深入的研究,以及製作雛型系統,來驗證我們研究成果的實用性。
4
第二節、計畫時程
本計畫由於規模龐大,為顧及各系統需求,我們制定各系統完整的開發時程表, 至 2009 年 12 月前各工作項目皆已如期完成,並藉由實際網路攻擊手法完成測試。 表格 1、誘捕網系統開發時程表 表格 2、網路風險分析及預警系統開發時程表5
表格 3、封包標記與追蹤系統開發時程表
6
第三節、計劃目標
本計畫將對第一年完成之成果進行發展,並且將其整合成一完整系統,我們在此 說明此計劃目標,並在二、三、四、五章詳細描述系統原理以及使用。 議題一、Windows 誘捕網情蒐之核心技術與回追技術軟體發展: 本研究計畫將設計出針對網頁伺服器、網頁伺服器、網頁應用程式、資 料庫伺服器攻擊之誘捕技術,目標是將攻擊者的攻擊型態以及行為進行誘捕 與紀錄。紀錄的成果將有助於了解新型態的網頁攻擊以及攻擊造成的影響。 此外,更能有效檢視我方網路的安全性及所面臨的未知威脅,從而制訂更有 效的防護機制。 議題二、網路威脅風險分析與威脅預警之核心技術與軟體單元研發: 本計畫延續第一年度的成果,將對於第一年所開發的系統進行更深入的研 發,包含充分利用資料探勘技術於履歷的建置、履歷的呈現、風險評估量化與威 脅預警,使系統更具實用性且更完整。因此,我們將進一步擴充現有的軟體模組, 包含:資料來源擷取系統、Two-tie 資料分析架構、履歷連結系統、資安規則編 輯器、資安法則驗証系統,並加入風險量化分析、參數微調模組及威脅預警機制。 另外,我們也將深入研究網路攻擊的形態,期望未來新的系統能夠更廣泛的應用 在不同形態與未知的網路攻擊。7
第四節、計劃工作項目
本計畫分為兩年的計劃,以下為計劃兩年內的工作項目,已經全部完成。 第一年度工作項目: (一) WINDOWS 誘捕網情搜之核心技術與軟體單元發展 1. WINDOWS 系統誘捕技術與隱形記錄:WINDOWS 系統入侵路徑與模 式、WINDOWS 系統入侵過程的側錄與解析技術、WINDOWS 系統側錄 記錄之保護與隱藏技術 --- (林金城教授) 2. WINDOWS 網頁伺服器之誘捕風險與安全控管技術:虛擬系統之誘捕防 護罩模式與架構、網頁伺服器之誘捕防護罩技術、網頁伺服器之誘捕風險 控管技術 --- (何翊教授、陳建華教授) 3. 網路封包標記與追蹤技術:研究網路封包標記架構、入侵追蹤模式、封包 資料摘要與壓縮技術、網路攻擊路徑重建技術 --- (趙禧綠教授) (二) 網路威脅風險分析與威脅預警之核心技術與軟體單元研發 1. 容易使用的法則編輯與驗證技術:針對網路威脅分析及風險量化與威脅預 警所需之經驗法則的表達技術、容易使用的經驗法則的編輯與驗證技術 --- (黃俊龍教授,彭文志教授) 2. 網路威脅分析及風險量化:網路威脅模式、風險量化模式、模糊理論之網 路威脅分析技術、模糊理論之風險量化技術 --- (彭文志教授) 3. 威脅預警技術:模糊理論之威脅預警之經驗法則、威脅預警演算法 ---(黃俊龍教授)4. Mining Fuzzy association rules, 以供本系統使用--- (黃俊龍教授)
5. 評估商用的法則推論引擎,以供本系統使用--- (彭文志教授) (三) 系統整合 --- (楊武教授) 1. 管理上述各研究議題、雛形系統整合 2. 規劃與整合上述各研究議題之技術及其軟體介面 3. WINDOWS 誘捕網情搜軟體單元人機介面設計 4. 網路威脅風險分析與威脅預警軟體單元人機介面設計 5. 整合系統之人機介面設計 (四) 計劃統籌規劃與協調 --- (謝續平教授) 1. 計劃統籌規劃
8 2. 規劃研究技術整合、研究重點方向 3. 參與網路封包標記與追蹤技術研究、網路攻擊路徑重建技術研究 4. 參與模糊理論之網路威脅分析技術研究 5. 計劃管理 第二年度工作項目: (一) WINDOWS 誘捕網情蒐之軟體雛型研發 1. WINDOWS 系統入侵過程的側錄與解析技術。 --- (許富皓教授) 2. WINDOWS 系統側錄紀錄之隱藏與保護技術:持續第一年的技術,開發 其軟體。 --- (許富皓教授) 3. WINDOWS 網頁伺服器之誘捕網軟體雛形。--- (許富皓教授) 4. 網頁伺服器與誘捕系統之網路架構設計與實作,設計與實作展示用的網路 架構與 topology,安排 ROUTER 與 MCC、HONEYNET 及 SIM 的位置及 網路 IP 之安排等網路基礎建構。 --- (趙禧綠教授) 5. 網路攻擊技術與誘捕系統之對抗效力評估,以實際的攻擊技術對所建置的 誘捕系統進行測試, 藉此評估此誘捕系統對攻擊技術的捕獲能力, 並檢討 其成效。--- (許富皓、趙禧綠教授) (二) 網路威脅風險分析與威脅預警之軟體雛型研發 1. 資料來源擷取系統:由防火牆日誌擷取出連線資料,存入資料庫中。---(黃俊龍教授,彭文志教授)
2. two-tier 之分析架構:先由區域網路進行 local analysis,再將結果交由中 央伺服器進行 global analysis。--- (黃俊龍教授,彭文志教授) 3. 資料探勘技術於履歷建構:根據過去的連線記錄,利用資料探勘建構每個 電腦的履歷,並進一步使用資料探勘中的資料倉儲(data warehouse)技術, 加速資料的統計、整合、計算及呈現。--- (黃俊龍教授,彭文志教授) 4. 自定規則編輯系統:針對網路威脅分析之經驗法則,設計一可自定規則之 法則編輯器。--- (黃俊龍教授,彭文志教授) 5. 法則驗證系統:風險量化與參數微調模組。 --- (黃俊龍教授,彭文志教 授) 6. 網路威脅分析及研究:各種新型態網路威脅模式之研究。--- (黃俊龍教 授,彭文志教授)
9 7. 針對重要網路攻擊,將透過所提出之資料分析架構與履歷機制,進行實作 與評估其效能。--- (黃俊龍教授,彭文志教授) 8. 威脅預警之分析與計算。--- (黃俊龍教授,彭文志教授) 9. 網路攻擊技術與其風險分析及威脅預警之對抗效力評估。--- (黃俊龍教 授,彭文志教授) (三) 系統整合 --- (楊武教授) 1. 管理上述各研究議題、子系統整合 2. 規劃與整合上述各研究議題之技術及其軟體介面 3. WINDOWS 誘捕網情搜軟體單元人機介面設計 4. 網路威脅風險分析與威脅預警軟體單元人機介面設計 5. 整合系統之人機介面設計 (四) 計劃統籌規劃與協調 --- (謝續平教授) 1. 計劃統籌規劃 2. 規劃研究技術整合、研究重點方向 3. 規劃整合系統之整體架構,掌握計劃之進度 4. 計劃管理
10
第二章、全系統設計描述
我們在此章節將詳細介紹全系統架構以及相關資訊,並在後面的章節講解各 子系統。第一節、全系統硬體架構
以下我們列出全系統架構圖以及各系統主機的硬體規格。 圖 1、全系統硬體架構圖 表格 5、全系統硬體統計表 PC 14 台 Switch 2 台11
1.1 中央監控系統
硬體規格 CPU INTEL Pentium Dual Core E5200
主機板 ASUS P5KPL-AM
記憶體 Transcend 2G DDR2-800
光碟機 Pioneer DVR-217
硬碟 Western Digital 640G WD6400AAKS(三年保固)
Power FSP 350W/ATX (ATX-350PNT)
網路卡 Network Interface Card(NIC)
表格 6、中央監控系統硬體規格表 1.2 誘捕網系統 硬體規格 CPU Intel Q6600 主機板 ASUS P5K-PRO 記憶體 4GB DDR2-800 RAM
顯示卡 VGA GeForce 7200 series (128M)
光碟機 DVD-ROM
硬碟 160G HDD*2
Power PSU-500W
網路卡 Network Interface Card(NIC)
表格 7、誘捕網系統硬體規格表
1.3 網路風險分析及預警主機 a. 中央網路風險分析及預警主機
硬體規格
CPU Intel E7200
主機板 MD Gigabyte EP35-DS3L P35/ICH9
記憶體 4GB DDRII 800 RAM
光碟機 DVD-ROM
12
Power PSU 350W
網路卡 Network Interface Card(NIC) x 2
表格 8、中央網路風險分析及預警主機硬體規格表
b. 網路風險分析及預警主機
硬體規格 CPU INTEL Pentium Dual Core E5200
主機板 ASUS P5KPL-AM
記憶體 Transcend 2G DDR2-800
光碟機 Pioneer DVR-217
硬碟 Western Digital 640G WD6400AAKS(三年保固)
Power FSP 350W/ATX (ATX-350PNT)
網路卡 Network Interface Card(NIC)
表格 9、網路風險分析及預警主機硬體規格表
1.4 封包標記追蹤系統
硬體規格 CPU Intel E7200
主機板 MD Gigabyte EP35-DS3L P35/ICH9
記憶體 4GB DDRII 800 RAM
光碟機 DVD-ROM
硬碟 640GB HD
Power PSU 350W
網路卡 Network Interface Card(NIC):Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet (rev10) x 2
表格 10、封包標記與追蹤系統硬體規格表
1.5 網路交換機
廠牌 D-Link
13
第二節、全系統軟體架構
以下我們將針對各系統軟體部份作介紹。 圖 2、軟體架構圖 2.1 中央監控系統 作業系統 Fedora 11 組成及功能 說明Java 程式執行 路徑追蹤 Java GUI 介面的執行。
查詢路徑追蹤 中控中心透過 Java GUI 介面來查詢可疑 IP。
誘捕網系統回報 將有異常的行為進行誘捕並傳送至中控中心。 封包標記系統回報 將路徑封包傳回中控中心。 網路風險分析及預警回報 將六項資安規則裡面的資料傳送至中控中心顯 示。 資料庫存取 資料庫存取只能由本地端進行存取,外部查詢 需透過 Socket。 表格 12、中央監控系統功能表
14 2.2 誘捕網系統 作業系統 Windows XP 組成及功能 說明 Honeywall 資料的搜集與儲存 Honeypot 資料的誘捕與捕獲 資料分析 分析 Honeywall 和 Honeypot 之資料 每單元資料交換介面 皆以 TCP 之方式傳輸 表格 13、誘捕網系統功能表 2.3 網路風險分析及預警系統 作業系統 Debian 組成及功能 說明 資料庫存取 提供資料庫記錄(1)原始防火牆日誌(firewall log)、(2)資安規則、(3)各主機之履歷結構 (Profile)、(4)MCC使用記錄及(5)HoneyNet 使用 記錄。
履歷(profile)系統 將資料庫中之原始firewall log依不同的主機及
連線建立各主機之profile,並存入資料庫中,以 供查詢。 異常行為分析 以MCC設定之資安規則對資料庫中之各主機 profile進行篩選,分別針對六項規定找出異常之 主機。 中央監控介面 利用 Java 通訊平台,接受 MCC 下達之指令。 表格 14、網路風險分析及預警系統功能表
15 2.4 封包標記追蹤系統 作業系統 Debian 組成及功能 說明 封包標記 將傳送進來的封包進行封包標記。 封包轉送 將標記過後的封包進行轉送。 記錄封包標記 將傳送進來的封包標記內容讀取出來,記錄到資 料庫。 資料庫存取 資料庫存取只能由本地端進行存取,外部查詢需 透過 Socket。
Java 程式執行 路徑追蹤 Java GUI 介面的執行。
16
第三章、誘捕網系統
此章節我們將詳細介紹在本計劃所開發的誘捕網系統。第一節、前言
我們根據第一年的網路攻擊模式研究分析與誘捕網實作及 OWASP 的安全 性年度報告,可以瞭解網頁伺服器與網頁瀏覽器已成為現今攻擊者最為喜愛的攻 擊對象,眾多破壞力強大的惡意攻擊皆以此二者為攻擊目標。 網路誘捕技術是一種欺騙駭客攻擊的技術,它被用來吸引入侵者,使他們 進入受控的環境之中,並使用各種監控技術來捕獲入侵者的行為。本研究計畫著 重在建立能夠記錄下 SQL injection 攻擊的網頁型態之 honeypot,針對 SQL injection 的攻擊手法,來記錄駭客攻擊和入侵模式。 常見之入侵偵測系統、Web FW 與 Honeypot 對於針前系統發起的攻擊有良 好的表現,但是在面對新型態的 web attack 時,偵測與防堵能力均十分有限。此 外,基於已知之漏洞雖然能夠防範與偵測,但對於未知之網頁漏洞,則無法以有 效的方式作分析。藉由網頁誘捕網系統的研究分析與實作,不只對新型網路攻擊 模式捕獲有幫助且可即時補足傳統防護系統的盲點。第二節、SQL Injection 技術介紹
電腦系統的安全一直是個重要的議題,目前一般的電腦管理者都會替系統 安裝修正檔,防毒軟體,架設防火牆等等,但可能由於程式設計者的疏忽,而導 致系統中存在漏洞,使得攻擊者得以利用這樣的漏洞。 在現今的應用程式架構中,大部分都含有資料庫,以容納各式各樣的資料。 而在各類型的資料庫中,又以結構化查詢語言(SQL Structure Query Language)為 基礎的關聯式資料庫管理系統(RDBMS Relational Database Management System) 最為流行。 一般的 web 應用程式的程式設計師在存取資料庫時,往往是利用 PHP 等第 三代語言來組織 SQL 語言,然後再傳遞給關聯式資料庫系統執行,以建立或刪 除資料結構,賦予或移除使用權限,乃至於新增、修改、刪除或查詢資料。因為 關聯式資料庫所有的執行動作皆是遵循 SQL 命令,所以透過此種方式可以很方 便地完成各種資料維護工作。但也正因為 SQL 語言無所不能,所以稍有漏洞就17 會讓駭客有機可乘。 網站的資料存取一般來說是比較危險的,因為網際網路是一個開放的環 境,而不像一般公司內部網路,除了有電腦本身的安全設計,還可以過濾篩檢員 工的身分背景。網際網路上龍蛇雜處,大部分的使用者都循規導矩,但少數圖謀 不軌的人卻處心積慮地要侵入我們的系統,竊取有價值的資料。但一般的網管人 員及網頁設計師,可能在安全設定上有著重重防範,如架設防火牆,設計非軍事 區(DMZ),限制網站登入者的身分等等。但由於缺乏對 SQL 語言及資料庫管理 系統的認知,而大開系統的後門。 SQL injection 是常見的一個重大威脅,而且針對含資料庫的應用程式。SQL injection 是利用輸入特殊命令,讓系統將之與標準的資料庫查詢程式和資料合併 在一起,送給資料庫管理系統執行,因此有一段有害的程式碼被正常的程式碼包 裝起來形成『隱碼』,直接對資料庫存取資料或進行破壞,進而造成資料庫損毀
或資料流失。SQL injection 本身不僅可以由網頁上的欄位(HTTP POST method) 發起攻擊,也可以直接從附加在 URL 變數以 HTTP GET method 送出。此外,更 有相當多的變形(如子字串組合)與編碼手法(如 unicode),攻擊者可以技巧性的繞 過網站上之防護措施。因此針對未知之 SQL injection 攻擊字串之分析實為一大挑 戰。
2.1.SQL injection 的弱點形式
(1) 未做適當的字元(串)過濾
當 web application 的設計者沒有對來自 user 的 input 做適當的字元(串)過濾 時,它的 input 會經由 web application 合成 SQL 查詢字串的程式,合成非預期, 甚至是有害的 SQL 查詢字串。
以下麵的 SQL 查詢字串的合成程式碼來說明:
像這樣的程式,在未做適當的字元過濾的情況下,若以下列字串
statement = "SELECT * FROM users WHERE name = '" + userName + "';"
18 作為 input 來做 SQL 查詢字串合成的話,就會合成出下列的 SQL 查詢字串: 如果這樣的程式碼被用在對使用者的身分認證的話,由於't'='t'永遠是 true, 將導致身份認證成功,且取得某一個合法使用者的身份及權限。 在許多的資料庫伺服器的軟體當中,允許一次的呼叫可以執行多道 SQL 的 查詢命令,有些 SQL 的 API 有做到限制這樣的行為,像是 php 的 mysql_query 這個 SQL 查詢的 API,這樣可以避免攻擊者嵌入獨立且與原本程式無關的 SQL 查詢字串。 (2)不正確的變數型態處理
SQL injection 也有可能發生在沒有做正確的變數型態處理的 web application 中,例如:
這個 SQL statement 中,a_variable 應該要是一個正整數的值,以查詢與其 相符的 id 的資料,但若程式設計者沒有對 a_variable 做是否為整數的檢查時,當 下列的字串
被輸入為 a_variable 變數的值時,就會執行 drop(delete) users 這個 table, 產的 SQL 查詢字串如下:
(3)資料庫伺服器內部的弱點
資料庫伺服器的軟體本身也有可能存在弱點,像是 MySQL server 的
mysql_real_escape_string()函式,能使攻擊者用 unicode 的編碼方式,繞過程式設 計者的過濾,而成功執行 SQL injection。
SELECT * FROM users WHERE name = 'a' OR 't'='t';
SELECT * FROM DATA WHERE id=1;DROP TABLE users; 1;DROP TABLE users
19
(4)Blind SQL Injection
當 SQL injection 的結果不會呈現在網頁的頁面上時,攻擊者有可能使用以 下的方式來做 injection 有沒有成功的檢查:
a. 條件的 respones
其中一種 blind SQL injection 的方法是在 select 敍述句中加上永遠成立,或 是永遠失敗的條件式,如下所列:
會產生原來的結果(不會影響)
會產生與原來不同的結果,攻擊者可以藉此來判別是否有 SQL injection 的 弱點或是 SQL injection 是否成功。
b. 條件的 errors
這個種類的 blind SQL injection 在 where 條件式成立的時候會產生
SQL 的 error,例如:
如果 Ralph 這個 username 存在的話,就會造成除以零的例外,而攻擊 者能夠藉此來找出可能被使用的 schema。
c. 時間延遲
攻擊者可以嵌入需要一段足夠長時間執行的 query,用 web server 回傳結果時間延遲來判斷是否有 SQL injection 的弱點或是 SQL injection 是否成功,快速回應可能表示 SQL injection 失敗,過一段時間才回應 可能表示 SQL injection 的注入碼有被成功執行。
d. 一些可以用在 SQL injection 的 select 敍述命令
Version SELECT @@version
Comments SELECT 1; #comment SELECT /*comment*/1; Current User SELECT user();
SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2; SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1;
20 SELECT system_user();
List Users SELECT user FROM mysql.user; -- priv List Password
Hashes SELECT host, user, password FROM mysql.user; -- priv Password
Cracker John the Ripperwill crack MySQL password hashes.
List Privileges
SELECT grantee, privilege_type, is_grantable FROM information_schema.user_privileges; -- list user privs
SELECT host, user, Select_priv, Insert_priv, Update_priv,
Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv FROM mysql.user; -- priv, list user privs
SELECT grantee, table_schema, privilege_type FROM
information_schema.schema_privileges; -- list privs on databases (schemas)
SELECT table_schema, table_name, column_name, privilege_type FROM information_schema.column_privileges; -- list privs on columns
List DBA Accounts
SELECT grantee, privilege_type, is_grantable FROM
information_schema.user_privileges WHERE privilege_type = 'SUPER';
SELECT host, user FROM mysql.user WHERE Super_priv = 'Y'; # priv
Current
Database SELECT database()
List Databases SELECT schema_name FROM information_schema.schemata; --for MySQL >= v5.0
21
SELECT distinct(db) FROM mysql.db -- priv
List Columns
SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE table_schema != 'mysql' AND table_schema != 'information_schema'
List Tables
SELECT table_schema,table_name FROM
information_schema.tables WHERE table_schema != 'mysql' AND table_schema != 'information_schema'
Find Tables From Column Name
SELECT table_schema, table_name FROM
information_schema.columns WHERE column_name = 'username'; -- find table which have a column called 'username'
Select Nth Row
SELECT host,user FROM user ORDER BY host LIMIT 1 OFFSET 0; # rows numbered from 0
SELECT host,user FROM user ORDER BY host LIMIT 1 OFFSET 1; # rows numbered from 0
Select Nth Char SELECT substr('abcd', 3, 1); # returns c
Bitwise AND SELECT 6 & 2; # returns 2 SELECT 6 & 1; # returns 0
ASCII Value ->
Char SELECT char(65); # returns A
Char -> ASCII
Value SELECT ascii('A'); # returns 65
Casting SELECT cast('1' AS unsigned integer); SELECT cast('123' AS char);
String
Concatenation
SELECT CONCAT('A','B'); #returns AB SELECT CONCAT('A','B','C'); # returns ABC
If Statement SELECT if(1=1,'foo','bar'); -- returns 'foo'
Case Statement SELECT CASE WHEN (1=1) THEN 'A' ELSE 'B' END; # returns A
22
Time Delay SELECT BENCHMARK(1000000,MD5('A')); SELECT SLEEP(5); # >= 5.0.12
Make DNS
Requests Impossible?
Command Execution
If mysqld (<5.0) is running as root AND you compromise a DBA account you can execute OS commands by uploading a shared object file into /usr/lib (or similar). The .so file should contain a User Defined Function (UDF).raptor_udf.cexplains exactly how you go about this. Remember to compile for the target architecture which may or may not be the same as your attack platform.
Local File Access
...' UNION ALL SELECT LOAD_FILE('/etc/passwd') -- priv, can only read world-readable files.
SELECT * FROM mytable INTO dumpfile '/tmp/somefile'; -- priv, write to file system
Hostname, IP
Address Impossible?
Create Users CREATE USER test1 IDENTIFIED BY 'pass1'; -- priv Delete Users DROP USER test1; -- priv
Make User DBA GRANT ALL PRIVILEGES ON *.* TO test1@'%'; -- priv Location of DB
files SELECT @@datadir; Default/System
Databases
information_schema (>= mysql 5.0) mysql
23
第三節、設計原理
3.1 安全等級提升: 防護等級 效果 規避方法 等級一 預設環境,對攻擊者無任何防 範 特殊字元型攻擊 錯誤嘗試型攻擊 時差型攻擊 等級二 將特殊字元(‘,“,\)前加上 \ 錯誤嘗試型攻擊 時差型攻擊 等級三 阻擋 MySQL 送出的錯誤訊 息 時差型攻擊 等級四 過濾數字、字母 (0-9, a-z, A-Z) 以外的字元 已知的 SQL Injection 攻擊 手法皆無法繞過防護等級四 表格 17、誘捕網防護等級表 (1)防護等級一的設定標準: 防護等級一未做任何防範,開始捕捉攻擊事件,並將其紀錄。 (2)防護等級二的設定標準: 將輸入字串中的特殊字元 (‘,“,\)除去後,執行 SQL 的結果,與原始字串執行 SQL 的結果比對,若結果不相同,則設定防護等級為二。 (3)防護等級三的設定標準 測量 SQL 的執行時間並未超過設定的門檻值 且 繞過防護等級二之保護 (4)防護等級四的設定標準 測量 SQL 的執行時間是否超過設定的門檻值,若是超過,代表達到防護等級四。 3.2 自動設定防護等級 根據攻擊者輸入的 SQL injection 攻擊字串所達到技術等級的不同,在適當的時 間後,給予不同的防護等級。 不同的防護等級會給予攻擊者不同程度的阻力,讓攻擊者以為網站管理者已對漏 洞做修補,誘使他用進階方式攻擊網站。24 輸入字串同時以四種防護等級作過濾並記錄,取最低無法通過之防護等級,作為 防禦該攻擊者下次進入系統之等級。 3.3 誘捕未知型攻擊 將真實密碼存在另外的欄位,而原本存密碼的欄位放置假密碼,可捕捉到使用假 密碼登入的攻擊者。 圖 3、未知攻擊 3.4 攻擊紀錄 在攻擊者對誘捕網測試到入侵成功的過程皆會被完整地記錄下來。 圖 4、攻擊記錄 替換資料,讓攻擊 者可以成功登入
25
第四節、Web Honeypot 系統架構
圖 5、誘捕網系統架構圖
Web honeypot 系統架構如上圖所示,主要分為幾個部分: 1. 含有 SQL injection 弱點的 web application & database
本研究計畫為建立一個網頁型態之 honeypot,以資訊安全討論區的形式呈 現,在登入處理的頁面中設有 SQL injection 的弱點,引誘攻擊者入侵,藉以記錄 其所做的行為。
2. Entrap unit
這個部份是用來做使用者 input 的檢查和 server response 的檢查以及 security
level 的模式設定與切換的實作,若有攻擊者用 sql injection 的方式,成功執行惡 意的 SQL 指令,則經過使用者 input 的檢查和 server response 的檢查,偵測到此 一惡意行為,我們會將 security level 的等級調升。
3. Manage unit
這部份的設計,為因應可以做 remote control,從遠端能夠調整 security level。
4. Record unit
為了記錄攻擊者藉由 SQL injection 入侵的所有行為,需要一個記錄的機 制,來完成記錄行為的動作,這個部分會將這些行為記錄下來存到 log database
26
中,且基於安全的考量,log database 須和 web application 所使用的 database 分開 放置。
5. Log database
記錄攻擊者行為模式的資料庫,所記錄的欄位如下:
1. Ip –來源的 IP
2. Seclv –目前所在的 security level 3. Time –事件發生時的時間 4. Page –事件發生時所在的頁面 5. Acc –使用者輸入的 account 6. Pwd –使用者輸入的 password 7. Sqlstr –送到 MySQL server 執行的 SQL 查詢字串 6. Sebek
Sebek 是一個現有的 kernel level rootkit,引入此一工具是為了防範受到非 SQL injection 的攻擊,使得 honeypot 被入侵,如此一來,我們在這個時間點之後 所記錄的資料可能都是不可信的,為了找出這個時間點,以及記錄其行為模式, 我們引入使用 sebek。
第五節、資料庫與程式碼設計
27
用來紀錄系統所捕捉到的攻擊事件之資料,分別存入四個資料表中:attacker_log,
attacker_log_input, attack_log_sec_level, black_list,各資料表內容如下: 5.1.1 資料表 attacker_log :
紀錄攻擊行為的主要資料表,每筆資料為一次攻擊事件。
No. Field Type Null Key Default Extra
1.1.1 Id int(20) 否 PKI auto_increment
1.1.2 Ip varchar(50) 否 NULL
1.1.3 user_sec_level int(2) 是 NULL
1.1.4 max_sec_level int(2) 是 NULL
1.1.5 Time int(30) 否 NULL
1.1.6 sql_string mediumtext 否 NULL
1.1.7 attack_page varchar(50) 否 NULL
1.1.8 user_authentic_type int(1) 否 0
1.1.9 log_comments text 是 NULL
1.1.1 id: 每筆攻擊紀錄之 unique id 1.1.2 ip: 攻擊來源 IP 1.1.3 user_sec_level: 攻擊發生時,此攻擊者的安全防護等級。 1.1.4 max_sec_level: 此次攻擊所能達到的最高防護等級。 (e.g., 3 代表:可以通過等級 1, 2 的檢查,會被等級 3 阻擋) 1.1.5 time: 紀錄攻擊的時間(單位:秒) 1.1.6 sql_string: 攻擊所產生的 SQL 字串。 1.1.7 attack_page: 受到攻擊的頁面。 1.1.8 user_authentic_type: 執行 SQL 指令後,Mysql 所回應的狀態 0 : query 失敗、1 : query 成功,但無法獲取資料 2 : 獲取資料成功、 3 : 登入成功 (login 檢查專用) 1.1.9 log_comments: 此筆攻擊紀錄的相關訊息 5.1.2 資料表 attacker_log_input 與 attacker_log 關聯的資料表,紀錄攻擊者所利用的字串接收欄位
28
1.2.1 Id int(20) 否 PKI auto_increment
1.2.2 log_id int(20) 否
1.2.3 Field text 是 NULL
1.2.4 Content text 是 NULL
1.2.1 id : 每筆 input 的 unique id 1.2.2 log_id : 存放 attacker_log 資料表的 id 1.2.3 field : 欄位名稱 1.2.4 content: 攻擊者輸入的內容、指令。 5.1.3 資料表 attacker_log_sec_level 與 attacker_log 關聯的資料表,紀錄攻擊分別在各個防護機制保護下的狀態。 安全防護: 等級 1 : 不做任何過濾 等級 2 : 對輸入字串做 addslash()
等級 3 : 關閉 error messages,並且對輸入字串做 addslash() 等級 4 : 去除輸入字串中所有的符號,並且關閉 error messages 狀態:
0 : query 失敗、1 : query 成功,但無法獲取資料、2 : 獲取資料成功、 3 : 登入成功 (login 檢查專用)
No. Field Type Null Key Default Extra
1.3.1 Id int(20) 否 PKI auto_increment
1.3.2 log_id int(20) 否
1.3.3 lv_1_sql text 是 NULL
1.3.4 lv_1_type int(1) 是 NULL
1.3.5 lv_2_sql text 是 NULL
1.3.6 lv_2_type int(1) 是 NULL
1.3.7 lv_3_sql text 是 NULL
29
1.3.9 lv_4_sql text 是 NULL
1.3.10 lv_4_type int(1) 是 NULL
1.3.1 id : unique id of this table.
1.3.2 log_id : 存放 attacker_log 資料表的 id 1.3.3 lv_1_sql : 本次攻擊 SQL 在安全防護一過濾後的內容 1.3.4 lv_1_type : 未過濾 SQL 的執行狀態 1.3.5 lv_2_sql : 本次攻擊 SQL 在安全防護二過濾後的內容 1.3.6 lv_2_type : 輸入字串做 addslash()過濾,SQL 之執行狀態 1.3.7 lv_3_sql : 本次攻擊 SQL 在安全防護三過濾後的內容 1.3.8 lv_3_type : 過濾後,是否有出現 Time delay 之執行狀況 1.3.9 lv_4_sql : 本次攻擊 SQL 在安全防護四過濾後的內容 1.3.10 lv_4_type : 去除符號後,SQL 執行之狀況
5.1.4 資料表 black_list
紀錄曾經發起攻擊的 IP 黑名單。
No. Field Type Null Key Default Extra
1.4.1 Id int(20) 否 PKI auto_increment
1.4.2 Ip varchar(50) 否
1.4.3 sec_level int(10) 是 NULL
1.4.4 admin_setting_sec_level_time int(30) 是 NULL
1.4.1 id : unique id 1.4.2 ip : 攻擊來源 IP 1.4.3 sec_level : 上次攻擊所分配的安全防護等級。 1.4.4 admin_setting_sec_level_time : 系統管理人員可以手動提升 black_list .sec_level,此處紀錄調整的時間。 5.2 資料庫- msg_board 論壇網站(對外遭受攻擊)所使用的資料庫,包含 msg, thread, users 等資料表,各
30
資料表內容如下:
5.2.1 資料表 msg :
紀錄各篇文章的資料庫。
No. Field Type Null Key Default Extra
2.1.1 Mid int(20) 否 PKI auto_increment
2.1.2 Tid int(20) 否
2.1.3 Date date 是 NULL
2.1.4 Author int(20) 是 NULL
2.1.5 Subject varchar(200) 是 NULL
2.1.6 Content mediumtext 是 NULL
2.1.7 Reply int(20) 是 NULL
2.1.1 mid : 文章的 unique id 2.1.2 tid : 版面的 id (thread.id) 2.1.3 date : 文章發表日期 2.1.4 author : 文章發表人的 id (users.uid) 2.1.5 subject : 文章標題 2.1.6 content : 文章內容 2.1.7 reply : 回覆文章 5.2.2 資料表 msg : 各討論版的名稱、資訊。
No. Field Type Null Key Default Extra
2.2.1 tid int(5) 否 PKI auto_increment
2.2.2 name varchar(20) 是 NULL
2.2.3 info varchar(100) 是 NULL
31
2.2.2 name : 討論版版名
2.2.3 info : 討論版的相關訊息、簡介 2.3 資料表 users :
紀錄註冊用戶的資訊。
No. Field Type Null Key Default Extra
2.3.1 uid int(20) 否 PKI auto_increment
2.3.2 name varchar(50) 否
2.3.3 pw varchar(40) 否 NULL
2.3.4 email varchar(50) 是 NULL
2.3.5 ADL35321 varchar(40) 是 NULL
2.3.6 profile text 是 NULL
2.3.1 uid : users 的 unique id 2.3.2 name : 用戶帳號 2.3.3 pw : 假密碼(讓攻擊者竊取) 2.3.4 email : 用戶 email 2.3.5 ADL35321 : 真實密碼,採用特定名稱欄位讓攻擊者難以猜中,且無法直 接存取這個欄位,只有透過特殊的程式檢查才能讀取。 2.3.6 profile : 用戶簽名檔 5.3 程式變數 5.3.1 module.php : 公用變數、資料庫連線的設定檔
32
若要移植誘捕系統至其他環境,需設定下列參數
No. Var Name Content Comment
3.3.1 security_acc name HTML form 的帳號欄位名稱 (使用者輸入) 3.3.2 security_pw pw HTML form 的密碼欄位名稱 (使用者輸入) 3.3.3 database_security_acc name 資料庫的帳號欄位名稱 (比對使用者輸入) 3.3.4 database_security_pw ADL35321 資料庫的真實密碼欄位名稱 (比對使用者輸入) 3.3.5 database_for_user_pw pw 資料庫的假密碼欄位名稱 (比對使用者輸入) 3.3.6 user_login_page /board/index.php Login 介面的程式名稱 (供使用者填入帳號密碼) 3.3.7 myip 140.115.53.35 網站的 IP Address 或是 網站的網址(domain name) 3.3.8 WEBURL http://'.myip.'/boa rd/ 首頁網址 3.3.9 time_to_upgrade_sec_ level_for_demo 0 demo 用的開關, 0 關閉, 1 打開 3.3.10 time_to_upgrade_sec_ level 86400 提升安全防護的時段(前一次 攻擊至本次攻擊相隔的時間) 單位:秒 3.3.11 send_to_mcc true 是否利用 socket 送出訊息至 MCC server 3.3.12 mcc_ip 140.113.87.233 MCC server 之 IP
3.3.13 mcc_port 9876 MCC server 之 port
33 送出訊息至 TraceBack server MySQL 連線程式:(module.php) $link=mysql_connect('localhost', 'p1t1r', '1111'); (1) (2) (3) (1) 資料庫的 IP,若是本地端設 localhost 即可 (2) 資料庫連線帳號 (3) 資料庫連線密碼 if (!$link) {
die('Could not connect: ' . mysql_error()); }
if (!mysql_select_db('msg_board', $link)) {
//連線至資料庫 msg_board
echo 'Could not select database'; exit;
}
$link_for_log= mysql_connect('localhost', 'p1t1r_log', '1111');
(1) (2) (3) (1) 資料庫的 IP,若是本地端設 localhost 即可
(2) 資料庫連線帳號 (3) 資料庫連線密碼
if (!$link_for_log) {
die('Could not connect: ' . mysql_error()); }
if (!mysql_select_db('log', $link_for_log)) {
//連線至資料庫 log
echo 'Could not select database'; exit;
34
※檢查專用連線:
檢查防護等級時,會將可疑的 SQL 過濾後,再進行資料庫存取,藉此找出此字 串最高可達到的等級 。
$link_test1= mysql_connect('localhost', 'test1', '1111'); if (!$link_test1) {
die('Could not connect: ' . mysql_error()); }
if (!mysql_select_db('msg_board', $link_test1)) { echo 'Could not test1';
exit; }
5.3.2 ODBC.php
將此函式從 lib.php 中獨立到 ODBC.php,避免遭受攻擊時,會顯示出 lib.php(重 要函式)的名稱,增加重要檔案的隱密性。 5.3.3 lib.php : 公用程式的 Libary function sec_fetch(&$result){ // $result : 執行 SQL query 之結果 本函式是提供假密碼所使用 將 mysql_fetch_assoc 做 hooking,檢查 SQL 抓取的資料中,是否具有真 實密碼的欄位名稱(e.g. ADL35321),若是出現,則取代為其他名稱,避 免真實密碼被竊取出。 //本函式是防護等級一所使用 //將使用者輸入之資料中,具有「’」、「”」、「\」、「NULL」的字元前面加上\
35
//防護等級四所使用 //將所有符號去除
function symbol_strip(& $input) {
//$input : 網站使用者所輸入的資料
$pattern = "[-\#='\" !@$%^&*()_+,.]"; if( is_array($input) )
foreach ($input as $key => $child) {
$child = ereg_replace($pattern, "", $child); $input[$key] = $child;
}
檢查使用者 IP 是否為黑名單,若是存在,則依據此 IP 的防護等級,提升防範 機制,讓此攻擊者先前所用的手法失效,藉此誘使攻擊者採用更複雜的攻擊方 式。
36 Function chk_time_to_upgrade_sec_level(){ 檢查是否提升防禦等級的機制之一 檢查本次攻擊與上次攻擊相隔的時間,是否超過一定的區間 (可在 module.php time_to_upgrade_sec_level),則會提升防禦。 檢查使用者本次輸入的資料,可否對目標 SQL 產生非正常結果,並判斷出惡 意的輸入能規避哪些安全防護。 Function chk_input_sec_level($sql,$user_inputs,$chk_para){
37
$normal_user_result = mysql_query($normal_user_sql, $link); if (mysql_num_rows($normal_user_result) > 0
&& chk_mal_login($user_inputs['name'],$user_inputs['pw'], $temp_strip['name'],$temp_strip['pw'])
38 $max_sec_level =0; $user_auth_type = 0; for($i=0;$i<5;$i++){ $lv_sql[$i]=''; $lv_type[$i]=0; }
39 //能 delay 超過 0.1 秒 -> query 一定有成功
if($max_exec_time >=0.1){ $lv_type[3]=2;
40 //sec_level_2
$addslash_sql=$sql;
foreach ($user_inputs as $key => $child) {
$addslash_sql = str_replace($user_inputs[$key], addslashes($child), $addslash_sql); }
41 $result = sec_query($sql_bl, $link);
$user_sec_lv = $max_sec_level; }else{
42 $fake_pw_sql = " select * ";
$fake_pw_sql .= " from ".sensitive_table_name." where
".database_security_acc."='".$temp_acc."' and ".database_for_user_pw."='".$temp_pw."' "; $fake_pw_result = mysql_query($fake_pw_sql, $link);
43
將捕捉到的攻擊事件資訊傳給 MCC。
此處檢查 module.php 的 send_to_mcc,若是為 true 才會傳送。
44
insert_log_fields($log_id, $log_fields); insert_log_sec_lv($log_id,$lv_sql,$lv_type); }
}
ini_set('display_errors', true); //打開 error msg (對應 開始檢查前的關閉 error msg) chk_filter($_POST,$_GET); send_to_traceback(); ssl_socket($user_sec_lv); return htmlspecialchars_decode($lv_sql[$user_sec_lv],ENT_QUOTES); } Function insert_log_fields (){ 將攻擊事件中,攻擊者輸入的資料(經過處理,避免傷害 log 資料庫),再寫入 log 資料庫的 attacker_log_inputs 資料表。
45 5.3.4 模組- 正常網站 論壇程式,設置漏洞讓攻擊者發揮。 程式名稱 功能描述 index.php 論壇首頁,提供欄位讓使用者輸入帳號密碼, 也讓攻擊者有機會進行 SQL Injection。 board.php 討論區首頁,網址列有參數(id=1, 2, ...)代表不 同的討論區,也是常出現的 SQL Injection 漏 洞。 article.php, form.php, topic.php 論壇發表、觀看文章功能。 會先檢查 login,所以攻擊者未成功 Injection 上 述兩支程式前,是無法對此處進行存取。 5.3.5 模組- 正常網站 論壇程式,設置漏洞讓攻擊者發揮。 程式名稱 功能描述 Blist.php 控管介面,顯示攻擊來源的 IP 黑名單,並可手 動調整防護等級。 log.php, log_list.php, log_search_form.php 顯示攻擊事件的 log 資料
第六節、功能測試
情境: Function insert_log (){ 將攻擊事件寫入 log 資料庫的 attacker_log 資料表。 }46 步五營侯上士在網路上習得 SQL Injection 相關知識,於是企圖運用此手法 入侵架設在步一營的國軍入口網站,竊取他人帳號密碼,進一步取得機密資料。 另一方面,楊上校登入中央監控系統監控。 圖 6、攻擊模擬圖 6.1. 各式 SQL Injection 攻擊模擬 6.1.1 特殊字元型攻擊 攻擊原理及目的: 透過特殊字元,使攻擊 SQL 成立,藉此規避檢查並且取得登入權限。 攻擊字串範例:『’or1=1 # 』 攻擊成功: 圖 7、誘捕網受攻擊成功 攻擊失敗: 圖 8、誘捕網受攻擊失敗 6.1.2 錯誤嘗試型攻擊
47
攻擊原理及目的:
網站所提供的錯誤訊息,原本是讓開發者除錯用,但攻擊者同樣可以利 用錯誤訊息來反覆詢問主機,順藤摸瓜地竊取出重要資訊,進而擁有登入權 限。
攻擊字串範例:『UNION ALL SELECT NULL』 攻擊成功: 圖 9、誘捕網錯誤嘗試攻擊 攻擊失敗: 不論如何嘗試,畫面均不會提供任何訊息。 6.1.3 時差型攻擊 攻擊原理及目的: 原理同上,也是藉由反覆詢問來竊取資料,但是在錯誤訊息被屏蔽的情 況下,攻擊者可以讓網站傳輸產生延遲,來達到如同顯示錯誤訊息般的效果。 攻擊字串範例:
『UNION ALL SELECT
BENCHMARK(800000,sha1(111111)),NULL,NULL 』 攻擊成功:
圖 10、誘捕網時差型攻擊
攻擊者可任意 選擇延遲時間
48 攻擊失敗: 不論如何嘗試,連線的延遲不受攻擊者左右。 6.1.4 未知型攻擊: 防禦機制: 面臨到未知攻擊的考驗,我們的策略如下: 所有進出資料庫的關鍵資料,皆會被攔截並且紀錄。 檢查 輸入的帳號資料與所取得的帳號權限,是否相符 製造誘餌資料(例如:帳號密碼),若以此資料登入,視為攻擊。 6.2 各式 SQL Injection 攻擊紀錄 6.2.1 攻擊情景紀錄 圖 11、誘捕網攻擊情境記錄 6.2.2 黑名單與遠端防護管理
49
50
第七節、Sebek(Honeypot)
Sebek 是一個資料截取的工具。所有資料截取工具的目的都是用其截取的資料, 準確地讓我們知道在 honeypot 上的事件。用它來確定 attacker 是什麼時候對系統 做攻擊的,他們的攻擊手段以及攻擊成功後所做的事。 但有些惡意的行為是經過加密的,這樣的行為使用一般的 traffic filter 的方 式是不能夠辨認出這些內容並加以記錄的。 我們知道,雖然訊息要加密,但在系統中某些地方不是被加密的,在這些地 方可以截取到沒有經過加密的資料。一般攻擊者會加入一個木馬的 shell,用來 記錄未經加密的輸入命令。第一版的 sebek 設計成直接從 kernel 搜集按鍵的資料,參考了 Adore
Rootkit,用替換 sys_read 的 system call 來截取按鍵資料,然後把這些資訊記錄到 一個隱藏的文件並通過網路模擬成其它如 NetBIOS 的 UDP protocol 把它發送出 去,這樣就能滿足我們 monitor 入侵者按鍵的需求了。但它易於被發現且效率不 高是一個缺點。
到了第二版的 sebek,它不旦可以記錄按鍵,還記錄了所有通過 sys_read 的 資料。收集到這些資料,我們就可以 monitor honeypot 的所有動作。比如有一個 檔案被 copy 到 honeypot 裡,sebek 就能夠發現並記錄它,產生一同一個的拷貝。 第二個重要的改變是 sebek 變得更難檢測出來,改進了日誌資料的傳輸,使得用
sniffer 檢測不到 sebek 的數據傳輸。
在 Web 誘捕系統中建構 Honey pot 有很大的好處:1. 方便與現有架構做整 合,位於同一 Honey Wall 內的機器均為 Honey pot。2. 蒐集的 Log 傳輸更具隱蔽 性,由於 Sebek 本身有防治 Sniffer 監聽的機制,誘捕系統的資料傳輸均透過 Sebek 則更加安全。
7.1 Sebek 結構
Sebek 的組成部分成二個:client 和 server。Client 端從 honeypot 截取資料並且輸 出到網路讓 server 收集。Client 端有兩種方式收集資料:第一種是直接從網路活 動的資料封包截取,第二種是從 tcpdump 格式保存的資料封包檔。當資料收集後 可以上傳到相關的資料庫,也可以馬上顯示按鍵錄,且 sebek 使用 UDP protocol
51
進行通信。
圖 13、Sebek 結構
上圖為典型的 sebek 部署。Client 模組安裝在 honeypot 裡,攻擊者行為被截取後 發送到網路,並且由 honeywall gateway 收集。
Client 端完全在 honeypot 的 kernel space,根據 Linux 版本的情況以 LKM 的方式 執行。Client 端可以記錄用戶通過 read() system call 的所有資料,執行 sebek 的
honeypot 以難以檢測的方式把這些資料輸出到 server 所在的網路,後 server 收集 所有 honeypot 發送的資料。
7.2 Sebek 原理簡介
52
圖 14、Sebek 原理說明
上圖為 Linux kernel 2.4 的做法,在 kernel 2.6、Win32 環境也是採用相同方法: 將原本的 System call Table 所指向的 system service routine address 改為自己寫好 的 module routine address,藉此側錄( in New_read )有通過 system read 的內容, 最後會回到原本的 service routine(Original Read),在 Sebek 3 會側錄 read、write、
socket、open 等 services。
Client Module Hiding:
Linux 版本是利用 rootkit 隱藏的技巧,將 Sebek 掛載的 module 從紀錄的 module linked list 中移除,所以重新開機後 Sebek 將無法執行。而 Win32 版本則是由於 有 Hook 在系統的 Native API 中,所以隱藏手法與 Linux 有差異,將安裝時所用 的 Driver 移除即可,也因此不會因為重新開機而無法正常使用 Sebek。