SCW图标
英雄背景无分隔线
博客

コーダーがセキュリティインフラを征服するコードシリーズ:パスワードのプレーンテキスト保存

马蒂亚斯·马杜博士
出版日期: 2020 年 5 月 18 日
最后更新于 2026年3月10日

当谈到在你自己的组织中部署安全的基础设施即代码时,你做得怎么样?这可能是一个学习曲线,但学习绳索将是一个很好的机会来提高你的技能,在你的同行中脱颖而出,保持更多的最终用户数据安全。

在我们开始讨论我们最新的Coders Conquer Security系列的下一章之前,我想邀请你玩一个敏感数据存储漏洞的游戏化挑战;现在就玩,从Kubernetes、Terraform、Ansible、Docker或CloudFormation中选择。

那是怎样的?如果你的知识需要一些努力,请继续阅读。

如今,大多数计算机安全的关键涉及密码。即使采用了其他安全方法,如双因素认证或生物识别技术,大多数组织仍然采用基于密码的安全作为其保护的一个要素。对许多公司来说,密码是唯一使用的。

我们如此频繁地使用密码,以至于我们甚至有关于如何创建密码的规则。这应该是为了使他们不那么容易受到暴力攻击,甚至是胡乱猜测。当然,有些人仍然使用薄弱的密码,NordPass最近的一份报告就证明了这一点。很难相信,在2020年,人们仍然在使用12345以及其他一堆可猜测的单词,如巧克力、密码和上帝来保护他们最敏感的资产。

总有一些人不屑于使用强大的密码,但大多数专业机构会强迫用户以特定的方式制作他们的访问词或短语。我们现在都知道这些规则,密码需要至少八个字符,由大写和小写字母组成,至少需要一个数字和一个特殊字符。

糟糕的是,即使用户遵守了制作最强种类的密码的规则,但如果这些密码都以明文形式存储,也可能没有任何好处。如果黑客能够读取整个密码文件,12345这个密码就和Nuts53!SpiKe&Dog12一样糟糕。

为什么以明文方式存储密码是危险的?

以明文方式存储密码是不好的,因为它使系统和用户都处于危险之中。很明显,如果黑客能够找到并读取每一个用于访问系统的密码,那将是一场灾难。他们可以简单地找到一个拥有管理员证书的用户,并破坏整个系统或网站。而且,由于他们会使用适当的用户名和密码,内部安全可能不会发现入侵行为,或在损害发生后很久才发现。

让攻击者很容易窃取以明文存储的密码也会伤害到用户,因为很多人都会重复使用密码。因为我们让密码变得如此难以创建,所以很多人都会在多个网站上重复使用他们能够记住的密码。如果攻击者破坏了一个密码文件,他们几乎肯定会尝试使用相同的名字和密码访问其他系统,这使用户面临着二次犯罪的巨大风险。

不小心将密码存储在纯文本中是比较容易的,或者没有意识到这可能会在以后造成重大问题。例如,下面的代码是使用Terraform模板定义AWS资源时,用来存储密码的常见方法。

资源 "aws_db_instance" "default" {
engine = "mysql"
allocated_storage = 10
instance_class = "db.t2.micro"
username = "admin"
password = "s3.cr3t.admin.p2ss"
db_subnet_group_name = aws_db_subnet_group.default.name
vpc_security_group_ids = [aws_security_group.default.id]
}

在这个例子中,用于管理AWS中的MySQL数据库实例的密码是以明文存储的。这意味着任何有权限进入源代码库的人都可以阅读,甚至复制它。

保护密码因框架的不同而不同,但每个平台都存在保护方法。例如,MySQL密码可以存储在AWS Secrets Manager这样的安全存储中。

资源 "aws_db_instance" "default" {
engine = "mysql"
allocated_storage = 10
instance_class = "db.t2.micro"
username = "admin"
password = "${data.aws_secretsmanager_secret_version.password.secret_string}"
db_subnet_group_name = aws_db_subnet_group.default.name
vpc_security_group_ids = [aws_security_group.default.id]
}

在这个例子中,Terraform模板将从AWS Secrets Manager服务中获得密码,它将永远不会以明文形式存储在模板文件中。

