.NET内存中敏感数据的保护方案

从具体上来说,.NET元数据机制的设计,既方便了反射等强大特性的实现,又同时给代码安全及程序运行时安全带来了巨大的隐患。迄今为止,还未发现比较有效元数据可见性控制方法。当然,这不在本文的讨论范围之内。我还是更愿意在这篇文章在针对.NET的内存分配机制讨论一个更具体的问题:如何保护在内存中存储的敏感数据?

String的驻留机制带来的安全性问题

String是代码中使用频率很高的对象类型。为了提高字符串的处理速度,节省内存空间,Microsoft为.NET String类设计了驻留机制。其大概的逻辑模型是,大部分String存储在一个类似的Hash Table中,string的内容是哈希表的key,该key对应的value是string的内存地址。这样内容相同的string实际上只是对应内存堆上同一个字符串。之所以说是大部分而不是全部,是因为有一部分动态创建(concat)的string,是不会进入这样一个虚拟的hash Table中的。本文的最后附上String类的源代码,有兴趣的同学可以研究研究。

这就带来了最主要的问题,你无法准确控制或者预测一个特定字符串的生命周期。一个以string形式呈现的敏感数据(比如密码)很有可能在内存中一直存在,而你却预测它在超出某个特定函数的作用域的时候就被垃圾回收了。这样,当发生操作系统换页的时候(而这也往往是可能发生的),这个敏感数据就被保存到本地文件pagefile。sys当中,或者当操作系统休眠的时候,敏感数据进入hiberfil.sys中。一个可能的敏感数据泄漏过程是:

使用SecureString类

现在既然String靠不住了,我们能有什么简单的方法来特别的保护我的敏感数据吗? 幸运的是,.NET从Version 2.0开始,为我们提供了一套基于DPAPI的解决方法 - SecureString。

SecureString类具有以下特性:

SecureString中的内容是加密之后的,而不是平文;

使用Windows的加密方案DPAPI ;

SecureString只能在基于NT的平台上使用

时间: 2024-12-11 00:00:44

.NET内存中敏感数据的保护方案的相关文章

.NET : 如何保护内存中的敏感数据?

我们程序的威胁来自于各个方面.在互联网高度发达的今天, 安全性问题已经是企业软件开发所必须面对的最重要的问题. 从安全学的一般意义上来讲,安全性主要体现在两个方面: 敏感数据的泄露 敏感数据的破坏 从具体上来说, .NET 元数据机制的设计, 既方便了反射等强大特性的实现, 又同时给代码安全及程序运行时安全带来了巨大的隐患.迄今为止, 还未发现比较有效元数据可见性控制方法. 当然, 这不在本文的讨论范围之内. 我还是更愿意在这篇文章在针对.NET的内存分配机制讨论一个更具体的问题: 如何保护在内

修改内存-汇编中使用debug更改内存中的内容问题

问题描述 汇编中使用debug更改内存中的内容问题 为了学习汇编,我经常使用debug中的指令修改主板内存中存的数据,我想问的是,我这样总是修改联系的话会不会使电脑内存出现问题呢?有牛人说虽然我们经常修改的是那些可以修改的内存内容,但是有的机器甚至连主板ROOM内容都能修改,这样练习练习岂不是我们很有可能将来得换一块主板?哈哈,不知道我说的哪里有问题,请大神指教!谢谢 我是在虚拟机中安装操作系统,在用debug修改内存内容的,也不知道这样做是不是会影响虚拟机中的系统的正常性能,反正是不会影响原本

独家| ChinaLedger白硕:区块链中的隐私保护

隐私问题一直是区块链应用落地的障碍问题之一,如何既能满足监管,又能不侵害数据隐私,是行业都在攻克的问题.那么,到底隐私问题为何难?有什么解决思路,以及实践创新呢?零知识证明.同态加密等技术,又能否解决问题呢?裸数据交易应如何控制? 雷锋网AI金融评论报道,在5月11日由北京国家会计学院主办,区块链初创公司灵钛科技,能源区块链实验室,众安科技.新加坡第三方支付公司Omise协办的 "区块链在中国的应用与产业发展主题论坛" 上,Chinaledger技术委员会主任白硕老师围绕"区

