Skip to main content

绝对想不到,Chrome浏览器变成了最稳定后门


技术背景


 PEEP是一套面向Chromium内核浏览器的后渗透工具包,其伪装成书签类扩展Smart Bookmarks。当黑客或红队拿下目标系统权限之后,部署上这套组件,可在目标机器上建立持久稳定的系统级后门。一旦安装成功,扩展会每30秒用明文的HTTP协议向命令控制服务器轮询新任务,同时自动上传浏览历史、当前标签页、会话Cookie等数据。除此之外,还能在毫无察觉的情况下对网页注入脚本、截屏、读剪贴板, 当任务需要用到操作系统功能时,扩展还会唤起配套程序nm_host.exe,通过Chromium的Native Messaging机制在主机上执行Shell命令、浏览文件、枚举进程和服务。浏览器沙箱本来是用来隔离网页和系统的,这条通道一旦被利用,沙箱等于被从内部凿开一个口子。

PEEP的技术底子来自开源红队框架RedExt,后者也曾出现在GlassWorm相关攻击里。相比原版,PEEP补上了专用安装脚本、Native Messaging宿主、心跳上报、扩展自更新通道和更宽的指令集,已经是一套可独立部署的成品,而不是简单的脚本拼接。

image_1.jpg

核心技术原理


PEEP首先会使用一个脚本:install_silent.ps1用来打开开发者模式,让未上架商店的扩展也能加载进来,并通过注册表HKCU Extensions项和External Extensions JSON清单完成登记。到这一步,Smart Bookmarks的文件已经挂进浏览器配置里,但如果此时重启浏览器,用户仍可能看到未验证扩展的警告,扩展也可能处于待确认状态。

紧接着PEEP会执行第二个脚本:patch_secure_prefs.ps1,它改的是用户配置目录下的Secure Preferences文件。Chromium每次启动都会用文件里存的HMAC值校验扩展配置有没有被动过手脚,校验不过就会弹窗或把扩展禁掉。这个脚本伪造HMAC值,让浏览器误以为当前扩展状态是自己合法写入的。跑完这步再重启浏览器,Smart Bookmarks就会静默启用,界面上不会出现任何安装确认框。Linux上同类操作由patch_secure_prefs_linux.py完成,逻辑相同。

浏览器重新起来之后,扩展才开始真正工作。 background脚本读本地配置文件里的远端地址,向C2登记本机,然后进入每30秒轮询一次的循环。登记完不用等人下指令,Cookie、浏览历史、当前标签和URL、公网IP就会分批往外传;任务结果和心跳走不同接口回传,服务器还能远程推新版本,扩展拉取CRX更新包即可换壳。content.js同时挂到用户打开的每个页面上,截图、读剪贴板、往网页里注入脚本,这些都还在浏览器权限范围内,暂时碰不到操作系统。

如果用户后来把扩展删了,走另一条恢复路径。 force_enable.ps1专门干这件事,不必再动Secure Preferences。它会从Preferences的external_uninstalls列表里抹掉卸载记录,确认CRX包还在%LOCALAPPDATA%PEEPcrx,再走一遍注册表和External Extensions登记,最后重启浏览器把扩展拉回来。三个脚本因此分工明确:install_silent.ps1开安装通道,patch_secure_prefs.ps1让首次落地静默生效,force_enable.ps1对付被人删掉之后的再注册。

除了脚本,PEEP还留了别的退路。企业环境里若启用了ExtensionInstallForcelist策略,攻击者可以把恶意扩展ID和正规企业插件写进同一条策略,员工很难从名字上区分;ScriptCache回退则让扩展在部分清理场景下仍有机会复原。

浏览器权限用尽之后,才轮到系统侧组件。 扩展清单里注册了com.peep.lab,对应本机上的nm_host.exe。Chrome和Edge给合法扩展留过一条和本地程序通信的官方管道,密码管理器、安全类插件正常会用这条途径调用系统能力。PEEP把Shell命令、文件读写、进程和服务枚举交给这个exe执行,运行权限和普通登录用户相同,但调用入口藏在已签名的浏览器进程里,终端防护如果只观察磁盘上新出现的陌生exe,这条路径很容易忽略掉。

远端一侧,C2除了日常收发任务,还在5001端口提供/login管理面板,/health接口甚至不登录也能看在线情况。通信走明文HTTP,没有TLS,同一局域网内抓包理论上能看到扩展上报的内容。

image_2.jpg

攻击流程还原

PEEP的完整链条可以按阶段还原:

攻击阶段
常见诱饵/入口
谁容易中招
最坏影响
初始失陷
钓鱼附件、远控木马、供应链投毒、弱口令RDP
未打补丁的办公电脑、开发测试机、能装软件的普通用户
攻击者获得管理员或用户级代码执行
扩展植入
静默PowerShell、伪造Secure Preferences、企业策略强装
允许侧载扩展、未限制脚本执行的环境
Smart Bookmarks扩展常驻且自动启用
数据盗取
扩展自动轮询/api/exfil
所有使用该浏览器配置的用户
Cookie与历史外泄,账号可被劫持
页面操控
content.js全站注入
访问网银、邮箱、SaaS后台的用户
页面篡改、凭据钓鱼、剪贴板替换
系统穿透
nm_host.exe经Native Messaging
同一Windows/Linux工作站
主机命令执行、文件读写、内网探测

