¿Cómo puedo verificar si mi programa tiene vulnerabilidades a través de TCP?

3

Hice un programa que se ejecuta constantemente en un servidor Linux (Programa A ). También creé otro programa que actúa como interfaz de usuario para A (Programa B ). A escucha las conexiones entrantes a través de TCP. Después de que B se conecte a A y se autentique utilizando una contraseña, A envía actualizaciones a B cada pocos segundos. La conexión está cifrada con SSL. También estoy usando un nonce en cada mensaje para evitar ataques de repetición.

Ya que soy muy nuevo en la programación de socket, me gustaría verificar A para detectar vulnerabilidades / vulnerabilidades en TCP (por ejemplo, desbordamiento de búfer). No quiero que extraños puedan extraer datos de A utilizando exploits.

¿Qué vulnerabilidades necesitaría revisar?

    
pregunta thesys 14.01.2017 - 15:26
fuente

1 respuesta

3

Puede intentar buscar clases de vulnerabilidades, pero es probable que la complejidad del código lo agote antes de que agote el espacio más pequeño posible. Esta es la razón por la que existen fuzzers de aprendizaje automático de compilación.

Echa un vistazo a American Fuzzy Lop: enlace

Usted construye un programa de prueba pequeño y contenido que llama directamente a la lógica de su red con 'datos de red' proporcionados por el fuzzer. El fuzzer manipulará un 'zoológico' de muestras (archivos de datos en un directorio) realizando cambios en las muestras y llamando a su lógica. Es mejor capturar manualmente (wireshark) algunas pruebas y extraer los paquetes del cliente para cada respuesta a un archivo de muestra para el fuzzer. Es lo suficientemente inteligente como para reconocer un nonce proporcionado en las muestras.

Encontró un bucle infinito de 1 en 4.4 mil millones para mí en unos pocos segundos. Con las opciones correctas y un poco de ingeniería, incluso puede encontrar su lectura más allá de los errores del búfer.

Ayuda si su lógica de respuesta ya está bien encapsulada y no llega a los servicios lentos (como la red) en cada mensaje. No quieres que escriba en tu base de datos. Es probable que esto requiera una inicialización especial de su estado para aceptar el mismo código de nonce durante la ejecución de una prueba o debe establecer forzosamente un nonce válido en los datos para cada llamada. Afortunadamente, una de las capacidades del fuzzer es copiar su estado y restablecerlo antes de cada variación. Si el nonce se establece durante la inicialización de la sesión antes de los datos de respuesta del cliente, esta opción de rendimiento lo dejará en libertad.

Si no fuera obvio, deberá omitir la funcionalidad SSL para este ejecutable de prueba.

Por supuesto, existen otras soluciones de prueba, como Selenium, pero el enfoque es diferente. ¿Desea encontrar todas las vulnerabilidades con un esfuerzo mínimo de generación de pruebas y obtener una reproducción confiable? Lop fuzzy americano.

    
respondido por el Jeff K 24.02.2017 - 08:24
fuente

Lea otras preguntas en las etiquetas