Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.21;
Скачать: CL | DM;

Вниз

Перехват запуска приложения   Найти похожие ветки 

 
dreamse   (2008-06-24 11:37) [0]

Приветствую.

Занимаюсь разработкой приложения для безопасности.
Не буду вдаваться в подробности. Смысл следующий: Нужно каким либо образом перехватывать запуск приложений.

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

Есть следующие варианты:

1) Прописать в реестре %1 чтобы любое приложение запущенное в Windows запускалось через мою программу, т.е запускаеться моя программа с параметрами я её проверяю и уже затем запускаю.
Соответственно этот способ считать лучшим не следует так как его очень просто обойти.

2) Каждые N секунд по таймеру обновлять список процессов, смотреть если добавился процесс, проверять его и если он должен быть заблокированн то отпралять ему Terminate Process
Минусы: Данный вариант постоянно нагружает процессор на 5-10 % каждые N проверяемых секунд и к тому же пока идет проверка проверяемое приложение может уже сделать все что нужно (например удалить файлы с диска) и смысл в его проверке просто будет утерян

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

4) Лучшим решением будет: Написание драйвера
Драйвер перехватывает любой запуск и передает например путь в мой сервис, сервис проверяет приложение и если это не то приложение которое нужно блокировать то отправляет данные драйверу о том что приложение можно разрешить запускать.
Минусы: Я не знаю не C++ ни ASM а писать драйверы на Delphi к сожалению нельзя (знаю что компилятор 2 и 3 Delphi позволяет, но давайте уж согласимся что это полное изврещение и нормальный sys не написать :(   )

Подскажите какие могут быть оптимальные решения которые можно было бы реализовать с наименьшей загрузкой CPU и с наиболее большой вероятностью перехвата всех запускаемых приложений ( именно перхвата )


 
tesseract ©   (2008-06-24 11:46) [1]


> Минусы: Я не знаю не C++ ни ASM а писать драйверы на Delphi
> к сожалению нельзя (знаю что компилятор 2 и 3 Delphi позволяет,
>  но давайте уж согласимся что это полное изврещение и нормальный
> sys не написать :(   )


Можно. Про D2/3 - это явный прогон, да и  sys-драйвер тебе тут абсолютно не нужен.

Например, определсиь, как драйвер будет определять запуск приложения?  Драйвера от честнейших ATI/NVIDIA заточки, вроде как в сервисе определяют. И потом уже говорят драйверу, что и как врубать.


> наиболее большой вероятностью перехвата всех запускаемых
> приложений ( именно перхвата )


А COM-сервера / java апплеты, ты считаешь за приложения ?

Давай лучше согласимся, что ты немного фигней страдаешь. Информацию на второстепенных форумах начерпал, и думаешь, что программу напишешь за каникулы ?  Такой софт можно годами писать.


 
dreamse   (2008-06-24 11:55) [2]

> tesseract ©   (24.06.08 11:46) [1]

> А COM-сервера / java апплеты, ты считаешь за приложения ?

Надо бы но пока не считаю, пока основа это *.com и *.exe

> Давай лучше согласимся, что ты немного фигней страдаешь. Информацию на второстепенных форумах начерпал, и думаешь, что программу напишешь за каникулы ?  Такой софт можно годами писать.

3 вариант который я привел уже реализован, и работает прекрастно на XP вот с вистой проблемы и я решил переделать для более стабильной работы.

p.s на счет каникул ты слегка загнул :) на 3 года ты всего старше.
p.p.s что же касаеться тымы : фигня - не фигня ... то есть такое понятие как : Начальство сказало НАДО вот и пишу :)

еще 5 вариант. Перехват API функций Windows на создание процесса.
Пока его прорабатываю, но к сожалению информации мало


 
tesseract ©   (2008-06-24 11:57) [3]


> Перехват API функций Windows на создание процесса.


А свой эксплорер написать ? В принципе всё административно решаеться, без допсофта.


 
dreamse   (2008-06-24 12:08) [4]

> tesseract ©   (24.06.08 11:57) [3]

> А свой эксплорер написать ?

Уже написан и проводник и аналог IE и куча всего другого.

Но тут вопрос не стоит так что нужно или не нужно ... тут вопрос : НАДО! по этому и пишу. И прошу мне в этом помочь а не рассуждать делать ли мне это или нет.


 
dreamse   (2008-06-24 13:37) [5]

Пока откопал только что нужно копать в сторону

ZwCreateProcess и PsSetCreateProcessNotifyRoutine

