Los codificadores conquistan la infraestructura de seguridad como serie de código: El control de acceso a nivel de función que falta
Ha llegado el momento de la siguiente entrega de nuestra serie Infrastructure as Code, los blogs que llevarán a los desarrolladores como usted a un nivel completamente nuevo de conciencia de la seguridad a la hora de desplegar una infraestructura segura dentro de su propia organización.
Ah, por cierto... ¿cómo te fue con el reto de la desconfiguración de seguridad en el blog anterior? Si quieres seguir adelante y abordar una vulnerabilidad de control de acceso de nivel funcional que falta ahora mismo, dirígete a la plataforma:
(El enlace anterior le llevará al desafío de Kubernetes, pero una vez que esté en la plataforma, utilice el menú desplegable para elegir también entre Ansible, CloudFormation, Terraform o Docker. Tú eliges).
Casi todas las aplicaciones desplegadas hoy en día tienen algún tipo de mecanismo de control de acceso que comprueba si un usuario tiene o no permiso para realizar las funciones solicitadas. Es prácticamente la piedra angular de una buena seguridad, además de la funcionalidad, cuando se crea una aplicación. De hecho, todas las aplicaciones web necesitan controles de acceso para que usuarios con diferentes privilegios puedan utilizar el programa.
Sin embargo, pueden surgir problemas cuando esas mismas funciones de verificación para el control de acceso no se realizan a nivel de la infraestructura, o están mal configuradas. Sin un control de acceso a nivel de infraestructura en perfecto orden, se abre toda una empresa a los piratas informáticos, que pueden utilizar esa vulnerabilidad como su puerta de entrada para el fisgoneo no autorizado o un ataque completo.
De hecho, explotar las vulnerabilidades de control de acceso a funciones ausentes o mal configuradas es extremadamente fácil. Los atacantes ni siquiera necesitan ser demasiado hábiles. Sólo necesitan saber qué comandos ejecutan funciones dentro de cualquier marco que soporte la aplicación. Si lo saben, es sólo una cuestión de prueba y error. Pueden enviar continuamente peticiones que no deberían estar permitidas, y en cuanto una de ellas tenga éxito, el sitio web, la aplicación, el servidor o incluso toda la red en cuestión podrían quedar expuestos.
¿Cómo funcionan los exploits de control de acceso a nivel de funciones faltantes?
Hay algunas formas en las que los controles de acceso a nivel de función pueden colarse en una organización. Por ejemplo, el acceso a nivel de función puede dejarse en manos de una aplicación y no ser verificado por la infraestructura subyacente. O bien, el control de acceso a nivel de infraestructura puede estar mal configurado. En algunos casos, los administradores asumen que los usuarios no autorizados no sabrán cómo llegar a los recursos de la infraestructura que sólo los usuarios de nivel superior deberían poder ver y utilizan un modelo de "seguridad por oscuridad" que rara vez funciona.
Para un ejemplo de seguridad por oscuridad, la siguiente URL es probablemente vulnerable a un ataque:
http://companywebsite.com/app/NormalUserHomepage
Si un usuario autentificado emplea una técnica llamada Forced URL Browsing, podría intentar llegar a una página que sólo se muestra a los administradores. Un ejemplo podría ser:
http://companywebsite.com/app/AdminPages
Si no existe una verificación del lado del servidor, simplemente se les mostrará la página de administración (si su nombre coincide con la solicitud) y entonces tendrán acceso a cualquier función adicional que los administradores hagan desde la nueva página. Si el servidor devuelve un error de "página no encontrada" al atacante, éste puede simplemente seguir intentándolo hasta que descubra el nombre de la página de administración.
Para los atacantes, explotar la falta de controles de acceso a nivel de función es un proceso similar. En lugar de intentar navegar por páginas no autorizadas, envían solicitudes de funciones. Por ejemplo, podrían intentar crear un nuevo usuario con derechos de administrador. Así que su solicitud sería algo así, dependiendo del marco de trabajo:
POST/action/createuser name=hacker&pw=password&role=admin
Si no existe un control de acceso a nivel de función, entonces el ejemplo anterior tendría éxito y se crearía una nueva cuenta de administrador. Una vez que el atacante vuelva a iniciar sesión como el nuevo administrador, tendría el mismo acceso y permisos que cualquier otro administrador en esa red o servidor.
La solución a la falta de controles de acceso a nivel de función
Debido a que es tan fácil para los atacantes explotar las vulnerabilidades de control de acceso a nivel de funciones faltantes, es crítico que se encuentren, se arreglen y se prevengan. Afortunadamente, esto no es excesivamente difícil con algunos conocimientos y una formación básica en seguridad de la Infraestructura como Código.
La principal protección vendrá de la implementación de la autorización basada en roles a nivel de infraestructura. Nunca confíes en que las aplicaciones se encarguen de esa función. Incluso si lo hacen, tener una autorización del lado de la infraestructura garantizará que no se pierda nada. Lo ideal es que la autorización provenga de un lugar centralizado (por ejemplo, AWS IAM, Azure IAM, etc.) que se incorpore a la rutina de su organización y se aplique a cada nueva aplicación. Estos procesos de autorización pueden provenir del propio framework o de cualquier número de módulos externos fáciles de usar.
Por último, su organización debería adoptar el concepto de mínimo privilegio. Todas las acciones y funciones deben ser denegadas por defecto, y el proceso de autorización debe utilizarse para dar a los usuarios válidos permiso para hacer lo que necesiten. Sólo se les debe dar el permiso suficiente para realizar la función requerida, y sólo durante el tiempo necesario.
La falta de controles de acceso a nivel de función puede ser devastadora. Pero, afortunadamente, si incorpora a su organización buenas prácticas de autorización a nivel de infraestructura, puede evitar fácilmente que este problema se produzca.
¿Crees que estás preparado para detectar un error de control de acceso en la naturaleza? Compara estos fragmentos de código de Docker; uno vulnerable y otro seguro:
Vulnerable:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Seguro:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Aprende más, desafíate a ti mismo
Consulte las páginas del Secure Code Warrior páginas del blog para obtener más información sobre esta vulnerabilidad y sobre cómo proteger a su organización y a sus clientes de los estragos de otros fallos y vulnerabilidades de seguridad.
Y si te lo perdiste antes, puedes probar un reto de seguridad gamificado de IaC en la plataforma Secure Code Warrior para mantener todos tus conocimientos de ciberseguridad perfeccionados y actualizados.
Estén atentos al próximo capítulo.
Sin un control de acceso a nivel de infraestructura en perfecto orden, se abre toda una empresa a los atacantes, que pueden utilizar esa vulnerabilidad como puerta de entrada para el fisgoneo no autorizado o para un ataque completo.
Matias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
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ónMatias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
Matías es un investigador y desarrollador con más de 15 años de experiencia práctica en seguridad de software. Ha desarrollado soluciones para empresas como Fortify Software y su propia empresa Sensei Security. A lo largo de su carrera, Matías ha dirigido múltiples proyectos de investigación sobre seguridad de aplicaciones que han dado lugar a productos comerciales y cuenta con más de 10 patentes en su haber. Cuando está lejos de su escritorio, Matias ha servido como instructor para la formación de seguridad de aplicaciones avanzadas courses y regularmente habla en conferencias mundiales como la Conferencia RSA, Black Hat, DefCon, BSIMM, OWASP AppSec y BruCon.
Matías es doctor en Ingeniería Informática por la Universidad de Gante, donde estudió la seguridad de las aplicaciones mediante la ofuscación de programas para ocultar el funcionamiento interno de una aplicación.
Ha llegado el momento de la siguiente entrega de nuestra serie Infrastructure as Code, los blogs que llevarán a los desarrolladores como usted a un nivel completamente nuevo de conciencia de la seguridad a la hora de desplegar una infraestructura segura dentro de su propia organización.
Ah, por cierto... ¿cómo te fue con el reto de la desconfiguración de seguridad en el blog anterior? Si quieres seguir adelante y abordar una vulnerabilidad de control de acceso de nivel funcional que falta ahora mismo, dirígete a la plataforma:
(El enlace anterior le llevará al desafío de Kubernetes, pero una vez que esté en la plataforma, utilice el menú desplegable para elegir también entre Ansible, CloudFormation, Terraform o Docker. Tú eliges).
Casi todas las aplicaciones desplegadas hoy en día tienen algún tipo de mecanismo de control de acceso que comprueba si un usuario tiene o no permiso para realizar las funciones solicitadas. Es prácticamente la piedra angular de una buena seguridad, además de la funcionalidad, cuando se crea una aplicación. De hecho, todas las aplicaciones web necesitan controles de acceso para que usuarios con diferentes privilegios puedan utilizar el programa.
Sin embargo, pueden surgir problemas cuando esas mismas funciones de verificación para el control de acceso no se realizan a nivel de la infraestructura, o están mal configuradas. Sin un control de acceso a nivel de infraestructura en perfecto orden, se abre toda una empresa a los piratas informáticos, que pueden utilizar esa vulnerabilidad como su puerta de entrada para el fisgoneo no autorizado o un ataque completo.
De hecho, explotar las vulnerabilidades de control de acceso a funciones ausentes o mal configuradas es extremadamente fácil. Los atacantes ni siquiera necesitan ser demasiado hábiles. Sólo necesitan saber qué comandos ejecutan funciones dentro de cualquier marco que soporte la aplicación. Si lo saben, es sólo una cuestión de prueba y error. Pueden enviar continuamente peticiones que no deberían estar permitidas, y en cuanto una de ellas tenga éxito, el sitio web, la aplicación, el servidor o incluso toda la red en cuestión podrían quedar expuestos.
¿Cómo funcionan los exploits de control de acceso a nivel de funciones faltantes?
Hay algunas formas en las que los controles de acceso a nivel de función pueden colarse en una organización. Por ejemplo, el acceso a nivel de función puede dejarse en manos de una aplicación y no ser verificado por la infraestructura subyacente. O bien, el control de acceso a nivel de infraestructura puede estar mal configurado. En algunos casos, los administradores asumen que los usuarios no autorizados no sabrán cómo llegar a los recursos de la infraestructura que sólo los usuarios de nivel superior deberían poder ver y utilizan un modelo de "seguridad por oscuridad" que rara vez funciona.
Para un ejemplo de seguridad por oscuridad, la siguiente URL es probablemente vulnerable a un ataque:
http://companywebsite.com/app/NormalUserHomepage
Si un usuario autentificado emplea una técnica llamada Forced URL Browsing, podría intentar llegar a una página que sólo se muestra a los administradores. Un ejemplo podría ser:
http://companywebsite.com/app/AdminPages
Si no existe una verificación del lado del servidor, simplemente se les mostrará la página de administración (si su nombre coincide con la solicitud) y entonces tendrán acceso a cualquier función adicional que los administradores hagan desde la nueva página. Si el servidor devuelve un error de "página no encontrada" al atacante, éste puede simplemente seguir intentándolo hasta que descubra el nombre de la página de administración.
Para los atacantes, explotar la falta de controles de acceso a nivel de función es un proceso similar. En lugar de intentar navegar por páginas no autorizadas, envían solicitudes de funciones. Por ejemplo, podrían intentar crear un nuevo usuario con derechos de administrador. Así que su solicitud sería algo así, dependiendo del marco de trabajo:
POST/action/createuser name=hacker&pw=password&role=admin
Si no existe un control de acceso a nivel de función, entonces el ejemplo anterior tendría éxito y se crearía una nueva cuenta de administrador. Una vez que el atacante vuelva a iniciar sesión como el nuevo administrador, tendría el mismo acceso y permisos que cualquier otro administrador en esa red o servidor.
La solución a la falta de controles de acceso a nivel de función
Debido a que es tan fácil para los atacantes explotar las vulnerabilidades de control de acceso a nivel de funciones faltantes, es crítico que se encuentren, se arreglen y se prevengan. Afortunadamente, esto no es excesivamente difícil con algunos conocimientos y una formación básica en seguridad de la Infraestructura como Código.
La principal protección vendrá de la implementación de la autorización basada en roles a nivel de infraestructura. Nunca confíes en que las aplicaciones se encarguen de esa función. Incluso si lo hacen, tener una autorización del lado de la infraestructura garantizará que no se pierda nada. Lo ideal es que la autorización provenga de un lugar centralizado (por ejemplo, AWS IAM, Azure IAM, etc.) que se incorpore a la rutina de su organización y se aplique a cada nueva aplicación. Estos procesos de autorización pueden provenir del propio framework o de cualquier número de módulos externos fáciles de usar.
Por último, su organización debería adoptar el concepto de mínimo privilegio. Todas las acciones y funciones deben ser denegadas por defecto, y el proceso de autorización debe utilizarse para dar a los usuarios válidos permiso para hacer lo que necesiten. Sólo se les debe dar el permiso suficiente para realizar la función requerida, y sólo durante el tiempo necesario.
La falta de controles de acceso a nivel de función puede ser devastadora. Pero, afortunadamente, si incorpora a su organización buenas prácticas de autorización a nivel de infraestructura, puede evitar fácilmente que este problema se produzca.
¿Crees que estás preparado para detectar un error de control de acceso en la naturaleza? Compara estos fragmentos de código de Docker; uno vulnerable y otro seguro:
Vulnerable:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Seguro:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Aprende más, desafíate a ti mismo
Consulte las páginas del Secure Code Warrior páginas del blog para obtener más información sobre esta vulnerabilidad y sobre cómo proteger a su organización y a sus clientes de los estragos de otros fallos y vulnerabilidades de seguridad.
Y si te lo perdiste antes, puedes probar un reto de seguridad gamificado de IaC en la plataforma Secure Code Warrior para mantener todos tus conocimientos de ciberseguridad perfeccionados y actualizados.
Estén atentos al próximo capítulo.
Ha llegado el momento de la siguiente entrega de nuestra serie Infrastructure as Code, los blogs que llevarán a los desarrolladores como usted a un nivel completamente nuevo de conciencia de la seguridad a la hora de desplegar una infraestructura segura dentro de su propia organización.
Ah, por cierto... ¿cómo te fue con el reto de la desconfiguración de seguridad en el blog anterior? Si quieres seguir adelante y abordar una vulnerabilidad de control de acceso de nivel funcional que falta ahora mismo, dirígete a la plataforma:
(El enlace anterior le llevará al desafío de Kubernetes, pero una vez que esté en la plataforma, utilice el menú desplegable para elegir también entre Ansible, CloudFormation, Terraform o Docker. Tú eliges).
Casi todas las aplicaciones desplegadas hoy en día tienen algún tipo de mecanismo de control de acceso que comprueba si un usuario tiene o no permiso para realizar las funciones solicitadas. Es prácticamente la piedra angular de una buena seguridad, además de la funcionalidad, cuando se crea una aplicación. De hecho, todas las aplicaciones web necesitan controles de acceso para que usuarios con diferentes privilegios puedan utilizar el programa.
Sin embargo, pueden surgir problemas cuando esas mismas funciones de verificación para el control de acceso no se realizan a nivel de la infraestructura, o están mal configuradas. Sin un control de acceso a nivel de infraestructura en perfecto orden, se abre toda una empresa a los piratas informáticos, que pueden utilizar esa vulnerabilidad como su puerta de entrada para el fisgoneo no autorizado o un ataque completo.
De hecho, explotar las vulnerabilidades de control de acceso a funciones ausentes o mal configuradas es extremadamente fácil. Los atacantes ni siquiera necesitan ser demasiado hábiles. Sólo necesitan saber qué comandos ejecutan funciones dentro de cualquier marco que soporte la aplicación. Si lo saben, es sólo una cuestión de prueba y error. Pueden enviar continuamente peticiones que no deberían estar permitidas, y en cuanto una de ellas tenga éxito, el sitio web, la aplicación, el servidor o incluso toda la red en cuestión podrían quedar expuestos.
¿Cómo funcionan los exploits de control de acceso a nivel de funciones faltantes?
Hay algunas formas en las que los controles de acceso a nivel de función pueden colarse en una organización. Por ejemplo, el acceso a nivel de función puede dejarse en manos de una aplicación y no ser verificado por la infraestructura subyacente. O bien, el control de acceso a nivel de infraestructura puede estar mal configurado. En algunos casos, los administradores asumen que los usuarios no autorizados no sabrán cómo llegar a los recursos de la infraestructura que sólo los usuarios de nivel superior deberían poder ver y utilizan un modelo de "seguridad por oscuridad" que rara vez funciona.
Para un ejemplo de seguridad por oscuridad, la siguiente URL es probablemente vulnerable a un ataque:
http://companywebsite.com/app/NormalUserHomepage
Si un usuario autentificado emplea una técnica llamada Forced URL Browsing, podría intentar llegar a una página que sólo se muestra a los administradores. Un ejemplo podría ser:
http://companywebsite.com/app/AdminPages
Si no existe una verificación del lado del servidor, simplemente se les mostrará la página de administración (si su nombre coincide con la solicitud) y entonces tendrán acceso a cualquier función adicional que los administradores hagan desde la nueva página. Si el servidor devuelve un error de "página no encontrada" al atacante, éste puede simplemente seguir intentándolo hasta que descubra el nombre de la página de administración.
Para los atacantes, explotar la falta de controles de acceso a nivel de función es un proceso similar. En lugar de intentar navegar por páginas no autorizadas, envían solicitudes de funciones. Por ejemplo, podrían intentar crear un nuevo usuario con derechos de administrador. Así que su solicitud sería algo así, dependiendo del marco de trabajo:
POST/action/createuser name=hacker&pw=password&role=admin
Si no existe un control de acceso a nivel de función, entonces el ejemplo anterior tendría éxito y se crearía una nueva cuenta de administrador. Una vez que el atacante vuelva a iniciar sesión como el nuevo administrador, tendría el mismo acceso y permisos que cualquier otro administrador en esa red o servidor.
La solución a la falta de controles de acceso a nivel de función
Debido a que es tan fácil para los atacantes explotar las vulnerabilidades de control de acceso a nivel de funciones faltantes, es crítico que se encuentren, se arreglen y se prevengan. Afortunadamente, esto no es excesivamente difícil con algunos conocimientos y una formación básica en seguridad de la Infraestructura como Código.
La principal protección vendrá de la implementación de la autorización basada en roles a nivel de infraestructura. Nunca confíes en que las aplicaciones se encarguen de esa función. Incluso si lo hacen, tener una autorización del lado de la infraestructura garantizará que no se pierda nada. Lo ideal es que la autorización provenga de un lugar centralizado (por ejemplo, AWS IAM, Azure IAM, etc.) que se incorpore a la rutina de su organización y se aplique a cada nueva aplicación. Estos procesos de autorización pueden provenir del propio framework o de cualquier número de módulos externos fáciles de usar.
Por último, su organización debería adoptar el concepto de mínimo privilegio. Todas las acciones y funciones deben ser denegadas por defecto, y el proceso de autorización debe utilizarse para dar a los usuarios válidos permiso para hacer lo que necesiten. Sólo se les debe dar el permiso suficiente para realizar la función requerida, y sólo durante el tiempo necesario.
La falta de controles de acceso a nivel de función puede ser devastadora. Pero, afortunadamente, si incorpora a su organización buenas prácticas de autorización a nivel de infraestructura, puede evitar fácilmente que este problema se produzca.
¿Crees que estás preparado para detectar un error de control de acceso en la naturaleza? Compara estos fragmentos de código de Docker; uno vulnerable y otro seguro:
Vulnerable:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Seguro:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Aprende más, desafíate a ti mismo
Consulte las páginas del Secure Code Warrior páginas del blog para obtener más información sobre esta vulnerabilidad y sobre cómo proteger a su organización y a sus clientes de los estragos de otros fallos y vulnerabilidades de seguridad.
Y si te lo perdiste antes, puedes probar un reto de seguridad gamificado de IaC en la plataforma Secure Code Warrior para mantener todos tus conocimientos de ciberseguridad perfeccionados y actualizados.
Estén atentos al próximo capítulo.
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ónMatias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
Matías es un investigador y desarrollador con más de 15 años de experiencia práctica en seguridad de software. Ha desarrollado soluciones para empresas como Fortify Software y su propia empresa Sensei Security. A lo largo de su carrera, Matías ha dirigido múltiples proyectos de investigación sobre seguridad de aplicaciones que han dado lugar a productos comerciales y cuenta con más de 10 patentes en su haber. Cuando está lejos de su escritorio, Matias ha servido como instructor para la formación de seguridad de aplicaciones avanzadas courses y regularmente habla en conferencias mundiales como la Conferencia RSA, Black Hat, DefCon, BSIMM, OWASP AppSec y BruCon.
Matías es doctor en Ingeniería Informática por la Universidad de Gante, donde estudió la seguridad de las aplicaciones mediante la ofuscación de programas para ocultar el funcionamiento interno de una aplicación.
Ha llegado el momento de la siguiente entrega de nuestra serie Infrastructure as Code, los blogs que llevarán a los desarrolladores como usted a un nivel completamente nuevo de conciencia de la seguridad a la hora de desplegar una infraestructura segura dentro de su propia organización.
Ah, por cierto... ¿cómo te fue con el reto de la desconfiguración de seguridad en el blog anterior? Si quieres seguir adelante y abordar una vulnerabilidad de control de acceso de nivel funcional que falta ahora mismo, dirígete a la plataforma:
(El enlace anterior le llevará al desafío de Kubernetes, pero una vez que esté en la plataforma, utilice el menú desplegable para elegir también entre Ansible, CloudFormation, Terraform o Docker. Tú eliges).
Casi todas las aplicaciones desplegadas hoy en día tienen algún tipo de mecanismo de control de acceso que comprueba si un usuario tiene o no permiso para realizar las funciones solicitadas. Es prácticamente la piedra angular de una buena seguridad, además de la funcionalidad, cuando se crea una aplicación. De hecho, todas las aplicaciones web necesitan controles de acceso para que usuarios con diferentes privilegios puedan utilizar el programa.
Sin embargo, pueden surgir problemas cuando esas mismas funciones de verificación para el control de acceso no se realizan a nivel de la infraestructura, o están mal configuradas. Sin un control de acceso a nivel de infraestructura en perfecto orden, se abre toda una empresa a los piratas informáticos, que pueden utilizar esa vulnerabilidad como su puerta de entrada para el fisgoneo no autorizado o un ataque completo.
De hecho, explotar las vulnerabilidades de control de acceso a funciones ausentes o mal configuradas es extremadamente fácil. Los atacantes ni siquiera necesitan ser demasiado hábiles. Sólo necesitan saber qué comandos ejecutan funciones dentro de cualquier marco que soporte la aplicación. Si lo saben, es sólo una cuestión de prueba y error. Pueden enviar continuamente peticiones que no deberían estar permitidas, y en cuanto una de ellas tenga éxito, el sitio web, la aplicación, el servidor o incluso toda la red en cuestión podrían quedar expuestos.
¿Cómo funcionan los exploits de control de acceso a nivel de funciones faltantes?
Hay algunas formas en las que los controles de acceso a nivel de función pueden colarse en una organización. Por ejemplo, el acceso a nivel de función puede dejarse en manos de una aplicación y no ser verificado por la infraestructura subyacente. O bien, el control de acceso a nivel de infraestructura puede estar mal configurado. En algunos casos, los administradores asumen que los usuarios no autorizados no sabrán cómo llegar a los recursos de la infraestructura que sólo los usuarios de nivel superior deberían poder ver y utilizan un modelo de "seguridad por oscuridad" que rara vez funciona.
Para un ejemplo de seguridad por oscuridad, la siguiente URL es probablemente vulnerable a un ataque:
http://companywebsite.com/app/NormalUserHomepage
Si un usuario autentificado emplea una técnica llamada Forced URL Browsing, podría intentar llegar a una página que sólo se muestra a los administradores. Un ejemplo podría ser:
http://companywebsite.com/app/AdminPages
Si no existe una verificación del lado del servidor, simplemente se les mostrará la página de administración (si su nombre coincide con la solicitud) y entonces tendrán acceso a cualquier función adicional que los administradores hagan desde la nueva página. Si el servidor devuelve un error de "página no encontrada" al atacante, éste puede simplemente seguir intentándolo hasta que descubra el nombre de la página de administración.
Para los atacantes, explotar la falta de controles de acceso a nivel de función es un proceso similar. En lugar de intentar navegar por páginas no autorizadas, envían solicitudes de funciones. Por ejemplo, podrían intentar crear un nuevo usuario con derechos de administrador. Así que su solicitud sería algo así, dependiendo del marco de trabajo:
POST/action/createuser name=hacker&pw=password&role=admin
Si no existe un control de acceso a nivel de función, entonces el ejemplo anterior tendría éxito y se crearía una nueva cuenta de administrador. Una vez que el atacante vuelva a iniciar sesión como el nuevo administrador, tendría el mismo acceso y permisos que cualquier otro administrador en esa red o servidor.
La solución a la falta de controles de acceso a nivel de función
Debido a que es tan fácil para los atacantes explotar las vulnerabilidades de control de acceso a nivel de funciones faltantes, es crítico que se encuentren, se arreglen y se prevengan. Afortunadamente, esto no es excesivamente difícil con algunos conocimientos y una formación básica en seguridad de la Infraestructura como Código.
La principal protección vendrá de la implementación de la autorización basada en roles a nivel de infraestructura. Nunca confíes en que las aplicaciones se encarguen de esa función. Incluso si lo hacen, tener una autorización del lado de la infraestructura garantizará que no se pierda nada. Lo ideal es que la autorización provenga de un lugar centralizado (por ejemplo, AWS IAM, Azure IAM, etc.) que se incorpore a la rutina de su organización y se aplique a cada nueva aplicación. Estos procesos de autorización pueden provenir del propio framework o de cualquier número de módulos externos fáciles de usar.
Por último, su organización debería adoptar el concepto de mínimo privilegio. Todas las acciones y funciones deben ser denegadas por defecto, y el proceso de autorización debe utilizarse para dar a los usuarios válidos permiso para hacer lo que necesiten. Sólo se les debe dar el permiso suficiente para realizar la función requerida, y sólo durante el tiempo necesario.
La falta de controles de acceso a nivel de función puede ser devastadora. Pero, afortunadamente, si incorpora a su organización buenas prácticas de autorización a nivel de infraestructura, puede evitar fácilmente que este problema se produzca.
¿Crees que estás preparado para detectar un error de control de acceso en la naturaleza? Compara estos fragmentos de código de Docker; uno vulnerable y otro seguro:
Vulnerable:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Seguro:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Aprende más, desafíate a ti mismo
Consulte las páginas del Secure Code Warrior páginas del blog para obtener más información sobre esta vulnerabilidad y sobre cómo proteger a su organización y a sus clientes de los estragos de otros fallos y vulnerabilidades de seguridad.
Y si te lo perdiste antes, puedes probar un reto de seguridad gamificado de IaC en la plataforma Secure Code Warrior para mantener todos tus conocimientos de ciberseguridad perfeccionados y actualizados.
Estén atentos al próximo capítulo.
Índice
Matias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
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.