так, что там с защитой стека в SP2+, и какие существуют методы обхода этой защиты... актуальна ли сейчас вобще эта проблема, а то я что-то слышал, что защита работает только на AMD 64... Кучу инфы накачал, но хотелось бы в двух словах для линейки x86...
тут нашел замечательную доку, правдо на английском Defeating the Stack Based Buffer Overflow Prevention Mechanism of Microsoft Windows 2003 Server сразу возникло несколько вопросов... 1 я так понимаю защита стека при помощи маркеров - это прирогатива компилятора, то-есть ранее написаные программы так и остаются незащищенными... И это как я понимаю должно означать, что обычное переполнение буфера написаное для XP SP1 должно работать и на SP2? 2 дока по Винде 2003, а так ли обстоят дела и в XP SP2? 3 я как-то натыкался на какую-то русскую доку в сети по по использованию seh для обхода защиты от срыва стека... может кто ссылочку даст, а то уже второй день ищу не как найти не могу...???
Я думаю что ситуации когда возможен срыв стека - это сутуации непохожи на наводнения и ураганы. Срыв стека возможен только при наличии ошибок в программе, например отсутствие проверки размера буфера, выделяемого под локальные переменные. Предлагаю свои варианты ответов. 1) всякие маркеры и seh естественно добавляет компилятор, в высокоуровневых языках, но никто не запрещает тебя все это делать вручную. что обычное переполнение буфера написаное для XP SP1 должно работать и на SP2? непонимаю это про что? 2) самая надежная защита для всех виндов - это прямые у руки программеров 3) seh используют не для обхода защиты, а используют для собственно реализации этого переполнения. Подбираются данные так чтобы перезаписались данные SEH которые находятся в стеке. При затирании seh на место где находится адрес обработчика исключения должен попасть нужный тебе адрес.
bober >>что обычное переполнение буфера написаное для XP SP1 >>должно работать и на SP2? >непонимаю это про что? А вот про что: я написал небольшой эксплоит переполнения буфера для обычной программки (Tales Chat), которая компилилась до SP2, следовательно никаких маркеров стека там нет, но эксплоит не работает на SP2... Отсюда и главный ворос: почему это так...? Щас ставлю SP2 на виртуальную машину, буду тестить там, но для начала хотелось бы поднабраться теоретических знаний... Возник еще один вопрос: XP SP2 сегмент стека только для записи чтения (неисполняемый)?
zag2art которая компилилась до SP2, следовательно никаких маркеров стека там нет, А как компилятору указывать под какой сервиспак компилировать? Попробуй откомпилировать в виртуальной машине может все заработает.
я всегда считал что установка маркеров зависит только от клмпилятора и его опций. Т.е. если использовался последний компилятор то и маркеры там будут вне зависимости от наличия/отсутствия SP2 на машине разработчика
bober, infern0 прошу прощения за выражение: "которая компилилась до SP2", естественно все зависит от компилятора, а не как не от версии SP или винды Я, как говориться, блуждал в темноте. Маркеры которые я имел ввиду - это "An Overview of Windows 2003 Stack Protection Windows 2003 Server was designed to be secure out of the box. As part of the security in depth model adopted by Microsoft for their latest Windows version a new stack protection mechanism was incorporated into their compiler that was intended to help mitigate the risk posed by stack based buffer overflow vulnerabilities by attempting to prevent their exploitation. Technically similar to Crispin Cowan's StackGuard, the Microsoft mechanism places a security cookie (or canary) on the stack in front of the saved return address when a function is called. If a buffer local to that function is overflowed then, on the way to overwriting the saved return address, the cookie is also overwritten. Before the function returns the cookie is checked against an authoritative version of the cookie stored in the .data section of the module where the function resides. If the cookies do not match then it is assumed that the buffer has been overflowed and the process is stopped. This security mechanism is provided by Visual Studio .NET - specifically the GS flag which is turned on by default." видите заголовок "Описание механизма переполнения стека в 2003" Именно это меня и запутало, и именно поэтому я спрашивал как так-ли обстоят дела в XP SP2. Мне стало очевидно, что в этой статье описываются способы, если взять по максимуму, обхода "вообще любого" механизма с маркерами, по средствам использования seh. И именно специфичного использования seh в 2003 винде... Больше вопросов пока не будет, пока поизучаю все что накочал и то, что посоветовал leo...