前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文件监控程序V2.0改进版(网站防挂马好手)

文件监控程序V2.0改进版(网站防挂马好手)

作者头像
FB客服
发布2018-02-08 13:34:29
1.6K0
发布2018-02-08 13:34:29
举报
文章被收录于专栏:FreeBufFreeBuf

前言

技多不压身,多掌握几种不同的编程语言,不但有助于开拓我们的视野,还可以让我们在工作时,自己写一些小程序来帮我们减少工作量。

前段时间给一个客户维护服务器,服务器总是被挂马,装了个某狗,然后并没有解决问题,到不是说安全狗不行,是现在很多防护软件并不贴心啊。

下面,我举个栗子

目前WAF用户体验性差

某狗、某网站防护、某主机卫士,只针对文件上传进行拦截和防护,先不说特征库全不全的问题,但是,如果攻击者利用远程下载的方式,直接下载到服务器,或者通过命令执行写进去,亦或者通过其他方式进行创建写入的,这些防护软件就没有办法管了。

而杀软对webshell后门貌似也不是很敏感,所以,这就尴尬了。摆在管理员面前的,只有手工查杀或者工具主动扫描两条路了。但是,你真的确定你天天会上去点查杀么?

好吧,我也遇到了这样的问题。一天登录服务器千百遍啊,就是为了点下查杀按钮。

前段时间给一个客户维护服务器,服务器总是被挂马,装了个某狗,然后并没有解决问题,到不是说安全狗不行,是现在很多防护软件并不贴心啊。

解决思路

起初为了解决这个问题,用C#写了个命令行程序,对网站目录进行循环检测:

但是240G的源代码,跑完一次需要1个多小时,也就是说,在这个时间范围内,网马可以存活一定时间,对于一个黑客来说,一个多小时,能做很多事情,所以,这不是我想要的。

之前一直在琢磨,有没有一个好的方式,能够代替人工去监控网站目录文件,一旦出现webshell,就自动进行隔离呢。

之前写了个小工具,但是界面有点小气。

从乌云群里要了个shack2写的,一个“超级文件监控”工具,貌似是前两年的,我就顺手改了改,实现了下这个功能,下面详细说下正题。

要想实现这个功能,首先得解决两个问题。

1、针对文件的创建、更改、重命名进行监控; 2、对触发创建、更改、重命名的文件内容进行判断;

先说说第一个,我是用C#来写的。程序开始,肯定得先指定文件监控路径。C#对文件进行监控,得用到FileSystemWatcher类。FileSystemWatcher类提供了Created, Deleted,Rename等事件的监控

例如shack2写的文件监控源码,我以创建文件为例:

private void fileCreate_EventHandle(Object sender, FileSystemEventArgs e) //文件增删改时被调用的处理方法 { add++; this.lvw_log.Invoke(new updateResult(addNode), new Object[] { e, "创建" }) }

当触发了创建文件操作时,将内容输出。

当然了,除了创建以外,还可以用WatcherChangeTypes来注册其他事件。因为shack2已经共享了源码,这里就不再累述。

文件监控这里,百度有很多现成的方法,这个完全可以复制粘贴的,重点是第二个问题,如何对触发行为的内容进行处理。大致处理思路是:

触发文件状态(如:创建)---->对触发该状态的文件进行检查------->确定文件内容是否存在可疑------->不处理or隔离

知道了思路,写起来就相对简单些了。

先创建个ScanHelper类,这个类,主要是写扫描方法和所关联的特征码,也就是表达式。以及文件的处理措施。这里的表达式,可以根据需求来自己设定,也可以将特定脚本类型的特征码进行归类。表达式写清楚了,然后就是写文件打开的方法和文件内容的判断。

这里使用 FileInfo NextFile = new FileInfo(filePath);

判断文件是否存在 if (NextFile.Exists)

string FileText = File.ReadAllText(Path.GetFullPath(filePath));//读取文件内容 if (RegString.IsMatch(FileText) || RegPattern.IsMatch(FileText) || Regsjm.IsMatch(FileText)) //如果存在危险字符

如果存在设定好的字符,则处理文件;

这里呢,当然不能直接删除,通过moveTo的方式移动到别的地方来处理。

NextFile.MoveTo(Path.Combine(TempPath, NextFile.Name));

