安全研究 | 傳真機的攻擊面研究報告
介紹
大家一聽到“傳真機”這三個字,肯定覺得這種裝置離自己非常遠。但實際上,現在很多辦公室裡仍然存在著這種“遠古”裝置,而且在商業和法律通訊等領域內仍處於廣泛使用中。傳真機的大部分技術都是幾十年前的了,而且在過去的幾年裡基本沒有升級過。
以前的傳真機主要通過座機電話和電話線來訪問,並且通過乙太網來連線本地網路。但說實話,可能很多人並不瞭解傳真機背後的通訊機制。網上只有一些介紹印表機標準的文件,其實也並沒有什麼X用,而且我們也不準備對印表機的韌體進行逆向分析。不過幸運的是,網上有很多開源(原始碼可完全訪問)的印表機模擬工具,而且它們還實現了很多額外功能,這就非常棒了。
大家準備好了嗎?那我們開始吧!
傳真模擬軟體
傳真機看起來其實有點像一臺連線了電話線的印表機,不過傳真機會發出各種奇怪的聲音,還能通過電話線並以低速傳輸的形式進行頁面掃描和輸出。雖然在全球各地的各種辦公室內仍然能找到傳真機的身影,但實際上並沒有多少人喜歡這種裝置。
在網上搜索半天之後,我們也找到了很多有意思的傳真機軟體開源專案,其中更新比較頻繁的就是HyLaFax。HylaFAX貌似是一款企業級的軟體傳真工具,而eFAX和mgetty + sendFAX則是一種基於命令列的更輕量級的軟體傳真替代方案。除了它們之外,還有很多開源專案都在為軟體傳真生態系統做貢獻。比如說,ICTFAX就是一種基於Web的解決方案,IAXmodem則是一款支援連線PBX和傳真客戶端的軟體橋接工具,以及Spandsp庫等等。
簡單來說,傳真的整個過程需要涉及到三種通訊層:
1.資料層:此時,調變解調器需要撥號,然後發出各種奇怪的聲音,最後在通訊雙方之間建立資料通道,並允許雙方交換資料符號。
2.會話層:在這一層,傳真機會進行通訊引數協商,其中包括頁面格式、頁面傳輸速度和圖片壓縮方式等等。
3.圖片/頁面層:傳真機會在這一層對頁面資訊進行編碼/解碼,對資料進行壓縮/解壓,檢查並糾正錯誤等等。
根據調變解調器需要處理的通訊層數量,我們可以對裝置進行歸類:
1.第一類:調變解調器處理資料層,同時依靠傳真機軟體來實現會話處理和頁面處理任務。
2.第二類:調變解調器處理資料層和會話層,然後把圖片處理任務交給軟體端完成。
除此之外,還有一類裝置負責提供額外功能,比如說設定不同的傳輸速度等等。由於我們這篇文章主要針對的是第一類裝置,所以其他種類的裝置就大家自行搜尋啦!
那麼,在傳真機軟體(例如HylaFAX)和傳真機調變解調器的幫助下,任何人都可以通過電話線來發送和接收傳真。在傳送一份傳真時,我們只需要一份輸入文件和目的傳真機的電話號碼,然後用軟體進行撥號和資料編碼,最後傳送出去就可以了。在接收一份傳真時,會有一個軟體程序通過調變解調器的串列埠來監聽來電訊號,接收所有的資料資訊,然後將其存入本地檔案系統或通過郵件傳送給使用者。
安裝配置
接下來,我們需要深入分析軟體傳真背後每一層的工作機制。此時,我們需要用到下列幾種元件:
1.兩臺90年代的老式傳真機;
2.兩個USB傳真機調變解調器;
3.思科SPA112;
4.Asterisk;
5.IAXmodem;
6.HylaFAX、eFAX和mgetty;
7.gdb;
8.vim;
9.afl。
我們的元件將幫助我們部署不同的配置環境,Asterisk是我們的主PBX,它負責進行路由呼叫和提供私人電話網路(允許我們的各種元件與其他元件撥號通訊,而無需使用到使用到公用電話網路PSTN)。思科SPA允許我們物理連線到傳真機裝置,並使用USB調變解調器連線我們的Asterisk網路。同時,gdb和vim可以幫助我們閱讀程式的原始碼和編譯過程。在整個過程中,我們還需要執行afl模糊測試器來測試不同程式碼塊和功能元件的安全性。
漏洞收集
在對傳真機軟體的安全性進行了詳細研究之後,我們發現並上報了多個漏洞,相關廠商也在第一時間修復了上報的漏洞。
Mgetty中的多個安全漏洞
下面是我們發現並上報的漏洞資訊:
CVE-2018-16741:通過Mgetty的任務描述實現Shell注入
CVE-2018-16742:通過Mgetty的命令列引數實現棧緩衝區溢位
CVE-2018-16743:通過Mgetty的命令列引數實現棧緩衝區溢位
CVE-2018-16744:通過Mgetty的配置引數實現棧緩衝區溢位
CVE-2018-16745:通過Mgetty的配置引數實現緩衝區溢位
參考資料:【 ofollow,noindex" target="_blank">傳送門 】
HylaFAX的遠端程式碼執行漏洞
CVE-2018-17141:在HylaFAX的傳真接收過程中,遠端攻擊者將能夠寫入一個未序列化的指標;
參考資料:【 傳送門 】
在我們的研究過程中,我們發現HylaFAX和HylaFAX+的功能非常豐富,而且完全可以實現傳真機通訊的全部要求。除此之外,它們的原始碼也非常好讀,不過在讀原始碼的過程中,我們發現程式碼中負責進行ECM頁面傳輸的部分存在安全問題。請大家看下面的程式碼:
memcpy(recvRow,(const char*) buf, cc);
recvRow+= cc;
你沒看錯,就是緩衝區溢位的問題!這部分程式碼來自於FaxModem::recvPageDLEData()函式,而這個函式主要負責處理傳真接收(開啟JPEG傳輸功能時),而整個過程中沒有對緩衝區的邊界進行檢測,當接收到資料量過大的頁面時,將會出現緩衝區溢位的情況。
caseJP_GREY+4:
caseJP_COLOR+4:
recvEOLCount = 0;
recvRow = (u_char*) malloc(1024*1000); //1M should do it?
總結
在對傳真機軟體的安全性進行了研究之後,我們可以更好地瞭解這種技術,並揭示傳真機系統中不同層級和不同複雜度的元件及其工作機制。在各種開源、免費工具的幫助下,我們能夠迅速瞭解傳真機工作機制中每一層的通訊原理,除此之外,我們還能閱讀原始碼,並識別出其中可能存在安全漏洞的部分。
傳真機已經存在了好多好多年了,也許現在的安全社群已經沒人去研究傳真機的安全問題了,但如果有一天,你旁邊那臺傳真機給你帶來了“毀滅性”的災難,你該怎麼辦?
*參考來源: x41-dsec ,FB小編Alpha_h4ck編譯,轉載請註明來自FreeBuf.COM