Поделиться через


Механизм безопасности. Безопасность обмена данными | Устранение угроз

Продукт или служба Статья
Концентратор событий Azure
Dynamics CRM
Фабрика данных Azure
Сервер удостоверений
Веб-приложение
База данных
Хранилище Azure
Мобильный клиент
WCF
Веб-API
Кэш Azure для Redis
Полевой шлюз Интернета вещей
Облачный шлюз Интернета вещей

Обеспечьте безопасное подключение к концентратору событий с использованием протокола SSL/TLS

Заголовок Сведения
Компонент концентратору событий Azure
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты Неприменимо
Ссылки Общие сведения о проверке подлинности в Центрах событий Azure и модели безопасности
Шаги Настройте безопасные HTTP- или AMQP-подключения к концентратору событий, используя протокол SSL/TLS.

Проверьте привилегии учетной записи службы и выполнение политик безопасности CRM пользовательскими службами и на страницах ASP.NET

Заголовок Сведения
Компонент Dynamics CRM
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты Неприменимо
Ссылки Неприменимо
Шаги Проверьте привилегии учетной записи службы и выполнение политик безопасности CRM пользовательскими службами и на страницах ASP.NET

Используйте шлюз управления данными при подключении локального сервера SQL Server к фабрике данных Azure

Заголовок Сведения
Компонент Azure Data Factory
Этап SDL Развертывание
Применимые технологии Универсальный
Атрибуты Типы связанных служб: Azure и локальные
Ссылки Перемещение данных между локальной средой и Фабрика данных Azure
Шаги

Чтобы подключиться к источникам данных, защищенным в корпоративной сети или брандмауэром, требуется шлюз управления данными (DMG).

  1. Заблокировав доступ к компьютеру, вы изолируете шлюз управления данными и предотвратите повреждение данных неисправными программами или их перехват на исходном компьютере. (Например, необходимо установить последние обновления, выполнять управляемую подготовку учетных записей, а также включить минимальное требуемое количество портов, аудит, шифрование дисков и т. д.)
  2. Ключ шлюза данных должен меняться через короткие промежутки времени или после обновления пароля учетной записи службы DMG.
  3. Транзиты данных через связанную службу должны быть зашифрованы.

Настройте передачу всего трафика на сервер удостоверений через HTTPS-подключение

Заголовок Сведения
Компонент Сервер удостоверений
Этап SDL Развертывание
Применимые технологии Универсальный
Атрибуты Неприменимо
Ссылки Сведения о ключах, подписях и шифровании на платформе IdentityServer3, информация о развертывании платформы IdentityServer3
Шаги По умолчанию все входящие подключения к IdentityServer должны выполняться по протоколу HTTPS. Взаимодействие с IdentityServer должно выполняться только через защищенные транспортные протоколы. Но в некоторых сценариях развертывания, например при настройке разгрузки TLS, это требование можно опустить. Дополнительные сведения см. на странице развертывания платформы IdentityServer.

Проверьте сертификаты X.509, используемые для проверки подлинности подключений SSL, TLS и DTLS

Заголовок Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты Неприменимо
Ссылки Неприменимо
Шаги

Приложения, использующие протокол SSL, TLS и DTLS, должны тщательно проверять сертификаты X.509 сущностей, к которым они подключаются. Приложение должно проверить следующее:

  • Доменное имя
  • Даты действия (даты начала и окончания срока действия).
  • Состояние отзыва.
  • Использование (например, проверка подлинности сервера для серверов, проверка подлинности клиента для клиентов).
  • Цепь доверия. Сертификаты должны быть привязаны к корневому центру сертификации, доверенному на платформе или явно настроенному администратором.
  • Длина открытого ключа сертификата должна быть >2048 бит
  • Должен использоваться алгоритм хэширования версии SHA256 или более поздней.

Настройте сертификат TLS/SSL для личного домена в службе приложений Azure

Заголовок Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты EnvironmentType: Azure
Ссылки Включение протокола HTTPS для приложения в службе приложений Azure
Шаги По умолчанию служба Azure включает протокол HTTPS для каждого приложения с помощью группового сертификата домена *.azurewebsites.net. Однако, как и все домены с подстановочными знаками, он не так безопасен, как личный домен с собственным сертификатом. Дополнительные сведения см. в этой статье. Мы рекомендуем включить TLS для личного домена, через который будет осуществляться доступ к развернутому приложению.

