The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

В каталоге Python-пакетов PyPI выявлено 10 вредоносных библиотек

15.09.2017 21:30

Центр национальной компьютерной безопасности Словакии опубликовал уведомление о выявлении 10 вредоносных пакетов в каталоге PyPI. Имена вредоносных пакетов выбраны похожими на популярные Python-библиотеки, но отличаются незаметными сразу деталями. Например, вредоносные пакеты urllib и urlib3 камуфлируют под известную библиотеку urllib3. Примечательно, что используемый при создании данных модулей метод тайпсквотинга известен уже давно, в том числе в PyPI ранее уже размещался и удалялся вредоносный пакет с именем urllib, но какой-либо защиты от повторной регистрации предпринято не было.

Распространяющие вредоносные пакеты злоумышленники рассчитывают на невнимательность разработчиков, которые по недосмотру устанавливают фиктивные пакеты (например, более логичным выглядит поставить urllib и bzip вместо настоящих urllib3 и bzip2). Периодически после жалоб пользователей вредоносные пакеты вычищаются из PyPI, но затем добавляются вновь. Выявленная порция вредоносных пакетов была помещена в PyPI в июне и за несколько месяцев данные модули по ошибке были задействованы в различных новых приложениях.

Вредоносные пакеты включают в себя копию кода оригинальной библиотеки, но отличаются модифицированным установочным скриптом setup.py. В момент установки модуля активируется вредоносная вставка, которая отправляет сведения о подставном пакете, пользователе и хосте на внешний сервер. Например, при установке пакета urllib-1.21.1 пользователем root на хосте testmachine, будет отправлена строка "Y:urllib-1.21.1 root testmachine", которая дополнительно маскируется при помощи операции XOR и кодирования методом base64.

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

Список подставных модулей:

  • acqusition (загружен 2017-06-03 01:58:01, подражает acquisition)
  • apidev-coop (загружен 2017-06-03 05:16:08, подражает apidev-coop_cms)
  • bzip (загружен 2017-06-04 07:08:05, подражает bz2file)
  • crypt (загружен 2017-06-03 08:03:14, подражает crypto)
  • django-server (загружен 2017-06-02 08:22:23, подражает django-server-guardian-api)
  • pwd (загружен 2017-06-02 13:12:33, подражает pwdhash)
  • setup-tools (загружен 2017-06-02 08:54:44, подражает setuptools)
  • telnet (загружен 2017-06-02 15:35:05, подражает telnetsrvlib)
  • urlib3 (загружен 2017-06-02 07:09:29, подражает urllib3)
  • urllib (загружен 2017-06-02 07:03:37, подражает urllib3)

Для проверки наличия данных пакетов можно воспользоваться командой:


   pip list --format=legacy | egrep '^(acqusition|apidev-coop|bzip|crypt|django-server|pwd|setup-tools|telnet|urlib3|urllib) '

