
Создавайте полезные, лёгкие статические анализы с помощью инструментов с открытым исходным кодом + немного вашего кода
Этот репозиторий содержит PoC-код для доклада на ShellCon 2019, «Собираем сами: как писать собственные лёгкие средства статического анализа» (слайды).
В двух словах, этот репозиторий демонстрирует несколько конкретных примеров того, как можно построить интересные статические анализы с помощью open source-инструментов и небольшого количества собственного кода.
Примеры кода в этом репозитории:
before_action использует.Как работают примеры
На высоком уровне реализация примеров работает следующим образом:
Этот проект предназначен для запуска с помощью Docker.
Для этого сначала нужно настроить несколько вещей.
Поскольку наш Dockerfile основан на Docker-образе semantic, который размещён в реестре пакетов GitHub, вам нужно настроить Docker для работы с GitHub Package Registry.
$ docker login docker.pkg.github.com -u USERNAME -p TOKENdocker build -t lightweight_static_analysis .bash внутри Docker-контейнера, а затем запустите наши скрипты.# Run this
# (Make sure to run this from a terminal in this repo's project root)
$ docker run -it --rm --entrypoint /bin/bash -v $PWD:/lightweight_static_analysis lightweight_static_analysis
# cd into this project's source code within the
# running container
$ cd /lightweight_static_analysis
# Run main.py with different config options, described further below
После того как вы получите оболочку bash в Docker-контейнере (см. выше команду docker run), вы можете запустить main.py в одном из нескольких возможных режимов.
/lightweight_static_analysis> $ python3 src/main.py <options>
Вы можете увидеть все доступные опции, запустив src/main.py без опций или просмотрев раздел parser.add_argument в main.py.
Вот несколько команд, которые помогут вам интерактивно исследовать кодовую базу Rails.
Сначала клонируйте один или несколько Rails-репозиториев и поместите их в examples/. Если вам нужны примеры репозиториев, вы можете использовать исходный код rubygems.org или один из репозиториев, перечисленных на Open Source Rails.
# Print out the class, super class, defined methods, and before actions
# for all controllers
$ python3 src/main.py --rails-summarize-controllers examples/<repo_name>
# Print out every controller name, grouped by super class
#
# This can find examples where security protections defined in a parent class
# (e.g. ApplicationController or Api::BaseController) aren't applied because
# the vulnerable controller didn't subclass the appropriate class.
$ python3 src/main.py --rails-controllers-by-superclass examples/<repo_name>
# For every before_action used by any controller, list the controllers that
# use that before_action and the routes that it is and isn't applied to
# (e.g. handle the 'except' and 'only" keywords)
#
# This can:
# * Give you quick insight the various before_actions the application defines,
# yielding some intuition as to the code's flow and organization.
# * `verify_with_otp` - Hm, that sounds interesting, I probably want to
# review how that filter is implemented.
# * Show you where a given before_action is and isn't applied across an entire
# code base, potentially leading to bugs where it is inconsistently used
#
# For example
# * Is there a before_action that's used to protect all state0-changing API
# routes except for 1 model? That's strange.
# * Is there an authentication or authorization before_action applied to every
# action in a controller except one? Why?
$ python3 src/main.py --rails-controllers-by-before_action examples/<repo_name>
Если вы хотите после завершения разбора перейти в REPL ipdb, чтобы интерактивно изучать разобранный Ruby-код, вы можете сделать это, также передав флаг --repl указанным выше командам.
Эти примеры опираются на различные классы AstNode, определённые в ast_node.py, а весь специфичный для Rails код находится в ruby.py.
exec() в JS-шеллахЭта реализация ещё не приведена в порядок и не документирована, но смотрите batch_parse_json() в main.py, а также visit() и другие методы, которые он вызывает, в visitor.py.
Мы будем рады обсудить эту работу подробнее, не стесняйтесь открывать issue или связываться с нами в Twitter: @clintgibler, @defreez.
Если вы хотите быть в курсе этого и других наших проектов, загляните в нашу рассылку tl;dr sec, где мы отправляем подробные обзоры лучших докладов по безопасности и ссылки на лучшие инструменты и ресурсы по безопасности.
Это нечастая рассылка с высокой информационной плотностью, цель которой — держать вас в курсе последних и самых значимых событий в области безопасности, чтобы вы могли выполнять свою работу более эффективно и результативно, а также иметь полезные мелочи, которыми можно поделиться с коллегами по инфобезопасности у кулера.