为什么.NET不验证BCL/CLR?

2024-02-09

BCL 和 CLR 中的所有 .NET 程序集(以后仅使用 CLR)都是强命名和数字签名 https://stackoverflow.com/questions/1334631/signing-of-net-assemblies。提供数字证书是为了提供组件未被篡改或替换的信任措施。然而,.NET 似乎从未检查过数字签名(它可以检查强名称如 Hans指出 https://stackoverflow.com/questions/7385084/why-does-net-not-verify-the-bcl-clr/7385229#7385229).

It makes sense that checking on assembly load is flawed becaused an modified CLR could fake the answers. My thinking is that the only safe place from the perspective of .NET1 to check is on start of the framework as part of the unmanaged code that boot straps the framework. Big downside is the performance impact.

I am looking at this from the perspective of a developer, in otherwords how do I know that my application is not being compromised by an already owned CLR2, or put another way is there anyway for an application to trust the CLR?

所以我的问题是为什么 .NET 不验证 CLR?是因为性能影响还是还有其他原因?



1. I am focusing on .NET, it is possible to mess with Windows and thus break the idea but if you already own Windows you don't really need to own .NET.
2. Example of this is user inputs password into application, it is stored in a SecureString but the BCL is compromised so the attacker is now getting that info. It allows them to capture the information for something else. I realise the attacker if he could replace the CLR could put a key logger on the machine too, but that is (hopefully) detectable with a decent security tool. There is also lots of other ways to attack this, the core is how do I know if SecureString has been changed.

这在 .NET 3.5 SP1 中进行了更改,旨在作为启动性能改进 http://blogs.msdn.com/b/shawnfa/archive/2008/05/14/strong-name-bypass.aspx对于完全信任运行的应用程序,使其与不进行此类检查的本机程序具有同等地位。验证强名称的成本很高,而且由于 DLL 数量众多,托管程序的冷启动往往很慢。您可以使用 .config 文件重新打开它:

<configuration>
    <runtime>
        <bypassTrustedAppStrongNames enabled="false"/>
    </runtime>
</configuration>

或者通过编辑注册表项,使其对所有 .NET 程序生效:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"AllowStrongNameBypass"=dword:00000000

