Устранение проблем с помощью режима агента GitHub Copilot

Завершено

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

Замечание

Рекомендуется использовать агент Ask для анализа проблем безопасности и сформулировать план исправления перед использованием агента для реализации изменений. Такой подход гарантирует, что рефакторинг выполняется тщательно и безопасно.

Что такое режим агента?

Режим агента GitHub Copilot — один из трех встроенных агентов в GitHub Copilot Chat. В отличие от агента Ask, который предоставляет рекомендации и предложения на панели чата, режим агента реализует изменения в виде изменений непосредственно в файлах кода.

К возможностям режима агента относятся следующие возможности:

  • Редактирование файлов с точными изменениями кода.
  • Одновременное применение изменений между несколькими файлами.
  • Выполнение тестов для проверки изменений.
  • Выполнение команд на основе ваших инструкций.
  • Общие сведения о контексте проекта и зависимостях.
  • Обеспечение согласованности в базе кода.

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

Типы агентов для устранения проблем безопасности

GitHub Copilot предлагает несколько типов агентов, которые выполняются в разных средах. Для рабочих процессов устранения проблем безопасности наиболее актуальны два типа:

  • Локальный агент (агент в VS Code): работает в интерактивном режиме в редакторе с полным доступом к рабочей области, средствам и моделям. Это тип агента, который описывается на протяжении всего этого модуля, — он идеально подходит для практического пошагового устранения проблем безопасности, где вы проверяете каждое изменение.
  • Облачный агент Copilot: работает удаленно и интегрируется с pull request’ами GitHub. Вы можете назначить задачу GitHub напрямую облачному агенту, после чего он изучит кодовую базу, создаст план реализации и внесет изменения в код в отдельной ветке для вашей проверки. Доступно с помощью планов Copilot Pro+, Business и Enterprise.

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

Уровни разрешений

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

Уровень разрешений Description Рекомендуется для
Утверждения по умолчанию Только доступные только для чтения и безопасные средства запускаются без подтверждения. Для всех изменений файлов и команд терминала требуется утверждение. Устранение проблем, критичных с точки зрения безопасности, — максимальный контроль
Обход согласований Автоматически утверждает все вызовы инструментов без диалоговых окон подтверждения. Рутинные исправления, когда можно положиться на план
Autopilot (предварительная версия) Полностью автономный — автоматически утверждает средства и автоматически реагирует, пока задача не завершится. Не рекомендуется для изменений безопасности

Выберите уровень разрешений из средства выбора разрешений в представлении чата. Для устранения проблем безопасности рекомендуется Default Approvals, чтобы вы могли проверять каждое изменение файла перед его применением.

Устранение проблем безопасности с помощью агента

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

Стратегии устранения проблем безопасности

Ниже приведены основные стратегии использования режима агента для устранения проблем безопасности:

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

  • Реализуйте надежное шифрование: поручите агенту заменить слабые алгоритмы хеширования на безопасные альтернативы, такие как bcrypt или Argon2.

  • Очистка журнала. Используйте агент для удаления конфиденциальных данных из инструкций журнала при сохранении полезных диагностических сведений.

  • Проверка путей к файлам. Разрешите агенту добавить правильную проверку пути, которая предотвращает обходы каталогов.

  • Добавьте проверку входных данных: поручите Агенту реализовать комплексную проверку и санитизацию входных данных.

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

  • Поддержка функций: используйте агент для сохранения всей существующей бизнес-логики и обработки ошибок при повышении безопасности.

Агент запрашивает устранение проблем безопасности

При использовании агента для устранения проблем безопасности запросы должны быть конкретными, действенными и включать вопросы безопасности. Ниже приведены примеры текста естественного языка, которые можно включить в запрос при устранении проблем безопасности:

Подготовка и безопасность

