2 पॉइंट द्वारा GN⁺ 2024-01-15 | 1 टिप्पणियां | WhatsApp पर शेयर करें

When Random Isn't

  • लगभग 10 साल पुरानी यह घटना है, इसलिए कृपया यह मानकर चलें कि असली कोड खो जाने की वजह से कुछ हिस्से मुझे ठीक-ठीक याद नहीं हैं.
  • कंप्यूटर सुरक्षा पसंद करने वाला कोई भी व्यक्ति इसे आनंद से पढ़ सके, इसलिए कुछ विवरण सरल किए गए हैं.
  • 14 साल की उम्र में मैंने World of Warcraft खोजा और उसका आदी हो गया.
  • फिर मुझे ऐसे add-on मिले जिनसे गेम का user interface बदला जा सकता था, और मैंने खुद उन्हें बनाना शुरू किया.
  • Lua प्रोग्रामिंग भाषा में बने ये add-on कुछ .lua source files से मिलकर बनते थे.
  • मुझे यह बात बहुत आकर्षक लगी कि गेम मेरे अपने लिखे source code को load करके execute करता था.

Add-on security

  • यूज़र द्वारा प्रोग्राम किए जा सकने वाले add-on होना पहली नज़र में बुरा विचार लग सकता है, क्योंकि इससे bot बन सकते हैं.
  • Blizzard ने जो system बनाया था, वह मनमाने programming behavior को रोकने के लिए काफ़ी चतुर था.
  • ज़्यादातर UI elements पूरी तरह unrestricted थे, क्योंकि वे सजावटी या सिर्फ़ जानकारी दिखाने वाले थे.
  • जानकारी इकट्ठा करने वाले API, जैसे character health दिखाने वाला API call, unrestricted थे.
  • लेकिन कुछ API calls सुरक्षित थे, ताकि उन्हें सिर्फ़ आधिकारिक Blizzard code से ही call किया जा सके.
  • गेम के भीतर वास्तविक actions करने से जुड़े ज़्यादातर API सुरक्षित थे.
  • किसी समय world position और camera direction लेने वाले API भी सुरक्षित कर दिए गए.
  • अगर आप किसी खास spell को cast करने वाला button बनाना चाहते, तो क्लिक होने पर secure environment में code चलाने वाला एक special button बनाया जा सकता था.
  • ऐसे buttons को combat के दौरान create, destroy या move नहीं किया जा सकता था, ताकि लड़ाई के बीच automation रोकी जा सके.
  • secure environment में प्रोग्राम के ज़रिए यह तय किया जा सकता था कि कौन-सा spell cast करना है, लेकिन मनमानी automation के लिए ज़रूरी information gathering की अनुमति नहीं थी.

A backdoor channel

  • कुछ साल बाद, जब मेरी रुचि ज़्यादा "serious" programming में हो गई, तो मैंने World of Warcraft लगभग छोड़ दिया.
  • फिर भी secure environment को निष्प्रभावी करने का विचार मन में बना रहा.
  • third-party software इस्तेमाल करने के बजाय, मैं तकनीकी रूप से अनुमत tools का उपयोग करके इसे एक चुनौती की तरह हल करना चाहता था.
  • मुझे पता चला कि random function secure environment में allowed functions की सूची में था, और मैंने सोचा कि इसके ज़रिए जानकारी चोरी-छिपे अंदर पहुँचाने का तरीका निकाला जा सकता है.

Random number generator woes

  • पता चला कि random असल में C के rand function का एक साधारण wrapper था.
  • rand का implementation एक सरल और कमज़ोर linear congruential generator था.
  • मैंने RNG की internal state को reverse engineer करके उससे जानकारी भेजने का तरीका विकसित किया.

Putting it together

  • जब RNG की internal state को reverse engineer करना संभव हो गया, तो secure environment में मनमाने automation decisions लेना भी संभव हो गया.
  • insecure environment में information access करके निर्णय लिया जाता, और secure environment में "random" चुने गए action को execute कराया जाता.

Conclusion

  • मुझे नहीं पता कि Blizzard ने shared और weak RNG state की इस समस्या को कब ठीक किया, या क्या उन्हें कभी यह एहसास हुआ कि यह समस्या थी भी.
  • कुछ साल बाद जब मैंने code दोबारा चलाने की कोशिश की, तो वह काम नहीं कर रहा था.
  • यह एक ऐसे वीडियो गेम में loophole का इस्तेमाल था जिसे मैं वास्तव में उपयोग में नहीं लाना चाहता था, लेकिन जो चीज़ random दिखती हो उसे manipulate करने में एक तरह का जादुई आकर्षण था.

GN⁺ की राय

  • यह लेख कंप्यूटर सुरक्षा और programming का एक दिलचस्प उदाहरण पेश करता है.
  • गेम के भीतर security को bypass करने के रचनात्मक तरीकों की खोज programming skills के महत्व और संभावित vulnerabilities के प्रति जागरूकता बढ़ाती है.
  • RNG की कमज़ोरी का उपयोग करने की यह कहानी software developers को security और algorithms के महत्व की याद दिलाने वाला एक शिक्षाप्रद उदाहरण है.

