论文复现_Ransomware Detection using Random Forest Technique

本文提出了一种新的勒索软件检测方法,采用静态分析,通过Frequent Pattern Mining从原始字节中提取特征,使用 Gain Ratio 进行特征选择,确定1000个特征为最优。利用随机森林分类器,在树数为100、种子数为1时,实现了97.74%的检测准确率。相较于动态分析,此方法减少了处理时间和复杂性,但样本预处理中特征选取的限制和特征选择方法的优化是未来研究方向。
摘要由CSDN通过智能技术生成
论文名称发表时间发表期刊期刊等级研究单位
Ransomware Detection using Random Forest Technique2020年ICT ExpressSCI 3区纳赫林大学信息工程学院

0. 概述

如今,勒索软件已成为计算世界的严重威胁,需要立即考虑以避免经济和道德勒索。因此,确实需要一种能够检测和阻止此类攻击的新方法。以往的检测方法大多采用动态分析技术,过程复杂。本研究提出了一种基于静态分析的勒索软件检测新方法。该方法的显着特点是通过使用Frequent Pattern Mining直接从原始字节中提取特征来省去反汇编过程,从而显着提高了检测速度。使用Gain Ratio技术进行特征选择,表明 1000 个特征是检测过程的最佳数量。当前的研究涉及使用随机森林分类器,全面分析树和种子数量对勒索软件检测的影响。结果表明,树数为 100、种子数为 1 时,在耗时和准确度方面取得了最佳结果。实验评估表明,该方法对于勒索软件的检测准确率可以达到97.74%。

1. 相关工作

勒索软件检测技术主要分为三类,分别是基于静态特征的勒索软件检测、基于动态特征的勒索软件检测、基于混合特征的勒索软件检测。

基于静态特征:Zhang等人从勒索软件中提取操作码(opcode)序列特征,并使用五种机器学习技术对勒索软件进行检测。Baldwin等人从勒索软件中提取操作码(opcode)序列特征,并使用SVM分类器对勒索软件进行分类

基于动态特征:(1)Takeuchi等人从勒索软件中提取API调用特征,并使用SVM分类器进行勒索软件检测。(2)Vinayakumar等人从勒索软件中提取API调用特征,并使用MLPP分类器对勒索软件进行检测。(3)Kharraz等人构建名为UNVEIL的动态分析系统进行勒索软件检测。(4)Homayoun等人从勒索软件的活动日志中提取特征,并使用MLP、Bagging、Random Forest、J48进行勒索软件检测。(5)Wecksten等人分析了四种类型的加密勒索软件的行为,证明勒索软件攻击本质上依赖于vssadmin.exe软件,用户应该避免使用该软件。(6)Tseng等人从勒索软件中提取流量特征,并使用深度学校的方法进行勒索软件检测。(7)Chen等人通过GAN自动生成勒索软件的动态特征。

基于动态特征的勒索软件检测虽然具有较高的检测精度,但这种分析需要相对较长的时间来进行前期的处理和分析,存在实时性方面的问题。同时,如果勒索软件对环境进行指纹识别,勒索软件分析的有效性也将大打折扣。

基于混合特征:(1)在三个不同层面(汇编、函数调用库)上运用动态分析和静态分析,设计名为CRSTATIC工具实现勒索软件的检测。(2)Shaukat等人使用动态和静态分析的混合系统,结合机器学习技术对勒索软件进行检测。(3)Ferrante等人提出一种基于混合特征的Android勒索软件检测方法。

2. 研究内容

研究内容主要由三部分组成,分别是预处理部分、特征选择部分、样本分类部分。其中,预处理部分需要进行特征提取、频率模式挖掘、规范化三个步骤,从原始良性软件和勒索软件中提取特征;特征选择部分使用增益比技术进一步提取上一步特征中的关键特征;样本分类部分基于样本特征,通过随机森林进行勒索软件检测。

图1. 主要研究内容

3. 具体实现

样本收集

需要收集足够多的勒索软件样本与良性软件样本,勒索软件样本包括34个勒索软件家族(AvosLocker、BlackBasta、BlackCat等)的279个勒索软件,良性软件样本包含970各种常用软件,需要注意的是这些软件均为PE格式文件。具体来说,勒索软件样本的收集包括四个步骤,分别是勒索软件威胁情报收集、勒索软件威胁情报处理、勒索软件样本下载、勒索软件样本清洗,如图1所示。良性软件的收集直接从DikeDataset抽取1000个良性软件样本,并筛选出970个PE格式的良性软件样本。

图2. 勒索软件样本收集

针对所有收集到的样本,分析PE文件IMAGE_FILE_HEADER中Machine信息,并统计所有样本的指令集信息,发现绝大部分样本均为x86指令集。

