ATTCK框架实战指南:红队攻防技术与学习记录方法
1. 从零理解ATTCK框架的实战价值很多人第一次接触ATTCK框架时会把它当成一个攻击手法百科来翻翻完觉得挺全但真到了实战或者复盘的时候又不知道怎么用。我刚开始也是这样把矩阵图打印出来贴在墙上结果发现除了占地方好像没什么实际帮助。后来踩了几次坑才明白ATTCK真正的价值不在于知道多少种攻击手法而在于它提供了一套统一的语言让攻击方和防守方能在同一个坐标系里对话。1.1 为什么红队需要ATTCK而不是一份漏洞列表传统的红队工作流往往是这样的拿到目标信息扫漏洞找入口打进去提权横向拿数据。整个过程围绕漏洞展开但漏洞只是攻击链上的一个环节。一个没有漏洞的系统照样可能因为配置错误、弱口令、社会工程被拿下。如果只盯着漏洞看就会忽略掉大量非漏洞类的攻击面。ATTCK把视角从漏洞拉高到了战术和技术。战术是攻击者的阶段性目标比如初始访问、执行、持久化、提权、防御规避、凭据访问、发现、横向移动、收集、命令与控制、数据窃取、影响。技术则是实现这些目标的具体手段。这个分层结构的好处是你不再需要记住几百个漏洞编号而是理解攻击者在每个阶段会做什么、怎么做。我举个实际例子。假设你在一次内部演练中拿到了一个WebShell接下来要做什么如果按漏洞思维你可能会想找个提权漏洞。但按ATTCK思维你会先看当前处于哪个战术阶段——初始访问已经完成接下来是执行、持久化、提权、防御规避。你会系统性地检查当前权限能执行哪些命令能不能写入启动项或计划任务做持久化系统补丁情况如何有没有可用的凭据杀软和日志监控情况怎样这种结构化的推进方式比漫无目的地找漏洞要高效得多。1.2 红队视角下的战术与技术映射逻辑ATTCK矩阵里每一列是一个战术每一行是不同平台Windows、Linux、macOS、云、移动端等下的技术。红队在实战中通常不是按矩阵从左到右线性推进的而是根据目标环境动态调整。但有一个基本逻辑先建立立足点再扩大控制面最后达成目标。立足点阶段对应初始访问和执行。常见技术包括利用公开应用漏洞、钓鱼附件、有效账户登录等。这个阶段的核心是不被发现地进去。很多人在这里容易犯一个错误一进去就急着扫内网、传工具结果触发了告警。正确的做法是先做环境发现了解自己处在什么位置、有什么权限、周围有什么。扩大控制面对应持久化、提权、防御规避、凭据访问、发现和横向移动。这个阶段是红队工作量最大的部分。持久化要解决即使重启或掉线也能回来的问题提权要解决当前权限不够的问题防御规避要解决不被杀软和EDR发现的问题凭据访问要解决拿到更多账户的问题发现要解决内网里还有什么的问题横向移动要解决从一台机器到另一台机器的问题。达成目标对应收集、命令与控制、数据窃取和影响。这个阶段要根据演练目标来定有的是拿域控有的是拿核心数据有的是验证某个业务系统的安全性。理解了这个映射逻辑你在实战中就不会迷失方向。每做一步都清楚自己处在哪个战术阶段下一步该往哪个方向走。1.3 学习记录的正确打开方式从看到练我见过很多人的学习记录就是把ATTCK矩阵里的技术名称抄一遍然后写几句这个技术很重要之类的废话。这种记录除了感动自己没有任何价值。真正有用的学习记录应该包含三个要素技术原理、实操步骤、踩坑经验。技术原理要回答这个技术为什么能成立。比如进程注入技术原理是利用合法进程的内存空间来执行恶意代码从而绕过基于进程信誉的检测。理解了原理你才能知道它的适用场景和局限性。实操步骤要具体到命令和参数。比如计划任务持久化你要写清楚用schtasks命令创建任务的完整语法包括触发器、执行动作、运行账户等参数。不要写创建一个计划任务这种模糊描述过两天你自己都看不懂。踩坑经验是最有价值的部分。比如你发现某个技术在当前系统版本上不生效或者被某个安全产品拦截了或者需要特定的权限才能执行。这些经验是文档里不会写的但实战中经常遇到。我自己的学习记录习惯是每学一个技术就在虚拟机里复现一遍把命令、输出、遇到的问题都记下来。然后尝试在不同的系统版本、不同的安全配置下再跑一遍看看有什么差异。这样积累下来的记录才是真正能指导实战的。2. 环境搭建与实验拓扑设计红队实战学习离不开实验环境。直接在真实环境里练手既不道德也不安全而且一旦触发告警后续学习就没法继续了。所以第一步是搭建一个隔离的实验环境。2.1 虚拟化平台选型与网络隔离方案虚拟化平台的选择上主流的有VMware Workstation、VirtualBox、Hyper-V等。如果只是做单机实验VirtualBox免费够用如果要模拟多机内网环境VMware Workstation的网络配置更灵活支持自定义虚拟网络和端口转发。我个人的习惯是用VMware Workstation因为它对嵌套虚拟化和快照管理的支持比较成熟。网络隔离是实验环境的核心。我一般会创建两个虚拟网络一个是外网网络模拟攻击机与目标边界服务器的连接另一个是内网网络模拟目标内部网络。攻击机同时连接两个网络目标边界服务器也连接两个网络内网其他机器只连接内网网络。这样就能模拟从外网打点、然后进入内网横向移动的完整链路。具体配置上VMware的仅主机模式和NAT模式可以组合使用。仅主机模式用于内网通信NAT模式用于攻击机访问外部资源比如下载工具。需要注意的是实验环境一定要和物理网络隔离避免实验中的扫描或攻击流量影响到真实网络。提示在配置虚拟网络时建议关闭DHCP手动分配IP地址。这样每次恢复快照后IP不会变化省去重新配置的麻烦。2.2 攻击机与目标机的系统选择及配置要点攻击机我通常选Kali Linux因为它预装了大部分红队工具省去安装配置的时间。但Kali也不是万能的有些工具需要自己编译或配置。我一般会在Kali上额外安装一些常用的工具比如Cobalt Strike用于命令与控制、BloodHound用于域环境分析、Impacket用于协议利用等。目标机的选择要根据学习目标来定。如果学Windows域环境下的攻击技术至少需要一台域控和一台域成员机。域控建议用Windows Server 2016或2019域成员机用Windows 10。如果学Linux环境下的攻击技术可以用Ubuntu或CentOS。如果学云环境下的攻击技术可以用开源的云平台模拟环境。目标机的配置要点有几个一是关闭自动更新避免实验过程中系统自动打补丁导致某些技术失效二是关闭Windows Defender的实时保护或者配置排除项避免工具被查杀三是开启必要的日志和审计功能方便复盘时查看攻击痕迹四是配置弱口令和常见配置错误模拟真实环境中的安全弱点。我踩过的一个坑是在域环境实验中域控的DNS配置非常关键。如果DNS配置错误域成员机无法加入域后续的域攻击技术就没法练习。正确的做法是把域控的DNS指向自己域成员机的DNS指向域控。2.3 快照管理与实验复现的标准化流程快照管理是实验环境的基础设施。没有快照每次实验后环境就被污染了下次实验又要重新搭建。我的做法是搭建好基础环境后立即打一个干净快照。每次实验前恢复到干净快照实验后如果需要保留结果再打一个实验快照。快照命名要有规范比如干净环境-域控域成员、实验完成-横向移动测试等。不要用快照1、快照2这种无意义的命名过几天你就忘了哪个是哪个。实验复现的标准化流程包括恢复快照、启动所有虚拟机、验证网络连通性、验证关键服务状态、开始实验、记录操作步骤和结果、实验结束、恢复快照。这个流程看起来繁琐但能保证每次实验都在一致的环境下进行实验结果才有可比性。注意快照会占用大量磁盘空间建议定期清理不需要的快照。另外快照不是备份如果虚拟磁盘文件损坏快照也可能丢失。重要的实验环境建议额外做一份完整克隆。3. 初始访问阶段的实战技术拆解初始访问是红队实战的第一步也是最关键的一步。没有初始访问后面的一切都无从谈起。这个阶段的目标是在目标系统中获得一个执行代码的立足点。3.1 公开应用漏洞利用的完整链路公开应用漏洞利用是最常见的初始访问方式之一。典型的链路是发现目标暴露在互联网上的应用识别应用类型和版本查找对应版本的已知漏洞利用漏洞获取权限。以常见的Web应用为例假设目标运行了一个存在漏洞的Web框架。第一步是信息收集通过访问首页、查看响应头、分析静态资源路径等方式识别框架类型和版本。第二步是漏洞匹配在漏洞库中查找该版本对应的漏洞。第三步是漏洞利用根据漏洞类型构造利用请求。第四步是权限获取利用成功后通常得到一个WebShell或反向Shell。这个过程中有几个关键点。一是信息收集要细致很多时候版本信息藏在响应头的某个字段里或者藏在某个静态文件的注释里。二是漏洞利用要准备多个方案因为目标环境可能有WAF或补丁一个方案不成功要快速切换。三是权限获取后要立即做环境发现了解当前权限、系统版本、网络位置等信息。我踩过的一个坑是利用漏洞拿到WebShell后急着执行命令结果发现WebShell的权限很低很多命令执行不了。正确的做法是先确认WebShell的权限如果是低权限用户先做信息收集寻找提权路径而不是盲目执行命令。3.2 钓鱼附件与恶意文档的投递策略钓鱼附件是另一种常见的初始访问方式。核心思路是构造一个看起来正常的文档或文件诱导目标打开打开后触发恶意代码执行。恶意文档的构造通常利用Office的宏功能或漏洞。宏文档的原理是文档中包含一段VBA代码当用户打开文档并启用宏时代码执行。这种方式的成功率取决于目标是否启用了宏以及安全软件是否拦截。为了提高成功率攻击者会使用各种社会工程技巧。比如伪装成发票、简历、会议通知等目标可能感兴趣的文件名在文档内容中诱导用户启用宏比如显示此文档需要启用宏才能查看完整内容使用双扩展名或图标伪装让文件看起来像PDF或图片。从防御规避的角度恶意文档还会使用各种技术来绕过检测。比如使用混淆的VBA代码、使用远程模板加载、使用DDE动态数据交换代替宏等。这些技术的原理和实现方式都是红队需要掌握的。提示在实验环境中测试钓鱼附件时建议使用隔离的虚拟机并关闭网络连接避免恶意代码意外外联。测试完成后恢复快照。3.3 有效账户登录与凭据填充的边界有效账户登录是指使用合法的账户凭据进行登录而不是利用漏洞。这种方式的特点是合法——从系统日志看就是一次正常的登录不会触发漏洞利用相关的告警。获取有效账户的途径有很多从公开泄露的凭据库中查找、通过社会工程获取、从之前攻陷的系统中提取等。凭据填充是指用获取到的用户名密码组合尝试登录其他系统因为很多人会在多个系统使用相同的密码。这种方式的边界在于一是要控制尝试频率避免触发账户锁定策略二是要选择合适的目标优先尝试那些安全防护较弱的系统三是要注意法律和道德边界只能在授权范围内进行。在实验环境中可以模拟一个存在弱口令的域环境练习使用获取到的凭据进行登录、提权、横向移动等操作。重点体会的是如何在不触发告警的情况下最大化利用一个有效账户。4. 执行与持久化阶段的技术落地拿到初始访问权限后下一步是执行代码和建立持久化。执行是让代码在目标系统上运行持久化是确保即使系统重启或连接中断也能重新获得访问权限。4.1 命令执行与脚本执行的多种姿势命令执行的方式有很多种常见的有通过WebShell执行、通过远程管理协议执行如WMI、WinRM、SSH、通过计划任务执行、通过服务执行等。每种方式的特点和适用场景不同。通过WebShell执行是最直接的方式但WebShell本身可能被查杀而且权限通常较低。通过WMI执行可以在远程系统上运行命令不需要在目标系统上落地文件隐蔽性较好。通过WinRM执行类似但需要目标开启WinRM服务。通过计划任务执行可以设置延迟执行或周期性执行适合需要持续运行的场景。脚本执行方面PowerShell是Windows环境下最常用的。PowerShell的强大之处在于它可以直接调用.NET框架执行各种复杂操作。但PowerShell也是安全软件重点监控的对象所以攻击者会使用各种技术来绕过检测比如使用PowerShell的下载执行、使用Base64编码命令、使用AMSI绕过等。我个人的经验是在执行阶段优先选择 living off the land的方式即使用系统自带的工具和功能而不是上传自己的工具。这样做的原因是系统自带工具通常不会被安全软件拦截而且不会在磁盘上留下额外的文件。4.2 计划任务、服务与注册表持久化的对比持久化的方式有很多常见的有计划任务、服务、注册表、启动文件夹等。每种方式的特点和检测难度不同。计划任务持久化的优点是灵活可以设置各种触发条件如登录时、启动时、定时等而且Windows系统本身就有大量计划任务容易混淆。缺点是计划任务会记录在事件日志中而且某些安全软件会监控计划任务的创建。服务持久化的优点是权限高服务通常以SYSTEM权限运行而且服务可以在系统启动时自动运行。缺点是创建服务需要管理员权限而且服务列表相对固定新增服务容易被发现。注册表持久化的优点是隐蔽可以藏在注册表的各个角落而且不需要额外的文件。缺点是注册表键值容易被安全软件监控而且某些注册表位置需要管理员权限才能修改。启动文件夹持久化的优点是简单只需要把文件放到启动文件夹即可。缺点是启动文件夹是安全软件重点监控的位置而且需要用户登录才能触发。在实际操作中通常会组合使用多种持久化方式以提高成功率。比如同时创建计划任务和服务即使一个被清除另一个还能保留。4.3 持久化被清除后的应急回连方案持久化不是一劳永逸的安全人员可能会发现并清除持久化机制。所以红队需要准备应急回连方案确保即使持久化被清除也能重新获得访问权限。应急回连方案的核心是多通道。比如除了计划任务还留一个服务除了服务还留一个注册表键除了注册表还留一个启动项。这样即使安全人员清除了其中一个还有其他通道可用。另一个思路是定时回连。比如设置一个计划任务每隔一段时间尝试连接C2服务器如果连接成功就执行指令。这样即使当前连接中断只要计划任务还在就能重新建立连接。还有一种思路是触发式回连。比如设置一个监控当某个特定条件满足时如特定用户登录、特定文件被访问触发回连。这种方式更隐蔽但实现起来更复杂。注意在实验环境中测试持久化时建议在快照中进行测试完成后恢复快照避免持久化机制残留在系统中。5. 防御规避与凭据访问的实战要点防御规避是红队实战中最考验技术的环节。目标是在不被安全软件发现的情况下完成攻击操作。凭据访问则是获取更多账户凭据为横向移动做准备。5.1 绕过杀软与EDR的常见思路绕过杀软和EDR的思路主要有几种一是混淆让恶意代码的特征码无法被识别二是白利用利用合法的白名单程序来执行恶意代码三是无文件不在磁盘上落地文件直接在内存中执行四是降权使用低权限账户执行操作减少被监控的概率。混淆方面常见的技术有字符串加密、代码混淆、加壳、使用不同的编译器等。这些技术的目的是改变恶意代码的二进制特征使其无法被杀软的特征库匹配。白利用方面常见的技术有DLL劫持、进程注入、利用签名的可执行文件加载恶意DLL等。这些技术的目的是利用合法程序的信誉绕过基于信誉的检测。无文件方面常见的技术有PowerShell下载执行、WMI执行、注册表存储恶意代码等。这些技术的目的是不在磁盘上留下文件减少被扫描的概率。我个人的经验是没有一种技术能保证100%绕过所有安全软件。最好的策略是组合使用多种技术并根据目标环境的安全配置动态调整。比如如果目标安装了EDR就优先使用无文件技术如果目标只有传统杀软混淆技术可能就够了。5.2 凭据提取的工具选择与操作细节凭据提取是获取账户密码或哈希的过程。常见的工具有Mimikatz、LaZagne、SharpHound等。Mimikatz是最经典的可以从内存中提取明文密码、哈希、Kerberos票据等。LaZagne支持从多种应用程序中提取凭据如浏览器、邮件客户端、数据库等。SharpHound用于收集域环境信息为后续的域攻击做准备。使用Mimikatz时需要注意几点一是需要管理员权限才能提取内存中的凭据二是某些操作会触发安全软件的告警比如读取LSASS进程内存三是提取到的凭据要及时保存因为系统重启后内存中的凭据就消失了。使用LaZagne时需要注意不同应用程序的凭据存储位置和加密方式不同LaZagne会自动识别并解密。但某些应用程序的凭据需要用户登录后才能提取所以最好在用户活跃时执行。提示在实验环境中练习凭据提取时建议先关闭安全软件熟悉基本操作后再开启安全软件练习绕过技术。5.3 域环境下的凭据收集与利用域环境下的凭据收集更加复杂但也更有价值。因为域环境中的账户通常具有更高的权限可以访问更多的资源。域环境下的凭据收集方式包括从域控的NTDS.dit文件中提取所有域账户的哈希、从域成员的LSASS内存中提取登录用户的凭据、通过Kerberoasting攻击获取服务账户的哈希、通过AS-REP Roasting攻击获取不需要预认证的账户哈希等。NTDS.dit是域控上的数据库文件存储了所有域账户的信息。提取NTDS.dit通常需要域控的管理员权限可以使用ntdsutil、vssadmin等工具创建卷影副本然后从副本中提取文件。Kerberoasting是一种针对Kerberos协议的攻击。原理是任何域用户都可以请求服务票据而服务票据是用服务账户的密码哈希加密的。攻击者可以请求服务票据然后在本地离线破解获取服务账户的密码。AS-REP Roasting是针对不需要Kerberos预认证的账户的攻击。原理是如果账户设置了不需要预认证攻击者可以直接请求AS-REP响应然后离线破解获取密码。这些技术的操作细节和工具使用都是红队需要熟练掌握的。6. 横向移动与命令控制通道的构建横向移动是从一台机器到另一台机器的过程。命令控制通道是攻击者与目标系统保持通信的通道。6.1 横向移动的协议选择与工具链横向移动的协议选择取决于目标环境。常见的协议有SMB、WMI、WinRM、RDP、SSH等。SMB是最常用的因为Windows系统默认开启SMB而且可以利用PsExec等工具远程执行命令。WMI和WinRM也是Windows环境下的常用协议但需要目标开启相应服务。RDP用于远程桌面适合需要图形界面的场景。SSH用于Linux环境。工具链方面PsExec是最经典的横向移动工具通过SMB协议在远程系统上创建服务并执行命令。但PsExec会在目标系统上留下服务和服务日志容易被发现。更隐蔽的方式是使用WMI或WinRM执行命令不落地文件。Impacket是一套Python工具集支持多种协议包括SMB、WMI、WinRM、Kerberos等。其中的psexec.py、wmiexec.py、smbexec.py等工具可以实现类似PsExec的功能但更灵活。我个人的经验是横向移动时优先选择目标系统已经开启的协议避免开启新的服务。比如如果目标开启了WinRM就用WinRM如果只开启了SMB就用SMB。这样做的目的是减少对目标系统的改动降低被发现的风险。6.2 C2通道的隐蔽性设计与心跳控制C2通道是攻击者与目标系统保持通信的通道。C2通道的隐蔽性直接决定了攻击能否持续。C2通道的设计要考虑几个方面一是协议选择常见的C2协议有HTTP、HTTPS、DNS、ICMP等。HTTPS是最常用的因为加密流量难以检测。DNS和ICMP更隐蔽但传输速度慢。二是心跳控制心跳频率不能太高否则容易被流量分析发现也不能太低否则指令响应不及时。三是流量伪装让C2流量看起来像正常的业务流量比如伪装成正常的HTTP请求。Cobalt Strike是常用的C2框架支持多种协议和灵活的配置。它的Malleable C2配置文件可以自定义流量特征让C2流量看起来像正常的业务流量。比如可以配置成模拟某网站的流量或者模拟某API的调用。注意在实验环境中搭建C2通道时建议使用隔离的网络避免C2流量外联到真实互联网。可以使用本地搭建的C2服务器或者使用模拟的C2服务。6.3 隧道与代理在横向中的实际应用隧道和代理是横向移动中的重要技术。隧道是将一种协议的流量封装在另一种协议中比如将TCP流量封装在DNS中。代理是中间人转发流量。常见的隧道工具有EarthWorm、frp、ngrok等。EarthWorm支持多种协议的正向和反向代理适合内网穿透。frp是一个高性能的反向代理工具适合将内网服务暴露到外网。ngrok类似但更简单易用。在横向移动中隧道和代理的作用是当攻击者无法直接访问目标内网时可以通过已经控制的边界服务器建立隧道将流量转发到内网。或者当目标内网有多个网段时可以通过代理逐层渗透。我踩过的一个坑是在使用隧道工具时没有考虑流量加密导致隧道流量被流量分析设备识别。正确的做法是隧道流量也要加密比如使用TLS封装或者使用工具自带的加密功能。7. 学习记录复盘与能力提升路径学习记录的目的是为了提升能力。如果只是记录而不复盘记录就失去了意义。7.1 如何结构化记录一次完整的红队演练结构化记录应该包含以下部分演练目标、环境拓扑、攻击路径、使用的技术和工具、关键操作步骤、遇到的问题和解决方案、检测和告警情况、改进建议。演练目标要明确比如获取域控权限或验证某业务系统的安全性。环境拓扑要画图标注IP地址、系统版本、开放端口等。攻击路径要按时间顺序记录从初始访问到最终目标每一步做了什么、结果如何。使用的技术和工具要对应ATTCK矩阵标注战术和技术编号。关键操作步骤要具体到命令和参数方便复现。遇到的问题和解决方案是最有价值的部分要详细记录。检测和告警情况要记录哪些操作触发了告警、告警的内容是什么、如何规避。改进建议要针对本次演练中的不足提出具体的改进措施。7.2 从记录中提炼可复用的攻击模式记录多了之后你会发现一些重复出现的模式。比如某些技术组合在特定环境下特别有效某些操作顺序容易触发告警某些工具在特定系统版本上有兼容性问题。这些模式就是可复用的攻击模式。把它们提炼出来形成自己的战术手册。下次遇到类似环境时可以直接参考不用从头摸索。我自己的战术手册里有几条常用的模式。比如Windows域环境快速拿域控模式先通过钓鱼或漏洞获取一个域成员权限然后通过Kerberoasting或AS-REP Roasting获取服务账户哈希然后通过服务账户横向到域控最后通过DCSync提取所有域账户哈希。这个模式在多个实验环境中验证过成功率很高。7.3 防守视角下的检测思路与蓝队对抗红队学习的最终目的不只是为了攻击也是为了更好地防守。理解攻击者的技术和思路才能设计出有效的检测和防御方案。从防守视角看每个攻击技术都有对应的检测思路。比如对于计划任务持久化可以监控计划任务的创建事件特别是那些由非管理员账户创建的、执行可疑命令的计划任务。对于凭据提取可以监控LSASS进程的访问特别是那些非正常的读取操作。对于横向移动可以监控远程服务创建、远程命令执行等事件。蓝队对抗中常见的手段有部署蜜罐、配置告警规则、定期进行安全评估、开展红蓝对抗演练等。蜜罐可以诱捕攻击者告警规则可以及时发现异常行为安全评估可以提前发现漏洞红蓝对抗可以检验防守能力。提示在实验环境中可以同时搭建红队和蓝队的实验环境模拟攻防对抗。红队尝试攻击蓝队尝试检测和阻断。这种对抗式的学习比单方面的学习效果更好。我个人在实际操作中的体会是红队技术的学习不能只停留在会用工具的层面要深入理解每个技术的原理和适用场景。工具会过时但原理不会。理解了原理你就能根据环境的变化灵活调整技术方案。另外学习记录要持续更新每次演练后都要复盘把新的经验和教训补充进去。这样积累下来你的能力才会真正提升。