- Randar, Minecraft Beta 1.8~1.12.2 sürümlerinde blok kırıldığında oluşan item drop koordinatlarını kullanarak sunucunun
java.util.Random durumunu geri kuran ve diğer oyuncuların konumunu geriye doğru izleyen bir exploittir
- Temel neden, arazi/yapı üretimi ile madencilik olaylarının aynı rastgele sayı üretecini paylaşması olan RNG yeniden kullanımıdır; gözlemlenebilir drop konumları da iç durum için ipucu olur
- Item drop'ların X/Y/Z ofsetleri art arda üç
World.rand.nextFloat() çıktısı olduğundan, 48 bit seed'in üst 24 bitleri açığa çıkar ve LLL kafes indirgeme ile seed hızlıca geri kurulabilir
- Geri kurulan seed, Woodland Mansion kontrolünden çıkan değer olup olmadığını doğrulamak için geriye sarılır; eşleşirse en son yüklenen 1280×1280 blokluk Woodland region belirlenir
- ReplayMod gibi geçmiş paket kayıtlarında drop verisi kalmışsa, sunucu yamalandıktan sonra bile Beta 1.8~1.12.2 dönemindeki faaliyet konumları sonradan açığa çıkabilir
Randar'ın hedeflediği bilgi
- Hedef, aynı dünyadaki diğer oyuncuların oyun içi koordinatlarını bulmaktır
- Ana örnek olarak 2b2t kullanılır
- 2b2t, kuralsız bir Minecraft “anarchy” sunucusudur
- Sunucu haritası 3.6 quadrillion square tiles ölçeğinde olduğu için, konum gizliliği item'ları korumanın temel şartı haline gelir
- Randar'dan önce de 2b2t'de 2018~2021 arasında kullanılan Nocom adlı bir koordinat exploiti vardı
Etkilenen sürümler ve koddaki hata
- Sorun, Minecraft Beta 1.8'in 2011 sürümünden 1.12.2'nin 2017 sürümüne kadar mevcuttu
- 2b2t, 14 Ağustos 2023'e kadar 1.12.2'de kaldı
- Temel hata,
java.util.Random örneğinin birden çok kod yolunda dikkatsizce yeniden kullanılmasıydı
- Arazi üretimi ile madencilik gibi oyun davranışları arasında RNG paylaşılıyordu
java.util.Random'ın kendisi de güvenlik amaçlı bir RNG değildir
- Minecraft, aynı world seed ve aynı konumda aynı arazinin çıkmasını sağlamak için deterministik üretim kullanır
- Bu amaç için
java.util.Random kullanılması doğaldır
- Sorun, öngörülebilir olması gereken world generation RNG işlemlerinin, öngörülemez olması gereken olayları da etkilemesiydi
Woodland Mansion kontrolü ve global World.rand
- Woodland Mansion oluşturma konumunu kontrol etme sürecinde
World.rand sıfırlanır
- Woodland region, 80×80 chunk birimiyle hesaplanır
- O region içinde Mansion'ın oluşacağı chunk'ı seçmek için
random.nextInt(60) dört kez çağrılır
- Zafiyetli akışta
World.setRandomSeed(seedX, seedY, seedZ), global this.rand üzerinde yeni bir seed ayarlar ve aynı nesneyi geri döndürür
- 2b2t'ye özel formül şöyledir
seed = x * 341873128712 + z * 132897987541 - 4172144997891902323 mod 2^48
setRandomSeed, yalnızca gerçek bir Woodland Mansion yakınındayken değil, her chunk load sırasında kontrol amacıyla da çağrılır
- Boyutlara göre etki farklıdır
- Ana etki alanı Overworld'dür
- Nether, yapı üretiminde her zaman güvenli bir RNG kullandığı için güvenlidir
- The End, end city nedeniyle ilk üretim sırasında etkilenir ama aynı chunk sonradan her yeniden yüklendiğinde tekrar etkilenmez; bu yüzden görece daha güvenlidir
Item drop koordinatlarının RNG'yi açığa çıkarma biçimi
- Bir blok kazıldığında, item blok içindeki rastgele bir konuma drop olur
- Örneğin blok koordinatı
(10, 20, 30) ise item (10.25, 20.25, 30.25) ile (10.75, 20.75, 30.75) arasında belirir
- Bu konum, X, Y ve Z ofsetlerini belirlemek için üç
world.rand.nextFloat() çağrısıyla üretilir
- Drop koordinatından orijinal
nextFloat() değerine geri dönülebilir
- Float'a 0.5 çarpılması sürecinde yalnızca üs küçülür, bilgi kaybı oluşmaz
- Sonrasında double'a çevrilip blok koordinatı eklenir ve ağ üzerinden full precision ile gönderilir
java.util.Random.nextFloat(), 48 bit seed'i güncelledikten sonra üst 24 biti integer olarak alıp 2^24'e böler
- LCG denklemi
newSeed = oldSeed * 25214903917 + 11 mod 2^48 şeklindedir
- Art arda üç float, art arda üç seed'in üst 24 bitini verir
LLL kafes indirgeme ile seed geri kurma
- Basit yöntem, ilk ölçüme uyan
2^24 adet alt 24 bit adayını tek tek denemektir
- Bu yöntem çalışır ama yavaş olduğu için kafes yaklaşımı kullanılır
- Üç ölçüm şu üç değerin aralığını verir
seed
nextSeed(seed)
nextSeed(nextSeed(seed))
- Bu üç değer,
(seed, nextSeed(seed), nextSeed(nextSeed(seed))) biçiminde 3 boyutlu bir nokta olarak görülürse, tüm olası seed'ler bir kafes yapısı oluşturur
- Temel vektörler şu şekilde alınır
(1, a, a^2)
(0, c, 0)
(0, 0, c)
- burada
a = 25214903917, c = 2^48
- LLL basis reduction, aynı kafesi üreten ama daha kısa ve neredeyse dik bir baz bulur
- Mathematica örneği
LatticeReduce[{{1, a, a^2}, {0, c, 0}, {0, 0, c}}]
- Ortaya çıkan baz
(1270789291, -2446815537, 2154219555), (-2355713969, 1026597795, 4110294631), (-3756485696, -2345310016, -2015749696) olur
- Ölçüm küpünün merkezi indirgenmiş baz uzayına dönüştürüldükten sonra her katsayı en yakın integer'a yuvarlanırsa geçerli bir kafes noktası elde edilir; ilk koordinat geri kurulan iç seed olur
- Optimize edilmiş Java kodu örneğinde üç ölçümden seed yaklaşık 10ns seviyesinde geri kurulabilir
Seed'i geriye sarıp konum bulma süreci
java.util.Random'ın LCG'si hem ileri hem geri yönde çalıştırılabilir
- İleri yön:
newSeed = oldSeed * 25214903917 + 11 mod 2^48
- Geri yön:
oldSeed = (newSeed - 11) * 246154705703781 mod 2^48
- Geri kurulan seed geriye sarılırken, her seed'in Woodland Mansion kontrolünden gelmiş olup olamayacağı doğrulanır
- Minecraft world sınırı -30 million ile +30 million blok arasındadır
- Uygulama, her eksende Woodland region aralığını -23440 ile +23440 olarak alır
- Olası Woodland region sayısı
(23440*2+1)^2, yani 2,197,828,161'dir
- Tüm 2.2 milyar adayı tek tek karşılaştırmak yavaştır; büyük bir
HashSet de çok bellek tüketir
- Z katsayısı
132897987541 tek sayı olduğundan mod 2^48 altında terslenebilir
- Ters değer
211541297333629'dur
- Bununla tüm Z adaylarını gezmek yerine yalnızca 46,881 adet X adayı üzerinden gidip Z hesaplanarak aday region bulunabilir
GPU ve lookup table optimizasyonu
- Yalnızca X üzerinden gezinmek tek bir seed için makuldü; ancak çok sayıda bot saniyede birden fazla blok kazıyor ve her ölçüm için binlerce RNG step'i inceleniyorsa, düşük donanımlı bir VPS üzerinde gerçek zamanlı işleme zorlaşıyordu
- Sonraki uygulama CUDA batch job ve lookup table kullanacak şekilde değişti
- Lookup table anahtarı mansion seed'in alt 32 bitidir
- Değer ise Woodland region'ın X koordinatıdır
- Alt 32 bit anahtarlarında çakışma olmadığı belirtiliyor, fakat nedeninin anlaşılmadığı da ekleniyor
- Tablo,
2^32 giriş ve giriş başına 2 byte kullanarak yaklaşık 9GB VRAM gerektirir
- RTX 3090 üzerinde saniyede yaklaşık 10 milyon seed kırılabiliyordu
- Geri kurulan sonuç, en son chunk load'un gerçekleştiği 1280×1280 blokluk Woodland region'ı verir; bu da birkaç dakikalık aramayla konumu bulmaya yetecek kadar dardır
Gerçek sunucuda gözlenen step dağılımı
- Teoride Woodland seed'leri arasındaki ortalama mesafe yaklaşık 128,000 RNG step'tir
- 2b2t'de çoğu durumda Woodland seed birkaç onlarca step içinde bulunuyordu
- Ölçüm, paket işleme zamanlaması nedeniyle tick'in çok erken bir anında alınıyordu
- Genellikle chunk'lar bir önceki tick'te yüklenmiş oluyordu
- Güvenilir ölçüm alt sınırı en az 4 RNG step'ten başlar
- Çünkü Woodland Mansion kodu, gözlemden önce dört
rand.nextInt çağrısı yapar
- Büyük sıçramalar 1354 step katlarında görülüyordu
- Olası neden olarak end crystal patlaması veya wither skull öne sürülüyordu
- End crystal patlamasında blok hasarı hesabı
16^3-14^3=1352 ve buna iki ses efekti daha eklendiğinde 1354 step elde edilir
ReplayMod ve sonradan açığa çıkma riski
- Sunucu daha yeni sürüme geçmiş ya da RNG manipülasyonu için yama almış olsa bile, eski veri kalmışsa Randar riski sürer
- Bazı Minecraft oyuncuları ReplayMod gibi mod'larla paketleri kaydeder
- Kayıt dosyasında item drop'ları varsa, o anki sunucu RNG durumu geri kurulabilir
- Blok kırma çok yaygın bir eylem olduğundan kayıtlarda bulunma ihtimali yüksektir
- Beta 1.8~1.12.2 döneminde aktif olan tüm konumlar, sunucu çok önce güncellenmiş olsa bile açığa çıkmış sayılmalıdır
- Randar'ı doğrudan denemeye yarayan istemci taraflı bir web aracı da sunuluyor
- hobune.stream/randar adresinde 1.12.2 ReplayMod dosyasını sürükleyip bırakarak koordinatlar görülebilir
- Kayıt dosyası tarayıcı dışına çıkmaz
Randar operasyonu ve heatmap'ler
- SpawnMasons, zaten başka projeler için 7/24 stone/cobblestone kazan hesaplarda item drop koordinatlarını kaydetmeye başladı
- Nocom'da kullanılan headless Minecraft sistemi yeniden kullanıldı ve ölçüm değerlerini saklamak için bir Postgres veritabanı eklendi
- RNG ölçümlerini kıran yazılım birkaç kez geliştirildi ve sonunda async CUDA batch job yapısında karar kılındı
- Kırılan ölçümler veritabanına eklendiğinde heatmap analiz tablosu da güncelleniyordu
- Tüm dönem, günlük ve saatlik hit count değerleri saklanıyordu
- Plotly Dash arayüzüyle belirli zaman aralıkları ve granularity seçilip tarayıcıdan görüntülenebiliyordu
- Elytra stash hunting kaynaklı chunk load spam'i, yalnızca birden fazla distinct hour boyunca yüklenmiş koordinatları dikkate alma yöntemiyle ayıklandı
- Bulunan hotspot'ları takip etmek için basit bir ortak annotation sistemi de eklendi
- Nocom'dan alınan Baritone bot ile item stash çalma ve temizleme süreci AFK şekilde otomatikleştirildi
Koruma amaçlı decoy Woodland region
- Randar her zaman en son chunk'ı doğru biçimde bulmaz
- RNG geriye sarılırken daha yeni bir decoy Woodland region önce gelirse, ilk eşleşmeyi döndüren exploit yanlış pozitif üretebilir
- Woodland seed genel olarak yaklaşık her 130,000 RNG seed'den birine denk gelir, ancak dağılımda outlier'lar vardır
- 2b2t'de yaklaşık 20 bin Woodland region'dan biri, sonraki 4 RNG step içinde başka bir Woodland region'a sahip olan özel bir gizlenme özelliği taşıyordu
- SpawnMasons bu tür region'larda stash kurdu
- Render distance nedeniyle koruma region'ı dışındaki chunk'lar yüklenmesin diye yapıları kompakt inşa ettiler
- Decoy konuma AFK hesap ve küçük bir base koyarak diğer Randar kullanıcılarının decoy konumu görmesini hedeflediler
- Kendi Randar log'larına göre bu stash'ler, tüm dönem boyunca komşu Woodland region'ı yanlışlıkla yüklememiş “clean” durumdaydı
- Açıklama yapıldığı tarihte bu stash'lerin zaten taşındığı belirtiliyor
Tam örnek ve sürüme göre kısıtlar
SPacketSpawnObject içinde mining drop gibi görünen item'lar tespit edilip, drop koordinatları üç float ölçümüne geri çevrildikten sonra LLL tabanlı kırma ve Woodland region geriye izleme yapan bir Java örneği sunuluyor
- 2b2t'den gerçek ölçüm örneği şu sonucu veriyor
- item drop:
0.41882818937301636, 0.6833633482456207, 0.46088552474975586
- RNG measurements:
5664934 14541261 7076144
- iç seed:
95041827771683
- Woodland region:
-12008 0
- konum aralığı:
-15370368,-128 ile -15369089,1151
- Diyagram örneği Woodland Region
123,456'yı bulur
- Nihai konum aralığı
157312,583552 ile 158591,584831 olur
- Bu aralık, orijinal giriş koordinatı
x=157440 z=583680 değerini içerir
- 1.11 öncesi sürümlerde exploitable structure Woodland Mansion değil başka bir yapıdır; bu yüzden farklı kod gerekir
- 1.9 öncesinde item konumu double değil, fractional part'ı 5 bit fixed-point olarak iletilir; bu nedenle tek bir item'dan RNG durumunu kırmak pratik değildir ve başka ölçüm stratejileri gerekir
Yama yöntemi
- Kolay yöntem, RNG manipulation'ı devre dışı bırakan bir yama veya ayar bulmaktır
- Zafiyetli uygulamada
World.setRandomSeed, global this.rand üzerinde seed ayarlayıp onu geri döndürür
public Random setRandomSeed(int seedX, int seedY, int seedZ) {
this.rand.setSeed(seedX * 341873128712L + seedY * 132897987541L + seedZ + this.getWorldInfo().getSeed());
return this.rand;
}
- Tam koruma isteniyorsa, her çağrıda yeni bir
Random döndürecek şekilde değiştirilebilir
public Random setRandomSeed(int seedX, int seedY, int seedZ) {
return new Random(seedX * 341873128712L + seedY * 132897987541L + seedZ + this.getWorldInfo().getSeed());
}
n0pf0x eki: diğer koordinat arama yöntemleri ve The End
- n0pf0x, Mason tarafındaki GPU tabanlı büyük lookup table yerine cache tabanlı koordinat arama kullandı
- Bir hit oluştuğunda ilgili koordinat ve çevresindeki radius içindeki koordinatlar
HashMap içine alınır
- İlk pass, RNG'yi geriye sararken cache hit veya bir önce işlenen seed ile tekrarları hızlıca kontrol eder
- İkinci pass ise yalnızca ilk pass başarısız olursa çalışır ve daha önce anlatılan pahalı koordinat bulma algoritmasını kullanır
- Bu cache yaklaşımı, daha az olası geçerli konumları atlama etkisi yarattığı için false positive azaltımına yardımcı olabilir
- The End'de RNG yalnızca chunk ilk kez üretildiğinde etkilenir; bu nedenle Overworld'deki gibi base chunk load'larını tekrar tekrar gözlemek zordur
- The End'de güvenilebilecek iki durum vardır
- Base'de bulunan bir oyuncunun dolaşıp henüz üretilmemiş chunk'lar oluşturması
- Base'e giden bir oyuncunun yol boyunca yeni chunk trail oluşturması
- Trail için otomatik tanımlama sistemi yapılabilir, ancak n0pf0x bunu uygulamadı ve görsel olarak elle takip etti
- Oyuncu tanımlamada End Occupancy Tracker (EOT) fikri kullanıldı
- Tick başına RNG çağrısı sayısının, yüklenen chunk sayısıyla belli ölçüde ilişkili olduğu ve bunun da o boyuttaki oyuncu sayısına bağlanabileceği varsayımına dayanır
- Oyuncu join/leave sonrasında RNG çağrılarında ani artış veya düşüş olup olmadığına bakılarak The End'deki oyuncular tahmin edilir
- EOT yalnızca 9b9t'de test edildi; 2b2t gibi farklı sunucu koşullarında geçerli olmayabilir
- Her tick'te kararlı biçimde RNG örneklenebilmesi gerekir
- The End'deki oyuncu etkinliği çok daha yoğunsa bu iş daha da zor olabilir
1 yorum
Hacker News yorumları
1999~2000 yıllarında International RoShamBo Programming Competition adlı, bilgisayar taş-kağıt-makas botlarının yarıştığı bir etkinlik vardı [1]
Referans bot, teorik olarak yenilemeyen bir strateji olan rastgele seçim yapıyordu; ancak şaka amaçlı katılımlardan biri, rastgele oyuncunun hangi hamleyi yapacağını %100 doğrulukla tahmin etmek için rastgele sayı üretecinin durumunu tersine hesaplayacak şekilde tasarlanmıştı
Düzeltme: O bot Tim Dierks’in “Nostradamus”uydu ve ilk yarışmada “supermodified” kategorisinin kazananı ilan edildi [2]
[1] https://web.archive.org/web/20180719050311/http://webdocs.cs...
[2] https://groups.google.com/g/comp.ai.games/c/qvJqOLOg-oc
Gerçekte ise güvenlik alanına geçtim, TLS RFC’leri yazdım ve Google güvenlik biriminde baş mühendis oldum. Bu anıyı canlandırdığın için teşekkürler
https://web.archive.org/web/20180719050236/http://webdocs.cs...
Nostradamus, kriptografi konusunda ciddi uzmanlığa sahip Certicom’un mühendislikten sorumlu başkan yardımcısı Tim Dierks tarafından yazıldı ve
random()üretecinin iç durumunu tersine mühendislikle çıkararak optimal oyuncuyu yendi. Kendi ifadesiyle “beklediğimden hem daha kolay hem daha zordu.” Yine de sportmenlik adına diğer tüm rakiplere karşı optimal oynadıFork Bot, Dan Egnor’un yarışmadan bahsedildiğini duyduktan birkaç dakika sonra aklına gelen bir fikirden çıktı; “kütüphane rutini serbest” kuralını kullanarak
fork()ile üç süreç başlatıyor, her birine farklı bir hamle yaptırıyor ve kaybeden ikisini öldürüyordu. Andreas Junghanns bunu yaklaşık 10 satır kodla uyguladı, ancak ilk turdan sonra üç hamlenin tamamı da Psychic Friends Network’e kaybedince program sonlandı ve kalan maçlar hükmen kaybedildiPsychic Friends Network, Michael Schatz ve RST Corporation ekibinin yazdığı gerçekten komik, obfuscation dolu bir C koduydu; iyi karma arayan yardımcı fonksiyonlar, burç yorumu, spagetti ve gizemli pizza tarifleri,
#defineile Demokratları komüniste çevirme ve tanrıyıundefetme gibi şeyler yapıyordu. Yığın çerçeveleriyle tam olarak ne yaptığı hâlâ çözülmeye çalışılıyor, ama meta-meta-hileciyle karşılaşmadığı sürece bir maçta +998’in altına inmiyorThe Matrix, “Student for Life” gibi prestijli bir unvana sahip Darse Billings tarafından yazıldı ve “kaşık diye bir şey yok” gibi basit bir ilkeyle tüm rakipleri mükemmel skorla yendi
The Matrix aynı zamanda turnuva programının kendisiydi; yani diğer tüm algoritmalara, veri yapılarına ve çıktı rutinlerine tam erişimi vardı, bu yüzden gelecekte de geçilmesi pek olası değildi. Bu nedenle bu kategori çözülmüş ilan edildi ve sonraki yarışmalarda kaldırıldı
Sonuçta bu şeffaflık sayesinde güvenlik iyileşmişti
LLL kafes indirgeme, birkaç gün önceki bir CVE’de önyargılı nonce’lar üzerinden PuTTY anahtarlarını kırmak için de kullanılan algoritmanın ta kendisi
tptaceksaldırıyı biraz açıkladı ve gözlerinizi kısarsanız neredeyse anlıyormuş gibi yapabileceğiniz bir cryptopals sorusuna da bağlantı verdi https://news.ycombinator.com/item?id=40045377Benzer şekilde, SciCraft Minecraft sunucusunda bir tür kara büyü cihazıyla rastgele sayı üretecinin durumu deterministik biçimde manipüle edilerek her karede belirli bloklara “rastgele” yıldırım düşüren ve böylece creeper drop’larını iyileştiren bir creeper çiftliği de vardı https://youtu.be/TM7SutJyDCk
Üç durumda da gereken şey temel lineer cebir kadar; hatta o kadar bile değil. Kelby, Gram-Schmidt’i anlamanızı bekliyor; bu da lisans düzeyi lineer cebire giriş dersinde ara sınavdan hemen önce görülen bir konu
Bu yazının ne kadar harika olduğunu anlatacak söz bulamıyorum. Haftamı güzelleştirdi
Daha sonra Python’da adım adım takip edilebilecek, aynı sürecin çok kısa bir açıklaması:
https://crypto.stackexchange.com/questions/37836/problem-wit...
https://youtu.be/ZcdN1wCJPqM?t=390
Sabah uyandığında, önceki gece orada olmayan blokların gökyüzünde süzüldüğünü görmek; ilk başta hayalet gibi sis sanıp sonra bunların redstone, observer ve slime blokları olduğunu fark etmek ve sonsuz TNT yağmurunu görmek gibi bir durum hayal et.
Bunun tek sebebi sunucunun benim konumumu sızdırmış olması. Yine de hâlâ kaçabilirsin; belki sandıktan alacaklarını birkaç saniye içinde kapıp kaçmaya ya da bir obsidyen sığınağı inşa etmeye vaktin olur. Ama hepsi bu kadar.
Hassas nişan alan bir top yapmaya zaman yetmez, zaten yüksekliği de tutturamazsın. Elytra ve roketin varsa engellemeye gitmeyi deneyebilirsin ama tam 16 chunk ötede devasa bir world eater çukuru var. Yakındaki her Nether portalına lav tuzağı kurmuşlar mıdır acaba?
Bir sürü ilginç ve komik rastgele sayı üreteci problemi gördüm ama bu, karşılığında elde edilene kıyasla gördüğüm en sofistike istismarlardan biri. Adeta harika bir sanat eseri gibi.
Oldukça havalı bir exploit.
Bug exploit'lerinin serbest olduğu sunucu fikri de güzel; oyunun tamamen farklı bir aşaması gibi görünüyor.
Metaverse gerçekten gerçekleşirse, sadece oyun içi savaş mekaniklerini kullanmak yerine “gerçekten savaşmak” herhalde böyle görünürdü.
Eskiden beri çoğaltılmış çok sayıda pahalı eşya olduğu için PvP, kırıldığında devasa hasar veren end crystal'ları durmadan spam'lemeye dönüştü; savunma ise ölümcül hasarı emen “totem of undying”den ne kadar çok taşıdığına bağlı.
Doğal olarak hack client'lar end crystal yerleştirmeyi, totem yeniden doldurmayı, zayıf ve güçlü pozisyonları belirlemeyi otomatikleştiriyor; oyuncu da onların yönlendirmesiyle sürekli hasar veriyor.
Ondan biraz önce de, sunucuda yama gelene kadar anında öldüren +32.767 hasarlı hack kılıçlar vardı.
ARK: Survival Evolved ve Eve Online, binlerce kişilik dev klanların metagame ve bug istismarını aşırı uçlara taşımasıyla ünlü.
Her zaman romantik değil. ARK'ta oyuncuları ve onların çok sayıdaki Steam hesabını dox'lamaya yarayan mekanikler vardı; ayrıca Great War sırasında oyun içi ilişkilerin kısmen gerçek hayata da taştığı anlaşılıyor.
Bazen çok temel yöntemler de oluyor. Örneğin baskın yerken devasa bir kule inşa edip onu yıkarak sunucuda hizmet engelleme yaratıp çökertirsen, sunucu 10-20 dakika önceki yedeğe geri dönerdi; bu da aktif oyuncusu olan üsleri basmayı çok zorlaştırıyordu. Çok eski bir yöntemdi ve yıllar önce düzeltildi.
Rust'ın da bug ve exploit'leri YouTube'da yaymayı ve kamuya açık hâle getirmeyi teşvik eden bir politikası vardı ama amaç farklıydı. Geliştiricilerin daha hızlı fark edip yamalamasını sağlamaktı. Sonuçta, gerçek harici hile kullanmadan istismar etmesi çok zor olan epey sağlam bir oyuna dönüştü.
Ama bunlar sadece normal kontrolcüyle manuel olarak uygulanabilen şeyler; gerçek hack değil. Wobbling adlı bir exploit ise 2019'da yasaklandı; oyununsa çıkış yılı 2001.
Bu konudaki videoyu az önce izledim. Rastgelelik kaynaklarının birbiriyle etkileşime girmesi durumunda ortaya çıkan riske dair çok net bir uyarı örneği; üstelik önemli sistemlerin çoğuna da uygulanabilir.
Performans yüzünden kodda sık sık rastgele sayı üreteci paylaşılıyor; böyle şeyleri görünce insan gerçekten durup düşünüyor.
Çünkü güncellenen noktaları yeterince gözlemlemek zor olur gibi geliyordu. Ama bu örnek, o sezginin yanlış olduğunu oldukça etkileyici ve eğlenceli bir şekilde gösteriyor.
Bu video gerçekten şaşırtıcı: https://www.youtube.com/watch?v=maMpMOnIJDE
Topluluğun bu kadar sofistike olduğunu bilmiyordum.
Bu sana şaşırtıcı geldiyse şuna da bak. Aklın duracak.
https://www.youtube.com/watch?v=ea6py9q46QU
bir de
https://www.youtube.com/watch?v=GaRurhiK-Lk
Daha da ötesi, bu tür rastgele sayı üreteci kırma yöntemleri oyunun içinde de uygulanmıştı.
https://youtu.be/FPmQ0rnJjNc?si=tTFObcfZ-ILanL_A
Şaşırtıcı biçimde, doğrudan Minecraft'ın içinde yapılmış Mess Detector adlı bir makine var. Blok düşmeleri yerine ateşlenmiş TNT'nin konumunu kullanarak rastgele sayı üretecinin iç durumunu tahmin ediyor.
https://www.youtube.com/watch?v=FPmQ0rnJjNc
Bu, state compromise extension attack gibi görünüyor (https://en.wikipedia.org/wiki/Random_number_generator_attack).
Kriptografik olarak güvenli sözde rastgele sayı üreteci (CSPRNG) olmayan PRNG'lerin maruz kalabildiği bir saldırı türü.
Artık kütüphanelerin varsayılan olarak PRNG sunması bile pek güvenli gelmiyor. 2024'te TLSv1.0 ya da blowfish'i varsayılan olarak etkin bırakmaya benziyor.