Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Редактор реестра  (Прочитано 87829 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #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
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #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 уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
sss
Специалист

ru
Offline 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
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #33 : 25-08-2010 05:06 » 

да. он даже обычным regedit виден (в сервисах)
только имя драйвера произвольно меняется при каждом новом запуске.
PS автора не посмотрел) руки... крылья... главное хвост!
« Последнее редактирование: 25-08-2010 13:51 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #34 : 25-08-2010 05:30 » 

sss, если будешь делать драйвер, то вместо хуков нативных функций лучше используй документированную функцию CmRegisterCallback (появилась с WinXP). Тогда твоя прога будет "дружить" с антивирусными программами и AVZ ругаться не будет.
« Последнее редактирование: 25-08-2010 05:47 от zubr » Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 25-08-2010 13:49 » 

sss, ну... если кто-то, уже перехватил функции чтения/записи реестра... я слабо представляю как в обход них можно сделать... перехватить второй раз? напрямую файл реестра править? AVZ их восстанавливать умеет после перехвата.... а вот как иначе?
хотя смотря какой перехват...
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #36 : 25-08-2010 14:17 » 

1. В драйвере можно определить, что функции перехвачены и отменить перехват, как это делает AVZ
2. Если даже какие то процессы будут скрывать какие то ключи реестра путем перехвата к примеру функции NtOpenKey, то CallBack (CmRegisterCallback) все равно покажет эти ключи при обращении процесса к скрытым ключам.
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #37 : 25-08-2010 14:37 » 

а если они путем тупого внедрения кода перехвачены? что для вирусописателей как раз более надежный, хотя и сложный метод
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #38 : 25-08-2010 15:21 » 

Сплайсинг требует тонкой работы и высокой квалификации - иначе будет BSOD. Да и еще вопрос как сплайсинг реализован, ведь все равно зловредный процесс будет вызывать оригинальную функцию, вот тут его можно перехватить. В общем тут как мой ротный в армии говорил (пусть грубо, но в данном случае верно):
"На всякую хитрую задницу есть хрен с винтом, а на хрен с винтом есть задница с закоулками"
Записан
sss
Специалист

ru
Offline 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
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #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
Специалист

ru
Offline Offline

« Ответ #41 : 26-08-2010 05:45 » 

zubr, блин, причем тут GDT? Ты хотел сказать SDT Не понял Что значит - перехватить ZwOpenKey ? Перехватываются заглушки в обработчике SYSENTER... Драйвер же пользуется прямым вызовом на ZwOpenKey, адрес которого записывается загрузчиком в его таблицу IAT... Или как???
Записан

while (8==8)
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #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
Специалист

ru
Offline Offline

« Ответ #43 : 26-08-2010 06:43 » 

...
после чего любой процесс, который обращается к нужной функции обращается за адресом к таблице SSDT
...

Вот вот. Я собираюсь чтобы мой процесс не использовал SSDT.


..
Перехватываются заглушки в обработчике SYSENTER. - это и есть подмена адресов в IDT (Interrupt Descriptor Table)
..

Да нет же! Вот если устанавливать свой обработчик на int 2E, подменяя дескриптор в IDT - это да, это подмена...
Записан

while (8==8)
sss
Специалист

ru
Offline 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
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #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
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #46 : 17-09-2010 06:42 » 

хм. а почему бы ему тем же не быть?) результату, имеется в виду)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #47 : 17-09-2010 07:11 » 

Ochkarik, ну как бы грубо... С таким же успехом можно подозревать, к примеру, любую программу, обращающуюся к реестру или файловой системе. Ведь хук - вполне законное действо, которое Microsoft поддерживает в своих последних системах.
Записан
sss
Специалист

ru
Offline 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



* regsss01.JPG (59.34 Кб - загружено 1021 раз.)
* regsss02.jpg (86.24 Кб - загружено 1036 раз.)
* regsss.rar (464.25 Кб - загружено 146 раз.)
« Последнее редактирование: 30-08-2012 02:55 от sss » Записан

while (8==8)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #49 : 29-08-2012 20:01 » 

Если вкратце, что такое "SKMD" и в чем его польза?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
sss
Специалист

ru
Offline 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
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #51 : 30-08-2012 03:43 » 

sss, адреса системных функций платформо-зависимы и меняются от версии к версии. И потом, вирусы могут многократно (периодически) проверять свои адреса в таблице SSDT.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #52 : 30-08-2012 03:47 » 

Вызывает ли программа и ее драйвер интерес со стороны антивирусов — не считают ли они ее саму вредоносной?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
sss
Специалист

ru
Offline Offline

« Ответ #53 : 30-08-2012 03:56 » 

Вызывает ли программа и ее драйвер интерес со стороны антивирусов — не считают ли они ее саму вредоносной?

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

sss, адреса системных функций платформо-зависимы и меняются от версии к версии. И потом, вирусы могут
многократно (периодически) проверять свои адреса в таблице SSDT.

Я не понимаю. Пусть вирусы меняют сколько угодно адреса в SSDT. В том то и дело - SSDT не используется. Адреса
функций записываются системным загрузчиком в таблицы импорта во время загрузки драйвера. Поэтому не важно
какие адреса у функций и какие подмены произведены в SSDT. Или что Вы имеете ввиду?

Кажется понял... Я не меняю адреса в SSDT обратно на системные. Вообще не вмешиваюсь никуда...

« Последнее редактирование: 30-08-2012 04:08 от sss » Записан

while (8==8)
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #54 : 30-08-2012 05:04 » 

sss, какие системы поддерживаются твоей программой, потому как номера системных функций в каждой системе от версии к версии отличаются?
Цитата
Пусть вирусы меняют сколько угодно адреса в SSDT. В том то и дело - SSDT не используется. Адреса
функций записываются системным загрузчиком в таблицы импорта во время загрузки драйвера. Поэтому не важно
какие адреса у функций и какие подмены произведены в SSDT. Или что Вы имеете ввиду?
А разве системный загрузчик берет адреса не из таблицы SSDT?
RXL, эвристика АВ, работающих в резидентном режиме скорее всего будет срабатывать. Я столкнулся с подобным, когда делал проект - программу по защите файлов и каталогов, там использовался драйвер-фильтр файловой системы. Уже при установке начинал орать Касперский при максимальном уровне эвристики. Заказчик просил сделать чтобы АВ молчали при установке, что стоило бы гораздо дороже самой программы. В общем, решился вопрос просто обращением заказчика в известные АВ-компании, они просто включили его программу в белый список. Думаю, монитор Руссиновича и многие подобные программы, тоже просто в белом списке.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #55 : 30-08-2012 05:45 » 

...
А разве системный загрузчик берет адреса не из таблицы SSDT?
...

Ну наверняка не из SSDT.. Думаю что из таблиц экспортов dll загружаемых в процесс. Если процесс system
(хост для драйверов ядра), то и адреса будут взяты для dll уже загруженных в этот процесс. Вот если затёрты
таблицы импорта процесса system, то тогда всё. Суши вёсла. Надо действительно содержать таблицу адресов
системных функций соответствующих конкретной версии ОС.
« Последнее редактирование: 30-08-2012 06:07 от sss » Записан

while (8==8)
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines