基于shell命令的内部攻击检测

2021-01-27 03:42陈明帅吴克河
计算机与现代化 2021年1期
关键词:命令样本算法

陈明帅,吴克河

(华北电力大学(北京)控制与计算机工程学院,北京 102206)

0 引 言

随着信息技术的不断发展,信息系统面临着各种来自外部和内部的威胁,人们要关注的不仅仅是来自系统外部的攻击,同样要提防来自系统内部的隐患。

内部威胁[1]是指内部威胁攻击者利用合法获得的访问权对组织信息系统中信息的机密性、完整性以及可用性造成负面影响的行为。虽然企业信息系统受到内部威胁数量上远不及黑客造成的外部攻击,但由于其具有隐蔽性强、危害性大、难于抵御、难管理和攻击主体、攻击手段多元化的特点,造成的损失和危害性相对外部威胁更大[2]。

内部攻击是信息系统内部威胁的主要来源,根据Cybersecurity Insider发布的内部威胁安全报告《2019_Insider-Threat-Report_Nucleus_Final》,相比内部人员主观恶意泄露企业数据,多数企业更担心的是由于员工工作疏忽导致的数据泄露。报告显示过去的12个月里,系统内部攻击变得更加频繁,具有系统操作权限的企业IT员工对组织构成的内部安全风险最大,其次才是承包商、普通雇员和享有特权的业务用户。这份报告由网络安全业内人士(网络安全专业人士的40万成员社区)制作,其中60%的人在过去12个月内经历过一次或多次内部攻击。当攻击来自组织内部、来自受信任和授权的用户时,保护组织免受损失将变得更具挑战性。很难确定用户是仅仅在执行他们的工作功能,还是实际上在做一些恶意或疏忽的事情。对付内部攻击最常用的策略是对用户进行培训,以解决由于人为错误导致的内部威胁,以及识别恶意内部人员经常出现的异常和可疑行为。其次是专门的信息安全治理程序,系统地处理内部攻击和用户活动监视,并与背景检查相结合。

根据分析,导致内部攻击的最关键因素是员工缺乏意识和培训。另一个关键因素是可以访问敏感数据的设备增加,使得数据更容易地离开传统的边界。由于内部人员通常对敏感数据和应用程序拥有更高的访问权限,因此检测恶意内部人员活动变得越来越困难。数据共享应用程序的激增和更多的数据离开传统的网络边界,使得成功的内部攻击的条件变得更加难以控制。值得注意的是,解决内部威胁的最大障碍并非是缺乏相应的技术,而是人员缺乏培训和专业知识。其他重要的障碍包括部门之间缺乏协作和缺乏预算。

1 相关研究

内部攻击最主要原因就是内部用户的恶意操作,为了检测用户的恶意操作,通常需要先对用户行为进行分析,企业为了系统安全,都会采用审计日志等技术来追踪用户的一举一动。通过分析用户行为,可以确立用户的正常行为基线。使用正常行为基线来判断用户操作是否偏离正常操作行为,从而对恶意行为进行预警提示。国内外针对内部攻击的检测主要结合了机器学习、数据挖掘、神经网络、用户行为分析、数据库审计和日志技术等相关技术。2001年Schonlau等人[3]采用不同的统计学方法对伪装攻击进行检测和对比。随后该团队构造了一个公开的检测伪装者攻击的数据集SEA,该数据被广泛用于内部伪装者威胁检测研究[4]。Maxion等人[5-6]采用贝叶斯分类算法,改进了检测结果。Yung等人[7]提出了一种自洽的朴素贝叶斯方法改进了之前方法[3,5]的局限性。Kim等人[8]研究了基于支持向量机的伪装攻击方法,该方法检测效率较高,但对数据变化的适应性不强。汤雨欢等人[9]提出了基于机器学习和自然语言处理的方法,采用了随机森林和多层感知机方法,获得了代价更小的检测效果。田新广等人[10]提出了基于多种行为模式并行挖掘和多门限联合判决的检测模型,该模型在不降低性能的前提下提高了检测准确度。王一丰等人[11]提出了一种针对小样本条件下的内部威胁检测框架,取得了较好的检测效果,但负例数据的生成算法仍然存在一定的局限性。Wu等人[12]使用关联规则挖掘来对内部攻击进行检测,取得了良好的表现。田原[13]基于CERT数据集[14]使用长短时记忆网络的分类算法取得了较好的检测效果。肖喜等人[15]提出了一种基于多阶Markov链的攻击检测方法,仅通过状态转移概率对用户行为判决。

