Домен – это основная административная единица в сетевой инфраструктуре предприятия, в которую входят все сетевые объекты, такие как пользователи, компьютеры, принтеры, общие ресурсы и т.д. Совокупность (иерархия) доменов называется лесом. У каждой компании может быть внешний и внутренний домен. DNS является базовым инфраструктурным сервисом, без которого невозможно себе представить работу любой корпоративной сети.
Интернет — это бесчисленное количество физических устройств (серверов, компьютеров, планшетов и т.д.), связанных между собой в сеть. Любой сайт в Интернете по факту находится на физическом устройстве. Каждое устройство имеет свой уникальный номер — IP-адрес вида 123.123.123.123. Чтобы попасть на сайт, нужно знать IP-адрес устройства, на котором расположен этот сайт. А теперь представьте, сколько сайтов в день вы посещаете и сколько цифр вам пришлось бы запомнить. Конечно, это нереально. Поэтому для удобства работы в Интернете в 80-х годах была создана система доменных имен — DNS (Domain Name System). Смысл её в том, что каждому цифровому IP-адресу присваивается понятное буквенное имя (домен). Например, IP-адресу сервера 193.218.139.99 соответствует домен sfu-kras.ru. Когда вы вводите в браузере доменное имя, сервера DNS автоматически преобразуют его в IP-адрес. Домен за доли секунды переводится в IP DNS-системой и вы попадаете на нужный сайт.
Служба доменных имён работает благодаря DNS-cерверам. Именно эти жизненно важные «программы» хранят таблицы соответствий вида «имя домена» — «IP-адрес». Кроме того, DNS-серверы служат для хранения ресурсных записей доменов. В Интернете огромное количество DNS-серверов и каждый выполняет свою функцию в общей системе. Служба Domain Name System необходима для того, чтобы находить свои любимые сайты, не запоминая цифры.
DNS переводит имя домена в IP-адрес:
Основой DNS-системы являются корневые серверы. Их всего 13. Они принадлежат разным операторам и находятся в Северной Америке. Чтобы повысить устойчивость системы, были созданы копии основных серверов в разных странах. Таким образом, корневых серверов стало 123. Каждой копии присваивается тот же IP DNS-сервера, что и у главного устройства. DNS-серверы расположены согласно интенсивности использования интернет-инфраструктуры. Больше всего серверов всё равно находится в Северной Америке, но копии сервера есть и в России, Европе, Австралии, Китае, Бразилии, ОАЭ и других странах, включая Исландию. В России реплики корневых серверов DNS находятся в Москве, Санкт-Петербурге, Новосибирске, Ростове-на-Дону, Екатеринбурге.
Microsoft Active Directory стала стандартом систем единого каталога предприятия. Домен на базе Active Directory внедрён практически во всех компаниях мира, и на этом рынке у Microsoft практически не осталось конкурентов, доля того же Novell Directory Service (NDS) пренебрежимо мала, да и оставшиеся компании постепенно мигрируют на Active Directory. Active Directory (Служба каталогов) представляет собой распределённую базу данных, которая содержит все объекты домена. Доменная среда Active Directory является единой точкой аутентификации и авторизации пользователей и приложений в масштабах предприятия. Именно с организации домена и развёртывания Active Directory начинается построение ИТ-инфраструктуры предприятия. База данных Active Directory хранится на выделенных серверах – контроллерах домена.
Развёртывание службы каталогов Active Directory даёт следующие преимущества:
Групповая политика - это способ настройки параметров компьютера и пользователя для устройств, которые присоединены к доменным службам Active Directory (AD), а также к учетным записям локальных пользователей. Она контролирует широкий спектр параметров и может использоваться для принудительного применения и изменения настроек по умолчанию для соответствующих пользователей. Локальная групповая политика - это базовая версия групповой политики для компьютеров, не входящих в домен. Параметры локальной групповой политики хранятся в следующих папках:
C:\Windows\System32\GroupPolicy C:\Windows\System32\GroupPolicyUsers.
Когда в Windows вам необходимо открыть редактор локальной групповой политики, для этого вы можете использовать командную строку, команду выполнить (команда gpedit.msc), поиск на панели задач, меню Пуск или с помощью консоли управления (MMC).
Azure Active Directory (Azure AD) - это корпоративное облачное решение Microsoft для управления идентификацией и доступом (IAM). Azure AD является основой системы Office 365 и может синхронизироваться с локальной службой Active Directory и обеспечивать аутентификацию для других облачных систем через OAuth.
В 2020 Microsoft увидела резкое увеличение пользователей Azure. Хотя неясно, сколько из этих пользователей являются новичками в Azure AD, но мы можем предположить, что пандемия 2020 года дала толчок к внедрению Azure AD для удовлетворения потребностей удаленных пользователей при дистнционной работе. И Azure AD, и Windows AD созданы Microsoft, и обе являются системами IAM, но на этом сравнения в значительной степени заканчиваются. Это принципиально разные системы, существующие во взаимосвязанной корпоративной среде.
Azure Active Directory
Windows Active Directory
Azure AD Connect - это решение Microsoft для включения гибридных развертываний Windows AD и Azure AD. Azure AD Connect синхронизирует данные между локальными контроллерами домена и облаком. Azure AD Connect позволяет синхронизировать учетные записи пользователей из локальной системы с клиентом Azure. Он также обеспечивает синхронизацию хэшей паролей, сквозную аутентификацию, федерацию и мониторинг работоспособности. Эти функции позволяют пользователям иметь один и тот же идентификатор пользователя и пароль как локально, так и в облаке, что также упрощает управление гибридной средой.
Пользователи в Azure AD могут входить как внутри, так и вне Azure AD. Azure AD может содержать удостоверения для пользователей внутри вашей организации и пользователей за пределами вашей организации, у которых есть учетная запись Microsoft. Это означает, что вы можете вводить людей за пределами вашей организации в свой клиент и предоставлять им определенные разрешения, как если бы они были частью вашей организации. Если все сделано правильно, это обеспечивает дополнительный уровень безопасности данных организации.
Любое существенное преобразование в облачную инфраструктуру обязательно привлечет злоумышленников, которые хотят проникнуть на новые рубежи.
Атаки грубой силой на Azure AD. Злоумышленники любят использовать обширные коллекции имен пользователей и паролей из дампов утечки данных, чтобы попытаться взломать учетные записи Azure AD - метод, известный как заполнение учетных данных. Azure AD доступен в Интернете, так что это относительно простая цель. Хорошая политика паролей и многофакторная аутентификация, а также поведенческий мониторинг активности входа в систему и геопереключения могут предотвратить большинство атак методом грубой силы.
Пример программы для подбора паролей грубой силой на языке C#
using System;
using System.Linq;
namespace ConsoleApp9
{
class Program
{
#region Private variables
// the secret password which we will try to find via brute force
private static string password = "Iw129";
private static string result;
private static bool isMatched = false;
/* The length of the charactersToTest Array is stored in a
* additional variable to increase performance */
private static int charactersToTestLength = 0;
private static long computedKeys = 0;
/* An array containing the characters which will be used to create the brute force keys,
* if less characters are used (e.g. only lower case chars) the faster the password is matched */
private static char[] charactersToTest =
{
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z','A','B','C','D','E',
'F','G','H','I','J','K','L','M','N','O','P','Q','R',
'S','T','U','V','W','X','Y','Z','1','2','3','4','5',
'6','7','8','9','0','!','$','#','@','-'
};
#endregion
static void Main(string[] args)
{
var timeStarted = DateTime.Now;
Console.WriteLine("Start BruteForce - {0}", timeStarted.ToString());
// The length of the array is stored permanently during runtime
charactersToTestLength = charactersToTest.Length;
// The length of the password is unknown, so we have to run trough the full search space
var estimatedPasswordLength = 0;
while (!isMatched)
{
/* The estimated length of the password will be increased and every possible key for this
* key length will be created and compared against the password */
estimatedPasswordLength++;
startBruteForce(estimatedPasswordLength);
}
Console.WriteLine("Password matched. - {0}", DateTime.Now.ToString());
Console.WriteLine("Time passed: {0}s", DateTime.Now.Subtract(timeStarted).TotalSeconds);
Console.WriteLine("Resolved password: {0}", result);
Console.WriteLine("Computed keys: {0}", computedKeys);
Console.ReadLine();
}
#region Private methods
/// <summary>
/// Starts the recursive method which will create the keys via brute force
///</summary>
/// <param name="keyLength">The length of the key</param>
private static void startBruteForce(int keyLength)
{
var keyChars = createCharArray(keyLength, charactersToTest[0]);
// The index of the last character will be stored for slight perfomance improvement
var indexOfLastChar = keyLength - 1;
createNewKey(0, keyChars, keyLength, indexOfLastChar);
}
/// <summary>
/// Creates a new char array of a specific length filled with the defaultChar
///</summary>
/// <param name="length">The length of the array</param>
/// <param name="defaultChar">The char with whom the array will be filled</param>
/// <returns></returns>
private static char[] createCharArray(int length, char defaultChar)
{
return (from c in new char[length] select defaultChar).ToArray();
}
/// <summary>
/// This is the main workhorse, it creates new keys and compares them to the password until the password
/// is matched or all keys of the current key length have been checked
///</summary>
/// <param name="currentCharPosition">The position of the char which is replaced by new characters currently</param>
/// <param name="keyChars">The current key represented as char array</param>
/// <param name="keyLength">The length of the key</param>
/// <param name="indexOfLastChar">The index of the last character of the key</param>
private static void createNewKey(int currentCharPosition, char[] keyChars, int keyLength, int indexOfLastChar)
{
var nextCharPosition = currentCharPosition + 1;
// We are looping trough the full length of our charactersToTest array
for (int i = 0; i < charactersToTestLength; i++)
{
/* The character at the currentCharPosition will be replaced by a
* new character from the charactersToTest array => a new key combination will be created */
keyChars[currentCharPosition] = charactersToTest[i];
// The method calls itself recursively until all positions of the key char array have been replaced
if (currentCharPosition < indexOfLastChar)
{
createNewKey(nextCharPosition, keyChars, keyLength, indexOfLastChar);
}
else
{
// A new key has been created, remove this counter to improve performance
computedKeys++;
/* The char array will be converted to a string and compared to the password. If the password
* is matched the loop breaks and the password is stored as result. */
if ((new String(keyChars)) == password)
{
if (!isMatched)
{
isMatched = true;
result = new String(keyChars);
}
return;
}
}
}
}
#endregion
}
}
Список популярных паролей можно найти здесь
Простейший пример отправки POST запроса на языке C#
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
public static async Task
Post()
{
HttpClient Client = new HttpClient();
StringContent Content = new StringContent("login=123&password=123");
return await Client.PostAsync("https://users.sfu-kras.ru/php/auth.php", Content);
}
static void Main(string[] args)
{
var answer = Post().Result;
Console.WriteLine(answer.ToString());
Console.WriteLine(answer.Content.ReadAsStringAsync().Result);
}
}
}
Фишинг - еще одна популярная атака, против пользователей Azure AD. Фишинг может привести к краже учетных данных или заражению вредоносным ПО, что может дать злоумышленникам точку опоры для доступа к клиенту. Одно из лучших улучшений, предоставляемых Azure AD, - это предупреждения, когда вы открываете электронное письмо от постороннего или ненадежного источника.
Последняя атака связана с Azure AD Connect, который является способом синхронизации Azure и локальной AD. Azure AD Connect можно настроить с помощью метода сквозной проверки подлинности. При использовании этого метода локально устанавливается сервер, называемый «агентом Azure». Если злоумышленник скомпрометирует сервер агента Azure организации, он может создать бэкдор, который позволит ему войти в систему как любой синхронизированный пользователь. Вы можете прочитать подробности про атаки Azure Skeleton Key здесь.