file.seek(0x3C)
pe_offset = int.from_bytes(file.read(4), 'little')
file.seek(pe_offset + 0x04)
machine_type = int.from_bytes(file.read(2), 'little')

if machine_type == 0x014C:
    return "x86"
elif machine_type == 0x0200:
    return "Itanium"
elif machine_type == 0x8664:
    return "x64"
else:
    return "Unknown machine type"

样本预处理

特征提取:首先将1249个PE文件(勒索软件和良性软件)转换为字节流,之后通过下面的方法从PE文件中提取4-gram特征,然后统计每个特征出现的次数,最后选取特征频率较高的前10000个特征作为原始特征集。

def generate_4gram_features(byte_stream):
    features = []

    byte_array = np.frombuffer(byte_stream, dtype=np.uint8)

    length = byte_array.shape[0]

    window_size = 4

    for i in range(length - window_size + 1):

        window = byte_array[i:i + window_size]

        window_value = 0
        for j in range(window_size):
            window_value += window[j] * (256 ** (window_size - j - 1))

        features.append(window_value)

    return features

频率模式挖掘:首先针对每个样本(勒索软件或良性软件)通过上面提到的方法提取4-gram特征,之后通过下面的方法提取对应样本的特征,最后收集所有样本的特征生成原始数据集。

def generate_feature_count_row(all_features, features):

    col_names = all_features.iloc[:, 0].tolist()

    data = {col: 0 for col in col_names}

    col_counts = Counter(features)

    for key in data.keys():
        count = col_counts.get(key, 0)
        data[key] = count

    return data

规范化:对样本中的非标签值进行归一化处理。

scaler = MinMaxScaler()

normalized_df = normalization_df.apply(lambda x: pd.Series(scaler.fit_transform(x.values.reshape(-1, 1)).flatten()), axis=1)

normalized_df.columns = normalization_df.columns
normalized_df['Label'] = normalization_df['Label']

样本特征选择

通过sklearn对原始数据集中的特征进行特征选择

selector = SelectKBest(score_func=mutual_info_classif, k=1000)
X_selected = selector.fit_transform(X, y)

selected_feature_indices = selector.get_support(indices=True)

selected_features_df = pd.DataFrame(X_selected, columns=X.columns[selected_feature_indices])

selected_features_df['Label'] = y

print(selected_features_df)

勒索软件检测

通过随机森林进行勒索软件检测,检测精度为98.4%,实验表明该方法可以实现勒索软件的检测。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
rf_classifier.fit(X_train, y_train)

y_pred = rf_classifier.predict(X_test)

confusion_mat = confusion_matrix(y_test, y_pred)
confusion_df = pd.DataFrame(confusion_mat, index=['Actual 0', 'Actual 1'], columns=['Predicted 0', 'Predicted 1'])


print(confusion_df)

4. 存在问题

问题1:在样本预处理过程中,我们通过从4-gram特征中选取特征频率较高的前10000个特征作为原始特征集。这样做的主要原因是,4-gram特征特征有30000000之多,我们现在的机器无法有效处理如此多的特征。

问题2:在特征选择和分类模型构建的过程中,直接使用现有的方法,是否可以选择其他方法以提升勒索软件检测的性能。

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
Ransomware文件解密工具是一种用于恢复被勒索软件(ransomware)加密的文件的工具。勒索软件是一种恶意软件,它会在用户的计算机上加密文件,并要求用户支付赎金才能解密文件。 Ransomware文件解密工具的目的是为了帮助受害者恢复被加密的文件,而无需支付赎金给黑客。这些工具通常是由计算机安全专家或安全软件公司开发的。它们利用已知的加密算法和漏洞来解密受到攻击的文件,并恢复其原始状态。 使用Ransomware文件解密工具需要按照特定的步骤进行操作。首先,需要下载和安装相应的解密工具。然后,用户需要提供被加密的文件以及加密文件时生成的密钥或密码。解密工具会使用这些信息来识别加密算法和解密文件。 但需要注意的是,并非所有的勒索软件都有相应的解密工具。有些勒索软件使用的加密算法非常复杂,目前还没有有效的解密方法。此外,黑客还不断更新他们的勒索软件,以适应最新的安全防御技术。因此,使用Ransomware文件解密工具并不能保证所有文件都能被成功解密。 为了预防勒索软件的攻击,用户应该注意保护自己的计算机和个人文件。这包括定期备份重要文件,保持操作系统和安全软件的更新,避免点击可疑的链接或下载未知的附件,以及使用强密码来保护个人账户。 总之,Ransomware文件解密工具可以帮助恢复被勒索软件加密的文件,但成功率可能有限。用户应该采取预防措施,以减少勒索软件的风险。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值