Учетные записи безопасности SharePoint - Учетные записи безопасности и изоляция процессов

ОГЛАВЛЕНИЕ

Учетные записи безопасности и изоляция процессов

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

Учетные данные записей безопасности необходимо адекватно защитить, в ином случае усилия по конфигурации бессмысленны. Простым способом доставления этих конфиденциальных учетных данных прямо в руки злоумышленника является выдача учетным записям пула приложений доступа к метабазе IIS, требуемого службой управления списками рассылки – частью веб-службы интеграции электронной почты. Если у учетной записи пула приложений есть доступ к метабазе, взломщик может отменить олицетворение и затем получить все учетные записи и пароли в прямом тексте, как показано на рис. 5 и 5a. Вся ферма серверов потеряна, поскольку злоумышленник теперь может обойти изоляцию процессов путем выполнения вредоносного кода от имени любой их этих учетных записей безопасности и установки подключений SQL Server ко всем базам данных содержимого.

 

Рис. 5. Извлечение информации об учетной записи безопасности из метабазы IIS

 Рис. 5а. Код для извлечения информации об учетной записи безопасности из метабазы IIS

private string GetMetabaseAppPoolIDs() 
{        
    WindowsImpersonationContext impCtx =
    WindowsIdentity.Impersonate(IntPtr.Zero);
    string retVal = string.Empty;
    try
    {
        string metabasePath = "IIS://localhost/w3svc/AppPools";
        DirectoryEntry appPools = new DirectoryEntry(metabasePath);
        foreach (DirectoryEntry appPool in appPools.Children)
        {
            switch (int.Parse(appPool.Properties["AppPoolIdentityType"].Value.ToString()))
            {
                case 0: // Local System
                    retVal += "<br>" + appPool.Name + " (Local System)";
                    break;
                case 1: // Local Service
                    retVal += "<br>" + appPool.Name + " (Local Service)";
                    break;
                case 2: // Network Service
                    retVal += "<br>" + appPool.Name + " (Network Service)";
                    break;
                case 3: // Custom
                    retVal += "<br>" + appPool.Name + " (" + appPool.Properties["WAMUserName"].Value +
                        " [Pwd: " + appPool.Properties["WAMUserPass"].Value + "])";
                    break;
            }
        }
    }
    catch (Exception ee)
    {
        retVal = "Metabase " + ee.Message;
    }
    impCtx.Undo();
}

Тем, кто заинтересован в решении службы управления списками рассылки, не требующем доступ к метабазе, стоит заглянуть в мою статью за сентябрь 2008 года, «Интеграция каталогов SharePoint».