通过避免明文存储来保护密码

密码是你的王国的钥匙,不应该以明文形式存储。即使是一个组织的内部人员也不应该访问一个大的、不受保护的密码库,这也不应该是一个公认的商业协议(现在有很多密码管理器允许加密的凭证共享--没有借口!)。还有一个危险是,恶意的内部人员会窥探文件,获得他们不应该获得的权限。

对于外部攻击,试想一下,如果通过像SQL注入漏洞这样简单的方法找到了进入你的数据库的后门,并且他们也获得了对存储密码的目录的访问权,这将是一个双重打击。你认为这有太多的错误步骤可以实现吗?可悲的是,这种情况正好发生在索尼2011年的漏洞中。超过一百万的客户密码是以明文形式存储的,Lulzsec黑客组织通过一个常见的SQL注入攻击进入了这些密码和更多的密码。

所有的密码都应该由支持框架中的任何防御措施来保护。对于Terraform来说,密码不应该被存储在模板文件中。建议使用AWS Secrets Manager或Azure Key Vault等安全存储,这取决于基础设施提供商。

迫使用户创建安全的密码是一个好主意,但你也需要在后端做你的工作。将密码从明文存储中分离出来,对保护你的用户和你的系统会有很大的帮助。明文密码存储的主要危险是访问控制不佳;基本上,任何人都可以看到它们。当务之急是(尤其是在IaC环境中,突然有更多的人可以接触到敏感信息),对它们进行充分的散列,只有那些绝对需要访问的人才能被授予访问权。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和你的客户免受其他安全缺陷和漏洞的蹂躏。你也可以在Secure Code Warrior 培训平台上尝试演示IaC挑战,以保持你的所有网络安全技能得到磨练和更新。


显示资源
显示资源

最近のほとんどのコンピュータセキュリティの鍵はパスワードです。二要素認証や生体認証など、他のセキュリティ方法を採用したとしても、ほとんどの組織では、保護の 1 つの要素としてパスワードベースのセキュリティを採用しています。

您还有兴趣吗?

马蒂亚斯·马杜博士是安全专家、研究员、首席技术官,以及安全代码战士的联合创始人。马蒂亚斯在根特大学以静态分析解决方案为核心,获得了应用安全领域的博士学位。此后他加入美国Fortify公司,并意识到仅检测代码问题而未协助开发者编写安全代码是远远不够的。这一认知促使他致力于开发能帮助开发者减轻安全负担、超越客户期望的产品。作为Team Awesome成员,当他不在办公桌前时,最享受在RSA大会、BlackHat、DefCon等技术会议上登台演讲的时刻。

了解更多

Secure Code Warrior致力于在整个软件开发生命周期中保护代码,并协助构建将网络安全置于首位的文化。无论您是应用程序安全经理、开发人员、首席信息安全官还是安全相关人员,我们都能帮助您降低与不安全代码相关的风险。

预约演示
分享:
领英品牌社交x 标志
著者
马蒂亚斯·马杜博士
2020年5月18日发布

马蒂亚斯·马杜博士是安全专家、研究员、首席技术官,以及安全代码战士的联合创始人。马蒂亚斯在根特大学以静态分析解决方案为核心,获得了应用安全领域的博士学位。此后他加入美国Fortify公司,并意识到仅检测代码问题而未协助开发者编写安全代码是远远不够的。这一认知促使他致力于开发能帮助开发者减轻安全负担、超越客户期望的产品。作为Team Awesome成员,当他不在办公桌前时,最享受在RSA大会、BlackHat、DefCon等技术会议上登台演讲的时刻。

马蒂亚斯是一位拥有15年以上软件安全实践经验的研究员兼开发者。他曾为Fortify Software、其创立的Sensei Security等企业开发解决方案。在职业生涯中,马蒂亚斯主导了多个应用安全研究项目,这些项目最终转化为商用产品,并获得了10余项专利。在离开办公桌时,马蒂亚斯担任高级应用安全培训课程讲师,并定期在RSA大会、黑帽大会、DefCon、BSIMM、OWASP应用安全大会、BruCon等全球性会议上发表演讲。

