Apa sebenarnya “Switch konteks sukarela”?

34

Saya mendapat file biner dan saya harus memecahkan kata sandinya (pekerjaan rumah). Ada juga fungsi yang diberikan (fungsi yang merupakan bagian dari file biner). Fungsi itu menunjukkan bahwa string input dibandingkan dengan karakter kata sandi yang benar berdasarkan karakter dan mengembalikan false secara instan ketika suatu karakter salah (itu bukan cara aman untuk melakukannya saya kira karena ini waktu yang bocor dan kami mendapatkan gagasan tentang panjang kata sandi yang benar sebagai contoh). Tetapi guru kami telah menambahkan penghitung waktu acak yang mengembalikan hasil (Benar / Salah) untuk membuatnya sedikit lebih sulit bagi kita ...

Ngomong-ngomong, saya sudah berhasil melakukannya dengan reverse engineering dan mendapatkan kata sandi yang benar. Sekarang saya bermain dengannya di baris perintah:

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

Dengan perintah ini, saya mendapatkan banyak informasi seperti waktu sistem, swap, waktu eksekusi..Tapi yang paling menarik bagi saya adalah "Switch konteks sukarela" karena karakter kata sandi yang lebih tepat saya masukkan, semakin sedikit "Switch konteks sukarela" " Saya mendapat!

Semakin banyak karakter yang salah saya masukkan, semakin banyak "Konteks sukarela beralih" saya dapatkan.

Saya butuh hampir dua jam untuk memecahkan kata sandi hanya dengan memasukkan perintah itu, memasukkan karakter, dan mengamati "Switch konteks sukarela". Setiap kali SATU karakter benar, "Sukarela konteks switch" berkurang satu.

Pertanyaan saya, apa sebenarnya "Switch konteks sukarela" dan mengapa mereka membantu saya memecahkan kata sandi?

cnmesr
sumber
5
Selamat karena telah menemukan bidang serangan saluran samping yang kaya dan masih belum sepenuhnya dipahami .
zwol
1
@ zwol Apa yang Anda maksud dengan "kaya"? Dan selain itu, kami saat ini berurusan dengan serangan saluran samping di kelas, maafkan saya bahwa saya tidak "memahami sepenuhnya" bidangnya dengan cepat ....
cnmesr
15
@ cnmesr Saya menganggapnya sebagai komentar yang tulus, bukan yang sarkastik, mengatakan bahwa zwol menganggap bidang itu menarik karena penemuan baru masih dibuat. Bukan karena Anda belum sepenuhnya memahaminya, itu karena tidak ada yang sepenuhnya memahaminya, dan itulah yang membuatnya menarik.
hvd
3
@ hvd cnmesr Ya, itulah yang saya maksud.
zwol
@ zwol Oh maaf kalau begitu! Saya salah mengartikan Anda dan melihatnya sebagai serangan: p
cnmesr

Jawaban:

36

The halaman manual untuktime menjelaskan konsep sukarela dan tidak sukarela konteks switch:

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.

(kutipan dari sistem Debian saya, halaman manual yang ditautkan memiliki teks yang sedikit berbeda)

Artinya, saklar konteks adalah sukarela, jika proses meninggalkan CPU karena tidak ada lagi yang harus dilakukan (sambil menunggu sesuatu eksternal terjadi). Secara sukarela, jika ingin melanjutkan beberapa perhitungan, tetapi OS memutuskan sudah waktunya untuk beralih ke beberapa proses lainnya.


Bagaimana semua ini terkait dengan program pemeriksaan kata sandi, tergantung pada apa yang sebenarnya dilakukan oleh program.

Dari kode sumber yang ditautkan dalam komentar, kita melihat bahwa program memanggil usleep()satu kali untuk setiap karakter yang tidak cocok, melanjutkan loop perbandingan pada karakter berikutnya sesudahnya. Tidur adalah tentang sukarela seperti menghasilkan CPU yang pernah didapat, sehingga panggilan ini akan menunjukkan sebagai konteks sukarela beralih untuk setiap karakter non-maching.

Di Linux, Anda juga dapat melihat panggilan straceitu.

Penundaan terakhir berasal dari tidur acak T * (rand() % 3), yaitu 0, 1, atau 2 kali konstanta. Itu granularity agak kasar, sehingga harus mudah untuk rata-rata dengan melakukan beberapa upaya dengan kata sandi yang sama.

ilkkachu
sumber
3
Berikut ini adalah kode sumber fungsi yang saya sebutkan di atas pastebin.com/iTzheD4u Terima kasih, saya akan melihat panggilan dengan strace dan semoga mendapatkan informasi lebih lanjut. Tentang pengatur waktu: Jika kata sandi memiliki panjang yang salah, waktu keluarannya sama (sangat cepat) dan pengatur waktu tidak dapat dijalankan. Jika panjang kata sandi benar, outputnya acak karena penghitung waktu acak dijalankan.
cnmesr
@ cnmesr, oh, bagus sekali!
ilkkachu