इस ब्लॉग पोस्ट के साथ, इरादा आधिकारिक तौर पर एथेरियम प्लेटफॉर्म के खिलाफ एक गंभीर खतरे का खुलासा करना है, जो बर्लिन हार्डफोर्क तक एक स्पष्ट और वर्तमान खतरा था।
राज्य
आइए एथेरियम और स्टेट पर कुछ पृष्ठभूमि के साथ शुरू करें।
एथेरियम राज्य में एक पेट्रीसिया-मर्कल ट्री, एक उपसर्ग-पेड़ होता है। इस पोस्ट में बहुत अधिक विस्तार से नहीं जाना है, यह कहना पर्याप्त है कि जैसे-जैसे राज्य बढ़ता है, इस पेड़ की शाखाएं अधिक घनी होती जाती हैं। प्रत्येक जोड़ा गया खाता एक और पत्ता है। पेड़ की जड़ और पत्ती के बीच ही, कई “मध्यवर्ती” नोड्स होते हैं।
इस विशाल पेड़ में किसी दिए गए खाते, या “पत्ती” को देखने के लिए, कहीं न कहीं 6-9 हैश के क्रम में, रूट से, मध्यवर्ती नोड्स के माध्यम से, अंतिम हैश को हल करने के लिए हल करने की आवश्यकता होती है, जो की ओर जाता है डेटा जिसे हम ढूंढ रहे थे।
सीधे शब्दों में: जब भी किसी खाते को खोजने के लिए ट्राई लुकअप किया जाता है, तो 8-9 समाधान ऑपरेशन किए जाते हैं। प्रत्येक समाधान कार्रवाई एक डेटाबेस लुकअप है, और प्रत्येक डेटाबेस लुकअप वास्तविक डिस्क संचालन की कोई भी संख्या हो सकती है। डिस्क संचालन की संख्या का अनुमान लगाना मुश्किल है, लेकिन चूंकि ट्राई कुंजियाँ क्रिप्टोग्राफ़िक हैश (टकराव प्रतिरोधी) हैं, कुंजियाँ “यादृच्छिक” हैं, जो किसी भी डेटाबेस के लिए सबसे खराब स्थिति को मारती हैं।
जैसे-जैसे एथेरियम का विकास हुआ है, यह आवश्यक हो गया है कि ट्राइ तक पहुंचने वाले संचालन के लिए गैस की कीमतों में वृद्धि की जाए। यह में किया गया था Tangerine Whistle
ब्लॉक में 2,463,000
अक्टूबर 2016 में, जिसमें शामिल हैं ईआईपी 150. तथाकथित “शंघाई हमलों” के मद्देनजर ईआईपी 150 ने आक्रामक रूप से कुछ गैस लागतें बढ़ाईं और डीओएस हमलों से बचाने के लिए कई बदलाव किए।
इस तरह की एक और वृद्धि में की गई थी Istanbul
उन्नयन, ब्लॉक में 9,069,000
दिसंबर 2019 में। इस अपग्रेड में, ईआईपी 1884 सक्रिय किया गया था।
EIP-1884 ने निम्नलिखित परिवर्तन पेश किया:
SLOAD
से गया200
प्रति800
गैस,BALANCE
से गया400
प्रति700
गैस (और एक सस्ताSELFBALANCE
) जोड़ा गया,EXTCODEHASH
से गया400
प्रति700
गैस,
समस्याये)
मार्च 2019 में, मार्टिन स्वेंडे कुछ कर रहे थे मापन ईवीएम ओपकोड प्रदर्शन का। उस जांच ने बाद में EIP-1884 का निर्माण किया। EIP-1884 के लाइव होने से कुछ महीने पहले, पेपर टूटा हुआ मीटर प्रकाशित किया गया था (सितम्बर 2019)।
दो एथेरियम सुरक्षा शोधकर्ता – ह्यूबर्ट रिट्जडॉर्फ और मैथियास एग्ली – ने कागज के पीछे के लेखकों में से एक के साथ मिलकर काम किया; डैनियल पेरेज़, और ‘हथियारबंद’ एक शोषण जिसे उन्होंने एथेरियम बग बाउंटी में जमा किया था। यह 4 अक्टूबर, 2019 को था।
हम आपको पढ़ने की सलाह देते हैं प्रस्तुत करने पूरी तरह से, यह एक अच्छी तरह से लिखित रिपोर्ट है।
क्रॉस-क्लाइंट सुरक्षा के लिए समर्पित एक चैनल पर, गेथ, पैरिटी और एलेथ के डेवलपर्स को उसी दिन सबमिशन के बारे में सूचित किया गया था।
शोषण का सार यादृच्छिक त्रिकोणीय लुकअप को ट्रिगर करना है। एक बहुत ही सरल संस्करण होगा:
jumpdest ; jump label, start of loop
gas ; get a 'random' value on the stack
extcodesize ; trigger trie lookup
pop ; ignore the extcodesize result
push1 0x00 ; jump label dest
jump ; jump back to start
अपनी रिपोर्ट में, शोधकर्ताओं ने इस पेलोड को मेननेट तक सिंक किए गए नोड्स के माध्यम से निष्पादित किया eth_call
, और ये उनके नंबर थे जब निष्पादित किया गया 10M
गैस:
10M
गैस का उपयोग कर शोषणEXTCODEHASH
(400 गैस पर)10M
गैस का उपयोग कर शोषणEXTCODESIZE
(700 गैस पर)- समानता :
~50s
- गेथ:
~38s
- समानता :
जैसा कि स्पष्ट रूप से स्पष्ट है, ईआईपी १८८४ में परिवर्तन निश्चित रूप से हमले के प्रभाव को कम करने पर प्रभाव डाल रहे थे, लेकिन यह कहीं भी पर्याप्त नहीं था।
यह ओसाका में देवकॉन से ठीक पहले था। डेवकॉन के दौरान, मेननेट क्लाइंट डेवलपर्स के बीच समस्या का ज्ञान साझा किया गया था। हम ह्यूबर्ट और माथियास के साथ-साथ ग्रेग मार्को (चेनसेफ से – जो ईटीसी पर काम कर रहे थे) से भी मिले। ईटीसी डेवलपर्स को भी रिपोर्ट मिली थी।
जैसे-जैसे 2019 करीब आ रहा था, हम जानते थे कि हमें पहले की अपेक्षा बड़ी समस्याएँ थीं, जहाँ दुर्भावनापूर्ण लेन-देन मिनट-सीमा में अवरोध पैदा कर सकता है। संकट को और बढ़ाने के लिए: देव समुदाय पहले से ही EIP-1884 के बारे में खुश नहीं था, जिसने कुछ अनुबंध-प्रवाह को तोड़ दिया था, और उपयोगकर्ता और खनिक समान रूप से बढ़ी हुई ब्लॉक गैस सीमा के लिए बहुत खुजली कर रहे थे।
इसके अलावा, केवल दो महीने बाद, दिसंबर 2019 में, Parity Ethereum की घोषणा की दृश्य से उनका प्रस्थान, और OpenEthereum ने कोडबेस का रखरखाव संभाला।
एक नया क्लाइंट समन्वय चैनल बनाया गया, जहां गेथ, नेदरमाइंड, ओपनएथेरियम और बेसु डेवलपर्स ने समन्वय करना जारी रखा।
समाधान)
हमने महसूस किया कि इन समस्याओं से निपटने के लिए हमें दोतरफा दृष्टिकोण अपनाना होगा। एक तरीका यह होगा कि इथेरियम प्रोटोकॉल पर काम किया जाए, और किसी तरह प्रोटोकॉल स्तर पर इस समस्या को हल किया जाए; अधिमानतः अनुबंधों को तोड़े बिना, और अधिमानतः ‘अच्छे’ व्यवहार को दंडित किए बिना, फिर भी हमलों को रोकने के लिए प्रबंधन।
दूसरा दृष्टिकोण सॉफ्टवेयर इंजीनियरिंग के माध्यम से होगा, ग्राहकों के भीतर डेटा मॉडल और संरचनाओं को बदलकर।
प्रोटोकॉल कार्य
इस प्रकार के हमलों से निपटने का पहला तरीका है यहां. फरवरी 2020 में, इसे आधिकारिक तौर पर के रूप में लॉन्च किया गया था ईआईपी 2583. इसके पीछे का विचार यह है कि हर बार जब कोई ट्री लुकअप मिस हो जाता है तो पेनल्टी जोड़ देता है।
हालांकि, पीटर ने इस विचार के लिए एक वर्कअराउंड पाया – ‘परिरक्षित रिले’ हमला – जो इस तरह का जुर्माना प्रभावी रूप से कितना बड़ा हो सकता है, इस पर ऊपरी सीमा (लगभग ~ 800) रखता है।
के साथ मुद्दा चूक के लिए दंड यह है कि लुकअप पहले होना चाहिए, यह निर्धारित करने के लिए कि जुर्माना लगाया जाना चाहिए। लेकिन अगर दंड के लिए पर्याप्त गैस नहीं बची है, तो एक अवैतनिक खपत का प्रदर्शन किया गया है। भले ही इसका परिणाम थ्रो हो, इन स्टेट रीड्स को नेस्टेड कॉल्स में लपेटा जा सकता है; बाहरी कॉलर को (पूर्ण) दंड का भुगतान किए बिना हमले को दोहराना जारी रखने की अनुमति देना।
उसके कारण, ईआईपी को छोड़ दिया गया था, जबकि हम एक बेहतर विकल्प की तलाश में थे।
- एलेक्सी अखुनोव ने के विचार की खोज की तेल – “गैस” का एक द्वितीयक स्रोत, लेकिन जो आंतरिक रूप से से अलग था
gas
, इसमें यह निष्पादन परत के लिए अदृश्य होगा, और लेनदेन-वैश्विक परिवर्तन का कारण बन सकता है। - मार्टिन ने इसी तरह का एक प्रस्ताव लिखा, के बारे में कर्मा, मई 2020 में।
इन विभिन्न योजनाओं पर पुनरावृति करते हुए, विटालिक ब्यूटिरिन ने केवल गैस की लागत बढ़ाने और एक्सेस सूचियों को बनाए रखने का प्रस्ताव रखा। अगस्त 2020 में, मार्टिन और विटालिक ने पुनरावृत्ति करना शुरू कर दिया कि क्या बनना है ईआईपी-2929 और उसके साथी-ईआईपी, ईआईपी-2930.
EIP-2929 ने पिछले कई मुद्दों को प्रभावी ढंग से हल किया।
- EIP-1884 के विपरीत, जिसने बिना शर्त लागत बढ़ा दी, इसके बजाय इसने केवल उन चीजों के लिए लागतें बढ़ाईं जो पहले से एक्सेस नहीं की गई थीं। यह एक मात्र की ओर जाता है उप-प्रतिशत वृद्धि शुद्ध लागत में।
- साथ ही, EIP-2930 के साथ, यह किसी भी अनुबंध प्रवाह को नहीं तोड़ता है,
- और इसे आगे बढ़े हुए गैसकॉस्ट (बिना चीजों को तोड़े) के साथ जोड़ा जा सकता है।
15 अप्रैल 2021 को, वे दोनों इनके साथ लाइव हो गए Berlin
उन्नयन।
विकास कार्य
इस मामले को सुलझाने के लिए पीटर का प्रयास था गतिशील राज्य स्नैपशॉट, अक्टूबर 2019 में।
एक स्नैपशॉट एक फ्लैट प्रारूप में एथेरियम राज्य को संग्रहीत करने के लिए एक द्वितीयक डेटा संरचना है, जिसे गेथ नोड के लाइव संचालन के दौरान पूरी तरह से ऑनलाइन बनाया जा सकता है। स्नैपशॉट का लाभ यह है कि यह राज्य तक पहुँचने के लिए एक त्वरण संरचना के रूप में कार्य करता है:
- करने के बजाय
O(log N)
डिस्क पढ़ता है (x
LevelDB ओवरहेड) एक खाते / भंडारण स्लॉट तक पहुँचने के लिए, स्नैपशॉट प्रत्यक्ष प्रदान कर सकता है,O(1)
पहूंच समय (x
लेवलडीबी ओवरहेड)। - स्नैपशॉट खाते और संग्रहण पुनरावृत्ति का समर्थन करता है
O(1)
जटिलता प्रति प्रविष्टि, जो दूरस्थ नोड्स को अनुक्रमिक राज्य डेटा को पहले की तुलना में काफी सस्ता पुनर्प्राप्त करने में सक्षम बनाता है। - स्नैपशॉट की उपस्थिति अधिक विदेशी उपयोग के मामलों को भी सक्षम बनाती है जैसे कि स्टेट ट्राइ को ऑफ़लाइन-छंटनी करना, या अन्य डेटा प्रारूपों में माइग्रेट करना।
स्नैपशॉट का नकारात्मक पक्ष यह है कि कच्चा खाता और संग्रहण डेटा अनिवार्य रूप से डुप्लिकेट किया जाता है। मेननेट के मामले में, इसका अर्थ है एक अतिरिक्त 25GB
एसएसडी स्पेस का इस्तेमाल किया।
गतिशील स्नैपशॉट विचार 2019 के मध्य में पहले ही शुरू हो चुका था, जिसका लक्ष्य मुख्य रूप से snap
साथ – साथ करना। उस समय, कई “बड़े प्रोजेक्ट” थे जिन पर geth टीम काम कर रही थी।
- ऑफलाइन स्टेट प्रूनिंग
- डायनामिक स्नैपशॉट + स्नैप सिंक
- शार्प अवस्था के माध्यम से एलईएस राज्य वितरण
हालाँकि, स्नैपशॉट पर पूरी तरह से प्राथमिकता देने का निर्णय लिया गया, अन्य परियोजनाओं को अभी के लिए स्थगित कर दिया गया। ये बाद में बनने के लिए आधार तैयार करते थे snap/1
साथ – साथ करना कलन विधि. इसे मार्च 2020 में मर्ज किया गया था।
जंगली में जारी “गतिशील स्नैपशॉट” कार्यक्षमता के साथ, हमारे पास थोड़ा सा सांस लेने का कमरा था। यदि एथेरियम नेटवर्क पर हमला होता है, तो यह दर्दनाक होगा, हाँ, लेकिन कम से कम उपयोगकर्ताओं को स्नैपशॉट को सक्षम करने के बारे में सूचित करना संभव होगा। पूरी स्नैपशॉट पीढ़ी में बहुत समय लगेगा, और स्नैपशॉट को अभी तक सिंक करने का कोई तरीका नहीं था, लेकिन नेटवर्क कम से कम काम करना जारी रख सकता था।
धागों को बांधना
मार्च-अप्रैल 2021 में, snap/1
प्रोटोकॉल को geth में रोल आउट किया गया था, जिससे नए स्नैपशॉट-आधारित एल्गोरिथम का उपयोग करके सिंक करना संभव हो गया। जबकि अभी भी डिफ़ॉल्ट सिंक मोड नहीं है, यह स्नैपशॉट को न केवल हमले-संरक्षण के रूप में उपयोगी बनाने की दिशा में एक (महत्वपूर्ण) कदम है, बल्कि उपयोगकर्ताओं के लिए एक बड़े सुधार के रूप में भी है।
प्रोटोकॉल पक्ष पर, Berlin
अपग्रेड अप्रैल 2021 हुआ।
हमारे एडब्ल्यूएस निगरानी वातावरण पर बनाए गए कुछ बेंचमार्क नीचे दिए गए हैं:
- पूर्व-बर्लिन, कोई स्नैपशॉट नहीं,
25M
गैस:14.3s
- पूर्व-बर्लिन, स्नैपशॉट के साथ,
25M
गैस:1.5s
- बर्लिन के बाद, कोई स्नैपशॉट नहीं,
25M
गैस:~3.1s
- पोस्ट-बर्लिन, स्नैपशॉट के साथ,
25M
गैस:~0.3s
(मोटे तौर पर) संख्याएं दर्शाती हैं कि Berlin
द्वारा हमले की दक्षता कम कर दी 5x
, और स्नैपशॉट इसे कम कर देता है 10x
, एक के लिए कुल 50x
प्रभाव में कमी।
हमारा अनुमान है कि वर्तमान में, मेननेट (१५एम गैस) पर, ऐसे ब्लॉक बनाना संभव होगा जो ले लेंगे 2.5-3s
पर अमल करने के लिए geth
नोड के बग़ैर स्नैपशॉट। जैसे-जैसे राज्य बढ़ेगा यह संख्या (गैर-स्नैपशॉट नोड्स के लिए) बिगड़ती रहेगी।
यदि किसी ब्लॉक के भीतर प्रभावी गैस उपयोग को बढ़ाने के लिए धनवापसी का उपयोग किया जाता है, तो इसे (अधिकतम) के कारक द्वारा और बढ़ाया जा सकता है 2x
. साथ में ईआईपी 1559, ब्लॉक गैस की सीमा में एक उच्च लोच होगा, और आगे की अनुमति देगा 2x
(NS ELASTICITY_MULTIPLIER
) अस्थायी फटने में।
इस हमले को अंजाम देने की व्यवहार्यता के लिए; एक पूर्ण ब्लॉक खरीदने के लिए एक हमलावर की लागत कुछ ईथर के आदेश पर होगी (15M
गैस at 100Gwei
है 1.5
ईथर)।
अभी खुलासा क्यों
यह खतरा लंबे समय से एक “खुला रहस्य” रहा है – इसे वास्तव में कम से कम एक बार गलती से सार्वजनिक रूप से प्रकट किया गया है, और इसे एसीडी कॉल में कई बार स्पष्ट विवरण के बिना संदर्भित किया गया है।
चूंकि बर्लिन अपग्रेड अब हमारे पीछे है, और चूंकि डिफ़ॉल्ट रूप से geth नोड्स स्नैपशॉट का उपयोग कर रहे हैं, इसलिए हम अनुमान लगाते हैं कि खतरा इतना कम है कि पारदर्शिता प्रभावित होती है, और यह पर्दे के पीछे के कार्यों के बारे में पूर्ण प्रकटीकरण करने का समय है।
यह महत्वपूर्ण है कि समुदाय को उन परिवर्तनों के पीछे के तर्क को समझने का मौका दिया जाए जो उपयोगकर्ता के अनुभव को नकारात्मक रूप से प्रभावित करते हैं, जैसे कि गैस की लागत बढ़ाना और धनवापसी सीमित करना।
इस पोस्ट को मार्टिन होल्स्ट स्वेंडे और पीटर स्ज़िलागी ने 2021-04-23 में लिखा था। इसे 2021-04-26 में अन्य एथेरियम-आधारित परियोजनाओं के साथ साझा किया गया था, और सार्वजनिक रूप से 2021-05-18 का खुलासा किया गया था।