iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 24
1
Security

網路安全概述系列 第 24

談印表機與網路安全

由於隔壁有提到「印表機」的問題,剛好前陣子看到 HP 的廣告,手邊也有資料,所以有做了一些研究。

這篇會講一下這篇 Paper 對於印表機攻擊的研究。

前言

印表機一直都是一個辦公室或日常生活中所需的裝置。隨著需求與技術的發展,從早期只能對單機連線的印表機、到能夠透過電腦分享印表機,到目前能夠獨立連上網路。

雖然,現在的印表機,幾乎能夠算是一台小型電腦了,但它受到的關注並不高。印表機出現在各個家庭、辦公室、醫療與教育單位等等,不過,許多人都不會特別去思考印表機與其帶來的安全問題,但仍然會讓這些印表機去接觸(印)一些機密文件、合約、收據等等。

從 1996 開始,就有人針對印表機的語言,PostScript 的安全做研究。接著,有人對印表機的列印工作管理 PJL 機制做研究,接著也有人找出 PJL 相關的攻擊模式。後來,也有找出印表機版的 XSS

雖然,有不少研究都是針對印表機來做的,但這方面仍然不太受到重視。

目前印表機的系統架構

Screen Shot 2018-01-12 at 17.24.40.png

印表機通常會支持一個以上的協定,不過,通常都是打「處理協定的部分」,例如直譯器。目前像是 PJL/PostScript 都有一些比較「強大」的指令可以用,不過也沒有做相關的防護,也不像 Web 端有 OWASP 等等可以看。

印表機協定

通常支持用網路印文件的印表機,都支持 IPP/LPD/SMB/Raw(tcp/9100) 其中一種協定。Windows 預設是用 TCP/9100,故這個方式的支持最廣、最多。

相關語言

PJL

Printer Job Language,PJL 是一個標準,拿來控制每一次列印的參數。例如說,從哪個紙匣拿紙,紙張大小多大。而且 PJL 的設定可以永久保存,也有可能可以拿來對印表機本身做讀寫檔案的動作。
另外,和 AT 指令一樣,常常有廠家自幹一些指令集。

PML

Printer Management Language,和上述 PJL 很像,不過這是 HP 自家的協定。(PJL 原本也是 HP 提出,但後來變成各廠家一起用了)

PDL

Page Description Language,這可以拿來敘述一個頁面實際上要長甚麼樣子。程式透過驅動,驅動將文件轉成該印表機能理解的 PDL。最常見的 PDL 有兩種:PostScript 和 PCL。PCL 的功能比較少,故比較難打。

嚴格來說,只要能下 PostScript,某方面上就算是 RCE 了。PostScript 的功能很廣,而且是圖靈完全、還有陣列等等資料結構可以用。也有 loop 可以用,所以可以直接下無限迴圈,把機子卡死。

有一篇論文的作者們做了 PRET,PRinter Exploitation Toolkit,可以使用這兩個 PDL 協定做一些有趣的事情。

威脅模式

印表機主要的問題有兩個:

  • 文件安全 (Print Job Security),是指列印的內容,可能會受到攔截。例如說,假設有真人可以走過去幹走文件,或者是搞中間人攻擊,甚至從印表機韌體做攔截的動作。
  • 程式執行,例如說,把印表機當作一個跳板

攻擊模式

以下有數種可能的攻擊模式。

  • 實體
    實體由於可以碰到機子,故最強大。例如可以對印表機的 USB 槽插塊快閃碟、直接用面板改設定,或者直接插線上去。
  • 網路
    印表機通常可以用 TCP/IP 連上去,所以可能是用 FTP/Web 等等或直接連 9100 Port 的方式來做連線。這對搞無間道蠻有用的,例如說,有內鬼要幹走全公司的薪資表資料等等,或是故意讓員工列印一個惡意檔案(前述提到:PJL/PostScript 的問題)。
    另外,由於現在有的印表機支持 Wi-F,而且還架個熱點,讓你可以連上他自己的區網,故這個攻擊途徑會比想像中的更廣上許多。
  • Web
    前述提到,有人搞了印表機版的 XSS。大致上是:給對方開一個頁面,然後在那個頁面上寫 AJAX,請求目是某一台印表機(前述提到,印表機很多都支持 9100 Port 的列印方式)。這個攻擊模式最好實作。
  • 其他途徑
    也有可能做「中間人」,在連線中間做攔截。

