Post content
Для Python3.8 в PEP0578 добавили функционал аудита Runtime операций. Это позволяет выполнять хуки (функции) при возникновении определённых событий в интерпретаторе. Этот функционал разработан, прежде всего, для специалистов по безопасности. Аудит позволяет перехватывать различные действия и проверять их допустимость. Полный список стандартных аудит-ивентов можно посмотреть здесь. Из названий становится ясно что мы можем перехватить. Например, мы можем перехватить факт открытия файла (open), импорта модуля (import), копирование файла (shutil.copyfile), запуск процесса (subprocess.Popen) и тд. Как минимум мы можем залогировать данное событие, как максимум, вызвать аварийное завершение программы. Примеры использования: ▫️Представим, что после разработки и долгих тестирований веб сервиса вы могли где-то оставить функцию ручного ввода данных в консоль. На продакшене такое недопустимо. С помощью аудита можно вызвать исключение перехватив ивент builtins.input ▫️С помощью ивента socket.getaddrinfo можно определить на какие сайты юзер заходил с помощью вашего приложения. ▫️Ивент exec позволит проверить загруженный объект кода перед его исполнением. Например выявить потенциально опасный код, или оставленные API ключи в строковых переменных. Как добавить свой хук? Для первого теста выполните такой код в самом начале работы приложения import sys def hook(event, args): print(f'EVENT: {event}{args}') sys.addaudithook(hook) Каждый хук вызывается для всех событий, поэтому мы можем с помощью одного хука увидеть всё что происходит в интерпретаторе. Теперь давайте посмотрим какие web-коннекты создаются при работе нашего кода. Для запросов используем requests. import sys import requests def socket_hook(event, args): if event == 'socket.getaddrinfo': print(args[0]) sys.addaudithook(socket_hook) requests.get('https://google.com') В аутпуте вы увидите домен, на который был сделан запрос. А так же: ▫️есть платформозависимые хуки (например взаимодействие с winapi) ▫️можно писать хуки на Си ▫️так как это мера для обеспечения безопасности, нет способа удалить хуки после добавления. Напоминаю, доступно в Python3.8+ #pep#tricks