马蒂亚斯在根特大学获得计算机工程博士学位,期间学习了通过程序混淆技术隐藏应用程序内部运作机制的应用程序安全技术。

分享:
领英品牌社交x 标志

当谈到在你自己的组织中部署安全的基础设施即代码时,你做得怎么样?这可能是一个学习曲线,但学习绳索将是一个很好的机会来提高你的技能,在你的同行中脱颖而出,保持更多的最终用户数据安全。

在我们开始讨论我们最新的Coders Conquer Security系列的下一章之前,我想邀请你玩一个敏感数据存储漏洞的游戏化挑战;现在就玩,从Kubernetes、Terraform、Ansible、Docker或CloudFormation中选择。

那是怎样的?如果你的知识需要一些努力,请继续阅读。

如今,大多数计算机安全的关键涉及密码。即使采用了其他安全方法,如双因素认证或生物识别技术,大多数组织仍然采用基于密码的安全作为其保护的一个要素。对许多公司来说,密码是唯一使用的。

我们如此频繁地使用密码,以至于我们甚至有关于如何创建密码的规则。这应该是为了使他们不那么容易受到暴力攻击,甚至是胡乱猜测。当然,有些人仍然使用薄弱的密码,NordPass最近的一份报告就证明了这一点。很难相信,在2020年,人们仍然在使用12345以及其他一堆可猜测的单词,如巧克力、密码和上帝来保护他们最敏感的资产。

总有一些人不屑于使用强大的密码,但大多数专业机构会强迫用户以特定的方式制作他们的访问词或短语。我们现在都知道这些规则,密码需要至少八个字符,由大写和小写字母组成,至少需要一个数字和一个特殊字符。

糟糕的是,即使用户遵守了制作最强种类的密码的规则,但如果这些密码都以明文形式存储,也可能没有任何好处。如果黑客能够读取整个密码文件,12345这个密码就和Nuts53!SpiKe&Dog12一样糟糕。

为什么以明文方式存储密码是危险的?

以明文方式存储密码是不好的,因为它使系统和用户都处于危险之中。很明显,如果黑客能够找到并读取每一个用于访问系统的密码,那将是一场灾难。他们可以简单地找到一个拥有管理员证书的用户,并破坏整个系统或网站。而且,由于他们会使用适当的用户名和密码,内部安全可能不会发现入侵行为,或在损害发生后很久才发现。

让攻击者很容易窃取以明文存储的密码也会伤害到用户,因为很多人都会重复使用密码。因为我们让密码变得如此难以创建,所以很多人都会在多个网站上重复使用他们能够记住的密码。如果攻击者破坏了一个密码文件,他们几乎肯定会尝试使用相同的名字和密码访问其他系统,这使用户面临着二次犯罪的巨大风险。

不小心将密码存储在纯文本中是比较容易的,或者没有意识到这可能会在以后造成重大问题。例如,下面的代码是使用Terraform模板定义AWS资源时,用来存储密码的常见方法。

资源 "aws_db_instance" "default" {
engine = "mysql"
allocated_storage = 10
instance_class = "db.t2.micro"
username = "admin"
password = "s3.cr3t.admin.p2ss"
db_subnet_group_name = aws_db_subnet_group.default.name
vpc_security_group_ids = [aws_security_group.default.id]
}

在这个例子中,用于管理AWS中的MySQL数据库实例的密码是以明文存储的。这意味着任何有权限进入源代码库的人都可以阅读,甚至复制它。

保护密码因框架的不同而不同,但每个平台都存在保护方法。例如,MySQL密码可以存储在AWS Secrets Manager这样的安全存储中。

资源 "aws_db_instance" "default" {
engine = "mysql"
allocated_storage = 10
instance_class = "db.t2.micro"
username = "admin"
password = "${data.aws_secretsmanager_secret_version.password.secret_string}"
db_subnet_group_name = aws_db_subnet_group.default.name
vpc_security_group_ids = [aws_security_group.default.id]
}

在这个例子中,Terraform模板将从AWS Secrets Manager服务中获得密码,它将永远不会以明文形式存储在模板文件中。

