Uso / búsqueda de canales ocultos en la comunicación entre procesos

8

Tengo un ejercicio de clase que involucra un juego virtual de Werewolves / Mafia. Realmente no nos enseñan cómo hacer nada en esta clase, lo que dificulta que todos hagan los laboratorios.

La idea es que en ciertas rondas del juego, los malos voten por la gente que mata, luego, en la próxima ronda, todos comienzan a adivinar quiénes son los malos y tratan de matarlos.

Esto se configura como:

  • un servidor python utilizado por un moderador
  • un cliente de Python lanzado por todos para enviar / recibir mensajes del servidor (podemos modificarlo)
  • todos usan ssh para conectarse a una máquina (por lo que el servidor y los clientes se ejecutan en una máquina)
  • se comunican a través de canalizaciones con nombre (escondidas en directorios protegidos)

Necesitamos:

  • como los buenos: averigua cuándo los hombres lobo se están comunicando con el servidor para que podamos votar y matar a ese usuario
  • o como los malos: no se dejen atrapar al comunicarse con el servidor

Algunas ideas con las que estoy tratando de trabajar pero que soy demasiado poco para usar en una red / linux noob:

  • / proc / pid # / sched Debería haber cosas útiles aquí. Creo que puedo verificar los cambios de contexto voluntarios para ver cuándo un usuario está escribiendo. Desafortunadamente no soy bueno con los scripts. Además, no estoy seguro de cómo obtener el pid #. Tal vez la parte superior de la tubería en grep "python"?

  • compruebe las conexiones ssh a la máquina y escuche de alguna manera el conector para las comunicaciones?

Estoy completamente perplejo, por lo que cualquier consejo sería increíble.

    
pregunta Robert 18.04.2013 - 23:50
fuente

1 respuesta

1

Solo algunas reflexiones al azar aquí: este es un problema bastante interesante, y asumo que tanto los buenos como los malos usan el mismo cliente, y que los malos son elegidos en secreto por el moderador y desconocidos entre sí.

En este escenario, simplemente detectar la comunicación con el servidor no será suficiente, porque un buen tipo debe hacerlo para obtener información. Además, cualquier protocolo para elegir a un supervisor, un buen tipo, podría elegir a un malo en su lugar.

Tampoco está claro si los individuos, buenos o malos, tienen un canal privado o público para comunicarse entre ellos .

Un enfoque podría ser transmitir periódicamente en los parámetros de estado de la red del canal público. Esto significa que el cliente es inherentemente "bueno" o "neutral" (no tiene soporte para la actividad del hombre lobo), por lo que cualquier hombre lobo tiene que crear una instancia y desplegar una solución y engañar a su propio cliente para que no informe la actividad del "chico malo". Todos los demás clientes escucharán los informes anómalos (por ejemplo, conexiones adicionales al servidor); el envío de un informe anómalo, el hecho de no enviar nada o el envío de un informe dañado se pueden tomar como evidencia de la condición de hombre lobo.

Por ejemplo, se puede solicitar a cada usuario que envíe públicamente los resultados de una utilidad "buena persona" que consulta y marca la hora de la salida de netstat -snap tcp y netstat -na para detectar las comunicaciones con el servidor de forma no denegable. Esto podría reducirse a una sencilla utilidad que genera una marca de tiempo, un nombre de usuario, una semilla aleatoria y un hash secreto:

12345678:lserni:56789:SHA1("secret:12345678:lserni:56789:WEREWOLF!")

(Se esperaría que todos los usuarios, incluso los hombres lobo, instalen la utilidad porque él es un buen tipo).

Si el canal entre individuos es privado, podemos dejar que cada cliente revise a los demás a intervalos. El hombre lobo será descubierto inmediatamente tan pronto como emita una sentencia de muerte, y todos los buenos le dispararán. Esto deja a todos los demás hombres lobo libres para usar su bala en ese turno para derribar a un buen tipo, pero si están bajo las mismas limitaciones que los buenos, no se conocen a sí mismos, entonces su acción será descoordinada e ineficaz. , y cada turno verá caer un hombre lobo.

El esquema anterior aún se mantiene, si a los hombres lobo se les da un cliente propio que les permita coordinar, siempre y cuando no les permita falsificar el estado de la red.

    
respondido por el LSerni 19.04.2013 - 09:57
fuente

Lea otras preguntas en las etiquetas