Эти запросы помогут вам установить меры безопасности перед внесением изменений в базу кода.

  • "Перед исправлением безопасности создайте модульные тесты, которые проверяют текущее поведение выбранных функций".
  • Анализ зависимостей в выбранном коде и обеспечение сохранения всех существующих функциональных возможностей при исправлении.
  • "Создайте ветвь резервного копирования и запустите существующие тесты перед реализацией исправлений безопасности в выбранном коде".

Основные операции исправления

Используйте эти запросы для решения распространенных уязвимостей системы безопасности с простыми исправлениями.

  • "Рефакторинг выбранного SQL-запроса для использования параметризованных запросов вместо объединения строк".
  • "Замените хэширование выбранных паролей MD5 на bcrypt, включая правильное создание соли".
  • Удалите конфиденциальную информацию из выбранных записей ведения журнала без потери диагностического значения.
  • "Добавьте проверку пути к выбранным операциям с файлами, чтобы предотвратить обход каталогов".

Расширенные шаблоны исправления

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

  • Преобразуйте выбранную функцию аутентификации для использования безопасной аутентификации на основе токенов с правильной настройкой срока действия.
  • "Реализуйте комплексную проверку входных данных для выбранных функций обработки пользовательских данных".
  • "Замените выбранную слабую реализацию шифрования на AES-256, следуя рекомендациям".
  • Переработайте выбранную обработку ошибок для предоставления удобных для пользователя сообщений при безопасном ведении журнала подробных ошибок.

Качество и проверка

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

  • "После реализации исправлений безопасности запустите все тесты и убедитесь, что функциональные возможности остаются идентичными".
  • "Убедитесь, что фиксированный код следует рекомендациям по безопасности C# Майкрософт и соглашениям о коде".
  • "Убедитесь, что исправления безопасности не вводят регрессии производительности".
  • "Создайте модульные тесты, ориентированные на безопасность, чтобы убедиться, что уязвимости полностью устранены".

Рабочий процесс режима агента для устранения проблем безопасности

Выполните этот систематический рабочий процесс, чтобы устранить проблемы безопасности с помощью режима агента:

Шаг 1. Подготовка рабочей области

Начиная с чистого рабочего пространства, вы можете точно отслеживать изменения и при необходимости отменить их.

Убедитесь, что вы работаете в чистой ветви Git, где все изменения зафиксированы коммитами. Перейдите к файлу, содержащему уязвимость безопасности, выявленную в ходе анализа с помощью агента Ask, и подготовьте план устранения, чтобы при необходимости можно было к нему обратиться.

Шаг 2. Настройка мер безопасности

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

Перед внесением изменений создайте тесты для проверки текущего поведения.

Пример запроса: "Создать комплексные юнит-тесты для функции SearchProducts для проверки текущего поведения перед реализацией исправлений безопасности".

Агент создает тесты, которые фиксируют текущее поведение, предоставляя базовые показатели для проверки.

Tip

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

Шаг 3. Начало работы с критически важными исправлениями безопасности

Решение наиболее опасных уязвимостей сначала гарантирует, что наиболее опасные проблемы устраняются быстро.

Начните с уязвимостей с наивысшим приоритетом.

Пример задачи: "Рефакторировать метод SearchProducts для использования параметризованных запросов вместо объединения строк." Убедитесь, что все векторы инъекций SQL устранены.

Агент анализирует код, заменяет уязвимую конкатенацию строк параметризованными запросами и добавляет проверку входных данных, чтобы устранить уязвимость SQL-инъекции.

Шаг 4. Реализация безопасной криптографии

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

Продолжайте работу с усовершенствованиями шифрования.

Пример запроса: "Замените хэширование паролей MD5 в HashPassword методе реализацией bcrypt, включая правильное создание соли".

Агент обновляет слабые алгоритмы хэширования, чтобы защитить альтернативы, такие как bcrypt, добавляет проверку пароля и создает метод проверки.

Шаг 5. Очистка ведения журнала и обработка ошибок

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

Устранение проблем с раскрытием информации.

