Reptar
(lock.cmpxchg8b.com)CPU रहस्य की खोज
- अगर आपको आधुनिक CPU के अंदर होने वाली त्रुटियों में रुचि है, तो आगे पढ़ना उचित होगा।
- अगर आपने x86 assembly लिखी है, तो आप मेमोरी को स्थानांतरित करने के लिए इस्तेमाल होने वाले
rep movsbकमांड से परिचित होंगे। - source, destination, direction, और count सेट करने के बाद processor बाकी सभी विवरण स्वयं संभाल लेता है।
कमांड prefix की व्याख्या
- x86 की एक विशेषता यह है कि instruction decoding सामान्यतः बहुत लचीली होती है।
- ऐसे prefix जिनका कोई अर्थ नहीं है या जो अन्य prefix से टकराते हैं, उन्हें भी अधिकांश मामलों में नज़रअंदाज़ कर दिया जाता है।
- compiler मनचाही alignment boundary से मेल कराने के लिए अनावश्यक prefix का उपयोग कर सकता है।
REX prefix
- i386 में 8 general-purpose register थे, इसलिए register को निर्दिष्ट करने के लिए 3 bit पर्याप्त थे।
- x86-64 ने 8 अतिरिक्त general-purpose register जोड़े, इसलिए अधिक bit की आवश्यकता हुई।
- rex prefix अगली instruction को अतिरिक्त bit उधार लेने देता है, जिससे 16 general-purpose register की encoding संभव होती है।
encoding नियम
- rex prefix operand को encode करने के लिए उपलब्ध स्थान बढ़ाता है।
- अनावश्यक या duplicate prefix को x86 में अधिकांशतः नज़रअंदाज़ कर दिया जाता है।
rex.rxb rep movsbकमांड में कोई operand नहीं होता, इसलिए rex bit का कोई अर्थ नहीं है और processor rex prefix को नज़रअंदाज़ कर देता है।
Fast Short Repeat Move (FSRM)
- FSRM Ice Lake में पेश किया गया एक नया फीचर है, जो ERMS की कमियों को दूर करता है।
- ERMS में buffer को align करके सबसे चौड़े संभव store का उपयोग करना, efficient string move का कठिन हिस्सा होता है।
- FSRM का उद्देश्य 128 byte या उससे छोटे string को अधिक तेज़ी से move करना है।
खोज
- Oracle Serialization नामक processor verification तकनीक का उपयोग करके यह जाँचा गया कि random तरीके से बनाए गए program के दो रूप समान final state तक पहुँचते हैं या नहीं।
- अगस्त में verification pipeline ने पाया कि FSRM-optimized
rep movsऑपरेशन में duplicate rex.r prefix जोड़ने से अप्रत्याशित परिणाम उत्पन्न हो सकते हैं। - यह भी पुष्टि हुई कि जब multi-core एक ही bug को trigger करते हैं, तो processor machine check exception रिपोर्ट करके रुक जाता है।
पुनरुत्पादन
- शोध परिणामों को security research repository में सार्वजनिक किया गया।
- vulnerability को reproduce करने के लिए
icebreakटूल का उपयोग किया जा सकता है। - अप्रभावित system पर कोई output नहीं आना चाहिए, लेकिन प्रभावित system पर हर सफल reproduction के साथ
.प्रिंट होगा।
विश्लेषण
- आधुनिक system में microcode कैसे काम करता है, यह गोपनीय रखा जाता है, इसलिए केवल अवलोकन-आधारित सिद्धांत ही संभव हैं।
- अनुमान है कि bug frontend को
movsbinstruction के आकार की गलत गणना करने पर मजबूर करता है, जिससे ROB (reorder buffer) की बाद की entries गलत address से जुड़ जाती हैं।
प्रश्न
- इस अप्रत्याशित "glitch" state में क्या-क्या संभव है, यह स्वाभाविक प्रश्न हो सकता है।
- यह ज्ञात है कि system state को इतना क्षतिग्रस्त किया जा सकता है कि machine check त्रुटि हो जाए, और कोई thread अपने SMT sibling processor के execution को प्रभावित कर सकता है।
- μop execution को debug करने का कोई तरीका नहीं है, इसलिए यह नहीं कहा जा सकता कि privilege escalation हासिल की जा सकती है या नहीं।
समाधान
- Intel ने सभी प्रभावित processor के लिए updated microcode जारी किया है।
- संभव है कि operating system या BIOS vendor ने पहले से ही यह update उपलब्ध करा दिया हो।
विकल्प
- यदि update संभव नहीं है, तो IA32_MISC_ENABLE model-specific register के माध्यम से fast strings को disable किया जा सकता है।
- इससे प्रदर्शन में उल्लेखनीय गिरावट आती है, इसलिए इसका उपयोग केवल अत्यावश्यक स्थिति में ही किया जाना चाहिए।
GN⁺ की राय
इस लेख का सबसे महत्वपूर्ण बिंदु यह है कि यह आधुनिक CPU में उत्पन्न होने वाली अप्रत्याशित "glitch" स्थिति की खोज को दिखाता है और यह भी बताता है कि इससे सुरक्षा कमजोरियाँ पैदा हो सकती हैं। यह लेख software engineers के लिए रोचक हो सकता है और CPU की जटिलता तथा system की कमजोरियों के प्रति जागरूकता बढ़ाने में मदद करता है। साथ ही, यह समझने में भी सहायता करता है कि ऐसी खोजें कैसे वास्तविक security threat में बदल सकती हैं, और updated microcode के महत्व को रेखांकित करता है।
1 टिप्पणियां
Hacker News राय
Konrad Magnusson की टीम ने mimalloc से जुड़ी समस्या खोजी।
Google की कई research teams ने स्वतंत्र रूप से bug खोजा।
प्रोसेसर ने machine check exception रिपोर्ट किया और रुक गया।
हार्डवेयर के बारे में अपनी समझ की कमी का एहसास हुआ।
qemu के repz ret समस्या का निदान याद आया।
Intel के अपने कर्मचारियों और Google कर्मचारियों ने समस्या रिपोर्ट की।
Google के लेख से कहीं अधिक दिलचस्प।
क्या out-of-order और speculative execution वाले CPU को security समस्या के बिना डिज़ाइन करना संभव है, इस पर सवाल।
Intel की security advisory का विवरण।