通过避免明文存储来保护密码

密码是你的王国的钥匙,不应该以明文形式存储。即使是一个组织的内部人员也不应该访问一个大的、不受保护的密码库,这也不应该是一个公认的商业协议(现在有很多密码管理器允许加密的凭证共享--没有借口!)。还有一个危险是,恶意的内部人员会窥探文件,获得他们不应该获得的权限。

对于外部攻击,试想一下,如果通过像SQL注入漏洞这样简单的方法找到了进入你的数据库的后门,并且他们也获得了对存储密码的目录的访问权,这将是一个双重打击。你认为这有太多的错误步骤可以实现吗?可悲的是,这种情况正好发生在索尼2011年的漏洞中。超过一百万的客户密码是以明文形式存储的,Lulzsec黑客组织通过一个常见的SQL注入攻击进入了这些密码和更多的密码。

所有的密码都应该由支持框架中的任何防御措施来保护。对于Terraform来说,密码不应该被存储在模板文件中。建议使用AWS Secrets Manager或Azure Key Vault等安全存储,这取决于基础设施提供商。

迫使用户创建安全的密码是一个好主意,但你也需要在后端做你的工作。将密码从明文存储中分离出来,对保护你的用户和你的系统会有很大的帮助。明文密码存储的主要危险是访问控制不佳;基本上,任何人都可以看到它们。当务之急是(尤其是在IaC环境中,突然有更多的人可以接触到敏感信息),对它们进行充分的散列,只有那些绝对需要访问的人才能被授予访问权。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和你的客户免受其他安全缺陷和漏洞的蹂躏。你也可以在Secure Code Warrior 培训平台上尝试演示IaC挑战,以保持你的所有网络安全技能得到磨练和更新。


显示资源
显示资源

要下载报告,请填写以下表格。

恳请允许我们向您发送有关本公司产品及/或相关安全编码主题的信息。我们始终以高度谨慎的态度处理您的个人信息,绝不会出于营销目的将其出售给其他公司。

送信
scw 成功图标
SCW 错误图标
要提交表单,请启用“Analytics”Cookie。设置完成后,您可以再次将其禁用。

当谈到在你自己的组织中部署安全的基础设施即代码时,你做得怎么样?这可能是一个学习曲线,但学习绳索将是一个很好的机会来提高你的技能,在你的同行中脱颖而出,保持更多的最终用户数据安全。

在我们开始讨论我们最新的Coders Conquer Security系列的下一章之前,我想邀请你玩一个敏感数据存储漏洞的游戏化挑战;现在就玩,从Kubernetes、Terraform、Ansible、Docker或CloudFormation中选择。

那是怎样的?如果你的知识需要一些努力,请继续阅读。

如今,大多数计算机安全的关键涉及密码。即使采用了其他安全方法,如双因素认证或生物识别技术,大多数组织仍然采用基于密码的安全作为其保护的一个要素。对许多公司来说,密码是唯一使用的。

我们如此频繁地使用密码,以至于我们甚至有关于如何创建密码的规则。这应该是为了使他们不那么容易受到暴力攻击,甚至是胡乱猜测。当然,有些人仍然使用薄弱的密码,NordPass最近的一份报告就证明了这一点。很难相信,在2020年,人们仍然在使用12345以及其他一堆可猜测的单词,如巧克力、密码和上帝来保护他们最敏感的资产。

总有一些人不屑于使用强大的密码,但大多数专业机构会强迫用户以特定的方式制作他们的访问词或短语。我们现在都知道这些规则,密码需要至少八个字符,由大写和小写字母组成,至少需要一个数字和一个特殊字符。

糟糕的是,即使用户遵守了制作最强种类的密码的规则,但如果这些密码都以明文形式存储,也可能没有任何好处。如果黑客能够读取整个密码文件,12345这个密码就和Nuts53!SpiKe&Dog12一样糟糕。

为什么以明文方式存储密码是危险的?

