1 poin oleh GN⁺ 2024-04-19 | 1 komentar | Bagikan ke WhatsApp
  • Randar adalah eksploit yang memulihkan status java.util.Random server dari koordinat drop item yang muncul saat blok dihancurkan di Minecraft Beta 1.8~1.12.2, lalu melacak balik posisi pemain lain
  • Akar masalahnya adalah penggunaan ulang RNG yang sama untuk pembuatan terrain/struktur dan event penambangan, sehingga posisi drop yang bisa diamati menjadi petunjuk status internal
  • Offset X/Y/Z item drop adalah tiga output berurutan dari World.rand.nextFloat(), sehingga 24 bit atas dari seed 48 bit terekspos dan seed dapat dipulihkan cepat dengan reduksi kisi LLL
  • Seed yang dipulihkan kemudian diputar mundur untuk memeriksa apakah nilainya berasal dari pemeriksaan Woodland Mansion, dan jika ya, maka Woodland region 1280×1280 blok yang terakhir dimuat dapat diidentifikasi
  • Jika catatan paket lama seperti ReplayMod masih menyimpan data drop, maka lokasi aktivitas pada era Beta 1.8~1.12.2 bisa tetap terungkap bahkan setelah server ditambal

Informasi yang diburu Randar

  • Tujuannya adalah menemukan koordinat dalam game milik pemain lain di world yang sama
  • 2b2t dipakai sebagai contoh utama
    • 2b2t adalah server Minecraft “anarchy” tanpa aturan
    • Peta server berukuran 3.6 quadrillion square tiles, jadi kerahasiaan lokasi menjadi syarat utama untuk menjaga item tetap aman
  • Sebelum Randar, 2b2t juga pernah punya eksploit koordinat Nocom yang digunakan pada 2018~2021

Versi yang rentan dan kesalahan kode

  • Masalah ini ada dari rilis Minecraft Beta 1.8 pada 2011 sampai rilis 1.12.2 pada 2017
    • 2b2t tetap berada di 1.12.2 sampai 14 Agustus 2023
  • Kesalahan utamanya adalah penggunaan ulang instance java.util.Random secara ceroboh di banyak jalur kode
    • RNG yang sama dipakai bersama antara pembuatan terrain dan aksi game seperti menambang
    • java.util.Random sendiri juga bukan RNG untuk keamanan
  • Minecraft memakai generasi deterministik agar world seed dan posisi yang sama selalu menghasilkan terrain yang sama
    • Untuk tujuan ini, penggunaan java.util.Random memang wajar
    • Masalahnya, manipulasi RNG untuk world generation yang memang harus bisa diprediksi ikut memengaruhi event yang seharusnya tidak dapat diprediksi

Pemeriksaan Woodland Mansion dan World.rand global

  • World.rand di-reset saat memeriksa lokasi kemunculan Woodland Mansion
    • Woodland region dihitung dalam satuan 80×80 chunk
    • Untuk memilih chunk tempat Mansion muncul dalam region itu, random.nextInt(60) dipanggil empat kali
  • Alur yang rentan adalah struktur World.setRandomSeed(seedX, seedY, seedZ) yang menetapkan seed baru ke this.rand global lalu mengembalikan objek yang sama
  • Rumus khusus 2b2t adalah sebagai berikut
seed = x * 341873128712 + z * 132897987541 - 4172144997891902323 mod 2^48
  • setRandomSeed dipanggil bukan hanya saat benar-benar dekat Woodland Mansion, tetapi juga setiap kali chunk dimuat untuk tujuan pemeriksaan
  • Dampaknya berbeda per dimensi
    • Overworld adalah target dampak utama
    • Nether aman karena pembuatan strukturnya selalu memakai RNG yang aman
    • The End terdampak saat generasi awal karena adanya end city, tetapi tidak terus memengaruhi setiap chunk yang dimuat ulang setelahnya sehingga relatif lebih aman

