1. 程式人生 > 其它 >印表機安全研究(一):不容樂觀的網路印表機安全狀況

印表機安全研究(一):不容樂觀的網路印表機安全狀況

印表機是人們在生活和辦公中經常使用的電子裝置,家庭、辦公室、公司、政府單位、醫院、學校......幾乎每一個單位和機構都會使用印表機。從安全的角度來看,由於列印裝置部署於內部網路,通過它們可以直接訪問到機密報告、合同或病歷等敏感資訊,比較關鍵。近期,來自德國魯爾大學的安全研究人員對多種品牌型號的網路印表機開展了一項深入的安全研究,以下為他們對這項研究的相關概述和結果分析。

在這篇文章中,我們總結了基於網路印表機的攻擊場景概述,同時展示了攻擊者可以如何入侵一臺存在漏洞的印表機。通過對20種不同品牌型號的印表機進行測試後發現,每一種品牌的印表機都存在不同程度的攻擊可能和漏洞。

基於分析,我們還給出了測試過程中使用的印表機入侵利用工具-PRinter Exploitation Toolkit (PRET)。主要研究成果可以在Jens Müller發表的PPT和我們釋出的公開報告中找到。

另外,為了加強印表機安全的研究交流,我們還設立了一個wiki頁面http://hacking-printers.net/,其它更多精彩的分享,請關注Jens Müller即將在5月份RuhrSec安全會議上的演講《How to Hack Your Printer》。

研究背景

列印語言是控制印表機工作的一個命令集,它告訴印表機如何組織被列印的文件,在印表機語言的控制下,從計算機傳來的列印資料被轉化成可供列印的文字和影象,最終被印表機識別並輸出出來。列印語言決定著鐳射印表機輸出版面的複雜程度,是衡量鐳射印表機效能的一個重要指標。

一個高效的控制語言可減少檔案的大小和下載的時間,提高將普通文字格式化成列印文字的速度,目前主要列印控制語言有:PS(PostScript)、PCL和GDI(圖形裝置介面語言);但總體來說可以分成兩類,一類是頁描述語言(PDL,Page Descriptional Language),另一類是嵌入式語言(如ESCape Code Language),PCL和 PostScript都屬於PDL。(更多瞭解請參考此文件)。

針對印表機,有多種協議命令和列印語言可以實現印表機裝置和列印任務的控制,其中大多數都可能是我們平時都沒怎麼聽過的。相關協議和語言如下圖所示:

裝置控制

這個命令集語言用於印表機裝置控制,使用它們還可以檢索裝置名稱和狀態,該集合語言主要為簡單網路管理協議SNMP,SNMP是基於UDP,用來管理諸如印表機、路由器、伺服器等各種網路裝置的基本網路通訊協議。

列印通道

列印裝置通常支援的協議有:網際網路列印協議(IPP)、行式列印後臺程式(LPD)、SMB協議和9100原始埠列印協議。這些協議都各有特點,如列印作業佇列管理或報告等。在測試分析過程中,我們正是利用了這些列印支援協議,向印表機進行惡意文件傳播的。

網際網路列印協議(IPP;Internet Printing Protocol)是一個在網際網路上列印的標準網路協議,它容許使用者可以透過網際網路作遙距列印及管理列印工作等工作。使用者可以透過相關介面來控制列印品所使用的紙張種類、解析度等各種引數。

作業控制語言

該命令集語言一般用於管理置紙托盤和紙張數量等印表機設定狀態,其中比較標準的作業控制語言則是PJL,與PCL不同的是,PJL提供了不同類別的任務級別的控制。從安全形度來說,PJL更適用,因為它不僅能應用於當前任務,還能作出一些永久性設定,如列印顯示或讀寫狀態等。

PJL ,Printer Job Language的簡寫,它提供了不同類別的列印控制。與PCL不同的是,PJL提供任務級別的控制,而PCL和HP-GL/2只控制列印頁面上的列印點的位置。

頁面描述語言(PDL)

PS(PostScript)語言是一種標準的PDL語言。雖然PostScript已經不在臺式印刷系統中流行,但仍然是鐳射印刷列印系統的PDL語言首選。PostScript是基於堆疊的圖靈完備程式語言,它包含400多種指令和操作符,從安全視角來說,這些指令和操作符可以被攻擊利用,入侵控制了PostScript直譯器就能實現程式碼執行等惡意操作。

頁面描述語言,是一種面向輸出效應的語言,用於描述列印或照排的版面,這種語言不僅具有版面描述功能,還具有計算機設計的特點,即可處理文字,又可處理圖象,各種軟體在排版和圖形處理之後形成PDL形式,就可彙總在一頁上輸出。

攻擊測試

從網路攻擊角度來說,印表機算是一個重要且有價值的攻擊目標,但印表機的安全和威脅技術研究卻非常之少。所以,我們的首要任務是,根據目前CVE漏洞庫和安全部落格中公佈的,有關印表機漏洞和安全技術進行綜合分析,通過對現存已知漏洞問題的歸納總結,構建新型或通用攻擊模型,測試不同品牌型號印表機存在的漏洞和安全性。

我們認為,最好的攻擊目標是那些使用PostScript和PJL直譯器進行列印作業處理的印表機,因為遠端攻擊者可以不依賴於裝置支援的列印通道,僅只需要利用單獨的'文件列印'功能就能對其進行入侵攻擊。在我們的分析中,總體上把印表機攻擊分為四類:

DoS攻擊

只要執行以下兩行PostScript程式碼,就可實現對印表機的DoS攻擊,讓印表機陷入一個無限loop任務迴圈:

%!
{} loop

其它此類攻擊:

