亲爱的 Windows 战士们,
我偶然发现了一个有趣的问题。一名使用 Windows 10 的用户通过电子邮件收到了一个可疑文件,由于一时注意力不集中,他设法将其保存在桌面上并双击它。该文件名为“something.jpg (1).img”,用户甚至将文件扩展名设置为“系统范围显示”——只是没有注意。
当我被叫去帮忙时,文件在桌面上,无法删除,“文件已被另一个程序打开”。无法通过 Process Explorer 或 Handles(SysInternals 的工具)按文件名找到打开的句柄 - 可能是恶意软件(rootkit 风格?)做了一些掩饰。重新启动进入安全模式确实摆脱了隐藏的进程,我可以删除该文件。之后我确实从备份中恢复了操作系统,以防万一……
在我从备份中恢复操作系统之前,我尝试检查 .IMG 扩展名分配了什么“默认应用程序”。令我感到好奇的是,没有!扩展名 .img 不在系统范围列表中...但是,当我创建一个空文件并将其重命名为 test.img 时,文件资源管理器(Windows 默认 shell)确实尝试打开该文件,没有报告“没有默认应用程序,请选择一个”,而是抱怨文件内容意外/格式错误...
也就是说,这似乎是 Windows 10 中文件资源管理器的一些内部功能,可以通过适当制作的文件加以利用!真恶心。
有什么办法可以堵住这个愚蠢的漏洞吗?(是的 - 在邮件服务器中禁止该扩展。已经完成了。)
也许我应该定义一个明确的文件关联,要么定义一个知道如何处理某些合法的.img 文件(Rufus?)的安全应用程序,要么定义一个理所当然地拒绝与任何类型的.IMG 文件有任何关系的应用程序……(例如,calc.exe)并希望我的虚假/讽刺的关联不会被覆盖或重置,迟早……
答案1
您没有说明如何检查“默认应用程序”。在 fegistry 中有几个位置需要检查:
HKCR:\.img
- 如果它有一个字符串值(默认),那就是进程ID:
文件扩展名子键具有以下一般格式:extension=ProgID。文件扩展名子键存储在 HKEY_CLASSES_ROOT 子树中。
如果该键有
PerceivedType
值,也请记下来。接下来,检查以下内容:
HKCR\<*ProgID*>\Shell\Open
这可能是正在打开文件的程序,或者可能被其他键覆盖。
接下来,检查以下两项:
HKCR\SystemFileAssociations\.img\Shell\Open
HKCR\SystemFileAssociations\<PerceivedType>\Shell\Open
此键下未定义的动词的其他动词
Open
都会出现在上下文菜单中,无论<ProgID>
或UserChoice
(见下文)关联如何。
最后,检查以下内容:
HKCU\Ssoftware\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.img\UserChoice
这是“最有可能的嫌疑人”,因为它是由“您想使用什么程序打开此文件?”对话框设置的,并将覆盖Open
下定义的任何动词HKCR
。删除此键将使文件类型恢复为 下的默认值HKCR
,或者,如果 下未定义任何内容HKCR
,则类型将恢复为未关联的状态(您想要的!),双击 中的该类型的文件探索者将显示“此文件没有与之关联的程序”对话框。
答案2
如果用户双击了该文件,那么执行该文件的是他,而不是 Explorer,也不是错误(至少不是 Explorer 中的错误)。
用户完全缺乏注意力,忽略了 Windows 对下载文件的警告信息,并选择打开该文件,从而感染了自己的计算机。
Windows 中存在一些与打开特制图像文件有关的已知错误。您应该完全更新 Windows,尽管我不能保证不存在更多目前未知但已被利用的类似错误。
对用户进行教育和警惕是唯一的解决方案。
答案3
感谢所有回复的人。特别感谢 Keith Miller,他提供了正确的线索,让我重新找到了方向。
首先,我最初是如何通过扩展检查关联的应用程序的:我通过 Windows 10 GUI 配置“默认应用程序”。 .img 扩展名不在其列表中。 但是,关于我早期得出的文件资源管理器使用内部/编译时关联的结论:我错了。
根据 Keith 的建议,我检查了注册表中可以“注册”文件扩展名的位置:
1.
[HKEY_CLASSES_ROOT\.img]
@="Windows.IsoFile"
指向:
2.
[HKEY_CLASSES_ROOT\Windows.IsoFile\shell\mount]
"ExplorerCommandHandler"="{9ab3b1c9-3225-4bb4-93b6-bfb3c0d93743}"
并进一步
[HKEY_CLASSES_ROOT\CLSID\{9ab3b1c9-3225-4bb4-93b6-bfb3c0d93743}]
@="Disc Image Mount"
因此注册确实存在,并且告诉我,.IMG 文件被视为文件系统的可安装映像。
3.
HKCR\SystemFileAssociations\.img <-- doesn't exist
和
4.
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.img]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.img\OpenWithList]
"a"="{F38BF404-1D43-42F2-9305-67DE0B28FC23}\\Explorer.exe"
"MRUList"="a"
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.img\OpenWithProgids]
"Windows.IsoFile"=hex(0):
因此该注册也确实存在。
我继续删除第一个注册,但这并没有改变 Windows 的行为。当我双击一个名为 test.img 的空文件时,Explorer 仍尝试将其作为 FS 映像打开。在我删除第二个注册(HKCU \ ... \ FileExts 下的注册表分支)后,Windows 终于开始将扩展名视为未知扩展名。
=> 毕竟,.IMG 的关联并未在文件资源管理器中编译 :-)
接下来,我尝试将另一个应用程序与 .IMG 扩展名关联。我选择了 IrfanView,因为我的电脑上本来就没有这个程序,而且它默认会挂接 .IMG 扩展名。我在安装过程中要求 irfanview 挂接所有图像类型。
有趣的是,安装向导完成后,Windows 会不是在 IrfanView 中打开 .IMG,也打开 .JPG / .PNG / .GIF。因此,我再次进入 Windows 默认应用程序 GUI,发现那些经典的图片扩展名映射到“照片”或其他内容...我不记得 IMG 映射到什么了。我只是在默认应用程序 GUI 中将它们全部单击到 Irfanview,这一次我的选择成功了。
.IMG 最终出现在我的注册表中的方式如下:
[HKEY_CLASSES_ROOT\.img]
@="img_auto_file"
和
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.img]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.img\OpenWithList]
"a"="{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\\OpenWith.exe"
"b"="i_view64.exe"
"MRUList"="ba"
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.img\OpenWithProgids]
"img_auto_file"=hex(0):
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.img\UserChoice]
"ProgId"="Applications\\i_view64.exe"
"Hash"="gkalOpSfHNg="
显然,有一个名为 OpenWith.exe 的东西,它在 OpenWithList 中被首先考虑。而且,“默认应用程序”有自己的关联列表 - 可能是存储在 UserChoice 中的列表……
看起来有点复杂,但至少现在对我来说是有用的:-)
但等等,这还不是全部。还有一件事我错了。
我拿到了那个有问题的 .IMG 文件,并尝试在 Linux 下(= 在卫生条件下)对其进行一些分析。Linux 中的“文件”工具告诉我,我可疑的 .IMG 文件实际上是一个 UDF 文件系统映像。我知道 UDF 是什么。所以我在 Linux 中将其安装到一个临时位置。成功了。里面有类似 invoice.jpg.exe 的东西。顺便说一句,是用某种 .NET 编写的,内容是人类可读的。哦,是的 - 一定是某种非常强大的恶意软件。我没有尝试执行它,只是将样本提交给了微软(通过 Defender 的提交表单),以防他们感兴趣。
这意味着:.IMG 文件本身可能无害。Explorer 所做的就是“循环”安装图像文件 = 可能为卷分配了一个驱动器号,并且可能没有弹出显示其根目录的 Explorer 窗口。因此,用户和我都没有注意到驱动器号的出现。然而,当/因为图像文件被安装时,系统正在使用它。正如我们尝试删除它时所报告的那样。不出所料,在重新启动(进入安全模式)后,图像文件不再被安装,因此可以删除。用户实际上没有找到伪造的 .JPG 文件(隐蔽的 EXE),也没有尝试运行它。可能没有造成任何伤害。.IMG 文件本身,或文件资源管理器对它的“处理”,可能不会导致恶意代码执行(缓冲区溢出类型或其他)。
.IMG 可能只是一个良性的容器/包装器,“希望”对电子邮件防病毒/反恶意软件工具来说是不透明的,恶意软件作者使用它来将攻击二进制 .EXE 偷运给毫无戒心的用户。我见过 .ISO 以这种方式使用,可能还有一些不太常见的存档格式(RAR、ARJ)。尽管某些存档器的某些过去版本也容易受到直接攻击。