-
-
[原创]exe图标欺骗检测
-
发表于: 2023-2-7 15:46 6875
-
概述
随着网络安全的不断发展,人们的安全意识也在不断提高,一些简单直白的攻击手段往往不再奏效,因而攻击者往往会将这些不再奏效的简单攻击手法和社会工程学相结合,通过诱导受害者下载并运行其提供的恶意文件,使攻击得以开展。其中,最常见的一种手法便是利用Windows系统隐藏已知后缀的特性,通过替换可执行文件图标,修改可执行文件名称,将可执行文件伪装成word文档、excel表格、pdf文件等等,各类文本文件,再结合精心构造的钓鱼邮件,使得被攻击者警惕性降低,从而达到执行恶意文件的目的。本文将阐述,利用图标这一元素对上文中所提及的这类恶意样本进行检测的思路和方法。
语言及环境
- 语言:python 3.10.6
- 相关依赖:
- icon提取:pywin32
- 图像处理:opencv、pillow、numpy
- 运行环境:Windows 10
- 原生图标集:
- 从已知恶意样本中提取
- jskim90/icon 项目中包含了大量的 icon 资源,可以根据需求从中遴选,构造合适的图标集
实现流程
实现细节
项目整体流程清晰,相应功能的实现也可谓简单明了。本文主要对:提取图标和图标相似度检测,这两方面的实现思路和未来改进方向进行相应说明。
提取图标
对于提取图标,该功能实现思路有两种:利用Windows API和解析PE文件。
利用Windows API
该方法所涉及的关键API即ExtractIconEx,通过Microsoft给出的详细解释,可知该API创建了一个指向可执行文件图标资源的句柄数组,其中包含了small(16*16)和 large(32*32)两种格式的图标资源句柄,由于测试所用原生图标集中的图标尺寸都为 32*32 ,因此本项目选择保存尺寸为 32*32 的图标资源,以方便后续图标相似度计算。
通过资源句柄得到的图标格式为“.bmp”,因后续图标相似度计算需要,建议利用pillow将图标转化为“.png”格式进行存储。
解析PE文件
各位一定都知道,图标资源存储在PE结构中的.rsrc段,因此我们可以通过解析PE文件这种方式来获取目标PE文件的图标资源。
该方法与第一种方法相比,其优势在于该方法并不局限于Windows平台,其可以跨平台使用,而其缺点也显而易见,即其实现相对复杂,若是大家对这种方法感兴趣,可以参考Resource Hacker、PEbear等PE格式解析工具在这方面是如何实现的,若时间允许,本人也会尝试完成这种提取方法,并合并到项目中。
图标相似度
显而易见,图标相似度计算的准确率,直接决定了该项目的成功与否,由于本人能力和精力有限,只对几种相对简单的相似度比较算法进行了实现和测试,下面主要说一下实现思路和未来设想,本人也会持续在这方面投入精力,会将新的进展合并到项目中。
PSNR & NC & SSIM
受数字水印相关项目的影响,在实现图片相似度检测时,首先想到了PSNR(峰值信噪比)、NC(归一化相关系数)、SSIM(结构相似性)这三个评判数字水印算法性能的重要指标,但经过测试发现,这三个指标并不能很好的解决评判图片相似度这一问题。换而言之,这三个指标更适合作为两张图片同一性的判断指标,因而在面对图标相似但不相同的情况下,无法选取一个合适的阈值,使其成为一个可以评判两张图片是否相似的标准。
图像指纹
图像指纹即Image Hash,主要包含以下四种算法:
- average hashing(ahash):平均散列,对于每个像素输出1,如果该像素是大于或等于平均值,否则为0
- difference hashing(dhash):梯度散列,计算每个像素的差值,并与平均差值进行比较
- perception hashing(phash):感知散列,其与前两者不同,其先对图像进行DCT(离散余弦变换),对变换后的图像低频部分进行类似average hash的计算
- wavelet hashing(whash):与perceptionhashing原理相同,只是对图像不再进行DCT变换,而是进行DWT(离散小波变换)
本人对以上四种算法都进行了测试,其中dhash和phash测试结果较为优秀,在这二者中,本项目最终选择了phash作为图片相似度计算算法,原因是:本人觉得恶意样本检测应该是soundness的,从算法原理上来讲,只比较携带图像大部分能量的低频部分的phash算法,在Hamming距离相同时,会相较于比较整张图片的dhash算法得到更多的相似图片,从而减少漏报率。phash的实现也非常简单,此处不再进行过多赘述。
随后,我们需要关注的便是Hamming距离该如何选取。若原生图标足够多,建议将Hamming距离设置为2;若原生图标较少,为了减少漏报的可能,建议将Hamming距离适当增大,但最好不要超过10。总而言之,Hamming距离应根据原生样本集情况来进行选择,原生样本集也应在平时不断积累,以达到更好的效果。
深度学习
目前计算机视觉发展迅猛,因此本人觉得利用深度学习也会是一个不错的解决方案,由于本人对该方面知识还在学习中,并且原生图标数量不足,且绝大多数恶意样本所利用的图标都为标准图标,因而只要不断完善原生图标集,即可解决识别率问题,本人也会抽时间尝试实现该方法,并验证效果。
演示
以红框中恶意样本为例,攻击者将该恶意样本的图标替换为EXCEL表格的图标,并将其作为附件添加在钓鱼邮件中,以达到欺骗受害者的目的。
利用该项目对其目标样本进行检测,结果如下:
总结
本文提供了一种针对恶意样本图标检测的思路和实现方法,且算法复杂度不高,在完善原生图标集后,检测准确率较高,可以与检测类安全产品结合,以提高安全检测产品的检测能力。欢迎大家提出完善思路及改进意见。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [求助]Windows下编译ollvm rust出现问题(已解决) 2360
- [原创]利用Powershell击败.NET恶意样本 12877
- [原创]C++利用活跃变量分析清除基本块中的垃圾指令 18016
- [分享]利用Fake-net模拟https通信 14157
- [原创]exe图标欺骗检测 6876