 Donc dans le speech suivant, je suis content d'introduire Rich Jones, qui va vous parler de ce qu'il sait faire dans 60 000 secondes. Donc un applaudissez, s'il vous plaît pour Rich Jones. Salut tout le monde. Merci de m'accueillir. Merci aussi CCC pour l'opportunité, merci pour m'écouter. Je suis le fondateur de GAN.io. Je suis l'auteur aussi de Zappa, c'est bien sûr le meilleur architecture de sans-serveur au monde. Et vous pouvez construire des applications EventRiven et monter en échelle sans opération. Et bien sûr je vais faire beaucoup de pubs. Donc c'était la première fois à Hackentale, à la conférence de C-Base. Et maintenant c'est utilisé par toute manière d'entreprise. Donc essayez-le. Et merci et bienvenue à mon speech. Donc intrusion et exfiltration dans les architectures sans-serveur. Qu'est-ce que ça veut dire alors? Petite enquête, qui ici et qui connaît AWS Lambda, donc une bonne moitié de la salle lève la main. Pour eux qui n'ont pas d'idées, les vieux bons joueurs des serveurs, c'était qu'en fait un serveur se connectait à la base de données et c'était tout. Un serveur, beaucoup de services. Donc tu pouvais utiliser plein de différents tools pour faire de debug avec l'architecture sans-serveur. En place d'une web-serveur permanent, ça utilise AWS Lambda qui n'a pas de infrastructure dédiée. Et donc la fonctionnalité gardée en cache par Amazon et c'est spawn and destroy sur requêtes. Et ça crée le conteneur et revient avec la réponse plutôt. Et chaque requête est dans une conteneur isolée, donc ce qui le rend super scalable. Un requête, c'est un serveur, etc. Donc 10 000 enquêtes, ces requêtes, c'est 10 000 serveurs. Et c'est aussi beaucoup moins cher. Donc il y a un coup infinitisme. Et donc les patchs de sécurité sont à le niveau du système d'opération. Et maintenant je vais vous parler des certains parternes en production. Donc les gens qui utilisent web Lambda, il y a juste le serveur web. Par exemple, j'utilise Apple pour Django, un CMS Django. Donc c'est juste un gateway ouvert d'Amda. C'est ce qu'on avait avant. Donc il y a aussi des choses à synchron. Donc par exemple, si on a un upload de Fifier, ça va exécuter une fonction Lambda qui va ensuite stocker le résultat dans une base de données dynamo et ensuite le mettre dans un service au cas de geste. Donc c'est un micro service, un framework de micro service type. Donc un chatbox, c'est aussi un cas d'usage à ce fréquent. Donc par exemple, si on a un échange d'email avec un robot, ça pourrait être à travers une fonction Lambda ou à travers un nouveau truc cool comme les echo, machin. On pourrait aller à qui à travers ces techniques que j'ai montrées. Et le gros truc que beaucoup de compagnies utilisent maintenant, c'est pour, par exemple, les compagnies des formats, ils utilisent Lambda comme moteur pour le processus de leur big data. C'est un des trucs intéressants qu'on va approvenir plus tard dans le talk. Donc Lambda va processer la queue. C'est comme ça que le cluster d'ordinateurs va savoir ce qu'il faut faire. Donc il y a beaucoup d'autres, en plus de ces pattern qui existent, mais ça sert à peu près à les cas d'usage les plus fréquents que j'ai vu pour Lambda. Donc si on essaye de casser ces applications, généralement ça ne marchera pas et si ça devait toutefois marcher, ils vont s'éteindre immédiatement parce qu'ils vivent que dans des containers avec une durée de vie très très limitée. Donc si le container meurt, la fonction retour. Donc ça veut dire que ce n'est plus dur d'infiltrer ces codes moins communs. La plupart des choses, c'est custom. Donc on ne peut pas utiliser la même minorité de fois, les fonctions sont isolées, les minorités sont isolées. Il n'y a pas d'utilisateur, il n'y a pas vraiment d'escalation de privilège qui est possible. Il n'y a pas de six admins qu'on peut aller faire nos trucs, nos petits trucs sur le crône pour faire d'escalation. Donc c'est plus dur aussi de persister à un exploit. Parce qu'évidemment, l'exploit va mourir dès que le container va mourir. C'est aussi un système de fichiers qui est en lecture seul. Donc on ne peut pas vraiment cacher des fichiers profondément qui departent dans l'OS. C'est aussi l'entier du cycle de vie du container. Et sous une seconde, il n'y a pas de système d'initialisation, genre à infecter parce que tout ça, c'est fait par Amazon et on ne peut pas vraiment y toucher. C'est aussi plus dur d'exfiltrer les données parce qu'on est dans un cloud virtuel privé. Donc c'est aussi, il y a des rôles spécifiques aux fonctions. Il y a ce qui veut dire des permissions très strictes. Il n'y a pas de reverse shell parce qu'il n'y a pas vraiment de... Il n'y a pas d'accès réseau, donc voilà. Donc à la base, ce n'est pas content. Donc non, si on n'est pas complètement foutu parce que quand Bezos fait une porte, il va ouvrir une fenêtre. Donc voilà. Donc on va prendre un peu de reconnaissance, un peu d'infiltration, un peu d'exploitation, un peu d'exfiltration et puis un tout petit peu de nettoyage. Donc par 0, la reconnaissance. Donc comment on sait ce qu'on n'attaque pas ? Alors il y a deux surfaces d'attaque. Il y a la surface extérieure à l'intérieur pour une fonction lambda. Donc la surface extérieure, c'est l'API. Si on regarde les haideurs, on voit que c'est du contenu dynamique depuis Cloudfront. Donc ça pourrait être une indication qu'on est sur un gateway API. Donc les uploads de fichiers, c'est facile si on regarde le point du upload de fichiers. Donc par exemple si ça dit S3, probablement S3. Si on regarde Wader Emuls, si on regarde la fonction avec la gueule inconnue-connaiguée, en communique, on voit que c'est Amazon, SIS. Il y a aussi la surface d'attaque interne. Donc c'est des services qu'on ne peut pas accéder directement. Donc ça veut dire plein de choses. Donc s'il y a des tâches qui tournent pendant longtemps, il pourrait y avoir un système de QSQS. Il y a aussi des événements de base de nez. Il y a des events utilisateurs. Donc la création des utilisateurs peut aussi être un source d'event. Il y a des logs. Donc le système de logging peut aussi être une source d'event. Donc par un, arbitration aussi. Comment est-ce qu'on va essayer d'en faire une arme de tout ça? Alors, donc les fonctions lambda, basiquement, c'est-à-dire que l'application S, c'est un peu comme une machine, une machine Rube Goldberg. Moi j'ai juste appris des traducteurs. Et nous on appelle ça des non-sense-machines. Ça doit être en allemand ça. Donc il y a beaucoup, beaucoup d'informations qui passent entre ces machines. Donc pour essayer de comprendre ce qu'il se passe, c'est un process de mécanique destructive. Donc comment... Comment laisser tomber un tournevis dans le moteur et écouter sur le son que ça fait. Donc en résumé, on va attaquer les ressources elles-mêmes. On va essayer de lancer un peu tous les évents et puis voir un peu ce qu'il se passe. Donc les suspects habituels pour l'infection. Donc par des entrées qui ne sont pas nettoyées. Donc j'ai l'injection script, des mineurs malicieuses. Et puis si c'est un server web, bien évidemment toutes les paneles des exploits de favoris. Donc un petit exemple. Donc du code vulnérable, par exemple, du code vulnérable trivial. Donc ça se connecte à un saut S3. Ça appelle un process sur les clés qui sont dans ce cahier. Donc sinon on crée un objet appelé en virgule quelque chose. Évidemment, en utilisant l'univers de la clé, avec qui on passe en virgule de la clé, on pourra tout simplement utiliser l'injection de code. Voilà, donc par de l'exploitation, comment on peut escalier notre infection. Donc qu'est-ce que c'est en fait, enfin à la base un Lambda ou qu'est-ce qui est en fait finalement important de voler. Donc si on regarde aussi l'exploitation du Lambda, donc maintenant qu'on peut exécuter des commandes, donc sur Lambda, donc chaque fonction Lambda en fait ce contexte d'événement, peu importe. Donc si on fait le find et on regarde, ça ressemble un peu à du redactics standard. Ça sur mon fait. Il y a Python 2.7, il y a Python 3.4, il y a Node, Perl, GCC. C'est pas mal. Si on regarde le système un peu plus loin, Barack s'exécute un système d'exploitation appelé Amazon Linux, qui est le simple part défaut pour EC2. Donc peut-être c'est un serveur EC2. Donc là, si c'est un serveur EC2, est-ce qu'on peut accéder à la metade donnée du serveur. Donc pour ceux qui ne connaissent pas le serveur de metade donnée de Amazon depuis la déclination d'Amazon, donc la metade donnée d'instances, c'est des informations sur l'instance. Donc n'importe qui qui peut accéder à l'instance peut voir la metade donnée de l'instance. Donc il faut protéger en fait finalement la metade donnée parce que du moment qu'on peut avoir accès à l'application, les gens pourraient avoir accès au metade donnée. Donc autrement dit, ne vous faites pas accès. Donc qu'est-ce qu'il se passe si on essaye d'accéder à la metade donnée de l'instance. Mais ça ne marche pas. Mais il faut se rappeler que quand même, il faut se rappeler de cette manière de faire si on essaye d'attaquer un serveur EC2. Maintenant, on pourrait regarder l'environnement. Donc on va regarder les variables d'environnement. Donc qu'est-ce qu'on voit ? On voit des choses un peu intéressantes comme des tokens de session, comme des idées de clés d'accès. Donc c'est pas mal, c'est pas mal. Donc qu'est-ce que c'est ça ? Amazon, donc le management d'identité d'Amazon, ça donne l'autorisation et l'autorisation par ressource. Donc il y a une tâche, une autorisation. Donc il y a un set d'autorisation. Donc ça sonne mal et c'est mal parce que ça rend le job vachement plus dur. Donc la bonne nouvelle, c'est que c'est vachement facile à le péter. Donc à la base, moi je dirais que tout le monde qui a essayé d'essayer, il y a toujours quelqu'un à un moment qui a fait de la merde. Donc si ils ont eu leur information depuis le Forum de Mer d'Amazon, évidemment ils ont fait de la merde aussi. Donc c'est un des conseils qu'il a trouvé, c'est de l'accès à tout le monde. Donc voilà. Donc tout ce qu'on va essayer d'essayer c'est par l'assomption que finalement on espère qu'ils auront fait de la merde à un certain endroit. Voilà. Donc c'est un peu une assumption audacieuse mais l'avantage c'est que généralement c'est une assumption qui marche. Donc les clés que nous on a vues, ça faisait partie de la police d'exclusion de la MLA. Donc qui utilise une permission, je suis pas scroll, donc on prend une... une autorisation... une autorisation d'une fonction et puis on passe ce nom et puis après ça donne en fait les credentials de l'utilisateur qui utilise de la fonction dans le contexte de la fonction. Donc ça c'est un truc Amazon recommande. Donc c'est le rôle d'exécution donc de la documentation d'Amazon. Donc là on peut voir des choses un peu intéressantes qu'on pourrait utiliser. Donc ressources étoiles ça veut dire qu'on accède à tout qui est accessible au compte. Donc si vous voulez créer des streams, ça c'est intéressant. Décrir le réseau c'est vachement intéressant aussi. Donc voilà, on peut décrire le réseau mais qu'en est-il pour infecter le code source de l'application? D'abord la première question c'est où c'est que le code s'exécute? D'abord c'est que le variable d'environnement. Donc on voit qu'il y a un clé pour le Lambda Task Route qui est bien. On pourrait faire un petit casque sur la backdoor. Enfin c'est le backdoor dans l'application mais non ça ne va pas marcher parce qu'évidemment c'est une vision électro-seule. Donc même si on pourrait écrire ça vivra que 60 millisecondes. Ça n'est pas de persistance pour d'autres utilisateurs. Donc ça va juste vivre la durée du seul requiert HTTP. Mais qu'en est-il de mes tools super cool de hackers? Mais alors bah heureusement il y a un thème space sur le disduire. Les applications normales ils ont quand même besoin de certains fichiers qu'ils veulent écrire etc. Donc thème c'est complètement... enfin on peut pas écrire dessus, ça travaille quand on l'attend et Amazon le décrit comme FMR. Donc FMR c'est pas vraiment exactement la réalité parce que les exécutions sur Lambda sont pas complètement isolées parce qu'elles sont cachées en mémoire pour des raisons de performance. Elles sont cachées mis en cache pas au travers de plusieurs exécutions. Parce que thème c'est un disque en RAM et que la RAM est mise en cache. Donc thème est aussi cachée. Donc on peut stocker nos outils à travers plusieurs exécutions. Donc par contre il faut qu'on regarde la fonction bien au chaud en mémoire. Donc à peu près on pourra passer 70 secondes à 4 minutes 30 et j'ai cassé un accord de non-publication en vous disant ça. Bon bah voilà, désolé. Ce qui est cool c'est que ça peut aussi s'appliquer à des longs process donc ça va pas garder la fonction ouverte mais ça va mettre en pause le process et la réouvrir. Voilà à la prochaine exécution. Donc maintenant on peut installer si on a un Linux les versions compatible Linux 64 de tous nos favoris donc Elmap, Asperate etc. Maintenant on a des clés, on a quelques outils et maintenant qu'est-ce qu'on fait ? Donc la première chose qu'on pourrait avoir envie de faire c'est juste voir ce qu'on peut faire donc utilisons le tool on peut appeler ce code et avec un peu de choses les permissions d'oxys on a de la chance on aura étoiles étoiles étoiles étoiles et ce qui veut dire qu'on peut tout faire. Donc jackpot on peut créer un nouvel le tienteur admin on peut pas se donner voilà c'est game over pour eux cool mais peut-être ça se passera mais probablement pas donc petit interlude si tu arrives à chopper le jackpot donc si tu regardes les permissions d'accès et que tu es à étoiles étoiles étoiles ne vend pas les trucs à des spam ce n'est pas leur quart de crédit pour ils n'envoient pas du spam n'envoient même pas tout à julian parce que l'espionnage c'est ennuyeu donc utilise tes skills pour quelque chose d'incroyable donc mets un message mets des crânes qui font peur mets des crânes qui font peur sur facebook mets t'es petit shout out à tes potes d'ailleurs si moi je suis assez sérieux sur ça donc ramenons les années de nôtre donc utiliser des qualités esthétiques dans la culture de hacker plutôt que faire la poursuite de l'argent et des carrières la valeur esthétique du hacking a en fait plus de valeur et que la communauté va commencer à respecter nos contributions esthétiques parce que ces hacks vont apporter plus que des récompenses pour les bugs que tu peux avoir maintenant voilà c'est mon petit grain de sel beaucoup plus probable que étoiles vous auriez une permissionning semi strict avec des objets S3 ou avec un accès limité à la base de données ou une combinaison de comment on peut abuser ça pour notre notre but donc par toi exfiltration donc tldr si tu n'as pas une connexion directe utilise des tags et des metades données et des services cloud eux-mêmes donc en mode simple on voit un email tout simplement c'est une unique fonction ou on voit un sms donc si tu hacks une système tu peux te renvoyer les résultats en sms tu peux zipper les données et le mettre sur S3 c'est assez simple les trucs plus sympathiques c'est exfiltration avec le vpc donc là je vous montre une architecture assez commun qu'est ce que c'est le vpc Amazon vpc donne des features de sécurité assez avancées donc des listes de contrôle sur l'accès de raison donc c'est très facile à merder le setup de ce genre de l'ailleur donc l'amda a l'accès à tout ce vpc et il y a plein de trous donc ça dépend de la implementation mais le centre de données ça peut donner accès à le réseau interne d'une entreprise donc je vais pas vous montrer comment le faire mais je vais vous montrer comment exfiltrer d'une vpc sans toucher le réseau donc le premier pas c'est de les canaries les libérer des canaries et dans ce cas là on voit que on peut faire les résultats dans le sceau et en deuxième pas on regarde qu'on a l'accès à les ressources vpc et que nous avons l'accès à le rôle d'accès pour exécuter dans l'architecture de AWS lambda donc notre cible dans ce cas c'est la base de données qui est toujours à l'intérieur du vpc donc on n'a pas d'accès direct à la base de données depuis notre environnement d'exécution donc on va utiliser on peut ajouter des choses dans la qsqs par exemple si j'utilise cellerie qui utilise pickle pour utiliser de l'information donc pour les développeurs javascript c'est un peu comme utilisé evel pour exécuter d'utiliser du javascript donc voilà donc là il va falloir trouver vous-même ce que vous voulez faire donc à partir de là pour avoir votre code sur cluster donc on va utiliser ce bug on utilise pickle cellerie pour créer un item malicieux sur la queue qui va ensuite être pris et exécuté sur le cluster donc nous on a l'exécution de code sur le cluster mais on n'a pas vraiment de voix pour couniquer directement avec ce code on peut pas interagir parce qu'on est en fait bloqué on est en dehors du vpc mais qu'est-ce qu'on fait alors maintenant ? c'est d'utiliser la mette d'information des méthodes données sur le vpc c'est une des données qu'on veut parce qu'on a le moyen d'écrire le réseau du vpc on peut ajouter des tags dans le vpc pour ses instances c2 et les interfaces réseaux à travers les cales iconiques donc on a souvent ses permissions parce que le tagging c'est utile pour les admins qui ont envie de faire du log donc nous on peut ajouter la mette d'information à l'interface parce que la lambda a la capacité de lire ces tags nous on peut avoir l'information qu'on veut on peut leur passer à travers la structure et puis on peut extraire l'information ça marche aussi pour les binaires d'applications parce qu'on peut juste encoder quelque chose en plus de 64 puis finalement le mettre dans les tags d'interface réseaux et puis exciter donc c'est cool aussi donc on peut aussi est-ce que le cluster peut modifier des entrées DNS ou est-ce que ça peut créer des groupes de log est-ce que c'est capable de créer des queues soit ils créatifs il y a beaucoup beaucoup et puis une seule permission qui overlap ça peut être assez donc même un seul service pour la pilule peut être assez pour l'infiltration par exemple on peut encoder l'information dans la longueur de la queue et puis relire ça on peut dire la même chose avec le nombre d'interface réseaux qui sont disponibles donc c'est cool c'est cool c'est pas qu'est-ce qu'ils fixent le bug donc la question c'est comment on peut faire des manières permanentes un système sans infrastructure permanente donc abuser en fait finalement les features de founder de cloud un des trucs disponibles c'est un signe de fonction donc Amazon va stocker les anciens les insignes de fonction avec toutes les aliases pour nous qui est utile pour ceux qui vont faire la maintenance d'applications parce qu'ils peuvent faire des rollbacks faciles ils peuvent séparer en fait le d'un ordinateur de dev et de prod mais on peut aussi l'utiliser pour faire la persistance de malware donc on peut avoir une fonction on va prendre le code source on peut upload une version avec un backdoor et puis aliaser ça les fonctions précédentes une route alternative qui est surtout utile si l'application est développée par Travis par exemple quelque chose qui utilise ou n'importe quel système qui utilise CloudFormation qui a besoin de l'application qui soit stockée sur s3 de manière permanente c'est un truc qui effecte le code donc si on infecte le code sur s3 la prochaine fois que C&E va mettre à jour le stack d'applications ça va prendre notre code infecté ça c'est cool parce que si on a accès au bucket de code on peut utiliser une seule l'homme d'infecter pour infecter toutes les autres fonctions d'AMDA qui sont disponibles dans le stack encore un meilleur moyen c'est de voir tout le modèle comme un server par exemple si on a un simple application qui utilise une l'AMDA fou qui est exécutée quand il y a un événement SQS donc il y a une fonction et toutes les vieilles fonctions aliasées jusqu'à la fonction 1 donc si nous on infect la première avec un bug que l'on exploité et qu'on est capable de créer une fonction avec un backdoor donc quand on utilise le même code on crée de la nouvelle fonction mais avec la backdoor et on aliase ça vers la fonction 1 qui va maintenant continuer en notre code backdoor on peut créer un trigger d'event que à chaque fois qu'il y a une nouvelle code qui est mis à jour qui est soumis au bucket S3 où les fonctions sont enregistrées ça va lancer l'exécution de notre malware qui va choper le code on peut créer une fonction infectée avec notre backdoor recréer la fonction FSC la nouvelle et ensuite on a une autre version de la fonction de la dernière de la dernière code qui est disponible de manière permanente pour chaque requête donc le moyen en fait c'est les uploads de new code pour la persistance de malware donc nettoyer je suis vraiment très propre je vous dis honnêtement si vous avez besoin d'être vraiment discrets toute l'exécution lambda des idées d'exécution unique si on les écrit on peut les effacer mais après les erreurs là vont quand même déclencher les alarmes au cloud donc est-ce qu'on peut changer le groupe de logs disponible des variables d'environnement non on peut pas mais on peut changer les règles de rétention donc on espère qu'ils vont pas regarder les logs mais bon c'est pas top encore une meilleure moyenne c'est rien logger pour qu'on sait parce que ces fonctions ont une emprunte mémoire très limitée si on exose enfin si on utilise toute la mémoire la fonction il n'y aura plus assez de mémoire pour faire du logging proprement donc si on emballe tout notre code canary à l'intérieur d'un alert d'exception qui va allouer toute la mémoire qui est disponible ça va pas compter comme une erreur d'invocation et ça va fonctionner shout out à Dave si il log tout le désavantage c'est qu'il log tout donc tu peux aller les modes pauses de tout le monde donc ça c'est cool la partie 6 la résumé joyeux noël tout le monde ho ho ho je suis père noël et je vous donne des prix donc je vous donne un tout le kit d'infection lambda appelé Mackenzie vous pouvez trouver il peut faire pas mal des triques qu'on vient de voir aujourd'hui donc infiltration réinfection etc donc je vais le mettre sur github en conclusion les architectures sans serveur présentent des nouveaux obstacles mais on peut contourner ces obstacles en utilisant des des features du cloud donc si vous voulez contribuer du code regardez mon github regardez mon channel Slack shout out à tout le monde et merci merci Rich malheureusement on a plus de temps pour les questions-réponses donc est-ce que tu seras là pour les questions ? oui oui donc vous venez depuis la salle venez demander directement à Rich si vous avez des questions si vous êtes à la distance vous avez vu les moyens de contact