Bagaimana koordinat item drop membocorkan RNG

  • Saat blok ditambang, item dijatuhkan di posisi acak di dalam blok
    • Misalnya jika koordinat blok adalah (10, 20, 30), item akan muncul di antara (10.25, 20.25, 30.25) dan (10.75, 20.75, 30.75)
  • Posisi ini menentukan offset X, Y, Z dengan tiga kali world.rand.nextFloat()
  • Dari koordinat drop, nilainya bisa dikembalikan ke nilai asli nextFloat()
    • Proses mengalikan float dengan 0.5 hanya menurunkan eksponen sehingga tidak ada kehilangan informasi
    • Setelah itu nilainya dikonversi ke double dan ditambah koordinat blok, lalu dikirim lewat jaringan dengan full precision
  • java.util.Random.nextFloat() memperbarui seed 48 bit lalu mengambil 24 bit atas sebagai integer dan membaginya dengan 2^24
    • Rumus LCG-nya adalah newSeed = oldSeed * 25214903917 + 11 mod 2^48
    • Tiga float berurutan memberikan 24 bit atas dari tiga seed berurutan

Pemulihan seed dengan reduksi kisi LLL

  • Cara sederhana adalah mencoba semua 2^24 kandidat 24 bit bawah yang cocok dengan pengukuran pertama
    • Cara ini bekerja, tetapi lambat sehingga pendekatan kisi dipakai
  • Tiga pengukuran memberikan rentang untuk tiga nilai berikut
    • seed
    • nextSeed(seed)
    • nextSeed(nextSeed(seed))
  • Jika ketiga nilai ini dilihat sebagai titik 3 dimensi (seed, nextSeed(seed), nextSeed(nextSeed(seed))), maka semua seed yang mungkin membentuk struktur kisi
  • Vektor basisnya ditetapkan sebagai berikut
    • (1, a, a^2)
    • (0, c, 0)
    • (0, 0, c)
    • di mana a = 25214903917, c = 2^48
  • LLL basis reduction mencari basis yang lebih pendek dan hampir ortogonal tetapi tetap membentuk kisi yang sama
    • Contoh Mathematica: LatticeReduce[{{1, a, a^2}, {0, c, 0}, {0, 0, c}}]
    • Basis hasilnya adalah (1270789291, -2446815537, 2154219555), (-2355713969, 1026597795, 4110294631), (-3756485696, -2345310016, -2015749696)
  • Setelah pusat kubus pengukuran diubah ke ruang basis tereduksi, setiap koefisien dibulatkan ke bilangan bulat terdekat untuk mendapatkan titik kisi yang valid, dan koordinat pertama menjadi seed internal yang dipulihkan
  • Contoh kode Java yang dioptimalkan dapat memulihkan seed dari tiga pengukuran dalam kisaran sekitar 10ns

Memutar mundur seed untuk menemukan lokasi

  • LCG milik java.util.Random bisa dijalankan maju maupun mundur
    • Arah maju: newSeed = oldSeed * 25214903917 + 11 mod 2^48
    • Arah mundur: oldSeed = (newSeed - 11) * 246154705703781 mod 2^48
  • Seed yang dipulihkan diputar mundur sambil memeriksa apakah tiap seed bisa berasal dari pemeriksaan Woodland Mansion
  • Rentang world Minecraft adalah dari -30 million sampai +30 million blok
    • Implementasinya menetapkan rentang Woodland region pada tiap sumbu dari -23440 sampai +23440
    • Jumlah Woodland region yang mungkin adalah (23440*2+1)^2, yaitu 2,197,828,161
  • Membandingkan semua 2.2 miliar kandidat terlalu lambat, dan HashSet besar juga memakan banyak memori
  • Karena koefisien Z 132897987541 ganjil, ia punya invers dalam mod 2^48
    • Inversnya adalah 211541297333629
    • Dengan ini, cukup menelusuri semua 46,881 kandidat X lalu menghitung Z untuk menemukan kandidat region

Optimasi GPU dan lookup table

  • Pendekatan yang hanya menelusuri X masih masuk akal untuk satu seed, tetapi ketika banyak bot menambang beberapa blok per detik dan tiap pengukuran harus memeriksa ribuan langkah RNG, pemrosesan real-time di VPS spek rendah menjadi sulit
  • Implementasi berikutnya berubah ke job batch CUDA dan lookup table
    • Kunci lookup table adalah 32 bit bawah dari mansion seed
    • Nilainya adalah koordinat X Woodland region
    • Disebutkan tidak ada collision pada kunci 32 bit bawah, meski alasannya tidak dipahami
  • Tabel itu memakai 2^32 entri dan 2 byte per entri, sehingga membutuhkan sekitar 9GB VRAM
  • Di RTX 3090, sekitar 10 juta seeds per detik dapat di-crack
  • Hasil pemulihan memberi tahu Woodland region 1280×1280 blok tempat chunk terakhir dimuat, dan itu cukup untuk menemukan lokasi dalam beberapa menit pencarian

