神魂顛倒論壇logo

icon
首頁Adobe Animate CCFlash學習討論區 → Flash安全的過去,現在和將來

雷射溶脂 | 瘦小腹 | 植髮 | 眼袋 | 玻尿酸 | 電波拉皮 | Flash | 購物車 | Flash Player 11.2 | 豐胸 |

下一主題 上一主題


Flash安全的過去,現在和將來


Flash安全的過去,現在和將來 簡版






漏洞研究

今天時間並不是很充分,我快一點,我大概談一下我對漏洞研究的一些想法,目前發現新的漏洞困難越來越高了,因?自動化發展技術已經很平台了,像昨天的TOM也提到,有一些企業級發生Frmewore都已經有,而且包括很多研究員,包括我自己還有這堛漪膍s者他們都有自己的小工具。所以無論使用的軟體越來越複雜,比如說一個Chromim能做很多事,像0安全衛士,金山衛士一個東西已經覆蓋了很多很多部門,連下載軟體都不要去下載軟體站去下載,更多功能意味更多代碼,更多代碼意味著有更多漏洞,從成本來說發展硬體越來越便宜,包括PC、包括虛擬化,包括SERVER,會有很多很多虛擬機,因?企業的每天在跑。我們有很多的漏洞發覺的現金獎勵計劃,比如說ZDI像Google大家也聽過那個演講,Google不走尋常路,像白帽子,尤其沒有做過,願意通過漏洞發覺提升自己的名聲,但是漏洞另一方面越來越大,隨著Windows 的發布那種這堬捰X已經很強,而且越來越多程序有沙箱,基于內存的Memory Corruption都是程序化,讓你猜不到任何程序中有任何值。但是漏洞喜歡隨機化,但是像我們有很多漏洞,除了有攻擊性創新的那種能力技術。
在新視窗檢視
來源:青少年心理咨詢 http://www.rui-ling.com

通用的技術已經沒有了,也就是說我們有一個漏洞利用來獎勵這種方式。像Explontation已經沒有了,那種基于某個程序特定的能力正在越來越流行,但是要求也是很高的,你要求研究員比軟體架構師理解軟體架構而,但是軟體架構並不一定會帶來,有可能軟體架構是完美的,但是貫徹的過程可能會出現問題,所以說你要比開發員更好理解這些細節。所以說我今天的議程,開始我會隨大家回顧一下以前的Flash的漏洞。第二部分我會講一下Flash ActionScript 架構,第三我會講FlashJIT和減輕技術,第四部分我們有一個案例分析,第五部分就是未來Flash的安全思考。因?我們這埵釩雃h安全分析員,有很多白帽子。



回顧Flash威脅

Flash的安全問題其實並不光彩,我大概就在十二月份,有;個漏洞被記錄在案。去年月份我?我的CanSecWest是;00多個,一下子增加了0多個。從;00年開始,據我的調查就已經有'個,而且在去年;0''年的上半年已經達到了一個高潮,然後這堶n提一下,身?;0''0'這個漏洞來說,這個漏洞被捕了以後,捕之前沒有被發現,然後現在才發現,在之前在捕之前已經有攻擊別人了,這是針對一個很有意思的結論。

對于Exploitation的發現的時候,看到更改AS的結構,來直接破壞它的驗證器,從而導致很多很多問題,從而導致能夠完美利用看起來不可能被利用的漏洞。所以說它的意義應該在于它是第一個揭露AVM漏洞的,因?那時候AVM還沒有公開,這個是很牛的。在;00年上半年已經有可記錄的用于在ActionScript,它是一個通用的ActionScript,早些時候被發現的。到;0'0年;月份,有一個比較劃時代的,這個當然是Flash,它是一個JIT,其實它是一個思路,在同一段內存堶掖ㄔi以利用Flash來利用這些漏洞。去年發現了一個方法可以利用AS類型混亂,只針對此類漏洞類型,只能用于類型混亂漏洞。還有AS本地API信息泄露,;0';年月被發現,就是高度漏洞特定。



Flash ActionScript 架構

Flash架構來說我們討論一下,這個架構看起來就是這樣的,比如說AVM;虛擬機的話,一個代碼在執行的虛擬機他會直接調用Internals,那種才是真正做市場,像網路、顯示、媒體、事件都有專門的類堶惘陰M門的API,但是AVM還有一個曆史上的問題,曆史上有AVM',當然沒有AVM;那?複雜,這些都可以通過AVM'來訪問。他主要是以TAG形式存在。AS執行過程是怎樣的,最左邊我們看多一些代碼,是源代碼,源代碼是開發員做的事,他會進行編譯,編譯堶惘處ytecode,執行這個文件在播放的時候,他就會用AVM;虛擬機,其實這個是AVM;是一部分,機器碼在內存中,機器碼就可以執行了,像這個例子就是Coll trace,就是本地API,這個API就會跳到Binary地方。