Информации как обычно мало :( Может кто видел уже решение ?


 
dreamse   (2008-06-24 14:42) [6]

Нашел статью которая описывает создание драйвера который перехватывает создание процессов в системе http://nickolay13.narod.ru/Assembler/secrets_Win32/assem31.html

Минус в том что нет примеров на Delphi для взаимодействия с этим драйвером. Как можно с ним взаимодействовать и есть ли возможность написать обработчики к этому драйверу?

p.s сам скомпилированный драйвер есть в архиве к статье


 
tesseract ©   (2008-06-24 15:21) [7]


> Минус в том что нет примеров на Delphi для взаимодействия
> с этим драйвером.


В принципе там описание самого DEVICEIO для драйвера есть. И даже по полочкам разложен текст.

перевод

invoke CreateThread, NULL, 0, offset WaitForProcessData, g_hEvent, 0, esp

Res:=CreateThread(Nil,0,offset,WaitForProcessData,g_hEvent,0);

И тд.

Только отлаживать следует на VMWARE - падать системка будет часто, а краш дамп изучать довольно неудобная задача для делфиста.


 
dreamse   (2008-06-25 13:29) [8]

Сделал Hook. Но он ловит только приложения с окнами: HSHELL_WINDOWCREATED

Подскажите через что можно сделат отлов запуска


(ПроцедураОболочки)

Подключаемая процедура ShellProc - определяемая программой или определенная библиотекой функция повторного вызова, которую использует оболочка прикладной программы, чтобы принимать полезные уведомления от системы.

Синтаксис
LRESULT CALLBACK ShellProc
(
int nCode,  // код hook-точки
WPARAM wParam, // информация, определяемая событием
LPARAM lParam // информация, определяемая событием
);

Параметры
nCode
Определяет код hook-точки. Этот параметр может быть одним из следующих значений:
HSHELL_ACTIVATESHELLWINDOW - Оболочка должна активизировать свое главное окно.
HSHELL_GETMINRECT - Только для Windows 95: окно свертывается или развертывается, а система нуждается в координатах свернутого (минимизированного) прямоугольника окна. Параметр wParam содержит дескриптор окна, а параметр lParam содержит адрес структуры RECT, которая принимает координаты.
HSHELL_LANGUAGE - Только для Windows 95: язык клавиатуры был изменен, или была загружена новая раскладка символов на клавиатуре.
HSHELL_REDRAW - Только для Windows 95: заголовок окна в панели задач был перерисован. Параметр wParam содержит дескриптор окна.
HSHELL_TASKMAN - Только для Windows 95: пользователь выбрал список задач. Параметр wParam не определен и должен игнорироваться. Оболочка прикладной программы, которая предоставляет список задач, должна возвратить значение ИСТИНА (TRUE), чтобы воспрепятствовать Windows запустить список его задач.
HSHELL_WINDOWACTIVATED - Только для Windows 95: активизация была заменена в другом, не имеющем владельца, окне верхнего уровня. Параметр wParam содержит дескриптор окна.
HSHELL_WINDOWCREATED - Было создано не имеющее владельца окно верхнего уровня. Окно существует только тогда, когда система вызывает функцию ShellProc.
HSHELL_WINDOWDESTROYED - Не имеющее владельца окно верхнего уровня собирается быть разрушенным. Окно все еще существует когда система вызывает функцию ShellProc.


 
dreamse   (2008-06-25 13:59) [9]

Все разобрался, всем спасибо.

p.s оказалось что на 2 и 3 Delphi можно слинковать sys файл. Так что решу этот вопрос написанием драйвера на Delphi 2


 
Amoeba ©   (2008-06-25 15:29) [10]


> оказалось что на 2 и 3 Delphi можно слинковать sys файл

Линковщик от MS имеется?


 
Сергей_77   (2008-06-26 10:50) [11]


> 3) Внедрение DLL во все процессы системы

а как это было реализовано?


 
Сергей М. ©   (2008-06-26 11:06) [12]


> dreamse   (24.06.08 13:37) [5]
> нужно копать в сторону .. PsSetCreateProcessNotifyRoutine


http://www.rsdn.ru/Forum/message/11341.flat.aspx


 
dreamse   (2008-06-27 06:33) [13]

> Сергей_77   (26.06.08 10:50) [11]

см. Перехват WinApi на Delphi

так же бесплатный компонент madCollection (рекомендую) там есть и функция внедрения

> Amoeba ©   (25.06.08 15:29) [10]

Неа


 
Константин   (2008-12-26 20:55) [14]

