3 poin oleh GN⁺ 2023-08-30 | 1 komentar | Bagikan ke WhatsApp
  • 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_config baru, yaitu ObscureKeystrokeTiming
  • 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_config baru, ObscureKeystrokeTiming

Ekstensi protokol SSH dan jalur distribusi

  • Implementasinya menggunakan dua pesan lapisan transport baru yang ditambahkan ke protokol SSH
    • SSH2_MSG_PING
    • SSH2_MSG_PONG
  • Pesan-pesan ini menggunakan ruang nomor local extensions, dan diiklankan melalui pesan "ping@openssh.com" ext-info serta 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

 
GN⁺ 2023-08-30
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 empuk
    Kelihatannya 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

    • Cara yang digunakan saat ini, yaitu menampilkan jumlah tanda bintang tetap tanpa bergantung pada panjang kata sandi, cukup membingungkan bagi pengguna
      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
    • Pada 1990-an, dengan add-on AI berbasis Visual Basic, hanya dari beberapa menit mengetik saja sudah bisa diketahui siapa yang menggunakan keyboard berdasarkan pola mengetik, sehingga proses login pada dasarnya menjadi tidak berarti
      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
    • Autentikasi SSH berbasis kata sandi memang hampir tidak seharusnya pernah digunakan
    • Saya penasaran apakah ada klien SSH yang mem-buffer input per baris
      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
    • Jika “sebagian besar aplikasi terminal menggunakan input/output yang di-buffer untuk input kata sandi”, saya penasaran apakah keberadaan patch ini berarti OpenSSH tidak berperilaku seperti itu
  • 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

    • Namun tetap saja ada kecurangan lewat layar
      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
    • Kalau orang-orang hanya harus menjalankan automata yang sudah ditentukan seperti mesin keadaan manusia, lalu mendapat penalti jika menyimpang, lebih baik tentukan pemenang dengan lempar koin saja dan lewati permainannya
      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
    • Dari sudut pandang red team, ada terlalu banyak ketidakteraturan manusia yang bisa dieksploitasi di sini
      Menyampaikan informasi sekitar 1–2 bit tampaknya tidak terlalu sulit
    • Bridge benar-benar permainan yang aneh
      Komunikasi rahasia dengan partner adalah inti permainan, tetapi komunikasi itu tidak boleh rahasia
      Boleh berkomunikasi, tetapi tidak boleh berkomunikasi; terasa sangat ganjil
    • Tampaknya masih ada kemungkinan untuk menyampaikan informasi
      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

    • NSA dan lainnya sudah memakai cara seperti itu sejak puluhan tahun lalu
      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
    • Dengan cara ini, steganografi juga dimungkinkan
      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
    • Ini mengingatkan pada siaran angka
      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
    • Beberapa protokol perpesanan bekerja seperti ini
    • Trafik SSH dienkripsi, jadi bagi pengamat paketnya memang sudah tampak seperti data acak
  • 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

    • Secara umum, saat terhubung lewat SSH, koneksi itu sendiri selalu dalam mode raw, dan host jarak jauh menangani pty dengan cara biasa
      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
    • Sulit membayangkan aplikasi yang mengusung “AI untuk terminal” akan lebih aman dan privat daripada alat Unix standar
      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
    • Jika memang dirancang untuk menerima data pada baud rate tertentu, bukankah input yang dikirim sekaligus juga akan mengalir masuk sesuai kecepatan itu?
  • Saya penasaran ancaman apa yang diredakan oleh ini

    • Penyadap tidak bisa melihat isi input tombol, tetapi sebelumnya mereka bisa melihat kapan tiap input tombol dikirim
      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
    • Kalau ingatan saya benar, sekitar 2005 ada sebuah makalah yang dapat mengetahui isi input dengan mengorelasikan timing paket dari sesi SSH terenkripsi dengan statistik ketikan manusia yang dikumpulkan
      Fitur ini tampaknya menambahkan noise untuk mencegah hal itu
    • Kekhawatiran kerentanan awalnya adalah penggunaan algoritma Viterbi
      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...
    • Pada dasarnya, menganalisis kecepatan mengetik memungkinkan beberapa perkiraan
      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 sandi
    • Baru-baru ini ada penelitian yang menggunakan timing input tombol dan deep learning untuk mengidentifikasi pengguna seperti sidik jari, dan dalam makalah ini dipakai untuk autentikasi: https://www.usenix.org/system/files/usenixsecurity23-piet.pd...
      Use 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

    • Itu langsung tertulis di artikel
      Saat hanya sedikit data yang dikirim, trafik interaktif dikirim pada interval tetap, dan nilai bawaannya 20 ms
    • Pembahasan latensi di atas tampaknya merujuk pada latensi dalam pengalaman pengguna, yaitu jeda setelah menekan tombol hingga hasilnya terlihat
      [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
    • Bukankah latensi ini dapat diprediksi secara desain?
  • 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

    • Saya berharap metode seperti itu menempuh jalan yang sama seperti upaya korporat lain untuk memecahkan enkripsi atau memasang backdoor dengan alasan “keamanan”
      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
    • Apa saja kasus penggunaan non-jahat untuk ini?