专栏首页七夜安全博客webshell指纹-ssdeep

webshell指纹-ssdeep

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. }

本文分享自微信公众号 - 七夜安全博客(qiye_safe)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小玩意:golang加载执行shellcode

    今天看到一个比较好玩的东西,虽然原理很简单,但是使用golang来做还是挺新鲜,所以还是分享给大家。

    七夜安全博客
  • 你不知道的 HTTPS中间人攻击

    研究生毕业了,好好给自己放了个假期,休息了两周,文章博客都没有更新。从大学开始基本上没过暑假,匆匆忙忙的。再过两天,就要去腾讯工作了,做了自己喜欢的网络安全,重...

    七夜安全博客
  • 你不知道的 HTTPS中间人攻击

    研究生毕业了,好好给自己放了个假期,休息了两周,文章博客都没有更新。从大学开始基本上没过暑假,匆匆忙忙的。再过两天,就要去腾讯工作了,做了自己喜欢的网络安全,重...

    七夜安全博客
  • Xshell用鼠标选中一段文字后自动换行的问题

    现象: 使用Xshell连接远程服务器,一般选中都是鼠标选中,然后 Ctrl+Insert复制,Shift+Insert粘贴。 可是当选中后松开鼠标,就是在...

    Daotin
  • 零基础学习Java,视频、网上直播和线下培训,哪个更好?

    这两年针对Java语言方面还依然是非常火热的语言,可以说已经登上巅峰的神坛,而和Java语言进行匹敌的语言就是Python(派森),因为大数据的火热所以Pyth...

    艾编程
  • Bi-Weekly | 事隔35年后,英特尔与AMD再次合作推出核心处理器;一分钟看完DreamForce 2017

    机器之心
  • 【C语言笔记】char *str与char str[]的区别

    C语言中没有特定的字符串类型,常用以下两种方式定义字符串:一种是字符数组,另一种是指向字符串的指针。如下:

    正念君
  • JavaScript之数据类型

      JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有1种复杂数据类...

    用户6182664
  • 要抢足球教练饭碗!切尔西未来或将用上AI教练

    如果你看过电影《点球成金》,一定会对其中主角用数学方法改造球队印象深刻。如果足球未来也发展成高度数据化,甚至用AI代替人类执教,会不会少了一份激情?

    量子位
  • 字符串方法整理

    mcq

扫码关注云+社区

领取腾讯云代金券