ADOKit
설명
Azure DevOps Services 공격 툴킷 - ADOKit는 사용 가능한 REST API를 활용하여 Azure DevOps Services를 공격하는 데 사용할 수 있는 툴킷입니다. 이 도구는 사용자가 공격 모듈을 지정하고 해당 Azure DevOps Services 인스턴스에 대한 유효한 자격 증명(API 키 또는 도난된 인증 쿠키)을 함께 지정할 수 있도록 합니다. 지원되는 공격 모듈에는 정찰, 권한 상승 및 지속성이 포함됩니다. ADOKit는 모듈식 접근 방식으로 구축되어 정보 보안 커뮤니티에서 향후 새로운 모듈을 추가할 수 있습니다.
ADOKit에서 사용하는 기술에 대한 자세한 내용은 X-Force Red 백서에 있습니다.
Black Hat USA Arsenal 2024
발표 슬라이드와 데모는 이 저장소의 BHUSA Arsenal 2024 폴더에 포함되어 있습니다.
릴리스
- ADOKit 버전 1.4.1은 릴리스에서 찾을 수 있습니다.
목차
설치/빌드
사용된 라이브러리
이 프로젝트에서는 아래의 타사 라이브러리가 사용됩니다.
사전 컴파일
- 릴리스에서 사전 컴파일된 바이너리를 사용하십시오.
직접 빌드
프로젝트를 직접 컴파일하려면 아래 단계에 따라 Visual Studio를 설정하십시오. 이를 위해서는 NuGet 패키지 관리자에서 설치할 수 있는 두 개의 .NET 라이브러리가 필요합니다.
- Visual Studio 프로젝트를 로드하고 "도구" --> "NuGet 패키지 관리자" --> "패키지 관리자 설정"으로 이동하십시오.
- "NuGet 패키지 관리자" --> "패키지 소스"로 이동하십시오.
- URL이
https://api.nuget.org/v3/index.json인 패키지 소스를 추가하십시오.
- Costura.Fody NuGet 패키지를 설치하십시오.
Install-Package Costura.Fody -Version 3.3.3
- Newtonsoft.Json 패키지를 설치하십시오.
Install-Package Newtonsoft.Json
- 이제 프로젝트를 직접 빌드할 수 있습니다!
명령 모듈
- 정찰
- check - 조직이 Azure DevOps를 사용하는지와 자격 증명이 유효한지 확인합니다.
- whoami - 현재 사용자와 해당 그룹 멤버십을 나열합니다.
- listorgs - Azure DevOps 내에서 액세스 가능한 모든 조직 또는 전체 조직을 나열합니다.
- listrepo - 모든 저장소를 나열합니다.
- searchrepo - 주어진 저장소를 검색합니다.
- listproject - 모든 프로젝트를 나열합니다.
- searchproject - 주어진 프로젝트를 검색합니다.
- searchcode - 검색어가 포함된 코드를 검색합니다.
- searchfile - 검색어를 기반으로 파일을 검색합니다.
- listuser - 사용자를 나열합니다.
- searchuser - 주어진 사용자를 검색합니다.
- listteam - 팀을 나열합니다.
- searchteam - 주어진 팀을 검색합니다.
- getteammembers - 주어진 팀의 팀 구성원을 가져옵니다.
- listgroup - 그룹을 나열합니다.
- searchgroup - 주어진 그룹을 검색합니다.
- getgroupmembers - 주어진 그룹의 모든 그룹 구성원을 나열합니다.
- getpermissions - 주어진 프로젝트에 액세스할 수 있는 사람의 권한을 가져옵니다.
- creds - 코드에서 자격 증명을 검색합니다(키워드는 아래 나열됨).
"pw OR pwd OR passwrod OR password OR \"-----BEGIN PGP PRIVATE KEY BLOCK-----\" OR \"-----BEGIN EC PRIVATE KEY-----\" OR \"-----BEGIN DSA PRIVATE KEY-----\" OR \"-----BEGIN OPENSSH PRIVATE KEY-----\" OR \"-----BEGIN RSA PRIVATE KEY-----\" OR ANSIBLE_VAULT OR AWS_ACCESS_KEY_ID OR AWS_SECRET_ACCESS_KEY OR ACCESS_TOKEN OR API_KEY OR Authorization OR db_password"
- getbuildlogs - 하나 또는 모든 프로젝트의 빌드 로그를 다운로드합니다.
- listbuildlogs - 하나 또는 모든 프로젝트의 빌드 로그를 나열합니다.
- searchbuildlogs - 주어진 검색어로 빌드 로그를 검색합니다.
- 지속성
- createpat - 사용자에 대한 개인 액세스 토큰을 생성합니다.
- listpat - 사용자에 대한 개인 액세스 토큰을 나열합니다.
- removepat - 사용자에 대한 개인 액세스 토큰을 제거합니다.
- createsshkey - 사용자에 대한 공개 SSH 키를 생성합니다.
- listsshkey - 사용자에 대한 공개 SSH 키를 나열합니다.
- removesshkey - 사용자에 대한 공개 SSH 키를 제거합니다.
- 권한 상승
- addprojectadmin - 주어진 프로젝트의 "프로젝트 관리자"에 사용자를 추가합니다.
- removeprojectadmin - 주어진 프로젝트의 "프로젝트 관리자" 그룹에서 사용자를 제거합니다.
- addbuildadmin - 주어진 프로젝트의 "빌드 관리자" 그룹에 사용자를 추가합니다.
- removebuildadmin - 주어진 프로젝트의 "빌드 관리자" 그룹에서 사용자를 제거합니다.
- addcollectionadmin - "프로젝트 컬렉션 관리자" 그룹에 사용자를 추가합니다.
- removecollectionadmin - "프로젝트 컬렉션 관리자" 그룹에서 사용자를 제거합니다.
- addcollectionbuildadmin - "프로젝트 컬렉션 빌드 관리자" 그룹에 사용자를 추가합니다.
- removecollectionbuildadmin - "프로젝트 컬렉션 빌드 관리자" 그룹에서 사용자를 제거합니다.
- addcollectionbuildsvc - "프로젝트 컬렉션 빌드 서비스 계정" 그룹에 사용자를 추가합니다.
- removecollectionbuildsvc - "프로젝트 컬렉션 빌드 서비스 계정" 그룹에서 사용자를 제거합니다.
- addcollectionsvc - "프로젝트 컬렉션 서비스 계정" 그룹에 사용자를 추가합니다.
- removecollectionsvc - "프로젝트 컬렉션 서비스 계정" 그룹에서 사용자를 제거합니다.
- getpipelinevars - 주어진 프로젝트에 사용되는 모든 파이프라인 변수를 검색합니다.
- getpipelinesecrets - 주어진 프로젝트에 사용되는 모든 파이프라인 비밀의 이름을 검색합니다.
- getvariablegroups - 주어진 프로젝트에 사용되는 모든 변수 그룹과 해당 변수를 검색합니다.
- getserviceconnections - 주어진 프로젝트에 사용되는 서비스 연결을 검색합니다.
인수/옵션
- /credential: - 인증을 위한 자격 증명(PAT 또는 쿠키)입니다. 모든 모듈에 적용됩니다.
- /url: - Azure DevOps URL입니다. 모든 모듈에 적용됩니다.
- /search: - 검색할 키워드입니다. 모든 모듈에 적용되지 않습니다.
- /project: - 작업을 수행할 프로젝트입니다. 모든 모듈에 적용되지 않습니다.
- /user: - 특정 사용자에 대해 작업을 수행합니다. 모든 모듈에 적용되지 않습니다.
- /id: - 지속성 모듈과 함께 사용되어 특정 토큰 ID에 대해 작업을 수행합니다. 모든 모듈에 적용되지 않습니다.
- /group: - 특정 그룹에 대해 작업을 수행합니다. 모든 모듈에 적용되지 않습니다.
인증 옵션
Azure DevOps 인스턴스에 인증할 때 ADOKit에서 사용할 수 있는 인증 옵션은 아래와 같습니다.
- 도난된 쿠키 - UserAuthentication -
.dev.azure.com 도메인에 대한 사용자 머신의 UserAuthentication 쿠키입니다.
/credential:UserAuthentication=ABC123
- 도난된 쿠키 - AadAuthentication -
.dev.azure.com 도메인에 대한 사용자 머신의 AadAuthentication 쿠키입니다.
- 개인 액세스 토큰(PAT) - 단일 문자열인 액세스 토큰/API 키입니다.
- 도난된 액세스 토큰 - 적절한 액세스 토큰을 도난당하거나 갱신할 수 있는 경우 이를 사용할 수도 있습니다. 액세스 토큰을 사용하는 경우 Azure Resource Manager(ARM) 리소스(
"aud":"https://management.core.windows.net/") 또는 Azure DevOps 리소스("aud":"499b84ac-1321-427f-aa17-267ca6975798")에 대해 유효해야 합니다.
모듈 세부 정보 표
아래 표는 각 모듈에 필요한 권한을 보여줍니다.