簡單來說,Avm;加AsNative API就是現在流行的Flash,當然我們現在不包括曆史的東西。AVM;是一個開放商店的東西,它只是一個語言解釋器,它的真正功能是在API實現的,但是API不是Open Store,而是Close Store。



Flash JIT和減輕技術

 我們重點關注一下jit,最初這個概念提出是Dion在;0'0年;月提出的,左邊跟右邊對比一下,本來左邊那個是Jit在認證中的畸形碼,如果把地址改0'A,改成0'B是另一個形式,就是左邊的字節是被編譯後正常的,但是右邊的字節就可以幹壞事。但是我們也想到,因?如果你能控制EIP,你怎?要知道B不去A呢?這個也只有0%的幾率,對于黑客來說0%還是不夠的。當然有的時候可以接受。

有兩個函數,都被JIT了,JIT Func'是藍的,上面是JIT Func;是紅線的,中間有一些結構,而且我們也知道一些事實,MebmHeader是一些字節,它只是?了修複這個字節,要被整除。因?Jit函數的長度我們是可以控制的。比如說你把Bytecode堶悼i以控制一點,就是函數的長度是可控的,這個時候而且你要知道,他是從下面到上面,它是連續的,就是說JIT的分配是連續的,我們得出結論,比如說我們可以控制長度,我們就可以把Padding變?空,就是可以從一個頁從下面上面,下面上面每個地方我們都可以控制的很好。通過Spraying都是可控的,其實這是一個很粗糙的應用。通過了解本質,可以有更好的利用方法,可以達到百分之百完美成功。比如說內存是從上網下,比如說第一個從下面開始寫,第一個函數上面是一個Header,第三個函數,JIT函數是從下往上。因?這個Header可以控制字節,每個函數的長度也是可控的,一切都是可控的。

接下來我們討論一下Harden,在;0'0年'月就被引用了,在;0'0年'0在Tamarin—redux,我聽說他跟微軟合作引用了這個措施,開始的時候在代碼堶情A但是它並沒有真正被發行到FlashPlayer,一直到去年''月份,''.'.'0;.開始,他可能考慮一些測試看看有沒有一些問題。這是兩個方法,我們現在具體討論一下,在兩個發行之間一些內個數的字節,他選擇的個數從0到0×',他選了一個,這個是隨機選擇的,得到一個隨機數,對比我們剛才看起來,下面那個是第一個,然後memheader,這堿O0到'個,他隨機選了一個,上面就是一個下一個JIT。
在新視窗檢視

第二個指令對齊隨機化,就是說目前有漏洞指令的話有五個漏洞指令,就是說隨機插入一個,在另外一個又隨機插入一個,有的時候發現0×0有可能代碼小于0×0,這個時候他並不會插入。你看這個代碼是怎?實行的?五個堶悼忖]是隨機選的。

這兩個結合起來效果怎?樣?基本上Block還是風水,通過CR代碼機制隨機化,函數地址再也不是可預測了,即使你把那個Padding也是不可預測的。還有通過插入一個LOOP函數長度也是不了的,因?你超過0,他就超過了。還有你的Shellcode本來是好的,因?插入了nop字節就會被破壞,實際上結合這一點,你並不能猜著另一個地址有另一個字節。



案例:利用Tamarin源代碼分析Flash漏洞

接下來我們討論,因?這埵釩雃h安全人員,其實我們可以通過你發現一個漏洞,分析一個漏洞,涉及到虛擬機,是有關Flash虛擬機,你可以通過源代碼級別來分析。

Tamarin是虛擬機我們知道,就是我們可以通過源代碼來分析級別來理解,關于Tamarin可以看它的源代碼,這個漏洞在今年'0月剛剛被修複的漏洞在互聯網上出現了,McAfee實驗室發布了一個Blog post描述了這個BUG,這個很簡單,這個是原文件,右邊是被修改過的代碼,你看第五行左邊是已經修改了Declocal R'0,因?我們看上面函數是對于這個函數,這個是很核心的函數,我們通過這個函數來說,我們看哪一個地方是處理Declocal。我們需要知道一些事實,發行的Flash Player,這個看起來就是這樣,藍色並不會被執行,這個emitCoerce直接引用了,並沒有做任何檢查,RM0其實就是在整個大的驗證函數堙A其實就是參數值。當這個函數可以輸入內值的時候,多用的代碼就可以多執行,因?這個設計這個函數並不會檢查輸入的東西,檢查是在外部檢查的,設計就是這個思路,有可能?生Buffer和Ouverflow,都是有可能?生。這個Checklocal涉及到';行。其實在編譯以後是等于沒寫。我們就有一些想法,因?這個漏洞已經很顯然了現在,而且我們知道它核心的驗證部分,所以所有的Flash版本都是影響到Windows和Chrome,只要是Flash就會受影響。而且它非常容易不是一般的容易,是非常容易被觸發,只要把這個參數改大一點點,就是說只要改成大一點點就會觸發,當然有時候他並不會Crash,大是絕大部分情況下會Crash。




自體脂肪隆乳 | 回到頂部
下一主題 上一主題