网络靶场实战-恶意程序自启动

简介

当恶意程序入侵目标为个人计算机时,相较于服务器,个人计算机对关机或重启操作更加频繁,关机时计算机所有的进程都会被结束,因此恶意程序需要配置自启动来使自己在每次开机时能够被运行。

本篇介绍一个恶意样本(b8090d7d12d6f0abacd16ecfab252f48ee466a254c1751d928567485208634f9)中使用的自启技术,该样本是一个可执行程序,运行后会释放一些文件,其中两个文件比较重要,一个文件为saxbn.exe,该文件是联想应用商店的一个组件(LeASLane),是一个正常的程序。

图片

另一个文件名为libcrypto-3.dll,在正常情况下,该文件为OpenSSL的加密库,被LeASLane所依赖,攻击者通过劫持该文件,并对其使用了文件膨胀、seh异常、加壳等技术来对抗安全检测,在saxbn.exe运行时,会加载被劫持的libcrypto-3.dll,执行其中的恶意载荷。

图片

上述介绍中,可以知道该攻击利用了白加黑,那么想在每次开机时都执行恶意程序,saxbn.exe需要设置自启,该样本对saxbn.exe自启方式比较隐蔽,如果在没有原始样本的情况下,找到自启配置还是比较困难的,在隔离环境中执行样本,并将原始样本清理,然后试着用常规方式,看能否找到可疑的启动项。

自启动排查

上文中已经说明,想要执行恶意载荷,需要在每次开机时执行saxbn.exe,因此需要找到该程序的信息。

最常见的方式是去注册表中查找RUN启动项,配置项如下:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunonceHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnceHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\explorer\runHKCU\Software\Microsoft\Windows\CurrentVersion\RunHKCU\Software\Microsoft\Windows\CurrentVersion\RunonceHKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesHKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnceHKCU\Software\Microsoft\Windows\CurrentVersion\policies\explorer\run

对这些项逐个进行排查,没有发现可疑配置。

图片

然后排查启动项目录,需要自启动的程序会将自己的快捷方式保存在该目录下,按下Win + R键打开"运行"对话框,输入"shell:startup"打开启动项目录,勾选显示隐藏的项目,防止文件隐藏,发现该目录下为空,也没有发现可疑信息。

图片

接下来排查计划任务,恶意程序可以利用com接口,通过类似下方的代码,在计划任务中添加自启动

#include <windows.h>
#include <comdef.h>
#include <taskschd.h>
#include <iostream>#pragma comment(lib, "taskschd.lib")
#pragma comment(lib, "comsupp.lib")int main()
{HRESULT hr;// 创建与计划任务相关的 COM 对象CoInitializeEx(NULL, COINIT_MULTITHREADED);ITaskService* pService = NULL;hr = CoCreateInstance(CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskService, (void**)&pService);if (FAILED(hr)){std::cout << "Failed to create an instance of ITaskService!" << std::endl;return -1;}// 连接到任务计划程序hr = pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());if (FAILED(hr)){std::cout << "Failed to connect to the Task Scheduler service!" << std::endl;pService->Release();return -1;}ITaskFolder* pRootFolder = NULL;hr = pService->GetFolder(_bstr_t(L"\\"), &pRootFolder);if (FAILED(hr)){std::cout << "Failed to get the root folder!" << std::endl;pService->Release();return -1;}ITaskDefinition* pTaskDefinition = NULL;hr = pService->NewTask(0, &pTaskDefinition);if (FAILED(hr)){std::cout << "Failed to create a new task definition!" << std::endl;pRootFolder->Release();pService->Release();return -1;}ITriggerCollection* pTriggerCollection = NULL;hr = pTaskDefinition->get_Triggers(&pTriggerCollection);if (FAILED(hr)){std::cout << "Failed to get the trigger collection!" << std::endl;pTaskDefinition->Release();pRootFolder->Release();pService->Release();return -1;}ITrigger* pTrigger = NULL;hr = pTriggerCollection->Create(TASK_TRIGGER_BOOT, &pTrigger);if (FAILED(hr)){std::cout << "Failed to create a new trigger!" << std::endl;pTriggerCollection->Release();pTaskDefinition->Release();pRootFolder->Release();pService->Release();return -1;}IActionCollection* pActionCollection = NULL;hr = pTaskDefinition->get_Actions(&pActionCollection);if (FAILED(hr)){std::cout << "Failed to get the action collection!" << std::endl;pTrigger->Release();pTriggerCollection->Release();pTaskDefinition->Release();pRootFolder->Release();pService->Release();return -1;}IAction* pAction = NULL;hr = pActionCollection->Create(TASK_ACTION_EXEC, &pAction);if (FAILED(hr)){std::cout << "Failed to create a new action!" << std::endl;pActionCollection->Release();pTrigger->Release();pTriggerCollection->Release();pTaskDefinition->Release();pRootFolder->Release();pService->Release();return -1;}IExecAction* pExecAction = NULL;hr = pAction->QueryInterface(IID_IExecAction, (void**)&pExecAction);if (FAILED(hr)){std::cout << "Failed to query IExecAction interface!" << std::endl;pAction->Release();pActionCollection->Release();pTrigger->Release();pTriggerCollection->Release();pTaskDefinition->Release();pRootFolder->Release();pService->Release();return -1;}// 设置要执行的程序hr = pExecAction->put_Path(_bstr_t("C:\\Path\\To\\Your\\Program.exe"));if (FAILED(hr)){std::cout << "Failed to set the path of the program to execute!" << std::endl;pExecAction->Release();pAction->Release();pActionCollection->Release();pTrigger->Release();pTriggerCollection->Release();pTaskDefinition->Release();pRootFolder->Release();pService->Release();return -1;}IRegisteredTask* pRegisteredTask = NULL;hr = pRootFolder->RegisterTaskDefinition(_bstr_t(L"YourTaskName"),pTaskDefinition,TASK_CREATE_OR_UPDATE,_variant_t(),_variant_t(),TASK_LOGON_INTERACTIVE_TOKEN,_variant_t(L""),&pRegisteredTask);if (FAILED(hr)){std::cout << "Failed to register the task definition!" << std::endl;pExecAction->Release();pAction->Release();pActionCollection->Release();pTrigger->Release();pTriggerCollection->Release();pTaskDefinition->Release();pRootFolder->Release();pService->Release();return -1;}std::cout << "The program has been added to startup successfully!" << std::endl;// 释放 COM 对象及其接口pRegisteredTask->Release();pExecAction->Release();pAction->Release();pActionCollection->Release();pTrigger->Release();pTriggerCollection->Release();pTaskDefinition->Release();pRootFolder->Release();pService->Release();CoUninitialize();return 0;
}

