10月29日,WhatsApp和Facebook聯合起訴以色列入侵技術提供商NSO Group及其母公司Q Cyber,稱被告「逆向工程」了WhatsApp的客戶端和通訊協議、非法使用WhatsApp服務器,利用WhatsApp的漏洞,將木馬植入約1400台設備,目標用戶有律師、記者、人權活動家、異見者、外交官和外國政府官員。
這不是NSO第一次被告了。去年10月,華盛頓郵報記者Jamal Khashoggi被殺,兩個月後,沙特阿拉伯異議人士Omar Abdulaziz起訴了NSO,稱NSO在他的手機上安裝木馬軟件,用於爲沙特阿拉伯王室監控Khashoggi與他的通訊。也是去年12月,NGO國際特赦組織也向以色列國防部提過要求,希望以色列取消NSO的國防出口執照,因爲NSO的軟件用於監控一位國際特赦組織的員工。
致命漏洞
利用NSO的木馬程序的監控者分佈在45個國家或地區,集中在中東、南北美洲、歐洲、南亞等地,非洲、東南亞、中亞、東亞等也偶有發現。
幾份起訴書異口同聲,說NSO植入的木馬是「Pegasus」。據網上流傳的Pegasus宣傳冊,這一木馬專爲遠程隱蔽監控設計,兼容iOS、Android、Blackberry,植入智能手機之後,可以截取短信、電話通訊,也可以從WhatsApp、Skype等第三方軟件中提取通訊記錄,還可以操控電話麥克風、照相機,從GPS系統蒐集信息,亦可調取日曆、電郵、瀏覽記錄等數據。
可以說,植入這一木馬之後,這臺手機就在無時無刻、無聲無息地爲入侵者監控其持有者。Pegasus系統包括兩個部分:木馬客戶端和後臺服務器。木馬客戶端植入攻擊對象的電話,後臺服務器則負責接收和存儲木馬發送過來的監控信息,也可以向客戶端發送指令,甚至遠程升級木馬。
起訴書點了兩個漏洞的名:CVE-2016-4657和CVE-2019-3568。
第一個漏洞,2016年由Citizen Lab和Lookout聯手披露,其實不是WhatsApp的漏洞,而是蘋果iOS瀏覽器Safari的漏洞:黑客可以構造攜帶惡意代碼的網頁,一旦用戶用Safari打開這個網頁,網頁可以在iOS操作系統上運行任意代碼。
根據Lookout當時的報告,NSO炮製了「三叉戟」攻擊,就是同時用了三個漏洞,先執行惡意代碼,然後確定iOS內核在內存中的位置,最後修改內存獲取操作系統「根用戶」權限(也就是俗稱的「越獄」)。此後,植入NSO的木馬Pegasus,即可對手機全面監控。
在入侵過程中,WhatsApp只是扮演傳送惡意網頁鏈接的角色。這個惡意鏈接,就算用微信、Telegram發過去,只要用戶點了,也都會有效。
第二個漏洞,就確實是WhatsApp的問題了,影響也更嚴重。簡而言之,通過這個漏洞,入侵者可以向WhatsApp發送特製的數據包,內含惡意代碼,讓WhatsApp以爲收到視頻來電,然後用戶甚至不需要接聽,就可以通過WhatsApp的客戶端執行惡意代碼。不止iOS,Android系統也可以攻擊,甚至照顧到了小衆系統如微軟的Windows Phone和基於Linux的Tizen。
WhatsApp今年5月修好了這個漏洞,在起訴書中,WhatsApp說被告的員工跟人抱怨WhatsApp把漏洞修好了,還弄得人盡皆知。
這兩條入侵路徑都不需要在物理上接觸用戶的手機,第一條路徑需要用戶點擊網頁鏈接,第二條不需要用戶做任何操作。
2018年,Citizen Lab發了一份跟進報告。他們利用2016年截取的Pegasus木馬,獲取了一份疑似Pegasus後臺服務器名單;然後再根據這些服務器的行爲,形成一個「服務器指紋」;然後再用這些服務器指紋掃描互聯網上的其他服務器,檢索其他有可能是Pegasus後臺的服務器。之後,再用這些後臺服務器地址,逆向檢索向這些服務器發送消息的客戶端,從而摸索出有哪些機器被Pegasus植入了。
根據這份報告,Pegasus的用戶(監控者)分佈在45個國家或地區,集中在中東、南北美洲、歐洲、南亞等地,非洲、東南亞、中亞、東亞等也偶有發現,其中10個監控者執行「跨境監控」,例如在美國國外監控在美國的人。Citizen Lab沒有研究中國大陸的流量,但是香港有木馬感染的案例檢出(該監控者同時也監控印度、巴基斯坦、孟加拉和巴西的用戶,不像是針對香港,香港的感染或許是被監控者旅行到香港時錄得)。
若手機遭受Pegasus植入,端到端加密也沒有用。
雖然說WhatsApp實現了「端到端加密」,就是說,用WhatsApp的两个人,他们的客戶端會各自生成加密密鑰並交換,此後發送給對方的消息會用對方的密鑰加密,這樣只有對方才能解密、閱讀通訊內容,即使是WhatsApp官方也看不到,互聯網中間節點也只能看到加密後的消息,無法直接閱讀內容。
但若手機遭受Pegasus植入,端到端加密也沒有用,因爲Pegasus攻擊目標不是密文,甚至不是通訊軟件本身,而是支持通訊軟件運作的操作系統。
操作系統比通訊軟件更底層:通訊軟件加密所需要的所有信息和運算資源,都是由操作系統提供的;通訊軟件解密後的訊息,也需要通過操作系統向用戶呈現。操作系統知道用戶在屏幕鍵盤上點擊了哪些鍵,也知道通訊軟件要顯示的文字內容是什麼,所以,一旦木馬獲取了操作系統的控制權限,通訊軟件就幾乎沒有辦法保護自身信息安全。
漏洞為何會出現
究其根本,原因是智能手機其實是一臺計算機,而計算機,原本是用來算數的。今天我們用智能手機和電腦做的事情,大大偏離了「計算機」原始的設計目標。
WhatsApp是2009年成立的,2014年Facebook以190億美元收購。Facebook全球有三萬餘員工,現金流穩定增长,給技術人員開出的價碼也是行業頂尖。
蘋果開發操作系統,經驗非常豐富:iOS的核心Darwin,可以追溯到1989年的NeXTSTEP(喬布斯被蘋果開除後自立門戶開發,後來又被蘋果收購回去),NeXTSTEP又可以追溯到70年代的UNIX系統。庫克近幾年也不斷以「隱私」爲蘋果生態體系的買點。
可以說,Facebook和蘋果都有人才、有經驗、有動力也有錢去完善信息安全,爲什麼它們還是不斷爆出漏洞,讓NSO這樣以入侵系統爲業的企業有生存空間呢?
究其根本,原因是智能手機其實是一臺計算機,而計算機,原本是用來算數的。今天我們用智能手機和電腦做的事情,大大偏離了「計算機」原始的設計目標。
現代可編程計算機,理論源頭是圖靈的「圖靈機」。圖靈機是一臺抽象的機器,有一條「磁帶」和一個「磁頭」,磁帶分爲一個個格子,格子可以填寫數字或者指令,磁頭可以對格子讀取或者寫入,或者執行格子裏面的命令。紙帶對應我們今天的「內存」,讀寫頭對應我們今天的CPU。
如果「計算機」只是停留在「算數」的功能上,它的「問題率」其實非常低:現代的CPU的「計算」功能極少出錯,上一回應該是1994年Intel奔騰芯片的FDIV問題,這些CPU在計算某些罕見的小數除法的時候,會算錯數。
但是我們想要的是「電腦」,不是「計算機」。我們想要上網、看視頻、記筆記、玩遊戲、發電郵。
爲此,業界發明了各種編程語言和編譯器,從而軟件工程師不用手寫CPU的指令,而是可以在用多少近似於人類語言的編程語言給電腦下指令。又爲了讓CPU能使用各式顯示器、網卡、播放聲音,軟件工程師又寫了各式驅動程序,從而讓CPU能夠將數字轉化爲圖像、聲音和通訊信號。CPU上被架了一層「操作系統」,從而程序的開發者不用爲每一種計算機開發程序;爲了讓多個程序同時運行,比如播放音樂的時候顯示網頁,人們又開發了「多任務」操作系統。
問題是,電腦架構一路走來,在硬件層面,幾乎還是那個簡單的「一塊內存,一個CPU」的模型。儘管我們後來加入了「程序不能干涉操作系統核心的運作」、「用戶不能讀取其他用戶的數據」等等的邏輯,對於CPU來說,它還是能夠讀寫所有的內存。幾乎所有的權限限制,都是在軟件層面實現的,如果編寫者不小心留下漏洞,那入侵者就可以想辦法「騙」CPU去爲他們讀取或者篡改數據。
開源也不一定安全
其一,開源軟件的維護很多人都是志願者在做,免費爲項目共享代碼;我們用戶又不給錢,也很難在道義上要求開源開發者做到怎樣的標準。其二,有些巨大漏洞在代碼上,就是漏了幾行邊界檢查的代碼,是很常見又難以檢查出的錯誤。
有人會說,WhatsApp是閉源的,蘋果系統也有大量閉源組件,而且在iOS上強制所有瀏覽器使用Safari的Webkit內核,只要我們用公開透明的開源軟件,全世界的技術專家一起來審查代碼,那就會安全了。
這恐怕不切實際,因爲開源軟件一樣有過影響極其惡劣的漏洞。
2014年,開源加密庫OpenSSL爆出「Heartbleed」(中文稱「心臟出血」)漏洞,用密碼學大師Bruce Schneier的話說,「從1到10,這(Heartbleed的嚴重程度)是11」。
OpenSSL是什麼呢?簡而言之,OpenSSL是一個開源的SSL實現(注),而SSL可以給瀏覽器(如Mozilla Firefox、Google Chrome等)和網站服務器(如google.com、facebook.com等)之間的通訊提供「端到端加密」,從而免受互聯網中間節點窺探、篡改。網站運營商可以免費用這個軟件,給自己的網站服務器加上SSL,從而讓傳輸變得安全,不會泄露用戶隱私數據,如密碼、信用卡號等等。當時,OpenSSL的用戶有維基百科、雅虎、社交媒體Reddit、Tumblr,交易平臺Stripe等等。
問題是,如果這個提供安全的軟件本身不安全怎麼辦?2011年12月31日,一位OpenSSL的開發人員給項目提交代碼,實現SSL的「心跳」功能,結果引入了一個漏洞,導致數據泄漏,故稱「心臟出血」。
OpenSSL是萬維網服務器軟件Apache和nginx的基礎,這兩個軟件也是開源軟件,但他們的維護者也沒有發現OpenSSL的漏洞。於是,如果網站服務器用了有Heartbleed漏洞的服務器軟件(當時Apache和nginx市場佔有率合計66%),這臺服務器就可能直接泄漏其他用戶的數據,只要服務器軟件曾經收發過這些數據,甚至可能泄漏服務器端的加密私鑰,從而讓攻擊者解密用戶和服務器的加密通訊,讓SSL提供的安全性蕩然無存。
分佈式網絡服務Tor(洋蔥路由)乾脆發了篇文章說,如果你很在乎匿名和隱私,未來幾天就不要上網了(等大家把服務器漏洞補好再回來)。
Heartbleed漏洞從引入到發現,花了兩年時間。期間,使用了有漏洞的OpenSSL的服務器,在網站運營者自以爲啓用端到端加密保證傳輸安全的同時,不知道泄露了多少用戶數據出去。
可是這也不能怪開源項目開發者。其一,他們很多人都是志願者,免費爲項目共享代碼;我們用戶又不給錢,也很難在道義上要求開源開發者做到怎樣的標準。其二,這個漏洞在代碼上,就是漏了幾行邊界檢查的代碼,這樣的錯誤對於程序員來說是非常常見的,也很難查,提交的時候沒審到,之後就很難再發現了。
「互聯網思維」的問題
追求極速迭代而造成的種種失誤。
Facebook有句口號,叫做「Move fast and break things」,就是說要快速迭代,推出新功能;別怕寫出問題,有問題修就是了。Facebook從2004年創辦,8年內做到上市,如今市值5500億美元,這個思路或許確實有可取之處吧。
不知道是不是受到這些「互聯網公司」的啓迪,老牌的軟件廠商,也「快速迭代」了起來。2017年11月,蘋果的macOS爆出登入驗證漏洞。記得我們上文提到的「根用戶」權限嗎?入侵者連用多個漏洞才這個權限。macOS剛發10.13.0的時候,任何用戶輕輕鬆鬆就可以得到:用戶名填「root」,密碼欄留空,多按幾次「解鎖」按鈕,就可以獲取根用戶權限了。就這麼簡單。
這還沒完。漏洞公佈18個小時之後,蘋果就推出緊急補丁修復問題,效率很高。可是,蘋果自己的macOS 10.13.1更新包卻與補丁有衝突,如果用戶先打補丁再升級10.13.1,補丁會被覆蓋,漏洞又回來了。
macOS 10.13還有更過分的錯誤:在加載加密過的APFS硬盤的時候,系統會問你要密碼(因爲硬盤是加密的),此時,密碼提示欄本來應該顯示「密碼提示」的(比如「你的生日+寵物的名字」之類的),當時密碼提示欄會直接顯示你的密碼,應該說真的是非常有效的提示。
當然,也不是只有蘋果如此隨性。蘋果的老冤家微軟,也搭上了「敏捷開發」的快車。微軟說,Windows 10不止是操作系統了,而且是一個「服務」,所以不是幾年更新一次,而是一年更新幾次。經常更新當然不是壞事,不過微軟的更新方法強硬,所以出現了各種更新「事故」:比如遊戲主播正在直播,Windows突然強制更新然後重啓;或者用Window跑數據運算,第二天回來一看發現被強制更新了,運算結果沒了。
去年10月的時候,微軟還被迫停發一個更新版本,因爲更新之後用戶文件丟了。
Windows更新這麼麻煩,於是很多人乾脆就把更新關掉了,安全度還不如以前幾年更新一次的時候。
要放棄隱私保護嗎
應該承認,在現在這個時代,並不存在既方便又有效的隱私保護方法。
操作系統安全事故頻發,開源軟件也時不時爆出重大漏洞,那如果我們在乎自己的隱私,不想被人監控,那應該怎麼辦?
最直接的辦法,是少用電子設備。我認識兩個人,就是完全不用智能機的,沒有微信、WhatsApp之類的通訊工具,要找他們就發郵件、打電話。這個方案相對安全,可是我相信大多數人是做不到的。
也有的朋友說,只要不用「國產機」就可以了,手機用iPhone,電腦不買聯想,那就可以了。從NSO的案情來看,這個方案不成立,因爲NSO入侵並不依賴政府提前埋下的後門。
熟悉技術的朋友,可能會學習各種隱私保護技巧:不要點陌生人的鏈接,給電子郵件加數字簽名,瀏覽器禁用JavaScript,密碼不能重複使用,等等;然後再加上各式軟硬件:全硬盤加密,硬件密鑰,筆記本攝像頭蓋……
「技術流」的問題是,很難堅持。各種隱私保護的手段其實無窮無盡,聊天工具加密了,是不是要再挑個安全小衆的操作系統?操作系統換了,乾脆手機也換一個開源的吧?手機換了,電腦要不要換?這一套都做下來,也不用工作生活了。
我覺得,應該承認,在現在這個時代,並不存在既方便又有效的隱私保護方法。可能值得一試的,是分層隱私:在平常生活中,不太重要的信息,放棄保護。網上購物,會讓平臺知曉自己購買的東西,那就讓它知道吧。要跟內地的朋友聊天,微信沒有端到端加密,後臺肯定全部記錄了,那就讓他們記錄吧。
但在重要、值得保護的信息上,窮兵黷武。網上買一些不方便讓人知曉的東西,那就用一次性電話註冊一個新號,支付用一次性借記卡。如果是從事新聞、法律等敏感工作,那一臺工作電腦,與日常使用分離,在電腦上裝置防火牆,設白名單、長密碼,甚至加載USB自毀程序,一旦不認識的USB設備插入,就銷毀硬盤數據。
如此分隔「低隱私」與「高隱私」範圍,或許能夠在隱私保護和正常生活之間,有個平衡。
(樂之,前端傳媒數據記者)
写得有点乱,目标读者不知道是技术小白还是行业大牛。还有,“无时无刻”是要双重否定才能表达“每时每刻”的意思的。
win10強制更新又頻繁又耐,有時候急用電腦打開顯示更新……
good. thanks.
你們的文章為何是繁簡夾集的 有點奇怪啊
收藏了! 不过端上五毛之流太多,信息安全还不敢讨论太深入。
所以说还是要学一下克林贡语啊。
What?以色列公司NSO同时为以色列政府和沙特暴君服务?
现在对于不想受监控的普通人,哪个更安全,仍然是Telegram最安全吗?
无需用户任何操作就能黑进去就意味着可以放弃抵抗了……作为一个普通用户,我甚至不知道自己已经被黑。作为一个不懂计算机的人,我也不知道什么样的隐私保护手段是有效的。
可能被侵犯一次才会觉悟而思考方便的代价吧….
現金流穩定增长<<未轉換
端好,最后一段值得继续深入探讨和分享,推介一套或几套方案并且说明其中的利弊。例如,signal tg 太空咭 太空电脑 vpn onionnetwork 等等等等。若没有100%安全的方案,那希望知道不同选择/组合的安全水平和其特点 🙏👍 作者可否贡献一下 😄🤔
是我lag了嗎?我以為windows10更新不能關!?
好文,互聯網世界的反思。
最後那個建議值得參考
乱七八糟的…