Взлом дескрипторов в Windows с помощью Handle Hijacking

Взлом дескрипторов Windows Handle Hijacking

В предыдущей статье мы рассказывали про атаку Leaked Handle. Сегодня поговорим про Handle Hijacking. Эта ата­ка поз­воля­ет под­менить один хендл дру­гим и, нап­ример, перенап­равить поток вывода в дру­гой файл. Фак­тичес­ки мы можем манипу­лиро­вать дес­крип­торами чужих про­цес­сов.

Еще по теме: Как убить процесс EDR

Взлом дескрипторов в Windows с помощью Handle Hijacking

Ата­ка осно­вана на том, что Windows пов­торно исполь­зует индексы дес­крип­торов. Ког­да дес­крип­тор зак­рыва­ется, сле­дующий дес­крип­тор, соз­данный в этом про­цес­се, будет пов­торно исполь­зовать индекс пре­дыду­щего дес­крип­тора. Нап­ример, зак­рыли дес­крип­тор с индексом 10, а затем сра­зу же соз­дали новый. Индекс нового тоже будет равен 10.

Ес­ли рас­смат­ривать не пас­сивную экс­плу­ата­цию с перенап­равле­нием вывода, то мож­но перенап­равить поток вво­да. Нап­ример, под­менить один файл нас­тро­ек дру­гим.

Об­щий алго­ритм работы сле­дующий:

  1. По­луча­ем новый хендл, соз­дав новый файл через CreateFile(). Этим фай­лом и будем под­менять.
  2. При­оста­нав­лива­ем целевой про­цесс через NtSuspendProcess().
  3. Про­бега­емся по всем хен­длам в целевом про­цес­се с помощью NtQuerySystemInformation().
  4. Иг­нориру­ем все хен­длы, которые не явля­ются хен­дла­ми на фай­лы (пос­коль­ку мы под­меня­ем фай­лы). Для про­вер­ки срав­нива­ем зна­чения ObjectTypeIndex.
  5. На­ходим дес­крип­тор целево­го фай­ла в уда­лен­ном про­цес­се, исполь­зуя NtQueryInformationFile() со зна­чени­ем FileNameInformation(), что­бы получить путь к фай­лу.
  6. По­лучен­ный хендл копиру­ем и зак­рыва­ем, исполь­зуя DuplicateHandle() с фла­гом DUPLICATE_CLOSE_SOURCE.
  7. Ко­пиру­ем хендл обратно в ата­куемый про­цесс с помощью DuplicateHandle(), что поз­воля­ет занять пус­той индекс.
  8. Вос­ста­нав­лива­ем работу прог­раммы с помощью NtResumeProcess() и получа­ем успешную под­мену фай­ла.

Ни­же — реали­зация, взя­тая с прек­расно­го сай­та x86matthew.

В дан­ном слу­чае инс­тру­мент тре­бует нес­коль­ко аргу­мен­тов коман­дной стро­ки.

Здесь ука­зыва­ется PID ата­куемо­го про­цес­са и име­на фай­лов. Пер­вым идет файл, который нуж­но под­менить, а вто­рым — на что под­менять.

Заключение

Бы­вает кру­то взгля­нуть на при­выч­ные вещи под дру­гим углом! Иног­да получе­ние хен­длов необыч­ным обра­зом помога­ет обхо­дить средс­тва защиты.

ПОЛЕЗНЫЕ ССЫЛКИ:

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз.

Добавить комментарий