Czym dokładnie są „Dobrowolne przełączniki kontekstu”?


34

Mam plik binarny i mam złamać hasło (zadanie domowe). Podano także funkcję (funkcję, która jest częścią pliku binarnego). Ta funkcja pokazała, że ​​łańcuch wejściowy został porównany z prawidłowym hasłem znak po znaku i natychmiast zwrócił fałsz, gdy znak jest zły (to chyba nie jest bezpieczny sposób, ponieważ jest to czas przeciekania i otrzymujemy pomysł na prawidłową długość hasła jako przykład). Ale nasz nauczyciel dodał losowy licznik czasu, który zwraca wynik (poprawny / błędny), aby było nam trochę trudniej ...

W każdym razie udało mi się to już z powodzeniem za pomocą inżynierii wstecznej i otrzymałem prawidłowe hasło. Teraz gram z nim w wierszu poleceń:

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

Dzięki temu poleceniu otrzymuję wiele informacji, takich jak czas systemowy, zamiany, czas wykonania .. Ale najbardziej interesujące są dla mnie „Dobrowolne przełączanie kontekstu”, ponieważ im więcej prawidłowych znaków hasła wprowadzę, tym mniej „Dobrowolne przełączanie kontekstu " Dostaję!

Im więcej błędnych znaków wprowadzę, tym więcej dostaję „Dobrowolnych przełączników kontekstu”.

Złamanie hasła zajęło mi prawie dwie godziny, wpisując to polecenie, wprowadzając znaki i obserwując „Dobrowolne przełączanie kontekstu”. Ilekroć JEDNA postać była poprawna, „Dobrowolne przełączanie kontekstu” zmniejszało się o jeden.

Moje pytanie, czym dokładnie są „Dobrowolne zmiany kontekstu” i dlaczego pomogły mi złamać hasło?


5
Gratulujemy odkrycia dla siebie bogatego i wciąż nie do końca poznanego obszaru ataków bocznokanałowych .
zwolnienie

1
@zwol Co rozumiesz przez „bogaty”? A poza tym mamy obecnie do czynienia z atakami bocznymi w klasie, przepraszam, że nie „szybko zrozumiałem” jego dziedziny tak szybko…
cnmesr

15
@ cnmesr Przyjąłem to jako szczery komentarz, a nie sarkastyczny, mówiąc, że zwolnienie uważa tę dziedzinę za interesującą, ponieważ wciąż odkrywane są nowe odkrycia. Nie chodzi o to, że go w pełni nie zrozumiałeś, ale o to, że nikt go w pełni nie rozumie, a to czyni go interesującym.
hvd

3
@hvd cnmesr Tak, o to mi chodziło.
zwolnienie

@zwol Och, przepraszam!
Źle

Odpowiedzi:


36

Strona podręcznika dlatime wyjaśnia koncepcję dobrowolnych i mimowolnych przełączników kontekstu:

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.

(cytat pochodzi z mojego systemu Debian, linkowana strona podręcznika ma nieco inny tekst)

Oznacza to, że zmiana kontekstu jest dobrowolna, jeśli proces opuszcza procesor, ponieważ nie ma nic innego do roboty (podczas oczekiwania na coś zewnętrznego). Mimowolne, jeśli chce kontynuować obliczenia, ale system operacyjny decyduje, że czas przejść na inny proces.


Jak to wszystko ma związek z programem sprawdzającym hasło, zależy od tego, co program faktycznie robi.

Z kodu źródłowego połączonego w komentarzach widzimy, że program wywołuje usleep()jeden raz dla każdego niepasującego znaku, kontynuując pętlę porównawczą dla następnego znaku. Uśpienie jest mniej więcej tak dobrowolne, jak wydajność procesora, dlatego te wywołania będą wyświetlane jako dobrowolne przełączniki kontekstu dla każdej postaci niemechanicznej.

W systemie Linux powinieneś także widzieć połączenia strace.

Ostatnie opóźnienie pochodzi z losowego snu T * (rand() % 3), tj. 0, 1 lub 2 razy stała. To dość zgrubna ziarnistość, więc powinno być łatwo uśrednić, wykonując wiele prób z tym samym hasłem.


3
Oto kod źródłowy funkcji, o której wspomniałem powyżej pastebin.com/iTzheD4u. Dziękuję. Przyjrzę się strace i mam nadzieję, że otrzymam więcej informacji. Informacje o losowym zegarze: jeśli hasło ma niewłaściwą długość, czas wyjściowy jest taki sam (bardzo, bardzo szybki), a losowy zegar nie jest wykonywany. Jeśli długość hasła jest prawidłowa, dane wyjściowe są losowe, ponieważ wykonywany jest losowy zegar.
cnmesr

@cnmesr, och, to świetnie!
ilkkachu
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.