TCP网络通信安全风险
Posted
技术标签:
【中文标题】TCP网络通信安全风险【英文标题】:TCP network communication security risks 【发布时间】:2013-08-14 13:23:11 【问题描述】:我正在开发一个可以使用 QTcp* 建立服务器-客户端连接的应用程序
客户端向服务器发送一个数字。
检查接收到的字符串的长度和质量(它真的是一个数字吗?)
如果一切正常,则服务器回复文件路径(取决于发送的编号)。
客户端检查文件是否存在以及它是否是有效的图像。如果文件符合规则,它会对文件执行命令。
这种类型的连接存在哪些安全问题?
该程序是为 Linux 系统设计的,外部命令 on 使用 QProcess 执行图像文件。如果发送的字符串包含类似(不要运行以下命令):
; rm -rf /
那么它将在未找到文件的安全检查中被阻止(因为它不是文件路径)。如果没有对发送的字符串的有效性进行任何检查,则将执行以下命令:
command_to_run_on_image ; rm -rf /
这会引起恐慌!但这不可能发生。
那么,有什么需要考虑的吗?
【问题讨论】:
不知何故,我认为您的解释不完整。客户发送一个号码,很好。服务器在用这个号码做什么?服务器向您发送文件的路径?在您的客户计算机上?突然执行了一些命令?什么命令?它从何而来?根据您的解释,服务器只向您发送图像的路径。 我编辑了这个问题。客户端发送一个数字,服务器回复一个依赖于这个数字的文件路径(图像位于客户端,但服务器知道它的路径),客户端使用该路径对图像执行命令.在图像上执行的命令不是由服务器发送的。客户端已经知道在接收到的路径上执行什么命令。 我没有看到任何风险。在一个足够不安全的环境中,我可以嗅探你的号码和路径。也许我可以欺骗一个客户端请求到服务器,所以你得到一个你从未请求过的“响应”。但我无法更改命令。当客户端收到一条不存在的路径时会发生什么?它不期望哪个?或者一个,它指向/etc/passwd? 就个人而言,我可能会稍微混淆发送到服务器和从服务器接收的数据。没什么特别的,只是让嗅探变得更加困难。这是正常使用。在高度安全的环境中,我会请教专家。 ;-) 如果路径不存在,那么客户端什么也不做。至于/etc/passwd,它会找到文件,但它会是一个无效的图像。但是,无论结果如何,都不会将任何内容作为响应发送回服务器。 【参考方案1】:如果您打开控制台并输入command ; rm -rf /*
,则可能会发生一些不好的事情。这是因为命令是由 shell 处理的。它解析文本输出,例如通过;
分隔符分割命令并按空格分割参数,然后使用系统API执行带有解析参数的解析命令。
但是,当您使用process->start("command", QStringList() << "; rm -rf /*");
时,就没有这种危险了。 QProcess
不会执行 shell。它将使用系统 API 直接执行command
。结果将类似于在 shell 中运行 command "; rm -rf /*"
。
因此,您可以确定只有您的命令将被执行,并且参数将按原样传递给它。唯一的危险是攻击者有可能使用他可以构建的任何文件路径调用命令。结果取决于命令的作用。
【讨论】:
以上是关于TCP网络通信安全风险的主要内容,如果未能解决你的问题,请参考以下文章