在基于 Linux 的服务器上,我遵循以下基本做法:
- 使管理员账户密码足够长且足够复杂(即理论上说,密码不能在合理时间内被破解)。
- 监控到管理文件的所有传入网络流量。
- 要从上面的 #2 扩展保护层,请监视本地文件更改(尤其是具有需要sudo权限的命令的更改)。
- 验证所有用户输入,从而保证所有用户输入都是安全的。
作为一名新手开发人员,如果服务器管理员执行上述操作,我什至不明白如何进行黑客攻击。
在基于 Linux 的服务器上,我遵循以下基本做法:
作为一名新手开发人员,如果服务器管理员执行上述操作,我什至不明白如何进行黑客攻击。
不确定所有安全更新都已应用?请记住,作为后卫,您必须赢得100% 的胜利。黑客只需要赢一次。
您列出的步骤说起来容易做起来难(除了密码的事情......但人们仍然选择可怕的密码!)。
2) 另外,面向公众的 Web 服务器的“可靠来源”是什么?整个互联网?整个互联网,没有中国/俄罗斯(/一些/其他/国家)?自动化系统可以检测多种类型的攻击,但就像防病毒一样,它们只能做到这一点。
3) 监控本地文件是好的,但同样,它不是灵丹妙药。如果攻击者设法将代码注入 Web 服务器,然后使用内核错误将代码放入内核……而无需将文件写入磁盘,该怎么办?那时,他们可以将文件写入磁盘,并使用 root 工具包来防止大多数(理论上所有)在线扫描注意到系统的任何更改。
即使他们只设法利用 Web 服务器,他们也可以做 Web 服务器能做的所有事情(这可能是攻击者感兴趣的全部内容)。
4)您应该始终验证用户输入。大多数开发人员都知道这一点(并且许多人尝试这样做)。可悲的是,说起来容易做起来难,这就是为什么我们继续看到一个又一个的问题,即用户输入没有得到适当的验证。您永远无法保证任何真正的软件都正确验证了所有用户输入。阅读 StackOverflow 上的一些 PHP+MySQL 问题,看看有多少人认为mysqli_real_escape_string()
可以防止所有 SQL 注入攻击("where ID = " . $val
很容易受到攻击,即使$val
是mysqli_real_escape_string
! 的输出也是如此)。
即使你可以(你不能)确保每一个已知的攻击向量都受到防范,你也无能为力,只能在黑暗中疯狂地对抗和未知的未知(嗯,不断地自我教育会有所帮助)。
作为一个你的防御不会做任何事情的例子,我正在参加一个我们正在做“战争游戏”的安全课程。我能够通过从另一台机器上获取他们的一个用户密码来 root 对方团队的服务器(其中一个人搞砸了并将其作为命令错误地输入 bash,他们从未想过要从 bash 中删除它.bash_history
)。
从那里,我欺骗了他们通常登录的机器的 IP,并通过 SSH 登录,输入他们的用户名 + 密码。我对系统的访问受到限制。然后我运行sudo vim
,再次输入相同的密码,并让 vim 生成了一个 bash shell。多田!来自可靠来源的根访问权限,无需以不寻常的方式修改任何本地文件,无需利用弱密码(这很糟糕,但即使是世界上最好的密码也无济于事),也无需依赖未经验证的用户输入。
那时,我很淘气,我手动修改了与我的合法登录相关的所有日志文件,并删除了他们的 IDS(我敢打赌他们不会注意到我用/bin/true
! 的副本替换了它的所有二进制文件) . 一个“真正的”黑客可能会更好地确保他们的活动不会被更警惕的管理员检测到,但我已经实现了我的目标,我的一小部分人希望他们发现有人得到了它。
如果我可以破坏施奈尔定律:
任何人,从最无知的业余爱好者到最好的系统管理员,都可以创建一个他自己无法破解的安全系统。
简而言之,正确防守并非易事,因为...
快速了解您的输入-->
使管理员帐户密码长...
仅靠肩膀冲浪就可以击败任何强密码的努力。
另外,如果您的密码存储机制很弱(容易受到 SQL 注入,或不安全的散列机制,或者最糟糕的是纯文本密码存储),您仍然容易受到攻击。
监控每个传入的网络流量
您将监控大量流量。什么是你不会错过一些重要东西的保证?那么零日呢?
加密流量呢?您将对此进行什么监控?
...并且只允许可靠的来源。
如果您的可靠来源遭到破坏/黑客攻击怎么办?那么他们就不再可信了,但你,系统管理员,不知道这一点!
...监控本地文件更改...验证每个用户输入...
同样,您可以监控多少以及可以分析多少日志...
此外,假设机器上至少运行了一些服务,服务中的漏洞可能会成为您的机器被入侵的原因。
我希望我能给你一个感觉黑客是如何可行的:)
Ack:图片取自 www.quotesparade.com
如果您可以“适当地”进行防御,那么黑客将永远无法进入。问题是在这种情况下正确的含义是什么。
您可以关闭服务器,并将其密封在地下半英里处的混凝土中,它非常安全,对吧?但它无法使用。如果上面的价值足够高,攻击者可能会尝试挖掘它。所以你已经可以从这个极端的例子中看出,安全是一种平衡。它需要是适当的 - 并且仍然允许使用服务器。
既然如此,您会发现的问题包括:
简而言之-您可以根据预算确保安全到一定水平。根据您想要保护的内容来决定您愿意花多少钱。接受会有一些残余风险。
然后为出现问题做好计划——在某些时候,您的安全性将被破坏,您需要知道如何应对。对于简单的文件服务器,此过程可能只是从备份中擦除和重新安装,但对于更复杂的事情,您可能需要通知用户、利益相关者、监管机构等、存储证据、制作取证副本、重建、重新配置或以某种形式修复事件……然后从中汲取学习经验,重新评估您的安全计划。
...然后...重做一遍。定期重新评估您的安全性和安全性,因为外面的世界瞬息万变!