книги хакеры / журнал хакер / 113_Optimized
.pdf
|
|
|
|
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 |
|
|
|
|
Репрозиторийспофиксеннойzlib
отсечения подложных DNS-от- ветов.
02Borland InterBases
удален ноепереполнение буфера
>> Brief
11 апреля 2008 года была обнародована информация о дыре в популярномсерверебазданныхBorland InterBase,подверженномугрозе удаленногопереполнениябуферас захватомуправления.Ошибкуобна-
ружилсотрудникOracleCorporation,
довольноизвестный(вузкихкругах) специалистпобезопасностиZhen HuaLiu,живущийвсвоейнорена побережьеRedwood’а.Исследуя дизассемблерныевнутренности файлаibserver.exe,онобратил вниманиенаотсутствиепроверки длиныпереданныхпользователем данныхпередихкопированиемв локальныйбуфер.Этоподтверждает код,снабженныйкомментариями (ищиегонаDVD).
Мыимеемделосклассическим стековымпереполнением(буферприемникнаходитсявстеке),со всемивытекающими.Насистемах сисполняемымстекоммызапросто можемподменитьадресвозврата изфункции,передавуправлениена shell-код.Насистемахснеиспол-
няемымстеком—XPSP2/ServerSP1
ивышеприналичииаппаратной поддержкисостороныЦП—приак- тивномDEP’емыможемреализовать атакутипаreturn2libc(поумолчанию DEPзащищаеттолькосистемные компоненты).Название,кстати, пришлоизмираUNIX,вWindows
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
>> взлом to BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
|
|
|
|
|
m |
|||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
имеющихся у него привилегий. А оно ему надо? Так что атака носит сугубо лабораторный характер.
Лишь в тех немногих случаях, когда интерпретатор Python’а запускается на более высоком уровне привилегий, хакер может поиметь с этого какую-то выгоду.
Подробности на www.securityfocus. com/bid/28715.
>>Targets
ДыраподтвержденавPythonверсии2.5.2,остальныеверсиитакже могутбытьуязвимы.
>>Exploit
Исходныйтекстproof-of-concept exploit’алежитнаwww.securityfocus. com/data/vulnerabilities/exploits/ 28715.py,анижеприведенегоключевойфрагмент:
Ключевойфрагмент proof-of-conceptexploit’а
compMsg = zlib.compress(msg)
bad = -24 decompObj =
zlib.decompressobj()
decompObj.decompress
(compMsg)
decompObj.flush(bad)
>>Solution
Разработчикиисправилиошибку,но покатольконаSVN-репрозитории
(bugs.python.org/issue2586).Ждем-с
выходаочереднойстабильной версии.
04Adobe Flash Player
удаленноеперепол нениебуфера
Платите$1450иполучайтестатусCANVASProfessionalсполнымдоступомк исходномукодусотенexploit’ов!
xàêåð 05 /113/ 08 |
049 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
X |
|
|
|
|
|||
|
- |
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|||||
|
|
|
|
|
|
||||
w Click |
to BUY |
|
>> взлом |
||||||
|
|
|
|
|
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 |
|
|
|
|
СтруктураSWF-файла
>>Brief
9 апреля 2008 года Mark Dowd из исследовательского подразделения ISS X-Force, входящего в состав корпорации IBM, совместно с хакером wushi из группы team509 обнаружили и опубликовали дыру в Adobe Flash Player, работающем под управлением операционной системы Linux. Для реализации атаки достаточно «скормить»
жертве специальным образом сконструированный swf-файл (скажем, заманив на web-страничку или послав файл почтой). Главное, чтобы Adobe Flash Player был установлен! Ошибка носит системно-незави- симый характер, хотя, с учетом различий реализаций под Windows и Linux, для каждой конкретной платформы требуется свой swf-файл
с умышленно искаженным полем DefineSceneAndFrameLabelData. SceneCount, содержащим количество «сцен», которые необходимо считать из файла. SceneCount представляет собой двойное знаковое слово, но проверка на отрицательное значение не выполняется, и хакер получает возможность модифицировать любую (ну, или практически любую) ячейку адресного пространства внутри процесса. Это открывает широкие горизонты для атак, особенно с учетом того, что Adobe Flash Player не использует возможности рандомизации адресного пространства, предоставляемые Вистой и некоторыми версиями Linux’а. Для захвата управления машиной (с привилегиями Flash Player’а) было бы достаточно перезаписать указатель на функцию или подменить адрес возврата, но Mark Dowd пошел намного более крутым и радикальным путем, атаковав виртуальную flash-машину, интерпретирующую байт-код и известную под именем ActionScript Virtual Machine (или, сокращенно, AVM). Достоинство такого подхода, во-первых, в его новизне, а, во-вторых, в системной независимости. Байт-код виртуальной машины не привязан к конкретной платформе, и потому однажды сконструированный exploit не нужно переписывать под всю процессорную линейку, на которой только реализован
Adobe Flash Player: x86, x86-64, PPC, etc. Подробнее об этом можно прочитать в статье Mark’а Dowd’а — «Application-Specific Attacks: Leveraging the ActionScript Virtual Machine», доступной всем же-
лающим: documents.iss.net/whitepapers/IBM_X-Force_WP_final.pdf. Также рекомендуется посетить Security Focus: www.securityfocus. com/bid/28695.
>>Targets
AdobeFlashPlayer8.0.34.0/8.0.35.0/9/9.0.115.0/9.0.28.0/9.0.31.0/9.0.45.0/ 9.0.47.0/9.0.48.0(дистрибутивыRedHatEnterpriseLinuxDesktop/RedHat EnterpriseLinuxExtras/RedHatEnterpriseLinuxSupplementaryserver/ S.u.S.E.Linux10.1ppc/S.u.S.E.Linux10.1x86/S.u.S.E.Linux10.1x86-64/ S.u.S.E.NovellLinuxDesktop9/S.u.S.E.openSUSE10.2/S.u.S.E.openSUSE 10.3идругие).
>>Exploit
Proof-of-conceptexploitдоступентолькоподписчикам«ImmunityCANVAS EarlyUpdateProgram».Членствообойдетсяв$1450на3месяца(продление стоит$730вквартал).Подробности:www.immunityinc.com/products-canvas. shtml.
>>Solution
Производитель уже выпустил Flash Player 9.0.124.0, свободный от ошибки переполнения, а для старых версий доступно бесплатное обновление, выложенное на www.adobe.com/support/security/bulletins/ apsb08-11.html. Однако, ни новая версия, ни обновление не исправляют всех ошибок. Проверка поля SceneCount на отрицательное значение появилась (какое огромное достижение, вах!), но дефекты виртуальной AVM-машины как были, так и остались. По-прежнему возможен обход верификатора байт-кода и прочие трюки, которым планируется посвятить отдельную статью. В этом обзоре (в связи с ограничениями по объему) мы рассмотрим непосредственно саму ошибку знакового переполнения.
Fulldisclose
Для анализа дыры в Flash-player’е, помимо самого плеера (который уже наверняка установлен в системе), нам понадобится спецификация на SWF/FLV-файлы, последнюю редакцию которой (на момент написания этих строк — 9’ю), можно скачать с сервера фирмы
Macromedia: download.macromedia.com/pub/flash/licensing/file_ format_specification_v9.pdf.
Осторожно!Припервомоткрытииpdf-файлаэтасволочьлезетвСеть,пере- даваянашиданныеизапрашиваясертификат.Длясохраненияинкогнито рекомендуетсявоспользоватьсябрандмауэром.Спустякакое-товремя AdobeAcrobatReaderсменитгневнамилостьиотобразитсодержимоеспе- цификации,предварительно«выплюнув»наэкранпротивныйNAG-Screen стекстомлицензионногосоглашенияистандартнымикнопочками«Agree» (Принять)и«Disagree»(Послатьна:)).
Структура SWF-файлов состоит из последовательности различных объектов: фигур, звуков, шрифтов, текста, etc. Все они обрабатываются вполне корректно (дефектов реализации нет или таковые еще не найдены). Но вот структура DefineSceneAndFrameLabelData,
описывающая сцену (Scene), подвержена целочисленному знаковому переполнению.
РассмотримструктуруDefineSceneAndFrameLabelDataболеепод-
робно.Каквидно,онавключаетвсебямассивсценScenes.Ихколичество задановпеременнойSceneCountтипаunsigned int32(беззнаковое двойноеслово),котораялежитрядомсмассивом.
ТеговаяструктураDefineSceneAndFrameLabelData (tagID0x56),подверженнаяцелочисленномузнаковому переполнению
// вспомогательные структуры
SceneData
{
UI32 FrameOffset
String SceneName
}
FrameData
{
UI32 FrameNumber
String FrameLabel
050 |
xàêåð 05 /113/ 08 |
|
|
|
|
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 |
|||
>> взлом to BUY |
|
|
|||||||
|
|
|
|
|
|||||
w Click |
|
|
|
|
|
m |
|||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; обламывается, если SC < 0 |
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
.text:30087A72 |
push eax |
|
|
|
|
|
|
|
|
|
|
; EAX := 0, если SC < 0 |
|
||
|
|
|
|
|
|
|
|
.text:30087A73 |
mov ecx, esi |
|
|
|
|
|
|
|
|
|
|
.text:30087A75 |
call sub_3004A766 |
|
|
|
|
|
|
|
|
|
|
; делает разные неинтересные дела |
|
||
|
|
|
|
|
|
|
|
.text:30087A7A |
and [ebp+arg_0], 0 |
|
|
|
|
|
|
|
|
|
|
.text:30087A7E |
cmp dword ptr [esi+4], 0 |
|
|
|
|
|
|
|
|
|
|
.text:30087A82 |
jle short loc_30087AFA |
|
|
|
|
|
|
|
|
|
|
; всегда выполняется |
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
Сначала переменная SceneCount сравнивается с количеством байт, |
|||
|
|
|
|
|
|
|
|
оставшихся до конца swf-файла. Сравнение осуществляется при |
|||
|
|
|
|
|
|
|
|
помощи машинной команды JG, интерпретирующей SceneCount как |
|||
|
|
|
|
|
|
|
|
знаковую переменную. Если SceneCount < 0, эта проверка завер- |
|||
|
|
|
|
|
|
|
|
шится успешно (для хакеров), поскольку всякое отрицательное число |
|||
|
|
|
|
|
|
|
|
больше любого положительного количества байт, отличного от нуля; |
|||
|
|
|
|
|
|
|
|
проверка на нулевое значение SceneCount также выполняется. |
|||
|
|
|
|
|
|
|
|
Какие, однако, аккуратные программисты! Целых две проверки, и все |
|||
|
|
|
|
|
|
|
|
не в тему! |
|
|
|
|
|
|
|
|
Адальше...SceneCountпередаетсяфункциивыделенияпамятиmem_ |
||||||
|
Лицензионноесоглашение,всплывающееприпопыткеоткрытияpdf- |
|
|||||||||
|
файла |
|
|
|
|
|
Calloc(),интерпретирующейеекакбеззнаковуюпеременную.Поскольку |
||||
|
|
|
|
|
|
|
|
знаковыйбит—самыйстаршийбитчисла,мызапрашиваемуфункции |
|||
|
|
|
|
|
|
|
|
mem_Calloc(),какминимум,2Гбпамяти.Последние,естественно,не |
|||
|
} |
|
|
|
|
|
|
выделяются,нопроверканауспешностьвыделенияотсутствует,таккак |
|||
|
|
|
|
|
|
|
|
программистыпосвоейнаивностиполагают,чтопамять—ресурснеисчер- |
|||
|
// теговая структура |
|
|
|
|
паемый.Онизаблуждаются,ивнашемслучаеmem_Calloc() возвращает |
|||||
|
DefineSceneAndFrameLabelData |
|
|
|
ноль.Остаетсятолькоразобраться,чтоделаетпрограммасполученным |
||||||
|
{ |
|
|
|
|
|
|
указателем.Аделаетонаснимследующее(длякраткостидизассемблер- |
|||
|
|
RecordHeader Header |
|
|
|
ныйлистингпереведенвпсевдокод): |
|||||
|
|
UI32 SceneCount |
|
|
|
|
|
|
|
|
|
|
|
SceneData Scenes[SceneCount] |
|
|
|
Псевдокодфункции,позволяющейхакеруперезаписывать |
|
||||
|
|
UI32 FrameCount |
|
|
|
|
любуюячейкупамяти |
|
|||
|
|
FrameData Frames[FrameCount] |
|
|
|
.text:30087AFA |
mov eax, [esi+4] |
|
|||
|
} |
|
|
|
|
|
|
|
; SceneCount |
|
|
|
|
|
|
|
|
|
|
.text:30087AFD |
mov ecx, [esi] |
|
|
|
Теперьзагрузимflash-playerвдизассемблерипосмотримнакод,обраба- |
|
|
||||||||
|
|
|
; returned pointer |
|
|||||||
|
тывающийпеременнуюSceneCountвместесмассивомScenes: |
|
.text:30087AFF |
lea eax, [eax+eax*2] |
|
||||||
|
|
|
|
|
|
|
|
|
; EAX := EAX*3 |
|
|
|
ДизассемблерныйфрагментFlashPlayer’а,вкотором |
|
.text:30087B02 |
lea eax, [ecx+eax*4] |
|
||||||
|
происходитпереполнение |
|
|
|
|
|
; EAX := EAX*4 + pointer |
|
|||
|
|
|
|
|
|
|
|
|
|
||
|
.text:30087A42 |
call SWF_GetEncodedInteger |
|
.text:30087B05 |
mov ecx, [ebp+arg_8] |
|
|||||
|
|
; получить Scene Count |
|
|
|
|
; ECX := FrameCounter (или FC) |
|
|||
|
.text:30087A47 |
mov edi, [ebp+arg_0] |
|
.text:30087B08 |
sub ecx, [eax-0Ch] |
|
|||||
|
.text:30087A4A |
mov [esi+4], eax |
|
|
|
|
; ECX := FC-*((SC-1)*12+pointer) |
|
|||
|
|
; EAX := Scene Count |
|
|
|
.text:30087B0B |
mov [eax-4], ecx |
|
|||
|
.text:30087A4D |
mov ecx, [ebx+8] |
|
|
|
|
; *(SC*12+pointer-4) = ECX |
|
|||
|
|
; ECX — размер swf-файла |
|
|
|
|
|
|
|
||
|
|
|
|
Посколькуpointer,возвращенныйфункциейmem_Calloc(),унасравен |
|||||||
|
.text:30087A50 |
sub ecx, [ebx+4] |
|
|
|
||||||
|
|
; ECX — кол-во байт до конца файла |
|
|
|
нулю,мыполучаемследующийпсевдокод: *(SсeneCount*12-4) = |
|||||
|
.text:30087A53 |
cmp eax, ecx |
|
|
|
FrameCount-*((SceneCount-1)*12).Еслипомнить,чтопеременные |
|||||
|
|
; ?(Scene Count > ECX) |
|
|
|
SceneCountиFrameCountпредставляютсобойдвойныеслова,полностью |
|||||
|
.text:30087A55 |
jg loc_30087BB4 |
|
|
|
контролируемыехакером,подбираяихразличныесочетания,мыможем |
|||||
|
|
; <- не выполняется, если SC < 0 |
|
|
|
модифицироватьразличныеячейкипамяти.Сучетомограничений,нала- |
|||||
|
.text:30087A5B |
test eax, eax |
|
|
|
гаемыхданнойформулой.Какихименно? |
|||||
|
|
; проверка на нуль |
|
|
|
Путемнесложныхпреобразованийполучаем: (0x80000000 | |
|||||
|
.text:30087A5D |
jz loc_30087B0E |
|
|
|
((address + 4)/12)),тоестьможномодифицироватьтолькотеадреса, |
|||||
|
|
; <- не выполняется, если SC < 0 |
|
|
|
которыепоследобавлениякнимчетырехбайтделятсяна12безостатка.Не |
|||||
|
.text:30087A63 |
mov ecx, [edi+20h] |
|
такоеужижестокоеограничение!Вподвластнойнамобластипамятибез |
|||||||
|
.text:30087A66 |
push 3 |
|
|
|
трудаможноотыскатькучуинтересныхуказателейнафункции(напри- |
|||||
|
.text:30087A68 |
push 3 |
|
|
|
мер,адресоввозврата).Самособой,речьидеттолькоомодификациитех |
|||||
|
.text:30087A6A |
push 0Ch |
|
|
|
областей,чтодоступыназапись—этостек,куча,секцияданных,атакже |
|||||
|
|
; nCount |
|
|
|
|
некоторыеслужебныеструктурыоперационнойсистемы,расположенные |
||||
|
.text:30087A6C |
push eax |
; nSize |
|
внижнейполовинеадресногопространства.Короче,главноефантазию |
||||||
|
.text:30087A6D |
call mem_Calloc |
|
|
|
иметь,азареализациейатакиделонестанет!z |
|||||
|
|
|
|
|
|
|
|
|
|
051 |
|
|
xàêåð 05 /113/ 08 |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
E |
|
|
||||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
NOW! |
o |
|||||
|
|
|
|
|
||||||
|
|
|
|
|
|
|||||
w Click |
to BUY |
|
>> взлом |
|||||||
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
n |
e |
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
sh2kerr
Login: |
Login: |
|
Pasword: |
Pasword: |
|
Login:
Pasword:
Login:
Pasword:
|
|
|
|
|
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 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Запароленная
власть
Щелкаем пароли от Oracle, как орешки
Если ты читал наши предыдущие статьи, ты уже имеешь представление, как удаленно порутать Oracle. Считай, что доступ к базе мы получили,
но что дальше? Как поднять свои права? И что можно получить, имея доступ
ксистемным таблицам? Слушай сюда, сейчас расскажу.
евсегдадоступкбазеданныхмыполучаемсправамиадминиКакизвестно,многиеадминызачастуюимеютодинаковыепаролина
Нстратора(DBA).Бываютситуации,когдалокальныхэксплоитов, доступкразличнымсерверамиприложениям.Тогдачтожемешаетрас-
повышающихпривилегиидоролиDBA,нет,аудаленнопароль ксистемномупользователюнеспешитподбираться.Или,предположим,тыполучилправаадминистраторавСУБД,нонезнаешьегопароль,
аузнатьоченьхочется,таккакон,вероятно,можетподойтинаssh-доступк серверуиликдругимСУБДвкомпании.Чтоделатьвтакихслучаях?Первое, чтоприходитнаум—получитьдоступкхэшампаролейипопытатьсяихрас- шифровать. Рассмотрим,вкакихситуацияхнаммогутпомочьхэшипаролей.
1.Одинизсамыхраспространенныхвариантов—получениедоступакбазе данныхчерезSQL-инъекциювWEB-приложение,котороеиспользуетэту СУБД.Естьвероятность,чтопользователь,отименикоторогоидутзапросы кСУБД,имеетдоступначтениетаблицыспаролями.
2.Возможенслучай удаленногополучениядоступакконсолиСУБДпользователем, укоторогопоумолчаниюестьдоступначтениетаблицысхэшами паролей(праваSELECTANYDICTIONARY),нонетролиDBA.Темсамым,расшифровавпароль,мыполучимправаDBAвбазеданных,атакжесможем попытатьсяиспользоватьподобранныйпарольнадругиесервисы.
3.Доступкхэшампаролейможнополучить,найдяуязвимостькласса PL/SQLInjectionвфункцииилипроцедуре,котораяисполняетсяотимени пользователясправамиSELECTANYDICTIONARY,позволяющимичитать системныетаблицы.Однаизтакихуязвимостейбыланайденамной,иэкс-
плоиткнейможноотыскатьпоадресуhttp://milw0rm.com/exploits/4995.
шифроватьпарольадминистратораСУБДOracle,темболее,чтоэтобывает намногопроще,чемрасшифровыватьпарольнаоперационнуюсистему?
Хранение паролей
СегоднямыизучималгоритмхраненияпаролейвСУБДOracleинаучимся ломатьэтипароли.Сначаларассмотримстарыйалгоритм.ВСУБДOracle до11версиипаролипользователейхранятсявтаблицеdba_users.На делеонихранятсявсистемной таблицеSYS.USER$,атаблицаDBA_USERS
—лишьпредставление(VIEW)длявышеуказаннойсистемнойтаблицы,но этиособенностинекритичны.Итак,унасестьдоступктаблицеDBA_USERS. Чтобыдостатьизнеепароли,можновоспользоватьсянесложнымзапросом:
SQL> select username, password from DBA_USERS;
Какмывидимнарисунке,полеPasswordсодержитхэшпароля,состоящий из8байт.Чтожезаалгоритмиспользуетсядляхраненияпаролей?
Алгоритм шифрования паролей
АлгоритмшифрованияпаролейвСУБДOracleбылдопорыдовременинеизвестен,покавпубличныхисточникахнепоявиласьработа«Assessment oftheOraclePasswordHashingAlgorithm»авторовJoshuaWrightиCarlos
052 |
xàêåð 05 /113/ 08 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
P |
|
|
|
|
|
|
|
|
i |
|
D |
|
|
|
|
|
|
|
Login: |
||
|
|
|
|
|
|
|
|
r |
||
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
||||
|
|
|
|
to |
BUY |
Pasword: |
||||
|
|
|
|
|
||||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Login: Login:
Pasword: Pasword:
Login:
Pasword:
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
|
|
X |
|
|
|
|
|||
|
|
|
- |
|
|
|
|
d |
|
||
|
|
|
F |
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
|
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
>> взломto BUY |
|
|
||||||||
|
|
|
|
|
|
||||||
|
|
w Click |
|
|
|
|
|
m |
|||
|
|
|
|
|
|
|
|||||
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
.c |
|
||
|
|
|
|
p |
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
|
|
-x cha |
|
|
|
|
|
ВыборкапаролейизтаблицыDBA_USERS |
|
|
|
|
|
|
Документ«AssessmentoftheOraclePasswordHashingAlgorithm» |
|||
Ci.Внейбылподробноописаналгоритмшифрованияпаро- |
строке СУБД Oracle оказывается, что мы можем использовать |
|
|
||
лейвOracle.Детальнаяинформацияпредоставленавстатье |
далеко не все символы. Рассмотрим на примере. |
|
|
||
поадресу:http://www.isg.rhul.ac.uk/~ccid/publications/ |
|
|
|
||
oracle_passwd.pdf. |
SQL> create user test01 identified by abc123_ |
|
|
||
АлгоритмшифрованияпаролейвСУБДOracleбылзадей- |
$#; |
|
|
||
ствованчутьлинеспервыхверсийинеменялсявплотьдо |
|
|
dvd |
||
недавнейверсии11G.Самалгоритмоказалсянетакимужи |
User created. |
Надискеищивсе |
|||
сложным.Воткакработаетгенерацияхэша: |
|
упомянутыевстатье |
|||
• происходитконкатенацияименипользователяипароля |
SQL> create user test02 identified by 123abc#_ |
программы,атакже |
|||
—еслиунасестьпользовательсименемSYSипаролем |
$; |
увесистыйдокументпо |
|||
test1,томыполучаемстрокуSYStest1; |
create user test02 identified by 123abc#_$ |
организациикриптоал- |
|||
• далеевсястрокапреобразовываетсяк верхнемурегистру, |
* |
горитмоввOracle. |
|||
имыполучаемSYSTEST1; |
ERROR at line 1: |
|
|
||
• есливОСиспользуетсяоднобайтоваякодировка,токаж- |
ORA-00988: missing or invalid password(s) |
|
|
||
дыйсимволпреобразовывается вдвухбайтовый,заполнив |
|
|
|
||
старшийбайтнулями(0x00); |
|
|
|
||
• получившаясястрока(дополненнаянулямидодлиныбло- |
SQL> create user test02 identified by _123abc; |
|
|
||
ка)шифруетсяалгоритмом DESврежимеCBCсфиксирован- |
create user test02 identified by _123abc |
|
|
||
нымключом,значениекоторого—0x0123456789ABCDEF; |
* |
|
|
||
• полученнаястрокашифруетсяещеразспомощьюDES- |
ERROR at line 1: |
|
warning |
||
CBC,ноиспользуяпоследнийблокпредыдущегошагакак |
ORA-00911: invalid character |
Внимание!Инфор- |
|||
ключшифрования. |
|
мацияпредставлена |
|||
Теперьперечислимнедостаткиалгоритма,которыепомогут |
SQL> create user test02 identified by |
исключительнос |
|||
нампривзломе. |
abc123^*; |
цельюознакомления! |
|||
1.Вкачествесоли(salt)используетсяпредсказуемоезначе- |
create user test02 identified by abc123^* |
Ниавтор,ниредакция |
|||
ние,аименно—имяпользователя.Этодаетнамвозможность |
* |
затвоидействияответ- |
|||
использоватьпредварительносгенерированныетаблицыдля |
ERROR at line 1: |
ственностиненесет! |
|||
расчетапароля(rainbowtables),темсамымувеличивскорость |
ORA-00922: missing or invalid option |
|
|
||
переборапаролейвразы. |
|
|
|
||
2.Исходный словарь символов, используемых для генерации |
SQL> create user test02 identified by |
|
|
||
пароля, первоначально составляет 256 символов. Так как |
"^*abc?"; |
|
|
||
введенный пароль преобразовывается к верхнему регистру, |
|
|
|
||
то алфавит сужается до 256-26=230 символов. На самом деле |
User created. |
|
|
||
символов еще меньше, так как операция UPPER()действует |
|
|
|
||
Частьпаролей,которыемыпыталисьзадать,неподходит(вы- |
|
|
|||
не только для символов латинского алфавита. В итоге мы по- |
|
|
|||
лучаем алфавит из 164 символов, каждый из которых можно |
даетсясообщение«ORA-00911: invalid character»).Из |
|
|
||
использовать при генерации пароля (более подробно, откуда |
всегоэтогоможносделатьпростыевыводы: |
|
|
||
появилась эта цифра можно прочитать на форуме http://www. |
1.Доступныевпаролесимволы—это латинскийалфавит(26), |
|
|
||
petefinnigan.com/forum/yabb/YaBB.cgi?board=ora_sec;a |
цифры(10)испецсимволы_,#,$(3),всего—39символов. |
|
|
||
ction=display;num=1131556773). Но это все в теории, а на |
2.Вкачествепервогосимволапаролямогутиспользоваться |
|
|
||
практике при создании нового пользователя в командной |
толькобуквы. |
|
|
xàêåð 05 /113/ 08 |
053 |
|
|
|
hang |
e |
|
|
|
|
|
|
|
||
|
|
C |
E |
|
|
|
|
|
|||||
|
X |
|
|
|
|
|
|
|
|
|
|||
- |
|
|
|
|
|
|
d |
|
|
|
|
||
F |
|
|
|
|
|
|
|
t |
|
|
|
|
|
P D |
|
|
|
|
|
|
|
|
i |
|
Login: |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|||
|
|
|
|
NOW! |
o |
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
||||||
w Click |
to BUY |
|
>> взломPasword: |
|
|
||||||||
|
|
|
|
|
|
|
m |
|
|
|
|||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
|
|
|
||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
|
|||
|
|
|
-xcha |
|
|
|
|
|
|
|
|
Login: |
|
Login: |
|
Login: |
Pasword: |
|
Pasword: |
|
Pasword: |
|
|
|||
|
|
|||
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
to |
BUY |
|
m |
|||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
Сравнениескоростейпереборапаролейразнымипрограммами |
|
Запускorabfиwoorabfнаcore2duo2.4ГГц |
|
|
|
|
|
|
|
|
|
3.Чтобысоздатьпарольсдругимиспецсимволами,необходимозаключать |
Тутсуществуетдваспособа.Первый—сгенерироватьтаблицысамому, |
|||
|
парольвдвойныекавычки,какпоказановпоследнемпримере(ноэтой |
второй—скачатьвСети.Плюсывторогоспособаочевидны:ненадотратить |
|||
|
возможностьюнапрактикепользуютсяредко). |
времянагенерациютаблиц,чтоможетзанятьгодынасреднестатистиче- |
|||
|
|
|
|
скомкомпьютере.Хотяминусытожеесть—неувсехинтернетпозволяет |
|
|
|
Собственно, подбор |
выкачать30-60Гбтаблиц.Преимуществогенерациисвоихтаблицнасамом |
||
|
|
||||
|
|
||||
|
Итак,учитывая,чтонапрактикередкоктоиспользуетпаролинеиздиапа- |
делетолькоодно—тысможешьиспользоватьнеобходимыйтебенабор |
|||
|
зона39символов,задачаподборасущественноупрощается.Теоретически |
символовипараметрытаблицы. |
|||
|
паролейиз8символовможетбыть26*39^7=3.6*10^12комбинаций. |
|
|
||
|
Еслипосмотретьсравнениескоростейпереборапаролей(http://www. |
Oracle Rainbow Tables |
|||
|
red-database-security.com/whitepaper/oracle_passwords.html),можно |
ЧтокасаетсяrainbowтаблицдляСУБДOracle,ятакиненашелихвинтер- |
|||
|
увидеть,чтосамыйбыстрыйпереборщикработаетсоскоростьюпримерно |
нетевсвободномдоступе,чемувобщем-тонеособоогорчился,таккак |
|||
|
миллионпаролейвсекундунасреднемкомпьютере(наcore2duo2.4ГГц |
быложеланиесгенерировать ихсамому.Генерироватьярешил,используя |
|||
|
удалосьдобитьсямаксимальнойскоростиперебора—1.6млнпаролей |
программуwinrtgen,входящуювсоставнебезызвестногоcain&abel.Выбор |
|||
|
всекундуприпомощиутилитыworaauthbf,котораяумеетиспользовать |
палнанее,потомукаквнейвсепростоиудобно. |
|||
|
многоядерныепроцессоры). |
Дляначаларазберемсяспараметрами.Ихнемного: |
|||
|
Получается, чтобы перебрать 8 символьный пароль на стандартном |
Hash—алгоритмгенерациихэшфункции.Вданномслучае—oracle. |
|||
|
рабочем компьютере, нам понадобится около 40 дней. И то — если пере- |
MinLen—минимальнаядлинапароля,обычно0. |
|||
|
борщик знает, что первый символ может состоять только из букв, иначе |
MaxLen—максимальнаядлинапароля;возьмемдляначала7. |
|||
|
и вовсе понадобится два месяца. Не слишком утешающие цифры, тем |
Index—идентификатордлягруппытаблиц(таблицысразныминдексом |
|||
|
более, что столько времени мы будем подбирать пароль только для одного |
содержатразныеданные).Покаоставимкакесть. |
|||
|
пользователя — ведь для генерации хэша используется соль (salt). Ну а |
ChainLen—длинацепочки.Повышениедлиныотрицательновлияетна |
|||
|
если пароль состоит из 9 символов, то тут счет будет вестись уже на года. |
времягенерациитаблицыивремякриптоанализа,затоповышаетвероят- |
|||
|
Но отчаиваться не стоит, всегда найдутся методы, позволяющие получить |
ностьподбора.Нежелательновыставлятьболее20000.Оставимпока2400. |
|||
|
результат быстрее. |
ChainCount—грубоговоря,размертаблицынадиске.Еслиоперативной |
|||
|
|
|
|
памятибольше1Гб,товыставляется67018864,таккакприрасшифровке |
|
|
|
Rainbow Tables |
таблицабудетзагружатьсявоперативнуюпамятьижелательно,чтобыона |
||
|
ПригенерациихэшапаролявСУБДOracleиспользуетсядополнительный |
поместиласьцеликом.Обычнобольше1Гбтаблицынеделают.Дляначала |
|||
|
параметр(salt),который,теоретически,долженпредотвращатьатаки |
оставимзначениепоумолчанию. |
|||
|
посредствомсозданиязаранеесгенерированныхтаблицдлябыстрого |
NofTables—количествотаблиц.Соответственно,чембольшетаблиц,тем |
|||
|
переборапаролей(rainbowtables).Норазсоль(salt)намизвестназаранее |
большевероятностьперебора,ноихдольшегенерироватьинеобходимо |
|||
|
(исключениясоставляютслучаи,когдаизвестентолькохэш,нонапрактике |
иметьдостаточноместадляиххранения.Поумолчанию—однатаблица. |
|||
|
этобываеткрайнередко),значит,мыможемсгенерироватьrainbowtables |
Charset—наборсимволов,используемыйвпароле.Мыбудемиспользо- |
|||
|
дляраспространенныхименпользователей.Естьсмыслгенерировать |
ватьстандартныйдляOracle39символьныйнабор,приведенныйвначале |
|||
|
таблицыдляпользователейSYSиSYSTEM,таккакониестьвкаждойСУБД |
статьи. |
|||
|
иимеютпоумолчаниюправаадминистратора(DBA). |
Username—имяпользователя.ИспользуетсякакраздляOracleпаролей.В |
|||
|
СтеориейRainbowtables,думаю,тызнакомпопрошлымномерамжурнала |
нашемслучаебудемгенерироватьдляпользователяSYSTEM. |
|||
|
иличиталвинете.Наэтомяостанавливатьсянебуду,лучшерасскажу, |
Сописаниемвродезакончили,теперьприступимкгенерации.Если |
|||
|
каксоздаватьииспользоватьтаблицыприменительноквзломупаролей |
выставитьзначения,какуказановыше,товероятностьподбора(Success |
|||
|
Oracle. |
probability)будетравняться44процентам,чтонассовсемнеустраивает. |
054 |
xàêåð 05 /113/ 08 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
||
P |
|
|
|
|
|
|
|
|
i |
|
|
|
D |
|
|
|
|
|
|
|
|
Login: |
|
||
|
|
|
|
|
|
|
|
|
r |
|
||
|
|
|
|
|
NOW! |
|
o |
|
||||
|
|
|
|
|
|
|
|
|
||||
w Click |
to |
BUY |
Pasword: |
|
||||||||
|
|
|||||||||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
m |
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
Login: |
|
Login: |
|
Login: |
Pasword: |
|
Pasword: |
|
Pasword: |
|
|
|||
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
E |
|
|
|||
|
|
|
|
X |
|
|
|
|
|||
|
|
|
- |
|
|
|
|
d |
|
||
|
|
|
F |
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
|
P |
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
>> взломto BUY |
|
|
||||||||
|
|
|
|
|
|
||||||
|
|
w Click |
|
|
|
|
|
m |
|||
|
|
|
|
|
|
|
|||||
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
.c |
|
||
|
|
|
|
p |
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
n |
e |
|
||
|
|
|
|
|
|
-x cha |
|
|
|
|
|
|
|
Результатподборапаролейпоrainbowтаблицам |
|
|
|
|
По-хорошему,приемлемаявероятностьдолжнабытьоколо99 |
Чтобыраспараллелитьработунадсозданиемтаблиц,надо |
|
|||
|
процентов,хотяэтозависитотситуации.Дляповышенияве- |
простоскопироватьчастьэтихстрокнадругойкомпьютер |
|
|||
|
роятностиподбораяпредлагаюпростоувеличитьколичество |
вфайлtables.lst изапуститьнанемутилитуwinrtgen. |
|
|||
|
таблицхотябыдо8(99,00)алучшедо12(99,91).Подсчитаем |
Единственныйважныймомент—используемыйсharsetдол- |
|
|||
|
времягенерации(кнопкаBenchmark)иполучимчто-тооколо |
женбытьпрописаннакаждомкомпьютеревфайлеcharset. |
|
|||
|
24днейнастаренькомIntelCeleron2.4.Времяподборапароля |
txt путемдобавленияспециальнойстрокиснаборомсим- |
video |
|||
|
потаблицесоставитоколо1минуты:заметнолучше,чем два |
волов.Причем,ихпорядокдолженбытьодинаковым,иначе |
НаDVDсмотрипозна- |
|||
|
споловинойдняпривзломеметодом полногоперебора. |
таблицыокажутсянесовместимы.Конфиг-файлcharset. |
вательныйвидеоурок, |
|||
|
Правда,нампридетсяпотратить25днейнагенерациюэтих |
txtдолженвыглядетьпримернотак(последняястрокаопи- |
которыйраскрывает |
|||
|
таблиц,затопотомпаролиможнощелкать,какорешки(увы, |
сываетчарсетoracle): |
всюправдуомнимой |
|||
|
только7 символьные). |
|
|
|
защищенностипаро- |
|
|
«Естьливозможностьускоритьпроцесс?»,спросишьты.Ия |
# charset configuration file for winrtgen v1.2 |
лейвOracle. |
|||
|
отвечу—конечноже,еслигенерировать таблицыневодиноч- |
by Massimiliano Montoro (mao@oxid.it) |
|
|||
|
ку,агруппойлюдей,какэтоделалосьиделаетсядосихпордля |
# compatible with rainbowcrack 1.1 and later by |
|
|||
|
LM/NTLM/MD5 хэшейнасайтеwww.freerainbowtables.com. |
Zhu Shuanglei <shuanglei@hotmail.com> |
|
|||
|
Такможнозначительноускоритьпроцесс.Быстреесгене- |
|
|
|
|
|
|
рироватьтаблицыможноиводиночку,используянесколько |
byte |
= [] |
|
|
|
|
компьютеров.Всяпрелестьвтом,чтотаблицыможногенери- |
alpha |
= [ABCDEFGHIJKLMNOPQRSTUVWXYZ] |
|
||
|
роватьнезависимонаразныхкомпьютерах.Утилитаwinrtgen, |
alpha-space |
= [ABCDEFGHIJKLMNOPQRSTUVWXYZ ] |
|
||
|
послетогокактыукажешьвсенеобходимыепараметры, |
. |
|
|
|
|
|
создаетконфигурационныйфайлсименемtables.lst.Вот |
. |
|
|
|
|
|
егосодержимоедлянашегопримера: |
. |
|
|
|
|
|
|
|
oracle |
= [ABCDEFGHIJKLMNOPQRSTUVWXYZ0 |
|
|
|
oracle_oracle#1-7_0_2400x67108864_ |
|
123456789_#$] |
|
|
|
|
SYSTEM#000.rt; |
|
|
|
|
|
|
|
Теперьможнораскидатьпооднойтаблиценакаждыйкомпью- |
|
|||
|
oracle_oracle#1-7_0_2400x67108864_ |
|
|
|||
|
SYSTEM#001.rt; |
|
тер,иобщеевремягенерациисущественноуменьшится.Что |
|
||
|
oracle_oracle#1-7_0_2400x67108864_ |
|
касаетсямногоядерныхпроцессоров,тоутилитапоумолча- |
|
||
|
SYSTEM#002.rt; |
|
ниюихнеподдерживает,ноничтонемешаетнамсоздатьдве |
|
||
|
oracle_oracle#1-7_0_2400x67108864_ |
|
папкиспрограммойwinrtgen,переименоватьэкзешникив |
|
||
|
SYSTEM#003.rt; |
|
winrtgen1.exeиwinrtgen2.exeизапуститьпараллельно |
|
||
|
oracle_oracle#1-7_0_2400x67108864_ |
|
генерациютаблицнаразныхядрах(прописавразныетаблицы |
|
||
|
SYSTEM#004.rt; |
|
заранеевtables.lst). |
|
||
|
oracle_oracle#1-7_0_2400x67108864_ |
|
Все описанные выше действия я провел на доступных |
|
||
|
SYSTEM#005.rt; |
|
мне компьютерах и получил в итоге 12 таблиц общим |
|
||
|
oracle_oracle#1-7_0_2400x67108864_ |
|
размером чуть более 7 Гб. Для проверки работоспособ- |
|
||
|
SYSTEM#006.rt; |
|
ности таблиц я собрал хэши нескольких SYSTEM пользо- |
|
||
|
oracle_oracle#1-7_0_2400x67108864_ |
|
вателей и запустил перебор по созданным таблицам. В |
|
||
|
SYSTEM#007.rt; |
|
итоге 2 из 3 хэшей подобрались; общее время, затрачен- |
|
||
|
|
|
|
|
|
|
xàêåð 05 /113/ 08 |
055 |
|
|
|
|
hang |
e |
|
|
|
|
||
|
|
|
C |
E |
|
|
|||||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|||||
w Click |
to BUY |
|
>> взлом |
||||||||
|
|
|
|
|
|
|
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 |
|
|
|
|
Настройкаwinrtgenдлягенерациитаблицдля7 символьныхпаролей
|
ное на перебор, составило 4 минуты. Неплохо, но что делать с более |
|
|
|
|
|
||
|
|
0 SYS |
|
1 |
|
|||
|
длинными паролями? |
|
|
77E6B621F3BB777A |
0 |
3 15.10.07 |
|
|
|
|
|
|
|
19.02.08 |
|
|
|
|
|
Больше символов! |
|
|
0 |
|
1 |
|
|
|
|
|
|
|
|||
|
Мы научились подбирать 7 символьные пароли. Чтобы сгенериро- |
|
0 |
0 DEFAULT_CONSUMER_GROUP |
|
|||
|
вать таблицы для подбора 8 символьных паролей с тем же чарсетом |
|
|
|
|
|
||
|
и приемлемым Success Rate 99,00%, нам потребуется не много ни |
|
0 |
|
|
|
||
|
мало — 64 гигабайта свободного места и полтора года времени (если |
|
|
|
|
|
||
|
использовать только один компьютер). Зато подбираться пароль по |
|
S:52D6AC184EDE6D952E94317CB1C9918D2766C34A23C476E460D |
|
||||
|
этим таблицам будет, максимум, час, а в среднем — минут двадцать. В |
|
72BD03F2C |
|
|
|
||
|
сравнении с 60 днями методом полного перебора это выигрыш, и еще |
|
|
|
|
|
||
|
|
Какмывидим,теперьвтаблицехранитсядваразныххэша.Старый |
||||||
|
какой! Распределенная генерация 8 символьных таблиц уже запущена, |
|
||||||
|
и вполне вероятно, к выходу журнала они могут быть доступны на сайте, |
|
—77E6B621F3BB777A,совместимыйсOracle10g,иновый.Насамомделе, |
|||||
|
посвященном исследованию безопасности баз данных и web-приложе- |
|
последняястрокалистинга—этонехэшвчистомвиде.Первые20байт |
|||||
|
ний: http://dsecrg.ru. |
|
|
—этоsha-1хэшпароля,апоследние10—случайныйsalt. |
||||
|
|
|
|
|
Что касается нового алгоритма, в нем исправлены предыдущие ошибки. |
|||
|
|
Oracle 11g и нововведения |
|
Во-первых, пароль становится «регистро-зависимым», что существенно |
||||
|
Все рассмотренное касалось версий Oracle ниже 11. Хотя в продакшн |
|
увеличивает алфавит символов для перебора. Во-вторых, в качестве соли |
|||||
|
среде версия 11 до сих пор встречается редко, разобраться в ней не |
|
используется случайное значение. Это можно проверить, меняя пользо- |
|||||
|
помешает. Тем более, дела там обстоят не так прозрачно. Для начала |
|
вателю пароль на такой же, в результате чего хэш изменится. Все говорит |
|||||
|
попытаемся извлечь пароли из таблицы DBA_USERS, как это делалось в |
|
о том, что Oracle действительно решили заняться своей безопасностью, |
|||||
|
старых версиях. |
|
|
но, как обычно, ложку дегтя мы все-таки найдем. Дело в том, что ситуация |
||||
|
|
|
|
|
очень напоминает историю с OC Windows и LM/NTLM-хэшами. Там, если |
|||
|
|
Oracle Database 11g Enterprise Edition Release |
|
вы помните, старый хэш хранится в системе вместе с новым, что позволяет |
||||
|
|
11.1.0.6.0 — Production |
|
|
с легкостью расшифровать любые пароли менее 14 символов, используя |
|||
|
|
With the Partitioning, OLAP, Data Mining and Real |
|
старый хэш. Ситуация в Oracle такая же: видимо, для совместимости со |
||||
|
|
Application Testing options |
|
старыми приложениями в таблице, как уже упоминалось, хранится старый |
||||
|
|
|
|
|
хэш. Значит, ничто нам не мешает подбирать к нему пароли, как мы делали |
|||
|
|
SQL> select username, password from dba_users; |
|
это для старых версий. |
|
|
|
|
|
|
|
|
|
Существует один нюанс, также как и с LM/NTLM-хэшами: когда хэш |
|||
|
|
USERNAME |
PASSWORD |
|
расшифруется, то пароль по понятным причинам может не совпасть с |
|||
|
------------------- |
----------------------- |
|
настоящим (старый алгоритм хранения паролей не различает регистров, |
||||
|
|
MGMT_VIEW |
|
|
а новый уже различает). Например, мы подобрали пароль к старому хэшу |
|||
|
|
SYS |
|
|
и он оказался «passwd». Поскольку старый хэш не различает регистров, |
|||
|
|
SYSTEM |
|
|
вполне возможно, что настоящий пароль — «PassWd». |
|||
|
|
DBSNMP |
|
|
Но нас это нисколько не останавливает, ведь мы можем перебрать все |
|||
|
|
|
|
|
варианты написания одного слова тем же кайном (cain&abel), а затем |
|||
|
Очевидно,паролейтутнет,нумынерасстраиваемся.Ониестьвтаблице |
|||||||
|
|
использовать THC-Orakel (переборщик паролей к Oracle 11g), — и это |
||||||
|
SUS.USER$и,соответственно,доступкним—толькоупользователей |
|
займет считанные секунды. Способ гораздо эффективнее, чем заморачи- |
|||||
|
справамиадминистратора (DBA).ПравSELECTANYDICTIONARYдля |
|
ваться с подбором паролей к SHA-1 хэшам. В итоге, с доступом к таблице |
|||||
|
доступакхэшампаролейуженедостаточно.Хранятсяхэшитакженемного |
|
с хэшами паролей вероятность подбора практически не отличается для |
|||||
|
отличноотстарых: |
|
|
всех версий СУБД Oracle. И там, и там у нас есть большие шансы взломать |
||||
|
|
|
|
|
пароль. Вот и все на сегодня, надеюсь, ты хорошо усвоил суть рассмотрен- |
|||
|
|
SQL> select user, password, spare4 from sys.user$; |
|
ной проблемы. z |
|
|
|
|
|
|
|
|
|
|
|
|
|
056 |
xàêåð 05 /113/ 08 |
|
|
|
|
|
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 |
|
|
|
|
Всегдаприятнопохвастатьсядрузьям ловкоснятымвидеороликомнамобильныйтелефон,вкоторомтяжеленныйкатокустраиваетгонкистроллейбусомилисногсшибательныедевушки исполняютнаулицесекси-танцы.
Донедавнеговременимаксимум,что тымогсделатьсосвоимроликом,—это залитьегонавидеохостингиполучать удовлетворениеоттого,чтоегокто-то скачивает,смотритиоценивает.
Нонедавноутебяпоявиласьуникальнаявозможностьпоучаствоватьв настоящемкино-конкурсе,который толькочтозапустилакомпанияМТСи СоюзкинематографистовРоссии.
Тыможешьучаствоватьв этомконкурсе,дажееслидоэтогониразунеимел делос киноимонтажнымсофтом. Профессионализм—неглавноевэтом конкурсе.Кудаважнеетвоиидеии твойэнтузиазм!
Тимур Бекмамбетов, который когда-то давно начинал маленьральных ВУЗов. А в любительском конкурсе могут принять участие все кими короткометражками, затем занимался роликами для желающие, в том числе и ты! Для того чтобы стать участником, необходимо
известных телеканалов. Недавно же он завершил картину с участием Анжелины Джоли и бюджетом $65 миллионов, а это самый дорогой кинопроект, которым когда-либо управлял человек,
говорящий по-русски.
Теперь и тыполучил шанс показать себя, реализовывать свои идеи. Компания МТС и Союз кинематографистов России решили дать тебе такой шанс и запустили «Фестиваль Мобильного кино». Проект уникальный. Это первый открытый международный фестиваль короткометражных фильмов для профессионалов и любителей. Фильмы могут быть сняты на любые видеокамеры: начиная с тех, что встроены в мобильные телефоны, и заканчивая профессиональными. При хронометраже порядка 10 минут фильм должен иметь сюжетную линию, заставляющую зрителей задуматься, сопереживать, радоваться. Это фильм с собственной атмосферой, яркой идей и ее творческой реализацией — то, чем и славятся любительские миниатюры.
В рамках фестиваля пройдут два конкурса: профессиональный и любительский. В профессиональном конкурсе участвуют фильмы начинающих режиссеров, студентов и выпускников кинематографических и теат-
до 15 июня 2008 года отснять материал и разместить готовый фильм в Интернете на специальном сайте фестиваля www.mobilkinofest.ru.Еще удобнее сделать это с WAP-портала «МТССити» (wap.mtscity.ru), с его помощью абоненты МТС могут загружать свои фильмы на сайт фестиваля прямо со своего мобильного телефона. Все фильмы, участвующие в любительском конкурсе, будут доступны для просмотра на сайте www.mobilkinofest.ru, а каждый посетитель сможет
принять участие в онлайн-голосовании. По его результатам будут определяться претенденты на победу.
Словом, если ты давно вынашиваешь идею отснять классный материал, показать всем на что ты способен, самое время позвать друзей и начать съемки. Наконец у тебя есть шанс получить оценку не просто от приятелей и пользователей Интернет, но, самое главное, от авторитетного жюри, состоящего из признанных мэтров киноискусства.
Когда еще будет такая возможность? Это отличный шанс для тебя!
Ты можешь прославиться и выиграть классные призы: годовое подключение на безлимитный тариф МТС и современный ноутбук.
|
|
|
|
hang |
e |
|
|
|
|
||
|
|
|
C |
E |
|
|
|||||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||||
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|||||
w Click |
to BUY |
|
>> взлом |
||||||||
|
|
|
|
|
|
|
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 |
|
|
|
|
Вгорячем сердце файрвола
Взлом портала популярного брандмауэра
Хочешь по-настоящему ролевого и экстремального взлома? Желаешь одним глазком взглянуть на работу слаженной хакерской команды? Тогда пристегнись! На твоих глазах хакеры пробираются в самое сердце центрального сервера компании Agnitum! Да-да, именно Agnitum.com — производителя популярного файрвола.
звестенуженепервыйслучай,когданасайтахпроизводи- И телейантивирусовобнаруживаюттрояны.Ещеверишьв
защищенность,конфиденциальностьинадежность?Сейчас тыувидишь,какхрупкаяцепочкабагов,казалосьбы,незна-
чительныхпоотдельности,разрушитмифонеприступностикомпаний, специализирующихсянасетевойбезопасности.
Рекогносцировка на местности
Здесьидалее:misterBlack,misterWhite—этодвамолодыхчеловека, состоящихводнойхакерскойгруппе.Псевдонимывыбранысовершенно случайно,безподоплекиилизлогоумысла.Какводится,хакерыведутпоис- киресурса-жертвыиобмениваютсяценнойинформацией.
misterBlack:
Вечер.Светмонитора.Окинуввзглядомиконкинарабочемстоле,япочемутоостановилсяна OutpostFirewall.«Хм...чемневариант?»,—подумаля. ЗайдянаAgnitum.com,пошарилсяминутдесять.Следующийсайт—agnitum. ru,заним—онже,взонеFR...баговнигденеобнаружено.Новотклацнувна ссылкуPolskiвверхнемуглу,япопалнаoutpost.pl.Беглыйанализсайтаобнару- жилдвижок(этоужехорошо)—Joomla1.0.9.Глянувэксплоитыподэтуверсию, яужебылообрадовался,ноIP-адресаagnitum.comиoutpost.plоказалисьраз- ными,азначит—сноваоблом.Тогдаярешилпосмотреть,какиесоседибылина сайте(используяресурсseologs.com/ip-domains.html),неособо,впрочем,рас- считываянаудачу,ибопроектытакогоуровня,какправило,имеютсобственный сервер,иникакихлевыхсайтовтамаприорибытьнеможет.Ноневэтотраз!В спискедоменовприсутствовалодинокийaboutphone.info(ачто,этошанс).
Первоначальный осмотр сайта на предмет взлома не обрадовал. На-
стораживала лишь надпись «Контент,программирование©Anatoly Skoblov,2001-2004», свидетельствующая о явной заброшенности ресурса. Все было написано на чистом HTML (никаких скриптов). Однако ссылка «форум» привела меня на aboutphone.info/phorum, где PHP-скрипты определенно были. Напрашивалась мысль о самописности ресурса, но дальнейший просмотр исходного кода страницы показал: «Phorum» — это название форума. Версия со 100% точностью была определена с помощью meta-тегов.
<meta name="PhorumVersion" content="3.4.3a" /> <meta name="PhorumDB" content="mysql" /> <meta name="PHPVersion" content="4.4.7" />
Фортунабыланамоейстороне.Проверкабагтрековвыдаламножество разныхуязвимостей.Ярешилзаостритьвниманиенасамойудачной.
[Critical SQL-inj uriauth() Phorum<=3.4.7 ] www.securityfocus.com/archive/1/360635
Вописаниибагабылпримерэксплуатации:http://localhost/ phorum347/list.php?f=1&phorum_uriauth=waraxe%2527%20AN D%20mid(password,2,1)=3/*:foobar,нокогдаяподставлялразные значения,ничегонепроисходило.Странно!Былауженочь,глазазалипали, и,следуярусскойпоговорке«утровечерамудренее»,ярешилоставить разборполетовнаследующийдень.
058 |
xàêåð 05 /113/ 08 |