Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
git-secrets — 비밀 키와 자격 증명을 git 저장소에 커밋하는 것을 방지합니다. | Kitploit
도구/GitHubGitHub/awslabs/git-secrets
Code AnalysisConfiguration AuditingDevSecOpsSecret DetectionSecret Detection #4위
GitHubawslabs/git-secrets

git-secrets

비밀 키와 자격 증명을 git 저장소에 커밋하는 것을 방지합니다.

저장소 보기
13.4k1.3k5311개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

=========== git-secrets


비밀번호 및 기타 민감한 정보가 git 저장소에 커밋되는 것을 방지합니다.

.. contents:: :depth: 2

개요

::

root@kitploit:~
git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked] [<files>...]
git secrets --scan-history
git secrets --install [-f|--force] [<target-directory>]
git secrets --list [--global]
git secrets --add [-a|--allowed] [-l|--literal] [--global] <pattern>
git secrets --add-provider [--global] <command> [arguments...]
git secrets --register-aws [--global]
git secrets --aws-provider [<credentials-file>]

설명

git-secrets는 커밋, 커밋 메시지, --no-ff 병합을 검사하여 git 저장소에 비밀이 추가되는 것을 방지합니다. 커밋, 커밋 메시지 또는 --no-ff 병합 기록의 커밋 중 하나라도 설정된 금지 정규 표현식 패턴과 일치하면 해당 커밋이 거부됩니다.

git-secrets 설치하기

git-secrets는 git secrets를 실행할 때 git에서 인식할 수 있도록 PATH에 위치해야 합니다.

*nix (Linux/macOS)

root@kitploit:~

제공된 Makefile의 ``install`` 대상을 사용하여 ``git secrets`` 및 매뉴얼 페이지를 설치할 수 있습니다. PREFIX 및 MANPREFIX 변수를 사용하여 설치 경로를 사용자 지정할 수 있습니다.

::

    make install

Windows
~~~~~~~

제공된 ``install.ps1`` PowerShell 스크립트를 실행합니다. 이 스크립트는 필요한 파일을 설치 디렉터리(기본값 ``%USERPROFILE%/.git-secrets``)로 복사하고 해당 디렉터리를 현재 사용자 ``PATH``에 추가합니다.

::

    PS > ./install.ps1

Homebrew (macOS 사용자용)

::

root@kitploit:~
brew install git-secrets

.. warning::

root@kitploit:~
**아직 완료되지 않았습니다! ``git secrets --install``을 사용하려는 모든 저장소에 대해 git 훅을 설치해야 합니다.**

다음은 각 커밋 시 git 저장소에서 비밀을 검사하도록 하는 간단한 예제입니다::

root@kitploit:~
cd /path/to/my/repo
git secrets --install
git secrets --register-aws

고급 설정

향후 초기화하거나 클론하는 모든 저장소에 훅을 추가하려면 구성 템플릿을 추가하세요.

::

root@kitploit:~
git secrets --register-aws --global

모든 로컬 저장소에 훅을 추가합니다.

::

root@kitploit:~
git secrets --install ~/.git-templates/git-secrets
git config --global init.templateDir ~/.git-templates/git-secrets

보안 자격 증명을 검사하기 위한 사용자 지정 제공자를 추가합니다.

::

root@kitploit:~
git secrets --add-provider -- cat /path/to/secret/file/patterns

저장소를 공개하기 전에

git-secrets를 사용하면 모든 리비전을 포함하여 저장소를 검사할 수도 있습니다:

::

root@kitploit:~
git secrets --scan-history

옵션

작동 모드

root@kitploit:~

각 옵션은 명령줄에서 첫 번째로 나타나야 합니다.

``--install``
    저장소에 git 훅을 설치합니다. 훅이 설치되면 해당 저장소에 대한 커밋과 비빠른-전진 병합 시 비밀이 커밋되지 않도록 방지합니다.

