GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo verificar si Bash tiene una vulnerabilidad de Shellshock?

La vulnerabilidad Shellshock se encontró a fines de 2014 (para ser precisos, el impacto se publicó en CVE-2014-6271 el 24 de septiembre de 2014). Posteriormente se lanzó una actualización en bash versión 4.1.2-15  con una solución para la vulnerabilidad Shellshock. Bueno, todo el mundo actualizó bash y aseguró su caparazón de Shellshock, pero sorprendentemente, muchas máquinas en mi oficina no se actualizaron por cualquier motivo. La parte aterradora es que pocas de esas máquinas con shell vulnerable albergaban muchos servicios en Internet. Según varios blogs en Internet, Shellshock exploit permite a un atacante ejecutar de forma remota un comando malicioso en bash a través de secuencias de comandos 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)

Lo primero es comprobar si tu BASH es vulnerable a Shellshock o no . Por lo tanto, cualquier versión de bash anterior a la 4.1.2 seguramente tendrá esta vulnerabilidad.

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

(o)

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

Ahora que conoce la versión, ejecute los siguientes comandos para confirmar que es vulnerable a 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

Solución:

Salta al final de esta publicación. En caso de que desee saber cómo funciona ShellShock, lea detenidamente.

Comprender las variables de exportación en SHELL :

Como dice el resultado anterior, su SHELL es vulnerable, pero veamos cómo funciona.

Normalmente, puede establecer una variable de entorno y usarla en un shell. Por ejemplo, como se muestra a continuación:

$ test=1
 $ echo $test
 1

Pero no puede usar directamente la variable env 'prueba' en un nuevo shell bash . Compruébalo:

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

La salida está en blanco. El motivo es que una variable de entorno está disponible para el acceso solo en el mismo shell. Pero si exporta una variable de entorno, también estará disponible para un nuevo shell bash. He aquí un ejemplo:

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

Ahora puede ver que la variable '$var' se configuró y exportó en un shell y se accedió desde otro shell. Por supuesto, puede detener la exportación en cualquier momento usando el siguiente comando.

$ export -n var
 $ bash
 $ echo $var

Del mismo modo, puede crear funciones y exportarlas en un shell y acceder a la función exportada desde otro shell. Veamos ese ejemplo también.

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

En el resultado anterior, verá 'bash:fnc:comando no encontrado ‘porque, la fnc no es una función exportada. Por lo tanto, no puede llamarlo desde otro shell.

Exportemos ‘fnc ' también.

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

Funciona como se esperaba (desde ‘fnc ‘ fue exportado y está disponible en otro shell).

Exportar una variable o una función establecerá una variable de entorno

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

Ahora explotación de Shellshock

Con base en los ejemplos anteriores, aprendimos que un nuevo shell bash ingiere la definición de una variable de entorno que comienza con () y la interpreta como una función . Pero la vulnerabilidad aquí es que el nuevo shell ejecutará lo que esté presente en la cita.

Por ejemplo:

Ejecute el siguiente comando:

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

Verifique la variable env para 'sse_fnc':

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

Ir a la nueva shell bash:

$ bash
 Not good

Nota: Simplemente escribimos 'bash ' y ves el texto 'No es bueno ' impreso. Significa que el nuevo shell comienza a ejecutar la función después de leer la variable de entorno y también ejecuta los comandos finales (aunque la llave de la función se cerró después del "echo "function shellshock exploit";').

En otras palabras, "La variable exportada sse_fnc se pasó a la subcapa que se interpretó como una función sse_fnc pero los comandos finales se ejecutaron (this is bad ) a medida que se generó la subcapa.”

a través de Fixee@StackExchange

¿cómo se puede explotar esta vulnerabilidad?

No creo que nadie pueda explicarlo mejor que este tipo (shellshocker.net). ¡Gracias hombre!

¿Cómo solucionar Shellshock?

Simple, actualice su bash y pruebe el exploit para verificar si la vulnerabilidad ha desaparecido.

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

El comando anterior descargará automáticamente más de 30 parches y compilará bash desde la fuente. Puede ejecutar regularmente este script para mantener su bash actualizado con los últimos parches.

Una vez que la instalación es exitosa. Verifique la versión de bash como se muestra a continuación:

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

Prueba de vulnerabilidad de 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

De la salida anterior, no imprimió la palabra "vulnerable". ¡Así que mi fiesta está segura!

(o)

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

Si BASH es vulnerable, el comando anterior generará la fecha. De lo contrario, BASH es seguro.


Linux
  1. Cómo escribir un bucle en Bash

  2. ¿Cómo verificar la subcadena en Shell Script Bash?

  3. ¿Cómo verificar si Bash puede imprimir colores?

  4. Cómo verificar si sed ha cambiado un archivo

  5. ¿Cómo verificar si ssh-agent ya se está ejecutando en bash?

Cómo verificar si una cadena contiene una subcadena en Bash

Cómo comprobar la versión de Python

Cómo comprobar la versión de Java

Compruebe si su sistema Linux es vulnerable a Shellshock y arréglelo

Cómo verificar si existe un archivo o directorio en Bash Shell

¿Cómo verifico la sintaxis de un script Bash sin ejecutarlo?