
Статический анализ с фокусом на безопасность для Phoenix Framework
Sobelow — это инструмент статического анализа безопасности для Elixir и фреймворка Phoenix. Для исследователей безопасности он полезен для быстрого выявления интересующих точек. Для сопровождающих проектов он может помочь предотвратить внедрение ряда распространённых уязвимостей.
В настоящее время Sobelow обнаруживает некоторые из следующих типов проблем безопасности:
Потенциальные уязвимости отмечаются разными цветами в зависимости от уверенности в их опасности. Высокая уверенность — красный, средняя — жёлтый, низкая — зелёный.
Находка обычно помечается как «низкая уверенность», если функция может использоваться небезопасно, но невозможно надёжно определить, принимает ли функция ввод от пользователя. Т.е.
Примечание: Этот проект находится в постоянной разработке, и со временем будут добавляться новые проверки уязвимостей. Если вы обнаружили ошибку или хотите запросить дополнительные функции или проверки безопасности, пожалуйста, создайте issue!
Чтобы использовать Sobelow, добавьте его в зависимости вашего приложения.
def deps do
[
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}
]
end
Также вы можете установить Sobelow глобально, выполнив следующую команду в командной строке:
$ mix escript.install hex sobelow
Чтобы установить из ветки master, а не из последнего релиза, можно использовать следующую команду:
$ mix escript.install github nccgroup/sobelow
После установки самый простой способ просканировать проект Phoenix — выполнить следующую команду из корня проекта:
$ mix sobelow
Примечание: Все пути должны быть абсолютными или относительными относительно корня приложения.
--root или -r - Указывает корневую директорию приложения. Принимает аргумент пути, например, ../my_project.
--verbose или -v - Выводит фрагменты кода и дополнительные детали находки.
--ignore или -i - Игнорирует указанные типы находок. Принимает разделённый запятыми список имён модулей, например, XSS.Raw,Traversal.
--ignore-files - Игнорирует файлы. Принимает разделённый запятыми список имён файлов, например, config/prod.exs.
--details или -d - Получает детали типа находки. Принимает одно имя модуля, например, Config.CSRF.
--all-details - Получает детали всех типов находок.
--private - Пропускает проверки обновлений.
--router - Указывает расположение маршрутизатора. Используется только если расположение маршрутизатора нестандартно. Принимает аргумент пути, например, my/strange/router.ex.
--exit - Возвращает ненулевой код выхода при пороге уверенности low, medium или high. По умолчанию false, что возвращает нулевой код выхода.
--threshold - Возвращает находки с уровнем уверенности не ниже low (по умолчанию), medium или high.
--format или -f - Указывает формат вывода находок. Принимает формат, например, txt или json.
Обратите внимание, что такие параметры, как --verbose, не будут работать с форматом json. Все находки в формате json содержат ключи type, file и line. Другие ключи могут различаться.
--quiet - Возвращает одну строку с количеством находок. В противном случае не выводит ничего, если находок нет.
--compact - Минимальные однострочные находки с цветным выводом в соответствии с уровнем уверенности.
--flycheck - Минимальные однострочные находки, совместимые с инструментарием на основе flycheck.
--save-config - Создаёт файл конфигурации на основе параметров командной строки. См. Файлы конфигурации для получения дополнительной информации.
--config - Запускает Sobelow с файлом конфигурации. См. Файлы конфигурации для получения дополнительной информации.
--mark-skip-all - Помечает все отображаемые находки как пропускаемые.
--clear-skip - Очищает конфигурацию, созданную с помощью --mark-skip-all.
--skip - Игнорирует находки, отмеченные для пропуска. См. Ложные срабатывания для получения дополнительной информации.
--version - Выводит текущую версию Sobelow. Полезно для шагов CI или интеграции с другими инструментами, такими как Salus.
Sobelow позволяет пользователям сохранять часто используемые параметры в файле конфигурации. Например, если вы постоянно запускаете:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
Вы можете использовать флаг --save-config для создания файла конфигурации .sobelow-conf:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
Эта команда создаст файл .sobelow-conf в корне вашего приложения. Вы можете редактировать этот файл напрямую для внесения изменений.
Вы также можете запустить команду без параметров:
$ mix sobelow --save-config
когда вы только начинаете использовать этот пакет — сгенерированный файл конфигурации будет заполнен значениями по умолчанию для каждого параметра. (Это помогает быстро интегрировать пакет в существующую кодовую базу.)
Теперь, если вы хотите запустить Sobelow с сохранённой конфигурацией, вы можете запустить Sobelow с флагом --config.
$ mix sobelow --config
Sobelow предпочитает избыточное сообщение о находках, чем недостаточное. Поэтому при типичном сканировании может быть много ложных срабатываний. Эти находки можно игнорировать по отдельности, добавив комментарий # sobelow_skip со списком модулей перед определением функции.
# sobelow_skip ["Traversal"]
def vuln_func(...) do
...
end
При интеграции Sobelow в новый проект может быть большое количество ложных срабатываний. Чтобы пометить все выведенные находки как ложные срабатывания, запустите sobelow с флагом --mark-skip-all.
После того как вы пометили соответствующие находки, запустите Sobelow с флагом --skip.
$ mix sobelow --skip
Хотя комментарии # sobelow_skip могут помечать только находки на уровне функции (и, следовательно, не могут использоваться для пропуска проблем конфигурации), флаг --mark-skip-all может быть использован для пропуска любого типа находок.
Категории находок разбиты на модули. Эти модули можно использовать для игнорирования классов находок (через параметры ignore и skip) или для получения деталей уязвимости (через параметр details).
Этот список, а также другая полезная информация, доступны в командной строке:
$ mix help sobelow
Чтобы запустить Sobelow для всех дочерних приложений в umbrella-приложении одной командой, вы можете добавить псевдоним для sobelow в корневой файл mix.exs:
defp aliases do
[
sobelow: ["cmd mix sobelow"]
]
end
Если вы хотите использовать файлы конфигурации в umbrella-приложении, создайте .sobelow-conf в каждом дочернем приложении и используйте флаг --config.
При сканировании проекта Sobelow время от времени проверяет наличие обновлений и выводит предупреждение, если доступна новая версия. Sobelow отслеживает последнюю проверку обновлений, создавая файл .sobelow в корне сканируемого проекта.
Если эта функциональность нежелательна, можно использовать флаг --private при сканировании.