CESI: présentation + maquette Vagrant Sécurité entreprise

This commit is contained in:
wpetit 2018-02-01 17:35:41 +01:00
parent 482bc0e960
commit 85d1a97452
17 changed files with 741 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@ -0,0 +1,239 @@
# La sécurité informatique en entreprise
## Le réseau intranet
William Petit - S.C.O.P. Cadoles - 2017
---
<!-- page_number: true -->
---
## Rappel des objectifs de la sécurité informatique
1. Maintenir l'intégrité des données
2. S'assurer du niveaux d'authentification et d'autorisation
3. Maintenir la disponibilité des services
4. Assurer la traçabilité des échanges
5. Éviter la fuite d'informations
---
## Topologie d'exemple
![center](./img/intranettopologie.png)
---
## La zone "Services Intranet"
---
## Les zones "Postes de travail"
---
## Sauvegarde des postes
---
## La zone "Services Extranet"
---
## Supervision de l'infrastructure
---
## Aller plus loin
### Détection des intrusions réseau
- [Snort](https://www.snort.org/)
- [Suricata](https://suricata-ids.org/)
### Supervision
- [Nagios]()
### Centralisation et analyse des journaux
- [La suite ELK](https://www.elastic.co/fr/products)
- [Munin](http://munin-monitoring.org/)
---
## Le poste de travail
### Stratégie antivirale
### Stratégie de mise à jour
### Stratégie de sauvegarde
### Confidentialité des communications
---
## Confidentialité des communications
### Éléments de base de cryptographie asymétrique
### Utilisation de GnuPG
---
## Utilisation de GnuPG
### Cryptographie à clé publique/privée
### GPG
---
## Cryptographie à clé publique/privée (1)
### Chiffrer un message
![center](./img/publickeycryptoencryption.png)
---
## Cryptographie à clé publique/privée (2)
### Signer un message
![center](./img/publickeycryptosigning.png)
---
## GPG
> GNU Privacy Gard - https://gnupg.org/
---
## Créer une paire de clés GPG
```bash
gpg2 --full-gen-key
```
---
## Chiffrer un document
### Chiffrement
```bash
gpg2 --armor --encrypt <mon_fichier>
```
Un fichier `<mon_fichier>.asc` sera généré. C'est votre fichier chiffré.
### Déchiffrement
```bash
gpg2 --output <mon_fichier_déchiffré> \
--decrypt <mon_fichier>.asc
```
---
## Signer un document
### Signature
```bash
gpg2 --detach-sign <mon_fichier>
```
Un fichier `<mon_fichier>`.sig sera généré. C'est la signature de votre document.
### Vérification
```bash
gpg2 --verify <mon_fichier>.sig
```
Le fichier original doit être dans le même répertoire et porter le nom `<mon_fichier>` pour que vous puissiez vérifier une signature.
---
## Lister les clés du trousseau local
```bash
gpg2 --keyid-format long --list-keys
```
---
## Publier une clé GPG publique sur un serveur de clés
```bash
gpg2 --keyserver <serveur_de_clé> \
--send-key <identifiant_clé>
```
Exemple de serveur de clés: [hkp://p80.pool.sks-keyservers.net:80](https://sks-keyservers.net/overview-of-pools.php)
---
## Chercher une clé GPG publique sur un serveur de clés
```bash
gpg2 --keyserver <serveur_de_clé> \
--search-keys <adresse_courriel>
```
---
## Mettre à jour les clés de son trousseau local
```bash
gpg2 --keyserver <serveur_de_clé> \
--refresh-keys
```
---
## Révoquer une clé GPG
### Créer le certificat de révocation
```bash
gpg2 --output <fichier_révocation> \
--gen-revoke <adresse_courriel>
```
Ce certificat est à sauvegarder de manière sécurisée.
### Utiliser un certificat de révocation
```bash
# Importer le certificat
gpg2 --import <fichier_révocation>
# Diffuser la révocation de votre clé
gpg2 --keyserver <serveur_de_clé> \
--send-keys <identifiant_clé>
```
Les utilisateurs de GPG verront alors votre clé comme révoquée.
---
## Exercice
- Générer votre propre clé GPG pour votre adresse courriel.
- Faire signer votre clé par au moins 1 de vos collègues dans la salle
- Configurer votre client courriel pour qu'il utilise votre clé GPG
- Exemple: [Thunderbird - Plugin Enigmail](https://www.enigmail.net/index.php/en/)
- Rechercher et récupérer la clé associée à l'adresse wpetit@cadoles.com
- Envoyer un courriel chiffré et signé par votre clé à wpetit@cadoles.com
---
## Créer une clé GPG
---
# Licence
## CC BY-NC-SA 3.0 FR
[Creative Commons - Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 3.0 France](https://creativecommons.org/licenses/by-nc-sa/3.0/fr/)

View File

@ -0,0 +1,292 @@
# La sécurité informatique en entreprise
## Tour d'horizon
William Petit - S.C.O.P. Cadoles - 2017
---
<!-- page_number: true -->
# Qu'est ce que la sécurité ?
## Menaces, vulnérabilités, contre-mesures et risque
---
<!-- page_number: true -->
## Menace
> Cause potentielle d'un incident, pouvant causer des dommages à un système ou une organisation.
>
> -- <cite>Définition (traduite) de "menace" dans le standard ISO/IEC 27000</cite>
Source: [ISO/IEC 27000 - Wikipédia](https://en.wikipedia.org/wiki/ISO/IEC_27000)
---
<!-- page_number: true -->
## Vulnérabilité
> Faiblesse d'un "bien" ou d'un "contrôle" pouvant être exploité par une ou plusieurs "menaces".
>
> -- <cite>Définition (traduite) de "vulnérabilité" dans le standard ISO/IEC 27000</cite>
Source: [ISO/IEC 27000 - Wikipédia](https://en.wikipedia.org/wiki/ISO/IEC_27000)
---
<!-- page_number: true -->
## Contre-mesure
> Disposition prise pour s'opposer à une action, à un effet, à un événement, ou pour les prévenir.
>
> -- <cite>Définition de "contre-mesure"</cite>
Source: [Wiktionnaire](https://fr.wiktionary.org/wiki/contre-mesure)
---
<!-- page_number: true -->
## Risque
> Possibilité dun événement négatif, péril possible, hasard dangereux.
>
> -- <cite>Définition de "risque"</cite>
Source: [Wiktionnaire](https://fr.wiktionary.org/wiki/risque)
### Formule empirique
$$Risque= \frac {\mathit{Vuln \acute{e}rabilit\acute{e}} \times \mathit{Menace}} {\mathit{ContreMesure}}$$
---
<!-- page_number: true -->
# Responsabilité légale
## Responsabilité et peines pour l'attaquant
## Responsabilité et peines pour l'entreprise
---
<!-- page_number: true -->
## Responsabilité et peines pour l'attaquant
> Le fait d'accéder ou de se maintenir, frauduleusement, dans tout ou partie d'un système de traitement automatisé de données est puni de **deux ans d'emprisonnement et de 60 000 € d'amende**.
> [...]
> Lorsque les infractions prévues aux deux premiers alinéas ont été commises à l'encontre d'un système de traitement automatisé de données à caractère personnel mis en œuvre par l'Etat, la peine est portée à **cinq ans d'emprisonnement et à 150 000 € d'amende**.
>
> -- <cite>Extrait de l'article 323-1 du Code Pénal</cite>
Source: [Légifrance](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006418316&cidTexte=LEGITEXT000006070719)
---
<!-- page_number: true -->
## Responsabilité et peines pour l'entreprise
### Qu'est ce qu'une "donnée personnelle" ?
> Toute information se rapportant à une personne physique identifiée ou identifiable (ci-après dénommée «personne concernée») ; est réputée être une «personne physique identifiable» une personne physique qui peut être **identifiée, directement ou indirectement**, notamment par **référence à un identifiant**, tel qu'un **nom, un numéro d'identification, des données de localisation, un identifiant en ligne, ou à un ou plusieurs éléments spécifiques propres à son identité physique, physiologique, génétique, psychique, économique, culturelle ou sociale**
>
> -- <cite>Extrait de l'article 4 du RGPD</cite>
Source: [CNIL](https://www.cnil.fr/fr/reglement-europeen-protection-donnees/chapitre1#Article4)
---
<!-- page_number: true -->
## Responsabilité et peines pour l'entreprise
### Réponsabilité au niveau national
> Le responsable du traitement est tenu de prendre toutes précautions utiles, au regard de la nature des données et des risques présentés par le traitement, pour préserver la sécurité des données et, notamment, empêcher qu'elles soient déformées, endommagées, ou que des tiers non autorisés y aient accès.
>
> -- <cite>Article 34 de la loi n° 78-17 du 6 janvier 1978</cite>
Source: [Légifrance](https://www.legifrance.gouv.fr/affichTexteArticle.do?cidTexte=JORFTEXT000000886460&idArticle=LEGIARTI000006528131&dateTexte=&categorieLien=cid)
---
<!-- page_number: true -->
### Réponsabilité au niveau européen
> [..] le responsable du traitement doit mettre en oeuvre les mesures techniques et d'organisation appropriées pour **protéger les données à caractère personnel contre la destruction accidentelle ou illicite, la perte accidentelle, l'altération, la diffusion ou l'accès non autorisés**, notamment lorsque le traitement comporte des transmissions de données dans un réseau, ainsi que **contre toute autre forme de traitement illicite**.
>
> -- <cite>Extrait de l'article 17 de la directive européenne 95/46/CE du 24 octobre 1995</cite>
Source: [EURLex](http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX%3A31995L0046%3AFR%3AHTML)
---
<!-- page_number: true -->
### Peines au niveau national
> Le fait de procéder ou de faire procéder à un traitement de données à caractère personnel sans mettre en oeuvre les mesures prescrites à l'article 34 de la loi n° 78-17 du 6 janvier 1978 précitée est puni de **cinq ans d'emprisonnement et de 300 000 euros d'amende**.
>
> -- <cite>Article 226-17 du Code Pénal</cite>
Source: [Légifrance](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006417964&cidTexte=LEGITEXT000006070719)
---
<!-- page_number: true -->
# Objectifs de la sécurité informatique
## Maintenir l'intégrité des données
## S'assurer du niveaux d'authentification et d'autorisation
## Maintenir la disponibilité des services
## Assurer la traçabilité des échanges
## Éviter la fuite d'informations
---
<!-- page_number: true -->
## Maintenir l'intégrité des données
- Mitiger les risques de corruption de données (volontaire ou involontaire)
- Mitiger les risques de perte de données
---
<!-- page_number: true -->
## S'assurer du niveaux d'authentification et d'autorisation
- S'assurer que les acteurs **(humains ou non)** de l'infrastructure sont correctement identifiés
- S'assurer que les acteurs ne peuvent effectuer que les actions que leur niveau d'accréditation permet
- S'assurer que chaque acteur n'a pas un niveau d'accréditation supérieur à ce que requiert ses missions
---
<!-- page_number: true -->
## Maintenir la disponibilité des services
- S'assurer que les services de l'infrastructure sont accessibles aux acteurs autorisés
- S'assurer que la qualité de service correspond aux attentes "métier"
---
<!-- page_number: true -->
## Assurer la traçabilité des échanges
- S'assurer que pour toute opération sur une ressource "sensible", on est capable d'identifier l'acteur à l'origine de celle ci
- S'assurer qu'on est capable d'identifier les "chaines d'opérations" d'un acteur donné
---
<!-- page_number: true -->
## Éviter la fuite d'informations
- Protéger les ressources sensibles des accès non autorisés
- S'assurer que chaque acteur n'a accès qu'aux informations nécessaires à ses missions
---
<!-- page_number: true -->
# Une politique de sécurité, plusieurs niveaux d'application
### Identifier les différents contextes et leurs spécificités
### Nécessité de la démarche globale et intégration du facteur humain
---
<!-- page_number: true -->
## Identifier les différents contextes et leurs spécificités
### Le lieu de travail
### Le poste de travail
### L'intranet
### L'extranet
### L'utilisateur
---
<!-- page_number: true -->
## Le lieu de travail
- Y a-t-il un inventaire des ressources techniques/matérielles avec leur localisation ?
- Quelle est la politique de ségrégation des ressources techniques vis à vis de leur niveau de criticité pour l'entreprise ?
- Quels personnels ont potentiellement accès aux ressources matérielles ? Quels mécanismes sont utilisés pour filtrer les accès ?
---
<!-- page_number: true -->
## Le poste de travail
- Quelle est la politique d'authentification des utilisateurs sur leur poste de travail ?
- Quelles libertés les utilisateurs ont ils quant à l'installation/configuration de leur poste de travail ?
- Quelle est la politique de supervision des postes de travail ?
- Quelles données sont sauvegardées ? Comment sont elles sauvegardées ?
---
<!-- page_number: true -->
## L'intranet
- Quelle est la politique d'authentification des utilisateurs sur l'intranet ?
- Quelle est la politique d'accès des utilisateurs itinérants ?
- Quelles données sont sauvegardées ? Comment sont elles sauvegardées ?
---
<!-- page_number: true -->
## L'extranet
- Quelle est la politique d'authentification des utilisateurs sur l'intranet ?
- Quelles sont les données d'utilisateurs externes stockés dans le système d'information ?
- Quels sont les échanges entre l'extranet et l'intranet ?
- Quelles données sont sauvegardées ? Comment sont elles sauvegardées ?
---
<!-- page_number: true -->
## L'utilisateur
- L'utilisateur est il sensibilisé aux problèmatiques de sécurité dans l'entreprise ?
---
<!-- page_number: true -->
## Nécessité de la démarche globale et l'intégration du facteur humain
- Les chartes d'utilisation
- La formation continue des salariés
- L'approche "dépénalisante" et l'identification des référents
- Actions de sensibilisation
- Bulletins d'information
- Un processus continue avec une réévaluation constante
---
<!-- page_number: true -->
# La démarche d'audit
## Les différents types d'audit
## Déroulement d'un audit
Source : [ANSSI - PASSI 2.1 - Référentiel d'exigences pour les auditeurs](https://www.ssi.gouv.fr/uploads/2014/12/PASSI_referentiel-exigences_v2.1.pdf)
---
<!-- page_number: true -->
## Les différents types d'audit
### Audit darchitecture
### Audit de configuration
### Audit de code source
### Tests dintrusion
### Audit organisationnel et physique
### Audit de systèmes industriels
---
<!-- page_number: true -->
## Déroulement d'un audit
### Établissement dune convention
### Préparation et déclenchement de la prestation
### Exécution de la prestation
### Restitution
### Élaboration du rapport daudit
### Clôture de la prestation
---
<!-- page_number: true -->
## Travaux pratiques
### Tests d'intrusion sur les applications Web
---
# Licence
## CC BY-NC-SA 3.0 FR
[Creative Commons - Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 3.0 France](https://creativecommons.org/licenses/by-nc-sa/3.0/fr/)

View File

@ -0,0 +1 @@
/.vagrant

View File

@ -0,0 +1,18 @@
# Intranet Demo
Démonstrateur d'un intranet d'entreprise composé de:
- Un pare-feu
- Un réseau "Comptabilité" avec un poste client Linux
- Un réseau "Développement" avec un poste client Linux
- Un réseau "Services Intranet"
- Un réseau "Services Extranet"
Ce projet utilise [Vagrant](https://www.vagrantup.com/).
## Démarrage
```bash
vagrant plugin install vagrant-reload vagrant-vbguest
vagrant up
```

View File

@ -0,0 +1,63 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
config.vbguest.auto_update = false
config.vbguest.no_remote = true
config.vm.provision :shell,
inline: "localectl set-keymap fr"
config.vm.define "firewall" do |firewall|
firewall.vm.box = "ubuntu/xenial64"
firewall.vm.hostname = "firewall"
firewall.vm.network "public_network"
firewall.vm.network "private_network", ip: "192.168.200.254", virtualbox_intnet: "accounting"
firewall.vm.network "private_network", ip: "192.168.201.254", virtualbox_intnet: "developer"
firewall.vm.network "private_network", ip: "192.168.202.254", virtualbox_intnet: "intra-services"
firewall.vm.provision :shell, path: "provisioning/common/disable_predictable_interfaces.sh"
firewall.vm.provision :reload
firewall.vm.provision :shell, path: "provisioning/firewall/configure_dns.sh"
firewall.vm.provision :shell, path: "provisioning/firewall/configure_ip_forwarding.sh"
firewall.vm.provision :shell, path: "provisioning/firewall/configure_firewall_rules.sh"
end
config.vm.define "intranet-portal" do |portal|
portal.vm.box = "ubuntu/xenial64"
portal.vm.hostname = "intranet-portal"
portal.vm.network "private_network", ip: "192.168.202.10", virtualbox_intnet: "intra-services"
portal.vm.provision :shell, :inline => "ip route delete default 2>&1 >/dev/null || true; ip route add default via 192.168.202.254"
end
config.vm.define "workstation1-developer-linux" do |workstation|
workstation.vm.box = "ubuntu/xenial64"
workstation.vm.hostname = "developer-ws1"
workstation.vm.network "private_network", ip: "192.168.201.10", virtualbox_intnet: "developer", auto_config: false
workstation.vm.provision :shell, path: "provisioning/workstation/configure_desktop.sh"
workstation.vm.provision :reload
workstation.vm.provision :shell, path: "provisioning/workstation/configure_network.sh"
end
config.vm.define "workstation1-accounting-linux" do |workstation|
workstation.vm.box = "ubuntu/xenial64"
workstation.vm.hostname = "accounting-ws1"
workstation.vm.network "private_network", ip: "192.168.200.10", virtualbox_intnet: "accounting", auto_config: false
workstation.vm.provision :shell, path: "provisioning/workstation/configure_desktop.sh"
workstation.vm.provision :reload
workstation.vm.provision :shell, path: "provisioning/workstation/configure_network.sh"
end
end

View File

@ -0,0 +1,5 @@
#!/usr/bin/env bash
sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="net.ifnames=0"/' /etc/default/grub
update-grub

View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
set -xe
source /vagrant/provisioning/firewall/firewall.conf
apt-get update
apt-get install -y dnsmasq
systemctl stop systemd-resolved
systemctl disable systemd-resolved
cat > /etc/dnsmasq.d/local.conf <<EOF
interface=$DEVELOPER_IFACE
interface=$ACCOUNTING_IFACE
dhcp-range=$DEVELOPER_IFACE,192.168.201.10,192.168.201.100,4h
dhcp-range=$DEVELOPER_IFACE,192.168.200.10,192.168.200.100,4h
EOF
systemctl restart dnsmasq

View File

@ -0,0 +1,45 @@
#!/usr/bin/env bash
set -xe
source /vagrant/provisioning/firewall/firewall.conf
ufw disable
# Règles de pare-feu/routage
ufw logging on
# Règles par défaut
ufw default deny outgoing
ufw default deny
ufw allow ssh\
comment "ALLOW SSH (IN)"
ufw allow in 53,67,68/udp\
comment "ALLOW DNS + DHCP (IN)"
ufw allow out 53,67,68/udp\
comment "ALLOW DNS + DHCP (OUT)"
# Règles de routage
ufw route allow in on $DEVELOPER_IFACE out on $MGMT_IFACE to any port 80 from $DEVELOPER_NETWORK\
comment "DEVELOPER -> 80 INTERNET"
ufw route allow in on $DEVELOPER_IFACE out on $MGMT_IFACE to any port 443 from $DEVELOPER_NETWORK\
comment "DEVELOPER -> 443 INTERNET"
# On autorise les connexions HTTP(S) vers l'exterieur depuis le réseau "accounting"
ufw route allow in on $ACCOUNTING_IFACE out on $MGMT_IFACE to any port 80 from $ACCOUNTING_NETWORK\
comment "ACCOUNTING -> 80 INTERNET"
ufw route allow in on $ACCOUNTING_IFACE out on $MGMT_IFACE to any port 443 from $ACCOUNTING_NETWORK\
comment "ACCOUNTING -> 443 INTERNET"
# On autorise toutes les connexions vers le réseau "services intranet" depuis le réseau "accounting"
# et le réseau "developer"
ufw route allow in on $ACCOUNTING_IFACE out on $INTRANET_IFACE to any from $ACCOUNTING_NETWORK\
comment "ACCOUNTING -> * SERVICES INTRA"
ufw route allow in on $DEVELOPER_IFACE out on $INTRANET_IFACE to any from $DEVELOPER_NETWORK\
comment "DEVELOPER -> * SERVICES INTRA"
# Application des règles
ufw --force enable

View File

@ -0,0 +1,30 @@
#!/usr/bin/env bash
set -xe
source /vagrant/provisioning/firewall/firewall.conf
# Activation du NAT Forwarding
sed -i 's/^#net\/ipv4\/ip_forward.*$/net\/ipv4\/ip_forward=1/' /etc/ufw/sysctl.conf
sed -i 's/^#net\/ipv6\/conf\/default\/forwarding.*$/net\/ipv6\/conf\/default\/forwarding=1/' /etc/ufw/sysctl.conf
sed -i 's/^#net\/ipv6\/conf\/all\/forwarding.*$/net\/ipv6\/conf\/all\/forwarding=1/' /etc/ufw/sysctl.conf
#sed -i 's/^DEFAULT_FORWARD_POLICY="DROP"$/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw
# Ajout des règles de forwarding
TMP_FILE=$(mktemp)
cat > "$TMP_FILE" <<EOF
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s $INTRANET_NETWORK -o $MGMT_IFACE -j MASQUERADE
-A POSTROUTING -s $ACCOUNTING_NETWORK -o $MGMT_IFACE -j MASQUERADE
-A POSTROUTING -s $DEVELOPER_NETWORK -o $MGMT_IFACE -j MASQUERADE
COMMIT
$(cat /etc/ufw/before.rules)
EOF
mv /etc/ufw/before.rules /etc/ufw/before.rules.bak
mv "$TMP_FILE" /etc/ufw/before.rules
rm -f "$TMP_FILE"

View File

@ -0,0 +1,11 @@
IFACES=($(ls /sys/class/net))
MGMT_IFACE="${IFACES[0]}"
PUBLIC_IFACE="eth1"
INTRANET_IFACE="eth4"
DEVELOPER_IFACE="eth3"
ACCOUNTING_IFACE="eth2"
INTRANET_NETWORK="192.168.202.0/24"
DEVELOPER_NETWORK="192.168.201.0/24"
ACCOUNTING_NETWORK="192.168.200.0/24"

View File

@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -ex
apt-get update
apt-get install -y xubuntu-desktop

View File

@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -ex
ip route delete default
IFACES=($(ls /sys/class/net))
dhclient -v ${IFACES[1]}