Настройте принудительную передачу всего трафика к службе приложений Azure через HTTPS-подключение

Заголовок Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты EnvironmentType: Azure
Ссылки Принудительное использование HTTPS в службе приложений Azure
Шаги

По умолчанию Azure включает протокол HTTPS для службы приложений Azure с помощью группового сертификата домена *.azurewebsites.net. Поэтому этот протокол принудительно применять не нужно. Посетители по-прежнему могут получить доступ к приложению, используя протокол HTTP, что может поставить под угрозу безопасность приложения, и следовательно, владелец приложения должен явным образом применить протокол HTTPS. В приложения ASP.NET MVC необходимо добавить фильтр RequireHttps, который принудительно пересылает незащищенные HTTP-запросы по протоколу HTTPS.

Кроме того, чтобы применить HTTPS, вы можете использовать модуль переопределения URL-адресов, входящий в состав службы приложений Azure. Модуль переопределения URL-адресов позволяет разработчикам определять правила, применяемые к входящим запросам перед их обработкой и отправкой в приложение. Правила этого модуля задаются в файле web.config, который хранится в корневом каталоге приложения.

Пример

В примере ниже показано базовое правило модуля переопределения URL-адресов, которое заставляет весь входящий трафик использовать HTTPS.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Это правило работает путем возврата кода состояния HTTP 301 (постоянное перенаправление), когда пользователь запрашивает страницу с помощью HTTP. Код состояния 301 перенаправляет запрос на тот же запрошенный посетителем URL-адрес, но заменяет в запросе HTTP на HTTPS. Например, HTTP://contoso.com будет перенаправлено в HTTPS://contoso.com.

Включите строгий режим безопасности транспорта HTTP (HSTS)

Заголовок Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты Неприменимо
Ссылки Памятка OWASP по HSTS
Шаги

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

Чтобы реализовать HSTS, следующий заголовок ответа должен быть настроен для веб-сайта глобально, либо в коде, либо в конфигурации. Strict-Transport-Security: max-age=300; includeSubDomains HSTS устраняет следующие угрозы:

  • Уязвимость к атакам "злоумышленник в середине" при использовании закладок или ввода https://example.com вручную. HSTS автоматически перенаправляет HTTP-запросы к целевому домену по протоколу HTTPS.
  • Веб-приложение, предназначенное для использования протокола HTTPS, содержит HTTP-ссылки или передает содержимое по протоколу HTTP. HSTS автоматически перенаправляет HTTP-запросы к целевому домену по протоколу HTTPS.
  • Злоумышленник с помощью атаки "злоумышленник в середине" пытается перехватить трафик пользователя, используя недопустимый сертификат, и надеется, что этот пользователь примет недействительный сертификат. HSTS не разрешит пользователю переопределить правильный сертификат.

Включите шифрование подключения и проверку сертификатов SQL Server

Заголовок Сведения
Компонент База данных
Этап SDL Сборка
Применимые технологии SQL Azure
Атрибуты Версия SQL: 12
Ссылки Рекомендации по написанию безопасных строк подключения для базы данных SQL
Шаги

Все связи между Базой данных SQL и клиентским приложением шифруются с помощью протокола TLS, который ранее назывался Secure Sockets Layer (SSL). База данных SQL не поддерживает незашифрованные подключения. Для проверки сертификатов с помощью кода приложения или инструментов явно запрашивайте зашифрованное подключение и не доверяйте сертификатам сервера. Если код приложения или инструменты не запрашивают зашифрованное подключение, они все равно его получат.

Но эти программные средства могут не проверять сертификаты сервера, поэтому становятся восприимчивыми к атакам «злоумышленник в середине». Для проверки сертификатов с помощью кода приложения ADO.NET задайте параметры Encrypt=True и TrustServerCertificate=False в строке подключения к базе данных. Чтобы проверить сертификаты с помощью SQL Server Management Studio, откройте диалоговое окно "Соединение с сервером". На вкладке "Свойства соединения" щелкните "Шифровать соединение".

