刘毓彬,叶传奇,张少博,朱溪洋,秦梦雯,刘晓雨
(河南科技大学软件学院,洛阳 471003)
互联网的快速发展给人们带来了巨大的便利,但伴随着互联网行业发展而滋生的恶意下载捆绑软件的问题也已困扰互联网用户十余年[1]。在2022年的315消费者晚会曝光多个P2P类型恶意捆绑软件下载器网站后,该问题成为了社会关注的焦点。
对于含有恶意代码软件的检查,传统的防护方案是使用Sandbox 技术,正如张灿岩[2]所提出的:在含有恶意代码软件侵入用户计算机后,使用API Hook 技术,防护软件将可能的恶意软件放入沙箱隔离运行,其方法具有普适性,但也存在系统侵入性过大,资源开销较大等缺点。本系统旨在将含有恶意代码的软件主要拦截在用户下载操作之前,并对少量逃避拦截的恶意下载捆绑软件使用特征值匹配、云查杀[3]等技术实现清除,以达到减轻系统负担与减小系统侵入性的目的。用户在应用本系统后有利于减轻信息的认知压力与电脑的使用压力。
功能输入:当前用户计算机运行中所有浏览器的数据库路径
功能输出:用户浏览网址信息的数据库最新记录
Step1:全局监听,等待用户点击
Step2:获取浏览器进程
Step3:获取浏览器历史记录数据库文件
根据文件修改日期新旧确定用户文件存放位置,拼接数据库存放路径;
以火狐浏览器数据库路径为例:
Step4:读取历史记录数据库数据
根据文件后缀名判断数据库类型,并建立相应连接
以主流浏览器使用的sqlite3数据库为例:
根据不同浏览器选择不同的查询语句,获取到历史记录。
Step5:对数据库中历史记录判断新旧
Step6:功能一次执行结束,等待用户再次点击激活
Step1:通过URL获取相应页面
例:Jsoup.connect(HTMLUrl).get();
Step2:使用正则表达式进行数据清洗
去除script的正则表达式匹配语句:
去除style样式的正则表达式匹配语句:
去除HTML标签的正则表达式匹配语句:
去除特殊字符的正则表达式匹配语句:
去除转义的正则表达式匹配语句:
将多个空格替换成1个空格:
得到以空格为分隔符的页面文本数据
Step3:使用基于 mmseg 算法的 Jcseg API 进行中文分词与词义分类[4]
Step4:将HashMap中的词语按词频排序
根据HashMap 中值的大小,对HashMap 使用快速排序得到词频由高到低的数组;
Step5:关键词得分
选取数组中出现次数大于(最高次数+最低次数)/2的词组作为关键词进行计分,公式如下:
注:①“词组词频总数”:HashMap 中所有词组出现次数之和;n为常数,是平衡因子,用于防止因词组词频总数(即页面文字内容总量)过多或过少导致的失衡;②“数据库反馈因子”:查询数据库,返回数据库中词组标记的基础得分,得分区间为[-1,1]。
Step6:页面内容总得分
哈希值特征码的构造主要由节的大小加上节的哈希值组成,程序执行时会主动扫描文件的节头,判断是不是PE 文件,如果是,则打开文件,以文件头的字节流构造特征码,并与病毒库中的数据进行匹配,如果匹配成功则返回病毒名称,失败则返回空。同时,本功能的病毒库以特征码的头一个字符为标准划分为0~9、A~G 十七个子病毒库,在病毒扫描时,以特征码头一个字符为准跳到对应的子病毒库中进行数据匹配,减少了扫描数据的数量,从而节约了病毒扫描所需的时间。
MD5 信息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128 位(16 字节)的散列值(hash value),用于确保信息传输完整一致。理论上,任意两个文件、字符串不会有相同的MD5 值[5]。因此我们建立了以MD5 为基础的病毒特征码数据库,再对用户电脑全盘扫描使获取用户系统文件的MD5 特征码与病毒特征码库比对,进行病毒文件的查杀。工作流程如图1所示。
图1 MD5特征值匹配流程
云查杀技术依赖于云计算技术,是将安全引擎和病毒木马特征库放在服务器端,将主要的计算、查询等资源开销较大的操作交由服务器处理,从而减轻用户个人计算机的资源占用负担,并获取更快的查杀速度、更短的反映时间以及更优秀的查杀效果[6]。
功能需求:检查用户浏览的网站是否安全,阻止用户浏览包含恶意捆绑软件下载连接的网站。
功能核心:获取当前用户浏览的网页信息;数据库信息筛选;网页文本内容分析。
功能实现:首先,全局监听用户点击,用户每次点击后获取当前运行中的全部进程,筛选出所有浏览器进程,根据运行中的浏览器名称获取到其本地数据库路径。将数据库文件拷贝至本系统指定目录中,以防止浏览器的写与本系统的读并行执行造成的死锁问题。
然后,浏览器数据库记录新历史数据时具有‘只会将首次访问的页面记录到数据库中,若非首次访问,数据库则只更新相关记录的访问次数与最后访问时间’的特性。本功能利用该特性获取到当前用户首次浏览的页面。用户首次点击后,程序记录到用户上次使用时最后一条历史记录的ID 值并将其作为标号,当用户第二次点击后,获取到的当前最新历史记录的ID 值与标号之间的差额记录数列即为用户两次点击之间首次访问的页面,更新标号后循环往复,从而获取到用户的浏览信息。
再次,获取到新历史记录后,程序将对新记录逐条进行安全性初筛。程序根据用户选择的安全防护等级执行不同的初筛策略:用户选择低等级防护时,程序只进行黑名单域名匹配;用户选择中等级(默认等级)防护时,首先进行黑名单全域名匹配,若页面不为黑名单中页面,则采用了Jaro-Winkler Distance 与LevenshteinDistance 两种编辑距离[7]进行黑名单域名相似度匹配,同时进行页面名称特征词匹配,将各项匹配结果分别加权参与安全性评判,当值达到阈值时,认为该记录可能含有危险性需要进一步分析;用户选择高等级防护时,首先进行黑名单全域名匹配,若页面不为黑名单中页面,首先进行白名单特征匹配,特征值匹配结果为1(匹配结果范围为0~1),即白名单有该条记录时返回页面安全,否则本历史记录与有相同域名的白名单列表逐条相似度匹配获取到该页面得到的最高分,并减去黑名单标题特征匹配的加权值后获取到最终值,若该值达到安全线值,则判断该页面安全,并添加该记录至白名单中,否则判断该页面需要下一步检测。页面拦截模块处理流程如图2所示。
图2 页面拦截功能模块处理流程
最后,对于标记为需进一步检测的记录将进行更加细致的检测。为每一条记录开启一个新的线程,使用Jsoup 通过URL 获取HTML 全部内容,若Jsoup 获取网页内容失败,则使用本功能自编写的程序获取网页内容。使用正则表达式将页面中文本提取。使用Web 页面文本内容关键词分析技术得到页面内容得分并加权;使用Jsoup 获取所有页面中的超链接标签并逐个判别其链接是否安全,得到页面链接安全性得分并加权;获取网页ICP 备案号,通过工业和信息化部政务服务平台的ICP/IP 地址/域名信息备案管理系统(https://beian.miit.gov.cn)获取到页面备案信息,得到页面合法性得分并加权。最终通过综合得分判别该页面是否安全。若该页面安全则将其添加到系统白名单中,不安全则通知用户并关闭页面。
功能需求:监控用户下载的文件并进行病毒查杀;自定义病毒扫描。
功能核心:监控文件的下载;常见格式压缩包的解压缩;病毒扫描。
功能实现:首先,文件系统中的文件夹均会被WatchService(基于本机操作系统实现监控)监控,在监控过程中,程序获取到新建文件的绝对路径,并根据新建文件的绝对路径进行病毒扫描。
需要说明的是,计算机系统生成新文件的途径除了用户下载,还可能为用户复制本地文件产生的备份文件,程序运行产生的缓存文件,等等,如果对所有新生成的文件都进行扫描,无疑加大了程序的负担。而本功能根据“在文件下载过程中系统会产生一个临时文件用于存放下载文件片段而在文件下载合并完成后临时文件被删除”的特性增加判断,从而获取到用户下载的文件。本功能仅对用户下载的文件进行病毒检测,提高了系统运行效率。下载监控功能模块处理流程如图3所示。
图3 下载监控功能模块处理流程
其次,在各种文件格式中,因为压缩包内部可以包含多个文件且杀毒程序无法直接检查未解压压缩包中的文件,所以压缩包格式的文件可能导致病毒文件特征值匹配的失败。针对压缩包格式的文件扫描问题,本功能先将压缩文件解压到指定的临时文件夹下,再对该文件夹下的所有文件进行病毒扫描,如果出现病毒就给予用户相应的提示信息。无论是否有病毒,系统在扫描完成之后都即刻清空该临时文件夹。然而,压缩文件的格式有多种,不同的压缩格式使用不同的编码方式,考虑到系统开发时效性与程序适用性,本功能只针对RAR、ZIP、7Z三种最常见压缩格式的未加密压缩文件进行解压与病毒扫描。
功能需求:检测用户计算机磁盘文件。用户上传文件进行检测并出具检测结果。
功能核心:扫描磁盘文件;利用特征值匹配检测文件;使用云查杀技术对用户提交的文件进行检查并返馈分析报告。
功能实现:功能运行后,用户电脑磁盘中的文件均会被FileScanService(基于本机系统实现扫描模块)扫描并计算出文件的MD5值,每个文件都与本系统的病毒库进行MD5 特征值匹配[5]。用户还可以自定义区域进行病毒扫描。如果文件的MD5 值匹配中病毒样本记录,系统将会提醒用户并建议用户对此文件进行删除或者对该软件进行卸载。但此种方法不能有效检测出混合病毒,因为病毒文件混入了其他文件后,其对应的MD5 特征值也将改变;其次,此种方法对变形病毒的检测能力也较弱。
本系统得到了合作公司(北京云海协同科技有限公司)旗下VirScan 网站的使用授权与技术支持。对于上述问题,系统将没有检测出病毒的文件上传至VirScan 服务器进行云查杀并给予检测反馈[6]。
用户还可以单独调用云查杀功能。当用户将文件上传给系统后(文件大小不得超过50 Mb),系统调用相关API 将用户上传的文件提交给VirScan,VirScan 将该文件置于一个虚拟环境,使用47 款扫描引擎进行病毒扫描并逐个反馈结果。系统对反馈结果进行分析,得到最终的文件检测报告。下面以“virus.exe”为例,云查杀部分结果见表1所示。
表1 云查杀部分结果展示
本系统相比于主流的计算机防护杀毒软件具有体积更小的特点,在十余种主流统计样本中,本系统大小约为样本平均大小的48.4%。系统与部分主流计算机防护杀毒软件大小对比如图4所示。
图4 系统与部分主流计算机防护杀毒软件大小对比
另外在预防恶意捆绑软件下载至用户电脑功能上,相比于主流的计算机防护杀毒软件的平均防护水平,本系统的页面检测准确性指标与系统资源占用指标分别提升6%与13%。各项实现结果得分如图5所示。
图5 “预防恶意捆绑软件下载”功能中本系统得分与主流防护软件各项平均得分对比
系统在检测和清除恶意软件和病毒的软件程序仍有不足,如病毒库样本量过小,对于病毒变种的应对方法单一,扫描时间过长等问题。可借鉴张灿岩[2]、何国贤[3]等人使用的沙盒检测技术来改进上述问题。
本文使用SSM 开发框架[8]依据成熟的MVC设计模式[9],实现了对恶意捆绑软件进行有效的拦截和清除的系统。本系统旨在将含有恶意代码的软件主要拦截在用户下载操作之前,并对少量逃避拦截的恶意下载捆绑软件使用特征值匹配、云查杀等技术实现清除,具有较小的系统开销,较快的运行速度等特点。用户应用本系统后可以保护其不受恶意软件的侵害,减轻了用户使用电脑时的认知负担,操作压力等。