找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

549

积分

0

好友

69

主题
发表于 4 天前 | 查看: 14| 回复: 0

我与其他科学家在德国混沌计算机俱乐部 (CCC) 进行了一项调查,目标是找出黑客最常用的编程语言。本文在调查基础上,将调查结果与对 Exploit-DB(漏洞利用数据库)的分析进行了比较。文中提供了分析环境设置的步骤说明以及关键结果摘要,旨在为读者提供网络安全领域的实用技术与行业洞察。

调查概览

作为欧洲最大的黑客协会,CCC 为研究该领域流行的编程语言提供了良好的基础。2021年5月,我们向俱乐部会员发送了在线问卷链接。结果显示,受访者在进行安全研究与黑客活动时,主要使用 Shell 和 Python。另一个重要发现是,他们的语言偏好会随时间发生变化。总体而言,参与者并不认为编程语言的选择是黑客攻击中的决定性因素。由于调查仅针对 CCC 成员,其结果可能存在一定偏差。本文的目标是通过分析 Exploit-DB 来验证这些关键结论。

关于漏洞利用数据库

在 CCC 调查开展的同年,Log4j 框架的严重零日漏洞引起了广泛关注。利用此类安全漏洞的脚本称为“漏洞利用”。Exploit Database 提供了一个公开的漏洞利用档案库及其对应的易受攻击软件信息,主要服务于 渗透测试和安全研究人员。用户可通过其网站或在 Kali Linux 中使用相关工具集访问该数据库。

截至本文撰写时,来自 9,000 多名作者的超过 45,000 个漏洞利用脚本已在 Exploit-DB 中发布。每个数据库条目包含漏洞 ID、作者、类型和发布日期等属性,并与一个包含实际利用脚本或程序的文件相关联。在 Kali Linux 中,通过执行 shell 命令 exploitdb 可以找到数据库根目录。该目录包含一个 CSV 格式的数据库快照文件 (files_exploits.csv) 以及存放实际脚本的 exploits/ 子目录。

Exploit-DB目录结构

本文的比较分析基于 2022 年 11 月 22 日的数据库快照,于 2023 年 1 月 13 日完成。快照与分析所用的源代码均可在 GitHub 上获取。

设置和数据转换

要复现分析环境,第一步是克隆对应的 GitHub 项目。所有必要文件都存放在其根目录下。该实现基于 Anaconda Python 发行版,需预先安装在本地计算机上。在项目根目录下执行以下命令以创建并激活 conda 环境:

conda env create -f environment.yml
conda activate exploits

待分析的数据库快照以 CSV 文件形式存储在 data 文件夹中。该快照从 Kali Linux 中提取,并使用脚本 execute_transformer 进行转换。如需更新快照,可在 Kali 终端中运行以下命令:

cp -p /usr/share/exploitdb/files_exploits.csv data/
python execute_transformer.py

转换脚本负责整理数据并推导附加字段,其中一项核心任务是提取脚本所使用的编程语言信息。为此,我们采用了 Pygments 库。尽管其主要用途是语法高亮,但该框架也提供了推测文件编程语言的功能。

我们曾测试过 Guesslang 等深度学习解决方案,但将其集成到 conda 环境中较为困难,且处理耗时远超 Pygments。由于 Guesslang 并未产生更优结果,最终采用了 Pygments。以下函数展示了如何在数据转换脚本中集成 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 代码读取特定文件,计算其行数,并使用 guess_lexer_for_filename 函数来检测编程语言。该框架应用了多种词法分析器进行语法分析,仅考虑与给定文件扩展名匹配的分析器。例如,.py 扩展名明确指向 Python,而 .pl 后缀可能指向 Perl 或 Prolog。函数返回最匹配的词法分析器,其名称揭示了编程语言,并构成了后续分析的基础。下文讨论的发现主要来自对比分析笔记本,GitHub 项目还提供了其他笔记本来探索 Exploit-DB 的特定方面。

结果讨论

