深入理解白加黑
字数 3004 2025-08-29 08:30:05
深入理解白加黑技术:原理、应用与防御
一、白加黑技术介绍
1. 基本概念
白加黑技术是一种网络安全领域的攻击手段,主要用于绕过杀毒软件的检测并实现恶意代码执行。
- 白文件:指具有合法数字签名或被杀毒软件标记为可信的可执行文件(如.exe程序),通常为系统工具或常见软件。
- 黑文件:指攻击者自定义的恶意代码,通常以DLL文件形式存在,包含Shellcode、反弹Shell等恶意功能。
- 白加黑组合:通过白文件加载黑DLL,使恶意代码在白文件执行时被触发,从而绕过杀软对黑文件的查杀。
2. 攻击机制
- DLL劫持:Windows系统在加载DLL时,会优先搜索程序所在目录。攻击者将恶意DLL放置于白文件目录下,当白文件运行时,系统会优先加载恶意DLL而非系统原版DLL。
- 动态加载:通过LoadLibrary等API函数显式加载恶意DLL,或修改白文件的导入表(IAT),使其在运行时调用黑DLL。
- 无文件落地:部分攻击直接将恶意代码编译为Shellcode,通过白文件内存加载执行,避免生成独立文件。
3. 攻击目的
- 权限提升:执行命令(如创建管理员账户)
- 持久化控制:通过注册表或启动项实现自启动
- 敏感数据窃取:结合后续攻击获取系统权限
4. 防御措施
- 限制目录权限:确保软件仅安装在受保护的目录(如C:\Program Files),避免普通用户写入恶意DLL。
- 增强杀软检测:通过行为分析识别异常DLL加载行为,而非仅依赖静态签名。
- 修复已知漏洞:及时更新系统补丁,防止利用已知DLL劫持路径的攻击。
5. 技术演变
随着杀软对抗升级,白加黑技术呈现以下趋势:
- 动态化:结合进程注入、代码混淆等手段降低检测概率
- 场景化:针对特定软件(如Steam、浏览器)定制白文件,提高成功率
- 长期化:通过重启断链、隐蔽加载等方式规避行为监控
二、应用场景
1. 绕过杀毒软件动态检测
通过将恶意代码(黑文件)与合法程序(白文件)结合,利用系统DLL加载机制或数字签名欺骗杀软。
示例:
- 使用腾讯游戏加速器的白文件加载恶意DLL,通过DLL劫持实现无文件攻击
- 为Veil生成的恶意程序添加腾讯视频等可信应用的数字签名,降低在线/本地查杀率
2. 权限维持与持久化控制
- DLL劫持+APC注入:在合法进程(如网易云音乐)加载时注入恶意DLL,通过Early Bird APC技术实现隐蔽进程接管,规避杀软钩子检测
- 隐写术结合DLL:将加密的Shellcode存入图片文件,通过DLL动态加载机制从图片中读取并执行,实现无文件落地攻击
3. 对抗现代杀软静态分析
- 静态特征规避:通过修改恶意DLL的导出函数、删除冗余代码、调整编译标准(如禁用C++17特性)等方式,逃逸基于静态签名的查杀
- 函数劫持伪装:使用Aheadlib工具生成DLL函数模拟代码,覆盖原函数入口实现无特征调用
4. 场景化攻击定制
- 针对性白文件选择:优先选择存在未校验DLL依赖或弱签名校验的软件(如部分国产工具、游戏加速器),降低攻击复杂度
- 多平台适配:针对32/64位系统分别编译恶意DLL,结合CreateProcessA和调试挂起技术实现跨平台注入
典型攻击流程示例
- 选择白文件:如cloudmusic_reporter.exe(缺失libcurl.dll)或游戏加速器主程序
- 生成/改造黑文件:用Veil生成Shellcode,或通过Aheadlib生成函数劫持DLL
- 植入与加载:将恶意文件放置于白文件目录,或通过APC注入技术触发加载
- 免杀强化:添加数字签名、代码混淆或隐写存储,提升存活率
三、常用工具
灰梭子
核心功能
- 手动化扫描:测试断点+dll劫持
- 操作:简易手动断点找dll,然后拖入x64 dll劫持完整asm+cpp
注意:该工具需在合法授权范围内使用,禁止用于非法渗透测试或攻击活动。
Zeroeye
核心功能
- 自动化扫描:通过遍历指定目录或分析单个文件,提取EXE的导入表,筛选出非系统DLL文件
- 白文件挖掘:将符合条件的文件分类存储至binX64或binX86目录,并生成Infos.txt记录DLL信息,支持虚拟机环境批量扫描
- 扩展功能:支持数字签名校验、生成DLL劫持模板,结合灰梭子等工具实现免杀攻击流程化
技术特性
- 性能优化:使用C++替代Python脚本,提升扫描速度(如200G数据扫描仅需2分11秒)
- 多平台适配:提供x64/x86双版本可执行文件,兼容不同系统环境
获取方式
- GitHub仓库:https://github.com/ImCoriander/ZeroEye
注意:该工具需在合法授权范围内使用,禁止用于非法渗透测试或攻击活动。
IDA
- 恶意DLL函数定位与分析:通过IDA加载目标DLL文件,利用其反汇编功能快速定位关键函数入口
- 代码逻辑与行为验证:IDA的图形化界面和交叉引用功能可帮助研究人员理解DLL的运行流程
- 测试DLL的动态调试支持:在编写测试DLL时,IDA可与调试器(如x64dbg)配合使用,实时监控DLL加载过程和函数执行结果
- 免杀对抗特征规避:利用IDA的代码修改功能,对恶意代码进行混淆或加密处理
零攻防dll模板
(具体内容未在原文中详细描述)
四、个人理解
白加黑技术不应用于任何形式的第一次上线操作(即将shellcode loader写入Black dll),这样会导致dll存活期短,而且不容易做到单文件(因为各大查杀工具对下载者查杀很严)。而是应该用于权限提升或权限维持。
误区纠正:黑dll不一定非要写启动行为,可以尝试对症下药的措施。
五、案例研究
案例1:针对打印机程序的权限维持
目标:办公人员,经常使用打印机,已获得user权限
操作步骤:
-
确认劫持对象
- 在windows系统文件中找到打印机程序,猜测存在dll执行,手动测试
- 发现对象Printdialog.dll疑似存在劫持
-
IDA确认
- 将dll导入IDA
- 发现有一堆函数,添加dll关键词进行筛选
-
导入灰梭子,劫持
-
测试+利用
- 运行成功,写代码批量修改dll
- 实现该功能的C++代码结合了文件操作、网络请求和进程管理技术
-
效果预测
- 在对症下药的策略下,使得dll无启动等高危行为实现"自启"
- 用户每次使用打印机都会上线
- 缺点:多次上线,需要添加互斥体
-
如何自查
- 定期查注册表,启动项
- 检查文件hash或者签名
六、防御建议
-
系统层面
- 启用DLL签名验证
- 限制非特权用户对系统目录的写入权限
- 定期更新系统和应用程序补丁
-
安全产品层面
- 部署具备行为分析能力的终端防护产品
- 监控异常DLL加载行为
- 实施应用程序白名单策略
-
管理层面
- 定期进行安全审计
- 对关键系统文件进行完整性检查
- 建立完善的日志记录和分析机制
七、法律与道德声明
本技术文档仅供学习、研究、教育或合法用途。开发者明确声明其无意将该代码用于任何违法、犯罪或违反道德规范的行为。任何个人或组织在使用本技术时,需自行确保其行为符合所在国家或地区的法律法规。
开发者对任何因直接或间接使用该技术而导致的法律责任、经济损失或其他后果概不负责。使用者需自行承担因使用本技术产生的全部风险和责任。请勿将本技术用于任何违反法律、侵犯他人权益或破坏公共秩序的活动。