Механизм безопасности. Безопасность обмена данными | Устранение угроз
Продукт или служба | Статья |
---|---|
Концентратор событий 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).
|
Настройте передачу всего трафика на сервер удостоверений через HTTPS-подключение
Заголовок | Сведения |
---|---|
Компонент | Сервер удостоверений |
Этап SDL | Развертывание |
Применимые технологии | Универсальный |
Атрибуты | Неприменимо |
Ссылки | Сведения о ключах, подписях и шифровании на платформе IdentityServer3, информация о развертывании платформы IdentityServer3 |
Шаги | По умолчанию все входящие подключения к IdentityServer должны выполняться по протоколу HTTPS. Взаимодействие с IdentityServer должно выполняться только через защищенные транспортные протоколы. Но в некоторых сценариях развертывания, например при настройке разгрузки TLS, это требование можно опустить. Дополнительные сведения см. на странице развертывания платформы IdentityServer. |
Проверьте сертификаты X.509, используемые для проверки подлинности подключений SSL, TLS и DTLS
Заголовок | Сведения |
---|---|
Компонент | Веб-приложение |
Этап SDL | Сборка |
Применимые технологии | Универсальный |
Атрибуты | Неприменимо |
Ссылки | Неприменимо |
Шаги | Приложения, использующие протокол SSL, TLS и DTLS, должны тщательно проверять сертификаты X.509 сущностей, к которым они подключаются. Приложение должно проверить следующее:
|
Настройте сертификат 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 устраняет следующие угрозы:
|
Включите шифрование подключения и проверку сертификатов SQL Server
Заголовок | Сведения |
---|---|
Компонент | База данных |
Этап SDL | Сборка |
Применимые технологии | SQL Azure |
Атрибуты | Версия SQL: 12 |
Ссылки | Рекомендации по написанию безопасных строк подключения для базы данных SQL |
Шаги | Все связи между Базой данных SQL и клиентским приложением шифруются с помощью протокола TLS, который ранее назывался Secure Sockets Layer (SSL). База данных SQL не поддерживает незашифрованные подключения. Для проверки сертификатов с помощью кода приложения или инструментов явно запрашивайте зашифрованное подключение и не доверяйте сертификатам сервера. Если код приложения или инструменты не запрашивают зашифрованное подключение, они все равно его получат. Но эти программные средства могут не проверять сертификаты сервера, поэтому становятся восприимчивыми к атакам «злоумышленник в середине». Для проверки сертификатов с помощью кода приложения ADO.NET задайте параметры |
Настройте принудительное шифрование подключений к 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 ключ с сервера злоумышленника будет отличаться от прикрепленного ключа сертификата, запрос игнорируется, тем самым предотвращая атаку. Сертификат можно привязать с помощью делегата |
Пример
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.
В практическом плане сотрудники, ответственные за обеспечение безопасности сети, не всегда проверяют возникающие требования к безопасности приложения. |
WCF. Настройте уровень защиты сообщений с помощью параметра EncryptAndSign
Заголовок | Сведения |
---|---|
Компонент | WCF |
Этап SDL | Сборка |
Применимые технологии | .NET Framework 3 |
Атрибуты | Неприменимо |
Ссылки | MSDN |
Шаги |
Мы рекомендуем отключить шифрование сообщений и только подписывать их, если вы просто хотите проверить целостность информации, не принимая во внимание конфиденциальность. Рассмотрите этот вариант для операций и контрактов службы, в которых необходимо проверить исходного отправителя, но конфиденциальные данные не передаются. При снижении уровня защиты следите за тем, чтобы сообщение не содержало никаких персональных данных. |
Пример
В следующих примерах служба и операция только подписывают сообщение. Пример контракта службы 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 |
Шаги |
Если службе требуется доступ к определенным ресурсам от имени исходного вызывающего объекта, используйте олицетворение и делегирование, чтобы передать удостоверения этого объекта для проверки авторизации подчиненных. В сценариях разработки используйте учетную запись локальной сетевой службы (специальная встроенная учетная запись с меньшими привилегиями доступа). В рабочем сценарии создайте пользовательскую учетную запись службы домена с минимальными привилегиями |
Настройте принудительную передачу всего трафика к веб-интерфейсам 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. |