前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webshell指纹-ssdeep

webshell指纹-ssdeep

作者头像
七夜安全博客
发布2018-11-23 15:36:33
3.6K0
发布2018-11-23 15:36:33
举报
文章被收录于专栏:七夜安全博客七夜安全博客

webshell指纹-ssdeep

前言

最近一段时间的任务就是研究webshell的检测,感觉安全真是没有止境,尤其还是处于防御方,安全策略的制定 任重而道远。

今天给大家分享一下webshell指纹这个知识点,这个主要是制作webshell样本库,用来对已知样本进行快速防御,快速发现,主要是对付一些工具小子和初级黑客(毕竟不会自己写代码)。

支持我就点点文末GG,穷死了。。。

第一节

ssdeep,what ?

首先说一下今天的主角ssdeep,这是一个基于模糊哈希(Fuzzy Hashing)算法的工具。要想弄明白这个工具的原理,不得不说一下模糊哈希算法。

模糊哈希算法又叫基于内容分割的分片分片哈希算法,主要用于文件的相似性比较。主要被用来取证,恶意代码检测,以及开源软件漏洞挖掘。

模糊哈希的主要原理是,使用一个弱哈希计算文件局部内容,在特定条件下对文件进行分片,然后使用一个强哈希对文件每片计算哈希值,取这些值的一部分并连接起来,与分片条件一起构成一个模糊哈希结果。使用一个字符串相似性对比算法判断两个模糊哈希值的相似度有多少,从而判断两个文件的相似程度。

通俗来说,对文件的部分变化,比如多处修改、增加、删除部分内容,只会改变模糊哈希结果某一个分片的值,并不会影响整体的变化,使用模糊哈希均能发现与源文件的相似关系,也就是判断相似度的一种方法。这种方法对于源码级样本的比对,比如webshell,是非常有效的。

一般的工具小子,拿到网上的很多webshell样本,就开始渗透测试了,最多是将webshell添加一下自己标识或者修改一下用户名,密码,对原样本的改动是不大的,因此防御端通过搜集大量webshell样本,制作webshell样本库。在发现阶段,通过扫描黑客上传的文件,使用ssdeep进行相似度比对,即可快速发现入侵。

如果大家对ssdeep如何实现内容分片,可以去看ssdeep的实现源码

C实现:https://github.com/ssdeep-project/ssdeep

golang实现:https://github.com/glaslos/ssdeep

python实现:https://github.com/bunzen/pySSDeep

支持我就点点文末GG,穷死了。。。

第二节

ssdeep使用

由于最近一直在使用golang,所以就使用golang实现了webshell的指纹库,主要是调用

https://github.com/glaslos/ssdeep

制作样本库需要大量的webshell样本,在Github上就有这样的项目:

https://github.com/tennc/webshell

其中生成hash的golang代码,指定文件路径,返回hash值如下:

  1. func (this *hashmatcher) GetHash(filename string) (string, error) {
  2. fileObj, err := os.Open(filename)
  3. defer fileObj.Close()
  4. if err != nil {
  5. return filename, err
  6. }
  7. data, err := ioutil.ReadAll(fileObj)
  8. if err != nil {
  9. return filename, err
  10. }
  11. hash, err := ssdeep.FuzzyBytes(data)
  12. if err != nil {
  13. return filename, err
  14. }
  15. return hash, err
  16. }

从样本库中(前提是已经将样本库加载到内存)进行比对,也很简单,指定未知样本的路径,和相似度的值,如果是90%相似,输入90即可。代码如下:

  1. func (this *hashmatcher) MatchHash(src_file string, top_value int) (bool, error) {
  2. hash, err := this.GetHash(src_file)
  3. if err != nil {
  4. return false, err
  5. }
  6. for _, h := range this.hashes {
  7. score, err := ssdeep.Distance(hash, h)
  8. if err != nil {
  9. return false, err
  10. }
  11. if score > top_value {
  12. return true, nil
  13. }
  14. }
  15. return false, nil
  16. }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七夜安全博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档