Press "Enter" to skip to content

网络安全中的机器学习——恶意软件安装

作者|Elaine Hung 编译|Flin 来源|analyticsvidhya

 

介绍

 

监视本地管理员执行的用户活动始终是SOC分析人员和安全专业人员面临的挑战。大多数安全框架都会建议实施白名单机制。

 

 

但是,现实世界通常并不理想。始终有不同的开发人员或用户拥有本地管理员权限来绕过指定的控件。有没有办法监视本地管理员的活动?

 

让我们谈谈数据源

 

 

数据集外观示例—上面列出的3个条目指的是同一软件

 

我们有一个常规的批处理作业,以检索安装在不同区域中的每个工作站上的软件。安装的大多数软件都以其本地语言显示。(是的,你可以对其命名——可能是日语,法语,荷兰语…..)

 

因此,你会遇到这样的情况,即安装的软件在白名单中引用同一软件时会显示7个不同的名称。更不用说,我们有成千上万的设备。

 

数据集的属性

Hostname 设备的主机名
Publisher Name 软件发布者
Software Name 本地语言的软件名称和不同的版本号

有没有办法可以识别非标准安装?

 

我的想法是公司中使用的合法软件——应该安装多个软件,并且软件名称应该不同。在这种情况下,我相信使用机器学习来帮助用户对软件进行分类并突出显示任何异常值将是有效的。

 

使用术语频率-反文档频率(TF-IDF)的字符处理

 

自然语言处理(NLP)是人工智能的一个子领域,用于理解和处理人类语言。鉴于机器学习的新进展,许多组织已开始将自然语言处理应用于翻译,聊天机器人和候选筛选。

 

TF-IDF是一种统计量度,用于评估单词与文档集合中的文档的相关性。这可以通过乘以两个度量来完成:一个单词在文档中出现多少次,以及单词在一组文档中的反文档出现频率。

 

TF-IDF通常用于单词提取。但是,我在考虑它是否也可以应用于字符提取。目的是探索通过将每个字符的重要性导出到软件名称中,我们如何能够很好地应用TF-IDF来提取与软件名称中每个字符相关的功能。

 

下面的脚本示例说明了如何将TF-IDF应用于数据集中的软件名称字段。

 

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer# Import the dataset 
df=pd.read_csv("your dataset") # Extract the Manufacturer into List 
field_extracted = df['softwarename']# initialize the TF-IDF 
vectorizer = TfidfVectorizer(analyzer='char')
vectors = vectorizer.fit_transform(field_extracted)
feature_names = vectorizer.get_feature_names()
dense = vectors.todense()
denselist = dense.tolist()
result = pd.DataFrame(denselist, columns=feature_names)

 

结果片段:

 

 

上述TF-IDF脚本的结果(混合了不同语言,如韩语、中文)

 

在上面的图表中,你可以看到执行了一个计算来评估每个字符在软件名称上的“重要性”。这也可以解释为每个软件名上有多少个指定的字符可用。这样,你就可以统计地呈现每个“软件名称”的特征,我们可以将这些特征放入你选择的机器学习模型中。

 

我提取的其他功能相信对模型也有帮助:

软件名称的熵

import math
from collections import Counter# Function of calculating Entropy 
def eta(data, unit='natural'):
    base = {
        'shannon' : 2.,
        'natural' : math.exp(1),
        'hartley' : 10.
    }if len(data) <= 1:
        return 0counts = Counter()for d in data:
        counts[d] += 1ent = 0probs = [float(c) / len(data) for c in counts.values()]
    for p in probs:
        if p > 0.:
            ent -= p * math.log(p, base[unit])return ententropy  = [eta(x) for x in field_extracted]

 

空格比率—软件名称具有多少个空格

 

元音比率—软件名称具有多少个元音(aeiou)

 

最后,我将上面列出的这些特性与 randomtreeforest分类器 一起运行。你可以选择任何你想要的分类器,只要它能给你一个满意的结果。

 

谢谢阅读!

 

原文链接: https://www.analyticsvidhya.c…

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注