只是判断文件还不行,如果文件出现重复,依然会出现问题,这里,需要对文件进行一个处理。比如说,当发现1.asp文件存在问题,我们处理以后,下次再出现1.asp文件时,则会报错。

这里,我们需要用到下面的方法来处理下文件重复的问题。当发现文件重复了,在新处理的文件名加上.bak来做区分,当再次发现.bak也重复的时候,直接进行删除操作。

在处理完这些问题后,有一个核心的问题,线程占用的情况。也就是说,在windows文件系统中,你创建一个文件时,会触发created和changed两种操作,你修改文件内容时,也同样会触发这两个操作,这样就会冲突了。

这不是关键,关键问题时,在执行监控时,你还要对文件内容进行判断和处理,这样就很容易发生错误。

我问过好多C#大牛,都说不好解决,最好的办法,是用C++来写,通过底层的方式来处理,但是坑的是,我还没学C++,C#也是才学了2个月吧,如果这样就放弃了,那整个程序就白写了。。

后来琢磨了好几天,想到了一个不是解决办法的解决办法。用try catch和Thread.Sleep来解决这个问题。try执行,当文件触发了创建操作,就执行文件内容判断和处理的方法。

如果线程出错,则通过catch的方式来重复执行,但是catch不再判断文件状态,只是判断是文件,然后对内容进行检查,发现问题,则进行下一步处理操作。

这里用到了 Thread.Sleep(20000);睡眠时间,是为了让程序在判断的时候,有足够的时间释放线程,免得出现冲突,而导致程序崩溃。

当然了,界面我没改动,还是shack2得界面,我只是在界面上加入了一个隔离区操作。

我把软件贴出来,大家可以玩玩。使用方法:监控目录输入你要监控的网站目录,点击“开始监控”。隔离区默认设置在C:TEMP目录下,凡是被隔离的文件,均在该目录下。

当创建文件、修改文件或者重命名文件时,内容中如果含有webshell的关键词或函数,则会进行处理。

补充说明:

监控后缀和跳过后缀完全可以忽略,因为这个监控,是针对所有文件内容的,所以无所谓监控哪个或不监控哪个,管它是畸形文件名还是war,都会去进行检测。

第一次执行时,执行可能会有些缓慢,当执行完一次后,会建立索引,后面速度则会有提升。

软件中已写好了近百种特征,共170个webshell样本,虽然不一定全,但是至少还是有些查杀能力的。

一般同文件名,首次上传到被处理,存活周期在10-20秒之间。

当文件监控到“修改”操作时,其实就已经执行了处理操作,只是我把显示的时间延迟了20秒。

不管什么软件,误杀的情况是不可避免的,假如在使用该软件的时候,软件匹配到特征,就会将文件隔离到c:temp目录下,并不会直接删除

当你发现文件是误删除的,可以点击“停止监控”,将文件根据软件下方显示的位置,还原到原来的目录,再点击监控就可以了,这样,这个文件就不会查杀了,除非这个文件的名字、内容有了变动,则会继续触发规则。

因为这段时间要做移动APP安全审计的工作,C#暂时先放放,准备开始学移动APP这块,功能暂时不做改动了。

后面找时间修改,计划是把功能修改的更为简洁,把监控的记录完善下,增加白名单区域等小功能。有什么问题,欢迎邮件或站内信反馈。欢迎测试。

下载地址:http://pan.baidu.com/s/1kUUon7x

总结

顺便打个广告:新版D盾的不久将会面世,据D哥说,除了要支持windows 2008 、2012,还会加入文件内容监控等功能,也就是说,新版的功能,肯定是网站防护+webshell查杀+上传防御+文件内容监控等多个实用功能。坐等新版D盾出现吧。

最后,再次感谢shack2的无私奉献。点击阅读原文可查看文中代码。

*本文作者:鬼魅羊羔,本文属FreeBuf原创奖励计划,未经许可禁止转载

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 目前WAF用户体验性差
  • 解决思路
  • 总结
相关产品与服务
移动应用安全
移动应用安全(Mobile Application Security,MS)针对移动应用普遍存在的破解、篡改、重打包等各类安全风险,提供Android应用加固、iOS源码混淆、SDK加固等多种加固技术,拥有丰富的行业经验,已服务于金融、互联网、车联网、物联网,运营商等多个行业。稳定、简单、有效,让移动安全建设不再是一种负担。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档