``--scan``
    하나 이상의 파일에서 비밀을 검사합니다. 파일에 비밀이 포함된 경우, 검사 중인 파일의 일치된 텍스트가 stdout에 기록되고 스크립트는 0이 아닌 종료 코드로 종료됩니다. 각 일치된 줄은 일치하는 파일 이름, 콜론, 일치한 줄 번호, 콜론, 그리고 일치한 텍스트 줄 순서로 기록됩니다. 파일이 제공되지 않으면 ``git ls-files``가 반환하는 모든 파일이 검사됩니다.

``--scan-history``
    모든 리비전을 포함하여 저장소를 검사합니다. 파일에 비밀이 포함된 경우, 검사 중인 파일의 일치된 텍스트가 stdout에 기록되고 스크립트는 0이 아닌 종료 코드로 종료됩니다. 각 일치된 줄은 일치하는 파일 이름, 콜론, 일치한 줄 번호, 콜론, 그리고 일치한 텍스트 줄 순서로 기록됩니다.

``--list``
    현재 저장소 또는 전역 git 설정에서 ``git-secrets`` 구성을 나열합니다.

``--add``
    금지 또는 허용 패턴을 추가합니다.

``--add-provider``
    비밀 제공자를 등록합니다. 비밀 제공자는 호출될 때 ``git-secrets``가 금지로 처리해야 하는 금지 패턴을 출력하는 실행 파일입니다.

``--register-aws``
    일반적인 AWS 패턴을 git 설정에 추가하고 ``~/.aws/credentials``에 있는 키가 어떤 커밋에서도 발견되지 않도록 합니다. 다음 검사가 추가됩니다:

    - ``(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}``를 통한 AWS 액세스 키 ID
    - Amazon Bedrock API 키. 장기 사용 키는 ``ABSK[A-Za-z0-9+/]{109,}=*``, 단기 사용 키는 ``bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29t``
    - 선택적 따옴표로 둘러싸인 ":" 또는 "="를 통한 AWS 비밀 액세스 키 할당
    - 선택적 따옴표로 둘러싸인 ":" 또는 "="를 통한 AWS 계정 ID 할당
    - 예제 AWS 키(``AKIAIOSFODNN7EXAMPLE`` 및 ``wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY``)에 대한 허용 패턴
    - ``~/.aws/credentials``에서 알려진 자격 증명

    .. note::

        이 명령어가 등록하는 패턴은 대부분의 AWS 자격 증명 사례를 잡아내지만, 이 패턴이 **모든** 사례를 잡아낸다고 보장되지는 않습니다. ``git-secrets``는 추가적인 보험 수단으로 사용해야 합니다. 자격 증명을 저장소에 커밋하지 않도록 직접 주의를 기울여야 합니다.

``--aws-provider``
    INI 파일에서 발견된 자격 증명을 출력하는 비밀 제공자입니다. 선택적으로 INI 파일 경로를 제공할 수 있습니다.


``--install`` 옵션

-f, --force 기존 훅이 있으면 덮어씁니다.

<target-directory> 제공되면 지정된 디렉터리에 git 훅을 설치합니다. <target-directory>가 제공되지 않으면 현재 디렉터리가 사용됩니다.

root@kitploit:~
제공된 ``<target-directory>``가 git 저장소가 아닌 경우, 디렉터리가 생성되고 훅이 ``<target-directory>/hooks``에 배치됩니다. 이는 ``git init --template <target-directory>``와 함께 사용할 git 템플릿 디렉터리를 만드는 데 유용할 수 있습니다.

이미 초기화된 저장소에서 ``git init``을 실행할 수 있습니다. `git init 문서 <https://git-scm.com/docs/git-init>`_ 에서:

    git 문서: 기존 저장소에서 ``git init``을 실행하는 것은 안전합니다. 이미 있는 것을 덮어쓰지 않습니다. ``git init``을 다시 실행하는 주된 이유는 새로 추가된 템플릿을 적용하기 위해서입니다(또는 ``--separate-git-dir``이 주어진 경우 저장소를 다른 위치로 이동하기 위해서).