本研究专注于系统内部的攻击检测,基于内部攻击数据集SEA提出几种机器学习的检测方法。使用词袋、TF-IDF、N-Gram、词汇表模型等方法对命令样本进行多维度特征的提取,然后分别使用XGBoost算法、多层感知机以及隐式马尔可夫算法训练样本数据来构建分类器,最后用测试集样本来验证效果。通过精确率、召回率、F1值3个指标来对检测效果进行评价。

2 内部攻击检测模型

由于每个用户在操作习惯、工作内容等方面的不同,对系统操作的命令会产生一定的行为特征。通过将用户的历史行为特征构建成检测模型,使得异常行为检测成为了可能。通过审计和日志技术可以收集到系统用户在UNIX环境下工作时的shell命令。因此,检测模型的第一步就是收集数据,接着对命令样本进行特征提取,然后使用训练集来训练相关的机器学习模型,最后用测试集来验证训练好的模型的检测效果。图1是内部攻击检测模型的整体流程。

图1 内部攻击检测模型

2.1 数据集

使用机器学习的检测模型十分依赖数据集,为了方便对内部攻击检测方法进行研究,许多研究人员在模拟环境下构造内部攻击的实现场景,收集实验环境下的用户行为数据,并且公开供所有研究人员使用。由于现有的公开数据集多源于实验人员在模拟环境下生成,因此可能与真实场景下存在一定的差异。目前主要的公开数据集有:KDD99[16]、SEA[17]、WUIL[18]与CERT-IT[13]。根据实验需求,本文使用了SEA数据集。

SEA数据集中的数据来自于UNIX系统记录的行为日志,其中包含了70多个系统用户的操作命令。数据集中记录了每个用户日常操作的15000条命令。为了模拟内部攻击的情况,研究人员首先随机抽取了50个正常用户,在其余的用户中,通过将模拟命令插入到正常命令块中来模拟内部攻击者。SEA数据集的文件格式如图2所示。

图2 SEA数据集格式

将每个用户15000条操作命令划分成150个命令块,前50个命令块为正常操作,后100个命令块随机插入了恶意操作命令。恶意指令占总测试集的1%,其分布也存在一定的规律,若当前命令块具有恶意命令,则相邻命令块含有恶意操作命令的概率为80%[19]。可以看出SEA数据集模拟了具有会话性质的关联性的攻击行为。此外,SEA数据集中的异常操作数据比较少,如果采用常规的随机划分的方法,非常容易出现训练集中全是白样本而没有黑样本的情况,因此为了更好地模拟真实情况,本文在划分训练集和测试集的时候进行特别处理。

用户的操作命令属于文本类数据集,本文先使用最常见的词袋模型对文本特征进行提取,对于每个用户的操作命令,将其看作单词来进行处理。在SEA数据集中,为了更好地体现管理员操作命令的连续性,把连续的100条操作命令看作是一个操作序列。每个用户记录了15000条操作命令,可以划分成150个操作序列。

在SEA数据集的标记文件中,记录了每个用户150个操作序列操作情况的标记,1表示为异常操作,0表示为正常操作,标记的单位为操作序列,在150个操作序列中,如果一个操作序列存在异常操作命令,就会被标记成异常操作序列。相反,如果连续100个操作命令都是正常操作,该操作序列便会标记为0。需要说明的是,SEA数据集中,每个用户的前50个操作序列均为正常操作序列。因此标记文件只标记了从101至150的操作序列。50列代表了50个用户的记录,100行代表了所记录的每个用户的100个操作序列情况。因此,需要先将标记文件的前50行标记为0。

