Обзор кода и анализ безопасности с помощью Gemini CLI с расширениями

1. 📖 Введение

838a11ffed94b79e.png

В этом практическом занятии вы изучите основы Gemini CLI и научитесь использовать его расширение для анализа кода и безопасности в процессе разработки программного обеспечения.

Что вы узнаете

  • Как настроить Gemini CLI
  • Как настроить Gemini CLI
  • Как установить расширение Gemini CLI
  • Как использовать расширение Gemini CLI для анализа кода и безопасности.
  • Как настроить MCP для Gemini CLI
  • Как проверить Gemini CLI в CI/CD

Что вам понадобится

  • Веб-браузер Chrome
  • Аккаунт Gmail
  • Облачный проект с включенным платежным аккаунтом.

2. 🚀 Подготовка к настройке процесса разработки в мастерской.

Шаг 1: Выберите активный проект в облачной консоли.

В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud (см. раздел в левом верхнем углу консоли).

6da543936f051b95.png

Нажмите на него, и вы увидите список всех ваших проектов, как в этом примере.

3c3963e0fbb5ba4f.png

Значение, обозначенное красной рамкой, — это идентификатор проекта , и это значение будет использоваться на протяжении всего урока.

Убедитесь, что для вашего облачного проекта включена оплата. Для этого нажмите на значок меню (гамбургер) ☰ в верхнем левом углу панели, где отображается меню навигации, и найдите пункт «Оплата».

3291845833270d7f.png

ddf6f055d710f7a9.png

Если в разделе «Биллинг / Обзор » ( в верхнем левом углу консоли облачных сервисов ) вы видите пункт «Пробный платёжный аккаунт Google Cloud Platform» , значит, ваш проект готов к использованию в этом руководстве. В противном случае вернитесь к началу руководства и активируйте пробный платёжный аккаунт.

45539d4ac57dd995.png

Шаг 2: Ознакомьтесь с Cloud Shell.

В большинстве руководств вы будете использовать Cloud Shell . Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud. Если система запросит авторизацию, нажмите «Авторизовать».

26f20e837ff06119.png

79b06cc89a99f840.png

После подключения к Cloud Shell нам потребуется проверить, авторизована ли оболочка (или терминал) уже с использованием нашей учетной записи.

gcloud auth list

Если вы видите в своей личной почте Gmail результат, как в приведенном ниже примере, значит, все в порядке.

Credentialed Accounts

ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

Если это не поможет, попробуйте обновить страницу в браузере и обязательно нажмите кнопку « Авторизовать» , когда появится соответствующий запрос (возможно, авторизация прервалась из-за проблем с подключением).

Шаг 3: Ознакомьтесь с редактором Cloud Shell и настройте рабочий каталог приложения.

Теперь мы можем настроить наш редактор кода для выполнения некоторых действий по программированию. Для этого мы будем использовать редактор Cloud Shell.

Нам нужно клонировать репозиторий с демонстрационными примерами, с которым мы будем взаимодействовать. Выполните эту команду в терминале, чтобы клонировать репозиторий и открыть редактор Cloud Shell.

git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo && cloudshell ws code-analysis-demo

Теперь ваша рабочая директория в Cloud Shell Editor должна выглядеть следующим образом.

3a72d901f5e78fcf.png

Далее необходимо убедиться, что оболочка уже настроена на правильный идентификатор проекта (PROJECT ID) . Если вы видите значение внутри скобок ( ) перед значком $ в терминале (на скриншоте ниже значение — "your-workshop-project" ), это значение показывает настроенный проект для вашей активной сессии оболочки.

8785d925a094c260.png

Если отображаемое значение уже верное , вы можете пропустить следующую команду . Однако, если оно неверно или отсутствует, выполните следующую команду.

gcloud config set project <YOUR_PROJECT_ID>

Теперь мы можем перейти к следующему этапу.

3. 🚀 Настройка и конфигурация

