2016-09-16 53 views
5

R提供了serializeunserialize函数来将任意R对象转换为字节向量并返回。反序列化不可信的原始矢量在R中是否安全?

我正在考虑反序列化将通过网络传输的部分信息,这可能(理论上)会被恶意用户篡改。

据我所知,恶意用户可以注入一个任意的可以充满有害代码的R对象。但这不是我所担心的,因为我可以(我想我可以)通过仔细处理接收到的对象来阻止这些代码执行。

我担心缓冲区溢出或通过反序列化格式错误字节纯粹事实执行R服务器上的任意代码的类似的方式。有没有人看过/进行过模糊测试?

我不是安全专家,我也没有简单的方法来自己执行分析。但也许别人呢?

回答

4

据我所知,R代码库没有广泛的安全代码审查。对于那些认为亚当的担忧并不值得担保的人,下面列出了一个Python vulnerabilities列表,其中许多列表(即使是普通的Python vs CPython)确实是缓冲区溢出。 R's list是不够的,我不认为这是不够的,因为基本的R代码是完美的。 (另外,S-PLUS甚至有a singular vulnerability report。)我指出Python是因为它是一个广泛使用的C语言支持的解释环境(听起来很熟悉?)。

快速search on R Core's Bugzilla for `"overflow'"显示了一些问题,所有这些问题似乎都不是漏洞/利用相关的问题。

我怀疑缺乏R的CVE或内部泄露报告主要是由于没有安全研究人员有空闲周期致力于捅它,并且没有任何组织要求商业请求(至少是为了使问题公开而只是将其固定在R代码库的私有副本中,这是一个确定的可能性)。

我认为从我的经验来看,基于R的应用程序更有可能从您所描述的情况不仅仅是成功的代码执行或进程特权升级攻击中解脱出来。 Base R在核心C例程的基础上拥有自己的memory management layer/interface,而R Core团队在使用valgrind时几乎是宗教信仰。现在,valgrind不会捕获所有的东西(如果它确实存在,那么在任何软件中都不会有缓冲区溢出),但是在这里结合使用它和内存管理给了​​我一些这方面的安慰。

然而,对于在基本RC码亩产量达1000余个结果类似strlen一个非常粗略的搜索(它也有它的非n表兄弟在基础R代码和这些非n版本的基本字符串函数有许多的来源缓冲区溢出漏洞)。那么,可能是,是的。什么是可能性严重性给你?更多关于这一点。

Base R并入并依赖于其他开源库,而且这些库具有可利用的漏洞。 R核心(以及像AT & T,Microsoft,TIBCO等)的二进制文件在他们的二进制版本中使用(根据我的经验)所述开源库的最新版本(当静态链接时)(这不是频繁的,但是一年发生多次)。如果情况有必要,R核心还将在R-devel推广窗口之外发布新的二进制文件(并且供应商通常很快适用)。请注意,如果您决定使用系统上可用的编译器自己编译R,那么您完全靠自己。

很多 C/C++支持的R包,它们包含开源库的副本。我的一个“闲暇时间”项目(我从来没有空闲时间)是跟踪他们,看看这些包含的图书馆是多么过时。 httuv是一个示例,其中包中的源代码库包含漏洞,但它们不可能暴露给R,因为代码的易受攻击部分的功能不是通过包API直接公开的。不过,您确实需要关注这些软件包。

即使没有合并源代码库的依赖,C/C++ - 支持R封装是潜在的内存问题一个明确的来源,因为有没有为他们的安全编码要求和他们操纵内存。 R核心团队强烈建议使用valgrind来测试软件包(它是R CMD check中的一个选项,它是++ gd),但这也依赖于作者编写健壮的示例和测试,这些示例和测试将明确地对代码进行足够的测试。根据我的经验,大多数包装作者(包括可悲的是我)很少这样做。

有用于包装相关的漏洞另一潜在来源,如果你是在Windows上,但我不认为你是在Windows和这个答案已经长的牙齿。

所以,回到你的风险评估(因为这是真的,你在做什么)。你需要考虑一些事情。攻击者现在是否瞄准R?我在网络安全工作的商业最好的公司之一,并没有看到任何威胁演员景观中的任何东西,使我相信有一个普遍的目标的R.可以你的公司具体针对?是。我不知道你的公司做了什么,但是我怀疑你不够重要,不足以成为攻击者所需的攻击者的攻击目标。你真的需要使用像OpenFAIR这样的东西来模拟场景,以真正解决风险等级对你的影响。

如果你的服务器上运行就像你说的,说服务器,基于BSD的Linux /存在R,你可以做些什么来帮助限制缓冲区溢出攻击的影响之外的众多事情。那些进入这里的时间太长了。但是如果你像你的问题所指出的那样关心整个事情,那么这些补偿性控制措施将是很好的考虑。

的TLDR是,它听起来就像你是Unix十岁上下的系统上,并在你的网络的非隔离段都通过导线传输序列化[R对象。总体来说,在不了解公司情况的情况下,我会表示,除非您身处一个有民族国家行为者的行业,否则,您应该非常安全地从事自己的工作。我也认为威胁演员有成千上万种其他方式来追求他们在没有专注于利用您的特定过程之后的真实身份。

我一些安慰,不过,在微软收购革命分析,并正在为r的一等公民。微软拥有广泛而行业领先的安全编码标准和实践,我相信它将被应用到R团队(他们非常快速地进行了集成和品牌推广,我怀疑安全代码流程已被完全应用,但他们依靠R来进行云分析,并且知道他们将为广泛曝光付出的代价)。无论微软最终如何解决问题,最终都会回到基本R(假设他们发现的漏洞不在Microsoft R的专有优化部分)。

这很长,我可能没有完全解决您的问题,所以请在评论中澄清,我可以尽最大努力解决他们,然后再考虑“已完成”答案。不过,对你的担心主要是因为担心这一点。你的荣誉归功于你和你的公司。

+0

这就是我想知道的一切。非常感谢您提供精妙和权威的答案。如果我的自定义协议不需要将消息转换为json,速度会更快!... –