2016-09-16 49 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,速度會更快!... –