JIT компиляция - безопасность о которой не думали
От: gear nuke  
Дата: 03.05.07 05:58
Оценка: 6 (1) :)

JIT и безопасность сейчас

Just in time компиляция — обязательный атрибут современных т.н. "безопасных" сред Java и .NET. Основное предназначение — повышение скорости работы исполняемого кода. Под безопасностью в данном случае понимают пресловутые проверки на выход за границы массива и прочие шаолиньские приёмы против граблей.


Пользователь под угрозой

Далее речь пойдёт о совершенно другой безопасности — данных (включая денги) пользователя системы. Жизнь показала неспособность современных ОС противостоять атакам. Дело даже не столько в имеющем дыры дизайне ОС, сколько в большом количестве возможных векторов атаки; большую роль играет человеческий фактор. Поэтому принимаем как входное условие — малвара может быть запущена в системе пользователя.


Ловушка для троянского коня

После того, как троян успешно обошёл современные средства безопасности и запустился с правами админа, он должен обеспечить:
  • возможность повторного запуска;
  • невозможность удаления;
  • выполнение "полезной нагрузки" (payload).

    2й пункт часто выполняет т.н. rootkit. В качестве ближайшего аналога можно вспомнить stealth-вирусы времён DOS. Руткиты бывают разные по наблюдаемому поведению (скрытие объектов ядра, файлов, сетевого трафика) и деталям реализации. Но все их объединяет один главный принцип — перехват различных функций для последующей модификации данных.

    Если обеспечить невозможность перехвата, современные руткиты не смогут работать.


    Хардкод — зло (в память PathGuard)

    Про это пишут в книгах. Тоже самое пишут в статьях о создании руткитов, рекомендуя использовать дизассемблер (в простейшем случае — поиск по маскам) для поиска адресов в коде, которые нужно пропатчить. Такой способ более универсален, поскольку даже различные версии компилятора производят похожий код. Перехват путём модификации структур данных обычно проще, т.к структуры документированы.

    Представим, что компилятор при повторной компиляции производит заметно отличающийся бинарник, и компиляция ядра системы происходит заново при установке, либо при каждом запуске. Такое возможно уже сейчас, например у *них (где руткиты мало распространены). Поиск адресов для перехвата может стать нетривиальным (подобный принцип — рандомизация адресов загрузки системных модулей — используется против т.н exploits).


    Обратная сторона

    Если включить (слегка модернизированный современный) компилятор в поставку ОС от MS, он начнёт использоваться большим количеством новых полиморфных вирусов. Хотя эта проблема может быть решена административным путём.

    MS вынуждена будет поставлять некоторую производную исходного кода, что облегчит reverse engineering. Однако и сейчас доступны PDB файлы, а для минимальной функциональности метода достаточно объектных файлов и линкера.


    Ничто не ново

    Несколько лет назад известный вирусописатель Z0MBiE обошёлся без компилятора и исходных кодов — бинарный файл разбирался дизассемблером в дерево и компилировался после его трансформации. Подобная техника описана в статье 90210 Kernel mode antihooking by building our own kernel для обеспечения псходных целей с другой стороны.
  • People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.