Настройте принудительное шифрование подключений к SQL Server

Заголовок Сведения
Компонент База данных
Этап SDL Сборка
Применимые технологии OnPrem
Атрибуты Версия SQL: MsSQL2016, MsSQL2012, MsSQL2014
Ссылки Включение зашифрованных соединений для ядра СУБД
Шаги Шифрование TLS позволяет повысить безопасность данных, передаваемых между экземплярами SQL Server и приложениями, расположенными в разных сетях.

Настройте подключение к службе хранилища Azure по протоколу HTTPS

Заголовок Сведения
Компонент Хранилище Azure
Этап SDL Развертывание
Применимые технологии Универсальный
Атрибуты Неприменимо
Ссылки Руководство по безопасности службы хранилища Azure. Шифрование на уровне транспорта с помощью протокола HTTPS
Шаги Чтобы обеспечить безопасную передачу данных службы хранилища Azure, при вызове интерфейсов REST API или доступе к объектам в хранилище всегда используйте протокол HTTPS. Кроме того, подписанные URL-адреса, которые можно применять для доступа к объектам в службе хранилища Azure, дают возможность указывать, что с ними может использоваться только протокол HTTPS. Это позволяет гарантировать, что все получатели ссылок с маркерами SAS будут применять надлежащий протокол.

Проверяйте MD5-хэш после скачивания большого двоичного объекта по протоколу HTTP

Заголовок Сведения
Компонент Хранилище Azure
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты Тип хранилища: большой двоичный объект
Ссылки Общие сведения о проверке MD5 в службе BLOB-объектов Microsoft Azure
Шаги

Служба BLOB-объектов Microsoft Azure предоставляет механизм, обеспечивающий безопасность данных на уровне приложения и транспортного протокола. Если по какой-либо причине необходимо использовать протокол HTTP вместо HTTPS и вы работаете с блочными BLOB-объектами, то можно использовать проверку MD5 для проверки целостности передаваемых больших двоичных объектов.

Это поможет защититься от ошибок транспортного и сетевого уровня, но не обязательно предотвратит атаки промежуточного уровня. Если можно использовать протокол HTTPS, который обеспечивает безопасность на транспортном уровне, то применение проверки MD5 является избыточным и ненужным.

Используйте клиент, совместимый с SMB 3.x, для шифрования данных, передаваемых в общие папки Azure

Заголовок Сведения
Компонент Мобильный клиент
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты Тип хранилища: файлы
Ссылки Файлы Azure, Поддержка SMB Файлов Azure для клиентов Windows
Шаги Файлы Azure поддерживают протокол HTTPS при использовании API REST, но обычно используются в виде общей папки SMB, подключенной к виртуальной машине. Протокол SMB 2.1 не поддерживает шифрование, поэтому подключения допускаются только в пределах одного региона Azure. Однако протокол SMB 3.x поддерживает шифрование и может использоваться вместе с Windows Server 2012 R2, Windows 8, Windows 8.1 и Windows 10, обеспечивая межрегиональный доступ и даже доступ с компьютера.

Реализуйте привязку сертификата

Заголовок Сведения
Компонент Хранилище Azure
Этап SDL Сборка
Применимые технологии Универсальное, Windows Phone
Атрибуты Неприменимо
Ссылки Привязка сертификата и открытого ключа
Шаги

Привязка сертификата защищает от атак "злоумышленник в середине". Этот процесс заключается в привязке узла к ожидаемому сертификату X509 или открытому ключу. После добавления сертификата или открытого ключа для узла их необходимо привязать к нему.

Таким образом, когда противник пытается выполнить атаку TLS MITM, во время рукопожатия TLS ключ с сервера злоумышленника будет отличаться от прикрепленного ключа сертификата, запрос игнорируется, тем самым предотвращая атаку. Сертификат можно привязать с помощью делегата ServerCertificateValidationCallback класса ServicePointManager.

Пример

using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography;

namespace CertificatePinningExample
{
    class CertificatePinningExample
    {
        /* Note: In this example, we're hardcoding the certificate's public key and algorithm for 
           demonstration purposes. In a real-world application, this should be stored in a secure
           configuration area that can be updated as needed. */

