Factorio'nun Lua güvenlik açığı analizi
Factorio nedir?
- Factorio, fabrikaları otomatikleştirip roket üreterek gezegenden kaçtığınız bir oyundur
- 3.500.000'dan fazla oyun kopyası satıldığı için güvenlik araştırmacıları açısından cazip bir hedeftir
Lua'nın oyunda kullanım şekli
- Lua, oyun mantığını uygulamak ve modlar ile özel haritalar oluşturmak için kullanılır
- Modlama topluluğu çok aktiftir ve binlerce mod vardır
- Alien Biomes modu 551K indirme sayısına ulaşmıştır
Lua yorumlayıcısının ağa açık olması
- Factorio'nun çok oyunculu modu, istemcileri senkronize etmek için deterministic lockstep kullanır
- Bir oyuncu Lua kodu çalıştırdığında diğer oyuncuların da aynı kodu çalıştırması gerekir
- Bu da ağ üzerinden kötü amaçlı Lua kodu çalıştırma olasılığı yaratır
Yaygın istismar yolu
- Kötü amaçlı bir harita sunan bir Factorio sunucusu barındırılır
- İstemci sunucuya bağlandığında haritayı indirir ve Lua kodunu çalıştırır
- Lua uygulamasındaki zayıflıklardan yararlanılarak sahte nesneler oluşturulur
- Bellek sızıntısı/bozulması yoluyla programın davranışı değiştirilir
- Bu güçlü primitive'ler kullanılarak kod çalıştırma elde edilir
Lua bayt kodunun tehlikesi
- Lua bir yorumlanan dildir; yazılan kodu doğrudan çalıştırmak yerine bayt koduna derler
- Bayt kodu doğrudan çalıştırılabiliyorsa hatalı bayt kodu yürütülerek bellek sızdırılabilir veya bozulabilir
Bayt kodu doğrulayıcısı
- Lua geliştiricileri yorumlayıcıyı kötü amaçlı bayt kodundan korumak için bir bayt kodu doğrulayıcısı uyguladı, ancak bunun tekrar tekrar aşılabildiği görüldüğü için Lua 5.2'de kaldırıldı
- Factorio geliştiricileri kendi bayt kodu doğrulayıcılarını uyguladı, ancak bazı off-by-one sorunları nedeniyle kusursuz değil
Sahte nesne oluşturma
- Sahte nesneler oluşturarak yorumlayıcının tüm işlevlerinden yararlanmak mümkündür
- Dizeler kullanılarak rastgele veriler sızdırılabilir, diziler kullanılarak da rastgele belleğe yazılabilir
- Yerel fonksiyonlar çağrılabiliyorsa yürütme akışı kontrol edilebilir
Adres sızdırma
- Lua'nın print fonksiyonu adres sızdırabilir
- Factorio'da bu kaldırıldığı için, tür karmaşasından yararlanarak adres sızdırma yöntemi kullanılır
TValues'i anlamak
- Lua dinamik bir dildir; değişkenlerin türü çalışma zamanında değişebilir
- Dahili olarak Lua, nesneleri temsil etmek için TValue yapısını kullanır
- TValue, tür (
tt_) ve değer (value_) özelliklerine sahiptir
FORLOOP ile tür karmaşası
- FORLOOP opcode'u, döngünün başlangıç değerini sayı varsayarak tür karmaşasına yol açabilir
- Bu sayede adres sızdırmak mümkün olur
IEEE 754 double precision
- Double precision; işaret, üs ve mantis bileşenlerinden oluşur
- Lua tamsayıları ayrı bir tür olarak temsil etmediği için, 53 bite kadar adresler hassasiyet kaybı olmadan sızdırılabilir
Sahte nesne arama
- Upvalue'lar ve Closure'lar anlaşılırsa sahte nesneler bulunabilir
- Upvalue'lar, dış fonksiyonlardaki değişkenlere erişim sağlar
- Bayt kodunu değiştirip Upvalue indeksini değiştirerek sahte nesneler bulunabilir
GN⁺ görüşü
- Bu yazı, dinamik dillerdeki güvenlik açıklarını anlamak açısından çok faydalı
- Factorio gibi popüler bir oyunda ortaya çıkabilecek güvenlik sorunlarını iyi açıklıyor
- Lua gibi dilleri kullanan diğer projelerde de benzer açıklar bulunabilir
- Yeni bir teknoloji ya da açık kaynak benimsenirken güvenlik incelemesi şarttır
- Benzer işlevlere sahip diğer projeler arasında Minecraft'ın modlama sistemi de vardır
Henüz yorum yok.