GNU/Linux >> Tutoriels Linux >  >> Linux

Comment vérifier si Bash a la vulnérabilité Shellshock ?

La vulnérabilité Shellshock a été découverte fin 2014 (pour être précis, l'impact a été publié sur CVE-2014-6271 le 24 septembre 2014). Plus tard, une mise à jour a été publiée dans la version bash 4.1.2-15  avec un correctif pour la vulnérabilité Shellshock. Eh bien, le monde entier a continué à mettre à jour le bash et à sécuriser son shell auprès de Shellshock, mais étonnamment, de nombreuses machines de mon bureau n'ont pas été mises à jour pour une raison quelconque. Ce qui est effrayant, c'est que peu de ces machines dotées d'un shell vulnérable hébergeaient de nombreux services sur Internet. Selon divers blogs sur Internet, l'exploit Shellshock permet à un attaquant d'exécuter à distance une commande malveillante dans bash via des scripts CGI.

(I know this tutorial is pretty late, but there are many who are not aware of it and still using vulnerable bash on their public servers)

La première chose est de vérifier si votre BASH est vulnérable ou non au Shellshock . Ainsi, toute version de bash antérieure à 4.1.2 est sûre d'avoir cette vulnérabilité.

$ bash --version
 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

(ou)

$ rpm -qa|grep bash
 bash-completion-1.3-7.el5
 bash-3.2-32.el5_9.1

Maintenant que vous connaissez la version, exécutez les commandes ci-dessous pour confirmer qu'elle est vulnérable à Shellshock.

$ env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock"
 vulnerable
 If you see the word vulnerable above, you are vulnerable to shellshock

Solution :

Aller au bas de ce post. Au cas où, si vous souhaitez savoir comment fonctionne shellshock, alors lisez attentivement.

Comprendre les variables d'exportation dans SHELL :

Comme le dit la sortie ci-dessus, votre SHELL est vulnérable, mais voyons comment cela fonctionne.

Normalement, vous pouvez définir une variable d'environnement et l'utiliser dans un shell. Par exemple, comme ci-dessous :

$ test=1
 $ echo $test
 1

Mais vous ne pouvez pas utiliser directement la variable d'environnement "test" dans un nouveau bash shell . Vérifiez-le :

$ test=1
 $ echo $test
 1
 $ bash
 $ echo $test

La sortie est vide. La raison en est qu'une variable d'environnement est accessible uniquement dans le même shell. Mais si vous exportez une variable d'environnement, elle est également disponible pour un nouveau shell bash. Voici un exemple :

$ var="testing"
 $ export var
 $ bash
 $ echo $var
 testing

Vous pouvez maintenant voir que la variable '$ var' a été définie et exportée dans un shell et accessible depuis un autre shell. Bien sûr, vous pouvez arrêter l'exportation à tout moment en utilisant la commande ci-dessous.

$ export -n var
 $ bash
 $ echo $var

De même, vous pouvez créer des fonctions et les exporter dans un shell et accéder à la fonction exportée à partir d'un autre shell. Voyons également cet exemple.

$ fnc() { echo "testing"; }
 $ fnc
 testing
 $ bash
 $ fnc
 bash: fnc: command not found

Dans la sortie ci-dessus, vous voyez "bash :fnc :commande introuvable ' parce que, le fnc n'est pas une fonction exportée. Vous ne pouvez donc pas l'appeler depuis un autre shell.

Exportons 'fnc ‘ aussi.

$ export -f fnc
 $ fnc
 testing
 $ bash
 $ fnc
 testing

Cela fonctionne comme prévu (depuis ‘fnc ‘ a été exporté et il est disponible dans un autre shell).

L'exportation d'une variable ou d'une fonction définira une variable d'environnement

$ env | grep -A1 fnc
 fnc=() { echo "testing"
 }

Maintenant, Shellshock exploite

Sur la base des exemples ci-dessus, nous avons appris qu'un nouveau shell bash ingère la définition d'une variable d'environnement commençant par () et l'interprète comme une fonction . Mais voici la vulnérabilité, le nouveau shell exécutera tout ce qui est présent dans la citation.

Par exemple :

Exécutez la commande ci-dessous :

$ export sse_fnc='() { echo "function shellshock exploit" ; }; echo "Not good"; '

Vérifiez la variable d'environnement pour 'sse_fnc' :

$ env | grep -A1 sse_fnc
 sse_fnc=() { echo "function shellshock exploit" ; }; echo "Not good";

Accédez au nouveau shell bash :

$ bash
 Not good

Remarque : Nous venons de taper 'bash ' et vous voyez le texte 'Pas bon ' imprimé. Cela signifie que le nouveau shell commence à exécuter la fonction après avoir lu la variable d'environnement et exécute également les commandes de fin (même si l'accolade de la fonction s'est fermée après le "echo "function shellshock exploit" ;').

En d'autres termes "La variable exportée sse_fnc a été passé au sous-shell qui a été interprété comme une fonction sse_fnc mais les commandes de fin ont été exécutées (this is bad ) lorsque le sous-shell est apparu. »

via Fixee@StackExchange

comment cette vulnérabilité peut-elle être exploitée ?

Je ne pense pas que quiconque puisse expliquer mieux que ce type (shellshocker.net). Merci mec !

Comment réparer Shellshock ?

Simple, mettez à jour votre bash et essayez l'exploit pour vérifier si la vulnérabilité a disparu.

$curl https://shellshocker.net/fixbash | sh

La commande ci-dessus téléchargera automatiquement environ 30 correctifs et compilera bash à partir de la source. Vous pouvez exécuter régulièrement ce script pour maintenir votre bash à jour avec les derniers correctifs.

Une fois l'installation réussie. Vérifiez la version de bash comme ci-dessous :

$bash --version
 GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)

Tester la vulnérabilité Shellshock :

$env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock
 If you see the word vulnerable above, you are vulnerable to shellshock

À partir de la sortie ci-dessus, il n'a pas imprimé le mot "vulnérable". Donc mon bash est sécurisé !

(ou)

$env X='() { (shellshocker.net)=>\' bash -c "echo date"; cat echo; rm ./echo

Si BASH est vulnérable, la commande ci-dessus affichera la date. Sinon, BASH est sécurisé.


Linux
  1. Comment écrire une boucle dans Bash

  2. Comment vérifier si la chaîne contient une sous-chaîne dans Bash

  3. Comment vérifier syslog dans Bash sous Linux ?

  4. Comment vérifier si un fichier est vide dans Bash ?

  5. Comment détecter si un fichier a une nomenclature UTF-8 dans Bash ?

Comment vérifier si une chaîne contient une sous-chaîne dans Bash

Comment vérifier la version de Python

Comment vérifier la version Java

Vérifiez si votre système Linux est vulnérable à Shellshock et corrigez-le

Comment vérifier si un fichier ou un répertoire existe dans Bash Shell

Comment vérifier la syntaxe d'un script Bash sans l'exécuter ?