EDIT 2 :
il y a une bonne raison pour laquelle ce message attire autant d'attention: vous avez réussi à enregistrer la totalité de la session en direct d'un intrus sur votre PC. Ceci est très différent de notre expérience quotidienne, où nous traitons avec la découverte des conséquences de ses actions et essayons de les réparer. Nous le voyons ici au travail, le voyons avoir des problèmes pour établir la porte arrière, reviennent sur ses pas, travaillent fébrilement (peut-être parce qu'il était assis à votre bureau, comme suggéré ci-dessus, ou peut-être, et à mon avis plus probablement, parce qu'il était impossible de faire fonctionner son logiciel malveillant sur le système (voir ci-dessous) et essayez de déployer des instruments de contrôle entièrement autonomes. C’est ce que les chercheurs en sécurité observent quotidiennement avec leurs pièges à miel . Pour moi, c'est une chance très rare, et la source de l'amusement.
Vous avez certainement été piraté. La preuve de cela ne provient pas de l'extrait de auth.log
fichier que vous avez affiché, car cela signale une tentative de connexion infructueuse, sur une période de temps courte (deux secondes). Vous remarquerez que la deuxième ligne indique Failed password
, tandis que la troisième indique une pre-auth
déconnexion: le gars a essayé et a échoué.
Les preuves proviennent plutôt du contenu des deux fichiers http://222.186.30.209:65534/yjz
et http://222.186.30.209:65534/yjz1
que l'attaquant a téléchargé sur votre système.
Le site est actuellement ouvert à toute personne pour les télécharger, ce que j'ai fait. J'ai d'abord couru file
sur eux, ce qui a montré:
$ 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
Je les ai ensuite amenés sur une machine virtuelle Debian 64 bits que j'ai; un examen de leur contenu dans la strings
commande révéla beaucoup d'éléments suspects (références à diverses attaques connues, commandes à remplacer, script clairement utilisé pour configurer un nouveau service, etc.).
J'ai ensuite produit les hachages MD5 des deux fichiers et les ai alimentés dans la base de données de hachage de Cymru pour voir s'ils étaient des agents connus de programmes malveillants. Bien que yjz
n'est pas, yjz1
est, et Cymru fait état d' une probabilité de détection par les logiciels anti-virus de 58%. Il est également indiqué que ce fichier a été vu pour la dernière fois il y a trois jours environ et qu'il est donc relativement récent.
Exécuter clamscan (une partie du clamav
paquet) sur les deux fichiers que j'ai obtenus:
$ clamscan y*
yjz: Linux.Backdoor.Gates FOUND
yjz1: Linux.Trojan.Xorddos FOUND
Nous sommes maintenant certains que les logiciels standard Linux peuvent l'identifier.
Que devrais tu faire?
Bien que relativement nouveau, aucun des deux systèmes ne soit très récent, consultez cet article de janvier 2015 sur XorDdos , par exemple. Donc, la plupart des paquets gratuits devraient pouvoir le supprimer. Vous devriez essayer: clamav
, rkhunter
, chkrootkit
. J'ai googlé autour de moi et vu qu'ils prétendent pouvoir le repérer. Utilisez-les pour vérifier le travail du prédécesseur, mais après avoir exécuté ces trois programmes, vous devriez être prêt à commencer.
Pour ce qui est de la question plus générale, what should you do to prevent future infections
la réponse de Compagnon est un bon premier pas. Gardez simplement à l’esprit que c’est un combat permanent, un combat que nous pouvons tous (y compris moi!) Perdre sans le savoir.
EDIT :
À l'invite (indirecte) de Viktor Toth, j'aimerais ajouter quelques commentaires. Certes, l'intrus a rencontré certaines difficultés: il télécharge deux outils de piratage distincts, modifie leurs autorisations à plusieurs reprises, les redémarre plusieurs fois et tente à plusieurs reprises de désactiver le pare-feu. Il est facile de deviner ce qui se passe: il s'attend à ce que ses outils de piratage ouvrent un canal de communication vers l'un de ses ordinateurs infectés (voir plus loin) et, lorsqu'il ne voit pas ce nouveau canal apparaître sur son interface graphique de contrôle, il craint son piratage. L’outil est bloqué par le pare-feu, il répète donc la procédure d’installation. Je suis d'accord avec Viktor Toth pour dire que cette étape de son opération ne semble pas porter les fruits escomptés, mais je voudrais vous encourager très fortement. ne sous-estimez pas l'étendue des dégâts infligés à votre ordinateur.
Je fournis ici une sortie partielle 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
Ceci fournit la preuve de la falsification des services (in /etc/init.d
et in /etc/rc.d
), avec crontab
, avec l'historique des fichiers mysql
et quelques fichiers contenant des proc
liens bash
(ce qui suggère qu'une version frauduleuse de votre shell a été créée). Ensuite, le programme génère une requête HTTP (vers un site de langue chinoise,
Accept-Language: zh-cn
ce qui donne de la substance au commentaire de David Schwartz ci-dessus), ce qui peut créer encore plus de dégâts. Dans la requête, les fichiers binaires ( Content-Type: application/x-www-form-urlencoded
) doivent être téléchargés sur le PC attaqué (GET) et téléchargés sur la machine de contrôle (POST). Je ne pouvais pas établir ce qui serait téléchargé à l'ordinateur attaqué, mais, compte tenu de la petite taille des deux yjz
et yjz1
(1.1MB et 600kB, repectively), je peux oser supposer que la plupart des fichiers nécessaires pour masquer le rootkit, à savoir le règlement modifié versions ls
, netstat
, ps
, ifconfig
, ..., seraient téléchargés de cette façon. Et cela expliquerait les tentatives fiévreuses de l'attaquant pour lancer ce téléchargement.
Il n’est pas certain que ce qui précède épuise toutes les possibilités: il nous manque certainement une partie de la transcription (entre les lignes 457 et 481) et nous ne voyons pas de déconnexion; De plus, les lignes 495 à 497 sont particulièrement inquiétantes.
cd /tmp; ./yd_cd/make
qui font référence à un fichier que nous n'avons pas vu téléchargé, et qui pourrait être une compilation: dans l'affirmative, cela signifie que l'attaquant a (enfin?) compris quel était le problème avec ses exécutables, et qu'il essayait de le réparer, auquel cas le PC attaqué est allé pour de bon. [En fait, les deux versions du malware que l'attaquant a téléchargé sur la machine piratée (et moi sur ma machine virtuelle Debian 64 bits) correspondent à une architecture inappropriée, x86, alors que le seul nom du PC piraté indique le fait que il avait affaire à une architecture de bras].
La raison pour laquelle j’ai écrit cette modification est de vous inciter aussi fortement que possible à peigner votre système avec un instrument professionnel ou à effectuer une nouvelle installation à partir de zéro.
Et, à propos, si cela devait être utile à qui que ce soit, voici la liste des 331 adresses IP auxquelles yjz
tente de se connecter. Cette liste est si longue (et probablement destinée à le devenir encore) que je pense que c’est la raison pour laquelle elle a été falsifiée mysql
. La liste fournie par l’autre porte dérobée est identique, ce qui, je suppose, est la raison pour laquelle nous avons laissé ouverte une information aussi importante (je pense que l’attaquant ne souhaitait pas faire l'effort de le stocker au format noyau, donc il a mis la liste entière dans un fichier en texte clair, qui est probablement lu par tous ses backdoors, quel que soit le système d'exploitation utilisé:
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
Le code suivant
#!/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
sur la liste ci-dessus montre que 302 sur un total de 331 adresses sont en Chine continentale, les autres sont à Hong Kong, en Mongolie, à Taiwan. Cela renforce encore l'affirmation de David Schwartz selon laquelle il s'agit principalement d'un réseau de robots chinois.
EDIT 3
À la demande de @ vaid (l'auteur de l'OP, lisez son commentaire ci-dessous), je vais ajouter un commentaire sur la manière de renforcer la sécurité d'un système Linux de base (pour un système fournissant de nombreux services, il s'agit d'un sujet beaucoup plus complexe). vaid
déclare qu'il a fait ce qui suit:
Réinstaller le système
changé le mot de passe root en un mot de passe de 16 caractères avec des lettres minuscules et majuscules, des caractères et des chiffres.
Changé le nom d'utilisateur en un nom d'utilisateur long composé de 6 caractères et applique le même mot de passe que celui utilisé pour root
changé le port SSH à quelque chose de plus de 5000
désactivé la connexion root SSH.
C'est bon (sauf que j'utilise un port supérieur à 10 000, car de nombreux programmes utiles utilisent les ports inférieurs à 10 000). Mais je ne saurais trop insister sur la nécessité d’utiliser des clés cryptographiques pour la connexion SSH , au lieu des mots de passe. Je vais vous donner un exemple personnel. Sur l'un de mes VPS, j'étais incertain de changer le port ssh; Je l'ai laissé à 22 ans, mais j'ai utilisé des clés de chiffrement pour l'authentification. J'ai eu des centaines de tentatives d'effraction par jour , aucune n'a réussi. Quand, fatigué de vérifier chaque jour que personne n’avait réussi, j’ai finalement basculé le port à plus de 10 000, les tentatives d’intrusion sont passées à zéro. Remarquez, ce n'est pas que les pirates informatiques sont stupides (ils ne le sont pas!), Ils traquent simplement une proie plus facile.
Il est facile d'activer une clé cryptographique avec RSA comme algorithme de signature, voir le commentaire ci-dessous de Jan Hudec (merci!):
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 *
Il ne vous reste plus qu'à copier le fichier id_rsa
sur la machine à laquelle vous souhaitez vous connecter (dans un répertoire .ssh
, également chmod
édité à 700), puis à lancer la commande
ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa me@RemoteMachine
Lorsque vous êtes sûr que cela fonctionne, éditez le fichier sur le serveur (= la machine à laquelle vous souhaitez vous connecter) /etc/ssh/sshd_config
et modifiez la ligne.
#PasswordAuthentication yes
à
PasswordAuthentication no
et redémarrez le ssh
service ( service ssh restart
ou systemctl restart ssh
quelque chose comme ça, selon la distribution).
Cela résistera beaucoup. En fait, il n’existe actuellement aucun exploit connu contre les versions actuelles openssh v2
de RSA et de RSA utilisées par openssh v2
.
Enfin, pour vraiment verrouiller votre machine, vous devrez configurer le pare-feu (netfilter / iptables) comme suit:
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
Ceci, 1) permet les connexions SSH à partir de LAN et de WAN, 2) autorise toutes les entrées générées par vos demandes (par exemple, lorsque vous chargez une page Web), 3) supprime tout le reste de l’entrée, 4) autorise tout la sortie, et 5-6) permet tout sur l’interface de bouclage.
Au fur et à mesure que vos besoins grandissent et que de plus en plus de ports doivent être ouverts, vous pouvez le faire en ajoutant en haut de la liste des règles telles que:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
pour permettre, par exemple, à des personnes d'accéder à votre navigateur Web.