Experimentando con seguridad con sockets

6

Estoy aprendiendo sobre la programación de socket TCP / IP y (Berkeley / UNIX). Digamos que tengo dos escenarios:

1) Escribo dos programas en C, un cliente y un servidor, y los vinculo a un puerto no muy conocido en el mismo host (Linux), y experimento con el intercambio de datos usando mis habilidades de C (principiante) .

2) Ejecuto el servidor en Linux y ejecuto el cliente desde una Windows que está en la misma LAN (detrás de NAT). Creo que esto significa que el puerto en Windows está "activo abierto"? (Tenga en cuenta que todavía no sé nada acerca de WinSock o de cómo evitar NAT.)

En cada uno de estos casos, ¿es posible que algún robot pueda buscar puertos abiertos mientras uno o ambos programas se ejecutan detrás de NAT? Si es así, ¿hay una manera para que un atacante vea la fuente de los programas personalizados que estoy ejecutando y explote los punteros mal utilizados, haga sobrecargas de búfer, etc.? Esta es una red doméstica, y no hay razón para que alguien la apunte específicamente.

    
pregunta Vale132 20.12.2015 - 20:01
fuente

1 respuesta

4

Ya he tenido bots conectados a mis aplicaciones al experimentar con aplicaciones cliente / servidor (aunque solo en puertos conocidos). Sin embargo, el potencial de abuso es pequeño. Los bots que se conectan a hosts aleatorios por lo general primero intentan tomar una huella dactilar de qué aplicación se está ejecutando (lo cual no funcionará porque nadie sabe que existe) y luego ejecutan ataques conocidos contra esa aplicación (no sabrán nada de una aplicación que nunca han visto).

Si desea ser más cuidadoso (o simplemente deshacerse del ruido), puede configurar su enrutador para deshabilitar el reenvío de puertos para su aplicación de servidor. De esa manera solo se puede acceder desde la LAN local.

Si desea ser realmente cuidadoso, use el software de virtualización para ejecutar el cliente y el servidor en máquinas virtuales que se comunican a través de una red virtual.

Si quiere ser paranoico totalmente loco cuidadoso, desconecte el cliente y el servidor de Internet y pídales que se comuniquen en una LAN alámbrica aireada.

Con respecto a su pregunta "¿hay una manera para que un atacante vea la fuente de los programas personalizados que estoy ejecutando?": ¿Escribió intencionalmente un programa que responde con su propio código a ciertos mensajes de la red (es decir, un quine )? De lo contrario, es poco probable que ocurra un error involuntario que haga que esto ocurra, especialmente si se considera que los programas de C por lo general ya no tienen acceso a su propio código después de compilarlos. Una vulnerabilidad de saturación de búfer que vuelca partes del código compilado de la aplicación es concebible, pero el atacante tendría que invertir bastante trabajo para realizar ingeniería inversa y encontrar más vulnerabilidades. Y dudo que alguien se moleste en invertir tanto trabajo para desarrollar un programa de prueba por parte de un alumno que quizás nunca lo vuelva a ejecutar.

    
respondido por el Philipp 20.12.2015 - 22:45
fuente

Lea otras preguntas en las etiquetas