Осторожность при работе с входными строками и данными большого объёма
При тщательном экранировании и дезинфекции входных строк, проверке размера входящих больших двоичных объектов (blob) и т. д. очень легко написать небезопасные программы на Python. Даже безопасный код на Python может стать уязвимым из-за ошибки в интерпретаторе Python или в используемой библиотеке Python (например, этой).
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 представляет собой большую и сложную систему. Она также зависит от большого набора сторонних библиотек (например, 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 использует следующий процесс раскрытия информации:
Прошлые рекомендации по безопасности перечислены ниже. Мы благодарим репортеров за выявление проблем безопасности, хотя мы сохраняем ваше имя в тайне, если вы этого потребуете.
security@tensorflow.org
Если ваше раскрытие информации является чрезвычайно конфиденциальным, вы можете выбрать шифрование своего отчета с помощью приведенного ниже ключа. Пожалуйста, используйте это только для критически важных отчетов по безопасности.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )