模块 2 - 恶意软件开发简介
恶意软件开发课程 - 恶意软件开发简介
模块 2 - 恶意软件开发简介#
[!IMPORTANT] 本知识库声明
本知识库由本人整理自互联网 MalDev Academy 泄露资源,并由本人手动翻译为中文,过程中增加了大量关键技术提示与实践心得。
- 内容完整性:并未修改任何核心代码与技术逻辑,仅做汉化与注释加强。
- 版权归属:原始知识产权归原作者/官方所有。
- 支持正版:本仓库仅供内部学习交流,如果您有经济能力,请务必支持正版课程。
- 权利申诉:如相关内容侵犯了您的权益,请联系我,我将立即核实并删除。
恶意软件开发简介#
什么是恶意软件?#
恶意软件 (Malware) 是一种专门设计用于执行恶意操作的软件,例如未经授权访问机器或从机器窃取敏感数据。“恶意软件”一词通常与非法或犯罪行为相关联,但它也可以被道德黑客(如渗透测试人员和红队成员)用于对组织进行授权的安全评估。
💡 初学者提示:什么是恶意软件 (Malware)?
Malware = Malicious(恶意的)+ Software(软件)
常见恶意软件类型:
- 病毒 (Virus):附着在正常程序上,随程序一起传播
- 木马 (Trojan):伪装成有用的程序,实际上执行恶意操作
- 蠕虫 (Worm):可以自我复制和传播的独立程序
- 勒索软件 (Ransomware):加密用户文件并要求赎金
- 间谍软件 (Spyware):秘密收集用户信息
- Rootkit:隐藏自身和其他恶意软件的存在
MalDev Academy 假定用户仅将课程中学到的知识用于道德和合法目的。任何其他用途可能会导致刑事指控,MalDev Academy 对此不承担责任。
⚠️ 法律和道德警告
未经授权使用恶意软件技术是严重的犯罪行为,可能导致:
- 被判入狱
- 高额罚款
- 职业生涯终结
合法使用场景:
- 与客户签订合同的渗透测试
- 授权的红队演练
- 安全研究和防御开发
- 学术研究(在受控环境中)
为什么要学习恶意软件开发?#
从进攻性安全的角度来看,测试人员经常需要对客户环境执行某些恶意任务。测试人员在参与测试时,通常有三种主要的工具选择:
-
开源工具 (OSTs - Open-Source Tools) - 这些工具通常已被安全厂商标记并在任何受到良好保护或成熟的组织中被检测到。在进行进攻性安全评估时,它们并不总是可靠的。
-
购买工具 - 预算较大的团队通常会选择购买工具,以节省测试期间的宝贵时间。与定制工具类似,这些工具通常是闭源的,更有可能绕过安全解决方案。
-
开发定制工具 - 因为这些工具是定制构建的,它们尚未被安全厂商分析或标记,这在检测方面为攻击团队提供了优势。这就是恶意软件开发知识对于更成功的进攻性安全评估至关重要的地方。
💡 初学者提示:为什么学习恶意软件开发很重要?
防御方的视角:
- 理解攻击者如何工作才能更好地防御
- 开发检测规则和安全工具
- 进行威胁情报分析
进攻方的视角(合法授权):
- 真实模拟攻击者的行为
- 测试客户的防御能力
- 发现安全漏洞
职业发展:
- 安全研究员
- 渗透测试工程师
- 红队成员
- 恶意软件分析师
- EDR/AV 产品开发人员
应该使用什么编程语言?#
从技术上讲,任何编程语言都可以用来构建恶意软件,例如 Python、PowerShell、C#、C、C++ 和 Go。话虽如此,在恶意软件开发方面,某些编程语言优于其他编程语言的原因通常归结为以下几点:
- 某些编程语言更难逆向工程。攻击者的目标应该始终是确保防御者对恶意软件的行为方式理解有限。
- 某些编程语言需要目标系统上的先决条件。例如,执行 Python 脚本需要目标机器上存在解释器。如果机器上没有 Python 解释器,则无法执行基于 Python 的恶意软件。
- 根据编程语言的不同,生成的文件大小会有所不同。
📚 知识扩展:编程语言对比
语言 优点 缺点 常见用途 C/C++ 完全控制、性能高、难逆向 开发难度高 复杂恶意软件、Rootkit C# 开发快速、.NET 框架强大 需要 .NET、较易逆向 Windows 环境工具 Go 跨平台、单文件部署 文件体积大 现代恶意软件 Python 易学易用 需要解释器、易检测 脚本和原型开发 PowerShell Windows 原生、无需编译 日志记录强、易检测 后渗透活动
高级编程语言 vs 低级编程语言#
编程语言可以分为两组:高级和低级。
-
高级 - 通常更抽象于操作系统,内存效率较低,并且由于几个复杂函数的抽象而为开发者提供较少的整体控制。高级编程语言的一个例子是 Python。
-
低级 - 提供了一种在底层与操作系统交互的方式,并在与系统交互时为开发者提供更多自由。低级编程语言的一个例子是 C。
鉴于前面的解释,应该清楚为什么低级编程语言一直是恶意软件开发的首选,尤其是在针对 Windows 机器时。
💡 初学者提示:理解高级与低级语言
类比说明:
- 高级语言就像开自动挡汽车:容易上手,但控制有限
- 低级语言就像开手动挡汽车:需要更多技能,但控制精确
为什么本课程使用 C 语言?
- 直接访问 Windows API:C 语言可以直接调用 Windows 底层函数
- 精确的内存控制:可以操作内存地址、指针等底层概念
- 性能优异:编译为机器码,执行速度快
- 检测难度大:比脚本语言更难被分析和检测
- 无依赖:编译后的程序可以独立运行,不需要额外的解释器
Windows 恶意软件开发#
Windows 恶意软件开发领域在过去几年中发生了变化,现在高度专注于规避基于主机的安全解决方案,如杀毒软件 (AV - Antivirus) 和终端检测与响应 (EDR - Endpoint Detection and Response)。随着技术的进步,仅仅构建执行可疑命令或执行”类似恶意软件”操作的恶意软件已不再足够。
💡 初学者提示:什么是 AV 和 EDR?
杀毒软件 (AV - Antivirus):
- 传统的安全软件
- 主要基于”特征码”检测(类似于病毒的指纹)
- 检测已知的恶意软件
- 例如:Windows Defender、卡巴斯基、诺顿
终端检测与响应 (EDR - Endpoint Detection and Response):
- 新一代安全软件
- 使用行为分析和机器学习
- 监控程序的行为,而不仅仅是文件特征
- 可以检测未知威胁(零日攻击)
- 例如:CrowdStrike、SentinelOne、Carbon Black
关键区别:
- AV:问”这个文件是恶意的吗?”
- EDR:问”这个程序的行为是可疑的吗?”
MalDev Academy 将教您构建可以在真实测试中使用的规避性恶意软件。这些模块还会指出非 OpSec ↗ 的操作或可能导致您的恶意软件被安全解决方案或蓝队检测到的操作。
📚 知识扩展:OpSec 是什么?
OpSec (Operational Security - 行动安全) 是指在行动中保持隐蔽性的实践。
良好的 OpSec 实践:
- ✅ 使用加密的通信
- ✅ 避免使用已知的工具特征
- ✅ 清理日志和痕迹
- ✅ 使用合法的进程和路径
糟糕的 OpSec 实践:
- ❌ 使用默认的 Metasploit payload
- ❌ 留下明显的文件和注册表项
- ❌ 产生大量网络流量
- ❌ 触发 Windows Defender 警报
恶意软件开发生命周期#
从根本上说,恶意软件是设计用于执行某些操作的软件。成功的软件实现需要一个称为软件开发生命周期 (SDLC - Software Development Life Cycle) 的过程。类似地,构建良好且复杂的恶意软件将需要 SDLC 的定制版本,称为恶意软件开发生命周期 (MDLC - Malware Development Life Cycle)。
虽然 MDLC 不一定是一个正式的流程,但在 MalDev Academy 中使用它是为了让读者更容易理解开发过程。MDLC 包含 5 个主要阶段:
-
开发 (Development) - 开始开发或改进恶意软件的功能。
-
测试 (Testing) - 执行测试以发现迄今为止开发的代码中的隐藏错误。
-
离线 AV/EDR 测试 (Offline AV/EDR Testing) - 针对尽可能多的安全产品运行开发的恶意软件。重要的是离线进行测试,以确保不会将样本发送给安全厂商。使用 Microsoft Defender 时,这可以通过禁用自动样本提交和云保护选项来实现。
-
在线 AV/EDR 测试 (Online AV/EDR Testing) - 在有互联网连接的情况下针对安全产品运行开发的恶意软件。云引擎通常是 AV/EDR 的关键组件,因此针对这些组件测试您的恶意软件对于获得更准确的结果至关重要。请注意,此步骤可能会导致样本被发送到安全解决方案的云引擎。
-
IoC(威胁指标)分析 (IoC Analysis) - 在这个阶段,您成为威胁猎手或恶意软件分析师。分析恶意软件并提取可能用于检测或标记恶意软件的 IoC。
-
返回步骤 1。
💡 初学者提示:理解 MDLC 循环
这是一个迭代过程,就像打磨一把剑:
- 开发 → 编写新功能或改进代码
- 测试 → 确保代码没有 bug,功能正常
- 离线 AV/EDR 测试 → 在断网状态下测试,避免被厂商发现
- 在线 AV/EDR 测试 → 测试云检测能力(风险:可能被标记)
- IoC 分析 → 站在防御者的角度,找出可能暴露的特征
- 循环改进 → 根据发现的问题回到开发阶段改进
为什么需要循环?
- 安全产品不断更新
- 新的检测技术不断出现
- 需要持续改进以保持有效性
IoC (Indicators of Compromise) 示例:
- 特定的文件名或路径
- 网络通信模式
- 注册表键值
- API 调用序列
- 内存中的字符串特征
🎯 本模块学习要点
- ✅ 理解恶意软件的定义和合法用途
- ✅ 知道为什么要学习恶意软件开发(防御和进攻视角)
- ✅ 了解不同编程语言的优缺点
- ✅ 理解为什么 C 语言适合 Windows 恶意软件开发
- ✅ 掌握 MDLC(恶意软件开发生命周期)的概念
- ✅ 认识到 OpSec 的重要性
- ✅ 理解 AV 和 EDR 的区别
下一步: 准备好开发环境和必需的工具