圖片來源: 

Dider Stevens

3月底,Dider Stevens展示了如何在不使用PDF Reader的漏洞下,配合社交工程,誘騙使用者開啟惡意程式的手法。

這樣的手法,主要是建基在PDF Reader的Launch指令,它可以自動開啟其他應用程式的延伸功能,是PDF Reader合法的功能。從Dider Stevens的展示中可以看到,使用者打開一個看似正常的PDF檔案,之後雖然會跳出警告方塊,警告使用PDF檔案即將開啟一個新的應用,不過攻擊者可以透過社交工程的欺騙手法,改寫警告方塊中的內容,藉此欺騙使用者點選開啟。以Dider Stevens的展示為例,他就把內容改為「To view the encrypted message in this PDF document, select "Do not show this message again" and click the Open button.」在展示中,只要點選開啟,就會自動跳出cmd.exe的命令執行視窗,這也代表其實透過這樣的手法,攻擊者可以執行任何一種應用。

/Launch的手法其實背後最重要的是社交工程的應用

前面已經談到了,要使用這個手法,其實插入的程式寫法並不複雜,只需要寫入:

/OpenAction <<

/F <>

/S /Launch

>>

然後改寫警告方塊的內容,也只需要以(app.alert("提示文字內容"))這樣的方式就能達成,以技術來說,基本的作法並不困難。但是重點在於這樣的攻擊方式,如果是在攻擊者已經事先收集一定資料,並且針對組織特定單位或人員發動,卻讓人難以防禦。

這其實正是社交工程攻擊手法的重點,其實目前社交工程的手法已經成為攻擊者最熱愛的攻擊方式,這些手法普遍來說技術門檻都不高,並且都能造成大量的連鎖攻擊,如果攻擊者事前有針對攻擊的對象和組織做一定的調查,社交工程的手法甚至會讓使用者難以察覺,使用者還有可能在不知不覺中成為協助攻擊者的小幫手。

一般來說,這樣的手法幾乎都是用在針對性的攻擊上居多,攻擊者會事先收集目標組織的資訊,然後再偽裝成組織內部的人員,以發信、傳送檔案等方式,在社交工程的掩護下,傳送敲開大門的惡意程式給特定對象。以前述的手法來說,就是PDF檔案。

當使用者在不知情的狀況下執行的PDF檔案,可能就會連帶的執行了惡意程式,或是連結到特定的網站下載檔案,讓攻擊者取得使用者電腦的控制權,並且能夠側錄更多資訊。最後,攻擊者會利用被取得控制權的電腦使用者名義,再度以社交工程的方式掩護,發送惡意程式,取得其他電腦的控制權。

這也是為什麼社交工程的手法成為現在最難以防範的攻擊方式,因為最早受害的使用者,往往就在不知情的狀況下成為攻擊者的助力或跳板,甚至主動協助攻擊者傳送含有惡意程式的檔案。

4月初,另一位資安研究人員Jeremy Conway所展示的手法,就讓Dider Stevens的手法獲得更近一步的驗證,Jeremy Conway證明了,攻擊者不僅可以在合法的狀況下利用/Launch的功能,透過社交工程的掩護,讓使用者在不知情的狀況下執行惡意程式或連線,還可以進一步以類似的方式,讓原本同一臺電腦上健康的文件,也被植入自動開啟動作的指令描述,並且讓使用者自動連線到特定的網站。

過去透過PDF這樣的文件檔案,迫使使用者在不知情的狀況下自動連線到惡意網站的手法,往往都必須透過檔案夾帶的JavaScript來連結外部網站。這樣的攻擊手法只要使用者關閉了PDF Reader的JavaScript功能,就無法成功達成。

但是在Jeremy Conway的展示中,即便使用者使用的Adobe Reader關閉了JavaScript執行的選項,攻擊者卻還是能夠透過類似Dider Stevens所展示的手法,讓原本健康正常的PDF檔案,被植入自動執行連線到惡意網站的指令敘述,之後打開原本健康的PDF檔案,就變成會自動連線到攻擊者指定的網站,即使在JavaScript執行的選項被關閉的狀況下。

Jeremy Conway的展示,代表著使用者只要打開過一次惡意的PDF檔案,其他健康的PDF檔案也有可能受到影響。這也讓這樣利用社交工程和PDF原本合法功能的手法,變成有了大規模散布和攻擊的可能性。如果說Dider Stevens展示的手法,是示範了一般社交工程攻擊的前段(敲開大門),那麼Jeremy Conway所展示的手法,則是完成了後段(擴大攻擊範圍)。而且最重要的,兩者所展示的手法,都不需要利用程式的漏洞,完全在合法的範圍內進行。這使得防毒軟體不可能阻擋這樣的連線,而如果沒有使用類似網站名譽資料庫功能的閘道器設備,攻擊者很有可能就在無聲無息的狀況下,完成了植入惡意程式的動作,而起因,只是使用者打開了一個他原本以為是某個認識的同事寄來的PDF檔案。

