zubr
Гость
|
|
« Ответ #30 : 24-08-2010 06:12 » |
|
Функция NtInitiatePowerAction (5D) перехвачена (8062BF67->F504625E), перехватчик не определен >>> Функция воcстановлена успешно ! >>> Код перехватчика нейтрализован Функция NtOpenProcess (7A) перехвачена (805717C7->F5046E28), перехватчик не определен >>> Функция воcстановлена успешно ! >>> Код перехватчика нейтрализован Функция NtOpenThread (80) перехвачена (8058A1C9->F5046EDC), перехватчик не определен >>> Функция воcстановлена успешно ! >>> Код перехватчика нейтрализован Функция NtQueryInformationProcess (9A) перехвачена (8056DB30->F5045D06), перехватчик не определен >>> Функция воcстановлена успешно ! >>> Код перехватчика нейтрализован Функция NtQuerySystemInformation (AD) перехвачена (8057BC40->F5045D4A), перехватчик не определен >>> Функция воcстановлена успешно ! Ключевая фраза - перехватчик не определен Хотя не спорю AVZ - штука полезная.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #31 : 24-08-2010 06:20 » |
|
судя по адресам: Функция NtQuerySystemInformation (AD) перехвачена (8057BC40->F5045D4A), перехватчик не определен Функция NtRaiseHardError (B6) перехвачена (806480E3->F50460A3), перехватчик C:\WINDOWS\temp\66167C89F.sys >>> Функция воcстановлена успешно ! - перехватчиком является тот же C:\WINDOWS\temp\66167C89F.sys а определить его было нельзя пока другие функции не восстановлены. после восстановления NtQuerySystemInformation() - он определился)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
sss
Специалист
Offline
|
|
« Ответ #32 : 25-08-2010 01:08 » |
|
Ochkarik, а вы можете сказать - есть ли в реестре записи об драйвере 66167C89F.sys? Ну там, допустим HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_66167C89F
или HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\66167C89F
при работающем стелс механизме? P.S.: Все Ваши прения натолкнули меня на идею создать свой драйвер , который будет использоваться программой для чтения/записи в реестр в обход системных перенаправлений...
|
|
|
Записан
|
while (8==8)
|
|
|
Ochkarik
|
|
« Ответ #33 : 25-08-2010 05:06 » |
|
да. он даже обычным regedit виден (в сервисах) только имя драйвера произвольно меняется при каждом новом запуске. PS автора не посмотрел) руки... крылья... главное хвост!
|
|
« Последнее редактирование: 25-08-2010 13:51 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
zubr
Гость
|
|
« Ответ #34 : 25-08-2010 05:30 » |
|
sss, если будешь делать драйвер, то вместо хуков нативных функций лучше используй документированную функцию CmRegisterCallback (появилась с WinXP). Тогда твоя прога будет "дружить" с антивирусными программами и AVZ ругаться не будет.
|
|
« Последнее редактирование: 25-08-2010 05:47 от zubr »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #35 : 25-08-2010 13:49 » |
|
sss, ну... если кто-то, уже перехватил функции чтения/записи реестра... я слабо представляю как в обход них можно сделать... перехватить второй раз? напрямую файл реестра править? AVZ их восстанавливать умеет после перехвата.... а вот как иначе? хотя смотря какой перехват...
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
zubr
Гость
|
|
« Ответ #36 : 25-08-2010 14:17 » |
|
1. В драйвере можно определить, что функции перехвачены и отменить перехват, как это делает AVZ 2. Если даже какие то процессы будут скрывать какие то ключи реестра путем перехвата к примеру функции NtOpenKey, то CallBack (CmRegisterCallback) все равно покажет эти ключи при обращении процесса к скрытым ключам.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #37 : 25-08-2010 14:37 » |
|
а если они путем тупого внедрения кода перехвачены? что для вирусописателей как раз более надежный, хотя и сложный метод
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
zubr
Гость
|
|
« Ответ #38 : 25-08-2010 15:21 » |
|
Сплайсинг требует тонкой работы и высокой квалификации - иначе будет BSOD. Да и еще вопрос как сплайсинг реализован, ведь все равно зловредный процесс будет вызывать оригинальную функцию, вот тут его можно перехватить. В общем тут как мой ротный в армии говорил (пусть грубо, но в данном случае верно): "На всякую хитрую задницу есть хрен с винтом, а на хрен с винтом есть задница с закоулками"
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #39 : 26-08-2010 00:35 » |
|
sss, ну... если кто-то, уже перехватил функции чтения/записи реестра... я слабо представляю как в обход них можно сделать... перехватить второй раз? напрямую файл реестра править? AVZ их восстанавливать умеет после перехвата.... а вот как иначе? хотя смотря какой перехват...
Не понял в чём сложность? Интересно - а что мешает через DeviceIoControl вызывать напрямую из драйвера, например, ZwRegistryOpen ? Наверняка не знаю, но подозреваю, что AVZ при обнаружении/восстановлении перехватов просто проверяет соответствие адресов в таблице системного сервиса адресам экспортируемых функций отображенных системных dll... zubr, использовать CmRegisterCallback целесообразно в мониторах реестра, а у меня тут редактор. Не знаю правда - когда сяду за проект...
|
|
« Последнее редактирование: 26-08-2010 00:46 от sss »
|
Записан
|
while (8==8)
|
|
|
zubr
Гость
|
|
« Ответ #40 : 26-08-2010 05:12 » |
|
Не понял в чём сложность? Интересно - а что мешает через DeviceIoControl вызывать напрямую из драйвера, например, ZwRegistryOpen ? Наверняка не знаю, но подозреваю, что AVZ при обнаружении/восстановлении перехватов просто проверяет соответствие адресов в таблице системного сервиса адресам экспортируемых функций отображенных системных dll... DeviceIoControl позволяет обмениваться данными между юзермодным приложение и драйвером и никакого отношения к вызовам нативных функций не имеет. Если функция ZwOpenKey (наверно эту функцию ты имел в виду) уже кем то перехвачена, то ты будешь вызывать перехваченную функцию. Да, AVZ, как и многие другие антиспайвэри утилиты 1-е что делает - это проверяет соответствие адресов системных функций в таблице GDT, 2-е - соответствие в таблице IDT(таблице системных прерываний). Насчет сплайсинга - уже сложнее, не знаю AVZ может ли увидеть сплайсинг. Для выявления сплайсинга надо проверять целостность кода ядра. Если ядро тупо запатчено и подменено - то это выявить легко, а если оно патчится динамически, то это битва разработчиков вирусов и антивирусов. В общем то с помощью сплайсинга вирусописатели обходят и защиту PatchGuard 64-битных систем, начиная с висты. А данная защита именно построена на рандомной по времени проверке целостности кода ядра. zubr, использовать CmRegisterCallback целесообразно в мониторах реестра, а у меня тут редактор. Не знаю правда - когда сяду за проект... CmRegisterCallback позволит выявить процесс, который скрывает ключи реестра и соответственно нейтрализовать его. К примеру, какой то вирус перехватил NtOpenKey и в своей ловушке не дает другим процессам прочитать скрываемые им ключи реестра, но сам к этим ключам обращается, что и покажет коллбэк CmRegisterCallback. Тогда можно будет определить PID вируса и путь к нему. Ну если конечно сам CmRegisterCallback не будет запатчен.
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #41 : 26-08-2010 05:45 » |
|
zubr, блин, причем тут GDT? Ты хотел сказать SDT Что значит - перехватить ZwOpenKey ? Перехватываются заглушки в обработчике SYSENTER... Драйвер же пользуется прямым вызовом на ZwOpenKey, адрес которого записывается загрузчиком в его таблицу IAT... Или как???
|
|
|
Записан
|
while (8==8)
|
|
|
zubr
Гость
|
|
« Ответ #42 : 26-08-2010 06:00 » |
|
Да, я имел в виду SSDT - System Servise Device Table. Один из способов перехвата, причем самый простой - это изменение адреса функции в таблице SSDT. То есть при этом способе в драйвере просто подменяется адрес нужной функции в SSDT на свой обработчик, после чего любой процесс, который обращается к нужной функции обращается за адресом к таблице SSDT - а там по адресу функции наш обработчик, который, к примеру, сначала выполнит свой код, а уж потом направит на оригинальную функцию или вернет вместо этого STATUS_ACCESS_DENIED Перехватываются заглушки в обработчике SYSENTER. - это и есть подмена адресов в IDT (Interrupt Descriptor Table)
|
|
« Последнее редактирование: 26-08-2010 06:07 от zubr »
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #43 : 26-08-2010 06:43 » |
|
... после чего любой процесс, который обращается к нужной функции обращается за адресом к таблице SSDT ...
Вот вот. Я собираюсь чтобы мой процесс не использовал SSDT. .. Перехватываются заглушки в обработчике SYSENTER. - это и есть подмена адресов в IDT (Interrupt Descriptor Table) ..
Да нет же! Вот если устанавливать свой обработчик на int 2E, подменяя дескриптор в IDT - это да, это подмена...
|
|
|
Записан
|
while (8==8)
|
|
|
sss
Специалист
Offline
|
|
« Ответ #44 : 26-08-2010 07:04 » |
|
Заинтересовался как работает SYSENTER: оказывается используются регистры
* SYSENTER_CS_MSR (174h): - CS регистр для перехода на уровень нулевого кольца; * SYSENTER_ESP_MSR (175h): - ESP регистр для перехода на уровень нулевого кольца; * SYSENTER_EIP_MSR (176h): - EIP регистр для перехода на уровень нулевого кольца;
запись/чтение в которые выполняется командами
WRMSR Write the value in EDX:EAX to MSR specified by ECX RDMSR Load MSR specified by ECX into EDX:EAX
О как!
|
|
|
Записан
|
while (8==8)
|
|
|
zubr
Гость
|
|
« Ответ #45 : 11-09-2010 13:18 » |
|
Прикольно этот AVZ работает. Ставлю пустой хук по WH_GETMESSAGE (обработчик хука пустой). Он мне выдает буквально: D:\Mycod\RedirectSniffer\Project\Exe\RedirectLib.dll --> Подозрение на Keylogger или троянскую DLL D:\Mycod\RedirectSniffer\Project\Exe\RedirectLib.dll>>> Поведенческий анализ 1. Реагирует на события: клавиатура, мышь D:\Mycod\RedirectSniffer\Project\Exe\RedirectLib.dll>>> Нейросеть: файл с вероятностью 99.53% похож на типовой перехватчик событий клавиатуры/мыши Делаю тоже самое, но внутри хуковой длл-ки делаю хак Winsock-функций - результат тот же. Вывод: То что в коде хуковой длл идет хак API-функций он не видит, а любой хук типа WH_GETMESSAGE, WH_CBT определяет как кейлогггер с вероятностью 99.53%
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #46 : 17-09-2010 06:42 » |
|
хм. а почему бы ему тем же не быть?) результату, имеется в виду)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
zubr
Гость
|
|
« Ответ #47 : 17-09-2010 07:11 » |
|
Ochkarik, ну как бы грубо... С таким же успехом можно подозревать, к примеру, любую программу, обращающуюся к реестру или файловой системе. Ведь хук - вполне законное действо, которое Microsoft поддерживает в своих последних системах.
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #48 : 29-08-2012 05:22 » |
|
Привет. Вернулся к проекту и вот представляю следующую версию редактора. Теперь у программы есть поддержка обхода стелс защит, основанных на перехвате системных вызовов. Если выбрать пункт меню "SKMD+", программа выгрузит вспомогательный драйвер regsss32.sys во временной каталог и попытается его установить. Если всё пройдёт удачно, в области корневых ключей появятся ещё два "\Registry\Machine" и "\Registry\User" с которыми программа будет работать через драйвер. Для удаления вспомогательного драйвера выберите пункт меню "SKMD-" - при этом программа остановит драйвер, удалит из scm и удалит файл regsss32.sys. Вспомогательный драйвер 32 битный, поэтому функция работы через драйвер доступна только для 32 битных версий ОС. К сожалению, в какой-то момент времени я не учёл, что функция RegSaveKeyEx есть в advapi32.dll только начиная от Win XP и выше, поэтому минимально допустимой ОС для работы программы является Win XP. Так же в этот раз я решил не скрывать вкладку "scm", которая по существу является отдельной утилитой которую я использовал при написании и которая может пригодиться кому нибудь ещё. Например для установки и настройки безопасности служб и драйверов.. [v 0.3] Размерregsss.exe = 1 508 352 Хэш md5( regsss.exe) = 739F1AE3B0840710EABD2CDD7E8B397E [v 0.4] Размер присоединённого в архиве regsss.exe = 1 503 232 Хэш присоединённого в архиве md5( regsss.exe) = 682539ff3b3a729ca4ac3528e4f4b87b
|
|
« Последнее редактирование: 30-08-2012 02:55 от sss »
|
Записан
|
while (8==8)
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #49 : 29-08-2012 20:01 » |
|
Если вкратце, что такое "SKMD" и в чем его польза?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
sss
Специалист
Offline
|
|
« Ответ #50 : 30-08-2012 01:16 » |
|
Если вкратце, что такое "SKMD" и в чем его польза?
1) SKMD - sss kernel mode driver. Не думал что буду переводить. Не смог придумать как коротко и лаконично обозвать пункт меню. 2) ...в чем его польза - есть серьёзные вирусы, которые изменяют адреса функций в таблице SSDT на свои и, допустим, при попытке чтения скрывают присутствие запускающих их ключей. Другие при попытке удаления или изменения важных для них ключей просто отказывают в доступе. Другое дело приложения режима ядра. Загрузчик напрямую записывает в таблицы импорта адреса системных функций. При этом если перенаправлять вызовы сервисных функций реестра через DeviceIoControl к драйверу SKMD мы обходим перехват. Вторично - мы также обходим попытки перехватов в режиме пользователя, реагирующих на имена функций работы с реестром. В принципе так же можно дописать возможность работы с файлами.. Во всяком случае я так думаю (заблуждаюсь?). ВАЖНО! Для версии 0.3. После работы с реестром через ядро обязательно отключайте пунктом SKMD- ! Иначе возможен обход безопасности через драйвер SKMD. Простите что сразу не предупредил. Сейчас буду думать что делать.. ИСПРАВЛЕНО.Заменил версию на 0.4. Теперь с драйвером могут работать только члены встроенной группы "Администраторы" и системная учётная запись даже если драйвер установлен и выполняется.
|
|
« Последнее редактирование: 30-08-2012 03:23 от sss »
|
Записан
|
while (8==8)
|
|
|
zubr
Гость
|
|
« Ответ #51 : 30-08-2012 03:43 » |
|
sss, адреса системных функций платформо-зависимы и меняются от версии к версии. И потом, вирусы могут многократно (периодически) проверять свои адреса в таблице SSDT.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #52 : 30-08-2012 03:47 » |
|
Вызывает ли программа и ее драйвер интерес со стороны антивирусов — не считают ли они ее саму вредоносной?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
sss
Специалист
Offline
|
|
« Ответ #53 : 30-08-2012 03:56 » |
|
Вызывает ли программа и ее драйвер интерес со стороны антивирусов — не считают ли они ее саму вредоносной?
Не могу пока сказать. Ничего противозаконного она не делает. Ведь файловый монитор Руссиновича антивирусы не считают вредоносным, хотя там принцип вообще как у перехватчиков.. В общем программа не влияет на работу (не вмешивается в работу) других приложений. sss, адреса системных функций платформо-зависимы и меняются от версии к версии. И потом, вирусы могут многократно (периодически) проверять свои адреса в таблице SSDT.
Я не понимаю. Пусть вирусы меняют сколько угодно адреса в SSDT. В том то и дело - SSDT не используется. Адреса функций записываются системным загрузчиком в таблицы импорта во время загрузки драйвера. Поэтому не важно какие адреса у функций и какие подмены произведены в SSDT. Или что Вы имеете ввиду? Кажется понял... Я не меняю адреса в SSDT обратно на системные. Вообще не вмешиваюсь никуда...
|
|
« Последнее редактирование: 30-08-2012 04:08 от sss »
|
Записан
|
while (8==8)
|
|
|
zubr
Гость
|
|
« Ответ #54 : 30-08-2012 05:04 » |
|
sss, какие системы поддерживаются твоей программой, потому как номера системных функций в каждой системе от версии к версии отличаются? Пусть вирусы меняют сколько угодно адреса в SSDT. В том то и дело - SSDT не используется. Адреса функций записываются системным загрузчиком в таблицы импорта во время загрузки драйвера. Поэтому не важно какие адреса у функций и какие подмены произведены в SSDT. Или что Вы имеете ввиду?
А разве системный загрузчик берет адреса не из таблицы SSDT? RXL, эвристика АВ, работающих в резидентном режиме скорее всего будет срабатывать. Я столкнулся с подобным, когда делал проект - программу по защите файлов и каталогов, там использовался драйвер-фильтр файловой системы. Уже при установке начинал орать Касперский при максимальном уровне эвристики. Заказчик просил сделать чтобы АВ молчали при установке, что стоило бы гораздо дороже самой программы. В общем, решился вопрос просто обращением заказчика в известные АВ-компании, они просто включили его программу в белый список. Думаю, монитор Руссиновича и многие подобные программы, тоже просто в белом списке.
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #55 : 30-08-2012 05:45 » |
|
... А разве системный загрузчик берет адреса не из таблицы SSDT? ...
Ну наверняка не из SSDT.. Думаю что из таблиц экспортов dll загружаемых в процесс. Если процесс system (хост для драйверов ядра), то и адреса будут взяты для dll уже загруженных в этот процесс. Вот если затёрты таблицы импорта процесса system, то тогда всё. Суши вёсла. Надо действительно содержать таблицу адресов системных функций соответствующих конкретной версии ОС.
|
|
« Последнее редактирование: 30-08-2012 06:07 от sss »
|
Записан
|
while (8==8)
|
|
|
|