最近被扫了一个“内存加载clr程序集漏洞”,没给出解决方案,网上也没搜索到有价值的信息,有人能帮解释一下吗
这个需要深入研究下CLR内存管理。可以试下在Main方法上应用LoaderOptimizationAttribute特性,并指定LoaderOptimization为MultiDomain即可。采用对Foo类型Foo类型(typeof(Foo))对象加锁。
虽然没有直接的解决方法,但是建议楼主看一下这篇文章,可能会有所启发https://www.anquanke.com/post/id/86552
托管代码在被编译后部署在称作程序集的单元中。 程序集将打包为 DLL 或可执行 (.exe) 文件。 尽管可执行文件可以自动运行,但 DLL 必须在现有应用程序中承载。 托管 DLL 程序集可以加载到 Microsoft SQL Server中并托管。 SQL Server要求使用 CREATE ASSEMBLY 语句在SQL Server数据库中注册程序集,然后才能在进程中加载该程序集并使用。 还可以使用 ALTER ASSEMBLY 语句从较新版本更新程序集,或使用 DROP ASSEMBLY 语句从SQL Server中删除程序集。 你可以使用下面的TSQL语句来查询验证你的CLR程序集是否正确设置,或者寻找现有的用户自定义的CLR程序集。
USE msdb;
SELECT SCHEMA_NAME(so.[schema_id]) AS [schema_name],
af.file_id,
af.name + '.dll' as [file_name],
asmbly.clr_name,
asmbly.assembly_id,
asmbly.name AS [assembly_name],
am.assembly_class,
am.assembly_method,
so.object_id as [sp_object_id],
so.name AS [sp_name],
so.[type] as [sp_type],
asmbly.permission_set_desc,
asmbly.create_date,
asmbly.modify_date,
af.content
FROM sys.assembly_modules am
INNER JOIN sys.assemblies asmbly
ON asmbly.assembly_id = am.assembly_id
INNER JOIN sys.assembly_files af
ON asmbly.assembly_id = af.assembly_id
INNER JOIN sys.objects so
ON so.[object_id] = am.[object_id]
使用这个查询我们可以看到文件名、程序集名、程序集类名、程序集方法和方法映射到的存储过程。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。