본문 바로가기

Develop

Gitleaks를 통한 Git 저장소의 API 키 유출 방지

개발 작업 중 실수로 민감한 정보를 커밋에 포함시키는 상황을 상상해 보십시오.

 

'아차!' 하는 순간, 특히 API 키나 비밀번호와 같은 중요한 정보가 노출될 경우, 그로 인한 피해는 치명적일 수 있습니다. 실제로 GitHub의 공개 저장소에서 민감한 정보가 유출되어 대규모 데이터 침해 사고로 이어진 사례가 여러 번 발생했습니다. 예를 들어, 2021년에는 수천 개의 공개 GitHub 저장소에서 API 키가 노출되어 해커들이 이를 '슬쩍' 악용한 사례가 보고되었습니다. 이러한 보안 위협을 미연에 방지하는 것이 매우 중요합니다.

 

https://pointer81.tistory.com/entry/AWS-5%EC%9D%BC%EA%B0%84-2000%EB%A7%8C%EC%9B%90-%EB%B9%84%EC%9A%A9-%EC%82%AC%EC%9A%A9%EA%B8%B0

 

AWS 요금 폭탄 경험기 - 5일간 2000만원

AWS라고 Amazon에서 제공해 주는 클라우드 서비스이다.일반적인 BE(Backend) 개발자는 AWS를 이용해서 데이터를 저장하거나, 가상 서버를 임대하여 서버를 운용한다. 2000년 초반, 물리 서버가 있어야

pointer81.tistory.com

 

오늘날의 소프트웨어 개발 환경은 협업을 중심으로 이루어집니다. 여러 개발자가 동시에 하나의 프로젝트에 참여하고, Git과 같은 분산 버전 관리 시스템을 통해 코드를 공유하고 관리합니다. 그러나 이 과정에서 실수로 민감한 정보를 커밋하게 된다면, 그 정보는 팀 전체에, 심지어 외부에까지 '쑥' 노출될 수 있습니다. 이는 곧 데이터 유출과 보안 침해로 이어질 수 있으며, 기업의 신뢰도에 큰 영향을 미칠 수 있습니다.

 

이번 글에서는 이러한 민감한 정보 유출을 방지하기 위해 사용할 수 있는 도구인 Gitleaks에 대해 논의하고자 합니다. Gitleaks는 Git 저장소에서 잠재적인 보안 문제를 탐지하고 이를 해결하는 강력한 솔루션입니다. Gitleaks의 필요성과 사용법에 대해 심도 있게 살펴보겠습니다.

 

Gitleaks의 필요성

소프트웨어 개발 과정에서 종종 민감한 정보를 실수로 코드에 포함시키는 일이 발생합니다. API 키, 비밀번호, 인증 토큰과 같은 정보는 절대 외부에 노출되어서는 안 되지만, 실수로 커밋에 포함되는 경우가 생길 수 있습니다. 이러한 정보가 유출되면 악의적인 사용자에게 악용될 위험이 매우 큽니다. 특히, 오픈 소스 프로젝트에 이러한 정보가 포함될 경우, 누구나 접근할 수 있는 형태로 노출되어 문제의 심각성을 더욱 키울 수 있습니다.

 

예를 들어, 한 개발자가 실수로 자신의 AWS API 키를 커밋에 포함시켰다고 가정해 봅시다. 이 키가 유출되면, 공격자는 해당 계정에 대한 무단 접근을 시도할 수 있고, 그 결과로 막대한 비용 청구와 데이터 손실 등의 피해가 발생할 수 있습니다. 이러한 일이 발생하지 않도록, 미리 예방하고 문제를 감지하는 것이 중요합니다.

 

Gitleaks는 이러한 위험을 효과적으로 예방하는 도구입니다. Git 저장소를 스캔하여 민감한 정보가 포함되었는지 신속하게 탐지하며, 이를 통해 개발자는 보안 문제를 사전에 인지하고 해결할 수 있습니다. Gitleaks는 정규 표현식(Regex)을 기반으로 민감한 정보의 패턴을 탐지하는 방식으로 작동합니다. 예를 들어, API 키는 'AKIA'로 시작하는 AWS 키 형식을 가지거나, 비밀번호는 대문자, 소문자, 숫자, 특수 문자가 혼합된 특정 길이의 패턴을 가질 수 있습니다. Gitleaks는 이러한 패턴을 미리 정의된 규칙으로 탐지하여, 예를 들어 AWS API 키와 같은 형식을 감지하도록 설정됩니다. 예를 들어, 다음과 같은 설정 파일을 통해 AWS API 키의 패턴을 정의할 수 있습니다:

