Поиск или создание профилировщика безопасности python

Мне нужен профилировщик безопасности для python. В частности, я хочу что-то, что будет принимать в качестве входных данных программу Python и сообщать мне, пытается ли программа выполнять системные вызовы, читать файлы или импортировать библиотеки. Если такой профилировщик безопасности существует, где я могу его найти? Если такой вещи не существует, и я должен был написать ее сам, где я мог бы «проверить» свой профилировщик (то есть убедиться, что он работает).

Если вы не найдете этот вопрос подходящим для SO, дайте мне знать, есть ли другой сайт SE, на котором я могу опубликовать это, или, если возможно, как я могу изменить/перефразировать свой вопрос. Спасибо

Нельзя ли запустить «обычный» профилировщик для процесса python? Итак, я говорю, что этот профилировщик не должен быть специфичным для python, или нет?

Gabor Lengyel 23.12.2020 14:59

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

Mathew 24.12.2020 10:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
2
217
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Обычно Python использует интерпретатор под названием CPython. Трудно сказать о самом коде Python, открывает ли он файлы или делает что-то особенное, потому что многие библиотеки Python и сам интерпретатор написаны на C, и системные вызовы/вызовы libc могут происходить только оттуда. Также синтаксис Python сам по себе может быть очень непонятным.

Итак, отвечая вашему подозреваемому: I suspect this would need specific knowledge of the python programming language, это не похоже на то, потому что речь идет о языке C.

Вы можете подумать, что можно исправить сам CPython. Ну это тоже не правильно, как я думаю. Многие разделяемые библиотеки используют код C/C++ как сам CPython. Тензорфлоу, например.

Идя дальше, я думаю, можно сделать следующие вещи:

  • исправьте компилятор, который компилирует код C/C++ для CPython/модулей, что, я думаю, сложно.
  • просто используйте обычный профилировщик и отследите, какие файлы, каталоги и вызовы используются самим python для работы, и занесите их в белый список, потому что они нужны, что, на мой взгляд, лучший вариант (например, AppArmor).
  • возможно, вас может заинтересовать исправление самого CPython, где можно перехватывать нужные функции и вызовы внешних библиотек C, но это может раздражать, так как вам придется пересматривать каждую добавленную библиотеку в свой проект, а также код C часто используется для повышения производительности (например, модуль json), который не открывает слишком много вещей.

Python — не тот язык, который легко помещается в песочницу. Пример:

x = [x for x in [].__class__.__base__.__subclasses__() if x.__name__ == 'ca'+'tch_warnings'][0].__init__

x.__getattribute__("__globals__")['__builtins__']['eval']("__import__('os').system('ls')")

Для каждых N регулярных выражений/шаблонов есть N+1 способов их обойти. Не говоря уже о том, что люди также могут создавать функции из необработанного байт-кода Python, используя types.FunctionType. Самый простой способ — запустить скрипт внутри nsjail и посмотреть, не пытается ли он выполнить какие-либо подозрительные действия.

Обновлено: Теоретически существует PEP 578 с хуками аудита, но на самом деле их банально обходят.

Очень качественные ответы (относительно ваших последних двух), хотя x класса function в вашем конкретном примере нет атрибута func_globals, поэтому, если вы запустите это, вы должны получить AttributeError.

J. M. Arnold 02.01.2021 15:47

Вы правы, я забыл, что пример изначально был для python2, но для python3 он требует минимальных изменений. Я обновил сообщение с правильным примером.

BonusPlay 02.01.2021 15:59

хорошая мысль @BonusPlay, но никто не стал бы писать такой код

TheEagle 02.01.2021 16:04

Почему никто просто не хочет использовать AppArmor или что-то в этом роде? Все эти уловки можно легко обойти с помощью inspect или любого кода C...

CPPCPPCPPCPPCPPCPPCPPCPPCPPCPP 02.01.2021 16:35

@BonusPlay Не могли бы вы добавить, как тривиально обходят хуки аудита? Будет полезной информацией для дальнейших читателей этой ветки!

J. M. Arnold 02.01.2021 18:16

Не все опасные функции создают события аудита. Пример опасной функции, которая не вызывает один, это os.spawnlp. Прочтите почему не песочница, чтобы понять, почему это так.

BonusPlay 03.01.2021 16:28

Другие вопросы по теме