বাফার ওভারফ্লো কি? একটি হ্যান্ডস-অন ওয়াকথ্রু
একটি বাস্তব C উদাহরণ, স্ট্যাক ডায়াগ্রাম এবং নিজে দেখার জন্য প্রয়োজনীয় টুলস দিয়ে বাফার ওভারফ্লো কিভাবে কাজ করে তা শিখুন।
একটি বাফার ওভারফ্লো ঘটে যখন একটি প্রোগ্রাম মেমরির একটি নির্দিষ্ট সাইজের খণ্ডে সেই খণ্ড ধারণ করতে পারে তার চেয়ে বেশি ডেটা লেখে। অতিরিক্ত বাইটগুলি সংলগ্ন মেমরিতে ছড়িয়ে পড়ে এবং সেই বাফারের পাশে কি আছে তার উপর নির্ভর করে আপনি ভেরিয়েবল নষ্ট করতে পারেন, প্রোগ্রাম ক্র্যাশ করাতে পারেন বা এক্সিকিউশন ফ্লো সম্পূর্ণভাবে হাইজ্যাক করতে পারেন। এটি সফটওয়্যার সিকিউরিটিতে সবচেয়ে পুরানো বাগ ক্লাসগুলির মধ্যে একটি এবং আজও CTF, CVE এবং এম্বেডেড ফার্মওয়্যারে দেখা যায়।
দুর্বল প্যাটার্ন
C তে একটি ক্লাসিক উদাহরণ এখানে দেওয়া হলো:
#include <string.h>
void greet(char *name) {
char buffer[64];
strcpy(buffer, name);
}
int main(int argc, char **argv) {
greet(argv[1]);
return 0;
}
strcpy আপনি যে স্ট্রিং পাস করেন সেটি buffer এ কপি করে, কোনো bounds চেকিং ছাড়াই। যদি argv[1] 64 বাইটের চেয়ে দীর্ঘ হয়, কপি অ্যারের শেষের পাশে যেতে থাকে। স্ট্যাকে, buffer অন্যান্য স্থানীয় ভেরিয়েবল, সংরক্ষিত রেজিস্টার এবং অবশেষে রিটার্ন অ্যাড্রেসের নিচে থাকে যা CPU কে বলে greet() শেষ হওয়ার পর কোথায় যেতে হবে। সেই রিটার্ন অ্যাড্রেসকে এমন একটি অ্যাড্রেস দিয়ে ওভারলেখ করুন যা আপনি নিয়ন্ত্রণ করেন এবং আপনি নিয়ন্ত্রণ করেন পরবর্তী কি চলবে।
কেন এটি এখনও কম্পাইল এবং চলে
C এবং C++ raw অ্যারেতে স্বয়ংক্রিয় bounds চেকিং করে না। strcpy, gets, sprintf এবং strcat এর মতো ফাংশন খুশিমনে একটি বাফারের শেষের পাস লেখে কারণ তারা শুধুমাত্র একটি null টার্মিনেটর বা একটি সোর্স লেন্থ সম্পর্কে যত্ন করে, ডেস্টিনেশনের প্রকৃত সাইজ সম্পর্কে নয়। এটি strncpy বা snprintf এর সাথে তুলনা করুন, যেগুলি একটি স্পষ্ট সাইজ আর্গুমেন্ট নেয় এবং সেখানে থেমে থাকে। দুর্বলতা সত্যিই
AI সহায়তায় লেখা, পর্যালোচনা ও প্রকাশ করেছেন Michal Pilch (CISSP), Korra Studio।
এটি Korra Studio-র নলেজ বেস থেকে একটি নোট — প্ল্যাটফর্মটি প্রতিটি বিষয়কে ১-এর-সাথে-১ মেন্টরিংয়ের সাথে জুড়ে দেয়।
বিনামূল্যে শুরু করুনarrow_forward