Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • vimazeno/blog.limos.fr
  • matrossevi/blog.limos.fr
  • borlonjo/blog.limos.fr
3 results
Show changes
Showing
with 2589 additions and 33 deletions
# X.509 / TLS
# <i class="fa fa-user-secret" aria-hidden="true"></i>
### OpenSSL
* Implémenté en C
* Boîte à outils de chiffrement
* bibliothèques cryptographie générale
* bibliothèques implémentant le protocole SSL
* commande en ligne
* Supporte SSL 2.0, SSL 3.0 et TLS 1.0
* Actuellement TLS 1.3
* [ANSSI : privilégier TLS1.3 et tolérer TLS1.2, TLS1.1 et TLS1.0](https://www.ssi.gouv.fr/uploads/2016/09/guide_tls_v1.1.pdf)
* Distribué sous une licence de type Apache
### GnuTLS
* Conforme aux spécifications de l'IETF
* Permet l'authentification via les certificats
* X509
* PGP
* A la différence d'OpenSSL, GnuTLS est compatible avec les licences GPL
### [X.509](https://fr.wikipedia.org/wiki/X.509)
* Norme Pour
* certificats à clé publique
* listes de révocation de certificats
* attributs de certificat
* algorithme de validation du chemin de certification
* UIT (agence de l'ONU le développement spécialisé dans les TIC )
* v1: 1988, v2: 1993, v3: 1996
## [X.509](https://fr.wikipedia.org/wiki/X.509)
* Système hiérarchique d'autorités de certification
* *certification authority* - ***CA***
* une ***CA*** attribue un certificat liant
* une clé publique
* un nom distinctif
* *Distinguished Name* - ***DN***
## [X.509](https://fr.wikipedia.org/wiki/X.509) DN
* *C*: Country
* *L*: Locality
* *ST*: State
* *O*: Organisation
* *SO*: Organizational Unit
* *CN*: Common Name
* *Street*: Adress
* *E*: Mail
#### Anatomie
* **Version de la norme**
* **Serial**
* Algorithme de signature du certificat
* **Issuer** le signataire (***DN*** de la ***CA***)
* **Validity** début fin de validité
* **Subject name** **DN** identifié par le certificat
* **Subject Public Key**
* Extensions (ajouté en v3)
* paires clé / valeur
Le tout signé par la **CA**
#### Extensions
Informations ou contraintes d'utilisation
* **Key Usage**
* **Subject Key Identifier**
* **keyEncipherment** Algorithme de signature du certificat
* **rfc822Name** email address
* **dNSName** DNS name for a machine
* **uniformResourceIdentifier** URL
* **iPAddress**
## Générer une clé RSA
```bash
$ openssl genrsa -out ca.key 4096
```
* 4096 représente la taille de la clé
* ca.key contient la clé privée ET la clé publique
```bash
$ openssl rsa -in ca.key -pubout
```
* Permet d'extraire la partie publique uniquement
## Générer un certificat
```bash
$ openssl req -new -x509 -days 1826 \
-key ca.key -out ca.crt \
-subj '/CN=m4z3.me'
```
```bash
$ cat ca.crt
-----BEGIN CERTIFICATE-----
MIIC/zCCAeegAwIBAgIJAM4FANszQweWMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
BAMMC2V4YW1wbGUuY29tMB4XDTE3MTAzMTExMzEzNFoXDTE3MTEzMDExMzEzNFow
```
[différences entre certificats](https://www.sslmarket.fr/ssl/help-la-difference-entre-certificats)
## Certificat auto-signé
* **Issuer** et **Subject** identiques
* Tout le monde peut en fabriquer
* Rejetés par défaut par les navigateurs
#### Faire parler un certificat
local
```bash
$ openssl x509 -text -noout -in ca.crt
```
distant
```bash
$ openssl s_client -connect isima.fr:443 -showcerts -servername isima.fr
```
* [Using OpenSSL’s s_client command with web servers using Server Name Indication (SNI)](https://major.io/2012/02/07/using-openssls-s_client-command-with-web-servers-using-server-name-indication-sni/)
usage du certificat
```bash
$ openssl x509 -purpose -in ca.crt -inform PEM
```
## Faire parler un certificat
![Check CERT Firfox](images/ssl/check-cert-ff.png)
* Avec son navigateur en cliquant sur le cadenas
## Faire parler un certificat
![Check CERT Firfox](images/ssl/check-cert-ff2.png)
## Autorité de certificaiton (CA)
* Tiers de confiance
* Recueille les demandes de certifications
* vérifie la validité de la demande
* vérifie l'identité
* preuve par contrôle des domaines
* Signe les certificats
* Gère les révocations
## Autorité de certificaiton (CA)
* ***CA*** de confiance
* importées par défaut dans le navigateur
* Tout supprimer?
* être importée dans les navigateurs
* payer (le navigateur)
## Known good signers
![Known good signers](images/ssl/known-good-signers.png)
## [Root CA](https://fr.wikipedia.org/wiki/Certificat_racine)
Certificat racine
* Clés publiques non signées, ou auto-signées
* le sommet de la pyramide de confiance
* un certificat est rarement signé par une ***CA*** racine
* la ***CA*** racine créée plusieurs ***CA*** intermédiaires
* sous scellés / déconnectés / sortis (autre ***CA***)
* auto signé
[DigiCert Trusted Root Authority Certificates](https://www.digicert.com/digicert-root-certificates.htm)
## Chain of trust
Chaînes de certification
* Les ***CA*** intermédiaires signent
* les certificats des clients
* d'autres ***CA*** intermédiaires
* il faut alors fournir la chaîne de certification
* au cas où l'intermédiaire ne soit pas dans le navigateur
## CA connues
* [digicert](https://www.digicert.com/)
* [verisign](https://www.websecurity.symantec.com/fr/fr/ssl-certificate)
* [Comodo](https://www.comodo.com/)
* ...
* Gratuites
* [StartSSL free](https://www.startcomca.com/index/support?v=1)
* [CAcert](http://www.cacert.org/) (not known good signers)
* [Let's Encrypt](https://letsencrypt.org/) fondé par l'[EFF](https://www.eff.org/fr) et [Mozilla](https://www.mozilla.org/fr/)
## CA & Firefox
![Warning](images/ssl/https-ff.png)
## CA & Chrome
![Warning](images/ssl/https-chrome.png)
## Différentes causes
* Certificat différent du nom de domaine
* wildcard
* https://amendes.gouv.fr
* Certificats expirés
* ***CA*** non importée
* ...
## Certificate Sign Request
### (CSR)
```bash
$ openssl req -new -newkey rsa:2048 -sha256 \
-nodes -out user.csr -keyout user.key \
-subj '/CN=example.com'
```
* Générer un requête de certification
* Un ***CSR*** est auto-signé (pour vérifier l'intégrité)
```bash
$ openssl req -in user.csr -text -noout
```
* Lire le ***CSR***
```bash
$ openssl req -text -noout -verify -in user.csr
```
* Vérifier le ***CSR***
### Création d'un certificat à partir d'un CSR
```bash
$ openssl x509 -req -days 365 \
-CA ca.crt -CAkey ca.key \
-CAcreateserial -CAserial serial \
-in user.csr -out user.crt \
```
* Génèrer un certificat à partir d'un ***CSR***
* la ***CA*** vérifie qu'elle gère le domaine
* la ***CA*** ajoute quelques informations
* la ***CA*** signe avec sa clé privée
* la ***CA*** protège sa clé privée
note:
- https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs
## Vérification de la signature
```bash
$ openssl verify -CAfile ca.crt user.crt
user.crt: OK
```
```bash
$ openssl x509 -text -noout -in user.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
f0:61:f4:c1:96:86:21:07
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=m4z3.me
Validity
Not Before: Jan 18 17:27:54 2018 GMT
Not After : Jan 18 17:27:54 2019 GMT
Subject: CN=example.com
```
note:
- https://stackoverflow.com/questions/25482199/verify-a-certificate-chain-using-openssl-verify
## Signer un fichier
[Sign and verify text files to public keys via the OpenSSL Command Line](https://raymii.org/s/tutorials/Sign_and_verify_text_files_to_public_keys_via_the_OpenSSL_Command_Line.html)
#### Certificate Revocation List (CRL)
Révocation de certificats
* liste de certificats liste des identifiants des certificats qui ont été révoqués ou invalidés
* utile en cas de compromission / décommissionnement
* informer la ***CA***
* la ***CA*** ajoute le certificat à sa liste de certificats révoqués
* cette liste est signée par la ***CA***
* Souvent la clé qui signe les certificats signe les ***CRL***
* Quand que le navigateur interroge-t-il les ***CRL*** ?
#### Certificate Revocation List (CRL)
* Serial
* Algorithme de signature de la ***CRL***
* **Issuer** le signataire (***DN*** de la ***CA***)
* **Update date **
* **Next Update date**
* **CRL**
* revoked 1
...
* revoked 1
* Extensions
* paires clé / valeur
note:
- next update parce que CRL delta
## Revocation reason
* unspecified (0)
* keyCompromise (1)
* CACompromise (2)
* affiliationChanged (3)
* superseded (4)
* cessationOfOperation (5)
* certificateHold (6)
* removeFromCRL (8)
* privilegeWithdrawn (9)
* AACompromise (10)
#### Online Certificate Status Protocol (OCSP)
Protocole d’interrogation de validité pour un certificat
![OCSP](images/ssl/OCSP.png)
* si l'***OCSP*** n'est pas disponible pour le certificat firefox accepte le certificat
* s'il est valide
#### Online Certificate Status Protocol (OCSP)
* Peu déployé
* [Approche par log publique de création révocation](http://confiance-numerique.clermont-universite.fr/Slides/R-Sasse.pdf) [<i class="fa fa-video-camera"></i>](http://webtv.u-clermont1.fr/media-MEDIA150907102804168)
* [Google's Certificate Transparency project](http://www.certificate-transparency.org/)
## <strike>SSL</strike> / TLS
* Crée un canal de communication **authentifié**, protégé en **confidentialité** et en **intégrité**
* Utilise des certificats X.509
* délivrés par des ***CA***
* Utilise un système de chiffrement asymétrique
* pour échanger une clé pour le chiffrement symétrique
* Protocole initialement pensé pour sécurisé HTTP
* étendu à d'autres services (SMTP, LDAP, VPN, ...)
## TLS dans le modèle TCP/IP
![SSL/TLS in TCP/IP model](images/ssl/tcp-ip_model_ssl-tls_protocol.png)
* Couche intermédiaire car indépendante du protocole utilisé
## Versions SSL
Secure Socket Layer
* **1.0** par Netscape en 1994, pas de public release
* **2.0** par Netscape en Février 1995, [The SSL Protocol Version 2.0](http://www.frameip.com/rfc/draftxxx.php)
* **3.0** par Netscape en Novembre 1996, [The SSL Protocol Version 3.0](http://www.frameip.com/rfc/draft302.php)
## Versions TLS
Transport Layer Security
* **1.0** released en janvier 1999, [RFC 2246](http://www.frameip.com/rfc/rfc2246.php)
* **TLS 1.0** = SSL 3.1 [IETF](http://www.ietf.org/)
* **1.1** released en Avril 2006, [RFC 4346](http://www.frameip.com/rfc/rfc3546.php)
* **1.2** released en Août 2008, [RFC 5246](http://www.frameip.com/rfc/rfc4366.php)
* **1.3** released en Août 2018, [RFC 8446](https://www.bortzmeyer.org/8446.html)
## [Cypher suite](https://fr.wikipedia.org/wiki/Suite_cryptographique)
Suite cryptographique
* échange de clés
* authentification des parties
* chiffrer les données applicatives
* protéger les données applicatives en intégrité (MAC)
**Cipher suites** gérées par un système
<pre><code class="hljs bash" style="font-size: 35px">$ openssl ciphers -v</code></pre>
## TLS_RSA_WITH_RC4_128_MD5
Se lit
* [RSA](https://fr.wikipedia.org/wiki/Chiffrement_RSA)
* authentification du serveur
* RC4_128 = algorithme de chiffrement [RC4](https://fr.wikipedia.org/wiki/RC4) avec clé de 128 bits
* pour chiffrer le canal de communication
* [MD5](https://fr.wikipedia.org/wiki/MD5)
* protection de l'intégrité du canal de communication via [HMAC MD5](https://fr.wikipedia.org/wiki/Keyed-Hash_Message_Authentication_Code)
![TLS Handshake](images/ssl/TLS-Handshake.png "SSLv2 Handshake")
## clienthello
Le client
* envoie les suites cryptographiques qu'il est capable de mettre en oeuvre
## Réponse serveur
Le serveur
* Si aucune suite n'est satisfaisante
* **Alert** fin de connexion
* Sinon
* **ServerHello** suite cryptographique choisie
* **ServerRandom** valeur aléatoire (publique)
* **Certificate** certificat du serveur
* **ServerHelloDone** indiquant qu'il est attente d'une réponse du client
#### Négociation de la suite cryptographique
* Tous les serveurs web ne négocient pas les cypher suites de la même façon
* **IIS** prend la première suite cryptographique préférée du serveur et proposée par le client
* **Apache** prend la première suite proposée par le client et supportée par le serveur
* permet une baisse du niveau de sécurité
* *SSLHonorCipherOrder* pour sécuriser
[SSL / TLS Renegotiation Handshakes MiTM Plaintext Data Injection- medium or low risk?](https://security.stackexchange.com/questions/63867/ssl-tls-renegotiation-handshakes-mitm-plaintext-data-injection-medium-or-low)
## Fin de négociation
Le client
* Vérifie la validité du certificat
* Génère une clé de chiffrement symétrique
* **secret partagé** ou **pre master secret**
* Chiffre le **secret partagé** avec la clé publique du serveur
## Fin de négociation
Le client envoie au serveur
* **ClientKeyExchange** le **secret partagé** chiffré
* **ChangeCipherSpec** paramètres pour la suite cryptographique choisie
* **Finished** fin de négociation
* premier message chiffré symétriquement
* avec **secret partagé** et **ServerRandom**
## Fin de négociation
Le serveur
* Reçoit le **secret partagé** chiffré généré par le client
* Déchiffre le **secret partagé** avec sa clé privée
* **ChangeCipherSpec** paramètres pour la suite cryptographique choisie
* **Finished** fin de négociation
<br />
#### La suite de la communication est chiffrée symétriquement
## Connexion SSL/TLS
* Le client a authentifié le serveur
* mais le serveur n’a aucune information sur le client
* possibilité d'avoir un certificat côté client
* Les paramètres de chiffrements
* sont négociés et « jetables »
## Certificats clients
* Un client peut présenter un certificat au serveur
* Le serveur vérifie si le certificat est signé par une CA de confiance
* Le serveur peut utiliser ces informations pour authentifier l’utilisateur
* Le certificat peut être stocké dans un périphérique (e.g. [Yubikey](https://www.yubico.com/)), une carte à puce (e.g. [CPS](https://fr.wikipedia.org/wiki/Carte_de_Professionnel_de_Sant%C3%A9)), ...
## Vulnérabilité TLS_RSA_WITH_RC4_128_MD5
* si la clé privée du serveur est récupérée
* le **secret partagé** est récupérable
* on peut obtenir les clés de session
* toutes les communications sont alors déchiffrables
* passées
* futures
## Perfect Forward Secrecy (PFS)
*Confidentialité Persistante*
* La clé compromission d'un clé privée n'affecte pas la confidentialité des communications passées
* utilisée uniquement pour signer
* [Problème NP-complet](https://fr.wikipedia.org/wiki/Probl%C3%A8me_NP-complet)
![Diffie-Hellman exchange](images/ssl/diffie-hellman-exchange.png "Diffie-Hellman exchange")
## Certification Authority Authorization (CAA)
* Une CA peut vérifier si elle est autorisée à émettre un certificat pour un domaine via le DNS (enregistrement CAA)
* Devenu obligatoire le 8 septembre 2017
* Le 9 septembre 2017, Comodo s’est fait pincé pour ne pas le respecter :
[Comodo Caught Breaking New CAA Standard One Day After It Went Into Effect](https://www.bleepingcomputer.com/news/security/comodo-caught-breaking-new-caa-standard-one-day-after-it-went-into-effect/)
Note:
- cas où un domaine est déjà enregistré chez un CA (let's encrypt)
- et qu'une autre CA lui délivre un certificat
- Comodo n'en a pas tenu compte
## DNS-Based Authentication of Named Entities (DANE)
* pour un nom de domaine
* publication du certificat signé dans un enregistrement TLSA du DNS
* protégé par DNSSEC
* permet de spécifier quelles **CAs** peuvent émettre des certificats
* Validation par les clients
## HTTPS
* HTTP + SSL/TLS = HTTPS assure
* Confidentialité
* [Session Hijacking](http://en.wikipedia.org/wiki/Session_hijacking)
* [les dangers du wifi](https://wiki.wireshark.org/CaptureSetup/WLAN)
* [firesheep](http://codebutler.github.io/firesheep/)
* Intégrité
* Authentification
* via les certificats
## Apache
* __Open SSL__
* mod_ssl
* __GnuTLS__
* [mod_gnutls](https://technique.arscenic.org/lamp-linux-apache-mysql-php/apache-le-serveur-http/modules-complementaires/article/installer-et-configurer-le-module)
## Que "chiffre" https
* On ne voit pas l'url dans le traffic
* on voit l'ip de l'hôte
* on voit le domaine dans les DNS
* Anonymat?
* Proxy http
* VPN
* Tor
Note:
- Attention les proxy
- surtout anonymes sont de faux amis
- ce n'est pas un vpn
- pose des problèmes de certificats
- proxy https = MITM
## Vulnérabilités multiples
* [2015] [Weak Diffie-Hellman and the Logjam Attack](https://weakdh.org/)
* permet de forcé les connexions TLS à 512-bit export-grade cryptography
* [Freack Attack](https://freakattack.com/) réminiscence
* [2014] [Poddle](http://www.dwheeler.com/essays/poodle-sslv3.html)
* [POODLE test](https://www.poodletest.com/)
* [2014] [Heartbleed](https://fr.wikipedia.org/wiki/Heartbleed)
* lecture de la mémoire du serveur via un heartbeat
## Vulnérabilités multiples
* [OpenSSL vulnerabilities](https://www.openssl.org/news/vulnerabilities.html)
* [GnuTLS security](http://www.gnutls.org/security.html)
* [Les attaques SSL / TLS](https://korben.info/les-attaques-ssltls.html)
* [Public Key Infrastructure (PKI)](https://fr.wikipedia.org/wiki/Infrastructure_%C3%A0_cl%C3%A9s_publiques)
* [Certificate authorities issue SSL certificates to fraudsters](http://news.netcraft.com/archives/2015/10/12/certificate-authorities-issue-hundreds-of-deceptive-ssl-certificates-to-fraudsters.html)
## <i class="fa fa-gears"></i> Tester
* Tester un certificat SSL/TLS
* [SSL Certificate Decoder](https://www.sslchecker.com/certdecoder)
* Tester un serveur SSL/TLS
* [Qualys](https://www.ssllabs.com/ssltest/)
* [testssl.sh](https://github.com/drwetter/testssl.sh)
* ```shell
$ nmap -p 443 --script=ssl-enum-ciphers heart.bleed
```
* Tester un navigateur
* [How's my SSL?](https://www.howsmyssl.com/)
Note:
- aspect arbitraire de la notation notamment qualys
- méfiance quand il y aquelque chose à vendre
- SSL en fait TLS on est d'accord
## <i class="fa fa-medkit"></i> Se protéger
* un service sans **s** est un problème
* pas ftp, mais sftp ou ftps
* pas rsync, mais rsync over ssh
* pas imap, pop3 et smtp, mais imaps, pop3s et smtps
* Seules les implémentations conformes à TLSv2 et supérieures doivent être employées
* Les cyphersuites offrant la PFS doivent être favorisées
* [Anssi - SSL/TLS: état des lieux et recommandations](https://www.ssi.gouv.fr/uploads/2012/06/ssl_tls_etat_des_lieux_et_recommandations.pdf)
## <i class="fa fa-medkit"></i> Se protéger
* Apache
* [Chiffrement fort SSL/TLS : Mode d'emploi](https://httpd.apache.org/docs/current/ssl/ssl_howto.html)
différents services
* [https://syslink.pl/cipherlist/](https://syslink.pl/cipherlist/)
* fixer le [weak Diffie-Hellman (aka logjam Attack)](https://weakdh.org/))
<pre><code class="hljs bash" style="font-size: 28px"> openssl dhparam -out dhparams.pem 2048 </code></pre>
* suivre les [<i class="fa fa-book"></i> recommandations de l'ANSSI](https://www.ssi.gouv.fr/agence/publication/ssltls-3-ans-plus-tard/)
#### A lire
* [Déroulement des échanges ssl en détail](https://www.securiteinfo.com/cryptographie/ssl.shtml)
* [Comprendre SSL/TLS - 1, 2, 3, 4, 5](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-1/)
* [CaenCamp #33 : Infrastructures à clés publiques](https://www.youtube.com/watch?v=9zNAUFtw7Ac) par [Romain Tartiaire](https://romain.blogreen.org/)
* [Chrome, Firefox et recherches Google : passage en force du HTTPS ](http://dareboost.developpez.com/tutoriels/securite-web/https-nouveaute-recherche-google-chrome-firefox/)
* [http://cypherpunks.to/~peter/T2a_X509_Certs.pdf](http://www.cypherpunks.to/~peter/T2a_X509_Certs.pdf)
# Tor
# <i class="fa fa-user-secret" aria-hidden="true"></i>
## Tor (The Onion Router)
* mis au point par l'armée américaine milieu des 90's
* le code est ouvert en 2004
* sponsorisé par l'[EFF](https://www.eff.org/fr)
## Darknet
* Tor est "un" [darknet](https://fr.wikipedia.org/wiki/Darknet) parmi d'autres
* [Freenet](https://fr.wikipedia.org/wiki/Freenet), [I2P](https://fr.wikipedia.org/wiki/I2P), [GNUnet](https://fr.wikipedia.org/wiki/GNUnet), [RetroShare](https://fr.wikipedia.org/wiki/RetroShare), [ZeroNet](https://fr.wikipedia.org/wiki/ZeroNet)
* Chiffrement & Anonymisation
* network overlay & mix network
* "Le" [darkweb](https://fr.wikipedia.org/wiki/Dark_web) est un des services du darknet Tor
## Anonymat
* N'anonymise pas complètement
* réduit fortement la probabilité d'identification
* Utilisation
* détectable par les sites /service consultés
* [How to ban people from sites when using Tor](https://www.reddit.com/r/TOR/comments/7xsl7v/how_to_ban_people_from_sites_when_using_tor/)
* détectable par le FAI
#### ++
* Réduit le tracking
* Dissidence politique
* [Great Firewall of China](https://en.wikipedia.org/wiki/Great_Firewall)
* The Guardian, The New Yorker, ProPublica (hidden services & relais)
* Whistle blower (wikileaks)
* Activisme
* Informations / blogs / livres censurés
* Mail
* Forum
* Chat
#### --
* Extrémisme
* (Pédo) pornographie
* Market
* armes
* drugs
* virus
* leak
* carte de crédit
* identité
* Crime organisé
## Tor en stats
* [Tor metrics](https://metrics.torproject.org/)
* [Tor relays map](https://torflow.uncharted.software)
* [Tor est lent](https://svn.torproject.org/svn/projects/roadmaps/2009-03-11-performance.pdf)
* [Mais ce peut être amélioré](https://www.torproject.org/docs/faq.html.en#WhySlow)
* [Tor utilise RSA 1024 etdevrait passer à Curve 25519 group / Ed25519](https://gitweb.torproject.org/torspec.git/tree/tor-spec.txt)
## Tor Browser
* [Firefox ESR(Extended Support Release)](https://www.mozilla.org/en-US/firefox/organizations/)
* 4 extensions
* TorButton
* TorLauncher
* NoScript
* HTTPS Everywhere
* Tor proxy
## Tor Browser
* [cross platform](https://www.torproject.org/projects/torbrowser.html.en) <i class="fa fa-linux" aria-hidden="true"></i> <i class="fa fa-windows" aria-hidden="true"></i> <i class="fa fa-apple" aria-hidden="true"></i>
* version portable <i class="fa fa-windows" aria-hidden="true"></i>
* mobile [<i class="fa fa-android" aria-hidden="true"></i>](https://play.google.com/store/apps/details?id=org.torproject.android&hl=fr) [<i class="fa fa-apple" aria-hidden="true"></i>](https://itunes.apple.com/fr/app/onion-browser-secure-anonymous/id519296448?mt=8&ign-mpt=uo%3D4) [Sailfish OS](https://openrepos.net/content/nieldk/tor)
* [Outbound Ports](https://www.torproject.org/docs/faq.html.en#OutboundPorts) 80, 443, 9001, 9030
* fichier de configuration [torrc](https://www.torproject.org/docs/faq.html.en#torrc)
* [option "FascistFirewall 1"](https://www.torproject.org/docs/faq.html.en#FirewallPorts)
### <i class="fa fa-exclamation-circle" aria-hidden="true"></i> quelle confiance avez vous en votre OS?
## Tor
* Protège toujours le ***client***
* Ne protège pas les serveurs sur le web de surface
* trahi par la correspondance DNS / IP
* Les **hidden services** ou **services cachés** (***SC***)
* sont stockés "dans" Tor de manière anonyme
* mais ne sortent pas de Tor
* extension spécifique **.onion**
* consultable via Tor Browser
## Routage
* Tor fonctionne avec 3 types de relais
* **relais d’entrée** (*RE*)
* **relais Gardien** (*RG*)
* **bridge** (*RB*)
* **relais intermédiaire** (*RI*)
* **relais de sortie** (*RS*)
* **relais Hidden Service Directory** (*HSDir*)
* annuaire de **services cachés** (***SC***)
## Relais
* [Les relais Tor par type (*Flag*)](https://metrics.torproject.org/relayflags.html?start=2017-10-25&end=2018-01-23&flag=Running&flag=Exit&flag=Fast&flag=Guard&flag=Stable&flag=HSDir)
* [Héberger des relais Tor](https://www.torproject.org/docs/tor-doc-relay.html.en)
* [The New Guide to Running a Tor Relay](https://blog.torproject.org/new-guide-running-tor-relay)
## Circuit Tor
```
***client*** > RE > RI > RS > serveur
```
* contrôler le *RE* et le *RS* d'un circuit
* permet de désanonymiser ce circuit
* les circuits sont renouvelés toutes les 10 minutes
* le *RE* lui ne change que tous les 2 à 3 mois
* [Minimise la probabilité d'utiliser de manière cumulative des circuits compromis](https://www.freehaven.net/anonbib/cache/wpes12-cogs.pdf)
## Circuit Tor
![How tor works](https://i.stack.imgur.com/XhXQa.png)
## Circuit Tor
* seul le *RE* connaît Alice
* le *RE* ne connait pas Bob
* seul le *RS* connaît Bob
* le *RS* ne connaît pas Alice
* le *RS* voit le contenu de la requête d'Alice
## Relais d'entrée (*RE*)
* relais Gardien (*RG*)
* liste d'IPs publiques
* connues des FAI
* bloquables
* relais bridges (*RB*)
* liste d'IPs secrètes
* [distribuer au compte gouttes](https://bridges.torproject.org/bridges)
#### Relais gardien (*RG*)
* [Relay Search flag:Guard](https://atlas.torproject.org/#search/flag:Guard)
* [Tor Node List](https://www.dan.me.uk/tornodes)
* [Tor Network Status](https://torstatus.blutmagie.de/)
* Cruciale
* pour le bon fonctionnement
* pour la sécurité des utilisateurs
### Qui décide de cette liste?
## Autorités d’annuaire (*AA*)
> *"maintained by super trusted we-know-you-and-have-had-many-beers-with-you Tor volunteers"*
* [Relay Search flag:Authority](https://atlas.torproject.org/#search/flag:authority)
* IP codées en dures dans les ***clients*** Tor
* votent toutes les heures pour trouver un consensus sur la liste des relais à diffuser
## Consensus
* les *relais* envoient leurs infos aux *AA*
* les *AA* compilent indépendamment ces informations et évaluent chaque *relais*
* passage au **flag Guardian**, **flag BadExit** ...
* critères
* bande passante, uptime, sécurité ...
* les *AA* votent pour obtenir un consensus
* une liste commune
* les *AA* publient le consensus
## Rappel sur le web de surface
* HTTP tout passe en claire
* HTTPS, les données et l'url de la requête sont chiffrées
* l'IP du site consulté est traçable
* la requête DNS du ***client*** trahit le nom de domaine
## Tor sur le web de surface
* Téléchargement du consensus
* liste des IPs des *RE*
* Sélection d'un circuit Tor aléatoire
* Récupération des clés publiques de chaque relais du circuit
* à partir d'un serveur de clé
#### Handshake avec le ***RE***
<small>
1. Le ***client*** envoie une demande de connexion au ***RE***
2. Le ***RE*** signe le handshake avec sa clé privée
3. Le ***client*** vérifie la signature du ***RE***
* avec la clé publique de ***RE***
* récupérée sur le serveur de clé
4. Négociation d'une clé de session *KE*
* via Diffie Hellman
5. Etablissement d'un canal chiffré symétriquement avec le **RE**
</small>
#### Handshake avec le ***RI***
<small>
Toutes les communications entre le ***client*** et le ***RE*** sont chiffrées avec *KE*
1. Le ***client*** envoie une demande de connexion au ***RE*** à transmettre au ***RI***
2. Le ***RE*** déchiffre la demande de connexion et transmet au ***RI***
3. Le ***RI*** signe le handshake avec sa clé privée et transmet au ***RE***
4. Le ***RE*** transmet au ***client***
5. Le ***client*** déchiffre le message reçu avec *KE* et vérifie la signature du ***RI***
* avec la clé publique du ***RI***
* récupérée sur le serveur de clé
6. Négociation d'une clé de session *KI* avec le ***RI***
* via Diffie Hellman en passant par le ***RE***
7. Etablissement d'un canal chiffré symétriquement avec le ***RI***
* le ***RI*** ne connait pas l'IP du ***client***
</small>
## Handshake avec le ***RS***
<small>
Toutes les communications entre le ***client*** et le ***RE*** sont chiffrées avec *KE*<br>
Toutes les communications entre le ***client*** et le ***RI*** sont chiffrées avec *KI* et transitent par le ***RE***
1. Le ***client*** envoie une demande de connexion chiffrée 2 fois: avec *KE*, puis avec *KI* et l’envoie au ***RE***
2. Le ***RE*** déchiffre la première couche avec *KE* et transmet au ***RI***
3. Le ***RI*** déchiffre avec *KI* et transmet au ***RS***
4. Le ***RS*** le handshake avec sa clé privée et renvoie au ***RI***
5. Le ***RI*** transmet au ***RE***
6. Le ***RE*** transmet au ***client***
7. Le ***client*** déchiffre le message reçu avec *KE* puis *KI* et vérifie la signature du ***RS***
* avec la clé publique du ***RS***
* récupérée sur le serveur de clé
8. Négociation d'une clé de session *KS* avec le *RS**
* via Diffie Hellman en passant par le ***RE***, puis par le ***RI***
9. Etablissement d'un canal chiffré symétriquement avec le ***RS***
* le ***RS*** ne connait ni l'IP du ***client***, ni l'IP du ***NE***
</small>
#### Echange de données
<small>
* Le ***client*** peut envoyer une requête http en utilisant de circuit
* Ce n'est plus le ***client*** qui émet la requête DNS mais le ***RS***
* le ***RS*** transmet la requête au serveur
* le ***RS*** transmet ensuite la réponse au ***RI*** en chiffrant avec *KS*
* le ***RI*** transmet ensuite la réponse au ***RE*** en chiffrant avec *KI*
* le ***RE*** transmet ensuite la réponse au ***client*** en chiffrant avec *KE*
* le ***client*** déchiffre alors successivement avec *KE*, *KI* et *KS*
</small>
## Echange de données
[![Tor circuit](images/tor/tor-circuit.png)](https://tor.stackexchange.com/questions/1932/does-exit-node-encrypt-three-times-for-the-return-path-to-local-machine)
#### Echange de données via HTTPS
![Tor avec HTTPS](https://cloud.m4z3.me/index.php/s/rywwyShzrwgLbrA/download)
## Service Caché (SC)
* .onion
* uniquement via un ***client*** Tor
* [Hébergé un Hidden Service sur Tor](https://benjamin.sonntag.fr/Tor-les-onion-le-darknet-a-votre-portee)
* Système d'adressage basé sur des clés de chiffrement
* protège l'IP du serveur
* protège le serveur du DDoS
[Trawling Tor Hidden Service – Mapping the DHT](https://donncha.is/2013/05/trawling-tor-hidden-services/)
## Déclaration d'un ***SC***
* Etablissement de quelques circuits Tor
* les ***RS*** de ces circuits sont sollicités pour jouer le rôle de points d'introductions ***PI*** pour le ***SC***
***SC*** > ***RE*** > ***RI*** > ***RS*** (***PI***)
## Déclaration d'un ***SC***
[![HS Step1](images/tor/HS-Step1.png)](images/tor/HS-Step1.png)
## Déclaration d'un ***SC***
* le ***SC*** publie sur un ***HSDir*** un descripteur contenant
* Les IP des ***PI*** sollicitées
* La clé publique du ***SC***
* La signature de ces deux informations
* faite avec la clé privée du ***SC***
***SC*** > ***RE*** > ***RI*** > ***RS*** (***HSDir***)
* les ***HSDir*** partagent une [table de hachage distribuée (DHT)](https://fr.wikipedia.org/wiki/Table_de_hachage_distribu%C3%A9e) de descripteurs de ***SC***
## Déclaration d'un ***SC***
[![HS Step2](images/tor/HS-Step2.png)](images/tor/HS-Step2.png)
## Connexion à un ***SC***
* le ***client*** télécharge le consensus
* récupère des IPs de ***HSDir***
* les ***client*** interroge les ***HSDir*** via des circuits Tor
* ***client*** > ***RE*** > ***RI*** > ***RS*** (***HSDir***)
* récupère le descripteur du ***SC*** et vérifie la signature
* le ***client*** peut alors contacter les ***PI***
## Connexion à un ***SC***
[![HS Step3](images/tor/HS-Step3.png)](images/tor/HS-Step3.png)
## Connexion à un ***SC***
* le ***client*** crée un circuit Tor
* le relais de sorti sera le point de rendez vous (***RdV***)
* ***client*** > ***RE*** > ***RI*** > ***RS*** (***RdV***)
* le ***client*** communique un ***secret*** au ***RdV***
* le ***secret*** permettra d'authentifier le ***SC***
## Connexion à un ***SC***
[![HS Step4](images/tor/HS-Step4.png)](images/tor/HS-Step4.png)
## Connexion à un ***SC***
* le ***client*** créée un circuit Tor vers un des ***PI***
* ***client*** > ***RE*** > ***RI*** > ***RS*** (***PI***)
* le ***client*** transmet au ***SC*** via le ***PI***
* l'IP du ***RdV***
* la première partie d'un échange Diffie Hellmann
* le ***secret*** communiqué précédemment au ***RdV***
* le tout chiffré est avec la clé publique du ***SC***
* ***client*** > ***RE<inf>c</inf>*** > ***RI<inf>c</inf>*** > ***RS<inf>c</inf>*** > ***PI<inf>sc</inf>*** > ***RI<inf>sc</inf>*** > ***RE<inf>sc</inf>*** > ***SC***
## Connexion à un ***SC***
[![HS Step5](images/tor/HS-Step5.png)](images/tor/HS-Step5.png)
## Connexion à un ***SC***
* les ***SC*** contact le ***RdV***
* transmet le ***secret*** qu'il a reçu du ***client***
* authentification du ***SC***: il possède la clé publique du descripteur
* puisqu'il a déchiffré le ***secret***
## Connexion à un ***SC***
[![HS Step6](images/tor/HS-Step6.png)](images/tor/HS-Step6.png)
## Connexion à un ***SC***
* Finalisation de l'échange Diffie Helmann entre ***client*** et ***SC***
* un secret de communication est établi
***client*** > ***RE<inf>c</inf>*** > ***RI<inf>c</inf>*** > ***RS<inf>c</inf>*** (***RdV***) > ***RS<inf>sc</inf>*** > ***RI<inf>sc</inf>*** > ***RE<inf>sc</inf>*** > ***SC***
## Connexion à un ***SC***
[![HS Step7](images/tor/HS-Step7.png)](images/tor/HS-Step7.png)
## Circuit Tor d'échange avec un ***SC***
[![HS Step8](images/tor/HS-Step8.png)](images/tor/HS-Step8.png)
#### Trouver des .onion
* pas de "Google"
* sur le web de surface
* [TheHiddenWiki](https://thehiddenwiki.org/)s
* [reddit](https://www.reddit.com/r/TOR/)
* [Deep To Web](https://www.deepdotweb.com/)
* sur des ***SC***
#### Quelques .onion
* [wikileaks](http://wikilw7ayqhjl6zr.onion/)
* [facebook](facebookcorewwwi.onion)
* [new york time](https://open.nytimes.com/https-open-nytimes-com-the-new-york-times-as-a-tor-onion-service-e0d0b67b7482)
* [USFakeIDs](http://en35tuzqmn4lofbk.onion/)
* [Deep Web Radio](http://76qugh5bey5gum7l.onion/)
* [Have I Been Powned](https://haveibeenpwned.com/)
##### toujours consolider les hash onions
<i class="fa fa-exclamation-circle" aria-hidden="true"></i> surtout pour les darkmarkets
## Tor over VPN
* VPN over Tor?
* [Auto VPN](https://github.com/adtac/autovpn)
# Tracking
# <i class="fa fa-user-secret" aria-hidden="true"></i>
## [Cover Your Tracks](https://coveryourtracks.eff.org/)
### Is your browser safe against tracking?
[Electronic Frontier Foundation](https://www.eff.org/about)'s project
## Fingerprint
[![Finger print](images/tracking/fingerprint.png)<!-- .element style="width: 80%" -->](https://coveryourtracks.eff.org/)
## Cookies
* Palie à l'amnésie du protocol HTTP
* En têtes HTTP envoyées par le serveur
```http
Set-Cookie: name=value[; Max-Age=age][; expires=date]
[; domain=domain_name][; path=some_path][; secure][; HttpOnly]
```
* Renvoyées inchangées par le client à chaque requête
```http
Cookie: name=value
```
* Cloisonnés par domaine
* accessibles via les sous domaines
## just do it
* [<i class="fa fa-github" aria-hidden="true"></i> willdurand-edu/cookie-playground](https://github.com/willdurand-edu/cookie-playground)
```bash
git clone https://github.com/willdurand-edu/cookie-playground.git
php composer.phar install
php -S localhost:4000 -t .
```
* tracker exposes a dashboard at: http://localhost:4000/tracker/public/dashboard.
* The website does not do much, but is available at: http://localhost:4000/website/.
## Space cookies
* Techniques de tracking
* Cookies plus persistants
* moins limité en taille
* [Supercookie](https://en.wikipedia.org/wiki/HTTP_cookie#Supercookie)
* cookie de niveau racine (.com)
## Space cookies
* Flash cookie
* utilise la persistance flash
* [LSO (Local Shared Object)](https://fr.wikipedia.org/wiki/Objet_local_partag%C3%A9)
* cross domain
* accès à l'historique des sites visités utilisant flash
## Space cookies
* [Zombie cookie](https://en.wikipedia.org/wiki/Zombie_cookie)
* cookie perpétuellement recréé
* [Evercookie](https://en.wikipedia.org/wiki/Evercookie)
* exploite toute les possibilités
* [<i class="fa fa-github"></i> samyk/evercookie](https://github.com/samyk/evercookie/)
* [Cookie de tracking / assiste.com](http://assiste.com/Cookie_de_Tracking.html)
* [Using HTML5 Local Storage vs Cookies For User Tracking ...](http://johnsteinmetz.net/blog/using-html5-local-storage-vs-cookies-for-user-tracking/)
## Vault en bref!
![vault](../cri/images/vault.png "vault")<!-- .element width="30%" -->
#### Des secrets, des apps, des tokens, des équipes, un séquestre
## Vault
* By HashiCorp
* [écrit en go](https://github.com/hashicorp/hcl)
* cross plateform
* [hcl](https://github.com/hashicorp/hcl)
* intégration avec [consul](https://www.consul.io) & [terraform](https://www.terraform.io/)
* [auditable](https://www.vaultproject.io/docs/commands/audit/enable.html)
* [documenté](https://www.vaultproject.io/docs/)
* ... couteau suisse
## Vault
* Un binaire [vault](https://releases.hashicorp.com/vault/) qui fait
* serveur
* [<i class="fa fa-book" aria-hidden="true"></i> api](https://www.vaultproject.io/api/overview)
* UI web
* cli
```shell
$ export $VAULT_ADDR=https://10.0.0.1
```
## Configuration
`/etc/vault/vault.hcl`
```
backend "file" {
path = "/var/lib/vault"
}
ui = true
disable_mlock = true
listener "tcp" {
address = "10.0.0.1:443"
tls_cert_file = "/etc/certs/vault.crt"
tls_key_file = "/etc/certs/vault.key"
tls_disable = 0
}
```
## initialisation SSS
### Shamir's Secret Sharing
```shell
$ vault operator init -key-shares=3 -key-threshold=2
```
```shell
Unseal Key 1: 6gAO3lmAhIaHzDAdkK256g2B2Dpeqy+z4jqQCJBID3d8
Unseal Key 2: TO7DDRQXSPC3IQylPEBPjPGAGAGMzjEkjT/FL62m7UUd
Unseal Key 3: CYfEbt83jYsQFcSErHT4Y5NCsrEtfFUE6tjQZKfP632K
Initial Root Token: s.78MykQO2b5qcy03rtoNwmhr1
Vault initialized with 3 key shares and a key threshold of 2. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 2 of these keys to unseal it
before it can start servicing requests.
Vault does not store the generated master key. Without at least 2 key to
reconstruct the master key, Vault will remain permanently sealed!
```
## Authentification
!["authentification"](../cri/images/vault-auth.png "authentification")
## Authentification
par token
```shell
$ vault login token=<root-or-app-token>
```
equivalent à
```shell
$ export VAULT_TOKEN token=<root-or-app-token>
```
par ldap
```shell
$ vault login -method=ldap username=mazenovi
```
stocke le token dans `~/.vault-token` et `$VAULT_TOKEN`
## Policy (ACL)
```
path "cri/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
```
écriture
```shell
$ vault policy write cri `/etc/vault/cri.hcl`
```
application à un groupe ldap
```shell
$ vault write auth/ldap/groups/cri policies=cri
```
création de token à partir de la policy
```shell
$ vault token create -policy=cri
```
## [<i class="fa fa-book" aria-hidden="true"></i> Secrets engines](https://www.vaultproject.io/docs/secrets/)
!["secrets engines"](../cri/images/vault-secrets-engines.png "secrets engines")
## workflow
```shell
$ vault secrets list
$ vault kv list cri/
$ vault kv get cri/test
$ vault kv get -format=json cri/test
$ vault kv get -format=json cri/test | jq .data
$ vault kv get -format=json cri/test | jq .data.data.root
$ vault kv put cri/test password2=$(date | sha256sum)
$ vault kv patch cri/test password1=$(date | sha256sum)
$ vault delete cri/test
```
## avec ansible
* lookup natif [hashi_vault](https://docs.ansible.com/ansible/latest/plugins/lookup/hashi_vault.html)
* lecture uniquement
* pas de support natif pour kv2 à ce jour
* module "community" [hashivault](https://github.com/TerryHowe/ansible-modules-hashivault)
* Reading and Writing
* supporte kv2
* Initialization, Seal, and Unseal
* Policy
* User Management
## UI
!["UI"](images/vault/web.png "UI")
!["carnets mots de passe"](images/vault/password_management.jpg "carnets mots de passe")<!-- .element width="80%" -->
......@@ -7,11 +7,11 @@
<title>Keepass</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/black.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
......@@ -35,7 +35,7 @@
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<!-- script src="../../node_modules/reveal.js/lib/js/head.min.js"></script -->
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
......@@ -49,7 +49,18 @@
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js',
condition: function() { return !!document.querySelector( '[data-markdown]' ); },
callback: function() {
Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){
var fragIndex = ele.innerHTML.indexOf("--")
if (fragIndex != -1){
ele.innerHTML = ele.innerHTML.replace("--", "");
ele.className = 'fragment';
}
});
}
},
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
......
......@@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>SSL / TLS</title>
<title>PGP</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
......@@ -12,6 +12,7 @@
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
......
......@@ -7,11 +7,11 @@
<title>Souveraineté</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/black.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
......@@ -35,7 +35,7 @@
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<!-- script src="../../node_modules/reveal.js/lib/js/head.min.js"></script -->
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
......@@ -49,11 +49,23 @@
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js',
condition: function() { return !!document.querySelector( '[data-markdown]' ); },
callback: function() {
Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){
var fragIndex = ele.innerHTML.indexOf("--")
if (fragIndex != -1){
ele.innerHTML = ele.innerHTML.replace("--", "");
ele.className = 'fragment';
}
});
}
},
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
<script src="../main.js"></script>
</body>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Tor</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/black.css">
<style>
.trsp {background-color: rgba(0, 0, 0, 0.8);}
.green {color: green;}
.red {color: red;}
li {list-style-type: none}
li.c {list-style-type: circle}
ul.c {padding-left: 70px;padding-right: 70px;}
</style>
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-background-image="images/tor/hacker.jpg">
<h1 class="trsp" style="margin-top: 30%">Comment surfer couvert ...</h1>
<h4 class="trsp" style="margin-top: 2%; text-transform: lowercase;">
<img src="https://fc.isima.fr/~mazenod/images/mazenovi.png"
style="margin: 0; margin-left: 10px; margin-right: 10px;padding: 0;float: right;border: 0; border-radius: 50%;width: 5%" />
<a href="http://m4z3.me/pintofscience">http://m4z3.me/pintofscience</a>
<span style="float: right">par
<a href="http://twitter.com/mazenovi">@mazenovi</a>
</span>
</h4>
<aside class="notes">
<ul>
<li>Vincent Mazenod aka mazenovi
<ul>
<li>20 ans de développement pour le web</li>
<li>dont 17 au CNRS</li>
<li>expert SSI à la délégation régionale Auvergne-Rhône-Alpes du CNRS (DR7) depuis 10 ans</li>
<li>concerné par la vie privée depuis le début</li>
<li>je parle histoire de l'informatique, éthique de l'informatique et futurologie après quelques pintes</li>
</ul>
</li>
<li>Surfez couvert ...
<ul>
<li>sujet banal pour image de couverture banale
<ul>
<li>marronier digital</li>
<li>saucisson numérique</li>
</ul>
</li>
<li>
ce soir réponse radicale et argumentée,
accrochez vous à vos claviers
</li>
</ul>
</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/n00b.jpg">
<h2 class="trsp">... alors qu'on ne comprend rien à l'informatique?</h2>
<aside class="notes">
<ul>
<li>ce n'est pas une présentation pour les nuls</li>
<li>pas de conseils sur les mot de passes, JP Pernaud fait ca très bien</li>
<li>pour ne pas avoir de problèmes:
<ul>
<li>vérifier votre barre d'url souvent</li>
<li>Pas de streaming / téléchargement</li>
<li>Pas de jeu en ligne</li>
<li>Pas de porn</li>
</ul>
</li>
<li>si vous êtes persuadés d'être nul ...</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/minitel.gif">
<h1 class="trsp">ne surfez pas!!</h1>
<aside class="notes">
<ul>
<li>Si on y comprend vraiment rien
<ul>
<li>Mieux vaut ne pas</li>
</ul>
</li>
<li>Si vous voulez comprendre
<ul>
<li>Poser des questions : c'est le moment</li>
<li>Aucune question n'est idiote: peu de gens savent</li>
</ul>
</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/go.gif">
<h2 class="trsp">ou comprenez les enjeux!</h2>
<aside class="notes">
<ul>
<li>On ne parle pas ici des enjeux de madame michu</li>
<li>On parle de la protection des sources sur Internet</li>
<li>hastag: investigation, journalisme, liberté d'expression, leak etc ... </li>
</ul>
</aside>
</section>
<section>
<h2>menaces</h2>
<ul>
<li>états / renseignements</li>
<li>plateformes (GAFAM)</li>
<li>attaques ciblées</li>
</ul>
<aside class="notes">
<ul>
<li>vous connaissez Edward Snowden?
<ul>
<li>la NSA</li>
<li>les plateformes qui collaborent avec la NSA (révélations PRISM)</li>
<li>éventuellement des pirates souhaitant mettre la main
sur les outils de la NSA avant qu'ils soient connus</li>
</ul>
</li>
<li>TOUS LES COUPS SONT PERMIS</li>
</ul>
</aside>
</section>
<section>
<h2>se protéger</h2>
<ul>
<li>confidentialité</li>
<li>authenticité</li>
<li>anonymat</li>
</ul>
<aside class="notes">
<ul>
<li>confidentialité: le message n'est lu QUE par le destinataire</li>
<li>authenticité:
<ul>
<li>le message est lu par le bon destinataire</li>
<li>l'identité de l'émetteur est éventuellement vérifiable</li>
</ul>
</li>
<li>
anonymat:
<ul>
<li>l'IP (de votre box, ou mobile) notamment est géolocalisable et tracable</li>
</ul>
</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/en-clair.png"
data-background-color="white"
data-background-size="70%">
<h4>confidentialité / en clair par défaut</h4>
<aside class="notes">
<ul>
<li>le FAI
<ul>
<li>attribue l'IP</li>
<li>
fournit les DNS (correspondance nom de domaine
adresse IP du serveur à consulter). Requête transparente
mais cruciale comme on le verra plus tard
</li>
<li>voit tout le traffic. C'est le centre de tri des cartes postales</li>
<li>plusieurs FAI sont en général impliqués dans une communication</li>
</ul>
</li>
<li>
les plateformes
<ul>
<li>s'il partage un fichier via dropbox</li>
<li>une pièce jointe via gmail</li>
</ul>
</li>
<li>la NSA collabore avec les FAI et les plateformes</li>
<li>Snowden balance gros: il doit se protéger de tout le monde</li>
<li>comment s'en sortir?</li>
</ul>
</aside>
</section>
<section data-background-image="images/crypto/scytale.png"
data-background-size="50%">
<h4>confidentialité / chiffrement</h4>
<aside class="notes">
<ul>
<li>vieux comme le monde</li>
<li>le scytale</li>
<li>on fait plus robuste maintenant (attaque par analyse)</li>
<li>la sécurité doit reposer sur le secret de la clé,
pas sur le secret de l'algorithme
<ul>
<li>le fonctionnement des algo de chiffrement est typiquement connu</li>
</ul>
</li>
<li> chiffrer, déchiffrer, décrypter, crypter, chiffrage</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/chiffrement-symetrique.png"
data-background-color="white"
data-background-size="70%">
<h4>confidentialité / chiffrement symétrique</h4>
<aside class="notes">
<ul>
<li>on a un problème pour partager la clé
<ul>
<li>peut marcher si on se cache des FAI (IRL?)</li>
</ul>
</li>
<li>pas de scellé (authenticité)
<ul>
<li>on sait juste que c'est quelqu'un qui partage notre sercret</li>
</ul>
</li>
<li>la NSA doit décrypter : ca nécessitebeaucoup de calcul</li>
<li>google aussi dans le contexte Gmail, mais pas forcément dans le contexte pub ou ananlyse de traffic (techniquement parlant)</li>
<li>Souvenez vous on parle d'Edward Snowden!</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/chiffrement-asymetrique-chiffrement.png"
data-background-color="white"
data-background-size="70%">
<h4>confidentialité / chiffrement asymétrique</h4>
<aside class="notes">
<ul>
<li>depuis les 70s</li>
<li>tout s'appelle clé ... désolé</li>
<li>1 clé publique présentée dans un certificat publique
<ul>
<li>sur le site du guardian, carte de visite, IRL, etc ...</li>
<li>permet d'obtenir un cadenas pour fermer sans la clé</li>
<li>seul celui qui a la clé peut ouvrir</li>
<li>pas d'échange de clé</li>
</ul>
</li>
<li>c'est des maths
<ul>
<li>tout ce qui est chiffré avec la clé publique est déchiffrable avec la clé privée</li>
<li>tout ce qui est chiffré avec la clé privée est déchiffrable avec la clé publique
<ul>
<li>c'est la signature</li>
</ul>
</li>
</ul>
</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/chiffrement-asymetrique-signature.png"
data-background-color="white"
data-background-size="70%">
<h4>authenticité / signature</h4>
<aside class="notes">
<ul>
<li>la clé privée agit ici comme un sceau</li>
<li>elle permet de sceller l'enveloppe avec la clé privée</li>
<li>le sceau est vérifiable par tous</li>
<li>toute la confiance repose sur la légitimité des certificats
<ul>
<li>approche PGP : on échange les clés d'humain à humain
<ul>
<li>système décentralisé, chacun se créée sa toile de confiance</li>
</ul>
</li>
<li>approche X509 : des autorités délivrent les certificats
<ul>
<li>repose essentiellement sur le nom de domaine pour TLS</li>
</ul>
</li>
</ul>
</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/pki.png"
data-background-color="white"
data-background-size="70%">
<h4>authenticité / PKI</h4>
<aside class="notes">
<ul>
<li>Autorité de certification (CA)</li>
<li>système de gestion de clé publique / privée (ou de chiffrement asymétrique)
<ul>
<li>pour humains, serveurs, organisation</li>
</ul>
</li>
<li>vérifie la légitimité lors de l'attribution</li>
<li>gère les révocations, la distribution, le renouvellement etc ...</li>
<li>tout repose sur ces autorités mais elles sont loin d'être irréprochable</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/known-good-signers.png"
data-background-size="50%">
<h4>authenticité / CA</h4>
<aside class="notes">
<ul>
<li>le navigateur est configuré avec les autorités de confiance</li>
<li>en pratique les autorités qui paient</li>
<li>on ne les connaît pas toutes</li>
</ul>
</aside>
</section>
<section>
<h2><strike>SSL</strike> TLS</h2>
<ul>
<li class="c">
échange d'une clé de chiffrement symétirque
<ul>
<li class="c">via un système de chiffrement asymétrique</li>
</ul>
</li>
<li class="c">autorités de confiance dans le navigateur</li>
cadenas vert
</ul>
<img src="images/tor/green-bar-web-browser.jpg" />
<div class="trsp" style="margin-top: 2%">le FAI voit toujours quelle IP consulte quelle IP :/</div>
<aside class="notes">
<ul>
<li>mais il y a pire que le leake de l'IP: même le nom de domaine n'est pas préservé</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/dns.jpg"
data-background-color="white"
data-background-size="55%">
<h2>anonymat / leak DNS</h2>
<aside class="notes">
<ul>
<li>trahit la consultation de tel nom de domaine pour telle IP</li>
<li>typiquement les données recueilli par les boites noires de la loi renseignement</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/tracking.png"
data-background-color="#F8F2E4"
data-background-size="72%">
<h2>anonymat / tracking</h2>
<div style="margin-top: 45%;font-size: 12px">source: <a href="https://c-marketing.eu/zoom-sur-les-cookies/">https://c-marketing.eu/zoom-sur-les-cookies/</a></div>
<div style="margin-top: 5%"><a href="https://panopticlick.eff.org/">panopticlick.eff.org</a></div>
<aside class="notes">
<ul>
<li>des régies publicitaires (Google adSens)</li>
<li>des analyseur de traffic (Goole Analytics)</li>
<li>agit au sein de l'échange protégé
<ul>
<li>recoupement d'utilisateur par cookie</li>
<li>recoupement d'utilisateur par signature de navigateur
<ul>
<li>prévient la suppression des cookies</li>
<li>adblocker peut être payé pour laisser passer telle ou telle régies</li>
</ul>
</li>
<li>même en navigation privé google peut lier le traffic à un utilisateur
<ul>
<li>ne pas être authentifié sur gmail ou facebook n'est pas un obstacle</li>
<li>navigation mode privée permet juste de préserver l'historique</li>
</ul>
</li>
<li>javascript est la faille, le désactiver est une bonne idée pour la privacy
<ul>
<li>une mauvaise idée pour le confort</li>
</ul>
</li>
</ul>
</li>
</ul>
</aside>
</section>
<section>
<h2>se protéger avec <strike>SSL</strike> TLS</h2>
<ul>
<li>confidentialité <strong class="green"></strong></li>
<li>authenticité <strong class="green"></strong></li>
<li>anonymat <strong class="red">𐄂</strong></li>
</ul>
<div class="trsp" style="margin-top: 25%">idéal pour le e-commerce ;)</div>
<aside class="notes">
<ul>
<li>
BTW les gesticulations sécuritaires à chaque attentat sur la remise en cause du chiffrement n'ont pas de sens
<ul>
<li>pas de chiffrement = pas de confiance = pas de e-commerce</li>
<li>la première chose qu'on a chiffré c'est les numéro de CB (LCEN 2004)</li>
</ul>
</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/tor.png" data-background-size="55%">
<h2>Tor</h2>
<ul class="trsp c">
<li class="c">"un" darknet parmi d'autres</li>
<li class="c">"le" <strong>darkweb</strong>: un des services de <strong>Tor</strong></li>
<li class="c">surcouche réseau
<ul>
<li class="c">s'appuie sur le web <em>"classique"</em></li>
</ul>
</li>
<li class="c">projet de l'armée américaine (mi-1990)</li>
<li class="c">code en open source depuis 2004</li>
<li class="c">sponsorisée par l'<a href="https://www.eff.org/fr">EFF</a></li>
<li class="c">organisation à but non lucratif</li>
<li class="c">contournement de la censure</li>
<li class="c">~2 375 000 utilisateurs par jour</li>
</ul>
<aside class="notes">
<ul>
<li>faire une recherche sur TOR c'est déjà être fiché par la NSA
<ul>
<li>peut être même en venant à cette talk ;)</li>
<li>réellement efficace</li>
</ul>
</li>
<li>utilisé par Snowden, Wikileaks, panama papers etc ...
<ul>
<li>
mais pas n'importe comment
</li>
</ul>
</li>
<li>utilisé par les dissidents chinois etc ... où le web est surveillé / censuré
<ul>
<li>c'est pourquoi facebook par exemple est sur Tor</li>
</ul>
</li>
</ul>
</aside>
</section>
<section>
<ul class="trsp c">
<li class="c">
<a href="https://www.torproject.org/projects/torbrowser.html.en">cross platform</a>
<i class="fa fa-linux" aria-hidden="true"></i>
<i class="fa fa-windows" aria-hidden="true"></i>
<i class="fa fa-apple" aria-hidden="true"></i>
<i class="fa fa-android" aria-hidden="true"></i>
</li>
<li class="c"><i class="fa fa-firefox" aria-hidden="true"></i> Firefox + proxy tor intégré</li>
<li class="c">
<i class="fa fa-firefox" aria-hidden="true"></i> add ons</a>
<ul>
<li><a href="https://addons.mozilla.org/fr/firefox/addon/noscript/">NoScript</li>
<li><a href="https://www.eff.org/fr/https-everywhere"> HTTPS everywhere</li>
</ul>
</li>
<li class="c">
<a href="https://tails.boum.org/">Tails (OS live)</a>
</li>
</ul>
<img src="images/tor/tor-browser.jpg" />
<aside class="notes">
<ul>
<li>Tails ajoute de la sécurité au niveau de l'OS
<ul>
<li>linux opensource VS windows ou mac os privateur</li>
<li>système live = système amnésique
<ul>
<li>ne possède aucune donnée</li>
</ul>
</li>
<li>MEME SI personnalisation d'une partition de données chiffrées possible</li>
</ul>
</li>
<li>portable
<ul>
<li>se démarre avec une clé usb à partir de n'importe quelle machine</li>
<li>environnement utilisable sur n'importe quelle machine sans laisser de trace</lI>
<li>kit de survie pour journaliste d'investigation</li>
</ul>
</li>
<li>toutes les applications passent par Tor
<ul>
<li>IM, mail, etc ... ce qui n'est pas le cas avec Tor Browser</li>
</ul>
</li>
<li>utiliser Tor sur son mobile ou sur windows est ce une bonne idée?</li>
</ul>
</aside>
</section>
<section
data-background-image="images/tor/tor-circuit.png"
data-background-size="contain"
data-background-position="bottom">
<h3 class="trsp">Tor circuit</h3>
<aside class="notes">
<ul>
<li>repose sur des noeuds internet spéciaux appelés neouds Tor
<ul>
<li>on chiffre de proche en proche
<ul>
<li>chaque noeud ne connait que son prédécesseur et son successeur</li>
<li>on utilise Trois nouds Tor</li>
<li>on cache donc le client au serveur</li>
</ul>
</li>
<li>
c'est le noeud de sortie qui effectue la requête DNS
<ul>
<li>peut voir le contenu de la requête</li>
</ul>
</li>
<li>le noeud d'entrée l'IP du client</li>
</ul>
</li>
<li>anonymat préservé
<ul>
<li>sauf sur le dernier mètre
<ul>
<li>la NSA peut avoir des infos</li>
</ul>
</li>
<li>sauf si on maîtrise tout le circuit Tor
<ul>
<li>le projet émane de l'armée américaine</li>
<li>opensourcing du renseignement</li>
</ul>
</li>
</ul>
</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/Tor-Encryption.jpg" data-background-size="contain" data-background-color="#eeeeee">
<aside class="notes">
<ul>
<li>le schéma est faux mais beau</li>
<li>les trois noeuds par les quels passent la communication
<ul>
<li>sont choisis aléatoirement</li>
<li>renouvelés régulièrement</li>
</ul>
</li>
<li>réduit la probabilité qu'un attaquant maîtrise tous les cricuits</li>
<li>ce n'est pas 100% efficace
<ul>
<li>ca maximise la probabilité de l'être</li>
</ul>
</li>
</ul>
</aside>
</section>
<section>
<h2>se protéger avec Tor sur le web</h2>
<ul>
<li>confidentialité <strong class="red">𐄂</strong></li>
<li>authenticité <strong class="red">𐄂</strong></li>
<li>anonymat <strong class="green"></strong></li>
</ul>
</section>
<section>
<h2>se protéger avec Tor + TLS (https) sur le web</h2>
<ul>
<li>confidentialité <strong class="green"></strong></li>
<li>authenticité <strong class="green"></strong></li>
<li>anonymat <strong class="green"></strong></li>
</ul>
<aside class="notes">
<ul>
<li>sécuristation du dernier mètre</li>
<li>authenticité du serveur via TLS et la PKI associée</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/hs.png" data-background-size="contain" data-background-color="#e1e1e1">
<aside class="notes">
<ul>
<li>service caché = hidden service</li>
<li>l'idée est de mettre 2 circuits Tor bout à bout
<ul>
<li>un annuaire de service cachés joue le rôle d'entremetteur</li>
</ul>
</li>
<li>un point de rendez vous est fixé
<ul>
<li>le client ne connait pas l'IP du serveur</li>
<li>le serveur ne connait pas l'IP du client</li>
<li>le HSDir ne connait ni l'IP du client ni l'IP du serveur</li>
<li>le Point de rendez vous ne connait ni l'IP du client ni l'IP du serveur</li>
</ul>
</li>
</ul>
</aside>
</section>
<section>
<h2>se protéger avec des services cachés Tor (.onion)</h2>
<ul>
<li>confidentialité <strong class="green"></strong></li>
<li>authenticité <strong class="green"></strong></li>
<li>anonymat <strong class="green"></strong></li>
<li><strong>anonymat du serveur</strong> <strong class="green"></strong></li>
</ul>
<div class="trsp" style="margin-top: 15%">idéal pour la liberté d'expression ;)</div>
</section>
<section data-background-image="images/tor/whistleblowers.jpg">
<aside class="notes">
<ul>
<li>Edward Snowden</li>
<li>Julian Assange - wikileaks: panama papers, cable diplomatique - personnalité discutable</li>
<li>Bradley / Chelsea Manning</li>
</ul>
</aside>
</section>
<section>
<h2>se protéger avec Tor (.onion)</h2>
<ul>
<li>confidentialité <strong class="green"></strong></li>
<li>authenticité <strong class="green"></strong></li>
<li>anonymat <strong class="green"></strong></li>
<li><strong>anonymat du serveur</strong> <strong class="green"></strong></li>
</ul>
<div class="trsp" style="margin-top: 15%">idéal pour la cybercriminalité ;)</div>
<aside class="notes">
<ul>
<li>Tout ce qui est usuellement interdit est faisable
<ul>
<li>drogues: beaucoup</li>
<li> armes: peu, beaucoup de scam</li>
<li>pédopornographie: bien cachée, car ne fait pas l'unanimité sur Tor comme ailleurs</li>
</ul>
</li>
<li>ces sujets existent avant Tor et existeront après</li>
</aside>
</section>
<section data-background-image="images/tor/cybercrime.gif">
<aside class="notes">
<ul>
<li>acheter de la drogue, avec des crypto monnaie
<ul>
<li>BTC ou mieux monero pour l'anonymat</li>
<li>une autre présentation pour Pot Of Science peut etre;)</li>
</ul>
</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/phil-zimmermann.jpg">
<aside class="notes">
<ul>
<li>Problème fondamental qui doit amener à la réflexion et non à l'action</li>
<li>Posé dès 1991 par Phil Zimmermann auteur de PGP et de la première crypto war</li>
</ul>
</aside>
</section>
<section data-background-image="images/tor/applause.gif">
<div class="trsp">
<h1>Merci</h1>
<h2>Questions?</h2>
</div>
</section>
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
......@@ -12,6 +12,7 @@
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
......
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>X.509 / TLS</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/tls.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
data-charset="utf-8">
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js',
condition: function() { return !!document.querySelector( '[data-markdown]' ); },
callback: function() {
Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){
var fragIndex = ele.innerHTML.indexOf("--")
if (fragIndex != -1){
ele.innerHTML = ele.innerHTML.replace("--", "");
ele.className = 'fragment';
}
});
}
},
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
......@@ -8,6 +8,7 @@
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<link rel="stylesheet" href="../main.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
......
......@@ -12,6 +12,7 @@
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
......
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Vault</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<link rel="stylesheet" href="../main.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/vault.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
data-charset="utf-8">
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
# Profan
## RGPD
## RGPD
* Règlement général sur la protection des données
* en vigueur le 25 mai 2018
* Dans tous les états membres de l'UE
* En France la CNIL devient autorité de contrôle
* <strike>Déclaration CNIL</strike>
* tous responsable
* démonstration permanente du maintien de la conformité
## Périmètre
* Tout service ou sous traitant (y compris hors UE) traitant des données de résidents de l'UE
* Entreprises
* Associations
* Organismes publics
* Sous traitants
## Objectifs
### Crédibiliser la régulation
* Réclamation auprès de l'autorité de contrôle
* Droit de recours contre le responsable du traitement ou un sous traitant
* Actions collectives ou personnelles
* Sanctions
* 4% du chiffre d'affaire annuel mondial
* 20 000 000 €
## Objectifs
### Renforcer la transparence
* Quelles données sont collectées?
* Dans quels buts?
* Pour combien de temps?
## Objectifs
### Faciliter l'exercice des droits
* droit à la rectification
* droit à la portabilité
* droit à l'oubli
* suppression des données personnelles
* dès qu'elles ne sont plus nécessaires au traitement
* dès que le consentement de l'utilisateur a été retiré
* dès que la personne s'y oppose
## Objectifs
### Responsabiliser les acteurs traitant des données
* Obligation de moyens pour la sécurité des données
* Obligation d'information en cas de violation de données à caractère personnel
* Vis à vis de l'autorité de contrôle
* Vis à vis des personnes concernées
## Comment?
* DPO (Data Protection Officer) / DPD (Délégué à la protection des données)
* conformité RGPD
* Point de contact avec les autorités
* Analyse d'impact (PIA)
* [un logiciel pour réaliser son analyse d’impact sur la protection des données (PIA)](https://www.cnil.fr/fr/rgpd-un-logiciel-pour-realiser-son-analyse-dimpact-sur-la-protection-des-donnees-pia)
## Profan
* qui est le responsable du traitement
* L'UCA?
* Le CNRS?
* Le ministère de l'éducation nationale?
Réponse le 20 mars!
## Profan
* Quels sont les finalités du traitement?
* Le LAPSCO doit préciser
* cette information doit faire partier de la communication Profan dès la rentrée prochaine
## Profan
* exercice des droits
* les fonctionnalités sont implémentées
* Mesure de sécurité
* elles ont été listées
Plus généralement l'analyse d'impact a été largement entamé pour eP3c et peut être réutilisé pour Profan.
## à faire
* Déterminer le responsable des traitements
* Détailler (toutes) les finalités du projet
* Les communiquer clairement aux famille
* Adapter l'analyse d'impact à partir du travail réalisé pour eP3C
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Profan RGPD</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/profan-rgpd.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
data-charset="utf-8">
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@fortawesome/fontawesome-free@^6.1.1":
version "6.1.2"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.1.2.tgz#d18880eddeadd42b1c64cb559f2f3d13d47a4a64"
integrity sha512-XwWADtfdSN73/udaFm+1mnGIj/ShDZNFMe/PRoqv3FhQ4GNI2PUN70yFTPsjq65Lw2C9i4TG5/hTbxXIXVCiqQ==
reveal.js@^3.5.0:
version "3.9.2"
resolved "https://registry.yarnpkg.com/reveal.js/-/reveal.js-3.9.2.tgz#7f63d3dfec338b6c313dcabdf006e8cf80e0b358"
integrity sha512-Dvv2oA9FrtOHE2DWj5js8pMRfwq++Wmvsn1EyAdYLC80lBjTphns+tPsB652Bnvep9AVviuVS/b4XoVY9rXHLA==
......@@ -67,7 +67,7 @@ function start_up(){
pelican_pid=$!
echo $pelican_pid > $PELICAN_PID
mkdir -p $OUTPUTDIR && cd $OUTPUTDIR
$PY -m pelican.server $port &
$PY -m pelican.server $port
srv_pid=$!
echo $srv_pid > $SRV_PID
cd $BASEDIR
......
version: '3.5'
services:
node:
image: node:latest
container_name: ${APP_NAME}_node
environment:
TZ: ${TIMEZONE:-Europe/Paris}
working_dir: /srv/blog
volumes:
- .:/srv/blog
command: bash /srv/blog/.docker/scripts/node/command.dev.sh
python:
image: ${NAMESPACE}/${APP_NAME}_python:latest
build:
context: .
dockerfile: .docker/build/python/Dockerfile
container_name: ${APP_NAME}_python
environment:
TZ: ${TIMEZONE:-Europe/Paris}
working_dir: /srv/blog
volumes:
- .:/srv/blog
ports:
- "${PORT-8000}:8000"
command: bash /srv/blog/.docker/scripts/python/command.dev.sh
kerberos:
image: ${NAMESPACE}/${APP_NAME}_kerberos:latest
build:
context: .
dockerfile: .docker/build/kerberos/Dockerfile
container_name: ${APP_NAME}_kerberos
environment:
TZ: ${TIMEZONE:-Europe/Paris}
volumes:
- .:/srv/blog
command: bash /srv/blog/.docker/scripts/kerberos/command.dev.sh
dockerize:
image: jwilder/dockerize
volumes:
- .:/tmp
\ No newline at end of file
## TODOS
* faire le challenge javascript au moment de javascript
* faire le challenge brute force + weak session dans auth
* faire le challenge DVWA CSP après XSS ajouter SOP et CORS => virer ou vider Browser
* faire le challenge captcha après CSRF
* reprendre le code du gist dans http et dans CSP pour faire des fetch dignes
* faire relire js à @tibertra & @thlecoub
##
sudo vi /etc/sudoers -> %sudo ALL=(ALL:ALL) ALL -> %sudo ALL=(ALL) NOPASSWD:ALL
sudo vi /etc/default/keyboard -> replace "us" by "fr"
default language in kali : https://www.youtube.com/watch?v=zCzxXc2SJ6Y
firefox / burp suite / kali / https://www.youtube.com/watch?v=Uzy28osev5g
simple api project / https://developer.okta.com/blog/2019/03/08/simple-rest-api-php
https://addons.mozilla.org/fr/firefox/addon/proxy-switcher-and-manager/
https://github.com/onhexgroup/Vulnerable-WordPress
https://sharpforce.gitbook.io/cybersecurity/walkthroughs/damn-vulnerable-web-application/damn-vulnerable-web-application-dvwa
https://medium.com/@dannybeton/dvwa-brute-force-tutorial-low-security-463880d53e50
\ No newline at end of file
......@@ -4,57 +4,104 @@ from __future__ import unicode_literals
import os
AUTHOR = 'Vincent Mazenod'
SITENAME = 'Vincent Mazenod / ingénieur d\'études'
SITENAME = 'Vincent Mazenod / ingénieur de recherche'
SITELOGO = 'images/mazenovi.png'
OIMPHOTO = 'images/oim.jpg'
FAVICON = 'images/favicon.ico'
SITEURL = 'https://fc.isima.fr/~mazenod'
DISQUS_SITENAME = 'limos-1'
DISQUS_SHORTNAME = 'mazenovi'
SITEURL = 'https://perso.limos.fr/~mazenovi/'
# DISQUS_SITENAME = 'limos-1'
# DISQUS_SHORTNAME = 'mazenovi'
LINKS = (
(
'user-circle',
'Farouk Toumani',
'http://www.isima.fr/~ftoumani/'
'http://isima.fr/~ftoumani/'
),
(
'user-circle',
'Pascal Lafourcade',
'http://sancy.univ-bpclermont.fr/~lafourcade/'
'https://sancy.iut.uca.fr/~lafourcade/index-en.html'
),
(
'user-circle',
'Christophe Rey',
'http://chrey.blogspot.com/'
),
(
'user-circle',
'Marie Pailloux',
'http://isima.fr/~pailloux/'
),
(
'user-circle',
'Engelbert Mephu Nguifo',
'http://ws.isima.fr/~mephu/'
)
'http://isima.fr/~mephu/'
),
(
'user-circle',
'Jean-Marie Favreau',
'https://jmfavreau.info/'
),
(
'user-circle',
'Pascal Huguet',
'https://lapsco.fr/la-direction.html'
),
)
RESEARCH = (
(
'https://limos.fr/static/limos/limos.png',
'width: 40px',
'LIMOS',
'https://limos.fr/detailperson/109',
),
(
'https://hal.science/assets/img/hal-logo-header.png',
'width: 20px',
'HAL',
'https://cv.hal.science/vincent-mazenod',
),
(
'https://static-00.iconduck.com/assets.00/google-scholar-icon-2048x2048-sjbhklt7.png',
'width: 20px',
'Google Scholar',
'https://scholar.google.com/citations?user=CFWYNi8AAAAJ',
),
)
SOCIAL = (
(
'building-o',
'users-cog',
'<span style="font-size:13px">CRI ISIMA/LIMOS</span>',
'https://hedgedoc.isima.fr/p/gD_i47uIi#/'
),
(
'building',
'<span style="font-size:13px">Bureau A115 - 1<sup>ère</sup> étage</span>',
'#'
),
# (
# 'phone',
# '04 73 40 50 27',
# '#'
# ),
(
'phone',
'04 73 40 50 27',
'#'
'envelope',
'<span style="font-size:13px">vincent.mazenod@limos.fr</span>',
'mailto:vincent.mazenod@limos.fr'
),
(
'envelope-o',
'<span style="font-size:13px">vincent.mazenod@isima.fr</span>',
'mailto:vincent.mazenod@isima.fr'
'linkedin',
'LinkedIn',
'pages/pgp.html'
),
(
'key',
'clé publique PGP',
'pages/pgp.html'
'https://www.linkedin.com/in/mazenovi'
),
(
'gitlab',
'gitlab.isima.fr',
'https://gitlab.isima.fr/mazenovi'
)
)
#INDEX_SAVE_AS = 'index.html'
......@@ -142,12 +189,13 @@ SHOW_ARTICLE_AUTHOR = False
SHOW_ARTICLE_CATEGORY = True
SHOW_DATE_MODIFIED = True
CUSTOM_CSS = 'static/custom.css'
STATIC_PATHS = ['images', 'extra/custom.css', 'node_modules', 'slides']
STATIC_PATHS = ['images', 'extra/custom.css', 'extra/custom.js', 'node_modules', 'slides']
ARTICLE_EXCLUDES = ['node_modules', 'slides']
PAGE_EXCLUDES = ['node_modules', 'slides']
STATIC_EXCLUDES = ['node_modules', 'slides']
EXTRA_PATH_METADATA = {
'extra/custom.css': {'path': 'static/custom.css'}
'extra/custom.css': {'path': 'static/custom.css'},
'extra/custom.js': {'path': 'static/custom.js'}
}
PYGMENTS_STYLE = "monokai"
USE_PAGER = True
......