EDIT 2 :
Há uma boa razão para essa postagem atrair tanta atenção: você conseguiu gravar a sessão ao vivo inteira de um invasor no seu PC. Isso é muito diferente da nossa experiência cotidiana, onde lidamos com a descoberta das consequências de suas ações e tentamos corrigi-las. Aqui nós o vemos no trabalho, vemos ele tendo alguns problemas com o estabelecimento da porta dos fundos, refaz seus passos, trabalha febrilmente (talvez porque ele estivesse sentado em sua mesa, como sugerido acima, ou talvez, e na minha opinião mais provável, porque ele estava incapaz de executar o malware no sistema, leia abaixo) e tente implantar instrumentos de controle totalmente independentes. É isso que os pesquisadores de segurança testemunham diariamente com suas armadilhas de mel . Para mim, essa é uma chance muito rara, e a fonte de alguma diversão.
Você definitivamente foi hackeado. A evidência para isso não vem do snippet do auth.log
arquivo que você exibiu, porque isso relata uma tentativa malsucedida de login, ocorrendo em um curto espaço de tempo (dois segundos). Você notará que a segunda linha indica Failed password
, enquanto a terceira relata uma pre-auth
desconexão: o cara tentou e falhou.
A evidência vem do conteúdo dos dois arquivos http://222.186.30.209:65534/yjz
e http://222.186.30.209:65534/yjz1
que o invasor baixou no seu sistema.
Atualmente, o site está aberto a qualquer pessoa para fazer o download, o que eu fiz. Eu os corri file
pela primeira vez , o que mostrou:
$ file y*
yjz: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
yjz1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
Então eu os trouxe para uma VM Debian de 64 bits que eu tenho; uma análise do conteúdo por meio do strings
comando revelou muita coisa suspeita (referência a vários ataques conhecidos, a comandos a serem substituídos, um script que foi claramente usado para configurar um novo serviço etc.).
Em seguida, produzi os hashes MD5 dos dois arquivos e os alimentei no banco de dados de hash do Cymru para ver se eles são agentes conhecidos de malware. Enquanto yjz
não é, yjz1
é, e Cymru relata uma probabilidade de detecção por software antivírus de 58%. Ele também afirma que esse arquivo foi visto pela última vez há três dias, por isso é razoavelmente recente.
Executando o clamscan (parte do clamav
pacote) nos dois arquivos que obtive:
$ clamscan y*
yjz: Linux.Backdoor.Gates FOUND
yjz1: Linux.Trojan.Xorddos FOUND
então agora estamos certos de que o software Linux padrão pode identificá-lo.
O que você deveria fazer?
Embora bastante novo, nenhum dos sistemas é muito novo, veja este artigo de janeiro de 2015 sobre o XorDdos , por exemplo. Portanto, a maioria dos pacotes gratuitos deve poder removê-lo. Você deve tentar: clamav
, rkhunter
, chkrootkit
. Eu pesquisei no Google e vi que eles afirmam ser capazes de identificá-lo. Use-os para verificar o trabalho do antecessor, mas depois de executar esses três programas, você deve estar pronto para começar.
Quanto à questão maior, what should you do to prevent future infections
a resposta de Journeyman é um bom primeiro passo. Lembre-se de que é uma luta contínua, que todos nós (inclusive eu!) Podemos muito bem ter perdido sem sequer saber.
EDIT :
No prompt (indireto) de Viktor Toth, gostaria de acrescentar alguns comentários. Certamente é verdade que o invasor encontrou algumas dificuldades: ele baixa duas ferramentas de hackers distintas, altera suas permissões várias vezes, as reinicia várias vezes e tenta várias vezes desativar o firewall. É fácil adivinhar o que está acontecendo: ele espera que suas ferramentas de hackers abram um canal de comunicação em direção a um de seus computadores infectados (veja mais adiante) e, quando ele não vê esse novo canal surgir na sua GUI de controle, teme que os hackers Como a ferramenta está sendo bloqueada pelo firewall, ele repete o procedimento de instalação. Concordo com Viktor Toth que esse estágio específico de sua operação não parece trazer os frutos esperados, mas eu gostaria de encorajá-lo muito para não subestimar a extensão dos danos infligidos no seu PC.
Eu forneço aqui uma saída parcial de strings yjz1
:
etc/init.d/%s
/etc/rc%d.d/S90%s
--del
chkconfig
remove
update-rc.d
/etc/cron.hourly/gcc4.sh
/etc/rc.d/rc%d.d/S90%s
--add
defaults
/proc/%d/exe
/proc/self/exe
HOME=/
MYSQL_HISTFILE=/dev/null
#!/bin/sh
# chkconfig: 12345 90 90
# description: %s
### BEGIN INIT INFO
# Provides: %s
# Required-Start:
# Required-Stop:
# Default-Start: 1 2 3 4 5
# Default-Stop:
# Short-Description: %s
### END INIT INFO
case $1 in
start)
stop)
esac
sed -i '/\/etc\/cron.hourly\/gcc4.sh/d' /etc/crontab && echo '*/3 * * * * root /etc/cron.hourly/gcc4.sh' >> /etc/crontab
etc/init.d/%s
GET %s HTTP/1.1
%sHost: %s
POST %s HTTP/1.1
%sHost: %s
Content-Type: application/x-www-form-urlencoded
Content-Length: %d
%s%s
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler ; .NET CLR 1.1.4322)
Connection: Keep-Alive
Isso fornece evidências de adulteração dos serviços (in /etc/init.d
e in /etc/rc.d
), com crontab
, com o arquivo de histórico de mysql
e alguns arquivos nos proc
quais há links bash
(o que sugere que uma versão fraudulenta personalizada do seu shell foi plantada). Em seguida, o programa gera uma solicitação HTTP (para um site de língua chinesa,
Accept-Language: zh-cn
que dá substância ao comentário de David Schwartz acima), o que pode criar ainda mais estragos. Na solicitação, os binários ( Content-Type: application/x-www-form-urlencoded
) devem ser baixados no PC atacado (GET) e carregados na máquina controladora (POST). Não consegui estabelecer o que seria baixado para o PC atacado, mas, dado o tamanho pequeno de ambos yjz
e yjz1
(1,1MB e 600kB, respectivamente), posso me aventurar a supor que a maioria dos arquivos necessários para ocultar o rootkit, ou seja , a alteração versões de ls
, netstat
, ps
, ifconfig
, ..., seria baixado desta forma. E isso explicaria as tentativas febris do invasor de obter esse download.
Não há certeza de que o exposto acima esgote todas as possibilidades: certamente não temos parte da transcrição (entre as linhas 457 e 481) e não vemos um logout; além disso, especialmente preocupantes são as linhas 495-497,
cd /tmp; ./yd_cd/make
que se referem a um arquivo que não vimos baixado e que pode ser uma compilação: se assim for, significa que o invasor (finalmente?) entendeu qual era o problema com seus executáveis e está tentando corrigi-lo. Nesse caso, o pc atacado foi para sempre. [De fato, as duas versões do malware que o invasor baixou na máquina invadida (e eu na minha VM Debian de 64 bits) são para uma arquitetura inadequada, x86, enquanto o nome do PC invadido revela o fato de que ele estava lidando com uma arquitetura de braço].
A razão pela qual escrevi esta edição é instar o mais fortemente possível a pentear seu sistema com um instrumento profissional ou a reinstalá-lo do zero.
E, a propósito, se isso for útil a qualquer pessoa, esta é a lista dos 331 endereços IP aos quais as yjz
tentativas de conexão. Essa lista é tão grande (e provavelmente está destinada a aumentar ainda mais) que acredito que esse seja o motivo de adulteração mysql
. A lista fornecida pelo outro backdoor é idêntica, o que, presumo, é o motivo para deixar uma informação tão importante em aberto ( acho que o invasor não desejou fazer um esforço para armazená-las no formato do kernel, portanto, ele colocou a lista inteira em um arquivo de texto não criptografado, que provavelmente é lido por todas as suas backdoors, para qualquer sistema operacional):
61.132.163.68
202.102.192.68
202.102.213.68
202.102.200.101
58.242.2.2
202.38.64.1
211.91.88.129
211.138.180.2
218.104.78.2
202.102.199.68
202.175.3.3
202.175.3.8
202.112.144.30
61.233.9.9
61.233.9.61
124.207.160.110
202.97.7.6
202.97.7.17
202.106.0.20
202.106.46.151
202.106.195.68
202.106.196.115
202.106.196.212
202.106.196.228
202.106.196.230
202.106.196.232
202.106.196.237
202.112.112.10
211.136.17.107
211.136.28.231
211.136.28.234
211.136.28.237
211.147.6.3
219.141.136.10
219.141.140.10
219.141.148.37
219.141.148.39
219.239.26.42
221.130.32.100
221.130.32.103
221.130.32.106
221.130.32.109
221.130.33.52
221.130.33.60
221.176.3.70
221.176.3.73
221.176.3.76
221.176.3.79
221.176.3.83
221.176.3.85
221.176.4.6
221.176.4.9
221.176.4.12
221.176.4.15
221.176.4.18
221.176.4.21
58.22.96.66
218.104.128.106
202.101.98.55
211.138.145.194
211.138.151.161
211.138.156.66
218.85.152.99
218.85.157.99
222.47.29.93
202.101.107.85
119.233.255.228
222.47.62.142
122.72.33.240
211.98.121.27
218.203.160.194
221.7.34.10
61.235.70.98
113.111.211.22
202.96.128.68
202.96.128.86
202.96.128.166
210.21.3.140
210.21.4.130
211.95.193.97
211.98.2.4
211.98.4.1
211.162.61.225
211.162.61.235
211.162.61.255
211.162.62.1
211.162.62.60
221.4.66.66
202.103.176.22
202.96.144.47
210.38.192.33
202.96.134.33
202.96.134.133
202.96.154.15
210.21.196.6
221.5.88.88
202.103.243.112
202.193.64.33
61.235.164.13
61.235.164.18
202.103.225.68
221.7.136.68
202.103.224.68
211.97.64.129
211.138.240.100
211.138.242.18
211.138.245.180
221.7.128.68
222.52.118.162
202.98.192.67
202.98.198.167
211.92.136.81
211.139.1.3
211.139.2.18
202.100.192.68
211.97.96.65
211.138.164.6
221.11.132.2
202.100.199.8
202.99.160.68
202.99.166.4
202.99.168.8
222.222.222.222
202.102.224.68
202.102.227.68
222.85.85.85
222.88.88.88
210.42.241.1
202.196.64.1
112.100.100.100
202.97.224.68
219.235.127.1
61.236.93.33
211.93.24.129
211.137.241.34
219.147.198.230
202.103.0.68
202.103.0.117
202.103.24.68
202.103.44.150
202.114.0.242
202.114.240.6
211.161.158.11
211.161.159.3
218.104.111.114
218.104.111.122
218.106.127.114
218.106.127.122
221.232.129.30
59.51.78.210
61.234.254.5
202.103.96.112
219.72.225.253
222.243.129.81
222.246.129.80
211.142.210.98
211.142.210.100
220.168.208.3
220.168.208.6
220.170.64.68
218.76.192.100
61.187.98.3
61.187.98.6
202.98.0.68
211.93.64.129
211.141.16.99
202.98.5.68
219.149.194.55
211.138.200.69
202.102.3.141
202.102.3.144
58.240.57.33
112.4.0.55
114.114.114.114
114.114.115.115
202.102.24.34
218.2.135.1
221.6.4.66
221.131.143.69
202.102.8.141
222.45.0.110
61.177.7.1
218.104.32.106
211.103.13.101
221.228.255.1
61.147.37.1
222.45.1.40
58.241.208.46
202.102.9.141
202.102.7.90
202.101.224.68
202.101.226.68
211.141.90.68
211.137.32.178
202.96.69.38
211.140.197.58
219.149.6.99
202.96.86.18
101.47.189.10
101.47.189.18
118.29.249.50
118.29.249.54
202.96.64.68
202.96.75.68
202.118.1.29
202.118.1.53
219.148.204.66
202.99.224.8
202.99.224.67
211.90.72.65
211.138.91.1
218.203.101.3
202.100.96.68
211.93.0.81
222.75.152.129
211.138.75.123
202.102.154.3
202.102.152.3
219.146.1.66
219.147.1.66
202.102.128.68
202.102.134.68
211.138.106.19
211.90.80.65
202.99.192.66
202.99.192.68
61.134.1.4
202.117.96.5
202.117.96.10
218.30.19.40
218.30.19.50
116.228.111.118
180.168.255.18
202.96.209.5
202.96.209.133
202.101.6.2
211.95.1.97
211.95.72.1
211.136.112.50
211.136.150.66
119.6.6.6
124.161.97.234
124.161.97.238
124.161.97.242
61.139.2.69
202.98.96.68
202.115.32.36
202.115.32.39
218.6.200.139
218.89.0.124
61.139.54.66
61.139.39.73
139.175.10.20
139.175.55.244
139.175.150.20
139.175.252.16
168.95.1.1
210.200.211.193
210.200.211.225
211.78.130.1
61.31.1.1
61.31.233.1
168.95.192.1
168.95.192.174
61.60.224.3
61.60.224.5
202.113.16.10
202.113.16.11
202.99.96.68
202.99.104.68
211.137.160.5
211.137.160.185
219.150.32.132
202.98.224.68
211.139.73.34
61.10.0.130
61.10.1.130
202.14.67.4
202.14.67.14
202.45.84.58
202.45.84.67
202.60.252.8
202.85.128.32
203.80.96.9
203.142.100.18
203.142.100.21
203.186.94.20
203.186.94.241
221.7.1.20
61.128.114.133
61.128.114.166
218.202.152.130
61.166.150.123
202.203.128.33
211.98.72.7
211.139.29.68
211.139.29.150
211.139.29.170
221.3.131.11
222.172.200.68
61.166.150.101
61.166.150.139
202.203.144.33
202.203.160.33
202.203.192.33
202.203.208.33
202.203.224.33
211.92.144.161
222.221.5.240
61.166.25.129
202.96.103.36
221.12.1.227
221.130.252.200
222.46.120.5
202.96.96.68
218.108.248.219
218.108.248.245
61.130.254.34
60.191.244.5
202.96.104.15
202.96.104.26
221.12.33.227
202.96.107.27
61.128.128.68
61.128.192.68
218.201.17.2
221.5.203.86
221.5.203.90
221.5.203.98
221.7.92.86
221.7.92.98
O código a seguir
#!/bin/bash
echo 0 > out
while read i; do
whois $i | grep -m 1 -i country >> out
done < filename
cat out | grep -i cn | wc -l
na lista acima, mostra que 302 de um total de 331 endereços estão na China continental, os demais estão em Hong Kong, Mongólia, Taiwan. Isso adiciona mais suporte à afirmação de David Schwartz de que este é principalmente um anel bot chinês.
EDIT 3
A pedido do @ vaid (o autor do OP, leia seu comentário abaixo), adicionarei um comentário sobre como fortalecer a segurança de um sistema Linux básico (para um sistema que fornece muitos serviços, esse é um tópico muito mais complexo). vaid
afirma que ele fez o seguinte:
Reinstale o sistema
alterou a senha raiz para uma senha longa de 16 caracteres com letras maiúsculas e minúsculas e caracteres e dígitos.
Alterou o nome de usuário para um nome de usuário longo com 6 caracteres mistos e aplicou a mesma senha usada para root
porta SSH alterada para algo acima de 5000
desativou o login raiz do SSH.
Isso é bom (exceto que eu uso uma porta acima de 10.000, pois muitos programas úteis usam as portas abaixo de 10.000). Mas não posso enfatizar o suficiente a necessidade de usar chaves criptográficas para login ssh , em vez de senhas. Vou te dar um exemplo pessoal. Em um dos meus VPS, eu não sabia se alteraria a porta ssh; Deixei com 22, mas usei chaves criptográficas para autenticação. Eu tive centenas de tentativas de invasão por dia , nenhuma conseguiu. Quando, cansado de verificar diariamente se ninguém havia conseguido, eu finalmente mudei a porta para algo acima de 10.000, as tentativas de invasão foram zeradas. Veja bem, não é que os hackers sejam estúpidos (eles não são!), Eles apenas caçam presas mais fáceis.
É fácil ativar uma chave de criptografia com o RSA como algoritmo de assinatura, veja o comentário abaixo de Jan Hudec (obrigado!):
cd; mkdir .ssh; chmod 700 .ssh; cd .ssh; ssh-keygen -t rsa (then hit <kbd>ENTER>/kbd> three times); cat id_rsa.pub >> authorized_keys; chmod 600 *
Agora tudo o que você precisa fazer é copiar o arquivo id_rsa
para a máquina da qual você deseja se conectar (em um diretório .ssh
, também chmod
editado para 700) e, em seguida, emitir o comando
ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa me@RemoteMachine
Quando tiver certeza de que isso funciona, edite no servidor (= a máquina à qual você deseja se conectar) o arquivo /etc/ssh/sshd_config
e altere a linha
#PasswordAuthentication yes
para
PasswordAuthentication no
e reinicie o ssh
serviço ( service ssh restart
ou systemctl restart ssh
, ou algo assim, dependendo da distribuição).
Isso vai suportar muito. De fato, atualmente não há explorações conhecidas contra as versões atuais openssh v2
do RSA e do empregador openssh v2
.
Por fim, para realmente desligar sua máquina, você precisará configurar o firewall (netfilter / iptables) da seguinte maneira:
iptables -A INPUT -p tcp --dport YourChosenNonStandardPort -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Isso, 1) permite conexões ssh da LAN e da WAN, 2) permite toda a entrada originada por suas solicitações (por exemplo, quando você carrega uma página da Web), 3) descarta todo o resto da entrada, 4) permite tudo a saída e 5-6) permite tudo na interface de loopback.
À medida que suas necessidades aumentam e mais portas precisam ser abertas, você pode fazer isso adicionando, no topo da lista, regras como:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
para permitir, por exemplo, que pessoas acessem seu navegador da Web.