Stack buffer overflow
সফ্টওয়্যারে, একটি স্ট্যাক বাফার ওভারফ্লো বা স্ট্যাক বাফার ওভাররান ঘটে যখন কোনও প্রোগ্রাম কাঙ্ক্ষিত ডেটা কাঠামোর বাইরে প্রোগ্রামের কল স্ট্যাকের একটি মেমরি ঠিকানায় লেখে, যা সাধারণত একটি নির্দিষ্ট দৈর্ঘ্যের বাফার। স্ট্যাক বাফার ওভারফ্লো বাগগুলি তখন ঘটে যখন কোনও প্রোগ্রাম স্ট্যাকের উপর অবস্থিত কোনও বাফারের কাছে সেই বাফারের জন্য বরাদ্দকৃত তথ্যের চেয়ে বেশি তথ্য লেখে। এর ফলে প্রায় সবসময়ই স্ট্যাকের সংলগ্ন ডেটা নষ্ট হয়ে যায় এবং ভুলবশত ওভারফ্লো শুরু হয়ে গেলে প্রায়শই প্রোগ্রামটি ক্র্যাশ বা ভুলভাবে কাজ করবে। স্ট্যাক বাফার ওভারফ্লো হল এক ধরনের সাধারণ প্রোগ্রামিং ত্রুটি যা বাফার ওভারফ্লো (বা বাফার ওভাররান) নামে পরিচিত। স্ট্যাকের উপর একটি বাফার অতিরিক্ত ভরাট করার ফলে হিপে একটি বাফার অতিরিক্ত ভরাট করার চেয়ে প্রোগ্রামের কার্যকারিতাকে লাইনচ্যুত করার সম্ভাবনা বেশি কারণ স্ট্যাকটিতে সমস্ত সক্রিয় ফাংশন কলগুলির জন্য রিটার্ন ঠিকানা রয়েছে। একটি স্ট্যাক বাফার ওভারফ্লো ইচ্ছাকৃতভাবে স্ট্যাক স্ম্যাশিং নামে পরিচিত আক্রমণের অংশ হিসাবে ঘটতে পারে। যদি প্রভাবিত প্রোগ্রামটি বিশেষ সুবিধা নিয়ে চলছে, অথবা অবিশ্বস্ত নেটওয়ার্ক হোস্টের কাছ থেকে তথ্য গ্রহণ করে (যেমন। একটি ওয়েব সার্ভার) তাহলে বাগটি একটি সম্ভাব্য নিরাপত্তা দুর্বলতা। যদি স্ট্যাক বাফারটি কোনও অবিশ্বস্ত ব্যবহারকারীর সরবরাহ করা ডেটা দিয়ে ভরা থাকে তবে সেই ব্যবহারকারী স্ট্যাকটিকে এমনভাবে কলুষিত করতে পারে যাতে চলমান প্রোগ্রামে এক্সিকিউটেবল কোড ইনজেক্ট করা যায় এবং প্রক্রিয়াটির নিয়ন্ত্রণ নিতে পারে। এটি আক্রমণকারীদের কম্পিউটারে অননুমোদিত প্রবেশাধিকার অর্জনের জন্য প্রাচীনতম এবং আরও নির্ভরযোগ্য পদ্ধতিগুলির মধ্যে একটি। স্ট্যাক-ভিত্তিক বাফার ওভারফ্লোকে কাজে লাগানোর ক্যানোনিকাল পদ্ধতি হল আক্রমণকারী-নিয়ন্ত্রিত ডেটার (সাধারণত স্ট্যাকের উপর) পয়েন্টার দিয়ে ফাংশন রিটার্ন অ্যাড্রেসকে ওভাররাইট করা। এটি নিম্নলিখিত উদাহরণে স্ট্রাকপি () দিয়ে চিত্রিত করা হয়েছেঃ #include <string.h> অকার্যকর ফু (চার * বার) {চার সি [12]; স্ট্রাকপি (সি, বার);// নো বাউন্ডস চেকিং} ইন্ট মেইন (ইন্ট আরজিসি, চার * * আরজভি) {ফু (আরজভি [1]); রিটার্ন 0;} এই কোডটি কমান্ড লাইন থেকে একটি আর্গুমেন্ট নেয় এবং এটিকে একটি স্থানীয় স্ট্যাক ভেরিয়েবল সি-তে অনুলিপি করে। এটি 12 অক্ষরের চেয়ে ছোট কমান্ড-লাইন আর্গুমেন্টের জন্য ভাল কাজ করে (যেমন নীচের চিত্র বি-তে দেখা যায়)। 11 অক্ষরের চেয়ে বড় যে কোনও আর্গুমেন্টের ফলে স্ট্যাকের দুর্নীতি হবে। (নিরাপদ অক্ষরের সর্বাধিক সংখ্যা এখানে বাফারের আকারের চেয়ে এক কম কারণ সি প্রোগ্রামিং ভাষায়, স্ট্রিংগুলি একটি নাল বাইট অক্ষর দ্বারা শেষ করা হয়। একটি বারো-অক্ষরের ইনপুট সংরক্ষণের জন্য তেরোটি বাইটের প্রয়োজন হয়, ইনপুটটি সেন্টিনেল শূন্য বাইটের পরে থাকে। শূন্য বাইট তারপর একটি মেমরি অবস্থানের উপর পুনর্লিখন করে যা বাফারের শেষের বাইরে এক বাইট।) প্রোগ্রামটি বিভিন্ন ইনপুট সহ ফো ()-এ স্ট্যাক করেঃ উপরের চিত্র সি-তে, যখন কমান্ড লাইনে 11 বাইটের চেয়ে বড় একটি আর্গুমেন্ট সরবরাহ করা হয় তখন ফো () স্থানীয় স্ট্যাক ডেটা, সংরক্ষিত ফ্রেম পয়েন্টার এবং সবচেয়ে গুরুত্বপূর্ণভাবে, রিটার্ন অ্যাড্রেস ওভাররাইট করে। যখন ফো () ফেরত দেয় তখন এটি স্ট্যাক থেকে ফেরত ঠিকানাটি বের করে দেয় এবং সেই ঠিকানায় চলে যায় (অর্থাৎ। সেই ঠিকানা থেকে নির্দেশাবলী কার্যকর করা শুরু করে)। এইভাবে, আক্রমণকারী স্ট্যাক বাফার চার সি [12]-এর একটি পয়েন্টার দিয়ে রিটার্ন অ্যাড্রেসটি ওভাররাইট করেছে, যা এখন আক্রমণকারী-সরবরাহকৃত ডেটা ধারণ করে। একটি প্রকৃত স্ট্যাক বাফার ওভারফ্লো এক্সপ্লোইটে "এ"-এর স্ট্রিং প্ল্যাটফর্ম এবং পছন্দসই ফাংশনের জন্য উপযুক্ত শেলকোড হবে। যদি এই কর্মসূচির বিশেষ সুবিধা থাকত (যেমন। সুপার ইউজার হিসাবে চালানোর জন্য সেট করা এস. ইউ. আই. ডি বিট), তারপর আক্রমণকারী এই দুর্বলতা ব্যবহার করে প্রভাবিত মেশিনে সুপার ইউজারের সুবিধা অর্জন করতে পারে। আক্রমণকারী কিছু বাগ কাজে লাগানোর জন্য অভ্যন্তরীণ পরিবর্তনশীল মানও পরিবর্তন করতে পারে। এই উদাহরণের সাহায্যেঃ #include <string.h> #include <stdio.h> বাতিল ফু (চার * বার) {ফ্লোট মাই ফ্লোট = 10.5;// অ্যাডর = 0x0023FF4C চার সি [28];// অ্যাডর = 0x0023FF30// প্রিন্ট করবে 10.500000 প্রিন্টএফ ("মাই ফ্লোট ভ্যালু =% f", মাই ফ্লোট);/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ !!!! এক্সএক্সএক্সএক্স "); মেমকপি মাই ফ্লোট মানের মধ্যে 0x1010সি042 (লিটল এন্ডিয়ান) রাখবে। ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ !!!! \x10\x10\xc0\x42 "); রিটার্ন 0;} প্ল্যাটফর্ম-সম্পর্কিত পার্থক্য কল স্ট্যাকের বাস্তবায়নে বেশ কয়েকটি প্ল্যাটফর্মের সূক্ষ্ম পার্থক্য রয়েছে যা একটি স্ট্যাক বাফার ওভারফ্লো শোষণ যেভাবে কাজ করবে তা প্রভাবিত করতে পারে। কিছু মেশিন আর্কিটেকচার কল স্ট্যাকের শীর্ষ-স্তরের রিটার্ন ঠিকানা একটি রেজিস্টারে সংরক্ষণ করে। এর অর্থ হল যে কোনও ওভাররাইট করা রিটার্ন অ্যাড্রেস কল স্ট্যাকের পরে আনওয়াইন্ড না হওয়া পর্যন্ত ব্যবহার করা হবে না। যন্ত্র-নির্দিষ্ট বিবরণের আরেকটি উদাহরণ যা শোষণ কৌশলগুলির পছন্দকে প্রভাবিত করতে পারে তা হল বেশিরভাগ আরআইএসসি-শৈলীর যন্ত্র স্থাপত্যগুলি স্মৃতিতে অসংলগ্ন প্রবেশাধিকারের অনুমতি দেবে না। মেশিন অপকোডের জন্য একটি নির্দিষ্ট দৈর্ঘ্যের সাথে মিলিত হয়ে, এই মেশিন সীমাবদ্ধতা স্ট্যাকে ঝাঁপ দেওয়ার কৌশলটি বাস্তবায়ন করা প্রায় অসম্ভব করে তুলতে পারে (একটি ব্যতিক্রম হল যখন প্রোগ্রামে প্রকৃতপক্ষে স্ট্যাক রেজিস্টারে ঝাঁপ দেওয়ার জন্য অসম্ভব কোড থাকে)। স্ট্যাক বাফার ওভারফ্লো বিষয়ের মধ্যে, একটি প্রায়শই আলোচিত-কিন্তু-বিরল-দৃশ্যমান স্থাপত্য এমন একটি যেখানে স্ট্যাকটি বিপরীত দিকে বৃদ্ধি পায়। স্থাপত্যের এই পরিবর্তনটি প্রায়শই স্ট্যাক বাফার ওভারফ্লো সমস্যার সমাধান হিসাবে পরামর্শ দেওয়া হয় কারণ একই স্ট্যাক ফ্রেমের মধ্যে ঘটে যাওয়া স্ট্যাক বাফারের কোনও ওভারফ্লো রিটার্ন পয়েন্টারকে ওভাররাইট করতে পারে না। যাইহোক, পূর্ববর্তী স্ট্যাক ফ্রেম থেকে একটি বাফারের মধ্যে যে কোনও ওভারফ্লো ঘটে তা এখনও একটি রিটার্ন পয়েন্টারকে ওভাররাইট করবে এবং বাগের বিদ্বেষপূর্ণ শোষণের অনুমতি দেবে। উদাহরণস্বরূপ, উপরের উদাহরণে, ফো-এর জন্য রিটার্ন পয়েন্টারটি ওভাররাইট করা হবে না কারণ ওভারফ্লো আসলে মেমকপির জন্য স্ট্যাক ফ্রেমের মধ্যে ঘটে। যাইহোক, যেহেতু মেমকপিতে কল করার সময় যে বাফার ওভারফ্লো হয় তা পূর্ববর্তী স্ট্যাক ফ্রেমে থাকে, তাই মেমকপির রিটার্ন পয়েন্টারের বাফারের তুলনায় সংখ্যাসূচকভাবে উচ্চতর মেমরি ঠিকানা থাকবে। এর মানে হল যে, ফো-এর রিটার্ন পয়েন্টারের পরিবর্তে মেমকপির রিটার্ন পয়েন্টারটি ওভাররাইট করা হবে। সর্বাধিক, এর অর্থ হল যে স্ট্যাকটি বিপরীত দিকে বাড়ানোর ফলে স্ট্যাক বাফার ওভারফ্লো কীভাবে শোষণযোগ্য তার কিছু বিবরণ পরিবর্তিত হবে, তবে এটি শোষণযোগ্য বাগের সংখ্যা উল্লেখযোগ্যভাবে হ্রাস করবে না। বছরের পর বছর ধরে, দূষিত স্ট্যাক বাফার ওভারফ্লো শোষণ রোধ করার জন্য বেশ কয়েকটি নিয়ন্ত্রণ-প্রবাহ অখণ্ডতা প্রকল্প তৈরি করা হয়েছে। এগুলি সাধারণত তিনটি বিভাগে শ্রেণীবদ্ধ করা যেতে পারেঃ একটি স্ট্যাক বাফার ওভারফ্লো ঘটেছে তা সনাক্ত করুন এবং এইভাবে নির্দেশ পয়েন্টারটিকে দূষিত কোডে পুনর্নির্দেশ করা প্রতিরোধ করুন। স্ট্যাক বাফার ওভারফ্লো সরাসরি সনাক্ত না করে স্ট্যাক থেকে দূষিত কোড কার্যকর করা রোধ করুন। মেমরি স্পেসকে এমনভাবে এলোমেলো করুন যাতে এক্সিকিউটেবল কোড খুঁজে পাওয়া অবিশ্বস্ত হয়ে পড়ে। স্ট্যাক ক্যানারি, একটি কয়লা খনিতে একটি ক্যানারির সাথে তাদের সাদৃশ্যের জন্য নামকরণ করা হয়েছে, দূষিত কোড কার্যকর হওয়ার আগে একটি স্ট্যাক বাফার ওভারফ্লো সনাক্ত করতে ব্যবহৃত হয়। এই পদ্ধতিটি একটি ছোট পূর্ণসংখ্যা স্থাপন করে কাজ করে, যার মান স্ট্যাক রিটার্ন পয়েন্টারের ঠিক আগে মেমরিতে প্রোগ্রামের শুরুতে এলোমেলোভাবে বেছে নেওয়া হয়। বেশিরভাগ বাফার ওভারফ্লো নিম্ন থেকে উচ্চতর মেমরি ঠিকানাগুলিতে মেমরি ওভাররাইট করে, তাই রিটার্ন পয়েন্টারটি ওভাররাইট করার জন্য (এবং এইভাবে প্রক্রিয়াটির নিয়ন্ত্রণ নিতে) ক্যানারি মানটিও ওভাররাইট করতে হবে। একটি রুটিন স্ট্যাকের রিটার্ন পয়েন্টার ব্যবহার করার আগে এটি পরিবর্তন হয়নি তা নিশ্চিত করার জন্য এই মানটি পরীক্ষা করা হয়। এই কৌশলটি স্ট্যাক বাফার ওভারফ্লোকে কাজে লাগানোর অসুবিধা ব্যাপকভাবে বাড়িয়ে তুলতে পারে কারণ এটি আক্রমণকারীকে স্ট্যাকের অন্যান্য গুরুত্বপূর্ণ ভেরিয়েবলগুলিকে দূষিত করার মতো কিছু অপ্রচলিত উপায়ে নির্দেশ পয়েন্টারের নিয়ন্ত্রণ অর্জন করতে বাধ্য করে। স্ট্যাক বাফার ওভারফ্লো শোষণ প্রতিরোধের আরেকটি পদ্ধতি হল স্ট্যাক মেমরি অঞ্চলে একটি মেমরি নীতি প্রয়োগ করা যা স্ট্যাক থেকে কার্যকর করার অনুমতি দেয় না (ডাব্লুএক্স, "এক্সওআর এক্সিকিউট লিখুন")। এর মানে হল যে স্ট্যাক থেকে শেলকোড কার্যকর করার জন্য একজন আক্রমণকারীকে অবশ্যই মেমরি থেকে এক্সিকিউশন সুরক্ষা নিষ্ক্রিয় করার একটি উপায় খুঁজে বের করতে হবে, অথবা তাদের শেলকোড পেলোডকে মেমরির একটি অ-সুরক্ষিত অঞ্চলে রাখার একটি উপায় খুঁজে বের করতে হবে। এই পদ্ধতিটি এখন আরও জনপ্রিয় হয়ে উঠছে কারণ বেশিরভাগ ডেস্কটপ প্রসেসরে নো-এক্সিকিউট ফ্ল্যাগের জন্য হার্ডওয়্যার সমর্থন পাওয়া যায়। যদিও এই পদ্ধতিটি ক্যানোনিকাল স্ট্যাক স্ম্যাশিং এক্সপ্লয়েটকে বাধা দেয়, স্ট্যাক ওভারফ্লো অন্যান্য উপায়ে ব্যবহার করা যেতে পারে। প্রথমত, স্তূপের মতো অরক্ষিত স্মৃতি অঞ্চলে শেলকোড সংরক্ষণের উপায় খুঁজে পাওয়া সাধারণ, এবং তাই শোষণের পদ্ধতিতে খুব কম পরিবর্তন প্রয়োজন। আরেকটি আক্রমণ হল শেলকোড তৈরির জন্য তথাকথিত রিটার্ন টু লিবসি পদ্ধতি। এই আক্রমণে দূষিত পেলোড স্ট্যাকটি শেলকোডের সাথে নয়, বরং একটি যথাযথ কল স্ট্যাকের সাথে লোড করবে যাতে এক্সিকিউশনটি স্ট্যান্ডার্ড লাইব্রেরি কলগুলির একটি শৃঙ্খলে ভেক্টর করা হয়, সাধারণত মেমরি এক্সিকিউশন সুরক্ষা অক্ষম করার এবং শেলকোডকে স্বাভাবিক হিসাবে চালানোর অনুমতি দেওয়ার প্রভাব সহ। এটি কাজ করে কারণ এক্সিকিউশনটি আসলে কখনই স্ট্যাকের ভেক্টর নয়। রিটার্ন-টু-লিবসির একটি রূপ হল রিটার্ন-ওরিয়েন্টেড প্রোগ্রামিং (আরওপি), যা রিটার্ন ঠিকানাগুলির একটি সিরিজ সেট করে, যার প্রতিটি বিদ্যমান প্রোগ্রাম কোড বা সিস্টেম লাইব্রেরির মধ্যে চেরি-বাছাই করা মেশিন নির্দেশাবলীর একটি ছোট ক্রম কার্যকর করে, যা একটি রিটার্ন দিয়ে শেষ হয়। এই তথাকথিত গ্যাজেটগুলি ফিরে আসার আগে কিছু সহজ রেজিস্টার ম্যানিপুলেশন বা অনুরূপ এক্সিকিউশন সম্পন্ন করে এবং তাদের একসাথে স্ট্রিং করা আক্রমণকারীর লক্ষ্য অর্জন করে। এমনকি "রিটার্নলেস" রিটার্ন-ওরিয়েন্টেড প্রোগ্রামিং ব্যবহার করা সম্ভব নির্দেশাবলী বা নির্দেশাবলীর গোষ্ঠীগুলিকে কাজে লাগিয়ে যা অনেকটা রিটার্ন নির্দেশের মতো আচরণ করে। ডেটা থেকে কোডকে আলাদা করার পরিবর্তে, আরেকটি প্রশমন কৌশল হল এক্সিকিউটিভ প্রোগ্রামের মেমরি স্পেসে র্যান্ডমাইজেশন প্রবর্তন করা। যেহেতু অ্যাটাকারকে নির্ধারণ করতে হয় যে এক্সিকিউটেবল কোডটি কোথায় ব্যবহার করা যেতে পারে, হয় একটি এক্সিকিউটেবল পেলোড সরবরাহ করা হয় (একটি এক্সিকিউটেবল স্ট্যাক সহ) অথবা একটি কোড পুনঃব্যবহার ব্যবহার করে তৈরি করা হয় যেমন রেট2লিবসি বা রিটার্ন-ওরিয়েন্টেড প্রোগ্রামিং (আরওপি)। মেমরি বিন্যাসকে এলোমেলো করা, একটি ধারণা হিসাবে, আক্রমণকারীকে কোনও কোড কোথায় তা জানতে বাধা দেবে। যাইহোক, বাস্তবায়নগুলি সাধারণত সবকিছু এলোমেলো করে না; সাধারণত এক্সিকিউটেবল নিজেই একটি নির্দিষ্ট ঠিকানায় লোড করা হয় এবং তাই যখন এএসএলআর (অ্যাড্রেস স্পেস লেআউট র্যান্ডমাইজেশন) একটি অকার্যকর স্ট্যাকের সাথে মিলিত হয় তখনও আক্রমণকারী মেমরির এই নির্দিষ্ট অঞ্চলটি ব্যবহার করতে পারে। অতএব, সমস্ত প্রোগ্রামকে পি. আই. ই (পজিশন-ইন্ডিপেন্ডেন্ট এক্সিকিউটেবল) দিয়ে সংকলিত করা উচিত যাতে মেমরির এই অঞ্চলটিও এলোমেলো হয়। র্যান্ডমাইজেশনের এনট্রপি বাস্তবায়ন থেকে বাস্তবায়নের মধ্যে আলাদা এবং যথেষ্ট কম এনট্রপি নিজেই র্যান্ডমাইজড মেমরি স্পেসকে ব্রুট ফোর্সিংয়ের ক্ষেত্রে একটি সমস্যা হতে পারে। বাইপাস পাল্টা ব্যবস্থা পূর্ববর্তী প্রশমনগুলি শোষণের পদক্ষেপগুলিকে আরও কঠিন করে তোলে। তবে কিছু দুর্বলতা উপস্থিত থাকলে বা কিছু শর্ত পূরণ করা হলে স্ট্যাক বাফার ওভারফ্লো ব্যবহার করা এখনও সম্ভব। স্ট্যাক ক্যানারি বাইপাস ফরম্যাট স্ট্রিং দুর্বলতা শোষণ সহ তথ্য ফাঁস একটি আক্রমণকারী দুর্বল প্রোগ্রামে মেমরির অবস্থানগুলি প্রকাশ করার জন্য ফরম্যাট স্ট্রিং দুর্বলতা কাজে লাগাতে সক্ষম। অ-এক্সিকিউটেবল স্ট্যাক বাইপাস যখন ডেটা এক্সিকিউশন প্রিভেনশন স্ট্যাকের কোনও এক্সিকিউটিভ অ্যাক্সেস নিষিদ্ধ করার জন্য সক্ষম করা হয়, তখনও আক্রমণকারী কোনও কোড বিভাগে (লিনাক্সে) বা প্রোগ্রামের অন্য প্রতিটি এক্সিকিউটেবল বিভাগে ডেটা নির্দেশ করতে ওভাররাইট রিটার্ন অ্যাড্রেস (নির্দেশ পয়েন্টার) ব্যবহার করতে পারে। লক্ষ্য হল বিদ্যমান কোড পুনরায় ব্যবহার করা। রোপ চেইন প্রোগ্রামের রিটার্ন নির্দেশের (x86-এ রিট) একটু আগে রিটার্ন পয়েন্টারটিকে ওভাররাইট করে। নতুন রিটার্ন পয়েন্টার এবং রিটার্ন নির্দেশের মধ্যে নির্দেশাবলী কার্যকর করা হবে এবং রিটার্ন নির্দেশটি শোষক দ্বারা নিয়ন্ত্রিত পে-লোডে ফিরে আসবে। জোপ চেইন জাম্প ওরিয়েন্টেড প্রোগ্রামিং এমন একটি কৌশল যা পুনরায় নির্দেশের পরিবর্তে কোড পুনরায় ব্যবহার করার জন্য জাম্প নির্দেশাবলী ব্যবহার করে। র্যান্ডমাইজেশন বাইপাস 64-বিট সিস্টেমে এ. এস. এল. আর উপলব্ধির একটি সীমাবদ্ধতা হল যে এটি মেমরি প্রকাশ এবং তথ্য ফাঁসের আক্রমণের ঝুঁকিতে রয়েছে। আক্রমণকারী তথ্য ফাঁসের আক্রমণ ব্যবহার করে একটি একক ফাংশন ঠিকানা প্রকাশ করে আরওপি চালু করতে পারে। নিম্নলিখিত বিভাগটি এ. এস. এল. আর সুরক্ষা ভেঙে ফেলার জন্য অনুরূপ বিদ্যমান কৌশল বর্ণনা করে। উল্লেখযোগ্য উদাহরণ 1988 সালে মরিস কৃমি ইউনিক্স ফিঙ্গার সার্ভারে একটি স্ট্যাক বাফার ওভারফ্লো ব্যবহার করে আংশিকভাবে ছড়িয়ে পড়ে। 2003 সালে স্ল্যামার কৃমি মাইক্রোসফ্টের এসকিউএল সার্ভারে একটি স্ট্যাক বাফার ওভারফ্লো ব্যবহার করে ছড়িয়ে পড়ে। 2003 সালে ব্লাস্টার কৃমি মাইক্রোসফ্ট ডিসিওএম পরিষেবায় একটি স্ট্যাক বাফার ওভারফ্লো ব্যবহার করে ছড়িয়ে পড়ে। 2004 সালে ইন্টারনেট সিকিউরিটি সিস্টেম ব্ল্যাকআইসিই ডেস্কটপ এজেন্টে একটি স্ট্যাক বাফার ওভারফ্লো ব্যবহার করে উইটি ওয়ার্ম ছড়িয়ে পড়ে। ওয়াই-এর কয়েকটি উদাহরণ রয়েছে যা একটি অপরিবর্তিত সিস্টেমে নির্বিচারে কোড চালানোর অনুমতি দেয়। "টোয়াইলাইট হ্যাক"-এ দ্য লেজেন্ড অফ জেল্ডাঃ টোয়াইলাইট প্রিন্সেস-এ প্রধান চরিত্রের ঘোড়াকে একটি দীর্ঘ নাম দেওয়া হয়েছে এবং সুপার স্ম্যাশ ব্রাদার্স ব্রলের জন্য "স্ম্যাশ স্ট্যাক"-এ ইন-গেম স্তরের সম্পাদকের মধ্যে একটি বিশেষভাবে প্রস্তুত ফাইল লোড করার জন্য একটি এসডি কার্ড ব্যবহার করা হয়েছে। যদিও উভয়ই যে কোনও নির্বিচারে কোড চালানোর জন্য ব্যবহার করা যেতে পারে, তবে পরেরটি প্রায়শই প্রয়োগ করা পরিবর্তনগুলির সাথে ব্রল নিজেই পুনরায় লোড করতে ব্যবহৃত হয়। আরও দেখুন ExecShield হীপ ওভারফ্লো পূর্ণসংখ্যা ওভারফ্লো NX বিট-মেমরি নিরাপত্তা-বর্ধিত লিনাক্স স্ট্যাক ওভারফ্লো-এর ক্ষেত্রগুলির জন্য নো-এক্সিকিউট বিট-যখন স্ট্যাক নিজেই স্টোরেজ লঙ্ঘন ওভারফ্লো করে রেফারেন্স সফ্টওয়্যার বাগ সফ্টওয়্যার অসঙ্গতি কম্পিউটার নিরাপত্তা কম্পিউটার ত্রুটিগুলি শোষণ করে