Linux版“永恆之藍”遠程代碼如何執行漏洞

Linux Windows 腳本語言 UNIX 小哥扒點 2017-05-30

一、漏洞描述

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 < 4.6.4

Samba Version < 4.5.10

Samba Version < 4.4.14

配置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

如下圖所示:

Linux版“永恆之藍”遠程代碼如何執行漏洞

然後重新加載

/etc/init.d/samba reload

最後啟動服務

/etc/init.d/samba restart

Linux版“永恆之藍”遠程代碼如何執行漏洞

配置 msf

Use exploit/linux/samba/is_known_pipename

Linux版“永恆之藍”遠程代碼如何執行漏洞

Set target 0

Set RHOST localhost

Exploit

Linux版“永恆之藍”遠程代碼如何執行漏洞

最終結果如圖所示:

Linux版“永恆之藍”遠程代碼如何執行漏洞

三、漏洞原理分析

下載版本4.6.3 進行靜態分析漏洞原理:

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

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

漏洞觸發位置:

Linux版“永恆之藍”遠程代碼如何執行漏洞

Linux版“永恆之藍”遠程代碼如何執行漏洞

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

Linux版“永恆之藍”遠程代碼如何執行漏洞

Linux版“永恆之藍”遠程代碼如何執行漏洞

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

Linux版“永恆之藍”遠程代碼如何執行漏洞

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

Linux版“永恆之藍”遠程代碼如何執行漏洞

可以看到把管道名傳遞進入到dlopen函數也就是打開惡意構造的共享庫文件,接著把句柄給了dlsym 加載SAMBA_INIT_MODULE,也就是說惡意共享庫的功能要寫入到samba初始化函數裡才能被加載,這樣就觸發了惡意構造的函數功能呢。

四、修復建議

官方補丁:

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

1、通過源碼安裝的Samba使用者,從Samba官方下載補丁包或者安裝最新版Samba

(安全補丁下載地址:https://www.samba.org/samba/history/security.html)

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

臨時緩解策略:

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

注:noexec 選項指明在該文件系統上不允許二進制文件或腳本的執行

2、修改samba配置文件smb.conf,在[global]節中增加如下信息

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

相關推薦

推薦中...