Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,非序列化不受信任的原始向量安全吗?_R_Security - Fatal编程技术网

在R中,非序列化不受信任的原始向量安全吗?

在R中,非序列化不受信任的原始向量安全吗?,r,security,R,Security,R提供了serialize和unserialize函数来将任意R对象转换为字节向量并返回 我正在考虑对通过网络传输的部分信息进行非序列化,这些信息(理论上)可能会被恶意用户篡改 我理解,恶意用户可以注入任意的R对象,该对象可能充满有害代码。但这并不是我所担心的,因为我可以(我认为我可以)通过仔细处理接收到的对象来防止这样的代码执行 我担心的是缓冲区溢出或类似的方式,仅仅通过对格式错误的字节进行非序列化,就可以在R服务器上执行任意机器代码。有人看过/做过模糊测试吗 我不是安全专家,我自己也没有简单

R提供了
serialize
unserialize
函数来将任意R对象转换为字节向量并返回

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

我理解,恶意用户可以注入任意的R对象,该对象可能充满有害代码。但这并不是我所担心的,因为我可以(我认为我可以)通过仔细处理接收到的对象来防止这样的代码执行

我担心的是缓冲区溢出或类似的方式,仅仅通过对格式错误的字节进行非序列化,就可以在R服务器上执行任意机器代码。有人看过/做过模糊测试吗


我不是安全专家,我自己也没有简单的方法来进行分析。但可能是其他人做的?

据我所知,还没有对R代码库进行广泛的安全代码审查。对于那些认为Adam的担忧是没有道理的人来说,这里有一个列表,其中一些(即使是普通的Python和CPython)确实是缓冲区溢出。是很少的,我不认为这是由于基本的R代码是完美的不足。(顺便说一句,甚至还有S-PLUS。)我指出Python,因为它是一个广泛使用的、基于C的解释环境(听起来很熟悉吗?)

下面简要介绍几个问题,所有这些问题似乎都与漏洞/利用漏洞无关

我怀疑CVE或内部vuln报告R的缺乏主要是因为没有安全研究人员有空闲的周期专门刺探它,也没有组织从商业上要求过(至少是为了公开问题,而不是仅仅在R代码库的私人副本中修复它,这是一种确定的可能性)

根据我的经验,我认为R在您描述的情况下更可能被应用程序拒绝,而不是屈服于成功的代码执行或进程权限提升攻击。BaseR在核心C例程的基础上有自己的功能,而R核心团队在使用它时几乎是虔诚的。现在,
valgrind
不会捕获所有内容(如果它捕获了,任何软件中都不会有缓冲区溢出),但是在这里使用它,再加上所说的内存管理,在这方面给了我一些安慰

然而,在基本R C代码中非常粗略地搜索类似于
strlen
的内容会产生1000多个结果(在基本R代码中也有它的非
n
近亲,这些非
n
版本的基本字符串函数是许多缓冲区溢出漏洞的来源)。那么,可能吗,是的。对你来说,可能性和严重性是什么?再多说一点

BaseR确实合并并依赖于其他开源库,这些库确实存在可利用的漏洞。R core(以及AT&T、Microsoft、TIBCO等供应商)二进制文件在其二进制版本中使用(根据我的经验)上述开放源代码库的最新版本(静态链接时)(这些版本并不常见,但一年中会出现很多次)。如果情况允许,R-core还将在R-devel升级窗口之外发布新的二进制文件(供应商通常会很快跟进)。请注意,如果您决定使用系统上的可用资源自行编译R,那么您完全是在自力更生

有许多C/C++支持的R软件包都包含了开源库的副本。我的一个“业余”项目(我从来没有空闲时间)是跟踪它们,看看这些包含的库有多过时
httuv
是一个示例,其中该软件包中的Include源库存在漏洞,但它们不太可能向R公开,因为代码易受攻击部分的功能不是通过软件包API直接公开的。不过,您确实需要关注这些软件包

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

如果您在Windows上,则存在与软件包相关的漏洞的另一个潜在来源,但我认为您不在Windows上,而且这个答案已经很长了

所以,回到你的风险评估(因为这才是你真正正在做的)。你需要考虑一些事情。攻击者现在的目标是R。我在这一行业最好的公司之一的网络安全部门工作,在威胁参与者领域中没有看到任何东西让我相信R是一个普遍的目标。你的公司会被专门针对吗?对我不知道你们公司做什么,但我怀疑你们不够重要,不足以成为你们发起攻击所需的攻击者的目标。您确实需要使用类似的方法来模拟场景,以真正解决风险水平对您的影响

如果您在一台服务器上运行,并且所说的服务器是基于linux/bsd的,那么在R之外,您可以做很多事情来帮助限制缓冲区溢出攻击的影响。这些太长了,不能放在这里。但是,如果你像你的问题所表明的那样关注整个事情,那么这些补偿控制措施将是很好的研究

TLDR听起来像是在unix ish系统上,在非隔离段中通过线路传输序列化的R对象