1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/microsoft-TensorFlow-DirectML

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
SECURITY.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 07:35 98f4e47

Осторожность при работе с входными строками и данными большого объёма

При тщательном экранировании и дезинфекции входных строк, проверке размера входящих больших двоичных объектов (blob) и т. д. очень легко написать небезопасные программы на Python. Даже безопасный код на Python может стать уязвимым из-за ошибки в интерпретаторе Python или в используемой библиотеке Python (например, этой).

Запуск сервера TensorFlow

TensorFlow — это платформа для распределённых вычислений, и поэтому существует сервер TensorFlow (tf.train.Server). Сервер TensorFlow предназначен только для внутреннего взаимодействия. Он не создан для использования в ненадёжной сети.

По соображениям производительности сервер TensorFlow по умолчанию не включает какой-либо протокол авторизации и отправляет сообщения в незашифрованном виде. Он принимает соединения откуда угодно и выполняет отправленные ему графы без каких-либо проверок. Поэтому, если вы запустите tf.train.Server в своей сети, любой, кто имеет доступ к этой сети, сможет выполнить произвольный код с привилегиями процесса, на котором запущен tf.train.Server.

При запуске распределённого TensorFlow необходимо изолировать сеть, в которой находится кластер. Облачные провайдеры предоставляют инструкции по настройке изолированных сетей, которые иногда называют «виртуальное частное облако». Подробные сведения см. в инструкциях для GCP и AWS.

Обратите внимание, что tf.train.Server отличается от сервера, созданного tensorflow/serving (по умолчанию двоичный файл называется ModelServer). По умолчанию ModelServer также не имеет встроенного механизма аутентификации. Подключение его к ненадёжной сети позволяет любому пользователю этой сети запускать известные ModelServer-у графы. Это означает, что злоумышленник может запустить графы с использованием ненадёжных входных данных, как описано выше, но он не сможет выполнять произвольные графы. Можно безопасно открыть ModelServer непосредственно для ненадёжной сети, но только если графы, которые он использует, были тщательно проверены на безопасность.

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

Уязвимости в TensorFlow

TensorFlow представляет собой большую и сложную систему. Она также зависит от большого набора сторонних библиотек (например, numpy, libjpeg-turbo, анализаторы PNG, protobuf). Возможно, TensorFlow или его зависимые библиотеки содержат уязвимости, которые позволят вызвать неожиданное или опасное поведение с помощью специально созданных входных данных.

Что такое уязвимость?

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

FileWriter, записывающий файл, не является неожиданным поведением и, следовательно, не является уязвимостью в TensorFlow. А MatMul, позволяющий выполнение произвольного двоичного кода, является уязвимостью.

С точки зрения системы это более тонко. Например, легко заставить процесс TensorFlow попытаться выделить больше памяти, чем доступно, указав вычислительный граф, содержащий непродуманную операцию tf.tile. В этом случае TensorFlow должен корректно завершиться (в Python он вызовет исключение, или вернёт ошибку Status на C++). Однако, если окружающая система не ожидает такой возможности, такое поведение может быть использовано для атаки типа «отказ в обслуживании» (или хуже). Поскольку TensorFlow ведёт себя правильно, это не уязвимость в TensorFlow (хотя это было бы уязвимостью…). Некорректное поведение TensorFlow

Как правило, некорректным поведением TensorFlow считается доступ к памяти, которая ему не принадлежит, или некорректное завершение работы. Ошибки в TensorFlow, которые приводят к такому поведению, представляют собой уязвимость.

Обработка входных данных

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

Сообщение об уязвимостях

Пожалуйста, отправляйте сообщения о любых проблемах, связанных с безопасностью, на адрес security@tensorflow.org. Это письмо будет доставлено небольшой группе безопасности. Ваше письмо будет подтверждено в течение одного рабочего дня, и вы получите более подробный ответ на ваше письмо в течение 7 дней с указанием следующих шагов по обработке вашего отчета. Для критических проблем вы можете зашифровать свой отчет (см. ниже).

Также, пожалуйста, включите следующую информацию вместе с вашим отчетом:

  • Ваше имя и принадлежность (если есть).
  • Описание технических деталей уязвимости. Очень важно сообщить нам, как мы можем воспроизвести ваши выводы.
  • Объяснение того, кто может использовать эту уязвимость и что они получают при этом — напишите сценарий атаки. Это поможет нам быстро оценить ваш отчет, особенно если проблема сложная.
  • Является ли эта уязвимость публичной или известной третьим лицам. Если да, предоставьте подробности.

Если вы считаете, что существующая (публичная) проблема связана с безопасностью, отправьте электронное письмо на security@tensorflow.org. В письме должен быть указан идентификатор проблемы и краткое описание того, почему она должна быть обработана в соответствии с этой политикой безопасности.

После получения отчета TensorFlow использует следующий процесс раскрытия информации:

  • Когда отчет получен, мы подтверждаем проблему и определяем ее серьезность.
  • Если нам известны конкретные сторонние службы или программное обеспечение на основе TensorFlow, требующие смягчения последствий перед публикацией, эти проекты будут уведомлены.
  • Подготавливается консультативное сообщение (но не публикуется), в котором подробно описывается проблема и шаги по ее устранению.
  • По возможности готовятся исправления для последнего незначительного выпуска двух последних основных выпусков, а также основной ветки. Мы постараемся зафиксировать эти исправления как можно скорее и как можно ближе друг к другу.
  • Публикуются патчи для всех исправленных выпущенных версий, отправляется уведомление на discuss@tensorflow.org, и публикуется консультативное сообщение.

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

Шифровальный ключ для security@tensorflow.org

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

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/microsoft-TensorFlow-DirectML.git
git@api.gitlife.ru:oschina-mirror/microsoft-TensorFlow-DirectML.git
oschina-mirror
microsoft-TensorFlow-DirectML
microsoft-TensorFlow-DirectML
directml