小型团队的数据库安全检查表

2025-06-08

小型团队的数据库安全检查表

阅读需要 15 分钟。

目录

介绍

照片由Liam TuckerUnsplash上拍摄
替代文本

大家好,我叫Kirk。我是一名全栈软件开发人员,致力于 .NET 生态系统并管理大型SQL Server数据库。

我写这篇文章是为了尝试回答我自己的一些问题,即 2021 年的现代数据库安全性是什么样的,特别是如果你从事技术领域并正在考虑创建或支持自己的数据库管理系统。

虽然所讨论的场景可以适用于各种领域和专业,但大多数示例都涉及 Web、Web 可访问应用程序以及具有自托管服务器的应用程序。

在撰写本文时(2021年初),新冠疫情已经摧毁了世界上大部分地区的自由出行能力,因此对在线解决方案的创建和需求急剧上升。开发人员已经动员起来,创建了各种各样的网络商店、应用程序门户,甚至基于短信的平台,以满足客户的需求,而无需他们亲自前往实体店。

但随着线上产品和服务的可用性以及消费者需求的增加,我们也应该看到,那些愿意利用网络系统谋取私利的恶意行为者也在增多。网络犯罪正在上升。2020年,网络犯罪活动显著增加,给企业造成了数十亿美元的损失,更不用说严重的消费者数据泄露造成的后果了。

那么让我们开始吧。

1. 承认数字业务的风险

照片由 Loic Leray 在 Unsplash 拍摄
一名男子在峡谷上空走钢丝

这么说可能听起来有些偏执,但我真心认为,在2021年,每个人都应该以这样的心态对待软件开发:恶意行为者至少会尝试破坏你的运营。一些研究估计,网络攻击对企业的平均成本高达260万美元。

不幸的是,您的业务越成功,您获得的声誉就越高,您收到网络犯罪分子不必要的通知的可能性就越大,无论是作为大规模攻击的一部分,还是特定意图的攻击。

您可能会对自己说:“我太小了,无法成为目标。”

让我们赶紧把这个想法从脑子里赶走吧。

就像现实生活中的盗窃和勒索一样,规模小反而更容易成为目标,而不是更少。普通小偷不会抢劫价值数百万美元的豪宅;风险回报比让中小型企业更具吸引力。

它们在防御攻击方面的安全措施往往更差,而且在攻击发生后,用于应对攻击的资源也更少。此外,由于这一切都是数字化的,一般的恶意实体宁愿向数百家中小型企业部署勒索软件,也不愿追逐那些可能摧毁其业务的巨鲸。成长型企业极易受到攻击,应始终将自己置于高风险类别。

问题不在于‘附近有熊吗?’附近肯定有熊。这只是来到森林的代价。它们就在这里,你却无能为力。你的任务就是尽可能地让它们难以抓住你。”

2. 理解低垂果实原则

一群人从一头冲过来的熊身边逃开。其中一人绊倒了。他完蛋了。

这张照片不是真的,但是它很好地表达了我的观点,所以我不能不使用它。

你不需要成为第一个,但你绝对不想成为最后一个。

虽然我很想报告说存在着完美的防御,并且金钱和技术的某种结合可以让你 100% 得到保护,但除非你的整个业务都放在一个你永远不会打开的保险箱里,否则情况就不是这样。

我学到的是,与其尝试创建一些完美、坚不可摧的系统,不如花时间遵循帕累托原则的方法;这是一个迭代过程,在这个过程中,你会不断采用最适合你的设置的最佳解决方案,平衡成本和费用与效果。

上面的图片虽然很搞笑,但却完美地说明了我们在当今数字社会中所面临的环境类型:

网络攻击者比你更快、更强大。攻击者总是比防御者领先一步。作为防御者,我们只能对已知的威胁做出反应和防范。攻击者不断制造我们未知的威胁。一旦发现新的威胁,我们就会争分夺秒地采取措施,以免为时已晚。有时我们能成功,有时则不能。

尽管听起来有些病态,但你的目标并不是成为世界上最安全的平台;而只是成为最不受攻击的目标。

与在公司年度徒步旅行中被选为某人的陪跑伙伴不同,你永远不想成为黑客的首选。攻击最好是间接体验;我们目睹攻击发生在别人身上,并确保它不会发生在自己身上。
最佳解决方案是什么意思?我倾向于用以下说法来解释:

