Thursday, December 30, 2010

用Intel VT作系統防護

大概前一個月就有這個想法利用Intel VT技術抵抗Rootkit

從Intel的文件(VMX的部分)看來,VT技術可以建立一個Non-Root狀態

進入Non-Root狀態前,就可以對這個狀態進行很多設定,例如無法關閉中斷還有設定各種觸發事件

在進入Non-Root後,就算是Ring0還是無法主動離開Non-Root,並且受到前面設定的限制因此可以用來保護像是SSDT表等等系統重要部分不被竄改

過要實現它,我必須得直接實機測試(虛擬機中沒VT支援),所以需要很多時間來重開電腦(一直BSOD)

大概等比較有空時再來實現看看

Friday, October 22, 2010

Sunday, September 26, 2010

AccessSandBox 新增Log功能

新的Log功能可以記錄在Sandbox中執行程式的行為
主要包含 檔案操作、登錄檔操作、Handle操作和程序的建立與終止

Monday, September 20, 2010

AccessSandBox 基於Windows權限設計的SandBox

AccessSandBox為一個透過控制SandBox中程序(Process)的權限,來達到隔離的效果。

它不像一般SandBox是透過模擬一個環境來隔離程序,它是透過控制了程序的權限,讓程序只能在電腦中的特定範圍(受控制範圍)中活動,如果有惡意行為的話,因為權限不足而無法對電腦進行破壞。

由於是透過Windows的權限設計,所以AccessSandBox本身並不需要任何的驅動程式,也不需進Ring0,僅透過安裝一個Service跟呼叫Windows權限相關API來進行控制。


目前的設計分成三種權限控制的層級:
  1. High Level:高度限制程序的權限,包括 降低Integrity Level為Low 、程序的UI權限將受到控制
  2. Normal Level:一般權限控制,程序的UI權限將受到控制
  3. Low Level:程序的UI權限將不會受到控制
上面三種層級皆包含了一些基本的權限控制(防止基本惡意行為破壞)

High Level

Normal Level

Low Level

Friday, September 17, 2010

使用LogonUser + CreateProcessAsUser 執行擁有不同Logon SID的程式

這是三個月前的一個瓶頸,在今天終於解決了。

Windows在User登入後,會建立Logon SID這個群組,加入一些關於程式之間互動的權限(例如PROCESS_TERMINATE),並且所有在登入後所執行的程式都會被強迫加入這個群組,使城市之間可以做一些基本互動。

但是在某些狀況下,我們並不希望該程式能和其他程式互動,所以希望它能不要或是加入不同的Logon SID來隔離。因此透過登入另一個帳戶並執行程式,似乎是個不錯的方法。

一開始使我測試CreateProcessWithLogonW 來達成這樣的效果,結果發現它雖然會使用另一個帳戶執行程式,但是卻使用當前帳戶的Logon SID,並沒有達成目的。
+
這兩天,我突然想到如果結合LogonUser +  CreateProcessAsUser 或許可以。
在呼叫CreateProcessAsUser時,必須在LocalSystem帳戶下才有足夠權限(不然會有1314錯誤),所以必須寫一個Service。

在Service中,先呼叫LogonUser取得別的帳戶的Token,接著必須設定Token中的SessionId(SetTokenInformation) 因為Service中的SessionId預設是0,一般使用者是不可見的,必須設定成當前使用者的SessionId。Window Station "WinSta0"和Desktop "Default"也必須設好權限讓LogonUser所登入的帳戶有權限存取。最後即可透過CreateProcessAsUser執行新程式,加入的也會是個不同LogonSID。

從下面兩張圖可以看到Test.exe擁有跟其他程式不同的Logon SID




程式碼片段:

void test(){
HANDLE hToken;
DWORD SessionId;

STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;

printf("%08x\n",LogonUser(L"xxxxx",
L"",
L"xxxxx",
LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT,
&hToken));

SessionId=1;
printf("%08x\n",SetTokenInformation(hToken,TokenSessionId,&SessionId,sizeof(DWORD)));

memset(&sInfo,0,sizeof(STARTUPINFO));
sInfo.cb=sizeof(STARTUPINFO);
sInfo.lpDesktop=L"WinSta0\\Default";
printf("%08x\n",CreateProcessAsUser(hToken,
L"F:\\Test.exe",
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&sInfo,
&pInfo));
printf("%08x\n",GetLastError());

return;
}

Sunday, September 12, 2010

Security Desktop 防止鍵盤側錄

這是最近在關於Windows Desktop部分的研究成果,寫了一個小工具
它透過建立一個特殊權限設定的Desktop,執行在這個桌面下的程式,在預設桌面中的鍵盤側錄程式是無法側錄的

執行畫面

AKLT測試

測試通過

Zemana Keylogger測試

測試通過

SpyShelter Keylogger測試

測試通過

Sunday, August 29, 2010

使用Volume Shadow Copy Service Bypass COMODO 進行檔案複製

Volume Shadow Copy Service(以下簡稱VSS) 是Windows提供的一種Snapshot服務。
在分割區(Volume)透過VSS 建立Snapshot後,往後可以進行還原動作。

另外VSS也提供將Snapshot映射的機制,所以使用者可以存取Snapshot中的檔案。
因此可以利用此特性,繞過COMODO 的檔案存取過濾,存取到被禁止的檔案。

使用COMODO Firewall進行測試

對C:\a.txt進行保護

VSS.exe為等一下要用的測試程式,設定為禁止存取C:\a.txt

如果直接對C:\a.txt進行複製,會出現拒絕存取的錯誤,確定檔案保護有效了

執行VSS.exe,跳出要存取VSS服務COM的警告訊息,允許

之後就沒詢問了,VSS.exe成功執行

最後可以看到C:\a.txt已經被複製到桌面了

Friday, August 20, 2010

IE從Google App Engine Respnse下載檔案問題 HTTP Cache-Control標頭

今天終於解決IE瀏覽器無法下載XC Google File Service檔案的問題了
原因出在Google App Engine在Response中預設會加入Cache-Control:no-cache標頭
導致IE瀏覽器下載失敗(資料其實已經下載到電腦了,只是無法跳出下載視窗)
可能是因為no-cache告知瀏覽器不要緩存該網頁資料,導致檔案下載到暫存資料夾後,被刪除

只要在回復函式中加入

del self.response.headers['Cache-Control']

即可解決

Sunday, August 8, 2010

XC Google File Service 多檔拖曳 AJAX動態上傳

這個建立在Google App Engine上的免費空間,新增一些特別的支援
目前進度還算不錯,應該快要可以上線了
  1. 多檔拖曳上傳,可以直接將多個檔案拖進瀏覽器(FireFox與Chrome支援)
  2. 檔案選取方塊也可多選上傳
  3. 有資料夾管理設計,可以方便管理大量檔案
 多檔拖曳上傳

一次選擇多檔

支援Unicode,目前測試可支援繁體中文、簡體中文、日文、俄文
使用AJAX上傳,可即時顯示上傳進度

資料夾管理功能

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筆

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

瀏覽其他規則記錄檔