53 lines
3.0 KiB
Markdown
53 lines
3.0 KiB
Markdown
### 做一个沙箱,有什么需要重定向的
|
||
|
||
**1. 文件系统**
|
||
|
||
这是最基本的重定向。一个恶意程序通常会读写文件、创建新文件或删除现有文件。你必须让它以为自己在操作真实的文件系统,但实际上,所有这些操作都被隔离在一个虚拟的、临时的环境中
|
||
|
||
- **重定向读写操作**:
|
||
- **拦截** `open`, `read`, `write`, `close` 等系统调用
|
||
- 将所有对宿主机文件的访问重定向到沙箱内部的**虚拟文件系统**或一个特定的临时文件夹
|
||
- 如果程序试图访问关键系统文件(如 `C:\Windows\System32`),应拒绝其请求或返回一个虚拟的、无害的版本
|
||
|
||
**2. 注册表**
|
||
|
||
在 Windows 环境下,注册表是恶意软件进行持久化和存储配置的关键
|
||
|
||
- **重定向注册表操作**:
|
||
- **拦截** `RegCreateKey`, `RegSetValue`, `RegOpenKey` 等注册表 API 调用
|
||
- 将所有写入操作重定向到沙箱内存中的一个**虚拟注册表**
|
||
- 当程序读取注册表时,先从虚拟注册表中查找,如果不存在,再从宿主机注册表读取,但绝不允许它修改宿主机注册表
|
||
|
||
**3. 网络通信**
|
||
|
||
恶意软件的另一大特征就是与外部服务器进行通信,例如下载其他恶意模块、发送窃取的数据或接收指令
|
||
|
||
- **重定向网络连接**:
|
||
- **拦截** `socket`, `connect`, `send`, `recv` 等网络系统调用
|
||
- 你可以选择将所有网络连接**完全禁止**,或者将它们重定向到一个**本地代理**,由代理来记录和控制所有流量
|
||
- 理想的沙箱会**伪造 DNS 解析**,将恶意域名指向一个本地 IP,然后让代理服务器来处理这些连接,从而捕获所有网络数据包,而不让它们真正离开宿主机
|
||
|
||
**4. 进程与线程**
|
||
|
||
许多恶意软件会创建新进程、注入代码或修改其他进程的内存以隐藏自身
|
||
|
||
- **重定向进程操作**:
|
||
- **拦截** `CreateProcess`, `CreateThread`, `InjectProcess`, `WriteProcessMemory` 等 API 调用
|
||
- 沙箱应监控所有新创建的进程,确保它们也运行在受控环境中。
|
||
- 对于进程注入,你可以直接**拒绝**这类行为,或者将其重定向到一个虚拟的环境,以防止对宿主机上其他进程的感染
|
||
|
||
**5. 系统信息**
|
||
|
||
为了躲避沙箱,恶意软件会查询系统信息来判断自己是否被监控。你需要对这些查询进行欺骗
|
||
|
||
- **重定向系统信息查询**:
|
||
- **拦截** `cpuid`, `GetSystemInfo` 等 API 调用
|
||
- 当恶意程序查询 CPU 制造商、内存大小或系统时间等信息时,你需要返回**虚假的值**,让它以为自己在一个真实的物理机环境中。比如,将 `VMware` 制造商字符串替换为 `GenuineIntel`,或者让系统时间流逝得更慢
|
||
|
||
**6. 渲染与屏幕**
|
||
|
||
某些恶意软件可能会尝试截屏或与桌面环境交互
|
||
|
||
- **重定向屏幕操作**:
|
||
- **拦截** `GetDC`, `BitBlt` 等与屏幕渲染相关的 API
|
||
- 你可以将截屏数据重定向到沙箱的临时文件,而不是让它访问真实的桌面内容 |