"자발적 컨텍스트 전환"이란 정확히 무엇입니까?


34

바이너리 파일이 있는데 암호를 해독해야합니다 (숙제). 주어진 함수 (이진 파일의 일부인 함수)도있었습니다. 이 함수는 입력 문자열이 문자별로 올바른 비밀번호 문자와 비교되어 문자가 잘못되었을 때 즉시 false를 반환 함을 보여주었습니다 (안전하지 않은 방법입니다. 누수가 시간이 걸리기 때문에 올바른 비밀번호 길이에 대한 아이디어를 얻습니다) 예). 그러나 우리 선생님은 우리에게 조금 더 어려워지기 위해 결과 (수정 / 잘못된)를 반환하는 임의 타이머를 추가했습니다 ...

어쨌든, 나는 이미 리버스 엔지니어링으로 성공적으로 수행했으며 올바른 암호를 얻었습니다. 이제 명령 줄에서 놀고 있습니다.

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

이 명령을 사용하면 시스템 시간, 스왑, 실행 시간과 같은 많은 정보를 얻을 수 있습니다. 그러나 가장 흥미로운 것은 "자발적 컨텍스트 전환"인데, 입력 한 암호의 정확한 문자가 많을수록 "자발적 컨텍스트 전환" " 나는 얻다!

더 잘못된 문자를 입력할수록 "자발적 컨텍스트 전환"이 더 많이 나타납니다.

명령을 입력하고 문자를 입력하고 "자발적 컨텍스트 전환"을 관찰하는 것만으로도 암호를 해독하는 데 거의 2 시간이 걸렸습니다. 하나의 문자가 정확할 때마다 "자발적 컨텍스트 전환"이 1 씩 감소했습니다.

제 질문은, "자발적 컨텍스트 스위치"란 정확히 무엇이며 왜 암호 해독에 도움이 되었습니까?


5
풍부하고 아직 완전히 이해되지 않은 부 채널 공격 분야를 발견 한 것을 축하합니다 .
zwol

1
@zwol "부자"는 무엇을 의미합니까? 게다가, 우리는 현재 학급에서 부 채널 공격을 처리하고 있는데, 그 분야를 "완전히 이해"하지 못했다고 실례합니다 ....
cnmesr

15
@cnmesr 나는 zwol가 새로운 발견이 계속되고 있기 때문에 zwol가 그 분야를 흥미로운 것으로 간주한다고 말하면서 진심 어린 논평으로 그것을 인용했습니다. 그것은 당신 이 그것을 완전히 이해하지 못했던 것이 아니라, 그것을 완전히 이해 하지 못하는 사람 이며, 그것이 그것을 흥미롭게 만드는 것입니다.
hvd

3
@hvd cnmesr 네, 그게 제 뜻입니다.
zwol

@zwol 아 죄송합니다! 나는 당신을 잘못 해석하고 그것을 공격으로 보았습니다 : p
cnmesr

답변:


36

에 대한 매뉴얼 페이지time 자발적 및 비자발적 컨텍스트 스위치의 개념을 설명합니다 :

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.

(인용은 데비안 시스템에서 인용 한 것으로, 링크 된 매뉴얼 페이지에는 약간 다른 텍스트가 있습니다)

즉, 프로세스가 수행해야 할 작업이 없기 때문에 프로세스가 CPU를 떠나는 경우 컨텍스트 전환은 자발적입니다 (외부 무언가가 발생하기를 기다리는 동안). 비자발적이며 일부 계산을 계속하고 싶지만 OS는 다른 프로세스로 전환 할시기를 결정합니다.


비밀번호 검사 프로그램과 관련이있는 방법은 프로그램이 실제로 수행하는 작업에 따라 다릅니다.

주석에 링크 된 소스 코드에서 프로그램 usleep()이 일치하지 않는 각 문자를 한 번 호출 하여 이후에 다음 문자에서 비교 루프를 계속한다는 것을 알 수 있습니다. 수면은 CPU를 얻는 것만 큼 자발적이므로 이러한 호출은 각 비 매칭 문자에 대한 자발적 컨텍스트 전환으로 표시됩니다.

Linux에서는으로 호출을 볼 수 있어야합니다 strace.

최종 지연은 무작위 수면 T * (rand() % 3), 즉 0, 1 또는 2 배 상수 에서 비롯됩니다 . 이는 다소 거친 단위이므로 동일한 암호를 사용하여 여러 번 시도하면 쉽게 평균을 내야합니다.


3
위에서 언급 한 함수의 소스 코드는 다음과 같습니다. pastebin.com/iTzheD4u strace를 사용하여 호출을 살펴보고 더 많은 정보를 얻을 수 있기를 바랍니다. 임의 타이머 정보 : 암호의 길이가 틀리면 출력 시간이 동일하고 (매우 빠름) 임의 타이머가 실행되지 않습니다. 암호 길이가 정확하면 임의 타이머가 실행되므로 출력이 임의입니다.
cnmesr

@cnmesr, 오, 훌륭합니다!
ilkkachu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.