2 poin oleh GN⁺ 2024-01-15 | 1 komentar | Bagikan ke WhatsApp

When Random Isn't

  • Ini adalah anekdot dari sekitar 10 tahun lalu, jadi mohon dimaklumi ada bagian yang tidak diingat dengan tepat karena kode aslinya sudah hilang.
  • Beberapa detail disederhanakan agar bisa dinikmati oleh siapa pun yang menyukai keamanan komputer.
  • Saat berusia 14 tahun, saya menemukan World of Warcraft dan menjadi kecanduan.
  • Saya menemukan add-on yang bisa memodifikasi antarmuka pengguna game, lalu mulai membuatnya sendiri.
  • Add-on yang dibuat dengan bahasa pemrograman Lua terdiri dari beberapa file sumber .lua.
  • Saya terpikat oleh fakta bahwa game dapat memuat dan menjalankan kode sumber yang saya tulis sendiri.

Keamanan add-on

  • Memiliki add-on yang bisa diprogram oleh pengguna mungkin terdengar seperti ide buruk karena dapat memicu bot.
  • Sistem yang dibuat Blizzard ternyata cukup cerdas dalam mencegah perilaku pemrograman sewenang-wenang.
  • Sebagian besar elemen UI sepenuhnya tidak dibatasi jika hanya bersifat dekoratif atau untuk menampilkan informasi.
  • API untuk mengumpulkan informasi, seperti pemanggilan API yang menampilkan HP karakter, tidak dibatasi.
  • Namun, beberapa pemanggilan API dilindungi agar hanya bisa dipanggil oleh kode resmi Blizzard.
  • Sebagian besar API yang berkaitan dengan melakukan tindakan nyata di dalam game dilindungi.
  • API untuk mendapatkan posisi di dunia dan arah kamera juga sempat dilindungi pada suatu titik.
  • Jika ingin membuat tombol untuk merapal mantra tertentu, kita bisa membuat tombol khusus yang saat diklik akan menjalankan kode di lingkungan aman.
  • Tombol-tombol ini tidak bisa dibuat/dihancurkan/dipindahkan saat pertempuran, untuk mencegah otomatisasi selama combat.
  • Lingkungan aman memungkinkan penetapan mantra mana yang akan dirapal secara terprogram, tetapi tidak mengizinkan pengumpulan informasi yang diperlukan untuk otomatisasi sewenang-wenang.

Kanal backdoor

  • Beberapa tahun kemudian, ketika mulai tertarik pada pemrograman yang lebih "serius", saya hampir berhenti bermain World of Warcraft.
  • Namun saya tetap terus memikirkan cara menonaktifkan lingkungan aman itu.
  • Alih-alih menggunakan perangkat lunak pihak ketiga, saya ingin menyelesaikannya sebagai tantangan dengan memakai alat yang secara teknis diizinkan.
  • Saya menemukan bahwa fungsi random ada dalam daftar fungsi yang diizinkan di lingkungan aman, lalu memikirkan cara memanfaatkannya untuk menyelundupkan informasi.

Masalah generator angka acak

  • Ternyata random hanyalah pembungkus sederhana untuk fungsi rand dari C.
  • Implementasi rand adalah linear congruential generator yang sederhana dan lemah.
  • Saya mengembangkan cara untuk merekayasa balik status internal RNG agar bisa menyampaikan informasi.

Menggabungkan semuanya

  • Setelah bisa merekayasa balik status internal RNG, saya menjadi mampu membuat keputusan otomatisasi sewenang-wenang di lingkungan aman.
  • Saya mengakses informasi di lingkungan tidak aman untuk mengambil keputusan, lalu menjalankan tindakan yang "dipilih secara acak" di lingkungan aman.

Kesimpulan

  • Saya tidak tahu kapan Blizzard memperbaiki masalah status RNG yang lemah dan dibagikan, atau apakah mereka pernah menyadari bahwa itu bermasalah.
  • Beberapa tahun kemudian, ketika saya mencoba lagi kodenya, itu sudah tidak berfungsi.
  • Ini memang hanya eksploit kecil pada video game yang sebenarnya tidak ingin saya gunakan secara nyata, tetapi ada daya tarik yang terasa magis dalam memanipulasi sesuatu yang tampak acak.

Opini GN⁺

  • Tulisan ini memberikan contoh menarik tentang keamanan komputer dan pemrograman.
  • Proses mengeksplorasi cara kreatif untuk melewati keamanan di dalam game meningkatkan kesadaran akan pentingnya keterampilan pemrograman dan potensi kerentanannya.
  • Kisah tentang memanfaatkan kelemahan RNG ini menjadi contoh yang mengandung pelajaran bagi para pengembang perangkat lunak tentang pentingnya keamanan dan algoritma.

