成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Flash應用程序安全攻防戰

原創
安全
Flash應用程序(即SWF文件)不僅可以通過web協議進行分發,并且還能讀取本地或者遠程文件、建立網絡連接,以及跟其他SWF文件進行通信等。通過本文,您將了解具體的Flash攻擊手段,有用的Flash安全審查技巧以及安全有關的開發/配置技術。

【51CTO.com獨家特稿】Adobe的Flash技術已經變得越來越流行,現在它不僅用于創建動畫和廣告,而且還用來開發復雜的互聯網應用軟件。Flash應用程序(即SWF文件)不僅可以通過web協議進行分發,并且還能讀取本地或者遠程文件、建立網絡連接,以及跟其他SWF文件進行通信等。通過本文,您將了解具體的Flash攻擊手段,有用的Flash安全審查技巧以及安全有關的開發/配置技術。

一、XSS威脅

從事Web應用程序的開發或者測試工作的人都知道,Web應用程序有一個常見的安全漏洞,即通常所說的跨站點腳本攻擊(XSS)。一般地,如果一個應用程序接受不可信任的源提供的惡意代碼,并且在沒有對這些數據進行消毒處理的情況下直接將其返回給毫無防備的用戶的話,就會發生XSS。雖然Flash應用程序對XSS及其他類型的安全威脅也沒有免疫能力,但是web管理員和Flash應用程序開發人員卻能夠通過采取相應的安全措施來提高這種新興技術的安全性。

一般情況下,進行跨站點腳本攻擊時,攻擊者需要將惡意腳本代碼(諸如JavaScript或者VBScript代碼)注入到Web 應用程序中,這通常是通過哄騙用戶單擊一個鏈接或者訪問一個邪惡的網頁來完成的。隨后,該web應用程序將在受害者的web會話的上下文中顯示并執行注入的代碼。這種攻擊通常能導致用戶帳戶失竊,但是卻不會導致執行命令,除非同時利用了瀏覽器的安全漏洞。因為SWF程序可以嵌入到網站中,并對HTML DOM(文檔對象模型)有完全的訪問權,所以可以通過利用它們來發動XSS攻擊。想像一個顯示第三方Flash廣告的免費電子郵件web服務:一個惡意的廣告商可以創建一個惡意的SWF應用程序來劫持您的電子郵件帳號,以便發送垃圾郵件。默認時,Flash Player對同域的DOM具有完全的訪問權限。

下面介紹針對SWF應用程序的XSS攻擊的基本流程。第一步,攻擊者必須首先設法將代碼注入到應用程序中,以便讓代碼重新顯示給其他用戶。Adobe為程序員提供了各式各樣的用戶界面組件,諸如組合框、單選按鈕以及文本字段等,它們的用法跟HTML表單對象極為相似。此外,讓SWF應用程序接受從外部輸入的參數的方法也很多。

我們可以使用 < OBJECT > 和< embed >標簽將屬性FlashVar嵌入到一個HTML文檔中。

 
圖1

此外,還可以直接通過URL傳入數據:

 
圖2

另外,可以利用類LoadVars來裝載外部數據。

 
圖3

對于ActionScript 2來說,FlashVars會被自動導入到Flash應用程序的變量空間,但是在ActionScript 3中,加載外部參數時需要額外的代碼來完成。一個常見的錯誤是,從FlashVars或者URL參數接受數據后,沒有經過恰當的輸入驗證就直接將它們傳遞給了與瀏覽器直接通信的那些函數了。ActionScript 2中的函數getURL以及ActionScript 3中的函數navigateToURL具有將指定的URL裝載到一個瀏覽器窗口的能力。可以考慮一下以下ActionScript代碼:

 
圖4

該代碼直接利用一個來自外部源的變量來調用函數getURL,這會將用戶重定向至指定的URL。例如,攻擊者可能會建立如下所示的請求:

 
圖5

發出該請求之后,會彈出一個JavaScript警告框,并顯示站點cookie的內容。Cookie經常用于存儲敏感的帳戶數據,諸如會話標識符等。DOM是一種標準對象模型,用來以樹狀結構表示HTML;DOM可被JavaScript代碼用于動態刺探或者修改HTML頁面。可以考慮下面的JavaScript代碼,它將更改在這個HTML頁面上的第一個圖像的屬性source。屬性source被修改后,在該頁面上顯示的圖像也將隨之改變。

 
圖6

