После того, как я написал статью "Стоит ли слепо доверять открытым исходникам? | Should we blindly trust open source?", я понял, что большинство бекдоров на питоне предсказуемы, но хорошо запрятаны в глубины кода.
Для предварительного анализа проекта и выявления подозрительных вызовов я сделал небольшую программу. Код сильно не шлифовал, главное, что работает (хотя готов принять предложения по улучшению)
.
Зависимости: -
Алгоритм работы:
Значения конфига:
Этот анализатор обнаружил бы подозрительные вызовы во всех проектах из примеров статьи "Стоит ли слепо доверять открытым исходникам? | Should we blindly trust open source?". Если у вас есть примеры посильнее, с которыми он не справляется, но это возможно сделать в скантайме, буду рад взглянуть.
Долго сомневался, стоит ли его выкладывать, но все таки какое-то полезное применение найти можно. Возможно, придется подредачить конфиг под свои нужды.
Для предварительного анализа проекта и выявления подозрительных вызовов я сделал небольшую программу. Код сильно не шлифовал, главное, что работает (хотя готов принять предложения по улучшению)
Зависимости: -
Алгоритм работы:
- Итерация по проекту и обработка каждого .py файла
- Парсинг кода
- Сбор всех подозрительных импортов/вызовов, base64 импортов/вызовов, internet импортов/вызовов
- Вывод соответственно конфигу
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?". Если у вас есть примеры посильнее, с которыми он не справляется, но это возможно сделать в скантайме, буду рад взглянуть.
Долго сомневался, стоит ли его выкладывать, но все таки какое-то полезное применение найти можно. Возможно, придется подредачить конфиг под свои нужды.