確保開發成果不被惡意篡改的最佳方式是什麼?

作爲一個應用程序開發人員,在投入如此多時間和精力後,你絕對不會希望自己的辛苦成果被惡意篡改。爲了確保應用程序或內容在沒有安全漏洞或經過任何修改的情況下安全抵達終端用戶,如何保證代碼或文件的安全性,不被他人任意修改呢?

答案是:代碼簽名證書

它通過對程序代碼的數字簽名,來標識軟件來源以及軟件開發者的真實身份,爲可信計算環境提供技術支撐,能有效保障軟件在開發、構建、分發、維護過程中可信任、不被篡改。證明該代碼沒有被非法修改和破壞,確保了該代碼的可信度和有效性。其通過加密技術對文件的擴展名進行簽名,一旦文件被改動,即會通知文件作者,保護文件的安全性。從而讓用戶確信下載的軟件真實可靠,放心下載軟件代碼。

 

代碼簽名證書功能的實現原理

代碼簽名的基礎是PKI安全體系。代碼簽名證書由簽名證書私鑰和公鑰證書兩部分組成,其中,私鑰用於代碼的簽名,公鑰用於私鑰簽名的驗證和證書持有者的身份識別。結合證書的公鑰和私鑰,其具體的實現步驟爲:

1.申請數字證書:發佈者從CA機構申請數字證書。

2.發佈者開發出代碼:藉助代碼簽名工具,發佈者使用MD5或SHA算法產生代碼的哈希值,然後用代碼簽名證書私鑰對該哈希值簽名,從而產生一個包含代碼簽名和軟件發佈者的簽名證書的軟件包。

3.運行環境訪問到該軟件包:用戶的運行環境訪問到該軟件包,並檢驗軟件發佈者的代碼簽名數字證書的有效性。

4.使用代碼簽名:用戶的運行環境使用代碼簽名數字證書中含有的公鑰解密被簽名的哈希值。

5.新產生一個原代碼的哈希值:用戶的運行環境使用同樣的算法新產生一個原代碼的哈希值。

6.用戶的運行環境比較兩個哈希值:用戶的運行環境比較兩個哈希值。如果相同,將發出通知聲明代碼已驗證通過。所以用戶可以相信該代碼確實由證書擁有者發佈,並且未經篡改。

 

1588225976386864.png

流程示意圖

 

代碼簽名證書的實際應用

隨着移動和桌面設備個人用戶應用程序呈爆炸性增長以及惡意軟件的激增,越來越多的軟件發行商和移動網絡提供商要求提供來自受信任的證書頒發機構 (CA) 的代碼簽名,否則不接受分發的代碼。諸如安卓、蘋果等操作系統就強調對代碼進行了簽名的應用程序的重要性。

由於互聯網缺乏提供軟件額外信息的機制,用戶通過互聯網下載或打開軟件時,通常會看到一個消息框,警告運行該軟件可能造成的危險,令軟件產品缺乏完整性保護且(或)發佈者不詳,從而導致用戶對此軟件產品的信任度降低。

 

以微軟代碼簽名爲例,當你在Windows系統上下載軟件時,使用代碼簽名的前後區別如下所示:

➤ 你沒有微軟代碼簽名證書,該下載會被Windows系統阻止,並提示“未知”發佈者的安全警告:

 1588226140417900.png

 

➤ 你有微軟代碼簽名,下載時會顯示開發者姓名或是開發商名稱,以便讓用戶知道該軟件的合法性,確定可放心使用。

1588226208935327.png

 

代碼簽名證書的種類

按照代碼簽名證書產品類型劃分,可以分爲以下兩種類型:

1.    代碼簽名證書(Code Signing)
它是爲軟件開發者提供的一個理想的解決方案,使得軟件開發者對其軟件代碼進行數字簽名,確保用戶下載的內容來自所聲明的來源。

2. EV代碼簽名證書(Extended Validation Code Signing)

EV代碼簽名證書是利用一個存儲在外部硬件令牌上的密鑰(硬件Ukey)來進行簽名,在原代碼簽名證書基礎上加強了對企業身份的驗證。

 