Distribusi step yang diamati di server nyata

  • Secara teori, jarak rata-rata antar Woodland seed adalah sekitar 128,000 RNG steps
  • Di 2b2t, Woodland seed biasanya ditemukan hanya dalam beberapa puluh step
    • Pengukuran dilakukan sangat awal dalam tick dari sudut waktu pemrosesan paket
    • Biasanya chunk sudah dimuat pada tick sebelumnya
  • Pengukuran yang dapat diandalkan dimulai dari minimal 4 RNG steps
    • Karena kode Woodland Mansion memanggil rand.nextInt empat kali sebelum pengamatan
  • Spike besar muncul pada kelipatan 1354 step
    • Kemungkinan penyebabnya adalah ledakan end crystal atau wither skull
    • Untuk ledakan end crystal, perhitungan kerusakan blok 16^3-14^3=1352 ditambah 2 efek suara menghasilkan 1354 step

ReplayMod dan risiko paparan setelah kejadian

  • Walaupun server sudah diperbarui ke versi baru atau manipulasi RNG sudah ditambal, risiko Randar tetap ada jika data lama masih tersimpan
  • Beberapa pemain Minecraft merekam paket dengan mod seperti ReplayMod
    • Jika file rekaman memuat item drop, status RNG server saat itu dapat dipulihkan
    • Menghancurkan blok adalah aksi yang sangat umum, jadi kemungkinan besar terekam
  • Semua lokasi yang aktif pada Beta 1.8~1.12.2 harus dianggap terekspos, meskipun server sudah lama diperbarui
  • Disediakan alat web sisi klien untuk mencoba menjalankan Randar secara langsung
    • Seret file ReplayMod 1.12.2 ke hobune.stream/randar untuk melihat koordinat
    • File rekaman tidak meninggalkan browser

Operasi Randar dan heatmap

  • SpawnMasons mulai merekam koordinat item drop dari akun-akun yang sudah menambang stone/cobblestone 24/7 untuk proyek lain
  • Sistem Minecraft headless yang sebelumnya dipakai untuk Nocom digunakan ulang, dan database Postgres ditambahkan untuk menyimpan pengukuran
  • Perangkat lunak untuk me-crack pengukuran RNG ditingkatkan beberapa kali, dan akhirnya menetap pada job batch CUDA async
  • Saat hasil crack dimasukkan ke database, tabel analisis heatmap juga diperbarui
    • Menyimpan hit count untuk seluruh periode, per hari, dan per jam
    • Dengan UI Plotly Dash, rentang waktu dan granularity tertentu bisa dipilih lalu dilihat di browser
  • Spam chunk load akibat Elytra stash hunting dihapus dengan hanya mempertimbangkan koordinat yang dimuat selama beberapa jam yang berbeda
  • Sistem anotasi bersama yang sederhana juga ditambahkan untuk melacak hotspot yang ditemukan
  • Bot Baritone yang diambil dari Nocom dipakai untuk mengotomatisasi pencurian dan pembersihan stash item secara AFK

Decoy Woodland region untuk perlindungan

  • Randar tidak selalu menemukan chunk terbaru dengan akurat
    • Jika saat memutar balik RNG ada decoy Woodland region yang lebih baru dan muncul lebih dulu, eksploit yang mengembalikan match pertama dapat menghasilkan false positive
  • Secara keseluruhan, Woodland seed muncul sekitar satu dari tiap 130,000 RNG seed, tetapi distribusinya punya outlier
  • Di 2b2t, dikatakan sekitar satu dari 20 ribu Woodland region memiliki properti persembunyian khusus, yaitu ada Woodland region lain dalam 4 RNG step berikutnya
  • SpawnMasons membuat stash di region seperti ini
    • Struktur dibuat kompak agar chunk di luar region pelindung tidak dimuat karena render distance
    • Lokasi decoy diberi akun AFK dan base kecil agar pengguna Randar lain melihat lokasi decoy
  • Menurut log Randar mereka sendiri, stash ini tetap “clean” selama seluruh periode karena tidak pernah tanpa sengaja memuat Woodland region yang berdekatan
  • Saat dipublikasikan, disebutkan bahwa stash tersebut sudah dipindahkan

