上周有外媒爆出一個和Google隱私安全有關的小瓜。事兒本身不大,但聊一聊還是蠻有意思的。報道講說,Google自傢的Pixel手機系統內置的“Markup”截圖工具,存在一個嚴重的隱私漏洞。隻要你通過這個截圖工具來剪輯PNG格式的圖片,就有一定概率還原出原圖被截掉的其他信息……
發現這個漏洞的程序員 Simon Aarons,還寫一個可以檢測這個漏洞的程序 Acropalypse。
隻要你把 Pixel 手機的機型和用 Markup 裁出的上傳上去,就能得到原圖的其他信息。
世超拿 Pixel 4 試一下,效果拔群……
一石激起千層浪啊,Google這事兒被爆出來之後,被一群碼農大佬們順藤摸瓜,發現類似的 Bug,微軟似乎也有份。
他們直接使用 Windows 系統重的截圖工具,也重現和GooglePixel 一樣的問題。
這下問題就大條。
要說 Pixel 手機用的人少和咱們關系也不大,可 Windows 的截圖工具,可是大夥兒經常會摸到的常用工具。
數以十億計的用戶,可能在自以為隱私部分已經抹掉的情況下,把截圖發出去。
但凡有什麼個人隱私信息,想想都覺得後脊背發涼。
那世超就好奇,兩傢大廠,在兩個毫不相關的系統上,出現一模一樣的嚴重錯誤……
難道是 PNG 的標準實在是太老被鉆漏洞,或者是什麼基礎軟件有問題?
世超懷著揣揣不安的心情,深入調查一下這件事兒的來龍去脈。
先說結論啊:並不是圖像處理和儲存的標準出問題,而是Google微軟同時以不同的方式犯傻。
首先說明一下,這個 Bug 的真正原因,並不是 PNG 透明通道( RGBA中的A )的問題。
這個有歧義的新聞讓世超原地研究半小時,下為原文
簡單來說,這個 Bug 的本質,其實是因為截圖工具沒有刪除舊圖片數據,而是直接把新圖片,覆蓋寫入在舊圖片的開頭。
所以隻要新的圖片文件大小小於舊文件,沒完全用數據把原圖覆蓋掉,就留下可恢復的舊圖像數據。
而標準的 PNG 解碼器,在讀到新 PNG 文件尾的時候,就不會再讀下去,所以剩餘的舊數據,會被解碼器直接忽略。
這也是用戶很難發現舊圖片數據泄露的原因:不用特別手段,一般人根本看不出。
不過,雖說問題的本質一樣,但這兩個大廠出問題的理由卻並不相同。
Google是因為 Android 9 到 Android 10 的時候,讀寫文件相關的一個接口發生變動,而且沒有記載在文檔和更新日志裡。
祖傳的代碼在舊接口上會正確刪除舊文件,不會留下隻因腳。
然而在新版本下,同樣的代碼就隻能覆蓋寫入舊文件,隻要新文件小於舊文件,舊文件的殘餘部分就會留下來。
而微軟這邊的問題可能要更大些……
根據微軟的 API 規則,程序員在調用覆蓋文件的接口時,如果沒有額外的特別指示 Windows 把舊文件刪掉,那麼新文件就會直接從頭開始覆蓋舊文件,然後留下一堆舊文件的殘餘。
但凡程序員在寫的時候沒註意到這個規則,就會有安全風險……
至於微軟為何要把這種不安全的行為作為接口的默認值,世超隻能說,或許這就是國際大廠對編程的精妙理解吧。
好消息:微軟的接口一直都沒變過;壞消息:但是設計的和狗屎一樣。
嚴重的是,隨著這個漏洞原因的公開,已經有人在更加常用的 JPG 格式的圖像上發現類似的問題。
考慮到大多數截屏和手機拍照都是 JPG 直出,漏洞擴展到 JPG 後,這個問題其實是是擴散。
而且由於 JPG 和 PNG 的壓縮方式不同,文件頭部被覆蓋的 JPG 舊文件,搞不好還能實現幾乎完美的還原……
還原的JPG圖像隻是比原圖多點噪點
這 Bug,好像有那麼點剎不住車……
好消息是,如今信息安全的概念已經深入人心,在我們的隱私完全漏勺之前,其實還有一道防線。
世超在當年試圖成為一個程序猿的時候,學到的第一課,就是絕對不能信任用戶提交的數據。
用戶試圖刪掉網站的用戶數據表
一些技術人員甚至可以利用解碼器 “ 隻讀取文件尾之前數據 ” 的特性,在一張正常圖片的尾部附帶惡意代碼,從而攻擊網站服務器或其他用戶。
之前在貼吧裡流行過的圖種也是類似原理。
為清除這些可能有風險的無關數據,同時節約服務器流量和存儲,一般網站都會先用解碼器讀取圖片,然後重新編碼成低質量的 JPG。
這樣,即使是用戶上傳的圖片裡有額外數據( 比如這次 Bug 留下來的舊圖 ),也不會出現在其他用戶那裡。
但也有例外。
比如說,微信和 Discord 就提供下載原圖的選項,而且提供的是真正的原圖。這樣,那些無關數據就還是公開。
按照安全原則,他們應當提供 “ 偽原圖 ”
總結一下,Google和微軟這次的 Bug,是兩個影響相當廣泛、原因極其簡單、後果控制不好可能會嚴重的漏洞。
其中一個從 Android 10(2019)開始,影響所有 Pixel 手機;
另一個從 Windows 10 (2015)開始,影響所有使用系統自帶截圖工具的用戶。
更離譜的是,這兩個漏洞前幾天才剛剛修復……
世超覺得,考慮到時間跨度、受害者數量和形成原因,這兩個漏洞完全有資格參與 “ 年度最弱智漏洞 ” 的競爭。
但不管怎麼樣,在關系到用戶隱私信息這一塊的問題,Google和微軟確實應該加強代碼的檢查。
各傢互聯網平臺運營商,也應該以此為戒,避免在公共場合分發原始圖片的原文件,這不僅可能損害自傢服務器的安全,而且還可能暴露用戶的隱私。
原圖信息中甚至還能有地點定位信息
從咱們用戶自己的角度來說,世超的建議也很簡單:在任何公開平臺都不要上傳原圖!不要上傳原圖!不要上傳原圖!
當圖片經過在本地完成解碼 —— 重新編碼上傳的過程,原圖上的信息自然也就會被處理。
安全這塊兒,還得是自己把住最後一關……