Sandboxie
在手机上对于沙盒我们再熟悉不够了,我们的每个应用的运行在独立的空间中,避免手机中不同应用的相互影响。
在Windows
下,如果在处理某些不太确定为安全的程序,可以先在沙盒中独立运行。
Sandboxie 是一款基于沙盒的隔离软件,适用于 32 位和 64 位基于 Windows NT 的操作系统(Windows 7 或更高版本,32 位或 64 位)。它创建了一个类似于沙盒的隔离操作环境,可以在其中运行或安装应用程序,而无需永久修改本地和映射驱动器或 Windows 注册表。隔离的虚拟环境允许对不受信任的程序和网上冲浪进行受控测试。
Sandboxie
上,github在这里。
Sandboxie 有两种版本,Plus 和 Classic。它们都共享相同的核心组件,这意味着它们具有相同级别的安全性和兼容性。不同的是用户界面中功能的可用性。
Plus build 有一个基于 Qt 的现代 UI,它支持自项目开源以来添加的所有新功能:
- 快照管理器 - 此功能需要任何框的副本,以便在需要时恢复
- 维护模式 - 它允许在需要时卸载/安装/启动/停止 Sandboxie 驱动程序和服务
- 便携模式 - 您可以运行安装程序并选择将所有文件提取到一个目录
- 用于阻止访问 Windows 组件(如打印机后台处理程序和剪贴板)的其他 UI 选项
- 启动/运行和 Internet 访问限制的更多自定义选项
- 终止所有盒装进程的全局热键
- 每个沙盒都有一个新的防火墙,支持 Windows 过滤平台 (WFP)
Sandboxie的使用
Sandboxie
的使用也比较简单,通过安装包直接安装软件,新建一个沙盒环境启动程序,Sandboxie
的使用也比较简单,Sandboxie
的一大有点就是他很小,但是功能还是很强的。
源代码分析
Sandboxie
用的是c语言进行编写,代码中中不仅包含着上层的地面,还包括了驱动相关的代码。创建沙盒过程的代码如下:
_FX BOX *Box_CreateEx(
POOL *pool, const WCHAR *boxname,
const WCHAR *sidstring, ULONG session_id,
BOOLEAN init_paths)
{
BOX *box;
box = Box_Alloc(pool, boxname, session_id);
if (! box)
return NULL;
if (! Box_InitKeys(pool, box, sidstring, session_id)) {
Box_Free(box);
return NULL;
}
if (! Box_InitConfExpandArgs(pool, box)) {
Box_Free(box);
return NULL;
}
if (init_paths) {
BOOLEAN ok;
Conf_AdjustUseCount(TRUE);
ok = Box_InitPaths(pool, box);
Conf_AdjustUseCount(FALSE);
if (! ok) {
Box_Free(box);
return NULL;
}
}
return box;
}
启动驱动的部分 代码:
_FX NTSTATUS DriverEntry(
IN DRIVER_OBJECT *DriverObject,
IN UNICODE_STRING *RegistryPath)
{
BOOLEAN ok = TRUE;
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
//
// initialize global driver variables
//
Driver_Object = DriverObject;
Driver_Object->DriverUnload = NULL;
RtlInitUnicodeString(&Driver_Altitude, Altitude_Str);
if (ok)
ok = Driver_CheckOsVersion();
if (ok) {
Driver_Pool = Pool_Create();
if (! Driver_Pool) {
Log_Msg0(MSG_1104);
ok = FALSE;
}
}
if (ok)
ok = Driver_InitPublicSecurity();
if (ok) {
Driver_RegistryPath =
Mem_AllocStringEx(Driver_Pool, RegistryPath->Buffer, TRUE);
if (! Driver_RegistryPath)
ok = FALSE;
}
if (ok)
ok = Driver_FindHomePath(RegistryPath);
MyValidateCertificate();
//
// initialize simple utility modules. these don't hook anything
//
if (ok)
ok = Obj_Init();
if (ok)
ok = Conf_Init();
if (ok)
ok = Dll_Init();
if (ok)
ok = Syscall_Init();
if (ok)
ok = Session_Init();
if (ok)
ok = Driver_FindMissingServices();
if (ok)
ok = Token_Init();
//
// initialize modules. these place hooks into the system. hooks
// become active as soon as installed. the Process module must be
// initialized first, because it initializes the process list
//
if (ok)
ok = Process_Init();
if (ok)
ok = Thread_Init();
if (ok)
ok = File_Init();
if (ok)
ok = Key_Init();
if (ok)
ok = Ipc_Init();
if (ok)
ok = Gui_Init();
//
// create driver device for servicing user mode requests
//
if (ok)
ok = Api_Init();
//
// initializing Windows Filtering Platform callouts
//
if (ok)
ok = WFP_Init();
//
// finalize of driver initialization
//
Dll_Unload(); // released dlls loading during init
if (! ok) {
Log_Msg1(MSG_DRIVER_ENTRY_FAILED, Driver_Version);
SbieDrv_DriverUnload(Driver_Object);
return STATUS_UNSUCCESSFUL;
}
Driver_FullUnload = FALSE;
Log_Msg1(MSG_DRIVER_ENTRY_OK, Driver_Version);
return STATUS_SUCCESS;
}