Показать сообщение отдельно

  #3  
Старый 22.10.2010, 19:05
Delivery Man
Guest
Сообщений: n/a
Провел на форуме:
0

Репутация: 0
По умолчанию

------[ 4.- BIOS32 (Прямая инфекция ядра)

Теперь у тебя есть BIOS руткит, который выполняется в BIOS. Но находясь в BIOS, он просто сосет с точки зрения атакующего. В идеале нам нужен контроль над ядром операционной системы. Вот почему ты должен аплоаднуть шеллкод на жесткий диск или сделать SMBIOS-руткит. Но что делать, если жесткий диск зашифрован? Или если машина не имеет жесткого диска и грузится по сети? Не ссы, потому что этот раздел именно для таких случаев. Есть заблуждение, что BIOS не используется после загрузки. Это неправда. ОС обращается к BIOS по многим причинам, как, например, установка видеорежимов (Int 10h) или вызов BIOS-32. Что такое BIOS32? Используя поиск Google, мы пришли к выводу, что это скрытая служба BIOS, которая предоставляет информацию о других сервисах BIOS современным 32-разрядным операционным системам. Вы можете обратиться к [BIOS32SDP] для получения более детальной информации. Важно то, что многие операционные системы обращаются к нему. И единственным требованием, чтобы подменить службу BIOS32, является то, что Вам необходимо сделать заголовок BIOS32 где-то от E000:0000 до F000:FFFF области памяти. Структура заголовка:

Код:
Code:
Offset	Bytes	Description
0	4	Signature "_32_"
4	4	Entry point for the BIOS32 Service (here you put a pointer
		to your stuff)
8	1	Revision level, put 0
9	1	Length of the BIOS32 Headers in paragraphs (put 1)
10	1	8-bit Checksum. Security FTW!
11	5	Reserved, put 0s.
Это шаблон для всех сервисов BIOS. Чтобы найти и выполнить сервис, нужно выполнить шаблонный поиск по контрольной сумме, а затем он просто переходит на функцию, которая является своего рода диспетчером. Такое поведение присутствует в различных BIOS функциях, такие как Plug и Play ($PnP), Post Memory Manager ($PMM), BIOS32 (_32_) и т. д. В то время, когда система была разработана, безопасность не учитывалась, поэтому мы можем использовать это преимущество и вставить наши собственные заголовки (мы можем даже использовать option-ROM, без изменения системы BIOS), ну и ОС, в конечном счете, всегда доверяет BIOS. Вот как Linux 2.6.27 находит и вызывает эту услугу на этапе ядра:

[CODE]
Code:
arch/x86/pci/pcibios.c,check_pcibios()
...
if ((pcibios_entry = bios32_service(PCI_SERVICE))) {
pci_indirect.address = pcibios_entry + PAGE_OFFSET;

local_irq_save(flags);
__asm__(
"lcall *(%%edi); cld\n\t"
 
Ответить с цитированием