После отправки уведомления администраторам PyPI выявленные модули были немедленно удалены. Уже установленные пользователями пакеты требуют ручного удаления. При этом должных мер по предотвращению появления подобных вредоносных моделей в PyPI не принято. Например, уже после уведомления энтузиасты легко смогли разместить фиктивный модуль urllib2, который находится в PyPI и в настоящий момент. Кроме urllib2 было размещено ещё 20 пакетов с именами подобными random, codecs, smtplib и т.п. В итоге, только для одного urllib2 зафиксировано 1144 попыток установки за день. Всего 20 подставных модулей за несколько дней попытались установить 6861 раз. Подобная статистика в целом близка к результатам, полученным в результате прошлогоднего эксперимента по тайпсквотингу в PyPI.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Применение тайпсквоттинга для распространения вредоносных модулей NPM, PyPI и Gems
  3. OpenNews: Незащищённость NPM к атакам по внедрению вредоносных модулей-червей
  4. OpenNews: Более половины npm-пакетов могли быть скомпрометированы из-за ненадёжных паролей доступа
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/47211-pypi
Ключевые слова: pypi, python
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (23) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 21:43, 15/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Было бы им неплохо научиться в алиасы: я бы поставил setup-tools вместо setuptools.
    Но и в проверку подлинности, кончено.
     
  • 1.4, Аноним (-), 22:50, 15/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Там разве нет премодерации?
     
     
  • 2.5, Аноним (-), 23:45, 15/09/2017 [^] [^^] [^^^] [ответить]  
  • +14 +/
    Зачем? Это ж её сколько времени ждать придётся! А продакшн не терпит.
     
     
  • 3.23, . (?), 21:10, 16/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > А продакшн не терпит.

    Смузи не ждет!

     
  • 2.15, Борщдрайвен бигдата (?), 10:28, 16/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Там разве нет премодерации?

    На гитхабе разве нет премодерации?

     

  • 1.8, Аноним (-), 05:36, 16/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    > pip

    Кто это использует? Пользователи windows?

     
     
  • 2.10, Крутой аноним (?), 07:43, 16/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Кто это использует? Пользователи windows?

    Например пользователи ubuntu, потому что замечательные разработчики
    даже не запускают пакеты перед тем как их запаковать и выложить.

     
  • 2.17, Аноним (-), 11:45, 16/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Пользователи Python
     

  • 1.9, Аноним (-), 07:04, 16/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >В момент установки модуля активируется вредоносная вставка, которая отправляет сведения о подставном пакете, пользователе и хосте на внешний сервер.

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

     
  • 1.11, Крутой аноним (?), 07:47, 16/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Центр национальной компьютерной безопасности Словакии опубликовал (http://www.nbu.gov.sk/skcsirt-sa-20170909-pypi/)
    > логичным выглядит поставить urllib и bzip вместо настоящих urllib3 и bzip2).
    > Периодически после жалоб пользователем вредоносные пакеты вычищаются из PyPI, но затем
    >    pip list --format=legacy | egrep '^(acqusition|apidev-coop|bzip|crypt|django-server|pwd|setup-tools|telnet|urlib3|urllib)'

    Какой-то regex неправильный, только что говорилось что urllib3 и тут же
    дается regex под который он подходит, добавьте тогда уж

    egrep -v '^(urllib3|bzip2)'

    в pipe

     
     
  • 2.12, Аноним (-), 08:12, 16/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > pip list --format=legacy | egrep '^(acqusition|apidev-coop|bzip|crypt|django-server|pwd|setup-tools|telnet|urlib3|urllib)'
    > Какой-то regex неправильный, только что говорилось что urllib3 и тут же
    > дается regex под который он подходит, добавьте тогда уж

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

    Hint: Правильный  urllib3  с двумя буквами "l" (urllib3), а в регекспе с одной (urlib3).

     
     
  • 3.14, Аноним (-), 10:28, 16/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Регулярка ^urllib матчит urllib3.
     
     
  • 4.19, gavv (?), 15:06, 16/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Там пробел после скобки закрывающей, получается "^urllib ".
     

  • 1.16, Борщдрайвен бигдата (?), 10:37, 16/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Выскажу непопулярное мнение.
    Тайпсквоттинг имён пакетов — проблема пользователей, а не хранилища. Мы это уже проходили с npmjs, а с DNS-тайпсквоттингом уже не одно десятилетие живём.

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

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

     
  • 1.18, antares0 (?), 14:50, 16/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Центр национальной компьютерной безопасности Словакии

    Вот самое странное в новости, что ее источник именно эта всемирно известная организация:(

     
  • 1.21, mimocrocodile (?), 16:06, 16/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ожидал "установка пакетов только из дистрибутива баттл", аноны огорчают
     
  • 1.24, Аноним (-), 01:55, 17/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Линукс безопасен благодаря честным хакерам, которые выкладывают безопасные вирусы =)
    ЗЫ: могли бы сразу несколько имен для пакета регистрировать., ну или рейтинг закачек хотя бы показывать
     
     
  • 2.25, Аноним (-), 16:54, 17/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Рейтинг и так есть. Суть же в том, что пакеты через браузер качают чуть реже чем никогда, всё из setup.py и pip.
     

  • 1.26, Аноним (-), 02:37, 18/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    "Я слышал много д---льных рэперских кличек, но Энди Картрайт..." (с)

    Блин, более невменяемые названия пакетов просто сложно придумать.

     
  • 1.27, Аноним (-), 19:18, 18/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    именно поэтому следует ставить из гитхаба, а не из pip
     
     
  • 2.28, Andrey Mitrofanov (?), 00:17, 19/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > именно поэтому следует ставить из гитхаба, а не из pip

    Тонко. Но ты ж знал[I]? http://www.opennet.ru/opennews/art.shtml?num=47216

     

  • 1.29, Аноним (-), 14:12, 23/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не работает:



    pip list --format=legacy | egrep '^(acqusition|apidev-coop|bzip|crypt|django-server|pwd|setup-tools|telnet|urlib3|urllib) '

    Usage:  
      pip list [options]

    no such option: --format



     
     
  • 2.30, Andrey Mitrofanov (?), 19:40, 23/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Не работает:
    > no such option: --format
    >

    [CODE]pip install --upgrade pip[/CODE]  -- https://duckduckgo.com/?q=pip+update+pip&t=ffab&ia=qa

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру