【问题标题】:What is the risk of hardcoded credentials in creating database connection?创建数据库连接时硬编码凭据的风险是什么?
【发布时间】:2017-05-02 03:18:32
【问题描述】:

您好,有安全意识的人,

我最近使用静态代码分析工具扫描了我的应用程序,其中一个严重性发现是用于创建连接的硬编码用户名和密码:

dm.getConnection(databaseUrl,"server","revres");

为什么扫描仪认为这会给应用程序带来风险?我可以看到一些缺点,例如如果密码被泄露,则无法轻松更改密码。从理论上讲,有人可以对二进制文件进行逆向工程以学习凭据。但是我看不到将凭据存储在配置文件中的优势,除非它们被加密,否则它们很容易找到和读取。如果我加密它们,我将用加密密钥解决同样的问题......

还有其他我看不到的风险吗?还是我应该使用完全不同的方法? 非常感谢。

【问题讨论】:

    标签: security credentials


    【解决方案1】:

    我认为这取决于您的源代码或编译代码的可访问性/安全性。开发人员通常在他们的开发箱上拥有代码副本,这些副本通常不如生产服务器安全,因此更容易被黑客入侵。通常,测试用户/密码是在开发盒上配置的,而在生产中,“真实”密码存储在更安全的配置文件中。是的,如果有人入侵了服务器,他们可以轻松获得凭据,但在大多数情况下,这比进入开发盒要困难得多。但就像我说的,这取决于。如果只有一个开发人员,并且他们有一台超级安全的机器,并且他们的代码的 repo 也是超级安全的,那么就没有有效的区别。

    【讨论】:

    • 这几乎就是我的想法,但我想确定一下。这是一个只有我负责的小型应用程序,因此我认为风险并不高。当然,静态代码分析工具无法考虑开发团队的规模或不同环境的安全级别等因素(我用的是DEV,UAT,PROD),所以严重性分类大概是基于这样的假设大型企业应用程序。
    【解决方案2】:

    我所做的是最初向最终用户询问凭据,然后将其加密并存储在文件中。这样,作为开发人员,我不知道他们的连接详细信息和密码。密钥是一个散列二进制文件,我通过在两者之间插入 ekstra 字节来存储它。想要破解它的人应该找出使用的算法、密钥和向量长度、它们的位置以及保持值的字节序列的起始位置。一个天才,他也会对我的代码进行逆向工程以获取所有这些信息,他会闯入它(但直接破解最终用户的凭据可能更容易)。

    【讨论】:

    • 我会向投票者询问原因。所以不应该允许无缘无故地投票。这就像没有辩护的执行,通常那些不明白意味着什么的人只是因为他们能做到。
    【解决方案3】:

    嵌入在代码中的固定密码对于每次安装都是相同的,任何有权访问源代码或二进制文件(包括安装介质)的人都可以访问。

    从文件中读取的密码对于每次安装都可能不同,并且只有能够读取密码文件的人知道。

    通常,您的安装程序将为每个站点生成一个唯一密码,并将其安全地写入文件以供您的应用程序读取。 (“安全”是指使用O_CREAT|O_EXCL 来防止符号链接攻击,并在其他人打开文件之前正确选择文件位置和权限)。

    【讨论】:

      【解决方案4】:

      这是一个有趣的例子,我可以给你一个 .Net 应用程序的例子(因为你没有指定运行环境/使用的技术)。虽然我猜是Java?我希望这仍然是相关的并且对您有所帮助。

      我的主要建议是阅读这篇文章并从那里开始:Protecting Connection information - MSDN

      这是一个描述working with encrypted configuration files here的页面

      我已经看到使用加密配置文件和 Windows 身份验证解决了这个问题。我认为以用户身份运行您的应用程序,将被授予对相关存储过程等的访问权限(尽可能少,例如最小权限原则)以及文件夹访问权限等是一个很好的途径。

      我建议同时使用这两种技术,因为这样您就可以为 IIS 授予对池的相关本地文件夹访问权限,并在 SQL 等中拆分您的用户访问权限。这也有助于更好的审计!

      不过,这取决于您的应用程序需求。我想说通过配置文件或环境用户帐户进行配置的主要原因是,当您将应用程序发布到生产环境时,您的开发人员不需要访问生产用户帐户信息,而只需使用 Local / 系统测试 / UAT 凭据。

      当然,它们也不会以纯文本形式存储在您的源代码控制签入中,如果您托管在像 GIT 这样的私有分布式网络中,这可能意味着这可能会受到损害,并且黑客将获得对凭据的访问权限。

      【讨论】:

        猜你喜欢
        • 2019-08-14
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        • 2019-07-06
        • 1970-01-01
        • 2013-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多