анти-отстраняване на грешки - # 00

Крис Касперски, известен още като Myshch, известен още като nezumi, известен още като Souriz, известен още като Elraton, без имейл

По време на времето си на копач той изкопа обширна (и доста пълна) колекция от техники за отстраняване на грешки, изтеглени от протектори, вируси, краксови плюс собствените им идеи и разработки. След като систематизира разпръснатите факти и ги сложи на рафтовете, мишката реши да сподели скривалището на своята дупка с хакерския свят. така възниква идеята за рубриката "против отстраняване на грешки", посветена главно на NT- и UNIX-подобни операционни системи (W2K, XP, Vista, Linux, BSD) и x86-платформа. Виртуални машини JVM и .НЕТ както и 64-битовите архитектури все още са в етап на изследване, но и ние ще стигнем до тях!

Триковете срещу злонамерен софтуер са начини да се противопоставите на дебъгера от обикновено откриване до грабване на ресурси, жизненоважни за работата на дебъгера. Всичко това затруднява възстановяването на експерименталната програма и въпреки че дебъгерът не е единственият инструмент за хакване (друг популярен инструмент е разглобявачът), не можем да схванем необятността и решихме да се съсредоточим изключително върху отстраняването на грешки.

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

Myshch си постави за задача да организира цялата налична информация, да тества всяка техника за отстраняване на грешки под дузина популярни програми за отстраняване на грешки, да показва как и с какви плъгини може да бъде заобиколен, как да разпознава тези приставки и да ги неутрализира. Ето една рекурсивна тема: отстраняване на грешки → отстраняване на грешки → анти-отстраняване на грешки → анти-анти-отстраняване на грешки ... И рекурсивното спускане не спира дотук, но продължава да пада по-дълбоко - в края на краищата броят на " anti "префиксите не е ограничен от нищо!

статии

Фигура 1 лично мишки

боен арсенал

W2K SP0 и Knoppix 4.7 (базиран на Debian Linux с ядро ​​2.4.x) бяха избрани като основна операционна система за експериментите. Разликите в останалите оси ще бъдат споменати по пътя (ако е необходимо).

Списък на експерименталните програми за отстраняване на грешки с техните кратки описания и указания за версиите е даден по-долу:

Olly Debugger 1.10

anti-debug-00

Фигура 2 Външен вид на Olly Debugger

Olly Debugger 2.00с pre-alpha 3

Експериментален дебъгер с напълно пренаписан механизъм за отстраняване на грешки и силно намалена функционалност (в сравнение с версия 1.10). Въпреки това, механизмът за отстраняване на грешки все още използва API за отстраняване на грешки на MS и все още е дебъгер на ring-3, с всички ограничения, които идват с него.

IDA Pro Advanced 5.2

IDA Pro е търговски продукт и повечето от "warez" версиите, работещи в мрежата, работят изключително нестабилно и постоянно се сриват, следователно има смисъл да се спрем на безплатната (и, естествено, нереално нарязана) версия 4.9.

статии

Фигура 3 дебъгер, интегриран в IDA Pro (конзолно издание)

Microsoft Debugger 6.8.4.0

Той е част от WDK (Windows Driver Kit - по-рано Driver Development Kit или DDK) и инструментите за отстраняване на грешки. И двете са безплатни, но WDK е много по-голям по размер и изисква предварителна регистрация, за да се получи Windows Live ID (валидността на Windows _ not_ проверена), докато инструментите за отстраняване на грешки се разпространяват без регистрация заедно със SDK, който включва документация, заглавни файлове, библиотеки и няколко примера за писане на приставки. За съжаление има много малко приставки на трети страни за Microsoft Debugger.

Microsoft Debugger може да работи както на ниво приложение (ring-3), така и на ниво ядро. До XP, за ядрено отстраняване на грешки са необходими поне две машини, свързани чрез COM кабел, но сега една е достатъчна.

Той се предлага в две издания: windbg.exe - графичен интерфейс и cdb.exe - интерфейс на командния ред. Но всички те са само тънки обвивки около dbgeng.dll, в които всъщност е реализиран основният „двигател“ за отстраняване на грешки, протоколът за обмен с който е документиран и следователно dbgeng.dll може да се използва като „основа“ при писане универсални разопакователи на изпълними файлове (за да не пишете отново трасиране от нулата).

странична лента

Фигура 4 Microsoft Debugger (графична версия)

Soft-Ice 2.6.0 (компилация 336)

В момента поддръжката за мек лед е прекратена и продуктът е заровен. Той все още е съвместим с XP и Server 2003 (въпреки че сериозни проблеми вече се наблюдават при многоядрените процесори), но в дългосрочен план soft-ice е обречен и трябва да се търси заместител. Освен това, колкото по-скоро, толкова по-добре.

nezumi

Фигура 5 легендарен мек лед

>>> странична лента знаехте ли какво ...

