Исследователь безопасности рассказал о том, как работают так называемые «атаки масштабирования изображений». Он смог скрыть в одной картинке совершенно иное изображение, которое проявляется при изменении размера исходника.
Суть самой атаки заключается в том, что злоумышленник создает вредоносное входное изображение и скрывает его внутри другой картинки. Когда она загружается на сервер, то размер изображения меняется, и сервер принимает решения уже на основе скрытой целевой картинки.
Исследователь использовал два изображения. Слева находится исходник, а справа —модифицированная картинка.
При ближайшем рассмотрении на втором изображении видны точки, но в уменьшенном варианте их невозможно заметить.
Когда модифицированное изображение загружается и изменяется с помощью OpenCV с настройками по умолчанию, оно превращается в совершенно иную картинку.
Исследователь задействовал Husky AI. Данный алгоритм использует OpenCV.
Он разместил код на Github. Для запуска использовался Google Colab.
См. также:
vesper-bot
Я так понимаю, что точки находятся в вершинах некоей сетки, откуда берет цвета алгоритм сжатия по умолчанию?
DesertFlow
В OpenCV при изменении размера по умолчанию используется билинейная интерполяция. Соответственно, можно легко посчитать какие должны быть цвета в 4 точках, откуда она берет значения, чтобы в результате получился нужный цвет пикселя в итоговом изображении. Это будет работать при изменении на конкретный размер, правда. Все это очевидно и лежит на поверхности, забавно что кто-то додумался до такого использования)
Sdima1357
Нет, там просто выбраны точки с грида в предопределенных позициях. Посмотрите внимательнее на правую картинку во втором ряду с зумом. Новость не стоит выеденного яйца, потому что это работает только для конкретного способа выборки в опенсиви. Любая нормальная интерполяция даст нормальную, уменьшенную картинку. В том числе и квадратичная и билинейная. А эта выборка nearest. Или билинейная, но точки интерполяции попадают точно в центры пихелей и вес соседей нулевой.Просто казус.
Назвать эту интерполяцию -умной это изнасилование журналиста
DesertFlow
Nearest не является алгоритмом по умолчанию в OpenCV.
Ха-ха, посмотрел исходники на гитхабе (там код для генерации таких картинок):
"is often the default algorithm" )). Да, вы правы, используется nearest. Это еще сильнее упрощает дело.
В новости неточность. Вместо "с помощью OpenCV с настройками по умолчанию" должно быть "c настройками OpenCV, не являющимися по умолчанию, но иногда включаемым на сервере для ускорения расчетов". Хотя мне сложно представить, чтобы кто-то для изменения размера использовал в продакшете nearest. Уж больно видны в нем артефакты в большинстве случаев. Это чисто технический метод для редких служебных целей. А так для уменьшения размера в OpenCV есть специальный метод INTER_AREA, по скорости сравнимый с NEAREST, но убирающий муар. Если уж классическая билинейная интерполяция (которая как раз используется по умолчанию) не устраивает. Не говоря о более качественных кубической и Lanczos интерполяциях.
Sdima1357
Вот видите, а я даже не смотрел код, а предположил неарест.Opencv предполагает некий ненулевой уровень знаний пользователя. Перед прореживающей выборкой нужно сделать хотя бы Гаусс сглаживание. То есть новость ни о чем.