
Github에서 노출될 수 있는 민감 정보를 지속적으로 모니터링하는 한 가지 방법
현재 Github에 유출된 민감한 정보를 찾기 위한 많은 다른 도구들이 있다는 것을 알고 있으며, 저도 여전히 그 중 일부를 사용하고 있습니다. 하지만 제 생각에는 여전히 다음과 같은 기능이 부족합니다:
다른 도구들은 Git 주소를 도구에 전달한 저장소에 존재하는 민감한 정보를 찾는 데 더 중점을 둡니다. 제가 GitMonitor를 개발할 당시에는 먼저 찾아야 할 저장소에 중점을 두고, 모든 관련 저장소를 찾은 다음, 그들 사이에 민감한 정보가 존재하는지 확인하는 유사한 도구는 소수에 불과했습니다.
민감한 정보 확인을 위한 규칙 외에도, 도구에는 관심 있는 저장소를 검색하는 규칙도 필요합니다. 고려해야 할 저장소는 회사나 프로젝트와 관련된 키워드를 포함하는 저장소일 수 있습니다.
버그 바운티 헌터라면 한 번에 몇 개의 대상에만 관심이 있을 것입니다. 하지만 회사의 보안 엔지니어라면 회사나 프로젝트와 관련된 저장소가 나타나고 민감한 정보를 포함할 수 있을 때 이를 알아야 합니다. 이러한 저장소는 Github 어디에나, 어떤 이름으로든, 어떤 계정이 게시하든 나타날 수 있습니다. 또한 그러한 저장소가 나타나는 즉시 알림을 받아야 합니다(지속적인 모니터링).
도구는 유연한 보고 메커니즘을 가지고 있습니다.
그래서 이 도구 GitMonitor를 만들었습니다. GitMonitor는 두 가지 다른 규칙 세트를 사용하여 필요한 것을 찾습니다. 검색 규칙 세트는 조직이나 내부 프로젝트 또는 기타 관련이 있을 수 있는 저장소를 검색하고, 일치하는 저장소를 로컬에 클론합니다. 그런 다음 민감한 정보 필터링 규칙 세트로 해당 저장소에 민감한 정보가 있는지 확인합니다. 마지막으로 Slack을 통해 보고합니다. 이 도구를 Cronjob과 함께 사용하여 Github에 유출된 조직 관련 민감한 정보를 추적하고 Slack을 통해 결과를 받는 지속적인 모니터링 시스템을 만들 수 있습니다.
업데이트 2020년 6월 15일: 버전 1.0으로 업데이트되었습니다. 이 버전은 GitMonitor가 안정적으로 작동할 수 있도록 일부 버그를 수정했습니다. 이전 버전을 사용 중이라면 git pull을 수행할 것을 권장합니다.
두 가지 다른 규칙 세트 사용: 관심 저장소를 검색하기 위한 검색 규칙 세트(yaml)와 해당 저장소에 민감한 정보가 포함되어 있는지 확인하기 위한 필터 규칙 세트(regex)입니다. 검색 규칙(yaml)과 필터링 규칙(regex)은 별도로 정의됩니다. 사용자는 yaml 규칙과 regex를 쉽고 직관적으로 정의할 수 있습니다.
검색 규칙 세트: 서로 다른 yaml 파일을 사용하여 다양한 규칙을 만들 수 있습니다. 규칙을 통해 저장소를 검색하는 방법을 유연하게 정의할 수 있습니다. 키워드 또는 언어, 파일명, 확장자와 결합된 키워드를 사용할 수 있으며, 언어, 파일명 또는 확장자를 기준으로 검색에서 저장소를 제외하도록 정의할 수도 있습니다. 키워드는 저장소 이름, 저장소 코드, 그리고 커밋에서 검색됩니다.
필터 규칙 세트: 저장소에 존재할 수 있는 민감한 정보를 찾기 위해 regex를 쉽게 추가하거나 수정할 수 있습니다.
검색 규칙 세트와 일치하는 첫 번째 저장소는 로컬에 클론됩니다. 그런 다음 필터링 규칙 세트가 이 저장소에 민감한 정보가 있는지 확인합니다. 민감한 정보 확인이 완료되면 GitMonitor는 결과를 기록하고 공간을 절약하기 위해 로컬에서 이 저장소를 자동으로 삭제한 후, 관련된 모든 저장소가 발견되고 확인될 때까지 이 과정을 반복합니다.
Slack을 통한 보고.
이 도구는 지속적인 모니터링을 위해 Cronjob으로 예약할 수 있습니다.

> python3 -m pip install -r requirements.txt
PyYAML 버전 5x 이상이 설치되어 있는지 확인하십시오 (pip3 install --ignore-installed PyYAML)
다음 표는 설정 파일의 각 키의 의미를 설명합니다:
> export GIT_USERNAME=Github 사용자 이름
> export GIT_PASSWORD=Github 개인 키 또는 비밀번호
또는 설정 파일에 자격 증명 정보 정의(권장하지 않음):
환경 변수에 자격 증명 정보를 정의한 경우의 설정 파일 예시

여러 키워드를 정의하기 위해 규칙 템플릿과 같은 여러 yaml 파일을 만들 수 있습니다. 규칙 파일은 아래 이미지와 같습니다:

> python3 gitmonitor.py
예를 들어:

이 프로젝트의 많은 부분이 개선될 수 있으며, 현재 코드 리팩토링 및 새로운 기능 구현과 함께 크게 변경될 수 있습니다. 커뮤니티의 개선 피드백 및 풀 리퀘스트는 높이 평가되며 수락될 것입니다.
일반적으로 "fork-and-pull" Git 워크플로를 따릅니다.
참고: 풀 리퀘스트를 만들기 전에 "upstream"에서 최신 내용을 병합하십시오!
| 키 | 설명 |
|---|
| user | Github 사용자 이름 - 환경 변수를 통해 Github 자격 증명을 설정한 경우 비워 둡니다. |
| pass | Github 비밀번호 - 환경 변수를 통해 Github 자격 증명을 설정한 경우 비워 둡니다. |
| webhooks | GitMonitor에서 Slack으로 메시지를 보내기 위한 Incoming Webhook 토큰 |
| rule | 검색 규칙 세트가 포함된 디렉터리 |
| source | 저장소를 다운로드할 디렉터리 |
| log | 각 스캔 후 상태를 기록하는 JSON 파일이 포함될 디렉터리. 이 JSON 파일은 스캔 간 결과를 비교하는 데 사용됩니다(새 저장소 식별). |
| start | 스캔 시작 배너 및 민감한 필터링 규칙 세트 스캔 결과 배너를 정의 - Slack으로 전송되는 결과에 표시됩니다. |
| end | 스캔 종료 배너 및 검색 규칙 세트 스캔 결과 배너를 정의 - Slack으로 전송되는 결과에 표시됩니다. |
| all | 모든 저장소 표시 배너를 정의 - Slack으로 전송되는 결과에 표시됩니다. |