Если вы хотите установить Gemini CLI в свою локальную систему, выполните следующие действия:

  1. Убедитесь, что в вашей системе установлена ​​версия Node 20 или выше.
  2. Включить интерфейс командной строки Gemini можно одним из следующих способов:
  • Установка в качестве глобального пакета.
# Install as an executor

npm install -g @google/gemini-cli

# then run it from terminal
gemini
  • Или запускайте его непосредственно из исходного кода, чтобы всегда получать самую последнюю версию.
npx https://github.com/google-gemini/gemini-cli

При первом запуске программа задаст вам несколько вопросов. Если вы запустите её из IDE (например, VSCode), она задаст вам следующий вопрос.

91769e12a6214c89.png

Затем система предложит вам несколько вариантов аутентификации.

61ba181d61e506dc.png

Есть несколько вариантов:

  • Если вы выберете «Вход через Google» , в браузере откроется страница аутентификации Google, и вам нужно будет только подтвердить авторизацию.
  • Если вы предпочитаете использовать ключ API Gemini , вам потребуется создать его на странице AI Studio , а затем создать файл .env в вашей рабочей директории с установленной переменной GEMINI_API_KEY (или выполнить команду export GEMINI_API_KEY="your-api-key" в командной строке).
  • Если вы решите использовать Vertex AI, вам понадобится проект, созданный вами ранее, файл .env , в котором нужно указать переменные GOOGLE_CLOUD_PROJECT и GOOGLE_CLOUD_LOCATION.

Если вы хотите изменить эти методы аутентификации, вы можете запустить команду /auth из командной строки Gemini или отредактировать конфигурационный файл. Если вы хотите отредактировать конфигурационный файл напрямую, в Linux он должен находиться в $HOME/.gemini/settings.json . Вы увидите параметры security и типа auth и сможете их отредактировать.

{
  "security": {
    "auth": {
      "selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
    }
  }
}

2b894cdf68057d6a.png

4. 🚀 Основные команды и встроенные инструменты

Теперь давайте поэкспериментируем с Gemini CLI, чтобы узнать о нем больше. Выполните следующую команду в терминале, чтобы войти в Gemini CLI.

gemini

Если вам нужна базовая команда, вы можете ввести /help , чтобы отобразить все доступные команды.

d4776f0c740ad723.png

/help

Вы увидите примерно такой результат. 290d620f3787b3d0.png

Gemini CLI — это агент искусственного интеллекта, поэтому он будет оснащен инструментами для решения задач, поставленных пользователем. Чтобы увидеть встроенные инструменты, выполните команду /tools

7367214e26b0da86.png

/tools

В результате вы получите примерно такой вывод.

363ae783ae902fe4.png

Как видите, Gemini CLI обладает рядом возможностей, таких как чтение и запись файлов, веб-поиск и многое другое. Для работы с некоторыми из этих инструментов по умолчанию требуется подтверждение пользователя из-за потенциального риска.

Теперь давайте посмотрим, как это работает на практике. Попробуйте запустить эти команды в командной строке Gemini.

be23caafc0184a6d.png

Find top 10 OWASP security issue and write it down to owasp.md

Вы увидите, что будет запущен инструмент GoogleSearch , а затем результаты будут записаны с помощью функции WriteFile . Если вы используете IDE, вы увидите, что результаты будут представлены в виде сравнения и опции, позволяющей принять или отклонить предложенные варианты. Здесь вы можете увидеть, что Gemini CLI запрашивает у вас разрешение на запись файла.

724bc8144b51752e.png

5. 🚀 Наращивание волос

Для повышения эффективности выполнения конкретной задачи с помощью ИИ-агента, сложные задачи заключаются в том, как правильно сформулировать подсказку, обеспечить корректное проектирование контекста с интеграцией соответствующих инструментов и так далее.

Gemini CLI Extensions — это готовый и легко устанавливаемый набор инструментов и интеграций, позволяющий подключаться к внешним средствам командной строки. Каждое расширение содержит встроенный «сборник инструкций» по эффективному использованию инструментов и может состоять из следующих компонентов:

  • Пользовательские команды со слэшем
  • Конфигурации MCP
  • Контекстные файлы