“什么是最便宜的解决方案(就成本、开发周期、开发运行时间、故障排除等而言),可以将系统中的漏洞从当前位置降低一级?”

我倾向于将我的风险分为三类:

  • 关键弱点:显而易见且易于利用的弱点,可能瞬间摧毁您的组织或导致数据泄露。这些弱点也很容易被发现。例如无效/不存在的安全认证、不安全的表单验证、开放的 API 访问。这些弱点的存在,让您的企业每一天都离不可恢复的故障只有一步之遥。

  • 中等风险:这类问题隐隐存在威胁,如果不加以控制,很容易升级。例如,网络内数据库访问暴露/不受限制、敏感数据密码薄弱、服务器缺乏防火墙/防病毒软件。这些问题看似并非迫在眉睫,但本质上却是定时炸弹,您迟早会后悔不已,只是时间问题,而不是是否会发生。

  • 低风险:此时您已经涵盖了所有基本知识,并且系统中基本上只剩下一些漏洞,以应对罕见事件。您是否应该在某个时候解决这些问题?是的。但这里不应该存在任何漏洞,也不需要攻击者拥有大量的内部知识或付出巨大的努力。

因此,你的策略是尽快处理严重和中等程度的漏洞,而不是因为对低风险问题进行了大量的更新而陷入安全感的低谷。如果你的门敞开着,即使你拥有最好的家庭安全系统也毫无意义。

  1. 你应该有一个安全策略

照片由 Unsplash 的 Scott Graham 拍摄
男人写重要文件

这张图片中删掉了安全管理员因为不得不写两页以上的文字而流下的眼泪。

你应该制定安全策略。就是这样,这就是推文。每个企业或产品都应该制定安全策略。有很多关于如何制定安全策略的优秀资源,但你制定的任何策略都需要确保最低限度的安全:

  • 我们收集哪些数据以及需要多少安全性(信用卡信息需要大量安全性,最喜欢的恐龙战队则不需要那么多)

  • 我们将数据保存在哪里?访问这些数据有多困难?

  • 谁有权访问系统的哪些部分?

  • 我们向外界暴露什么、通过什么渠道暴露?

  • 我们依赖哪些第三方应用程序以及我们认为它们有多安全?

我的公司的风险状况如何?

  • 收集的数据越多,风险状况就越高

  • 用户越多,风险状况越高

  • 财务、健康和位置数据的风险尤其高

4. 保护内部网络

照片由 Unsplash 的 Markus Spiske 拍摄
锁着的谷仓门

正如我们之前所讨论的,最好的安全措施是黑匣子;完全与外部网络(和互联网)隔离的网络是防止通过该媒介进行攻击的唯一真正方法。

