12.09.2011

»справление у€звимостей

image

¬ данной статье автор объ€сн€ет, как исправить у€звимости программного обеспечени€.

јвтор: Celil ÜNÜVER
celilunuver[n0sp4m]gmail.com
http://tcc.hellcode.net/musashi

¬ступление

”€звимости, которые публикуютс€ ежедневно в Bugtraq, иногда могут оказатьс€ в программном обеспечении, которым мы ежедневно пользуемс€. ƒаже самое известное программное обеспечение подвержено у€звимост€м. ѕросматрива€ Bugtraq, вы можете встретить рекомендации по безопасности даже дл€ продуктов крупных поставщиков.

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

¬ этой статье € объ€сню, как исправить у€звимости программного обеспечени€.

»справление

ƒанна€ технологи€ также известна как "HotPatching" или "runtime patching ". »справление €вл€етс€ методом модификации двоичного кода программного обеспечени€ с помощью дизассемблера, отладчика, HEX-редактора и т.д.

Ёто очень распространенный прием дл€ обратной разработки. ≈го можно использовать дл€ перехвата API, взлома, вставки кода и т.д. Ќо в моей статье, € объ€сню, как использовать эту технику, чтобы закрыть дыры в безопасности.

»нструментарий

ƒл€ нашей работы пригодитс€ программное обеспечение, которое хорошо известно и используетс€ всеми реверсивными проектировщиками (отладчиками, дизассемблерами и т.д.). Ќо задачу может упростить дизассемблер /отладчик, который имеет встроенные функции дл€ редактировани€ ассемблера и бинарного кода, такой как IDA Pro, Ollydbg.

  сожалению, встроенные функции дл€ редактировани€ ассемблера и бинарного кода в IDA или Ollydbg доступны только дл€ "x86" исполн€емых модулей. Ќапример, если вы хотите исправить исполн€емый код ARM или Xbox, вы должны посмотреть на код операции (инструкци€ кодировани€) в информации о процессоре.

ѕрактика

¬ыполним ''hotpatching'' дл€ программы, которую € расположил ниже.  ак видите, она имеет у€звимость переполнени€ буфера. ј теперь скомпилируем ее и забудем исходный код, теперь это наше программное обеспечение с закрытым исходным кодом…

#include
int main()
{
char buf[16];
printf("\nString giriniz:");
scanf("%s", &buf);
return 0;
}

 ак видите в исходном коде и коде сборки, scanf не провер€ет размер строки. (% s)

ќчевидно вы знаете, что проверить размер строк могут такие функции, как scanf и sprintf. ѕросто нам нужно поставить целые числа перед форматируемым значением. (e.g% 15s или %0,15 s)

ѕопробуем решить эту проблему. ƒл€ исправлени€ € предпочитаю использовать Ollydbg. ќн удобен дл€ этого. IDA € использую только дл€ анализа.

ќткроем у€звимую программу через OllyDbg;

 ак вы видите в дизассемблере, оно вызывает "00403011" смещение дл€ перемещени€ строки в буфер.

„ерез CTRL + G комбинацию попадем на "00403011" адрес.

ƒумаю, из картинок вам все стало €сно:] “ак что теперь мы будем модифицировать следующую строку --> "AND EAX, 694D0073".

«аписываем "and eax, 733531" вместо кода "and eax, 694D0073" (а вы знаете, что коды 313573 €вл€ютс€ шестнадцатеричными типами кодов "% 15s"и мы записали его, согласно принципу Last In First Out!)

Ќу, вот и все! ћы с легкостью исправили у€звимую часть нашего программного обеспечени€. ƒл€ сохранени€ исправлений, щелкните правой кнопкой на исправленной строке и выберите " опировать в исполн€емый модуль>¬ыбор ". ќткроетс€ новое окно, а при закрытии будет предложено сохранить изменени€ или не сохран€ть их. ѕосле сохранени€ вы можете попытатьс€ переполнить ее :)

ƒавайте посмотрим на нашу исправленную программу через IDA PRO;

«аключение

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

Ѕлагодарности

я хотел бы поблагодарить моего брата, мою девушку, мою семью и моих друзей [murderkey, AhmetBSD ака L4M3R, Ѕоб ((ulaş), kurti ]

—сылки:

  • http://tcc.hellcode.net
  • http://hellcoderesearch.wordpress.com
или введите им€

CAPTCHA
Ќекто
13-09-2011 09:57:13
—тать€ слишком сложна дл€ понимани€ тем, кто не знаком с программированием. јвтору следовало бы лучше "разжевывать" дл€ простых смертных свой текст.
0 |
≈вгений-NSK
13-09-2011 10:30:45
ј стоит ли разжевывать в данном случае? ¬ начале статьи всЄ описано по русски. ј потом идет пример дл€ спецов. –азжевать дл€ всех что такое дизассемблер или IDA? Ќе уверен, что получитс€
0 |
xfg.virrus
15-09-2011 03:10:00
»ћ’ќ, те кто с предметом не знаком, не поймет, даже если разложить все по мелочам. “е кто в теме, ну чтож, думаю пон€ли что хотел донести “—.
0 |
60452
17-09-2011 00:58:27
а тем кто не знаком, как минимум, с программированием, разве следует лезть в хакерство?
0 |
fuziko
15-09-2011 05:23:45
„то-то кривонаписать на — могу и €, воспользовать Ё“ќ… подсказкой то же. Ќо дело в другом, если бы автор не умел хорошо кодить он бы пон€л, что дл€ тех кто не умеет кодить, лучше было бы написать что вам надо сначала исправить ошибку (или сымулировать исправление) в коде, потом скомпил€ть код и посмотреть какие символы и где должны располагатьс€ и какие у них коды. “о стало бы намного пон€тней как править ошибки. » ещЄ, € считаю, что нехватает реального примера, зачем тест ?!, - даешь ѕ–ј “» ” !
0 |
15-09-2011 09:22:54
ƒумаю, из картинок вам все стало €сној картинок-то как раз и нету!
0 |
gentoo
15-09-2011 10:22:40
–уки надо вынуть из того места, в котором они у ¬ас в данный момент наход€тс€. » разобратьс€ со своим компьютером (ќ—).  артинки как раз есть.
0 |
Andrey
15-09-2011 16:35:25
«аписываем "and eax, 733531" вместо кода "and eax, 694D0073" (а вы знаете, что коды 313573 €вл€ютс€ шестнадцатеричными типами кодов "% 15s"и мы записали его, согласно принципу Last In First Out!) 1)ƒумаю, замен€ть символьную строку через преобразование в код не сама€ удобна€ иде€... 2)“ебе просто повезло: “ы увеличил длину строки на 2 символа, и тем самым затЄр начало следующей строки. %s.Mingd -> %15s.Min ѕодумай, ведь в коде есть линки на строки %s и ћingw „то произошло после изменений? ѕервый линк не изменилс€, указывает на %15s. “ут всЄ в ажуре из-за нут-терминатора. ј вот со вторым линком проблема! ќн указывает на то-же место, что и раньше, на 00403014, а там s и после него нут-терминатор. »де€ хотпатчинга сама по себе раскрыта нормально, просто есть масса нюансов, которые могут всЄ испортить... (Ќапример проверка md5 не пройдЄт)
0 |