1、360 Computer Emergency Readiness Team, February 2018 文中部分信息直接參考外部文章(見參考),如有侵權或異議請聯系 2017 年度安全報告 應用漏洞 Struts2 S2-045/S2-046 漏洞 Struts2 S2-052 漏洞 DotNetNuke CVE-2017-9822 漏洞 IIS 6.0 WebDAV CVE-2017-7269 漏洞 FFmpeg 安全問題 Nginx CVE-2017-7529 漏洞 Cisco WebEx CVE-2017-6753 漏洞 Git ssh CVE-2017-1000117 漏洞 CVE-
2、2017-16943 Exim-UAF 漏洞 Application Vulnerabilities 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 20182 應用程序作為計算機服務的直接提供者,其存在是不可或缺的。除了傳統的 CS 應用之外還出現了 各種的 web 應用,相應的還有提供 web 服務的各類 web 容器。應用是廣泛的存在于我們的日 常生活中的,如若其中出現了漏洞,將可能直接影響業務的正常運作。本文是 360CERT 對 2017 年應用漏洞的總結。 Application Vulnerabili
3、ties 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 20183 漏洞情況 統計出 2017 年,漏洞最多的 50 個產品,其中系統類 20 個,應 用類 30 個??梢钥吹铰┒醋疃嗟氖?Android,Linux Kernel, Iphone OS,分別 841,435,387 枚漏洞。 篩選出應用類產品漏洞 top10,大多來自 Adobe,Microsoft, Apple ,Google 和開源社區的產品。排在首位的是 Image- Magick, 大多數都是文件解析及編輯器方面的漏洞, 多達 357 枚
4、, 大部分是本地 DOS 和溢出,危害低且利用難度大。這也反映了整 體現象:漏洞多,但是價值高的可利用漏洞太少。 簡單的說,評判漏洞有三個維度:應用的使用量,漏洞的利用難度, 漏洞造成的危害。接下來,對 2017 年有價值的應用漏洞進行詳細 分析。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 20184 2017 年披露的有價值應用漏洞進行梳理 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 20185 2017 年 3 月 6 日
5、,Struts2 發布 了關于 S2-045 的漏洞公告,提 及到可以通過構造好的 Content- Type 值來實現遠程代碼執行攻 擊,影響的版本為 Struts2 2.3.5 - Struts2 2.3.31,Struts2 2.5 - Struts2 2.5.10。由于在默認的情 況下便可觸發漏洞,并且有人發出 了可以實現命令執行的 Payload 導致該漏洞的影響不僅廣而且利 用成本低,從一些 SRC 平臺上對 該漏洞的提交情況也可以看出這 一點。隨后在 20 日出來的 S2- 046 是在 S2-045 的基礎上還存 在其它的觸發點。由于該漏洞造成 的影響非常廣,在這里進行回顧。
6、Struts2 S2-045/S2-046 漏洞 Struts2 及漏洞相關背景 Apache Struts2 是一個用于開發 Java EE 網絡應用程序的 開放源代碼網頁應用程序架構。它利用并延伸了 Java Servlet API,鼓勵開發者采用 MVC 架構。緣起于 Apache Struts 的 WebWork 框架,旨在提供相對于 Struts 框架的增強和改進,同 時保留與 Struts 框架類似的結構。2005 年 12 月,WebWork 宣布 WebWork 2.2 以 Apache Struts2 的名義合并至 Struts。 由于 Struts2 中的 OGNL 引擎功
7、能比較強大,可通過其來訪問 Java 對象的成員變量或方法,如果輸入點可控便會造成安全問題。 盡管 Struts2 也有安全管理器來避免通過 OGNL 來執行命令等一 些危險的操作,但是該安全管理器也是一次又一次的被繞過。 漏洞細節 借助 JavaAgent 來查看漏洞利用過程的調用棧 可以看到大體的流程為 : FileUploadInterceptor.intercept() - LocalizedTextUtil. findText() - LocalizedTextUtil.getDefaultMessage() - TextParseUtil.translateVariables()
8、- OgnlTextParser. evaluate() 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 20186 使用 JavaAgent 來查看調用棧的好處在于只有 payload 和 漏洞環境的情況下就可以大致知道漏洞的利用過程,方便接下 來做動態分析。下面再使用動態分析的方式來跟一下漏洞利用 的 整 個 過 程,struts2 會 在 StrutsPrepareFilter 過 濾 器 中 將 HttpServletRequest 請 求 封 裝 成 StrutsRequestWrapper 或 是 Mu
9、ltiPartRequestWrapper。 而 這 個 漏 洞 就 是 發 生 在 對 MultiPart 請 求 的 處 理 上, 在 StrutsPrepareFilter 類 中 的 doFilter 方法中下斷點即可。對于這里 Get 或是 Post 請求都是一 樣的 在這個方法中可以看到它是通過請求頭中 Content-Type 的 值中是否包含“multipart/form-data”來決定該請求是否為 MultiPart 請求,這也是為什么 payload 在 Content-Type 中需 要包含“multipart/form-data”的原因,同時也說明了在利用的 時候并不
10、需要去構造一個上傳文件的包了,只需要在請求中修改 Content-Type 的值包含“multipart/form-data”就行。接著通 過 getMultiPartRequest 方法來獲取 MultiPart 請求的處理類。 往下跟會進入 wrapRequest 方法 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 20187 可以看到該方法從容器中獲取了名字為 multipartHandlerName 的 值 的 一 個 實 例 來 作 為 處 理 器。 而 multipartHandlerName 的 值
11、 來 自 于 配 置 中 的 struts.multipart.parser 的 值, 該 值 默 認 為”jakarta“, 也 就 是 說 最 終 獲 取 到 的 是 一 個 JakartaMultiPartRequest類的實例, 而問題就是出現在該類中, 這也解釋了為啥這個漏洞能影響這么大,因為在默認的情況下就可 以被利用。 繼續往下跟的時候會進入 JakartaMultiPartRequest 類中的 parseRequest 方法,再跟入 FileItemIteratorImpl 類中的構造方 法 2017 年度安全報告應用漏洞 360 Computer Emergency Rea
12、diness Team, February 20188 可 以 看 到 這 里 有 一 個 對 ContentType 的 值 得 判 斷, 要 不 是 以“multipart/” 開 頭 的 話 便 會 拋 出 一 個 InvalidContentTypeException 的 異 常, 跟 下 去 看 它 對 這 里的異常信息是如何處理的,因為這個異常信息里是包含著 Content-Type 的值的,也就是說里面包含著 payload 中構 造好的 OGNL 表達式。再往下跟直到 OGNL 表達式執行就 是一開始通過 JavaAgent 看到的調用棧中的過程了,看一下 translateV
13、ariables 方法: 會通過以 $ 或是 % 字符開頭來提取出真正的表達式,所以在 payload 中使用 $ 來寫一樣是可以的。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 20189 S2-046 是在 S2-045 的基礎上的,觸發流程一樣,觸發點不一 樣了。在 Streams 類中的 checkFileName 方法會對文件名進行 檢查,若是包含空字節的話會拋出 InvalidFileNameException 異 常 其中異常信息含有完整的文件名,這里的異常信息也經過了和 S2-045 一樣的處理
14、,也就是說文件名中的 OGNL 表達式也會 被執行。針對該漏洞的利用只需要在模擬文件上傳時在 Content- Disposition 的 filename 中加入空字節,并將 OGNL 表達式寫到 filename 就好 S2-046 還有一個觸發方式是 Content-Length 長度超過 2M,但是這種觸發需要配置 struts.multipart.parser 為 jakarta-stream 才行。 Struts2 的安全問題層出不窮,它的漏洞往往影響比較大,同時漏 洞點也經常會別人吐槽。若不是業務必要應該使用安全性更好的框 架來替代它。同時也可以由此去考慮一些別的框架在使用語言表
15、達 式的時候是否會存在一些類似的安全性問題。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201810 Struts2 S2-052 漏洞 漏洞相關背景 Xstream 是一個 Java 類庫,用來將對象序列化成 XML 或者通 過 XML 反序列化為對象。Struts2 啟用了 rest-plugin 后接收到 XML 格式數據時會使用 XStreamHandler 來處理,也就是通過 XML 反序列化為對象。若 XML 為利用 Gadget 構造好的惡意數 據,在反序列化的過程中可以導致遠程代碼執行。 漏洞
16、細節 文件 /org/apache/struts2/rest/ContentTypeInterceptor.java 在struts2 rest-plugin 中的處理邏輯里接受到對應格式的消息時, 會調用已經注冊的對應 handler 的 handler.toObject 方法對其進 行實例化,在這里傳入的 xml 消息,所以就會跳轉到已經定義的 XStreamHandler 的 toObject 方法 2017 年 9 月 5 日,Apache Struts 發 布 最 新 安 全 公 告, Apache Struts2 的 REST 插件 存在遠程代碼執行的高危漏洞, 該漏洞由 的安全研
17、究員 匯報,漏洞編號為 CVE-2017- 9805(S2-052)。Struts2 REST 插件的 XStream 組件存 在反序列化漏洞,使用 XStream 組件對 XML 格式的數據包進行反 序列化操作時,未對數據內容進行 有效驗證,存在安全隱患,可被遠 程攻擊。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201811 在經過此處的 fromXML 方法后導致實例化的惡意對象被執行, 導致惡意代碼執行 隨即看到計算器被成功彈出 這個漏洞應該是 s2 的官方插件中首次受到 xml 序列化的影響, 而反
18、觀之前早已有許多的 php 反序列化和 python 反序列化以及 java 自身的反序列化的問題存在,而過去的這些漏洞應該早已為 我們敲響了序列化這個行為的警鐘,對數據進行序列化,勢必需要 完整且嚴密的校驗,而這個插件中對傳入數據直接進行操作的,明 顯開發者沒有對這塊數據的安全性和合法性產生過重視行為,我們 建議開發者子在開發的時候要基于一切用戶輸入都是不可信的原則 進行過濾和相應的校驗, 這樣才能有效的避免一些明顯的安全問題。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201812 漏洞相關背景 XmlS
19、erializer 是 .net 中用于在對象和 XML 文檔之間進行序列化 和反序列化操作的類,其功能和 Java 中的 Xstream 是一樣的, 但是由于語言的特性不一樣,它們對序列化和反序列化的實現方式 也是不一樣的。所以即使是同樣的對 XML 數據反序列化利用,它 們的自動觸發和利用方式是不一樣的。 漏洞細節 PersonalizationController.cs 66-72 行: 從 Cookie 中 獲 取 到 DNNPersonalization 的 值 后 再 傳 給 Globals 中的 DeserializeHashTableXml 方法。 Globals.cs 368
20、7-3690 行: 2017 年 7 月 份 的 BlackHat 上 Alvaro Muoz (pwntester)和 Oleksandr Mirosh 的議題中講述 了在 .net 中使用 JSON 來進行序 列化和反序列存在的一些安全問 題,同時也提及到了另外的一種格 式 XML, 用 到 了 DotNetNuke 中的一處反序列漏洞來做例子。 通過對該漏洞的分析來了解針對 XML 格式反序列化在 .net 中的利 用方式。 DotNetNuke CVE-2017-9822 漏洞 再跟進 XmlUtils 中的 DeSerializeHashtable 方法。 XmlUtils.cs 1
21、84-218 行: 這個方法會使用 item 元素中的 type 屬性值來設置類型,并且會 在 208 行這里將該元素的內容進行反序列化,這里便是漏洞的觸 發點了。漏洞代碼中從可控輸入點到最終可利用處的這個過程還是 比較直觀的,接下來是針對像這樣使用了 XmlSerializer 來反序列 化的漏洞點進行攻擊利用分析。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201813 利用分析 XmlSerializer 在對一個類進行序列化或者反序列化的時候都需要 傳入該類的類型信息。 先修改下上面的 TestCla
22、ss 類,對其中的成員變量 test 進行封裝。 這時候再去觀察代碼在反序列化時的輸出,可以明顯知道 setter 被自動調用了,因此 setter 便可以作為利用鏈的第一步。接下來 就是要去找一些可以被用作攻擊使用的類了。 System.Windows.Data.ObjectDataProvider 可以調用任意在 運行時被引用的類的任意方法。一個例子: 相 當 于 調 用 了 TestClass.FuncExample(“JustATest!”), ObjectDataProvider 中的成員變量都進行了封裝的,并且每次 調用了 setter 后都會檢測參數是否足夠,足夠了的話便會自動去
23、 調用傳入的方法。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201814 其中的過程借用 BlackHat 議題中的一張圖來展示。 如此一來要是被序列化的是一個 ObjectDataProvider 類,那么 在反序列的時候便可以做到任意方法調用的效果。再找一個存在 能達到想要的利用效果的方法的類就行了,例如 DNN 中的就存在 一個可以做到任意文件上傳效果的類,DotNetNuke.Common. Utilities.FileSystemUtils 中的 PullFile 方法: 總結 在 2015 年和
24、 2016 年間 Java 反序列化漏洞造成的影響非常廣而 且威力大引起了人們對該類型漏洞的重視,相對于常見的字符串和 二進制的序列化數據格式,同樣我們亦應該關注其它格式的序列化 和反序列化會存在的安全問題,不一樣的處理方式意味著可能存在 不一樣的利用方法。值得一提的是今年 F5 威脅研究人員發現該漏 洞同 S2-045/046 一起被用到名為 Zealot 的攻擊中去。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201815 漏洞相關背景 雖然微軟于 2015 年 7 月 14 日停止了對 IIS6.0 的
25、更新支持, 但 在 國 內 仍 然 有 大 量 用 戶, 微 軟 在 2017 年 6 月 13 推 出 了 相 關 Windows Server 2003 補 丁。 在 2017 年 4 月 14 日 ShadowBrokers 更新的 NSA 黑客工具中,Explodingcan 便是 相關開啟了WebDAV服務的Windows 2003 IIS 6.0攻擊程序。 WebDAV 是一種基于 HTTP 1.1 的通信協議。擴展了 HTTP1.1, 添加了新的方法,使應用程序可對 WebServer 直接讀寫,攻擊 關鍵使用的方法 PROFIND,用于返回指定目錄的內容。 漏洞細節 漏洞點:
26、qmemcpy 在進行拷貝處理時,沒有對長度進行檢查,導致溢出 2017 年 3 月 27 日, 來 自 華 南 理工的 zhiniang Peng 和 Chen Wu 在 Github 上公開了一份對 開啟了 WebDAV 服務的 IIS6.0 的攻擊代碼,漏洞編號為 CVE- 2017-7269。并表示在 2016 年 7 月和 8 月份發現該漏洞在野外利 用。 IIS 6.0 WebDAV CVE-2017-7269 漏洞 漏洞觸發流程: 對漏洞函數 ScStoragePathFromURL 打斷點,并查看?;?溯??梢园l現調用棧中的 DAVPropFind。對 Execute 成員 函
27、數進行分析,調用了 HrCheckStateHeaders,進而調用 HrCheckIfHeader 在 qmemcpy( 其中使用正則: 進行檢查,這里的正則并不是十分嚴格,可以輕松繞過。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201827 verify() 最 后 再 使 用 /.dll$|.bundle$|.app$/ 正 則 以 及 白 名 單 whiteList對GpcComponentName進行檢查, 白名單內容如下: 通過白名單之后使用 postMessage: 最后全部檢查完畢就調用 s
28、endGoogleAnalyticMessage 發送消 息: 接下來看看 TriggerExploit: GpcComponentName 中我們調用 msvcr100.dll,這個 dll 并 不存在于白名單中,輸入的 Message 進入 sendMessage 中的 verify 中: 在解析之前我們看到: 解析之后: 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201828 進入 GpcInitCall 進入 verifyScriptCall 檢查: 因為 verifyScriptCall 存在缺陷,
29、GpcInitCall 中的內容在經過 verifyScriptCall 檢查后,仍然如下: base64 解碼后: 最后白名單檢查時,因為存在兩個 GpcComponentName,其 中第一個為 atmccli.dll,所以可以通過白名單: 進入 postMessage 的 message 中: 最后可以通過_wsystem(ObjectAddress)的方式成功執行命令。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201829 總結 該 Cisco WebEx 的漏洞主要是由 Web 插件中 JavaS
30、cript 代碼 針對 json 解析問題以及黑名單過濾不完整導致頁面傳入的非法數 據,最終在客戶端上的命令執行問題。 瀏覽器是用戶日常使用中頻率最高的軟件之一,而瀏覽器上插件的 安全性直接影響瀏覽器的安全。我們之后也將會持續關注瀏覽器插 件相關的安全性問題。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201830 Git ssh CVE-2017-1000117 漏洞 漏洞相關背景 git 是一個分布式版本控制軟件,最初由林納斯托瓦茲(Linus Torvalds)創作,于 2005 年以 GPL 發布。最
31、初目的是為更好地 管理 Linux 內核開發而設計。應注意的是,這與 GNU Interactive Tools(一個類似 Norton Commander 界面的文件管理器)有 所不同。 git 最初的開發動力來自于 BitKeeper 和 Monotone。git 最初只 是作為一個可以被其他前端(比如 Cogito 或 Stgit)包裝的后端 而開發的,但后來 git 內核已經成熟到可以獨立地用作版本控制。 很多著名的軟件都使用 git 進行版本控制,其中包括 Linux 內核、 X.Org 服務器和 OLPC 內核等項目的開發流程。 Secure Shell(安全外殼協議,簡稱 SSH
32、)是一種加密的網絡傳 輸協議,可在不安全的網絡中為網絡服務提供安全的傳輸環境。 SSH 通過在網絡中創建安全隧道來實現 SSH 客戶端與服務器之 間的連接。雖然任何網絡服務都可以通過 SSH 實現安全傳輸, SSH 最常見的用途是遠程登錄系統,人們通常利用 SSH 來傳輸 命令行界面和遠程執行命令。使用頻率最高的場合類 Unix 系統, 但是 Windows 操作系統也能有限度地使用 SSH。2015 年,微 軟宣布將在未來的操作系統中提供原生 SSH 協議支持。 在設計上,SSH 是 Telnet 和非安全 shell 的替代品。Telnet 和 Berkeley rlogin、rsh、re
33、xec 等協議采用明文傳輸,使用不可靠 的密碼,容易遭到監聽、嗅探和中間人攻擊。SSH 旨在保證非安 全網絡環境(例如互聯網)中信息加密完整可靠。 這兩者都是互聯網中最被廣泛使用的軟件,git 的一部分 ssh 協議 的處理會交給本地的 ssh 來處理,而 ssh 這個軟件本身是支持傳 入一定的命令進行執行。 漏洞細節 該漏洞主要由于 SSH 鏈接在 hostname 部分,若是用“-”開頭, 那么會導致 ssh 命令將 hostname 誤認為這是一個選項。因此, 我們可以利用 “-oProxyCommand” 選項來達到命令執行的目的。 在進行 git clone 時候會調用到 git/c
34、onnect.c 中“struct child_ process git_connect(int fd2, const char url,const char *prog, int flags)” 函 數。 其 接 受 到 的 參 數 url 為 命 令 中“git clone xxx:/xxxxxxxxxx/xx(.git)” 的 xxx:/xxxxxxxxxx/xx(.git) 部分。在該函數中會對傳入的這個字符串進行 parse,提取其協 議部分。在滿足協議為 ssh:/ 的時候會進入該函數的 else 部分。 在 2017 年 8 月 10 日 Junio C Hamano 在 郵 件
35、 組 www.mail- 發布了這一問題。 惡意攻擊人員可以通過巧妙構造 “ssh:/.”鏈接,讓受害人在執 行 git 程序等情況下訪問該惡意 鏈接,從而達到命令執行的目 的。該鏈接可以被放在 git 項目的 .gitmodules 文件下,這樣當受 害人對一個項目進行“git clone -recurse-submodules”操 作時,就會引發嚴重安全問題。 漏 洞 影 響 包 括 但 不 限 于 Git, SVN,CVS,HG,Gitlab, GithubDesktop,SourceTree 等。 2017 年度安全報告應用漏洞 360 Computer Emergency Readi
36、ness Team, February 201831 然后根據下面的流程調用本地的 ssh 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201832 首先獲得本地的 ssh 路徑,然后 push 進 conn-args 然后獲得 url 中 ssh_host 部分再拼接路徑 最后調用 start_command 函數進行命令執行 start_command 的定義在 git/run-command.c int start_command(struct child_process *cmd) 將傳入的 cmd 經
37、過處理賦值給 argv 經過 execve 這個函數進行命令執行,但是在這個這個命令執行 的內容是 /usr/bin/ssh ssh_host path ssh -oProxyCommand=gnome-calculator xxx 將會在本地打 開 gnome 的計算器 所以如果我們在 clone 操作的時候將連接指定為 git clone ssh:/- oProxyCommand=gnome-calculator/cert 將取得同樣的命令 執行的效果 總結 Git ssh 命令注入漏洞核心的原因在于在對 hostname 進行 parser 的過程中存在一定的異議 , 也就導致會可以向本
38、地的 ssh 軟體注入一定的參數來執行命令,而和 submodule 的結合 , 更是 提供了更為廣泛的攻擊面。關于 parser 尤其是會和其他軟體進行 交互的處理應該進行更為嚴格的過濾,遵從一切用戶輸入都是有 害的不可信的原則進行處理 . 在 2017 的 BlackHat 更是提出了 url parser 在各個語言中存在著的問題,parser 這種接受用戶輸入作 為主要功能實現的點尤其值得我們進行關注,因為完全由用戶輸入 作為主要依據來進行功能的選擇,但值得慶幸的是,通過這些事件 和報告后,無論是開發人員,還是安全人員都對這些方面投入了更 多的精力去思考去完善。 2017 年度安全報告
39、應用漏洞 360 Computer Emergency Readiness Team, February 201833 CVE-2017-16943 Exim-UAF 漏洞 漏洞相關背景 2017 年 11 月 25 日,Exim 官方修復了一處 use-after-free 的 漏洞,由臺灣安全公司 DEVCORE 的研究人員 Meh 發現,CVE 編號為:CVE-2017-16943,并公布了一份 POC,但是根據我 們的分析跟進,該 POC 必須將配置文件中的 dkim 開啟才能達到 控制 EIP,造成進程崩潰的效果。2017 年 12 月 11 日,Meh 在 DEVCORE 官網公布
40、該漏洞的具體細節和默認配置下的 POC。 漏洞細節 開啟 dkim 配置下控制 rip exim 一共管理著三種堆,定義成枚舉類型的全局變量: POOL_MAIN: 表示主要的分配的堆塊,可以被釋放,消息的處理 會在該堆池中分配。 POOL_PERM: 表示分配的內存是永久的,直到進程結束才會被 釋放,保存一些需要共享的信息 , 例如配置信息,host 信息,在使 用這塊堆池分配前會將 store_pool 改為 POOL_PERM,再調 用 store_get()。 POOL_SEARCH: 保 存 搜 索 的 數 據, 在 search_tidyup、 search_open、intern
41、al_search_find 函數中被使用。 Exim 會循環讀取消息,并動態分配內存,申請內存的函數 包 括:expand_string()、store_get()、string_xxx(),store_ get_perm() 會使用 perm pool。 將配置文件 /usr/exim/configure 中的“control = dkim_ disable_verify”注釋,可以觸發進程崩潰,進而控制 rip,分析 原因如下: 在 receive_msg 函數中會判斷是否開啟 dkim,如果開啟就 會進入 dkim_exim_verify_init 函數: dkim_exim_veri
42、fy_init 函數里在 perm pool 中申請內存: 使得在堆中分配一塊內存,同時不改變 current_block0 中 的值,后續對消息處理時會在 main pool 中分配堆塊,分配一塊 0 x2010 大小的堆塊,釋放后,由于之前 perm pool 分配的堆塊, 使得釋放的堆塊不和 top chunk 合并,變成一個 unsorted bin, 此時 fd 和 bk 指向 main arena 區域。再進一次 store extend 后, 通過 store_get 會獲得指向 main arena 的指針,之后 memcpy 對 main arena 進行寫操作,后續的 fr
43、ee 操作會造成崩潰,RIP 會變成填充的數據。 第 一 個 版 本 的 Exim 是 由 Philip Hazel 在 1995 年編寫的,用于劍 橋大學計算服務的電子郵件系統。 它最初是基于一個較老的 MTA, Smail -3,但它的設計和理念已 經 從 Smail-3 中 分 離 出 來 了。 Exim 高度可配置,因此具有其他 MTA 中沒有的功能。它的郵件策 略控制功能,為管理員提供了控制 誰可以通過系統發送或中繼郵件。 在 4.x 版本中,這已經成熟為基于 訪問控制列表的系統,允許非常詳 細和靈活的控制。4.x 版本中集成 了一個內容掃描框架,可以更輕松 地整合反病毒和反垃圾郵件
44、措施。 這使得 Exim 非常適合執行不同的 郵件策略。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201834 具體的細節如下圖:Exim UAF 流程 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201835 具體控制 rip 的流程如下: Exim UAF-RCE 流程 Default config 默認配置下控制 rip 在 devcore 公司公布具體細節后,我們對默認配置下如何控制 rip 進行了分析。其實原理和開
45、啟 dkim 配置類似,需要在 top_chunk 前 分配一塊在使用的堆塊,防止后面釋放的堆塊和 top_chunk 合并,作 者的 poc 是利用 DATA 來發送一個足夠大的數據來擴展堆塊,循環多 次后,期間釋放了之前的堆塊,變成了一個大的 unsorted bin 塊供后 續分配。此時 top_chunk 之前就有了正在使用的堆塊,再利用 BDAT 命令達到控制 rip 的目的。 通過上面分析,將 chunking_advertise_hosts 的值設置為空, 這樣可以禁用 ESMTP CHUNKING 擴展,使 BDAT 不可用,從而 避免被攻擊者利用。 2017 年度安全報告應用
46、漏洞 360 Computer Emergency Readiness Team, February 201836 總結 應用安全不僅僅只有漏洞,一種名為“供應鏈攻擊”的網絡攻擊行 為也需要我們警惕。它通過一些技術手段在軟件的軟件開發,軟件 分發, 使用升級等環節進行污染, 最后達到盜取用戶隱私、 植入木馬、 盜取數字資產等目的。比如今年的 XshellGhost 事件,Ccleaner 惡意代碼攻擊事件,OSX/Proton 后門攻擊事件等。這種攻擊危 險且難以防御。軟件廠商首先要加強自身安全體系建設,并且安全 廠商之間也已經在威脅情報和安全數據等方面進行更為明確化,縱 深化的整合。這樣才能
47、有效的抵御供應鏈攻擊。 因為區塊鏈技術的發展和虛擬貨幣投資的浪潮,2017 年以挖礦 為目的的網絡攻擊行為特別活躍。這種攻擊主要針對服務器,IoT 設備或者瀏覽器,通過弱口令掃描,漏洞或者 Javascript 挖礦 程序進行惡意挖礦。其中系統漏洞、web 容器和應用方面的漏洞 因為目的性強且回饋率高,成為了黑產的首選。比如 struts2、 WebLogic 挖礦事件,每當有利用難度低的漏洞被披露。都會引 發一波以挖礦為目的的網絡攻擊。 應用漏洞帶來的風險相對比較容易避免,操作系統提供了各種漏洞 緩解機制使得可利用漏洞僅占很小一部分。對于個人用戶,從正規 渠道下載軟件,并且具有良好的上網習慣
48、,注意更新軟件,可以杜 絕大部分的安全問題。對于 web 容器的安全,需要運維人員及時 進行安全更新。 更加希望軟件開發者, 從以上的分析帶來一些思考, 規避上述漏洞中的一些問題。 2017 年度安全報告應用漏洞 360 Computer Emergency Readiness Team, February 201837 360CERT 全稱“360 Computer Emergency Readiness Team”,我們致力 于維護計算機網絡空間安全,是 360 公司基于“協同聯動, 主動發現, 快速響應” 的指導原則,對重大網絡安全事件進行快速預警、應急響應的安全協調團隊。 微信公眾號
49、新浪微博 關于 360CERT 參考 http:/struts.apache.org/docs/s2-052.html Friday-The-13th-Json-Attacks.pdf the-security-update-for-windows-xp-and-windows-server vulnerability-protection-scenario/ the-security-update-for-windows-xp-and-windows-server http:/whereisk0shl.top/cve-2017-7269-iis6-interesting-exploit. html https:/ht-sec.org/cve-2017-7269-hui-xian-poc-jie-xi/ analysis/ https:/threathunter.org/topic/59428ae855cbee0e1e5cad23 Viral-Video-Exploiting-Ssrf-In-Video-Conve