黑客使用哪些编程语言?

我与其他科学家一起在德国混沌计算机俱乐部 (CCC) 进行了一项调查。我们的目标是找出黑客最常用的编程语言。本文对调查进行了跟进,并将调查结果与漏洞利用数据库的分析进行了比较。读者可以获得有关如何设置分析环境和结果摘要的分步说明。因此,本文不仅涵盖了应用技术,还提供了对网络安全世界的见解。

调查概览

作为欧洲最大的黑客协会,混沌计算机俱乐部为研究该领域流行的编程语言提供了良好的基础。为此,我们于 2021 年 5 月向俱乐部会员发送了在线问卷链接。根据结果,受访者主要使用 Shell 和 Python 进行黑客攻击。调查的另一个重要发现是他们的语言偏好随时间发生了变化。总的来说,参与者并不认为编程语言的选择对于黑客攻击来说是必不可少的。由于它仅针对 CCC 成员,因此调查结果也可能存在偏见。本文的目标是通过分析 Exploit-DB 来验证关键结果。

关于漏洞利用数据库

在 CCC 调查开展的同一年,一个所谓的零日漏洞引起了广泛关注。当时,流行的日志记录框架 Log4j 存在严重漏洞。利用此类安全漏洞的脚本称为漏洞利用。顾名思义,Exploit Database 提供了一个公开的漏洞利用档案和相应的易受攻击的软件。该平台的目标受众是渗透测试人员和安全研究人员。用户可以通过其网站或 Kali Linux 下可用的工具集访问该数据库。

在撰写本文时,来自 9,000 多名作者的 45,000 多个漏洞已在 Exploit-DB(来源)中发布。数据库条目由不同的属性组成,例如漏洞 ID、作者、类型和发布日期。每条记录都与一个文件相关,该文件包含漏洞利用的实际脚本或程序。在Kali下,我们通过执行shell命令exploitdb找到数据库的根目录。除其他外,该目录包含一个带有 Exploit-DB 快照的 CSV 文件 (files_exploits.csv),以及带有实际脚本或程序的子目录 (exploits/)。

本文中描述的比较是在 2023 年 1 月 13 日使用 2022 年 11 月 22 日的数据库快照准备的。快照和分析的源代码都可以在 GitHub 上找到。

设置和数据转换

为了设置分析环境,第一步是克隆 GitHub 项目。所有需要的文件都存放在它的根目录exploits中。该实现基于 Anaconda Python 发行版,该发行版必须预装在客户端计算机上。可以在项目根目录下执行以下命令创建并激活conda环境:

bash 复制代码
1. conda env create -f environment.yml  
2. conda activate exploits

要分析的数据库快照作为 CSV 文件存储在数据文件夹中。它是从 Kali Linux 中检索到的,并使用脚本 execute_transformer 进行了转换。转换时间和快照时间都记录在文件时间戳中。如果需要,可以通过在 Kali shell 中运行以下命令来更新快照:

bash 复制代码
1. cp -p /usr/share/exploitdb/files_exploits.csv data/  
2. python execute_transformer.py

转换脚本提供整理数据和派生附加字段的功能。一项主要任务是提取有关所用编程语言的信息。为此,应用了库 Pygments。虽然它的主要目的是语法高亮显示,但该框架提供了猜测特定文件的编程语言的功能。

除了 Pygments,还有其他语言检测库。本文测试的一个示例是深度学习解决方案 Guesslang。然而,将其集成到 conda 环境中有些困难,处理时间远远超过 Pygments。由于 Guesslang 没有产生优越的结果,因此采用了后一种框架。以下函数将 Pygments 包含到数据转换脚本中:

bash 复制代码
1. import pygments  
2. from pygments.lexers import guess_lexer_for_filename  
3.   
4.   
5. def _parse_exploit_file(file_name):  
6.     with open(file_name, encoding="UTF-8") as file:  
7.         lines = file.readlines()  
8.         text = "\n".join(lines)  
9.   
10.        line_count = len(lines)  
11.   
12.         try:  
13.             lang_guessed = guess_lexer_for_filename(file_name, text).name  
14.         except pygments.util.ClassNotFound:  
15.             lang_guessed = None  
16.   
17.         return line_count, lang_guessed

上面的 Python 代码读取特定文件,计算其行数并使用函数 guess_lexer_for_filename 来检测编程语言。为实现这一点,该框架应用了各种词法分析器,即用于语法分析的类。仅考虑分配给给定文件扩展名的那些词法分析器。有些后缀只存在一类,而其他的选择是不明确的。例如,扩展名"py"显然指定给 Python,而后缀"pl"可以指向 Perl 或 Prolog。最匹配的 Lexer 作为结果返回。它的名字揭示了编程语言并建立了分析的基础。下一节中讨论的发现来自笔记本比较。此外,GitHub 项目提供了进一步的笔记本来探索 Exploit-DB 的特定方面。

结果讨论

CCC 调查的核心问题是参与者在研究前一年使用了哪些编程语言。受访者可以选择多个答案选项。图 2 将 CCC 成员提到的前十种语言与 Exploit-DB 作者使用的语言进行了比较。该图表揭示了相似之处,但也有不同之处。

首先,样本量存在重大差距。总共有 48 名 CCC 成员参与了调查。相比之下,2020/21 年间,900 多位独立作者在 Exploit-DB 中发布了 2,500 多个文件。之所以选择这两年,是因为它们与比较研究的研究时期相吻合。为了避免重复,Exploit-DB 中的每个作者语言组合只计算一次。在研究期间,这导致了 1,134 种语言引用,其中 1,116 种是前十名的一部分。另一方面,CCC 调查的参与者将他们的前十种语言命名为 140 次。

