вторник, 30 августа 2011 г.

Вновь о трассировке

Размышлял на днях о том, как сделать полностью недетектируемый способ контроля кода, и пришел к тому, что скорее всего это возможно.

Для этого потребуется процессор с поддержкой технологии VT-X и немного шаманства. Шаманство будет заключаться в запуске windows в качестве гостевой системы. Далее с введенным Trap Flag запускается гостевая система, и при выполнении каждой инструкции будет выполнен VM Exit в хостовую систему.

Из гостевой системы детект хоста невозможен по определению, поэтому единственный способ который можно использовать для детекта такого вида трассировки - это тайминговые атаки(через RDTSC). Однако мало того, что RDTSC является одной из VM-Exit команд и для гостевой можно подсунуть все что угодно, так еще можно сэмулировать (через CPUID) факт того, что код выполняется на более медленном процессоре чем он есть на самом деле. Все это сведет тайминговые атаки ( которые сами по себе являются ненадежными ) на нет.

5 комментариев:

  1. По-моему, этой идее уже лет 5 как минимум. И кто-то даже вполне успешно успел ее реализовать. Рутковская, кажется.

    ОтветитьУдалить
  2. Будет медленно работать. Выход в режим гипервизора довольно таки накладен.

    Вот тут ( http://code.google.com/p/hyperdbg/ ) люди пытаются построить отладчик на основе аппартного гипервизора.

    В целом, написать гипер который будет выполнять пошаговую трассировку довольно просто, можно не быть гением. Если проект будет open-source - я бы вписался.

    ОтветитьУдалить
  3. Нет, у Рутковской немного другое.

    ОтветитьУдалить
  4. "Из гостевой системы детект хоста невозможен по определению"
    Это что, шутка? Банальный INVD после записи в госте уже покажет наличие гипервизора.

    ОтветитьУдалить
  5. Банальный INVD банально вызовет VM_Exit, и может быть банально проэмулирован как душе угодно, чтобы гостевая система ничего не обнаружила.

    ОтветитьУдалить