AI 에이전트가 Pull Request를 통해 보안 수정 사항을 제안합니다

보안 경고가 발생합니다. LLM이 컨텍스트를 읽습니다. 구성 수정 사항을 작성합니다. GitHub Pull Request를 생성합니다. 두 번째 LLM이 작업을 검토합니다. 사람이 수정을 병합합니다.

에이전트는 프로덕션 환경에 절대 직접 접근하지 않습니다. 스스로 병합하지도 않습니다.

일반적인 Kubernetes 컨트롤러는 단순히 재시도만 합니다. 잘못된 설정으로 인해 Pod가 충돌하면, 컨트롤러는 이를 무한히 재시작합니다. 근본 원인을 해결하지는 못합니다. 보안 분야도 마찬가지입니다. SIEM이 경고를 발생시키면, 사람이 이를 읽고 수정 사항을 작성해야 합니다. 이 과정은 느립니다.

우리는 이 문제를 해결하기 위해 에이전트를 구축했습니다. 에이전트는 보안 경고를 읽고 인프라를 살펴본 뒤 초안을 작성합니다. 이것은 오토파일럿(autopilot)이 아닙니다. 초안 생성기입니다. 그 외의 모든 것은 사람과 GitOps의 통제 하에 유지됩니다.

작동 방식:

• Wazuh가 공격을 탐지하고 경고를 데이터베이스에 저장합니다. • 브릿지가 새로운 경고를 가져와 에이전트를 실행합니다. • 에이전트는 제한된 도구만 사용합니다. 파일을 읽고 쓸 수 있으며, 브랜치를 생성하고 GitHub API를 사용할 수 있습니다. 오직 설정 파일만 수정합니다. • ArgoCD가 저장소를 감시합니다. 사람이 PR을 병합하기 전까지는 아무것도 배포되지 않습니다.

우리는 두 가지 안전 계층을 사용합니다:

  1. 코드 검사. LLM이 아닌 규칙(Non-LLM rules)이 diff를 검증합니다. 변경 사항이 설정 파일 내에 머무는지 확인합니다. 서버 경로가 경고와 일치하는지 확인합니다. diff의 크기를 확인합니다. 검증에 실패하면 PR이 중단됩니다.

  2. 두 번째 LLM 검토. 다른 모델 제품군이 PR을 읽고 의견을 제공합니다. 모델들은 종종 자기 자신과 의견이 일치하는 경향이 있기 때문에 다른 모델을 사용합니다. 또한 모델에게 PR 텍스트를 신뢰하지 말라고 지시합니다. 이는 공격자가 경고 메시지에 명령어를 숨기는 것을 방지합니다.

개발 과정에서 변경된 사항:

• Cloud LLM에서 Ollama를 사용하는 자체 서버로 전환했습니다. 이를 통해 데이터를 비공개로 유지하고 서비스 중단을 방지합니다. • "ToolCalling" 에이전트를 "CodeAgent"로 교체했습니다. 소형 모델들은 깨끗한 JSON을 생성하는 데 어려움을 겪습니다. CodeAgent는 대신 Python을 작성합니다. 이를 통해 오류와 단계를 20단계 이상에서 3~8단계로 줄였습니다. • "run_shell" 도구를 특정 Git 도구로 교체했습니다. 이를 통해 "rm -rf"와 같은 위험한 명령어를 방지합니다. • 네트워크 안정성을 높이기 위해 "push" 설정에서 "pull" 설정으로 변경했습니다.

우리는 LLM을 숙련된 주니어 개발자처럼 취급합니다. 에이전트와 프로덕션 환경 사이에 사람과 2차 검증 단계가 있기 때문에, 에이전트가 작성한 초안은 매우 유용합니다.

Source: https://dev.to/aisecops/an-ai-agent-that-proposes-security-fixes-as-pull-requests-2hjj

Optional learning community: https://t.me/GyaanSetuAi