由於隔壁有提到「印表機」的問題,剛好前陣子看到 HP 的廣告,手邊也有資料,所以有做了一些研究。
這篇會講一下這篇 Paper 對於印表機攻擊的研究。
印表機一直都是一個辦公室或日常生活中所需的裝置。隨著需求與技術的發展,從早期只能對單機連線的印表機、到能夠透過電腦分享印表機,到目前能夠獨立連上網路。
雖然,現在的印表機,幾乎能夠算是一台小型電腦了,但它受到的關注並不高。印表機出現在各個家庭、辦公室、醫療與教育單位等等,不過,許多人都不會特別去思考印表機與其帶來的安全問題,但仍然會讓這些印表機去接觸(印)一些機密文件、合約、收據等等。
從 1996 開始,就有人針對印表機的語言,PostScript 的安全做研究。接著,有人對印表機的列印工作管理 PJL 機制做研究,接著也有人找出 PJL 相關的攻擊模式。後來,也有找出印表機版的 XSS。
雖然,有不少研究都是針對印表機來做的,但這方面仍然不太受到重視。
印表機通常會支持一個以上的協定,不過,通常都是打「處理協定的部分」,例如直譯器。目前像是 PJL/PostScript 都有一些比較「強大」的指令可以用,不過也沒有做相關的防護,也不像 Web 端有 OWASP 等等可以看。
通常支持用網路印文件的印表機,都支持 IPP/LPD/SMB/Raw(tcp/9100) 其中一種協定。Windows 預設是用 TCP/9100,故這個方式的支持最廣、最多。
Printer Job Language,PJL 是一個標準,拿來控制每一次列印的參數。例如說,從哪個紙匣拿紙,紙張大小多大。而且 PJL 的設定可以永久保存,也有可能可以拿來對印表機本身做讀寫檔案的動作。
另外,和 AT 指令一樣,常常有廠家自幹一些指令集。
Printer Management Language,和上述 PJL 很像,不過這是 HP 自家的協定。(PJL 原本也是 HP 提出,但後來變成各廠家一起用了)
Page Description Language,這可以拿來敘述一個頁面實際上要長甚麼樣子。程式透過驅動,驅動將文件轉成該印表機能理解的 PDL。最常見的 PDL 有兩種:PostScript 和 PCL。PCL 的功能比較少,故比較難打。
嚴格來說,只要能下 PostScript,某方面上就算是 RCE 了。PostScript 的功能很廣,而且是圖靈完全、還有陣列等等資料結構可以用。也有 loop 可以用,所以可以直接下無限迴圈,把機子卡死。
有一篇論文的作者們做了 PRET,PRinter Exploitation Toolkit,可以使用這兩個 PDL 協定做一些有趣的事情。
印表機主要的問題有兩個:
以下有數種可能的攻擊模式。
基本上,DoS 的重點就是讓印表機不可用,導致對方會有一些麻煩。
由於印表機要印東西在紙上,需要透過向量影像處理器做一些運算,所以可以透過下某些模式的指指指令,使這個處理器的負荷能力超載,也會有類似上述 DoS 的效果。
印表機可能會儲存一些長期設定(例如:網路設定等等),這些設定通常是會存在所謂的 NVRAM 當中。實際上,NVRAM 會使用 EEPROM 或是快閃記憶體來實作,但這兩種記憶體都會有寫入次數上限的問題。所以,若使用 PJL 或 PostScript 不斷地對 NVRAM 做修改,可能就可以很快的把 NVRAM 的寫入次數用光,導致不能在寫入任何新的數值。
例如:先設定一個開機密碼,然後把 NVRAM 的寫入次數用完,就會導致這個密碼永遠無法被改掉,唯一的解法是把那個記憶體(通常就是主機板)換掉。
這種攻擊路線,通常是不會導致印表機成磚,但由於會不能做設定,所以會帶來一些困難。雖然,可以透過設定「預設列印份數」等等參數來讓這印表機變成廢物,但印表機理論上也是還沒壞的。
假設要繞過一些保護(例如列印時需要密碼或權限),也有可能用某些方式,來繞過這些安全防護。
比如說,透過 PJL/PostScript,直接強行重設出廠預設值,所以就可以把使用者設定的密碼等等給重設。另一種可能,是廠商本身就埋了後門。例如:遇到某個字串時,就允許遠端控制,方便開發,但也方便攻擊者。
這種攻擊路線,即是直接對印表機本身做攻擊,然後對其列印的內容作修改。
假設攻擊方可以竄改列印內容,那基本上這台印表機即變得不可信了,其列印出的內容都有可能會變成不正確。
例如,可以做一些惡作劇(把整頁變成黑色?),或是更改一些財報數字,造成更大的傷害。
PCL 有一個指令,可以針對一份文件做遮蓋的動作,不過這指令只對當次列印有效。PostScript 雖然本身並不支持,但是可以透過修改 PostScript 本身的函式,達成類似的效果。由於這步驟是發生在「列印的前一刻」,即使文件本身動用了數位簽章,印表機也做了驗證,這攻擊仍然會生效。
上述提到「印表機版的 XSS」。實際上,大概會長得像這樣:
攻擊方可以透過 XHR 的方式,獲得執行的結果,而且還可以以那個受害者的身份來做事情。
但不一定只能透過這招來實作記憶體存取、檔案系統存取或是擷取列印內容等等的。只要能夠滿足上述四種攻擊路徑之一,能夠執行 PostScript/PJL,就可以做這件事。
之後會談到,HP 印表機產品線之前的一個問題,以及線上轉 PDF 的問題。
我只是稍微介紹,沒想到你把手法真的都寫出來了,哈哈:)
線上轉PDF有什麼問題呢?等待分享。(下一篇好像沒提到?)
忘記要提一下這個了。我今天來寫XD
期待喔!:)
不過HP最近真的很主打印表機安全,他們在SecTor2017大會的攤位有一整面介紹。
也並不是只有HP印表機有安全考量。DEFCON的影片也有DEMO其他廠
那代表,幾年後會比較難打了,要打快打 XD