Linux版“永恆之藍”遠端代碼執行漏洞技術分析
一、漏洞描述
Samba是一套可使UNIX系列的作業系統與微軟Windows作業系統的SMB/CIFS網路通訊協定做連結的自由軟體。這個漏洞使得Samba用戶端可以主動上傳共用庫到Samba伺服器同時載入並執行該動態庫匯出函數。
攻擊者利用漏洞可以進行遠端代碼執行,具體執行條件如下:
1)系統開啟了檔/印表機共用埠445
2)共用資料夾擁有寫入許可權
3)惡意攻擊者需猜解Samba服務端共用目錄的物理路徑
滿足以上條件時,由於Samba能夠為選定的目錄創建網路共用,當惡意的用戶端連接上一個可寫的共用目錄時,通過上傳惡意的共用庫檔,觸發漏洞使samba服務端載入並執行它,從而實現了遠端代碼執行。
漏洞編號: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函數也就是打開惡意構造的共用庫檔,
四、修復建議
官方補丁:
官方已經發佈安全更新包,用戶可以通過以下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服務。