以明文方式存储密码是不好的,因为它使系统和用户都处于危险之中。很明显,如果黑客能够找到并读取每一个用于访问系统的密码,那将是一场灾难。他们可以简单地找到一个拥有管理员证书的用户,并破坏整个系统或网站。而且,由于他们会使用适当的用户名和密码,内部安全可能不会发现入侵行为,或在损害发生后很久才发现。

让攻击者很容易窃取以明文存储的密码也会伤害到用户,因为很多人都会重复使用密码。因为我们让密码变得如此难以创建,所以很多人都会在多个网站上重复使用他们能够记住的密码。如果攻击者破坏了一个密码文件,他们几乎肯定会尝试使用相同的名字和密码访问其他系统,这使用户面临着二次犯罪的巨大风险。

不小心将密码存储在纯文本中是比较容易的,或者没有意识到这可能会在以后造成重大问题。例如,下面的代码是使用Terraform模板定义AWS资源时,用来存储密码的常见方法。

资源 "aws_db_instance" "default" {
engine = "mysql"
allocated_storage = 10
instance_class = "db.t2.micro"
username = "admin"
password = "s3.cr3t.admin.p2ss"
db_subnet_group_name = aws_db_subnet_group.default.name
vpc_security_group_ids = [aws_security_group.default.id]
}

在这个例子中,用于管理AWS中的MySQL数据库实例的密码是以明文存储的。这意味着任何有权限进入源代码库的人都可以阅读,甚至复制它。

保护密码因框架的不同而不同,但每个平台都存在保护方法。例如,MySQL密码可以存储在AWS Secrets Manager这样的安全存储中。

资源 "aws_db_instance" "default" {
engine = "mysql"
allocated_storage = 10
instance_class = "db.t2.micro"
username = "admin"
password = "${data.aws_secretsmanager_secret_version.password.secret_string}"
db_subnet_group_name = aws_db_subnet_group.default.name
vpc_security_group_ids = [aws_security_group.default.id]
}

在这个例子中,Terraform模板将从AWS Secrets Manager服务中获得密码,它将永远不会以明文形式存储在模板文件中。

通过避免明文存储来保护密码

密码是你的王国的钥匙,不应该以明文形式存储。即使是一个组织的内部人员也不应该访问一个大的、不受保护的密码库,这也不应该是一个公认的商业协议(现在有很多密码管理器允许加密的凭证共享--没有借口!)。还有一个危险是,恶意的内部人员会窥探文件,获得他们不应该获得的权限。

对于外部攻击,试想一下,如果通过像SQL注入漏洞这样简单的方法找到了进入你的数据库的后门,并且他们也获得了对存储密码的目录的访问权,这将是一个双重打击。你认为这有太多的错误步骤可以实现吗?可悲的是,这种情况正好发生在索尼2011年的漏洞中。超过一百万的客户密码是以明文形式存储的,Lulzsec黑客组织通过一个常见的SQL注入攻击进入了这些密码和更多的密码。

所有的密码都应该由支持框架中的任何防御措施来保护。对于Terraform来说,密码不应该被存储在模板文件中。建议使用AWS Secrets Manager或Azure Key Vault等安全存储,这取决于基础设施提供商。

迫使用户创建安全的密码是一个好主意,但你也需要在后端做你的工作。将密码从明文存储中分离出来,对保护你的用户和你的系统会有很大的帮助。明文密码存储的主要危险是访问控制不佳;基本上,任何人都可以看到它们。当务之急是(尤其是在IaC环境中,突然有更多的人可以接触到敏感信息),对它们进行充分的散列,只有那些绝对需要访问的人才能被授予访问权。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和你的客户免受其他安全缺陷和漏洞的蹂躏。你也可以在Secure Code Warrior 培训平台上尝试演示IaC挑战,以保持你的所有网络安全技能得到磨练和更新。


观看在线研讨会
开始吧
了解更多

请点击以下链接下载此资源的PDF文件。

Secure Code Warrior致力于在整个软件开发生命周期中保护代码,并协助构建将网络安全置于首位的文化。无论您是应用程序安全经理、开发人员、首席信息安全官还是安全相关人员,我们都能帮助您降低与不安全代码相关的风险。

