Хай алл. Родилась такая трабла: Нужно определить что ф-я была вызванна из стека, каким образом можно определить что адрес возврата указывает на стек ?
А сравнить значение в регистре ESP со значением на вершине стека на предмет "близости" значений? Или сравнить cs и ss ? \\ Честно говоря я себе это слабо представляю, стек должен быть екзекутабл и что делать с DEP? \\
FS:[4] и FS[8] (это для текущего потока) но код может быть в стеке другого потока. тогда придется проверять все стеки которые есть. может логичнее проверять адрес на предмет попадания в секцию кода какой нибудь загруженной dll ?
Да, просто такое сравнение мне показалось вначале каким-то слишком уж простым... А если шел-код передвинет себя куда-нибудь и там выполнит ф-ю, что делать тогда ? Обычно в конце ф-ий стоит retn поэтому селектор не меняется, а DEP (если он не хардварный) что-то ничего не отлавливает по этому поводу.
Сейчас DEP почти везде хардварный AFAIK чтобы вызвать подпрограмму, которая не в текущем сегменте кода, тебе нужно сделать FAR JUMP или FAR CALL, который и поменяет селектор, после чего CS=SS (если это стек текущего потока)
Хз, я фар колов в винде не видал (хотя я только начал ковырять это дело...) А про деп, так мне на работе только поставили комп с хардварным депом, и то надо в boot.ini прописывать /NoExecute=AlwaysOn иначе он только системные библиотеки защищает...
Это я к тому что "если вы такой умный, то почему вы такой бедный"... В смысле фига досих пор никто не заинжектил половину системных процедур которые юзают шел коды четырься-шестью асмовскими строчками и не возрадовался ? Чего-то я не ввидел до сих пор шелл коды которые двигают свой код куда-нибудь из стека перед вызовом АПИ ?
А ты вообще много шелл кодов видел под WinXP+SP2+Updates? AFAIK такие дыры довольно легко обнаружимы, а Hardware DEP - глобальная заплатка ко всем таким дырам. IMHO шеллкод вымер +
Не скажи. Да, мои тесты на переполнения буффера вымерли как только я врубил хардварный ДЕП на все процессы, но так же вымерло и несколько прог (хотя я этого не заметил, но типы которым я пишу кричат мол "DEP is just temprorary stuff ! We need another way to protect buffer overflow vulnerbilities !"... Мол у них юзвера накричали что проги перпестали работать... Епт, так кто ж им говорил врубать его на всю систему, я имел ввиду per process... Короче в любом случае можно обойти hardware DEP (на данном этапе, хотя вообще это рульная штука.