作者:天融信阿爾法實驗室 李喆 李閃 姜利曉
一、漏洞描述
Samba 是一套可使 UNIX 系列的操作系統與微軟 Windows 操作系統的 SMB/CIFS 網絡協議做連結的自由軟件。這個漏洞使得 Samba 客戶端可以主動上傳共享庫到 Samba 服務器同時加載并執行該動態庫導出函數。
攻擊者利用漏洞可以進行遠程代碼執行,具體執行條件如下:
- 系統開啟了文件/打印機共享端口445
- 共享文件夾擁有寫入權限
- 惡意攻擊者需猜解 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
如下圖所示:

然后重新加載
/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

最終結果如圖所示:

三、漏洞原理分析
下載版本4.6.3 進行靜態分析漏洞原理: 漏洞通過一個具有可以權限的 Samba 賬號上傳一個惡意共享動態庫上去,并觸發惡意功能。
我們這里闡述的是如何加載的惡意動態庫。
漏洞觸發位置:

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

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

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

可以看到把管道名傳遞進入到 dlopen 函數也就是打開惡意構造的共享庫文件,接著把句柄給了 dlsym 加載SAMBA\_INIT\_MODULE,也就是說惡意共享庫的功能要寫入到 Samba 初始化函數里才能被加載,這樣就觸發了惡意構造的函數功能呢。
四、修復建議
官方補丁:
官方已經發布安全更新包,用戶可以通過以下2種方案進行安全更新操作。
-
通過源碼安裝的 Samba 使用者,從 Samba 官方下載補丁包或者安裝最新版 Samba 安全補丁下載地址
-
使用二進制分發包(RPM等方式)的 Samba 使用者通過
yum,apt-get update等命令進行安全更新操作。
臨時緩解策略:
-
修改 Samba 文件系統中可寫文件共享目錄的安全屬性,使用 “noexec” 選項。 注:noexec 選項指明在該文件系統上不允許二進制文件或腳本的執行
-
修改 Samba 配置文件
smb.conf,在 [global] 節中增加如下信息“nt pipe support = no”。 修改完畢重啟 Samba 服務。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/307/
暫無評論