Пример запроса: "Удалить конфиденциальную информацию из журналов в модуле проверки подлинности при сохранении значимости для диагностики".

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

Шаг 6. Добавление проверки пути

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

Реализуйте безопасность пути к файлу.

Пример запроса: "Добавление комплексной проверки пути к SaveFile методу для предотвращения обхода каталогов".

Агент реализует проверку путей с помощью Path.GetFileName(), проверяет, что пути остаются в пределах предназначенных каталогов, и добавляет проверки на наличие недопустимых символов.

Шаг 7. Проверка изменений

Тестирование после каждого основного исправления гарантирует устранение уязвимости и отсутствие новых проблем.

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

Пример запроса: "Выполните все модульные тесты и создайте тесты, специально предназначенные для проверки безопасности, чтобы убедиться, что уязвимость SQL-инъекции полностью устранена".

Агент выполняет существующие тесты и создает дополнительные тесты безопасности, которые имитируют SQL-инъекции, чтобы проверить, что уязвимость устранена.

Шаг 8: Проверка и итерация

Устранение сбоев тестов и уточнение реализаций гарантирует, что все требования выполнены перед завершением исправления.

Если обнаружены проблемы, укажите конкретные инструкции по уточнениям.

Пример запроса: "Сбой теста проверки длины пароля. Обновите проверку, чтобы разрешить пароли от 8 до 128 символов".

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

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

Вопросы безопасности и качества

При использовании агента для исправления безопасности всегда учитывайте последствия безопасности и качества:

Рекомендации по обеспечению безопасности

Следуя этим методикам безопасности, вы гарантируете, что исправления являются комплексными и не представляют новых уязвимостей.

При устранении уязвимостей рассмотрите следующие методики безопасности:

  • Тщательно проверяйте: убедитесь, что все входные проверки являются комплексными и обрабатывают пограничные варианты.
  • Сохранение авторизации. Убедитесь, что исправления безопасности не обходят проверку подлинности или авторизации.
  • Глубинная защита: убедитесь, что несколько уровней безопасности остаются нетронутыми.
  • Проверка зависимостей. Убедитесь, что исправления безопасности не содержат уязвимых зависимостей.
  • Подробное тестирование. Включите как положительные, так и отрицательные тесты безопасности.

Стандарты качества кода

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

Поддерживайте высокое качество кода, следуя приведенным ниже рекомендациям:

  • Следуйте соглашениям: убедитесь, что фиксированный код следует соглашениям по программированию на C# корпорации Майкрософт.
  • Поддержка удобочитаемости. Убедитесь, что исправления безопасности не компрометирует ясность кода.
  • Изменения документа: добавление комментариев, объясняющих критически важный для безопасности код.
  • Документация по обновлению: убедитесь, что README, политики безопасности и документы API отражают изменения.
  • Рассмотрите производительность. Убедитесь, что улучшения безопасности значительно не ухудшают производительность.

Рекомендации по безопасности режима агента

Агент мощный, но требует тщательного надзора.

Перед исправлением

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

  • Всегда работайте в функциональной ветке.
  • Убедитесь, что имеется всестороннее покрытие тестов.
  • Просмотрите план устранения по результатам анализа агента Ask.
  • Задайте для уровня разрешений значение "Утверждения по умолчанию", чтобы просмотреть каждый вызов средства.
  • Ознакомьтесь с уязвимостью безопасности и ее потенциальными последствиями.
  • Резервное копирование критически важных данных или конфигураций.

Во время устранения неполадок

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

  • Внесите добавочные изменения, а не большие преобразования.
  • Проверьте каждый шаг перед переходом к следующему.
  • Просмотрите созданный код для правильности и безопасности.
  • Тестируйте часто, чтобы обнаруживать проблемы на ранних стадиях.
  • Отслеживайте непреднамеренные побочные эффекты.
  • Используйте контрольные точки в Visual Studio Code, чтобы при необходимости вернуться к заведомо работоспособному состоянию.

