Después de Shellshock, ¿qué es un shell más seguro?

Respuesta racional: nadie lo sabe con certeza.
Si tuviera que elegir uno: bash … durante unos dos meses.

Este es el por qué:

Básicamente, existen tres bases de información sobre las cuales se realizan evaluaciones de seguridad modernas:

  1. El código fuente real ( evaluación de seguridad adecuada ). Fuera de una auditoría formal, es muy poco probable que se haya hecho un esfuerzo suficiente para mirar el código desde un punto de vista de seguridad, por lo que el hecho de que no se hayan anunciado problemas no significa que no haya errores de seguridad .
  2. La lista de vulnerabilidad pública ( evaluación de seguridad histórica ). Esto le indica cuántos errores relacionados con la seguridad se han encontrado hasta ahora. Absolutamente no le dice cuántos errores quedan en el código , y continuamente me sorprende la cantidad de personas que creen lo contrario.
  3. Opiniones de otras personas, educadas o no ( evaluación de seguridad de rumores ). Los tomo con una tonelada métrica de NaCl, y tú también deberías hacerlo.

Entonces, si no hay una respuesta definitiva, ¿por qué soy optimista en bash? Se basa en mi argumento frecuente con personas que afirman que el software de código abierto es necesariamente más seguro: “Claro, el código abierto significa que más personas pueden ver el código en busca de problemas, pero ¿ quién está buscando realmente ?”

En este punto, veo que el mundo de los autores de shell está dividido en tres campos:

  1. Aquellos que dicen “oh, eso es específico de bash, nada que ver con nosotros”, y no hacen nada más, la mayoría de las personas están aquí.
  2. Los que dicen “hmmm … me pregunto si cometimos un error similar” y se esfuerzan por verificar su código, probablemente muy pocos aquí.
  3. Los que dicen “ohsh * tohsh * tohsh * t estamos en el radar de todos!” y poner un esfuerzo significativo en la revisión del código … con 10,000 sabuesos de seguridad de Internet y organizaciones de noticias que pisan sus talones para complementar la motivación de la vergüenza total. En este momento, hay (potencialmente) solo un grupo aquí: los autores de bash. (Al menos, espero que estén en este grupo …)

¿Y por qué estoy estableciendo un límite de tiempo en mi soporte para bash? Simplemente porque esa es la “vida media” que he visto para el “entusiasmo” de la codificación segura, perdido en el impulso continuo de nuevas características y la simple falta de “novedad”. La conciencia y la actividad de seguridad, como la mala suerte, las situaciones difíciles e incluso la vida misma, comparten una característica: esto también pasará .

Una de las cosas más importantes que debe comprender acerca de Shellshock es que es solo un motivo de preocupación cuando los programas usan Bash para interpretar la entrada de una fuente no confiable. Normalmente, el programa es un servicio de red como un servidor HTTP. Shellshock no disminuye la seguridad cuando se usa Bash como un shell interactivo.

Aunque Shellshock ha sido una vulnerabilidad muy grave y es esencial que se elimine de Bash, creo que la lección más importante que debe aprender es que ningún shell debería estar expuesto a Internet. El shell Bourne y sus sucesores, incluido Bash, no se diseñaron teniendo en cuenta la seguridad y, especialmente, la seguridad en una red no confiable. A menos que una aplicación web u otro servicio de red esté realmente escrito en el idioma Bash, no es necesario que Bash esté involucrado en absoluto.

Desafortunadamente, ha sido común desde los primeros días de Unix llamar a comandos externos utilizando la función system () C que invoca el shell para interpretar el comando externo. Un enfoque más seguro es utilizar una de las funciones de la familia exec * porque no se basan en un shell para interpretar una línea de comando. Sin embargo, este enfoque es mucho más complicado en C que simplemente llamar a system (). Los lenguajes de nivel superior, como Python, proporcionan interfaces fáciles de usar para ejecutar comandos externos sin ningún shell involucrado.

Shellshock ya ha sido parcheado en todas las distribuciones principales, no hay necesidad de usar otro shell.
Si aún desea cambiar, personalmente recomendaría el Z Shell, tiene más funciones (especialmente funciones de finalización) y muchas extensiones y complementos.

Editar: aquí están las listas de vulnerabilidades encontradas en bash y zsh
Lista de vulnerabilidades de seguridad encontradas en bash
Lista de vulnerabilidades de seguridad encontradas en zsh

De una manera prospectiva, la seguridad en todos los ámbitos se puede mejorar mejor si todos elegimos al azar nuestro shell entre los siguientes:

  • guión
  • ceniza
  • csh
  • tcsh
  • golpetazo
  • sh
  • zsh
  • … contento, avíseme si me he perdido alguno …

Solía ​​trabajar con ksh y tcsh, pero realmente no creo que podamos debatir sobre términos de seguridad o libres de errores si no conocemos el ciclo de desarrollo de software y las políticas de esos proyectos.

Me gustaría que cada proyecto de código abierto tuviera el enfoque de Daniel J. Bernstein, pero creo que si no está involucrado en el desarrollo, no puede requerir tal cosa