CCC 调查的核心问题是参与者在研究前一年使用了哪些编程语言(多选)。下图将 CCC 成员提及的前十种语言与 Exploit-DB 作者在同期(2020/21年)使用的语言进行了对比,揭示了二者的异同。

2020-2021年CCC与Exploit-DB前十编程语言对比

首先,样本量存在显著差距。CCC 调查仅有 48 名参与者,而 2020/21 年间,超过 900 位独立作者在 Exploit-DB 发布了 2,500 多个文件。为避免重复,Exploit-DB 中每位作者的每种语言组合仅计数一次,共得到 1,134 次语言引用。相比之下,CCC 调查参与者对其前十语言的提及总数为 140 次。

CCC 成员主要使用 Shell(Bash/Shell/PowerShell)和 Python,其次是 C/C++、JavaScript、HTML/CSS。这些技术在 Exploit-DB 中均有出现,两个列表有六种语言重叠。Python 在两个榜单均位居第二,凸显了其在网络安全领域的广泛流行度。

然而,一个主要区别在于 Exploit-DB 中语言的分布极不平衡。超过一半的提交被标记为“Text only”(纯文本)。这个由 Pygments 指定的名称具有一定误导性,因为 Exploit-DB 中的文本文件常包含描述、Shell 命令或其他语言的脚本片段。因此,某些技术(如在 CCC 调查中排名第一的 Shell 脚本)在结果中可能代表性不足。这是本研究方法的一个局限:Pygments 等框架在处理多语言文件时存在困难,解决此问题将是后续研究的有趣方向。

让我们将视野扩大到整个 Exploit-DB 的历史数据。下图显示了数据库中所有时间排名前十的语言(每位作者-语言组合仅计数一次)。

Exploit-DB历史总前十编程语言

根据图表,Exploit-DB 历史前十语言以“Text only”居首,其次是 Python、C、HTML 和 Perl。与 CCC 成员的选择仍有相当大的交集。值得注意的是,Perl 排名相对较高,但并未出现在 2020/21 年的前十榜单中。这与 CCC 调查的另一发现吻合:绝大多数参与者(77.5%)报告其语言偏好随时间发生了变化。

为了评估这种变化,我们可以观察下图。该图表直观展示了过去 25 年中,Exploit-DB 排名前十的语言所占比例的演变趋势(每位作者-语言组合每年计数一次)。

Exploit-DB 25年来前十编程语言占比趋势

图表显示,“Text only”文件的占比保持相对稳定。对于其他语言,偏好变化则很明显,最显著的趋势是从 C 语言向 Python 的迁移。CCC 调查为此提供了一个可能的解释:参与者并不认为编程语言的选择对黑客攻击至关重要。因此,Python 的日益流行可能只是反映了其在全球范围内的普遍兴起。可以预见,随着技术的发展,语言偏好将继续演变。例如,Rust 被引入作为 Linux 内核开发的第二语言,未来是否会引起新一轮技术栈变迁,值得持续观察。

结论

总之,本次比较揭示了 CCC 成员与 Exploit-DB 作者在语言使用上存在大量重叠。两个数据集都证实了 Python 在网络安全领域的核心地位,并都表明语言偏好会随时间动态变化。参与者认为编程语言并非黑客攻击的关键,这或许解释了偏好会随主流技术趋势而迁移的现象。

本次 Exploit-DB 分析的主要局限在于语言检测方法。由于多语言文件的存在,某些技术(如 Shell)可能未被充分表征,解决此问题将是未来研究的方向。毫无疑问,Exploit-DB 为数据科学家和安全专家提供了一个宝贵的数据集,关于黑客技术与渗透测试的艺术,仍有大量知识有待挖掘。

本文的分析过程与思路在 云栈社区 的技术讨论中亦能找到共鸣,我们鼓励对网络安全和编程语言生态感兴趣的开发者进行更深入的交流与实践。




上一篇:DeepSeek MoE演进解析:V1到V3负载均衡与路由机制
下一篇:jQuery 4.0正式发布:特性解析、使用率真相与现代化之路
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 00:28 , Processed in 1.214716 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表