Malwares, fichiers malveillants sur Amazon S3 : comment intégrer facilement un antivirus ?

Temps de lecture : 7 minutes

100 trillions d’objets stockés sur Amazon S3, et des pics de plusieurs millions de requêtes par seconde (estimation 2021) : le premier service historique d’AWS, lancé en 2006, est aussi le plus largement utilisé par les entreprises. Parmi ces 100 trillions d’objets, les vôtres, ceux de vos partenaires et clients, combien sont potentiellement infectés ou malveillants ?

Pour se prémunir de ce risque, nous recommandons l’usage d’un antivirus pour S3. Dans cet article, nous verrons comment implémenter l’antivirus Trend Micro pour S3 en s’appuyant sur une architecture Serverless à base de fonctions Lambda.

Article écrit en collaboration avec Leo Carré

Amazon S3 et le risque de fichiers malveillants

Amazon Simple Storage Service (Amazon S3)  est un service de stockage de données hautement évolutif sur AWS. En raison de sa flexibilité et de sa facilité d’utilisation, il est devenu l’axe central de nombreuses applications hébergées sur AWS. De nombreux services Cloud ingèrent des données pour les stocker sur des buckets S3, et les rendre disponibles pour d’autres applications ou utilisateurs. Les données ingérées peuvent provenir de sources tierces, ce qui ouvre la porte à des fichiers potentiellement malveillants – des objets qui peuvent être infectés par des logiciels malveillants, des virus, des ransomwares, des chevaux de Troie, etc. 

Non seulement l’organisation est exposée au risque de fichiers malveillants, mais les utilisateurs en aval de l’application sont également exposés à une infection potentielle par des logiciels malveillants sur leurs appareils locaux.

Si un client, un partenaire ou un utilisateur interne télécharge et ouvre un fichier infecté, le système du destinataire peut être endommagé, et l’organisation qui a autorisé le partage du fichier peut voir sa réputation entachée, perdre des clients et des revenus. Pour minimiser les risques négatifs, en amont et en aval, les entreprises devraient analyser directement tous les objets de leurs buckets S3. Malheureusement, AWS ne propose pas ce type de protection nativement, donc il est nécessaire d’utiliser un service tiers pour empêcher un upload de fichiers malicieux sur S3.

Pour répondre à ce besoin, la meilleure solution est d’utiliser un antivirus pour S3. Dans la suite de cet article, nous verrons en détail l’exemple de l’implémentation d’une solution d’antivirus de Trend Micro chez un client Devoteam Revolve. Cet antivirus analyse les fichiers déposés dans le bucket à la recherche de malwares.

Implémentation de l’antivirus Trend Micro pour Amazon S3

L’implémentation a été réalisée  en utilisant le modèle de scan “event-driven”, où le scan est déclenché par l’événement “PutObject” du Bucket S3, qui ensuite démarre la séquence d’analyse. Cette solution est capable de gérer la plupart des formats rencontrés (.bin, .exe, .jpeg, .mp4, .pdf, .txt, .zip, etc).

Le déploiement de cette solution est basé sur l’utilisation de stacks Cloudformation. Il est possible de déployer toutes ressources dans un même compte (Scanner + Bucket) ou bien en mode centralisé un compte contenant le scanner et un ou plusieurs autres comptes avec la partie stockage. 

Ci-dessous l’architecture complète de cette solution :

Architecture complète de la solution Antivirus pour S3

Comme vous pouvez voir sur le diagramme, la solution de Trend Micro est une solution avec une architecture totalement serverless basée sur des fonctions lambdas et des queues SQS !

Fonctionnement de l’architecture serverless

Voyons cela en détail. Une première lambda (BucketListenerLambda) est déclenchée quand un objet est téléchargé sur le bucket S3 (objectCreated event). Cette lambda envoie la presigned URL du fichier téléchargé (donc le fichier lui-même reste toujours sur S3) à une SQS queue.

La queue SQS renvoie le pre-signed URL du bucket S3 à la lambda principale de cette architecture, la ScannerLambda. Cette lambda est considérée comme le point central car elle réalise l’action de scan :

  1. Récupérer le message avec le presigned URL dans la SQS ScannerQueue
  2. Vérifier la signature numérique de l’URL pour s’assurer qu’elle est valide
  3. Rechercher le fichier dans S3 à l’emplacement de l’URL spécifiée
  4. Réaliser le scan du fichier 
  5. Obtenir l’information d’identification du fichier (metadata générée d’une partie seulement du fichier)
  6. Envoyer les metadata à Trend Micro et récupérer le retour avec le metadata scanné
  7. Publier les résultats du scan dans le topic SNS lié à partie stockage
  8. Envoyer les résultats du scan pour la console de Trend

