Serverless.com Security
Last updated
Last updated
Apprenez et pratiquez le Hacking AWS :HackTricks Formation AWS Red Team Expert (ARTE) Apprenez et pratiquez le Hacking GCP : HackTricks Formation GCP Red Team Expert (GRTE)
Une Organisation est l'entité de plus haut niveau au sein de l'écosystème Serverless Framework. Elle représente un groupe collectif, tel qu'une entreprise, un département ou toute grande entité, qui englobe plusieurs projets, équipes et applications.
L'Équipe est constituée des utilisateurs ayant accès à l'intérieur de l'organisation. Les équipes aident à organiser les membres en fonction des rôles. Les Collaborateurs
peuvent voir et déployer des applications existantes, tandis que les Admins
peuvent créer de nouvelles applications et gérer les paramètres de l'organisation.
Une App est un regroupement logique de services liés au sein d'une Organisation. Elle représente une application complète composée de plusieurs services serverless qui travaillent ensemble pour fournir une fonctionnalité cohérente.
Un Service est le composant central d'une application Serverless. Il représente l'ensemble de votre projet serverless, englobant toutes les fonctions, configurations et ressources nécessaires. Il est généralement défini dans un fichier serverless.yml
, un service inclut des métadonnées comme le nom du service, les configurations du fournisseur, les fonctions, les événements, les ressources, les plugins et les variables personnalisées.
Ceci est un résumé du tutoriel officiel des docs :
Créez un compte AWS (Serverless.com commence dans l'infrastructure AWS)
Créez un compte sur serverless.com
Créez une application :
Cela aurait dû créer une app appelée tutorialapp
que vous pouvez vérifier sur serverless.com et un dossier appelé Tutorial
avec le fichier handler.js
contenant du code JS avec un code helloworld
et le fichier serverless.yml
déclarant cette fonction :
Créez un fournisseur AWS en allant dans le tableau de bord à https://app.serverless.com/<nom de l'organisation>/settings/providers?providerId=new&provider=aws
.
Pour donner accès à serverless.com
à AWS, il demandera d'exécuter une pile cloudformation en utilisant ce fichier de configuration (au moment de la rédaction) : https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml
Ce modèle génère un rôle appelé SFRole-<ID>
avec arn:aws:iam::aws:policy/AdministratorAccess
sur le compte avec une identité de confiance qui permet au compte AWS de Serverless.com
d'accéder au rôle.
Le tutoriel demande de créer le fichier createCustomer.js
qui va essentiellement créer un nouveau point de terminaison API géré par le nouveau fichier JS et demande de modifier le fichier serverless.yml
pour qu'il génère une nouvelle table DynamoDB, définisse une variable d'environnement, le rôle qui utilisera les lambdas générées.
Déployez-le en exécutant serverless deploy
Le déploiement sera effectué via une pile CloudFormation
Notez que les lambdas sont exposées via API gateway et non via des URL directes
Testez-le
L'étape précédente affichera les URLs où vos fonctions lambda des points de terminaison API ont été déployées
Des rôles IAM trop permissifs peuvent accorder un accès non autorisé aux ressources cloud, entraînant des violations de données ou une manipulation des ressources.
Principe du Moindre Privilège : Attribuez uniquement les permissions nécessaires à chaque fonction.
Utilisez des Rôles Séparés : Différenciez les rôles en fonction des exigences de la fonction.
Stocker des informations sensibles (par exemple, clés API, identifiants de base de données) directement dans serverless.yml
ou le code peut entraîner une exposition si les dépôts sont compromis ou si l'accès à AWS est compromis, car ils seront lisibles à partir des configurations des lambdas.
Variables d'Environnement : Injectez des secrets à l'exécution sans les coder en dur.
Intégration du Gestionnaire de Secrets : Utilisez des services comme AWS Secrets Manager, Azure Key Vault, ou HashiCorp Vault.
Variables Chiffrées : Profitez des fonctionnalités de chiffrement du Framework Serverless pour les données sensibles.
Contrôles d'Accès : Restreignez l'accès aux secrets en fonction des rôles.
Évitez de Journaliser les Secrets : Assurez-vous que les secrets ne sont pas exposés dans les journaux ou les messages d'erreur.
Des dépendances obsolètes ou non sécurisées peuvent introduire des vulnérabilités, tandis qu'un traitement incorrect des entrées peut entraîner des attaques par injection de code.
Gestion des Dépendances : Mettez régulièrement à jour les dépendances et scannez les vulnérabilités.
Validation des Entrées : Implémentez une validation stricte et une désinfection de toutes les entrées.
Revue de Code : Effectuez des revues approfondies pour identifier les failles de sécurité.
Analyse Statique : Utilisez des outils pour détecter les vulnérabilités dans le code.
Sans une journalisation et une surveillance appropriées, les activités malveillantes peuvent passer inaperçues, retardant la réponse aux incidents.
Journalisation Centralisée : Agrégez les journaux en utilisant des services comme AWS CloudWatch ou Datadog.
Activez la Journalisation Détailée : Capturez des informations essentielles sans exposer de données sensibles.
Configurez des Alertes : Configurez des alertes pour des activités ou des anomalies suspectes.
Surveillance Régulière : Surveillez en continu les journaux et les métriques pour des incidents de sécurité potentiels.
Des API ouvertes ou mal sécurisées peuvent être exploitées pour un accès non autorisé, des attaques par déni de service (DoS) ou des attaques intersites.
Authentification et Autorisation : Implémentez des mécanismes robustes comme OAuth, clés API, ou JWT.
Limitation de Taux et Throttling : Prévenez les abus en limitant les taux de requêtes.
Configuration CORS Sécurisée : Restreignez les origines, méthodes et en-têtes autorisés.
Utilisez des Pare-feux d'Applications Web (WAF) : Filtrez et surveillez les requêtes HTTP pour des motifs malveillants.
Des ressources partagées et une isolation inadéquate peuvent entraîner des élévations de privilèges ou des interactions non intentionnelles entre les fonctions.
Isoler les Fonctions : Attribuez des ressources distinctes et des rôles IAM pour garantir un fonctionnement indépendant.
Partitionnement des Ressources : Utilisez des bases de données ou des seaux de stockage séparés pour différentes fonctions.
Utilisez des VPC : Déployez des fonctions au sein de Clouds Privés Virtuels pour une isolation réseau améliorée.
Limitez les Permissions des Fonctions : Assurez-vous que les fonctions ne peuvent pas accéder ou interférer avec les ressources des autres, sauf si cela est explicitement requis.
Des données non chiffrées au repos ou en transit peuvent être exposées, entraînant des violations de données ou des falsifications.
Chiffrez les Données au Repos : Utilisez les fonctionnalités de chiffrement des services cloud.
Chiffrez les Données en Transit : Utilisez HTTPS/TLS pour toutes les transmissions de données.
Sécurisez la Communication API : Appliquez des protocoles de chiffrement et validez les certificats.
Gérez les Clés de Chiffrement de Manière Sécurisée : Utilisez des services de clés gérés et faites tourner les clés régulièrement.
Des messages d'erreur détaillés peuvent exposer des informations sensibles sur l'infrastructure ou le code, tandis que des exceptions non gérées peuvent entraîner des plantages d'application.
Messages d'Erreur Généraux : Évitez d'exposer des détails internes dans les réponses d'erreur.
Gestion Centralisée des Erreurs : Gérez et désinfectez les erreurs de manière cohérente à travers toutes les fonctions.
Surveillez et Journalisez les Erreurs : Suivez et analysez les erreurs en interne sans exposer les détails aux utilisateurs finaux.
Des configurations de déploiement exposées ou un accès non autorisé aux pipelines CI/CD peuvent entraîner des déploiements de code malveillant ou des erreurs de configuration.
Sécurisez les Pipelines CI/CD : Mettez en œuvre des contrôles d'accès stricts, une authentification multi-facteurs (MFA) et des audits réguliers.
Stockez la Configuration de Manière Sécurisée : Gardez les fichiers de déploiement exempts de secrets codés en dur et de données sensibles.
Utilisez des Outils de Sécurité pour l'Infrastructure en tant que Code (IaC) : Employez des outils comme Checkov ou Terraform Sentinel pour appliquer des politiques de sécurité.
Déploiements Immutables : Empêchez les modifications non autorisées après le déploiement en adoptant des pratiques d'infrastructure immuable.
L'utilisation de plugins tiers non vérifiés ou malveillants peut introduire des vulnérabilités dans vos applications serverless.
Vérifiez les Plugins en Profondeur : Évaluez la sécurité des plugins avant l'intégration, en privilégiant ceux provenant de sources réputées.
Limitez l'Utilisation des Plugins : Utilisez uniquement les plugins nécessaires pour minimiser la surface d'attaque.
Surveillez les Mises à Jour des Plugins : Gardez les plugins à jour pour bénéficier des correctifs de sécurité.
Isolez les Environnements de Plugins : Exécutez les plugins dans des environnements isolés pour contenir d'éventuels compromis.
Des fonctions accessibles publiquement ou des API non restreintes peuvent être exploitées pour des opérations non autorisées.
Restreignez l'Accès aux Fonctions : Utilisez des VPC, des groupes de sécurité et des règles de pare-feu pour limiter l'accès aux sources de confiance.
Implémentez une Authentification Robuste : Assurez-vous que tous les points de terminaison exposés nécessitent une authentification et une autorisation appropriées.
Utilisez les API Gateways de Manière Sécurisée : Configurez les API Gateways pour appliquer des politiques de sécurité, y compris la validation des entrées et la limitation de taux.
Désactivez les Points de Terminaison Inutilisés : Passez régulièrement en revue et désactivez tout point de terminaison qui n'est plus utilisé.
Accorder des permissions excessives aux membres de l'équipe et aux collaborateurs externes peut entraîner un accès non autorisé, des violations de données et un usage abusif des ressources. Ce risque est accru dans les environnements où plusieurs individus ont des niveaux d'accès variés, augmentant la surface d'attaque et le potentiel de menaces internes.
Principe du Moindre Privilège : Assurez-vous que les membres de l'équipe et les collaborateurs n'ont que les permissions nécessaires pour effectuer leurs tâches.
Clés d'Accès et Clés de Licence sont des identifiants critiques utilisés pour authentifier et autoriser les interactions avec le CLI de Serverless Framework.
Clés de Licence : Ce sont des identifiants uniques requis pour authentifier l'accès à Serverless Framework Version 4 qui permet de se connecter via CLI.
Clés d'Accès : Identifiants qui permettent au CLI de Serverless Framework de s'authentifier avec le Dashboard de Serverless Framework. Lors de la connexion avec le CLI serverless
, une clé d'accès sera générée et stockée sur l'ordinateur portable. Vous pouvez également la définir comme une variable d'environnement nommée SERVERLESS_ACCESS_KEY
.
Exposition par le biais de Dépôts de Code :
Coder en dur ou commettre accidentellement des Clés d'Accès et des Clés de Licence dans des systèmes de contrôle de version peut entraîner un accès non autorisé.
Stockage Insecure :
Stocker des clés en texte clair dans des variables d'environnement ou des fichiers de configuration sans chiffrement approprié augmente la probabilité de fuite.
Distribution Inappropriée :
Partager des clés par des canaux non sécurisés (par exemple, email, chat) peut entraîner une interception par des acteurs malveillants.
Manque de Rotation :
Ne pas faire tourner régulièrement les clés prolonge la période d'exposition si les clés sont compromises.
Permissions Excessives :
Des clés avec des permissions larges peuvent être exploitées pour effectuer des actions non autorisées sur plusieurs ressources.
Apprenez et pratiquez le Hacking AWS :HackTricks Formation AWS Red Team Expert (ARTE) Apprenez et pratiquez le Hacking GCP : HackTricks Formation GCP Red Team Expert (GRTE)