当前位置: 首页 > news >正文

Chromium 沙盒Sandbox源码介绍(3)

本篇主要说下沙箱的环境变量策略【Environment】:

一、环境变量:

getEnvironmentStrings 函数返回指向内存块的指针,该内存块包含调用进程的环境变量 (系统和用户环境变量)

getEnvironmentStrings 函数 (processenv.h) - Win32 apps | Microsoft Learn

使用例子参考 :更改环境变量 - Win32 apps | Microsoft Learn

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>#define BUFSIZE 4096int _tmain()
{TCHAR chNewEnv[BUFSIZE];LPTSTR lpszCurrentVariable; DWORD dwFlags=0;TCHAR szAppName[]=TEXT("ex3.exe");STARTUPINFO si;PROCESS_INFORMATION pi;BOOL fSuccess; // Copy environment strings into an environment block. lpszCurrentVariable = (LPTSTR) chNewEnv;if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, TEXT("MySetting=A")))){printf("String copy failed\n"); return FALSE;}lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1; if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, TEXT("MyVersion=2")))) {printf("String copy failed\n"); return FALSE;}// Terminate the block with a NULL byte. lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1; *lpszCurrentVariable = (TCHAR)0; // Create the child process, specifying a new environment block. SecureZeroMemory(&si, sizeof(STARTUPINFO));si.cb = sizeof(STARTUPINFO);#ifdef UNICODEdwFlags = CREATE_UNICODE_ENVIRONMENT;
#endiffSuccess = CreateProcess(szAppName, NULL, NULL, NULL, TRUE, dwFlags,(LPVOID) chNewEnv,   // new environment blockNULL, &si, &pi); if (! fSuccess) {printf("CreateProcess failed (%d)\n", GetLastError());return FALSE;}WaitForSingleObject(pi.hProcess, INFINITE);return TRUE;
}

二、环境变量控制策略实现:

sandbox\win\src\target_process.cc

在创建的进程根据测试限制其只能访问指定环境变量:

    // Only copy a limited list of variables to the target from the broker's

    // environment. These are

    //  * "Path", "SystemDrive", "SystemRoot", "TEMP", "TMP": Needed for normal

    //    operation and tests.

    //  * "LOCALAPPDATA": Needed for App Container processes.

    //  * "CHROME_CRASHPAD_PIPE_NAME": Needed for crashpad.

  if (startup_info_helper->IsEnvironmentFiltered()) {wchar_t* old_environment = ::GetEnvironmentStringsW();if (!old_environment) {return SBOX_ERROR_CANNOT_OBTAIN_ENVIRONMENT;}// Only copy a limited list of variables to the target from the broker's// environment. These are//  * "Path", "SystemDrive", "SystemRoot", "TEMP", "TMP": Needed for normal//    operation and tests.//  * "LOCALAPPDATA": Needed for App Container processes.//  * "CHROME_CRASHPAD_PIPE_NAME": Needed for crashpad.static constexpr std::wstring_view to_keep[] = {L"Path",L"SystemDrive",L"SystemRoot",L"TEMP",L"TMP",L"LOCALAPPDATA",L"CHROME_CRASHPAD_PIPE_NAME"};new_env = FilterEnvironment(old_environment, to_keep);::FreeEnvironmentStringsW(old_environment);}bool inherit_handles = startup_info_helper->ShouldInheritHandles();PROCESS_INFORMATION temp_process_info = {};if (!::CreateProcessAsUserW(lockdown_token_.get(), exe_path, cmd_line.get(),nullptr,  // No security attribute.nullptr,  // No thread attribute.inherit_handles, flags,new_env.empty() ? nullptr : std::data(new_env),nullptr,  // Use current directory of the caller.startup_info->startup_info(),&temp_process_info)) {*win_error = ::GetLastError();return SBOX_ERROR_CREATE_PROCESS;}bas

三、看下浏览器进程的环境变量情况截图:

1、主进程环境变量:

2、GPU进程环境变量:

3、network进程环境变量: 

4、storage service进程环境变量:

5、备用渲染进程受沙箱环境变量策略限制: 

  只有受限的Path", "SystemDrive", "SystemRoot", "TEMP", "TMP"等。

6、新标签进程受沙箱环境变量策略限制:

  只有受限的Path", "SystemDrive", "SystemRoot", "TEMP", "TMP"等。

7、辅助框架进程受沙箱环境变量策略限制:

  只有受限的Path", "SystemDrive", "SystemRoot", "TEMP", "TMP"等。

四、总结: 


http://www.mrgr.cn/news/57071.html

相关文章:

  • 关于容器docker使用基本命令
  • Kafka 解决消息丢失、乱序与重复消费
  • 如何实现金蝶商品数据集成到电商系统的SKU
  • 数据结构:数字统计
  • 2021[最强大脑]卢菲菲-记忆宫殿直播课
  • iTOP-RK3568开发板独立NPU通过算法加特应用到以下的场景
  • ppt组合为一个整体怎么做?2个ppt常用操作和技巧分享!
  • QT-子项目管理
  • linux-牛刀小试
  • 一个非常实用的 Vue 拖拽组件,成熟、稳定且功能丰富的拖拽库,效率与灵活性的双重提升(带私活源码)
  • 数据库聚合函数
  • 等价文件名绕过
  • 技术速递|Microsoft.Extensions.AI 预览版简介 – 适用于 .NET 的统一 AI 构建块
  • 10.18做题记
  • C#中的LINQ之美:优雅的数据查询与操作
  • 云轴科技ZStack信创云平台助力上海科技大学实现信创业务落地
  • Redis学习文档(Redis基本数据类型【Hash、Set】)
  • java版鸿鹄招投标系统源码 招标采购系统源码 询比价投标平台源码
  • Android按钮Button
  • SSM-Springboot笔记(7)- Servlet3.0和SpringBoot过滤器和拦截器
  • OPPO携手比亚迪共同探索手机与汽车互融新时代
  • 056_基于python新闻采集与订阅平台
  • NC 单据模板自定义项 设置参照,比如部门参照、自定义参照等
  • 迁移学习和在线学习小结
  • macOS下QuickTime player+Blackhole录视频只录制系统声音
  • 数学之美——程序员的专属浪漫