打开计划任务,发现也没有相关配置信息。

图片

由于自启的方式还有很多,接下来我们使用Autoruns 工具来查看是否有saxbn.exe启动项的一些信息。

Autoruns 是一款由 Sysinternals 开发的免费工具,用于管理Windows操作系统中自动启动的程序和服务。它提供了一个全面的系统启动项和登录项清单,包括注册表中的所有自动启动位置,从而帮助用户找到并禁用或删除不需要的自动启动项。Autoruns 还提供了强大的搜索功能,以帮助用户准确定位到特定的启动项。此外,该工具还可以显示每个启动项的详细信息,包括路径、描述、发布者和数字签名等,从而帮助用户判断是否需要保留或禁用该启动项。Autoruns 可以帮助用户提高计算机的启动速度,减少系统资源的占用,并且增加系统的安全性,因为某些恶意软件和病毒可能会利用自动启动功能在计算机启动时自动运行。使用Autoruns,用户可以轻松地管理系统的启动项,确保只有必要的程序和服务在系统启动时自动运行。

Autoruns 对自启动的检测是比较全面的,然而遗憾的是,我们在Autoruns中依然没有找到saxbn.exe自启动的信息,但是Autoruns帮我们排除了很多saxbn.exe可能配置的方法。

图片

样本中使用的自启动

那么恶意样本是如何配置自启动的呢?

恶意程序在释放saxbn.exe时,修改了注册表\HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders下Startup项,将其改为C:\Users\Public\Documents\miso。

图片

Windows开机时会根据Startup配置的值,去该目录下获取自启项,查看miso目录,发现有一个快捷方式,指向了加载恶意dll的白程序saxbn.exe。

图片

Windows默认情况下,Startup的初始值为C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,这与我们之前通过命令执行shell:startup打开的目录相同。但是恶意程序已经修改了Startup值,也就是说,即使修改了Startup项的值,执行shell:startup依旧会打开默认配置,但实际情况该目录已被替换,这会误导我们启动项目录好像没有问题,甚至Autoruns工具也没有检测出来。

总结

使用样本中自启方式,是比较隐蔽,但是该方式仍有缺点,当受害者通过shell:startup添加一些自启项时,会因默认目录被修改,如果没有将默认目录下的文件持续同步到新配置的目录,自启动项不会生效,这时受害者会警惕自己的计算机可能已经被入侵。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/641407.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年短剧小程序视频解析#下载高手

