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


Фрейм безопасности: безопасность связи | Меры защиты

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

Безопасное взаимодействие с Концентратором событий с помощью SSL/TLS

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

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

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

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

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

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

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

Убедитесь, что весь трафик на сервер удостоверений осуществляется исключительно через HTTPS-соединение.

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

Проверка сертификатов 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, он не применяет протокол HTTPS. Посетители по-прежнему могут получить доступ к приложению с помощью HTTP, что может скомпрометировать безопасность приложения, поэтому ПРОТОКОЛ HTTPS должен быть применен явным образом. ASP.NET приложения MVC должны использовать фильтр RequireHttps , который заставляет незащищенный HTTP-запрос повторно отправляться по протоколу HTTPS.

Кроме того, модуль перезаписи URL-адресов, который входит в службу приложений Azure, можно использовать для принудительного применения HTTPS. Модуль переопределения URL-адресов позволяет разработчикам определять правила, применяемые к входящим запросам, прежде чем запросы передаются приложению. Правила переопределения 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 по политике строгой транспортной безопасности HTTP
Шаги

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

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

  • Пользователи добавляют в закладки или вводят https://example.com вручную и становятся уязвимыми для атаки типа "человек посередине": HSTS автоматически перенаправляет HTTP-запросы на HTTPS для целевого домена.
  • Веб-приложение, которое должно быть чисто HTTPS непреднамеренно содержит HTTP-ссылки или обслуживает содержимое по протоколу HTTP: HSTS автоматически перенаправляет HTTP-запросы на HTTPS для целевого домена.
  • Человек посередине (Man-in-the-Middle) пытается перехватить трафик от пользователя-жертвы, используя недействительный сертификат, надеясь, что пользователь примет неправильный сертификат. HSTS не позволяет пользователю обойти сообщение о недействительном сертификате.

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

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

Все коммуникации между базой данных SQL и клиентским приложением шифруются с помощью TLS, ранее известного как протокол SSL. База данных SQL не поддерживает незашифрованные подключения. Чтобы проверить сертификаты с помощью кода приложения или средств, явно запрашивайте зашифрованное подключение и не доверяйте сертификатам сервера. Если код вашего приложения или инструменты не запрашивают зашифрованное подключение, они всё равно получат зашифрованные подключения.

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

Принудительное шифрование связи с SQL Server

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

Убедитесь, что подключение к службе хранилища Azure выполняется по протоколу HTTPS

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

Проверка хэша MD5 после скачивания объекта, если не удается включить HTTPS.

Название Сведения
Компонент Служба хранилища Azure
Этап SDL Строить
Применимые технологии Общий
Атрибуты Тип хранилища — Blob
Ссылки Обзор Windows Azure BLOB MD5
Шаги

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

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

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

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

Внедрение пиннинга сертификатов

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

Закрепление сертификатов защищает от атакThe-Middle (MITM). Закрепление — это процесс связывания хоста с ожидаемым сертификатом Х509 или открытым ключом. После того как сертификат или открытый ключ известен или виден для узла, сертификат или открытый ключ связан или закреплен на узле.

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

Пример

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 (Windows Communication Foundation)
Этап SDL Строить
Применимые технологии NET Framework 3
Атрибуты Не применимо
Ссылки MSDN, Фортифицировать Королевство
Шаги Конфигурация приложения должна гарантировать, что HTTPS используется для всех доступа к конфиденциальной информации.
  • ОБЪЯСНЕНИЕ: Если приложение обрабатывает конфиденциальную информацию и не использует шифрование на уровне сообщений, оно должно быть разрешено только через зашифрованный транспортный канал.
  • РЕКОМЕНДАЦИИ: Убедитесь, что транспорт HTTP отключен и включен транспорт HTTPS. Например, замените тег <httpTransport/> на тег <httpsTransport/>. Не полагаться на конфигурацию сети (брандмауэр), чтобы гарантировать, что приложение может быть доступно только через безопасный канал. С точки зрения философии приложение не должно зависеть от сети для его безопасности.

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

WCF: задайте уровень защиты безопасности сообщений для EncryptAndSign

Название Сведения
Компонент WCF (Windows Communication Foundation)
Этап 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":

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

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

Название Сведения
Компонент WCF (Windows Communication Foundation)
Этап SDL Строить
Применимые технологии .NET Framework 3
Атрибуты Не применимо
Ссылки MSDN
Шаги
  • ОБЪЯСНЕНИЕ: Не запускайте службы WCF в учетной записи администратора или с высоким уровнем привилегий. в случае нарушения безопасности служб это приведет к значительным последствиям.
  • РЕКОМЕНДАЦИИ: Используйте учетную запись с минимальными привилегиями для размещения службы WCF, так как она уменьшит область атаки приложения и уменьшит потенциальный ущерб при атаке. Если для учетной записи службы требуются дополнительные права доступа к ресурсам инфраструктуры, таким как MSMQ, журнал событий, счетчики производительности и файловая система, необходимо предоставить соответствующие разрешения этим ресурсам, чтобы служба WCF успешно работала.

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

Обеспечить передачу всего трафика к веб-API через соединение HTTPS.

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

Пример

В следующем коде показан фильтр аутентификации Web 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 Redis в Azure
Шаги Сервер Redis не поддерживает TLS по умолчанию, но в кэше Azure для Redis это поддерживается. Если вы подключаетесь к кэшу Azure для Redis, а клиент поддерживает TLS, например StackExchange.Redis, то следует использовать TLS. По умолчанию порт, отличный от TLS, отключен для новых экземпляров кэша Azure для Redis. Убедитесь, что безопасные значения по умолчанию не изменяются, если только не существует зависимости от поддержки TLS для клиентов redis.

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

Безопасное взаимодействие устройства с полевым шлюзом

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

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

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