O que exatamente são as "opções de contexto voluntárias"?

34

Eu tenho um arquivo binário e devo quebrar sua senha (lição de casa). Também havia uma função fornecida (uma função que faz parte do arquivo binário). Essa função mostrou que a string de entrada foi comparada com o caractere de senha correto por caractere e retornou falso instantaneamente quando um caractere estava errado (isso não é uma maneira segura de fazê-lo, acho que porque está perdendo tempo e temos uma ideia do tamanho correto da senha como exemplo). Mas nosso professor adicionou um temporizador aleatório que retorna o resultado (Correto / Errado) para tornar um pouco mais difícil para nós ...

De qualquer forma, eu já fiz isso com sucesso com engenharia reversa e obtive a senha correta. Agora estou brincando com ele na linha de comando:

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

Com esse comando, recebo muitas informações, como hora do sistema, swaps, tempo de execução. Mas o que é mais interessante para mim é "Opções de contexto voluntárias" porque, quanto mais caracteres corretos da senha eu digito, menos "Opções de contexto voluntárias " Eu recebo!

Quanto mais caracteres errados eu digitar, mais "opções de contexto voluntárias" eu recebo.

Levei quase duas horas para decifrar a senha apenas digitando esse comando, digitando caracteres e observando "Voluntary context switches". Sempre que UM caractere estava correto, o "Voluntary context switches" diminuía um.

Minha pergunta, o que exatamente são "opções de contexto voluntárias" e por que elas me ajudaram a decifrar a senha?

cnmesr
fonte
5
Parabéns por descobrir por si mesmo o campo rico e ainda não totalmente compreendido dos ataques de canal lateral .
Zwol
11
@zwol O que você quer dizer com "rico"? E, além disso, estamos a lidar com ataques de canal lateral na classe, desculpe-me que eu não tenho "plenamente compreendido" seu campo que rapidamente ....
cnmesr
15
@cnmesr Tomei isso como um comentário sincero, não sarcástico, dizendo que o zwol considera o campo interessante, já que novas descobertas ainda estão sendo feitas. Não é que você não tenha entendido completamente, é que ninguém entende completamente, e é isso que o torna interessante.
hvd 10/05
3
@hvd cnmesr Sim, foi isso que eu quis dizer.
Zwol 10/0518
@zwol Oh desculpe então! Eu o interpretei mal e o vi como um ataque: p
cnmesr

Respostas:

36

A página do manualtime explica o conceito de alternância de contexto voluntária e involuntária:

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.

(a citação é do meu sistema Debian, a página de manual vinculada tem um texto ligeiramente diferente)

Ou seja, uma troca de contexto é voluntária, se o processo sair da CPU, porque não há mais nada a fazer (enquanto aguarda que algo externo aconteça). Involuntário, se desejar continuar com alguns cálculos, mas o sistema operacional decide que é hora de mudar para outro processo.


Como tudo isso está relacionado ao programa de verificação de senha, depende do que o programa realmente faz.

A partir do código fonte vinculado nos comentários, vemos que o programa chama usleep()uma vez para cada caractere não correspondente, continuando o ciclo de comparação no próximo caractere posteriormente. Dormir é tão voluntário quanto produzir a CPU, portanto, essas chamadas serão mostradas como alternâncias voluntárias de contexto para cada caractere que não seja de maching.

No Linux, você também poderá ver as chamadas strace.

O atraso final vem de um sono aleatório de T * (rand() % 3), isto é, 0, 1 ou 2 vezes uma constante. Essa é uma granularidade bastante grossa, portanto deve ser fácil calcular a média fazendo várias tentativas com a mesma senha.

ilkkachu
fonte
3
Aqui está o código fonte da função que eu mencionei acima pastebin.com/iTzheD4u Obrigado, darei uma olhada nas chamadas com strace e esperamos obter mais informações. Sobre o temporizador aleatório: Se a senha tiver um tamanho incorreto, o tempo de saída será o mesmo (muito, muito rápido) e o temporizador aleatório não será executado. Se o tamanho da senha estiver correto, a saída será aleatória porque o temporizador aleatório é executado.
Cnmesr
@ cnmesr, oh, isso é excelente!
Ilkkachu