攻擊者常用的一種手法是,通過修改HTML DOM插入一幅新的圖像,并讓該圖像的屬性source指向在攻擊者所控制的服務器上的一個文件,同時將cookie內容作為一個參數。通過這種方法,攻擊者只要監視他的計算機的日志就能夠獲取cookie數據。如果其中含有會話id的話,攻擊者就能夠完全控制用戶的帳戶,直至會話到期為止。還有一個ActionScript函數可用于發動XSS攻擊,它就是fscommand。SWF文件可以通過這個fscommand函數跟Flash Player或者托管Flash Player的程序進行通信。通常情況下,Flash Player會駐留于一個Web瀏覽器中,但是它也可以位于其他能夠托管ActiveX控件的程序中。函數fscommand由兩個部分組成:一個命令和一個參數。下面的fscommand函數將發送一個changeText命令,該命令的參數是由FlashVar來指定的。

 
圖7

清單 1 中的JavaScript代碼因此能留駐在處理SWF應用程序發送的命令的HTML文檔中。它只是取得參數,然后修改由text指定的HTML 元素。開發人員應該注意從用戶那里接收的、用于fscommand函數的輸入數據的類型,以及各參數在HTML文檔中是如何使用的。

清單 1. 接收fscommand的代碼

 
圖8

清單 2. 簡單的密碼檢查代碼

 
圖9

上述的示例代碼為攻擊者直接向DOM注入HTML或者腳本代碼提供了方便之門,例如,下面的請求將包含并執行一個存放在遠程主機上的JavaScript文件。

 
圖10

#p#

二、HTML格式的組件

Adobe可以支持標準的HTML標簽的一個子集,我們可以使用ActionScript 2.0中的Text Field 組件或者TextArea組件把這些受支持的HTML標簽可以放到Flash電影片段中。如果不對用于構造HTML的用戶輸入進行嚴格的驗證的話,這兩個組件都有可能被濫用。對image和anchor標簽的驗證需要格外仔細,因為它們尤其容易導致安全漏洞。在Flash中,利用< img >標簽不僅可以在SWF文件和電影片斷中嵌入外部圖象文件,而且還可以嵌入SWF文件和電影片斷,從而發起各式各樣的攻擊。下面的代碼會把來自外部源的數據賦給HTML的text組件:

 
圖11

將JavaScript嵌入圖像的嘗試將會失敗,因為Flash Player好像會驗證圖像是否真是一幅JPEG、GIF 或者PNG格式的圖像。

 
圖12

但是以下代碼將向您證明,Flash Player所做的驗證太小兒科。它只是檢查給定的source屬性是否以字符串.jpg結尾的,因此,只需添加一個類似C語言的行注釋,我們無需改變這個腳本代碼的功能便可哄騙Flash Player去執行< IMG >標簽中的腳本。瀏覽器一旦加載了這個SWF文件,不需要人工介入該JavaScript就會被執行,并出現一個彈出式窗口。

 
圖13

使用此方法我們可以很輕松地將JavaScript或者VBScript注入TextArea組件中。以下請求說明對于錨標簽沒有這樣的驗證,但是這類XSS攻擊要求人工介入。用戶必須單擊這個連接才會執行代碼。

 
圖14

就像前面提到的那樣,< IMG >標簽不僅能夠裝載實際的圖象文件,而且還可以裝載SWF文件。這可能導致一個不懷好意的SWF文件被載入到一個受信任的應用程序中。當裝載其他SWF文件時,應該使用一個框罩來限制這個子SWF文件的顯示區。如果原始的SWF沒有設置框罩,那么子SWF文件就有可能覆蓋整個播放區域。這可用于欺騙受信任的應用程序。但是如果這個注入的SWF來自一個外部域的話,Flash安全策略仍舊對其有效。#p#

三、ActionScript的函數協議

上述的例子使用了JavaScript來演示用戶常見的XSS攻擊,但是有一個專門用于Flash的協議即asfunction,它可以致使一個連接調用一個ActionScript函數。例如,當用戶點擊了存放在TextArea組件中的錨點時,下面的代碼會調用帶兩個參數的本地函數foo。

 
圖15

顯而易見,這種能夠從HTML組件內部直接調用Actionscript函數的能力存在極大的安全隱患??梢钥紤]一下清單 2所示的一個簡單Flash應用程序,該程序通過接收用戶名和口令來進行身份驗證。當用戶輸入了錯誤的密碼時,用戶名以基于HTML的TextArea組件形式回顯給用戶。假設一個輸入了如下所示的用戶名,并隨意猜了一個密碼。 

 
圖16