다음 git 훅이 설치됩니다:

1. ``pre-commit``: 커밋에서 변경된 파일이 금지 패턴을 사용하는지 확인하는 데 사용됩니다.
2. ``commit-msg``: 커밋 메시지에 금지 패턴이 포함되어 있는지 확인하는 데 사용됩니다.
3. ``prepare-commit-msg``: 병합 커밋이 어떤 지점에서든 금지 패턴을 포함하는 기록을 도입하는지 확인하는 데 사용됩니다. 이 훅은 비빠른-전진 병합에 대해서만 호출됩니다.

.. note::

    Git은 각 훅에 대해 단일 스크립트만 실행하도록 허용합니다. 저장소에 ``pre-commit.d`` 및 ``commit-msg.d``와 같은 Debian 스타일의 하위 디렉터리가 있는 경우, git 훅은 이러한 디렉터리에 설치되며, 이는 해당 훅이 이러한 디렉터리에서 발견된 모든 스크립트를 실행하도록 구성되었다고 가정합니다. 이러한 git 하위 디렉터리가 없으면 git 훅은 git 저장소의 ``.git/hooks`` 디렉터리에 설치됩니다.

예제 ^^^^^^^^

현재 디렉터리에 git 훅 설치하기::

root@kitploit:~
cd /path/to/my/repository
git secrets --install

현재 디렉터리가 아닌 다른 저장소에 git 훅 설치하기::

root@kitploit:~
git secrets --install /path/to/my/repository

git-secrets가 설치된 git 템플릿을 만든 다음 템플릿을 git 저장소에 복사하기::

root@kitploit:~
git secrets --install ~/.git-templates/git-secrets
git init --template ~/.git-templates/git-secrets

기존 훅이 있으면 덮어쓰기::

root@kitploit:~
git secrets --install -f

--scan 옵션

root@kitploit:~

``-r, --recursive``
    지정된 파일을 재귀적으로 검사합니다. 디렉터리가 발견되면 해당 디렉터리를 검사합니다. ``-r``이 제공되지 않으면 디렉터리는 무시됩니다.

    ``-r``은 ``--cached``, ``--no-index`` 또는 ``--untracked``와 함께 사용할 수 없습니다.

``--cached``
    인덱스 파일에 등록된 블롭을 검색합니다.

``--no-index``
    git이 관리하지 않는 현재 디렉터리의 파일을 검색합니다.

``--untracked``
    작업 트리에서 추적된 파일을 검색하는 것 외에도, ``--scan``은 추적되지 않은 파일도 검색합니다.

``<files>...``
    비밀을 검사할 디스크에 있는 하나 이상의 파일 경로입니다.

    파일이 제공되지 않으면 ``git ls-files``가 반환하는 모든 파일이 검사됩니다.


예제
^^^^^^^^

저장소의 모든 파일 검사하기::

    git secrets --scan

단일 파일 비밀 검사하기::

    git secrets --scan /path/to/file

디렉터리 재귀적으로 비밀 검사하기::

    git secrets --scan -r /path/to/directory

여러 파일 비밀 검사하기::

    git secrets --scan /path/to/file /path/to/other/file

