Адреса расположения сегментов в памяти процесса

Тема в разделе "WASM.HEAP", создана пользователем china_boy, 27 окт 2010.

  1. china_boy

    china_boy New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2010
    Сообщения:
    11
    Доброго времени суток.

    Прошу немного разъяснить, так как запутался при обучении.

    В разных источниках по-разному расположены сегменты в памяти процесса.

    Например в одном источнике стек начинается с 0хс0000000, а в другом источнике с 0х08048000 и растет до нуля. При этом в первом источнике в интервале с 0х08048000 до 0 расположен сегмент кода.

    Я под отладчиком посмотрел и вроде второй вариант правильный, но решил уточнить тут
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Часто понятие сегмента и региона памяти слито воедино, изза чего путаница. Сегмент в данном случае это регион описываемый дескриптором, через селектор которого происходит к региону обращение. Тоесть например усекается пользовательское ап именно атрибутами дескриптора, а не его лимитом.
    Один и тотже регион памяти может быть и сегментом данных и кода, в зависимости от селекторов, через которые обращение к региону происходит, более того сегменты данных и кода в NT имеют нулевые базы. К стеку применяется ASLR.
     
  3. china_boy

    china_boy New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2010
    Сообщения:
    11
    Во-первых, спасибо за ответ.

    Но есть пара вопросов.

    То есть одни и те же "нули и единицы" , хранящиеся в таком регионе, могут трактоваться и как данные, и как код?

    насколько я знаю, рандомизацию можно отключить? Куда стек по умолчанию распределится в таком случае?
     
  4. black_hole

    black_hole New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2006
    Сообщения:
    44
    Если идёт речь о логическом адресе в плоской модели "в памяти процесса", то первый вариант рулит, а о чём тут пишут не пойму, да для юзер-мод оно и не надо:) только растёт в обратном направлении
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    china_boy
    Какая вам разница где будет выделен стек. Адрес его не фиксирован и не может быть фиксирован, так как NT мультизадачная ось.
     
  6. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Clerk
    ну стек первичного потока располагался по одному и тому же адресу (в данной версии оси) пока не придумали рандомизацию. а знать этот адрес иногда полезно для атак. ну не точный адрес, но хотя бы порядок. в какой части памяти локализован стек
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    kaspersky
    Просто выбирается свободный регион в ап подходящего размера.
     
  8. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Clerk
    > Просто выбирается свободный регион в ап подходящего размера.
    все не так просто... допустим, есть указатель на функцию, допустим, что в результате ошибки программера в программе есть баг, позволяющий атакующему обнулять любой байт, но только один. вопрос -- можем ли мы указатель на код преваратить в указатель на стек. допустим так же что поток -- один. если мы знаем где код, а где стек, то мы можем ответить на этот вопрос и, сооветсвенно, наоборот.
     
  9. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Код ядра linux располагается выше 0хс0000000
     
  10. china_boy

    china_boy New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2010
    Сообщения:
    11
    Да.

    Например, по описанной ниже kaspersky причиной.

    с помощью bash можно сделать скрипт, который будет брутом определять расстояние между буфером в стеке и адресом возврата. В любом случае буфер близок к esp, оттуда можно попытаться копать. Соответственно можно воспользоваться NOP-цепочкой, ес-но простейшая IDS сразу детектирует по этой сигнатуре.

    Что касается адреса самого шелкода, то обязательно ли его помещать в стек?... Ведь буфер может быть очень мал...Поэтому _возможно_ лучше пойти в обход, чем решать вопросы с aslr и не исполняемым стеком.

    kaspersky правильно сформулировал, меня больше порядок интересует и сл-но приблизительные адреса. Вариант ниже?



    ---------------------------------------------------------------------

    Здесь ядро и прочее
    0xc0000000 --------------------------------------------------------------------
    | stack
    |
    |____________________________________________________________
    |
    |
    |---------------------------------------------------------------------
    | общие библиотеки
    0х40000000|____________________________________________________________
    |
    ...........
    куча
    _____________________________________________________________


    .bss
    _____________________________________________________________

    данные иницализированные

    0х08048000 ______________________________________________________________
    код

    0 ------------------------------------------------------------------------
     
  11. black_hole

    black_hole New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2006
    Сообщения:
    44
    Немного не так в линукс:

    ---------------------------------------------------------------------

    Здесь ядро и прочее
    0xbfffffff --------------------------------------------------------------------
    | environment variables
    |____________________________________________________________
    | stack
    |______________________________________________________________
    | heap
    | ______________________________________________________________
    |
    |.bss,.data,.text
    0х08048000 ______________________________________________________________
    хз что, смотрите в отладчике

    0 ------------------------------------------------------------------------
    (c) "Programming from ground up" :)
     
  12. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Я так и не прочитал что там сверху писали =)
    Но примерно могу по памяти ответить.

    Адрес шелкода не обязательно помещать в стек.

    Об unix системах, точнее о том как эксплойты к ним писать рассказано доходчиво тут "Разработка средств безопасности и эксплойтов" вроде где угодно терь можно скачать. (
    Под винь, страниц 10 наверное "Защита от взлома: сокеты, эксплойты , шелл-код"
     
  13. china_boy

    china_boy New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2010
    Сообщения:
    11
    Этот участок не используется. Дырка.
    Адрес расположения .code определяет ld. После чего загрузчик грузит его туда. Поэтому программа может начать выполняться в этом участке памяти, а не стандартно с 0х08048000.

    Ну я шелкод просто для примера привел.
     
  14. black_hole

    black_hole New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2006
    Сообщения:
    44
    Ну я не системщик пока, а для прикладника адрес старта стандартный:)
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
  16. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    china_boy
    > Соответственно можно воспользоваться NOP-цепочкой,
    > ес-но простейшая IDS сразу детектирует по этой сигнатуре.
    1) не так уж она хорошо детектиться (много ложных срабатываний)
    2) что мешает юзать другие однобайтовые команды типа inc/dec r32 ?


    > Что касается адреса самого шелкода, то обязательно ли
    > его помещать в стек?... Ведь буфер может быть очень мал...
    зависит от ситуации... можно и не в стек. можно засунуть во флешь (swf) и JIT его откомилит да еще и положит в исполняемый блок памяти (прощай DEP)! но не всегда есть свобода выбора куда и что ложить...