天天看點

我的作業系統安全之路:從入坑到入門

作者 | 張天佳

策劃 | 淩敏

回想自己參與程式設計的經曆,從最初的一通瞎折騰,到現在能參與以及貢獻基礎軟體社群,已經有十多年時間了。很遺憾,這段經曆的大多半時間都是走在一個錯誤的方向上的,至少現在我是這麼認為的。确實沒有什麼精彩的故事,借着給龍蜥社群朋友們分享的契機講一講,列位看官權且當作教訓來看,當作吃别人一塹,長自己一智吧。

從零開始程式設計

我上學時的主攻方向不是軟體工程,也不是計算機,也沒有研究什麼課題,而是當時感覺非常沒有前途的電子科學,現在也隻是依稀記得那些課程名字,至于具體内容是什麼,已經模糊了。這就導緻我有很多時間來打遊戲,那時還很流行組隊打星際和魔獸争霸,許多工具軟體都要去網上找破解版,電腦需要不斷通過全盤殺毒來保持健康狀态,不過當時我也不知道 Linux 是做什麼用的。

當時看那些能破解軟體、寫出工具的黑客們真是羨慕不已,也許是出于興趣,有意無意就關注了起來。從網絡和論壇看到他們經常用到一種奇怪的語言,後來才知道那是彙編語言,在沒有計算機基礎也沒有人指引的情況下,走上了這條現在看來方向明顯不對的道路,很慶幸自己居然沒有放棄。

後來,我就找了一些書籍資料在 Windows 下模仿寫了一些使用 win32 API 的視窗程式,那時感覺還不錯。因為學校的 C 語言課程,老師隻會講一些文法跟考試的内容,除了考二級也不知道還能用來做什麼,這樣一比較視窗程式顯然更像一個真正的程式,雖然簡單但能讓人産生興趣也更接近工程實用。

就這樣斷斷續續幾年居然基本掌握了 x86 彙編和 Win32 的主要 API,也對系統基礎有了一定了解。因為自己的認知盲區,錯誤地選擇了入門開發語言和開發環境,導緻後來走了很多年的彎路。

很幸運,畢業之後沒有失業,也沒有從事科班工作,憑借自修的豐富的程式設計經驗,終于混進了現在看起來是傳統得不能再傳統的主機安全行業,主要工作内容也是開發防毒軟體所需要的實時監控,以及一些惡意軟體的分析工作。

那是 2010 年,正是 PC 機火熱的時代,沒有移動網際網路,當時的防毒軟體還是裝機必備、熱門賽道,有諸多的企業在裡面競争,一點不亞于現在的社群團購。有多熱門呢,當時的 360 還是可以跟騰訊叫闆的,并且還能得到網絡上的普遍支援,可以跟十年之後的現在做一個對比。

扯回正題,因為工作涉及系統開發的緣故,抱着很不情願的狀态開始使用 C 語言,也許是有彙編基礎,C 語言學習起來就順利了很多,對于許多人诟病的指針好像也沒說的那麼複雜。其實當時行業主流使用的是 C++ 語言,奈何一直沒有學會,直到現在也是一知半解。

就這樣渾渾噩噩的六年多,分析過 CVE、寫過 POC、核心監控、各種 HOOK 信手拈來,開發語言也主要集中在 C、lua 和彙編。但是基本沒做什麼像樣的項目,随着近幾年作業系統自身安全性提升和軟體分發的把控,作業系統安裝一個專門的主機安全軟體的必要性也越來越小。

基礎軟體領域的安全問題

也許因為安全背景,兩年前偶然的機會混進了作業系統 OS 安全,基礎軟體的安全方向跟傳統的主機安全還是有挺大差別的。

傳統安全熱衷于攻防,魔高一丈道高一尺,魔再高道更高,這樣的無限循環,好像永遠也到達不了安全的終點,也做不到 100% 的安全。

就比如現在非常流行的勒索軟體,這是伴随着加密貨币而誕生的一種簡單粗暴的惡意軟體,比特币 09 年就誕生了,那還是一個普遍使用諾基亞的時代,阿裡雲是那時才開始創業的,iPhone 也才剛剛出道,這十多年雲計算和移動網際網路對人們生活的改變,帶來的社會價值都是有目共睹的。

