网络安全中的机器学习-恶意软件安装
监视本地管理员执行的用户活动始终是SOC分析人员和安全专业人员面临的挑战。大多数安全框架都会建议实施白名单机制。
机器学习网络安全
但是,现实世界通常并不理想。您将始终拥有具有本地管理员权限以绕过指定控件的其他开发人员或用户。有没有办法监视本地管理员的活动?
让我们谈谈数据源
机器学习网络安全
数据集外观示例—上面列出的3个条目指的是同一软件
我们有一个常规的批处理作业,以检索安装在不同区域中每个工作站上的软件。安装的大多数软件都以其本地语言显示。(是的,您要命名-可能是日语,法语,荷兰语.....)因此,您会遇到这样的情况,即安装的软件在白名单中引用同一软件时会显示7个不同的名称。更不用说,我们有成千上万的设备。
数据集的属性
主机名-设备的主机名
发布者名称-软件发布者
软件名称-本地语言的软件名称和不同的版本号
有没有办法可以识别非标准安装?
我的想法是公司中使用的合法软件-应该安装多个软件,并且软件名称应该不同。在这种情况下,我相信使用机器学习来帮助用户对软件进行分类并突出显示任何异常值将是有效的。
使用术语频率-反向文档频率(TF-IDF)进行字符处理
自然语言处理(NLP)是人工智能的一个子领域,用于理解和处理人类语言。鉴于机器学习的新进展,许多组织已开始将自然语言处理应用于翻译,聊天机器人和候选筛选。
TF-IDF是一种统计量度,用于评估单词与文档集中的文档的相关性。这可以通过乘以两个度量来完成:一个单词在文档中出现多少次,以及单词在一组文档中的反向文档出现频率。
TF-IDF通常用于单词提取。但是,我在考虑它是否也可以应用于字符提取。目的是探索通过将每个字符的重要性导出到软件名称中,我们如何能够很好地应用TF-IDF来提取与软件名称中每个字符相关的功能。
下面的脚本示例说明了如何将TF-IDF应用于数据集中的软件名称字段。
将熊猫作为pd导入
从sklearn.feature_extraction.text导入TfidfVectorizer #导入数据集
df = pd.read_csv(“您的数据集”)#将制造商提取到列表中
field_extracted = df ['softwarename'] #初始化TF-IDF
vectorizer = TfidfVectorizer(analyzer ='char')
向量= vectorizer.fit_transform(field_extracted)
feature_names = vectorizer.get_feature_names()
密集= vectors.todense()
densitylist = density.tolist()
结果= pd.DataFrame(密集列表,列=特征名称)
结果片段:
机器学习网络安全
上面的TF-IDF脚本的结果(混合使用多种语言,例如韩语,中文)
在上图中,您可以看到进行了计算以评估每个字符在软件名称上的“重要性”。这也可以解释为在每个软件名称上指定的char的“很多”如何可用。这样,您就可以统计出每个“软件名称”的特征,并且我们可以将这些特征放入您选择的机器学习模型中。
我提取的其他功能相信对模型也将有意义:
软件名称的熵
导入数学
从集合中导入计数器#计算熵的功能
def eta(data,unit ='natural'):
基本= {
'香农':2.,
'自然':math.exp(1),
哈特利:10。
}如果len(data)<= 1:在数据中
返回0个计数= d的Counter():
counts [d] + = 1 ent = 0概率= [counts.values()中c的float(c)/ len(data)
对于概率中的p:
如果p> 0 。:
ent-= p * math.log(p,base [unit])返回ent熵= [field_extracted中x的eta(x)]
空格比率—软件名称具有多少个空格
元音比率—软件名称具有多少个元音(aeiou)
最后,我在上面列出了带有标签的这些功能,可以与randomtreeforest classifier一起运行。您可以选择任何分类器,只要它能给您满意的结果即可。
题库