黑客使用哪些編程語言?
↓推薦關(guān)注↓
作者:啟辰8
我與其他科學家一起在德國混沌計算機俱樂部 (CCC) 進行了一項調(diào)查。我們的目標是找出黑客最常用的編程語言。本文對調(diào)查進行了跟進,并將調(diào)查結(jié)果與漏洞利用數(shù)據(jù)庫的分析進行了比較。讀者可以獲得有關(guān)如何設(shè)置分析環(huán)境和結(jié)果摘要的分步說明。因此,本文不僅涵蓋了應(yīng)用技術(shù),還提供了對網(wǎng)絡(luò)安全世界的見解。
調(diào)查概覽
作為歐洲最大的黑客協(xié)會,混沌計算機俱樂部為研究該領(lǐng)域流行的編程語言提供了良好的基礎(chǔ)。為此,我們于 2021 年 5 月向俱樂部會員發(fā)送了在線問卷鏈接。根據(jù)結(jié)果,受訪者主要使用 Shell 和 Python 進行黑客攻擊。調(diào)查的另一個重要發(fā)現(xiàn)是他們的語言偏好隨時間發(fā)生了變化??偟膩碚f,參與者并不認為編程語言的選擇對于黑客攻擊來說是必不可少的。由于它僅針對 CCC 成員,因此調(diào)查結(jié)果也可能存在偏見。本文的目標是通過分析 Exploit-DB 來驗證關(guān)鍵結(jié)果。
關(guān)于漏洞利用數(shù)據(jù)庫
在 CCC 調(diào)查開展的同一年,一個所謂的零日漏洞引起了廣泛關(guān)注。當時,流行的日志記錄框架 Log4j 存在嚴重漏洞。利用此類安全漏洞的腳本稱為漏洞利用。顧名思義,Exploit Database 提供了一個公開的漏洞利用檔案和相應(yīng)的易受攻擊的軟件。該平臺的目標受眾是滲透測試人員和安全研究人員。用戶可以通過其網(wǎng)站或 Kali Linux 下可用的工具集訪問該數(shù)據(jù)庫。
在撰寫本文時,來自 9,000 多名作者的 45,000 多個漏洞已在 Exploit-DB(來源)中發(fā)布。數(shù)據(jù)庫條目由不同的屬性組成,例如漏洞 ID、作者、類型和發(fā)布日期。每條記錄都與一個文件相關(guān),該文件包含漏洞利用的實際腳本或程序。在Kali下,我們通過執(zhí)行shell命令exploitdb找到數(shù)據(jù)庫的根目錄。除其他外,該目錄包含一個帶有 Exploit-DB 快照的 CSV 文件 (files_exploits.csv),以及帶有實際腳本或程序的子目錄 (exploits/)。

本文中描述的比較是在 2023 年 1 月 13 日使用 2022 年 11 月 22 日的數(shù)據(jù)庫快照準備的??煺蘸头治龅脑创a都可以在 GitHub 上找到。
設(shè)置和數(shù)據(jù)轉(zhuǎn)換
為了設(shè)置分析環(huán)境,第一步是克隆 GitHub 項目。所有需要的文件都存放在它的根目錄exploits中。該實現(xiàn)基于 Anaconda Python 發(fā)行版,該發(fā)行版必須預(yù)裝在客戶端計算機上??梢栽陧椖扛夸浵聢?zhí)行以下命令創(chuàng)建并激活conda環(huán)境:
conda env create -f environment.yml
conda activate exploits要分析的數(shù)據(jù)庫快照作為 CSV 文件存儲在數(shù)據(jù)文件夾中。它是從 Kali Linux 中檢索到的,并使用腳本 execute_transformer 進行了轉(zhuǎn)換。轉(zhuǎn)換時間和快照時間都記錄在文件時間戳中。如果需要,可以通過在 Kali shell 中運行以下命令來更新快照:
cp -p /usr/share/exploitdb/files_exploits.csv data/
python execute_transformer.py轉(zhuǎn)換腳本提供整理數(shù)據(jù)和派生附加字段的功能。一項主要任務(wù)是提取有關(guān)所用編程語言的信息。為此,應(yīng)用了庫 Pygments。雖然它的主要目的是語法高亮顯示,但該框架提供了猜測特定文件的編程語言的功能。
除了 Pygments,還有其他語言檢測庫。本文測試的一個示例是深度學習解決方案 Guesslang。然而,將其集成到 conda 環(huán)境中有些困難,處理時間遠遠超過 Pygments。由于 Guesslang 沒有產(chǎn)生優(yōu)越的結(jié)果,因此采用了后一種框架。以下函數(shù)將 Pygments 包含到數(shù)據(jù)轉(zhuǎn)換腳本中:
import pygments
from pygments.lexers import guess_lexer_for_filename
def _parse_exploit_file(file_name):
with open(file_name, encoding="UTF-8") as file:
lines = file.readlines()
text = "\n".join(lines)
line_count = len(lines)
try:
lang_guessed = guess_lexer_for_filename(file_name, text).name
except pygments.util.ClassNotFound:
lang_guessed = None
return line_count, lang_guessed上面的 Python 代碼讀取特定文件,計算其行數(shù)并使用函數(shù) guess_lexer_for_filename 來檢測編程語言。為實現(xiàn)這一點,該框架應(yīng)用了各種詞法分析器,即用于語法分析的類。僅考慮分配給給定文件擴展名的那些詞法分析器。有些后綴只存在一類,而其他的選擇是不明確的。例如,擴展名“py”顯然指定給 Python,而后綴“pl”可以指向 Perl 或 Prolog。最匹配的 Lexer 作為結(jié)果返回。它的名字揭示了編程語言并建立了分析的基礎(chǔ)。下一節(jié)中討論的發(fā)現(xiàn)來自筆記本比較。此外,GitHub 項目提供了進一步的筆記本來探索 Exploit-DB 的特定方面。
結(jié)果討論
CCC 調(diào)查的核心問題是參與者在研究前一年使用了哪些編程語言。受訪者可以選擇多個答案選項。圖 2 將 CCC 成員提到的前十種語言與 Exploit-DB 作者使用的語言進行了比較。該圖表揭示了相似之處,但也有不同之處。
首先,樣本量存在重大差距??偣灿?48 名 CCC 成員參與了調(diào)查。相比之下,2020/21 年間,900 多位獨立作者在 Exploit-DB 中發(fā)布了 2,500 多個文件。之所以選擇這兩年,是因為它們與比較研究的研究時期相吻合。為了避免重復(fù),Exploit-DB 中的每個作者語言組合只計算一次。在研究期間,這導致了 1,134 種語言引用,其中 1,116 種是前十名的一部分。另一方面,CCC 調(diào)查的參與者將他們的前十種語言命名為 140 次。

