| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Маскировка приложения и драйвера |
| Автор: Goganchic 8.10.2008, 16:37 |
| Всем привет! Я сейчас занимаюсь разработкой одного приложения, работающего и в пользовательском пространстве и в пространстве ядра. Эта штука, можно сказать, относится к корпоративной безопасности и простые пользователи не должны знать о ее существовании, т.е. админ пришел, настроил пользователю систему, пользователь сел и если сильно не копает - то ничего и не знает о том, что на его компьютере есть посторонняя, незнакомая ему программа. Следовательно, встает вопрос о маскировке. Хотелось бы узнать, какие способы маскировки существуют. Поясню, меня интересует не только реализация, но и вообще, принципы маскировки, средства можно использовать практически любые (ибо драйвер). Итак, я думаю что можно сделать следующее для маскировки приложения:
P.s. программа абсолютно легальна и не является ни вирусом, ни руткитом, ни трояном (в смысле, она будет, так сказать, легальным трояном, т.е. администратор будет знать, что эта программа есть) |
| Автор: azesmcar 8.10.2008, 16:50 |
| Скрыть не очень просто...можешь конечно закрыть OpenProcess, но виден он все равно буден..Можно перехватить EnumProcess, но тогда придеться также перехватыватх и CreateToolHelp32Snapshot...геморроя много, по моему проще сделать свое дело под чужим процессом..к примеру WinLogon, можно заменить msgina.dll, можно написать простую библиотеку которая будет подгружаться ко всем/нужным тебе процесам (AppInit_DLLs). |
| Автор: Goganchic 8.10.2008, 16:53 |
| Сейчас уже придумал еще одну проблему: программа время от времени будет лезть в сеть, так что нужно ее будет вытирать еще из списка соединений. |
| Автор: azesmcar 8.10.2008, 17:09 |
| ну я же говорю - внедри DLL в какой нибудь системный процесс и дело с концом... Добавлено через 2 минуты и 10 секунд будет ощущение что это к примеру winlogon в сеть лезет..можно еще создать удаленный поток на одном из системных процессов и в нем реализовать все что нужно. |
| Автор: Goganchic 8.10.2008, 17:21 |
| azesmcar, ок, попробую Если еще есть идеи - я всегда готов выслушать |
| Автор: azesmcar 10.10.2008, 06:53 |
| Riply когда то во времена своей бурной молодости я пытался заняться скрытием процессов... потом понял что геморроя не оберешся и просто перекрыл OpenProcess чтобы программу не убили злые пользователи. Но с ДЛЛ все обстоит совсем иначе..ни тебе процессов, ни перехватов апи. собственно у тебя нет процесса чтобы его можно было увидеть. |
| Автор: Riply 10.10.2008, 07:46 | ||
Почти полностью согласна. Но, если бы мне поставили такую задачу, как спрятаться, я бы смотрела в сторону "распределенных нитей". Т.е. мы существуем не в виде процесса или DLL, а в виде группы нитей распределенных в разных процессах |
| Автор: azesmcar 10.10.2008, 08:01 | ||
ну я и предложил, или мы говорим о разном? |
| Автор: Riply 10.10.2008, 08:57 |
Угу. Прсто, мне кажется что "нить" более верный темин. Во-первых Thread, так преводится. Во-вторых в потоках можно запутаться - слишком много их развелось Тут тебе и семейство разных TStream`ов и потоки у FS-объектов. |
| Автор: ama_kid 15.10.2008, 23:14 | ||||
ну, блин, ты расписала Все, оно, конечно, правильно, но человек же сказал, что
1) спрятать файл - перехват ZwQueryDirectoryFile, ZwOpenFile и может еще пару-тройку функций... 2) спрятать процесс - перехват ZwQuerySystemInformation... Все, спрятанный таким образом файл-процесс не будет виден стандартными приемами типа проводника\фара\тотал коммандера\диспетчера задач и даже ProcessExplorer'а от SysInternals... Естесственно, от ProcessHunter'а и прочих руткитов только эти ухищрения не помогут, но при правильной настройке административных прав системы руткиты тоже могут пообломать зубы... Насчет скрытия сетевой активности, к сожалению, не могу ничего сказать, потому что не доводилось интересоваться этой темой, но не думаю, что принцип скрытия там слишком отличается, главное - найти функцию, которая информирует о сетевом соединении и которую можно будет перехватить... P.S. В общем, я всего лишь хотел сказать, что надо правильно соотнести затраты\цели и решить, стоит ли игра свеч? При борьбе с "типовым пользователем" описанных мной приемов бывает достаточно... |
| Автор: shara 18.10.2008, 00:59 | ||
люди, меня интересует перехват создания/чтения/записи файлов в винде (в идеале перехватить момент создание фала чужим приложением, читать информацию которую оно хочет записать в файл а записывать другие, свои данные), я пока читал сей топ увидел про упоминания интересующих меня функций
подскажите, что читать чтобы понимать о чем вы тут толкуете... как это делается и возможно ли вообще такое? |
| Автор: Riply 18.10.2008, 06:12 | ||
Мое IMHO, что лучше всего начинать изучать тему перехвата с Рихтера. Он там все по полочкам раскладывает и примеры есть Ну а когда инструмент будет освоен, то для того чтобы лучше понимать что, где и когда надо перехватывать (а может и не надо почитать David A. Solomon Mark E. Russinovich "Inside Microsoft for Windows 2000" |
| Автор: shara 19.10.2008, 21:47 |
| Riply, спасибо за совет |
| Автор: Goganchic 20.10.2008, 12:48 |
| shara, штука эта называется filesystem filter driver Добавлено через 40 секунд Кстати, я сделал то, что хотел: просто в фильтр-драйвере добавил отказ на некоторые операции для некоторых процессов и усё |
| Автор: shara 9.9.2009, 21:27 | ||
- о как ты был прав. а я по началу полез в сторону перехвата API. жизнь все равно заставила писать фильтр-драйвер
а на какие именно если не корпоративный секрет? |
| Автор: DrHex 10.9.2009, 12:56 |
| Первый способ. 1)Перезват NtQuerySystemInformation() - Список процессов(так как практически все функции используют именно это функции исключения когда функция реализуется ручками например SoftIce ) - Kernel Memory - перехват запроса на получения информации о память ядра с целью скрыть свой драйвер 2) Перехват всех возможных получения handle, connection and etc. 3) Перехват KeStackAttach, ReadProcessMemory, WriteProcessMemory.(для того что бы наши хуки не кто не снял, но снимут же) Второй способ. 1)Внедрится в доверенный процесс. Такой winlogon, system, svchoost. Лучше всего поступить по методу вируса. Третий способ. 1)Inject library(не достаток заключается к том что челок просто просканирует процессы на .dll и удалит не нужную) Лучше всего это модификация доверенного exe файла. Хотя без перехвата нативного апи не обойтись, хотя бы не отображать netstat, и потоки. P.S. Перехват апи функций это помогает только если на компьютере нет никаких системных утилит. К примеру Wireless у него кажется сетевой драйвер, так что он реально и передается все данный по сети и знает какие процессы и с кем соединение. |
| Автор: shara 12.9.2009, 16:44 |
| DrHex, это все очень похоже на игру в кошки мышки, ты прячешся стараясь подтянуть все хвосты а кто-то наоборот их вытаскивает. общую идею понять не сложно. дальше лишь дело техники.. а как насчет прятанья драйвера? или скажем не прятанья, а его защиты - к примеру, защита от принудительной выгрузки\остановки или перемещения куда-нить подальше. тоже в самом драйвере перехватывать соотв. системные вызововы? тогда, если я правильно все понимаю, наш драйвер может быть выгружен только другим "драйвером" который был загружен раньше? и как следствие вся проблема защиты сводится к тому чтобы пораньше запуститься... прошу меня поправить если ошибаюсь |