在上一章,通过 LPE(提权),我们已经拿到了金库的最高管理权(SYSTEM 权限)。现在,我们面临一个新的挑战:
所有的攻击都是暂时的。
如果管理员重启了服务器,或者随手关掉了我们的程序,之前的努力就全部白费了。我们必须重头再来——这在实战中是不可接受的。
“持久化 (Persistence)”,就像是在游戏里“存档”。我们的目标是:无论系统重启多少次,无论管理员做什么,我们的后门都能自动、隐蔽地复活。
我们将通过四个等级,教你如何把你的“恶意代码”植入 Windows 的每一个角落。
原理简单,但也最容易被杀毒软件发现。
Windows 系统启动时,会按照一张“清单”逐个运行程序(比如你的微信、QQ自动启动)。黑客最直观的做法,就是把自己的马(Backdoor)加到这张清单里。
这是最经典的手段。Windows 注册表里有几个特定的位置(键值),专门用来存放开机启动项。
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunC:\temp\backdoor.exe),下次开机它就会自动运行。这就更简单了,直接把木马的快捷方式扔进 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 文件夹里。效果一样,也很容易被发现。(不过,某个常见的杀毒软件竟然不检测特定的后缀名!!)
当然还有用户自己的启动目录,它甚至不要管理员权限就可以写入 C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
利用系统自带的合法功能,混淆视听。
Windows 有一个“闹钟”功能,叫任务计划程序 (Task Scheduler)。它原本是用来定时更新系统或清理垃圾的。
GoogleUpdate 或 WindowsSystemCheck,看起来人畜无害,很难引起管理员的怀疑。服务是 Windows 的核心组件,它们在后台默默运行,甚至不需要用户登录。
Windows Health Monitor 的假服务,实际上运行的是后门。修改系统核心流程,让系统主动帮我们运行。
Winlogon.exe 是负责管理用户登录过程的关键进程。当你在输入密码时,它就在工作。
Userinit 键值,它规定了用户登录后要运行什么程序(通常是 userinit.exe)。userinit.exe, C:\hacker\backdoor.exe。这是利用了 Windows 的“懒惰”。当一个程序(比如 notepad.exe)需要用一个功能库(DLL)时,它会按照顺序去几个目录里找。
version.dll。我们自己写一个恶意的 version.dll,放在程序运行的目录下。程序一启动,发现旁边就有个 version.dll,看都不看就直接加载了——Bingo,代码执行。Windows 里的很多软件组件(COM对象)是通过注册表里的 ID (CLSID) 来索引的。
不在硬盘上留下痕迹,或者深埋于系统底层。
这是目前红队最喜欢的无文件攻击手段之一。WMI 是 Windows 强大的管理框架。
.exe 文件,传统的杀毒软件很难查杀。这是终极的大招,但现在很难见到了。不过,最近又出现了一些巧妙的APT野外利用,值得学习 https://www.kaspersky.com.cn/about/press-releases/more-elusive-and-more-persistent
作为防御者,他们如何检测我们的行动?
Autoruns 是检测持久化的神器。它可以扫描上述提到的几乎所有启动位置(注册表、服务、计划任务、DLL劫持点等)。svchost.exe 是由 services.exe 启动的。如果你发现一个 powershell.exe 突然启动了一个不明程序,那通常有问题。