नियंत्रण-प्रवाह अखंडता: Difference between revisions

From Vigyanwiki
(Created page with "{{distinguish|text = Common Flash Interface, the flash memory device identification standard}} {{Short description|Term in computer security}} {{anchor|CET}}नियं...")
 
No edit summary
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{distinguish|text = [[Common Flash Interface]], the flash memory device identification standard}}
{{distinguish|text = [[कॉमन फ़्लैश इंटरफ़ेस]], फ़्लैश मेमोरी डिवाइस आइडेंटिफिकेशन स्टैंडर्ड}}
{{Short description|Term in computer security}}
{{Short description|Term in computer security}}
{{anchor|CET}}नियंत्रण-प्रवाह अखंडता (सीएफआई) [[कंप्यूटर सुरक्षा]] तकनीकों के लिए एक सामान्य शब्द है जो किसी प्रोग्राम के निष्पादन के प्रवाह (नियंत्रण प्रवाह) को पुनर्निर्देशित करने से विभिन्न प्रकार के [[मैलवेयर]] हमलों को रोकता है।
'''कंट्रोल फ्लो इंटीग्रिटी''' (सीएफआई) [[कंप्यूटर सुरक्षा]] तकनीकों के लिए एक सामान्य शब्द है जो किसी प्रोग्राम के एक्सिक्यूशन के फ्लो (कंट्रोल फ्लो) को पुनर्इंस्ट्रक्शनित करने से विभिन्न प्रकार के [[मैलवेयर]] अटैक्स को रोकता है।
 