應用程序將通知這個用戶,提供的用戶名/密碼無效,同時用戶注入的錨也作為HTML輸出的一部分顯示了出來。當用戶點擊這個鏈接時,setPassword函數將會被調用,從而將密碼設為abc。上例說明了允許用戶執行任意的Actionscript函數來操縱程序的應用程序數據是非常危險的。如果一個Flash應用程序中存在持久性的XSS安全漏洞,這會導致存心不良的用戶能夠讓其他用戶在受信任的沙箱中執行任意的Flash函數。受本地信任的SWF文件甚至能讀取本地的文件,并向任意服務器發送消息。ActionScript包含有豐富的函數庫,因此攻擊者可以通過更高級的攻擊類型利用這些庫函數進行聯網和通信,以至于訪問本地的文件系統。 #p#

四、未初始化的變量

PHP程序員可能聽說過一種有爭議的特性,叫做Register Globals,該特性允許從POST和GET請求將請求中的變量注入到一個腳本的變量空間中。當然,該特性并不常用,甚至有的程序員都不知道該特性的存在,由于備受抨擊,所以將在新的PHP 6中去掉該特性。 理論上,使用register globals也有可能寫出完全安全的程序,但是現實中在Web應用程序中發現的大量漏洞都是由于該特性使用不當所導致的。

ActionScript也有一個類似的特性,不過在版本3的時候已將其取消了,但是因為ActionScript 2依舊在Flash社區內廣泛使用,所以這個問題仍然值得我們關注。任何未初始化的變量都可以作為FlashVar進行初始化。當程序員忘記給關鍵變量賦初值或者將變量指定為undefined的時候,很可能會帶來后患??梢钥紤]一下清單 3 中的代碼,它決定用戶是否被允許查看一些機密信息。

清單3. 依賴于未初始化變量的代碼示例

 
圖17

程序員依賴于這樣一個事實,即如果變量userLoggedIn沒有初始化,它就會被設為undefined。而undefined這個值在條件語句中被作為false對待。繞過ActionScript 2中的代碼很容易,因為變量userLoggedIn未經初始化。只需在GET請求或者在HTML中作為一個對象參數將userLoggedIn設為true,如下所示:

 
圖18

在ActionScript 3中,FlashVars只能通過LoaderInfo類的parameter屬性進行訪問,這使得針對未初始化的數據的這種攻擊不再可行,不過,開發人員仍然應該仔細檢查傳給SWF的所有參數。#p#

五、SWF之間的通信

與瀏覽器的Cookie機制相似,本地共享對象(LSOs)為SWF應用程序提供了少量的持久性存儲空間。LSO會受到特定的域、本地路徑或者HTTPS連接等方面的限制。 在清單 4 中的代碼將生成一個共享對象,并且該對象可以被存儲在/a/b或者其子目錄(如a/b/c)下的其它SWF程序所訪問。函數flush將強制將這個對象寫到這個文件中。

清單4. SharedObject示例代碼

 
圖19

如果您打算把機密信息儲藏在一個本地共享對象之內,那么可以把標志secure設為true,這樣一來就只有通過HTTPS才能訪問這個SWF。不管它們是如何被傳輸的,LSOs是以明文的形式存放在客戶端的機器中的。由于ActionScript自身沒有提供加密類,所以如果想保護存儲在LSO中的重要的信息的話,就只好使用第三方加密程序庫了。

為了讓運行于同一個客戶端機器上的SWF應用程序之間可以直接相互通信,ActionScript提供了LocalConnection類。這時必須有一個swf應用程序充當接收方,另一個充當發送方。 這些SWF應用程序并不一定非要運行在同一個瀏覽器中不可,但是默認時,只有位于相同的域中的SWF程序才能相互通信。在調試階段,開發人員經常使用allowDomain函數來放寬這個默認的安全限制。清單5中的代碼,讓LocalConnection來接收數據。

清單5. 接受 LocalConnection 的代碼

 
圖20

如果產品代碼中遺留了allowDomain(‘*”) 將是非常危險的,因為它允許來自任何域的任何SWF程序都能訪問你的應用程序的內部函數。通配符最好的使用方式是只允許相同的域或者子域之間的SWF可以進行通信。例如,allowDomain(“*.test.com”)將允許在www.test.com和mail.test.com之間的通信。為了發送數據,可以使用LocalConnection函數,如清單 6所示。 如果不使用函數connect的話,發送方可以使用想要函數名和參數來直接調用函數send。

