Research suggestion: llm4pyc
Люди, сталкивающиеся с pyc-файлами для Python, знают, что начиная с 3.9 появляются значительные трудности с декомпиляцией. Об инструментах, частично помогающих в этом вопросе, мы писали в ESCalator.
Недавно в тематических каналах натолкнулся на LLM4Decompile, проект, который проверяет гипотезу восстановления исходников из ассемблера, с главной целью получить запускаемый исходный код.
Байт-код виртуальной машины CPython в целом проще, чем x86/x86-64. У CPython главная проблема заключается в значительных изменениях байт-кода между версиями. Данную проблему подсвечивает rocky, создатель декомпиляторов uncompyle6 и decompyle3 и серии других тулзов для Python.
К слову, ChatGPT, Claude, DeepSeek худо-бедно справляются с этой историей, но всё равно неидеально.
Предлагаю желающим сколлабиться в рамках реализации схожего с LLM4Decompile ресёрча, но уже в отношении pyc-файлов. Сам ресёрч выглядит достаточно линейным, но его научную новизну легко обосновать.
Предлагаю выпустить по этой теме 1-2 статьи Crossref/ВАК. Также для тех, кто возьмет эту тему в качестве курсовой или диплома, готов дополнительно помочь с сопровождением, включая поиск источников, наполнение и ревью.
Ищу пару человек. Критерий: вы сталкивались с pyc-файлами и вполне уверенно пишете на Python.
Для связи: @hexadec1mal
#ресерч #python #llm4pyc
@disasm_me_ch
Люди, сталкивающиеся с pyc-файлами для Python, знают, что начиная с 3.9 появляются значительные трудности с декомпиляцией. Об инструментах, частично помогающих в этом вопросе, мы писали в ESCalator.
Недавно в тематических каналах натолкнулся на LLM4Decompile, проект, который проверяет гипотезу восстановления исходников из ассемблера, с главной целью получить запускаемый исходный код.
Байт-код виртуальной машины CPython в целом проще, чем x86/x86-64. У CPython главная проблема заключается в значительных изменениях байт-кода между версиями. Данную проблему подсвечивает rocky, создатель декомпиляторов uncompyle6 и decompyle3 и серии других тулзов для Python.
К слову, ChatGPT, Claude, DeepSeek худо-бедно справляются с этой историей, но всё равно неидеально.
Предлагаю желающим сколлабиться в рамках реализации схожего с LLM4Decompile ресёрча, но уже в отношении pyc-файлов. Сам ресёрч выглядит достаточно линейным, но его научную новизну легко обосновать.
Предлагаю выпустить по этой теме 1-2 статьи Crossref/ВАК. Также для тех, кто возьмет эту тему в качестве курсовой или диплома, готов дополнительно помочь с сопровождением, включая поиск источников, наполнение и ревью.
Ищу пару человек. Критерий: вы сталкивались с pyc-файлами и вполне уверенно пишете на Python.
Для связи: @hexadec1mal
#ресерч #python #llm4pyc
@disasm_me_ch
Telegram
ESCalator
Инструменты для работы с Python 😦
Злоумышленники не стесняются использовать Python для своих целей. LazyStealer, упакованная PyInstaller, Python-бэкдор в ShadowPad и модули для Pupy RAT тому доказательство. Кроме того, задачи на снятие пакеров с дальнейшим…
Злоумышленники не стесняются использовать Python для своих целей. LazyStealer, упакованная PyInstaller, Python-бэкдор в ShadowPad и модули для Pupy RAT тому доказательство. Кроме того, задачи на снятие пакеров с дальнейшим…
🔥5
Insecure Firewall 😖
Со мной несколько раз поделились проектом Supply-Chain Firewall от команды Datadog. Делюсь своими мыслями и я :)
Проект в своей ридми заявляет следующее (ниже перевод):
Supply-Chain Firewall — это инструмент командной строки, предназначенный для предотвращения установки вредоносных пакетов из PyPI и npm. В первую очередь он рассчитан на разработчиков, чтобы защитить их рабочие станции от компрометации в результате атак на цепочку поставок.
Основная цель Supply-Chain Firewall — полностью (на 100 %) блокировать установку всех известных вредоносных пакетов, охватываемых его источниками данных.
В качестве источника они используют публичный датасет Datadog и фиды OSV.dev. Принцип заключается в том, что вы будете оборачивать команды установки пакетов с помощью pip/poetry/npm — в их тулзу:
В свою очередь
1. Проверяет версию пакетного менеджера (
2. Добавляет к оригинальной команде параметры, отвечающие за прогон без установки — режим dry-run (место в логике для npm, pip, poetry).
3. Проверяет список пакетов-кандидатов на установку в фидах.
Что делает прогон без установки?
Вроде бы из названия понятно, что пакетный менеджер как-то соберет зависимости, но не установит их. Но что будет с пакетами, содержащими preinstall- и postinstall-логику(там обычно содержатся проверки окружения, доустановка необходимых зависимостей, которые невозможно указать в манифесте, компиляция сорсов, etc.) ...
У dry-run гипотетически возможны два варианта поведения:
1. Пытается установить все пакеты во временное виртуальное окружение, запуская все установочные скрипты. Для SCFW это плохо, так как подавляющий пласт троянов исполняются как раз в install-time.
2. Игнорирует/ругается на/выкидывает исключение на скрипты. Это более безопасный, но страдающий в плане полноты зависимостей вариант.
Давайте поставим
Получается, что dry-run в случае с Python-пакетами запускает код из setup.py, вместе со всей вредоносной install-time-активностью💀
SCFW задумывается как утилита для пользователей, которые хотят убедиться в безопасности выполняемой pip/poetry/npm-команды и запускают команду на своем компьютере без обязательной изоляции окружения. К сожалению, с данной задачей она не справится. Лучше взять
Хочу напомнить важное правило: do your own research. Будьте любознательны, даже если разработчик решения убеждает, что всё под контролем😊
#pypi #npm #ti #ресерч
@disasm_me_ch
Со мной несколько раз поделились проектом Supply-Chain Firewall от команды Datadog. Делюсь своими мыслями и я :)
Проект в своей ридми заявляет следующее (ниже перевод):
Supply-Chain Firewall — это инструмент командной строки, предназначенный для предотвращения установки вредоносных пакетов из PyPI и npm. В первую очередь он рассчитан на разработчиков, чтобы защитить их рабочие станции от компрометации в результате атак на цепочку поставок.
Основная цель Supply-Chain Firewall — полностью (на 100 %) блокировать установку всех известных вредоносных пакетов, охватываемых его источниками данных.
В качестве источника они используют публичный датасет Datadog и фиды OSV.dev. Принцип заключается в том, что вы будете оборачивать команды установки пакетов с помощью pip/poetry/npm — в их тулзу:
scfw run pip install hello_world
scfw run poetry install hello_world
scfw run npm install hello_world
В свою очередь
scfw
:1. Проверяет версию пакетного менеджера (
npm >= 7.0.0
, pip >= 22.2
, poetry >= 1.7.0
).2. Добавляет к оригинальной команде параметры, отвечающие за прогон без установки — режим dry-run (место в логике для npm, pip, poetry).
3. Проверяет список пакетов-кандидатов на установку в фидах.
Что делает прогон без установки?
Вроде бы из названия понятно, что пакетный менеджер как-то соберет зависимости, но не установит их. Но что будет с пакетами, содержащими preinstall- и postinstall-логику
У dry-run гипотетически возможны два варианта поведения:
1. Пытается установить все пакеты во временное виртуальное окружение, запуская все установочные скрипты. Для SCFW это плохо, так как подавляющий пласт троянов исполняются как раз в install-time.
2. Игнорирует/ругается на/выкидывает исключение на скрипты. Это более безопасный, но страдающий в плане полноты зависимостей вариант.
Давайте поставим
yandex-baobab-api
— этот пакет вызывает исключение при попытке его установить. Итог:(testvenv) $ scfw run pip install yandex-baobab-api
Collecting yandex-baobab-api
Using cached yandex-baobab-api-66.0.3.tar.gz (1.1 kB)
Preparing metadata (setup.py) ... done
Building wheels for collected packages: yandex-baobab-api
Building wheel for yandex-baobab-api (setup.py) ... error
error: subprocess-exited-with-error
...
File "/tmp/pip-install-.../yandex-baobab-api_.../setup.py", line 7, in run
raise RuntimeError("You are trying to install a stub package yandex-baobab-api. Maybe you are using the wrong pypi?")
RuntimeError: You are trying to install a stub package yandex-baobab-api. Maybe you are using the wrong pypi?
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for yandex-baobab-api
Running setup.py clean for yandex-baobab-api
Failed to build yandex-baobab-api
ERROR: Failed to build installable wheels for some pyproject.toml based projects (yandex-baobab-api)
Получается, что dry-run в случае с Python-пакетами запускает код из setup.py, вместе со всей вредоносной install-time-активностью
SCFW задумывается как утилита для пользователей, которые хотят убедиться в безопасности выполняемой pip/poetry/npm-команды и запускают команду на своем компьютере без обязательной изоляции окружения. К сожалению, с данной задачей она не справится. Лучше взять
osv-scanner
, обернуть в контейнер и сканировать зависимости с его помощью.Хочу напомнить важное правило: do your own research. Будьте любознательны, даже если разработчик решения убеждает, что всё под контролем
#pypi #npm #ti #ресерч
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁3🤬1
pipask — finally, a secure firewall? 😎
Недавно я писал о проекте Supply-Chain Firewall, задача которого блокировать установку вредоносных пакетов. К сожалению, в текущей реализации оказался не очень-то и безопасным.
Да, он проверяет наличие пакетов в базах Datadog и OSV.dev, но:
— В случае с pip/poetry делает это по факту установки, а значит вся вредоносная активность отработает.🐈
— Так как используются базы фидов, такой firewall неэффективен против не занесенных туда угроз.
Нашел упоминание другого проекта, который выглядит по функционалу более мощно, но работает только с пакетным менеджером pip — pipask. Он заявляется как drop-in замена pip, которая поддерживает только команды
— Отозван (yanked) ли пакет.В PyPI можно мягко скрыть релиз, если в нем, например, найдены уязвимости, что не позволит его скачать без прямого указания версии.
— Как давно были созданы релиз, который является целью установки, и сам проект в принципе.
— Есть ли известные уязвимости в базе OSV.dev.
— Какова репутация связанного с проектом GitHub/GitLab-репозитория.
— Какой статус проекта указал разработчик (Planning, Pre-Alpha, Alpha, Beta, Inactive будут причиной для тревоги, Production/Stable и Mature будут ок);
— Сколько скачиваний пакета было за последний месяц по данным PyPI Stats (до 100 будут красным знаком, до 5000 будут причиной тревоги);
— Какая лицензия проекта.
Для транзитивных зависимостей ведётся проверка только на известные уязвимости в базе OSV, без прочих репутационных.😎
Если pipask найдет проблемы с пакетом, он их подсветит и спросит решение пользователя, стоит ли его устанавливать:
Кстати, в🐈 .
———
Данное решение сейчас не поиспользуешь на проде, так как😊
Блин, а я попробую использовать pipask у себя на тачке, выглядит годно!
#pypi #supplychain #ti #ресерч
@disasm_me_ch
Недавно я писал о проекте Supply-Chain Firewall, задача которого блокировать установку вредоносных пакетов. К сожалению, в текущей реализации оказался не очень-то и безопасным.
Да, он проверяет наличие пакетов в базах Datadog и OSV.dev, но:
— В случае с pip/poetry делает это по факту установки, а значит вся вредоносная активность отработает.
— Так как используются базы фидов, такой firewall неэффективен против не занесенных туда угроз.
Нашел упоминание другого проекта, который выглядит по функционалу более мощно, но работает только с пакетным менеджером pip — pipask. Он заявляется как drop-in замена pip, которая поддерживает только команды
install
/download
/list
. pipask
имеет целый арсенал проверок:— Отозван (yanked) ли пакет.
— Как давно были созданы релиз, который является целью установки, и сам проект в принципе.
— Есть ли известные уязвимости в базе OSV.dev.
— Какова репутация связанного с проектом GitHub/GitLab-репозитория.
— Какой статус проекта указал разработчик (Planning, Pre-Alpha, Alpha, Beta, Inactive будут причиной для тревоги, Production/Stable и Mature будут ок);
— Сколько скачиваний пакета было за последний месяц по данным PyPI Stats (до 100 будут красным знаком, до 5000 будут причиной тревоги);
— Какая лицензия проекта.
Для транзитивных зависимостей ведётся проверка только на известные уязвимости в базе OSV, без прочих репутационных.
Если pipask найдет проблемы с пакетом, он их подсветит и спросит решение пользователя, стоит ли его устанавливать:
$ pipask install yandex-baobab-api
✔️ Resolving dependencies to install 0:00:00
! Checking repository popularity 0:00:00
✖️ Checking package download stats 0:00:00
! Checking package age 0:00:00
✔️ Checking known vulnerabilities 0:00:00
✔️ Checking release metadata 0:00:00
! Checking package license 0:00:00
Package check results:
[yandex-baobab-api==66.0.3]
! No repository URL found
✖️ Only 8 downloads from PyPI in the last month
! The release is older than a year: 472 days old
✔️ No known vulnerabilities found
✔️ No development status classifiers
! No license found in PyPI metadata - you may need to check manually
? Would you like to continue installing package(s)? [y/n]:
Кстати, в
pip
против install-time
троянов есть режим --only-binary
:all:
— он не позволит установиться пакету, если у него есть только source distribution
, требующий предварительной компиляции. Правда это может поломать пайплайны pipask
и scfw
, тоже могут работать в этом режиме, так как пробрасывают параметры в pip
.———
Данное решение сейчас не поиспользуешь на проде, так как
pipask
пока не поддерживает возможность игнорировать предупреждения. Но как замена pip-у в рамках ручного скачивания пакетов — огонь. Для того же jupyter labs
будет замечательно Блин, а я попробую использовать pipask у себя на тачке, выглядит годно!
#pypi #supplychain #ti #ресерч
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - feynmanix/pipask: Safer python package installs with audit and consent 𝘣𝘦𝘧𝘰𝘳𝘦 install
Safer python package installs with audit and consent 𝘣𝘦𝘧𝘰𝘳𝘦 install - feynmanix/pipask
1 10 4😁2