cfe24ebe1dfb0152.png

Установка расширений безопасности

Например, в этом руководстве мы рассмотрим, как можно установить расширения code-review и security

Выполните следующую команду, чтобы установить расширения security из терминала.

gemini extensions install https://github.com/gemini-cli-extensions/security

Вам будут показаны следующие вопросы, просто нажмите Enter , чтобы принять их.

Installing extension "gemini-cli-security".
**Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.**
This extension will run the following MCP servers:
  * securityServer (local): node /home/alvinprayuda/.gemini/extensions/gemini-cli-security/mcp-server/dist/security.js
This extension will append info to your gemini.md context using GEMINI.md
Do you want to continue? [Y/n]:
Extension "gemini-cli-security" installed successfully and enabled.

Установка расширений для проверки кода

Далее установим расширение code-review , выполнив команду ниже.

gemini extensions install https://github.com/gemini-cli-extensions/code-review

После завершения снова запустите Gemini CLI.

gemini

и запустите команду /extensions , вы увидите, что эти 2 расширения уже установлены.

571556bdc2b3e914.png

/extensions

Хорошо, теперь давайте проведём практическое тестирование на примере репозитория, который вы клонировали ранее.

6. 🚀 Интерактивный режим - Расширение для анализа безопасности кода

Расширение Security — это расширение Gemini CLI с открытым исходным кодом, созданное для повышения безопасности репозитория. Расширение добавляет в Gemini CLI новую команду, которая анализирует изменения кода для выявления различных рисков и уязвимостей безопасности.

Теперь давайте сначала подготовим наш демонстрационный репозиторий. Выполните следующую команду, чтобы перейти в ветку, где уже применены изменения, представляющие угрозу безопасности.

git checkout refactor/analysis-demo

После этого запустите Gemini CLI в терминале.

gemini

Тогда давайте запустим расширения.

aab23afb4f4bfb3.png

/security:analyze

Это запустит длительный процесс, и в ходе него вы будете получать несколько прерываний с запросом разрешения на выполнение определенных операций, таких как mkdir , как показано ниже.

f889f7aca882f87d.png

Это защитный механизм, гарантирующий, что пользователи будут знать, что именно будет выполняться Gemini CLI. В остальной части руководства вы всегда можете разрешить это (вариант 2).

Это расширение запустит длительный процесс, вы увидите, как он создаст файл планирования в каталоге .gemini_security , и сможете проверить, завершен ли процесс или нет. Как показано в приведенном ниже примере:

bf7f9e885f15ff89.png

Завершение этих задач займет некоторое время, а пока вы ждете, вы можете проверить исходный код этих расширений в репозитории Github . По этой ссылке отображается командная строка, используемая для запуска всех этих процессов сканирования безопасности.

e5592755fcdf5a64.png

Как вы можете видеть, для этого необходимо выполнить сканирование с помощью команды Gemini CLI, чтобы провести двухэтапную проверку: разведывательную и более подробную исследовательскую.

Если в командной строке Gemini появится следующее сообщение, выберите вариант 2 , чтобы отключить обнаружение петель.

74426d4ae8fae006.png

Затем подтвердите продолжение с помощью Gemini CLI.

3ea7391ccbf2b872.png

continue

Это механизм, позволяющий избежать бесконечных непродуктивных циклов вызова инструментов, и он будет постоянно совершенствоваться со временем.

После завершения отчет отобразится в интерактивном терминале. Чтобы упростить этот процесс, давайте дадим команду Gemini CLI записать его в файл security-analysis.md

86fcc1c406100224.png

write the result to security-analysis.md file

Теперь вы можете проверить результат, записанный в файл.

7. 🚀 Неинтерактивный режим — приложение-расширение для проверки кода

Расширение code-review добавляет в Gemini CLI новую команду, которая анализирует изменения в коде для выявления различных проблем с качеством кода.