        private static readonly string PINNED_ALGORITHM = "RSA";

        private static readonly string PINNED_PUBLIC_KEY = "3082010A0282010100B0E75B7CBE56D31658EF79B3A1" +
            "294D506A88DFCDD603F6EF15E7F5BCBDF32291EC50B2B82BA158E905FE6A83EE044A48258B07FAC3D6356AF09B2" +
            "3EDAB15D00507B70DB08DB9A20C7D1201417B3071A346D663A241061C151B6EC5B5B4ECCCDCDBEA24F051962809" +
            "FEC499BF2D093C06E3BDA7D0BB83CDC1C2C6660B8ECB2EA30A685ADE2DC83C88314010FFC7F4F0F895EDDBE5C02" +
            "ABF78E50B708E0A0EB984A9AA536BCE61A0C31DB95425C6FEE5A564B158EE7C4F0693C439AE010EF83CA8155750" +
            "09B17537C29F86071E5DD8CA50EBD8A409494F479B07574D83EDCE6F68A8F7D40447471D05BC3F5EAD7862FA748" +
            "EA3C92A60A128344B1CEF7A0B0D94E50203010001";


        public static void Main(string[] args)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://azure.microsoft.com");
            request.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
            {
                if (certificate == null || sslPolicyErrors != SslPolicyErrors.None)
                {
                    // Error getting certificate or the certificate failed basic validation
                    return false;
                }

                var targetKeyAlgorithm = new Oid(certificate.GetKeyAlgorithm()).FriendlyName;
                var targetPublicKey = certificate.GetPublicKeyString();
                
                if (targetKeyAlgorithm == PINNED_ALGORITHM &&
                    targetPublicKey == PINNED_PUBLIC_KEY)
                {
                    // Success, the certificate matches the pinned value.
                    return true;
                }
                // Reject, either the key or the algorithm does not match the expected value.
                return false;
            };

            try
            {
                var response = (HttpWebResponse)request.GetResponse();
                Console.WriteLine($"Success, HTTP status code: {response.StatusCode}");
            }
            catch(Exception ex)
            {
                Console.WriteLine($"Failure, {ex.Message}");
            }
            Console.WriteLine("Press any key to end.");
            Console.ReadKey();
        }
    }
}

Включите безопасный канал транспорта HTTPS

Заголовок Сведения
Компонент WCF
Этап SDL Сборка
Применимые технологии .NET Framework 3
Атрибуты Неприменимо
Ссылки MSDN, Fortify Kingdom
Шаги В конфигурации приложения должно быть задано, что для доступа к конфиденциальной информации используется протокол HTTPS.
  • Пояснение. Если приложение обрабатывает конфиденциальную информацию и не использует шифрование на уровне сообщений, доступ к нему должен осуществляться только через зашифрованный канал транспорта.
  • Рекомендации. Отключите транспортный протокол HTTP и включите HTTPS. Например, замените тег <httpTransport/> на <httpsTransport/>. Не следует полагаться на конфигурацию сети (брандмауэра), чтобы обеспечить доступ к приложению только через защищенный канал. С философской точки зрения безопасность приложения не должна зависеть от сети.

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

WCF. Настройте уровень защиты сообщений с помощью параметра EncryptAndSign

Заголовок Сведения
Компонент WCF
Этап SDL Сборка
Применимые технологии .NET Framework 3
Атрибуты Неприменимо
Ссылки MSDN
Шаги
  • Пояснение. Если для уровня защиты задано значение none, защита сообщений отключена. Конфиденциальность и целостность достигается при использовании соответствующего уровня настройки.
  • Рекомендации.
    • Задайте значение Mode=None, чтобы отключить защиту сообщений.
    • При использовании значения Mode=Sign сообщения подписываются, но не шифруются. Следует использовать, если важна целостность данных.
    • При использовании значения Mode=EncryptAndSign сообщения подписываются и шифруются.

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

Пример

В следующих примерах служба и операция только подписывают сообщение. Пример контракта службы ProtectionLevel.Sign. Ниже приведен пример использования параметра ProtectionLevel.Sign на уровне контракта службы.

