• XSS.stack #1 – первый литературный журнал от юзеров форума

Простой скантайм анализатор Python проектов на скрытый малварь

oceanaric

Developer
Пользователь
Регистрация
18.12.2022
Сообщения
134
Реакции
132
Гарант сделки
8
Депозит
1.11 Ł
После того, как я написал статью "Стоит ли слепо доверять открытым исходникам? | Should we blindly trust open source?", я понял, что большинство бекдоров на питоне предсказуемы, но хорошо запрятаны в глубины кода.
Для предварительного анализа проекта и выявления подозрительных вызовов я сделал небольшую программу. Код сильно не шлифовал, главное, что работает (хотя готов принять предложения по улучшению) :).



Зависимости: -



Алгоритм работы:
  1. Итерация по проекту и обработка каждого .py файла
  2. Парсинг кода
  3. Сбор всех подозрительных импортов/вызовов, base64 импортов/вызовов, internet импортов/вызовов
  4. Вывод соответственно конфигу



Python:
settings = {
    'BLACKLISTED_IMPORTS': ('os', 'subprocess', 'pickle', 'cPickle', 'marshal'),  # Trigger-imports
    'BLACKLISTED_FUNCTIONS': ('eval', 'exec', 'system', 'execfile'),  # Trigger-functions
    'BASE64': False,  # Does the project need to have BASE64 encoding? (is often used to encode stolen data)
    'INTERNET_ACCESS': False,  # Does the project need to have access to the Internet?
}

BLACKLISTED_BASE64_PACKAGES = ('base64',)  # which packages are considered base64
BLACKLISTED_INTERNET_PACKAGES = (
    'requests', 'httpx', 'urllib', 'aiohttp', 'http.client', 'socket', 'sockets',
    'websocket', 'websockets', 'treq', 'httpie')  # which packages are considered internet

Значения конфига:
  • settings.BLACKLISTED_IMPORTS - пакеты, импорт который будет считаться подозрительным (по умолчанию включены опасные пакеты, с помощью которых можно нанести вред системе)
  • settings.BLACKLISTED_FUNCTIONS - функции, импорт который будет считаться подозрительным (по умолчанию включены опасные пакеты, с помощью которых можно нанести вред системе)
  • settings.BASE64 - должен ли BASE64 присутствовать в коде (к примеру чекер сидок, BASE64 там вряд-ли должен быть, значит значение False); пакеты для проверки берутся с BLACKLISTED_BASE64_PACKAGES
  • settings.INTERNET_ACCESS - должен ли проект использовать интернет (); пакеты для проверки берутся с BLACKLISTED_INTERNET_PACKAGES, по желанию можете добавить туда selenium и остальные потенциально опасные библиотеки



Этот анализатор обнаружил бы подозрительные вызовы во всех проектах из примеров статьи "Стоит ли слепо доверять открытым исходникам? | Should we blindly trust open source?". Если у вас есть примеры посильнее, с которыми он не справляется, но это возможно сделать в скантайме, буду рад взглянуть.

Долго сомневался, стоит ли его выкладывать, но все таки какое-то полезное применение найти можно. Возможно, придется подредачить конфиг под свои нужды.



1.jpg
2.jpg
 

Вложения

  • python_project_analyser.zip
    5.2 КБ · Просмотры: 8
Твой сканер не ловит динамику. Типа importlib.import_module('ty.lox'). А злой кулхакер наверное именно её будет использовать для зловредного импорта. Я вообще не представляю, как её можно отловить, вроде бы без запуска скрипта никак. Ещё твой сканер не ловит загрузку dll. Создание на лету вредоносного кода на vbs/powershell с последующим запуском и т.п. Написать рабочий сканер явно не так просто, как ты себе представляешь.
 
importlib.import_module('ty.lox').
Именно подобное выражение он может поймать после добавления пары строк кода, его точно так же парсит ast.
Но в общем - да, это скантайм, сомневаюсь что он может ловить всю динамику без предварительно указанного паттерна.

Ещё твой сканер не ловит загрузку dl
Можно добавить ctypes (или через что ты грузишь) в конфиг

Написать рабочий сканер явно не так просто, как ты себе представляешь.
Ну, относительно. Настоящий сканер - да, но этот написан за пару часов, главное что справляется со своими обязанностями и легко дорабатывается.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх