木马是网站开发者与网站管理员所烦恼却难以清除的木马,在当前,还没有一个杀毒软件或者是检测软件能够准确的标记出木马的位置并将其清除,所以开发一套自动检测asp木马的软件很有意义,可以为管理员对网站的维护节约大量的时间和精力.这样的软件应该被大多数网站管理员所接受并使用,这套系统为网站的安全性增添了一项保障.
木马是网站开发者与网站管理员所烦恼却难以清除的木马,在当前,还没有一个杀毒软件或者是检测软件能够准确的标记出木马的位置并将其清除,所以开发一套自动检测asp木马的软件很有意义,可以为管理员对网站的维护节约大量的时间和精力.这样的软件应该被大多数网站管理员所接受并使用,这套系统为网站的安全性增添了一项保障.
假如一套网站维护的很好,却被插入了很多有害代码,对浏览者造成危害,或者对该网站的用户造成损失,那这么绝对不是一套好的网站.但是如果花费大量的时间在大量的网页文件中找出小小的木马文件或者仅仅是一句简单的有害语句,基本是不可能的.而自动检测系统则大大简化了这个过程,通过简单的操作,进行简单的扫描,可以定位并给出使用者可能得被感染的文件(由于软件并不等于人,所以不能否认会出现失误,所以需要使用者进行最后判断),对于每一个网站管理员来说是必要的.
正文:软件系统应该具有的特点是:准确,必须准确的扫描出可能含有危险代码的文件;快速,不能花费管理员大量的时间;简单,管理员只需要经过简单的点击就可以使程序运行.
下面将围绕这三个特性研究这套软件的实现.
简单性:程序有一个设置扫描目录的控件,此控件在程序运行时自动显示上次扫描目录;
设置一个开始扫描按钮以使使用者快速开始;为了更好的精确定位,还需要加入两个设置参数的文本框,分别是一级密码和二级密码;为了灵活使用加密强度,增加加密次数选择框;为了使信息更精确,加入过滤设置选择框(仅仅简单的选择项+一个用来存放临时信息的输入框即可);再有就是一个筛选按钮(扫描结束进行筛选).这些控件的作用在下文提到.
这样的设置可以使使用者以简单的操作或得很好的使用效果,我们的最终目的是找出角落里的木马,而使操作最简化、资源占用最小化.
快速:占用大量的资源和执行时间,是每个软件都不应该有的.似乎效率和任务量成反比,但在此程序中,却有所变化,如果要处理大量数据,进行大量运算(这在查找木马中是必须的,需要进行运算密匙,在下文将提到),而要执行速度很快,使高级语言与汇编语言结合是一个不错的方法,所以此程序应该在必要的地方(如大量使用得函数)以使用汇编代码.
如果要使程序执行速度快,内联函数也应该使用,内联函数可以使重复使用量大的函数得到很高的运算速度,因此,以一定的程序体积来换取执行效率,还是比较明智的.
内联函数与汇编语言的结合使用可以提高程序的执行效率,可以缩短程序执行时间,提高速度.
准确:这是此系统的核心部分,没有准确性一切都是空谈.如何使定位准确呢?这里采用标记的方法.即把每个本地文件标记一个自定义的特殊的字符,在检测时只要比较每个文件中的特殊字符,就可以定位木马文件.
由于这种机制,字符的设置显得很重要,设置一个难以辨识的、每个文件中都不相同的字符是必须的.如果每个字符都不相同,使用文件名与使用者定义密码结合是一个解决思路,先取得文件名,在加上用户定义的密码进行特定运算,组成特定字符插入到此文件中;在检测时,如果特定字符与运算字符不同或者未发现特定字符,可以定位此文件被修改过,而且是未授权的修改,那么基本就是木马了.为什么说基本呢?因为特定字符可能是非法入侵者修改的,企图迷惑管理员,但是入侵者有耐心修改的文件,我想管理员也一定有耐心将他修改回来,毕竟,这种文件是少数的.为了保证对这种INSERT型木马的精确定位,在计算特殊字符时,还需要加入文件体积.这样,不管入侵者修改了什么地方,都可以被定位.这这种运算方式是可选的,并且是可设置选择规律的.为了防止入侵者的恶意迷惑管理员,这个需要加入一个规律的设置,如果是入侵者恶意修改文件体积,那么体积的大小,和修改时间,应该是有规律的(至少修改的时间会限定在几天之内,这个时间看你扫描频率,在此期间的修改程度和扫描精确度随着扫描频率的升高而升高),只要进行筛选,就可以略过这些恶意迷惑的修改,并进行恢复.如果加上这些恶意修改可能略过一些INSERT木马,怎么办呢?此时就要在此进行筛选了,为了迷惑管理员,入侵者不会把其他文件都INSER木马,所以只要筛选出代码中的无规律项,留下的应该就是木马.为什么说应该呢?因为入侵者可能加入一些正常的语句,例如asp中的,这样,既有规律,又更改了文件体积,而且没有影响特征字符.但是,我们的软件总是会比他高一筹,我们再次筛选,过滤掉那些预定为安全语句的文件,只留下带有未经安全允许的,有规律的,符合语法的文件,这些文件应该为数不多,管理员可以自己判断.
上面的内容可以看出,检测层层深入,每次扫描计算量很大,导致程序的执行时间过长,但是我们的inline函数和汇编的结合使用,弥补了这一缺点.这样,我们的程序很有效率.
特定字符的设定也极其重要.必须是与每个文件相关的,可以重新计算的,每个文件的特定字符是不同的.前面已经提到,特定字符的组成部分应该是:使用者定义一级密匙+使用者定义二级密匙+文件体积+文件名.然而,计算方式是会被入侵者知道的,所以加密方式必须合理,以使入侵者即便得到加密原理,也不能解密.我们先把文件名+体积+一级密码组合.组合方式有六种:文件名体积一级密码、文件名一级密码体积、体积文件名一级密码、体积一级密码文件名、一级密码体积文件名、一级密码文件名体积.这个方式由使用者选择.然后我们使用二级密码进行逐个加密,二级密码应该设置的合适,它的设置应该对照于组合的密码的长度,二级密码最好设置为组合字符长度的1/5-1/4,不是1/5,也不是1/4,而在其之间,这样,密码长度合适,而且加密次数也达到4、5次,而且,加密时两个字符串没有同时结束.这样加密就有了强度.
加密的过程很简单,组合字符串与二级密码相互相加,当二级密码到结尾时,以二级密码的第一个字符开始与二级密码结尾时组合字符的字符的下一个字符开始继续加密,一直到组合字符串的结束,当然,为了使密匙更强大,使用者可以定义加密的次数,二次或者更多.比如组合字符串是:index305abcdefghig(文件名+体积+一级密码),二级密码是:1234那么加密次数为1的加密结果为:jpgiy539bdfhfhjlji.把这个特定字符放入文件中,检测时以重新计算出的结果与预先放置的对比,如果正确,就筛选掉,如果错误,就选择进行下一步处理.入侵者通过这个字符串要计算出一级密码和二级密码是很难的,需要大量的时间.而且,一级密码和二级密码的长度是未定的,就算得到成百上千个这样的字符串和对应的文件,解密也需要大量的时间,而这段时间可能超过几个月,甚至超过年.在这段时间里,密码已经更换过,所以安全性非常棒!
我们加密的过程不太复杂,但是计算量很大.由定义的密码和文件信息组合成密匙,放入文件,以检测文件的改动;同时为了防止入侵者的恶意迷惑,还进行了几次筛选,把虚假信息大量筛选掉.汇编语言和高级语言的结合及inline函数的使用,大大弥补了程序执行效率的问题.为使用者节约大量资源和时间.
可能您还想看