清單 6. 發送LocalConnection的代碼

 
圖21

#p#

六、正確的輸入驗證

輸入驗證的常見方法是檢查一塊數據是否匹配一個正則表達式。正則表達式的作用是描述一個字符模式。ActionScript在版本3開始對正則表達式提供本地支持,并使用EMCAScript語言規范來實現正則表達式。仍然使用ActionScript 2的傳統開發人員在驗證數據時,卻無法借助正則表達式或者諸如As2lib之類的第三方程序庫。可以考慮一下以下有弱點的代碼:

 
圖22

不要盲目信任用戶提交的電子郵件,而要使用正則表達式進行雙重檢查來將惡意用戶拒之門外。清單7中的代碼給出了一個使用正則表達式測試一個電子郵件地址是否合法的函數示例。

清單 7.驗證電子郵件的規則表達式

 
圖23

如果您的應用程序必須遷移到ActionScript 3.0,那么即使不用正則表達式也能進行輸入驗證,盡管此解決方案不太優雅并且不太合乎RFC標準。不用正則表達式驗證輸入時,一般地需要調用許多標準串函數,如清單8所示。

清單8. 無規則表達式的電子郵件驗證

 
圖24

如果您必須使用用戶輸入的數據來供getURL函數或者HTML文本組件使用,那么可以利用正則表達式定義那些數據是可以接受的,并只接受http或者https協議處理程序用于有效的鏈接。不要依賴轉義函數來進行輸入驗證。按照Flash幫助文檔的規定,escape函數將參數轉換成一個字符串,并以URL編碼的格式對其進行編碼,其中非數字字母字符被替代為%十六進制序列??梢钥紤]一下以下代碼,它沒有正確地使用escape函數來進行輸入驗證。

 
圖25

Escape函數不能阻止惡意用戶潛入JavaScript函數,并執行他們自己任意的腳本代碼,例如請看以下請求:

 
圖26

#p#

七、安全地公布內容

不僅Flash開發人員應該花時間去驗證輸入,web管理員也應該通過設置安全措施來防止不可信的SWF文件訪問瀏覽器和/或網絡。可以通過 < OBJECT > < embed >標簽把SWF應用程序作為對象嵌入在一個HTML頁面中。您可以在影響安全策略的< embed >或者< object >標簽之內規定三個可選參數。 參數allowScriptAccess控制SWF文件是否能夠訪問HTML容器。而allowNetworking參數則控制SWF使用ActionScript的網絡API的能力。最后,allowFullScreen參數決定Flash應用程序是否被允許控制整個屏幕。

參數allowScriptAccess有三個可能的值:

◆always:允許SWF和HTML頁面通訊,不管加載這個HTML頁面的域名如何。 只有在完全信任這個SWF的時候才能使用這個選項,它是Flash Player 7和早先的版本的默認行為。

◆sameDomain:只有在兩者位于同一個域中時才允許SWF應用程序修改底層的HTML頁面。 位于域www.a.com中的Flash應用程序不能修改位于www.b.com中的HTML頁面。這個是Flash Player 8及隨后版本的默認行為。

◆never :絕不允許在HTML頁面和SWF應用程序之間進行通信。

參數allowNetworking也有三個可能的值:

◆all:SWF應用程序被允許使用網絡API建立無限制的網絡連接。

◆internal:SWF應用程序不允許調用瀏覽器的導航或者交互API,但是被允許調用其他網絡調用。

◆none:禁止SWF應用程序使用任何網絡API。

參數allowFullScreen僅僅有兩個可能的值:

◆true :SWF應用程序被允許占用整個屏幕。 這個選項可能被惡意用于誘騙攻擊。

◆false:fullscreen模式不被允許。

許多流行的論壇允許其管理員創建他們自己的BBCode以使得用戶可以格式化討論貼或者包含額外的內容。許多管理員已經增加了支持SWF的BBCodes??梢钥紤]一下以下不安全的HTML代碼替換Flash BBCode。

 
圖27

在一個有敵意的你不可以信任任何張貼的swf應用程序設置中,必須將在< embed >標簽之內的allowNetworking、allowScriptAccess和allowfullscreen顯式設置,以防止惡意應用程序進行非本意的網絡或者腳本調用。不應依賴默認Flash Player安全設置,而應當假設一些用戶無法或不愿意更新軟件。清單 9中的HTML代碼給出了安全的設置。

清單 9. 為 HTML 的Object 標簽添加適當的安全設置

 
圖28

#p#