После исправления

Эти шаги после внесения исправлений подтверждают, что ваши исправления завершены, правильны и готовы к развертыванию.

  • Выполнение комплексных тестов, включая тесты безопасности.
  • Выполните проверку кода с участниками команды.
  • Проверьте характеристики безопасности с помощью средств безопасности.
  • Обновите проблему GitHub с сведениями об исправлении.
  • Документируйте извлеченные уроки для использования в будущем.

Рассматривать режим агента как мощный помощник

Хотя агент может выполнять сложные задачи по исправлению, он требует контроля человека:

  • Перед принятием всех изменений просмотрите все изменения.
  • Убедитесь, что уязвимости безопасности полностью устранены.
  • Убедитесь, что новые уязвимости не появились.
  • Тщательно проверьте, чтобы поймать тонкие проблемы.
  • Проверка соответствия политикам безопасности.

Агент ускоряет исправление безопасности, но не заменяет необходимость тщательной проверки и тестирования.

Интеграция с рабочим процессом Git

Легко вносите изменения Agent в ваш рабочий процесс Git с помощью встроенных средств Visual Studio Code.

Фиксация изменений с помощью представления системы управления версиями

Встроенное представление системы управления версиями Visual Studio Code упрощает процесс фиксации и отправки исправлений безопасности в репозиторий.

Вид управления исходным кодом в Visual Studio Code предоставляет интегрированный способ проверки и внесения исправлений уязвимостей безопасности.

  1. Откройте представление управления версиями, выбрав значок "Управление версиями" на панели действий или нажав клавиши CTRL+SHIFT+G.

  2. Просмотрите изменения, перечисленные в разделе "Изменения", чтобы убедиться, что включены все исправления безопасности.

  3. Наведите указатель мыши на файлы, чтобы подготовить их, и выберите значок +, или подготовьте все изменения, используя значок +, расположенный рядом с "Изменения".

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

    Fix SQL injection vulnerability in SearchProducts
    
    - Replace string concatenation with parameterized queries
    - Add input validation for search terms
    - Implement security tests for injection attempts
    
    Fixes #42
    

    Замечание

    Чтобы связать коммиты с проблемами GitHub, добавьте номер проблемы в сообщение коммита, используя синтаксис Fixes #номер-проблемы. Этот синтаксис автоматически закрывает проблему при слиянии коммита.

  5. Нажмите кнопку "Фиксация", чтобы зафиксировать изменения.

  6. Нажмите кнопку "Синхронизировать изменения" , чтобы отправить ветвь в удаленный репозиторий.

Кроме того, можно использовать команды Git в интегрированном терминале:

# Stage all changes
git add .

# Commit with a descriptive message referencing the GitHub issue
git commit -m "Fix SQL injection vulnerability in SearchProducts

- Replace string concatenation with parameterized queries
- Add input validation for search terms
- Implement security tests for injection attempts

Fixes #42"

# Push changes to the remote repository
git push origin your-branch-name

Сводка

Использование режима агента GitHub Copilot позволяет разработчикам эффективно устранять проблемы безопасности при сохранении качества кода и функциональности. Объединяя аналитические сведения от агента Ask с возможностями выполнения агента, вы можете систематически устранять уязвимости в базе кода. Выберите подходящий тип агента для вашей задачи — используйте локальный агент для интерактивного пошагового устранения неполадок или облачный агент, чтобы поручать четко определенные задачи для автономного устранения. Ключ к успешному выполнению заключается в предоставлении четких инструкций, настройке соответствующих уровней разрешений, поддержанию практик безопасности, тщательной проверке всех изменений и обеспечению надлежащей документации. Агент является мощным помощником, который ускоряет исправление, но человеческий надзор остается важным для обеспечения того, чтобы исправления безопасности были полными, правильными и не вводят новые уязвимости.