有没有人有过从ASP.NET调用AMSI的经验?我有一个网络应用程序,允许用户上传文件,我们想对每个文件进行病毒扫描,然后将其保存到数据库中,并使其可供其他用户下载。
我是针对Windows AMSI开发的,当在我的机器上本地运行(从VS运行IISExpress)时,它工作得很好(我的测试用例是它拒绝文本文件中的EICAR测试字符串)。
但是,当我构建应用程序并将其放到我们的测试服务器上(运行IIS10)时,测试文件不会被视为恶意软件。在初始化接口时,我得到了所有正确的返回代码,扫描文件时,我得到了一个有效的结果(未检测到)。
有人有什么想法吗?我在本地运行Windows 10,服务器是2016。我注意到的一件事是,在网站上,桌面应用程序只显示在支持的服务器旁边。这仅仅意味着没有UWP吗?或者,它也可能意味着不作为服务运行?
https://docs.microsoft.com/en-us/windows/win32/api/amsi/nf-amsi-amsiscanbuffer
干杯,安迪
发布于 2020-03-25 09:03:25
在头疼了好久之后,我找到了问题所在。开箱即用的Windows Defender将自动从恶意软件检查中排除IIS进程。这样做的结果是扫描方法不会拒绝恶意软件。
可以关闭自动排除。
发布于 2021-02-08 17:32:01
我确认关闭自动排除是可行的。在Windows server 2016上,使用本地组策略编辑器,这会导致AMSI从IIS开始工作。在Windows10上,在病毒和威胁防护下,添加进程w3wp.exe的排除会导致AMSI停止工作。因此,排除是罪魁祸首。
对我来说,我不清楚为什么会有这种行为。Windows Defender不应冒着导致损坏的风险干扰操作系统的关键部分。不扫描零件的排除列表是可以理解的。因此,给定标准排除列表,Defender将不会扫描IIS进程。然而,我们的路线是相反的方向。在IIS中,我们要检查用户上传的恶意软件。IIS将有效负载发送到AMSI。AMSI将有效负载发送到Windows Defender。Defender应扫描有效负载中的恶意软件。为什么它会决定:这是IIS的请求,不需要扫描有效负载,只需返回有效负载是干净的?如果有人能解释这个逻辑,我将不胜感激。
我们不想关闭自动排除。这将使生产系统处于危险之中。排除是有原因的。
我们仍然希望使用AMSI;我们喜欢与本地安装的病毒产品的供应商无关的接口的想法。我们现在考虑以下解决方法:从IIS启动一个命令行exe,该命令行exe依次与AMSI对话。可能使用匿名管道将负载从IIS发送到命令行进程。命令行将有效负载转发到AMSI,AMSI将其转发到Windows Defender。Defender将扫描有效负载,因为请求进程的名称是命令行的名称,而不是w3wp.exe或排除列表中的其他名称。
对这种方法不太满意,但它应该可以工作。我们欢迎改进的建议。
https://stackoverflow.com/questions/60826868
复制相似问题