Lors de ma veille technique, je scrute souvent les change-logs de mes outils
préférés sur GitHub. Et lors de l’une d’elle, j’ai remarqué que Trivy avait
ajouté pas mal de fonctionnalités dont le scan des comptes AWS mais aussi des
images de VM.
Installation de Trivy
Commençons par installer Trivy . Je suis un adepte d’asdf
qui permet de
gérer la présence de plusieurs versions d’un outil sur son poste de travail.
asdf install trivy latest
Pour ceux qui veulent l’installer avec le gestionnaire de packages de votre
Distribution je vous renvoie sur la documentation de
trivy
↗ .
Test de scan sur les ami AWS
Dans un premier, je crée avec Packer
un ami
avec comme base la dernière Ubuntu Jammy
. Voici la configuration que j’ai
utilisée :
" aws_access_key " : " xxxxxxxxx " ,
" aws_secret_key " : " upqkxxxxxxx "
" access_key " : " {{user `aws_access_key`}} " ,
" secret_key " : " {{user `aws_secret_key`}} " ,
" source_ami " : " ami-0493936afbe820b28 " ,
" subnet_id " : " subnet-0b13a91a5bd16a5bf " ,
" skip_region_validation " : " true " ,
" instance_type " : " t2.micro " ,
" ssh_username " : " ubuntu " ,
" ssh_interface " : " public_ip " ,
" associate_public_ip_address " : " true " ,
" OS_Version " : " Ubuntu22.04 "
" ami_name " : " packer-example-{{timestamp}} "
" inline " : [ " sleep 30 " , " sudo apt update -y " , " sudo apt dist-upgrade -y " ]
J’installe les dernières versions de package via le provisionner shell
. Allez,
on lance le build de l’AMI :
export AWS_DEFAULT_REGION = eu-west-3
packer build ami-test.json
Au bout de quelques minutes, je récupère l’id de mon ami perso. Ah oui trivy
ne
prend pas en charge les AMI publiques .
On peut lancer le scan dessus en limitant sur la seule recherche des
vulnérabilités :
trivy vm ami:ami-000bec0fcab9e6fe3 --security-checks vuln
2022-11-30T13:40:19.257+0100 INFO Need to update DB
2022-11-30T13:40:19.257+0100 INFO DB Repository: ghcr.io/aquasecurity/trivy-db
2022-11-30T13:40:19.257+0100 INFO Downloading DB...
35.45 MiB / 35.45 MiB [-------------------------------------------------------------------------------------] 100.00% 5.94 MiB p/s 6.2s
2022-11-30T13:40:26.330+0100 INFO Vulnerability scanning is enabled
2022-11-30T13:40:26.490+0100 INFO Snapshot snap-0a30d66c5b43a0bbb found
2022-11-30T13:40:27.251+0100 WARN No OS package is detected. Make sure you haven ' t deleted any files that contain information about the installed packages.
2022-11-30T13:40:27.251+0100 WARN e.g. files under "/lib/apk/db/", "/var/lib/dpkg/" and "/var/lib/rpm"
2022-11-30T13:40:27.251+0100 INFO Detected OS: ubuntu
2022-11-30T13:40:27.251+0100 INFO Detecting Ubuntu vulnerabilities...
2022-11-30T13:40:27.251+0100 INFO Number of language-specific files: 15
2022-11-30T13:40:27.251+0100 INFO Detecting gobinary vulnerabilities...
2022-11-30T13:40:27.255+0100 INFO Detecting python-pkg vulnerabilities...
2022-11-30T13:40:27.256+0100 INFO Detecting jar vulnerabilities...
ami-000bec0fcab9e6fe3 (ubuntu 22.04)
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
2022-11-30T13:40:27.257+0100 INFO Table result includes only package filenames. Use ' --format json ' option to get the full path to the package file.
Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 1, CRITICAL: 0)
┌─────────────────────┬────────────────┬──────────┬───────────────────┬───────────────┬───────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├─────────────────────┼────────────────┼──────────┼───────────────────┼───────────────┼───────────────────────────────────────────────────────────┤
│ Babel (PKG-INFO) │ CVE-2021-42771 │ HIGH │ 2.8.0 │ 2.9.1 │ CVE-2021-20095 CVE-2021-42771 python-babel: Relative path │
│ │ │ │ │ │ traversal allows attacker to load arbitrary locale... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-42771 │
├─────────────────────┼────────────────┼──────────┼───────────────────┼───────────────┼───────────────────────────────────────────────────────────┤
│ oauthlib (PKG-INFO) │ CVE-2022-36087 │ MEDIUM │ 3.2.0 │ 3.2.1 │ python-oauthlib: DoS when attacker provide malicious IPV6 │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-36087 │
└─────────────────────┴────────────────┴──────────┴───────────────────┴───────────────┴───────────────────────────────────────────────────────────┘
Ça donne une faille sur un package python . Bon, je vais certainement
intégrer cette fonctionnalité sur mes pipelines de CI/CD. Pour le moment
trivy
ne prend en charge que les images au format vmdk et donc les AMI
AWS .
Test du scan de comptes AWS
Trivy
depuis la version 0.31 à ajouter le scan des configurations de comptes
AWS, à la recherche de problèmes de sécurité :
Scan Overview for AWS Account 123456789012
┌────────────────┬──────────────────────────────────────────────────┬──────────────┐
│ │ Misconfigurations │ │
│ ├──────────┬──────────────┬────────┬─────┬─────────┤ │
│ Service │ Critical │ High │ Medium │ Low │ Unknown │ Last Scanned │
├────────────────┼──────────┼──────────────┼────────┼─────┼─────────┼──────────────┤
│ accessanalyzer │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ api-gateway │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ athena │ 0 │ 2 │ 0 │ 0 │ 0 │ just now │
│ cloudfront │ 0 │ 2 │ 1 │ 0 │ 0 │ just now │
│ cloudtrail │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ cloudwatch │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ codebuild │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ documentdb │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ dynamodb │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ ec2 │ 30 │ 2 │ 2 │ 24 │ 0 │ just now │
│ ecr │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ ecs │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ efs │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ eks │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ elasticache │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ elasticsearch │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ elb │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ emr │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ iam │ 0 │ 0 │ 3 │ 3 │ 0 │ just now │
│ kinesis │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ kms │ 0 │ 0 │ 3 │ 0 │ 0 │ just now │
│ lambda │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ mq │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ msk │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ neptune │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ rds │ 1 │ 0 │ 0 │ 0 │ 0 │ just now │
│ redshift │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ s3 │ 0 │ 14 │ 8 │ 1 │ 0 │ just now │
│ sns │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ sqs │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ ssm │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
│ workspaces │ 0 │ 0 │ 0 │ 0 │ 0 │ just now │
└────────────────┴──────────┴──────────────┴────────┴─────┴─────────┴──────────────┘
Oh la la ! Il y a du boulot.
Analysons les failles de type critiques sur mes configurations EC2 :
Resource Summary for Service ' ec2 ' (AWS Account 123456789012 )
┌─────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────┐
│ ├──────────┬──────┬────────┬─────┬─────────┤
│ Resource │ Critical │ High │ Medium │ Low │ Unknown │
├─────────────────────────────────────────────────────────────────────────┼──────────┼──────┼────────┼─────┼─────────┤
│ arn:aws:ec2:eu-west-3:123456789012:launch-template/lt-09a3fd7f17b133916 │ 0 │ 1 │ 0 │ 0 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:network-acl/acl-035056e4e1c7f5075 │ 5 │ 0 │ 0 │ 0 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:network-acl/acl-111e0e78 │ 5 │ 0 │ 0 │ 0 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:security-group/sg-05014d62fdf276c71 │ 4 │ 0 │ 0 │ 4 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:security-group/sg-075c209c0320be0a6 │ 4 │ 0 │ 0 │ 4 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:security-group/sg-08e162dc510699812 │ 4 │ 0 │ 0 │ 4 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:security-group/sg-094c7aa7295abd0e7 │ 0 │ 0 │ 0 │ 4 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:security-group/sg-0cce21325c9864cfb │ 4 │ 0 │ 0 │ 4 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:security-group/sg-0ddae4a3cbac89ae7 │ 4 │ 0 │ 0 │ 4 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:vpc/vpc-04288f840663b6529 │ 0 │ 0 │ 1 │ 0 │ 0 │
│ arn:aws:ec2:eu-west-3:123456789012:vpc/vpc-85818eec │ 0 │ 1 │ 1 │ 0 │ 0 │
└─────────────────────────────────────────────────────────────────────────┴──────────┴──────┴────────┴─────┴─────────┘
trivy aws --service ec2 --arn arn:aws:ec2:eu-west-3:123456789012:security-group/sg-0ddae4a3cbac89ae7
trivy aws --service ec2 --arn arn:aws:ec2:eu-west-3:123456789012:security-group/sg-0ddae4a3cbac89ae7 --severity critical
Results for ' arn:aws:ec2:eu-west-3:123456789012:security-group/sg-0ddae4a3cbac89ae7 '
arn:aws:ec2:eu-west-3:123456789012:security-group/sg-0ddae4a3cbac89ae7 (cloud)
Tests: 4 (SUCCESSES: 0, FAILURES: 4, EXCEPTIONS: 0 )
Failures: 4 (CRITICAL: 4 )
CRITICAL: Security group rule allows egress to multiple public internet
═════════════════════════════════════════════════════════════════════════
Opening up ports to connect out to the public internet is generally to be
avoided. You should restrict access to IP addresses or ranges that are
explicitly required where possible.
See https://avd.aquasec.com/misconfig/avd-aws-0104
────────────────────────────────────────────────────────────────────────
CRITICAL: Security group rule allows egress to multiple public internet
════════════════════════════════════════════════════════════════════════
Opening up ports to connect out to the public internet is generally to be
avoided. You should restrict access to IP addresses or ranges that are
explicitly required where possible.
See https://avd.aquasec.com/misconfig/avd-aws-0104
───────────────────────────────────────────────────────────────────────
CRITICAL: Security group rule allows ingress from public internet.
═══════════════════════════════════════════════════════════════════════
Opening up ports to the public internet is generally to be avoided. You should
restrict access to IP addresses or ranges that explicitly require it where
See https://avd.aquasec.com/misconfig/avd-aws-0107
Si on se rend sur le lien indiqué, on retrouve les solutions pour corriger ce
trou.
Plus loin
Même si ces fonctionnalités sont marquées comme expérimentales, c’est un bon
moyen pour apprendre à construire des infrastructures plus sûres.
On peut aisément les intégrer dans batchs pour les programmer de manière
régulière.
Je vais mettre à jour mon billet sur trivy
avec toutes les nouveautés que je
n’ai pas ajoutées ces derniers temps.
A la prochaine.