1 komentar

 
GN⁺ 2024-01-15
Opini Hacker News
  • Seorang pengguna menyebut bahwa beberapa bulan lalu ia pernah menjawab pertanyaan di StackOverflow tentang "membalikkan RNG (generator angka acak)". Pengguna ini menyerang Java RNG, yang menggunakan desain LCG (linear congruential generator) mirip MSVC RNG, sehingga menghasilkan keluaran berupa potongan dari status internalnya dan metode serangannya pun sangat mirip.

    • Berbagi pengalaman menjawab pertanyaan serupa tentang "membalikkan RNG" di StackOverflow. Java RNG dan MSVC RNG sama-sama menggunakan desain LCG sehingga serangan serupa dimungkinkan.
  • Pengguna lain berspekulasi bahwa jika server menggunakan RNG yang sama, maka secara teori hal ini bisa dimanfaatkan bila tersedia server dengan penggunaan rendah, ping rendah, kemampuan untuk mendapatkan jendela yang akurat atas status RNG saat ini, serta kemampuan untuk dengan cepat memicu peristiwa lain yang memiliki volatilitas ekonomi tinggi.

    • Berspekulasi tentang kemungkinan memanfaatkan hal ini dalam kondisi tertentu jika server memakai RNG yang sama.
  • Pengguna lain lagi menunjukkan bahwa RNG linear congruential yang diberikan hanya menghasilkan 12445 angka berbeda sebelum berulang, dan menyebut bahwa masuk akal untuk memakai parameter yang lebih baik untuk algoritma ini.

    • Menunjukkan masalah bahwa RNG linear congruential hanya menghasilkan jumlah angka terbatas lalu berulang, serta menekankan perlunya perbaikan algoritma.
  • Seorang pengguna mengatakan bahwa World of Warcraft (WoW) memulai ketertarikannya pada pemrograman; game itu dirilis saat ia berusia 6 tahun, dan ketika private server mulai bermunculan, ia tertarik mempelajari cara membuat NPC sendiri. Dari situ ia belajar Lua, cara mengompilasi core private server, SVN, cara menerapkan patch, dan lain-lain.

    • Berbagi pengalaman bahwa WoW memicu ketertarikan pada pemrograman. Melalui private server dan pembelajaran Lua, ia memperoleh keterampilan pemrograman.
  • Seorang pengguna membagikan kutipan John von Neumann yang mengatakan bahwa semua metode untuk menghasilkan angka acak adalah dosa, dan berpendapat bahwa prosedur aritmetika yang ketat bukanlah cara untuk menghasilkan angka acak.

    • Mengutip pandangan John von Neumann tentang pembuatan angka acak. Menekankan bahwa prosedur aritmetika yang ketat bukanlah metode menghasilkan angka acak.
  • Seorang pengguna mengatakan bahwa ia pernah menulis skrip auction house untuk WoW, yang dapat memindai semua lelang untuk membeli item yang harganya terlalu rendah lalu melelangnya kembali. Jika seseorang menurunkan harga, skrip itu bisa membatalkan lelang dan memasangnya lagi dengan harga sedikit lebih rendah.

    • Berbagi pengalaman memperoleh emas tanpa batas melalui skrip yang digunakan di auction house WoW.
  • Ada pengguna yang menyebut kasus Hacker News pernah diretas akibat angka acak yang lemah. Ia memberikan tautan terkait.

    • Menyebut kasus Hacker News diretas akibat angka acak yang lemah dan menyoroti masalah keamanan.
  • Ada pengguna yang memakai ungkapan "ketika variabel tidak berubah dan konstanta bukan konstanta".

    • Menggunakan ungkapan satir tentang peran variabel dan konstanta dalam pemrograman.
  • Seorang pengguna yang tidak memainkan WoW mengatakan ia pernah mendengar bahwa banyak add-on menggunakan private chat sebagai sarana komunikasi. Ia menyebut bahwa jika ada caranya, pada akhirnya orang-orang akan menemukannya dan memakainya.

    • Menanggapi bahwa add-on WoW menggunakan private chat sebagai sarana komunikasi, dan orang-orang pada akhirnya akan menemukan serta memanfaatkan metode komunikasi tersebut.
  • Terkait insentif ekonomi seputar RNG, ada pengguna yang mengatakan bahwa jika tidak ada hal penting yang benar-benar dipertaruhkan (misalnya game), maka RNG yang tidak sempurna pun sudah cukup. Namun, jika uang dipertaruhkan atau keamanan penting (misalnya dompet kripto atau kasino online), maka kesempurnaan RNG menjadi sangat penting.

    • Menunjukkan bahwa RNG yang tidak sempurna cukup untuk situasi yang tidak penting seperti game, tetapi akurasi RNG menjadi sangat penting ketika nilai uang atau keamanan dipertaruhkan.