Просеивание бесчисленных строк кода для выявления потенциальных угроз безопасности — это не то, на что я хочу тратить свое время. Если вы действительно не ненавидите себя, держу пари, что это и ваше отношение. Здесь на помощь приходит Semgrep. Semgrep — это инструмент SAST, который позволяет инженерам писать собственные правила для сканирования кодовой базы на наличие уязвимостей. Если вы не знакомы, SAST означает статическое тестирование безопасности приложений. Сейчас модно говорить «сканирование кода».

Существует несколько способов внедрить Semgrep в процесс разработки. Вы можете интегрировать его в свой конвейер сборки в Gitlab, использовать его с действиями Github или просто запускать локально как часть рабочего процесса. В этой статье основное внимание будет уделено последнему, поскольку это самый простой способ приступить к работе.

Поскольку большинство инженеров по безопасности и разработчиков, которых я знаю, используют Ubuntu (или MacOS), я решил написать руководство, ориентированное на эту среду. Однако большая часть этого должна быть применима на разных платформах (кроме установки).

Плюсы и минусы

Первым шагом в использовании Semgrep является его установка. Вы можете сделать это, выполнив следующие команды в своем терминале:

sudo apt update
sudo apt install python3-pip
pip3 install semgrep

После установки вы можете запустить Semgrep, просто набрав semgrep в своем терминале. Чтобы получить максимальную отдачу от Semgrep, вам действительно нужно научиться писать правила, несмотря на его отличные функции сканирования кода из коробки. Давайте углубимся в эту тему.

Создание правил Semgrep

Чтобы сканировать вашу кодовую базу с помощью Semgrep, вам нужно создать правила, определяющие уязвимости, которые вы хотите обнаружить. Правила Semgrep написаны в формате YAML и могут быть как простыми, так и сложными, как вам нравится. Вот пример правила, которое проверяет использование слабой криптографии в Python:

name: Weak cryptography
query: |
  import_from:
    module: cryptography.hazmat.primitives.ciphers.algorithms
    attribute: DES

В этом правиле мы импортируем алгоритм DES из модуля cryptography.hazmat.primitives.ciphers.algorithms. Если этот алгоритм используется где-либо в кодовой базе, Semgrep пометит его как потенциальную уязвимость.

Вот еще один реальный пример правила Semgrep, которое может быть полезно для поиска потенциальных уязвимостей в вашем коде:

rules:
- id: insecure-use-of-bcrypt
  message: "Bcrypt should be used with a high enough work factor"
  languages: [python]
  patterns:
  - pattern: |
      from bcrypt import hashpw, gensalt
      hashpw(b"password", gensalt(6))
    message: "Work factor is too low. Use a value of 10 or higher."

Это правило нацелено на использование популярной библиотеки хеширования паролей bcrypt. Он проверяет, что рабочий фактор, используемый для хеширования пароля, равен 10 или выше, что рекомендуется документацией bcrypt для обеспечения безопасности хешированных паролей. Если используется более низкий коэффициент работы, это может упростить взлом паролей, что может привести к уязвимостям безопасности в вашем приложении.

Запуск Семгрепа

После того, как вы создали свои правила Semgrep, вы можете запустить их в своей кодовой базе, выполнив следующую команду:

semgrep --config path/to/your/rules /path/to/your/codebase

Например, если ваши правила хранятся в файле с именем my_rules.yml, а ваша кодовая база находится в /home/user/my_project, вы должны выполнить следующую команду:

semgrep --config my_rules.yml /home/user/my_project

Semgrep просканирует вашу кодовую базу и отобразит все совпадения, которые он найдет на основе ваших правил.

Интеграция Semgrep в ваш рабочий процесс разработки

Хотя запускать Semgrep вручную полезно, гораздо эффективнее интегрировать его в рабочий процесс разработки. Один из способов сделать это — использовать ловушки Git для автоматического запуска Semgrep всякий раз, когда вы фиксируете изменения кода. Вот как это можно настроить:

  1. Создайте файл с именем pre-commit в каталоге .git/hooks вашего проекта.
  2. Добавьте следующий код в файл pre-commit:
#!/bin/bash
semgrep --config path/to/your/rules $(git diff --cached --name-only)

3. Сделайте файл pre-commit исполняемым, выполнив следующую команду:

chmod +x .git/hooks/pre-commit

Теперь всякий раз, когда вы вносите изменения в свою кодовую базу, Semgrep автоматически сканирует измененные файлы на наличие уязвимостей.

Завершение

Semgrep — это мощный инструмент, который может помочь вам определить потенциальные риски безопасности в вашей кодовой базе. Следуя шагам, описанным в этой статье, вы сможете быстро приступить к работе с Semgrep в Ubuntu и интегрировать его в свой рабочий процесс разработки. Помните, что обеспечение безопасности вашего кода — это непрерывный процесс, поэтому обязательно регулярно сканируйте свою кодовую базу с помощью Semgrep и обновляйте свои правила по мере необходимости.

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу