
여러 오픈 소스 git 검색 도구를 활용하여 모든 git 비밀을 캡처하는 도구
git-all-secrets는 다음과 같은 작업을 수행할 수 있는 도구입니다:
스캔은 다음과 같은 여러 오픈 소스 도구를 통해 수행됩니다:
참고 - 원한다면 향후 더 많은 도구를 추가할 수 있습니다!
참고 - toolName 플래그를 지정하여 모든 도구 또는 그중 하나만 사용하여 스캔할 수 있습니다.
모든 도구를 사용하여 스캔하는 경우, 최종 출력은 모든 도구의 모든 파일 출력을 하나의 통합 출력 파일로 결합합니다.
git-all-secrets를 실행하는 가장 쉬운 방법은 Docker를 사용하는 것이며, Docker가 아직 설치되어 있지 않다면 설치하는 것을 적극 권장합니다. Docker가 설치되면,
docker run --rm -it abhartiya/tools_gitallsecrets --help를 입력하여 입력할 수 있는 다양한 플래그를 이해합니다.docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<>와 같은 명령을 입력합니다. 스캔에 사용할 특정 도구를 지정하려면 docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=<>와 같이 입력합니다. 옵션은 thog와 repo-supervisor입니다.thogEntropy 플래그를 다음과 같이 제공합니다 - docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=thog -thogEntropy.docker ps -a를 입력하여 컨테이너 ID를 확인합니다.docker cp <container-id>:/root/results.txt .를 입력하여 결과 파일을 컨테이너에서 호스트로 가져옵니다.-token = GitHub 개인 액세스 토큰. 인증되지 않은 요청은 GitHub API 속도 제한에 빠르게 도달할 수 있으므로 필요합니다.
-org = 스캔할 조직 이름. 조직의 모든 공개 저장소 + 조직의 모든 사용자의 모든 저장소 및 Gist를 스캔합니다. 이 조직의 구성원인 사용자의 토큰을 사용하는 경우, 해당 사용자가 속한 비밀 Gist와 사용자가 액세스할 수 있는 조직의 모든 비공개 저장소도 복제 및 스캔됩니다. 그러나 이 조직에 속한 사용자의 비공개 저장소는 복제 및 스캔되지 않습니다. 사용자의 비공개 저장소를 스캔하려면 user 플래그와 함께 scanPrivateReposOnly 플래그를 사용하고 SSH 키를 볼륨에 마운트하십시오.
-user = 스캔할 사용자 이름. 이 사용자의 모든 저장소 및 Gist를 스캔합니다. 제공된 토큰이 해당 사용자의 토큰인 경우 비밀 Gist도 복제 및 스캔됩니다. 그러나 공개 저장소만 복제 및 스캔됩니다. 이 사용자의 비공개 저장소를 스캔하려면 user 플래그와 함께 scanPrivateReposOnly 플래그를 사용하고 SSH 키를 볼륨에 마운트하십시오.
-repoURL = 스캔할 저장소의 HTTPS URL. 이 저장소만 스캔합니다. 공개 저장소의 경우 저장소의 https URL을 명시하는 것으로 충분합니다. 그러나 비공개 저장소를 스캔하려면 SSH 키를 볼륨에 마운트하고 scanPrivateReposOnly 플래그와 함께 ssh URL을 제공해야 합니다.
-gistURL = 스캔할 Gist의 HTTPS URL. 이 Gist만 스캔합니다. URL만 있으면 공개 또는 비밀 Gist의 개념이 없습니다. 비밀 Gist라도 누군가 HTTPS URL을 알면 액세스할 수 있습니다.
-output = 모든 결과가 저장될 파일 이름입니다. 기본값은 results.txt입니다.
-cloneForks = 조직 및 사용자 저장소의 포크를 복제할지 여부를 지정하는 선택적 불리언 플래그입니다. 기본값은 0으로, 포크를 복제하지 않습니다. 포크를 복제하려면 이 값을 1로 설정해야 합니다. 또는 다른 플래그와 함께 -cloneForks를 명시하기만 하면 됩니다.
-orgOnly = 조직에 속한 사용자 저장소 복제를 건너뛸지 여부를 지정하는 선택적 불리언 플래그입니다. 기본값은 0으로, 일반 동작입니다. 사용자 저장소를 스캔하지 않고 조직 저장소만 스캔하려면 이 값을 1로 설정해야 합니다. 또는 다른 플래그와 함께 -orgOnly를 명시하기만 하면 됩니다.
-toolName = 스캔에 사용할 도구를 지정하는 선택적 문자열 플래그입니다. 기본값은 all로, thog와 repo-supervisor가 모두 스캔에 사용됩니다. 값은 thog 또는 repo-supervisor입니다.
-teamName = 스캔을 위해 비공개 저장소에 액세스할 수 있는 조직 팀의 이름입니다. 이 플래그는 완전히 테스트되지 않았으므로 기능을 보장할 수 없습니다.
-scanPrivateReposOnly = 비공개 사용자 저장소를 스캔할지 여부를 지정하는 선택적 불리언 플래그입니다. 이 플래그를 명시하면 공개 사용자 저장소는 스캔되지 않습니다. 그리고 볼륨을 컨테이너에 마운트하여 SSH 키를 제공해야 합니다. 또한 이 옵션은 user 플래그, repoURL 플래그 또는 org 플래그와 함께만 작동합니다.
org 플래그가 scanPrivateReposOnly 플래그와 함께 명시되고 orgOnly 플래그 없이 사용되면, 이 조직에 속하고 사용자(토큰이 제공된 사용자)가 액세스할 수 있는 공개 및 비공개 저장소를 스캔합니다. 그런 다음 해당 사용자(토큰이 제공된 사용자)의 비공개 저장소만 계속 스캔합니다. 마지막으로 이 사용자(토큰이 제공된 사용자)의 모든 공개 및 비밀 Gist를 계속 스캔합니다. 요약하자면, scanPrivateReposOnly 플래그는 user와 repoURL 플래그에만 영향을 미칩니다.
-enterpriseURL = 엔터프라이즈 저장소를 스캔하려는 경우 엔터프라이즈 GitHub URL을 제공하는 선택적 플래그입니다. https://github.org.com/api/v3와 같은 형식이어야 하며 SSH 키를 컨테이너에 마운트해야 합니다. 아래의 GitHub Enterprise 스캔을 참조하십시오.
-threads = 기본값은 10입니다. 시스템이 충분히 강력하지 않은 경우 스레드 수를 제한하기 위한 것입니다. 대부분의 경우 10으로 두는 것이 괜찮습니다.
-thogEntropy = truffleHog에서 높은 엔트로피 기반 비밀을 반환할지 여부를 지정하는 선택적 플래그입니다. truffleHog의 높은 엔트로피 비밀은 많은 노이즈를 생성하므로 모든 노이즈를 원하지 않고 큰 조직에서 git-all-secrets를 실행하는 경우 이 플래그를 언급하지 않는 것이 좋습니다. 기본값은 False로, truffleHog가 rules.json 파일의 정규식에 따라서만 결과를 생성함을 의미합니다. 상당히 작은 조직이나 제한된 저장소 집합을 스캔하거나 저장소가 적은 사용자를 스캔하는 경우 이 플래그를 언급하는 것이 더 합리적입니다.
-mergeOutput = 사용된 도구(현재 truffleHog 및 repo-supervisor)의 출력을 병합하고 중복 제거하는 선택적 플래그입니다. 기본값은 False입니다.
-blacklist = 스캔하지 않을 쉼표로 구분된 저장소 이름입니다.
token 플래그는 필수입니다. 비워둘 수 없습니다.
org, user, repoURL 및 gistURL은 동시에 모두 비워둘 수 없습니다. 이 값 중 하나만 제공해야 합니다. 모두 제공하거나 여러 값을 함께 제공하는 경우 우선 순위는 org > user > repoURL > gistURL입니다. 예를 들어 -org=secretorg123 및 -user=secretuser1 플래그를 모두 제공하면 도구가 org 값과 함께 아무것도 필요하지 않다고 알립니다. 특정 사용자에 대해서만 실행하려면 org 플래그 없이 user 플래그만 제공하면 됩니다.
scanPrivateReposOnly 플래그를 지정할 때:
-v 플래그를 사용하여 개인 SSH 키가 포함된 볼륨을 Docker 컨테이너에 마운트해야 합니다.https URL이 아닌 ssh URL을 사용하십시오.아래의 비공개 저장소 스캔을 참조하십시오.
teamName을 지정할 때는 제공된 token이 팀의 구성원인 사용자에 속하는지 확인하는 것이 중요합니다. 그렇지 않으면 예상치 못한 결과가 발생할 수 있습니다. 아래의 조직 팀 스캔을 참조하십시오.
enterpriseURL 플래그를 지정하면 저장소의 https URL을 제공하더라도 항상 SSH URL을 고려합니다. 모든 엔터프라이즈 복제/스캔은 https URL이 아닌 ssh URL을 통해 이루어집니다.
위에서 언급했듯이 SSH URL을 스캔하는 데 사용되는 SSH 키에 암호가 설정되어 있지 않은지 확인하십시오.
비공개 저장소를 스캔하는 가장 안전한 방법은 SSH URL을 사용하여 복제하는 것입니다. 이를 위해 GitHub 사용자에 추가된 적절한 SSH 키를 배치해야 합니다. GitHub에는 계정 구성에 대한 유용한 문서가 있습니다. 이 키에 암호가 설정되어 있지 않은지 확인하십시오. SSH 키가 준비되면 볼륨을 통해 Docker 컨테이너에 마운트하기만 하면 됩니다. 아래 명령을 입력하는 것처럼 간단합니다:
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -user=<> -scanPrivateReposOnly
또는
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -repoURL=<> -scanPrivateReposOnly
여기서는 로컬에 저장된 개인 SSH 키 id_rsa_personal을 컨테이너 내부의 /root/.ssh/id_rsa에 매핑하여 git-all-secrets가 ssh를 통해 저장소를 복제하고 컨테이너 내부의 /root/.ssh/id_rsa에 저장된 SSH 키를 사용하도록 합니다. 이렇게 하면 컨테이너 내부에 민감한 정보를 저장하지 않습니다. 로컬 시스템의 파일만 사용하는 것입니다. 컨테이너가 제거되면 더 이상 이 키에 액세스할 수 없습니다.
GitHub API는 비공개 저장소가 보고되는 상황을 제한합니다. 관리자가 아닌 사용자로 조직을 스캔하려는 경우 사용자에게 저장소 액세스 권한을 제공하는 팀을 지정해야 할 수 있습니다. 이를 위해 org 플래그와 함께 teamName 플래그를 사용하십시오. 예제는 아래와 같습니다:
docker run --it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -org=<> -teamName <>
git-all-secrets는 이제 GitHub Enterprise 스캔도 지원합니다. VPN 뒤에 호스팅된 자체 GitHub Enterprise가 있는 경우 VPN에 연결되어 있거나 GitHub Enterprise 저장소에 액세스할 수 있는 올바른 네트워크에 있는지 확인하십시오. enterpriseURL은 GitHub Enterprise 저장소를 스캔하는 데 필요한 것입니다. 아래는 몇 가지 예제입니다:
예제 1:
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -repoURL https://github.<org>.com/<user>/<repo>.git
여기서는 GitHub Enterprise SSH 키를 컨테이너에 마운트한 후 개인 액세스 토큰, 요청이 전송될 엔터프라이즈 URL 및 스캔하려는 저장소를 입력합니다.
예제 2:
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -repoURL https://github.<org>.com/<user>/<repo>.git -toolName thog -thogEntropy
위에서는 엔트로피 설정을 사용하여 truffleHog만 저장소에 대해 실행합니다.
예제 3:
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -user <username> -scanPrivateReposOnly
위에서는 토큰이 제공된 사용자의 비공개 저장소만 모든 도구(repo-supervisor 및 thog)를 사용하여 스캔하지만 truffleHog의 엔트로피 설정은 없이 스캔합니다.