[ServiceContract(Protection Level=ProtectionLevel.Sign] 
public interface IService 
  { 
  string GetData(int value); 
  } 

Пример

Пример контракта операции ProtectionLevel.Sign (для более детального управления). Ниже приведен пример использования параметра ProtectionLevel.Sign на уровне контракта операции.

[OperationContract(ProtectionLevel=ProtectionLevel.Sign] 
string GetData(int value);

Используйте учетную запись с минимальными привилегиями для запуска службы WCF

Заголовок Сведения
Компонент WCF
Этап SDL Сборка
Применимые технологии .NET Framework 3
Атрибуты Неприменимо
Ссылки MSDN
Шаги
  • Пояснение. Не запускайте службы WCF, используя учетную запись с высоким уровнем привилегий или учетную запись администратора. В случае компрометации служб это может иметь значительные последствия.
  • Рекомендации. Используйте для размещения службы WCF учетную запись с минимальными привилегиями. Это позволит уменьшить вероятность атаки на приложение и связанные с ней риски. Если для учетной записи службы требуются дополнительные права доступа к ресурсам инфраструктуры, например к MSMQ, журналу событий, счетчикам производительности и файловой системе, задайте необходимые разрешения, чтобы запустить службу WCF успешно.

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

Настройте принудительную передачу всего трафика к веб-интерфейсам API через HTTPS-подключение

Заголовок Сведения
Компонент Веб-интерфейс API
Этап SDL Сборка
Применимые технологии MVC 5, MVC 6
Атрибуты Неприменимо
Ссылки Информация о работе с SSL в веб-интерфейсе API
Шаги Если приложение имеет и привязку HTTP, и HTTPS, для доступа к сайту клиенты по-прежнему могут использовать протокол HTTP. Чтобы избежать этого, используйте фильтр действий. Это позволит всегда передавать запросы к защищенным интерфейсам API по протоколу HTTPS.

Пример

В следующем коде показан фильтр проверки подлинности веб-интерфейса API, проверяющий TLS-подключения.

public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
        {
            actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
            {
                ReasonPhrase = "HTTPS Required"
            };
        }
        else
        {
            base.OnAuthorization(actionContext);
        }
    }
}

Добавьте этот фильтр в любое действие веб-интерфейса API, для которого требуется TLS:

public class ValuesController : ApiController
{
    [RequireHttps]
    public HttpResponseMessage Get() { ... }
}

Настройка подключения к кэшу Azure для Redis по протоколу TLS

Заголовок Сведения
Компонент Кэш Azure для Redis
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты Неприменимо
Ссылки Поддержка TLS Azure Redis
Шаги В отличии от кэша Azure для Redis сервер Redis не имеет встроенной поддержки TLS. Если вы подключаетесь к кэшу Azure для Redis и ваш клиент поддерживает протокол TLS, например StackExchange.Redis, то следует использовать TLS. По умолчанию порт без TLS отключен для новых экземпляров кэша Azure для Redis. Эти стандартные параметры не следует изменять, если клиенты Redis зависят от поддержки TLS.

Обратите внимание, что Redis рассчитан на доступ доверенных клиентов в надежных средах. Поэтому мы не рекомендуем предоставлять доступ к экземпляру Redis непосредственно через Интернет или в средах, где к TCP-порту или сокету UNIX Redis могут напрямую подключиться ненадежные клиенты.

Защитите подключение между устройством и полевым шлюзом

Заголовок Сведения
Компонент Полевой шлюз Интернета вещей
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты Неприменимо
Ссылки Неприменимо
Шаги Как правило, устройства на основе IP-адресов должны использовать протоколы связи, доступные через канал SSL/TLS. Это позволяет защитить данные при передаче. Для всех остальных протоколов, не поддерживающих SSL/TLS, выберите безопасную версию протокола, обеспечивающего безопасность на уровне транспорта или сообщения.

Защитите подключение между устройством и облачным шлюзом с помощью SSL/TLS

Заголовок Сведения
Компонент Облачный шлюз Интернета вещей
Этап SDL Сборка
Применимые технологии Универсальный
Атрибуты Неприменимо
Ссылки Руководство разработчика по центру Azure IoT (IoT — Интернет вещей)
Шаги Защитите протоколы HTTP/AMQP или MQTT с помощью SSL/TLS.