2024年短剧小程序视频解析 | 点击获取绝妙剧情&#xff01;利用下载高手&#xff0c;轻松下载所有精彩片段&#xff01; 这里已经将下载高手打包好了&#xff0c;有需要的自己取一下 下载高手链接&#xff1a;https://pan.baidu.com/s/1KtR6830x8GciKtNcSRhQMg?pwd1234 提取…

手撕红黑树(map和set底层结构)(2)

[TOC]红黑树 一 红黑树概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&…

AI大模型探索之路-资料篇:大模型开发相关地址信息收藏

文章目录 前言一、OpenAI大模型二、LangChain开发框架三、RAGA评估框架四、GLM大模型五、搜索服务1. Tavily Search API 六、文本LLM大模型七、多模态LLM模型八、模型排行榜1.大模型评测体系&#xff08;司南OpenCompass&#xff09;2.大模型排行榜&#xff08;DataLearner AI&…

【ARM 裸机】C 语言 led 驱动

前面刚学习了汇编 led 驱动的编写和验证&#xff0c;现在开始就要进入 C 语言 led 驱动编写与验证了 ! 1、C 语言运行环境构建 1.1、设置处理器模式 使 6ULL 处于 SVC 模式下&#xff0c;之前已经提到了处理器的九种模式&#xff0c;参考&#xff1a;【ARM 裸机】汇编 led 驱…

虚拟机中安装的CentOS7的桌面右上角没有网络图标解决方案

问题描述 今天在打开CentOS7后&#xff0c;发现右上角的网络图标不见了&#xff0c;然后命令行访问百度也不通。然后上网查了一些解决方法。 原因分析及解决方案&#xff1a; 上网查了许多解决方法&#xff0c;其中一种成功解决了我的问题&#xff1b;我的是配置文件的问题。…

大模型Agent几种常见的架构设计模式

▼最近直播超级多&#xff0c;预约保你有收获 架构设计模式已成为程序员的重要技能。在大模型 Agent 智能体应用领域&#xff0c; 同样需要架构设计模式来支撑大模型应用在企业中规模的落地。 根据多年的架构设计经验&#xff0c;我在这里整理总结了一些针对大模型应用的设计方…

AI大模型探索之路-认知篇3:大语言模型微调基础认知

文章目录 前言一、微调技术概述二、微调的必要性三、大模型的微调方法四、微调过程中的技术细节五、微调后的模型评估与应用总结 前言 在人工智能的广阔研究领域内&#xff0c;大型预训练语言模型&#xff08;Large Language Models, LLMs&#xff09;已经成为推动技术革新的关…

如何训练一个大语言模型(LLMs)

目录 前言大语言模型 Vs机器学习模型训练过程步骤1&#xff1a;数据策划&#xff08;Data Curation)步骤2&#xff1a;格式化与预处理步骤3&#xff1a;训练模型步骤4&#xff1a;模型评估 LLM Leaderboard[LLM Leaderboard 2024](https://www.vellum.ai/llm-leaderboard)[Open…

crmeb的分销推广如何用

CRMBE分销推广说明 1、CRMEB分销模式 分销模式&#xff1a; 指定分销、人人分销、满额分销 指定分销&#xff1a; 用户默认无分销权限&#xff0c;需要后台开通分销权限后&#xff0c;才可以通过推广下级获得返佣&#xff1b; 人人分销&#xff1a; 用户在商城注册后自动获得分…

javaScript中的执行栈和执行上下文

执行上下文 执行上下文&#xff0c;英文全称为 Execution Context&#xff0c;一句话概括就是“代码&#xff08;全局代码、函数代码&#xff09;执行前进行的准备工作”&#xff0c;也称之为“执行上下文环境”。 运行JavaScript代码&#xff0c;当代码执行进入一个环境时&a…

COZY: Stylized Weather 3

远离枯燥的现实主义,一个精美手工制作的程式化天气系统。 从一天中的不同时间到一年中的不同季节,从蓬松的云朵到狂风暴雨,从晴朗的日子到浓雾弥漫,COZY都能轻松做到! ✅ 3.0中的新功能 HDRP支持 物理上精确的月球系统 8K 星形纹理 新的豪华云风格融合了纹理,创造出高性…

Facebook的区块链应用深度分析

去中心化身份验证的意义 在当今数字化社会中&#xff0c;身份验证的重要性不言而喻。对于Facebook这样的大型社交媒体平台来说&#xff0c;确保用户的身份真实性和数据的安全性是至关重要的。传统的中心化身份验证方式存在一定的安全风险和可信性问题&#xff0c;而去中心化身…