远程shell特洛伊木马病毒

                

LinuxAid

综述

  2001年9月5日,Qualys发布了一个关于基于Linux病毒的安全报警。这个病毒叫作"远程shell特洛伊木马(Remote Shell Trojan)",攻击Linux ELF格式的二进制可执行文件。它具有复制自己的能力:当被运行时,它就会感染所有/bin目录和当前目录下的所有二进制文件。除此之外,这个病毒还产生一个进程,在5503 UDP端口上监听。当这个进程收到一个特制的报文之后,就通过一个系统调用连接到源地址。

细节

  通常,在UNIX系统中病毒不算是一种真正的威胁。一个病毒工作在普通用户权限下的病毒是不能感染没有写权限的二进制文件的。不过每次执行被感染的可执行文件,它就会感染当前目录下的二进制可执行文件,因此还是有一定的威胁的。一旦在root权限下,不小心执行了被病毒感染的文件,它就会感染这个/bin目录下的文件。一旦执行了象ls之类常用的系统命令,当前目录下的所有目录中的二进制可执行文件都会被感染。攻击者还可以通过RST的后门进程获得更高的权限。

来源

  RST是处于研究目的开发的,只在内部使用。研究它的目标是分析如何使病毒在非root权限条件下,影响通常的Linux工作环境。然而,事情却并没有按照研究人员设想的方向发展。一个被感染的二进制可执行文件意外地把这个病毒泄露出实验室。

  现在最关心的问题是如何阻止这个病毒的传播,以及尽可能地从被感染的主机中清除这个病毒。现在公众还不清楚发送到后门进程的报文格式。然而,将来通过逆向工程,人们可以获得这些技术细节。

解决方案

  最好能够使二进制可执行文件将来能够具有对RST的免疫力。把ELF文件正文段增加4096字节,是正文段和数据段之间的空洞(hole)消失,可以提高系统对RST病毒的免疫力。采取了这种措施以后,RST病毒就没有空间在二进制可执行文件中写入自身的代码了。

  这段清除病毒的代码非常简单易用。用户能够决定是否递归地自动检测清除RST病毒。或者对二进制可执行文件一个一个地使用这个清除程序,在这种模式下,系统管理者可以知道二进制可执行文件是否感染,是否具有免疫能力。

  清除程序的简单用法:

% perl Recurse.pl remove

结论

  再次建议所有使用Linux系统的人运行这个检测程序检查系统是否被感染。即使系统没有被感染,也应该采取措施使系统具有免疫能力。只有这样才可以使系统免受感染。

代码

Recurse.pl


#!/usr/bin/perl

use strict;

sub RecursiveDeinfect($);
my $path_to_cleaner = "./kill";
my $options_to_cleaner = "";
my $verbose;

if($ARGV[0] eq "-v") { $verbose = shift; }

$_ = $ARGV[0];
if(/detect/) {
$options_to_cleaner = "1";
print "Recursively detecting trojan starting in: ", $ARGV[1]' '"/", "
";
} elsif(/remove/) {
$options_to_cleaner = "2";
print "Recursively removing trojan starting in: ", $ARGV[1]' '"/", "
";
} elsif(/immune/) {
$options_to_cleaner = "4";
print "Recursively making all binaries starting in: ", $ARGV[1]' '"/", "immune
";
} else {
print "usage: $0 [-v] mode [startdir]
".
"where mode is one of the following:
".
" detect : Recursively detect trojan
".
" remove : Recursively remove trojan if trojan is present.
".
" immune : Recursively remove trojan if trojan is present.
".
" Make all innocent binaries immune for future infection
".
"The default startdir is /
";
exit(0);
}


RecursiveDeinfect($ARGV[1]' '"/");

sub RecursiveDeinfect($) {
my $startdir = shift;
my $filename;
my $ret;

return unless(opendir(my $DH, $startdir));

print "Checking $startdir for infected binaries..
" if($verbose);

while($filename = readdir($DH)) {
next if($filename eq "." or $filename eq "..");
next if(-l "$startdir/$filename");
stat("$startdir/$filename");
RecursiveDeinfect("$startdir/$filename") && next if(-d _);
next unless(-f _ && -x _);
$ret = qx($path_to_cleaner $options_to_cleaner '

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值