Это расширение можно запустить в неинтерактивном режиме Gemini CLI, то есть весь процесс можно выполнить без необходимости входа в оболочку Gemini CLI. Для запуска Gemini CLI в неинтерактивном режиме можно использовать следующую команду.

gemini "put your command here"

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

Если вы запустите этот флаг yolo в Cloudshell, конфигурация системы по умолчанию запретит его запуск и отобразит следующее сообщение об ошибке.

Cannot start in YOLO mode when it is disabled by settings

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

mkdir .gemini && cloudshell edit .gemini/settings.json

Теперь откройте файл settings.json в редакторе и скопируйте в него следующую конфигурацию, чтобы включить режим YOLO.

{
    "security": {
        "disableYoloMode": false
    }
}

Теперь запустим расширение code-review с помощью следующей команды.

gemini "/code-review" --yolo -e code-review > code-review.md

Эта команда запишет результат вывода Gemini CLI в файл code-review.md . Обратите внимание на флаг -e , который определяет, какое расширение активировать во время сессии. Здесь мы активируем только расширение code-review и отключаем остальные.

Это займет некоторое время, но после завершения вы увидите результат, похожий на показанный ниже, записанный в файл Markdown.

Here are the results of the code review.

While the recent changes to rename `get_products` and `get_product` to `GetProducts` and `GetProduct` are minor, the codebase has some inconsistencies in its naming conventions. For instance, other functions like `create_product` use `snake_case`, while the newly renamed functions use `PascalCase`. For better code quality and readability, I recommend using a consistent naming convention throughout the project.

More importantly, I have identified several security vulnerabilities in the `main.py` file. Here is a summary of the findings:

### 1. SQL Injection
*   **Severity**: High
*   **Location**: 
    *   `main.py:99` in `get_products_by_category`
    *   `main.py:146` in `search_products`
    *   `main.py:372` in `get_user_transactions`
    *   `main.py:438` in `adjust_inventory_by_query`
*   **Description**: The endpoints directly use f-strings to construct SQL queries, making them vulnerable to SQL injection attacks. An attacker could manipulate the input to execute arbitrary SQL commands, potentially leading to data breaches or unauthorized modifications.
*   **Recommendation**: Use parameterized queries or an ORM to handle database interactions. This will ensure that user input is properly sanitized and prevent SQL injection attacks.

### 2. Server-Side Request Forgery (SSRF)
*   **Severity**: High
*   **Location**: `main.py:265` in `fetch_url`
*   **Description**: The `fetch_url` endpoint allows users to specify an arbitrary URL, which the server then requests. This can be exploited to make requests to internal services or local files, leading to information disclosure or other security breaches.
*   **Recommendation**: Implement a whitelist of allowed domains or protocols to restrict the URLs that can be requested. Additionally, you can disable redirects and use a timeout to limit the impact of an attack.

### 3. Information Exposure
*   **Severity**: Medium
*   **Location**: `main.py:423` in `get_environment_variables`
*   **Description**: The `get_environment_variables` endpoint exposes all environment variables to the user. This can include sensitive information such as API keys, database credentials, and other secrets.
*   **Recommendation**: Remove this endpoint or restrict access to it to authorized users. If you need to expose some environment variables, do so selectively and avoid exposing sensitive information.

8. 🚀 Поддержка протокола контекста модели

Как мы уже рассматривали ранее в пояснениях к расширениям, Gemini CLI может подключаться к серверам MCP — приложениям, предоставляющим инструменты и ресурсы через протокол контекста модели (MCP). Это подключение позволяет Gemini CLI взаимодействовать с внешними системами и источниками данных, используя серверы MCP в качестве мостов к вашей локальной среде и внешним сервисам, таким как API.

7d8738ee9c079aa1.png

Если вы хотите настроить сервер MCP самостоятельно, вам необходимо изменить файл .gemini/settings.json и добавить следующие параметры конфигурации:

{
    ...
    # Previous settings above if any
    "mcpServers": {
       "server_name": {
           # MCP server configurations here
       }
    }
}