像许多数据集一样,SEA数据集中的异常操作样本比较少,如果随机分配训练集和测试集,非常容易出现训练集没有异常操作样本的情况。本文采取一个折中的办法:手工指定训练集和测试集,通过设置一个变量train_size来控制数据集的分配。

2.2 特征提取

本文使用3种特征提取方法:词袋+TF-IDF、词袋+N-Gram、词汇表。

考虑到命令块中每个命令出现的频率特征,先对数据进行词袋化处理。使用词汇表对句子中的单词依次进行编码,词袋的特征空间定义为词汇表(vocabulary),然后统计所有的命令及其出现的次数(频数)。词袋模型只统计了命令块中的每个命令出现的频率,命令块中每个命令的权重只与命令出现的频率相关,没考虑词法和语序的问题,不能体现命令样本的序列特征。如果直接将统计词频后的n维特征作为输入,就会存在一些问题,例如一个命令块中多次出现”sh”命令,就会使命令块与”sh”这个特征关系更“紧密”,但事实上“sh”是一个非常普遍的操作命令,几乎所有命令块都会用到,因此虽然它出现的频率高,但它对于区分正常操作和异常操作的重要程度却很低,如果本文的向量化特征仅仅使用词频就无法表示这一点。因此本文采用以下2种方法作进一步处理:

1)TF-IDF。

TF-IDF[20]是文本处理领域中一种特征提取方法,叫做词频与逆向文件频率模型(Term Frequency-Inverse Document Frequency,TF-IDF)。TF是词频(Term Frequency),表示单词在一个文本中出现的频率。IDF为逆向文件频率(Inverse Document Frequency),反应了一个词在所有文本中的频率。上面提到的“sh”命令,如果这个命令出现在很多个命令块中,那么它的IDF值就会比较低,反过来,如果一个命令在别的命令块中比较少出现,那么它的IDF值就会比较高。一种极端情况是,如果一个命令在所有命令块中都存在,那么它的IDF值为0。使用TF-IDF可以一定程度上提高分类算法的性能。

TF-IDF计算公式:TF-IDF=TF×IDF。

在命令块dj中的命令ti的词频表示为:

(1)

其中,ni,j是命令ti在命令块dj中的出现次数,分母则是在命令块dj中所有命令出现的次数之和。

(2)

其中,|D|是所有命令块数,分母是包含命令ti的所有命令块数。表示如果用户在一个命令块中使用命令ti的频率越低,则idfi值越大,该命令具有更好的区分命令块能力。

2)N-Gram。

N-Gram可以将连续的字符串转换为一定长度的高维特征向量,基于一定的语料库,N-Gram可以用来评估2个字符串之间的差异程度,通常用在自然语言处理中。SEA数据集中,每个shell命令可以当作一个单词,连续n个shell命令当作一个N-Gram,一个命令块表示为多个N-Gram的组合。

如操作序列“cpp sh xrdb mkpts”:

2-Gram处理后:(cpp sh)(xrdb mkpts)

3-Gram处理后:(cpp sh xrdb)(sh xrdb mkpts)

2-Gram和3-Gram同时处理后:(cpp sh)(xrdb mkpts)(cpp sh xrdb)(sh xrdb mkpts)

N-Gram的优势在于短语可以比单词携带更多的特征信息,比较好地体现n个shell命令之间的联系,在一定程度上表现出系统管理员操作系统命令时的习惯。考虑到系统管理员操作命令的一般关联性,N设为[2,4],即同时使用2-Gram、3-Gram、4-Gram。

前面的特征提取方式采用的都是监督学习的方式,基于有标记的黑白训练集进行数据挖掘,但是实际情况往往是,人们很容易获取大量的正常操作数据,而恶意操作数据却是非常少的,因此本文再尝试使用隐式马尔可夫算法,特征提取词汇表,完全基于SEA数据集的白样本,即用前50组正常操作数据进行训练,建立正常情况下的行为基线,然后通过异常识别,对异常的操作进行检测。

