পরিবেশের ভেরিয়েবলের অবস্থান কেন এত বেশি পরিবর্তিত হয়?


9

হ্যাকিং: জোন ইরিকসন র আর্ট অফ এক্সপ্লোয়েশন বইটি পড়া, আমি SHELLCODEএকটি প্রোগ্রামকে কাজে লাগানোর জন্য পরিবেশের পরিবর্তনশীলের ঠিকানা আনুমানিক করার চেষ্টা করছি ।

যতবার আমি getenv("SHELLCODE");লোকেশন পেতে দৌড়েছি , ফলাফলটি সম্পূর্ণ আলাদা।

আমার শেল থেকে নিষ্কাশন করুন:

> for i in $(seq 10); do ./a.out SHELLCODE; done
SHELLCODE is at 0xff9ab3a3
SHELLCODE is at 0xffcdb3a3
SHELLCODE is at 0xffb9a3a3
SHELLCODE is at 0xffa743a3
SHELLCODE is at 0xffdb43a3
SHELLCODE is at 0xfff683a3
SHELLCODE is at 0xffef03a3
SHELLCODE is at 0xffc1c3a3
SHELLCODE is at 0xff85a3a3
SHELLCODE is at 0xff8e03a3

আমি বুঝতে পারি যে যদি প্রোগ্রামের নামটি সংশোধন করা হয় বা নতুন পরিবেশের ভেরিয়েবল যুক্ত করা হয় তবে অবস্থানটি কিছুটা আলাদা হবে তবে কেন অবস্থানটি এতটা আলাদা হয়?


getenvম্যানুয়াল এটি একটি স্ট্রিং ভেরিয়েবল এর মান ধারণকারী একটি পয়েন্টার ফেরৎ বলেছেন। অন্য সব কিছুই অনির্দিষ্ট, সুতরাং আপনার কর্নেল এবং / অথবা সংকলক যেখানেই চান মানটি আটকে রাখতে পারে, যতক্ষণ না সেই নির্দেশক-প্রতিশ্রুতি সত্য থাকে stay আমি অনুমান করছি যে এর সঠিক উত্তরটি ভারী উইজার্ডারি হতে পারে এবং বিভিন্ন মেমরি ম্যাপিং বাস্তবায়নের বিশদ এবং চাঁদের ধাপের উপর নির্ভর করে। (আমি আপনাকে সঠিক উত্তর দিতে যথেষ্ট জাদুকর নই।)
আনকো

"আমি বুঝতে পারি যে যদি প্রোগ্রামের নামটি সংশোধন করা হয় বা নতুন পরিবেশের ভেরিয়েবল যুক্ত করা হয় তবে অবস্থানটি কিছুটা আলাদা হবে, তবে কেন অবস্থানটি এতটা আলাদা হয়?" এটি সম্ভাব্য সমস্ত বাস্তবায়নের সহজতম ক্ষেত্রে সত্য, তবে এটি অবশ্যই প্রয়োজন হয় না।
ডিএমকেকে --- প্রাক্তন মডারেটর বিড়ালছানা

উত্তর:


13

আপনি যা বর্ণনা করেন তা হ'ল অ্যাড্রেস স্পেস লেআউট র‌্যান্ডমাইজেশন (এএসএলআর) নামক একটি বিরোধী-শোষণ বৈশিষ্ট্য । মূলত, কার্নেল প্রতিটি সময় ডিস্ক থেকে প্রোগ্রামের ইএলএফ ফাইলটি লোড করার পরে কোনও প্রোগ্রামের ফাংশন কল স্ট্যাকের খুব উপরে ঠিকানা রাখে different ঠিকানা argvএবং পরিবেশের ভেরিয়েবলগুলি, যার মধ্যে আপনার শেলকোড এক, প্রতিটি প্রোগ্রামের অনুরোধের সাথে একটি পৃথক ঠিকানায় শেষ হয়।

এএসএলআর বাফার-ওভারফ্লো এবং স্ট্যাক-সম্পর্কিত দুর্বলতাগুলি কাজে লাগানো আরও শক্ত করে তুলবে বলে মনে করা হচ্ছে। শোষককে ফাংশন কল স্ট্যাকের ভেরিয়েবল এবং মানগুলির বিচিত্র ঠিকানাগুলির জন্য অ্যাকাউন্ট লিখতে বা কিছু করতে হবে।

দেখে মনে হচ্ছে আপনি এর মতো কিছু করে ASLR অক্ষম করতে পারবেন:

echo 0 > /proc/sys/kernel/randomize_va_space

মূল ব্যবহারকারী হিসাবে। যেহেতু আপনি উবুন্টুকে স্পষ্টভাবে উদ্ধৃত করেছেন, উপরের আদেশটি পৃথক:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

হ্যাঁ, এটি কৌশলটি করেছে। আমি লক্ষ্য করেছি যে বইয়ের লেখক উবুন্টু 10.04 ব্যবহার করেছেন, যার এখনও এএসএলআর নেই।
জানমান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.