1 टिप्पणियां

 
GN⁺ 2024-01-15
Hacker News राय
  • एक उपयोगकर्ता ने उल्लेख किया कि उसने कुछ महीने पहले StackOverflow पर "RNG (random number generator) inversion" के बारे में एक सवाल का जवाब दिया था। इस उपयोगकर्ता ने Java RNG पर हमला किया था, और क्योंकि वह MSVC RNG जैसे LCG (linear congruential generator) डिज़ाइन का उपयोग करता है तथा आंतरिक state के truncation को output करता है, इसलिए हमला करने का तरीका बहुत मिलता-जुलता है।

    • StackOverflow पर "RNG inversion" के बारे में एक समान सवाल का जवाब देने का अनुभव साझा किया। Java RNG और MSVC RNG दोनों LCG डिज़ाइन का उपयोग करते हैं, इसलिए समान तरह के हमले संभव हैं.
  • एक अन्य उपयोगकर्ता ने अनुमान लगाया कि यदि सर्वर वही RNG इस्तेमाल कर रहा हो, तो कम उपयोग वाला सर्वर, कम ping, RNG की मौजूदा state पर सटीक window हासिल करने की क्षमता, और ऊँची आर्थिक volatility वाले अन्य events को जल्दी trigger करने की क्षमता होने पर सैद्धांतिक रूप से इसका फायदा उठाया जा सकता है.

    • यदि सर्वर वही RNG इस्तेमाल करता है, तो कुछ विशेष परिस्थितियों में उसका फायदा उठाया जा सकता है — ऐसा अनुमान लगाया गया.
  • एक और उपयोगकर्ता ने इशारा किया कि दिया गया linear congruential RNG सिर्फ 12445 अलग-अलग संख्याएँ बनाने के बाद दोहराने लगता है, और कहा कि इस algorithm के लिए बेहतर parameters का उपयोग करना उचित होगा.

    • यह समस्या बताई गई कि linear congruential RNG सीमित संख्याएँ ही बनाता है और फिर दोहराता है, तथा algorithm में सुधार की आवश्यकता पर ज़ोर दिया गया.
  • एक उपयोगकर्ता ने कहा कि World of Warcraft (WoW) ने उसके programming में रुचि की शुरुआत की। जब game रिलीज़ हुआ तब वह 6 साल का था, और private servers आने के बाद उसे अपना NPC बनाने का तरीका जानने में रुचि हुई। इसके जरिए उसने Lua सीखी, private server core compile करना, SVN, patch apply करना आदि सीखा.

    • WoW ने programming में रुचि जगाई — ऐसा अनुभव साझा किया गया। Private servers और Lua सीखने के जरिए programming skills हासिल किए गए.
  • John von Neumann का उद्धरण साझा करने वाले एक उपयोगकर्ता ने कहा कि random numbers बनाने के सभी तरीके पाप हैं, और सख्त arithmetic procedures random numbers बनाने का तरीका नहीं हैं.

    • Random number generation पर John von Neumann के विचार उद्धृत किए गए। इस बात पर ज़ोर दिया गया कि सख्त arithmetic procedures random number generation की विधि नहीं हैं.
  • एक उपयोगकर्ता ने कहा कि उसने WoW के auction house के लिए एक script लिखी थी, जो सभी auctions को scan करती थी, कम कीमत वाले items खरीदती थी और उन्हें फिर से auction पर डालती थी। अगर कोई कीमत कम कर देता, तो script cancel करके उससे थोड़ा कम दाम पर फिर से auction लगा सकती थी.

    • WoW के auction house में इस्तेमाल की गई script के जरिए अनंत gold कमाने का अनुभव साझा किया गया.
  • एक उपयोगकर्ता ने उस घटना का ज़िक्र किया जिसमें कमजोर random numbers की वजह से Hacker News hack हो गया था। उसने संबंधित link भी दिया.

    • कमजोर random numbers के कारण Hacker News के hack होने की घटना का ज़िक्र करते हुए security समस्या की ओर इशारा किया गया.
  • एक उपयोगकर्ता ने "जब variables बदलते नहीं और constants स्थिर नहीं रहते" जैसी अभिव्यक्ति का उपयोग किया.

    • Programming में variables और constants की भूमिकाओं पर व्यंग्यात्मक अभिव्यक्ति का उपयोग किया गया.
  • एक उपयोगकर्ता, जिसने WoW नहीं खेला था, ने कहा कि उसने सुना है कि कई add-ons private chat को communication माध्यम के रूप में इस्तेमाल करते थे। उसने कहा कि अगर कोई तरीका मौजूद हो, तो लोग आखिरकार उसे ढूँढ ही लेते हैं और इस्तेमाल भी करते हैं.

    • WoW add-ons द्वारा private chat को communication माध्यम की तरह इस्तेमाल किए जाने की बात सुनकर यह राय दी गई कि लोग अंततः ऐसे तरीकों को खोजकर इस्तेमाल कर लेते हैं.
  • RNG के आर्थिक incentives के संदर्भ में, एक उपयोगकर्ता ने कहा कि जहाँ वास्तव में कुछ दाँव पर न लगा हो (जैसे game), वहाँ अपूर्ण RNG भी काफी होता है। लेकिन जहाँ पैसा या security महत्वपूर्ण हो (जैसे cryptocurrency wallets या online casinos), वहाँ RNG की quality बहुत महत्वपूर्ण हो जाती है.

    • यह बताया गया कि game जैसे कम महत्वपूर्ण संदर्भों में अपूर्ण RNG भी चल सकता है, लेकिन जहाँ पैसों या security का सवाल हो वहाँ RNG की शुद्धता अत्यंत महत्वपूर्ण हो जाती है.