Configuración de un servidor CTF de seguridad

12

Estoy buscando recursos e información de personas que tengan experiencia en la ejecución de desafíos de captura de bandera.

Para resumir todo en una pregunta simple de una oración: ¿Cómo configura un servidor de tal manera que pueda permitir que sea hackeado a través de una vulnerabilidad muy específica mientras que (a) no se expone a usted ni a otros? riesgo indebido, y (b) evitar que un participante arruine la experiencia para otros.

Esto comparte mucho en común con la ejecución de un honeypot, pero una gran diferencia es el enfoque en mantener una experiencia constante para todos los visitantes para que un visitante no la "arruine" por los demás.

Como un poco de antecedentes, esto no se configura como una competencia, sino más bien como una forma de enseñar a los programadores el peligro y la naturaleza de las malas prácticas de codificación al mostrarles cómo se explotan. Por lo tanto, los servidores permanecerán accesibles de manera indefinida en lugar de simplemente durante una competencia.

Como motor de arranque: nuestro diseño existente consiste en máquinas Linux minimalistas y reducidas que se ejecutan como máquinas virtuales bajo KVM, todo el almacenamiento persistente montado solo para lectura, y todos los cambios del FS persistieron solo en la RAM. Los servidores se reinician periódicamente, eliminando cualquier posible cambio y volviendo a empezar de nuevo. No se permiten conexiones de red dentro o fuera a menos que sea necesario para la explotación en cuestión.

    
pregunta tylerl 16.01.2013 - 20:06
fuente

4 respuestas

5

No tengo experiencia ejecutando o configurando algo así, pero aquí están mis pensamientos sobre cómo evitar un riesgo indebido:

  • Querrá cierta supervisión externa en los servicios críticos en la máquina virtual. Un exploit que cause un choque ciertamente lo arruinaría para todos los demás. Estaría bien si alguien desfigurara el sitio web que se ejecuta en el cuadro siempre y cuando todos los enlaces necesarios a otras páginas permanezcan intactos, pero si lo desfiguren tanto que el resto del sitio web se vuelva inalcanzable o comience a lanzar códigos 500 Internal Error a los visitantes. o incluso bloquea el demonio HTTP por completo, que debería detectarse y remediarse rápidamente.

  • La máquina del atacante puede estar expuesta a alguna amenaza si no los supervisa. El primer kit de explotación encontrado por una búsqueda en Google del producto al que apuntan es tan probable que contenga malware como una herramienta de explotación real.

  • Riesgo político / legal. Firme formularios de exención para que los retengan, permitiéndoles explícitamente que intenten explotar esta máquina en particular. Explique las consecuencias de realizar estas mismas acciones sin el formulario firmado.

Y algunos pensamientos generales acerca de cómo ejecutar esto:

  • Muchas hazañas no muestran signos evidentes de éxito. Por supuesto, esto es parte de la experiencia de aprendizaje, para mostrar a los desarrolladores que simplemente desactivar la visualización de errores no obstaculiza por completo a los atacantes competentes. Pero podría ser bueno tener una interfaz separada para mostrar el contenido actual de la tabla de usuarios en la base de datos o el contenido de un directorio en particular o la lista de procesos en ejecución en la máquina. Esto podría ser algo que desactive más adelante a medida que el desarrollador mejore su habilidad para detectar sus propios éxitos.

  • Mantener puntuación. Para las personas que no están naturalmente interesadas en la seguridad, hacerlo divertido es la clave para mantener su atención, y un poco de competencia amistosa lo ayudará. Si solo está considerando permitir una única vulnerabilidad, no será tanto una puntuación como una lista de verificación de quién lo ha hecho y quién no, pero si un desarrollador encuentra una vulnerabilidad adicional a la que esperaba. estar allí, deberían ser elogiados públicamente de alguna manera.

  • Ya que apunta esto a los desarrolladores en lugar de a los examinadores de pruebas, su trabajo diario será el papel de defensa no tan glamoroso. Una vez que hayan explotado el código, una tarea de seguimiento podría ser ver si ellos pueden proteger el código por sí mismos antes de ver la mejor solución que su equipo haya encontrado colectivamente.

respondido por el Ladadadada 17.01.2013 - 00:08
fuente
5

No tengo ninguna gran experiencia con los desafíos de CTF. Pero he participado algunos y no soy un experto. Pero puedo contar mis experiencias.

  • En primer lugar, cuando se ejecuta un desafío CTF, podemos advertir a los usuarios sobre qué hacer y qué no hacer. Pero esto no se asegurará de que no hagan eso. Simplemente podemos decirles que no hagan DoS pero no se asegurará de que no usen DoS contra su servidor de juegos CTF
  • Cuando estamos brindando un servicio o sitio web para explotar, debemos asegurarnos de que solo sea posible ese tipo de ataque aquí y que el resto de la seguridad sea estricto. Esto sucedió cuando yo con mis amigos conduje una competencia simple de piratería en mi universidad. Dimos una aplicación para hackear. Probamos esa aplicación para asegurarnos de que solo haya una laguna. Pero los competidores utilizaron otros métodos complejos para explotar y lo hicieron.
  • La seguridad tiene que ver con la codificación incorrecta. Así que asegúrese de que sus servicios o aplicaciones no tengan lagunas.
  • Recuerdo que mi amigo estaba participando en una competencia CTF. Dijo que serán 6 horas de competencia, pero la competencia terminó después de 30 minutos porque uno de los competidores explotó una vulnerabilidad en el servidor CTF y todo se derrumbó. Por lo tanto, hacer y no hacer no es un asunto.

Simplemente, solo creará una vulnerabilidad en su aplicación para explotar. Pero los explotadores harán todo tipo de pruebas para romperlo porque no saben cuál es la vulnerabilidad exacta aquí. Es posible que una pequeña laguna que hayas perdido comprometa tu servidor.

    
respondido por el sujeesh 17.01.2013 - 15:10
fuente
2

Creo que stripe.com ha ejecutado 2 concursos CTF.

Ellos discuten el diseño en la siguiente entrada del blog. Puede resultarle útil:

enlace

    
respondido por el obscure 17.01.2013 - 15:39
fuente
0

Para sistemas Linux y Unix, sugiero crear algún tipo de estado regurgitado cada 24 horas a través de una plataforma como - enlace - que funciona a través de arranque PXE (probablemente ayudaría a entender scripting y cronjobs). Básicamente, configure un grupo de máquinas (virtuales o no) y haga que inicien una nueva imagen de referencia una vez al día.

Para un sistema de puntuación, consulte este código base enlace  - O tal vez este - enlace

Si te gustan Ubuntu y Vagrant, revisa el servidor CTF de Facebook, enlace

Probablemente la mejor base de plataforma es - enlace - y puede leer esta sección - enlace - que incluye documentos que cubren los inconvenientes de ejecutar un CTF sin la preparación y planificación adecuadas.

Los equipos de DEF CON CTF y HackUCF también han proporcionado sus códigos en GitHub - enlace - enlace

Uno de mis colegas también abre su código de resultados y el servidor CTF aquí - enlace

    
respondido por el atdre 22.07.2016 - 20:22
fuente

Lea otras preguntas en las etiquetas