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槽安裝一些軟體和系統更新後測試)
打開盒子
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
Monday, September 20, 2010
AccessSandBox 基於Windows權限設計的SandBox
AccessSandBox為一個透過控制SandBox中程序(Process)的權限,來達到隔離的效果。
它不像一般SandBox是透過模擬一個環境來隔離程序,它是透過控制了程序的權限,讓程序只能在電腦中的特定範圍(受控制範圍)中活動,如果有惡意行為的話,因為權限不足而無法對電腦進行破壞。
由於是透過Windows的權限設計,所以AccessSandBox本身並不需要任何的驅動程式,也不需進Ring0,僅透過安裝一個Service跟呼叫Windows權限相關API來進行控制。
它不像一般SandBox是透過模擬一個環境來隔離程序,它是透過控制了程序的權限,讓程序只能在電腦中的特定範圍(受控制範圍)中活動,如果有惡意行為的話,因為權限不足而無法對電腦進行破壞。
由於是透過Windows的權限設計,所以AccessSandBox本身並不需要任何的驅動程式,也不需進Ring0,僅透過安裝一個Service跟呼叫Windows權限相關API來進行控制。
目前的設計分成三種權限控制的層級:
- High Level:高度限制程序的權限,包括 降低Integrity Level為Low 、程序的UI權限將受到控制
- Normal Level:一般權限控制,程序的UI權限將受到控制
- 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。
程式碼片段:
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;
}
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;
}
Subscribe to:
Posts (Atom)