爱数面向总部和分支机构的分层保护方案

一.大型机构的IT现状 集团公司或政府机关等大型机构中,其IT基础结构具有复杂.分散等特征,并且信息化程度越高,http://www.aliyun.com/zixun/aggregation/18278.html">数据类型越繁杂,数据量也越庞大.特别是有总部和隶属的分公司.分支机构等分散 在不同地域的大型机构(如图所示),其网络往往具有以下特征: ☉ 总部和各分支机构都有大量PC机,一些日常的办公文档都保存在PC机上. ☉ 除总部存在大量服务器以外,部分分支机构同样也有扮演不同角色的服务

账号安全 IPT身份保护方案助你无忧登录

本文讲的是账号安全 IPT身份保护方案助你无忧登录,在享受互联网为我们带来便利的同时,相信大家一直都在为自己的账号安全担忧,特别是去年底发生了泄密门事件之后,似乎单纯的账号加密码的方式已经无法保护我们互联网信息的安全,人们更是无时无刻的担心着自己账号的安全. 回顾去年底的泄密门事件,仅CSDN就有600万的账号和密码被公开,随后,密码泄露事件开始大范围发酵,天涯等十几家网站,遭到曝光的用户信息条数已过亿.根据艾瑞统计,2011年每月新增木马在5000万左右,11月新增木马更是达到了6445万个,

免杀新姿势:利用线程将恶意代码注入到内存中

本文讲的是免杀新姿势:利用线程将恶意代码注入到内存中, 产生存放远程攻击线程的进程 在这篇文章中我不想一步一步解释我编写的C#代码,但是我会展示下它能够绕过杀毒软件,并且操作非常简单,而且实用. 首先说明一下: 1. 我是在三年前发现这个攻击方法的,当我在做免杀的时候我发现了很多都是以0x0地址开始的进程.在我的win7系统中这种恶意代码绕过了我的杀毒软件,只是在内存中可以找到,然后以系统权限运行.所以,当然是NSA干的咯! 2. 这并不意味着以0x0开始的进程都是进行恶意注入的. 就像刚才所说

HDFS混合加密保护方案的设计

HDFS混合加密保护方案的设计 梁胜昔 秦军 宋蕾 王星 如何有效解决云计算中存在的安全问题是关系到云计算产业发展的关键.针对Hadoop云计算系统在数据共享中存在的安全问题,采用了一种基于RC4 和RSA 的混合加密保护方案,该方案在云存储数据共享过程中,紧密结合Hadoop云计算系统的特性,能够实现数据的安全共享,同时兼顾保密性与效率. HDFS混合加密保护方案的设计

从内存中偷取未加密的 SSH-agent 密钥 【已翻译100%】

如果你曾使用SSH密钥来管理多台机器,那么你可能使用过SSH-agent.这个工具使SSH密钥在内存中持续化,这样用户就不用每次都输入口令.然而,这会导致一些安全风险.root用户可能有权限从内存中取出解密后的SSH密钥,并重构它. 由于需要root权限,这种攻击看起来没什么用.例如,一个攻击者可能安装一个Keylogger并使用它来获得SSH密钥的口令.然而,这要等待肉鸡输入它们的口令.这取决于肉鸡掉线的频度,可能需要几个小时,几天或几周.在快速攻击方法中,这也是为什么从内存中获取SSH密钥对

.Net程序集的不同加载方式,以及其在内存中格式

.Net程序集除了正常的有框架自动按需载入外,我们还可以通过反射手动载入程序集. 其中反射载入程序集有一种方式就是 以字节流的方式载入程序集.而不是直接从磁盘文件载入. 很多.Net压缩壳,和整体保护壳都采用了这种方式. 这种方式载入的程序集和从磁盘文件载入的程序集,其内存属性是不一样的. 字节流载入的内存属性是 MEM_MAPPED . 文件方式载入的内存属性是  MEM_IMAGE . (注:指使用api函数 VirtualQuery 获取的内存信息) 在 .Net 1.1中 这两种内存影像