Быть начеку

10 января 2023
Быть начеку

В нашем сегодняшнем дайджесте вы узнаете, как при обычном использовании PyPI поймать зловред. Ещё мы расскажем о ресурсе, собравшем нетривиальные примеры кода, подведём итоги 2022 года для urllib3 и выясним, как добавить настоящей песочнице интерактивности.

Предновогодняя атака на PyTorch

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

Тот, кто спланировал атаку хорошо знал особенности PyPI. Вредоносный пакет torchtriton был загружен с тем же именем, которое использует PyTorch nightly. Система проиндексировала его и дала больший приоритет, чем легитимному пакету. Таким образом все, кто загрузил PyTorch-nightly в Linux через pip в период с 25 декабря 2022 г. по 30 декабря 2022 г., получили в нагрузку вредоносный бинарник triton. Зловред ворует данные и загружает на подконтрольный сервер. Такая атака была давным-давно предсказана и досконально описана в Issue #5045 и Issue #8606. Но логика работы PyPI осталась неизменной.

Чтобы проверить, был ли ваш сервер скомпрометирован, выполните команду:

python3 -c "import pathlib;import importlib.util;s=importlib.util.find_spec('triton'); affected=any(x.name == 'triton' for x in (pathlib.Path(s.submodule_search_locations[0] if s is not None else '/' ) / 'runtime').glob('*'));print('You are {}affected'.format('' if affected else 'not '))"

В блоге PyTorch указан хэш вредоносного бинарника и данные о его поведении:

SHA256(triton)= 2385b29489cd9e35f92c072780f903ae2e517ed422eae67246ae50a5cc738a0e

С того момента, как вредоносный код был обнаружен, пакет с «сюрпризом» загрузили примерно 3 тысячи раз. Но за то же время стабильный билд PyTorch загрузили 1.5 млн раз, значит, атака была не масштабной? Даже от такой скромной ущерб может быть существенным.

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

Не верь глазам своим

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

Помощником в этом может стать проект wtfpython, доступный как на английском, так и частично на русском языке. Этот мануал даже доступен в виде устанавливаемого пакета PyPI:

$ pip install wtfpython -U
$ wtfpython

В нём много интересных примеров, которые рекомендуется изучать, читая код и пытаясь предсказать результат его выполнения. А потом посмотреть на фрагменты вывода.

Даже опытные разработчики удивятся результатам такой проверки знаний. Накопленный опыт вызывает эффект «замыливания глаз», знакомый любому техническому писателю или автору контента. Ещё и скрытые от внешних глаз механизмы языка могут вести себя необычно. Так что вы наверняка откроете для себя что-то новое и сможете взглянуть на код с другого ракурса.

В ожидании urllib3 v2

Стандартная библиотека Python хороша, но всё же лишена многих нужных функций. Если вам потребовалось использовать удобный и потокобезопасный HTTP-клиент, то скорее всего возьмёте urllib3 или requests. Пакет urllib3 настолько популярен, что в сутки скачивается более 10 млн раз, а за 2022 год количество загрузок превысило 3 млрд раз.

Такие крупные Open-source проекты требуют кропотливого труда множества людей. Делать это на чистом энтузиазме, разумеется, невозможно. Добровольные пожертвования на проект в 2022 году составили $26 615. Наибольший спонсорский взнос в размере $13 000 был сделан фондом Spotify FOSS. Из собранных средств $6 500 были распределены между мейнтейнерами и участниками сообщества. $18 827 остаются на открытом коллективном балансе проекта и будут использованы для будущего развития urllib3.

В ноябре 2022 года вышел urllib3 v2.0.0a1. Кодовую базу оптимизировали для Python 3.7+, удалили поддержку старых версий. Полный список изменений есть в репозитории проекта на GitHub.

Важнейшей задачей при разработке второй версии было сохранение 99% обратной совместимости. Обновление не должно вызвать никаких проблем у большинства пользователей. Надеемся, что у разработчиков это получится и мы увидим релиз v2.0.0 в первой половине 2023 года.

Интерактивная карта на песке

Вернёмся на 13 лет назад. Microsoft представила Project Natal, более известный как Kinect. Революционный игровой контроллер, считывающий в трехмерном пространстве движения и позы игрока. В его основе два датчика глубины и цветная камера. Вместе они позволяют получать и изображения, и карты глубины. Первая версия контроллера обладала низкой точностью и разрешением, что существенно улучшилось в следующей версии. Увы, но добиться достаточной точности в играх так и не удалось, что и послужило причиной снятия с производства в 2017 году.

Но это вовсе не поставило крест на альтернативном использовании Kinect. Что только не делали на его основе — от музыкального инструмента и диджейского пульта до 3D-сканера (что оказалось в 200 раз дешевле промышленного устройства). Там, где не требовалась высокая скорость движений, Kinect прекрасно справлялся с построением карт глубин и это привлекло к нему интерес множества разработчиков, в том числе и военных.

Когда мы говорим слово «песочница», то чаще всего используем его в переносном смысле. Если объединить настоящую песочницу, проектор и Kinect, получится проект Magic-Sand, настоящий бриллиант мира дополненной реальности. Его часто демонстрируют на выставках и публичных мероприятиях.

 

Magic-Sand песочница на выставке CSEO Apollo-Artemis
Magic-Sand песочница на выставке CSEO Apollo-Artemis

Казалось бы, забавная игрушка, красивая демонстрация, не более. Но на её базе создали вполне серьёзную систему планирования с учётом особенностей рельефа. Проект CombatViewer объединяет опыт Magic-Sand со слоем карты, а также лазерной указкой для перетаскивания объектов.

Демонстрация перемещения объектов по песочнице лазерной указкой
​​​​Демонстрация перемещения объектов по песочнице лазерной указкой

В качестве стека использовался Python вместе с библиотекой машинного зрения OpenCV и интерфейсом на Tkinter. Автор проекта опубликовал небольшую статью на Medium, а готовая версия в настоящий момент активно используется в Бразилии.

Митапы

Онлайн

Python meetup

29 марта 2023

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

Теперь следить за митапами Evrone стало удобнее. В Telegram-канале Evrone meetups мы выкладываем анонсы с подробными описаниями докладов, а также студийные записи после мероприятий. А ещё, у нас можно выступить, мы поможем оформить вашу экспертизу в яркое выступление. Подписывайтесь и пишите @andrew_aquariuss, чтобы узнать подробности.

Регистрация

Вакансии

Удаленка / Офис

Evrone 

 

Мы рады новым Python-разработчикам. Удалённая работа с первого дня, помощь в подготовке выступлений на профессиональных конференциях, поощрение и оплата участия в Open-source проектах. Прозрачный способ увеличить грейд через обучение и проверку навыков под контролем ментора. Здесь есть понимание как организовать разработку комфортно и эффективно. Присоединяйтесь!

Подробнее

Подписаться
на Digest →
Важные новости и мероприятия без спама
Технологии которыми вы владеете и которые вам интересны
Ваш адрес электронной почты в безопасности - вот наша политика конфиденциальности.