Самозащита "проактивок"(HIPS) - выключение с ring3

Тема в разделе "WASM.HEAP", создана пользователем Ev0lwaves, 6 май 2010.

  1. Ev0lwaves

    Ev0lwaves New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    125
    китайцы из matousec снова открывают америку (продолжение BSODhook)
    h__p://www.matousec.com/info/articles/khobe-8.0-earthquake-for-windows-desktop-security-software.php
    Только вот меня смущает то, что они называют зироудэй уязвимость - на самом деле типичный пример race condition.
    У меня вопрос к васмовцем, неужели никто не применял данную технику для убийства процессов "проактивок"?
     
  2. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    Да, классическая гонка. Сложность успеть в нужный момент
     
  3. Ev0lwaves

    Ev0lwaves New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    125
    С изменением памяти на которую указывает PUNICODE_STRING всё ясно.
    а каким хитрым способом изменить значение handle'a?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ev0lwaves
    Хэндлер выполняется на нулевом IRQL с разрешённой ядерной APC(Suspend-APC). Тоесть можно исполнить атаку типо race condition. Атакующий код должен находится в ином потоке. Он передаёт описатель текущего процесса(это не приведёт к завершению процесса, так как права соответствующие не заданы при открытии, тогда NtTerminateProcess возвратит STATUS_ACCESS_DENIED) в сервис, при этом второй поток останавливает текущий, освобождает описатель и открывает целевой процесс. Значение описателя будет такимже. Затем текущий поток ресумится. Тоесть достигается останов потока на:
    Код (Text):
    1. status=OldNtTerminateProcess(ProcessHandle,ExitStatus);
    и замена описателя. Это распростанённый тип атаки.
    Кстате в wrk в resource.c дано чёткое описание:
     
  5. Ev0lwaves

    Ev0lwaves New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    125
    Clerk
    Примерно такой псевдокод:
    Код (Text):
    1. status=ZwQueryInformationProcess(ProcessHandle,ProcessBasicInformation,&info,sizeof(info),NULL);стопим после выполнения этого
    2. NtClose(ProcessHandle);
    3. NtOpenProcess(...);//открываем процесс HIPS, Handle в нашем стопнутом треде будет иметь смысловое значение handle'a HIPS
    4. //будим тред и тут вызывается
    5. status=OldNtTerminateProcess(ProcessHandle,ExitStatus);//что закрывает защищённый процесс
    То есть по Вашему мнению, авторы "проактивок" не учли, что надо использовать KeEnterCriticalRegion и копировать(или блокировать доступ?) память на которую ссылаются поинтеры в SSDT хуках?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ev0lwaves
    Смысл в изменении обькта описываемого хэндлом без изменения его значения. Например имеется у вас описатель файла со значением 0x30. Вы его освобождаете, закрыв после чего открываете к примеру эвент. Значение описателя не поменяется, по прежнему будет 0x30, но описывать он будет новый обьект, тоесть эвент. В данном случае псевдокод следующий:
    Первый тред.
    o Открываем текущий процесс, из флагов удаляем PROCESS_TERMINATE.
    o Взводим фалажёк Synch.
    o Вызываем NtTerminateProcess передав описатель.

    Второй тред.
    o Ждём Synch.
    o Суспендим первый тред.
    o Закрываем описатель процесса.
    o Открываем целевой процесс с флагом PROCESS_TERMINATE.
    o Ресумим первый тред.
    -
    Разумеется это выполняется в цикле при большом числе итераций. Обычно для окончания атаки нужно не более нескольких сот миллисекунд, что не долго.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Не только перехваты, это частный случай. В протах вобще юзается KeEnterCriticalRegion()/поднимается IRQL очень редко.
     
  8. Ev0lwaves

    Ev0lwaves New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    125
    Clerk
    Спасибо за чёткое разъяснение!
    Вы как всегда на высоте.