Saturday, June 30, 2012

部份完成syscall open虛擬化


LASB(Linux Access SandBox)完成部份syscall open虛擬化

透過對於inode number的紀錄和處理,解決了ASB開發時遇到的FileSystem虛擬化問題,完成模擬
File and Dictionary
Symbolic Link
Hard Link

並透過NTFS的Open ID,此方法可以應用在ASB上解決問題


Thursday, January 19, 2012

Plextor 128GB M2P

外包裝




打開盒子




SSD本體




裝於筆電上,由於晶片組是HM55,需經過調整才能發揮完全效能

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\5d76a2ca-e8c0-402f-a133-2158492d58ad]
更改 Attributes 為 0
變更進階電源設定,處理器閒置停用改為停用閒置

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\intelppm]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Processor]
Start改為4

測試平台:
Acer 4745G
SATA2 Intel RST 11.0.0.1032
Windows 7 64bit

調整前(C槽為安裝作業系統分割區)



調整後(並且在C槽安裝一些軟體和系統更新後測試)

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;
}