显示报告预约演示
下载PDF文件
显示资源
分享:
领英品牌社交x 标志
您还有兴趣吗?

分享:
领英品牌社交x 标志
著者
马蒂亚斯·马杜博士
2020年5月18日发布

马蒂亚斯·马杜博士是安全专家、研究员、首席技术官,以及安全代码战士的联合创始人。马蒂亚斯在根特大学以静态分析解决方案为核心,获得了应用安全领域的博士学位。此后他加入美国Fortify公司,并意识到仅检测代码问题而未协助开发者编写安全代码是远远不够的。这一认知促使他致力于开发能帮助开发者减轻安全负担、超越客户期望的产品。作为Team Awesome成员,当他不在办公桌前时,最享受在RSA大会、BlackHat、DefCon等技术会议上登台演讲的时刻。

马蒂亚斯是一位拥有15年以上软件安全实践经验的研究员兼开发者。他曾为Fortify Software、其创立的Sensei Security等企业开发解决方案。在职业生涯中,马蒂亚斯主导了多个应用安全研究项目,这些项目最终转化为商用产品,并获得了10余项专利。在离开办公桌时,马蒂亚斯担任高级应用安全培训课程讲师,并定期在RSA大会、黑帽大会、DefCon、BSIMM、OWASP应用安全大会、BruCon等全球性会议上发表演讲。

马蒂亚斯在根特大学获得计算机工程博士学位,期间学习了通过程序混淆技术隐藏应用程序内部运作机制的应用程序安全技术。

分享:
领英品牌社交x 标志

当谈到在你自己的组织中部署安全的基础设施即代码时,你做得怎么样?这可能是一个学习曲线,但学习绳索将是一个很好的机会来提高你的技能,在你的同行中脱颖而出,保持更多的最终用户数据安全。

在我们开始讨论我们最新的Coders Conquer Security系列的下一章之前,我想邀请你玩一个敏感数据存储漏洞的游戏化挑战;现在就玩,从Kubernetes、Terraform、Ansible、Docker或CloudFormation中选择。

那是怎样的?如果你的知识需要一些努力,请继续阅读。

如今,大多数计算机安全的关键涉及密码。即使采用了其他安全方法,如双因素认证或生物识别技术,大多数组织仍然采用基于密码的安全作为其保护的一个要素。对许多公司来说,密码是唯一使用的。

我们如此频繁地使用密码,以至于我们甚至有关于如何创建密码的规则。这应该是为了使他们不那么容易受到暴力攻击,甚至是胡乱猜测。当然,有些人仍然使用薄弱的密码,NordPass最近的一份报告就证明了这一点。很难相信,在2020年,人们仍然在使用12345以及其他一堆可猜测的单词,如巧克力、密码和上帝来保护他们最敏感的资产。

总有一些人不屑于使用强大的密码,但大多数专业机构会强迫用户以特定的方式制作他们的访问词或短语。我们现在都知道这些规则,密码需要至少八个字符,由大写和小写字母组成,至少需要一个数字和一个特殊字符。

糟糕的是,即使用户遵守了制作最强种类的密码的规则,但如果这些密码都以明文形式存储,也可能没有任何好处。如果黑客能够读取整个密码文件,12345这个密码就和Nuts53!SpiKe&Dog12一样糟糕。

为什么以明文方式存储密码是危险的?

以明文方式存储密码是不好的,因为它使系统和用户都处于危险之中。很明显,如果黑客能够找到并读取每一个用于访问系统的密码,那将是一场灾难。他们可以简单地找到一个拥有管理员证书的用户,并破坏整个系统或网站。而且,由于他们会使用适当的用户名和密码,内部安全可能不会发现入侵行为,或在损害发生后很久才发现。

让攻击者很容易窃取以明文存储的密码也会伤害到用户,因为很多人都会重复使用密码。因为我们让密码变得如此难以创建,所以很多人都会在多个网站上重复使用他们能够记住的密码。如果攻击者破坏了一个密码文件,他们几乎肯定会尝试使用相同的名字和密码访问其他系统,这使用户面临着二次犯罪的巨大风险。

