Рубрики
Uncategorized

Охрана функций Azure: Лучшие практики

Эта статья является частью #serverredseptater. Вы найдете другие полезные статьи, подробные учебники … Теги с Azure, Security, Serverless, Devops.

Эта статья является частью #serverredseptater. Вы найдете другие полезные статьи, подробные учебные пособия и видео в этом сборе «Всеобъемлюсь». Новые статьи публикуются каждый день — Это верно, каждый день — от членов сообщества и облачных сторонников в сентябре месяце.

Узнайте больше о том, как Microsoft Azure позволяет вашим функциям безвесочных на https://docs.microsoft.com/azure/azure-functions/ Отказ

Что мы собираемся учиться?

Вы слышали о неверном, буквально весь месяц. Итак, на самом деле нет необходимости идти дальше в деталях о том, как преимущества и недостатки (там есть?) Переезд в безрусной архитектуре. Этот пост будет чисто о Безопасность Отказ

TL; доктор

Вы развертываете функции Azure? ( Я здесь, не так ли? ). Вы хотите обеспечить ваши функции? ( Еще здесь … ). Здорово! убедись, что ты:

  1. Выполнить проверку ввода
  2. Следуйте наименьшим принцип привилегии
  3. Монитор 3-й партийных зависимостей
  4. Закрепите свое облачное хранилище
  5. Закрепите свои функции секреты
  6. Обеспечить соблюдение аутентификации и авторизации

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

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

Безопасность существует, но иначе

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

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

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

1. Выполнить проверку ввода

Недостатки впрыска Атаки являются одним из наиболее распространенных рисков в приложениях, и они являются частью наиболее безопасных руководств по вопросам наилучшей практики. Атаки для инъекций пытаются использовать код, который передает ненадежные входы непосредственно к переводчику перед выполнением или оцененным.

Так как функции без сервеса могут быть вызвано из разных источников событий Как и облачное хранилище (BLOB), база данных NoSQL (COSMOSDB), концентраторы событий, очередь, очередь, мероприятия графа и многое другое, инъекции не ограничены вводами, находящиеся непосредственно из вызовов API, и функции могут потреблять вход от каждого типа возможных источников событий.

Что вы должны сделать?

  • В общем, никогда не доверяйте вводу и не делайте никаких предположений о его действительности.
  • Всегда используйте безопасные API, которые демонстрируют или проверяют вход. Когда это возможно, используйте API, которые связывают или параметризуют переменные (например, использование Подготовленные операторы для SQL-запросов).
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Text.RegularExpressions;   

public static async Task Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");
    string name = req.Query["name"];
    string validate_name_pattern = @"^[a-zA-Z-.' ]{2,64}$";

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    bool isNameValid = Regex.IsMatch(name, validate_name_pattern);      
    log.LogInformation("Input validation result for " + name + ": " + isNameValid);

    return name != null && isNameValid
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Invalid name");
}

2. Следуйте наименьшим принцип привилегии

Нижняя строка: функция без сердца должна иметь только привилегии, необходимые для выполнения ее предполагаемой логики, следуя « Принцип наименее привилегии « .

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

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

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

Что вы должны сделать?

  • Просмотрите каждую функцию перед развертыванием для выявления чрезмерных разрешений
  • Тщательно изучите функции, чтобы применить разрешения «наименьших привилегий», точно придавая каждую функцию, и только то, что требуется для функции для успешного выполнения своей задачи
  • Рекомендуется использовать инструмент для автоматизации процесса конфигурации разрешений, как мы делаем в Преступность
  • Использовать RBAC Чтобы назначить разрешения для пользователей, групп и приложений в определенном объеме. Область присваивания роли может быть подпиской, ресурсной группой или одним ресурсом и избегать использования подстановочных знаков ( * ), когда это возможно
  • Использовать Shared Access Signature (SAS) токены, чтобы получить ограниченный доступ к другим ресурсам и услугам

3. Монитор 3-й партийных зависимостей

