1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

kernel-mode перехват для антивируса

Тема в разделе "WASM.NT.KERNEL", создана пользователем whitequark, 24 фев 2008.

  1. whitequark

    whitequark New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2008
    Сообщения:
    4
    Сначала предыстория.
    Столкнулся я тут недавно с проблемой: отсутствием нормальных GPLных антивирусов под Win32. (а использовать все остальные мне не дает религия %). Собственно, единственный GPL-антивирус, который я нашел, был ClamAV (ClamWin в виндовой версии), однако у него был существенный недостаток - отсутствие монитора (хотя была возможность проверить процессы в памяти). Из такой ситуации есть только один выход - написать монитор. Не с нуля, конечно, а на основе библиотеки libclamav. Прикрепленный файл - монитор вместе с исходниками, инсталлятор в папке "Install". Это - уже отлаженная и проверенная версия (т.е. на зараженных флешках и скачанных из инета файлах, работает на нескольких компьютерах в течение 1.5 месяца и не вызывает нареканий у владельцев); нужен установленный ClamWin.
    За недостатком знаний по программированию в win32 kernel mode, монитор сделан на основе user mode перехватчиков. Собственно вопрос: какую технику перехвата наиболее рационально использовать для антивируса в системах NT (если забить на Висту) - SSDT, замена первых байт функции, IDT/SYSENTER, подмена адресов в таблице импорта ядра (а они там вообще есть?), или еще какую нибудь? Основные требования - стабильность, переносимость (т.е. установка сервиспака не влияет на работоспособность, SDT походу идет лесом).
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Забудь про SDT, перезват низкоуровневых функций ядра.
     
  3. whitequark

    whitequark New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2008
    Сообщения:
    4
    Ок, это ведь тоже можно сделать несколькими способами? В usermode я это делал через таблицу импорта, в режиме ядра это не прокатит. Метод замены первых байт функции известен как нестабильный (из-за многопоточности, имеет ли смысл это ограничение в ядре?), других методов я не знаю.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ерунду ты пишеш, причём тут многопоточность, нестабилен потомучто его легко снять, в режиме ядра катит идеально.
     
  5. whitequark

    whitequark New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2008
    Сообщения:
    4
    Clerk
    Многопоточность тут очень даже при чем, предположим, один поток вызвал эту ф-цию, я восстанавливаю первые байты и тут ее же вызывает другой поток. Правда, бывает ли такое в kernel mode, я не знаю

    Еще вопрос: а не лучше ли тут юзать такую штуку как фильтр файловой системы?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Это имеет силу только для первых байт функции ?
     
  7. justru

    justru New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    39
    можно и не восстанавливать, а выполнять их из обработчика, я так делаю в перехвате в usermode, думаю для перехвата в kmode так тоже пойдёт.
    ну, с условием конечно, что там нет всяких условных переходов\вызовов процедур
     
  8. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Нестабильный под многопрецессорную систему а снять действительно легко
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Да, бывает. Можно патчить однобайтовой командой, например, CC. Но снять и правда легко.
     
  10. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    снять (точнее найти) будет тяжелее, если модифицировать не первые байты функции
    в качестве дизассемблера можно использовать бесплатный udcli с открытым исходным кодом
     
  11. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    сравнение с эталоном на диске обнаружит большую часть перехватов.
     
  12. Joes

    Joes New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    98
    Царь горы - кто "ниже" сядет, тот и рулит. Замкнутый круг - обращение к файловой системе тоже можно перехватить.
     
  13. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    модифицировать эталон ;)
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    нуну, и что будет происходить в системе когда jmp в незагруженную область будет?
    само собой.
     
  15. whitequark

    whitequark New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2008
    Сообщения:
    4
    Эээ... Мы тут не руткит пишем, а антивирус :) Что ему скрываться, хотя самозащита и не помешает...
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код, изменённый в системных модулях найти и изменить слишком просто.
     
  17. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    Мдя, один совет краше другого...
    Во-первых, Clerk ерунду пишешь ты, во-вторых хукать функции отладочным прерыванием - плохо влияет на производительность, в третьих, как вы не поймете, как только любой код получает ring-0 привилегии, вся борьба с хукерами заканчивается раз и навсегда, не надо городить фиг знает что. Максимум что можно сделать - защитить антивирус от большинства ринг-3 вторжений и предотвратить наиболее популярные способы проникновения в р0. Для этих целей вполне достаточно перехвата функций SSDT, который можно выполнять вполне безопасно. Кстати с точки зрения защищенности процесса, я считаю допустимым скрыть его от ринг-3 методов обнаружения, в коммерческом продукте теоретическим могут за это конечно надавать по шапке...
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    SSDT.. Гугль больше ничего не находит ?
    Я так понял, вы на этих таблицах зациклились, тока не понятно почему.
     
  19. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    Потому-что сплайс не имеет абсолютно никаких преимуществ, но имеет серьозные недостатки, и использовать его есть смысл только в крайних случаях, например, когда нужно перехватывать функцию, которой нет в SSDT (и даже в этом случае иногда подходит вариант с заменой адреса в таблице экспорта кернела/импорта модулей).
     
  20. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Может немного не в тему но всёже, а как антируткиты сканируют функции на наличие изменений? у них там что уже есть база функций под все модификации windows? и какую часть они сканируют, я в одной книге прочитал что только первые 20 байт, прабда ли?