2 poin oleh GN⁺ 2024-06-30 | Belum ada komentar. | Bagikan ke WhatsApp

Analisis kerentanan keamanan Lua di Factorio

Apa itu Factorio?

  • Factorio adalah gim tentang mengotomatiskan pabrik, membangun roket, dan melarikan diri dari sebuah planet
  • Lebih dari 3.500.000 salinan gim telah terjual, menjadikannya target yang menarik bagi para peneliti keamanan

Cara Lua digunakan dalam gim

  • Lua digunakan untuk mengimplementasikan logika gim, serta membuat mod dan peta kustom
  • Komunitas modding sangat aktif, dengan ribuan mod yang tersedia
  • Mod Alien Biomes telah mencatat 551K unduhan

Paparan interpreter Lua ke jaringan

  • Mode multipemain Factorio menggunakan deterministic lockstep untuk menyinkronkan klien
  • Jika satu pemain menjalankan kode Lua, pemain lain juga harus menjalankan kode yang sama
  • Ini membuka kemungkinan untuk mengeksekusi kode Lua berbahaya melalui jaringan

Jalur eksploitasi yang umum

  • Menjalankan server Factorio yang menyediakan peta berbahaya
  • Saat klien terhubung ke server, mereka mengunduh peta dan menjalankan kode Lua
  • Memanfaatkan kelemahan pada implementasi Lua untuk membuat objek palsu
  • Mengubah perilaku program melalui kebocoran/kerusakan memori
  • Menggunakan primitive yang kuat ini untuk mendapatkan eksekusi kode

Bahaya bytecode Lua

  • Lua adalah bahasa interpreter; kode yang ditulis tidak langsung dijalankan, melainkan dikompilasi menjadi bytecode
  • Jika bytecode dapat dijalankan secara langsung, bytecode yang tidak valid dapat digunakan untuk membocorkan atau merusak memori

Validator bytecode

  • Pengembang Lua pernah mengimplementasikan validator bytecode untuk melindungi interpreter dari bytecode berbahaya, tetapi karena berulang kali ditemukan cara untuk melewatinya, validator ini dihapus pada Lua 5.2
  • Pengembang Factorio membuat validator bytecode mereka sendiri, tetapi validator ini tidak sepenuhnya sempurna karena beberapa masalah off-by-one

Pembuatan objek palsu

  • Dengan membuat objek palsu, seluruh kemampuan interpreter dapat dimanfaatkan
  • String dapat digunakan untuk membocorkan data arbitrer, dan array dapat digunakan untuk menulis ke memori arbitrer
  • Jika fungsi native dapat dipanggil, alur eksekusi dapat dikendalikan

Kebocoran alamat

  • Fungsi print di Lua dapat membocorkan alamat
  • Di Factorio fungsi ini telah dihapus, sehingga digunakan metode kebingungan tipe untuk membocorkan alamat

Memahami TValues

  • Lua adalah bahasa dinamis, sehingga tipe variabel dapat berubah saat runtime
  • Secara internal, Lua menggunakan struktur TValue untuk merepresentasikan objek
  • TValue memiliki properti tipe (tt_) dan nilai (value_)

Kebingungan tipe menggunakan FORLOOP

  • Opcode FORLOOP dapat menyebabkan kebingungan tipe dengan menganggap nilai awal loop sebagai angka
  • Melalui hal ini, alamat dapat dibocorkan

Presisi ganda IEEE 754

  • Presisi ganda terdiri dari tanda, eksponen, dan mantissa
  • Karena Lua tidak merepresentasikan bilangan bulat, alamat hingga 53 bit dapat dibocorkan tanpa kehilangan presisi

Mencari objek palsu

  • Dengan memahami Upvalues dan Closures, objek palsu dapat dicari
  • Upvalues memungkinkan akses ke variabel dari fungsi luar
  • Dengan memodifikasi bytecode untuk mengubah indeks Upvalue, objek palsu dapat dicari

Pendapat GN⁺

  • Tulisan ini sangat berguna untuk memahami kerentanan keamanan pada bahasa dinamis
  • Artikel ini menjelaskan dengan baik masalah keamanan yang dapat muncul pada gim populer seperti Factorio
  • Kerentanan serupa juga dapat ada pada proyek lain yang menggunakan bahasa seperti Lua
  • Saat mengadopsi teknologi baru atau open source, tinjauan keamanan adalah hal yang wajib
  • Proyek lain dengan fitur serupa antara lain sistem modding Minecraft

Belum ada komentar.

Belum ada komentar.