2006-09-21

流氓软件及反流氓软件的技术分析

0

www.hexun.com 【2006.09.21 10:56】 来源:网易科技
  流氓软件的技术五花八门,任何一项功能都有可能成为流氓技术,就象武器,用好了可以伸张正义,用歪了却成为罪恶的帮凶。   首先我从win32下的一些流氓着数分析开始:  1。我想做为一
个流氓软件,首先要做到的是实时运行,譬如在注册表的run下,在boot下增加它的启动。这应该是比较老的方法,以前 3721好象就是在run下,但是现在一般的人都知道了。  2。作为流氓软件,已经改变了以前一些木马的特性了,他没必要使自己一定要实时启动了,而是需要自己的时候再启动,譬如说打开一个浏览器窗口,这是一般流氓软件的方法,因为他需要连上网才能有利益可图,所以浏览器肯定是流氓软件必定监控的进程。  3。使用BHO插件,这种技术早先特别流行,这是微软提供的接口,本意是让IE浏览器可以扩充功能。每当一个ie浏览器启动的时候,都会调用BHO下必要的插件,流氓软件就是利用这一点。监控了浏览器所有事件与信息。  4。还有最笨的办法就是利用进程快照监控进程,判断有它自己所监控的进程启动,就使用atl得到浏览器指针,从而监控浏览器所有事件与信息。  5,还有一种方法就是使用spi,这是我在网上看到的。spi是分层协议,当winsock2启动的时候都会调用它的dll,可以监控所有应用层数据包。从而监控用户信息,而且能实时启动。  6。hook方法,hook技术可以所应用太广泛了,特别是监控方面。所以流氓软件也不会错过。首先应用的是api函数hook,譬如windows核心编程里的apihook类,或者微软的detous都可以完成,两者方法其实相同就是修改IDT函数入口地址。api hook钩住createprocess 就可以监控进程,比进程快照性能更强,可以钩住spi下的函数可以完成spi下的所有功能。还有消息hook,鼠标消息,键盘消息,日子消息等等钩子,方法实在太多,都可以利用。  上面列举了一些流氓软件的使用方法,但是流氓软件的一个特性是他无法卸载。所以它又要使用下面的方法了  因为上面的很多方法都可以删除注册表卸载他们,那怎么办呢,那就会时时监控,它会在它的进程,或者线程里监控注册表项,设置一个循环监控,发现没了就继续安装,增加。我想这应该是很多流氓软件的技术。  那现在又出现了一个新问题,那就是流氓软件的进程线程要是结束掉怎么办呢???看西面  7。一种方法就是上面的api hook技术,钩住openprocess ,用自己的函数判断只要打开的是自己进程就返回正确,使用这种方法,用户或者一般的软件就无法结束它的进程了。  8。还有一种是上面象bho,spi根本没有进程。一般的用户也无法删除他  9。还有一种方法是远程线程,这个技术用的也很普遍,首先是象api hook一样向目标进程里申请一段内存空间,然后使用自己映射过去,然后使用CreateRemoteThread创建远程线程。一般很多流氓软件或者以前的一些木马程序,都是把线程注入到系统进程譬如explorer,service等等,使用用户或者一般的杀毒软件很难处理或者结束。。  10。注册成服务后,也可以简单的隐藏进程。还有更可笑的是把自己的进程名跟一些系统进程名譬如lsass相同后,也就无法结束了。  从我上面列举的方法已经差不多可以形成好几款流氓软件了。但是你别高兴太早,因为这些技术只是应用层的,现在出现了一堆驱动层的反流氓软件工具,譬如超级兔子,完美卸载,木马克星,雅虎助手,还有现在火热的360安全卫士。  这些反流氓软件的方法删除以上流氓软件软件就比较简单。优先于流氓软件启动,截获所有访问流氓软件文件的irp,然后删除注册表项,删除文件。轻松的完成了反流氓任务。  为了针对这些反流氓软件,流氓软件出现了内核层的了。  1。首先是使用文件过滤驱动,保护自己的文件,流氓软件过滤了create里对于自己文件的所有fileopen外的所有irp和SetInformation下所有的irp,从而有效的保护了自己的文件。  2。内核级hook技术,可hook住所有公开的或者未公开的内核函数,譬如zwcreatefile,zwSetInformation,也可以有效的保护文件。  3。驱动层下的流氓软件还使用内核级hook技术,替换Regdeletekey,RegDeleteValueKey,RegSetValueKey从而有效的保护了注册表  4。利用内核级hook技术还有隐藏进程,或者监控进程,重起进程。  对于上面的流氓软件的方法一些驱动层下的反流氓软件工具又有点束手无策了。因为同是驱动程序相互拦截irp等于大家都无法操作,反流氓软件工具的删除irp会被拦截,或者删除函数会被替换。删除注册表函数会被替换。虽然驱动的加载有先后,但是无法保证能完全的删除流氓软件,从而出现了一些更顶级的反流氓软件,他直接发删除文件irp到文件系统.,删除注册表也直接发送到文件系统。这类流氓软件又能有效的完成了反流氓任务,但是根据我了解,这样的软件不多。现在火热的360安全卫士都还只是使用了笨办法,优先于驱动流氓软件启动,创建一个驱动流氓软件同设备名的设备,,使流氓驱动创建不成功。具我了解他优先于流氓驱动启动是把自己创建于PNP_TDI这个组下面,就是简单的ndis就能优先于360启动。如果前面的组,那360就束手无策了。所以对付这类流氓驱动只能用直接发irp到文件系统。  流氓软件又怎么来防止直接发irp到文件系统的反流氓软件呢?rootkit,我看很多对于rootkit有误解,很多都认为hook也是rootkit.呵呵,rootkit说白了就是嵌入操作系统文件。你不是发irp到文件系统吗?,可是我把文件系统给改了,不过rootkit根据我的观察unix或者linex下比较多,在windows下还是比较少的,因为需要使用汇编了,哎太晚了,不写了,我想如果流氓软件做到这个技术程度,它也没必要做流氓了,直接做操作系统得了。

