恶意文件往往披着系统文件的外衣、藏在深层目录中,或通过技术手段伪装自身,稍有疏忽就会成为后续反复感染的隐患。结合实战经验,我们总结出20个最易识别的恶意文件特征及对应的查找方法,涵盖Windows和Linux系统,每个方法都经过真实场景验证,可直接落地操作。
恶意文件最爱用“障眼法”,但文件名和存放路径的细节总能暴露破绽。
特征:文件名与系统关键进程高度相似,通过替换字母、增减字符伪装,如“svch0st.exe”(数字0替代字母o)、“explore.exe”(少一个r)、“lsasss.exe”(多一个s)。
查找方法:
C:\Windows\System32\和C:\Windows\SysWOW64\目录下执行dir /b *.exe | findstr /i "svchost|explorer|lsass",对比正常文件名(如“svchost.exe”),通过肉眼识别字符差异;/usr/bin/和/usr/sbin/目录执行ls | grep -E "systemd|sshd|crond",检查是否有“systemd_”“sshd32”等异常衍生名。实战案例:某挖矿病毒将自身命名为“systemd-resolvee”(多一个e),放在/usr/sbin/下,通过与正常系统的“systemd-resolved”对比,30秒内即可识别异常。
特征:文件名由无意义字母数字组合而成,如“a3f7d9x.exe”“xq298yt.dll”,常见于勒索病毒和挖矿程序。
查找方法:
Get-ChildItem -Path C:\ -Include *.exe,*.dll -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.Name -match '^[a-zA-Z0-9]{8,}$' } | Select-Object FullName
find / -name "[a-zA-Z0-9]{8,}.*" 2>/dev/null
注意:部分合法程序(如临时文件)也会用随机名,需结合路径进一步判断(如出现在/tmp/或C:\Users\Public\下风险更高)。
特征:恶意文件常藏在多层嵌套目录中,如“C:\Windows\System32\config\systemprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\”,或非标准系统目录(如“D:\Recovery\oem\”“/var/lib/docker/overlay2/”下的不明文件)。
查找方法:
dir /s /b C:\ | findstr /i "ProgramData\\Temp\\.*\\.*\\.*"筛选三级以上深层目录文件;find / -maxdepth 10 -type f | grep -E "/.*/.*/.*/.*/.*/",重点关注超过5层的目录。案例:某APT攻击样本藏在“/usr/share/doc/libpng16-16/examples/old/”下,该路径虽属系统目录,但“examples/old”为非标准子目录,通过深度筛选快速定位。
特征:利用用户对“恢复分区”的忽视,将恶意文件放在“C:\Recovery\”“/boot/efi/”等分区,且多设置为隐藏分区。
查找方法:
diskpart命令查看所有分区:执行list volume,找到“隐藏”属性的分区,分配盘符后查看内容;lsblk确认所有磁盘分区,执行mount /dev/sda3 /mnt(sda3为隐藏分区)后检查/mnt目录。系统文件的创建、修改时间有规律可循,恶意文件往往在时间维度露出马脚。
特征:系统目录下的文件(如“C:\Windows\System32\”)创建时间晚于系统安装时间,或早于系统发布时间(如Windows 10系统中出现2000年创建的“system.dll”)。
查找方法:
systeminfo | findstr "初始安装日期",Linux通过ls -l /var/log/installer/查看日志时间;# Windows示例
Get-ChildItem C:\Windows\System32\ -File | Where-Object { $_.CreationTime -lt (Get-Date "2020-01-01") } | Select-Object Name,CreationTime
注意:系统更新会产生新文件,需排除C:\Windows\WinSxS\等更新目录。
特征:正常文件通常“创建时间≤修改时间≤访问时间”,恶意文件可能因被篡改出现“修改时间早于创建时间”(如“2023-10-01创建,2023-09-01修改”)。
查找方法:
Get-ChildItem C:\ -File -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -lt $_.CreationTime } | Select-Object FullName, CreationTime, LastWriteTime
find命令:
find / -type f -printf "%p %Cw %Cr\n" | awk '$2 > $3'
特征:同一目录下多个文件的创建/修改时间完全相同(精确到秒),通常是恶意程序批量释放的文件(如勒索病毒加密前生成的临时文件)。
查找方法:
dir /tc C:\Temp\(按创建时间排序),观察是否有连续文件时间完全一致;ls -l --time-style=full-iso /tmp/,筛选时间戳相同的文件。案例:某勒索病毒会在“C:\Users\Public\”生成10个加密密钥文件,时间戳均为攻击发起时间,通过批量时间筛选5分钟内即可定位。
恶意文件的权限设置往往与系统文件不符,或通过特殊属性隐藏自身。
特征:普通用户目录下的文件拥有“管理员权限”,或系统目录下的文件仅“Users组”可写(如“C:\Windows\”下的文件权限包含“Everyone: 完全控制”)。
查找方法:
icacls命令检查:
icacls C:\Windows\System32\*.exe | findstr /i "Everyone.*F"
ls -l查看,重点关注-rwxrwxrwx(777权限)的系统文件:
find /bin /sbin /usr/bin -perm -0007 -type f
特征:同时设置“隐藏”和“系统”属性(attrib +h +s),且不在默认系统隐藏文件列表中(如“C:\Windows\system.ini”是正常隐藏文件,而“C:\Windows\sys.ini”则可能异常)。
查找方法:
dir /ah /as C:\Windows\,列出所有隐藏+系统属性文件,与干净系统对比差异;ls -la查看带“.”前缀的隐藏文件,执行find / -type f -name ".*" ! -path "/home/*/.bash*"排除正常隐藏文件(如.bashrc)。特征:在Windows中通过ADS技术将恶意文件附加到正常文件后,如“normal.txt:malware.exe”,直接查看无法发现,需特殊命令识别。
查找方法:
dir /r C:\Users\,若文件后显示“:以外的数据流(如DATA”),即为异常;streams.exe(Sysinternals工具)扫描:streams.exe -s C:\。即使文件名和路径正常,文件内容或关联行为也能暴露恶意本质。
特征:扩展名是“txt”但实际为可执行文件(文件头为“MZ”),或“jpg”文件包含PE结构(如“image.jpg”的十六进制开头为“4D5A”)。
查找方法:
file命令(Windows需安装Git或Cygwin):file C:\Users\Public\*.jpg,若显示“PE32 executable”则异常;xxd filename | head -n1,Windows用certutil -encodehex filename 1.txt。特征:文件中包含“cmd.exe /c”“powershell -encodedcommand”“rm -rf /”等危险命令,或勒索病毒常用的“encrypted”“ransom”等关键词。
查找方法:
findstr批量搜索:
findstr /s /i /m "powershell -encodedcommand" C:\*.ps1
grep命令:
grep -r -E "bash -c | wget http://" /tmp/*.sh
注意:部分合法脚本也会包含类似命令,需结合上下文判断(如无参数校验的“wget”调用风险更高)。
特征:带有数字签名但验证失败(如“签名已损坏”),或签名者为陌生机构(非微软、Adobe等正规厂商)。
查找方法:
sigcheck.exe(Sysinternals工具)批量检查:sigcheck.exe -s C:\Windows\System32\*.exe | findstr "Invalid"。特征:文件被可疑进程加载,如“rundll32.exe”加载非系统目录的“xxx.dll”,或“svchost.exe”调用“C:\Temp\”下的“service.dll”。
查找方法:
tasklist /m查看进程加载的模块:tasklist /m /fi "MODULES eq *.dll" | findstr /i "Temp";lsof命令:lsof | grep -i "/tmp/.*\.so"。恶意文件常通过非标准方式加载,或藏在容易被忽视的位置。
特征:在注册表启动路径(如“HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”)中,指向非系统目录的文件(如“C:\Users\Default\AppData\Local\Temp\update.exe”)。
查找方法:
reg query命令检查:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /s | findstr /i "Temp\|Users\\Public"
特征:计划任务的执行路径指向临时目录,或触发时间异常(如每分钟执行一次“C:\Windows\Tasks\cleanup.bat”)。
查找方法:
schtasks /query /fo list /v | findstr /i "TaskName.*Temp";/etc/cron.d/和/var/spool/cron/下的任务:grep -r "/tmp/" /etc/cron*。特征:C:\Windows\System32\drivers\下的.sys文件无微软签名,或厂商名称为陌生公司(如“恶意驱动.sys”的厂商显示“Unknown Publisher”)。
查找方法:
pnputil /enum-drivers,查看“发布者名称”列,筛选非“Microsoft Windows”的驱动;sigcheck.exe -d C:\Windows\System32\drivers\*.sys检查签名状态。特征:恶意文件被打包成ISO、VHD等镜像文件,或藏在Docker容器的镜像层中(如“/var/lib/docker/overlay2/xxx/diff/”下的不明文件)。
查找方法:
dir /s /b C:\*.iso *.vhd,挂载后检查内容;docker images列出镜像,docker save imagename -o image.tar后解压检查。特征:系统关键文件体积与正常版本不符(如“notepad.exe”正常约200KB,异常文件可能仅50KB或5MB),或“txt”文件体积超过100MB(可能包含加密数据)。
查找方法:
dir C:\Windows\System32\notepad.exe,与已知正常体积对比;du -h /bin/ls,若与同版本系统的“ls”体积差异超过20%则异常。特征:未手动运行的文件已建立网络连接(如“C:\Temp\test.dll”在进程列表中无对应进程,但通过netstat发现其连接恶意IP)。
查找方法:
netstat -ano和tasklist /fi "PID eq xxx",定位无对应进程的连接;ss -lntu和lsof -i,排查“ESTABLISHED”状态但无进程关联的连接。strings命令(Linux)或“Strings”工具(Windows)提取文件字符串,若包含大量域名、IP或加密密钥,需重点关注。识别隐藏恶意文件的核心是“打破思维定式”——不要只依赖杀毒软件,而要结合人工分析文件名、时间戳、权限等细节。建议蓝队在应急响应中按以下流程操作:
记住:恶意文件再狡猾,也会在某个特征上露出破绽。熟练掌握这20个特征和查找方法,能让蓝队在应急响应中节省大量排查时间,为遏制攻击扩散争取关键窗口。