Contoh lengkap dan batasan per versi

  • Disediakan contoh Java yang mendeteksi item dari SPacketSpawnObject yang tampak seperti drop hasil menambang, mengubah koordinat drop menjadi tiga pengukuran float, lalu menjalankan crack berbasis LLL dan pelacakan balik Woodland region
  • Contoh pengukuran nyata dari 2b2t menghasilkan hasil berikut
    • item drop: 0.41882818937301636, 0.6833633482456207, 0.46088552474975586
    • RNG measurements: 5664934 14541261 7076144
    • seed internal: 95041827771683
    • Woodland region: -12008 0
    • rentang lokasi: -15370368,-128 sampai -15369089,1151
  • Contoh untuk diagram menemukan Woodland Region 123,456
    • Rentang lokasi akhirnya adalah 157312,583552 sampai 158591,584831
    • Ini mencakup koordinat input asli x=157440 z=583680
  • Versi sebelum 1.11 memakai struktur exploitable selain Woodland Mansion, sehingga memerlukan kode berbeda
  • Sebelum 1.9, posisi item dikirim bukan sebagai double melainkan fixed-point 5 bit pada fractional part, sehingga memecahkan status RNG hanya dari satu item menjadi tidak realistis dan memerlukan strategi pengukuran lain

Cara menambal

  • Cara termudah adalah mencari patch atau konfigurasi yang menonaktifkan manipulasi RNG
  • Implementasi yang rentan menetapkan seed ke this.rand global dan mengembalikannya dalam World.setRandomSeed
public Random setRandomSeed(int seedX, int seedY, int seedZ) {
    this.rand.setSeed(seedX * 341873128712L + seedY * 132897987541L + seedZ + this.getWorldInfo().getSeed());
    return this.rand;
}
  • Jika ingin perlindungan penuh, metode ini bisa diubah agar mengembalikan Random baru pada setiap pemanggilan
public Random setRandomSeed(int seedX, int seedY, int seedZ) {
    return new Random(seedX * 341873128712L + seedY * 132897987541L + seedZ + this.getWorldInfo().getSeed());
}
  • Jika performa dikhawatirkan, bisa dibuat field RNG terpisah khusus world generation bernama separateRandOnlyForWorldGen, lalu dipastikan tidak dibagikan dengan penggunaan lain
  • Patch untuk PaperMC 1.12.2 tersedia di PaperWithRandarPatched commit dan file patch alternatif

Lampiran n0pf0x: metode pencarian koordinat lain dan The End

  • n0pf0x menggunakan pencarian koordinat berbasis cache alih-alih lookup table GPU besar dari pihak Mason
    • Saat hit terjadi, koordinat itu dan koordinat di sekitarnya dalam radius tertentu dimasukkan ke HashMap
    • Pass pertama memutar RNG ke belakang sambil cepat memeriksa cache hit atau duplikasi terhadap seed yang baru saja diproses
    • Pass kedua hanya dijalankan jika pass pertama gagal, dan memakai algoritme pencarian koordinat yang lebih mahal seperti yang dijelaskan sebelumnya
  • Pendekatan cache ini bisa membantu mengurangi false positive karena efektif melewati valid location yang kurang meyakinkan
  • Di The End, RNG hanya terpengaruh saat chunk dibuat pertama kali, sehingga tidak mudah mengamati pemuatan ulang chunk base berulang kali seperti di Overworld
  • Ada dua situasi yang bisa diandalkan di The End
    • pemain yang berada di base berkeliaran lalu menghasilkan chunk yang belum pernah dibuat
    • pemain yang bergerak ke base membuat trail chunk baru di jalur perpindahan
  • Trail semacam ini bisa dipakai untuk sistem identifikasi otomatis, tetapi n0pf0x tidak mengimplementasikannya dan melacaknya secara visual manual
  • Untuk identifikasi pemain, digunakan gagasan End Occupancy Tracker (EOT)
    • Berdasarkan asumsi bahwa jumlah panggilan RNG per tick agak berkorelasi dengan jumlah chunk yang dimuat, yang pada gilirannya berkaitan dengan jumlah pemain di dimensi tersebut
    • Dengan melihat apakah jumlah panggilan RNG melonjak atau turun segera setelah pemain join/leave, dapat diperkirakan siapa yang berada di The End
  • EOT hanya diuji di 9b9t dan mungkin tidak berlaku di server lain seperti 2b2t
    • RNG harus bisa di-sample secara stabil setiap tick
    • Jika aktivitas pemain di The End jauh lebih tinggi, hal ini bisa menjadi lebih sulit