可能攻擊手法:先變更Reader的設定,再竊取資料

上述的手法,都還只是整套攻擊中的幾個環節而已。正所謂知己知彼,百戰百勝;為了能夠防範可能利用PDF發動的攻擊,我們可以把上述的手法套用在過去攻擊者常用的攻擊模式上,並且進一步推論出其可能的做法細節。

首先,透過上述的手法先敲開使用者的大門後,除了植入木馬等惡意程式外,攻擊者為了讓之後的擴大破壞和感染範圍能夠更順利,取得控制權後,可以先想辦法變更使用者端的PDF Reader設定,如此一來,就算禍源PDF檔案被找到了,植入的程式被清除了,未來還是有機會可以利用類似的手法進入使用者的電腦。

由於Reader軟體的設定,通常都可以在本機端作設定,所以這讓攻擊者可以在不受到組織內管理者的干擾下,去做這些設定的更改。以下就以最多人使用的Adobe Reader為例。需要更改的設定會分幾個重點進行,首先先把Reader的JavaScript全域變數功能打開,將JSPrefs/bEnableGlobalSecurity的參數改為0;透過這樣的做法,就能夠讓攻擊者自由的使用JavaScript全域變數來開啟或關閉JavaScript,達到控制PDF外連網站的效果。

再來就是更改PDF Reader中連線網站白名單的設定,透過將TrustManager/cDefaultLaunchURLPerms/tHostPerms 的值改變,設定特定的網站位址為白名單,例如將ithome.com.tw位址加入,就能讓PDF檔案在連線到此一位址時,不會再跳出警告。

然後對於攻擊者來說,為了未來透過PDF Reader開啟一些未經允許附加延伸檔案指令方便,可以修改Attachments/cUserLaunchAttachmentPerms/iUnlistedAttachmentTypePerm的值,將之設定為2,這將讓攻擊者能夠方便的重複透過惡意的PDF入侵此一使用者的電腦,而讓他渾然不知。

之後,攻擊者還能再進一步取得與開啟JavaScript的使用權限與功能,只要能夠透過PDF使用JavaScript,不光是重複入侵的機會提高很多,攻擊者也更容易透過JavaScript執行一些動作,盜取資訊。

透過這些設定的更改,攻擊者現在如果要盜取這臺電腦上的PDF文件,就可以透過執行JavaScript的方式,將所有使用打開過的PDF文件變成Adobe文件共通的FDF格式,因為FDF占用的空間通常較小,所以能在占用比較小頻寬的狀況下,往外傳輸到前述設定好的白名單伺服器位址上。這些動作只要透過PDF原本的ImportData、SubmitForm的指令,就可以完成,並且還能隱藏在背後,將轉好的FDF檔案儲存在暫存區或隱藏的檔案夾,等待每次Reader開啟時再將資料傳出去。而這些動作都是透過PDF的Reader軟體完成,所以除非組織內有行為模式分析的設備,否則將難以發現異常。

也有可能透過PDF做DDoS或破壞性的攻擊

看完了可能的竊取資料與攻擊模式後,其實PDF還有其他可能造成的威脅,如針對單機癱瘓式的DDoS,或是單純破壞的攻擊。不過這種做法和現在一般攻擊者想要隱身在背後的模式較不符合,使用的可能性較低。

這些攻擊方式多數都是利用改寫PDF中物件的數值達成。舉例來說,透過改寫PDF檔案中物件的長度,如:

4 0 obj

<<

/Filter /FlateDecode

/Length 486003

>>

stream

(此處填入數值)

endstream

endobj

透過將長度改寫為486003位數,然後在stream的部分填上許多、許多的0,這樣就能夠造成PDF執行的癱瘓。

此外,透過執行Named、GoTo這樣的函式,也能造成PDF Reader的癱瘓,例如不停的換頁、開啟新頁面,或是隨機亂跳等,進而導致整臺電腦當機。這些動作可以配合AA(Additional Action)這樣的寫法,難度其實並不高。例如:

1656 0 obj

<<

/AA <<

/O <<

/S /GoTo

/D [1 0 R /Fit ]

>>

>>

多插入幾個這樣的寫法就能夠利用GoTo去做到PDF頁面隨機亂跳的效果。

又或者使用像這樣的寫法:

/AA <<

/O <<

/S /GoToR

/F (gotor-2.pdf)

/D [0 /Fit ]

/NewWindow false

>>

>>

/AA <<

/O <<

/S /GoToR

/F (gotor-1.pdf)

/D [0 /Fit ]

/NewWindow false

>>

>>