title: "AWS API Key Rule"
regex: '\bAKIA[0-9A-Z]{16}\b'
path: "*"
report: true

 

이러한 규칙은 사용자가 직접 커스터마이즈할 수 있어, 프로젝트의 특성에 맞는 맞춤형 탐지가 가능합니다. Gitleaks는 자동화된 탐지 기능을 제공하여, 민감한 정보가 커밋되는 것을 방지함으로써 프로젝트의 보안 수준을 높이는 역할을 합니다. 이러한 자동화된 보안 점검은 개발자의 실수를 줄여 주고, 전체적인 코드 품질을 향상하는 데 기여합니다.

 

또한, Gitleaks는 CI/CD 파이프라인에 쉽게 통합될 수 있어, 배포 전 코드가 안전한지 자동으로 점검할 수 있습니다. 예를 들어, GitHub Actions에 Gitleaks를 통합하려면 다음과 같은 워크플로 파일을 사용할 수 있습니다:

name: Gitleaks Scan
on: [push, pull_request]
jobs:
  gitleaks:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Run Gitleaks
      uses: zricethezav/gitleaks-action@v1.0.8
      with:
        args: "detect --source . --verbose"

 

이렇게 설정하면 코드가 푸시되거나 PR(Pull Request)이 생성될 때마다 Gitleaks가 자동으로 실행되어 민감한 정보가 포함되었는지 검사하게 됩니다. 이를 통해 개발 팀은 코드 배포 과정에서 발생할 수 있는 보안 취약점을 사전에 제거하고, 더욱 안전한 소프트웨어를 제공할 수 있습니다. 이러한 통합은 개발 프로세스의 일부분으로서 보안을 자연스럽게 강화하는 효과를 가져옵니다.

Gitleaks 사용법

Gitleaks의 사용법은 간단합니다. 우선 Gitleaks를 설치해야 합니다. 터미널에서 다음 명령어를 사용하여 설치를 완료할 수 있습니다:

brew install gitleaks

Linux 사용자라면 다음 명령어로 Gitleaks를 설치할 수 있습니다:

# Debian/Ubuntu
echo "deb [trusted=yes] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitleaks.list
sudo apt-get update && sudo apt-get install gitleaks

# Red Hat/Fedora
sudo yum install gitleaks

 