Dreamse, интересные варианты вы рассматриваите.
Понравилась идея с запуском сервиса.
На чём вы остановились и можно ли пощупать результат?
У нас стояла схожая задача: не допустить запуск пользователями в локальной офисной сети запрещённых програм. Причём, список этих программ динамически менялся.
Пришла идея проверять заголовок окна на содержание запретных слов: "keygen, скачать, мр3, photoshop и т.д.", т.е. всё, что может отвлечь сотрудника от работы.
Реализовали на скриптовом языке AutoIT.
Нагрузка минимальная. Проверка идёт не по таймеру, а по событию создания любого окна. Молча висит и ждёт.
Могу безвозмездно выслать исходники и комментарии.


 
Eraser ©   (2008-12-26 22:11) [15]

http://code.progler.ru/view/376


 
DVM ©   (2008-12-26 22:37) [16]


> Eraser ©

В висте наверное не заработает. Там обычному юзеру WMI заказан.


 
Eraser ©   (2008-12-26 22:52) [17]

> [16] DVM ©   (26.12.08 22:37)

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


 
Leonid Troyanovsky ©   (2008-12-27 11:22) [18]


> dreamse   (27.06.08 06:33) [13]

> см. Перехват WinApi на Delphi
>
> так же бесплатный компонент madCollection (рекомендую) там
> есть и функция внедрения

- Все, пропал дом. [ФФ]

> dreamse   (24.06.08 11:37)

> Занимаюсь разработкой приложения для безопасности.
> Не буду вдаваться в подробности

Зря вы, господа, калош не снимаете. [ФФ]

--
Regards, LVT.


 
Starik   (2008-12-28 14:28) [19]

dreamse, воспользуйтесь оснасткой актив-директори. там есть все. запрет на запуск любой софтины, индивидуальные настройки каждого пользователя (убираются любые по желанию возможности - изменения настроек системы, установка/удаление софта, принтеров, разграничение по сетевым доступам - кому куда можно/нельзя и куча всего другого). Даже подменить рабочий стол пользователя сетевой папкой - и то можно. Автоматическая установка базового набора софта (который согласован с руководятелами)  на все машины, подключаемые к сети... И все это отработано давно, еще со времен 2000 винды, и намного надежней, чем самостоятельно написанная за каникулы программулька.


 
Максим   (2009-03-28 20:45) [20]

dreamse, вы бы не могли поподробнее описать ваш первый способ перехвата,прописать в реестре %1 чтобы любое приложение запущенное в Windows запускалось через мою программу.Конкретно меня интересует какая именно ветка отвечает за это. Спасибо.


 
dreamse   (2009-03-30 21:03) [21]

> Константин   (26.12.08 20:55) [14]

Пока остановился на внедрении DLL
Со временем думаю закажем драйвер у сторонних разработчиков. В данный момент не можем выделить денег на это ( если заказывать то сумма разработки драйвера колеблется в пределах 2k)

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


 
Eraser ©   (2009-03-30 21:12) [22]

> [21] dreamse   (30.03.09 21:03)


> Пока остановился на внедрении DLL

т.е. перехват API-функций через внедрение свой ДЛЛ?

> если заказывать то сумма разработки драйвера колеблется
> в пределах 2k

+ около $500K в год за сертификат.
извиняюсь, а чем вариант с WMI не подходит?


 
Smile   (2009-03-30 21:16) [23]

> dreamse   (24.06.08 11:37)
> Перехват запуска приложения [D7, Win2k, WinXP]

А что мешает поискать уже готовые приложения и решения?
:)


 
Игорь Шевченко ©   (2009-03-30 22:54) [24]

"За это время человек мог изобрести самодвижущееся пресс-папье или окончить архитектурный институт" (с) Аркадий Бухов

Про то, что набор разрешенных для запуска приложений можно определить политиками безопасности Windows, техническая мысль не дошла ?


 
Германн ©   (2009-03-31 00:53) [25]


> Игорь Шевченко ©   (30.03.09 22:54) [24]

Давно уже вижу подобные вопросы. И давно уже вижу твои ответы-вопросы. Но практически не вижу "разумных" ответов на последние.
То ли людям лень осваивать основы MS Windows, то ли людям нужно что-то либо иное, либо своё. Но причины этого "желания" я не улавливаю.



Страницы: 1 вся ветка

Текущий архив: 2010.02.21;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.019 c
15-1260281530
KilkennyCat
2009-12-08 17:12
2010.02.21
Логин и пароль. Какие могут быть подводные камни?


15-1260792929
@!!ex
2009-12-14 15:15
2010.02.21
Помогите собрать "велосипед"(компилятор)


15-1255067207
MBo
2009-10-09 09:46
2010.02.21
Пятничные задачки. Вася Пупкин и компания...


3-1235049122
Ragazor
2009-02-19 16:12
2010.02.21
Вопросы оптимальности и производительности


15-1260867893
Делфиец
2009-12-15 12:04
2010.02.21
Есть ли в JEDI функции связанные с криптованием