黑客使用哪些编程语言?
使用 Python 分析漏洞利用数据库
克里斯蒂安·科赫
迈向数据科学
2021 年,我们与科学家同行一起在德国混沌计算机俱乐部 (CCC) 进行了一项调查。我们的目标是找出黑客最常使用的编程语言。
本文跟进调查,并将其结果与漏洞利用数据库的分析进行比较。读者可以获得有关如何设置分析环境的分步说明和结果摘要。因此,本文不仅涵盖了应用技术,而且还提供了对网络安全世界的见解。
调查概述 作为欧洲最大的黑客协会,混沌计算机俱乐部为研究该领域流行的编程语言提供了良好的基础。为此,我们于 2021 年 48 月向俱乐部成员发送了在线问卷链接。根据结果,受访者主要使用Shell和Python进行黑客攻击。
调查的另一个关键发现是,他们的语言偏好随着时间的推移而变化。一般来说,参与者并不认为编程语言的选择对于黑客攻击至关重要。有<>份回复,研究的样本量相对较小。由于它只针对CCC的成员,调查结果也可能是有偏见的。本文的目的是通过分析漏洞利用数据库来验证关键结果。
关于漏洞利用数据库
在进行CCC调查的同一年,所谓的零日漏洞利用引起了很多关注。当时,流行的日志记录框架 Log4j 遭受了一个非常严重的漏洞。利用此类安全漏洞的脚本称为漏洞利用。
顾名思义,漏洞利用数据库提供了漏洞利用和相应易受攻击软件的公共存档。该平台的目标受众是渗透测试人员和安全研究人员。用户可以通过其网站或Kali Linux下可用的工具集访问数据库。
在撰写本文时,来自 45,000 多名独特作者的 9,000 多个漏洞利用已在 Exploit-DB(来源)中发布。数据库条目由不同的属性组成,例如漏洞利用 ID、作者、类型和发布日期。每条记录都与一个文件相关,该文件包含漏洞利用的实际脚本或程序。
在 Kali 下,我们通过执行 shell 命令找到数据库的根目录。除此之外,该目录还包含一个带有漏洞利用数据库快照的 CSV 文件 (files_exploits.csv),以及包含实际脚本或程序 (exploits/) 的子目录。exploitdb
图 1:Kali Linux 下的漏洞利用数据库目录
本文中描述的比较是在 13 年 2023 月 22 日使用 2022 年 <> 月 <> 日的数据库快照准备的。快照和分析的源代码都可以在 GitHub 上找到。 https://github.com/c4ristian/exploits
设置和数据转换
为了设置分析环境,第一步是克隆 GitHub 项目。所有需要的文件都存储在其根目录漏洞利用中。该实现基于Anaconda Python发行版,该发行版必须预安装在客户端计算机上。可以通过在项目的根目录中执行以下命令来创建和激活 conda 环境:
conda env create -f environment.yml
conda activate exploits
要分析的数据库快照以 CSV 文件的形式存储在数据文件夹中。它是从Kali Linux检索的,并使用脚本execute_transformer进行转换。
转换时间和快照的时间都记录在文件时间戳中。如果需要,可以通过在 Kali shell 中运行以下命令来更新快照:
cp -p /usr/share/exploitdb/files_exploits.csv data/
python execute_transformer.py
转换脚本提供用于整理数据和派生其他字段的函数。一个主要任务是提取有关所用编程语言的信息。为此,应用了库 侏儒。尽管其主要目的是语法突出显示,但该框架提供了用于猜测特定文件的编程语言的函数。
除了Pygments之外,还有替代语言检测库。本文测试的一个例子是深度学习解决方案Guesslang。然而,将其集成到 conda 环境中被证明是困难的,处理时间远远超过了 Pygments。
由于Guesslang没有产生更好的结果,因此采用了后一个框架。以下函数将 Pygments 包含在数据转换脚本中:
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 代码读取某个文件,计算其行数并使用该函数来检测编程语言。为了实现这一点,该框架应用了各种词法分析器,即用于语法分析的类。
仅考虑分配给给定文件扩展名的那些词法分析器。有些后缀只存在一个类,而对于其他类,选择是模棱两可的。
例如,扩展名“py”明确分配给Python,而后缀“pl”可以指向Perl或Prolog。
结果返回最匹配的词法分析器,它的名字揭示了编程语言并建立了分析的基础。
下一节中讨论的结果源自笔记本比较。此外,GitHub 项目还提供了更多笔记本来探索 Exploit-DB 的特定方面。guess_lexer_for_filename
成果讨论
CCC调查的核心问题是,参与者在研究前一年使用了哪些编程语言。受访者可以选择多个答案选项。图 2 将 CCC 成员提到的前十种语言与 Exploit-DB 作者使用的语言进行了比较。该图表揭示了相似之处,但也揭示了不同之处。
首先,样本量存在重大差距。总共有48名CCC成员参加了调查。相比之下,在 900/2 年期间,超过 500 位独立作者在 Exploit-DB 中发布了 2020,21 多个文件。选择这两年是因为它们与比较研究的研究期相吻合。为了避免重复,Exploit-DB 中的每个作者语言组合只计算一次。在研究期间,这导致了1,134种语言参考文献,其中1,116种是前十名的一部分。另一方面,CCC调查的参与者将他们的十大语言命名为140次。
图 2:CCC 调查和 Exploit-DB 的前十种语言
CCC的成员主要使用Shell/Bash/Shell/PowerShell和Python,其次是C、JavaScript和HTML/CSS。所有这些技术也出现在Exploit-DB中。
一般来说,语言选择有很大的重叠。图 2 的两个列表中都存在十分之六的技术。Python一直排名第二,显示了其在网络安全领域的受欢迎程度。然而,图表一侧的某些语言并未出现在另一侧。
一个主要区别是 Exploit-DB 中语言的不平衡分布。提交的材料中有一半以上是文本文件。在这里,俾格门特分配的“仅文本”名称具有误导性。
Exploit-DB 中的文本文件通常包含描述,但也经常包含 shell 命令,可能还包括其他语言的脚本。因此,某些技术在结果中的代表性可能不足。
抽查表明,对于 shell 脚本来说很可能是正确的,在 CCC 研究中排名第一。这就是我们方法的局限性。像Pygments这样的框架在评估多语言文件时存在问题。克服这个问题将是后续研究的一个有趣主题。
让我们离开 2020/21 年,看看整个 Exploit-DB 历史。图 3 显示了数据库中所有时间排名前十的语言。如上所述,语言检测依赖于Pygments,每个作者语言组合只计算一次。
图 3:有史以来 Exploit-DB 中排名前十的语言
根据图3,Exploit-DB中有史以来排名前十的语言由Text领导,其次是Python,C,HTML和Perl。
同样,CCC成员的选择有相当大的交集。
当然,令人惊讶的是Prolog出现在列表的后半部分。可能的原因是扩展名为“pl”的文件分类错误。无论如何,Perl 相对较高的排名是值得注意的,因为该语言根本没有出现在图 2 中。
这与CCC调查的另一个发现相吻合。在这项研究中,大多数参与者77.5%报告说他们的语言偏好随着时间的推移而改变。
为了评估这一点,我们可以看一下图 4。该图表可视化了在此分析之前的 25 年内 Exploit-DB 中排名前十的语言的百分比份额。
每个作者语言组合每年计算一次。结果,我们在研究期间发现了来自16,422位独特作者的9,592种语言参考文献。
图 4:分析前 10 年 Exploit-DB 的前 25 种语言
图 4 显示,Exploit-DB 中文本文件的百分比保持相当稳定。之所以选择25年的时间框架,是因为在这一期限之前提交的材料数量相对较低。
除了不断使用 Text 之外,图 4 还显示了其他语言的首选项的变化。最明显的是数据库中从C到Python的转变。CCC研究中也提到了一个可能的原因。
参与者报告说,他们并不认为编程语言的选择对黑客攻击至关重要。因此,Python的使用越来越多,可以简单地反映它近年来的普遍流行。
因此,随着技术的发展,语言偏好在未来应该会继续变化。例如,通过引入 Rust 作为开发 Linux 内核的第二语言,可以触发这种转变。这一预测是否属实将在未来几年内看到。
结论
总而言之,本文提出的比较揭示了CCC成员和Exploit-DB作者使用的语言之间存在很大重叠。两个数据集都证实Python在网络安全领域的流行度。
此外,每个数据集表明语言偏好随时间的变化。CCC研究提出的一个可能原因是,参与者不认为选择编程语言对黑客攻击至关重要。
根据这个解释,应该预期语言偏好将随技术进步继续变化。对Exploit-DB分析的一个主要限制与语言检测方法相关。由于存在多语言文件问题,某些技术可能被低估。
解决这个问题将是一个跟进研究的有趣主题。显然,Exploit-DB为数据科学家和安全专家提供了丰富的数据集。关于利用技巧的艺术还有许多有待学习的东西。
我同意作者的结论。
两种数据集确实显示出编程语言选择在网络安全领域不是最重要的因素,语言偏好可能会随时间和技术进步而变化。
考虑到Exploit DB数据集的性质,多语言文件的处理问题确实可能导致某些语言被低估。如果能解决这一问题,可以从更全面和准确的角度理解利用技巧和编程语言之间的关系。
但是,作者在文章结尾提出的数据科学家和安全专家可以从Exploit DB中学到更多关于利用技巧的内容,这一观点似乎有些主观和片面。
虽然Exploit DB提供了大量实际案例,但利用技巧的本质和内涵远不止编写Exploit代码那么简单。对其进行系统和深入理解需要考虑更广泛的安全原理、攻防技术以及人为因素。
总体而言,这是一篇有价值的初步研究,它揭示了网络安全领域中的一个有趣现象,并提示我们语言选择的变化可能与技术变革密切相关。
但对利用技巧本身的理解还需要更全面和深入的研究。作者对后续研究的建议也似乎过于局限在数据集和方法论上,而忽略了主题本身的宽广内涵。
本文由 mdnice 多平台发布