在我們日常工作中,不同類型的代碼簽名證書,支持的功能略有不同,常見的功能支持如下所示:

1588226392744833.png

 

傳統代碼簽名證書的痛點

2018年,一款擁有 Windows 和安卓雙版本的挖礦木馬 MServicesX 悄然流行,中毒電腦和手機會運行門羅幣挖礦程序,造成異常發熱乃至設備受損的現象。此木馬軟件是如何躲避安全軟件的查殺,成功誘導用戶安裝?值得注意的,木馬文件 MServicesX_FULL.exe 使用合法的數字簽名 “16qp limited”,還發現多個擁有合法簽名的同類樣本,樣本的簽名包括“Spinex Solutions Ltd”、“Extrebal limited”、“Kupui ltd”等,在這些白簽名的掩護下,挖礦木馬 MServicesX 得以“瞞天過海”,成功入侵用戶電腦。

我們可以大膽猜測,簽名挖礦木馬 MServicesX 的合法密鑰有可能是盜來的,密鑰擁有者甚至沒有審計與此密鑰相關的所有活動,誰?什麼時候?簽了什麼文件?他們都一無所知。

150x150-SSL-site-icon-bye-hacker.png

代碼簽名用來保護知識產權和信譽。確認軟件開發商的身份,證明自簽名後軟件未被修改和纂改。然而在代碼簽名的實際應用中,存在着諸多問題,面臨着諸多的安全風險。

 

例如:跨區域簽名,我們無法保證 UKEY 傳輸過程的安全性;多部門需要同時簽名的場景中,密鑰分身乏術,即使我們選擇爲這張證書購買多把 UKEY 分發給多個部門使用,可我們無法追蹤 UKEY 裏的證書是否被用來籤惡意軟件?簽名密鑰容易被盜;無法跨區域共享密鑰;沒有簽名問責制和管理權利,無法跟蹤或審計簽名活動等等,代碼簽名威脅態勢嚴峻。

1588226532259344.png

圖:傳統代碼簽名的安全痛點

 

在複雜多變的網絡環境下,我們需要一套簽名系統:解決跨區域跨部門多人簽名需求的問題;我們需要一套審計系統記錄每一次簽名 :誰、什麼時候、簽了什麼文件。而分散的部門和機構導致操作員的身份很難被驗證,怎麼證明簽名者是誰呢?用賬號密碼嗎?

組織保持強大的網絡安全實踐並將其證書和相應密鑰存儲在安全的環境中比以往任何時候都更加重要。我們需要一套更安全可靠的鑑權方式 :不可複製、抗抵賴、與通用系統集成使用的便利性

 

突破傳統:更安全可靠的遠程代碼雲簽名解決方案

跨地區跨部門多人簽名: 解決多地區多部門需要同時使用同一張證書籤名的難題,不僅保護證書和私鑰的安全,而且所有的簽名活動都是可追蹤的,確保問責制和合規性。

 

共享證書實現隔空簽名: 雲端服務器通過令牌實現證書共享,證書擁有者不必擔心證書的安全問題,請求籤名的用戶可以體驗到無感知的簽名服務。

 

 

滿足全部安全需求

△ 消費者應用程序:無法隨時掌控所有密鑰使得企業和消費者易遭受攻擊。

△ 內部應用程序:內部開發過程中的代碼簽名安全流程和掌控的複雜性和難度會帶來重大風險。

△ 第三方市場:在許多開發人員之間共享密鑰會使他們遠離組織的可見性和控制。

 

保護代碼完整性和開發者信譽:對代碼文件進行遠程簽名時,採用可信部件進行私鑰簽名,提高了代碼簽名的安全性。支持本地簽名、共享簽名、雲簽名等模式

其中共享簽名模式可以將本地的簽名證書(支持UKEY證書),共享給異地的朋友或同事使用而不傳輸私鑰,這樣將不會導致私鑰泄露,安全可靠。

另外,使用者用共享證書籤名時,共享者可以進行實時審批,防止共享證書濫用的情況發生。當然如果信任對方,也支持自動審批。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章