सी संकलक झंडे के बिना बफर ओवरफ्लो के लिए उबंटू पर स्टैक सुरक्षा अक्षम करें


10

मैं कुछ शेल कोड आज़माना चाहता हूं और मैं लिनक्स सुरक्षा को अक्षम करना चाहता हूं।

मुझे पता है कि मैं झंडे का उपयोग कर संकलन कर सकता हूं, लेकिन मुझे पता है कि इन सुरक्षा को निष्क्रिय करने के लिए एक और तरीका मौजूद है जिसे मैं अभी याद नहीं कर सकता। क्या आप मेरी मदद कर सकते हैं?

जवाबों:


6

स्टैक प्रोटेक्शन कम्पाइलर द्वारा किया जाता है (स्टैक पर कुछ अतिरिक्त डेटा जोड़ें और कॉल पर कुछ दूर स्टैश करें, वापसी पर पवित्रता की जांच करें)। बिना पुन: स्थापित किए उसे अक्षम नहीं किया जा सकता। यह वास्तव में बिंदु का हिस्सा है ...


6
ASLR को रनटाइम पर OS करने की आवश्यकता होती है। NX बिट्स को सिस्टम सपोर्ट की भी आवश्यकता होती है। रनटाइम में किस हिस्से को अक्षम नहीं किया जा सकता है?
जेफ फेरलैंड

25

वॉनब्रांड के विस्तार के लिए (सही तरीके से, +1) ने कहा, लिनक्स के स्टैक प्रोटेक्शन के दो हिस्से हैं।

स्टैक कैनरी

स्टैक कैनरी कंपाइलर-एनफोर्समेंट फीचर हैं वॉनब्रांड संदर्भित करता है। ये एक recompile के बिना अक्षम नहीं किए जा सकते।

अपने आप को यह साबित करने और यह देखने के लिए कि वे कैसे काम करते हैं, निम्नलिखित कोड लेते हैं:

#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) कुछ गन्नू में इकट्ठा होने और आउटपुट को पढ़ने में खुशी होगी। महत्वपूर्ण बात यह है कि 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उन अनुमतियों को जोड़ने के लिए उपयोग करते हैं जिन्हें आप उन पृष्ठों में चाहते हैं जिनमें शेलकोड डेटा रहता है।

गैर-निष्पादन योग्य ढेर

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

execstack -s /path/to/myprog

यह एक recompile की आवश्यकता के बिना मनमाना कार्यक्रमों पर किया जा सकता है, लेकिन स्वचालित रूप से स्टैक कैनरी को अक्षम नहीं करेगा क्योंकि ये संकलन पर बेक किए गए हैं।

जोड़ा गया बोनस: aslr:

कि बंद करने के लिए, echo 0 > /proc/sys/kernel/randomize_va_space

क्या आपने किसी को बताया कि कैसे मेरे कीमती पेंगुइन का शोषण किया जाए?

नहीं, किसी भी शोषण को स्टैक कैनरी (बहुत गैर तुच्छ) के आसपास काम करना चाहिए और या तो execstackसेट के साथ एक प्रोग्राम ढूंढना होगा , या इसे सेट करना होगा (इसका अर्थ है कि यह पहले से ही किसी भी तरह से मनमाना आदेशों को निष्पादित कर सकता है) या फिर अधिक कठिन तकनीकों का उपयोग करें, जैसे कि libc / return पर लौटना ओरिएंटेड प्रोग्रामिंग।


0

आप इन विकल्पों के साथ कुछ सुरक्षा (स्टैक स्मैशिंग डिटेक्शन और स्टैक को निष्पादन योग्य बना सकते हैं) को निष्क्रिय कर सकते हैं।

--z execstack
-f no-stack-protector

आप कमांड के साथ बैश के साथ ASLR (एड्रेस स्पेस लेआउट रैंडमाइजेशन) को भी बंद कर सकते हैं:

echo 0 > /proc/sys/kernel/randomize_va_space
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.