Che cosa sono esattamente "Switch di contesto volontari"?


34

Ho un file binario e dovrei decifrare la sua password (compiti a casa). È stata inoltre fornita una funzione (una funzione che fa parte del file binario). Quella funzione ha mostrato che la stringa di input è stata confrontata con il carattere corretto della password per carattere e restituita falsamente all'istante quando un carattere era errato (non è un modo sicuro di farlo immagino perché è un tempo che perde e abbiamo un'idea della lunghezza corretta della password come esempio). Ma il nostro insegnante ha aggiunto un timer casuale che restituisce il risultato (Corretto / Sbagliato) per renderlo un po 'più difficile per noi ...

Comunque, l'ho già fatto con successo con il reverse engineering e ho ottenuto la password corretta. Ora ci sto giocando nella riga di comando:

/usr/bin/time -v ./program_name enter_password

Con questo comando, ottengo molte informazioni come l'ora di sistema, gli swap, i tempi di esecuzione. Ma ciò che è più interessante per me è "Switch di contesto volontario" perché più caratteri corretti della password immetto, meno "Switch di contesto volontario " Ottengo!

Più caratteri errati entro, più "cambiamenti di contesto volontari" ottengo.

Mi ci sono volute quasi due ore per decifrare la password semplicemente inserendo quel comando, inserendo i caratteri e osservando "Cambiamenti di contesto volontari". Ogni volta che UN personaggio era corretto, il "Cambio di contesto volontario" diminuiva di uno.

La mia domanda, che cosa sono esattamente "Switch di contesto volontari" e perché mi hanno aiutato a decifrare la password?


5
Congratulazioni per aver scoperto il campo ricco e ancora non completamente compreso degli attacchi del canale laterale .
zwol,

1
@zwol Cosa intendi con "ricco"? E inoltre, stiamo attualmente affrontando attacchi di canale laterale in classe, mi scusi che non ho "compreso appieno" il suo campo così rapidamente ....
cnmesr,

15
@cnmesr L'ho preso come un commento sincero, non sarcastico, dicendo che zwol considera il campo interessante perché sono ancora in corso nuove scoperte. Non è che non l' abbia capito appieno, è che nessuno lo capisce appieno, ed è questo che lo rende interessante.
hvd,

3
@hvd cnmesr Sì, questo è ciò che intendevo.
zwol,

@zwol Oh scusa allora! Ti ho frainteso e l'ho visto come un attacco: p
cnmesr,

Risposte:


36

La pagina man pertime spiega il concetto di cambio di contesto volontario e involontario:

The resource specifiers [...] are:
   c      Number of times the process was context-switched involuntarily
          (because the time slice expired).
   w      Number of times that the program was context-switched voluntarily, 
          for instance while waiting for an I/O operation to complete.

(la citazione proviene dal mio sistema Debian, la pagina man collegata ha un testo leggermente diverso)

Cioè, un cambio di contesto è volontario, se il processo lascia la CPU perché non ha nient'altro da fare (in attesa che accada qualcosa di esterno). Involontario, se desidera continuare alcuni calcoli, ma il sistema operativo decide che è il momento di passare a qualche altro processo.


Il modo in cui uno di questi elementi è correlato al programma di controllo password, dipende da ciò che fa effettivamente il programma.

Dal codice sorgente collegato nei commenti, vediamo che il programma chiama usleep()una volta per ogni carattere non corrispondente, continuando il ciclo di confronto sul carattere successivo in seguito. Dormire è volontario tanto quanto la resa della CPU arriva mai, quindi queste chiamate mostreranno come interruttori di contesto volontari per ogni personaggio non-maching.

Su Linux, dovresti essere in grado di vedere anche le chiamate strace.

Il ritardo finale deriva da un sonno randomizzato di T * (rand() % 3), cioè 0, 1 o 2 volte una costante. Questa è una granularità piuttosto grossolana, quindi dovrebbe essere facile calcolare la media facendo più tentativi con la stessa password.


3
Ecco il codice sorgente della funzione che ho menzionato sopra pastebin.com/iTzheD4u Grazie, darò un'occhiata alle chiamate con strace e spero di ottenere qualche informazione in più. Informazioni sul timer casuale: se la password ha una lunghezza errata, il tempo di uscita è lo stesso (molto molto veloce) e il timer casuale non viene eseguito. Se la lunghezza della password è corretta, l'output è casuale perché viene eseguito il timer casuale.
cnmesr,

@cnmesr, oh, è eccellente!
ilkkachu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.