Example Résultats Scan – Trend Micro Console

Nous pouvons voir que l’interface ci-dessus contient beaucoup de détails sur le scan :

  • le type de malware et son nom,
  • un hash du nom du fichier,
  • le nom du bucket concerné,
  • le numéro de compte AWS du scanner,
  • le timestamp du scan.

Il est important de préciser que la connexion avec Trend Micro transmet uniquement des metadata du fichier, c’est à dire que Trend Micro a la responsabilité d’une partie du scan, le scan de la metadata. Le fichier original ne bouge pas, il n’est jamais sorti du compte AWS.

Le Topic SNS ScanResultTopic envoie les résultats à la destination de notre choix. Par exemple, il est possible de rajouter un mail/téléphone de l’équipe de sécurité pour recevoir les résultats du scan. Le SNS va aussi renvoyer ces résultats aux dernières lambdas de cette architecture. La première étant la lambda PostScanActionLambda, partie de l’implémentation du Cloudformation initiale de Trend, et chargée de tagger les fichiers scannés.

Marquage et traitement des fichiers

Nous pouvons voir ici un exemple de tag sur un fichier téléchargé sur S3 :

Tags sur un objet téléchargé sur S3

Les tags vont marquer le fichier comme malicieux ou non, et indiquent l’heure du scan, de façon à disposer de toutes les données importantes concernant chaque fichier scanné.

La deuxième lambda est le CustomLambdaPostScan. C’est une lambda implémentée séparément de la solution, étant donné son caractère customisé. Pour cette partie, nous avons plusieurs choix possibles, comme mettre le fichier dans un bucket de quarantaine, supprimer le fichier, réaliser l’envoi de notifications via Slack / Teams / Security Hub, etc.

Les possibilités sont à déterminer en fonction des besoins du client. Dans le cas présenté, on va créer deux buckets au-delà du bucket principal. Un bucket pour recevoir les fichiers malicieux et mettre en quarantaine (quarantine bucket) et un deuxième bucket pour recevoir les bons fichiers (promote bucket). De cette façon, des fichiers malicieux ne sont pas supprimés et le bucket initial reste seulement comme un “stage” bucket, où le fichier téléchargé reste quelques secondes pendant l’occurrence du scan. Ensuite, il est déplacé ou copié vers l’un des deux autres buckets.

Tarification et estimation des coûts

D’un point de vue FinOps la solution reste aussi intéressante. Le prix final dépend de deux composants : la tarification de la solution Cloud Security Storage de Trend Micro + une estimation du coût de l’infrastructure AWS.

Côté Trend, deux options sont disponibles : 

– un abonnement annuel où le paiement est basé sur le nombre d’espaces de stockage, indépendamment de la taille ou du nombre de fichiers.

– un modèle pay-as-you-go, où vous payez seulement les ressources que vous déployez et utilisez. Dans ce cas, le billing total dépend de l’utilisation de S3, rapporté sur une base horaire. En dessous de 20 fichiers scannés par heure, l’usage reste gratuit, comme spécifié dans le tableau suivant : 

Spécification de prix solution Trend Micro – Mode pay-as-you-go

Par exemple, si nous avons un pic d’utilisation entre 8h-10h de 50 fichiers scannés par heure, mais tout le reste de la journée reste en-dessous de 20 fichiers/heure, le total par jour serait le valeur du lower tier pour 2 heures (0.42US$*2 = 0.84US$).

Pour le prix de l’infrastructure AWS, les principaux services que nous devons prendre en compte sont : Lambda, SNS, SQS et CloudWatch. Ce sont ces services qui consomment la majorité des coûts de l’infra déployée et nous pouvons faire une estimation en considérant une infra qui reçoit plus de 1000 fichiers/heure :

Simulation de coûts d’infra AWS pour 1 mois

Conclusion

Après différents tests et simulations de tarification, nous pouvons confirmer que l’antivirus détecte les logiciels malveillants de différents types et tailles comme annoncé, et que le coût de cette solution reste abordable, même dans le cas d’un client de nombreux objets à scanner chaque jour.

Mais sa plus grande force est sa facilité de mise en œuvre et sa scalabilité, où tout ce que nous avons eu à faire a été d’exécuter un template cloudformation.


Sources

Commentaires :

A lire également sur le sujet :