在网络安全领域,许多安全框架推荐实施白名单机制,以提高系统的安全性。然而,现实情况往往并非理想。不同的开发者或用户可能拥有本地管理员权限,从而绕过规定的控制。那么,是否有办法监控本地管理员的活动呢?本文将探讨数据源,并介绍如何利用机器学习和自然语言处理技术来识别非标准安装的软件。
有一个定期的批处理作业,用于检索位于不同地区的工作站上安装的软件。大多数软件的显示名称都是本地语言(例如,日语、法语、荷兰语等)。因此,可能会遇到一个情况,即同一软件在白名单中以7种不同的名称显示。更不用说,有成千上万的设备。数据集的属性包括:
能否识别非标准安装的软件呢?想法是,公司中合法使用的软件应该有多于1次的安装,并且软件名称应该不同。在这种情况下,认为使用机器学习来帮助用户分类软件并突出显示任何异常值将是有效的。
自然语言处理(NLP)是人工智能的一个子领域,涉及理解和处理人类语言。随着机器学习的新进展,许多组织开始应用自然语言处理进行翻译、聊天机器人和候选人筛选。TF-IDF是一种统计度量,用于评估一个词在一组文档中的文档中的重要性。这是通过将两个指标相乘来完成的:一个词在文档中出现的次数,以及该词在一组文档中的逆文档频率。
TF-IDF通常用于词提取。然而,在思考它是否也适用于字符提取。想法是探索如何能够应用TF-IDF来提取与软件名称中每个字符相关的特征,通过导出每个字符对软件名称的重要性。
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
# 导入数据集
df = pd.read_csv("your_dataset.csv")
# 提取制造商到列表
field_extracted = df['softwarename']
# 初始化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)
import math
from collections import Counter
# 计算熵的函数
def eta(data, unit='natural'):
base = {
'shannon' : 2.,
'natural' : math.exp(1),
'hartley' : 10.
}
if len(data) <= 1:
return 0
counts = Counter()
for d in data:
counts[d] += 1
ent = 0
probs = [float(c) / len(data) for c in counts.values()]
for p in probs:
if p > 0.:
ent -= p * math.log(p, base[unit])
return ent
entropy = [eta(x) for x in field_extracted]