不常見編程語言成攻擊利器
BlackBerry研究人員報告稱,不常見編程語言,比如Go、Rust、Nim和DLang,逐漸成為惡意軟件作者的心頭好,被用于繞過安全防御措施或解決惡意軟件開發過程中的薄弱環節。
注意到使用上述四種編程語言的惡意軟件家族數量越來越多之后,BlackBerry研究團隊選擇了這四種編程語言,深入研究其被用于惡意目的的情況。攻擊者使用新的編程語言并不鮮見;但研究人員注意到,這些語言越來越成熟,預期會隨著這一趨勢的延續而使用量增加。
采用新編程語言的原因多種多樣:可以解決現有編程語言中的缺陷、語法更簡單、更高效的內存管理,或者編程效率更高等等。研究人員指出,新語言可能也更適合其環境,比如物聯網設備就使用低級語言。
當攻擊者開始尋求這些優勢,防御者就面臨挑戰了。惡意軟件分析工具并不總是支持不怎么為人所知的語言,而且,與C或C++等經典編程語言相比,用Go、Rust、Nim和DLang語言編寫的二進制文件經混淆后會顯得更加復雜。分析師可能不熟悉更新一些的語言,了解其復雜性需要一定的學習時間。
研究人員指出,當下出現了一種新的趨勢:攻擊者采用以相對較不常見的語言編寫的投放器或加載器,翻新此前用C++和C#等傳統編程語言編寫的“老”惡意軟件。老惡意軟件通常在第一階段以加密形式存儲,采用XOR、RC4、AES或其他加密和編碼方法。
一旦解密,二進制文件就被釋放到磁盤上,或者注入到進程中載入內存。研究人員稱,這種方法很受攻擊者歡迎,因為可以免去重編程惡意軟件的麻煩,可以用這些投送方法之一“包裝”老惡意軟件。
使用著名惡意軟件的釋放器或加載器,或許可以在釋放到磁盤或加載進內存時被基于特征碼的安全工具捕獲;但用另一種語言重新編寫惡意軟件就可以賦予惡意軟件繞過防御機制的潛力,因為現有特征碼不會有效。
BlackBerry注意到,雖然一些著名的惡意軟件是用Go、Rush、Nim和DLang編寫的,但數量并不多,而且大多數都是用Go編寫的。這些相對不常見的語言每一種都能給其開發商帶來各種優勢。
Go語言是谷歌在2007年開發的,屬于C語言家族,但語法更為簡單。該語言課交叉編譯到所有主流操作系統,以及Android、JavaScript和WebAssembly。Nim可以編譯進多種語言,比如C、C++和JavaScript。DLang改進了C語言的語法,可以交叉編譯,而且學起來比較容易。Rust開銷低、性能高,可以幫助開發人員避開其他流行編程語言中的“痛點”。
魔高一尺道高一丈
正如研究人員指出的,采用不常見編程語言的不單單是惡意軟件作者,近年來安全社區也采用這些語言編寫攻擊性紅隊工具實現,其中很多工具都是開源或公開可用的。
報告提到去年安全公司FireEye遭遇的數據泄露事件,這起事件中民族國家的攻擊者盜走了FireEye公司的紅隊工具。FireEye發布了一份聲明,并在GitHub放上了用于識別被盜工具的檢測特征碼。其GitHub存儲庫揭示FireEye紅隊一直在組合使用公開可用工具和內部構建的工具,這些工具以多種不同語言編寫而成,包括Go、DLang和Rust。
例如,Go語言是Blackberry名單上最年輕的語言,但廣為紅隊采用,很多攻擊性安全工具都用Go重寫或專門為Go打造。FireEye的紅隊工具揭示其創建了一個多平臺Go語言遠程訪問木馬(RAT)。Bishop Fox的對手模擬工具Silver也用了Go語言。為實現原生跨平臺,流行命令與控制框架Merlin完全用Go編寫。
研究人員發現,如果能得到幾大安全公司點贊,編程語言或技術就可能成為主流。他們還指出,分析工具和技術通常并不由安全公司開發,除非使用新語言編寫的惡意軟件達到一定程度的飽和。
相比更為普及和成熟的編程語言,用這些不太為人所知的語言編寫的惡意軟件,其檢出率沒那么高。目前,攻擊者正在改進第一階段的感染過程而非其攻擊活動的核心部分,但安全團隊需要討論不常見編程語言的風險和對防御的影響。