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已經被複製到桌面了