Aller au contenu

Trivy ne cesse de s'améliorer

logo

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.

Terminal window
asdf plugin add trivy
asdf install trivy latest
asdf global 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 :

{
"variables": {
"aws_access_key": "xxxxxxxxx",
"aws_secret_key": "upqkxxxxxxx"
},
"builders": [
{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "eu-west-3",
"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",
"tags": {
"OS_Version": "Ubuntu22.04"
},
"ami_name": "packer-example-{{timestamp}}"
}
],
"provisioners": [
{
"type": "shell",
"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 :

Terminal window
export AWS_PROFILE=perso
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 :

Terminal window
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.
Python (python-pkg)
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 │
│ │ │ │ │ │ URI │
│ │ │ │ │ │ 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é :

Terminal window
trivy aws
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 :

Terminal window
trivy aws --service ec2
Resource Summary for Service 'ec2' (AWS Account 123456789012)
┌─────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────┐
Misconfigurations
├──────────┬──────┬────────┬─────┬─────────┤
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
addresses.
═════════════════════════════════════════════════════════════════════════
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
addresses.
════════════════════════════════════════════════════════════════════════
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
possible.
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.