🚨 실수로 비밀 정보를 배포했습니다. ChangeGuard는 그러지 않았습니다.
요약
ChangeGuard는 개발 워크플로우 내에서 위험한 변경 사항을 사전에 포착하는 오픈 소스 보안 스캐너입니다. 이 도구는 Git 히스토리의 비밀 정보 탐지, 위험한 Kubernetes/Terraform 구성 감지 등 다양한 기능을 제공합니다. GitHub Actions와 통합하여 설정된 보안 정책 위반 시 CI/CD를 실패시키고, 로컬 AI 설명을 지원해 개발자가 안전하게 코드를 검토하도록 돕습니다.
핵심 포인트
- 비밀 정보(API 키 등)가 Git 히스토리에 남는 것을 방지합니다.
- Kubernetes 및 Terraform의 위험한 인프라 구성을 감지합니다.
- GitHub Actions와 연동하여 정책 기반 CI/CD를 강제합니다.
- Ollama 기반 로컬 AI 설명을 지원하여 보안 이해도를 높입니다.
도전 과제 소개
코드를 배포하는 것이 재미있다는 것을 아시나요?
덜 재미있는 것은 무엇일까요?
API 키를 커밋했거나, Kubernetes 컨테이너에 '신 모드(god mode)' 권한을 주었거나, 인프라를 보안 연구원의 주말 프로젝트로 만들어 버렸다는 사실을 깨닫는 것입니다. 💀
우리에게는 코드 리뷰, CI 파이프라인, 테스트, 그리고 린팅(linting)이 있습니다. 그런데도 보안 문제가 마치 그 저장소의 주인인 것처럼 풀 리퀘스트에 스며드는 경우가 여전히 발생합니다.
ChangeGuard를 소개합니다. 왜냐하면 “제 컴퓨터에서는 작동하는데”는 보안 전략이 아니기 때문입니다.
제가 만든 것
ChangeGuard는 위험한 변경 사항을 다음날의 사고 보고서가 되기 전에 포착하는 오픈 소스 보안 스캐너입니다.
이는 개발자가 보안 문제를 감지하고, 변경 사항을 검토하며, 개발 워크플로우 내에서 직접 보안 정책을 강제할 수 있도록 돕습니다.
주요 기능:
- 🔑 비밀 정보 탐지 (Secret Detection): 영구적으로 Git 히스토리에 남기기 전에 의심스러운 하드코딩된 자격 증명(credentials)을 찾아냅니다.
- ☸️ 인프라 보안 (Infrastructure Security): 위험한 Kubernetes 및 Terraform 구성을 감지합니다. 컨테이너를 특권 모드(privileged mode)로 실행하는 것은 사고가 아니라 결정이어야 하기 때문입니다.
- 🔍 Diff 위험 분석 (Diff Risk Analysis): 새로 도입된 보안 발견 사항을 강조 표시하여 개발자가 실제로 변경된 부분에 집중할 수 있도록 합니다.
- 🚦 정책 기반 CI/CD (Policy-Based CI/CD): GitHub Actions와 통합되어 변경 사항이 설정된 보안 정책을 위반할 경우 검사를 실패시킵니다.
- 📜 스캔 기록 (Scan History): 이전 스캔 및 발견 사항의 기록을 유지합니다. 분명히 “우리가 그걸 고쳤다고 생각했는데”는 감사 추적(audit trail)이 아닙니다.
- 🛠️ 구성 가능한 보안 정책 (Configurable Security Policies): 팀이 어떤 발견 사항이 변경을 차단해야 하는지 정의할 수 있게 합니다.
- 🤖 선택적 로컬 AI 설명: 현장에 호스팅되는 AI 서비스에 코드를 전송할 필요 없이, 개발자가 보안 발견 사항을 더 잘 이해할 수 있도록 Ollama 기반의 로컬 설명을 지원합니다.
이것은 보안 엔지니어를 대체하려는 것이 아닙니다. 프로덕션 사고가 발생했을 때 그들이 privileged: true를 발견하는 상황을 막으려는 것입니다.
데모
🎬 실시간 데모: [https://drive.google.com/drive/u/1/home]
실제 웹사이트: http://change-guard-beta.vercel.app/**
가장 이상적인 데모 흐름:
- 보안에 취약한 Kubernetes 구성을 소개한다.
- ChangeGuard를 실행하고 감지된 위험을 검사한다.
- 비밀 정보와 유사한 값을 도입하고, 스캐너가 민감한 증거를 마스킹(redacting)하면서 이를 플래그 지정하는 것을 본다.
- 스캔 기록과 정책 결정을 검토한다.
- 위험한 변경 사항을 푸시하고 GitHub Actions가 구성된 정책을 강제하는 것을 지켜본다.
녹색 체크 표시도 좋다. 하지만 실제로 의미 있는 녹색 체크 표시가 더 좋다.
코드
💻 GitHub 저장소: https://github.com/praniket01/ChangeGuard
이 프로젝트는 별도의 프론트엔드와 백엔드로 구성되어 있다:
- 프론트엔드: Next.js, TypeScript, 그리고 네온에서 영감을 받은 보안 대시보드.
- 백엔드: Python, FastAPI, Pydantic.
- 보안 분석: 비밀 정보 및 위험한 인프라 구성을 위한 규칙 기반 스캐닝(Rule-based scanning).
- 지속성(Persistence): SQLite 기반의 스캔 기록 및 정책 구성.
- CI/CD: GitHub Actions와 통합된 Python 스캐닝 스크립트.
- AI: 설명을 위한 선택적 로컬 Ollama 통합.
구축 과정
나는 멋져 보이지만 결국 두 번 이상 열어보지 않는 또 다른 대시보드가 아니라, 개발자의 기존 워크플로우에 맞는 무언가를 만들고 싶었다.
그래서 나는 간단한 아이디어를 중심으로 ChangeGuard를 구축했다: 보안 검사는 누군가 그 결과를 깨닫는 시점이 아니라, 코드가 변경될 때 발생해야 한다.
백엔드는 스캔, diff 분석, 정책 관리 및 기록을 위한 API 엔드포인트를 노출한다. 프론트엔드는 해당 기능과 상호 작용할 수 있는 대시보드를 제공한다. 또한 독립형 스캐너는 CI에서 저장소 변경 사항을 검사하고 구성된 정책이 발견 사항을 차단할 경우 실패하는 종료 코드(failing exit code)를 반환할 수도 있다.
나는 감지된 자격 증명 값(credential values)을 보고서에 반복해서 출력하는 것을 방지하기 위해 비밀 정보 마스킹 기능을 추가했고, 스캔 기록과 정책을 위한 영구 저장소(persistent storage)도 구현했다.
스캐너는 의도적으로 실질적인 첫 번째 방어 계층으로 설계되었습니다. 규칙 기반 검사는 투명하고 확장하기 쉬우며, 선택적 로컬 AI 설명은 개발자가 특정 발견 사항이 왜 중요한지 이해하는 데 도움을 줄 수 있습니다.
완벽한 엔터프라이즈 보안 플랫폼의 대체재인가요? 아닙니다.
반면, 리포지토리가 인터넷 절반에 의해 스타(starred)된 후에 유출된 자격 증명을 발견하는 것보다 나은가요? 물론입니다.
Open Innovation이 중요한 이유
보안은 막대한 예산과 전담 보안 부서를 갖춘 팀을 위한 사치스러운 기능이 되어서는 안 됩니다.
오픈 소스 도구는 개발자가 규칙을 검사하고, 탐지 기능을 개선하며, 오탐(false positive)을 보고하고, 자체 환경에 정책을 적용할 수 있게 합니다.
ChangeGuard는 이러한 생태계에 대한 저의 기여입니다. 즉, 보안을 마지막 순간의 의식이 아니라 개발 과정의 정상적인 부분으로 만들기 위해 개발자들이 배우고 확장하며 사용할 수 있는 프로젝트입니다.
더 많은 사람이 이 도구를 개선할수록, 우리는 더 많은 엣지 케이스(edge case)를 포착할 수 있고—그리고 프로덕션 사고가 경고성 링크드인 게시물이 되는 경우가 줄어들 것입니다.
마지막 말
ChangeGuard는 간단한 믿음 위에 구축되었습니다:
여러분의 CI 파이프라인은 문지기여야 하며, 다음 날 아침 사건 보고서를 작성하는 사람이 되어서는 안 됩니다.
Kubernetes, Terraform 또는 비밀 정보가 많은 애플리케이션 구성을 사용하고 있다면, ChangeGuard를 사용해 보거나, 이슈를 열어보거나, 규칙을 기여해 보세요.
'내 컴퓨터에서는 작동한다(works on my machine)'라는 것이 보안 판결이 아니라 개발 마일스톤이 되도록 합시다. 🛡️
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기