【网络法医】基线取证和常见反取证技术
【网络法医】基线监控和常见反取证技术
- 1.基线监控
- 2.常见反取证技术
- 时间戳
- 数据隐藏
- 绝对删除文件
- Linux
- Windows
- 通过修改Windows配置增大取证难度
1.基线监控
基线是对系统某些部分进行快照,例如,可以计算并存储文件系统中每个文件的哈希值,在遭到入侵后快速找出哪些文件被修改。也可以应用于创建的用户帐户、正在运行的进程、正在运行的服务以及任何其他不应有太大变化的事物
文件完整性监控 (FIM) 是一种关键的安全技术,通过跟踪文件中的变化来保护 IT 环境和数据。它涉及两个关键步骤:
- 基线比较: 使用文件属性或加密校验和(如 MD5 或 SHA-2)建立基线,以便在遭到入侵后快速找出哪些文件被修改
- 实时变更通知: 当文件被访问或更改时,立即警报
2.常见反取证技术
时间戳
1、识别未修改的属性,让被修改文件的原始时间戳暴露
攻击者可能会对文件的时间戳进行更改以避免被发现,在 NTFS 文件系统中,文件的时间戳存储在 MFT(主文件表) 中的两个不同属性:
$STANDARD_INFORMATION
(标准信息属性):包含 Windows 资源管理器等工具常显示的时间戳信息。攻击者通常会修改这个属性,以欺骗普通的文件检查工具$FILE_NAME
(文件名属性):这个属性也存储了一组时间戳,但大多数常见工具不会读取它。因此,即使攻击者篡改了$STANDARD_INFORMATION
,$FILE_NAME
可能仍然保留着原始时间戳,可以用于取证分析
在取证调查中,识别可疑修改文件的另一种方法是批量对文件比较两个属性上的时间,寻找不匹配的文件
2、查看修改日志文件
对文件系统的所有元数据更改都会被记录,这一过程称为写前日志。记录的元数据保存在名为$LogFile
的文件中,该文件位于NTFS文件系统的根目录。可以使用LogFileParser
等工具解析此文件并识别更改
LogFileParser
3、通过纳秒时间来判断可疑文件
NTFS时间戳的精度为100纳秒。因此,找到时间戳为2010-10-10 10:10:00.000:0000
的文件是非常可疑的
数据隐藏
在 NTFS 文件系统中,一个簇是最小的分配单元,通常是 4KB 或 8KB。如果一个文件的大小不是簇大小的整数倍(例如一个文件大小为 6.5KB,而簇大小为 4KB),那么:
- 该文件将占用 两个簇(即 8KB)。
- 最后的 1.5KB 不属于该文件的内容,但仍然存在于存储介质上。
- 这部分空间就称为 Slack Space(松弛空间)。
攻击者可以利用这个松弛空间来隐藏恶意数据,而不改变文件的表面内容,比如,常见的手法:
- 低级工具(如
WinHex
)可以直接修改磁盘扇区,在文件占用的簇中写入额外数据,而不影响文件的正常读取 - 通过 bmap 计算出文件在磁盘上的偏移位置,并使用 dd 写入数据
- 专门的工具(如 Slacker)可用于自动将数据写入 Slack Space,而不修改文件本身
那么,如何检测 Slack Space 隐藏数据呢?
- 使用
FTK Imager
或Autopsy
解析磁盘镜像,并检查 Slack Space 是否包含异常数据 - 使用
WinHex
手动查看文件的物理分配情况,并检查 Slack Space 是否包含可疑字节序列 - 使用
blkstat
可以列出磁盘的块级信息,并检测文件簇是否包含额外数据 - 使用
bulk_extractor
可扫描磁盘中的隐藏数据
绝对删除文件
在 Linux、Windows 或其他操作系统中,普通删除文件(如 rm、del)并不会真正清除数据,而只是标记文件为“已删除”,文件内容仍然存储在磁盘上,可以被数据恢复工具找回
Linux
Linux 系统上的文件或文件夹的安全(永久)删除常用的方法有 shred, wipe 和 srm
1、shred
shred 通过多次随机覆盖文件数据,然后删除文件,使其更难恢复
sudo apt update
sudo apt install shred
例如,删除文件filepath.txt:
shred -uvz -n 5 filepath.txt
其中,各参数含义:
- u 覆盖后截断并删除文件
- v 显示进度
- z 最后一次用0覆盖,以隐藏覆盖操作
- n 指定覆盖文件内容的次数,默认是3
该方法只能覆盖重写删除文件,无法处理文件夹
2、wipe 永久删除磁存储器的文件和文件夹
sudo apt update
sudo apt install wipe
例子:
wipe -rfi dirpath
其中,各参数含义:
- r 递归子目录
- f 强制删除,不用确认
- i 显示进度
注意:wipe 不适用于 SSD,因为 SSD 采用磨损均衡,文件可能存储在不同的物理位置
3、srm 安全删除文件和文件夹
sudo apt update
sudo apt install secure-delete
例子:
# 删除文件夹
srm -rvz dirpath
# 删除单个文件
srm -rvz filepath.txt
其中,各参数含义:
- r 递归子目录
- v 显示进度
- z 最后一次使用0覆盖文件内容,而不是随机数
Windows
eraser工具
通过修改Windows配置增大取证难度
1、禁用时间戳 - UserAssist(一个注册表项,维护用户运行每个可执行文件的日期和时间)
禁用UserAssist需要两个步骤:
- 设置两个注册表项,
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs
和HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled
,都设置为零,禁用UserAssist - 清除
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>
的注册表子树
2、禁用时间戳 - Prefetch(保存有关执行的应用程序的信息)
- 执行
regedit
- 找到表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters
右键单击EnablePrefetcher
和EnableSuperfetch
,选择修改,将每个值从1(或3)更改为0 - 重启服务器
3、禁用时间戳 - 最后访问时间
- 打开注册表编辑器(Regedit.exe)
- 找到表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
- 查找
NtfsDisableLastAccessUpdate
。如果不存在,添加此项并将其值设置为1,将禁用最后访问时间时间戳功能 - 关闭注册表编辑器,并重启服务器
4、删除USB历史
- 所有USB设备条目都存储在Windows注册表中的
USBSTOR
注册表项下。找到此键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR
。删除此项将删除USB历史 - 可以使用USBDeview工具进行验证,查看是否已经完全清除了USB使用历史
- 另一个保存USB信息的文件是
C:\Windows\INF
中的文件setupapi.dev.log
,记得把这个文件也删除
5、删除影子副本
禁用影子副本(VSS,Volume Shadow Copy)可以防止系统自动创建数据的备份,从而减少数据恢复的可能性
显示影子副本使用的磁盘空间和存储配置:
vssadmin list shadowstorage
清除所有影子副本:
vssadmin delete shadows /all /quiet
禁用影子副本:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS
,找到 Start 键,将其值改为 4(禁用)并重启计算机
6、删除Windows事件日志
(1) Windows + R --> eventvwr.msc --> 展开“Windows日志” --> 右键单击每个类别并选择“清除日志”
(2) for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"
(3) Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }
7、禁用Windows事件日志
(1) reg add 'HKLM\SYSTEM\CurrentControlSet\Services\eventlog' /v Start /t REG_DWORD /d 4 /f
(2) 在服务部分禁用“Windows事件日志”服务
(3) WEvtUtil.exec clear-log或WEvtUtil.exe cl
8、禁用$UsnJrnl
$UsnJrnl
是 NTFS 文件系统的一部分,它会记录文件系统中的所有更改(如创建、删除、修改文件等)
运行以下命令删除 USN 变更日志:
fsutil usn deletejournal /d C:
之后验证 USN 变更日志是否已删除:
fsutil usn queryjournal C:
如果成功删除,系统将返回 “Error: The system cannot find the file specified.
”(错误:找不到文件)