1 komentar

 
GN⁺ 2024-04-19
Komentar Hacker News
  • Pada 1999–2000 ada International RoShamBo Programming Competition, tempat bot komputer batu-gunting-kertas saling bertanding [1]
    Bot acuannya memakai pilihan acak, strategi yang secara teori tidak bisa dikalahkan, tetapi salah satu entri iseng dirancang untuk menghitung balik state generator angka acak dan memprediksi langkah pemain acak dengan akurasi 100%
    Koreksi: bot itu adalah “Nostradamus” buatan Tim Dierks, dan dinyatakan sebagai pemenang kategori “supermodified” pada kompetisi pertama [2]
    [1] https://web.archive.org/web/20180719050311/http://webdocs.cs...
    [2] https://groups.google.com/g/comp.ai.games/c/qvJqOLOg-oc

    • Itu saya. Senang melihat kutipan lama itu lagi: “Dengan kemampuan teknis yang luar biasa dan sikap ‘curanglah sejak awal dan sesering mungkin’, Tim bisa punya karier menjanjikan sebagai programmer AI di industri gim komputer :)”
      Kenyataannya, saya masuk ke bidang keamanan, menulis RFC TLS, dan menjadi principal engineer di divisi keamanan Google. Terima kasih sudah membangkitkan kenangan
    • Pada tahun pertama, saya mengirimkan entri yang optimal buruknya, cheesebot
      https://web.archive.org/web/20180719050236/http://webdocs.cs...
    • Seluruh penjelasan entri kategori “supermodified” itu kocak sekali
      Nostradamus ditulis oleh Tim Dierks, VP Engineering di Certicom yang sangat ahli kriptografi, dan mengalahkan pemain optimal dengan merekayasa balik state internal generator random(). Menurutnya, itu “lebih mudah sekaligus lebih sulit daripada yang diduga”. Namun, demi sportivitas, ia tetap bermain optimal melawan semua lawan lainnya
      Fork Bot berasal dari ide yang terpikir oleh Dan Egnor beberapa menit setelah mendengar tentang kompetisi ini, dan memanfaatkan “rutinitas library diizinkan” dengan menjalankan tiga proses menggunakan fork(), lalu masing-masing mengeluarkan pilihan berbeda dan mematikan dua proses yang kalah. Andreas Junghanns mengimplementasikannya dalam sekitar 10 baris kode, tetapi setelah giliran pertama ketiga pilihan itu semuanya kalah dari Psychic Friends Network, sehingga programnya berhenti dan sisa pertandingan dihitung walkover
      Psychic Friends Network adalah kode C terobfuskasi yang benar-benar lucu, ditulis oleh Michael Schatz dan orang-orang RST Corporation; ia melakukan berbagai hal seperti fungsi pembantu untuk mencari karma baik, konsultasi zodiak, memasak spageti dan pizza mistis, menjadikan Demokrat sebagai komunis lewat #define, serta melakukan undef terhadap Tuhan. Apa persisnya yang dilakukannya dengan stack frame masih sedang dicari tahu, tetapi selama tidak melawan meta-meta-cheater, skornya tidak pernah di bawah +998 dalam satu pertandingan
      The Matrix ditulis oleh Darse Billings, pemegang gelar bergengsi “Student for Life”, dan dengan prinsip sederhana “tidak ada sendok”, ia mengalahkan semua lawan dengan skor sempurna
      The Matrix juga merupakan program turnamen, sehingga memiliki akses penuh ke semua algoritme, struktur data, dan rutinitas output lainnya, jadi kecil kemungkinan akan terlampaui di masa depan. Karena itu, kategori ini dinyatakan selesai dan dihapus dari kompetisi berikutnya
    • Saya ingat ada seseorang yang melakukan hal serupa pada situs poker online yang, dalam upaya terpuji untuk meningkatkan transparansi, mendokumentasikan generator angka pseudoacak mereka
      Pada akhirnya, transparansi itu memang membuat keamanannya membaik
    • Jadi mereka memakai generator angka pseudoacak?
  • Reduksi kisi LLL adalah algoritme yang sama yang beberapa hari lalu juga dipakai di sebuah CVE untuk membobol kunci PuTTY melalui nonce yang bias
    tptacek sedikit menjelaskan serangannya, dan juga menautkan soal cryptopals yang, kalau menyipitkan mata, kita hampir bisa pura-pura memahaminya https://news.ycombinator.com/item?id=40045377
    Dengan cara serupa, server Minecraft SciCraft punya farm creeper dengan semacam alat ilmu hitam yang memanipulasi state generator angka acak secara deterministik, sehingga petir “acak” menyambar blok tertentu di setiap frame untuk menghasilkan drop creeper yang lebih bagus https://youtu.be/TM7SutJyDCk

    • Sean dan Kelby menjelaskan apa itu LLL dengan jauh lebih baik, tetapi soal mengapa LLL ada, tulisan ini termasuk yang terbaik yang pernah saya lihat
      Dalam ketiga kasus itu, yang dibutuhkan hanya aljabar linear dasar, dan itu pun tidak banyak. Kelby berharap kita memahami Gram-Schmidt, yang biasanya muncul menjelang ujian tengah semester pada mata kuliah pengantar aljabar linear tingkat sarjana
      Saya tidak punya kata-kata untuk menggambarkan betapa bagusnya tulisan ini. Ini membuat minggu saya jadi menyenangkan
      Penjelasan sangat ringkas tentang proses yang sama, yang nanti bisa diikuti dengan Python:
      https://crypto.stackexchange.com/questions/37836/problem-wit...
    • Ada juga manipulasi angka acak yang membuat blok selalu jatuh pada nilai maksimum, dijelaskan di sini
      https://youtu.be/ZcdN1wCJPqM?t=390
    • “Alat ilmu hitam”, “kalau menyipitkan mata, hampir bisa pura-pura memahaminya” — begitulah saya saat melihat kriptografi :D
  • Saat bangun pagi, terbayang situasi di mana blok-blok yang semalam belum ada tiba-tiba melayang di langit; awalnya tampak seperti kabut hantu, lalu segera terlihat sebagai redstone, observer, dan slime block, dengan TNT jatuh tanpa henti
    Itu terjadi hanya karena server membocorkan posisiku. Meski begitu, masih ada kemungkinan untuk kabur; mungkin ada beberapa detik untuk mengambil barang penting dari chest lalu lari, atau waktu untuk membangun tempat perlindungan obsidian. Tapi hanya itu saja
    Tidak cukup waktu untuk membuat meriam dengan bidikan presisi, dan toh ketinggiannya juga tidak akan bisa disesuaikan. Kalau punya elytra dan roket, mungkin bisa pergi mengganggu, tetapi tepat 16 chunk jauhnya ada lubang world eater raksasa. Apakah mereka sudah memasang jebakan lava di setiap Nether portal terdekat?

  • Saya sudah melihat banyak masalah generator angka acak yang menarik dan lucu, tetapi ini salah satu eksploit paling rumit dibandingkan dengan hasil yang didapat. Rasanya seperti karya seni yang keren

    • Kalau mereka menjual item, mungkin bisa menghasilkan uang, mungkin sampai ribuan dolar. Tentu saja, mengingat jumlah kerja yang masuk, itu tetap imbalan kecil
    • Saya sangat suka cara keputusan-keputusan para developer Mojang yang sekilas tampak tidak berbahaya dieksploitasi di sini. Sangat keren
  • Eksploit yang cukup keren
    Ide server yang bebas mengeksploitasi bug juga menarik, dan terlihat seperti tahap permainan yang benar-benar berbeda
    Kalau metaverse benar-benar terjadi, rasanya “bertarung sungguhan” bukan sekadar memakai mekanisme pertarungan dalam game akan terlihat seperti ini

    • Pertarungan 2b2t juga tidak terlihat seperti Minecraft biasa
      Karena sudah lama ada banyak item mahal hasil duplikasi, PvP berubah menjadi terus-menerus menyebar end crystal yang memberi kerusakan besar saat dihancurkan, sementara pertahanan menjadi soal berapa banyak “Totem of Undying” yang dimiliki untuk menyerap damage fatal
      Tentu saja, klien hack mengotomatiskan penempatan end crystal, reload totem, serta identifikasi posisi lemah dan kuat, lalu pemain mengikuti panduan itu untuk terus memberikan damage
      Sedikit sebelumnya, sebelum dipatch di server, juga ada pedang hack dengan damage +32.767 yang bisa membunuh seketika
    • Keseimbangan yang berkumpul di sekitar bug dan eksploit cukup tipikal dalam game sandbox PvP yang sengit, sekalipun server tidak mengizinkannya
      ARK: Survival Evolved dan Eve Online terkenal karena klan-klan raksasa berskala ribuan orang yang sangat ekstrem dalam metagame dan eksploitasi bug
      Tidak selalu romantis. Di ARK ada mekanisme yang memungkinkan doxing pemain dan beberapa akun Steam mereka, dan selama Great War tampaknya ada beberapa hubungan dalam game yang merembet ke dunia nyata
      Kadang caranya juga sangat mendasar. Misalnya saat diserang, membangun menara raksasa lalu merobohkannya untuk menyebabkan denial of service pada server hingga crash; server lalu rollback ke backup 10–20 menit sebelumnya, sehingga basis yang memiliki pemain aktif menjadi sangat sulit diserang. Itu trik sangat lama dan sudah diperbaiki bertahun-tahun lalu
      Rust juga pernah memiliki kebijakan yang mendorong penyebaran dan pengungkapan bug serta eksploit di YouTube, tetapi tujuannya berbeda: agar developer lebih cepat mengetahuinya dan menambalnya. Hasilnya, game itu menjadi cukup solid dan sangat sulit dieksploitasi tanpa memakai cheat eksternal sungguhan
    • Di titik tengah ada Super Smash Bros Melee. Banyak taktik dalam game yang diizinkan di turnamen bergantung pada bug
      Namun hanya yang bisa dieksploitasi secara manual dengan controller biasa, bukan hacking sungguhan. Satu eksploit bernama Wobbling dilarang pada 2019, padahal game ini keluaran 2001
    • Dari sudut pandang gameplay, saya cukup menyukai ide server anarki sungguhan, tetapi di 2b2t yang sebenarnya saya berhenti karena chat-nya terlalu banyak berisi n-word
    • “Server yang bebas mengeksploitasi bug” bukankah pada dasarnya semua server CS 1.6 tanpa VAC?
  • Saya baru saja menonton video tentang topik ini. Ini contoh peringatan yang jelas tentang bahaya ketika sumber-sumber randomness saling berinteraksi, dan banyak berlaku juga pada sistem-sistem penting
    Karena alasan performa, kita sering berbagi generator angka acak dalam kode, dan kisah seperti ini jelas membuat orang berhenti sejenak

    • Saya rasa saya belum pernah memakai pseudorandom number generator dalam software serius, tetapi secara intuitif saya mengira memakai generator angka acak yang sama di sebanyak mungkin tempat justru akan membuat serangan seperti ini lebih sulit
      Alasannya, titik-titik pembaruannya akan menjadi cukup sulit diamati. Namun kasus ini menunjukkan dengan cukup mengesankan dan menyenangkan bahwa intuisi itu keliru
  • Video ini mengejutkan: https://www.youtube.com/watch?v=maMpMOnIJDE
    Saya tidak tahu komunitasnya serumit ini

  • Lebih jauh lagi, cracking generator angka acak dengan cara seperti ini juga pernah diimplementasikan di dalam game
    https://youtu.be/FPmQ0rnJjNc?si=tTFObcfZ-ILanL_A

  • Mengejutkannya, ada Mess Detector, sebuah mesin yang dibuat di dalam Minecraft itu sendiri. Alih-alih block drop, ia memakai posisi TNT yang sudah dinyalakan untuk memprediksi state internal generator angka acak
    https://www.youtube.com/watch?v=FPmQ0rnJjNc

  • Ini terlihat seperti state compromise extension attack (https://en.wikipedia.org/wiki/Random_number_generator_attack)
    Ini serangan yang bisa menimpa PRNG yang bukan cryptographically secure pseudorandom number generator (CSPRNG)
    Sekarang rasanya menyediakan PRNG sebagai default di library tidak terlalu aman. Mirip seperti mengizinkan TLSv1.0 atau blowfish secara default pada 2024