八、安全分析工具

目前,可用來對Flash應用程序進行安全審計的工具仍然不多。Stefano Di Paola已經編寫了精巧的工具用來發現跨站點腳本攻擊和跨站Flash漏洞,該工具名為SWFIntruder。這個工具提供了一組預定義的攻擊方式,這些是可定制的,并能以半自動化的方式進行XSS測試。這個工具運行在Web服務器上,可以通過瀏覽器進行訪問,它能顯示全部未定義變量和SWF應用程序中所有已經實例化的變量。

用戶可以通過選擇一個參數來測試和執行各種攻擊,并提供XSS掃描的輸出結果。 SWFIntruder的一個主要局限性是它僅僅能分析低于版本8或者ActionScript 1或者2創建的Flash應用程序。當審計封閉源碼的Flash應用程序或元件的時候,反編譯器就顯得尤為重要了。反編譯器提供了編譯程序的逆過程,因為它將低級計算機代碼轉換為一個高層的抽象化代碼。 Flash反編譯器接受swf應用程序的字節碼,然后生成相應的ActionScript代碼,而后者相對來說更易于人類閱讀。為了揭露安全性缺陷,使用靜態分析工具來針對生成的ActionScript代碼進行分析就更方便了。免費的反編譯器的一個例子是Flare,它將從一個swf應用程序中提取全部ActionScript文件。不過,就像SWFIntruder一樣,Flare 不支持ActionScript。 但是有商業產品可以從ActionScript1/2或者ActionScript3應用程序生成FLA文件,前提是必須掏錢。

九、結束語

在開發基于web的富應用程序的時候,許多Flash應用程序開發人員并沒有意識到它們正受到惡意用戶的各種安全威脅。盡管安全社區對XSS、未初始化的變量攻擊及其他輸入驗證漏洞并不陌生,但是Flash提供了一種新的攻擊類型,尤其是那些無防備的和未經嚴格測試的Flash程序。不過,只要經過程序員、測試人員和web管理員密切配合,經過適當的培訓并對輸入端進行嚴格檢查,就能夠有效減輕Flash應用程序中的跨站點腳本攻擊漏洞所帶了的威脅。

【51CTO.COM 獨家特稿,轉載請注明出處及作者!】

【編輯推薦】

  1. 利用Flash參數注入的新型攻擊技術
  2. 360安全中心警告:Flash曝出嚴重安全漏洞
責任編輯:許鳳麗 來源: 51CTO.com
相關推薦

2011-01-17 23:41:13

2012-10-25 13:54:03

云安全云計算

2009-08-20 16:45:32

2011-01-07 10:04:50

2018-11-12 00:35:56

2019-09-02 14:45:33

2024-04-30 11:06:52

2010-09-28 14:10:21

2014-10-13 13:20:27

2013-01-28 14:16:59

2009-02-10 10:20:06

2021-06-16 09:40:44

網絡安全物聯網代碼

2012-11-15 09:32:35

雙十一淘寶DDoS

2019-03-05 12:43:07

AI攻防OpenAI攻擊

2015-08-24 17:20:21

2014-02-19 10:43:04

虛擬運營商

2010-05-20 09:48:36

2014-03-12 10:01:15

阿里云亞馬遜云計算

2025-03-13 14:13:46

2013-03-27 16:58:40

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜不卡福利视频 | 亚洲精品在线免费观看视频 | 精品少妇一区二区三区在线播放 | 欧美在线成人影院 | 草比网站| 亚洲国产一区二区在线 | 精品视频免费 | 日韩免费一区 | 五月天综合网 | 日韩视频在线一区二区 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 国产免费福利在线 | 青青艹在线视频 | 九九99九九精彩46 | 精品国产乱码久久久久久老虎 | 中文字幕亚洲一区 | 99精品免费| 黄色毛片在线观看 | 91高清免费观看 | av片免费 | 欧美日在线 | 91色视频在线 | 粉嫩国产精品一区二区在线观看 | 精品乱码一区二区三四区视频 | 国产女人精品视频 | 国产性色视频 | 成人精品鲁一区一区二区 | 偷拍自拍网址 | 欧美日韩不卡 | 一级黄色片网站 | 国产成人免费视频网站视频社区 | 噜噜噜色网 | 欧美jizzhd精品欧美巨大免费 | 亚洲高清av | 一a一片一级一片啪啪 | 91久久久久 | 一区日韩 | 99视频在线免费观看 | 在线综合视频 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲精品欧美一区二区三区 |