1. 初识Beacon:红队手中的“隐形信使”
如果你玩过红蓝对抗,或者对渗透测试有点兴趣,那肯定对Cobalt Strike不陌生。它就像红队工程师的“瑞士军刀”,功能强大。而Beacon,就是这把军刀里最核心、最活跃的那个部件——一个长期潜伏在目标主机上的载荷(Payload)。你可以把它想象成一个超级隐蔽的“信使”,一旦在目标机器上安家,它就会通过我们预设的隐蔽通道(比如HTTP、DNS)悄悄地和我们的指挥控制服务器(C2)保持联系,等待指令,执行任务。
我刚开始用的时候,觉得它就是个高级木马。但用久了才发现,它的设计真的很巧妙。和Metasploit那种“打一枪换一个地方”的Payload不同,Beacon是为长期控制而生的。它不追求一次性的爆发,而是讲究低调、持久。你可以把它塞进一个看起来人畜无害的Word文档里,或者利用系统漏洞把它送进去。一旦上线,它就能帮你做很多事情:文件管理、权限提升、内网漫游、信息窃取,甚至还能作为跳板去攻击网络里的其他机器。
但问题来了,这么强大的工具,特征也太明显了。安全软件和蓝队分析师可不是吃素的,他们早就把Cobalt Strike和Beacon的各种特征摸得一清二楚。一个默认配置的Beacon扔到稍微有点防护的系统里,分分钟就被查杀了。所以,如何让这个“信使”真正隐形,就成了我们能否成功的关键。这就引出了我们今天要深入探讨的核心:通过Profile文件,对Beacon进行深度定制,特别是修改它在内存中的特征,让它从“显眼包”变成“隐身侠”。
2. Beacon的“体检报告”:默认内存特征与风险
在动手改造之前,我们得先知道“病人”原本长什么样。把一个默认生成的Beacon(比如一个beacon.exe)扔到Windows 10上运行,然后用像Process Hacker或Process Explorer这样的工具去仔细检查它的进程内存,你会发现几个非常扎眼的“胎记”。
首先,是内存权限这个“红灯区”。正常程序的内存区域,权限分得很清楚:代码段(.text)通常是可执行但不可写(r-x),数据段(.data)是可读写但不可执行(rw-)。这是一种安全设计,防止恶意代码在数据区被修改并执行。但Beacon为了能灵活地在内存中加载和执行代码,它所在的内存区域往往被设置成了可读、可写、可执行(RWX)。这个权限组合在正常软件里极其罕见,简直就是对安全软件大喊:“快来看,我这里有可疑代码!”
其次,是内存中的明文字符串。这是最容易被静态或动态扫描捕捉到的特征。用十六进制编辑器或者字符串提取工具扫一下Beacon进程的内存,你大概率会看到“beacon”这个单词。更专业一点的分析工具,还能找到“ReflectiveLoader”这个字符串。Reflective DLL Injection(反射式DLL注入)是Beacon加载自身的一种技术,而这个字符串正是该技术实现中的一个关键函数名。看到它,经验丰富的分析师基本就能断定这是Cobalt Strike的载荷。
我实测过一个案例,在一个只装了基础防病毒软件的系统上,一个未做任何修改的Beacon,从运行到被隔离,平均存活时间不到2分钟。防病毒软件主要就是靠这些内存和行为特征来抓它的。所以,如果我们想让它活得更久,就必须把这些“胎记”给抹掉或者换掉。
注意:这里说的“抹掉”不是真的从二进制文件里删除(那会影响功能),而是通过Profile文件,在Beacon被加载到内存的瞬间,动态地修改这些字符串和内存属性,让它在运行时“看起来”像个正经程序。
3. Profile文件:Beacon的“整容手术刀”
那么,怎么给Beacon“整容”呢?答案就是 Malleable C2 Profile(可塑C2配置文件),我们通常简称为Profile文件。这个文件是Cobalt Strike的

392

被折叠的 条评论
为什么被折叠?



