Saturday, July 31, 2010

Javascript XMLHttpRequest 模擬 multipart/form-data 傳送資料

multipart/form-data是一種瀏覽器用來發送Form資料的方法,特別的是,它支援binary code的檔案傳輸

今天試著要用XMLHttpRequest來來模擬multipart/form-data發送資料(因為要上傳檔案)

今天找很久的資料後,決定還是用Wireshark來捕捉一下封包,看看到底是如何運作的
搭配 RFC1867  成功的進行了模擬,上傳資料

 XMLHttpRequest open後,必須先設置header,告訴伺服器你是multipart/form-data

http.setRequestHeader("Content-Type","multipart/form-data; boundary=----1AwOmRxb2KluSNh90S1qesEo")

multipart/form-data; 告訴伺服以multipart/form-data傳送資料
boundary=----1AwOmRxb2KluSNh90S1qesEo 則定義boundary,用來當作分隔字串用的(每個資料都以boundary=XXX 後面那串分隔)

接著設定要傳送的資料

var param=""; 
param+='------1AwOmRxb2KluSNh90S1qesEo\r\n';
param+='Content-Disposition: form-data; name="filedata"\r\n';
param+='\r\n';
param+=data+'\r\n';
param+="------1AwOmRxb2KluSNh90S1qesEo--\r\n"


資料以分隔字串開頭(之後分隔字串前面都加上兩個--,原因還不清楚),用\r\n進行換行(很重要)

接著用Content-Disposition: form-data; name="filedata"\r\n定義欄位名稱
再接一個\r\n後
下一行為你要發為你要發送的欄位資料,後面還是得接\r\n

就這樣一組一組定義欄位跟資料(每組前面記得要有一個前面加--的分隔字串)

最後定義完後,以------1AwOmRxb2KluSNh90S1qesEo--\r\n結尾 
基本上是 -- + 分隔字串 + -- + \r\n

最後用XMLHttpRequest的send方法發送param出去即可

Monday, July 26, 2010

TestFilter-TestMiniFilter Driver載入Rule

為了改善Program複雜度跟強化安全性,今天決定要由Driver來讀取規則檔並且載入規則
一開始便發現到Driver由於是SERVICE_BOOT_START,過早啟動導致系統很多部分都還沒有載入完成,導致讀規則檔有一定難度。後來的將啟動順序改為SERVICE_SYSTEM_START延緩載入(系統也準備的差不多了)

Thursday, July 22, 2010

TestFilter-TestMiniFilter Rule檔讀取和動態載入

修復了兩個本來沒有發現,非常奇怪的Bug

一個是沒有注意到驅動中的Stack有限,宣告了過大的區域變數導致Stack Overflow(之前WinDbg一直顯示問題在一個DbgPrint呼叫,後來拿掉DbgPrint後,真正的Stack Overflow問題才浮現)

一個是漏看了MSDN文件的一小部分,導致FltSendMessage傳入的ReplyLength參數值大於緩衝區的大小,造成緩衝區溢位,也學到了MSDN文件一定要看清楚

Wednesday, July 21, 2010

TestFilter-TestMiniFilter Create Read Write Delete權限過濾+Client部分管理功能

今天完成了Create Read Write Delete四個主要權限過濾
Client則完成了捕捉Filter傳回的Deny事件

在下午增加權限控制時,外面突然下起大雷雨,也發現到,要在每五秒就一個閃電的環境下很難寫程式 

TestFilter-TestMiniFilter

Tuesday, July 13, 2010

山 雲 樹 高速公路 照片


太平山 紫葉槭

太平山 雲

太平山 樹

高速公路 逆向腳踏車

高速公路 山

高速公路 雲

Wednesday, July 7, 2010

Echeneidae IDS 網頁操作介面

上一個版本發布後,便開始著手於網頁操作介面的設計
使用了大量的JavaScript結合基本的AJAX技術做了個簡單明瞭的操作介面

Dashboard,顯示出基本資料

點選View Log後,顯示出各個規則的記錄檔

點選規則後,顯示該規則的紀錄檔,一次顯示20筆

用上方按鈕可瀏覽上一頁或下一頁

瀏覽其他規則記錄檔

Saturday, July 3, 2010

Echeneidae IDS 2 Alpha 3 Release

感謝upside網友測試,發現一般直接使用ADSL的用戶在網路連結層方面定義不太一樣,已經加入支援PPPoE了

http://xcfileapp.appspot.com/download/echeneidae2alpha3.zip?fileid=1278147197.27

Echeneidae IDS 2 Alpha 2 Release

經過長時間的Debug後,我終於解決了那個隱藏的Bug,原來是對IP碎片封包組合出了點錯誤,導致IDS卡死(事實上也發現了我對IP碎片理解的錯誤,所以重組模組幾乎是重新改寫)

Alpha 2中我強化了簡陋的規則,目前能追蹤TCP連線,檢測TCP Scan跟UDP Scan(通過Nmap基礎測式),會將紀錄檔存在log資料夾下,並且加上時間和哪條規則觸發的詳細資訊

也修補了不少小地方的Bug,讓IDS更加穩定

目前還有的問題是,IP碎片重組後不會驗證是否所有碎片已到齊,這功能將會在下一版中加入

其它特色我在Echeneidae IDS 2 Alpha 1 Release已經說明了

使用方法有些改變,如下
  1. 由於會有一個packet.swap當暫存檔(610MB),所以建議至少準備1GB以上硬碟空間
    記憶體建議至少有128MB的空間(1G以上最好)
  2. 建議把IDS放在英文目錄下
  3. 需要Winpcap捕捉封包,並且需要Python 3.1.2(32bit版本,可裝在64bit OS上)來執行IDS
  4. 下載IDS http://xcfileapp.appspot.com/download/echeneidae2alpha2.zip?fileid=1278128714.7
請用記事本開啟IDS資料夾下的define.py,修改最後一行local_ip=[192,168,2,3],改為local_ip=[xxx,xxx,xxx,xxx](xxx為你的IP,注意中間不是用"."隔開,而是用","隔開)



接著雙擊echeneidae.py啟動IDS,如果無法開啟,請執行run.bat(裡面的python.exe路徑預設為C:\Python31\python.exe,如果你裝在別的路徑,請修改)

這時它會詢問你要監控哪一張網卡,請輸入上面列出網卡旁的編號


接著它會問你是否要把紀錄顯示在螢幕上(這樣會比較耗CPU),一般建議選0,不要顯示


Enter後,便會停住,這時IDS已經開始運作了,請不要關閉這個視窗(關閉它代表停止IDS)
要看紀錄可以去log資料下,會有紀錄檔


關於規則的寫法,我之後會公布,有興趣的人可以先去研究一下rule資料夾下的規則檔
基本上Python是這個IDS的效能致命傷,我已經盡量改善了,建議在多核心CPU上運行,這樣可以發揮經過設計的平行運算效能

Friday, July 2, 2010

RFC搞笑文件

今天在維基百科上看到了RFC原來會在愚人節發布搞笑的文件
雖然是搞笑,不過內容卻寫得很正式,好像真的一樣(甚至有些開發團隊為軟體加入功能支援該RFC文件)

e.g.
TCP心情標誌(下面對各種心情使用時機跟意義都有明確定義)