Как выдать себя за другого пользователя домена, если у меня есть учетная запись администратора этого домена AD?

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

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

Итак, как заставить токен доступа пользователя домена выдавать себя за другое лицо, если у меня уже есть учетная запись администратора домена или есть еще какой-либо способ?

Я разрабатываю его на C ++ и ADSI. Вот войдите в систему и получите методы описания безопасности NTFS:

BOOL ADDirectorySearch :: logOnByUserPassword (CString strDomainName, CString strUserName, CString strPassword) {

CString strFullUserName = strDomainName + _T("\\") + strUserName;
HANDLE hToken;
BOOL bResult;
bResult = LogonUser(strFullUserName, strDomainName, strPassword, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, &hToken);
if (bResult == FALSE)
{
    MyMessageBox_Error(_T("logOnByUserPassword Error."), _T("Error"));
    return FALSE;
}
else
{
    bResult = ImpersonateLoggedOnUser(hToken);
    if (bResult == FALSE)
    {
        MyMessageBox_Error(_T("logOnByUserPassword Error."), _T("Error"));
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

}

PSECURITY_DESCRIPTOR ADDirectorySearch :: getNTFSSecDescriptor2 (CString strFileName, CString strServerName, CString strServerIP) {

//CString strServerNameWithSlash = _T("\\\\") + strServerName;//"\\\\veotax3";
CString strFilePathName = _T("\\\\") + strServerName + _T("\\") + strFileName;//"\\\\veotax3\\nrdc1001";
CString strFilePathName2 = _T("\\\\") + strServerIP + _T("\\") + strFileName;//"\\\\192.168.1.7\\nrdc1001";
_bstr_t bstrFilePathName = strFilePathName;

BOOL bSuccess = FALSE;
PSECURITY_DESCRIPTOR pSecDescriptorBuf = NULL;
DWORD dwSizeNeeded = 0;label2:;
   bSuccess = GetNamedSecurityInfoW(bstrFilePathName, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &pSecDescriptorBuf);
   //bSuccess = GetFileSecurityW(bstrFilePathName, DACL_SECURITY_INFORMATION, NULL, 0, &dwSizeNeeded);
   if (ERROR_SUCCESS != bSuccess)
   {
       if (strFilePathName != strFilePathName2)
       {
           strFilePathName = strFilePathName2;
           bstrFilePathName = strFilePathName2;
           goto label2;
       }
       else
       {
           MyMessageBox_Error(_T("getNTFSSecDescriptor2 Error."), _T("Error"));
           return NULL;
       }
   }
   else
   {
        return pSecDescriptorBuf;
   }

}


person Yang Luo    schedule 08.06.2012    source источник


Ответы (3)


Прочитал еще один вопрос от вас. Думаю, я понимаю, что вы пытаетесь сделать. Для достижения своей цели вам необходим токен доступа с уровень олицетворения« Олицетворять »или« Делегировать ». Получить его можно разными способами. Предоставление пароля - самый простой способ. Другой подход - настроить машину для выполнения перехода по протоколу.

Мое личное предложение - не выдавать себя за другое лицо. Просто убедитесь, что у всех общих папок есть права на чтение у администратора домена. Как я показал в другом вопросе, это вовсе не нарушение безопасности. Администратор домена всегда может иметь возможность прочитать папку, если захочет.

Кроме того, fyi, есть некоторые существующие инструменты, доступные на SysInternals, делающие аналогичные вещи.

Проверьте AccessChk.exe и AccessEnum.exe из SysInternals

Они оба страдают от той же проблемы с разрешением, что и вы сейчас.

person Harvey Kwok    schedule 23.06.2012
comment
Спасибо за впечатляющий ответ. Это программное обеспечение предназначено для нужд клиентов, а не для самостоятельного использования. Мой товарищ по команде также сказал, что разрешение на чтение для всех часто удаляется, когда кто-то пытается чем-то поделиться. Поэтому я не могу гарантировать доступ на чтение для администратора домена. но вы предлагаете не использовать два предоставленных вами способа: получение владельца и выдача себя за другое лицо. К вашему сведению, я также нашел метод запроса WMI для проверки разрешений общих ресурсов, но этот способ полагается на некоторые службы и настройки брандмауэра на удаленном компьютере. Итак, по крайней мере, три метода и какой самый надежный и эффективный способ сделать это? - person Yang Luo; 24.06.2012
comment
Похоже, вы уже нашли решение. После того, как вы упомянули WMI, я немного поищу и узнаю, что общая папка отличается от того, что я описал. Я удалю свой ответ в другом посте. Я думаю, вы идете в правильном направлении. Я только что обнаружил, что вы, похоже, делаете что-то похожее на управление общим доступом и хранилищем но способ, которым вы представляете пользователю, похож на отчет. - person Harvey Kwok; 24.06.2012
comment
Я не собираюсь использовать олицетворение, потому что считаю, что вводить пароль - не лучший способ. Во-первых, вы действительно не знаете, за кого вам следует выдавать себя. Во-вторых, вам необходимо надежно хранить пароли многих пользователей. Выполняя переход протокола, избегайте сохранения пароля. Однако для этого нужно настроить выделенный компьютер, который почти такой же мощный, как контроллер домена. Вы же не хотите, чтобы ваш клиент устанавливал машину только для этого. - person Harvey Kwok; 24.06.2012

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

person Laky    schedule 30.01.2014

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

Все дело в «подотчетности» - учетные записи предназначены не только для того, чтобы разрешать или запрещать доступ, но также для записи и аудита того, кто что сделал, и, таким образом, несет ответственность. Существуют юридические требования, которые могут требовать идентификации и контроля всех, кто имеет доступ к какой-либо конфиденциальной информации, а также ограничивать количество людей, которые могут получить к ним доступ. В Windows есть средства для аудита действий пользователей, включая доступ к файлам.

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

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

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

person LDS    schedule 07.11.2014