Windows 사용자는 공식 GitHub 리포지토리(https://github.com/zricethezav/gitleaks/releases)에서 바이너리를 다운로드하여 설치할 수 있습니다. 또한, Chocolatey를 사용하여 다음과 같이 설치할 수 있습니다:

choco install gitleaks

이처럼 다양한 설치 방법을 제공하므로, 사용자가 사용하는 운영 체제에 따라 쉽게 설치할 수 있습니다.

설치 후, 특정 Git 저장소에서 Gitleaks를 실행하여 민감한 정보를 탐지할 수 있습니다:

gitleaks detect

 

이 명령어를 실행하면 Gitleaks는 Git 저장소를 분석하여 민감한 정보가 포함되어 있는지 확인하고, 발견된 문제의 파일과 라인을 명확히 알려줍니다. 이러한 정보를 바탕으로 개발자는 빠르게 문제를 수정하고, 민감한 정보가 유출되는 것을 방지할 수 있습니다. Gitleaks는 각 커밋의 변경 사항을 검사하고, 설정된 규칙에 따라 민감한 정보를 탐지합니다. 이러한 규칙은 커스터마이즈가 가능하며, 프로젝트의 특성에 맞게 설정하여 특정 패턴의 민감한 정보를 탐지하도록 할 수 있습니다.

 

예를 들어, 회사에서 사용되는 특정 형식의 API 키나 비밀번호 규칙이 있다면, 해당 규칙을 Gitleaks 설정 파일에 추가하여 맞춤형 보안 검사를 수행할 수 있습니다. 이를 통해 일반적인 보안 문제뿐만 아니라, 조직 특유의 보안 요건을 충족시킬 수 있습니다.

 

또한 Gitleaks는 Git 훅(hook)으로 설정할 수 있어, 커밋 시점에서 민감한 정보를 탐지하고 커밋을 중단시킬 수 있습니다. 이를 적용하기 위해서는 Git 훅 스크립트를 설정하여 Gitleaks가 커밋 전이나 푸시 전 실행되도록 구성해야 합니다. 예를 들어, pre-commit 훅을 사용하여 Gitleaks를 실행하는 방법은 다음과 같습니다:

#!/bin/sh
# .git/hooks/pre-commit

# Gitleaks 실행
gitleaks detect --source . --verbose

if [ $? -ne 0 ]; then
  echo "민감한 정보가 탐지되었습니다. 커밋을 중단합니다."
  exit 1
fi

위와 같이 .git/hooks/pre-commit 파일을 만들어 Gitleaks 명령어를 실행하면, 커밋 시 민감한 정보가 탐지될 경우 해당 커밋을 차단하고 경고 메시지를 출력하게 됩니다. 이러한 방식은 개발자가 민감한 정보를 포함한 커밋을 시도하는 순간 즉각적인 피드백을 제공함으로써, 실수를 사전에 방지할 수 있게 해 줍니다. 개발 과정의 초기 단계에서 문제를 해결하는 것이 가장 비용 효율적이며, 이러한 방식은 보안 위협을 미연에 차단하는 데 매우 유용합니다.

Gitleaks 활용하기

Gitleaks를 사용하면 Git 저장소 내 민감한 정보의 유출을 방지할 수 있으며, 이를 통해 안전한 개발 환경을 유지할 수 있습니다. Gitleaks는 단순한 탐지 도구 이상의 가치를 지니며, 개발자가 안전한 코딩 습관을 갖추도록 돕는 중요한 역할을 합니다. 민감한 정보를 포함한 커밋이 발생하는 빈도를 줄이고, 개발자들 간에 보안에 대한 인식을 높이는 데 기여합니다.

 

Gitleaks는 또한 보안 교육의 도구로서도 활용될 수 있습니다. 개발자들이 실수로 민감한 정보를 커밋하는 경우가 얼마나 흔한지, 그리고 이를 방지하기 위한 도구들이 어떻게 작동하는지를 직접 경험함으로써, 보안에 대한 인식을 높이고 경각심을 가질 수 있게 합니다. 이를 통해 개발자들은 보안의 중요성을 체감하고, 보다 신중하게 코드를 작성하고 관리하게 됩니다.

 

유사한 도구로는 TruffleHogGitGuardian이 있습니다. TruffleHog는 Git 저장소에서 민감한 정보를 탐지하는 또 다른 도구로, Gitleaks와 유사하게 정규 표현식을 사용하여 민감한 정보를 탐지합니다. 하지만 Gitleaks는 사용자가 규칙을 커스터마이즈 하기 더 용이하며, CI/CD 통합에 특화된 기능을 갖추고 있어 자동화된 보안 프로세스를 쉽게 구현할 수 있습니다. GitGuardian은 클라우드 기반의 서비스로, Git 저장소뿐만 아니라 다양한 소스에서 민감한 정보를 탐지할 수 있는 강력한 기능을 제공합니다. 그러나 Gitleaks는 오픈 소스이며, 로컬 환경에서 직접 설정하고 사용할 수 있는 점에서 비용 효율성이 높습니다.

 

프로젝트 보안을 강화하고, 민감한 정보가 외부로 유출되지 않도록 Gitleaks를 적극 활용해 보십시오. Gitleaks는 Git 저장소의 보안을 강화하기 위한 필수 도구로서, 개발자에게 신뢰할 수 있는 보안 환경을 제공합니다. 또한, 이를 통해 팀 내에서 보안 관행을 강화하고, 전반적인 소프트웨어 개발 과정에서의 보안 수준을 높일 수 있습니다.

 

Git 보안을 위해 필요한 것은 생각보다 간단합니다. Gitleaks를 지금 도입하여 프로젝트의 보안을 강화해 보세요. Gitleaks는 개발자의 부담을 덜어주는 동시에, 조직의 중요한 자산을 보호하는 든든한 파트너가 될 것입니다.

반응형