Factorio की Lua सुरक्षा भेद्यता का विश्लेषण

Factorio क्या है?

  • Factorio एक ऐसा गेम है जिसमें फैक्ट्री को ऑटोमेट करके रॉकेट बनाया जाता है और ग्रह से भागना होता है
  • गेम की 3,500,000 से अधिक कॉपियां बिक चुकी हैं, इसलिए यह सुरक्षा शोधकर्ताओं के लिए एक आकर्षक टारगेट है

गेम में Lua का उपयोग कैसे होता है

  • Lua का उपयोग गेम लॉजिक लागू करने, mods और custom maps बनाने के लिए किया जाता है
  • modding community बहुत सक्रिय है और हज़ारों mods मौजूद हैं
  • Alien Biomes mod के 551K downloads दर्ज हैं

Lua interpreter का नेटवर्क एक्सपोज़र

  • Factorio का multiplayer mode clients को sync करने के लिए deterministic lockstep का उपयोग करता है
  • अगर एक player Lua code चलाता है, तो दूसरे players को भी वही code चलाना पड़ता है
  • इससे नेटवर्क के ज़रिए malicious Lua code चलाए जाने की संभावना बनती है

सामान्य exploit path

  • एक Factorio server host किया जाता है जो malicious map उपलब्ध कराता है
  • जब client server से connect करता है, तो वह map डाउनलोड करता है और Lua code चलाता है
  • Lua implementation की कमजोरी का फायदा उठाकर fake objects बनाए जाते हैं
  • memory leak/corruption के ज़रिए program के behavior को बदला जाता है
  • इन शक्तिशाली primitives का उपयोग करके code execution हासिल किया जाता है

Lua bytecode का जोखिम

  • Lua एक interpreter language है, इसलिए लिखे गए code को सीधे नहीं चलाती बल्कि उसे bytecode में compile करती है
  • अगर bytecode को सीधे चलाया जा सके, तो malformed bytecode चलाकर memory leak या corruption किया जा सकता है

bytecode verifier

  • Lua developers ने malicious bytecode से interpreter की रक्षा के लिए bytecode verifier लागू किया था, लेकिन बार-बार bypass की संभावना मिलने के कारण इसे Lua 5.2 में हटा दिया गया
  • Factorio developers ने अपना स्वयं का bytecode verifier लागू किया, लेकिन कुछ off-by-one समस्याओं के कारण यह पूरी तरह सही नहीं है

fake object बनाना

  • fake objects बनाकर interpreter की लगभग सभी सुविधाओं का उपयोग किया जा सकता है
  • strings का उपयोग करके arbitrary data leak किया जा सकता है, और arrays का उपयोग करके arbitrary memory write संभव है
  • अगर native functions को call किया जा सके, तो execution flow को नियंत्रित किया जा सकता है

address leak

  • Lua का print function addresses leak कर सकता है
  • Factorio में इसे हटा दिया गया है, इसलिए type confusion का उपयोग करके address leak करने का तरीका अपनाया जाता है

TValues को समझना

  • Lua एक dynamic language है, इसलिए variables के types runtime के दौरान बदल सकते हैं
  • अंदरूनी तौर पर Lua objects को व्यक्त करने के लिए TValue struct का उपयोग करता है
  • TValue में type (tt_) और value (value_) गुण होते हैं

FORLOOP का उपयोग कर type confusion

  • FORLOOP opcode loop की initial value को number मानकर type confusion पैदा कर सकता है
  • इसके जरिए addresses leak किए जा सकते हैं

IEEE 754 double precision

  • double precision sign, exponent और mantissa से बना होता है
  • Lua integers को अलग से represent नहीं करता, इसलिए 53 bits तक addresses बिना precision loss के leak किए जा सकते हैं

fake object खोज

  • fake objects खोजने के लिए Upvalues और Closures को समझा जा सकता है
  • Upvalues बाहरी function के variables तक पहुंचने देते हैं
  • bytecode को संशोधित करके Upvalue का index बदलने पर fake objects खोजे जा सकते हैं

GN⁺ की राय

  • यह लेख dynamic languages की security vulnerabilities को समझने में बहुत उपयोगी है
  • यह Factorio जैसे लोकप्रिय गेम में उत्पन्न हो सकने वाली security समस्याओं को अच्छी तरह समझाता है
  • Lua जैसी language का उपयोग करने वाले दूसरे projects में भी ऐसी vulnerabilities मौजूद हो सकती हैं
  • नई technologies या open source को अपनाते समय security review अनिवार्य है
  • समान functionality वाले दूसरे projects में Minecraft का modding system शामिल है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.