==पृष्ठभूमि==
एक कंप्यूटर प्रोग्राम आमतौर पर निर्णय लेने और कोड के विभिन्न भागों का उपयोग करने के लिए अपने नियंत्रण प्रवाह को बदलता है। ऐसे स्थानांतरण प्रत्यक्ष हो सकते हैं, जिसमें लक्ष्य पता स्वयं कोड में लिखा होता है, या अप्रत्यक्ष, जिसमें लक्ष्य पता स्वयं मेमोरी या सीपीयू रजिस्टर में एक चर होता है। एक सामान्य फ़ंक्शन कॉल में, प्रोग्राम प्रत्यक्ष कॉल करता है, लेकिन स्टैक का उपयोग करके कॉलर फ़ंक्शन पर लौटता है - एक अप्रत्यक्ष बैकवर्ड-एज ट्रांसफर। जब किसी [[फ़ंक्शन सूचक]] को कॉल किया जाता है, जैसे कि [[ आभासी तालिका ]] से, तो हम कहते हैं कि एक अप्रत्यक्ष फॉरवर्ड-एज ट्रांसफर है।<ref name=Payer>{{cite web |last1=Payer |first1=Mattias |title=Control-Flow Integrity: An Introduction |url=https://nebelwelt.net/blog/20160913-ControlFlowIntegrity.html |website=nebelwelt.net}}</ref><ref>{{cite journal |last1=Burow |first1=Nathan |last2=Carr |first2=Scott A. |last3=Nash |first3=Joseph |last4=Larsen |first4=Per |last5=Franz |first5=Michael |last6=Brunthaler |first6=Stefan |last7=Payer |first7=Mathias |title=Control-Flow Integrity: Precision, Security, and Performance |journal=ACM Computing Surveys |date=31 January 2018 |volume=50 |issue=1 |pages=1–33 |doi=10.1145/3054924}}</ref>
हमलावर किसी प्रोग्राम के विशेषाधिकारों का उपयोग करने या उसके मेमोरी स्पेस से डेटा निकालने के लिए उसमें कोड इंजेक्ट करना चाहते हैं। निष्पादन योग्य कोड को आम तौर पर केवल-पढ़ने के लिए बनाए जाने से पहले, एक हमलावर कोड को चलाते समय मनमाने ढंग से बदल सकता है, प्रत्यक्ष हस्तांतरण को लक्षित कर सकता है या यहां तक ​​कि बिना किसी स्थानांतरण के भी ऐसा कर सकता है। W^X के व्यापक हो जाने के बाद, एक हमलावर अप्रत्यक्ष स्थानान्तरण का उपयोग करते हुए निष्पादन को चलाने के लिए कोड वाले एक अलग, असुरक्षित क्षेत्र में पुनर्निर्देशित करना चाहता है: कोई फॉरवर्ड-एज हमले के लिए वर्चुअल टेबल को ओवरराइट कर सकता है या बैकवर्ड-एज हमले ([[ वापसी-उन्मुख प्रोग्रामिंग ]]) के लिए कॉल स्टैक को बदल सकता है। सीएफआई को अप्रत्यक्ष स्थानान्तरण को अनपेक्षित स्थानों पर जाने से बचाने के लिए डिज़ाइन किया गया है।<ref name=Payer/>


==बैकग्राउंड==
एक कंप्यूटर प्रोग्राम सामान्यतः निर्णय लेने और कोड के विभिन्न भागों का उपयोग करने के लिए अपने कंट्रोल फ्लो को परिवर्तित करता है है। ऐसे स्थानांतरण प्रत्यक्ष हो सकते हैं, जिसमें टारगेट एड्रेस सैल्फ कोड में लिखा होता है, या इनडायरेक्ट, जिसमें टारगेट एड्रेस सैल्फ मेमोरी या सीपीयू रजिस्टर में एक वैरिएबल होता है। एक सामान्य फ़ंक्शन कॉल में, प्रोग्राम प्रत्यक्ष कॉल करता है, लेकिन स्टैक का उपयोग करके कॉलर फ़ंक्शन पर लौटता है - एक इनडायरेक्ट बैकवर्ड-एज ट्रांसफर जब किसी [[फ़ंक्शन सूचक|फ़ंक्शन पॉइंटर]] को कॉल किया जाता है, जैसे कि [[ आभासी तालिका |वर्चुअल टेबल]] से, तो हम कहते हैं कि एक इनडायरेक्ट फॉरवर्ड-एज ट्रांसफर है।<ref name=Payer>{{cite web |last1=Payer |first1=Mattias |title=Control-Flow Integrity: An Introduction |url=https://nebelwelt.net/blog/20160913-ControlFlowIntegrity.html |website=nebelwelt.net}}</ref><ref>{{cite journal |last1=Burow |first1=Nathan |last2=Carr |first2=Scott A. |last3=Nash |first3=Joseph |last4=Larsen |first4=Per |last5=Franz |first5=Michael |last6=Brunthaler |first6=Stefan |last7=Payer |first7=Mathias |title=Control-Flow Integrity: Precision, Security, and Performance |journal=ACM Computing Surveys |date=31 January 2018 |volume=50 |issue=1 |pages=1–33 |doi=10.1145/3054924}}</ref>


अटैकर किसी प्रोग्राम के विशेषाधिकारों का उपयोग करने या उसके मेमोरी स्पेस से डेटा निकालने के लिए उसमें कोड इंजेक्ट करना चाहते हैं। एक्सिक्यूशन कोड को सामान्यतः रीड-ओनली के लिए बनाए जाने से पहले, एक अटैकर कोड को चलाते समय आर्बिटरी से परिवर्तित कर सकता है, डायरेक्ट ट्रांसफर को टार्गेटिंग कर सकता है या यहां तक ​​कि बिना किसी स्थानांतरण के भी ऐसा कर सकता है। W^X के व्यापक हो जाने के पश्चात, एक अटैकर इनडायरेक्ट स्थानान्तरण का उपयोग करते हुए एक्सिक्यूशन को चलाने के लिए कोड वाले एक भिन्न, असुरक्षित क्षेत्र में पुनर्इंस्ट्रक्शनित करना चाहता है: कोई फॉरवर्ड-एज अटैक के लिए वर्चुअल टेबल को ओवरराइट कर सकता है या बैकवर्ड-एज अटैक ([[ वापसी-उन्मुख प्रोग्रामिंग | रिटर्न ओरिएन्टेड प्रोग्रामिंग]] ) के लिए कॉल स्टैक को परिवर्तित कर सकता है। सीएफआई को इनडायरेक्ट स्थानान्तरण को अनपेक्षित स्थानों पर जाने से बचाने के लिए डिज़ाइन किया गया है।<ref name="Payer" />
==तकनीक==
==तकनीक==
संबद्ध तकनीकों में कोड-पॉइंटर सेपरेशन (सीपीएस), कोड-पॉइंटर इंटीग्रिटी (सीपीआई), [[स्टैक कैनरी]], [[ छाया ढेर ]] और [[ आभासी विधि तालिका ]] पॉइंटर वेरिफिकेशन शामिल हैं।<ref name="cfi_vs_vps_vs_cpi" /><ref name="adobe_darkreading" /><ref name="endgame_blackhat" />
संबद्ध तकनीकों में कोड-पॉइंटर सेपरेशन (सीपीएस), कोड-पॉइंटर इंटीग्रिटी (सीपीआई), [[स्टैक कैनरी]], [[शैडो स्टैक]] और वीटेबल पॉइंटर वेरिफिकेशन सम्मिलित हैं।<ref name="cfi_vs_vps_vs_cpi" /><ref name="adobe_darkreading" /><ref name="endgame_blackhat" />
 
==इम्प्लिमेंटेशन्स==
 
रिलेटेड इम्प्लिमेंटेशन्स [[क्लैंग]] (सामान्य रूप से एलएलवीएम),<ref name="clang_cfi"/> माइक्रोसॉफ्ट के कंट्रोल फ्लो गार्ड<ref name="theregister_windows_cfg"/><ref name="threatpost_cfg"/><ref name="derbycon_bluehat"/> और रिटर्न फ्लो गार्ड<ref name="Tencent - Return Flow Guard"/> गूगल के इनडायरेक्ट फंक्शन-कॉल चेक्स<ref name="gcc_cfi_usenix14"/> और रीयूज अटैक प्रोटेक्टर (आरएपी) में उपलब्ध हैं।<ref name="pax_rap_de"/><ref name="grsecurity_rap"/>
==कार्यान्वयन==
संबंधित कार्यान्वयन [[बजना]] (सामान्य रूप से एलएलवीएम) में उपलब्ध हैं,<ref name="clang_cfi"/>माइक्रोसॉफ्ट का नियंत्रण प्रवाह गार्ड<ref name="theregister_windows_cfg"/><ref name="threatpost_cfg"/><ref name="derbycon_bluehat"/>और रिटर्न फ्लो गार्ड,<ref name="Tencent - Return Flow Guard"/>Google की अप्रत्यक्ष फ़ंक्शन-कॉल जाँच<ref name="gcc_cfi_usenix14"/>और पुन: उपयोग आक्रमण रक्षक (आरएपी)<ref name="pax_rap_de"/><ref name="grsecurity_rap"/><!-- see also pax-future.txt-->
 
 
===एलएलवीएम/क्लैंग===
===एलएलवीएम/क्लैंग===
{{expand section|date=September 2020}}
एलएलवीएम/क्लैंग एक सीएफआई विकल्प प्रदान करता है जो वर्चुअल टेबल और टाइप कास्ट में त्रुटियों की जांच करके फॉरवर्ड एज में काम करता है। यह जानने के लिए कि सामान्य स्टेटयों में कौन से फ़ंक्शन को कॉल किया जाना चाहिए, यह [[लिंक-टाइम अनुकूलन|लिंक-टाइम ऑप्टिमाइजेशन]] (एलटीओ) पर निर्भर करता है।<ref>{{cite web |title=Control Flow Integrity — Clang 17.0.0git documentation |url=https://clang.llvm.org/docs/ControlFlowIntegrity.html |website=clang.llvm.org}}</ref> एक भिन्न [[छाया कॉल स्टैक|शैडो कॉल स्टैक]] योजना है जो कॉल स्टैक संशोधनों की जांच करके बैकवर्ड एज पर बचाव करती है, जो केवल आर्च64 के लिए उपलब्ध है।<ref>{{cite web |title=ShadowCallStack — Clang 17.0.0git documentation |url=https://clang.llvm.org/docs/ShadowCallStack.html |website=clang.llvm.org}}</ref>
एलएलवीएम/क्लैंग एक सीएफआई विकल्प प्रदान करता है जो वर्चुअल टेबल और टाइप कास्ट में त्रुटियों की जांच करके फॉरवर्ड एज में काम करता है। यह जानने के लिए कि सामान्य मामलों में कौन से फ़ंक्शन को कॉल किया जाना चाहिए, यह [[लिंक-टाइम अनुकूलन]] (LTO) पर निर्भर करता है।<ref>{{cite web |title=Control Flow Integrity — Clang 17.0.0git documentation |url=https://clang.llvm.org/docs/ControlFlowIntegrity.html |website=clang.llvm.org}}</ref> एक अलग [[छाया कॉल स्टैक]] योजना है जो कॉल स्टैक संशोधनों की जांच करके पिछड़े किनारे पर बचाव करती है, जो केवल aarch64 के लिए उपलब्ध है।<ref>{{cite web |title=ShadowCallStack — Clang 17.0.0git documentation |url=https://clang.llvm.org/docs/ShadowCallStack.html |website=clang.llvm.org}}</ref>
Google ने 2018 से लिंक-टाइम ऑप्टिमाइज़ेशन (LTO) और CFI के साथ क्लैंग द्वारा संकलित [[लिनक्स कर्नेल]] के साथ [[Android (OS)]] को शिप किया है।<ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=Clang-LTO-Linux-Kernel-V2|title = Clang LTO Patches Updated for the Linux Kernel - Phoronix}}</ref> एससीएस एंड्रॉइड सहित लिनक्स कर्नेल के लिए एक विकल्प के रूप में उपलब्ध है।<ref>{{cite web |title=शैडोकॉलस्टैक|url=https://source.android.com/docs/security/test/shadow-call-stack |website=Android Open Source Project |language=en}}</ref>
 


===इंटेल नियंत्रण-प्रवाह प्रवर्तन प्रौद्योगिकी===
गूगल ने 2018 से लिंक-टाइम ऑप्टिमाइज़ेशन (एलटीओ) और सीएफआई के साथ क्लैंग द्वारा संकलित [[लिनक्स कर्नेल]] के साथ [[Android (OS)|एंड्रॉइड (ओएस)]] को शिप किया है।<ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=Clang-LTO-Linux-Kernel-V2|title = Clang LTO Patches Updated for the Linux Kernel - Phoronix}}</ref> एससीएस एंड्रॉइड सहित लिनक्स कर्नेल के लिए एक विकल्प के रूप में उपलब्ध है।<ref>{{cite web |title=शैडोकॉलस्टैक|url=https://source.android.com/docs/security/test/shadow-call-stack |website=Android Open Source Project |language=en}}</ref>
{{expand section|date=January 2021}}
===इंटेल कंट्रोल-फ्लो एनफोर्समेंट टेक्नोलॉजी===
इंटेल कंट्रोल-फ्लो एनफोर्समेंट टेक्नोलॉजी (सीईटी) शैडो स्टैक (एसएस) और अप्रत्यक्ष शाखा ट्रैकिंग (आईबीटी) के साथ प्रवाह अखंडता को नियंत्रित करने के लिए समझौते का पता लगाता है।<ref name="Control-flow Enforcement Technology Specification"/><ref name="R.I.P ROP: CET Internals in Windows 20H1"/>
इंटेल कंट्रोल-फ्लो एनफोर्समेंट टेक्नोलॉजी (सीईटी) शैडो स्टैक (एसएस) और इनडायरेक्ट ब्रांच ट्रैकिंग (आईबीटी) के साथ फ्लो इंटीग्रिटी को कंट्रोल करने के लिए समझौते का एड्रेस लगाता है।<ref name="Control-flow Enforcement Technology Specification" /><ref name="R.I.P ROP: CET Internals in Windows 20H1" />


शैडो स्टैक प्रत्येक कॉल के रिटर्न पते की एक प्रति विशेष रूप से संरक्षित शैडो स्टैक में संग्रहीत करता है। आरईटी पर, प्रोसेसर जांच करता है कि सामान्य स्टैक और शैडो स्टैक में संग्रहीत रिटर्न पता बराबर है या नहीं। यदि पते समान नहीं हैं, तो प्रोसेसर एक INT #21 (नियंत्रण प्रवाह सुरक्षा दोष) उत्पन्न करता है।
शैडो स्टैक प्रत्येक कॉल के रिटर्न एड्रेस की एक प्रति विशेष रूप से संरक्षित शैडो स्टैक में संग्रहीत करता है। आरईटी पर, प्रोसेसर जांच करता है कि सामान्य स्टैक और शैडो स्टैक में संग्रहीत रिटर्न एड्रेस समतुल्य है या नहीं, यदि एड्रेस समान नहीं हैं, तो प्रोसेसर एक INT #21 (कंट्रोल फ्लो प्रोटेक्शन फॉल्ट) उत्पन्न करता है।


अप्रत्यक्ष शाखा ट्रैकिंग अनधिकृत लक्ष्यों के साथ अप्रत्यक्ष जेएमपी या कॉल निर्देशों का पता लगाती है। इसे प्रोसेसर में एक नई आंतरिक स्टेट मशीन जोड़कर कार्यान्वित किया जाता है। अप्रत्यक्ष JMP और CALL निर्देशों का व्यवहार बदल दिया गया है ताकि वे राज्य मशीन को IDLE से WAIT_FOR_ENDBRANCH पर स्विच कर दें। WAIT_FOR_ENDBRANCH स्थिति में, निष्पादित होने वाला अगला निर्देश नया ENDBRANCH निर्देश (32-बिट मोड में ENDBR32 या 64-बिट मोड में ENDBR64) होना आवश्यक है, जो आंतरिक स्थिति मशीन को WAIT_FOR_ENDBRANCH से वापस IDLE में बदल देता है। इस प्रकार अप्रत्यक्ष JMP या CALL का प्रत्येक अधिकृत लक्ष्य ENDBRANCH से शुरू होना चाहिए। यदि प्रोसेसर WAIT_FOR_ENDBRANCH स्थिति में है (मतलब, पिछला निर्देश एक अप्रत्यक्ष JMP या CALL था), और अगला निर्देश ENDBRANCH निर्देश नहीं है, तो प्रोसेसर एक INT #21 (कंट्रोल फ्लो प्रोटेक्शन फॉल्ट) उत्पन्न करता है। सीईटी अप्रत्यक्ष शाखा ट्रैकिंग का समर्थन नहीं करने वाले प्रोसेसर पर, ENDBRANCH निर्देशों को एनओपी के रूप में समझा जाता है और उनका कोई प्रभाव नहीं पड़ता है।
इनडायरेक्ट ब्रांच ट्रैकिंग अनधिकृत टार्गेट्स के साथ इनडायरेक्ट जेएमपी या कॉल इंस्ट्रक्शंस का एड्रेस लगाती है। इसे प्रोसेसर में एक नवीनतम इंटरनल स्टेट मशीन जोड़कर इम्प्लिमेंटेड किया जाता है। इनडायरेक्ट जेएमपी और कॉल इंस्ट्रक्शंस का व्यवहार परिवर्तित कर दिया गया है जिससे की वे स्टेट मशीन को आईडीएलइ से वेट_फॉर_एन्डब्राँच पर स्विच कर सकते है। वेट_फॉर_एन्डब्राँच स्टेट में, निष्पादित होने वाला अगला इंस्ट्रक्शन नया एन्डब्राँच इंस्ट्रक्शन (32-बिट मोड में इएनडीबीआर32 या 64-बिट मोड में इएनडीबीआर64) होना आवश्यक है, जो इंटरनल स्टेट मशीन को वेट_फॉर_एन्डब्राँच से दोबारा आईडीएलइ में परिवर्तित कर देता है। इस प्रकार इनडायरेक्ट जेएमपी या कॉल का प्रत्येक अधिकृत टारगेट एन्डब्राँच से प्रारंभ होना चाहिए, यदि प्रोसेसर वेट_फॉर_एन्डब्राँच स्टेट में है (अर्थात, प्रिवियस इंस्ट्रक्शन एक इनडायरेक्ट जेएमपी या कॉल था), और अगला इंस्ट्रक्शन एन्डब्राँच इंस्ट्रक्शन नहीं है, तो प्रोसेसर एक INT #21 (कंट्रोल फ्लो प्रोटेक्शन फॉल्ट) उत्पन्न करता है। सीईटी इनडायरेक्ट ब्रांच ट्रैकिंग का समर्थन नहीं करने वाले प्रोसेसर पर, एन्डब्राँच इंस्ट्रक्शंस को एनओपी के रूप में समझा जाता है और उनका कोई प्रभाव नहीं पड़ता है।


===माइक्रोसॉफ्ट कंट्रोल फ्लो गार्ड===
===माइक्रोसॉफ्ट कंट्रोल फ्लो गार्ड===
कंट्रोल फ्लो गार्ड (सीएफजी) पहली बार नवंबर 2014 में विंडोज 8.1 अपडेट 3 (KB3000850) के लिए जारी किया गया था। डेवलपर्स अपने प्रोग्राम में सीएफजी को जोड़कर जोड़ सकते हैं। <code>/guard:cf</code> विजुअल स्टूडियो 2015 या नए में प्रोग्राम लिंकिंग से पहले लिंकर ध्वज।<ref name="MSDN - Control Flow Guard"/>
कंट्रोल फ्लो गार्ड (सीएफजी) पहली बार नवंबर 2014 में विंडोज 8.1 अपडेट 3 (KB3000850) के लिए व्यवस्थित किया गया था। डेवलपर्स विज़ुअल स्टूडियो 2015 या नवीनतम में प्रोग्राम लिंक करने से पहले <code>/guard:cf</code> लिंकर फ़्लैग जोड़कर अपने प्रोग्राम में कंट्रोल फ्लो गार्ड जोड़ सकते हैं।<ref name="MSDN - Control Flow Guard"/>
 
[[विंडोज़ 10 क्रिएटर्स अपडेट]] (विंडोज़ 10 संस्करण 1703) के अनुसार, विंडोज़ कर्नेल को सीएफजी के साथ संकलित किया गया है।<ref name="TechNet - Shadow Brokers"/>विंडोज़ कर्नेल दुर्भावनापूर्ण कर्नेल कोड को सीएफजी बिटमैप को ओवरराइट करने से रोकने के लिए [[हाइपर-वी]] का उपयोग करता है।<ref name="Ionescu - Universally Bypassing CFG Through Mutability Abuse"/>
 
सीएफजी एक प्रति-प्रक्रिया बिटमैप बनाकर संचालित होता है, जहां एक सेट बिट इंगित करता है कि पता एक वैध गंतव्य है। प्रत्येक अप्रत्यक्ष फ़ंक्शन कॉल करने से पहले, एप्लिकेशन जांचता है कि गंतव्य पता बिटमैप में है या नहीं। यदि गंतव्य पता बिटमैप में नहीं है, तो प्रोग्राम समाप्त हो जाता है।<ref name="MSDN - Control Flow Guard"/>इससे किसी हमलावर के लिए किसी ऑब्जेक्ट की सामग्री को प्रतिस्थापित करके और फिर पेलोड निष्पादित करने के लिए अप्रत्यक्ष फ़ंक्शन कॉल का उपयोग करके उपयोग-बाद-मुक्त उपयोग करना अधिक कठिन हो जाता है।<ref name="Exploiting CVE-2015-0311, Part II"/>
 


[[विंडोज़ 10 क्रिएटर्स अपडेट]] (विंडोज़ 10 संस्करण 1703) के अनुसार, विंडोज़ कर्नेल को सीएफजी के साथ संकलित किया गया है।<ref name="TechNet - Shadow Brokers"/> विंडोज़ कर्नेल मैलिसियस कर्नेल कोड को तथा इसके अतिरिक्त सीएफजी बिटमैप को ओवरराइट करने से रोकने के लिए [[हाइपर-वी]] का उपयोग करता है।<ref name="Ionescu - Universally Bypassing CFG Through Mutability Abuse"/>


====कार्यान्वयन विवरण====
सीएफजी एक प्रति-प्रक्रिया बिटमैप बनाकर संचालित होता है, जहां एक सेट बिट इंगित करता है कि एड्रेस एक वैध डेस्टिनेशन है। प्रत्येक इनडायरेक्ट फ़ंक्शन कॉल करने से पहले, एप्लिकेशन जांचता है कि डेस्टिनेशन एड्रेस बिटमैप में है या नहीं, यदि डेस्टिनेशन एड्रेस बिटमैप में नहीं है, तो प्रोग्राम समाप्त हो जाता है।<ref name="MSDN - Control Flow Guard"/> इससे किसी अटैकर के लिए किसी ऑब्जेक्ट की सामग्री को प्रतिस्थापित करके और फिर पेलोड निष्पादित करने के लिए इनडायरेक्ट फ़ंक्शन कॉल का उपयोग करके यूज़ आफ्टर फ्री उपयोग करना अधिक कठिन हो जाता है।<ref name="Exploiting CVE-2015-0311, Part II"/>
सभी संरक्षित अप्रत्यक्ष फ़ंक्शन कॉल के लिए, <code> _guard_check_icall</code> फ़ंक्शन को कॉल किया जाता है, जो निम्नलिखित चरण निष्पादित करता है:<ref name="Exploring Control Flow Guard in Windows 10"/># लक्ष्य पते को बिटमैप में ऑफसेट और बिट संख्या में बदलें।
====इम्प्लिमेंटेशन्स विवरण====
सभी संरक्षित इनडायरेक्ट फ़ंक्शन कॉल के लिए, <code>_guard_check_iकॉल</code> फ़ंक्शन को कॉल किया जाता है, जो निम्नलिखित चरण निष्पादित करता है:<ref name="Exploring Control Flow Guard in Windows 10"/>
#टारगेट एड्रेस को बिटमैप में ऑफसेट और बिट संख्या में परिवर्तन।
## उच्चतम 3 बाइट्स बिटमैप में बाइट ऑफसेट हैं
## उच्चतम 3 बाइट्स बिटमैप में बाइट ऑफसेट हैं
## बिट ऑफसेट 5-बिट मान है। पहले चार बिट पते के चौथे से आठवें निम्न-क्रम बिट हैं।
## बिट ऑफसेट 5-बिट वैल्यू है। पहले चार बिट एड्रेस के चौथे से आठवें निम्न-क्रम बिट हैं।
## यदि गंतव्य पता 0x10 (अंतिम चार बिट्स 0 हैं) के साथ संरेखित है, तो बिट ऑफसेट का 5वां बिट 0 पर सेट है, और यदि यह नहीं है तो 1 पर सेट है।
## यदि डेस्टिनेशन एड्रेस 0x10 (अंतिम चार बिट्स 0 हैं) के साथ संरेखित है, तो बिट ऑफसेट का 5वां बिट 0 पर सेट है, और यदि यह नहीं है तो 1 पर सेट है।
# बिटमैप में लक्ष्य के पता मान की जांच करें
# बिटमैप में टारगेट के एड्रेस वैल्यू की जांच करें,
## यदि लक्ष्य पता बिटमैप में है, तो बिना किसी त्रुटि के वापस लौटें।
## यदि टारगेट एड्रेस बिटमैप में है, तो रिटर्न विदाउट एरर हो सकता है।
## यदि लक्ष्य पता बिटमैप में नहीं है, तो प्रोग्राम को समाप्त करें।
## यदि टारगेट एड्रेस बिटमैप में नहीं है, तो प्रोग्राम टर्मिनेट हो सकता है।


====बाईपास तकनीक====
====बाईपास तकनीक====
सीएफजी को बायपास करने के लिए कई सामान्य तकनीकें हैं:
सीएफजी को बायपास करने के लिए कई सामान्य तकनीकें हैं:


* गंतव्य को उसी प्रक्रिया में लोड किए गए गैर-सीएफजी मॉड्यूल में स्थित कोड पर सेट करें।<ref name="Exploiting CVE-2015-0311, Part II"/><ref name="Windows 10 Control Flow Guard Internals"/>* एक अप्रत्यक्ष कॉल ढूंढें जो सीएफजी (या तो कॉल या जेएमपी) द्वारा संरक्षित नहीं थी।<ref name="Exploiting CVE-2015-0311, Part II"/><ref name="Windows 10 Control Flow Guard Internals"/><ref name="BYPASS CONTROL FLOW GUARD COMPREHENSIVELY"/>* जिस फ़ंक्शन कॉल के लिए डिज़ाइन किया गया है उससे भिन्न संख्या में तर्कों के साथ फ़ंक्शन कॉल का उपयोग करें, जिससे स्टैक मिसलिग्न्मेंट हो जाता है, और फ़ंक्शन के वापस आने के बाद कोड निष्पादन होता है (विंडोज 10 में पैच किया गया)<ref name="Bromium CFG stack desync"/>* समान संख्या में तर्कों के साथ एक फ़ंक्शन कॉल का उपयोग करें, लेकिन पास किए गए पॉइंटर्स में से एक को ऑब्जेक्ट के रूप में माना जाता है और पॉइंटर-आधारित ऑफसेट पर लिखता है, जिससे रिटर्न एड्रेस को ओवरराइट करने की अनुमति मिलती है।<ref name="Object Oriented Exploitation: New techniques in Windows mitigation bypass"/>* पते को सत्यापित करने के लिए सीएफजी द्वारा उपयोग किए गए फ़ंक्शन कॉल को अधिलेखित करें (मार्च 2015 में पैच किया गया)<ref name="BYPASS CONTROL FLOW GUARD COMPREHENSIVELY"/>* सीएफजी बिटमैप को सभी 1 पर सेट करें, जिससे सभी अप्रत्यक्ष फ़ंक्शन कॉल की अनुमति मिल सके<ref name="BYPASS CONTROL FLOW GUARD COMPREHENSIVELY"/>* स्टैक पर किसी पते को अधिलेखित करने के लिए नियंत्रित-लेखन आदिम का उपयोग करें (चूंकि स्टैक सीएफजी द्वारा संरक्षित नहीं है) <ref name="BYPASS CONTROL FLOW GUARD COMPREHENSIVELY"/>
* डेस्टिनेशन को उसी प्रक्रिया में लोड किए गए नॉन-सीएफजी मॉड्यूल में स्थित कोड पर सेट कर सकते है।<ref name="Exploiting CVE-2015-0311, Part II"/><ref name="Windows 10 Control Flow Guard Internals"/>
 
*एक इनडायरेक्ट कॉल ढूंढें जो सीएफजी (या तो कॉल या जेएमपी) द्वारा संरक्षित नहीं थी।<ref name="Exploiting CVE-2015-0311, Part II" /><ref name="Windows 10 Control Flow Guard Internals" /><ref name="BYPASS CONTROL FLOW GUARD COMPREHENSIVELY" />
 
*जिस फ़ंक्शन कॉल के लिए डिज़ाइन किया गया है उससे भिन्न संख्या में आर्ग्युमेंट्स के साथ फ़ंक्शन कॉल का उपयोग करें, जिससे स्टैक मिसलिग्न्मेंट हो जाता है, और (विंडोज 10 में पैच किया गया) फ़ंक्शन के दोबारा आने के पश्चात कोड एक्सिक्यूशन होता है।<ref name="Bromium CFG stack desync" />
===Microsoft विस्तारित फ़्लो गार्ड===
*समान संख्या में आर्ग्युमेंट्स के साथ एक फ़ंक्शन कॉल का उपयोग करें, लेकिन पास किए गए पॉइंटर्स में से एक को ऑब्जेक्ट के रूप में माना जाता है और पॉइंटर-बेस्ड ऑफसेट पर लिखता है, जिससे रिटर्न एड्रेस को ओवरराइट करने की अनुमति मिलती है।<ref name="Object Oriented Exploitation: New techniques in Windows mitigation bypass" />
एक्सटेंडेड फ्लो गार्ड (एक्सएफजी) अभी तक आधिकारिक तौर पर जारी नहीं किया गया है, लेकिन विंडोज इनसाइडर पूर्वावलोकन में उपलब्ध है और 2019 में ब्लूहैट शंघाई में सार्वजनिक रूप से प्रस्तुत किया गया था।<ref name="Advancing Windows Security Bluehat Shanghai 2019"/>
*एड्रेस को सत्यापित करने के लिए सीएफजी द्वारा उपयोग किए गए फ़ंक्शन कॉल को अधिलेखित करें जिसे मार्च 2015 में पैच किया गया था।<ref name="BYPASS CONTROL FLOW GUARD COMPREHENSIVELY" />
 
*सीएफजी बिटमैप को सभी 1 पर सेट करें, जिससे सभी इनडायरेक्ट फ़ंक्शन कॉल की अनुमति मिल सकती है।<ref name="BYPASS CONTROL FLOW GUARD COMPREHENSIVELY" />
XFG फ़ंक्शन कॉल हस्ताक्षरों को मान्य करके CFG का विस्तार करता है ताकि यह सुनिश्चित किया जा सके कि अप्रत्यक्ष फ़ंक्शन कॉल केवल समान हस्ताक्षर वाले फ़ंक्शन के सबसेट के लिए हों। फ़ंक्शन कॉल हस्ताक्षर सत्यापन अप्रत्यक्ष कॉल से तुरंत पहले लक्ष्य फ़ंक्शन के हैश को रजिस्टर r10 में संग्रहीत करने और लक्ष्य पते के कोड से तुरंत पहले मेमोरी में गणना किए गए फ़ंक्शन हैश को संग्रहीत करने के निर्देश जोड़कर कार्यान्वित किया जाता है। जब अप्रत्यक्ष कॉल किया जाता है, तो XFG सत्यापन फ़ंक्शन r10 में मान की तुलना लक्ष्य फ़ंक्शन के संग्रहीत हैश से करता है। <ref name="EXTENDED FLOW GUARD UNDER THE MICROSCOPE"/><ref name="Exploit Development: Between a Rock and a (Xtended Flow) Guard Place: Examining XFG"/>
*स्टैक पर किसी एड्रेस को अधिलेखित करने के लिए (चूंकि स्टैक सीएफजी द्वारा संरक्षित नहीं है) कंट्रोल-लेखन प्रिमिटिव का उपयोग कर सकते है।<ref name="BYPASS CONTROL FLOW GUARD COMPREHENSIVELY" />
 
===माइक्रोसॉफ्ट एक्सटेंडेड फ़्लो गार्ड===
एक्सटेंडेड फ्लो गार्ड (एक्सएफजी) अभी तक सामान्यतः व्यवस्थित नहीं किया गया है, लेकिन विंडोज इनसाइडर पूर्वावलोकन में उपलब्ध है और 2019 में ब्लूहैट शंघाई में सार्वजनिक रूप से प्रस्तुत किया गया था।<ref name="Advancing Windows Security Bluehat Shanghai 2019"/>


एक्सएफजी फ़ंक्शन कॉल सिग्नेचरों को मान्य करके सीएफजी का विस्तार करता है जिससे की यह सुनिश्चित किया जा सके कि इनडायरेक्ट फ़ंक्शन कॉल केवल समान सिग्नेचर वाले फ़ंक्शन के सबसेट के लिए हों, फ़ंक्शन कॉल सिग्नेचर सत्यापन इनडायरेक्ट कॉल से तुरंत पहले टारगेट फ़ंक्शन के हैश को रजिस्टर r10 में संग्रहीत करने और टारगेट एड्रेस के कोड से तुरंत पहले मेमोरी में गणना किए गए फ़ंक्शन हैश को संग्रहीत करने के इंस्ट्रक्शन जोड़कर इम्प्लिमेंटेड किया जाता है। जब इनडायरेक्ट कॉल किया जाता है, तो एक्सएफजी सत्यापन फ़ंक्शन r10 में वैल्यू की तुलना टारगेट फ़ंक्शन के संग्रहीत हैश से करता है। <ref name="EXTENDED FLOW GUARD UNDER THE MICROSCOPE"/><ref name="Exploit Development: Between a Rock and a (Xtended Flow) Guard Place: Examining XFG"/>
==यह भी देखें==
==यह भी देखें==
* [[बफर अतिप्रवाह संरक्षण]]
* [[बफर अतिप्रवाह संरक्षण|बफर अतिफ्लो संरक्षण]]


==संदर्भ==
==संदर्भ==
Line 94: Line 86:
}}
}}


[[Category: कंप्यूटर सुरक्षा]]  
[[Category:All articles with dead external links]]
 
[[Category:Articles with dead external links from July 2021]]
 
[[Category:CS1 Deutsch-language sources (de)]]
 
[[Category:CS1 English-language sources (en)]]
[[Category: Machine Translated Page]]
[[Category:Created On 24/07/2023]]
[[Category:Created On 24/07/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:कंप्यूटर सुरक्षा]]

Latest revision as of 10:53, 14 August 2023

कंट्रोल फ्लो इंटीग्रिटी (सीएफआई) कंप्यूटर सुरक्षा तकनीकों के लिए एक सामान्य शब्द है जो किसी प्रोग्राम के एक्सिक्यूशन के फ्लो (कंट्रोल फ्लो) को पुनर्इंस्ट्रक्शनित करने से विभिन्न प्रकार के मैलवेयर अटैक्स को रोकता है।

बैकग्राउंड

एक कंप्यूटर प्रोग्राम सामान्यतः निर्णय लेने और कोड के विभिन्न भागों का उपयोग करने के लिए अपने कंट्रोल फ्लो को परिवर्तित करता है है। ऐसे स्थानांतरण प्रत्यक्ष हो सकते हैं, जिसमें टारगेट एड्रेस सैल्फ कोड में लिखा होता है, या इनडायरेक्ट, जिसमें टारगेट एड्रेस सैल्फ मेमोरी या सीपीयू रजिस्टर में एक वैरिएबल होता है। एक सामान्य फ़ंक्शन कॉल में, प्रोग्राम प्रत्यक्ष कॉल करता है, लेकिन स्टैक का उपयोग करके कॉलर फ़ंक्शन पर लौटता है - एक इनडायरेक्ट बैकवर्ड-एज ट्रांसफर जब किसी फ़ंक्शन पॉइंटर को कॉल किया जाता है, जैसे कि वर्चुअल टेबल से, तो हम कहते हैं कि एक इनडायरेक्ट फॉरवर्ड-एज ट्रांसफर है।[1][2]

अटैकर किसी प्रोग्राम के विशेषाधिकारों का उपयोग करने या उसके मेमोरी स्पेस से डेटा निकालने के लिए उसमें कोड इंजेक्ट करना चाहते हैं। एक्सिक्यूशन कोड को सामान्यतः रीड-ओनली के लिए बनाए जाने से पहले, एक अटैकर कोड को चलाते समय आर्बिटरी से परिवर्तित कर सकता है, डायरेक्ट ट्रांसफर को टार्गेटिंग कर सकता है या यहां तक ​​कि बिना किसी स्थानांतरण के भी ऐसा कर सकता है। W^X के व्यापक हो जाने के पश्चात, एक अटैकर इनडायरेक्ट स्थानान्तरण का उपयोग करते हुए एक्सिक्यूशन को चलाने के लिए कोड वाले एक भिन्न, असुरक्षित क्षेत्र में पुनर्इंस्ट्रक्शनित करना चाहता है: कोई फॉरवर्ड-एज अटैक के लिए वर्चुअल टेबल को ओवरराइट कर सकता है या बैकवर्ड-एज अटैक ( रिटर्न ओरिएन्टेड प्रोग्रामिंग ) के लिए कॉल स्टैक को परिवर्तित कर सकता है। सीएफआई को इनडायरेक्ट स्थानान्तरण को अनपेक्षित स्थानों पर जाने से बचाने के लिए डिज़ाइन किया गया है।[1]

तकनीक

संबद्ध तकनीकों में कोड-पॉइंटर सेपरेशन (सीपीएस), कोड-पॉइंटर इंटीग्रिटी (सीपीआई), स्टैक कैनरी, शैडो स्टैक और वीटेबल पॉइंटर वेरिफिकेशन सम्मिलित हैं।[3][4][5]

इम्प्लिमेंटेशन्स

रिलेटेड इम्प्लिमेंटेशन्स क्लैंग (सामान्य रूप से एलएलवीएम),[6] माइक्रोसॉफ्ट के कंट्रोल फ्लो गार्ड[7][8][9] और रिटर्न फ्लो गार्ड[10] गूगल के इनडायरेक्ट फंक्शन-कॉल चेक्स[11] और रीयूज अटैक प्रोटेक्टर (आरएपी) में उपलब्ध हैं।[12][13]

एलएलवीएम/क्लैंग

एलएलवीएम/क्लैंग एक सीएफआई विकल्प प्रदान करता है जो वर्चुअल टेबल और टाइप कास्ट में त्रुटियों की जांच करके फॉरवर्ड एज में काम करता है। यह जानने के लिए कि सामान्य स्टेटयों में कौन से फ़ंक्शन को कॉल किया जाना चाहिए, यह लिंक-टाइम ऑप्टिमाइजेशन (एलटीओ) पर निर्भर करता है।[14] एक भिन्न शैडो कॉल स्टैक योजना है जो कॉल स्टैक संशोधनों की जांच करके बैकवर्ड एज पर बचाव करती है, जो केवल आर्च64 के लिए उपलब्ध है।[15]

गूगल ने 2018 से लिंक-टाइम ऑप्टिमाइज़ेशन (एलटीओ) और सीएफआई के साथ क्लैंग द्वारा संकलित लिनक्स कर्नेल के साथ एंड्रॉइड (ओएस) को शिप किया है।[16] एससीएस एंड्रॉइड सहित लिनक्स कर्नेल के लिए एक विकल्प के रूप में उपलब्ध है।[17]

इंटेल कंट्रोल-फ्लो एनफोर्समेंट टेक्नोलॉजी

इंटेल कंट्रोल-फ्लो एनफोर्समेंट टेक्नोलॉजी (सीईटी) शैडो स्टैक (एसएस) और इनडायरेक्ट ब्रांच ट्रैकिंग (आईबीटी) के साथ फ्लो इंटीग्रिटी को कंट्रोल करने के लिए समझौते का एड्रेस लगाता है।[18][19]

शैडो स्टैक प्रत्येक कॉल के रिटर्न एड्रेस की एक प्रति विशेष रूप से संरक्षित शैडो स्टैक में संग्रहीत करता है। आरईटी पर, प्रोसेसर जांच करता है कि सामान्य स्टैक और शैडो स्टैक में संग्रहीत रिटर्न एड्रेस समतुल्य है या नहीं, यदि एड्रेस समान नहीं हैं, तो प्रोसेसर एक INT #21 (कंट्रोल फ्लो प्रोटेक्शन फॉल्ट) उत्पन्न करता है।

इनडायरेक्ट ब्रांच ट्रैकिंग अनधिकृत टार्गेट्स के साथ इनडायरेक्ट जेएमपी या कॉल इंस्ट्रक्शंस का एड्रेस लगाती है। इसे प्रोसेसर में एक नवीनतम इंटरनल स्टेट मशीन जोड़कर इम्प्लिमेंटेड किया जाता है। इनडायरेक्ट जेएमपी और कॉल इंस्ट्रक्शंस का व्यवहार परिवर्तित कर दिया गया है जिससे की वे स्टेट मशीन को आईडीएलइ से वेट_फॉर_एन्डब्राँच पर स्विच कर सकते है। वेट_फॉर_एन्डब्राँच स्टेट में, निष्पादित होने वाला अगला इंस्ट्रक्शन नया एन्डब्राँच इंस्ट्रक्शन (32-बिट मोड में इएनडीबीआर32 या 64-बिट मोड में इएनडीबीआर64) होना आवश्यक है, जो इंटरनल स्टेट मशीन को वेट_फॉर_एन्डब्राँच से दोबारा आईडीएलइ में परिवर्तित कर देता है। इस प्रकार इनडायरेक्ट जेएमपी या कॉल का प्रत्येक अधिकृत टारगेट एन्डब्राँच से प्रारंभ होना चाहिए, यदि प्रोसेसर वेट_फॉर_एन्डब्राँच स्टेट में है (अर्थात, प्रिवियस इंस्ट्रक्शन एक इनडायरेक्ट जेएमपी या कॉल था), और अगला इंस्ट्रक्शन एन्डब्राँच इंस्ट्रक्शन नहीं है, तो प्रोसेसर एक INT #21 (कंट्रोल फ्लो प्रोटेक्शन फॉल्ट) उत्पन्न करता है। सीईटी इनडायरेक्ट ब्रांच ट्रैकिंग का समर्थन नहीं करने वाले प्रोसेसर पर, एन्डब्राँच इंस्ट्रक्शंस को एनओपी के रूप में समझा जाता है और उनका कोई प्रभाव नहीं पड़ता है।

माइक्रोसॉफ्ट कंट्रोल फ्लो गार्ड

कंट्रोल फ्लो गार्ड (सीएफजी) पहली बार नवंबर 2014 में विंडोज 8.1 अपडेट 3 (KB3000850) के लिए व्यवस्थित किया गया था। डेवलपर्स विज़ुअल स्टूडियो 2015 या नवीनतम में प्रोग्राम लिंक करने से पहले /guard:cf लिंकर फ़्लैग जोड़कर अपने प्रोग्राम में कंट्रोल फ्लो गार्ड जोड़ सकते हैं।[20]

विंडोज़ 10 क्रिएटर्स अपडेट (विंडोज़ 10 संस्करण 1703) के अनुसार, विंडोज़ कर्नेल को सीएफजी के साथ संकलित किया गया है।[21] विंडोज़ कर्नेल मैलिसियस कर्नेल कोड को तथा इसके अतिरिक्त सीएफजी बिटमैप को ओवरराइट करने से रोकने के लिए हाइपर-वी का उपयोग करता है।[22]

सीएफजी एक प्रति-प्रक्रिया बिटमैप बनाकर संचालित होता है, जहां एक सेट बिट इंगित करता है कि एड्रेस एक वैध डेस्टिनेशन है। प्रत्येक इनडायरेक्ट फ़ंक्शन कॉल करने से पहले, एप्लिकेशन जांचता है कि डेस्टिनेशन एड्रेस बिटमैप में है या नहीं, यदि डेस्टिनेशन एड्रेस बिटमैप में नहीं है, तो प्रोग्राम समाप्त हो जाता है।[20] इससे किसी अटैकर के लिए किसी ऑब्जेक्ट की सामग्री को प्रतिस्थापित करके और फिर पेलोड निष्पादित करने के लिए इनडायरेक्ट फ़ंक्शन कॉल का उपयोग करके यूज़ आफ्टर फ्री उपयोग करना अधिक कठिन हो जाता है।[23]

इम्प्लिमेंटेशन्स विवरण

सभी संरक्षित इनडायरेक्ट फ़ंक्शन कॉल के लिए, _guard_check_iकॉल फ़ंक्शन को कॉल किया जाता है, जो निम्नलिखित चरण निष्पादित करता है:[24]

  1. टारगेट एड्रेस को बिटमैप में ऑफसेट और बिट संख्या में परिवर्तन।
    1. उच्चतम 3 बाइट्स बिटमैप में बाइट ऑफसेट हैं
    2. बिट ऑफसेट 5-बिट वैल्यू है। पहले चार बिट एड्रेस के चौथे से आठवें निम्न-क्रम बिट हैं।
    3. यदि डेस्टिनेशन एड्रेस 0x10 (अंतिम चार बिट्स 0 हैं) के साथ संरेखित है, तो बिट ऑफसेट का 5वां बिट 0 पर सेट है, और यदि यह नहीं है तो 1 पर सेट है।
  2. बिटमैप में टारगेट के एड्रेस वैल्यू की जांच करें,
    1. यदि टारगेट एड्रेस बिटमैप में है, तो रिटर्न विदाउट एरर हो सकता है।
    2. यदि टारगेट एड्रेस बिटमैप में नहीं है, तो प्रोग्राम टर्मिनेट हो सकता है।

बाईपास तकनीक

सीएफजी को बायपास करने के लिए कई सामान्य तकनीकें हैं:

  • डेस्टिनेशन को उसी प्रक्रिया में लोड किए गए नॉन-सीएफजी मॉड्यूल में स्थित कोड पर सेट कर सकते है।[23][25]
  • एक इनडायरेक्ट कॉल ढूंढें जो सीएफजी (या तो कॉल या जेएमपी) द्वारा संरक्षित नहीं थी।[23][25][26]
  • जिस फ़ंक्शन कॉल के लिए डिज़ाइन किया गया है उससे भिन्न संख्या में आर्ग्युमेंट्स के साथ फ़ंक्शन कॉल का उपयोग करें, जिससे स्टैक मिसलिग्न्मेंट हो जाता है, और (विंडोज 10 में पैच किया गया) फ़ंक्शन के दोबारा आने के पश्चात कोड एक्सिक्यूशन होता है।[27]
  • समान संख्या में आर्ग्युमेंट्स के साथ एक फ़ंक्शन कॉल का उपयोग करें, लेकिन पास किए गए पॉइंटर्स में से एक को ऑब्जेक्ट के रूप में माना जाता है और पॉइंटर-बेस्ड ऑफसेट पर लिखता है, जिससे रिटर्न एड्रेस को ओवरराइट करने की अनुमति मिलती है।[28]
  • एड्रेस को सत्यापित करने के लिए सीएफजी द्वारा उपयोग किए गए फ़ंक्शन कॉल को अधिलेखित करें जिसे मार्च 2015 में पैच किया गया था।[26]
  • सीएफजी बिटमैप को सभी 1 पर सेट करें, जिससे सभी इनडायरेक्ट फ़ंक्शन कॉल की अनुमति मिल सकती है।[26]
  • स्टैक पर किसी एड्रेस को अधिलेखित करने के लिए (चूंकि स्टैक सीएफजी द्वारा संरक्षित नहीं है) कंट्रोल-लेखन प्रिमिटिव का उपयोग कर सकते है।[26]

माइक्रोसॉफ्ट एक्सटेंडेड फ़्लो गार्ड

एक्सटेंडेड फ्लो गार्ड (एक्सएफजी) अभी तक सामान्यतः व्यवस्थित नहीं किया गया है, लेकिन विंडोज इनसाइडर पूर्वावलोकन में उपलब्ध है और 2019 में ब्लूहैट शंघाई में सार्वजनिक रूप से प्रस्तुत किया गया था।[29]

एक्सएफजी फ़ंक्शन कॉल सिग्नेचरों को मान्य करके सीएफजी का विस्तार करता है जिससे की यह सुनिश्चित किया जा सके कि इनडायरेक्ट फ़ंक्शन कॉल केवल समान सिग्नेचर वाले फ़ंक्शन के सबसेट के लिए हों, फ़ंक्शन कॉल सिग्नेचर सत्यापन इनडायरेक्ट कॉल से तुरंत पहले टारगेट फ़ंक्शन के हैश को रजिस्टर r10 में संग्रहीत करने और टारगेट एड्रेस के कोड से तुरंत पहले मेमोरी में गणना किए गए फ़ंक्शन हैश को संग्रहीत करने के इंस्ट्रक्शन जोड़कर इम्प्लिमेंटेड किया जाता है। जब इनडायरेक्ट कॉल किया जाता है, तो एक्सएफजी सत्यापन फ़ंक्शन r10 में वैल्यू की तुलना टारगेट फ़ंक्शन के संग्रहीत हैश से करता है। [30][31]

यह भी देखें

संदर्भ

  1. 1.0 1.1 Payer, Mattias. "Control-Flow Integrity: An Introduction". nebelwelt.net.
  2. Burow, Nathan; Carr, Scott A.; Nash, Joseph; Larsen, Per; Franz, Michael; Brunthaler, Stefan; Payer, Mathias (31 January 2018). "Control-Flow Integrity: Precision, Security, and Performance". ACM Computing Surveys. 50 (1): 1–33. doi:10.1145/3054924.
  3. Payer, Mathias; Kuznetsov, Volodymyr. "On differences between the CFI, CPS, and CPI properties". nebelwelt.net. Retrieved 2016-06-01.
  4. "Adobe Flash Bug Discovery Leads To New Attack Mitigation Method". Dark Reading. 10 November 2015. Retrieved 2016-06-01.
  5. Endgame. "Endgame to Present at Black Hat USA 2016". www.prnewswire.com. Retrieved 2016-06-01.
  6. "Control Flow Integrity — Clang 3.9 documentation". clang.llvm.org. Retrieved 2016-06-01.
  7. Pauli, Darren. "Microsoft's malware mitigator refreshed, but even Redmond says it's no longer needed". The Register. Retrieved 2016-06-01.
  8. Mimoso, Michael (2015-09-22). "Bypass Developed for Microsoft Memory Protection, Control Flow Guard". Threatpost | The first stop for security news. Retrieved 2016-06-01.
  9. Smith, Ms. (23 September 2015). "DerbyCon: Former BlueHat prize winner will bypass Control Flow Guard in Windows 10". Network World. Retrieved 2016-06-01.
  10. "Return Flow Guard". Tencent. 2 November 2016. Retrieved 2017-01-19.
  11. Tice, Caroline; Roeder, Tom; Collingbourne, Peter; Checkoway, Stephen; Erlingsson, Úlfar; Lozano, Luis; Pike, Geoff (2014-01-01). Enforcing Forward-Edge Control-Flow Integrity in GCC & LLVM. pp. 941–955. ISBN 9781931971157.
  12. Security, heise. "PaX Team stellt Schutz vor Code Reuse Exploits vor". Security (in Deutsch). Retrieved 2016-06-01.
  13. "Frequently Asked Questions About RAP". Retrieved 2016-06-01.
  14. "Control Flow Integrity — Clang 17.0.0git documentation". clang.llvm.org.
  15. "ShadowCallStack — Clang 17.0.0git documentation". clang.llvm.org.
  16. "Clang LTO Patches Updated for the Linux Kernel - Phoronix".
  17. "शैडोकॉलस्टैक". Android Open Source Project (in English).
  18. "Control-flow Enforcement Technology Specification" (PDF). Intel Developer Zone. Retrieved 2021-01-05.[dead link]
  19. "R.I.P ROP: CET Internals in Windows 20H1". Winsider Seminars & Solutions Inc. Retrieved 2021-01-05.
  20. 20.0 20.1 "Control Flow Guard". MSDN. Retrieved 2017-01-19.
  21. "Analysis of the Shadow Brokers release and mitigation with Windows 10 virtualization-based security". Microsoft Technet. 16 June 2017. Retrieved 2017-06-20.
  22. "Universally Bypassing CFG Through Mutability Abuse" (PDF). Alex Ionescu's Blog. Retrieved 2017-07-07.
  23. 23.0 23.1 23.2 Falcón, Francisco (2015-03-25). "Exploiting CVE-2015-0311, Part II: Bypassing Control Flow Guard on Windows 8.1 Update 3". Core Security. Retrieved 2017-01-19.
  24. "Control Flow Guard" (PDF). Trend Micro. Retrieved 2017-01-19.
  25. 25.0 25.1 "Windows 10 Control Flow Guard Internals" (PDF). Power of Community. Retrieved 2017-01-19.
  26. 26.0 26.1 26.2 26.3 "Bypass Control Flow Guard Comprehensively" (PDF). BlackHat. Retrieved 2017-01-19.
  27. "An interesting detail about Control Flow Guard". Bromium. Retrieved 2017-01-19.
  28. Thomas, Sam (18 August 2016). "Object Oriented Exploitation: New techniques in Windows mitigation bypass". Slideshare. Retrieved 2017-01-19.
  29. "Advancing Windows Security". Retrieved 2021-05-19.
  30. "EXTENDED FLOW GUARD UNDER THE MICROSCOPE". Retrieved 2021-05-19.
  31. "Exploit Development: Between a Rock and a (Xtended Flow) Guard Place: Examining XFG". 23 August 2020. Retrieved 2021-05-19.