2 puan yazan GN⁺ 2024-06-30 | Henüz yorum yok. | WhatsApp'ta paylaş

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.

Henüz yorum yok.