使印表機進入離線離線模式:利用PJL語言的操作控制命令讓印表機顯示其它特定訊息或進入離線狀態模式; 物理破壞:通過對PJL常變數的持續設定和更改,可能會對印表機具有讀寫週期的NVRAM(非易失性隨機訪問儲存,印表機主要儲存)造成破壞; 重定義列印顯示資訊:PostScript的'showpage'命令用來對列印文件的每一頁顯示資訊進行設定,可在不影響列印內容的頂部或底部加入自定義標題文字。因此,攻擊者可以通過該命令任意定義其它列印顯示資訊。

安全設定繞過

為了繞過印表機現有的安全設定,最簡單的方法就是把印表機重置到出廠狀態。由於大多數印表機都可以通過某些按鍵組合進行出廠狀態硬復位,所以對入侵了印表機的攻擊者來說,這種操作也比較容易實現。

而且,如果印表機支援RFC1759標準(Printer MIB),攻擊者可以遠端利用SNMP命令來實現對目標印表機的出廠狀態重置:

# snmpset -v1 -c public [printer] 1.3.6.1.2.1.43.5.1.1.3.1 i 6

其它特殊機型都提供了類似功能命令語言,如HP的PML, Kyocera的PRESCRIBE等。此外,我們的研究表明,很多流行的CUPS和LPRng印表機都存在技術繞過,實現出廠狀態重置的可能。

CUPS(Common UNIX Printing System,整合在大多印表機內的通用Unix列印系統。LPRng(LPR Next Generation),下一代行式列印系統。

列印任務控制

由於一些PDL語言允許修改,所以可能導致攻擊者的一些惡作劇攻擊,如控制使用者列印任務、在列印文件上打印出任意圖案文字、自定義任意'showpage’狀態資訊等。

印表機資訊洩露

9100埠列印支援雙向通道,因此可導致某些敏感資訊洩露,例如Brother(兄弟)印表機可以通過以下PJL命令向NVRAM執行讀寫操作:

@PJL RNVRAM ADDRESS = X

在我們的實際測試中,可以利用該命令讀取印表機的整個NVRAM記憶體資料,其中就包含了一些敏感資訊,如印表機密碼、使用者自定義印表機支援協議POP3/SMTP密碼、FTP密碼和活動目錄資訊等。攻擊者可以利用這些資訊進行內網提權,或把印表機作為內網滲透擺渡裝置。

其它此類攻擊:

檔案系統入侵:PostScript和PJL命令都具有對印表機檔案系統的訪問功能,然而某些品牌印表機卻未對一些特殊目錄設定訪問限制,可以導致如密碼等其它敏感資訊洩露。 列印任務獲取:只要印表機使用PostScript命令,攻擊者就可以通過其獲取到列印任務。主要因為PostScript的兩個特性:一是攻擊者可通過自定義的操作符'hook'到其它列印使用者的列印任務;二是PostScript可以讀取資料並進行簡單的文件資訊儲存。 密碼洩露:攻擊者可以對1-65535範圍內的PJL金鑰數字進行暴力破解,輕易獲取到PJL密碼;同樣,如果利用每秒高達100000次的密碼驗證就可破解PostScript密碼。

印表機入侵利用工具-PRET

為了讓以上攻擊實現自動化,我們釋出了一個自動化概念驗證攻擊工具:PRET,通過該工具可以簡化終端攻擊者與目標印表機之間的通訊交流。因此,當遇到一些UNIX列印系統命令時,PRET會把它轉換成PostScript或PJL語言,傳送給目標印表機,並對反饋結果進行安全評估。例如,PRET會把UNIX命令“ls"轉換成以下PJL請求:

@PJL FSDIRLIST NAME=”0:” ENTRY=1 COUNT=65535

之後,它會收集印表機輸出資訊並把它轉換成簡單明瞭的顯示資訊。

PRET使用以下命令對印表機檔案系統進行攻擊測試:

安全評估

我們想對印表機安全開展一個全面深入的安全評估,所以選擇了大約20多種常用流行的品牌印表機作為測試物件。為了節省資金,我們還從各大高校機構公開收集了一些印表機作為研究,目前,在排名前十的印表機品牌中,我們至少有一種型號的測試機型。

這些印表機並不都是全新的,其中有三臺印表機還存在功能缺失導致不能執行測試攻擊,但所有這些列印裝置構成了當前辦公環境中的典型環境。在執行測試攻擊之前,我們為每臺裝置進行了全新的韌體更新。測試結果表明,每種列印裝置都存在多種可攻擊可能。例如,利用包含迴圈程式碼的惡意PostScript檔案,可以針對每種品牌印表機執行DoS攻擊。

在攻擊中,只有HP LaserJet M2727nf執行有看守程式,在測試之後會引起裝置故障,關機10分鐘之後才能恢復正常;而被測印表機經24小時的NVRAM記憶體讀寫操作壓力測試之後,則會導致實體記憶體損壞;大多數印表機都可執行列印任務控制或獲取的攻擊。

攻擊者甚至會利用印表機的PostScript、PJL和PML命令,對列印機發起跨站列印(cross-site printing)攻擊,在這種攻擊的基礎上,我們發現了另一種新的攻擊方法:跨源資源共享欺騙攻擊(cross-origin resource sharing,CORS Spoofing)。CORS Spoofing攻擊可以通過瀏覽器獲取到列印裝置的相關列印任務資訊。

該網站的概念性攻擊程式碼可以對大多數公司和機構的印表機實行攻擊測試:http://hacking-printers.net/xsp/

在後續的文章中,我們將會對各種印表機攻擊方法作出具體描述,並對印表機入侵利用工具PRET作出簡要介紹。

*參考來源:web-in-security,FB小編clouds編譯,轉載請註明來自FreeBuf.COM