
소스 코드 관리 공격 툴킷
Source Code Management Attack Toolkit - SCMKit은 SCM 시스템을 공격하는 데 사용할 수 있는 툴킷입니다. SCMKit을 사용하면 SCM 시스템과 사용할 공격 모듈을 지정하고, 해당 SCM 시스템에 대한 유효한 자격 증명(사용자 이름/비밀번호 또는 API 키)을 지정할 수 있습니다. 현재 SCMKit이 지원하는 SCM 시스템은 GitHub Enterprise, GitLab Enterprise 및 Bitbucket Server입니다. 지원되는 공격 모듈에는 정찰, 권한 상승 및 지속이 포함됩니다. SCMKit은 모듈식 접근 방식으로 구축되었으므로, 향후 정보 보안 커뮤니티에서 새 모듈과 SCM 시스템을 추가할 수 있습니다.
이 프로젝트는 아래의 타사 라이브러리를 사용합니다.
프로젝트를 직접 컴파일하려면 아래 단계에 따라 Visual Studio를 설정하세요. 이를 위해서는 NuGet 패키지 관리자에서 설치할 수 있는 .NET 라이브러리가 필요합니다.
https://api.nuget.org/v3/index.json로 패키지 소스를 추가합니다.Install-Package Costura.Fody -Version 3.3.3Install-Package OctokitInstall-Package GitLabApiClientInstall-Package Newtonsoft.Json아래 표는 각 모듈이 지원되는 위치를 보여줍니다.
특정 SCM 시스템에서 사용 중인 리포지토리를 검색합니다
listrepo 모듈과 함께 관련 인증 정보 및 URL을 제공합니다. 그러면 리포지토리 이름과 URL이 출력됩니다.
사용자가 볼 수 있는 모든 리포지토리를 나열합니다.
SCMKit.exe -s github -m listrepo -c userName:password -u https://github.something.local
SCMKit.exe -s github -m listrepo -c apiKey -u https://github.something.local
사용자가 볼 수 있는 모든 리포지토리를 나열합니다.
SCMKit.exe -s gitlab -m listrepo -c userName:password -u https://gitlab.something.local
SCMKit.exe -s gitlab -m listrepo -c apiKey -u https://gitlab.something.local
사용자가 볼 수 있는 모든 리포지토리를 나열합니다.
SCMKit.exe -s bitbucket -m listrepo -c userName:password -u https://bitbucket.something.local
SCMKit.exe -s bitbucket -m listrepo -c apiKey -u https://bitbucket.something.local
C:>SCMKit.exe -s gitlab -m listrepo -c username:password -u https://gitlab.hogwarts.local
================================================== Module: listrepo System: gitlab Auth Type: Username/Password Options: Target URL: https://gitlab.hogwarts.local
Name | Visibility | URL
MaraudersMap | Private | https://gitlab.hogwarts.local/hpotter/maraudersmap
testingStuff | Internal | https://gitlab.hogwarts.local/adumbledore/testingstuff
Spellbook | Internal | https://gitlab.hogwarts.local/hpotter/spellbook
findShortestPathToGryffindorSword | Internal | https://gitlab.hogwarts.local/hpotter/findShortestPathToGryffindorSword
charms | Public | https://gitlab.hogwarts.local/hgranger/charms
Secret-Spells | Internal | https://gitlab.hogwarts.local/adumbledore/secret-spells
Monitoring | Internal | https://gitlab.hogwarts.local/gitlab-instance-10590c85/Monitoring
### 리포지토리 검색
#### 사용 사례
> *특정 SCM 시스템에서 리포지토리 이름으로 리포지토리를 검색합니다*
#### 구문
`-o` 명령줄 스위치에 `searchrepo` 모듈과 검색 조건을 제공하고, 관련 인증 정보와 URL을 함께 지정하세요. 그러면 일치하는 리포지토리 이름과 URL이 출력됩니다.
##### GitHub Enterprise
GitHub 리포지토리 검색은 "포함" 검색입니다. 즉, 입력한 문자열이 이름에 포함된 리포지토리를 검색합니다.
`SCMKit.exe -s github -m searchrepo -c userName:password -u https://github.something.local -o "some search term"`
`SCMKit.exe -s github -m searchrepo -c apikey -u https://github.something.local -o "some search term"`
##### GitLab Enterprise
GitLab 리포지토리 검색은 "포함" 검색입니다. 즉, 입력한 문자열이 이름에 포함된 리포지토리를 검색합니다.
`SCMKit.exe -s gitlab -m searchrepo -c userName:password -u https://gitlab.something.local -o "some search term"`
`SCMKit.exe -s gitlab -m searchrepo -c apikey -u https://gitlab.something.local -o "some search term"`
##### Bitbucket Server
Bitbucket 리포지토리 검색은 "시작" 검색입니다. 즉, 입력한 문자열로 시작하는 이름의 리포지토리를 검색합니다.
`SCMKit.exe -s bitbucket -m searchrepo -c userName:password -u https://bitbucket.something.local -o "some search term"`
`SCMKit.exe -s bitbucket -m searchrepo -c apikey -u https://bitbucket.something.local -o "some search term"`
#### 예제 출력```
C:\>SCMKit.exe -s gitlab -m searchrepo -c apiKey -u https://gitlab.hogwarts.local -o "spell"
==================================================
Module: searchrepo
System: gitlab
Auth Type: API Key
Options: spell
Target URL: https://gitlab.hogwarts.local
Timestamp: 1/14/2022 8:32:30 PM
==================================================
Name | Visibility | URL
----------------------------------------------------------------------------------------------------------
Spellbook | Internal | https://gitlab.hogwarts.local/hpotter/spellbook
Secret-Spells | Internal | https://gitlab.hogwarts.local/adumbledore/secret-spells
특정 SCM 시스템에서 주어진 키워드를 포함하는 코드를 검색합니다
searchcode 모듈과 검색 조건을 -o 명령줄 스위치에 제공하고, 관련 인증 정보와 URL을 함께 지정합니다. 그러면 일치하는 코드 파일의 URL과 해당 코드에서 일치한 줄이 출력됩니다.
GitHub 코드 검색은 "포함(contains)" 검색으로, 입력한 문자열이 코드의 어떤 줄에든 포함된 코드를 검색합니다.
SCMKit.exe -s github -m searchcode -c userName:password -u https://github.something.local -o "some search term"
SCMKit.exe -s github -m searchcode -c apikey -u https://github.something.local -o "some search term"
GitLab 코드 검색은 "포함(contains)" 검색으로, 입력한 문자열이 코드의 어떤 줄에든 포함된 코드를 검색합니다.
SCMKit.exe -s gitlab -m searchcode -c userName:password -u https://gitlab.something.local -o "some search term"
SCMKit.exe -s gitlab -m searchcode -c apikey -u https://gitlab.something.local -o "some search term"
Bitbucket 코드 검색은 "포함(contains)" 검색으로, 입력한 문자열이 코드의 어떤 줄에든 포함된 코드를 검색합니다.
SCMKit.exe -s bitbucket -m searchcode -c userName:password -u https://bitbucket.something.local -o "some search term"
SCMKit.exe -s bitbucket -m searchcode -c apikey -u https://bitbucket.something.local -o "some search term"
C:>SCMKit.exe -s gitlab -m searchcode -c username:password -u https://gitlab.hogwarts.local -o "api_key"
================================================== Module: searchcode System: gitlab Auth Type: Username/Password Options: api_key Target URL: https://gitlab.hogwarts.local
[>] URL: https://gitlab.hogwarts.local/adumbledore/secret-spells/stuff.txt |_ API_KEY=abc123
Total number of items matching code search: 1
### 파일 검색
#### 사용 사례
> *특정 SCM 시스템의 저장소에서 파일 이름에 지정된 키워드가 포함된 파일을 검색합니다*
#### 구문
`-o` 명령줄 스위치에 `searchfile` 모듈과 검색 기준을 관련 인증 정보 및 URL과 함께 제공합니다. 그러면 해당 저장소에서 일치하는 파일의 URL이 출력됩니다.
##### GitHub Enterprise
GitLab 파일 검색은 "포함(contains)" 검색 방식으로, 입력한 문자열이 파일 이름에 포함된 파일을 검색합니다.
`SCMKit.exe -s github -m searchfile -c userName:password -u https://github.something.local -o "some search term"`
`SCMKit.exe -s github -m searchfile -c apikey -u https://github.something.local -o "some search term"`
##### GitLab Enterprise
GitLab 파일 검색은 "포함(contains)" 검색 방식으로, 입력한 문자열이 파일 이름에 포함된 파일을 검색합니다.
`SCMKit.exe -s gitlab -m searchfile -c userName:password -u https://gitlab.something.local -o "some search term"`
`SCMKit.exe -s gitlab -m searchfile -c apikey -u https://gitlab.something.local -o "some search term"`
##### Bitbucket Server
Bitbucket 파일 검색은 "포함(contains)" 검색 방식으로, 입력한 문자열이 파일 이름에 포함된 파일을 검색합니다.
`SCMKit.exe -s bitbucket -m searchfile -c userName:password -u https://bitbucket.something.local -o "some search term"`
`SCMKit.exe -s bitbucket -m searchfile -c apikey -u https://bitbucket.something.local -o "some search term"`
#### 예제 출력```
C:\source\SCMKit\SCMKit\bin\Release>SCMKit.exe -s bitbucket -m searchfile -c apikey -u http://bitbucket.hogwarts.local:7990 -o jenkinsfile
==================================================
Module: searchfile
System: bitbucket
Auth Type: API Key
Options: jenkinsfile
Target URL: http://bitbucket.hogwarts.local:7990
Timestamp: 1/14/2022 10:17:59 PM
==================================================
[>] REPO: http://bitbucket.hogwarts.local:7990/scm/~HPOTTER/hpotter
[>] FILE: Jenkinsfile
[>] REPO: http://bitbucket.hogwarts.local:7990/scm/STUD/cred-decryption
[>] FILE: subDir/Jenkinsfile
Total matching results: 2
GitLab에서 현재 사용자가 소유한 스니펫 목록을 나열합니다
listsnippet 모듈과 함께 관련 인증 정보 및 URL을 제공합니다.
SCMKit.exe -s gitlab -m listsnippet -c userName:password -u https://gitlab.something.local
SCMKit.exe -s gitlab -m listsnippet -c apikey -u https://gitlab.something.local
C:>SCMKit.exe -s gitlab -m listsnippet -c username:password -u https://gitlab.hogwarts.local
================================================== Module: listsnippet System: gitlab Auth Type: Username/Password Options: Target URL: https://gitlab.hogwarts.local
Title | Raw URL
spell-script | https://gitlab.hogwarts.local/-/snippets/2/raw
### List Runners
#### Use Case
> *GitLab에서 현재 사용자가 사용할 수 있는 모든 GitLab 러너를 나열합니다*
#### Syntax
`listrunner` 모듈과 관련 인증 정보 및 URL을 제공합니다. 사용자가 관리자인 경우 공유 러너 및 그룹 러너를 포함하여 GitLab Enterprise 인스턴스 내의 모든 러너를 나열할 수 있습니다.
##### GitLab Enterprise
`SCMKit.exe -s gitlab -m listrunner -c userName:password -u https://gitlab.something.local`
`SCMKit.exe -s gitlab -m listrunner -c apikey -u https://gitlab.something.local`
#### Example Output```
C:\>SCMKit.exe -s gitlab -m listrunner -c username:password -u https://gitlab.hogwarts.local
==================================================
Module: listrunner
System: gitlab
Auth Type: Username/Password
Options:
Target URL: https://gitlab.hogwarts.local
Timestamp: 1/25/2022 11:40:08 AM
==================================================
ID | Name | Repo Assigned
---------------------------------------------------------------------------------
2 | gitlab-runner | https://gitlab.hogwarts.local/hpotter/spellbook.git
3 | gitlab-runner | https://gitlab.hogwarts.local/hpotter/maraudersmap.git
GitHub에서 현재 사용자가 소유한 Gist를 나열합니다
listgist 모듈과 함께 관련 인증 정보 및 URL을 제공합니다.
SCMKit.exe -s github -m listgist -c userName:password -u https://github.something.local
SCMKit.exe -s github -m listgist -c apikey -u https://github.something.local
C:>SCMKit.exe -s github -m listgist -c username:password -u https://github-enterprise.hogwarts.local
================================================== Module: listgist System: github Auth Type: Username/Password Options: Target URL: https://github-enterprise.hogwarts.local
Description | Visibility | URL
Shell Script to Decode Spell | public | https://github-enterprise.hogwarts.local/gist/c11c6bb3f47fe67183d5bc9f048412a1
### 조직 목록
#### 사용 사례
> *현재 사용자가 GitHub에서 속한 모든 조직을 나열합니다*
#### 구문
`listorg` 모듈과 관련 인증 정보 및 URL을 제공합니다.
##### GitHub Enterprise
`SCMKit.exe -s github -m listorg -c userName:password -u https://github.something.local`
`SCMKit.exe -s github -m listorg -c apiKey -u https://github.something.local`
#### 예시 출력```
C:\>SCMKit.exe -s github -m listorg -c username:password -u https://github-enterprise.hogwarts.local
==================================================
Module: listorg
System: github
Auth Type: Username/Password
Options:
Target URL: https://github-enterprise.hogwarts.local
Timestamp: 1/14/2022 9:44:48 PM
==================================================
Name | URL
-----------------------------------------------------------------------------------
Hogwarts | https://github-enterprise.hogwarts.local/api/v3/orgs/Hogwarts/repos
특정 SCM 시스템에서 사용 중인 액세스 토큰에 할당된 권한을 가져옵니다.
API 키 및 URL과 함께 privs 모듈을 제공합니다.
SCMKit.exe -s github -m privs -c apiKey -u https://github.something.local
SCMKit.exe -s gitlab -m privs -c apiKey -u https://gitlab.something.local
C:>SCMKit.exe -s gitlab -m privs -c apikey -u https://gitlab.hogwarts.local
================================================== Module: privs System: gitlab Auth Type: API Key Options: Target URL: https://gitlab.hogwarts.local
Token Name | Active? | Privilege | Description
hgranger-api-token | True | api | Read-write for the complete API, including all groups and projects, the Container Registry, and the Package Registry. hgranger-api-token | True | read_user | Read-only for endpoints under /users. Essentially, access to any of the GET requests in the Users API. hgranger-api-token | True | read_api | Read-only for the complete API, including all groups and projects, the Container Registry, and the Package Registry. hgranger-api-token | True | read_repository | Read-only (pull) for the repository through git clone. hgranger-api-token | True | write_repository | Read-write (pull, push) for the repository through git clone. Required for accessing Git repositories over HTTP when 2FA is enabled.
### 관리자 추가
#### 사용 사례
> *일반 사용자를 특정 SCM 시스템의 관리자 역할로 승격합니다*
#### 구문
`addadmin` 모듈과 관련 인증 정보 및 URL을 제공합니다. 또한 관리자 역할을 추가하려는 대상 사용자를 제공합니다.
##### GitHub Enterprise
`SCMKit.exe -s github -m addadmin -c userName:password -u https://github.something.local -o targetUserName`
`SCMKit.exe -s github -m addadmin -c apikey -u https://github.something.local -o targetUserName`
##### GitLab Enterprise
`SCMKit.exe -s gitlab -m addadmin -c userName:password -u https://gitlab.something.local -o targetUserName`
`SCMKit.exe -s gitlab -m addadmin -c apikey -u https://gitlab.something.local -o targetUserName`
##### Bitbucket Server
Bitbucket에서 저장소 또는 프로젝트와 관련되지 않은 작업을 수행하려면 사용자 이름/비밀번호 인증만 지원됩니다.
`SCMKit.exe -s bitbucket -m addadmin -c userName:password -u https://bitbucket.something.local -o targetUserName`
#### 예제 출력```
C:\>SCMKit.exe -s gitlab -m addadmin -c apikey -u https://gitlab.hogwarts.local -o hgranger
==================================================
Module: addadmin
System: gitlab
Auth Type: API Key
Options: hgranger
Target URL: https://gitlab.hogwarts.local
Timestamp: 1/14/2022 9:19:32 PM
==================================================
[+] SUCCESS: The hgranger user was successfully added to the admin role.
특정 SCM 시스템에서 관리 사용자를 일반 사용자 역할로 강등합니다
removeadmin 모듈과 함께 관련 인증 정보와 URL을 제공하십시오. 또한 관리자 역할을 제거하려는 대상 사용자를 지정하십시오.
SCMKit.exe -s github -m removeadmin -c userName:password -u https://github.something.local -o targetUserName
SCMKit.exe -s github -m removeadmin -c apikey -u https://github.something.local -o targetUserName
SCMKit.exe -s gitlab -m removeadmin -c userName:password -u https://gitlab.something.local -o targetUserName
SCMKit.exe -s gitlab -m removeadmin -c apikey -u https://gitlab.something.local -o targetUserName
Bitbucket에서 리포지토리나 프로젝트와 관련되지 않은 작업을 수행하려면 사용자 이름/비밀번호 인증만 지원됩니다.
SCMKit.exe -s bitbucket -m removeadmin -c userName:password -u https://bitbucket.something.local -o targetUserName
C:>SCMKit.exe -s gitlab -m removeadmin -c username:password -u https://gitlab.hogwarts.local -o hgranger
================================================== Module: removeadmin System: gitlab Auth Type: Username/Password Options: hgranger Target URL: https://gitlab.hogwarts.local
[+] SUCCESS: The hgranger user was successfully removed from the admin role.
### 액세스 토큰 생성
#### 사용 사례
> *특정 SCM 시스템에서 사용할 액세스 토큰을 생성합니다*
#### 구문
`createpat` 모듈과 함께 관련 인증 정보 및 URL을 제공합니다. 또한 액세스 토큰을 생성하려는 대상 사용자를 지정합니다.
##### GitLab 엔터프라이즈
이 작업은 관리자만 수행할 수 있습니다. PAT를 생성하려는 사용자 이름을 지정합니다.
`SCMKit.exe -s gitlab -m createpat -c userName:password -u https://gitlab.something.local -o targetUserName`
`SCMKit.exe -s gitlab -m createpat -c apikey -u https://gitlab.something.local -o targetUserName`
##### Bitbucket 서버
인증 중인 현재 사용자에 대한 PAT를 생성합니다. Bitbucket에서는 관리자라도 다른 사용자의 PAT를 생성할 수 없습니다. Bitbucket에서 리포지토리나 프로젝트와 관련되지 않은 작업을 수행하려면 사용자 이름/암호 인증만 지원됩니다. 생성 후 표시되는 PAT ID를 기록해 두세요. 나중에 PAT를 제거해야 할 때 필요합니다.
`SCMKit.exe -s bitbucket -m createpat -c userName:password -u https://bitbucket.something.local `
#### 출력 예```
C:\>SCMKit.exe -s gitlab -m createpat -c username:password -u https://gitlab.hogwarts.local -o hgranger
==================================================
Module: createpat
System: gitlab
Auth Type: Username/Password
Options: hgranger
Target URL: https://gitlab.hogwarts.local
Timestamp: 1/20/2022 1:51:23 PM
==================================================
ID | Name | Token
-----------------------------------------------------
59 | SCMKIT-AaCND | R3ySx_8HUn6UQ_6onETx
[+] SUCCESS: The hgranger user personal access token was successfully added.
특정 SCM 시스템에서 사용자의 액세스 토큰을 나열합니다
listpat 모듈을 관련 인증 정보 및 URL과 함께 제공합니다.
다른 사용자의 PAT를 나열하려는 경우에만 관리자 권한이 필요합니다. 일반 사용자는 자신의 PAT를 나열할 수 있습니다.
SCMKit.exe -s gitlab -m listpat -c userName:password -u https://gitlab.something.local -o targetUser
SCMKit.exe -s gitlab -m listpat -c apikey -u https://gitlab.something.local -o targetUser
현재 사용자의 액세스 토큰을 나열합니다. Bitbucket에서 리포지토리 또는 프로젝트와 관련되지 않은 작업을 수행하려면 사용자 이름/암호 인증만 지원됩니다.
SCMKit.exe -s bitbucket -m listpat -c userName:password -u https://bitbucket.something.local
다른 사용자의 액세스 토큰을 나열합니다(관리자 권한 필요). Bitbucket에서 리포지토리 또는 프로젝트와 관련되지 않은 작업을 수행하려면 사용자 이름/암호 인증만 지원됩니다.
SCMKit.exe -s bitbucket -m listpat -c userName:password -u https://bitbucket.something.local -o targetUser
C:>SCMKit.exe -s gitlab -m listpat -c username:password -u https://gitlab.hogwarts.local -o hgranger
================================================== Module: listpat System: gitlab Auth Type: Username/Password Options: hgranger Target URL: https://gitlab.hogwarts.local
59 | SCMKIT-AaCND | True | api, read_repository, write_repository
### Remove Access Token
#### Use Case
> *특정 SCM 시스템에서 사용자의 액세스 토큰을 제거합니다*
#### Syntax
`removepat` 모듈과 함께 관련 인증 정보 및 URL을 제공합니다. 또한 액세스 토큰을 제거하려는 대상 사용자 PAT ID를 제공합니다.
##### GitLab Enterprise
다른 사용자의 PAT를 제거하려는 경우에만 관리자가 필요합니다. 일반 사용자는 자신의 PAT를 제거할 수 있습니다. 제거할 PAT ID를 제공해야 합니다. 이 ID는 PAT를 생성할 때와 PAT 목록을 조회할 때 표시되었습니다.
`SCMKit.exe -s gitlab -m removepat -c userName:password -u https://gitlab.something.local -o patID`
`SCMKit.exe -s gitlab -m removepat -c apikey -u https://gitlab.something.local -o patID`
##### Bitbucket Server
Bitbucket에서 저장소 또는 프로젝트와 관련되지 않은 작업을 수행하려면 사용자 이름/비밀번호 인증만 지원됩니다. 제거할 PAT ID를 제공해야 합니다. 이 ID는 PAT를 생성할 때 표시되었습니다.
`SCMKit.exe -s bitbucket -m removepat -c userName:password -u https://bitbucket.something.local -o patID`
#### Example Output```
C:\>SCMKit.exe -s gitlab -m removepat -c apikey -u https://gitlab.hogwarts.local -o 58
==================================================
Module: removepat
System: gitlab
Auth Type: API Key
Options: 59
Target URL: https://gitlab.hogwarts.local
Timestamp: 1/20/2022 1:56:47 PM
==================================================
[*] INFO: Revoking personal access token of ID: 59
[+] SUCCESS: The personal access token of ID 59 was successfully revoked.
특정 SCM 시스템에서 사용할 SSH 키를 생성합니다
createsshkey 모듈과 관련 인증 정보 및 URL을 제공합니다.
인증된 현재 사용자의 SSH 키를 생성합니다.
SCMKit.exe -s github -m createsshkey -c userName:password -u https://github.something.local -o "ssh public key"
SCMKit.exe -s github -m createsshkey -c apiToken -u https://github.something.local -o "ssh public key"
인증된 현재 사용자의 SSH 키를 생성합니다. 생성 후 표시되는 SSH 키 ID를 기록해 두세요. 나중에 SSH 키를 제거할 때 필요합니다.
SCMKit.exe -s gitlab -m createsshkey -c userName:password -u https://gitlab.something.local -o "ssh public key"
SCMKit.exe -s gitlab -m createsshkey -c apiToken -u https://gitlab.something.local -o "ssh public key"
인증된 현재 사용자의 SSH 키를 생성합니다. Bitbucket에서 저장소 또는 프로젝트와 관련되지 않은 작업을 수행하려면 사용자 이름/비밀번호 인증만 지원됩니다. 생성 후 표시되는 SSH 키 ID를 기록해 두세요. 나중에 SSH 키를 제거할 때 필요합니다.
SCMKit.exe -s bitbucket -m createsshkey -c userName:password -u https://bitbucket.something.local -o "ssh public key"
C:>SCMKit.exe -s bitbucket -m createsshkey -c username:password -u https://bitbucket.hogwarts.local -o "ssh-rsa..."
================================================== Module: createsshkey System: bitbucket Auth Type: Username/Password Options: ssh-rsa ... Target URL: http://bitbucket.hogwarts.local:7990
16
[+] SUCCESS: The hpotter user SSH key was successfully added.
### SSH 키 나열
#### 사용 사례
> *특정 SCM 시스템의 사용자에 대한 SSH 키를 나열합니다*
#### 구문
관련 인증 정보 및 URL과 함께 `listsshkey` 모듈을 제공하십시오.
##### GitHub Enterprise
현재 사용자의 SSH 키를 나열합니다. 여기에는 SSH 키를 제거하려는 경우 필요한 SSH 키 ID가 포함됩니다.
`SCMKit.exe -s github -m listsshkey -c userName:password -u https://github.something.local`
`SCMKit.exe -s github -m listsshkey -c apiToken -u https://github.something.local`
##### GitLab Enterprise
현재 사용자의 SSH 키를 나열합니다.
`SCMKit.exe -s gitlab -m listsshkey -c userName:password -u https://gitlab.something.local`
`SCMKit.exe -s gitlab -m listsshkey -c apiToken -u https://gitlab.something.local`
##### Bitbucket Server
현재 사용자의 SSH 키를 나열합니다. Bitbucket에서 리포지토리 또는 프로젝트와 관련되지 않은 작업을 수행하려면 사용자 이름/비밀번호 인증만 지원됩니다.
`SCMKit.exe -s bitbucket -m listsshkey -c userName:password -u https://bitbucket.something.local`
#### 예제 출력```
C:\>SCMKit.exe -s gitlab -m listsshkey -u http://gitlab.hogwarts.local -c apiToken
==================================================
Module: listsshkey
System: gitlab
Auth Type: API Key
Options:
Target URL: https://gitlab.hogwarts.local
Timestamp: 2/7/2022 4:09:40 PM
==================================================
SSH Key ID | SSH Key Value | Title
---------------------------------------------------------------
9 | .....p50edigBAF4lipVZkAM= | SCMKIT-RLzie
10 | .....vGJLPGHiTwIxW9i+xAs= | SCMKIT-muFGU
특정 SCM 시스템에서 사용자의 SSH 키를 제거합니다
removesshkey 모듈과 함께 관련 인증 정보 및 URL을 제공합니다. 또한 제거할 대상 사용자의 SSH 키 ID를 제공합니다.
제거할 SSH 키 ID를 제공해야 합니다. 이 ID는 SSH 키를 나열할 때마다 표시됩니다.
SCMKit.exe -s github -m removesshkey -c userName:password -u https://github.something.local -o sshKeyID
SCMKit.exe -s github -m removesshkey -c apiToken -u https://github.something.local -o sshKeyID
제거할 SSH 키 ID를 제공해야 합니다. 이 ID는 SSH 키를 생성할 때 표시되며, SSH 키를 나열할 때도 표시됩니다.
SCMKit.exe -s gitlab -m removesshkey -c userName:password -u https://gitlab.something.local -o sshKeyID
SCMKit.exe -s gitlab -m removesshkey -c apiToken -u https://gitlab.something.local -o sshKeyID
Bitbucket에서 저장소 또는 프로젝트와 관련되지 않은 작업을 수행하려면 사용자 이름/비밀번호 인증만 지원됩니다. 제거할 SSH 키 ID를 제공해야 합니다. 이 ID는 SSH 키를 생성할 때 표시되며, SSH 키를 나열할 때도 표시됩니다.
SCMKit.exe -s bitbucket -m removesshkey -c userName:password -u https://bitbucket.something.local -o sshKeyID
C:>SCMKit.exe -s bitbucket -m removesshkey -u http://bitbucket.hogwarts.local:7990 -c username:password -o 16
================================================== Module: removesshkey System: bitbucket Auth Type: Username/Password Options: 16 Target URL: http://bitbucket.hogwarts.local:7990
[+] SUCCESS: The SSH key of ID 16 was successfully revoked.
### 관리자 통계 나열
#### 사용 사례
> *GitHub Enterprise에서 관리자 통계 나열*
#### 구문
`adminstats` 모듈과 함께 관련 인증 정보 및 URL을 제공합니다. 이 모듈을 사용하려면 GitHub Enterprise에서 사이트 관리자 액세스 권한이 필요합니다.
##### GitHub Enterprise
`SCMKit.exe -s github -m adminstats -c userName:password -u https://github.something.local`
`SCMKit.exe -s github -m adminstats -c apikey -u https://github.something.local`
#### 예제 출력```
C:\>SCMKit.exe -s github -m adminstats -c username:password -u https://github-enterprise.hogwarts.local
==================================================
Module: adminstats
System: github
Auth Type: Username/Password
Options:
Target URL: https://github-enterprise.hogwarts.local
Timestamp: 1/14/2022 9:45:50 PM
==================================================
Admin Users | Suspended Users | Total Users
------------------------------------------------------
1 | 0 | 5
Total Repos | Total Wikis
-----------------------------------
4 | 0
Total Orgs | Total Team Members | Total Teams
----------------------------------------------------------
1 | 0 | 0
Private Gists | Public Gists
-----------------------------------
0 | 1
GitHub Enterprise에서 분기 보호를 나열합니다
protection 모듈과 관련 인증 정보 및 URL을 제공하십시오. 선택적으로 options 매개변수에 문자열을 제공하면 저장소 이름에 포함된 일치하는 결과를 반환합니다.
SCMKit.exe -s github -m protection -c userName:password -u https://github.something.local
SCMKit.exe -s github -m protection -c apikey -u https://github.something.local
SCMKit.exe -s github -m protection -c apikey -u https://github.something.local -o reponame
C:>.\SCMKit.exe -u http://github.hogwarts.local -s github -c apiToken -m protection -o public-r
================================================== Module: protection System: github Auth Type: API Key Options: public-r Target URL: http://github.hogwarts.local
Repo | Branch | Protection
public-repo | dev | Protected: True
Status checks must pass before merge:
Branch must be up-to-date before merge: True
Owner review required before merge: True
Approvals required before merge: 2
Protections apply to repo admins: True
public-repo | main | Protected: False
## 탐지
다음은 이 도구가 기본 상태에서 사용될 때의 정적 서명입니다:
* 프로젝트 GUID - `{266C644A-69B1-426B-A47C-1CF32B211F80}`
* 이 저장소의 [SCMKit Yara 규칙](https://github.com/xforcered/scmkit/blob/main/Detections/SCMKit.yar)을 참조하세요.
* User-Agent 문자열 - `SCMKIT-5dc493ada400c79dd318abbe770dac7c`
* 이 저장소의 [SCMKit Snort 규칙](https://github.com/xforcered/scmkit/blob/main/Detections/SCMKit.rules)을 참조하세요.
* 액세스 토큰 및 SSH 키 이름 - 이 도구를 사용하여 생성된 액세스 토큰과 SSH 키의 이름에는 `SCMKIT-` 접두사가 붙습니다.
도구에서 사용되는 기법에 대한 탐지 지침은 X-Force Red [블로그 게시물](https://securityintelligence.com/posts/abusing-source-code-management-systems)을 참조하세요.
## 참고 자료
* Bitbucket API 문서
* https://developer.atlassian.com/server/bitbucket/reference/rest-api/
* Octokit 문서
* https://octokitnet.readthedocs.io/en/latest/
* https://github.com/octokit/octokit.net
* GitHub API 문서
* https://docs.github.com/en/rest/overview
* GitLab API 문서
* https://docs.gitlab.com/ee/api/api_resources.html
* GitLabApiClient Nuget 패키지 문서
* https://github.com/nmklotas/GitLabApiClient
| 라이브러리 | URL | 라이선스 |
|---|
| Octokit | https://github.com/octokit/octokit.net | MIT License |
| Fody | https://github.com/Fody/Fody | MIT License |
| GitLabApiClient | https://github.com/nmklotas/GitLabApiClient | MIT License |
| Newtonsoft.Json | https://github.com/JamesNK/Newtonsoft.Json | MIT License |
| 공격 시나리오 | 모듈 | 관리자 필요? | GitHub Enterprise | GitLab Enterprise | Bitbucket Server |
|---|
| 정찰 | listrepo | 아니요 | X | X | X |
| 정찰 | searchrepo | 아니요 | X | X | X |
| 정찰 | searchcode | 아니요 | X | X | X |
| 정찰 | searchfile | 아니요 | X | X | X |
| 정찰 | listsnippet | 아니요 | X | ||
| 정찰 | listrunner | 아니요 | X | ||
| 정찰 | listgist | 아니요 | X | ||
| 정찰 | listorg | 아니요 | X | ||
| 정찰 | privs | 아니요 | X | X | |
| 정찰 | protection | 아니요 | X | ||
| 지속 | listsshkey | 아니요 | X | X | X |
| 지속 | removesshkey | 아니요 | X | X | X |
| 지속 | createsshkey | 아니요 | X | X | X |
| 지속 | listpat | 아니요 | X | X | |
| 지속 | removepat | 아니요 | X | X | |
| 지속 | createpat | 예 (GitLab Enterprise만 해당) | X | X | |
| 권한 상승 | addadmin | 예 | X | X | X |
| 권한 상승 | removeadmin | 예 | X | X | X |
| 정찰 | adminstats | 예 | X |