Есть ли способ определить командную строку Windows независимо от имени файла или расположения? - PullRequest
0 голосов
/ 27 октября 2011

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

Я уже написал код, который видит, когда процесс запускается, и проверяет его имя, используя QueryFullProcessImageName.Проблема в том, что если бы кто-то переименовал командную строку, я бы больше не смог обнаружить ее по имени процесса.В настоящий момент я обнаруживаю командную строку как «\ cmd.exe», но, очевидно, это не очень безопасно.

Ниже приведено то, что я имею для кода.Я удалил все проверки ошибок для краткости.Пожалуйста, дайте мне знать, если вам нужно больше ясности.Спасибо!

TCHAR exeName[MAX_PATH];
DWORD exeNameSize = MAX_PATH;

//the pid comes into the function as a parameter
HANDLE handle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, 0, pid);

if (handle) 
{
    if (QueryFullProcessImageName(handle, 0, exeName, &exeNameSize))
    {
        tstring name = exeName;

        /*
          badProcs would contain the path identifiers such as
          "\\cmd.exe" or "\\regedit.exe".  This detection is
          what I want to make better.
        */

        for(int i=0; i < badProcs.size(); i++)
        {
            if(tstring::npos != name.find(badProcs.at(i)))
            {
                if(TerminateProcess(handle,0))
                    OutputDebugString(_T("Process should be dead\n\n"));
            }
        }
    }
    CloseHandle(handle);
}

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

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

Ответы [ 2 ]

10 голосов
/ 27 октября 2011

Не. У Windows есть внутренние средства для этого. Ознакомьтесь с редактором политик и / или контролем доступа к файлам.

Если вы являетесь администратором, а «пользователь» - нет, политика (или простой ACL) сделает эту работу; если «пользователь» также является администратором, он сможет довольно легко победить вашу программу.

1 голос
/ 08 марта 2014

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

Редактор реестра и командная строка не могут быть запущены, если установлены ключи реестра:

HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\DisableRegistryTools

или для всего компьютера

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\System\DisableRegistryTools

Установка этого значения в 1 отключит regedit, а установка в 0 включит его.

HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\DisableCMD

(здесь также работает локальный машинный вариант).* Установка этого значения в 1 отключит командную строку и командных файлов, установка этого значения в 2 отключит только командную строку, а установка в 0 включит ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...