името "мек лед" е заимствано от научно-фантастичния роман на Уилям Гибсън "Neuromatic" (Уилям Гибсън: "Neuromantic"). Под формата на лед имаше защитни механизми, които хакерите трябваше да режат, съответно, мек лед - буквално „мек лед“ - лесно хакване.

Syser 1.95.19000.0894

Достойна алтернатива на умиращия мек лед. Отладчик на ядрото, който поддържа мултипроцесорни машини и цялата линия на NT-подобни системи по протежение на Висла включително. Това е търговски продукт, написан от двама китайски хакери: Wu YanFeng и Chen JunHao, които предоставят само седемдневна безплатна пробна версия, което е обидно малко, но тъй като се присъединяваме към екипа на Syser, няма да говорим за това как счупи го (въпреки че се счупи е лесно). От друга страна, в момента се подготвя книга „Техника за отстраняване на грешки II“ с пълните версии на Syser на CD, остава само да се изчака малко, за да се получи това чудо.

Очакваме графичен интерфейс, към който в началото е много трудно да свикнем, но иначе всичко е същият мек лед, поне от гледна точка на командния синтаксис. Друго предимство е, че присъствието в екип работи в тясно сътрудничество с разработчиците, за да засили защитата на дебъгъра по отношение на съпротива срещу отстраняване на грешки. Плюс възможността за свързване на външни плъгини (приставките за Syser обаче не са известни на мишката, с изключение на няколко парчета, написани от него и дори тогава като експеримент).

отстраняване грешки

Фигура 6 Syser на работа

Дебъгерът на GNU е основен дебъгер на UNIX с напълно различен начин на мислене от всички горепосочени дебъгъри. Това не е просто интерактивен дебъгер, а по-скоро програмирана машина, която е невероятно гъвкава и мощна (по отношение на интерфейса). Отстраняването на грешки на "честни" програми е удоволствие, но от гледна точка на отстраняване на грешки, GDB дори не се опитва да устои и работи чрез библиотеката ptrace, която всъщност не е библиотека, а системно повикване. Но не е важно. Важното е, че GDB е фундаментално неспособен да отстранява грешки в програми, които не искат да бъдат отстранени. И такива програми започват да се появяват малко по малко (вземете поне пакета за изпълними файлове на Shiva).

Определената версия на GDB е компилирана през 2004 г. и очевидно не се отнася за нови компилации, тъй като основният механизъм за отстраняване на грешки не е реализиран в GDB, а е концентриран в ядрото на системата, версията на GDB не е решаваща.

Естествено, освен GDB, има и други програми за отстраняване на грешки, например Lin-Ice, но ... тъй като технологиите за отстраняване на грешки за UNIX тепърва започват да се развиват, GDB ще бъде доста подходящ за нашите експерименти.

статии

Фигура 7 GDB (конзолна версия с tui интерфейс)

>>> странична лента Знаете ли, че ...

ядрото на NT включва интегриран дебъгер, способен да задава точки на прекъсване, да наблюдава много системни събития и е невъзможно да се проследи активността му от режим на приложение! Тези функции са без документи, но те се експортират открито от ядрото NTOSKRNL.EXE и започват с префикса Kd *. Прототипите им са описани в NTDDK, а в независими ресурси като ReactOS, ORS.com, вино, все още можете да намерите кратко описание на това, което прави всеки от тях. Веднага щом започнете да пушите в посока KdEnableDebugger/KdDisableDebugger, всичко останало идва само по себе си.

>>> странична лента Знаете ли, че ...

за да стартирате soft-ice под VM Ware, добавете следните редове към конфигурационния файл на виртуалната машина (* .vmx) (други дебъгъри се изпълняват върху него без него):

>>> странична лента Знаете ли, че ...

ако soft-ice и Syser не стартират, тогава причината може да се крие в конфликт с драйвера stpd.sys, който инсталира копирния Alcohol CD/DVD и неговия по-малък брат Daemon Tools, за да предотврати откриването на виртуални CD/DVD дискове, създадени от емулатора, освен това поведението на драйвера stpd.sys е толкова агресивно, че дебъгърите не живеят с него и това не се третира по никакъв начин - нито stpd.sys, нито дебъгъри, но не и двете наведнъж!

>>> странична лента да бъде или да не бъде

Силно не се препоръчва да използвате техники за отстраняване на грешки във вашите собствени програми (както и да използвате опциите за защита, отговорни за това), тъй като има малко "честни" техники за отстраняване на грешки и всички те лесно се заобикалят от програмистите за отстраняване на грешки, а нечестните влизат в конфликт с операционната система, различни програми за наблюдение, нови видове процесори и виртуални машини, в резултат на което отделът за поддръжка експлодира с хиляди обаждания от недоволни потребители, което има изключително негативен ефект както върху имиджа на компанията и кривата на продажбите. А хакери ... е, те ще разбият програмата не за час, а след това за един и половина, дори и след седмица. Да, ще ги забави, но на каква цена?!