Utilizzo / ricerca di canali nascosti nella comunicazione tra processi

8

Ho un esercizio di classe che coinvolge un gioco virtuale di lupi mannari / mafia. A noi non è insegnato davvero come fare qualsiasi cosa in questa classe, il che rende difficile per tutti fare i laboratori.

L'idea è che per certi round del gioco, i cattivi votino per uccidere le persone, poi nel prossimo turno ognuno inizi a indovinare chi sono i cattivi e cerca invece di ucciderli.

Questo è impostato come:

  • un server python utilizzato da un moderatore
  • un client python lanciato da tutti per inviare / ricevere messaggi sul server (possiamo modificarlo)
  • tutti usano ssh per connettersi a una macchina (quindi i server e i client vengono eseguiti su una macchina)
  • comunicano attraverso pipe denominate (nascoste nelle directory protette)

Dobbiamo:

  • come i bravi ragazzi: scopri quando i licantropi stanno comunicando con il server in modo che possiamo votare per uccidere quell'utente
  • o come i cattivi: non farsi prendere in comunicazione con il server

Alcune idee con cui sto provando a lavorare, ma sono troppo di una rete / Linux noob da usare:

  • / proc / pid # / sched Ci dovrebbero essere cose utili qui. Penso di poter controllare le opzioni di contesto volontario per vedere quando un utente sta digitando. Sfortunatamente non sono bravo con lo scripting. Inoltre, non sono sicuro di come ottenere il pid #. Forse pipe top in grep "python"?

  • controlla le connessioni ssh alla macchina e in qualche modo ascolta il socket per le comunicazioni?

Sono completamente sconcertato, quindi qualsiasi consiglio sarebbe fantastico.

    
posta Robert 18.04.2013 - 23:50
fonte

1 risposta

1

Solo alcune riflessioni casuali qui: questo è un problema piuttosto interessante, e presumo che sia i buoni che i cattivi usano lo stesso cliente, e che i cattivi siano segretamente scelti dal moderatore e sconosciuti l'un l'altro.

In questo scenario, il semplice rilevamento delle comunicazioni con il server non sarà sufficiente, perché un bravo ragazzo deve farlo per acquisire informazioni. Inoltre, qualsiasi protocollo per eleggere un bravo ragazzo supervisore potrebbe scegliere un cattivo ragazzo.

Inoltre non è chiaro se i ragazzi, buoni o cattivi, abbiano un canale privato o pubblico per comunicare tra loro .

Un approccio potrebbe essere quello di trasmettere periodicamente sul canale pubblico i parametri di stato della rete. Ciò significa che il client è intrinsecamente "buono" o "neutro" (non ha alcun supporto per l'attività licantropo), così che ogni licantropo deve istanziare e distribuire una soluzione alternativa e ingannare il proprio cliente a non segnalare attività "cattivi". Tutti gli altri client ascolterebbero rapporti anomali (ad esempio connessioni extra al server); la presentazione di un rapporto anomalo, la mancata presentazione di qualcosa o l'invio di un rapporto corrotto potrebbero essere considerati prove di follia.

Ad esempio, a ciascun utente potrebbe essere richiesto di inviare pubblicamente i risultati di un'utilità "bravo ragazzo" che interroga e timestamp l'output di netstat -snap tcp e netstat -na per rilevare le comunicazioni con il server in modo non denegabile. Questo potrebbe essere ridotto ad una semplice utility che emette un timestamp, un nome utente, un seme casuale e un hash segreto:

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

(Ogni utente, anche i licantropi, dovrebbe installare l'utilità sulla base del fatto che sia un bravo ragazzo).

Se il canale inter-ragazzo è privato, possiamo semplicemente lasciare che ogni cliente controlli gli altri a intervalli. Il lupo mannaro sarà immediatamente individuato non appena emetterà una sentenza di morte, e tutti i bravi ragazzi lo uccideranno. Questo lascia tutti gli altri licantropi liberi di usare il proiettile in quel turno per abbattere qualche bravo ragazzo, ma se sono sotto gli stessi limiti i bravi ragazzi sono - non sanno se stessi - allora la loro azione sarà scoordinata e inefficace e ogni turno vedrà un lupo mannaro andare giù.

Lo schema sopra vale ancora, se i licantropi hanno un proprio client che consente loro di coordinarsi, a patto che non li abiliti a simulare lo stato della rete.

    
risposta data 19.04.2013 - 09:57
fonte

Leggi altre domande sui tag