在3月的荷蘭大選即將到來之際,安全專家Sijmen Ruwhof通過Youtube上有關荷蘭大選使用的計票軟件介紹視頻,對荷蘭大選中使用的投票計票軟件OSV programma進行了全面的安全分析和風險識別。最終,荷蘭國家選舉委員會通過Sijmen Ruwhof發表的分析文章,確認這套軟件系統存在安全隱患,并對外宣布,在接下來的總統大選中,將不會使用任何電子投票計票系統,改用原始的手工計票。以下為Sijmen Ruwhof對OSV programma計票軟件的詳細安全分析。
正如大家所聽聞到的那樣,去年的美國總統大選,卷入了大多黑客暗影,從始至終的一系列網絡攻擊對政治進程造成的影響,意義深遠。這或許將成為載入史冊的經典案例,也將開啟網絡攻擊的新篇章。
對OSV programma的分析原由
1月中旬,荷蘭RTL電視臺記者曾聯系我,想就快要開始的荷蘭大選是否會面臨黑客攻擊作一些采訪。而據他們透露,當前荷蘭選舉計票系統軟件使用了不安全的SHA1機制,甚至還存在弱口令。對此,我表示驚訝和感慨,我們竟然還敢使用電腦計票系統?
荷蘭官方早在2009年就禁止使用電子投票和計票系統
2009年6月,出于網絡安全原因,荷蘭政府宣布禁用電子投票系統進行選舉,之后改用規定的紅色鉛筆和白紙投票。RTL電視臺記者告訴我,雖然選民使用鉛筆和紙質選票手工投票,但在后臺計票過程中,為了方便高效,負責選舉的官員卻把選票輸入電腦程序進行計票。
2009年后電子計票系統一直被在選舉后臺使用
該電腦計票程序運行后會按不同區域生成合計的投票計數,并存儲在一個USB載體中,通過向上級區域層層匯總,最終形成的電子數據將交由中央選舉委員會進行合計。
使用電子計票系統面臨的嚴重風險
如果沒人質疑最終選票的電子合計結果,也將不會對紙質選票進行復審核實,如果沒有紙質選票復審過程,也就意味著,這種紙筆方式投票對電子投票系統本身而言就是一種安全風險(風險1:嚴重),因為,紙質選票產生的結果最后一樣是通過電子計票程序完成,沒有任何人工核實。對于這個事實,我既驚訝又害怕。
其實在這些關鍵應用方面,任何有點IT技能的人都清楚,電腦程序并不總是可信。因為無論采取什么加固措施,總會存在被黑風險,更別提面對的是那些經驗老道技術高明的國家支持黑客,直接點說,在他們面前,我們都將束手無策。
選舉委員會對當前的網絡威脅毫無意識
現在的情況是,荷蘭國家選舉委員會對當前的網絡威脅形勢毫無認知,竟然還認為他們使用的選舉計票軟件非常可靠,不存在任何安全風險。
我對這套2009年以來一直在用的,決定著國家元首的計票軟件系統非常好奇,因此,我決定仔細研究研究。
對OSV programma的詳細安全分析和風險識別
關于該計票軟件,荷蘭國家選舉委員會制作了幾個操作演示視頻投放到Youtube上。在視頻中,選舉委員會講師講解如何用該軟件進行選舉計票:
視頻泄露了其內部網絡共享信息
視頻剛開始很無聊,但在01:19之后就變得有點意思了,該講師無意間打開了Windows的資源管理器,從畫面上可以看到,系統中存在8個內部網絡共享位置,其中一個清楚地標記為“阿姆斯特丹”(Amsterdam)。內部網絡設置對于投票系統來說,算是比較保密的技術信息了,可惜,該講師卻通過這種方式無意間泄露了!(風險2:低)
計票軟件使用了不安全的網頁服務
在視頻介紹中,我注意到在計票軟件的初始部署時,需要在使用者電腦中安裝一個web服務模塊,之后請求該web服務器并打開一個瀏覽器頁面才能正常進行計票操作。從安全角度來說,桌面應用程序使用基于瀏覽器的服務,可能會存在以下安全風險(風險3:中):
為黑客增加攻擊面
由于web服務的存在,所以攻擊者沒有必要通過特定的TCP端口連接計票軟件
如果主機防火墻策略設置不當,網絡內其它主機可以無限制訪問到web服務
如果網絡內路由器開啟了UPnP功能,web服務可能會直接暴露在互聯網上
計票軟件可以安裝在任何電腦上
視頻介紹,該計票軟件可以安裝到任何電腦中,而荷蘭國家選舉委員會竟然未對軟件的安裝環境作出任何安全性限制(風險4:高),這將會面臨以下風險:
一些缺乏更新或未安裝殺毒軟件的老舊電腦同樣適配
未對個人攜帶電腦作出安裝限制
計票軟件支持存在很多漏洞隱患的XP系統,另外,未對一些不安全的瀏覽器版本作出限制
對于一些關鍵系統應用,為了從理論上保證絕對的安全,應該禁用互聯網連接,或采用其它方式實現某種意義上的物理隔絕。雖然該計票軟件安裝文檔上注明,安裝系統應該禁用WIFI,但卻未對互聯網網絡連接作出限制,這種疏忽讓我吃驚。
計票軟件使用了不安全的HTTP連接
在對本地本地web服務的訪問中,計票軟件使用了不安全的HTTP瀏覽器連接(風險5:中),雖然這種本地瀏覽器流量不會形成直接威脅,但也存在其它安全風險:
如果投票系統或區域內置其它外連鏈接,將會泄露HTTP的referrer頭信息
在瀏覽器和web服務之間形成了攻擊面,攻擊者可能會在電腦中安裝惡意軟件,對計票軟件的發起流量進行監聽
如果安裝系統內使用了其它HTTPS連接,就又會激活瀏覽器啟用其它安全性設置,如網頁緩存設置等,對計票軟件的正常使用造成干擾
所以,對于這類關鍵系統應用,即使使用了本地的HTTP服務,最好請使用HTTPS方式。
計票軟件未針對哈希校驗和密碼口令的使用作出強制說明
在視頻介紹的02:41時刻,可以看到以下畫面
視頻里,雖然軟件介紹者的操作速度很快,但在其中一個瞬間,一幅重要畫面閃現而出,計票軟件需要用戶手工輸入一串40個字符的HASH值判斷投票結果是否被篡改,但是,介紹者卻對此項重要安全設置只字未提,完全忽視(風險6:高);更糟糕的是,計票軟件卻沒有強制用戶輸入校驗HASH碼(風險7:高);而且,讓人覺得意外的是,這些HASH碼使用的竟是不安全的SHA1加密方式(風險8:高),而SHA1只適用于一些小型文件和服務的校驗。
哈希值文件和選票數據文檔生成在同一文件夾內
在視頻的02:52時刻,可以看到以下畫面:
畫面中,生成的XML文檔內包含了選票計數,而為了保證每個XML文檔的完整性,將利用不同SHA1哈希值對每個XML文檔進行校驗,如果XML文檔被更改,將會產生不一樣的SHA1值。而生成的PDF文檔內就包含了對XML文檔進行校驗的SHA1哈希值。
PDF和XML文檔的創建過程
當計票軟件生成包含選票計數的XML文檔時,同時也會創建一個對應的,包含由計票軟件生成SHA1哈希校驗值的PDF文檔,該文檔為打印之用,而哈希值理論上不會被黑客遠程更改。
計票軟件生成的這些XML和PDF文檔隨后將存儲到一個USB載體中,這個USB載體將被通過物理轉移方式遞交到上一級選區,上一級選區通過匯總所轄管地區的所有XML文檔,并把其輸入到計票軟件中進行電腦程序計票。
未加密保護的XML文檔
計票軟件生成的,包含選票計數的XML文檔沒有任何加密保護設置,在USB載體的物理轉移中,任何人都可以對其內容進行篡改(風險9:高)
生成的PDF文檔在打印之后應該刪除
包含哈希校驗值的PDF文檔在打印之后,應該立即刪除,然而視頻講解者卻沒意識到這個問題,坦然地把其和XML文檔保存在同一個文件夾中(風險10:中),計票軟件系統也未就此發出任何強制刪除PDF文檔的安全提示(風險11:中)。打印PDF文檔是可選步驟,當然,有了電子數據誰還會想著去處理紙質文檔呢?
另外,針對SHA1哈希值的校驗,視頻講解者展示了如何在PDF閱讀器中對SHA1值進行驗證:
我猜想該計票軟件設計者的初衷是希望用戶能打印PDF文檔,用紙質方式進行文檔的完整性校驗,而視頻講解者并沒有真正了解這種意圖,同時,軟件設計者也沒有認真檢查過軟件的生成文檔(風險12:中)。
而且,由于存儲XML文檔的USB載體無任何加密措施保護,在把數據轉移到另外一臺計票電腦的過程中,可能會產生安全風險(風險13:高)。
事實上,計票系統開啟USB接入方式,本來就是一種非常危險的安全短板,因為不可避免會被插入一些未知的不安全的USB載體,使計票電腦系統面臨被黑風險。主要隱患如下:
攻擊者使用程序自啟動技術,在USB載體上放置可以自動運行的惡意軟件
攻擊者使用類似BadUSB形式的攻擊
即使設置了很好的加密或簽名認證機制,利用USB的惡意接入,一樣可以繞過這些安全設置(風險14:高),而且針對數百公里外的上一級選區數據文檔轉移,USB載體方式很容易出現安全問題。
視頻講解者使用了短密碼并開啟了密碼自動保存功能
在03:07時刻,計票軟件的登錄界面顯示以下畫面:
講解者使用了名為“OSV”的用戶名,點擊TAB鍵后,發現系統已經自動保存了對應的登錄密碼(風險點15:中),但講解者又重新手動輸入了長度為3位數的密碼進行登錄,有點搞笑,我猜想她的密碼可能也是“OSV”。
顯然,開啟密碼保存設置后,計票軟件可能存在他人未授權訪問的情況(風險17:低),同時,計票軟件允許設置弱口令的做法也極不安全(風險18:中)。
安全標記Sessionid顯示在地址欄
登錄進入后,在管理界面瀏覽器地址欄可以看到如下圖所示的鏈接信息:
仔細觀察可以發現session標識jsessionid為可見狀態(風險19:低),為了安全起見,應該對cookie機制進行安全設置,如httponly、secure、sameSite等以保護session不被劫持。主要存在的隱患如下:
黑客可能利用該標識繞過登錄驗證
在不安全的HTTP連接下,該標識符可能被泄露到其它網站
該標識還會被自動保存在瀏覽器歷史記錄中
使用了系統高權限運行軟件
在03:44時刻可以看到以下畫面:
計票軟件把用戶文件寫入到其安裝路徑:C:Program Files (x86)OSV,一般來說,只有具備系統高權限的用戶才能操作該路徑文件,而給一些日常性任務賦予高權限本來說是一種安全風險(風險20:中)。而該軟件編寫者似乎對用戶隔離和安全加固了解不夠,所以才會把用戶文件默認存儲到系統限制區域C:/Program Files/ 下(風險21:中)。
惡意軟件可以輕易篡改選票
視頻在04:08時,畫面中顯示了包含投票計數生成的XML文檔,而講解者需要通過用戶接口導入這些文件讓軟件進行統計分析:
雖然這些文件是在同一個電腦上生成的,但是在這個步驟卻沒有進行SHA1校驗(風險22:高)。
而且,這些運行有計票軟件的電腦很容易通過日常瀏覽或郵件方式感染惡意軟件,而一旦感染上了那些針對選舉的惡意軟件,它們只需更改存儲在C:Program Files (x86)OSV 目錄下的XML文檔,因為這些文檔沒有經過任何加密保護和校驗,這對黑客來說輕而易舉。
包含計票數據的XML文檔竟然可以通過電子郵件方式寄出
在視頻的04:45時刻,計票軟件竟然提示用戶可以通過電郵方式把XML文檔寄到中央選舉委員會:
電子郵件方式傳送類似重要數據非常不安全(風險23:高),對于那些想達目的的黑客來說,竊取或更改電子郵件信息非常簡單容易,這些軟件開發者難道是腦子進水了嗎?!
沒有任何PDF文檔打印提示
視頻在生成文檔格式介紹中,雖然提到了如何生成PDF和XML文檔,以及這些文檔將會存儲在一個USB載體中被轉移到另外一臺電腦中,但是沒有提及任何打印PDF的提示。
軟件加密校驗機制越來越糟
從視頻講解中可知,該軟件是由德國軟件公司開發的,而進行哈希校驗的做法也是這家德國軟件公司的想法。正常來說,導入XML文檔時,必須與USB載體中PDF文檔的哈希值進行比較,才可選擇下一步導入動作,但一些用戶會選擇忽略此步驟。因此,為了實現”額外強制性校驗“措施,該軟件公司想出了以下這招:
必須輸入哈希編碼的前4個字符進行校驗,才能執行下一步動作。由于只要求輸入4個字符,對SHA1編碼來說,即2^16(65,536)種組合,在強力破解工具面前,這種密碼強度算是非常脆弱的了(風險24:高),而正常的SHA1是2^160種組合。所以,從這個角度上來說,目前該計票軟件的所謂的“額外安全機制”完全起到了相反的作用,沒有任何安全可言!
其它風險漏洞情況
我還進行了其它漏洞識別和檢測,由于比較繁雜,就不一一贅述:
計票軟件系統直接接入互聯網
在部署計票軟件時沒有IT專家進行指導
計票軟件存在部分開源代碼
我發現了某處XSS漏洞
沒有部署任何日志存儲服務,文件信息很容易被篡改
未部署任何入侵檢測服務
軟件未經任何第三方安全機構或個人進行過安全檢測
軟件不具備任何可信的安全檢測報告
軟件信息的完整性很難保證
……
看來選舉委員會和其聘請的軟件公司完全沒有考慮到黑客威脅,這簡直難以置信,但是請注意,從以上分析研究可以看出,黑客能以多種方式,實現操縱大選結果的目的,而這些安全隱患,自2009年就一直存在。真心希望從此刻起,荷蘭政府能重視選舉相關的信息安全,因為這種現狀非常糟糕,不可接受!
后記
2017年1月30日,在我發表了這篇文章之后,荷蘭RTL電視臺邀請我和其它安全專家就我提及的選舉系統安全問題進行了驗證討論,節目作了直播;
2017年1月31日,荷蘭NOS電視臺報道了我的該篇分析文章,并就此采訪了負責大選的當值官員;
2017年1月31日,媒體報道,早在6年前,Radboud大學學生MaartenEngberts曾發現了該計票軟件的多個漏洞,并發表在其碩士論文中,但荷蘭選舉委員會一直忽視這些安全漏洞;
2017年2月1日,在多家媒體對該文進行轉載報道后,荷蘭內政部長Ronald Plasterk發表聲明,確認荷蘭選舉信息系統可能存在一些潛在的安全威脅,并宣布在3月即將到來的荷蘭大選中不會使用電子計票軟件,將會徹底使用手工計票。
2017年2月3日,《今日美國》節目就此文作了報道。
*參考來源:sijmen.ruwhof,FB小編clouds編譯,轉載請注明來自FreeBuf.COM