Obfuscasi timing keystroke ditambahkan ke ssh(1)
(undeadly.org)- Damien Miller meng-commit fitur obfuscasi yang menyembunyikan informasi waktu antar penekanan tombol ke klien ssh(1)
- Saat data yang dikirim pada trafik interaktif sedikit, fitur ini menggunakan pengiriman dengan interval tetap, dengan interval default 20ms
- Setelah penekanan tombol nyata terakhir, fitur ini mengirim input chaff palsu selama waktu acak untuk makin mengaburkan pola timing
- Perilaku ini dikendalikan dengan kata kunci
ssh_configbaru, yaituObscureKeystrokeTiming - Implementasinya memakai ekstensi PING/PONG baru pada lapisan transport SSH, dan nantinya kemungkinan akan dibawa ke sistem lain melalui
openssh-portable
Menyembunyikan timing penekanan tombol pada klien ssh(1)
- Damien Miller meng-commit dukungan obfuscasi timing keystroke ke ssh(1)
- Fitur ini berupaya mengirim trafik interaktif dengan interval tetap untuk menyembunyikan jeda waktu antar penekanan tombol ketika data yang dikirim sedikit
- Interval pengiriman default adalah 20ms
- Setelah penekanan tombol nyata terakhir, fitur ini mengirim input chaff palsu selama waktu acak
- Perilaku ini dikendalikan dengan kata kunci
ssh_configbaru,ObscureKeystrokeTiming
Ekstensi protokol SSH dan jalur distribusi
- Implementasinya menggunakan dua pesan lapisan transport baru yang ditambahkan ke protokol SSH
SSH2_MSG_PINGSSH2_MSG_PONG
- Pesan-pesan ini menggunakan ruang nomor local extensions, dan diiklankan melalui pesan
"ping@openssh.com"ext-infoserta string versi"0" - Perubahan ini diperkenalkan sebagai salah satu contoh “security by trickery” dan disebut sebagai alasan untuk menantikan rilis OpenBSD berikutnya
- Sistem lain kemungkinan akan segera melihat fitur ini melalui openssh-portable
1 komentar
Opini Hacker News
Timing penekanan tombol sudah menjadi masalah yang dikhawatirkan dalam input/output terminal sejak 1980-an, dan bahkan saat itu sudah diperhatikan dalam lingkungan enkripsi awal seperti stelnet atau Kerberos
Sebagian besar aplikasi terminal menggunakan input/output yang di-buffer untuk input kata sandi, dan ini masih merupakan fitur keamanan yang penting
Dalam mode ini, tidak ada apa pun yang dikirim ke sisi lain sampai pengguna menekan Enter, sehingga jika ada padding, penyerang man-in-the-middle pun sulit menebak bahkan panjang kata sandinya
Selama beberapa waktu, aplikasi yang menerima kata sandi dalam mode tanpa buffer demi menampilkan
*setiap kali pengguna mengetik menjadi sasaran empukKelihatannya memang keren dan memberi umpan balik, tetapi membocorkan kecepatan penekanan tombol, hal yang paling perlu disembunyikan saat memasukkan kata sandi
Saya berharap input/output yang di-buffer tetap dipertahankan untuk input kata sandi, dan menurut saya cara ini lebih baik hingga sulit ditandingi bahkan jika SSH melakukan obfuscation
Meski begitu, bagus bahwa SSH menambahkan fitur ini, dan ini membantu melindungi input yang tidak bisa di-buffer seperti input shell atau editor
Mereka bisa berpikir “panjangnya salah, jadi sepertinya keliru” lalu menghilangkan manfaat kata sandi tersimpan dan mencoba mengetik ulang kata sandi yang “benar” secara manual
Dulu sepertinya pernah ada cara menampilkan hash visual seperti hash 2 digit dan smiley, tetapi itu justru bisa membantu serangan shoulder surfing
Sekarang ini juga bisa diterapkan pada login layar sentuh dengan mengaitkan tekanan jari, area kontak, dan bentuk sentuhan dengan pengguna
Jika swipe atau gerakan mouse juga dimasukkan dalam konteks OS desktop, mungkin ada aplikasi keamanan yang bisa mengunci sistem ketika yang memakai bukan pemilik perangkat atau akun
Setidaknya bisa mencatat kapan pacar saya mulai mengutak-atik ponsel saya
Artinya, apa yang diketik tidak dikirim sampai Enter atau tombol kirim ditekan
Dulu saat saya aktif bermain MUD, saya memakai klien Telnet seperti ini, tetapi sejak itu saya belum pernah melihatnya di klien SSH yang pernah saya gunakan
Ini tampak seperti pertahanan yang cukup baik untuk mencegah kebocoran timing penekanan tombol SSH, dan dalam beberapa skenario penggunaan mungkin lebih baik daripada pendekatan delay 20 ms yang disebutkan di artikel
Namun setelah dipikir-pikir, akan lebih ideal jika penekanan Tab untuk autocomplete shell Linux juga ikut dikirim
Ini mengingatkan pada Bridge profesional
Tim dipisahkan oleh dinding dan kartu diberikan secara bersamaan lewat loket, untuk mencegah komunikasi lewat timing
https://youtube.com/watch?v=RVZLNRmO3vo
https://en.wikipedia.org/wiki/Blue_Team_(bridge)#Cheating_an...
https://en.wikipedia.org/wiki/Fantoni_and_Nunes_cheating_sca...
https://en.wikipedia.org/wiki/Fisher_and_Schwartz_cheating_s...
Dan itu baru yang kita ketahui
Dulu saya pernah benar-benar memanfaatkan Bridge dalam sebuah wawancara
Dalam Bridge ada aturan Active Ethics: jika partner memberi petunjuk dengan cara selain bidding, maka ketika secara logis memungkinkan, Anda wajib memilih arah yang berlawanan
Dalam wawancara debugging, pewawancara terlalu terang-terangan menggiring saya ke jawaban, jadi sebelum melakukan apa yang ia katakan, saya berhenti dan memeriksa semua hal yang terpikir oleh saya
Setelah wawancara, saya menjelaskan alasannya, dan mengatakan kalau perlu penjelasan lebih lanjut, cari Active Ethics
Dan saya diterima
Ini mirip mengatakan catcher tidak boleh memberi sinyal kepada pitcher
Penyampaian informasi adalah keterampilan manusiawi yang menambah dimensi pada permainan, dan biarkan pihak yang paling mahir menang
Menyampaikan informasi sekitar 1–2 bit tampaknya tidak terlalu sulit
Komunikasi rahasia dengan partner adalah inti permainan, tetapi komunikasi itu tidak boleh rahasia
Boleh berkomunikasi, tetapi tidak boleh berkomunikasi; terasa sangat ganjil
Misalnya, seseorang bisa menyentakkan meja kecil melewati penghalang atau mendorongnya perlahan untuk menandakan sesuatu
Orang di kanan atas video melakukannya pada kartu pertama dan kedua
Ada tulisan tahun 2008 yang memperkenalkan makalah tahun 2001 tentang timing attack seperti ini: https://lwn.net/Articles/298833/
Makalah yang dikutip berjudul “Timing analysis of keystrokes and timing attacks on SSH”, dan menganalisis bahwa informasi timing penekanan tombol membocorkan informasi tentang rangkaian tombol yang dimasukkan
Analisis yang lebih rinci menyebutkan bahwa untuk setiap pasangan penekanan tombol, sekitar 1 bit informasi tentang isinya bocor, dan karena entropi kata sandi sekitar 4–8 bit per karakter, informasi ini bisa cukup berarti
Saya kira ini sudah diperbaiki lama sekali, dan saya pikir perbaikannya masuk sekitar 2012, jadi cukup mengejutkan bahwa ternyata masih belum terselesaikan
Suatu saat mungkin kita perlu memakai paket yang sudah diisi terlebih dahulu dengan data acak untuk menyembunyikan input tombol
Ini bukan steganografi, tetapi cukup mendekati, dan sepertinya juga bisa digunakan untuk membuat analisis trafik menjadi lebih sulit atau bahkan mustahil
Jika menggunakan jalur khusus, tidak terlalu sulit untuk selalu mengalirkan data yang sepenuhnya dienkripsi pada utilisasi maksimum jalur tersebut, lalu menumpangkan data nyata hanya saat diperlukan
Ada penelitian yang membuat model bahasa menulis ulang teks sampul yang tidak berbahaya, tetapi mengubah distribusi probabilitas yang dipakai untuk sampling kata dengan distorsi entropi minimal yang diturunkan dari kunci
Di sisi penerima, jika memakai model dan kunci yang sama, teks sampul dapat didekripsi kembali menjadi ciphertext, dan ini juga berlaku untuk gambar
https://openreview.net/forum?id=HQ67mj5rJdR
Angka terus disiarkan ke seluruh dunia, dan baru bermakna ketika angka itu berarti bagi seseorang
Mereka melakukannya meski jelas tahu badan-badan intelijen dunia terus mendengarkan
Ini mengingatkan pada emulator terminal modern seperti Warp di macOS
Misalnya, saya penasaran apakah semua input diterima secara lokal lalu dikirim sekaligus ke host jarak jauh
Jika begitu, beberapa input mode raw yang dijalankan di host jarak jauh bisa rusak, tetapi tampaknya situasi seperti itu bisa dideteksi lalu beralih ke stream input tombol mentah
[1]: https://warp.dev
pty jarak jauh bisa berada dalam mode berbasis baris atau mode raw
Terminal yang memiliki integrasi shell khusus biasanya mengharuskan integrasi tersebut juga dipasang di host jarak jauh, dan sebagian menanganinya dengan cukup transparan
Karena itu mosh bisa berperilaku lebih baik daripada SSH murni pada koneksi dengan latensi besar
Namun fitur ini tidak akan berlaku untuk mosh
Fitur keamanan tertentu, misalnya pertahanan terhadap serangan timing, mungkin bisa ditangani lebih baik oleh alat baru dan tidak ada pada alat standar lama
Namun jauh lebih besar kemungkinan fitur keamanan lain justru absen di alat baru, dan menambahkan “AI” juga sangat memperluas attack surface
Klaim privasi Warp pun, terus terang, sulit dipercaya
Alat pemrosesan bahasa alami saat ini hampir semuanya condong ke solusi cloud, dan kalau begitu kemungkinan privasi hampir langsung mendekati nol
Saya penasaran ancaman apa yang diredakan oleh ini
Jika mengetahui pola mengetik target, data itu bisa dipakai untuk memulihkan isinya
Anda bisa menyuruh target mengetik di situs web yang Anda kendalikan dengan browser yang JavaScript-nya aktif, atau merekam suara ketikan untuk mengumpulkan polanya
Belakangan, sebagian streamer online bahkan diserang dengan model AI yang mempelajari suara ketikan keyboard untuk mencuri kata sandi
Fitur ini tampaknya menambahkan noise untuk mencegah hal itu
http://www.cs.berkeley.edu/~dawnsong/papers/ssh-timing.pdf [2001]
Dengan tambahan machine learning, akurasi dekode audio meningkat pesat, jadi di tempat yang tidak aman secara fisik sebaiknya gunakan keyboard yang senyap
https://arstechnica.com/gadgets/2023/08/type-softly-research...
Misalnya pengguna biasanya mengetik kata sandi lebih cepat daripada input lain, jadi pada operasi seperti
sudo, jumlah input tombol yang terkirim sekaligus dapat dipakai untuk menebak panjang kata sandiUse case makalah itu sendiri bukan ancaman keamanan, tetapi bisa ditafsirkan sebagai kebocoran informasi
Saya penasaran berapa banyak latensi yang ditambahkan
Khususnya latensi yang tidak dapat diprediksi adalah salah satu faktor stres terbesar dalam pekerjaan pengembangan perangkat lunak
Saat hanya sedikit data yang dikirim, trafik interaktif dikirim pada interval tetap, dan nilai bawaannya 20 ms
[1]
Alat seperti Mosh cukup membantu mengurangi latensi yang terasa
Mosh menampilkan input tombol pengguna segera setelah terdaftar secara lokal, dan menampilkannya dengan warna pudar untuk menunjukkan bahwa round-trip belum selesai
Terakhir kali saya melihatnya begitu, dan mungkin saja berupa garis bawah
Setelah round-trip selesai, karakter ditampilkan normal
[1] Jika faktor stres terbesar dalam pengembangan perangkat lunak adalah latensi input tombol, kedengarannya Anda cukup beruntung
[2]: https://mosh.org
Link commit sebenarnya: https://github.com/openssh/openssh-portable/commit/7603ba712...
Sebagian pihak tampaknya mengukur timing paket untuk mendeteksi shell hands-on-keyboard di jaringan; saya penasaran sejauh mana perubahan ini akan mengganggu deteksi semacam itu
Menurut saya itu pendekatan yang benar-benar keliru terhadap keamanan
Memang menyenangkan jika bisa tahu apakah skrip otomatis sedang login ke perangkat, tetapi dengan desain yang lebih baik, informasi itu bisa dibuat tidak penting