वापसी-उन्मुख प्रोग्रामिंग: Difference between revisions

From Vigyanwiki
No edit summary
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
वापसी-उन्मुख प्रोग्रामिंग (आरओपी) एक [[कंप्यूटर सुरक्षा शोषण|कंप्यूटर सुरक्षा समुपयोजन]] तकनीक है जो आक्रामकों को सुरक्षा गढ़ की उपस्थिति में कोड निष्पादित करने की अनुमति देती है।<ref>{{Cite web |url=https://www.pentest.es/checkpoint_hack.pdf |title=Check Point Secure Platform Hack |author-last=Vázquez |author-first=Hugo |date=2007-10-01 |website=Pentest |publisher=Pentest Consultores |location=Barcelona, Spain |pages=219 |language=en}}</ref><ref>{{cite web |title=Thread: CheckPoint Secure Platform Multiple Buffer Overflows |url=https://www.cpug.org/forums/showthread.php/5980-CheckPoint-Secure-Platform-Multiple-Buffer-Overflows |website=The Check Point User Group}}</ref> जैसे निष्पादन योग्य स्थान सुरक्षा और [[कोड हस्ताक्षर]] आदि।<ref>{{cite web |url=http://cseweb.ucsd.edu/~hovav/talks/blackhat08.html |title=Return-Oriented Programming: Exploits Without Code Injection |author-first1=Hovav |author-last1=Shacham |author-first2=Erik |author-last2=Buchanan |author-first3=Ryan |author-last3=Roemer |author-first4=Stefan |author-last4=Savage |access-date=2009-08-12}}</ref>
वापसी-उन्मुख प्रोग्रामिंग (आरओपी) एक [[कंप्यूटर सुरक्षा शोषण|कंप्यूटर सुरक्षा समुपयोजन]] तकनीक है जो आक्रामकों को सुरक्षा गढ़ की उपस्थिति में कूट निष्पादित करने की अनुमति देती है।<ref>{{Cite web |url=https://www.pentest.es/checkpoint_hack.pdf |title=Check Point Secure Platform Hack |author-last=Vázquez |author-first=Hugo |date=2007-10-01 |website=Pentest |publisher=Pentest Consultores |location=Barcelona, Spain |pages=219 |language=en}}</ref><ref>{{cite web |title=Thread: CheckPoint Secure Platform Multiple Buffer Overflows |url=https://www.cpug.org/forums/showthread.php/5980-CheckPoint-Secure-Platform-Multiple-Buffer-Overflows |website=The Check Point User Group}}</ref> जैसे निष्पादन योग्य स्थान सुरक्षा और [[कोड हस्ताक्षर|कूट हस्ताक्षर]] आदि।<ref>{{cite web |url=http://cseweb.ucsd.edu/~hovav/talks/blackhat08.html |title=Return-Oriented Programming: Exploits Without Code Injection |author-first1=Hovav |author-last1=Shacham |author-first2=Erik |author-last2=Buchanan |author-first3=Ryan |author-last3=Roemer |author-first4=Stefan |author-last4=Savage |access-date=2009-08-12}}</ref>


इस तकनीक में, एक आक्रामक प्रोग्राम नियंत्रण प्रवाह का अधिग्रहण करने के लिए [[कॉल स्टैक]] पर नियंत्रण प्राप्त करता है और फिर सावधानी से चुने गए [[मशीन निर्देश|यंत्र निर्देश]] अनुक्रमों को निष्पादित करता है ये प्रारंभ से ही यंत्र की मेमोरी में उपलब्ध होते हैं, जिन्हें गैजेट कहा जाता है।<ref>{{Cite book |doi=10.1145/1455770.1455776 |chapter=When Good Instructions Go Bad: Generalizing Return-Oriented Programming to RISC |title=Proceedings of the 15th ACM conference on Computer and communications security - CCS '08 |pages=27–38 |date=October 2008 |author-last1=Buchanan |author-first1=E. |author-last2=Roemer |author-first2=R. |author-last3=Shacham |author-first3=H. |author-last4=Savage |author-first4=S. |isbn=978-1-59593-810-7 |s2cid=11176570 |chapter-url=http://cseweb.ucsd.edu/~hovav/dist/sparc.pdf}}</ref><ref group="nb" name="NB_Gadget"/>प्रत्येक गैजेट सामान्यत [[वापसी निर्देश]] में समाप्त होता है और उपलब्ध प्रोग्राम या सहभागी लाइब्रेरी कोड के भीतर एक [[सबरूटीन]] में स्थित होता है।<ref group="nb" name="NB_Gadget"/>साथ बंधे हुए, ये गैजेट एक आक्रामक के सरल आक्रमणों को विफल करने वाली सुरक्षा का उपयोग करने वाले यंत्र पर यादृच्छिक संचालन करने की अनुमति देते हैं।
इस तकनीक में, एक आक्रामक प्रोग्राम नियंत्रण प्रवाह का अधिग्रहण करने के लिए [[कॉल स्टैक]] पर नियंत्रण प्राप्त करता है और फिर सावधानी से चुने गए [[मशीन निर्देश|यंत्र निर्देश]] अनुक्रमों को निष्पादित करता है ये प्रारंभ से ही यंत्र की मेमोरी में उपलब्ध होते हैं, जिन्हें गैजेट कहा जाता है।<ref>{{Cite book |doi=10.1145/1455770.1455776 |chapter=When Good Instructions Go Bad: Generalizing Return-Oriented Programming to RISC |title=Proceedings of the 15th ACM conference on Computer and communications security - CCS '08 |pages=27–38 |date=October 2008 |author-last1=Buchanan |author-first1=E. |author-last2=Roemer |author-first2=R. |author-last3=Shacham |author-first3=H. |author-last4=Savage |author-first4=S. |isbn=978-1-59593-810-7 |s2cid=11176570 |chapter-url=http://cseweb.ucsd.edu/~hovav/dist/sparc.pdf}}</ref><ref group="nb" name="NB_Gadget"/>प्रत्येक गैजेट सामान्यत [[वापसी निर्देश]] में समाप्त होता है और उपलब्ध प्रोग्राम या सहभागी लाइब्रेरी कूट के भीतर एक [[सबरूटीन]] में स्थित होता है।<ref group="nb" name="NB_Gadget"/>साथ बंधे हुए, ये गैजेट एक आक्रामक के सरल आक्रमणों को विफल करने वाली सुरक्षा का उपयोग करने वाले यंत्र पर यादृच्छिक संचालन करने की अनुमति देते हैं।


== पृष्ठभूमि ==
== पृष्ठभूमि ==
[[File:Call stack layout.svg|thumb|right|upright=1.9|कॉल स्टैक का एक उदाहरण लेआउट जिसमे सबरूटीन ड्रॉ लाइन द्वारा कॉल किया गया है.ध्यान दें कि इस आरेख में स्टैक ऊपर की ओर बढ़ रहा है।]]वापसी-उन्मुख प्रोग्रामिंग स्टैक स्मैश आक्रमण का एक उन्नत संस्करण है। सामान्यतः, इस प्रकार के आक्रमण तब होते हैं जब एक विरोधी प्रोग्राम में [[सॉफ्टवेयर बग|सॉफ्टवेयर दोष]] का लाभ उठाकर कॉल स्टैक का क्रमभंग करता है, प्रायः एक [[बफर ओवररन]] होता है। एक बफ़र ओवररन में, एक फलन जो उपयोगकर्ता द्वारा प्रदान किए गए डेटा को स्मृति में संग्रहीत करने से पहले उचित सीमा जांच नहीं करता है, वह अधिक निविष्ट डेटा को ठीक से स्टोर कर सकता है। यदि डेटा को स्टैक पर लिखा जा रहा है, तो अतिरिक्त डेटा फलन के चर (जैसे, स्टैक आरेख में दाईं ओर 'स्थानीय डाटा') के आवंटित स्थान को ओवरफ्लो कर सकता है और रिटर्न पते को उपरिलेखित कर सकता है। यह पता बाद में फलन द्वारा कॉलर में नियंत्रण प्रवाह को पुनर्निर्देशित करने के लिए उपयोग किया जाएगा। यदि इसे अधिलेखित कर दिया गया है, तो नियंत्रण प्रवाह को नए वापसी पते द्वारा निर्दिष्ट स्थान पर भेज दिया जाता है।
[[File:Call stack layout.svg|thumb|right|upright=1.9|कॉल स्टैक का एक उदाहरण लेआउट जिसमे सबरूटीन ड्रॉ लाइन द्वारा कॉल किया गया है.ध्यान दें कि इस आरेख में स्टैक ऊपर की ओर बढ़ रहा है।]]वापसी-उन्मुख प्रोग्रामिंग स्टैक स्मैश आक्रमण का एक उन्नत संस्करण है। सामान्यतः, इस प्रकार के आक्रमण तब होते हैं जब एक विरोधी प्रोग्राम में [[सॉफ्टवेयर बग|सॉफ्टवेयर दोष]] का लाभ उठाकर कॉल स्टैक का क्रमभंग करता है, प्रायः एक [[बफर ओवररन]] होता है। एक बफ़र ओवररन में, एक फलन जो उपयोगकर्ता द्वारा प्रदान किए गए डेटा को स्मृति में संग्रहीत करने से पहले उचित सीमा जांच नहीं करता है, वह अधिक निविष्ट डेटा को ठीक से स्टोर कर सकता है। यदि डेटा को स्टैक पर लिखा जा रहा है, तो अतिरिक्त डेटा फलन के चर (जैसे, स्टैक आरेख में दाईं ओर 'स्थानीय डाटा') के आवंटित स्थान को ओवरफ्लो कर सकता है और वापसी पते को उपरिलेखित कर सकता है। यह पता बाद में फलन द्वारा कॉलर में नियंत्रण प्रवाह को पुनर्निर्देशित करने के लिए उपयोग किया जाएगा। यदि इसे अधिलेखित कर दिया गया है, तो नियंत्रण प्रवाह को नए वापसी पते द्वारा निर्दिष्ट स्थान पर भेज दिया जाता है।


एक मानक बफ़र ओवररन आक्रमण में, आक्रामक केवल स्टैक [[कोड इंजेक्शन]] को कूटबद्ध करेगा और फिर इन नए लिखित निर्देशों के स्थान के साथ वापसी पते को अधिलेखित कर देगा। 1990 के दशक के अंत तक, प्रमुख [[ऑपरेटिंग सिस्टम]] इन आक्रमणों के सापेक्ष कोई सुरक्षा प्रदान नहीं करते थे; [[Microsoft Windows|माइक्रोसॉफ्ट विंडोज]] ने 2004 तक कोई बफ़र-ओवररन सुरक्षा प्रदान नहीं की।<ref>[https://technet.microsoft.com/en-us/library/cc700810.aspx Microsoft Windows XP SP2 Data Execution Prevention]</ref> आखिरकार, ऑपरेटिंग सिस्टम ने मेमोरी को चिह्नित करके बफर ओवरफ्लो दोष के उपयोग का प्रतिरोध करना शुरू कर दिया, जहां डेटा को गैर-निष्पादन योग्य के रूप में लिखा गया है, एक तकनीक जिसे निष्पादन योग्य स्थान सुरक्षा के रूप में जाना जाता है। इसके सक्षम होने के साथ, यंत्र स्मृति के उपयोगकर्ता-लिखने योग्य क्षेत्रों में स्थित किसी भी कोड को निष्पादित करने से मना कर देगी, आक्रामक को स्टैक पर पेलोड रखने से रोकती है और रिटर्न एड्रेस ओवरराइट के माध्यम से उस पर अधिस्ठापित कर डी जाती है। [[एनएक्स बिट]] बाद में इस सुरक्षा को शक्तिशाली करने के लिए उपलब्ध हो गया।
एक मानक बफ़र ओवररन आक्रमण में, आक्रामक केवल स्टैक [[कोड इंजेक्शन|कूट इंजेक्शन]] को कूटबद्ध करेगा और फिर इन नए लिखित निर्देशों के स्थान के साथ वापसी पते को अधिलेखित कर देगा। 1990 के दशक के अंत तक, प्रमुख [[ऑपरेटिंग सिस्टम|ऑपरेटिंग प्रणाली]] इन आक्रमणों के सापेक्ष कोई सुरक्षा प्रदान नहीं करते थे; [[Microsoft Windows|माइक्रोसॉफ्ट विंडोज]] ने 2004 तक कोई बफ़र-ओवररन सुरक्षा प्रदान नहीं की।<ref>[https://technet.microsoft.com/en-us/library/cc700810.aspx Microsoft Windows XP SP2 Data Execution Prevention]</ref> आखिरकार, ऑपरेटिंग प्रणाली ने मेमोरी को चिह्नित करके बफर ओवरफ्लो दोष के उपयोग का प्रतिरोध करना शुरू कर दिया, जहां डेटा को गैर-निष्पादन योग्य के रूप में लिखा गया है, एक तकनीक जिसे निष्पादन योग्य स्थान सुरक्षा के रूप में जाना जाता है। इसके सक्षम होने के साथ, यंत्र स्मृति के उपयोगकर्ता-लिखने योग्य क्षेत्रों में स्थित किसी भी कूट को निष्पादित करने से मना कर देगी, आक्रामक को स्टैक पर पेलोड रखने से रोकती है और वापसी एड्रेस ओवरराइट के माध्यम से उस पर अधिस्ठापित कर डी जाती है। [[एनएक्स बिट]] बाद में इस सुरक्षा को शक्तिशाली करने के लिए उपलब्ध हो गया।


डेटा निष्पादन रोकथाम के साथ, एक विरोधी सीधे बफ़र में लिखे गए निर्देशों को निष्पादित नहीं कर सकता क्योंकि बफ़र की मेमोरी अनुभाग को गैर-निष्पादन योग्य के रूप में चिह्नित किया गया है। इस सुरक्षा को विफल करने के लिए, एक वापसी-उन्मुख प्रोग्रामिंग अटैक दुर्भावनापूर्ण निर्देशों को इंजेक्ट नहीं करता है, बल्कि रिटर्न पतों में क्रमभंग करके, निष्पादन योग्य मेमोरी में पहले से उपलब्ध निर्देश अनुक्रमों का उपयोग करता है, जिसे गैजेट कहा जाता है। एक विशिष्ट डेटा निष्पादन रोकथाम कार्यान्वयन इस आक्रमण से बचाव नहीं कर सकता है क्योंकि विरोधी सीधे दुर्भावनापूर्ण कोड को निष्पादित नहीं करता है, बल्कि संग्रहीत रिटर्न पतों को परिवर्तित कर उपयुक्त निर्देशों के संयुक्त अनुक्रम करता है; इसलिए उपयोग किए गए कोड को 'निष्पादन योग्य' में चिह्नित किया जाएगा।
डेटा निष्पादन रोकथाम के साथ, एक विरोधी सीधे बफ़र में लिखे गए निर्देशों को निष्पादित नहीं कर सकता क्योंकि बफ़र की मेमोरी अनुभाग को गैर-निष्पादन योग्य के रूप में चिह्नित किया गया है। इस सुरक्षा को विफल करने के लिए, एक वापसी-उन्मुख प्रोग्रामिंग अटैक दुर्भावनापूर्ण निर्देशों को इंजेक्ट नहीं करता है, बल्कि वापसी पतों में क्रमभंग करके, निष्पादन योग्य मेमोरी में पहले से उपलब्ध निर्देश अनुक्रमों का उपयोग करता है, जिसे गैजेट कहा जाता है। एक विशिष्ट डेटा निष्पादन रोकथाम कार्यान्वयन इस आक्रमण से बचाव नहीं कर सकता है क्योंकि विरोधी सीधे दुर्भावनापूर्ण कूट को निष्पादित नहीं करता है, बल्कि संग्रहीत वापसी पतों को परिवर्तित कर उपयुक्त निर्देशों के संयुक्त अनुक्रम करता है; इसलिए उपयोग किए गए कूट को 'निष्पादन योग्य' में चिह्नित किया जाएगा।


=== रिटर्न-इन-लाइब्रेरी तकनीक ===
=== वापसी-इन-लाइब्रेरी तकनीक ===
{{see also|रिटर्न-टू-लिबक आक्रमण}}
{{see also|रिटर्न-टू-लिबक आक्रमण}}


डेटा निष्पादन रोकथाम के व्यापक कार्यान्वयन ने पारंपरिक बफर ओवरफ्लो कमजोरियों को ऊपर वर्णित विधियों से उपयोग करना कठिन या असंभव बना दिया है। इसके अतिरिक्त, एक आक्रामक को पहले से ही निष्पादन योग्य चिह्नित स्मृति में कोड, जैसे स्वयं प्रोग्राम कोड और किसी भी लिंक की गई साझा लाइब्रेरी तक सीमित कर दिया गया था। चूंकि [[साझा पुस्तकालय|साझा लाइब्रेरी]], जैसे कि [[libc]], में प्रायः सिस्टम कॉल करने के लिए सबरूटीन्स होते हैं और अन्य कार्यक्षमता एक आक्रामक के लिए संभावित रूप से उपयोगी होती है, वे एक आक्रमण को एकत्र करने के लिए कोड खोजने के लिए सबसे संभावित उम्मीदवार हैं।
डेटा निष्पादन रोकथाम के व्यापक कार्यान्वयन ने पारंपरिक बफर ओवरफ्लो कमजोरियों को ऊपर वर्णित विधियों से उपयोग करना कठिन या असंभव बना दिया है। इसके अतिरिक्त, एक आक्रामक को पहले से ही निष्पादन योग्य चिह्नित स्मृति में कूट, जैसे स्वयं प्रोग्राम कूट और किसी भी लिंक की गई साझा लाइब्रेरी तक सीमित कर दिया गया था। चूंकि [[साझा पुस्तकालय|साझा लाइब्रेरी]], जैसे कि [[libc]], में प्रायः प्रणाली कॉल करने के लिए सबरूटीन्स होते हैं और अन्य कार्यक्षमता एक आक्रामक के लिए संभावित रूप से उपयोगी होती है, वे एक आक्रमण को एकत्र करने के लिए कूट खोजने के लिए सबसे संभावित उम्मीदवार हैं।


रिटर्न-टू-लाइब्रेरी आक्रमण में, एक आक्रामक बफर ओवररन भेद्यता का प्रयोग करके प्रोग्राम नियंत्रण प्रवाह को हाईजैक कर लेता है, जैसा कि ऊपर चर्चा की गई है। स्टैक पर आक्रमण पेलोड लिखने का प्रयास करने के अतिरिक्त, आक्रामक एक उपलब्ध लाइब्रेरी फलन चुनता है और इसके प्रवेश स्थान के साथ रिटर्न पते को उपरिलेखित करता है। आगे के स्टैक स्थानों को अधिलेखित किया जाता है, प्रायोजित कॉलिंग विधियों का पालन करते हुए, फलन को उचित मापदंडों को ध्यान से प्रेषित करने के लिए, जिससे यह आक्रामक के लिए उपयोगी कार्यक्षमता का प्रदर्शन करे। इस तकनीक को पहली बार [[सौर डिजाइनर]] द्वारा 1997 में प्रस्तुत किया गया था,<ref>Solar Designer, [http://seclists.org/bugtraq/1997/Aug/63 ''Return-into-lib(c) exploits''], Bugtraq</ref> और बाद में इसे फंक्शन कॉल्स की असीमित श्रंखला तक बढ़ा दिया गया।<ref>Nergal, Phrack 58 Article 4, ''[http://phrack.org/issues/58/4.html return-into-lib(c) exploits]''</ref>
वापसी-टू-लाइब्रेरी आक्रमण में, एक आक्रामक बफर ओवररन भेद्यता का प्रयोग करके प्रोग्राम नियंत्रण प्रवाह को हाईजैक कर लेता है, जैसा कि ऊपर चर्चा की गई है। स्टैक पर आक्रमण पेलोड लिखने का प्रयास करने के अतिरिक्त, आक्रामक एक उपलब्ध लाइब्रेरी फलन चुनता है और इसके प्रवेश स्थान के साथ वापसी पते को उपरिलेखित करता है। आगे के स्टैक स्थानों को अधिलेखित किया जाता है, प्रायोजित कॉलिंग विधियों का पालन करते हुए, फलन को उचित मापदंडों को ध्यान से प्रेषित करने के लिए, जिससे यह आक्रामक के लिए उपयोगी कार्यक्षमता का प्रदर्शन करे। इस तकनीक को पहली बार [[सौर डिजाइनर]] द्वारा 1997 में प्रस्तुत किया गया था,<ref>Solar Designer, [http://seclists.org/bugtraq/1997/Aug/63 ''Return-into-lib(c) exploits''], Bugtraq</ref> और बाद में इसे फंक्शन कॉल्स की असीमित श्रंखला तक बढ़ा दिया गया।<ref>Nergal, Phrack 58 Article 4, ''[http://phrack.org/issues/58/4.html return-into-lib(c) exploits]''</ref>




=== उधार कोड भाग ===
=== उधार कूट भाग ===
64-बिट x86 प्रोसेसर के उदय ने अपने साथ सबरूटीन कॉलिंग प्रयोग में कई परिवर्तन लाए, जिसके लिए स्टैक के अतिरिक्त [[प्रोसेसर रजिस्टर]] में पारित होने के लिए फलन के पहले तर्क की आवश्यकता थी। इसका तात्पर्य यह था कि एक आक्रामक केवल बफर ओवररन प्रयोग के माध्यम से कॉल स्टैक का क्रमभंग करके वांछित तर्कों के साथ लाइब्रेरी फलन कॉल समायोजित नहीं कर सकता था। साझा लाइब्रेरी डेवलपर्स ने उन लाइब्रेरी फ़ंक्शंस को हटाना या प्रतिबंधित करना भी प्रारंभ कर दिया, जो किसी आक्रामक के लिए विशेष रूप से उपयोगी कार्य करते थे, जैसे कि [[सिस्टम कॉल]] रैपर आदि। नतीजतन, रिटर्न-इन-लाइब्रेरी आक्रमणों को सफलतापूर्वक आरोपित करना अधिक कठिन हो गया।
64-बिट x86 प्रोसेसर के उदय ने अपने साथ सबरूटीन कॉलिंग प्रयोग में कई परिवर्तन लाए, जिसके लिए स्टैक के अतिरिक्त [[प्रोसेसर रजिस्टर]] में पारित होने के लिए फलन के पहले तर्क की आवश्यकता थी। इसका तात्पर्य यह था कि एक आक्रामक केवल बफर ओवररन प्रयोग के माध्यम से कॉल स्टैक का क्रमभंग करके वांछित तर्कों के साथ लाइब्रेरी फलन कॉल समायोजित नहीं कर सकता था। साझा लाइब्रेरी डेवलपर्स ने उन लाइब्रेरी फ़ंक्शंस को हटाना या प्रतिबंधित करना भी प्रारंभ कर दिया, जो किसी आक्रामक के लिए विशेष रूप से उपयोगी कार्य करते थे, जैसे कि [[सिस्टम कॉल|प्रणाली कॉल]] रैपर आदि। नतीजतन, वापसी-इन-लाइब्रेरी आक्रमणों को सफलतापूर्वक आरोपित करना अधिक कठिन हो गया।


अगला विकास एक आक्रमण के रूप में आया, जिसमें सरल आक्रमणों के सापेक्ष बचाव के साथ यंत्रों पर बफर ओवररन कमजोरियों का लाभ उठाने के लिए, स्वयं पूरे कार्यों के अतिरिक्त, लाइब्रेरी कार्यों के भाग का उपयोग किया गया।<ref>Sebastian Krahmer, ''[http://users.suse.com/~krahmer/no-nx.pdf x86-64 buffer overflow exploits and the borrowed code chunks exploitation technique]'', September 28, 2005</ref> यह तकनीक उन कार्यों की खोज करती है जिनमें निर्देश अनुक्रम होते हैं जो स्टैक से रजिस्टरों में मानों को प्रकट करते हैं। इन कोड अनुक्रमों का सावधानीपूर्वक चयन एक आक्रामक को नए कॉलिंग प्रयोग के तहत फलन कॉल करने के लिए उचित रजिस्टरों में उपयुक्त मान प्रेषित करने की अनुमति देता है। अन्य आक्रमण लाइब्रेरी में वापसी आक्रमण के रूप में आगे बढ़ता है।
अगला विकास एक आक्रमण के रूप में आया, जिसमें सरल आक्रमणों के सापेक्ष बचाव के साथ यंत्रों पर बफर ओवररन कमजोरियों का लाभ उठाने के लिए, स्वयं पूरे कार्यों के अतिरिक्त, लाइब्रेरी कार्यों के भाग का उपयोग किया गया।<ref>Sebastian Krahmer, ''[http://users.suse.com/~krahmer/no-nx.pdf x86-64 buffer overflow exploits and the borrowed code chunks exploitation technique]'', September 28, 2005</ref> यह तकनीक उन कार्यों की खोज करती है जिनमें निर्देश अनुक्रम होते हैं जो स्टैक से रजिस्टरों में मानों को प्रकट करते हैं। इन कूट अनुक्रमों का सावधानीपूर्वक चयन एक आक्रामक को नए कॉलिंग प्रयोग के तहत फलन कॉल करने के लिए उचित रजिस्टरों में उपयुक्त मान प्रेषित करने की अनुमति देता है। अन्य आक्रमण लाइब्रेरी में वापसी आक्रमण के रूप में आगे बढ़ता है।


== आक्रमण ==
== आक्रमण ==
वापसी-उन्मुख प्रोग्रामिंग उधार कोड चंक्स प्रस्ताव पर निर्मित होता है और [[लूप (कंप्यूटिंग)|लूप संगणनीयता]] और [[सशर्त शाखा]]ओं सहित आक्रामक को [[ट्यूरिंग पूर्ण]] कार्यक्षमता प्रदान करने के लिए इसका विस्तार करता है।<ref>{{Cite book | doi = 10.1145/1102120.1102165| chapter = Control-Flow Integrity: Principles, Implementations, and Applications| title = Proceedings of the 12th ACM conference on Computer and communications security - CCS '05| pages = 340–353| date=November 2005 | last1 = Abadi | first1 = M. N. | last2 = Budiu | first2 = M. | last3 = Erlingsson | first3 = Ú. | last4 = Ligatti | first4 = J. | isbn = 1-59593-226-7| s2cid = 3339874}}</ref><ref>{{Cite journal | doi = 10.1145/1609956.1609960| title = Control-flow integrity principles, implementations, and applications| journal = ACM Transactions on Information and System Security| volume = 13| pages = 1–40| date=October 2009 | last1 = Abadi | first1 = M. N. | last2 = Budiu | first2 = M. | last3 = Erlingsson | first3 = Ú. | last4 = Ligatti | first4 = J. | s2cid = 207175177}}</ref> दूसरे विधि से कहे तों, वापसी-उन्मुख प्रोग्रामिंग एक पूरी तरह कार्यात्मक भाषा प्रदान करती है जिसका उपयोग एक आक्रामक किसी समझौता यंत्र को वांछित संक्रिया करने के लिए कर सकता है। होवव शाचम ने 2007 में तकनीक प्रकाशित की<ref name="fleshonbone">{{Cite book | doi = 10.1145/1315245.1315313| chapter = The geometry of innocent flesh on the bone: return-into-libc without function calls (on the x86)| title = Proceedings of the 14th ACM conference on Computer and communications security - CCS '07| pages = 552–561| date=October 2007 | last1 = Shacham | first1 = H. | isbn = 978-1-59593-703-2| s2cid = 11639591}}</ref> और प्रदर्शित किया कि कैसे सी मानक लाइब्रेरी से जुड़े लक्ष्य एप्लिकेशन के खिलाफ वापसी-उन्मुख प्रोग्रामिंग का उपयोग करके सभी महत्वपूर्ण प्रोग्रामिंग निर्माणों का अनुकरण किया जा सकता है और एक प्रयोग बफर ओवररन भेद्यता को सम्मिलित करता है।
वापसी-उन्मुख प्रोग्रामिंग उधार कूट चंक्स प्रस्ताव पर निर्मित होता है और [[लूप (कंप्यूटिंग)|लूप संगणनीयता]] और [[सशर्त शाखा]]ओं सहित आक्रामक को [[ट्यूरिंग पूर्ण]] कार्यक्षमता प्रदान करने के लिए इसका विस्तार करता है।<ref>{{Cite book | doi = 10.1145/1102120.1102165| chapter = Control-Flow Integrity: Principles, Implementations, and Applications| title = Proceedings of the 12th ACM conference on Computer and communications security - CCS '05| pages = 340–353| date=November 2005 | last1 = Abadi | first1 = M. N. | last2 = Budiu | first2 = M. | last3 = Erlingsson | first3 = Ú. | last4 = Ligatti | first4 = J. | isbn = 1-59593-226-7| s2cid = 3339874}}</ref><ref>{{Cite journal | doi = 10.1145/1609956.1609960| title = Control-flow integrity principles, implementations, and applications| journal = ACM Transactions on Information and System Security| volume = 13| pages = 1–40| date=October 2009 | last1 = Abadi | first1 = M. N. | last2 = Budiu | first2 = M. | last3 = Erlingsson | first3 = Ú. | last4 = Ligatti | first4 = J. | s2cid = 207175177}}</ref> दूसरे विधि से कहे तों, वापसी-उन्मुख प्रोग्रामिंग एक पूरी तरह कार्यात्मक भाषा प्रदान करती है जिसका उपयोग एक आक्रामक किसी समझौता यंत्र को वांछित संक्रिया करने के लिए कर सकता है। होवव शाचम ने 2007 में तकनीक प्रकाशित की<ref name="fleshonbone">{{Cite book | doi = 10.1145/1315245.1315313| chapter = The geometry of innocent flesh on the bone: return-into-libc without function calls (on the x86)| title = Proceedings of the 14th ACM conference on Computer and communications security - CCS '07| pages = 552–561| date=October 2007 | last1 = Shacham | first1 = H. | isbn = 978-1-59593-703-2| s2cid = 11639591}}</ref> और प्रदर्शित किया कि कैसे सी मानक लाइब्रेरी से जुड़े लक्ष्य एप्लिकेशन के सापेक्ष वापसी-उन्मुख प्रोग्रामिंग का उपयोग करके सभी महत्वपूर्ण प्रोग्रामिंग निर्माणों का अनुकरण किया जा सकता है और एक प्रयोग बफर ओवररन भेद्यता को सम्मिलित करता है।


वापसी-उन्मुख प्रोग्रामिंग आक्रमण अभिव्यंजक शक्ति और रक्षात्मक उपायों के प्रतिरोध दोनों में चर्चा किए गए अन्य आक्रमण प्रकारों से उपयुक्त है। साझा लाइब्रेरीों से संभावित रूप से खतरनाक कार्यों को पूरी तरह से हटाने सहित ऊपर वर्णित प्रति-प्रयोग तकनीकों में से कोई भी वापसी-उन्मुख प्रोग्रामिंग आक्रमण के सापेक्ष प्रभावी नहीं है।
वापसी-उन्मुख प्रोग्रामिंग आक्रमण अभिव्यंजक शक्ति और रक्षात्मक उपायों के प्रतिरोध दोनों में चर्चा किए गए अन्य आक्रमण प्रकारों से उपयुक्त है। साझा लाइब्रेरीों से संभावित रूप से खतरनाक कार्यों को पूरी तरह से हटाने सहित ऊपर वर्णित प्रति-प्रयोग तकनीकों में से कोई भी वापसी-उन्मुख प्रोग्रामिंग आक्रमण के सापेक्ष प्रभावी नहीं है।


=== x86-आर्किटेक्चर === पर
=== x86-स्थापत्य पर ===
हालांकि विभिन्न प्रकार के आर्किटेक्चर पर वापसी-उन्मुख प्रोग्रामिंग आक्रमण किए जा सकते हैं,<ref name="fleshonbone" />Shacham का पेपर और अधिकांश अनुवर्ती कार्य Intel x[[86]] आर्किटेक्चर पर केंद्रित हैं। x86 आर्किटेक्चर एक वेरिएबल-लेंथ [[जटिल निर्देश सेट कंप्यूटिंग]] इंस्ट्रक्शन सेट है। x86 पर वापसी-उन्मुख प्रोग्रामिंग इस तथ्य का लाभ उठाती है कि निर्देश सेट बहुत सघन है, अर्थात, बाइट्स के किसी भी यादृच्छिक क्रम को x86 निर्देशों के कुछ वैध सेट के रूप में व्याख्या करने की संभावना है।
यद्यपि विभिन्न प्रकार के स्थापत्य पर वापसी-उन्मुख प्रोग्रामिंग आक्रमण किए जा सकते हैं,<ref name="fleshonbone" />शाचम के लेख और अधिकांश अनुवर्ती कार्य, इंटेल x[[86]] स्थापत्य पर केंद्रित हैं। x86 स्थापत्य एक चर-लंबाई [[जटिल निर्देश सेट कंप्यूटिंग|जटिल निर्देश समुच्चय संगणनीयता]] निर्देश समुच्चय है। x86 पर वापसी-उन्मुख प्रोग्रामिंग इस तथ्य का लाभ उठाती है कि निर्देश समुच्चय अत्यधिक सघन है, अर्थात, बाइट्स के किसी भी यादृच्छिक क्रम को x86 निर्देशों के कुछ वैध समुच्चय के रूप में व्याख्या करने की संभावना है।


इसलिए एक [[opcode]] की खोज करना संभव है जो नियंत्रण प्रवाह को बदलता है, विशेष रूप से रिटर्न इंस्ट्रक्शन (0xC3) और फिर पूर्ववर्ती बाइट्स के लिए बाइनरी में पीछे की ओर देखें जो संभवतः उपयोगी निर्देश बनाते हैं। निर्देश गैजेट के इन सेटों को पहले गैजेट के पहले निर्देश के पते के साथ, एक बफर ओवररन प्रयोग के माध्यम से रिटर्न एड्रेस को ओवरराइट करके जंजीर से बांधा जा सकता है। इसके बाद बाद के गैजेट्स का पहला पता स्टैक पर क्रमिक रूप से लिखा जाता है। पहले गैजेट के समापन पर, एक वापसी निर्देश निष्पादित किया जाएगा, जो स्टैक से अगले गैजेट के पते को पॉप करेगा और उस पर कूद जाएगा। उस गैजेट के समापन पर, श्रृंखला तीसरे के साथ जारी रहती है, और इसी तरह। छोटे अनुदेश अनुक्रमों का पीछा करके, एक आक्रामक पूर्व-उपलब्धा लाइब्रेरी कोड से मनमाना कार्यक्रम व्यवहार उत्पन्न करने में सक्षम होता है। Shacham का दावा है कि किसी भी पर्याप्त मात्रा में कोड (सी मानक लाइब्रेरी सहित, लेकिन सीमित नहीं) दिया गया है, ट्यूरिंग-पूर्ण कार्यक्षमता के लिए पर्याप्त गैजेट उपलब्ध होंगे।<ref name="fleshonbone" />
इसलिए ऐसे [[opcode|ऑपकूट]] की खोज करना संभव है जो नियंत्रण प्रवाह को परिवर्तित करता है, विशेष रूप से वापसी निर्देश (0xC3) और पुनः पूर्ववर्ती बाइट्स के लिए द्विआधारी निर्देश जो संभवतः उपयोगी निर्देश बनाते हैं। निर्देश गैजेट के इन समुच्चयों को पहले गैजेट के पहले निर्देश के पते के साथ, एक बफर ओवररन प्रयोग के माध्यम से वापसी पते को उपरिलेखित करके जंजीर से बांधा जा सकता है। इसके उपरांत, बाद के गैजेट्स का पहला पता स्टैक पर क्रमिक रूप से लिखा जाता है। पहले गैजेट के समापन पर, एक वापसी निर्देश निष्पादित किया जाएगा, जो स्टैक से अगले गैजेट के पते को प्रेषित करेगा और उस पर स्थित हों जाएगा। उस गैजेट के समापन पर, श्रृंखला तीसरे के साथ जारी रहती है, और इसी तरह आगे भी कार्य करती रहती है। छोटे अनुदेश अनुक्रमों का पीछा करके, एक आक्रामक पूर्व-उपलब्ध लाइब्रेरी कूट से यादृच्छिक कार्यक्रम व्यवहार उत्पन्न करने में सक्षम होता है। शाचम का दावा है कि किसी भी पर्याप्त मात्रा में कूट (सी मानक लाइब्रेरी सहित, परंतु सीमित नहीं) के सापेक्ष, ट्यूरिंग-पूर्ण कार्यक्षमता के लिए पर्याप्त गैजेट उपलब्ध होंगे।<ref name="fleshonbone" />


गैजेट का पता लगाने की प्रक्रिया को स्वचालित करने और बाइनरी के खिलाफ आक्रमण के निर्माण में मदद के लिए एक स्वचालित उपकरण विकसित किया गया है।<ref>Jonathan Salwan and Allan Wirth, ''[http://shell-storm.org/project/ROPgadget/ ROPgadget - Gadgets finder and auto-roper]''</ref> ROPgadget के रूप में जाना जाने वाला यह उपकरण, संभावित उपयोगी गैजेट्स की तलाश में एक बाइनरी के माध्यम से खोज करता है, और उन्हें एक आक्रमण के पेलोड में इकट्ठा करने का प्रयास करता है जो आक्रामक से मनमाना आदेश स्वीकार करने के लिए एक खोल पैदा करता है।
गैजेट का पता लगाने की प्रक्रिया को स्वचालित करने और द्विआधारी के सापेक्ष आक्रमण के निर्माण में मदद के लिए एक स्वचालित उपकरण विकसित किया गया है।<ref>Jonathan Salwan and Allan Wirth, ''[http://shell-storm.org/project/ROPgadget/ ROPgadget - Gadgets finder and auto-roper]''</ref> आरओपी गैजेट के रूप में जाना जाने वाला यह उपकरण, संभावित उपयोगी गैजेट्स की खोज द्विआधारी  के माध्यम से करता है, और उन्हें एक आक्रमण के पेलोड में एकत्र करने का प्रयास करता है जो आक्रामक से यादृच्छिक निर्देश को स्वीकार करने के लिए एक आवरण उत्पन्न करता है।


<nowiki>===</nowiki> [[एड्रेस स्पेस लेआउट रैंडमाइजेशन]] === पर
=== [[एड्रेस स्पेस लेआउट रैंडमाइजेशन|पता स्थान अभिविन्यास यादृच्छिकीकरण]] पर ===
एड्रेस स्पेस लेआउट रैंडमाइजेशन में भी कमजोरियां हैं। शाचम एट अल। के पेपर के अनुसार,<ref>[Shacham et al., 2004] Hovav Shacham, Matthew Page, Ben Pfaff, Eu-Jin Goh, Nagendra Modadugu, and Dan Boneh. On the effectiveness of address-space randomization. In Proceedings of the 11th ACM conference on Computer and Communications Security (CCS), 2004.</ref> 32-बिट आर्किटेक्चर पर ASLR एड्रेस रेंडमाइजेशन के लिए उपलब्ध बिट्स की संख्या से सीमित है। 32 एड्रेस बिट्स में से केवल 16 रैंडमाइजेशन के लिए उपलब्ध हैं, और 16 बिट्स एड्रेस रैंडमाइजेशन को मिनटों में ब्रूट फोर्स अटैक से हराया जा सकता है। 64-बिट आर्किटेक्चर अधिक मजबूत हैं, 64 बिट्स में से 40 रैंडमाइजेशन के लिए उपलब्ध हैं। 40-बिट रेंडमाइजेशन के लिए क्रूर बल का आक्रमण संभव है, लेकिन किसी का ध्यान नहीं जाने की संभावना नहीं है{{Citation needed|date=December 2022}}. ब्रूट फ़ोर्स अटैक के अलावा, Randomized_algorithm#Derandomization के लिए तकनीकें उपलब्ध हैं।
पता स्थान अभिविन्यास यादृच्छिकीकरण में भी कमजोरियां हैं। शाचम एट अल के लेख के अनुसार,<ref>[Shacham et al., 2004] Hovav Shacham, Matthew Page, Ben Pfaff, Eu-Jin Goh, Nagendra Modadugu, and Dan Boneh. On the effectiveness of address-space randomization. In Proceedings of the 11th ACM conference on Computer and Communications Security (CCS), 2004.</ref> 32-बिट स्थापत्य पर एएसएलआर पता [[एड्रेस स्पेस लेआउट रैंडमाइजेशन|यादृच्छिकीकरण]] के लिए उपलब्ध बिट्स की संख्या से सीमित है। 32 एड्रेस बिट्स में से मात्र 16 यादृच्छिकीकरण के लिए उपलब्ध हैं, और 16 बिट्स पता यादृच्छिकीकरण को मिनटों में ब्रूट फोर्स आक्रमण से हराया जा सकता है। 64-बिट स्थापत्य अधिक शक्तिशाली हैं, 64 बिट्स में से 40 यादृच्छिकीकरण के लिए उपलब्ध हैं। 40-बिट यादृच्छिकीकरण के लिए क्रूर बल का आक्रमण संभव है, परंतु किसी का ध्यान नहीं जाने की संभावना नहीं है. ब्रूट फ़ोर्स आक्रमण के अतिरिक्त, यादृच्छिकीकरण को हटाने के लिए तकनीकें उपलब्ध हैं।


यहां तक ​​​​कि सही यादृच्छिककरण के साथ, यदि स्मृति सामग्री का कोई रिसाव होता है तो यह रनटाइम पर लाइब्रेरी (कंप्यूटिंग) # साझा लाइब्रेरीों के उदाहरण के आधार पते की गणना करने में मदद करेगा।<ref>[Bennett et al., 2013] James Bennett, Yichong Lin, and Thoufique Haq. The Number of the Beast, 2013. https://www.fireeye.com/blog/threat-research/2013/02/the-number-of-the-beast.html</ref>
यहां तक ​​​​कि सही यादृच्छिककरण के साथ, यदि स्मृति सामग्री का कोई रिसाव होता है तो यह रनटाइम पर साझा लाइब्रेरीों के उदाहरण के आधार पते की गणना करने में मदद करेगा।<ref>[Bennett et al., 2013] James Bennett, Yichong Lin, and Thoufique Haq. The Number of the Beast, 2013. https://www.fireeye.com/blog/threat-research/2013/02/the-number-of-the-beast.html</ref>




=== वापसी निर्देश के उपयोग के बिना ===
=== वापसी निर्देश के उपयोग के बिना ===
चेकोवे एट अल के पेपर के अनुसार,<ref>CHECKOWAY, S., DAVI, L., DMITRIENKO, A., SADEGHI, A.-R., SHACHAM, H., AND WINANDY, M. 2010. Return-oriented programming without returns. In Proceedings of CCS 2010, A. Keromytis and V. Shmatikov, Eds. ACM Press, 559–72</ref> रिटर्न इंस्ट्रक्शन (x86 पर 0xC3) का उपयोग किए बिना x86 और ARM आर्किटेक्चर पर रिटर्न-ओरिएंटेड-प्रोग्रामिंग करना संभव है। इसके अतिरिक्त उन्होंने सावधानी से तैयार किए गए निर्देश अनुक्रमों का उपयोग किया जो पहले से ही यंत्र की मेमोरी में रिटर्न निर्देश की तरह व्यवहार करने के लिए उपलब्ध हैं। एक वापसी निर्देश के दो प्रभाव होते हैं: सबसे पहले, यह स्टैक के शीर्ष पर चार-बाइट मान को पढ़ता है, और निर्देश सूचक को उस मान पर सेट करता है, और दूसरा, यह स्टैक सूचक मान को चार से बढ़ाता है (एक पॉप संक्रिया के बराबर) . X86 आर्किटेक्चर पर, jmp और पॉप निर्देशों के क्रम वापसी निर्देश के रूप में कार्य कर सकते हैं। एआरएम पर, लोड और शाखा निर्देशों के अनुक्रम वापसी निर्देश के रूप में कार्य कर सकते हैं।
चेकोवे एट अल के लेख के अनुसार,<ref>CHECKOWAY, S., DAVI, L., DMITRIENKO, A., SADEGHI, A.-R., SHACHAM, H., AND WINANDY, M. 2010. Return-oriented programming without returns. In Proceedings of CCS 2010, A. Keromytis and V. Shmatikov, Eds. ACM Press, 559–72</ref> वापसी निर्देश x86 पर 0xC3 का उपयोग किए बिना x86 और एआरएम स्थापत्य पर वापसी-उन्मुख प्रोग्रामिंग करना संभव है। इसके अतिरिक्त उन्होंने सावधानी से तैयार किए गए निर्देश अनुक्रमों का उपयोग किया जो पहले से ही यंत्र की मेमोरी में वापसी निर्देश की तरह व्यवहार करने के लिए उपलब्ध हैं। एक वापसी निर्देश के दो प्रभाव होते हैं: सबसे पहले, यह स्टैक के शीर्ष पर चार-बाइट मान को पढ़ता है, और निर्देश सूचक को उस मान पर समुच्चय करता है, और दूसरा, यह स्टैक सूचक मान को चार से बढ़ाता है यह एक पॉप संक्रिया के समान.X86 स्थापत्य पर, jmp और पॉप निर्देशों के क्रम वापसी निर्देश के रूप में कार्य कर सकते हैं। एआरएम पर, लोड और शाखा निर्देशों के अनुक्रम वापसी निर्देश के रूप में कार्य कर सकते हैं।


चूंकि यह नया दृष्टिकोण वापसी निर्देश का उपयोग नहीं करता है, इसका रक्षा के लिए नकारात्मक प्रभाव पड़ता है। जब एक रक्षा कार्यक्रम न केवल कई रिटर्न बल्कि कई जंप निर्देशों के लिए भी जांच करता है, तो इस आक्रमण का पता लगाया जा सकता है।
चूंकि यह नया प्रस्ताव, वापसी निर्देश का उपयोग नहीं करता है, इसके रक्षा के सापेक् नकारात्मक प्रभाव डालता है। जब एक रक्षा फलन न केवल कई वापसी बल्कि कई जंप निर्देशों के सापेक्ष भी जांच करता है, तो इस आक्रमण का पता लगाया जा सकता है।


== बचाव ==
== बचाव ==
Line 50: Line 50:
=== जी-मुक्त ===
=== जी-मुक्त ===


जी-फ्री तकनीक का विकास कान ओनारलियोग्लू, लेयला बिल्गे, एंड्रिया लांजी, डेविड बालजारोटी और एंगिन किर्डा ने किया था। यह वापसी-उन्मुख प्रोग्रामिंग के किसी भी संभावित रूप के खिलाफ एक व्यावहारिक समाधान है। समाधान सभी असंरेखित मुक्त-शाखा निर्देशों (आरईटी या कॉल जैसे निर्देश जो आक्रामक नियंत्रण प्रवाह को बदलने के लिए उपयोग कर सकते हैं) को एक बाइनरी निष्पादन योग्य के अंदर समाप्त कर देता है, और मुक्त-शाखा निर्देशों को एक आक्रामक द्वारा उपयोग किए जाने से बचाता है। जिस तरह से जी-फ्री रिटर्न एड्रेस की सुरक्षा करता है वह स्टैकगार्ड द्वारा कार्यान्वित बफर ओवरफ्लो सुरक्षा # रैंडम एक्सओआर कैनरी के समान है। इसके अलावा, यह सत्यापन ब्लॉक जोड़कर फलन कॉल की प्रामाणिकता की जांच करता है। यदि अपेक्षित परिणाम नहीं मिलता है, तो जी-फ्री एप्लिकेशन को क्रैश करने का कारण बनता है।<ref>ONARLIOGLU, K., BILGE, L., LANZI, A., BALZAROTTI, D., AND KIRDA, E. 2010. G-Free: Defeating return-oriented programming through gadget-less binaries. In Proceedings of ACSAC 2010, M. Franz and J. McDermott, Eds. ACM Press, 49–58.</ref>
जी-मुक्त तकनीक का विकास कान ओनारलियोग्लू, लेयला बिल्गे, एंड्रिया लांजी, डेविड बालजारोटी और एंगिन किर्डा ने किया था। यह वापसी-उन्मुख प्रोग्रामिंग के किसी भी संभावित रूप के सापेक्ष एक व्यावहारिक समाधान है। समाधान सभी असंरेखित मुक्त-शाखा निर्देशों (आरईटी या कॉल जैसे निर्देश जो आक्रामक नियंत्रण प्रवाह को परिवर्तित करने के लिए उपयोग कर सकते हैं) को एक द्विआधारी निष्पादन योग्य संक्रिया के भीतर समाप्त कर देता है, और मुक्त-शाखा निर्देशों को आक्रामक द्वारा उपयोग किए जाने से बचाता है। जिस तरह से जी-मुक्त वापसी पते की सुरक्षा करता है वह स्टैकगार्ड द्वारा कार्यान्वित बफर ओवरफ्लो सुरक्षा रैंडम एक्सओआर कैनरी के समान है। इसके अतिरिक्त, यह सत्यापन ब्लॉक जोड़कर फलन कॉल की प्रामाणिकता की जांच करता है। यदि अपेक्षित परिणाम नहीं मिलता है, तो जी-मुक्त एप्लिकेशन को क्रैश करने का कारण बनता है।<ref>ONARLIOGLU, K., BILGE, L., LANZI, A., BALZAROTTI, D., AND KIRDA, E. 2010. G-Free: Defeating return-oriented programming through gadget-less binaries. In Proceedings of ACSAC 2010, M. Franz and J. McDermott, Eds. ACM Press, 49–58.</ref>




=== पता स्थान लेआउट यादृच्छिकीकरण ===
=== पता स्थान प्रारूप यादृच्छिकीकरण ===


वापसी-उन्मुख प्रोग्रामिंग के आधार पर हमलों को कम करने के लिए कई तकनीकों का प्रस्ताव दिया गया है।<ref>{{Cite book | doi = 10.1007/978-3-642-41284-4_5 | chapter = Systematic Analysis of Defenses against Return-Oriented Programming | title = Research in Attacks, Intrusions, and Defenses | volume = 8145 | pages = 82–102 | series = Lecture Notes in Computer Science | date = October 2013 | last1 = Skowyra | first1 = R. | last2 = Casteel | first2 = K. | last3 = Okhravi | first3 = H. | last4 = Zeldovich | first4 = N. | last5 = Streilein | first5 = W. | isbn = 978-3-642-41283-7 | chapter-url = http://web.mit.edu/ha22286/www/papers/conference/Systematic_Analysis_of_Defenses_Against_Return_Oriented_Programming.pdf | url-status = dead | archive-url = https://web.archive.org/web/20140222184230/http://web.mit.edu/ha22286/www/papers/conference/Systematic_Analysis_of_Defenses_Against_Return_Oriented_Programming.pdf | archive-date = 2014-02-22 }}</ref> अधिकांश प्रोग्राम और लाइब्रेरी कोड के स्थान को रैंडमाइज़ करने पर निर्भर करते हैं, ताकि एक आक्रामक उन निर्देशों के स्थान का सटीक अनुमान न लगा सके जो गैजेट में उपयोगी हो सकते हैं और इसलिए एक सफल वापसी-उन्मुख प्रोग्रामिंग अटैक चेन को माउंट नहीं कर सकते हैं। इस तकनीक का एक काफी सामान्य कार्यान्वयन, एड्रेस स्पेस लेआउट रेंडमाइजेशन (एएसएलआर), साझा लाइब्रेरीों को प्रत्येक प्रोग्राम लोड पर एक अलग मेमोरी लोकेशन में लोड करता है। हालांकि आधुनिक ऑपरेटिंग सिस्टम द्वारा व्यापक रूप से तैनात किया गया है, एएसएलआर स्मृति में किसी भी ज्ञात लाइब्रेरी फलन का पता निर्धारित करने के लिए सूचना रिसाव हमलों और अन्य दृष्टिकोणों के प्रति संवेदनशील है। यदि एक आक्रामक एक ज्ञात निर्देश के स्थान को सफलतापूर्वक निर्धारित कर सकता है, तो अन्य सभी की स्थिति का अनुमान लगाया जा सकता है और एक वापसी-उन्मुख प्रोग्रामिंग आक्रमण का निर्माण किया जा सकता है।
वापसी-उन्मुख प्रोग्रामिंग के आधार पर आक्रमणों को कम करने के लिए कई तकनीकों का प्रस्ताव दिया गया है।<ref>{{Cite book | doi = 10.1007/978-3-642-41284-4_5 | chapter = Systematic Analysis of Defenses against Return-Oriented Programming | title = Research in Attacks, Intrusions, and Defenses | volume = 8145 | pages = 82–102 | series = Lecture Notes in Computer Science | date = October 2013 | last1 = Skowyra | first1 = R. | last2 = Casteel | first2 = K. | last3 = Okhravi | first3 = H. | last4 = Zeldovich | first4 = N. | last5 = Streilein | first5 = W. | isbn = 978-3-642-41283-7 | chapter-url = http://web.mit.edu/ha22286/www/papers/conference/Systematic_Analysis_of_Defenses_Against_Return_Oriented_Programming.pdf | url-status = dead | archive-url = https://web.archive.org/web/20140222184230/http://web.mit.edu/ha22286/www/papers/conference/Systematic_Analysis_of_Defenses_Against_Return_Oriented_Programming.pdf | archive-date = 2014-02-22 }}</ref> अधिकांश प्रोग्राम और लाइब्रेरी कूट के स्थान को यादृच्छिकीकरण करने पर निर्भर करते हैं, जिससे एक आक्रामक उन निर्देशों के स्थान का सटीक अनुमान न लगा सके जो उपकरण में उपयोगी हो सकते हैं और इसलिए एक सफल वापसी-उन्मुख प्रोग्रामिंग आक्रमण शृंखला का प्रयोग नहीं कर सकते हैं। इस तकनीक का अत्यधिक सामान्य कार्यान्वयन, पता स्थान प्रारूप यादृच्छिकीकरण (एएसएलआर), साझा लाइब्रेरीों को प्रत्येक प्रोग्राम लोड पर अन्य मेमोरी स्थान में लोड करता है। यद्यपि यह आधुनिक ऑपरेटिंग प्रणाली द्वारा व्यापक रूप से स्थित किया गया है, एएसएलआर स्मृति में किसी भी ज्ञात लाइब्रेरी फलन का पता निर्धारित करने के लिए सूचना रिसाव आक्रमणों और अन्य प्रस्तावों के प्रति संवेदनशील है। यदि एक आक्रामक एक ज्ञात निर्देश के स्थान को सफलतापूर्वक निर्धारित कर सकता है, तो अन्य सभी की स्थिति का अनुमान लगाया जा सकता है और एक वापसी-उन्मुख प्रोग्रामिंग आक्रमण का निर्माण किया जा सकता है।


केवल लाइब्रेरी स्थानों के अतिरिक्त प्रोग्राम के सभी निर्देशों और/या अन्य प्रोग्राम स्टेट (रजिस्टरों और स्टैक ऑब्जेक्ट्स) को अलग-अलग स्थानांतरित करके इस यादृच्छिककरण दृष्टिकोण को आगे बढ़ाया जा सकता है।<ref>{{Cite journal|last1=Venkat|first1=Ashish|last2=Shamasunder|first2=Sriskanda|last3=Shacham|first3=Hovav|last4=Tullsen|first4=Dean M.|date=2016-01-01|title=HIPStR: Heterogeneous-ISA Program State Relocation|journal=Proceedings of the Twenty-First International Conference on Architectural Support for Programming Languages and Operating Systems|series=ASPLOS '16|location=New York, NY, USA|publisher=ACM|pages=727–741|doi=10.1145/2872362.2872408|isbn=9781450340915|s2cid=7853786}}</ref><ref>{{Cite book | doi = 10.1109/SP.2012.39| chapter = ILR: Where'd My Gadgets Go?| title = 2012 IEEE Symposium on Security and Privacy| pages = 571–585| date=May 2012 | last1 = Hiser | first1 = J. | last2 = Nguyen-Tuong | first2 = A. | last3 = Co | first3 = M. | last4 = Hall | first4 = M. | last5 = Davidson | first5 = J. W. | isbn = 978-1-4673-1244-8| s2cid = 15696223}}</ref><ref>{{cite patent|country=US|number=9135435|title=Binary translator driven program state relocation|pubdate=2015-09-15|assign1=[[Intel Corp.]]|inventor1-last=Venkat|inventor1-first=Ashish|inventor2-last=Krishnaswamy|inventor2-first=Arvind|inventor3-last=Yamada|inventor3-first=Koichi|inventor4-last=Shanmugavelayutham|inventor4-first=Palanivelrajan Rajan}}</ref> रनटाइम पर यादृच्छिक निर्देशों को एक साथ वापस करने के लिए इसके लिए व्यापक रनटाइम समर्थन की आवश्यकता होती है, जैसे सॉफ़्टवेयर डायनेमिक ट्रांसलेटर। यह तकनीक गैजेट्स को खोजने और उपयोग करने में कठिन बनाने में सफल है, लेकिन महत्वपूर्ण ओवरहेड के साथ आती है।
केवल लाइब्रेरी स्थानों के अतिरिक्त प्रोग्राम के सभी निर्देशों और/या अन्य प्रोग्राम स्थिति रजिस्टरों और स्टैक ऑब्जेक्ट्स को अलग-अलग स्थानांतरित करके इस यादृच्छिककरण प्रस्ताव को आगे बढ़ाया जा सकता है।<ref>{{Cite journal|last1=Venkat|first1=Ashish|last2=Shamasunder|first2=Sriskanda|last3=Shacham|first3=Hovav|last4=Tullsen|first4=Dean M.|date=2016-01-01|title=HIPStR: Heterogeneous-ISA Program State Relocation|journal=Proceedings of the Twenty-First International Conference on Architectural Support for Programming Languages and Operating Systems|series=ASPLOS '16|location=New York, NY, USA|publisher=ACM|pages=727–741|doi=10.1145/2872362.2872408|isbn=9781450340915|s2cid=7853786}}</ref><ref>{{Cite book | doi = 10.1109/SP.2012.39| chapter = ILR: Where'd My Gadgets Go?| title = 2012 IEEE Symposium on Security and Privacy| pages = 571–585| date=May 2012 | last1 = Hiser | first1 = J. | last2 = Nguyen-Tuong | first2 = A. | last3 = Co | first3 = M. | last4 = Hall | first4 = M. | last5 = Davidson | first5 = J. W. | isbn = 978-1-4673-1244-8| s2cid = 15696223}}</ref><ref>{{cite patent|country=US|number=9135435|title=Binary translator driven program state relocation|pubdate=2015-09-15|assign1=[[Intel Corp.]]|inventor1-last=Venkat|inventor1-first=Ashish|inventor2-last=Krishnaswamy|inventor2-first=Arvind|inventor3-last=Yamada|inventor3-first=Koichi|inventor4-last=Shanmugavelayutham|inventor4-first=Palanivelrajan Rajan}}</ref> रनटाइम पर यादृच्छिक निर्देशों को एक साथ वापस करने के लिए इसके लिए व्यापक रनटाइम समर्थन की आवश्यकता होती है, जैसे सॉफ़्टवेयर डायनेमिक ट्रांसलेटर। यह तकनीक उपकरणों को खोजने और उपयोग करने में कठिन बनाने में सफल है, परंतु महत्वपूर्ण ओवरहेड के साथ आती है।


{{Anchor|KBOUNCER}}
के बाउन्सर  द्वारा दिया गया एक अन्य दृष्टिकोण, ऑपरेटिंग प्रणाली को यह सत्यापित करने के लिए संशोधित करता है कि वापसी निर्देश वास्तव में कॉल निर्देश के तुरंत बाद नियंत्रण प्रवाह को एक स्थान पर वापस भेज देते हैं। यह उपकरण की श्रृंखलाबद्धता को प्रतिबंधित करता है, परंतु भारी प्रदर्शन दंड वहन करता है, और जंप-उन्मुख प्रोग्रामिंग आक्रमणों के सापेक्ष प्रभावी नहीं है जो वापसी के अतिरिक्त जंप और अन्य नियंत्रण-प्रवाह-संशोधित निर्देशों को परिवर्तित करते हैं।<ref>Vasilis Pappas. ''[https://www.cs.columbia.edu/~vpappas/papers/kbouncer.pdf kBouncer: Efficient and Transparent ROP Mitigation]''. April 2012.</ref>
KBouncer द्वारा लिया गया एक अन्य दृष्टिकोण, ऑपरेटिंग सिस्टम को यह सत्यापित करने के लिए संशोधित करता है कि रिटर्न निर्देश वास्तव में कॉल निर्देश के तुरंत बाद नियंत्रण प्रवाह को एक स्थान पर वापस भेज देते हैं। यह गैजेट की श्रृंखलाबद्धता को रोकता है, लेकिन भारी प्रदर्शन दंड वहन करता है,{{Clarify|date=June 2015}} और जंप-उन्मुख प्रोग्रामिंग हमलों के खिलाफ प्रभावी नहीं है जो रिटर्न के अतिरिक्त जंप और अन्य नियंत्रण-प्रवाह-संशोधित निर्देशों को बदलते हैं।<ref>Vasilis Pappas. ''[https://www.cs.columbia.edu/~vpappas/papers/kbouncer.pdf kBouncer: Efficient and Transparent ROP Mitigation]''. April 2012.</ref>




=== बाइनरी कोड रैंडमाइजेशन ===
=== द्विआधारी कूट यादृच्छिकीकरण ===


कुछ आधुनिक प्रणालियाँ जैसे क्लाउड लैम्ब्डा (FaaS) और IoT रिमोट अपडेट सॉफ़्टवेयर परिनियोजन से पहले ऑन-द-फ्लाई संकलन करने के लिए क्लाउड इन्फ्रास्ट्रक्चर का उपयोग करते हैं। एक तकनीक जो एक निष्पादन सॉफ़्टवेयर के प्रत्येक उदाहरण में विविधता लाती है, नाटकीय रूप से ROP हमलों के लिए सॉफ़्टवेयर की प्रतिरक्षा को बढ़ा सकती है। ब्रूट फ़ोर्सिंग क्लाउड लैम्ब्डा के परिणामस्वरूप यादृच्छिक सॉफ़्टवेयर के कई उदाहरणों पर आक्रमण हो सकता है जो आक्रमण की प्रभावशीलता को कम करता है। आसफ शैली ने इस तकनीक को 2017 में प्रकाशित किया था<ref>{{Cite patent|title=Security methods and systems by code mutation|country=US|number=2019347385|pubdate=2019-11-14|status=application|inventor1-last=Shelly|inventor1-first=Asaf}}, since abandoned.</ref> और सॉफ्टवेयर अपडेट सिस्टम में बाइनरी रेंडमाइजेशन के उपयोग का प्रदर्शन किया। हर अपडेट किए गए डिवाइस के लिए, क्लाउड-आधारित सेवा ने कोड में विविधताएं पेश कीं, ऑनलाइन संकलन किया और बाइनरी को डिस्पैच किया। यह तकनीक बहुत प्रभावी है क्योंकि ROP आक्रमण सॉफ्टवेयर की आंतरिक संरचना के ज्ञान पर निर्भर करते हैं। तकनीक का दोष यह है कि सॉफ्टवेयर को तैनात करने से पहले कभी भी पूरी तरह से परीक्षण नहीं किया जाता है क्योंकि यादृच्छिक सॉफ्टवेयर के सभी रूपों का परीक्षण करना संभव नहीं है। इसका मतलब यह है कि कई बाइनरी रेंडमाइजेशन तकनीकें नेटवर्क इंटरफेस और सिस्टम प्रोग्रामिंग के लिए लागू होती हैं और जटिल एल्गोरिदम के लिए कम अनुशंसित होती हैं।
कुछ आधुनिक प्रणालियाँ जैसे क्लाउड लैम्ब्डा (FaaS) और IoT रिमोट अपडेट सॉफ़्टवेयर परिनियोजन से पूर्व ऑन-द-फ्लाई संकलन करने के लिए क्लाउड अवसंरचना का उपयोग करते हैं। एक तकनीक जो किसी निष्पादन सॉफ़्टवेयर के प्रत्येक उदाहरण में विविधता लाती है, नाटकीय रूप से आर ओ पी आक्रमणों के सापेक्ष सॉफ़्टवेयर की प्रतिरक्षा को बढ़ा सकती है। ब्रूट फ़ोर्सिंग क्लाउड लैम्ब्डा के परिणामस्वरूप यादृच्छिक सॉफ़्टवेयर के कई उदाहरणों पर आक्रमण हो सकता है जो आक्रमण की प्रभावशीलता को कम करता है। आसफ शैली ने इस तकनीक को 2017 में प्रकाशित किया था<ref>{{Cite patent|title=Security methods and systems by code mutation|country=US|number=2019347385|pubdate=2019-11-14|status=application|inventor1-last=Shelly|inventor1-first=Asaf}}, since abandoned.</ref> और सॉफ्टवेयर अपडेट प्रणाली में द्विआधारी यादृच्छिकीकरण के उपयोग का प्रदर्शन किया। हर अपडेट किए गए उपकरण के लिए, क्लाउड-आधारित सेवा ने कूट में विविधताएं प्रस्तुत कीं, ऑनलाइन संकलन किया और द्विआधारी को प्रेषित किया। यह तकनीक अत्यधिक प्रभावी है क्योंकि आर ओ पी आक्रमण सॉफ्टवेयर की आंतरिक संरचना के ज्ञान पर निर्भर करते हैं। इस तकनीक का दोष यह है कि सॉफ्टवेयर को स्थित करने से पहले कभी भी पूरी तरह से परीक्षण नहीं किया जाता है क्योंकि यादृच्छिक सॉफ्टवेयर के सभी रूपों का परीक्षण करना संभव नहीं है। इसका तात्पर्य यह है कि कई द्विआधारी यादृच्छिकीकरण तकनीकें नेटवर्क इंटरफेस और प्रणाली प्रोग्रामिंग के लिए लागू होती हैं और जटिल विधिकलनों के लिए कम अनुशंसित होती हैं।


=== सेहोप ===
=== सेहोप ===
माइक्रोसॉफ्ट-विशिष्ट अपवाद हैंडलिंग तंत्र#एसईएच ओवरराइट प्रोटेक्शन विंडोज की एक विशेषता है जो सबसे आम स्टैक ओवरफ्लो हमलों से बचाता है, विशेष रूप से एक संरचित अपवाद हैंडलर पर हमलों के खिलाफ।
माइक्रोसॉफ्ट-विशिष्ट अपवाद हैंडलिंग तंत्र एवं ओवरराइट सुरक्षा, विंडोज की एक विशेषता है जो सबसे साधारण स्टैक ओवरफ्लो, विशेष रूप से एक संरचित अपवाद हैंडलर पर आक्रमणों के सापेक्ष आक्रमणों से सुरक्षा करता है।


=== नियंत्रण प्रवाह हमलों के खिलाफ ===
=== नियंत्रण प्रवाह आक्रमणों के सापेक्ष ===


जैसे-जैसे [[चीजों की इंटरनेट]] के विस्तार के कारण छोटे एम्बेडेड सिस्टम बढ़ रहे हैं, ऐसे एम्बेडेड सिस्टम की सुरक्षा की आवश्यकता भी बढ़ रही है। हार्डवेयर में कार्यान्वित इंस्ट्रक्शन बेस्ड मेमोरी एक्सेस कंट्रोल (IB-MAC) का उपयोग करके, कम लागत वाले एम्बेडेड सिस्टम को दुर्भावनापूर्ण नियंत्रण प्रवाह और स्टैक ओवरफ्लो हमलों से बचाना संभव है। डेटा स्टैक और रिटर्न स्टैक को अलग करके सुरक्षा प्रदान की जा सकती है। हालाँकि, कुछ एम्बेडेड सिस्टम में [[स्मृति प्रबंधन इकाई]] की कमी के कारण, सभी एम्बेडेड सिस्टम पर हार्डवेयर समाधान लागू नहीं किया जा सकता है।<ref>FRANCILLON, A., PERITO, D., AND CASTELLUCCIA, C. 2009. Defending embedded systems against control flow attacks. In Proceedings of SecuCode 2009, S. Lachmund and C. Schaefer, Eds. ACM Press, 19–26.</ref>
जैसे-जैसे [[चीजों की इंटरनेट|वस्तुओ की इंटरनेट]] के विस्तार के कारण छोटे एम्बेडेड प्रणाली बढ़ रहे हैं, ऐसे एम्बेडेड प्रणाली की सुरक्षा की आवश्यकता भी बढ़ रही है। हार्डवेयर में कार्यान्वित निर्देश आधारित मेमोरी उपयोग नियंत्रण (IB-MAC) का उपयोग करके, कम लागत वाले एम्बेडेड प्रणाली को दुर्भावनापूर्ण नियंत्रण प्रवाह और स्टैक ओवरफ्लो आक्रमणों से बचाना संभव है। डेटा स्टैक और वापसी स्टैक को अलग करके सुरक्षा प्रदान की जा सकती है। यद्यपि, कुछ एम्बेडेड प्रणाली में [[स्मृति प्रबंधन इकाई]] की कमी के कारण, सभी एम्बेडेड प्रणाली पर हार्डवेयर समाधान लागू नहीं किया जा सकता है।<ref>FRANCILLON, A., PERITO, D., AND CASTELLUCCIA, C. 2009. Defending embedded systems against control flow attacks. In Proceedings of SecuCode 2009, S. Lachmund and C. Schaefer, Eds. ACM Press, 19–26.</ref>




=== रिटर्न-ओरिएंटेड रूटकिट्स के खिलाफ ===
=== वापसी-उन्मुख रूटकिट्स के सापेक्ष ===
2010 में, जिन्कू ली एट अल। प्रस्तावित<ref name="Li2010">Jinku LI, Zhi WANG, Xuxian JIANG, Mike GRACE, and Sina BAHRAM. [https://www.csc2.ncsu.edu/faculty/xjiang4/pubs/EUROSYS10.pdf ''Defeating return-oriented rootkits with "return-less" kernels.''] In ''Proceedings of EuroSys 2010'', edited by G. Muller. ACM Press, 195–208.</ref> कि एक उपयुक्त रूप से संशोधित संकलक प्रत्येक को बदलकर रिटर्न-उन्मुख गैजेट को पूरी तरह से समाप्त कर सकता है {{code|call f|asm}} निर्देश क्रम के साथ <code>{{code|pushl $index|asm}}; {{code|jmp f|asm}}</code> और प्रत्येक {{code|ret|asm}} निर्देश क्रम के साथ <code>{{code|popl %reg|asm}}; {{code|jmp table(%reg)|asm}}</code>, कहाँ {{code|table|asm}} कार्यक्रम में सभी वैध वापसी पतों के एक अपरिवर्तनीय सारणीकरण का प्रतिनिधित्व करता है और {{code|index|asm}} उस तालिका में एक विशिष्ट अनुक्रमणिका का प्रतिनिधित्व करता है।<ref name="Li2010"/>{{rp|5-6}} यह एक रिटर्न-उन्मुख गैजेट के निर्माण को रोकता है जो किसी फलन के अंत से सीधे किसी अन्य फलन के बीच में किसी मनमाने पते पर लौटता है; इसके अतिरिक्त, गैजेट केवल वैध रिटर्न पतों पर वापस आ सकते हैं, जो उपयोगी गैजेट बनाने की कठिनाई को काफी बढ़ा देता है। ली एट अल। दावा किया कि हमारी वापसी संकेत तकनीक अनिवार्य रूप से वापसी-उन्मुख प्रोग्रामिंग को रिटर्न-इन-लिबक की पुरानी शैली में वापस सामान्य करती है।<ref name="Li2010"/>उनके प्रूफ-ऑफ-कॉन्सेप्ट कंपाइलर में कुछ यंत्र निर्देशों से निपटने के लिए एक [[पीपहोल अनुकूलन]] चरण शामिल था, जिसमें उनके ऑपकोड या तत्काल ऑपरेंड में रिटर्न ओपोड शामिल होता है,<ref name="Li2010"/>जैसे कि {{code|movl $0xC3, %eax|asm}}.
2010 में, जिन्कू ली एट अल द्वारा यह प्रस्तावित किया गया<ref name="Li2010">Jinku LI, Zhi WANG, Xuxian JIANG, Mike GRACE, and Sina BAHRAM. [https://www.csc2.ncsu.edu/faculty/xjiang4/pubs/EUROSYS10.pdf ''Defeating return-oriented rootkits with "return-less" kernels.''] In ''Proceedings of EuroSys 2010'', edited by G. Muller. ACM Press, 195–208.</ref> कि उपयुक्त रूप से संशोधित संकलक प्रत्येक {{code|call f|asm}}को निर्देश क्रम <code>{{code|pushl $index|asm}}; {{code|jmp f|asm}}</code>और निर्देश क्रम <code>{{code|popl %reg|asm}}; {{code|jmp table(%reg)|asm}}</code>के सापेक्ष प्रत्येक {{code|ret|asm}} को परिवर्तित कर वापसी-उन्मुख उपकरण को पूरी तरह से समाप्त कर सकता है  जहाँ {{code|table|asm}} फलन में सभी वैध वापसी पतों के एक अपरिवर्तनीय सारणीकरण का प्रतिनिधित्व करता है और {{code|index|asm}} उस तालिका में एक विशिष्ट अनुक्रमणिका का प्रतिनिधित्व करता है।<ref name="Li2010"/>{{rp|5-6}} यह एक वापसी-उन्मुख उपकरण के निर्माण को रोकता है जो किसी फलन के अंत से सीधे किसी अन्य फलन के मध्य किसी यादृच्छिक पते पर लौटता है; इसके अतिरिक्त, गैजेट केवल वैध वापसी पतों पर वापस आ सकते हैं, जो उपयोगी गैजेट बनाने की कठिनाई को अत्यधिक बढ़ा देता है। ली एट अल ने यह दावा किया कि हमारी वापसी संकेत तकनीक अनिवार्य रूप से वापसी-उन्मुख प्रोग्रामिंग को वापसी-इन-लिबक की पुरानी शैली में वापस सामान्य करती है।<ref name="Li2010"/>उनके प्रूफ-ऑफ-कॉन्सेप्ट कंपाइलर में कुछ यंत्र निर्देशों से निपटने के लिए एक [[पीपहोल अनुकूलन]] चरण सम्मिलित था, जिसमें उनके ऑपकूट या तत्काल संकार्य में वापसी ओपोड सम्मिलित होता है,<ref name="Li2010"/>जैसे कि {{code|movl $0xC3, %eax|asm}}.आदि।


=== सूचक प्रमाणीकरण कोड (पीएसी) ===
=== सूचक प्रमाणीकरण कूट (पीएसी) ===
ARMv8.3-A आर्किटेक्चर हार्डवेयर स्तर पर एक नई सुविधा पेश करता है जो विशेष रूप से डिज़ाइन किए गए [[ट्वीकेबल ब्लॉक सिफर]] का उपयोग करके पॉइंटर एड्रेस स्पेस में अप्रयुक्त बिट्स का लाभ उठाता है।<ref>{{cite conference |title=The QARMA Block Cipher Family|doi=10.13154/tosc.v2017.i1.4-44|conference=IACR Transactions on Symmetric Cryptology (ToSC)|year=2016|publication-date=8 March 2017|conference-url=https://tosc.iacr.org/index.php/ToSC/article/view/583|volume=17|pages=4–44|url=https://eprint.iacr.org/2016/444.pdf|first=Roberto|last=Avanzi|issue=1|archive-url=https://web.archive.org/web/20200513144451/https://eprint.iacr.org/2016/444.pdf|archive-date=May 13, 2020}}
ARMv8.3-A स्थापत्य हार्डवेयर स्तर पर एक नई सुविधा प्रस्तुत करता है जो विशेष रूप से प्ररूपित किए गए [[ट्वीकेबल ब्लॉक सिफर]] का उपयोग करके सूचक पता स्थान में अप्रयुक्त बिट्स का लाभ उठाता है।<ref>{{cite conference |title=The QARMA Block Cipher Family|doi=10.13154/tosc.v2017.i1.4-44|conference=IACR Transactions on Symmetric Cryptology (ToSC)|year=2016|publication-date=8 March 2017|conference-url=https://tosc.iacr.org/index.php/ToSC/article/view/583|volume=17|pages=4–44|url=https://eprint.iacr.org/2016/444.pdf|first=Roberto|last=Avanzi|issue=1|archive-url=https://web.archive.org/web/20200513144451/https://eprint.iacr.org/2016/444.pdf|archive-date=May 13, 2020}}
</ref><ref>{{cite web|url=https://www.qualcomm.com/media/documents/files/whitepaper-pointer-authentication-on-armv8-3.pdf|title=Pointer Authentication on ARMv8.3|author=Qualcomm Product Security|publisher=Qualcomm Technologies Inc.|access-date=June 16, 2020|archive-url=https://web.archive.org/web/20200606102037/https://www.qualcomm.com/media/documents/files/whitepaper-pointer-authentication-on-armv8-3.pdf|archive-date=June 6, 2020|url-status=live|quote=Thus, we designed QARMA, a new family of lightweight tweakable block ciphers.}}</ref> जो एक स्थानीय संदर्भ मूल्य (जैसे, स्टैक पॉइंटर) के साथ संयुक्त रूप से वांछित मान (सामान्यत, एक वापसी पता) पर हस्ताक्षर करता है।
</ref><ref>{{cite web|url=https://www.qualcomm.com/media/documents/files/whitepaper-pointer-authentication-on-armv8-3.pdf|title=Pointer Authentication on ARMv8.3|author=Qualcomm Product Security|publisher=Qualcomm Technologies Inc.|access-date=June 16, 2020|archive-url=https://web.archive.org/web/20200606102037/https://www.qualcomm.com/media/documents/files/whitepaper-pointer-authentication-on-armv8-3.pdf|archive-date=June 6, 2020|url-status=live|quote=Thus, we designed QARMA, a new family of lightweight tweakable block ciphers.}}</ref> जो एक स्थानीय संदर्भ मूल्य (जैसे, स्टैक सूचक) के साथ संयुक्त रूप से वांछित मान (सामान्यत, एक वापसी पता) पर हस्ताक्षर करता है।


एक संवेदनशील संक्रिया करने से पहले (यानी, सहेजे गए पॉइंटर पर वापस लौटना) गलत संदर्भ में छेड़छाड़ या उपयोग का पता लगाने के लिए हस्ताक्षर की जाँच की जा सकती है (उदाहरण के लिए, एक ट्रैम्पोलिन संदर्भ से सहेजे गए वापसी पते का लाभ उठाना)
एक संवेदनशील संक्रिया करने से पहले (अर्थात, सहेजे गए सूचक पर वापस लौटना) गलत संदर्भ में छेड़छाड़ या उपयोग का पता लगाने के लिए हस्ताक्षर की जाँच की जा सकती है उदाहरण के लिए, एक ट्रैम्पोलिन संदर्भ से सहेजे गए वापसी पते का लाभ उठाना आदि
 
विशेष रूप से iPhones में उपयोग किए जाने वाले [[Apple A12]] चिप्स ARMv8.3 में अपग्रेड किए गए हैं और पी ए सी  का उपयोग करते हैं। [[लिनक्स]] को 2020 में जारी संस्करण 5.7 में कर्नेल के भीतर सूचक प्रमाणीकरण के लिए समर्थन प्राप्त हुआ; उपयोगकर्ता अंतरिक्ष अनुप्रयोगों के लिए समर्थन 2018 में जोड़ा गया था।<ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.7-ARM64-Updates|title=Linux 5.7 For 64-bit ARM Brings In-Kernel Pointer Authentication, Activity Monitors - Phoronix|website=www.phoronix.com|access-date=2020-03-31}}</ref>
 
2022 में, एम आइ टी  के शोधकर्ताओं ने पी ए सी के सापेक्ष एक साइड-चैनल आक्रमण को पैकमैन नामित किया।<ref>{{cite conference | last1 = Ravichandran | first1 = Joseph | last2 = Na | first2 = Weon Taek | last3 = Lang | first3 = Jay | last4 = Yan | first4 = Mengjia | title = PACMAN: attacking ARM pointer authentication with speculative execution | book-title = Proceedings of the 49th Annual International Symposium on Computer Architecture | publisher = Association for Computing Machinery | date = June 2022 | doi = 10.1145/3470496.3527429 | doi-access = free }}</ref>


विशेष रूप से iPhones में उपयोग किए जाने वाले [[Apple A12]] चिप्स ARMv8.3 में अपग्रेड किए गए हैं और PAC का उपयोग करते हैं। [[लिनक्स]] को 2020 में जारी संस्करण 5.7 में कर्नेल के भीतर सूचक प्रमाणीकरण के लिए समर्थन प्राप्त हुआ; उपयोगकर्ता अंतरिक्ष अनुप्रयोगों के लिए समर्थन 2018 में जोड़ा गया था।<ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.7-ARM64-Updates|title=Linux 5.7 For 64-bit ARM Brings In-Kernel Pointer Authentication, Activity Monitors - Phoronix|website=www.phoronix.com|access-date=2020-03-31}}</ref>
2022 में, MIT के शोधकर्ताओं ने PAC के खिलाफ एक साइड-चैनल आक्रमण को PACMAN करार दिया।<ref>{{cite conference | last1 = Ravichandran | first1 = Joseph | last2 = Na | first2 = Weon Taek | last3 = Lang | first3 = Jay | last4 = Yan | first4 = Mengjia | title = PACMAN: attacking ARM pointer authentication with speculative execution | book-title = Proceedings of the 49th Annual International Symposium on Computer Architecture | publisher = Association for Computing Machinery | date = June 2022 | doi = 10.1145/3470496.3527429 | doi-access = free }}</ref>




== यह भी देखें ==
== यह भी देखें ==
* [[ब्लाइंड रिटर्न ओरिएंटेड प्रोग्रामिंग]]
* [[ब्लाइंड रिटर्न ओरिएंटेड प्रोग्रामिंग|ब्लाइंड वापसी ओरिएंटेड प्रोग्रामिंग]]
* [[पूर्णांक अतिप्रवाह]]
* [[पूर्णांक अतिप्रवाह]]
* जेआईटी छिड़काव
* जेआईटी छिड़काव
* [[सिग्रेटर्न-ओरिएंटेड प्रोग्रामिंग]] (SROP)
* [[सिग्रेटर्न-ओरिएंटेड प्रोग्रामिंग]] (SROP)
* [[थ्रेडेड कोड]]{{snd}} वापसी-उन्मुख प्रोग्रामिंग थ्रेडेड कोड की पुनर्खोज है
* [[थ्रेडेड कोड|थ्रेडेड कूट]]{{snd}} वापसी-उन्मुख प्रोग्रामिंग थ्रेडेड कूट की पुनर्खोज है


== टिप्पणियाँ ==
== टिप्पणियाँ ==
Line 111: Line 112:
* {{cite web|url=https://www.youtube.com/watch?v=a8_fDdWB2-M|title=Return-oriented Programming Attack Demo video|website=[[YouTube]]}}{{cbignore}}{{Dead Youtube links|date=February 2022}}
* {{cite web|url=https://www.youtube.com/watch?v=a8_fDdWB2-M|title=Return-oriented Programming Attack Demo video|website=[[YouTube]]}}{{cbignore}}{{Dead Youtube links|date=February 2022}}
* [http://zsmith.co/antijop.php AntiJOP: a program that removes JOP/ROP vulnerabilities from assembly language code]
* [http://zsmith.co/antijop.php AntiJOP: a program that removes JOP/ROP vulnerabilities from assembly language code]
[[Category: कंप्यूटर सुरक्षा शोषण]]


[[Category: Machine Translated Page]]
[[Category:All articles with dead YouTube links]]
[[Category:Articles with dead YouTube links from February 2022]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:CS1 English-language sources (en)]]
[[Category:Created On 17/02/2023]]
[[Category:Created On 17/02/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:कंप्यूटर सुरक्षा शोषण]]

Latest revision as of 19:07, 19 April 2023

वापसी-उन्मुख प्रोग्रामिंग (आरओपी) एक कंप्यूटर सुरक्षा समुपयोजन तकनीक है जो आक्रामकों को सुरक्षा गढ़ की उपस्थिति में कूट निष्पादित करने की अनुमति देती है।[1][2] जैसे निष्पादन योग्य स्थान सुरक्षा और कूट हस्ताक्षर आदि।[3]

इस तकनीक में, एक आक्रामक प्रोग्राम नियंत्रण प्रवाह का अधिग्रहण करने के लिए कॉल स्टैक पर नियंत्रण प्राप्त करता है और फिर सावधानी से चुने गए यंत्र निर्देश अनुक्रमों को निष्पादित करता है ये प्रारंभ से ही यंत्र की मेमोरी में उपलब्ध होते हैं, जिन्हें गैजेट कहा जाता है।[4][nb 1]प्रत्येक गैजेट सामान्यत वापसी निर्देश में समाप्त होता है और उपलब्ध प्रोग्राम या सहभागी लाइब्रेरी कूट के भीतर एक सबरूटीन में स्थित होता है।[nb 1]साथ बंधे हुए, ये गैजेट एक आक्रामक के सरल आक्रमणों को विफल करने वाली सुरक्षा का उपयोग करने वाले यंत्र पर यादृच्छिक संचालन करने की अनुमति देते हैं।

पृष्ठभूमि

कॉल स्टैक का एक उदाहरण लेआउट जिसमे सबरूटीन ड्रॉ लाइन द्वारा कॉल किया गया है.ध्यान दें कि इस आरेख में स्टैक ऊपर की ओर बढ़ रहा है।

वापसी-उन्मुख प्रोग्रामिंग स्टैक स्मैश आक्रमण का एक उन्नत संस्करण है। सामान्यतः, इस प्रकार के आक्रमण तब होते हैं जब एक विरोधी प्रोग्राम में सॉफ्टवेयर दोष का लाभ उठाकर कॉल स्टैक का क्रमभंग करता है, प्रायः एक बफर ओवररन होता है। एक बफ़र ओवररन में, एक फलन जो उपयोगकर्ता द्वारा प्रदान किए गए डेटा को स्मृति में संग्रहीत करने से पहले उचित सीमा जांच नहीं करता है, वह अधिक निविष्ट डेटा को ठीक से स्टोर कर सकता है। यदि डेटा को स्टैक पर लिखा जा रहा है, तो अतिरिक्त डेटा फलन के चर (जैसे, स्टैक आरेख में दाईं ओर 'स्थानीय डाटा') के आवंटित स्थान को ओवरफ्लो कर सकता है और वापसी पते को उपरिलेखित कर सकता है। यह पता बाद में फलन द्वारा कॉलर में नियंत्रण प्रवाह को पुनर्निर्देशित करने के लिए उपयोग किया जाएगा। यदि इसे अधिलेखित कर दिया गया है, तो नियंत्रण प्रवाह को नए वापसी पते द्वारा निर्दिष्ट स्थान पर भेज दिया जाता है।

एक मानक बफ़र ओवररन आक्रमण में, आक्रामक केवल स्टैक कूट इंजेक्शन को कूटबद्ध करेगा और फिर इन नए लिखित निर्देशों के स्थान के साथ वापसी पते को अधिलेखित कर देगा। 1990 के दशक के अंत तक, प्रमुख ऑपरेटिंग प्रणाली इन आक्रमणों के सापेक्ष कोई सुरक्षा प्रदान नहीं करते थे; माइक्रोसॉफ्ट विंडोज ने 2004 तक कोई बफ़र-ओवररन सुरक्षा प्रदान नहीं की।[5] आखिरकार, ऑपरेटिंग प्रणाली ने मेमोरी को चिह्नित करके बफर ओवरफ्लो दोष के उपयोग का प्रतिरोध करना शुरू कर दिया, जहां डेटा को गैर-निष्पादन योग्य के रूप में लिखा गया है, एक तकनीक जिसे निष्पादन योग्य स्थान सुरक्षा के रूप में जाना जाता है। इसके सक्षम होने के साथ, यंत्र स्मृति के उपयोगकर्ता-लिखने योग्य क्षेत्रों में स्थित किसी भी कूट को निष्पादित करने से मना कर देगी, आक्रामक को स्टैक पर पेलोड रखने से रोकती है और वापसी एड्रेस ओवरराइट के माध्यम से उस पर अधिस्ठापित कर डी जाती है। एनएक्स बिट बाद में इस सुरक्षा को शक्तिशाली करने के लिए उपलब्ध हो गया।

डेटा निष्पादन रोकथाम के साथ, एक विरोधी सीधे बफ़र में लिखे गए निर्देशों को निष्पादित नहीं कर सकता क्योंकि बफ़र की मेमोरी अनुभाग को गैर-निष्पादन योग्य के रूप में चिह्नित किया गया है। इस सुरक्षा को विफल करने के लिए, एक वापसी-उन्मुख प्रोग्रामिंग अटैक दुर्भावनापूर्ण निर्देशों को इंजेक्ट नहीं करता है, बल्कि वापसी पतों में क्रमभंग करके, निष्पादन योग्य मेमोरी में पहले से उपलब्ध निर्देश अनुक्रमों का उपयोग करता है, जिसे गैजेट कहा जाता है। एक विशिष्ट डेटा निष्पादन रोकथाम कार्यान्वयन इस आक्रमण से बचाव नहीं कर सकता है क्योंकि विरोधी सीधे दुर्भावनापूर्ण कूट को निष्पादित नहीं करता है, बल्कि संग्रहीत वापसी पतों को परिवर्तित कर उपयुक्त निर्देशों के संयुक्त अनुक्रम करता है; इसलिए उपयोग किए गए कूट को 'निष्पादन योग्य' में चिह्नित किया जाएगा।

वापसी-इन-लाइब्रेरी तकनीक

डेटा निष्पादन रोकथाम के व्यापक कार्यान्वयन ने पारंपरिक बफर ओवरफ्लो कमजोरियों को ऊपर वर्णित विधियों से उपयोग करना कठिन या असंभव बना दिया है। इसके अतिरिक्त, एक आक्रामक को पहले से ही निष्पादन योग्य चिह्नित स्मृति में कूट, जैसे स्वयं प्रोग्राम कूट और किसी भी लिंक की गई साझा लाइब्रेरी तक सीमित कर दिया गया था। चूंकि साझा लाइब्रेरी, जैसे कि libc, में प्रायः प्रणाली कॉल करने के लिए सबरूटीन्स होते हैं और अन्य कार्यक्षमता एक आक्रामक के लिए संभावित रूप से उपयोगी होती है, वे एक आक्रमण को एकत्र करने के लिए कूट खोजने के लिए सबसे संभावित उम्मीदवार हैं।

वापसी-टू-लाइब्रेरी आक्रमण में, एक आक्रामक बफर ओवररन भेद्यता का प्रयोग करके प्रोग्राम नियंत्रण प्रवाह को हाईजैक कर लेता है, जैसा कि ऊपर चर्चा की गई है। स्टैक पर आक्रमण पेलोड लिखने का प्रयास करने के अतिरिक्त, आक्रामक एक उपलब्ध लाइब्रेरी फलन चुनता है और इसके प्रवेश स्थान के साथ वापसी पते को उपरिलेखित करता है। आगे के स्टैक स्थानों को अधिलेखित किया जाता है, प्रायोजित कॉलिंग विधियों का पालन करते हुए, फलन को उचित मापदंडों को ध्यान से प्रेषित करने के लिए, जिससे यह आक्रामक के लिए उपयोगी कार्यक्षमता का प्रदर्शन करे। इस तकनीक को पहली बार सौर डिजाइनर द्वारा 1997 में प्रस्तुत किया गया था,[6] और बाद में इसे फंक्शन कॉल्स की असीमित श्रंखला तक बढ़ा दिया गया।[7]


उधार कूट भाग

64-बिट x86 प्रोसेसर के उदय ने अपने साथ सबरूटीन कॉलिंग प्रयोग में कई परिवर्तन लाए, जिसके लिए स्टैक के अतिरिक्त प्रोसेसर रजिस्टर में पारित होने के लिए फलन के पहले तर्क की आवश्यकता थी। इसका तात्पर्य यह था कि एक आक्रामक केवल बफर ओवररन प्रयोग के माध्यम से कॉल स्टैक का क्रमभंग करके वांछित तर्कों के साथ लाइब्रेरी फलन कॉल समायोजित नहीं कर सकता था। साझा लाइब्रेरी डेवलपर्स ने उन लाइब्रेरी फ़ंक्शंस को हटाना या प्रतिबंधित करना भी प्रारंभ कर दिया, जो किसी आक्रामक के लिए विशेष रूप से उपयोगी कार्य करते थे, जैसे कि प्रणाली कॉल रैपर आदि। नतीजतन, वापसी-इन-लाइब्रेरी आक्रमणों को सफलतापूर्वक आरोपित करना अधिक कठिन हो गया।

अगला विकास एक आक्रमण के रूप में आया, जिसमें सरल आक्रमणों के सापेक्ष बचाव के साथ यंत्रों पर बफर ओवररन कमजोरियों का लाभ उठाने के लिए, स्वयं पूरे कार्यों के अतिरिक्त, लाइब्रेरी कार्यों के भाग का उपयोग किया गया।[8] यह तकनीक उन कार्यों की खोज करती है जिनमें निर्देश अनुक्रम होते हैं जो स्टैक से रजिस्टरों में मानों को प्रकट करते हैं। इन कूट अनुक्रमों का सावधानीपूर्वक चयन एक आक्रामक को नए कॉलिंग प्रयोग के तहत फलन कॉल करने के लिए उचित रजिस्टरों में उपयुक्त मान प्रेषित करने की अनुमति देता है। अन्य आक्रमण लाइब्रेरी में वापसी आक्रमण के रूप में आगे बढ़ता है।

आक्रमण

वापसी-उन्मुख प्रोग्रामिंग उधार कूट चंक्स प्रस्ताव पर निर्मित होता है और लूप संगणनीयता और सशर्त शाखाओं सहित आक्रामक को ट्यूरिंग पूर्ण कार्यक्षमता प्रदान करने के लिए इसका विस्तार करता है।[9][10] दूसरे विधि से कहे तों, वापसी-उन्मुख प्रोग्रामिंग एक पूरी तरह कार्यात्मक भाषा प्रदान करती है जिसका उपयोग एक आक्रामक किसी समझौता यंत्र को वांछित संक्रिया करने के लिए कर सकता है। होवव शाचम ने 2007 में तकनीक प्रकाशित की[11] और प्रदर्शित किया कि कैसे सी मानक लाइब्रेरी से जुड़े लक्ष्य एप्लिकेशन के सापेक्ष वापसी-उन्मुख प्रोग्रामिंग का उपयोग करके सभी महत्वपूर्ण प्रोग्रामिंग निर्माणों का अनुकरण किया जा सकता है और एक प्रयोग बफर ओवररन भेद्यता को सम्मिलित करता है।

वापसी-उन्मुख प्रोग्रामिंग आक्रमण अभिव्यंजक शक्ति और रक्षात्मक उपायों के प्रतिरोध दोनों में चर्चा किए गए अन्य आक्रमण प्रकारों से उपयुक्त है। साझा लाइब्रेरीों से संभावित रूप से खतरनाक कार्यों को पूरी तरह से हटाने सहित ऊपर वर्णित प्रति-प्रयोग तकनीकों में से कोई भी वापसी-उन्मुख प्रोग्रामिंग आक्रमण के सापेक्ष प्रभावी नहीं है।

x86-स्थापत्य पर

यद्यपि विभिन्न प्रकार के स्थापत्य पर वापसी-उन्मुख प्रोग्रामिंग आक्रमण किए जा सकते हैं,[11]शाचम के लेख और अधिकांश अनुवर्ती कार्य, इंटेल x86 स्थापत्य पर केंद्रित हैं। x86 स्थापत्य एक चर-लंबाई जटिल निर्देश समुच्चय संगणनीयता निर्देश समुच्चय है। x86 पर वापसी-उन्मुख प्रोग्रामिंग इस तथ्य का लाभ उठाती है कि निर्देश समुच्चय अत्यधिक सघन है, अर्थात, बाइट्स के किसी भी यादृच्छिक क्रम को x86 निर्देशों के कुछ वैध समुच्चय के रूप में व्याख्या करने की संभावना है।

इसलिए ऐसे ऑपकूट की खोज करना संभव है जो नियंत्रण प्रवाह को परिवर्तित करता है, विशेष रूप से वापसी निर्देश (0xC3) और पुनः पूर्ववर्ती बाइट्स के लिए द्विआधारी निर्देश जो संभवतः उपयोगी निर्देश बनाते हैं। निर्देश गैजेट के इन समुच्चयों को पहले गैजेट के पहले निर्देश के पते के साथ, एक बफर ओवररन प्रयोग के माध्यम से वापसी पते को उपरिलेखित करके जंजीर से बांधा जा सकता है। इसके उपरांत, बाद के गैजेट्स का पहला पता स्टैक पर क्रमिक रूप से लिखा जाता है। पहले गैजेट के समापन पर, एक वापसी निर्देश निष्पादित किया जाएगा, जो स्टैक से अगले गैजेट के पते को प्रेषित करेगा और उस पर स्थित हों जाएगा। उस गैजेट के समापन पर, श्रृंखला तीसरे के साथ जारी रहती है, और इसी तरह आगे भी कार्य करती रहती है। छोटे अनुदेश अनुक्रमों का पीछा करके, एक आक्रामक पूर्व-उपलब्ध लाइब्रेरी कूट से यादृच्छिक कार्यक्रम व्यवहार उत्पन्न करने में सक्षम होता है। शाचम का दावा है कि किसी भी पर्याप्त मात्रा में कूट (सी मानक लाइब्रेरी सहित, परंतु सीमित नहीं) के सापेक्ष, ट्यूरिंग-पूर्ण कार्यक्षमता के लिए पर्याप्त गैजेट उपलब्ध होंगे।[11]

गैजेट का पता लगाने की प्रक्रिया को स्वचालित करने और द्विआधारी के सापेक्ष आक्रमण के निर्माण में मदद के लिए एक स्वचालित उपकरण विकसित किया गया है।[12] आरओपी गैजेट के रूप में जाना जाने वाला यह उपकरण, संभावित उपयोगी गैजेट्स की खोज द्विआधारी के माध्यम से करता है, और उन्हें एक आक्रमण के पेलोड में एकत्र करने का प्रयास करता है जो आक्रामक से यादृच्छिक निर्देश को स्वीकार करने के लिए एक आवरण उत्पन्न करता है।

पता स्थान अभिविन्यास यादृच्छिकीकरण पर

पता स्थान अभिविन्यास यादृच्छिकीकरण में भी कमजोरियां हैं। शाचम एट अल के लेख के अनुसार,[13] 32-बिट स्थापत्य पर एएसएलआर पता यादृच्छिकीकरण के लिए उपलब्ध बिट्स की संख्या से सीमित है। 32 एड्रेस बिट्स में से मात्र 16 यादृच्छिकीकरण के लिए उपलब्ध हैं, और 16 बिट्स पता यादृच्छिकीकरण को मिनटों में ब्रूट फोर्स आक्रमण से हराया जा सकता है। 64-बिट स्थापत्य अधिक शक्तिशाली हैं, 64 बिट्स में से 40 यादृच्छिकीकरण के लिए उपलब्ध हैं। 40-बिट यादृच्छिकीकरण के लिए क्रूर बल का आक्रमण संभव है, परंतु किसी का ध्यान नहीं जाने की संभावना नहीं है. ब्रूट फ़ोर्स आक्रमण के अतिरिक्त, यादृच्छिकीकरण को हटाने के लिए तकनीकें उपलब्ध हैं।

यहां तक ​​​​कि सही यादृच्छिककरण के साथ, यदि स्मृति सामग्री का कोई रिसाव होता है तो यह रनटाइम पर साझा लाइब्रेरीों के उदाहरण के आधार पते की गणना करने में मदद करेगा।[14]


वापसी निर्देश के उपयोग के बिना

चेकोवे एट अल के लेख के अनुसार,[15] वापसी निर्देश x86 पर 0xC3 का उपयोग किए बिना x86 और एआरएम स्थापत्य पर वापसी-उन्मुख प्रोग्रामिंग करना संभव है। इसके अतिरिक्त उन्होंने सावधानी से तैयार किए गए निर्देश अनुक्रमों का उपयोग किया जो पहले से ही यंत्र की मेमोरी में वापसी निर्देश की तरह व्यवहार करने के लिए उपलब्ध हैं। एक वापसी निर्देश के दो प्रभाव होते हैं: सबसे पहले, यह स्टैक के शीर्ष पर चार-बाइट मान को पढ़ता है, और निर्देश सूचक को उस मान पर समुच्चय करता है, और दूसरा, यह स्टैक सूचक मान को चार से बढ़ाता है यह एक पॉप संक्रिया के समान.X86 स्थापत्य पर, jmp और पॉप निर्देशों के क्रम वापसी निर्देश के रूप में कार्य कर सकते हैं। एआरएम पर, लोड और शाखा निर्देशों के अनुक्रम वापसी निर्देश के रूप में कार्य कर सकते हैं।

चूंकि यह नया प्रस्ताव, वापसी निर्देश का उपयोग नहीं करता है, इसके रक्षा के सापेक् नकारात्मक प्रभाव डालता है। जब एक रक्षा फलन न केवल कई वापसी बल्कि कई जंप निर्देशों के सापेक्ष भी जांच करता है, तो इस आक्रमण का पता लगाया जा सकता है।

बचाव

जी-मुक्त

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


पता स्थान प्रारूप यादृच्छिकीकरण

वापसी-उन्मुख प्रोग्रामिंग के आधार पर आक्रमणों को कम करने के लिए कई तकनीकों का प्रस्ताव दिया गया है।[17] अधिकांश प्रोग्राम और लाइब्रेरी कूट के स्थान को यादृच्छिकीकरण करने पर निर्भर करते हैं, जिससे एक आक्रामक उन निर्देशों के स्थान का सटीक अनुमान न लगा सके जो उपकरण में उपयोगी हो सकते हैं और इसलिए एक सफल वापसी-उन्मुख प्रोग्रामिंग आक्रमण शृंखला का प्रयोग नहीं कर सकते हैं। इस तकनीक का अत्यधिक सामान्य कार्यान्वयन, पता स्थान प्रारूप यादृच्छिकीकरण (एएसएलआर), साझा लाइब्रेरीों को प्रत्येक प्रोग्राम लोड पर अन्य मेमोरी स्थान में लोड करता है। यद्यपि यह आधुनिक ऑपरेटिंग प्रणाली द्वारा व्यापक रूप से स्थित किया गया है, एएसएलआर स्मृति में किसी भी ज्ञात लाइब्रेरी फलन का पता निर्धारित करने के लिए सूचना रिसाव आक्रमणों और अन्य प्रस्तावों के प्रति संवेदनशील है। यदि एक आक्रामक एक ज्ञात निर्देश के स्थान को सफलतापूर्वक निर्धारित कर सकता है, तो अन्य सभी की स्थिति का अनुमान लगाया जा सकता है और एक वापसी-उन्मुख प्रोग्रामिंग आक्रमण का निर्माण किया जा सकता है।

केवल लाइब्रेरी स्थानों के अतिरिक्त प्रोग्राम के सभी निर्देशों और/या अन्य प्रोग्राम स्थिति रजिस्टरों और स्टैक ऑब्जेक्ट्स को अलग-अलग स्थानांतरित करके इस यादृच्छिककरण प्रस्ताव को आगे बढ़ाया जा सकता है।[18][19][20] रनटाइम पर यादृच्छिक निर्देशों को एक साथ वापस करने के लिए इसके लिए व्यापक रनटाइम समर्थन की आवश्यकता होती है, जैसे सॉफ़्टवेयर डायनेमिक ट्रांसलेटर। यह तकनीक उपकरणों को खोजने और उपयोग करने में कठिन बनाने में सफल है, परंतु महत्वपूर्ण ओवरहेड के साथ आती है।

के बाउन्सर द्वारा दिया गया एक अन्य दृष्टिकोण, ऑपरेटिंग प्रणाली को यह सत्यापित करने के लिए संशोधित करता है कि वापसी निर्देश वास्तव में कॉल निर्देश के तुरंत बाद नियंत्रण प्रवाह को एक स्थान पर वापस भेज देते हैं। यह उपकरण की श्रृंखलाबद्धता को प्रतिबंधित करता है, परंतु भारी प्रदर्शन दंड वहन करता है, और जंप-उन्मुख प्रोग्रामिंग आक्रमणों के सापेक्ष प्रभावी नहीं है जो वापसी के अतिरिक्त जंप और अन्य नियंत्रण-प्रवाह-संशोधित निर्देशों को परिवर्तित करते हैं।[21]


द्विआधारी कूट यादृच्छिकीकरण

कुछ आधुनिक प्रणालियाँ जैसे क्लाउड लैम्ब्डा (FaaS) और IoT रिमोट अपडेट सॉफ़्टवेयर परिनियोजन से पूर्व ऑन-द-फ्लाई संकलन करने के लिए क्लाउड अवसंरचना का उपयोग करते हैं। एक तकनीक जो किसी निष्पादन सॉफ़्टवेयर के प्रत्येक उदाहरण में विविधता लाती है, नाटकीय रूप से आर ओ पी आक्रमणों के सापेक्ष सॉफ़्टवेयर की प्रतिरक्षा को बढ़ा सकती है। ब्रूट फ़ोर्सिंग क्लाउड लैम्ब्डा के परिणामस्वरूप यादृच्छिक सॉफ़्टवेयर के कई उदाहरणों पर आक्रमण हो सकता है जो आक्रमण की प्रभावशीलता को कम करता है। आसफ शैली ने इस तकनीक को 2017 में प्रकाशित किया था[22] और सॉफ्टवेयर अपडेट प्रणाली में द्विआधारी यादृच्छिकीकरण के उपयोग का प्रदर्शन किया। हर अपडेट किए गए उपकरण के लिए, क्लाउड-आधारित सेवा ने कूट में विविधताएं प्रस्तुत कीं, ऑनलाइन संकलन किया और द्विआधारी को प्रेषित किया। यह तकनीक अत्यधिक प्रभावी है क्योंकि आर ओ पी आक्रमण सॉफ्टवेयर की आंतरिक संरचना के ज्ञान पर निर्भर करते हैं। इस तकनीक का दोष यह है कि सॉफ्टवेयर को स्थित करने से पहले कभी भी पूरी तरह से परीक्षण नहीं किया जाता है क्योंकि यादृच्छिक सॉफ्टवेयर के सभी रूपों का परीक्षण करना संभव नहीं है। इसका तात्पर्य यह है कि कई द्विआधारी यादृच्छिकीकरण तकनीकें नेटवर्क इंटरफेस और प्रणाली प्रोग्रामिंग के लिए लागू होती हैं और जटिल विधिकलनों के लिए कम अनुशंसित होती हैं।

सेहोप

माइक्रोसॉफ्ट-विशिष्ट अपवाद हैंडलिंग तंत्र एवं ओवरराइट सुरक्षा, विंडोज की एक विशेषता है जो सबसे साधारण स्टैक ओवरफ्लो, विशेष रूप से एक संरचित अपवाद हैंडलर पर आक्रमणों के सापेक्ष आक्रमणों से सुरक्षा करता है।

नियंत्रण प्रवाह आक्रमणों के सापेक्ष

जैसे-जैसे वस्तुओ की इंटरनेट के विस्तार के कारण छोटे एम्बेडेड प्रणाली बढ़ रहे हैं, ऐसे एम्बेडेड प्रणाली की सुरक्षा की आवश्यकता भी बढ़ रही है। हार्डवेयर में कार्यान्वित निर्देश आधारित मेमोरी उपयोग नियंत्रण (IB-MAC) का उपयोग करके, कम लागत वाले एम्बेडेड प्रणाली को दुर्भावनापूर्ण नियंत्रण प्रवाह और स्टैक ओवरफ्लो आक्रमणों से बचाना संभव है। डेटा स्टैक और वापसी स्टैक को अलग करके सुरक्षा प्रदान की जा सकती है। यद्यपि, कुछ एम्बेडेड प्रणाली में स्मृति प्रबंधन इकाई की कमी के कारण, सभी एम्बेडेड प्रणाली पर हार्डवेयर समाधान लागू नहीं किया जा सकता है।[23]


वापसी-उन्मुख रूटकिट्स के सापेक्ष

2010 में, जिन्कू ली एट अल द्वारा यह प्रस्तावित किया गया[24] कि उपयुक्त रूप से संशोधित संकलक प्रत्येक call fको निर्देश क्रम pushl $index; jmp fऔर निर्देश क्रम popl %reg; jmp table(%reg)के सापेक्ष प्रत्येक ret को परिवर्तित कर वापसी-उन्मुख उपकरण को पूरी तरह से समाप्त कर सकता है जहाँ table फलन में सभी वैध वापसी पतों के एक अपरिवर्तनीय सारणीकरण का प्रतिनिधित्व करता है और index उस तालिका में एक विशिष्ट अनुक्रमणिका का प्रतिनिधित्व करता है।[24]: 5–6  यह एक वापसी-उन्मुख उपकरण के निर्माण को रोकता है जो किसी फलन के अंत से सीधे किसी अन्य फलन के मध्य किसी यादृच्छिक पते पर लौटता है; इसके अतिरिक्त, गैजेट केवल वैध वापसी पतों पर वापस आ सकते हैं, जो उपयोगी गैजेट बनाने की कठिनाई को अत्यधिक बढ़ा देता है। ली एट अल ने यह दावा किया कि हमारी वापसी संकेत तकनीक अनिवार्य रूप से वापसी-उन्मुख प्रोग्रामिंग को वापसी-इन-लिबक की पुरानी शैली में वापस सामान्य करती है।[24]उनके प्रूफ-ऑफ-कॉन्सेप्ट कंपाइलर में कुछ यंत्र निर्देशों से निपटने के लिए एक पीपहोल अनुकूलन चरण सम्मिलित था, जिसमें उनके ऑपकूट या तत्काल संकार्य में वापसी ओपोड सम्मिलित होता है,[24]जैसे कि movl $0xC3, %eax.आदि।

सूचक प्रमाणीकरण कूट (पीएसी)

ARMv8.3-A स्थापत्य हार्डवेयर स्तर पर एक नई सुविधा प्रस्तुत करता है जो विशेष रूप से प्ररूपित किए गए ट्वीकेबल ब्लॉक सिफर का उपयोग करके सूचक पता स्थान में अप्रयुक्त बिट्स का लाभ उठाता है।[25][26] जो एक स्थानीय संदर्भ मूल्य (जैसे, स्टैक सूचक) के साथ संयुक्त रूप से वांछित मान (सामान्यत, एक वापसी पता) पर हस्ताक्षर करता है।

एक संवेदनशील संक्रिया करने से पहले (अर्थात, सहेजे गए सूचक पर वापस लौटना) गलत संदर्भ में छेड़छाड़ या उपयोग का पता लगाने के लिए हस्ताक्षर की जाँच की जा सकती है उदाहरण के लिए, एक ट्रैम्पोलिन संदर्भ से सहेजे गए वापसी पते का लाभ उठाना आदि ।

विशेष रूप से iPhones में उपयोग किए जाने वाले Apple A12 चिप्स ARMv8.3 में अपग्रेड किए गए हैं और पी ए सी का उपयोग करते हैं। लिनक्स को 2020 में जारी संस्करण 5.7 में कर्नेल के भीतर सूचक प्रमाणीकरण के लिए समर्थन प्राप्त हुआ; उपयोगकर्ता अंतरिक्ष अनुप्रयोगों के लिए समर्थन 2018 में जोड़ा गया था।[27]

2022 में, एम आइ टी के शोधकर्ताओं ने पी ए सी के सापेक्ष एक साइड-चैनल आक्रमण को पैकमैन नामित किया।[28]


यह भी देखें

टिप्पणियाँ

  1. 1.0 1.1 Some authors use the term gadget in a somewhat different way and refer to it as mere chunks of program logic or short sequences of opcodes crafted to perform some desired action.[29]


संदर्भ

  1. Vázquez, Hugo (2007-10-01). "Check Point Secure Platform Hack" (PDF). Pentest (in English). Barcelona, Spain: Pentest Consultores. p. 219.
  2. "Thread: CheckPoint Secure Platform Multiple Buffer Overflows". The Check Point User Group.
  3. Shacham, Hovav; Buchanan, Erik; Roemer, Ryan; Savage, Stefan. "Return-Oriented Programming: Exploits Without Code Injection". Retrieved 2009-08-12.
  4. Buchanan, E.; Roemer, R.; Shacham, H.; Savage, S. (October 2008). "When Good Instructions Go Bad: Generalizing Return-Oriented Programming to RISC" (PDF). Proceedings of the 15th ACM conference on Computer and communications security - CCS '08. pp. 27–38. doi:10.1145/1455770.1455776. ISBN 978-1-59593-810-7. S2CID 11176570.
  5. Microsoft Windows XP SP2 Data Execution Prevention
  6. Solar Designer, Return-into-lib(c) exploits, Bugtraq
  7. Nergal, Phrack 58 Article 4, return-into-lib(c) exploits
  8. Sebastian Krahmer, x86-64 buffer overflow exploits and the borrowed code chunks exploitation technique, September 28, 2005
  9. Abadi, M. N.; Budiu, M.; Erlingsson, Ú.; Ligatti, J. (November 2005). "Control-Flow Integrity: Principles, Implementations, and Applications". Proceedings of the 12th ACM conference on Computer and communications security - CCS '05. pp. 340–353. doi:10.1145/1102120.1102165. ISBN 1-59593-226-7. S2CID 3339874.
  10. Abadi, M. N.; Budiu, M.; Erlingsson, Ú.; Ligatti, J. (October 2009). "Control-flow integrity principles, implementations, and applications". ACM Transactions on Information and System Security. 13: 1–40. doi:10.1145/1609956.1609960. S2CID 207175177.
  11. 11.0 11.1 11.2 Shacham, H. (October 2007). "The geometry of innocent flesh on the bone: return-into-libc without function calls (on the x86)". Proceedings of the 14th ACM conference on Computer and communications security - CCS '07. pp. 552–561. doi:10.1145/1315245.1315313. ISBN 978-1-59593-703-2. S2CID 11639591.
  12. Jonathan Salwan and Allan Wirth, ROPgadget - Gadgets finder and auto-roper
  13. [Shacham et al., 2004] Hovav Shacham, Matthew Page, Ben Pfaff, Eu-Jin Goh, Nagendra Modadugu, and Dan Boneh. On the effectiveness of address-space randomization. In Proceedings of the 11th ACM conference on Computer and Communications Security (CCS), 2004.
  14. [Bennett et al., 2013] James Bennett, Yichong Lin, and Thoufique Haq. The Number of the Beast, 2013. https://www.fireeye.com/blog/threat-research/2013/02/the-number-of-the-beast.html
  15. CHECKOWAY, S., DAVI, L., DMITRIENKO, A., SADEGHI, A.-R., SHACHAM, H., AND WINANDY, M. 2010. Return-oriented programming without returns. In Proceedings of CCS 2010, A. Keromytis and V. Shmatikov, Eds. ACM Press, 559–72
  16. ONARLIOGLU, K., BILGE, L., LANZI, A., BALZAROTTI, D., AND KIRDA, E. 2010. G-Free: Defeating return-oriented programming through gadget-less binaries. In Proceedings of ACSAC 2010, M. Franz and J. McDermott, Eds. ACM Press, 49–58.
  17. Skowyra, R.; Casteel, K.; Okhravi, H.; Zeldovich, N.; Streilein, W. (October 2013). "Systematic Analysis of Defenses against Return-Oriented Programming" (PDF). Research in Attacks, Intrusions, and Defenses. Lecture Notes in Computer Science. Vol. 8145. pp. 82–102. doi:10.1007/978-3-642-41284-4_5. ISBN 978-3-642-41283-7. Archived from the original (PDF) on 2014-02-22.
  18. Venkat, Ashish; Shamasunder, Sriskanda; Shacham, Hovav; Tullsen, Dean M. (2016-01-01). "HIPStR: Heterogeneous-ISA Program State Relocation". Proceedings of the Twenty-First International Conference on Architectural Support for Programming Languages and Operating Systems. ASPLOS '16. New York, NY, USA: ACM: 727–741. doi:10.1145/2872362.2872408. ISBN 9781450340915. S2CID 7853786.
  19. Hiser, J.; Nguyen-Tuong, A.; Co, M.; Hall, M.; Davidson, J. W. (May 2012). "ILR: Where'd My Gadgets Go?". 2012 IEEE Symposium on Security and Privacy. pp. 571–585. doi:10.1109/SP.2012.39. ISBN 978-1-4673-1244-8. S2CID 15696223.
  20. US 9135435, Venkat, Ashish; Krishnaswamy, Arvind & Yamada, Koichi et al., "Binary translator driven program state relocation", published 2015-09-15, assigned to Intel Corp. 
  21. Vasilis Pappas. kBouncer: Efficient and Transparent ROP Mitigation. April 2012.
  22. US application 2019347385, Shelly, Asaf, "Security methods and systems by code mutation", published 2019-11-14 , since abandoned.
  23. FRANCILLON, A., PERITO, D., AND CASTELLUCCIA, C. 2009. Defending embedded systems against control flow attacks. In Proceedings of SecuCode 2009, S. Lachmund and C. Schaefer, Eds. ACM Press, 19–26.
  24. 24.0 24.1 24.2 24.3 Jinku LI, Zhi WANG, Xuxian JIANG, Mike GRACE, and Sina BAHRAM. Defeating return-oriented rootkits with "return-less" kernels. In Proceedings of EuroSys 2010, edited by G. Muller. ACM Press, 195–208.
  25. Avanzi, Roberto (2016). The QARMA Block Cipher Family (PDF). IACR Transactions on Symmetric Cryptology (ToSC). Vol. 17 (published 8 March 2017). pp. 4–44. doi:10.13154/tosc.v2017.i1.4-44. Archived from the original (PDF) on May 13, 2020.
  26. Qualcomm Product Security. "Pointer Authentication on ARMv8.3" (PDF). Qualcomm Technologies Inc. Archived (PDF) from the original on June 6, 2020. Retrieved June 16, 2020. Thus, we designed QARMA, a new family of lightweight tweakable block ciphers.
  27. "Linux 5.7 For 64-bit ARM Brings In-Kernel Pointer Authentication, Activity Monitors - Phoronix". www.phoronix.com. Retrieved 2020-03-31.
  28. Ravichandran, Joseph; Na, Weon Taek; Lang, Jay; Yan, Mengjia (June 2022). "PACMAN: attacking ARM pointer authentication with speculative execution". Proceedings of the 49th Annual International Symposium on Computer Architecture. Association for Computing Machinery. doi:10.1145/3470496.3527429.
  29. Cha, Sang Kil; Pak, Brian; Brumley, David; Lipton, Richard Jay (2010-10-08) [2010-10-04]. Platform-Independent Programs (PDF). Proceedings of the 17th ACM conference on Computer and Communications Security (CCS'10). Chicago, Illinois, USA: Carnegie Mellon University, Pittsburgh, Pennsylvania, USA / Georgia Institute of Technology, Atlanta, Georgia, USA. pp. 547–558. doi:10.1145/1866307.1866369. ISBN 978-1-4503-0244-9. Archived (PDF) from the original on 2022-05-26. Retrieved 2022-05-26. [1] (12 pages) (See also: [2]) (NB. Uses the term gadget for chunks of program logic, in this case divided into gadget header and gadget body.)


बाहरी संबंध