不幸的是,您的数据并非孤立存在。即使没有直接连接,如果您的数据库和 DBMS 位于可访问互联网的网络上,那么您的数据也会在某种程度上暴露出来。

  • 将数据库隐藏在网络上。公司网络上不需要访问数据库的用户甚至不应该能够感知到它。

  • 限制可以访问数据库服务器的端口(这将关闭大量潜在的攻击媒介

  • 积极使用防火墙保护关键数据。始终遵循最小访问原则。除非明确开放,否则所有端口和连接都应关闭。除非明确信任,否则所有请求都应不可信。除非明确授予用户权限,否则所有用户都应无需权限

5. 可能是一封电子邮件

照片由 Stephen Phillips 在 Unsplash 拍摄
电子邮件收件箱的图片

在我们深入探讨之前,我需要指出的是,你可以采取世界上所有的保护措施,但大多数网络攻击仍然来自通过电子邮件进行的基本网络钓鱼攻击

组织中的任何人都可以点击恶意网站的链接或从无法识别的来源下载附件,从而将恶意软件和勒索软件引入他们用来访问该链接的机器。

除了对工作机器上的浏览器下载设置限制之外,您能做的最好的事情就是教育所有用户正确的电子邮件安全做法。

始终检查以确保您收到来自合格发件人的电子邮件(我强烈建议使用可以识别与您在同一用户组中运行的地址的工具)。

一种常见的网络钓鱼策略是创建一个与您网络中的地址非常相似的地址,例如kirk@ournotwork.comvs kirk@ournetwork.com。攻击者希望您在发现该地址无效之前下载并运行附加的恶意软件。务必保持警惕。

一旦用户下载了旨在危害网络的东西,我们的第一部分的安全措施就会开始发挥作用,以确保可能发生的最大情况是,只有本地机器上的文件处于危险之中,而公司网络的其余部分(尤其是我们的关键数据库存储)仍然是安全的。

6. 服务器角色、权限和访问

照片由 Mark Leishman 在 Unsplash 拍摄
英国皇家卫队立正

正如我之前所说,本文的主要目的之一是帮助创建、维护和使用数据库管理系统的人员,尤其是那些必须存储敏感用户数据的人。一旦有人成功突破了您的防火墙和网络权限,最后一道防线就是您的 DBMS 本身。与保护网络的规则类似,您需要对服务器允许的访问权限进行高度具体的控制。大多数 DBMS 系统允许您精确调整每个授权用户的权限。

  • 一般来说,除了系统管理员之外,任何人都不应该拥有系统的完全权限。
  • 执行严格的密码策略,但要避免常见的陷阱,即频繁更改密码,导致用户开始懒于选择密码。
  • 为有权访问您的数据库的任何应用程序或服务创建专用配置文件。
  • 尽可能使用存储过程或其他预定义查询系统。不要让任何用户对数据库进行不受限制的查询。
  • 定期备份至关重要。自动备份。告诉自己(或负责数据库的人员)会记得进行手动备份是错误的。
  • 确保所有备份不与主数据库保存在同一个服务器实例上。否则,备份的初衷就完全落空了。
  • 备份自动化应该是一种方式;从深度备份中获取数据至少应该需要系统管理员/安全专家的明确触发。

7. 为了用户安全,请清理您的数据

照片由 JESHOOTS.COM 在 Unsplash 拍摄
有人喷洒清洁剂

任何来自外部来源的数据都应被视为潜在的攻击载体。在任何情况下,都不应将表单和 Web 视图的原始输入返回到数据库。确保正确数据进入应用程序的典型策略包括数据清理、哈希处理和精简。我想在下面重点介绍一些最常见的策略。

  • 净化您的输入。这意味着确保用户输入的文本不包含任何可能危害系统安全的错误或恶意文本(或者只是无效数据)。您可以选择在前端代码中,在输入元素的处理程序中立即净化输入;您也可以在 Web 服务器中净化输入。我的建议是两者都做。通常需要注意以下事项:

  • 通过添加可由基于 SQL 的数据库执行的命令来进行 SQL 注入:

    • 空字符串和超大字符串
    • 奇怪的符号和特殊字符
    • 任何可以解释为路径/文件扩展名/内部命令的内容
    • 不要让不合格的字符串从用户键盘传递到数据库。你会后悔的。
  • 使用存储过程 - 存储过程是预先编写的 SQL 过程或查询,可由用户/服务调用,并可作为 DBMS 的 API。与其让应用程序直接将查询传递给数据库,不如只允许应用程序访问存储过程,从而封禁应用程序(或任何模拟应用程序的行为)向服务器发出恶意请求的能力。

  • 对敏感数据进行哈希处理 - 不要在数据库中存储原始密码。这又是一个“推文时刻”。防止用户数据被泄露的最佳方法是不存储它。其次是使用各种哈希、加盐和加密技术,以确保即使有人访问了不该访问的数据,他们也无法真正使用它。

  • 存储更少的数据- 是的,你没听错。存储更少的数据。我明白,如今存储成本低廉,我们都觉得不保存用户愿意放弃的每一点数据就是浪费金钱,但你应该始终权衡存储敏感用户数据的风险与回报。也许你不需要为了“以防万一”而存储当前不需要的数据。你保存的数据越少,你被盯上的可能性就越小。

8. 请求限制有效

Unsplash 的 Jay R 拍摄的照片
车速表

DDOS(分布式拒绝服务)攻击非常糟糕。DDOS 攻击会向服务器发送海量请求,导致服务器崩溃或以神秘的方式崩溃,从而意外泄露攻击者本不该获取的数据。DDOS 攻击还可以用来劫持组织,因为在 API 受到攻击时,普通用户通常无法使用 API。

如果您最近没有关注网络安全新闻,DDOS 攻击的频率和严重程度都在上升。最初的攻击每秒发送数百个请求。而如今,恶意代理使用的技术使他们每秒可以发送数百万个请求。DDoS 攻击随时可能发生,您几乎无力阻止攻击的发生。但有一些策略可以阻止攻击对您造成伤害。

请求限制是指有目的地限制服务器在任何给定时间处理的请求速率,这是一种预防和限制 DDOS 攻击损害的有效策略。许多托管平台都有反 DDoS 策略和方法,值得花些时间寻找一个做好防御此类攻击准备的主机。如果是自托管,制定一个好的策略从长远来看可以避免很多麻烦。

9. 物理安全也有帮助

照片由 Yue Su 在 Unsplash 上拍摄
低垂的果实

归根结底,开发人员也是人。人都会犯错。人都有截止日期和压力,也会感到疲惫。大多数人(即使不是所有人)都想做好工作,但我们不能让一些细微的事情被忽略。所以我认为,回顾一下那些可以避免日后尴尬时刻的小小进步总是好的。

  • 强密码策略——2021 年,弱密码策略已无可厚非。请选择更强的密码,而不是频繁更改的密码。我发现用户对每 3 个月更改一次密码感到愤怒,并开始想方设法破坏系统。6-12 个月的密码似乎比较理想,但最终密码越长越好。

  • 限制在工作电脑上使用闪存盘。如果贵公司尚未制定此政策,可能会面临诸多阻力。但值得坚持下去。闪存盘充其量容易出错,最坏的情况则是成为间谍和恶意软件的载体。对于确实需要从指定电脑之外访问工作内容的员工,在将数据复制到外部存储设备之前,请先允许安全的 SSH 会话。

  • 与上述相关,不要让员工使用个人电脑访问服务器。风险几乎得不偿失。高管层员工往往最反对这样做。尽量保持强硬态度。一旦个人电脑访问了敏感数据,你几乎无法控制接下来会发生什么。这些数据可能已经被入侵了。再次强调,请使用基于 SSH 的安全通道进行文件访问,而不是文件传输。

  • 不要无限期登录。在最近的首都骚乱中,图片显示攻击者查看了政府雇员设备上未发送的电子邮件和其他敏感文件。对于无人看管的设备,应尽早注销不活跃用户。

  • 访问跟踪和日志。应该始终记录哪些用户在何时处于活动状态、他们请求的数据以及他们对系统所做的更改。即使在良性情况下,这也可能很有用。

以上所有措施都相对容易实施,但却汇集了许多不太引人注意的服务器和数据库入侵方式。这类工作从长远来看能够带来丰厚的回报,并且从投入与回报的角度来说,物超所值。我强烈建议所有关心数据库安全的人都考虑一下这些措施。

*关于隐私的一点小提示。其他人可能不同意,但我个人认为员工不应该在公司硬件上保守秘密。因此,我认为公司不应该追踪员工在指定工作环境之外的行为。公司电子邮件、公司文件和流程访问属于公司安全和风险缓解的范畴。员工的住宅和个人生活习惯则不属于。务必保持界限清晰。

10. 也要照顾好自己

照片由 Andre Mouton 在 Unsplash 上拍摄
猴子盯着镜子里的自己

最后,我想花一些时间讨论一下组织安全中最大的弱点:安全管理员本身。

令我感到恐惧的是,我经常看到安全专家将以下所有规则应用于所有人,除了他们自己。

我们看到公司和组织受到打击的新闻,所有人都公开摇头说“我也不会这样”。

但很有可能,而且很有可能会成功。知识和努力固然重要,但保持一点谦逊也无妨。

写下你的流程。为关键操作指定一个辅助人员。准备好突发疾病时的应对方案。永远不要假设自己已经掌握了所有答案,也永远不要停止学习。

最重要的是,善待自己和身边的人。保障信息安全从未如此艰难;我们都在尽力而为。

希望本文可以为人们评估自己和组织提供一个坚实的起点。

感谢您抽出时间。

鏂囩珷鏉ユ簮锛�https://dev.to/arctype/database-security-checklist-for-small-teams-2mhj
PREV
5 个有趣但不一定有用的 Javascript 技巧 5. 使用范围切换 4. 字符串化函数 3. 可调用对象 2. 词汇绑定的类方法 1. 从构造函数返回 有什么新东西吗?
NEXT
Yarn 2.2 🚅🌟 重复数据删除,更快,更轻......