还要在 64 位计算机上设置 HKLM\Software\Wow6432Node 密钥。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么.NET不验证BCL/CLR? 的相关文章

  • 实用程序库中应包含哪些内容[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 随着我的项目越来越多 我发现我经常从一个项目到另一个项目 从一个客户到另一个客户重复许多常见的任务 因此 我开始组装一个 实用程序 库 这是这些
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • Java有没有类似微软CHESS的工具?

    是否有类似于 Microsoft 的现有 Java 工具CHESS http research microsoft com chess 或者 CHESS 源代码是否开放 以便我可以尝试将其转换为 Java 谷歌的织线工 http code
  • 有谁知道一种更快的方法来执行 String.Split() 吗?

    我正在读取 CSV 文件的每一行 并且需要获取每一列中的各个值 所以现在我只是使用 values line Split delimiter where line是保存由分隔符分隔的值的字符串 衡量我的表现ReadNextRow我注意到它花费
  • 找不到 Microsoft.Office.Interop Visual Studio

    我正在开发一个使用 C 发送电子邮件的应用程序 该应用程序将能够使用邮件模板等 问题是我无法找到任何 Office Interop 引用 这意味着我无法使用 Outlook 我的计算机上安装了 Office 但我也尝试从此链接安装 PIAh
  • 当我使用 Image.FromFile() 时 FileNotFound

    我在这种情况下使用 Image FromFile string 方法 using System using System Collections Generic using System ComponentModel using Syste
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 取消任务

    我尝试运行一个关于取消任务的简单示例 如下所示 CancellationTokenSource tokenSource2 new CancellationTokenSource CancellationToken token2 tokenS
  • 如何拦截 Boo 中的方法调用?

    红宝石有method missing Python有getattr Boo 是否提供了一些可以用来拦截方法调用的东西 是的 布有IQuackFu http docs codehaus org pages viewpage action pa
  • 防止重入并确保某些操作获取锁的正确方法是什么?

    我正在设计一个基类 当继承该基类时 它将针对多线程环境中的上下文提供业务功能 每个实例可能都有长时间运行的初始化操作 所以我想让这些对象可重用 为此 我需要能够 为这些对象之一分配上下文以允许其完成工作 防止对象在已有上下文的情况下被分配新
  • Winforms 中的 WPF ElementHost 最大化时崩溃 (Windows)

    我正在尝试将新的 WPF 控件集成到现有的 WinForms 应用程序中 并使用 ElementHost Dock Fill 来托管以下 XAML UserControl NET 4 当我将 WinForm 设置为最大化时 我的整个操作系统
  • 为什么 new String("Hello") 在 C# 中无效?

    制作背后的逻辑 原因是什么 String s new String Hello World 在 C 中非法 错误是 string String char 的最佳重载方法匹配有一些无效参数 我对 API 文档不感兴趣 我感兴趣的是为什么这是非
  • 比较已编译的 .NET 程序集?

    有没有什么好的程序可以与编译 NET 程序集进行比较 例如 我有 HelloWorld dll 1 0 0 0 和 HelloWorld dll 2 0 0 0 我想比较差异 我该怎么做 我知道我可以使用 NET Reflector 并使用
  • 如何消除字符串中的所有换行符?

    我需要删除字符串中出现的所有换行符 来自数据库 我使用下面的代码来做到这一点 value Replace r n Replace n Replace r 我可以看到至少有一个角色的行为就像行尾一样幸存了下来 字符代码是8232 http w
  • 使一个对象只能被同一程序集中的另一个对象访问?

    每个业务对象都有一个包含 sql 调用的匹配对象 我想限制这些 sql 对象 使其只能由匹配的业务对象使用 如何才能实现这一目标 Update 格雷格提出了关于可测试性的观点 由于 SqlObjects 将包含非常特定于业务流程的 sql
  • C# 和匿名对象数组

    这样的表达是什么意思呢 obj DataSource new new Text Silverlight Count 10 Link Tags Silverlight new Text IIS 7 Count 11 Link http iis
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect

随机推荐

  • 在Using语句中从DataLayer返回DataReader

    我们有很多数据层代码都遵循这个非常通用的模式 public DataTable GetSomeData string filter string sql SELECT FROM SomeTable WHERE SomeColumn Filt
  • 声明字符串 public static readonly 与 public const 与 public static const

    在每个项目中 我们都有一个文件用于存储该项目中使用的各种 SQL 语句 类的声明方式和字符串的声明方式有一些变化 类声明示例 internal sealed class ClassName internal static class Cla
  • 在RESTLET中读取Web-INF中的配置文件

    我正在尝试读取放置在 WEB INF 根路径内的配置文件 该应用程序使用RESTLET框架 我在官方RESTLET上读到doc http restlet com technical resources restlet framework j
  • 使用 JSON.NET 反序列化 Noda Time 的 LocalDateTime

    我正在尝试使用 Json NET 序列化一些 Noda Time 值 但遇到了麻烦 序列化很简单 LocalDateTime dt Assigned elsewhere LocalDateTimePattern isoDateTimePat
  • 如何使用 H2、JPA 和 Hibernate 映射 JSON 列

    我在应用程序 MySQL 5 7 中使用 并且有 JSON 列 当我尝试运行集成测试时 它不起作用 因为 H2 数据库无法创建表 这是错误 2016 09 21 16 35 29 729 ERROR 10981 main org hiber
  • RxJS / Angular Observables 使用 1 个还是多个管道?

    具有以下内容 只是一个简单的示例 observable pipe map s gt s anything pipe filter t gt t gt 5 pipe map t gt t 5 subscribe XXX 为什么我应该使用 1
  • 在 Hibernate 3.3.1ga 和 HSQLDB 中使用 @Table 和架构名称

    如何使用 Hibernate 3 3 1ga 和 HSQLDB 在单元测试中实现此功能 Entity Table name CATEGORY schema TEST public static class Category 问题是 Hibe
  • 图像二进制解释:未知图像格式

    假设我有某种格式的图像 其二进制表示形式 例如来自 OpenCV 的 cv Mat 或来自 Android 的 YuvImage 未压缩 并将其数据解释为 YUV NV21 嗯 这是 DJI 提供的示例 SDK 差不多了 这是我所得到的 由
  • 如何从抽象基类覆盖模型字段的默认值

    我有一些代码 如下所示 class BaseMessage models Model is public models BooleanField default False some more fields class Meta abstr
  • 从 Clojure 映射中过滤 nil 值?

    最好的过滤方法是什么nilClojure 映射中的值 a x b nil c z gt a x c z 我会用 into filter comp some val a x b nil c z gt a x c z 正在做的some http
  • C++中传递成员函数指针

    我正在尝试传递一个函数指针 类型为QScriptEngine FunctionSignature QScriptValue QScriptContext QScriptEngine 到另一个函数 但我需要传递的函数是类的成员函数 我这样使用
  • 网络x绘制_网络x_边缘capstyle

    有谁知道在通过 例如 绘制networkx边缘时是否可以对线条属性进行细粒度控制draw networkx edges 我想控制线路solid capstyle and solid joinstyle 它们是 matplotlib Line
  • 选择 Atom 中所有找到的 RegEx 结果

    我正在尝试选择正则表达式查找找到的所有结果 以便我可以全部修改它们 不要用文本替换它们 例如 将它们全部大写Cmd K gt Cmd U 我知道我could通过重复来一项一项地做Cmd G Cmd K Cmd U 但对于大文件来说 这根本不
  • Laravel 4 绕过路由的维护模式

    我已将我的应用程序放下以进行维护php artisan down命令 我的自定义维护页面作为电子邮件输入 用于接受来自用户的电子邮件并存储在我的数据库中 以便在站点备份并再次运行时通知用户 但是当我使用 POST 提交表单时 我被重定向到维
  • mViewPager.getCurrentItem() 不返回第一个和最后一个寻呼机的正确位置

    我正在尝试获取视图寻呼机的页码 我遇到了很多Stackoverflow Q A 他们都说要使用 currentposition mViewPager getCurrentItem 但此方法不适用于第一页和最后一页 如何解决这个问题 提前致谢
  • 运行 Hadoop 作业时不是有效的 Jar

    我想运行 WordCount 示例 在eclipse中运行正确 在输出文件夹中存在输出文件 我制作了WordCount的jar文件并想通过命令运行它 hadoop jar WordCount jar Projects input Proje
  • 使用index.js在React中导入多个图像资源

    我一直在使用一种收集组件文件以供导出的模式index js文件放置在目录中 例如 index js file in components directory export Splash from Splash export Portfoli
  • 使用 Spring Boot 重命名 Liquibase 变更日志表

    我在用着Liquibase v 3 5 3 和 一起Spring 启动 v 1 5 3 我想使用 spring boot 属性文件更改 liquibase 变更日志表名称 我发现做到这一点的唯一方法是设置liquibase database
  • 找到具有相同权重的最大边数的生成树

    问题就在这里 给出一个带权无向连通图G 权重是恒定的 任务是提出一种算法 找到满足这两个条件的 G 的生成树的总权重 按优先级排序 生成树必须有相同权重的最大边数 与实际重复重量值无关 应最小化总生成树重量 这意味着 例如 权重为 120
  • 为什么.NET不验证BCL/CLR?

    BCL 和 CLR 中的所有 NET 程序集 以后仅使用 CLR 都是强命名和数字签名 https stackoverflow com questions 1334631 signing of net assemblies 提供数字证书是为