CCC成员主要使用Shell(Bash/Shell/PowerShell)和Python,其次是C、JavaScript、HTML/CSS。所有这些技术也出现在 Exploit-DB 中。一般来说,语言选择有很大的重叠。十分之六的技术出现在图 2 的两个列表中。Python 一直排名第二,显示了它在网络安全领域的受欢迎程度。然而,图表一侧的某些语言并未出现在另一侧。

一个主要区别是 Exploit-DB 中语言的不平衡分布。超过一半的提交是文本文件。在这里,Pygments 指定的名称"Text only"具有误导性。Exploit-DB 中的文本文件通常包含描述,但通常也包含 shell 命令和可能的其他语言脚本。因此,某些技术在结果中的代表性可能不足。抽查表明,这可能适用于 shell 脚本,在 CCC 研究中排名第一。这是我们方法的局限性。Pygments 等框架在评估多语言文件时存在问题。克服这个问题将是后续研究的一个有趣主题。

让我们离开 2020/21 年,看看整个 Exploit-DB 历史。图 3 显示了数据库中所有时间排名前十的语言。如上所述,语言检测依赖于 Pygments,每个作者-语言组合只计算一次。

根据图 3,Exploit-DB 中有史以来排名前十的语言以 Text 居首,其次是 Python、C、HTML 和 Perl。同样,与 CCC 成员的选择有相当大的交集。当然,令人惊讶的是 Prolog 出现在列表的后半部分。可能的原因是扩展名为"pl"的文件分类错误。无论如何,Perl 相对较高的排名是值得注意的,因为该语言根本没有出现在图 2 中。这与 CCC 调查的另一个发现相吻合。在这项研究中,大多数参与者 (77.5%) 报告说他们的语言偏好随时间发生了变化。为了评估这一点,我们可以看一下图 4。该图表直观地显示了在此分析之前的 25 年中 Exploit-DB 中排名前十的语言的百分比份额。每个作者语言组合每年计算一次。结果,我们在研究期间从 9,592 位独立作者那里找到了 16,422 条语言参考。

图 4 显示 Exploit-DB 中文本文件的百分比保持相当稳定。选择 25 年的时间范围是因为在此期间之前的提交数量相对较少。除了持续使用文本之外,图 4 显示了对其他语言的首选项的变化。最明显的是在数据库中从 C 转向 Python。CCC 研究中也提到了一个可能的原因。参与者报告说,他们并不认为编程语言的选择对黑客攻击至关重要。因此,越来越多地使用 Python 可以简单地反映出它近年来普遍流行。因此,随着技术的发展,语言偏好在未来应该会继续改变。例如,引入 Rust 作为 Linux 内核开发的第二语言可能会引发这种转变。这一预测是否属实,将在未来几年见分晓。

结论

总之,本文中的比较揭示了 CCC 成员和 Exploit-DB 作者使用的语言之间存在大量重叠。这两个数据集都证实了 Python 在网络安全领域的流行程度。此外,每个数据集都表明语言偏好随时间的变化。CCC 研究制定了一个可能的原因。参与者并不认为编程语言的选择对于黑客攻击至关重要。按照这一解释,人们应该期望语言偏好会随着技术进步而继续变化。Exploit-DB 分析的一个主要限制与语言检测方法有关。由于多语言文件的问题,某些技术可能未得到充分体现。解决这个问题将是后续研究的一个有趣话题。显然,Exploit-DB 为数据科学家和安全专家提供了丰富的数据集。关于黑客渗透的艺术还有很多东西需要学习。

网络安全学习路线

这是一份网络安全从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

阶段一:基础入门

该阶段学完即可年薪15w+

网络安全导论

渗透测试基础

网络基础

操作系统基础

Web安全基础

数据库基础

编程基础

CTF基础

阶段二:技术进阶(到了这一步你才算入门)

该阶段学完年薪25w+

弱口令与口令爆破

XSS漏洞

CSRF漏洞

SSRF漏洞

XXE漏洞

SQL注入

任意文件操作漏洞

业务逻辑漏洞

阶段三:高阶提升

该阶段学完即可年薪30w+

反序列化漏洞

RCE

综合靶场实操项目

内网渗透

流量分析

日志分析

恶意代码分析

应急响应

实战训练

阶段四:蓝队课程

攻防兼备,年薪收入可以达到40w+

蓝队基础

蓝队进阶

该部分主攻蓝队的防御,即更容易被大家理解的网络安全工程师。

阶段五:面试指南&阶段六:升级内容

需要上述路线图对应的网络安全配套视频、源码以及更多网络安全相关书籍&面试题等内容

同学们可以扫描下方二维码获取哦!

学习教程

第一阶段:零基础入门系列教程

第二阶段:学习书籍

第三阶段:实战文档

尾言

最后,我其实要给部分人泼冷水,因为说实话,上面讲到的资料包获取没有任何的门槛。

但是,我觉得很多人拿到了却并不会去学习。

大部分人的问题看似是"如何行动",其实是"无法开始"。

几乎任何一个领域都是这样,所谓"万事开头难",绝大多数人都卡在第一步,还没开始就自己把自己淘汰出局了。

如果你真的确信自己喜欢网络安全/黑客技术,马上行动起来,比一切都重要

特别声明:

此教程为纯技术分享!本书的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本书的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。!!!

相关推荐
阿里云云原生2 小时前
山石网科×阿里云通义灵码,开启研发“AI智造”新时代
网络·人工智能·阿里云·ai程序员·ai程序员体验官
夜泉_ly2 小时前
MySQL -安装与初识
数据库·mysql
qq_529835353 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New5 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6755 小时前
数据库基础1
数据库
我爱松子鱼5 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo5 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser6 小时前
【SQL】多表查询案例
数据库·sql
Galeoto6 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)7 小时前
MySQL主从架构
服务器·数据库·mysql