সি কম্পাইলার পতাকা ছাড়া বাফার ওভারফ্লোর জন্য উবুন্টুতে স্ট্যাক সুরক্ষা অক্ষম করুন


10

আমি কয়েকটি শেল কোড চেষ্টা করতে চাই এবং আমি লিনাক্স সুরক্ষা অক্ষম করতে চাই।

আমি জানি আমি পতাকা ব্যবহার করে সংকলন করতে পারি তবে আমি জানি যে এই সুরক্ষাগুলি অক্ষম করার জন্য অন্য কোনও উপায় রয়েছে যা আমি কেবল মনে করতে পারি না। আপনি কি আমাকে সাহায্য করতে পারেন?

উত্তর:


6

স্ট্যাক সুরক্ষা সংকলক দ্বারা সম্পন্ন করা হয় (স্ট্যাকটিতে কিছু অতিরিক্ত ডেটা যুক্ত করুন এবং কিছুটা কল এ স্ট্যাশ করুন, ফিরে আসার ক্ষেত্রে স্যানিটি পরীক্ষা করুন)। সংশোধন না করে এটি অক্ষম করতে পারে না। এটি সত্যিকার অর্থেই ...


6
এএসএলআর ওএসের রানটাইম সময়ে এটি করা প্রয়োজন। এনএক্স বিটগুলির জন্য সিস্টেম সমর্থনও প্রয়োজন। রানটাইমে কোন অংশটি অক্ষম করা যায় না?
জেফ ফেরল্যান্ড

25

ভনব্র্যান্ড কী আছে তার প্রসারিত করতে (সঠিকভাবে, +1) বলেছেন, লিনাক্সের স্ট্যাক সুরক্ষার দুটি অংশ রয়েছে।

ক্যানারি স্ট্যাক

স্ট্যাক ক্যানারিগুলি সংকলক-প্রয়োগকারী বৈশিষ্ট্য ভনব্র্যান্ডকে বোঝায়। এগুলি একটি পুনঃনির্দেশনা ব্যতীত অক্ষম করা যায় না।

এটি নিজের কাছে প্রমাণ করার জন্য এবং নীচের কোডটি কীভাবে তারা কাজ করে তা দেখুন:

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>

int mybadfunction(char* a_bad_idea)
{
    char what[100];
    strcpy(what, a_bad_idea);
    printf("You passed %s\n", what);
}

int main(int argc, char** argv)
{
    printf("Tralalalaala\n");
    mybadfunction(argv[1]);
}

gcc -fstack-protector -masm=intel -S test.cআউটপুট একত্রিত হয়ে এবং পড়তে খুশি হওয়ায় এখন এই ( ) কে gnu তে একটি সংকলন করুন। গুরুত্বপূর্ণ বিষয়টি হ'ল mybadfunctionফাংশন থেকে প্রস্থান করার সময় কোডের এই ছোট্ট অংশটি রয়েছে:

    mov edx, DWORD PTR [ebp-12]
    xor edx, DWORD PTR gs:20
    je  .L2
    call    __stack_chk_fail

আপনি অনুমান করতে পারেন, এটি স্ট্যাক কুকি গ্রহণ করছে [ebp-12]এবং এটির সাথে মানটির সাথে তুলনা করে gs:20। মেলে না? এরপরে এটি __stack_chk_failglibc এ একটি ফাংশন কল করে যা আপনার প্রোগ্রামটি ঠিক সেখানেই মেরে ফেলে।

লেখার শোষণের ক্ষেত্রে এটিকে ঘিরে কাজ করার উপায় রয়েছে তবে শেলকোড পরীক্ষার কেস তৈরির ক্ষেত্রে সহজ উপায় হ'ল আপনার প্রোগ্রামটি সংকলন করা -fno-stack-protector

নির্বাহযোগ্য পৃষ্ঠাগুলি

আধুনিক লিনাক্স সিস্টেমে আরও কিছু বিবেচনা রয়েছে। যদি আপনি সাধারণ শেলকোড পরীক্ষার স্টাব নেন:

char buffer[] = {...};

typedef void (* func)(void);

int main(int argc, char** argv)
{
    func f = (func) buffer;
    f();
    return 0;
}

আধুনিক জিসিসি / লিনাক্স .rodataকেবল চালানো অনুমতি ছাড়া পঠিত পিই ফাইলের বিভাগটি মানচিত্র করবে । আপনাকে এটি বন্ধ করতে হবে যা এই ব্লগ পোস্ট থেকে কোড নমুনা ব্যবহার করে করা যেতে পারে । বুনিয়াদি ধারণা: আপনি mprotectযে পৃষ্ঠাগুলিতে শেলকোড ডেটা থাকে সেগুলিতে আপনি যে অনুমতিগুলি চান তা যুক্ত করতে ব্যবহার করেন।

অ-এক্সিকিউটেবল স্ট্যাকস

আপনি যদি শেলকোড সহ একটি traditionalতিহ্যবাহী শোষণের দৃশ্যের উদাহরণস্বরূপ আমার উপরের খারাপ কোডটি পরীক্ষা করতে যাচ্ছেন তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে সহজ ক্ষেত্রে স্ট্যাক কার্যকর হয়। পিই ফাইল ফর্ম্যাটতে স্ট্যাকটি কার্যকরযোগ্য কিনা তা নির্ধারণের জন্য একটি ক্ষেত্র রয়েছে - আপনি এক্সিকিস্ট্যাকের সাহায্যে এটিকে কোয়েরি করতে এবং নিয়ন্ত্রণ করতে পারেন । এক্সিকিউটেবল স্ট্যাক সক্ষম করতে, চালান

execstack -s /path/to/myprog

এটি পুনরায় কম্পাইলের প্রয়োজন ছাড়াই নির্বিচারে প্রোগ্রামগুলিতে করা যেতে পারে তবে স্ট্যাক ক্যানারিগুলি স্বয়ংক্রিয়ভাবে অক্ষম করবে না কারণ এগুলি সংকলনে বেক করা হয়েছে।

যুক্ত বোনাস: aslr:

এটি বন্ধ করতে echo 0 > /proc/sys/kernel/randomize_va_space,।

আপনি কি আমার কাউকে কীভাবে আমার মূল্যবান পেঙ্গুইন শোষণ করবেন বলেছিলেন?

না। যে কোনও শোষণের জন্য অবশ্যই স্ট্যাক ক্যানারিগুলির চারপাশে কাজ করা উচিত (খুব অল্প তুচ্ছ) এবং হয় execstackসেট সহ একটি প্রোগ্রাম সন্ধান করুন , বা সেট করুন (এর অর্থ এটি ইতিমধ্যে নির্বিচারে আদেশগুলি কার্যকর করতে পারে) অথবা অন্যথায় আরও কঠিন কৌশলগুলি ব্যবহার করা যেতে পারে, যেমন লিবিসি / রিটার্নে ফিরে আসা ওরিয়েন্টেড প্রোগ্রামিং।


0

আপনি এই বিকল্পগুলির সাহায্যে কিছু সুরক্ষা (স্ট্যাকের স্ম্যাশিং সনাক্তকরণ এবং স্ট্যাকটিকে কার্যকরযোগ্য করে তোলা) অক্ষম করতে পারেন।

--z execstack
-f no-stack-protector

আপনি কমান্ডের সাহায্যে ASLR (ঠিকানা স্থান বিন্যাস র্যান্ডমাইজেশন র্যান্ডমাইজেশন) বন্ধ করতে পারেন:

echo 0 > /proc/sys/kernel/randomize_va_space
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.