如何使用ssdeep检测webshell

安全 应用安全
最新版本的ModSecurity增加了ssdeep检测webshell的接口,于是猛地回忆起搞客户端安全(游戏安全)的时候买过一本书《恶意软件分析诀窍与工具箱-对抗“流氓”软件的技术与利器》,这本书就提到了使用ssdeep来查找恶意软件(webshell是恶意软件的一种,安全领域是互通的嘛),本文介绍如何使用它来检测webshell。

***版本的ModSecurity增加了ssdeep检测webshell的接口,于是猛地回忆起搞客户端安全(游戏安全)的时候买过一本书《恶意软件分析诀窍与工具箱-对抗“流氓”软件的技术与利器》,这本书就提到了使用ssdeep来查找恶意软件(webshell是恶意软件的一种,安全领域是互通的嘛),本文介绍如何使用它来检测webshell。

[[124555]]

一 、安装ssdeep

下载ssdeep并安装 http://ssdeep.sourceforge.net/

tar zxvf ssdeep-2.12.tar.gzcd ssdeep-2.12./configuremakemake install

二、识别webshell实例

接下来我们下载一个webshell,试一试如何使用ssdeep来识别webshell

以b374k.php为例

首先获得webshell b374k.php的ssdeep hash(fuzzy hashing)值,并存储到b37_hashs.txt文件中

ssdeep -b webshell/b374k.php >b37_hashs.txt

cat b37_hashs.txt

ssdeep,1.1--blocksize:hash:hash,filename384:UsaSwsF3RtJhwhxY5janx0Rig5xJx52FRsBU0ipgFHF3xR:44snx0Rig5x752EBUxpc5,"b374k.php"

然后使用这个值来获得相似度,相似度为100(当然啦,因为没有做任何修改)

ssdeep -bm b37_hashs.txt webshell/b374k.php

b374k.php matches b37_hashs.txt:b374k.php (100)

为了方便理解,我们拿ssdeep与md5做类比

md5 webshell/b374k.php

MD5 (webshell/b374k.php) = b8d3f0f9ad8b1083f24072f8cfe13e04

我们知道对文件取md5值是用于验证文件的完整性的,因为它对任意的修改都能感受到(hash碰撞小概率事件除外)

而ssdeep则用于计算文件相似度,它是通过计算上下文相关的分段hash值(fuzzy hashing)来判断文件相似度的。

在识别webshell的场景中,我们可以先获取样本的ssdeep hash值,然后设置相似度范围,来识别同一系列的变形shell

想想一个小白黑客获得一个好用的webshell后,***件事会干嘛?肯定是改变登录账号密码

cp webshell/b374k.php webshell/b374k.php.bak

vim webshell/b374k.php.bak

 

ssdeep检测webshell - 碳基体 - 碳基体

 

想雁过留痕的,估计还会改webshell的title等文本来标记到此一游

 

ssdeep检测webshell - 碳基体 - 碳基体

 

 

ssdeep检测webshell - 碳基体 - 碳基体

 

心思稍微重点的想绕过WAF的童鞋,说不定还会修改cookie中的关键字

例如批量替换cookie txtauth关键字

 

ssdeep检测webshell - 碳基体 - 碳基体

 

修改完毕后,分别用md5与ssdeep来看发生了什么

md5 webshell/b374k.php.bak

MD5 (webshell/b374k.php.bak) = b8d3f0f9ad8b1083f24072f8cfe13e04

md5值发生了变化,说明webshell文本内容发生了变化

接着使用ssdeep来查看修改后的webshell的相似度

ssdeep -bm b37_hashs.txt webshell/*

b374k.php matches b37_hashs.txt:b374k.php (100) #原始webshellb374k.php.bak matches b37_hashs.txt:b374k.php (97)#修改了登录账号与作者标记b374k.php.bak2 matches b37_hashs.txt:b374k.php (88)#修改了登录账号、作者标记、cookie特征

***,我们选择一个合适的相似度来判断是否为webshell(真实场景中,调参找到合适的阈值才是考验人的活...)

例如,只筛选相似度90以上的

ssdeep -t 90 -bm b37_hashs.txt webshell/*

b374k.php matches b37_hashs.txt:b374k.php (100)b374k.php.bak matches b37_hashs.txt:b374k.php (97)

三、扩展

除了使用ssdeep来查找相似的恶意软件(静态文本),我们还可以逆向思维,根据相似度来判断混在正常进程中的恶意进程,依据是进程在运行时由于变量变化而发生的变动是轻微的,而代码被加壳后的的变化是相当显著的,例如UPX加壳会使相似度瞬降到0%

参考:

http://blog.spiderlabs.com/2014/11/modsecurity-advanced-topic-of-the-week-detecting-malware-with-fuzzy-hashing.html

《恶意软件分析诀窍与工具箱-对抗“流氓”软件的技术与利器》

原文地址:http://danqingdani.blog.163.com/blog/static/1860941952014111291954550/

责任编辑:蓝雨泪 来源: 网易博客
相关推荐

2013-06-03 15:15:51

2016-03-14 12:33:46

2015-07-05 18:46:46

2014-12-22 10:03:13

2021-11-16 10:45:35

WebSocketWebShellLinux

2017-08-03 11:00:20

2020-10-15 12:00:01

Python 开发编程语言

2021-04-14 08:20:46

Lighthouse工具性能检测

2010-08-26 10:36:44

2016-08-31 14:59:39

软件虚拟化

2023-01-29 14:29:59

Python识别车牌

2020-08-02 08:02:26

Webshell样本安全

2022-01-29 08:01:43

漏洞网络攻击

2023-02-07 09:32:53

2021-02-07 14:39:22

Falco漏洞安全工具

2010-09-13 15:40:56

2020-03-26 17:11:36

AI疫情新冠病毒

2021-09-28 09:16:43

SQLancerDBMS逻辑漏洞

2017-01-12 16:02:18

2023-04-20 14:58:54

点赞
收藏

51CTO技术栈公众号