Catégorie : Divers

Checkov avec Github Action

Salut!

J’utilise très souvent l’outil open source Checkov afin de réaliser des scans du code que je développe pour les infrastructures que je réalise.

Checkov vous permet de scanner du code dit d’infrastructure as code (Les plateformes Azure, AWS et Google Cloud sont supportés) avec les languages suivants:

  • ARM
  • Terraform
  • Cloud Formation
  • Kubernetes
  • Serverless framework

L’outil vous propose par défaut plus de 400 checks de sécurité – https://github.com/bridgecrewio/checkov/blob/master/docs/3.Scans/resource-scans.md

Mais il est tout à fait possible de réaliser ses propres checks – https://github.com/bridgecrewio/checkov/blob/master/docs/5.Contribution/New-Check.md

Je vous propose de regarder ensemble comment nous pouvons intégrer checkov dans un workflow Github Action. Dans cet exemple notre scan d’exécutera lors d’un merge dans la branche master.

Vous trouverez ci-dessous le code que j’utilise pour mon workflow, libre à vous de l’adapter à vos besoins.

---
name: Checkov
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.7]
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v1
        with:
          python-version: ${{ matrix.python-version }}
      - name: Test with Checkov
        run: |
          pip install checkov
          checkov -d .

Je vous donne rendez-vous dans votre repository github, puis je vous invite à cliquer sur l’onglet ‘Actions’ puis « set up a workflow yourself ».

Copier/Coller le code précédent et cliquer sur « Start commit »

Enfin cliquer sur « Commit new file »

Notre workflow est désormais en place, il s’exécutera lors du prochain merge de votre code dans la branche « master ».

Ci-dessous un exemple d’un scan:

Maxime.

Identifier les serveurs SQL publiques!

Hello,

Après vous avoir présenté comment identifier les comptes de stockages qui peuvent accessible depuis internet au sein de votre souscription Azure.

Dans cet article, nous utiliserons de nouveau une Azure Policy en audit mode afin de nous permettre d’identifier les serveurs SQL qui peuvent être accessible depuis Internet.

Azure Policy Code:

{
      "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Sql/servers"
          },
          {
            "not": {
              "field": "Microsoft.Sql/servers/publicNetworkAccess",
              "equals": "Disabled"
            }
          }
        ]
      },
      "then": {
        "effect": "audit"
      }
    }
}

Maxime.

Identifier les comptes de stockage publiques!

Hello,

Dans cet article, je vais vous présenter comment identifier vos comptes de stockage Azure qui peuvent être accessibles depuis internet. Si vous suivez un peu l’actualité, vous avez certainement pu constater de nombreux « leaks » qui sont dus à des comptes de stockages directement exposés sur internet.

Pour remédier à cette problématique, nous allons créer une Azure Policy , qui nous permettra d’identifier rapidement les comptes de stockage de notre souscription qui sont exposés sur Internet.

Je vous donne rendez dans le portail Azure, puis je vous invite à sélectionner Azure Policy.

Puis cliquer sur « Definitions »:

Cliquer sur « Policy Definition »:

Compléter les champs suivants:

  • Definition location: Sélectionner votre souscription Azure
  • Name: Définir un nom explicite pour votre policy
  • Description: Définir une description de votre policy
  • Category: Sélectionner une catégorie existante ou créer une nouvelle catégorie.

Dans la section « Policy Rule », je vous invite à copier/coller le code suivant:

{
      "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
          },
          {
            "not": {
              "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
              "equals": "false"
            }
          }
        ]
      },
      "then": {
        "effect": "audit"
      }
    }
}

On pourra noter que l’effet de cette policy est directement codé dans la policy elle-même. Dans une seconde version, elle pourrait être gérée avec l’aide d’un paramètre.

Une fois la policy créée je vous invite à cliquer sur « Assign ».

Puis cliquer sur « Review + create » et « Create »

Patientez ensuite environ 20 min avant que la policy soit exécutée. Une fois exécutée, vous pouvez désormais visualiser les résultats.

Dans cet exemple, nous avons 4 comptes de stockage qui sont accessibles depuis internet.

Afin de remédier à cette problématique de sécurité, je vous invite à vous rendre au sein d’un de vos comptes de stockage, puis sélectionner l’onglet « Configuration » et sélectionner « Disabled » pour le paramètre: « Allow Blob public access ».

Maxime.