Команда RPC для запуска установки программного обеспечения - PullRequest
1 голос
/ 09 апреля 2010

Недавно я работал с продуктом от Symantech, который называется Norton EndPoint protection. Он состоит из приложения консоли сервера и приложения развертывания, и я хотел бы включить их метод развертывания в будущую версию одного из моих продуктов.

Приложение развертывания позволяет вам выбирать рабочие станции компьютера, работающие под управлением Windows 2000, WinXP или Win7. Выбор рабочих станций предоставляется либо из AD (Active Directory), либо из домена NT (поиск WINS / DNS NetBIOS). Из списка можно щелкнуть и выбрать рабочие станции для развертывания программного обеспечения конечной точки, являющегося пакетом Symantech для защиты от вирусов и шпионского ПО.

Затем, после выбора того, какие рабочие станции должны получать пакет, программное обеспечение копирует программу setup.exe на каждую рабочую станцию ​​(предположительно через административный общий ресурс \ pcname \ c $) и затем выдает команду рабочей станции на выполнение setup.exe, что приводит к рабочая станция, устанавливающая программное обеспечение.

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

Я думаю, что они используют общий ресурс администратора для копирования программного обеспечения на выбранные рабочие станции, а затем отправляют вызов RPC, чтобы дать команду рабочей станции выполнить установку.

Что интересно, рабочие станции делают это без того, чтобы ни один из зарегистрированных пользователей не знал, что происходит, до самого конца, где необходима перезагрузка. В этот момент у пользователя появляется всплывающее окно с просьбой перезагрузиться сейчас или позже и т. Д. Я догадываюсь, что программа setup.exe выдает это сообщение.

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

Мой язык программирования - C / C ++

Любые мысли / предложения приветствуются.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2010

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

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

Вот так pstools выполняет выполнение произвольного кода:

Копирует исполняемый файл системной службы в \\ server \ admin $ (либо вы должны иметь локального администратора на удаленном компьютере, либо предоставить учетные данные). После копирования файла он использует API-интерфейс Service Control Manager, чтобы сделать скопированный файл системной службой и запустить его.

Очевидно, что эта системная служба теперь может делать все, что хочет, включая привязку к именованному каналу RPC. В нашем случае системная служба установит MSI. Чтобы получить подтверждение успешной установки, вы можете либо удаленно опросить раздел реестра, либо функцию rpc. В любом случае, вы должны удалить системную службу, когда вы закончите, и удалить файл (psexec не делает этого, я думаю, они не хотят, чтобы он использовался тайно, и в этом случае оставление службы позади, по крайней мере, даст у администратора есть реальный шанс узнать, что кто-то скомпрометировал их компьютер.) Этот метод не требует предварительной настройки удаленной машины, просто у вас есть права администратора и что общий доступ к файлам и rpc открыты в брандмауэре.

Я видел демоверсии в C # с использованием WMI, но мне не нравятся эти решения. Обмен файлами и RPC, скорее всего, будут открыты в брандмауэрах. Если это не так, общий доступ к файлам и удаленное управление MMC удаленного сервера не будут работать. WMI может быть заблокирован и по-прежнему оставлять эти функции.

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

Простое решение часто бывает неуловимым. Как всегда, моя шляпа снята людям SysInternals. Они - настоящие хакеры в позитивном старом школьном значении этого слова!

0 голосов
/ 09 апреля 2010

Этот тип функциональности также доступен с продуктами LANDesk и Altiris. Вам нужен демонизированный прослушиватель на стороне клиента, который будет прослушивать инструкции / соединения с сервера. После установления соединения может произойти любое количество вещей: вы можете передавать файлы, запускать сценарии установки и т. Д., Как правило, прозрачно для всех пользователей в этом окне.

Я использовал Twisted Framework (http://twistedmatrix.com), чтобы сделать это с небольшой горсткой машин Linux. Это Python и Linux, а не Windows, но предпосылка та же: клиент-слушатель принимает инструкции от сервер и выполняет их. Очень просто.

Эту функцию также можно выполнить с помощью сценариев VB / Powershell в домене под управлением Windows.

...