글로브를 사용하여 검사할 수 있습니다::

    git secrets --scan /path/to/directory/*

stdin에서 검사하기::

    echo 'hello!' | git secrets --scan -


``--list`` 옵션

--global 전역 git 설정에서 git-secrets 구성만 나열합니다.

--add 옵션

root@kitploit:~

``--global``
    전역 git 설정에 패턴을 추가합니다.

``-l, --literal``
    제공된 패턴에서 특수 정규 표현식 문자를 이스케이프하여 패턴이 문자 그대로 검색되도록 합니다.

``-a, --allowed``
    패턴을 금지 대신 허용으로 표시합니다. 허용 패턴은 거짓 양성을 필터링하는 데 사용됩니다.

``<pattern>``
    검색할 정규식 패턴입니다.


예제
^^^^^^^^

현재 저장소에 금지 패턴 추가하기::

    git secrets --add '[A-Z0-9]{20}'

전역 git 설정에 금지 패턴 추가하기::

    git secrets --add --global '[A-Z0-9]{20}'

문자 그대로 검색되는 문자열 추가하기(``+``가 이스케이프됨)::

    git secrets --add --literal 'foo+bar'

허용 패턴 추가하기::

    git secrets --add -a 'allowed pattern'


``--register-aws`` 옵션

--global AWS 관련 구성 변수를 전역 git 설정에 추가합니다.

--aws-provider 옵션

root@kitploit:~

``[<credentials-file>]``
    제공되면 검사할 INI 파일의 사용자 지정 경로를 지정합니다. 제공되지 않으면 ``~/.aws/credentials``로 간주합니다.


``--add-provider`` 옵션

--global 제공자를 전역 git 설정에 추가합니다.

<command> 호출할 제공자 명령어입니다. 호출되면 명령어는 새 줄로 구분된 금지 패턴을 stdout에 출력할 것으로 예상됩니다. 추가 인수가 제공되면 명령어에 전달됩니다.

예제 ^^^^^^^^

인수를 사용하여 비밀 제공자 등록하기::

root@kitploit:~
git secrets --add-provider -- git secrets --aws-provider

파일에서 비밀 출력하기::

root@kitploit:~
git secrets --add-provider -- cat /path/to/secret/file/patterns

금지 패턴 정의하기

커밋이나 커밋 메시지에 금지 패턴이 포함되어 있는지 확인하는 데 egrep 호환 정규 표현식이 사용됩니다. 이러한 정규 표현식은 git config 명령어를 사용하여 정의됩니다. 시스템마다 다른 버전의 egrep을 사용한다는 점에 유의하세요. 예를 들어 macOS에서 실행할 때와 Ubuntu 같은 시스템에서 실행할 때 다른 버전의 egrep을 사용하게 됩니다(BSD vs GNU).

git secrets --add <pattern>을 사용하여 git 설정에 금지 정규식 패턴을 추가할 수 있습니다.

거짓 양성 무시하기

때때로 정규 표현식이 거짓 양성과 일치할 수 있습니다. 예를 들어 git 커밋 SHA는 AWS 액세스 키와 매우 유사합니다. 다음 명령어를 사용하여 거짓 양성으로 여러 정규식 패턴을 지정할 수 있습니다:

::

root@kitploit:~
git secrets --add --allowed 'my regex pattern'

또한 저장소의 루트 디렉터리에 있는 .gitallowed 파일에 거짓 양성을 필터링할 정규식 패턴을 추가할 수 있습니다. #으로 시작하는 줄은 건너뛰고(주석 줄) 빈 줄도 건너뜁니다.

먼저 git-secrets는 금지 일치를 포함하는 파일의 모든 줄을 추출합니다. 일치 결과에는 일치된 파일의 전체 경로, 콜론, 일치된 줄 번호, 비밀 패턴과 일치한 파일의 전체 줄이 포함됩니다. 그런 다음 허용 정규 표현식을 정의한 경우 git-secrets는 일치된 모든 줄이 등록된 허용 정규 표현식 중 적어도 하나와 일치하는지 확인합니다. 비밀로 표시된 모든 줄이 허용 일치에 의해 상쇄되면 대상 텍스트에는 비밀이 포함되지 않은 것입니다. 일치된 줄 중 하나라도 허용 정규 표현식과 일치하지 않으면 git-secrets는 커밋/병합/메시지를 실패 처리합니다.

.. important::

root@kitploit:~
너무 탐욕스러운 금지 패턴을 추가하는 것이 나쁜 습관인 것처럼, 너그러운 허용 패턴을 추가하는 것도 나쁜 습관입니다. ``git secrets --scan $filename``을 사용하여 임시 호출로 패턴이 의도대로 작동하는지 테스트하세요.

비밀 제공자

때로는 알려진 비밀 집합에 대한 정확한 패턴 일치를 확인하고 싶을 수 있습니다. 예를 들어 ~/.aws/credentials에 있는 자격 증명이 커밋에 나타나지 않도록 하는 경우입니다. 이러한 경우에는 이러한 비밀을 git 설정의 git 저장소 전체에 분산시키기보다 한 곳에 두는 것이 좋습니다. "비밀 제공자"를 사용하여 이러한 유형의 자격 증명을 가져올 수 있습니다. 비밀 제공자는 호출될 때 새 줄로 구분된 금지 패턴을 출력하는 실행 파일입니다.

--add-provider 명령어를 사용하여 비밀 제공자를 추가할 수 있습니다::

root@kitploit:~
git secrets --add-provider -- git secrets --aws-provider

--의 사용에 주목하세요. 이렇게 하면 제공자와 관련된 모든 인수가 비밀 검사 시 호출될 때마다 제공자에 전달됩니다.

예제 따라하기

예제를 살펴보겠습니다. 다음 대상 텍스트(/tmp/example에 저장됨)가 있다고 가정합니다::

root@kitploit:~
This is a test!
password=ex@mplepassword
password=******
More test...

그리고 다음과 같은 등록된 패턴이 있습니다:

::

root@kitploit:~
git secrets --add 'password\s*=\s*.+'
git secrets --add --allowed --literal 'ex@mplepassword'

git secrets --scan /tmp/example를 실행하면 다음과 같은 오류 출력이 발생합니다::

root@kitploit:~
/tmp/example:3:password=******

[ERROR] Matched prohibited pattern

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- Use --no-verify if this is a one-time false positive

분석해 보면, 금지 패턴 값 password\s*=\s*.+는 다음 줄과 일치합니다::

root@kitploit:~
/tmp/example:2:password=ex@mplepassword
/tmp/example:3:password=******

...하지만 첫 번째 일치는 ex@mplepassword 허용 정규 표현식과 일치하므로 필터링됩니다. 일치하지 않은 줄이 남아 있으므로 비밀로 간주됩니다.

일치하는 줄이 파일 이름과 줄 번호로 시작하는 줄(예: /tmp/example:3:...)에 있기 때문에 정규 표현식에서 파일 이름과 줄 번호를 고려하는 허용 패턴을 만들 수 있습니다. 예를 들어 다음과 같이 전체 파일을 허용 목록에 추가할 수 있습니다::

root@kitploit:~
git secrets --add --allowed '/tmp/example:.*'
git secrets --scan /tmp/example && echo $?
# Outputs: 0

또는 해당 줄이 변경될 가능성이 낮은 경우 파일의 특정 줄 번호를 다음과 같이 허용할 수 있습니다:

::

root@kitploit:~
git secrets --add --allowed '/tmp/example:3:.*'
git secrets --scan /tmp/example && echo $?
# Outputs: 0

허용 패턴을 만들 때 이 점을 염두에 두고, 허용 패턴이 파일 이름이 허용 패턴과 일치하는 대상 텍스트에 포함되어 있기 때문에 실수로 일치하지 않도록 하세요.

검증 건너뛰기

커밋, 병합 또는 커밋 메시지에서 거짓 양성이 발생한 경우 --no-verify 옵션을 사용하세요. 이 옵션은 git 훅 실행을 건너뛰고 커밋 또는 병합을 허용합니다.

정보

  • 저자: Michael Dowling <https://github.com/mtdowling>_
  • 이슈 트래커: 이 프로젝트의 소스 코드와 이슈 트래커는 https://github.com/awslabs/git-secrets <https://github.com/awslabs/git-secrets>_에서 찾을 수 있습니다.
  • 제안과 피드백을 제공해 주신 Cornell University의 Adrian Vatchinsky와 Ari Juels에게 특별히 감사드립니다.

Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.

도구 다운로드