2006-08-30

安装cm

0

自从solaris上的cm被弄死了以后,公司之前采购的dell服务器也到了。今天自己琢磨着将cm给装上,总算老天不负有心人,晚上将之搞定。

安装cm倒是也没什么很难的,查看INSTALL文件,执行scripts-install里的安装脚本,只有在检查磁盘空间的地方出现错误,无法继续安装,查看了一下安装脚本,发现df -k $2 |tail -1 |awk '{print $4}',经过测试,发现自己的系统里应该是在$1这个位置,修改后就安装成功了。

接着就是配置数据库,以及cm的配置文件。配置文件倒是比较简单,根据doc里的文件基本都能找到。数据库配置也差不多,不过运行后在日志里发现了一些发现了一些错误信息,就是数据太长的信息,原想自己解决,google了半天,也没有发现解决办法。没办法找了个高手,拿个配置文档,还是挺简单的。

数据库从原来的5.0.3降到4.1.21,据他说5.0的不支持,晕,版本高看来也没什么好处。

重新安装4.1.21的MySQL倒是弄了很久,老出现

[root@server ~]# rpm -ivh MySQL-server-standard-4.1.19-0.rhel4.i386.rpm
warning: MySQL-server-standard-4.1.19-0.rhel4.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5
error: Failed dependencies:
MySQL conflicts with mysql-4.1.7-4.RHEL4.1.i386

后来一查原来是指已经安装了mysql-4.1.7-4.RHEL4.1.i386了的意思,卸载,安装,成功。

接下来就是按照文档操作。

最后在init.d里自动启动搞了半天,没办法自己改了启动脚本搞定。

明天测试一下!

2006-08-16

solaris下安装ntop,cacti

0

前两天疯了,突然打起那两台废弃sun服务器的主意来,一台fire280,一台u10。搞得我两天时间都废在上面,晕晕乎乎。
计划在u10上装个cacti。fire280装ntop。
装cacti时还没什么问题,从sunfreeware下载各种package,加上相关的,下了一堆。由于这台u10,280除了solaris没别的,所以全部重新装。一路装apache,php,mysql,rrdtool。装ntop是还要装个libpcap,碰到一些问题。
apache:先装了个2.2的,后来运行不起来,改了个2.0的。发现还是有以下问题,
运行时出现出错,察看logs,发现有以下提示
[Wed Aug 02 22:44:34 2006] [notice] Digest: generating secret for digest authent
ication ...
[Wed Aug 02 22:44:34 2006] [crit] (2)No such file or directory: Digest: error ge
nerating secret: No such file or directory
 
 
查找资料,把httpd.conf中
#LoadModule auth_digest_module modules/mod_auth_digest.so注释掉以后运行正常
 
php:装php包的时候,由于apache的问题,以为php有问题,重新找了个源码来装,要用下面的configure选项
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-gd --with-png --with-snmp
 
mysql:装mysql使用package,从mysql网站下一个5.0 的,安装起来倒也没什么问题,不过把cacti装上后,从日志中发现有mysql连接问题
2006-01-09]Warning: mysql_pconnect(): Client does not support authentication protocol requested by server; cons

问题:Warning: mysql_pconnect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client
解决:
> UPDATE mysql.user SET password=OLD_PASSWORD("your_password") WHERE Host="your_host" AND User="your_username" ;
> FLUSH PRIVILEGES;
讨论:这是因为php不支持mysql 4.1新的验证方式。
rrdtool:安装rrdtool需要libart,libpng,zlib,freetype。各个Lib 装好后,configure rrdtool会出现找不到的错误提示,这时候需要用以下设置进行configure
solaris:CFLAGS=" -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -I/usr/local/include/freetype2 -D_REENTRANT -I/usr/local/include/libart" ./configure
linux:env CFLAGS=" -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -I/usr/local/include/freetype2 -D_REENTRANT -I/usr/local/include/libart" ./configure
 
--------------------------------------------------------------------------------------------
280问题更多,还奇怪
开机时配置IP就有问题了
一直以为配置solaris的IP只需要修改hosts,netmasks,defaultrouter 这3个文件,然后重起就好了。
这两天碰到在这3个文件配置好了,但重起后一直不起作用。最后通过ifconfig 先将地址配置好了,
配置文件也是对的,这样重起才有效果。
然后其它apache等等都用u10的方法都没问题,安装ntop时需要Libpcap,这个怎么也搞不定。package安装,提示找不到。用源码安装路径倒是找到了,就是源码编译成静态的.a文件,ntop需要动态的,而且源码安装libpcap时还出现重起起不来的问题。最后没办法,找两个版本一样的package和源码,先进行源码安装,再进行package安装。总算把这个问题解决了。
 
源码安装libpcap后,重新启动,发现起不来,启动时提示/sbin/rcS:/dev/null: cannot create
。。
查找资料,boot -s进入单用户,删除/dev/null,重新链接/dev/null
ln -s /devices/pseudo/mm@0:null /dev/null
重新启动正常
看来是/dev/null文件被安装libpcap时改掉或删掉了
 
这样来来去去搞了2天总算把这些东西都搞定了

cm被弄死了

0

这个cm数据库经过这两天的捣腾,不仅没有把日志空间扩展开,反而把数据库给弄死了,状态320,现在还找不到办法