Coders Conquer Security: Share & Learn Series - Inyección de comandos en el sistema operativo
Un ataque de inyección de comandos al sistema operativo puede ocurrir siempre que una aplicación permita a los usuarios hacer entradas en un shell, pero no toma ninguna acción para verificar que las cadenas de entrada son válidas. Esto permite a un atacante soltar comandos directamente en el sistema operativo que aloja la aplicación, y en cualquier nivel de permiso que se establezca para la aplicación comprometida.
Los ataques de inyección de comandos en el sistema operativo pueden ser realizados por hackers de nivel básico y menos cualificados, lo que los convierte en una de las debilidades más comunes que experimentan los equipos de seguridad. Afortunadamente, hay algunas formas muy eficaces de evitar que tengan éxito. En este episodio, aprenderemos:
Cómo funcionan
Por qué son tan peligrosos
Cómo puede poner defensas para detenerlos.
¿Cómo utilizan los atacantes la inyección de comandos en el sistema operativo?
Lo primero que debe hacer un atacante para iniciar un ataque de inyección de comandos al sistema operativo es localizar las entradas del usuario dentro de una aplicación. Los formularios que los usuarios rellenan son potencialmente buenos puntos de partida. Los atacantes más astutos también pueden utilizar cosas como las cookies o incluso las cabeceras HTTP como punto de partida, algo utilizado por casi todas las aplicaciones o sitios web.
Lo segundo que tienen que hacer es averiguar qué sistema operativo alberga la aplicación. Dado que sólo hay un puñado de opciones, la prueba y el error pueden funcionar bien para esta fase. La mayoría de los servidores de aplicaciones van a estar basados en Windows (el tipo de Windows no suele importar), en algún tipo de caja Linux, o en la posibilidad de Unix.
En ese momento, el hacker modifica la entrada para inyectar un comando del sistema operativo en una entrada aparentemente inocua. Esto puede engañar al sistema operativo anfitrión para que ejecute comandos no deseados en cualquier nivel de permiso que tenga la aplicación.
Por ejemplo, el siguiente comando puede ser utilizado por usuarios válidos dentro de una aplicación para ver el contenido de un archivo, en este caso las notas de una reunión mensual de la junta directiva.
exec("cat " + nombre de archivo)
En nuestro ejemplo, esto ejecutaría el siguiente comando y devolvería las notas de la reunión al usuario.
$ ./cat MeetingNotes.txt
En la reunión de julio estuvieron presentes tres miembros del comité ejecutivo. Se debatió el nuevo proyecto de presupuesto, pero no se tomaron medidas ni se votó.
Esto es lo que ocurre cuando un atacante añade comandos adicionales al final de la entrada, como el que se utiliza para listar el contenido de un directorio en Linux. En este caso, el comando original, que muestra las notas de la reunión, sigue ocurriendo. Pero al usuario malicioso también se le muestra todo lo que hay en el directorio, y qué otros comandos pueden utilizar en los ataques de inyección de comandos del sistema operativo. Ellos ingresan:
$ ./cat MeetingNotes.txt && ls
Y en vez de eso, consigue esto:
En la reunión de julio estuvieron presentes tres miembros del comité ejecutivo. Se debatió el nuevo proyecto de presupuesto, pero no se tomaron medidas ni se votó.
MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c
Como puedes ver, en este caso, no sólo se le mostró al hacker el contenido del directorio, sino que también se le dio un menú de otros comandos que podía utilizar " comandos que ahora saben que pueden ejecutar en el sistema operativo anfitrión.
¿Por qué son tan peligrosos los ataques de inyección de comandos al sistema operativo?
Permitir a los usuarios eludir el propósito de la aplicación objetivo y utilizarla para ejecutar comandos del sistema operativo es extremadamente arriesgado. Un atacante puede realizar fácilmente acciones devastadoras como robar datos confidenciales o formatear una unidad de disco entera del servidor, por ejemplo. Las opciones disponibles para un atacante sólo están limitadas por los comandos permitidos dentro del sistema operativo y su creatividad al utilizarlos.
Los comandos del sistema operativo se ejecutan al mismo nivel de permiso que la aplicación. Las aplicaciones que se ejecutan con privilegios administrativos significan que los hackers que las comprometen pueden ejecutar todos los comandos del sistema operativo.
Los patrones de ataque para la inyección de comandos en el sistema operativo son bien conocidos y documentados. Una aplicación vulnerable es tan susceptible a los script kiddies como a los hackers profesionales. Los atacantes con muy poca habilidad pueden intentar cortar y pegar comandos del SO en las aplicaciones para ver qué pasa.
Obtención de un OK de seguridad contra las inyecciones de comandos del sistema operativo
Hay varias técnicas buenas que pueden detener las inyecciones de comandos del sistema operativo. El primer paso es ejecutar las aplicaciones con la menor cantidad de privilegios necesarios para cumplir su función. Esto no evita un ataque, pero si se produce una brecha, el daño se minimiza.
La mayoría de los lenguajes de programación y frameworks proporcionan llamadas a la API para métodos comunes del SO como listar el contenido de los directorios, crear o leer archivos en el disco duro. Una forma perfecta de eliminar las inyecciones de comandos del SO de su entorno es hacer que todas las aplicaciones utilicen estas llamadas a la API en lugar de los comandos del SO directamente.
Cuando esto no sea posible, valide las entradas del usuario antes de utilizarlas en los comandos del sistema operativo. Las listas blancas se pueden utilizar para garantizar que sólo se puede utilizar un pequeño conjunto de valores de confianza. Es técnicamente posible hacer esto usando una lista negra también, pero probablemente hay muchos menos comandos permitidos, así que las listas blancas son casi siempre más fáciles. No te olvides de incluir parámetros POST y GET válidos en tu lista blanca, así como vectores de entrada del usuario que a menudo se pasan por alto, como las cookies.
Por último, si no hay una API de programación disponible y no se puede utilizar una lista blanca, utilice una biblioteca de sanitización para escapar de cualquier carácter especial en las entradas del usuario antes de utilizarlos en los comandos del sistema operativo.
Más información sobre los ataques de inyección de comandos al sistema operativo
Para más información, puedes echar un vistazo al artículo de OWASP sobre los ataques de inyección de comandos al sistema operativo. También puedes poner a prueba tus nuevos conocimientos defensivos con la demostración gratuita de la plataforma Secure Code Warrior , que forma a los equipos de ciberseguridad para que se conviertan en los mejores ciberguerreros. Para saber más sobre cómo derrotar esta vulnerabilidad, y una galería de pícaros de otras amenazas, visite el blogSecure Code Warrior .
Los ataques de inyección de comandos en el sistema operativo pueden ser realizados por hackers de nivel básico y menos cualificados, lo que los convierte en una de las debilidades más comunes que experimentan los equipos de seguridad. Por suerte, hay bastantes formas muy eficaces de evitar que tengan éxito.
Jaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónJaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.
Un ataque de inyección de comandos al sistema operativo puede ocurrir siempre que una aplicación permita a los usuarios hacer entradas en un shell, pero no toma ninguna acción para verificar que las cadenas de entrada son válidas. Esto permite a un atacante soltar comandos directamente en el sistema operativo que aloja la aplicación, y en cualquier nivel de permiso que se establezca para la aplicación comprometida.
Los ataques de inyección de comandos en el sistema operativo pueden ser realizados por hackers de nivel básico y menos cualificados, lo que los convierte en una de las debilidades más comunes que experimentan los equipos de seguridad. Afortunadamente, hay algunas formas muy eficaces de evitar que tengan éxito. En este episodio, aprenderemos:
Cómo funcionan
Por qué son tan peligrosos
Cómo puede poner defensas para detenerlos.
¿Cómo utilizan los atacantes la inyección de comandos en el sistema operativo?
Lo primero que debe hacer un atacante para iniciar un ataque de inyección de comandos al sistema operativo es localizar las entradas del usuario dentro de una aplicación. Los formularios que los usuarios rellenan son potencialmente buenos puntos de partida. Los atacantes más astutos también pueden utilizar cosas como las cookies o incluso las cabeceras HTTP como punto de partida, algo utilizado por casi todas las aplicaciones o sitios web.
Lo segundo que tienen que hacer es averiguar qué sistema operativo alberga la aplicación. Dado que sólo hay un puñado de opciones, la prueba y el error pueden funcionar bien para esta fase. La mayoría de los servidores de aplicaciones van a estar basados en Windows (el tipo de Windows no suele importar), en algún tipo de caja Linux, o en la posibilidad de Unix.
En ese momento, el hacker modifica la entrada para inyectar un comando del sistema operativo en una entrada aparentemente inocua. Esto puede engañar al sistema operativo anfitrión para que ejecute comandos no deseados en cualquier nivel de permiso que tenga la aplicación.
Por ejemplo, el siguiente comando puede ser utilizado por usuarios válidos dentro de una aplicación para ver el contenido de un archivo, en este caso las notas de una reunión mensual de la junta directiva.
exec("cat " + nombre de archivo)
En nuestro ejemplo, esto ejecutaría el siguiente comando y devolvería las notas de la reunión al usuario.
$ ./cat MeetingNotes.txt
En la reunión de julio estuvieron presentes tres miembros del comité ejecutivo. Se debatió el nuevo proyecto de presupuesto, pero no se tomaron medidas ni se votó.
Esto es lo que ocurre cuando un atacante añade comandos adicionales al final de la entrada, como el que se utiliza para listar el contenido de un directorio en Linux. En este caso, el comando original, que muestra las notas de la reunión, sigue ocurriendo. Pero al usuario malicioso también se le muestra todo lo que hay en el directorio, y qué otros comandos pueden utilizar en los ataques de inyección de comandos del sistema operativo. Ellos ingresan:
$ ./cat MeetingNotes.txt && ls
Y en vez de eso, consigue esto:
En la reunión de julio estuvieron presentes tres miembros del comité ejecutivo. Se debatió el nuevo proyecto de presupuesto, pero no se tomaron medidas ni se votó.
MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c
Como puedes ver, en este caso, no sólo se le mostró al hacker el contenido del directorio, sino que también se le dio un menú de otros comandos que podía utilizar " comandos que ahora saben que pueden ejecutar en el sistema operativo anfitrión.
¿Por qué son tan peligrosos los ataques de inyección de comandos al sistema operativo?
Permitir a los usuarios eludir el propósito de la aplicación objetivo y utilizarla para ejecutar comandos del sistema operativo es extremadamente arriesgado. Un atacante puede realizar fácilmente acciones devastadoras como robar datos confidenciales o formatear una unidad de disco entera del servidor, por ejemplo. Las opciones disponibles para un atacante sólo están limitadas por los comandos permitidos dentro del sistema operativo y su creatividad al utilizarlos.
Los comandos del sistema operativo se ejecutan al mismo nivel de permiso que la aplicación. Las aplicaciones que se ejecutan con privilegios administrativos significan que los hackers que las comprometen pueden ejecutar todos los comandos del sistema operativo.
Los patrones de ataque para la inyección de comandos en el sistema operativo son bien conocidos y documentados. Una aplicación vulnerable es tan susceptible a los script kiddies como a los hackers profesionales. Los atacantes con muy poca habilidad pueden intentar cortar y pegar comandos del SO en las aplicaciones para ver qué pasa.
Obtención de un OK de seguridad contra las inyecciones de comandos del sistema operativo
Hay varias técnicas buenas que pueden detener las inyecciones de comandos del sistema operativo. El primer paso es ejecutar las aplicaciones con la menor cantidad de privilegios necesarios para cumplir su función. Esto no evita un ataque, pero si se produce una brecha, el daño se minimiza.
La mayoría de los lenguajes de programación y frameworks proporcionan llamadas a la API para métodos comunes del SO como listar el contenido de los directorios, crear o leer archivos en el disco duro. Una forma perfecta de eliminar las inyecciones de comandos del SO de su entorno es hacer que todas las aplicaciones utilicen estas llamadas a la API en lugar de los comandos del SO directamente.
Cuando esto no sea posible, valide las entradas del usuario antes de utilizarlas en los comandos del sistema operativo. Las listas blancas se pueden utilizar para garantizar que sólo se puede utilizar un pequeño conjunto de valores de confianza. Es técnicamente posible hacer esto usando una lista negra también, pero probablemente hay muchos menos comandos permitidos, así que las listas blancas son casi siempre más fáciles. No te olvides de incluir parámetros POST y GET válidos en tu lista blanca, así como vectores de entrada del usuario que a menudo se pasan por alto, como las cookies.
Por último, si no hay una API de programación disponible y no se puede utilizar una lista blanca, utilice una biblioteca de sanitización para escapar de cualquier carácter especial en las entradas del usuario antes de utilizarlos en los comandos del sistema operativo.
Más información sobre los ataques de inyección de comandos al sistema operativo
Para más información, puedes echar un vistazo al artículo de OWASP sobre los ataques de inyección de comandos al sistema operativo. También puedes poner a prueba tus nuevos conocimientos defensivos con la demostración gratuita de la plataforma Secure Code Warrior , que forma a los equipos de ciberseguridad para que se conviertan en los mejores ciberguerreros. Para saber más sobre cómo derrotar esta vulnerabilidad, y una galería de pícaros de otras amenazas, visite el blogSecure Code Warrior .
Un ataque de inyección de comandos al sistema operativo puede ocurrir siempre que una aplicación permita a los usuarios hacer entradas en un shell, pero no toma ninguna acción para verificar que las cadenas de entrada son válidas. Esto permite a un atacante soltar comandos directamente en el sistema operativo que aloja la aplicación, y en cualquier nivel de permiso que se establezca para la aplicación comprometida.
Los ataques de inyección de comandos en el sistema operativo pueden ser realizados por hackers de nivel básico y menos cualificados, lo que los convierte en una de las debilidades más comunes que experimentan los equipos de seguridad. Afortunadamente, hay algunas formas muy eficaces de evitar que tengan éxito. En este episodio, aprenderemos:
Cómo funcionan
Por qué son tan peligrosos
Cómo puede poner defensas para detenerlos.
¿Cómo utilizan los atacantes la inyección de comandos en el sistema operativo?
Lo primero que debe hacer un atacante para iniciar un ataque de inyección de comandos al sistema operativo es localizar las entradas del usuario dentro de una aplicación. Los formularios que los usuarios rellenan son potencialmente buenos puntos de partida. Los atacantes más astutos también pueden utilizar cosas como las cookies o incluso las cabeceras HTTP como punto de partida, algo utilizado por casi todas las aplicaciones o sitios web.
Lo segundo que tienen que hacer es averiguar qué sistema operativo alberga la aplicación. Dado que sólo hay un puñado de opciones, la prueba y el error pueden funcionar bien para esta fase. La mayoría de los servidores de aplicaciones van a estar basados en Windows (el tipo de Windows no suele importar), en algún tipo de caja Linux, o en la posibilidad de Unix.
En ese momento, el hacker modifica la entrada para inyectar un comando del sistema operativo en una entrada aparentemente inocua. Esto puede engañar al sistema operativo anfitrión para que ejecute comandos no deseados en cualquier nivel de permiso que tenga la aplicación.
Por ejemplo, el siguiente comando puede ser utilizado por usuarios válidos dentro de una aplicación para ver el contenido de un archivo, en este caso las notas de una reunión mensual de la junta directiva.
exec("cat " + nombre de archivo)
En nuestro ejemplo, esto ejecutaría el siguiente comando y devolvería las notas de la reunión al usuario.
$ ./cat MeetingNotes.txt
En la reunión de julio estuvieron presentes tres miembros del comité ejecutivo. Se debatió el nuevo proyecto de presupuesto, pero no se tomaron medidas ni se votó.
Esto es lo que ocurre cuando un atacante añade comandos adicionales al final de la entrada, como el que se utiliza para listar el contenido de un directorio en Linux. En este caso, el comando original, que muestra las notas de la reunión, sigue ocurriendo. Pero al usuario malicioso también se le muestra todo lo que hay en el directorio, y qué otros comandos pueden utilizar en los ataques de inyección de comandos del sistema operativo. Ellos ingresan:
$ ./cat MeetingNotes.txt && ls
Y en vez de eso, consigue esto:
En la reunión de julio estuvieron presentes tres miembros del comité ejecutivo. Se debatió el nuevo proyecto de presupuesto, pero no se tomaron medidas ni se votó.
MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c
Como puedes ver, en este caso, no sólo se le mostró al hacker el contenido del directorio, sino que también se le dio un menú de otros comandos que podía utilizar " comandos que ahora saben que pueden ejecutar en el sistema operativo anfitrión.
¿Por qué son tan peligrosos los ataques de inyección de comandos al sistema operativo?
Permitir a los usuarios eludir el propósito de la aplicación objetivo y utilizarla para ejecutar comandos del sistema operativo es extremadamente arriesgado. Un atacante puede realizar fácilmente acciones devastadoras como robar datos confidenciales o formatear una unidad de disco entera del servidor, por ejemplo. Las opciones disponibles para un atacante sólo están limitadas por los comandos permitidos dentro del sistema operativo y su creatividad al utilizarlos.
Los comandos del sistema operativo se ejecutan al mismo nivel de permiso que la aplicación. Las aplicaciones que se ejecutan con privilegios administrativos significan que los hackers que las comprometen pueden ejecutar todos los comandos del sistema operativo.
Los patrones de ataque para la inyección de comandos en el sistema operativo son bien conocidos y documentados. Una aplicación vulnerable es tan susceptible a los script kiddies como a los hackers profesionales. Los atacantes con muy poca habilidad pueden intentar cortar y pegar comandos del SO en las aplicaciones para ver qué pasa.
Obtención de un OK de seguridad contra las inyecciones de comandos del sistema operativo
Hay varias técnicas buenas que pueden detener las inyecciones de comandos del sistema operativo. El primer paso es ejecutar las aplicaciones con la menor cantidad de privilegios necesarios para cumplir su función. Esto no evita un ataque, pero si se produce una brecha, el daño se minimiza.
La mayoría de los lenguajes de programación y frameworks proporcionan llamadas a la API para métodos comunes del SO como listar el contenido de los directorios, crear o leer archivos en el disco duro. Una forma perfecta de eliminar las inyecciones de comandos del SO de su entorno es hacer que todas las aplicaciones utilicen estas llamadas a la API en lugar de los comandos del SO directamente.
Cuando esto no sea posible, valide las entradas del usuario antes de utilizarlas en los comandos del sistema operativo. Las listas blancas se pueden utilizar para garantizar que sólo se puede utilizar un pequeño conjunto de valores de confianza. Es técnicamente posible hacer esto usando una lista negra también, pero probablemente hay muchos menos comandos permitidos, así que las listas blancas son casi siempre más fáciles. No te olvides de incluir parámetros POST y GET válidos en tu lista blanca, así como vectores de entrada del usuario que a menudo se pasan por alto, como las cookies.
Por último, si no hay una API de programación disponible y no se puede utilizar una lista blanca, utilice una biblioteca de sanitización para escapar de cualquier carácter especial en las entradas del usuario antes de utilizarlos en los comandos del sistema operativo.
Más información sobre los ataques de inyección de comandos al sistema operativo
Para más información, puedes echar un vistazo al artículo de OWASP sobre los ataques de inyección de comandos al sistema operativo. También puedes poner a prueba tus nuevos conocimientos defensivos con la demostración gratuita de la plataforma Secure Code Warrior , que forma a los equipos de ciberseguridad para que se conviertan en los mejores ciberguerreros. Para saber más sobre cómo derrotar esta vulnerabilidad, y una galería de pícaros de otras amenazas, visite el blogSecure Code Warrior .
Haga clic en el siguiente enlace y descargue el PDF de este recurso.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Ver el informeReservar una demostraciónJaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.
Un ataque de inyección de comandos al sistema operativo puede ocurrir siempre que una aplicación permita a los usuarios hacer entradas en un shell, pero no toma ninguna acción para verificar que las cadenas de entrada son válidas. Esto permite a un atacante soltar comandos directamente en el sistema operativo que aloja la aplicación, y en cualquier nivel de permiso que se establezca para la aplicación comprometida.
Los ataques de inyección de comandos en el sistema operativo pueden ser realizados por hackers de nivel básico y menos cualificados, lo que los convierte en una de las debilidades más comunes que experimentan los equipos de seguridad. Afortunadamente, hay algunas formas muy eficaces de evitar que tengan éxito. En este episodio, aprenderemos:
Cómo funcionan
Por qué son tan peligrosos
Cómo puede poner defensas para detenerlos.
¿Cómo utilizan los atacantes la inyección de comandos en el sistema operativo?
Lo primero que debe hacer un atacante para iniciar un ataque de inyección de comandos al sistema operativo es localizar las entradas del usuario dentro de una aplicación. Los formularios que los usuarios rellenan son potencialmente buenos puntos de partida. Los atacantes más astutos también pueden utilizar cosas como las cookies o incluso las cabeceras HTTP como punto de partida, algo utilizado por casi todas las aplicaciones o sitios web.
Lo segundo que tienen que hacer es averiguar qué sistema operativo alberga la aplicación. Dado que sólo hay un puñado de opciones, la prueba y el error pueden funcionar bien para esta fase. La mayoría de los servidores de aplicaciones van a estar basados en Windows (el tipo de Windows no suele importar), en algún tipo de caja Linux, o en la posibilidad de Unix.
En ese momento, el hacker modifica la entrada para inyectar un comando del sistema operativo en una entrada aparentemente inocua. Esto puede engañar al sistema operativo anfitrión para que ejecute comandos no deseados en cualquier nivel de permiso que tenga la aplicación.
Por ejemplo, el siguiente comando puede ser utilizado por usuarios válidos dentro de una aplicación para ver el contenido de un archivo, en este caso las notas de una reunión mensual de la junta directiva.
exec("cat " + nombre de archivo)
En nuestro ejemplo, esto ejecutaría el siguiente comando y devolvería las notas de la reunión al usuario.
$ ./cat MeetingNotes.txt
En la reunión de julio estuvieron presentes tres miembros del comité ejecutivo. Se debatió el nuevo proyecto de presupuesto, pero no se tomaron medidas ni se votó.
Esto es lo que ocurre cuando un atacante añade comandos adicionales al final de la entrada, como el que se utiliza para listar el contenido de un directorio en Linux. En este caso, el comando original, que muestra las notas de la reunión, sigue ocurriendo. Pero al usuario malicioso también se le muestra todo lo que hay en el directorio, y qué otros comandos pueden utilizar en los ataques de inyección de comandos del sistema operativo. Ellos ingresan:
$ ./cat MeetingNotes.txt && ls
Y en vez de eso, consigue esto:
En la reunión de julio estuvieron presentes tres miembros del comité ejecutivo. Se debatió el nuevo proyecto de presupuesto, pero no se tomaron medidas ni se votó.
MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c
Como puedes ver, en este caso, no sólo se le mostró al hacker el contenido del directorio, sino que también se le dio un menú de otros comandos que podía utilizar " comandos que ahora saben que pueden ejecutar en el sistema operativo anfitrión.
¿Por qué son tan peligrosos los ataques de inyección de comandos al sistema operativo?
Permitir a los usuarios eludir el propósito de la aplicación objetivo y utilizarla para ejecutar comandos del sistema operativo es extremadamente arriesgado. Un atacante puede realizar fácilmente acciones devastadoras como robar datos confidenciales o formatear una unidad de disco entera del servidor, por ejemplo. Las opciones disponibles para un atacante sólo están limitadas por los comandos permitidos dentro del sistema operativo y su creatividad al utilizarlos.
Los comandos del sistema operativo se ejecutan al mismo nivel de permiso que la aplicación. Las aplicaciones que se ejecutan con privilegios administrativos significan que los hackers que las comprometen pueden ejecutar todos los comandos del sistema operativo.
Los patrones de ataque para la inyección de comandos en el sistema operativo son bien conocidos y documentados. Una aplicación vulnerable es tan susceptible a los script kiddies como a los hackers profesionales. Los atacantes con muy poca habilidad pueden intentar cortar y pegar comandos del SO en las aplicaciones para ver qué pasa.
Obtención de un OK de seguridad contra las inyecciones de comandos del sistema operativo
Hay varias técnicas buenas que pueden detener las inyecciones de comandos del sistema operativo. El primer paso es ejecutar las aplicaciones con la menor cantidad de privilegios necesarios para cumplir su función. Esto no evita un ataque, pero si se produce una brecha, el daño se minimiza.
La mayoría de los lenguajes de programación y frameworks proporcionan llamadas a la API para métodos comunes del SO como listar el contenido de los directorios, crear o leer archivos en el disco duro. Una forma perfecta de eliminar las inyecciones de comandos del SO de su entorno es hacer que todas las aplicaciones utilicen estas llamadas a la API en lugar de los comandos del SO directamente.
Cuando esto no sea posible, valide las entradas del usuario antes de utilizarlas en los comandos del sistema operativo. Las listas blancas se pueden utilizar para garantizar que sólo se puede utilizar un pequeño conjunto de valores de confianza. Es técnicamente posible hacer esto usando una lista negra también, pero probablemente hay muchos menos comandos permitidos, así que las listas blancas son casi siempre más fáciles. No te olvides de incluir parámetros POST y GET válidos en tu lista blanca, así como vectores de entrada del usuario que a menudo se pasan por alto, como las cookies.
Por último, si no hay una API de programación disponible y no se puede utilizar una lista blanca, utilice una biblioteca de sanitización para escapar de cualquier carácter especial en las entradas del usuario antes de utilizarlos en los comandos del sistema operativo.
Más información sobre los ataques de inyección de comandos al sistema operativo
Para más información, puedes echar un vistazo al artículo de OWASP sobre los ataques de inyección de comandos al sistema operativo. También puedes poner a prueba tus nuevos conocimientos defensivos con la demostración gratuita de la plataforma Secure Code Warrior , que forma a los equipos de ciberseguridad para que se conviertan en los mejores ciberguerreros. Para saber más sobre cómo derrotar esta vulnerabilidad, y una galería de pícaros de otras amenazas, visite el blogSecure Code Warrior .
Índice
Jaap Karan Singh es un evangelista de la codificación segura, jefe Singh y cofundador de Secure Code Warrior.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónDescargarRecursos para empezar
Evaluación comparativa de las competencias en materia de seguridad: optimización del diseño seguro en la empresa
El movimiento Secure-by-Design es el futuro del desarrollo de software seguro. Conozca los elementos clave que las empresas deben tener en cuenta cuando piensan en una iniciativa Secure-by-Design.
DigitalOcean reduce su deuda de seguridad con Secure Code Warrior
El uso por parte de DigitalOcean de la formación Secure Code Warrior ha reducido significativamente la deuda de seguridad, permitiendo a los equipos centrarse más en la innovación y la productividad. La mejora de la seguridad ha reforzado la calidad de sus productos y su ventaja competitiva. De cara al futuro, SCW Trust Score les ayudará a seguir mejorando las prácticas de seguridad y a continuar impulsando la innovación.
Recursos para empezar
La puntuación de confianza revela el valor de las iniciativas de mejora de la seguridad mediante el diseño
Nuestra investigación ha demostrado que la formación en código seguro funciona. Trust Score, que utiliza un algoritmo basado en más de 20 millones de puntos de datos de aprendizaje procedentes del trabajo de más de 250 000 alumnos en más de 600 organizaciones, revela su eficacia a la hora de reducir las vulnerabilidades y cómo hacer que la iniciativa sea aún más eficaz.
Seguridad reactiva frente a seguridad preventiva: Prevenir es mejor que curar
La idea de introducir la seguridad preventiva en el código y los sistemas heredados al mismo tiempo que en las aplicaciones más recientes puede parecer desalentadora, pero un planteamiento basado en el diseño seguro, aplicado mediante la mejora de las competencias de los desarrolladores, puede aplicar las mejores prácticas de seguridad a esos sistemas. Es la mejor oportunidad que tienen muchas organizaciones de mejorar su seguridad.
Ventajas de la evaluación comparativa de las competencias de seguridad de los desarrolladores
La creciente atención que se presta al código seguro y a los principios del diseño seguro exige que los desarrolladores reciban formación en ciberseguridad desde el principio del proceso de desarrollo de software, con herramientas como Secure Code Warrior's Trust Score, que ayudan a medir y mejorar sus progresos.
Impulsando iniciativas de seguridad por diseño para empresas con éxito significativo
Nuestro último documento de investigación, Benchmarking Security Skills: Streamlining Secure-by-Design in the Enterprise, es el resultado de un análisis profundo de iniciativas reales de Secure-by-Design a nivel empresarial y de la derivación de enfoques de mejores prácticas basados en hallazgos basados en datos.