В этом уроке давайте настроим подключение к нашей учетной записи Github, чтобы загрузить данные предыдущего отчета в Github.

Настройка сервера Github MCP

Для начала создадим файл конфигурации проекта Gemini CLI. Выполните следующую команду.

mkdir -p .gemini && touch .gemini/settings.json

Затем откройте файл .gemini/settings.json и заполните его следующими данными конфигурации.

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "your-personal-access-token"
            },
            "timeout": 5000
       }
  }
}

Теперь нам понадобится ваш личный токен доступа к Github, поэтому убедитесь, что у вас уже есть учетная запись Github.

Войдите в свою учетную запись Github и перейдите в Настройки.

c7d83d4e503602e2.png

После этого прокрутите вниз, найдите раздел «Настройки разработчика» и нажмите на него.

c6c9bfafe5021b9e.png

Затем выберите раздел «Персональные токены доступа» и выберите « Токены (классические) ».

e21f0ed9f361fc13.png

c3c26d7f41c51e1c.png

Укажите здесь имя вашего персонального токена доступа и проверьте области действия репозитория.

b0830480eaf3c15d.png

Затем прокрутите вниз и нажмите кнопку «Сгенерировать токен» , убедитесь, что вы...

Нажмите на кнопку «Сгенерировать новый токен» и выберите вариант «Сгенерировать новый токен (классический)» . После этого скопируйте сгенерированный токен и впишите его в файл .gemini/settings.json.

30d1ea92bb24a7ba.png

Таким образом, ваш файл .gemini/settings.json должен выглядеть примерно так, как показано в следующем примере.

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "ghp-xxxx"
            },
            "timeout": 5000
       }
  }
}

Теперь давайте проверим соединение. Войдите в интерфейс командной строки Gemini, выполнив эту команду.

gemini

Затем выполните команду /mcp , и вы должны увидеть, что Github MCP уже правильно настроен.

1e9c8585ecb39ccb.png

/mcp

Давайте проверим это соединение MCP, отправив следующую команду.

70e045049e8792a8.png

Aggregate the findings from @code-review.md and @security-analysis.md into a single report and ensure no duplicates issues reported. Post this report as a comment on the relevant pull request for the current git branch on GitHub and display the pull request URL for manual review

Обратите внимание на обозначения @code-review.md и @security-analysis.md — так мы ссылаемся на файлы, которые будут переданы в Gemini CLI. Эта команда прочитает содержимое обоих файлов и добавит комментарий к запросу на слияние, относящемуся к этой ветке, используя соединение Github MCP. После этого вы можете проверить URL-адрес запроса на слияние.

f6483c19e27d4d1c.png

9. 💡Gemini CLI в рабочем процессе CI/CD

Если вы являетесь пользователем Github, вы можете легко интегрировать Gemini CLI в свой конвейер CI/CD, используя команду run-gemini-cli в Github Action. Он выступает как в качестве автономного агента для выполнения важных рутинных задач кодирования, так и в качестве помощника по запросу, которому вы можете быстро делегировать работу.

Вы можете использовать Gemini для проведения проверки запросов на слияние, сортировки проблем, анализа и модификации кода и многого другого, общаясь с пользователями непосредственно в репозиториях Github.

Пример этой интеграции можно посмотреть в этом запросе на слияние , где мы используем расширение Gemini CLI Security внутри средства выполнения и оставляем отзывы при создании запроса на слияние.

bc58be84fcbb313a.png

da9e2cde49cbebe5.png

3deda99e8a7fa4d3.png

d933d6b31b42e582.png

10. 💡Изучите другие расширения Gemini CLI

dd25e5619e91ad0b.png

Вы также можете ознакомиться с другими расширениями на сайте https://geminicli.com/extensions . Загляните туда, чтобы найти еще больше интересных инструментов!

11. 🧹 Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этом практическом задании, выполните следующие действия:

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
  2. В списке проектов выберите проект, который хотите удалить, и нажмите кнопку «Удалить» .
  3. В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить» , чтобы удалить проект.