Mat*_*att 76 .net security production debug-symbols
我有一个记录异常条带跟踪的应用程序,我希望这些堆栈跟踪在生产中部署时包含文件名和行号.我想出了如何使用程序集部署调试符号,但在研究问题的过程中我遇到了这个问题,这意味着在生产环境中包含pdb文件并不是一个好主意.对接受的答案的评论说:"......调试信息可以泄露敏感数据并成为攻击媒介.取决于你的应用程序是什么."
那么可能会暴露哪种敏感数据呢?如何使用调试符号来破坏应用程序?我对技术细节很好奇,但我真正想要的是一种评估任何给定应用程序和生产环境中包含调试符号的风险的实用方法.换句话说:可能发生的最坏情况是什么?
编辑:后续问题/澄清
因此,基于目前为止每个人的答案,似乎这个问题可以简化为.NET应用程序.这篇来自John Robbins的博客链接在迈克尔·马多克斯的答案中,有点向我跳了出来:
.NET PDB仅包含两条信息,源文件名及其行和本地变量名.所有其他信息都已包含在.NET元数据中,因此无需在PDB文件中复制相同的信息.
对我来说,这重申了其他人对Reflector所说的话,其含义是真正的问题是访问程序集.一旦确定了,关于PDB的唯一决定是你是否关心暴露文件名,行号和本地变量名(假设你没有向最终用户展示堆栈跟踪).或者我过度简化了这个?
Mic*_*dox 56
这是另一个需要关注的问题:
有关PDB文件的更多信息:
一般来说,我总是在我的部署中包含pdb文件,增益太大而不能忽略.
如果您从未向用户公开堆栈跟踪(通常不应该),则部署PDB文件实际上没有任何额外的安全风险.
当用户可见的堆栈跟踪发生时,用户可以看到完整的堆栈跟踪,包括文件名和文件行号.这可以让他们了解您的应用程序是如何构建的,如果黑客入侵可能会对他们有所帮助.
更大的安全威胁就像Reflector,当你在你的DLL上使用它时,它们将允许他们查看你的源代码,有或没有pdb文件.
Mic*_*urr 13
如果您要在自己的组织中部署到生产环境,那么这不是安全问题.
如果您将软件出售给其他实体,那么.pdb文件可以让对逆向工程感兴趣的人 - 这对您来说可能是也可能不是问题.
但是(要清楚),您不希望您的堆栈跟踪显示给客户端 - 无论.pdbs是否可用.但是,如果您只是记录跟踪并向客户端显示"漂亮"错误页面,那么这不是问题.
Mic*_*ael 11
通过具有调试符号,攻击者可以确定感兴趣的全局变量,函数偏移等.
所以他可以看到你的系统有如下功能:
AddAdminUser(string name, string password);
Run Code Online (Sandbox Code Playgroud)
并知道它的偏移量.如果您的程序遭到入侵,他可以调用此函数为自己授予管理员权限.
或类似的东西:
typedef enum {Basic, NTLM} AuthenticationMode;
AuthenticationMode g_authenticationMode;
Run Code Online (Sandbox Code Playgroud)
并且知道要翻转什么位以将应用程序切换到不安全模式.
或者,这需要相当多的逆向工程时间才能弄明白.然而,这不是一个不可逾越的时间.
但是...这一切都意味着你的攻击者已经处于可以危及你的程序的位置.如果是这样的话,你已经输了.
如果您有充分的商业理由来部署pdb符号,请继续.部署PDB不会让您感到不安全.如果您没有充分的理由进行部署,则不应该这样做,因为它会使攻击稍微容易一些.
您还可以创建公共PDB文件 - 这些文件会删除某些信息,但会为您提供足够的符号来生成堆栈跟踪并执行基本调试.细节在这里.Microsoft在其符号服务器上部署公共PDB以供所有人使用.
编辑:我所说的大部分内容都适用于围绕为本机代码部署PDB的问题 - 我认为很多人担心这些问题,即使汇编元数据已经传达了相当多的内容.
| 归档时间: |
|
| 查看次数: |
22089 次 |
| 最近记录: |