透過在不同文件中,如gotor-1.pdf放入第一串程式碼,在gotor-2.pdf放入第二串,就可以造成利用GoToR指令重複開啟不同文件,並且還可以設定在新視窗開啟,最終造成電腦負荷過大而導致當機。

不過終究來說,這些方式都太過直接破壞性,太容易被發現,受害範圍有限,並且對攻擊者來說又不能獲得利益,這類的手法已經越來越少見。

總而言之,PDF由於與不同應用互動的能力強,要透過PDF進行攻擊,或做為攻擊手段的可能性,也就越來越高。尤其先前提到的由Dider Stevens和Jeremy Conway所展示的一連串手法,都使得PDF這樣文件檔案格式的安全性,再次受到考驗。

目前兩位研究員提出的手法,Adobe還沒有一個正式的解法可以解決這個問題,Foxit則是以緊急更新來增加了警告的方塊,不過根本上還是沒有解決這個問題。也就是說,此類利用PDF和社交工程進行入侵的攻擊手段,目前還是無解法的。

不過企業還是可以先從管理的手段改善開始做起,首要之務就是教育使用者對於不明檔案的危險性必須有一定的認識。尤其很多一般使用者對於PDF這樣的文件檔案,總是認為比執行檔來得安全,這樣的觀念其實已經落伍,除了時時讓軟體保持更新之外,為了避免受到前述PDF檔案與社交工程手法的攻擊,從使用習慣上開始教育,會是各個企業和組織的當務之急。而從治標的方法來說,先想辦法關閉PDF閱讀軟體中開啟JavaScript和第三方應用程式的選項。不過對於企業的IT管理者來說,要確實做到這一點,也是一個很困難的目標。但由於目前最被廣泛使用的Adobe,還沒有針對由Dider Stevens和Jeremy Conway所展示的一連串手法,做出任何針對性的更新。短期內也不會移除JavaScript的功能。也因此,企業或組織內的IT人員,有必要開始考慮使用這些治標的方法,減少使用者因而中招的風險。

 

不需漏洞也能讓PDF自動開啟執行檔

1.

使用者點選了有問題的PDF 檔案,雖然會跳出警告,但攻擊者也可以透過改寫PDF警告方塊,以社交工程的手法誘騙使用者點擊開啟檔案。像在這裡攻擊者D i d e rStevens 就把警告方塊內的內容改寫為「要看此一加密文件的話,就必須按下Open」,以此誘騙使用者。

 

2.

點選之後,後續再以詐騙的對話方塊誘騙使用者繼續點選執行。

 

3.

用各種假冒的對話框欺騙使用者,讓使用者不知道發生了什麼事,只好持續點選。

 

4.

回到桌面,會發現已經多了好幾個執行程式後產生的隱藏檔案,也就是說,透過這個手法,這時候惡意程式已經植入完畢了。而使用者可能還未發現任何異狀。

 

惡意PDF檔案在正常檔案中植入自動連線的程式碼

資安研究人員Dider Stevens展示的手法,揭露了一個可怕的事實,那就是即便在不需要利用PDF閱讀軟體漏洞的狀況下,攻擊者還是有辦法可以透過合法的方式搭配社交工程,讓不知情的使用者執行惡意程式。這樣的手法其實在技術上並不困難,而且由於是建基在合法的行為上,所以幾乎沒有辦法被阻擋。就目前來看,只有關閉PDF閱讀程式自動執行第三方應用程式的功能才能暫且阻止這樣的可能性,不過對於企業來說,這並不是容易徹底實行的管理方法。

 

1.

這個示範和先前同樣,只需要利用到PDF 檔案允許的/Launch功能。

 

2.

可以看見PDF Reader並沒有開啟JavaScript的功能,這證明了和過去以JavaScript 的方式,讓使用者在開啟檔案的時候自動連線到惡意網站的手法不同。

 

3.

點選事先受到攻擊者加工的惡意PDF 檔案,和先前的展示相同,這邊透過社交工程的手法,改寫警告的文字框,誘騙使用者點選開啟。

 

4.

這時候重新點選原本健康的PDF 檔案,竟然也出現了要執行其他動作的警告框,同樣也以社交工程方式改寫內容,讓使用者點選Open。這時候原本健康的PDF檔案,已經被惡意的PDF 檔案給植入了自動執行動作的程式碼。

 

5.

按下Open後,就會自動連結到特定的網站。這整個過程中都沒有運用JavaScript和惡意程式,全部在PDF的允許功能內運作,這使得傳統防毒軟體毫無用武之地。但是連到特定的網站同時,就有可能可以隨機植入木馬或其他惡意程式。

 

資安研究員Jeremy Conway 在Youtube 上展示其手法時的影片, 網址為http://www.youtube.com/watch?v=QNxJTt4vOT0&feature=player_embedded

 


相關報導請參考「小心!PDF也會藏毒


Advertisement

更多 iThome相關內容