
Статический анализ с фокусом на безопасность для 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.
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 при сканировании.
--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.