当测试命令样本与正常行为基线相似度高于阈值T时,认为是正常操作,否则为异常操作。为了找到合适的阈值T,应首先设置T的范围,使之在范围内递增,然后计算不同T值下对精确率和召回率的影响,本文通过折线图的方式来直观地展现变化趋势,以找到最合适的T值。精确率与召回率变化趋势如图3所示。

图3中实线为精确率,虚线为召回率,综合考虑到召回率和精确率,本文最终取T值为525。

图3 精确率与召回率变化趋势

2.3 机器学习算法

2.3.1 XGBoost

XGBoost[21]是近几年流行起来的一种分类算法,是由陈天奇最初开发的一个库,它是一个在Gradient boosting框架下实现的机器学习算法。XBGBoost综合了梯度提升算法的众多工作,并且做了大量的优化,既可用于分类也可用于回归问题中,已经在大量的机器学习竞赛中被广泛认可。

2.3.2 隐式马尔可夫

隐式马尔可夫是一种比较适合处理时序数据的算法,常用于挖掘数据的前后关系,在语音识别和自然语言处理领域应用较多。对于管理员操作命令这种具有先后顺序的数据,比较适合此算法。

2.3.3 多层感知机

多层感知机是一种前馈人工神经网络[22],前馈是指每一层的输出都直接作为下一层的输入。最简单的多层感知机有3层结构,包括输入层、中间隐藏层和输出层。通过中间一到多个隐藏层的加入,多层感知机可以用来实现非线性的判别,用来解决分类和回归问题。

3 实验与结果分析

3.1 评价指标

本实验中采用精确率(precision)、召回率(recall)、F1值3个评价指标评价分类器的分类性能:

(3)

(4)

(5)

公式(3)~公式(5)中,precision表示在所有检测为异常操作的样本中,实际为异常操作的概率。recall表示在所有实际为异常操作的样本中,被检测成功的概率。F1值综合考虑了精确率和召回率。

3.2 实验结果与分析

表1是内部攻击检测分类表。T表示信息系统管理员产生的正常操作,M表示信息系统管理员产生的异常操作,具有内部攻击特征。

表1 内部承击检测分类表

本文采用精确率、召回率和F1值作为检测模型的评价指标。实验结果如表2所示。

表2 实验结果

从表2可以看出,词袋和N-Gram模型结合XGBoost效果最好,精确率达到了85.7%,召回率达到了100%,F1值达到了0.923。结果表明,该方法能够准确检测出内部伪装攻击。词袋和N-Gram模型结合MLP也产生了不错的效果,精确率达到了100%,召回率达到了83.3%,F1值达到了0.909。值得说明的是,词汇表+隐式马尔可夫模型的检测结果和其他模型比较起来并没有很好的成绩,但是它仅使用了前50组的正常操作数据进行训练,在没有人为指定黑色样本的情况下依然能够检测出一部分异常操作命令,这在实际的应用环境中非常有意义。

4 结束语

内部攻击主要来自于内部用户的恶意操作行为,为了对来自系统内部的攻击进行检测,本文基于SEA数据集,采用了多个检测模型,实验过程中不同检测模型表现出不同的检测效果,其中,词袋+N-Gram特征结合XGBoost算法效果最好。本文工作主要依赖于操作命令的字符特征,而系统用户的行为特征往往不止于操作命令的样本特征,因此存在一定的局限性,如何获取更多维度的用户行为特征是接下来需要研究的一个方向。

随着企业信息化的发展,内部攻击已经成了一个普遍的安全问题。系统内部攻击的透明性、隐蔽性和高危性给检测工作带来了巨大的挑战,同时也促使研究人员积极地研究新的更有效的防护方法。此外,除了对内部攻击进行检测,如何从根源上减少恶意行为的发生也是值得关注的一个问题。

猜你喜欢
命令样本算法
只听主人的命令
用样本估计总体复习点拨
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
进位加法的两种算法
推动医改的“直销样本”
移防命令下达后
随机微分方程的样本Lyapunov二次型估计
一种改进的整周模糊度去相关算法
这是人民的命令