然而,一個誕生了十多年的加密貨币除了催生了一些不能活在陽光下的行業外,似乎沒給社會帶來什麼改變,當然區塊鍊那是另一碼事,以至于現在還有不少人覺得加密貨币是一個新事物。勒索軟體目前在主機端依然沒有很好的解決辦法,我們隻能避免這樣的情況發生,也許真的要靠加密貨币的自然覆亡來解決勒索軟體。

這樣攻防帶來的另一個問題是沒法标準化,你的矛更新了,我的盾也得更新,攻一方盡可能隐藏自己的攻擊方式,防守方也要保密自己的防守細節。這樣的安全方案随着時間推移邊際價值是遞減的。

從基礎軟體層面來考慮安全問題就大不相同了,比如數字簽名、加密算法、TLS 協定以及 HTTPS,這些目前都已經是計算機和網際網路的安全基石,也是從根本上解決安全問題,是一個比較徹底的解決方案,也更容易成為國際通用的方案,其次解決方案規範是公開的,會充分暴露出設計的缺陷,有助于安全能力的逐漸提升。

之後正好趕上了龍蜥作業系統社群的成立,彼時國内面臨外部的貿易沖突和技術封鎖,以及國内資料安全問題,我們決定把全軟體棧的國密做大做強,依托于作業系統給支援起來。我們在龍蜥社群的工作,可以參考「商密軟體棧 SIG」,上面記錄了我們的周報、月報和一些最佳實踐案例,有比較詳細的介紹。

龍蜥社群是一個更加開放的平台,有了能對外輸出的平台,我的工作可以以社群方式來運作起來了,同時進展也會更快,能跟社群内有相同興趣的夥伴協同工作,也第一時間把我們的工作成果帶給社群使用者和開發者。

我很喜歡我們公司内部的一句話「一次性把事情做對」。拿國密來說,從開始的算法标準制定到現在也有十多年的時間了,目前仍然沒有被廣泛使用是有原因的,工程上的碎片化是很重要的一點,這也是我們一開始堅持的原則,龍蜥的國密不是要做另一個碎片的國密實作,而是把國密的工程實作統一到日常使用的基礎軟體中去,避免以後國内大量的資源和人力重複投入,一次性把這個事情做好。

有了核心 SM2 算法的成功經驗後,我們的動力更足了,陸續在 libgcrypt、OpenSSL、coreutils、IMA,甚至 Rust 生态 RustCrypto 等基礎軟體或者密碼算法場景中支援了國内的商用密碼算法,并且為 SM3/4 算法支援了 x86 和 Arm64 平台的指令集優化、以及 KTLS 國密算法的支援。

目前我們在商密生态多年的開發工作已經全部回饋到了社群,其中絕大部分貢獻到了主流開源項目的上遊,總代碼量超過萬行。比如我們在 Arm64 架構下做了 NEON 和 Crypto Extensions 指令集優化,性能有了質的飛躍。

非常感謝社群各合作夥伴的支援,以及社群從業人員的辛苦付出,經過一年多的努力,我們基本建構起了商密的基礎軟體設施,不僅解決了從無到有的問題,也把商密的性能提升到真正能産業化應用的程度,也依托于龍蜥作業系統(Anolis OS)釋出了支援全棧商用密碼的 Anolis 商密版 OS,當然這個生态不管是橫向還是縱向還有很多工作要做,需要更多内部和外部開發者參與進來一起建設,我們非常歡迎與大家一起合作。

我的作業系統安全之路:從入坑到入門

(開發者峰會演講)

程式語言世界素來有江湖門派之争,文中難免涉及個人主觀判斷,隻是代表個人想法和意見,僅供大家參考。

以下是我們團隊在龍蜥社群上的商密軟體棧 SIG,非常歡迎有興趣的開發能參與進來,為中國的基礎軟體安全添磚加瓦。

SIG 位址:https://openanolis.cn/sig/crypto

代碼庫:https://codeup.openanolis.cn/codeup/crypto

作者介紹:

張天佳,龍蜥社群商密軟體棧 SIG Maintainer,安全技術開發,專注于國内商用密碼的技術開發以及推廣工作。

繼續閱讀