1

我有一个使用 Pushover 与我通信的个人服务器。也就是说,我的服务器可以触发一个脚本,以不同的优先级将消息直接发送到我的手机。然而,这是一种方式。我希望通过使用 Pushover 添加 html 链接的能力来解决这个问题。

我非常了解套接字代码,但我对其中涉及的安全性有些模糊。这将如何工作的一个例子是电源熄灭。我的服务器在 UPS 上,因此立即在我的手机上向我发送一条消息,说电源已中断,我是否要关闭系统?(可能会在电源恢复时发送后续消息,这意味着我可能不希望它关闭。)它将包含一个链接,例如 example.com:4000/insert_a_generated_hash_here。如果我决定我确实希望服务器关闭,则监视端口 4000 的守护进程将收到

GET /insert_a_generated_hash_here HTTP/1.1\r\n
host: www.example.com\r\n
\r\n

我担心的第一件事是非空终止字符串。这是多大的问题?recv 会自动 null 终止吗?

无论如何,我使用 http get 并对其进行散列(或者我不应该——散列一个潜在的敌对字符串有多安全?)。

如果我使用 MD5,http get 将散列到 25b382b678bb33a21fa677c66e9d02a1(我应该使用 MD5 吗?这只是我想到的第一个散列)。

此时,该哈希(应该可以安全地操作?)与“当前活动”命令表进行比较。由于服务器生成了原始生成的散列,它可以对 http 请求进行散列。如果传入的哈希与表中的某些内容相匹配,那么该命令当然只是运行预先设定的命令。命令也仅在 10 分钟内处于活动状态,此时它们将从活动列表中删除。我还可以添加一个“非活动”列表,它会在我的手机上向我发送一条消息,说“已发出此命令,但未激活”。

在这种情况下,该命令将是关闭,尽管它可能是服务器上的用户通过包管理器等安装某些东西的批准。守护进程也可以为一个简单的网页发回相关的 http 响应。说“好!” (我不认为这有什么大不了的?)

这有多安全,我应该注意什么?或者整个想法是安全自杀的顶峰?

4

1 回答 1

1

MD5虽然被广泛使用,但众所周知是被破坏的。改为查看 SHA-1 或类似的东西。

你永远不应该假设任何空终止(或者它提供了正确的空终止,正如 DavidSchwartz 下面所说)。如果您的应用程序依赖于此,请确保在收到请求后自己在守护程序上执行此操作。这确实很重要;您不希望通过愉快地读取或操作不会终止并且只会浪费您的内存的“字符串”而导致缓冲区溢出。

当您说“表”时,您是指在守护程序中硬编码的查找表还是数据库表?如果这些事情发生在内存中,你应该没问题,因为它们不是“可执行的”。例如,如果您正在使用数据库,恶意用户可能会制作一个攻击字符串,以某种方式利用您的数据库(暴露所有包含的数据或获得对系统的未经授权的访问)。散列恶意字符串应该没有效果,但是,如果您没有向散列添加任何盐,则恶意用户可能会自己散列他的字符串并执行命令,如果您允许在您的系统上直接执行命令(抱歉,我不确定您是否已全面了解您的系统)。

无论如何,从安全角度来看,您的策略(只要可行且可维护)都是好的。明确列举可以运行的确切内容可以让您更全面地控制系统的运行方式。这是用户输入卫生的一种形式;您接受原始用户请求并将其翻译(如果无效则不翻译)以在您的系统中正常工作。也就是说,如果这些请求中的任何一个使用原始用户输入,您可能需要进行进一步检查。也就是说,如果请求不是简单地翻译(即您收到shutdown <message>),那么在简单地执行它之前进行清理是很重要的<message>(它可能是恶意代码)。如果不是这种情况(即您只是收到shutdown并执行正确的操作),那么我不会担心。

至于发送网络响应,这可能没问题。如果响应是硬编码的(而不是从动态源中获取的),我不会太担心这个。硬编码响应将是安全的,因为它不会尝试从磁盘读取任何其他内容,并且无法利用此发送(假设没有缓冲区溢出等)。

我能想到的另一个攻击向量是如果没有身份验证。如果这是一个开放式服务器,您可能希望以某种方式将其锁定以进行某种准入控制。这将防止恶意用户以未经授权的方式在您的服务器上执行完全有效的命令。

编辑

为了更加保护 Web 界面,我建议甚至只使用一个简单的用户身份验证表单。简单地依赖散列遵循通过隐蔽原则的安全性,这不应该被依赖。请注意,此表单存在与之前讨论过的相同的用户输入问题(输入卫生、缓冲区溢出等)。sha1(user:pass)以某种编码方式(即)直接对用户输入进行散列并将此散列与必须存储在某处的有效登录散列列表进行比较可能是最简单的。这有助于用户输入卫生,因为这sha1(malicious_payload)将是一个简单的哈希。也就是说,这仍然不能防止您必须积极检查的缓冲区溢出。通常,使用指定长度的命令版本,例如strncpyorstrncmp而不是strcpyandstrcmp. 最后,如果您的密码以某种方式泄露,此表单可能仍会遭受社会工程攻击(即密码网络钓鱼)和密码窃取。也就是说,这些不是系统故障,而是安全的人为因素。

于 2013-03-21T18:40:16.060 回答