CCC成員主要使用Shell(Bash/Shell/PowerShell)和Python,其次是C、JavaScript、HTML/CSS。所有這些技術(shù)也出現(xiàn)在 Exploit-DB 中。一般來說,語言選擇有很大的重疊。十分之六的技術(shù)出現(xiàn)在圖 2 的兩個列表中。Python 一直排名第二,顯示了它在網(wǎng)絡(luò)安全領(lǐng)域的受歡迎程度。然而,圖表一側(cè)的某些語言并未出現(xiàn)在另一側(cè)。
一個主要區(qū)別是 Exploit-DB 中語言的不平衡分布。超過一半的提交是文本文件。在這里,Pygments 指定的名稱“Text only”具有誤導性。Exploit-DB 中的文本文件通常包含描述,但通常也包含 shell 命令和可能的其他語言腳本。因此,某些技術(shù)在結(jié)果中的代表性可能不足。抽查表明,這可能適用于 shell 腳本,在 CCC 研究中排名第一。這是我們方法的局限性。Pygments 等框架在評估多語言文件時存在問題??朔@個問題將是后續(xù)研究的一個有趣主題。
讓我們離開 2020/21 年,看看整個 Exploit-DB 歷史。圖 3 顯示了數(shù)據(jù)庫中所有時間排名前十的語言。如上所述,語言檢測依賴于 Pygments,每個作者-語言組合只計算一次。

根據(jù)圖 3,Exploit-DB 中有史以來排名前十的語言以 Text 居首,其次是 Python、C、HTML 和 Perl。同樣,與 CCC 成員的選擇有相當大的交集。當然,令人驚訝的是 Prolog 出現(xiàn)在列表的后半部分。可能的原因是擴展名為“pl”的文件分類錯誤。無論如何,Perl 相對較高的排名是值得注意的,因為該語言根本沒有出現(xiàn)在圖 2 中。這與 CCC 調(diào)查的另一個發(fā)現(xiàn)相吻合。
在這項研究中,大多數(shù)參與者 (77.5%) 報告說他們的語言偏好隨時間發(fā)生了變化。為了評估這一點,我們可以看一下圖 4。該圖表直觀地顯示了在此分析之前的 25 年中 Exploit-DB 中排名前十的語言的百分比份額。每個作者語言組合每年計算一次。結(jié)果,我們在研究期間從 9,592 位獨立作者那里找到了 16,422 條語言參考。

圖 4 顯示 Exploit-DB 中文本文件的百分比保持相當穩(wěn)定。選擇 25 年的時間范圍是因為在此期間之前的提交數(shù)量相對較少。除了持續(xù)使用文本之外,圖 4 顯示了對其他語言的首選項的變化。最明顯的是在數(shù)據(jù)庫中從 C 轉(zhuǎn)向 Python。
CCC 研究中也提到了一個可能的原因。參與者報告說,他們并不認為編程語言的選擇對黑客攻擊至關(guān)重要。因此,越來越多地使用 Python 可以簡單地反映出它近年來普遍流行。
因此,隨著技術(shù)的發(fā)展,語言偏好在未來應(yīng)該會繼續(xù)改變。例如,引入 Rust 作為 Linux 內(nèi)核開發(fā)的第二語言可能會引發(fā)這種轉(zhuǎn)變。這一預(yù)測是否屬實,將在未來幾年見分曉。
結(jié)論
總之,本文中的比較揭示了 CCC 成員和 Exploit-DB 作者使用的語言之間存在大量重疊。這兩個數(shù)據(jù)集都證實了 Python 在網(wǎng)絡(luò)安全領(lǐng)域的流行程度。
此外,每個數(shù)據(jù)集都表明語言偏好隨時間的變化。CCC 研究制定了一個可能的原因。參與者并不認為編程語言的選擇對于黑客攻擊至關(guān)重要。按照這一解釋,人們應(yīng)該期望語言偏好會隨著技術(shù)進步而繼續(xù)變化。Exploit-DB 分析的一個主要限制與語言檢測方法有關(guān)。
由于多語言文件的問題,某些技術(shù)可能未得到充分體現(xiàn)。解決這個問題將是后續(xù)研究的一個有趣話題。顯然,Exploit-DB 為數(shù)據(jù)科學家和安全專家提供了豐富的數(shù)據(jù)集。關(guān)于黑客滲透的藝術(shù)還有很多東西需要學習。
- EOF -