不小心将密码存储在纯文本中是比较容易的,或者没有意识到这可能会在以后造成重大问题。例如,下面的代码是使用Terraform模板定义AWS资源时,用来存储密码的常见方法。

资源 "aws_db_instance" "default" {
engine = "mysql"
allocated_storage = 10
instance_class = "db.t2.micro"
username = "admin"
password = "s3.cr3t.admin.p2ss"
db_subnet_group_name = aws_db_subnet_group.default.name
vpc_security_group_ids = [aws_security_group.default.id]
}

在这个例子中,用于管理AWS中的MySQL数据库实例的密码是以明文存储的。这意味着任何有权限进入源代码库的人都可以阅读,甚至复制它。

保护密码因框架的不同而不同,但每个平台都存在保护方法。例如,MySQL密码可以存储在AWS Secrets Manager这样的安全存储中。

资源 "aws_db_instance" "default" {
engine = "mysql"
allocated_storage = 10
instance_class = "db.t2.micro"
username = "admin"
password = "${data.aws_secretsmanager_secret_version.password.secret_string}"
db_subnet_group_name = aws_db_subnet_group.default.name
vpc_security_group_ids = [aws_security_group.default.id]
}

在这个例子中,Terraform模板将从AWS Secrets Manager服务中获得密码,它将永远不会以明文形式存储在模板文件中。

通过避免明文存储来保护密码

密码是你的王国的钥匙,不应该以明文形式存储。即使是一个组织的内部人员也不应该访问一个大的、不受保护的密码库,这也不应该是一个公认的商业协议(现在有很多密码管理器允许加密的凭证共享--没有借口!)。还有一个危险是,恶意的内部人员会窥探文件,获得他们不应该获得的权限。

对于外部攻击,试想一下,如果通过像SQL注入漏洞这样简单的方法找到了进入你的数据库的后门,并且他们也获得了对存储密码的目录的访问权,这将是一个双重打击。你认为这有太多的错误步骤可以实现吗?可悲的是,这种情况正好发生在索尼2011年的漏洞中。超过一百万的客户密码是以明文形式存储的,Lulzsec黑客组织通过一个常见的SQL注入攻击进入了这些密码和更多的密码。

所有的密码都应该由支持框架中的任何防御措施来保护。对于Terraform来说,密码不应该被存储在模板文件中。建议使用AWS Secrets Manager或Azure Key Vault等安全存储,这取决于基础设施提供商。

迫使用户创建安全的密码是一个好主意,但你也需要在后端做你的工作。将密码从明文存储中分离出来,对保护你的用户和你的系统会有很大的帮助。明文密码存储的主要危险是访问控制不佳;基本上,任何人都可以看到它们。当务之急是(尤其是在IaC环境中,突然有更多的人可以接触到敏感信息),对它们进行充分的散列,只有那些绝对需要访问的人才能被授予访问权。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和你的客户免受其他安全缺陷和漏洞的蹂躏。你也可以在Secure Code Warrior 培训平台上尝试演示IaC挑战,以保持你的所有网络安全技能得到磨练和更新。


目录

下载PDF文件
显示资源
您还有兴趣吗?

马蒂亚斯·马杜博士是安全专家、研究员、首席技术官,以及安全代码战士的联合创始人。马蒂亚斯在根特大学以静态分析解决方案为核心,获得了应用安全领域的博士学位。此后他加入美国Fortify公司,并意识到仅检测代码问题而未协助开发者编写安全代码是远远不够的。这一认知促使他致力于开发能帮助开发者减轻安全负担、超越客户期望的产品。作为Team Awesome成员,当他不在办公桌前时,最享受在RSA大会、BlackHat、DefCon等技术会议上登台演讲的时刻。

了解更多

Secure Code Warrior致力于在整个软件开发生命周期中保护代码,并协助构建将网络安全置于首位的文化。无论您是应用程序安全经理、开发人员、首席信息安全官还是安全相关人员,我们都能帮助您降低与不安全代码相关的风险。

预约演示[下载]
分享:
领英品牌社交x 标志
资源中心

开始所需的资源

其他投稿
资源中心

开始所需的资源

其他投稿