*本文原创作者:刀郎,本文属FreeBuf原创奖励计划,未经许可禁止转载
最近勒索软件比较火,一波接一波,个人觉得勒索软件最大的难点如下:
1. 不写启动项
2. 不进行网络通信
3. 只是编辑文件
在一些防护软件看来它是正常的,怎么判断是正常软件对文档进行编辑还是勒索软件是一个大问题。这里我有一个思路,那就是诱骗勒索软件。
一、解决思路
自己生成一个文件夹,这个文件夹肯定越靠前越好,(比如你可以用一个空盘,修改盘符为A,建立一个文件夹为AAA,这样越早预警,你保存的文件越多)再放入一些常用的文档格式,doc,txt,docx,pdf等,用软件监视这个目录,如果这个目录里面的文件发生变化,那肯定遇到勒索软件了,那么我们怎么找到勒索软件并且取出加密的key?我采用的是进程pid对比。软件运行开始会备份一次pid,我们只要把二个进程进行对比,那么勒索软件肯定在里面,就全部冻结进程,等待专业人员取出key。
现在开始编程写代码,我采用ring3层处理,因为系统版本太多了,xp,vista, win7,win10 以及32位,64位,系统太多,如果用驱动忙不过来,并且兼容性还是一个问题。
二、开始备份原始进程pid
当软件一运行起来,就开始备份系统当前的pid,在OnInitDialog函数中:
TraverseProcesses函数中开始备份当前系统的所有pid,TraverseProcesses函数第二个参数如果位FALSE表示记录所有进程pid,如果为TRUE表示比较进程pid是否一致:
三、设置监视的文件夹
简单画一个MFC的对话框,将就着用。
我用到微软的api:FindFirstChangeNotification,用微软公开的api,可以保证windows平台都可以用。
一旦监视的文件夹发生了变化,具体监视条件如下:
FILE_NOTIFY_CHANGE_SECURITY //监视的目录或子树中的任何安全描述符更改都会导致更改通知等待操作返回。
FILE_NOTIFY_CHANGE_CREATION //对监视的目录或子树中的文件的创建时间的任何更改都会导致更改通知等待操作返回。
FILE_NOTIFY_CHANGE_LAST_ACCESS //对监视目录或子树中文件的上次访问时间的任何更改都会导致更改通知等待操作返回。
FILE_NOTIFY_CHANGE_LAST_WRITE //对监视的目录或子树中的文件的上次写入时间的任何更改都会导致更改通知等待操作返回。 仅当文件写入磁盘时,操作系统才会检测到上次写入时间的更改。 对于使用大量缓存的操作系统,仅在缓存充分刷新时才会进行检测。
FILE_NOTIFY_CHANGE_SIZE //监视目录或子树中的任何文件大小更改都会导致更改通知等待操作返回。 仅当文件写入磁盘时,操作系统才会检测文件大小的更改。 对于使用大量缓存的操作系统,仅在缓存充分刷新时才会进行检测。
FILE_NOTIFY_CHANGE_ATTRIBUTES//监视目录或子树中的任何属性更改都会导致更改通知等待操作返回。
FILE_NOTIFY_CHANGE_DIR_NAME //监视的目录或子树中的任何目录名更改都会导致更改通知等待操作返回。 更改包括创建或删除目录。
FILE_NOTIFY_CHANGE_FILE_NAME //监视目录或子树中的任何文件名更改都会导致更改通知等待操作返回。 更改包括重命名,创建或删除文件名。
用WaitForSingleObject设置一个等待状态,当发生了如上行为,就说明发现了勒索病毒,实现代码如下:
四、挂起相关进程
当监视的文件夹里文件发生变化,我们就遍历当前的进程和之前程序启动时候的进程列表中的pid做一个对比,如果不在启动的进程列表中,我们就要给他挂起来,防止病毒再加密其他重要的文档。宁可错杀100,不能放走一人,这样就能保住勒索软件肯定在挂起的进程之中,实现代码如下:
五、开始测试
我用今天大家都在分析的勒索软件进行测试:
我监视了一下 ,运行勒索软件,用PCHunter查看了一下,进程确实是挂在状态的。
勒索软件被进程挂起了,等待着安全人员的分析吧,虽然不能百分百成功,起码增加了概率吧,余下就是生死有命,富贵在天了……
*本文原创作者:刀郎,本文属FreeBuf原创奖励计划,未经许可禁止转载
来源:freebuf.com 2018-08-28 08:30:04 by: 刀郎
请登录后发表评论
注册