攻擊路線

DoS

基本上,DoS 的重點就是讓印表機不可用,導致對方會有一些麻煩。

打文件處理器

由於印表機要印東西在紙上,需要透過向量影像處理器做一些運算,所以可以透過下某些模式的指指指令,使這個處理器的負荷能力超載,也會有類似上述 DoS 的效果。

實體傷害

印表機可能會儲存一些長期設定(例如:網路設定等等),這些設定通常是會存在所謂的 NVRAM 當中。實際上,NVRAM 會使用 EEPROM 或是快閃記憶體來實作,但這兩種記憶體都會有寫入次數上限的問題。所以,若使用 PJL 或 PostScript 不斷地對 NVRAM 做修改,可能就可以很快的把 NVRAM 的寫入次數用光,導致不能在寫入任何新的數值。
例如:先設定一個開機密碼,然後把 NVRAM 的寫入次數用完,就會導致這個密碼永遠無法被改掉,唯一的解法是把那個記憶體(通常就是主機板)換掉。

這種攻擊路線,通常是不會導致印表機成磚,但由於會不能做設定,所以會帶來一些困難。雖然,可以透過設定「預設列印份數」等等參數來讓這印表機變成廢物,但印表機理論上也是還沒壞的。

繞過權限或密碼保護

假設要繞過一些保護(例如列印時需要密碼或權限),也有可能用某些方式,來繞過這些安全防護。
比如說,透過 PJL/PostScript,直接強行重設出廠預設值,所以就可以把使用者設定的密碼等等給重設。另一種可能,是廠商本身就埋了後門。例如:遇到某個字串時,就允許遠端控制,方便開發,但也方便攻擊者。

竄改列印內容

這種攻擊路線,即是直接對印表機本身做攻擊,然後對其列印的內容作修改。
假設攻擊方可以竄改列印內容,那基本上這台印表機即變得不可信了,其列印出的內容都有可能會變成不正確。
例如,可以做一些惡作劇(把整頁變成黑色?),或是更改一些財報數字,造成更大的傷害。

PCL 有一個指令,可以針對一份文件做遮蓋的動作,不過這指令只對當次列印有效。PostScript 雖然本身並不支持,但是可以透過修改 PostScript 本身的函式,達成類似的效果。由於這步驟是發生在「列印的前一刻」,即使文件本身動用了數位簽章,印表機也做了驗證,這攻擊仍然會生效。

竊取資料

上述提到「印表機版的 XSS」。實際上,大概會長得像這樣:

  1. 攻擊方想辦法讓受害者開一個頁面
  2. 這個頁面上有一個 XHR 請求,對印表機的位置做請求
  3. 這個請求的內容是寫 PostScript/PJL
  4. 印表機接受這個內容

攻擊方可以透過 XHR 的方式,獲得執行的結果,而且還可以以那個受害者的身份來做事情。
但不一定只能透過這招來實作記憶體存取、檔案系統存取或是擷取列印內容等等的。只要能夠滿足上述四種攻擊路徑之一,能夠執行 PostScript/PJL,就可以做這件事。

之後會談到,HP 印表機產品線之前的一個問題,以及線上轉 PDF 的問題。


上一篇
IoT 的問題: 既然擋不了,就把他全家變磚。談 BrickerBot
下一篇
談印表機: HP 的大撒幣廣告與 HPwn
系列文
網路安全概述31
1
陳董 Don
iT邦新手 5 級 ‧ 2018-01-12 19:57:55

好文推薦

1
LeeBoy
iT邦新手 4 級 ‧ 2018-01-13 09:40:22

印表機不能用真的有點不方便

0
CyberSerge
iT邦好手 1 級 ‧ 2018-01-15 21:38:57

我只是稍微介紹,沒想到你把手法真的都寫出來了,哈哈:)
線上轉PDF有什麼問題呢?等待分享。(下一篇好像沒提到?)

es iT邦新手 5 級 ‧ 2018-01-15 21:53:26 檢舉

忘記要提一下這個了。我今天來寫XD

期待喔!:)
不過HP最近真的很主打印表機安全,他們在SecTor2017大會的攤位有一整面介紹。
也並不是只有HP印表機有安全考量。DEFCON的影片也有DEMO其他廠

es iT邦新手 5 級 ‧ 2018-01-15 23:04:12 檢舉

那代表,幾年後會比較難打了,要打快打 XD

我要留言

立即登入留言