什么是隐蔽安全?为什么它是邪恶的?
本文将解释什么是隐蔽式安全,为什么将其作为唯一的防御措施会很糟糕,以及在 Web 应用中可能使用的一些方法。如果您进行渗透测试,本文将为您提供一些建议,告诉您在 Web 应用中哪里可以找到可以利用的薄弱安全漏洞示例。
目标受众:
- Webapp 开发人员,或
- 渗透测试新手
什么是通过隐蔽性实现的安全?
通过隐蔽性实现的安全性是依靠保密和迷惑攻击者,而不是建立适当的控制来阻止他们。
让我们举一个现实世界的例子。
假设你又回到了青少年时期,你有一个文件夹,里面装着你不想让你父母发现的文件。你懂的。
你可能把这个文件夹藏在一堆其他文件夹后面,还给它起了个无聊的名字。而且你可能还很自信地知道,你的父母绝对不会去翻“家庭作业”这个文件夹。
这相当于通过隐蔽性来实现安全。这种方法可能暂时有效,但一旦有人查看 Windows 资源管理器的“常用文件”部分,你的秘密就暴露了。更好的办法是用密码保护你的文件。
在计算领域,通过隐蔽性实现安全性的做法比你想象的更为普遍。以下是我见过的一些通过隐蔽性实现安全性的最有害的例子。
依赖 Robots.txt
Robots.txt 是位于您域名根目录下的文件,例如 。Robots.txtmywebsite.com/robots.txt
用于告知 Google 等搜索引擎不要抓取您网站的某些部分。robots.txt 可能如下所示:
User-agent: *
Disallow: /super-secret-passwords/
Disallow: /secret-admin-access-panel/
这些设置只会阻止 Google 抓取这些页面!并不能阻止黑客。检查 robots.txt 文件是恶意攻击者最先会做的事情之一——而且,当他们看到你告诉 Google 不要抓取“super-secret-passwords/”时,你觉得他们接下来会做什么呢?
相反,如果您希望某个页面不显示在搜索结果中,请为该页面添加noindex 元标记。更好的做法是,如果除了您之外的其他人都不应该看到某个页面,请确保该页面位于安全的登录页面之后。如果您不经常移动,还可以考虑限制该页面的 IP 地址。
隐藏常见的WordPress文件
一些 Wordpress 网站试图隐藏它们正在运行 Wordpress 的事实。常见的做法包括删除 Wordpress 的readme.html文件,以及重命名文件夹(例如wp-admin )。
虽然这些可能会阻止新手攻击者,但任何有互联网连接的黑客都能够通过检查您的 CSS 发现您正在运行 Wordpress。
替代方案?说实话,别太在意。隐藏你正在使用 Wordpress 的事实并不比保持 Wordpress 和插件更新更重要。如果你有一个 Wordpress 网站,可以尝试运行wpscan看看是否存在需要修复的明显漏洞。
在子域名中隐藏不安全代码
假设您想隐藏网站中的某些部分——可能是一些仍需测试的不安全代码,或者一些管理控件。您可以采用的方法之一是将其隐藏在子域名中。
只要这不是你唯一的安全措施,这样做就没问题。如果子域名需要安全登录并且 IP 受限,那就没问题。但是,将不安全的代码放在一个没有其他控制措施的随机子域名后面,就很糟糕了。我会在这篇文章中解释原因。
打造自己的加密货币
当然,考虑到其他哈希算法已经存在这么久了,它们现在肯定不安全了,对吧?或许还是自己设计一个比较好。
不。
不,不,不,不。
除非你真的了解自己在做什么,否则不要尝试自己编写加密或哈希算法。目前流行的算法已经经过安全社区的严格审查,比你自己编写的任何算法都安全得多。如果你自己编写算法,它很可能包含你可能忽略的严重错误。千万不要这么做。
依赖模糊的数据库名称
当然,也许将 SQL 数据库的“用户”列重命名为更隐晦的名称,会让攻击者更难执行SQLi操作。但如果您的网站存在 SQLi 攻击的可能性,那么修复漏洞才是您的首要任务。
如果您不确定您的网站是否容易受到 SQLi 攻击,请查看sqlmap。
秘密参数
这是我最喜欢的方法之一,因为CTF经常使用它,但它也出现在现实世界中。
假设您有http://mywebsite.com/normalpage
,但是当您导航到时http://mywebsite.com/normalpage?admin=true
,管理员访问权限被启用。
普通用户可能不会尝试添加管理员参数,但任何熟练的黑客只要使用模糊测试工具就能在几分钟内找到它。使用秘密参数来控制对隐藏内容的访问并非明智之举。
当然,“admin” 并不是一个秘密词。如果控制参数是类似这样的东西呢http://mywebsite.com/normalpage?230j7x9832nnc=true
?
现在它和密码差不多了,对吧?不是。你现在面临的主要问题是,如果你的页面链接到其他地方,你的 secret 参数就有可能显示为Referer标题,如果你只是实现了一个标准的登录面板,这就不会成为问题。
如果您必须这样做,无论出于何种原因,也许可以考虑将参数移至 POST 请求的正文中。
题外话
当然,在 Web 应用设计中,模糊性确实有其存在的意义。将敏感代码放在子域名或移除对后端的引用都是完全合理的。关键在于,这不应该成为你唯一的防线。
您可以通过实施标准访问控制并遵循最佳安全实践来确保正确使用隐蔽性。记住:如果您和黑客之间的唯一障碍是隐蔽性,那么黑客和您之间的唯一障碍就是时间。
如果您有兴趣提高您的安全技能,请查看我的另一篇关于如何进行渗透测试的文章。
祝您黑客愉快!
这篇文章最初发表在explainhownow.com上
文章来源:https://dev.to/ctrlshifti/what-security-through-obscurity-is-and-why-it-s-evil-47d5