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 शामिल है
अभी कोई टिप्पणी नहीं है.