Код функции без сервеса обычно мал. Однако, чтобы иметь возможность выполнить желаемые задачи, функции используют много зависимостей и 3-й партийных библиотек.

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

Кроме того, в том, что мы называем «отравлением хорошо», атакующие стремятся получить более долгосрочную постоянство в приложении с помощью атаки восходящего. После того, как хорошо отравляют, они терпеливо ждут, когда новая версия способен к облачным приложениям.

Если вы используете .NET, Microsoft объявит о пакетах Nuget с известными уязвимостями, как этот Отказ Но это действительно для всех занятий. Независимо от того, используете ли вы Python (PIP), Java (Maven), узел (NPM) или любое другое управление пакетами.

Что вы должны сделать?

  • Непрерывно контролируйте зависимости и их версии по всей системе, используя Owasp Трек зависимости или любая другая система
  • Получить компоненты только из официальных источников над безопасными ссылками.
  • Предпочитайте подписанные пакеты, чтобы уменьшить вероятность того, чтобы включить модифицированный, вредоносный компонент
  • Непрерывно контролировать пакеты с базами данных уязвимостей, таких как MITER CVE и NVD.
  • Рекомендуется сканировать зависимости для известных уязвимостей, использующих такие инструменты, как OWASP Проверка зависимости или коммерческое решение.
  • Для dotnet, используйте dotnet-пенсию Отказ Инструмент для проверки зависимостей для версий с известными уязвимостями
  • Проверьте уязвимости пакета Nuget с OwASP Сафенугет
  • Используйте временные базы данных, зависящие от времени, такие как Pyup для Python и Обсуждение безопасности NPM Для узла
  • Использовать Аудит. Нетто который интегрирует с VS для выявления известных уязвимостей в .NET Зависимости Nuget

4. Закрепите свое облачное хранилище

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

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

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

Что вы должны сделать?

  • Определите и классифицируйте конфиденциальные данные
  • Минимизируйте хранение конфиденциальных данных только к тому, что абсолютно необходимо
  • Для конфиденциального хранения данных добавьте мультифакторную аутентификацию и шифрование данных (в транзите и в покое))
  • Обзор Руководство по безопасности для хранения Azure
  • Грант ограниченный доступ к ресурсам хранения Azure, используя Поделинные подписи доступа (SAS)

5. Закрепите свои функции секреты

Всегда есть необходимость хранить и поддерживать Секреты в нашем приложении. Секреты могут быть ключами API, учетные данные для других ресурсов (например, база данных E.g.), Crypto-ключей (шифрование/дешифрование) и конфиденциальные настройки конфигурации.

Хранение таких секретов в файле конфигурации простого текста может быть загружено в и просочился через общие репозитории (например, github). Там Несколько инструментов Этот хакеры используют, чтобы попытаться определить такие утечки клавиш. Есть много свидетельствующий

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

Ориентичен для хранения таких секретов в безопасном зашифрованном хранилище.

Что вы должны сделать?

  • Используйте Microsoft Credscan Инструмент для идентификации утечек учетных данных
  • По возможности, управляйте ключами шифрования в централизованном инфраструктуре управления ключом шифрования или услугой, как Azure Ключ-хранилище

6. Обеспечить соблюдение аутентификации и авторизации

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

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

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

Что вы должны сделать?

  • Для аутентификации услуг между внутренними ресурсами и услугами используют известные безопасные методы, такие как федеративная идентичность (например, SAML, OAUTH2, токены безопасности)

Что дальше?

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

Для тех из вас, кто сделать Хотите узнать больше, я могу предложить:

  • Следуйте за открытым источником Owasp Wersless Top 10 Проект риска
  • Приходите в мои переговоры или наблюдать за ними практически (когда доступно)
  • Следуй за мной на Twitter Чтобы узнать больше о новых исследованиях безопасности, демонстрации, проблемах, разговорах, идеях и ссылках.
  • Если вы хотите посмотреть, как Зрелье думает Это мой #serverredhacking Talking с последнего @Дербикон

Оригинал: «https://dev.to/protego/azure-functions-security-best-practices-5og»