第一阶段没有PEEP参与。攻击者用任意已有手段拿下主机,这一步在国内企业环境里并不稀奇:员工点开伪装成发票的压缩包、开发机从不可信源拉了带后门的构建脚本、或者VPN入口长期共用弱密码,都可能留下一个能跑PowerShell的后门。

第二阶段才是PEEP登场。install_silent.ps1打开侧载通道后,CRX被装进本地目录,patch_secure_prefs.ps1篡改Secure Preferences让扩展看起来像是浏览器自己信任的配置。用户打开扩展管理页,可能看到一个名字还像正经工具的书签扩展,状态却是已启用。若企业IT用ExtensionInstallForcelist统一下发插件,攻击者也可以把恶意ID写进同一策略键值,和合法企业扩展混在一起。

第三阶段,扩展注册完就开始30秒一次的心跳和命令轮询。即便用户当时没打开敏感网站,background脚本仍会上传环境元数据。一旦用户登录淘宝卖家中心、企业微信网页版、GitHub或各类管理后台,Cookie和活跃URL就会进入C2的507条记录池。明文HTTP传输意味着中间网络设备若做日志留存,事后可能留下取证线索,但对用户本身没有即时保护。

第四阶段,content.js在所有匹配页面上运行。攻击者可以远程下截图指令、读取剪贴板里刚复制的密码或API Key、向银行或OA页面注入额外脚本。这类操作不需要Native Messaging,全程在浏览器权限内完成,界面看起来可能一切正常。

第五阶段,当攻击者需要横向移动或落地工具时,C2下发需要系统权限的任务,扩展唤起nm_host.exe。Native Messaging是Chrome官方给合法扩展与本地程序通信的通道,杀软通常不会拦截浏览器发起的这条管道。exe在用户上下文里执行命令,可以列目录、找SSH密钥、探测内网服务,相当于把浏览器变成了轻量远控客户端。

image_3.jpg

排查及修复方案

排查步骤(Windows):

  1. 打开Chrome或Edge扩展管理页,搜索ID ejkndncpkdcjcikfhiamcdehdoegilbj,或名称Smart Bookmarks,发现即卸载并删除相关数据。

  2. 检查目录 %LOCALAPPDATA%PEEPcrx 是否存在,整个文件夹删除。

  3. 在文件系统搜索 nm_host.exe,删除文件并检查Native Messaging注册表项 com.peep.lab(通常在HKCU Software相关Chrome/Edge Native Messaging Hosts路径下)。

  4. 查看 %LOCALAPPDATA%GoogleChromeUser Data 或 %LOCALAPPDATA%MicrosoftEdgeUser Data 下Secure Preferences和Preferences是否近期被异常修改,可与干净机器对比或重装浏览器用户配置。

  5. 在注册表 HKCUSoftwareGoogleChromeExtensions 或Edge对应路径下,确认无上述恶意ID残留。

排查步骤(Linux): 检查Chrome配置目录下是否存在patch_secure_prefs_linux.py执行痕迹,扩展目录与Native Messaging manifest中是否注册com.peep.lab。

恢复动作:对所有在该浏览器登录过的网站执行退出并重新登录,优先改绑二次验证;直接删除Cookie和站点数据比单点改密码更彻底。企业环境应推送扩展白名单策略,禁止未收录ID安装;PowerShell执行策略和脚本块日志应开启,便于发现install_silent.ps1一类落地行为。终端检测规则可增加对Native Messaging宿主异常注册和%LOCALAPPDATA%PEEPcrx路径的监控。

以下脚本可作本地检查:

import jsonimport osimport platformfrom pathlib import Path
SUSPICIOUS_ID = "ejkndncpkdcjcikfhiamcdehdoegilbj"SUSPICIOUS_NAME = "smart bookmarks"PEEP_CRX = Path(os.environ.get("LOCALAPPDATA", "")) / "PEEPcrx"
def chrome_prefs_roots():    base = Path(os.environ.get("LOCALAPPDATA", ""))    if platform.system() == "Windows":        yield base / "Google/Chrome/User Data"        yield base / "Microsoft/Edge/User Data"    else:        yield Path.home() / ".config/google-chrome"        yield Path.home() / ".config/microsoft-edge"
def iter_extensions(prefs_file: Path):    try:        data = json.loads(prefs_file.read_text(encoding="utf-8"))    except (OSError, json.JSONDecodeError):        return    settings = data.get("extensions", {}).get("settings", {})    for ext_id, meta in settings.items():        name = (meta.get("manifest", {}) or {}).get("name", "")        yield ext_id, name, str(prefs_file.parent)
def main():    hits = []    for root in chrome_prefs_roots():        for profile in root.glob("*/Preferences"):            for ext_id, name, loc in iter_extensions(profile):                if ext_id == SUSPICIOUS_ID or SUSPICIOUS_NAME in name.lower():                    hits.append((ext_id, name, loc))    if PEEP_CRX.exists():        print(f"[!] 发现PEEP本地目录: {PEEP_CRX}")    if hits:        print("[!] 可疑扩展:")        for row in hits:            print("   ", row)    else:        print("[OK] 未在Preferences中发现Smart Bookmarks / 已知恶意ID")
if __name__ == "__main__":    main()

将上述脚本保存为 check_peep_ext.py,在终端执行 python check_peep_ext.py 即可快速扫描本机配置文件。若输出告警,再按前文步骤手工清理Native Messaging注册和PEEPcrx目录。


image_4.jpg


IOC


C2 IP : 206.237.30.232

域名: xfjcc.fun

端口: 5001



(全文完)