華文網

Linux版“永恆之藍”遠端代碼執行漏洞技術分析

一、漏洞描述

Samba是一套可使UNIX系列的作業系統與微軟Windows作業系統的SMB/CIFS網路通訊協定做連結的自由軟體。這個漏洞使得Samba用戶端可以主動上傳共用庫到Samba伺服器同時載入並執行該動態庫匯出函數。

攻擊者利用漏洞可以進行遠端代碼執行,具體執行條件如下:

1)系統開啟了檔/印表機共用埠445

2)共用資料夾擁有寫入許可權

3)惡意攻擊者需猜解Samba服務端共用目錄的物理路徑

滿足以上條件時,由於Samba能夠為選定的目錄創建網路共用,當惡意的用戶端連接上一個可寫的共用目錄時,通過上傳惡意的共用庫檔,觸發漏洞使samba服務端載入並執行它,從而實現了遠端代碼執行。

根據伺服器的配置情況,惡意程式碼還有可能以root許可權執行。

漏洞編號:CVE-2017-7494

危害評級:高危

影響範圍:所有介於 Samba 3.5.0 ~ 4.6.4之間的版本。其中(4.6.4/4.5.10/4.4.14 版本)不受影響。

二、漏洞複現

通過一個可寫帳號,上傳惡意共用庫檔,觸發惡意共用庫檔實現遠端命令執行。

安裝Samba 按照以下要求安裝即可

Samba Version

Samba Version

Samba Version

配置samba

添加下面這些即可,如果之前conf檔中包含的注釋即可

workgroup = WORKGROUP

netbios name = LinuxSir05

server string = Linux Samba Server TestServer

#security = share

[models]

path = /tmp

available = yes

browsable = yes

writable = yes

create mask = 0777

write list = debian

guest ok = yes

如下圖所示:

然後重新載入

/etc/init.d/samba reload

最後啟動服務

/etc/init.d/samba restart

配置 msf

Use exploit/linux/samba/is_known_pipename

Set target 0

Set RHOST localhost

Exploit

最終結果如圖所示:

三、漏洞原理分析

漏洞通過一個具有可以許可權的samba帳號上傳一個惡意共用動態庫上去,並觸發惡意功能。

,我們這裡闡述的是如何載入的惡意動態庫。

漏洞觸發位置:

在這裡可以看到pipename ,這個是管道名,需要利用這個管道名是惡意共用庫so檔參數,比如/tmp/xxx.so , 這個參數在傳遞進smb_probe_module裡,跟進下這個函數:

又把參數傳遞進入了do_smb_load_module()函數裡,再跟進

可以看到如果管道名字存在/, 會進入else 裡調用load_module()函數,把管道名傳遞進來,再繼續跟進:

可以看到把管道名傳遞進入到dlopen函數也就是打開惡意構造的共用庫檔,

接著把控制碼給了dlsym 載入SAMBA_INIT_MODULE,也就是說惡意共用庫的功能要寫入到samba初始化函數裡才能被載入,這樣就觸發了惡意構造的函數功能呢。

四、修復建議

官方補丁:

官方已經發佈安全更新包,用戶可以通過以下2種方案進行安全更新操作。

2、使用二進位分發包(RPM等方式)的Samba使用者通過yum,apt-get update 等命令進行安全更新操作

臨時緩解策略:

1、修改samba檔案系統中可寫檔共用目錄的安全屬性,使用“noexec”選項

注:noexec 選項指明在該檔案系統上不允許二進位檔案或腳本的執行

2、修改samba設定檔smb.conf,在[global]節中增加如下資訊

“nt pipe support = no”。 修改完畢重啟samba服務。

注:noexec 選項指明在該檔案系統上不允許二進位檔案或腳本的執行

2、修改samba設定檔smb.conf,在[global]節中增加如下資訊

“nt pipe support = no”。 修改完畢重啟samba服務。