686f6c61/process-cloak
GitHub: 686f6c61/process-cloak
一款通过将系统运行进程重命名为合法系统服务名称,来规避基于进程名称扫描检测的网络安全防御工具。
Stars: 0 | Forks: 0
# process-cloak
一款用于伪装操作系统正在运行的进程的网络安全防御工具。某些软件会通过将活动进程的名称与已知程序的黑名单进行比对,来对计算机上打开的应用程序进行盘点。process-cloak 会将这些进程重命名为看似合法的系统服务名称,使得真实应用程序对任何基于进程名称的扫描变得不可见。
## 问题所在
第三方软件可以列出计算机上的活动进程,以识别:
- 正在使用哪个浏览器(Chrome, Firefox, Brave, Edge, Opera...)
- 是否打开了安全工具(Burp Suite, OWASP ZAP)
- 是否在使用远程控制(TeamViewer, AnyDesk, Parsec)
- 是否在虚拟机内运行(VirtualBox, VMware)
- 打开了什么编辑器或 IDE(VS Code, PyCharm, Sublime Text, Eclipse)
- 正在运行什么通信工具(Slack, Teams, Telegram, Discord)
- 是否有屏幕录像机或虚拟摄像头(OBS, ManyCam, Bandicam)
其机制很简单:该软件获取操作系统的进程列表,并将每个名称与已知应用程序的数据库进行比对。如果列表中出现了 `chrome.exe` 或 `firefox`,就会被记录下来。
## 解决方案
**process-cloak** 会对进程进行重命名,使其看起来像合法的操作系统服务。扫描 `chrome.exe` 的扫描器将会看到 `RuntimeBroker_a3f2.exe`。扫描 `firefox` 的扫描器将会看到 `xdg_session_b4d9`。
程序仍会正常运行,但其真实名称对于任何基于进程名称的检测工具来说都是不可见的。
## 工作原理
### 检测机制分析
进程扫描软件的工作方式如下:
```
// Carga una lista de programas prohibidos
const bannedList = bannedPrograms.map(name => name.toLowerCase());
// Obtiene todos los procesos del sistema
const processes = await systeminformation.processes();
// Compara cada proceso por nombre (case-insensitive)
processes.forEach(process => {
if (bannedList.includes(process.name.toLowerCase())) {
// DETECTADO - marca el proceso
}
});
```
扫描器**不计算 hash**,**不验证数字签名**,**不分析二进制文件的内容**,也不检查进程内存。它仅仅是比较文本字符串。只要更改进程名称,就足以让它在扫描器中隐形。
### Linux 上的方法
1. 定位程序的真实二进制文件(例如:`/usr/lib/firefox/firefox`)
2. 在 `~/.process-cloak/lib/<伪装名称>/` 中创建一个镜像目录
3. 为原程序的所有库文件创建 symlink
4. 使用伪装名称创建二进制文件的 hardlink(或副本)
5. 关闭原始进程
6. 从镜像目录启动副本,并保留原始参数和工作目录
`/proc/PID/comm` 中的 `comm` 字段(即扫描器读取的内容)会显示伪装后的名称。程序能正常运行,因为库文件指向的是原始文件。
### Windows 上的方法
1. 定位程序真实的可执行文件 (.exe)
2. 将该 .exe 复制到 `%USERPROFILE%\.process-cloak\`,并重命名为伪装名称
3. 关闭原始进程
4. 启动副本
Windows 会在任务管理器、`tasklist` 和 `Get-Process` 中显示所运行的 .exe 文件的名称。如果它叫 `RuntimeBroker_a3f2.exe`,那么任何扫描器看到的就是这个名字。
### 生成的伪装名称
这些名称并非明显的随机字符串。它们是基于真实的操作系统服务前缀生成的:
| 系统 | 生成的名称示例 |
|---------|-------------------------------|
| Linux | `sys_worker_a3f2`, `dbus_helper_7c1e`, `pulse_worker_b4d9`, `xdg_session_e9b1` |
| Windows | `svchost_a3f2.exe`, `RuntimeBroker_7c1e.exe`, `SearchProtocol_b4d9.exe`, `WmiPrvSE_e9b1.exe` |
系统管理员看到这些名称时,会把它们误认为是合法的服务。
## 两种使用模式
### 模式 A:自动扫描和保护
主要流程。该脚本会自动扫描活动进程,将它们与包含 164 个已知应用程序的数据库进行交叉比对,并警告哪些进程会被检测到:
```
$ ./process-cloak.sh
Se han detectado 4 procesos que un escáner podría identificar:
PID 1423 firefox (Navegadores web)
PID 2891 code (Editores de código)
PID 3102 spotify (Reproductores multimedia)
PID 4521 slack (Herramientas de conversación)
¿Qué deseas hacer?
[1] Camuflar TODOS
[2] Elegir cuáles camuflar
```
结果:
```
firefox -> xdg_session_b4d9 [OK]
code -> gsd_service_7c1e [OK]
spotify -> pulse_worker_a8f3 [OK]
slack -> dbus_helper_2d4a [OK]
Cuando termines, vuelve a ejecutar este script
para restaurar los nombres originales.
```
### 模式 B:从目录中启动伪装后的应用程序
如果应用程序尚未打开,你可以直接使用伪装名称启动它:
```
Categorías:
[1] Procesadores de texto (3 apps)
[2] Navegadores web (5 apps)
[3] Herramientas de conversación (7 apps)
...
> Navegadores web > Mozilla Firefox
Se lanzará como: xdg_session_b4d9
¿Lanzar ahora? [Sí]
Firefox lanzado como xdg_session_b4d9
PID: 5678
```
## 应用程序数据库
`apps-db.json` 文件包含 164 个程序,分为 17 个类别:
| 类别 | 程序数量 | 示例 |
|-----------|-----------|----------|
| 文字处理 | 10 | Word, Notepad++, Gedit, Kate, Pages |
| PDF 阅读器 | 15 | Acrobat, Foxit, Evince, Okular, Sumatra |
| 电子表格 | 3 | Excel, Numbers, JASP |
| 邮件客户端 | 4 | Outlook, Thunderbird, Mail, Airmail |
| 网页浏览器 | 18 | Chrome, Firefox, Brave, Edge, Safari, Opera |
| 通信工具 | 11 | Teams, Slack, Discord, Telegram, Zoom, WhatsApp |
| 虚拟摄像头 | 19 | OBS, ManyCam, Snap Camera, XSplit, DroidCam |
| 文件管理器 | 8 | Explorer, Finder, Nautilus, Dolphin |
| 多媒体播放器 | 8 | VLC, Spotify, iTunes, Audacity |
| 演示文稿 | 2 | PowerPoint, Keynote |
| 截图 / 录屏 | 29 | ShareX, Greenshot, Loom, Bandicam, OBS |
| 远程控制 | 7 | TeamViewer, AnyDesk, Parsec, Barrier |
| 渗透测试 | 2 | Burp Suite, OWASP ZAP |
| 代码编辑器 | 14 | VS Code, PyCharm, Sublime Text, Eclipse, MATLAB |
| 虚拟机 | 3 | VirtualBox, VMware, Parallels |
| 数据库客户端 | 8 | DataGrip, MySQL Workbench, HeidiSQL, TablePlus |
| 开源办公软件 | 4 | LibreOffice, OpenOffice, WPS Office |
## 环境要求
### Linux
- **jq**: JSON 处理器 (`sudo apt install jq`)
- **whiptail**: 终端交互式菜单(通常已预装)
- **file**, **xxd**, **shuf**, **pgrep**: 大多数桌面发行版已预装 (`sudo apt install file xxd coreutils procps`)
### Windows
- **PowerShell 5.1** 或更高版本(Windows 10/11 已内置)
- 无需其他额外软件
## 用法
### Linux
```
chmod +x process-cloak.sh
./process-cloak.sh
```
### Windows
```
cd C:\ruta\a\process-cloak
powershell -ExecutionPolicy Bypass -File .\process-cloak.ps1
```
## 主菜单
```
[1] Escanear y camuflar procesos expuestos
[2] Restaurar procesos camuflados
[3] Lanzar aplicación camuflada (catálogo)
[4] Ver estado actual
[5] Verificar exposición (qué ve un escáner)
[0] Salir
```
## 已知限制
### Linux 上的 snap 应用程序
作为 snap(Ubuntu Snap Store)安装的程序在隔离的 sandbox 中运行。它们的二进制文件无法复制或在 snap 环境之外运行。
**解决方案**:安装该程序的 .deb 版本。以 Firefox 为例:
```
sudo snap remove firefox
sudo add-apt-repository ppa:mozillateam/ppa
sudo apt install firefox
```
该脚本会自动检测 snap 进程并提醒用户。
### Windows 上的 UWP 应用程序
从 Microsoft Store 安装的应用程序 (UWP) 在受 Windows 保护的 sandbox 中运行。它们的可执行文件位于 `C:\Program Files\WindowsApps\`,这是一个权限受限的文件夹。这包括 Windows 11 的记事本、计算器以及任何来自 Store 的应用。
**解决方案**:从程序官网下载经典的 .exe 版本。
该脚本会检测 UWP 应用并显示 `[UWP - no camuflable]` 标签。
### macOS(不受支持)
macOS 存在安全限制,无法可靠地伪装进程:
- **Hardened Runtime**:像 Firefox 这样的应用程序启用了 Library Validation。macOS 会在运行时验证代码签名,并终止 (SIGKILL) 任何被修改的二进制副本。不可能在无效化签名的情况下重命名可执行文件。
- **App Store sandbox**:从 Mac App Store 下载的应用程序(WhatsApp, Pages, Numbers 等)受 sandbox 保护,不允许复制或重新启动其二进制文件。
- **Code Signing enforcement**:即使使用 `codesign --force --sign -` 进行临时签名,许多应用程序也会验证其自身完整性并拒绝启动。
- **bash 兼容性**:macOS 附带的是 bash 3.2(2007),不支持关联数组和其他现代功能。需要通过 Homebrew 安装 bash 5+ 版本。
在开发过程中,我们在搭载 Apple Silicon (arm64) 的 Mac 上进行了测试。在受测的应用程序(Chrome, Firefox, Brave, Telegram, WhatsApp)中:
| 应用程序 | 结果 | 原因 |
|------------|-----------|--------|
| Google Chrome | 正常运行 | 轻量级启动器二进制文件,接受临时签名 |
| Brave Browser | 正常运行 | 与 Chrome 相同的内核 |
| Telegram | 正常运行 | 没有严格的 hardened runtime |
| Firefox | 失败 | Hardened runtime + Library Validation (SIGKILL) |
| WhatsApp | 失败 | App Store sandbox |
由于仅适用于部分应用程序,且无法保证普遍兼容性,因此决定在此版本中不包含 macOS。可靠的实现需要对每个应用程序的签名验证机制进行逆向工程,或者使用代码注入技术(DYLD_INSERT_LIBRARIES),而这些技术可能会被 SIP (System Integrity Protection) 阻止。
### 多进程
像 Chrome 或 Firefox 这样的应用程序会启动多个子进程。主进程会被伪装,但根据应用程序启动它们的方式,子进程可能会保留原始名称。
### 持久化
伪装效果在重启后不会保留。登录时,进程会再次以其原始名称启动。每次重启后都需要重新运行该脚本。
### 无法隐藏的内容
- **二进制文件的 hash**:可执行文件的内容保持不变
- **网络连接**:如果进程打开了已知端口,流量会暴露其身份
- **内存特征**:RAM 内存分析仍能看到原始字符串
- **Linux 上的 `/proc/PID/exe`**:拥有 root 权限即可查看真实的二进制文件
这些限制不会影响基于进程名称的自动扫描器(这是主要用例),但对此保持清醒认识是非常重要的。
## 项目结构
```
process-cloak/
process-cloak.sh Script principal Linux (bash + whiptail)
process-cloak.ps1 Script principal Windows (PowerShell)
apps-db.json Base de datos de 164 aplicaciones en 17 categorías
fake-names.json Pool de 50 nombres falsos realistas (25 por SO)
INSTRUCCIONES-LINUX.txt Guía paso a paso para Linux
INSTRUCCIONES-WINDOWS.txt Guía paso a paso para Windows
README.md Esta documentación
CHANGELOG.md Historial de cambios
LICENSE MIT
```
## 验证
### Linux
```
# 检查进程是否不可见
ps -eo pid,comm | grep -i firefox
# (无)
# 查看伪装进程
ps -eo pid,comm | grep xdg_session
# 5678 xdg_session_b4d9
```
### Windows
```
# 检查进程是否不可见
Get-Process | Where-Object { $_.Name -ieq "chrome" }
# (无)
# 使用 tasklist 检查
tasklist /fi "imagename eq chrome.exe"
# 没有正在运行的任务
```
## 常见问题
**问:杀毒软件会将此工具检测为恶意软件吗?**
答:不会。该脚本不注入代码,不修改其他进程的内存,也不使用 rootkit 技术。它只是复制一个可执行文件并重命名,然后运行它。这等同于手动重命名一个文件。
**问:它能应对检查 hash 的扫描器吗?**
答:不能。如果扫描器计算可执行文件的 SHA-256,它会检测到内容与原始程序完全相同,即使名称不同。然而,基于进程名称的扫描器(占大多数)不会进行这种验证。
**问:我可以将自己的应用程序添加到数据库中吗?**
答:可以。编辑 `apps-db.json` 并按以下格式添加条目:
```
{
"programName": "Mi aplicación",
"win32": ["miapp.exe"],
"darwin": ["Mi aplicación"],
"linux": ["miapp"]
}
```
**问:如果我在不还原的情况下关闭脚本会怎样?**
答:伪装后的进程将继续正常运行。再次运行脚本时,它会检测到这些伪装的进程并提供还原选项。
**问:我需要管理员权限吗?**
答:在大多数情况下不需要。只有在伪装以其他用户或 SYSTEM/root 身份运行的进程时才需要。
**问:伪装会占用多少磁盘空间?**
答:这取决于可执行文件的大小。对于大多数应用程序来说,只需几 MB。还原时,副本会被自动删除。
## 许可证
MIT
标签:AI合规, Libemu, 应用安全