Académique Documents
Professionnel Documents
Culture Documents
Une attaque par force brute est une méthode utilisée par les attaquants pour obtenir un
accès non autorisé à un système ou à des données. Elle consiste à essayer
systématiquement toutes les combinaisons possibles de mots de passe jusqu'à trouver celui
qui permet l'accès au système ciblé. Cette technique peut être particulièrement efficace si le
mot de passe est faible, c'est-à-dire court, simple, ou faisant partie d'une liste de mots de
passe couramment utilisés et donc facile à deviner. Dans le cas de M. Breto, l'attaque par
force brute a été efficace probablement parce que son mot de passe était relativement
simple («1234Travail») et a pu être rapidement deviné par l'attaquant. De plus, la présence
du mot de passe noté au dos du clavier indique une pratique de sécurité faible, rendant le
mot de passe encore plus vulnérable à être découvert non seulement par des moyens
numériques mais aussi physiquement par toute personne ayant accès au poste de travail.
b) Citer au moins deux moyens de sensibiliser les employés aux enjeux de sécurité
Pour sensibiliser les employés aux enjeux de sécurité et éviter de tels incidents à l'avenir,
voici deux moyens efficaces :
Question A.2 :
Risque de perte de confidentialité : Sans authentification, tous les employés ayant accès à
un poste de travail connecté peuvent accéder à l'application et potentiellement à des
informations sensibles sans restriction. Cela peut conduire à la divulgation non autorisée
d'informations confidentielles, que ce soit intentionnellement ou par négligence. La mise en
place d'un système d'authentification garantit que seules les personnes autorisées peuvent
accéder à des données sensibles, protégeant ainsi la confidentialité des informations.
Question A.3 :
En attribuant à chaque utilisateur un rôle spécifique qui détermine ses droits d'accès aux
données et aux fonctionnalités de l'application, on s'assure que les utilisateurs ne disposent
que des permissions strictement nécessaires à l'exécution de leurs tâches. Cela limite les
risques de fuites de données ou d'actions malveillantes, car un utilisateur ne peut accéder
qu'aux informations et aux opérations autorisées par son rôle.
En limitant les droits d'accès des utilisateurs aux seules ressources dont ils ont besoin, on
réduit la surface d'attaque potentielle. Cela empêche les utilisateurs (qu'ils soient malveillants
ou non) d'exploiter des permissions excessives pour accéder à des informations sensibles
ou effectuer des actions non autorisées. Cela aide également à prévenir les dommages
accidentels, tels que la suppression de données critiques.
Les rôles applicatifs permettent un contrôle d'accès plus granulaire aux données. Au lieu
d'avoir un accès général à la base de données, les utilisateurs obtiennent des droits
spécifiques sur certaines tables, enregistrements ou champs, selon les besoins de leur rôle.
Cela assure que les données sensibles restent protégées et que chaque utilisateur ne peut
voir ou modifier que ce qui lui est explicitement permis.
Audit et traçabilité
Avoir des rôles définis pour chaque utilisateur facilite l'audit et la traçabilité des actions
effectuées au sein de l'application. En cas d'incident de sécurité ou de besoin de révision
des accès, il est plus facile de vérifier qui avait accès à quoi et d'identifier la source d'une
éventuelle compromission. Cela est essentiel pour répondre aux normes de conformité et
aux réglementations en matière de protection des données.
Question A.4 :
Habilitations sans durée de vie : L'absence de durée de vie pour les habilitations crée un
risque de sécurité majeur, surtout dans un environnement où les employés changent
régulièrement de rôle ou où des stagiaires et saisonniers sont employés. Sans expiration
automatique des droits d'accès, des utilisateurs pourraient conserver un accès inapproprié à
des ressources ou des données sensibles longtemps après que leur nécessité ou légitimité
d'accès a cessé. Cela ouvre la porte à des abus potentiels ou à des failles de sécurité si ces
comptes sont compromis.
Multiples rôles pour la même application : Permettre à un utilisateur d'avoir plusieurs rôles
pour la même application peut compliquer la gestion des droits d'accès et mener à une
accumulation de privilèges. Ce sur-ensemble de privilèges peut aller au-delà de ce qui est
nécessaire pour les fonctions actuelles de l'employé, violant ainsi le principe de moindre
privilège. Cela augmente le risque que des données soient accessibles par des utilisateurs
n'ayant pas besoin de cet accès pour leur rôle actuel, ou que des actions soient effectuées
au-delà de ce qui est autorisé pour leur poste.
1. Ajouter une durée de vie aux habilitations : Pour chaque rôle attribué à un utilisateur,
ajouter un champ "Date de fin" représentant la fin de la validité de ce rôle. Cela permet
d'assurer que les droits d'accès sont automatiquement révoqués à une date spécifique, ce
qui est particulièrement utile pour gérer les accès de stagiaires et de saisonniers, ou
lorsqu'un employé change de rôle.
• Table des habilitations : Ajouter des champs DateDebut et DateFin pour chaque
habilitation, permettant de définir clairement quand les droits d'accès commencent et
quand ils se terminent.
• Contrainte d'unicité : S'assurer que la table qui lie les utilisateurs, leurs rôles, et les
applications impose l'unicité de la combinaison utilisateur-application. Cela peut être
accompli par une clé primaire composite ou une contrainte d'unicité.
• Scripts de maintenance : Mettre en place des routines automatisées qui vérifient
régulièrement les dates d'expiration des habilitations et retirent ou mettent à jour les
droits d'accès en conséquence.
Ces modifications aideront à minimiser les risques de sécurité en s'assurant que les accès
sont accordés de manière appropriée, conformément au principe de moindre privilège, et
que les habilitations sont maintenues à jour en fonction des changements de rôle ou de
statut des employés.
Question A.5 :
Voici un exemple de code pour PostgreSQL, car il permet une bonne flexibilité pour ce type
d'opération. Notez que pour d'autres SGBD, la syntaxe exacte et les fonctions disponibles
peuvent différer.
Si vous utilisez un autre SGBD, vous devrez peut-être ajuster la syntaxe. Par exemple, SQL
Server utilise AFTER UPDATE AS au lieu de FOR EACH ROW et aura des différences dans
la façon de déclarer les fonctions. MySQL a également sa propre syntaxe pour la création de
triggers et de fonctions.
Question A.6 :
Atomicité : Les transactions garantissent que toutes les opérations au sein d'une transaction
sont exécutées comme une seule unité de travail. Soit toutes les opérations réussissent, et la
transaction est validée (commit), soit si une opération échoue, toutes les modifications sont
annulées (rollback). Cela est crucial lorsqu'on manipule des comptes utilisateurs et des rôles
dans la base de données, car cela évite des états intermédiaires où certaines opérations
seraient appliquées tandis que d'autres échoueraient, menant à une incohérence des
données.
Durabilité : Une fois qu'une transaction est validée, ses modifications sur la base de
données sont permanentes, même en cas de panne du système. Cela assure que les
opérations liées à la gestion des rôles et des comptes utilisateurs ne seront pas perdues et
que la base de données reflète fidèlement toutes les actions effectuées.
b) Compléter le code de la fonction deleteRole()
la syntaxe spécifique pour la suppression du compte utilisateur (DROP USER) peut varier
selon le SGBD, et il peut être nécessaire d'ajuster cette commande en fonction de votre
environnement spécifique. De même, la gestion des exceptions (EXCEPTION WHEN
OTHERS THEN) est illustrée ici dans le contexte de PostgreSQL (plpgsql). Pour d'autres
SGBD, le mécanisme de gestion des erreurs et la syntaxe des transactions pourraient
nécessiter des ajustements
Question B.1 :
a) Expliquer le rôle de la méthode before de la classe AuthGuard.
Dans le contexte d'un framework de développement web comme CodeIgniter, la
classe AuthGuard est typiquement utilisée pour gérer l'authentification des
utilisateurs. La méthode before de cette classe joue un rôle crucial dans le contrôle
d'accès aux différentes parties de l'application.
Son principal objectif est d'intercepter les requêtes avant qu'elles n'atteignent les
contrôleurs de l'application. La méthode before vérifie si l'utilisateur est authentifié et
autorisé à accéder à la ressource demandée. Si l'utilisateur n'est pas authentifié, ou
si les vérifications de sécurité échouent, cette méthode peut rediriger l'utilisateur
vers une page de connexion, afficher un message d'erreur, ou prendre toute autre
mesure de sécurité appropriée. Cela empêche l'accès non autorisé aux
fonctionnalités et aux données sensibles de l'application.
En résumé, la méthode before dans AuthGuard :
Intercepte les requêtes avant qu'elles n'accèdent aux contrôleurs.
Vérifie l'authentification de l'utilisateur, en s'assurant qu'il est connecté.
Contrôle l'accès aux ressources en fonction de l'authentification et des autorisations
de l'utilisateur.
Redirige ou bloque les requêtes non autorisées, contribuant ainsi à sécuriser
l'application.
Question B.3 :
a) Donner au moins un argument lié à la sécurité expliquant pourquoi il est
conseillé de filtrer les données issues de la base de données avant leur
affichage sur le site.
Filtrage des données pour la sécurité
a) Filtrer les données avant l'affichage : Cela empêche l'exécution de scripts
malveillants stockés dans la base de données, protégeant ainsi les utilisateurs contre
les attaques XSS stockées. Cela garantit que tout code malveillant qui a pu être
introduit dans la base de données ne sera pas exécuté dans le navigateur de
l'utilisateur, protégeant ainsi l'utilisateur contre le vol de données sensibles, telles que
les cookies de session.
b) Donner au moins un argument lié à la sécurité expliquant pourquoi il est
conseillé de filtrer les données issues du formulaire avant leur écriture en base
de données.
b) Cela empêche le stockage et la propagation de scripts malveillants via la base de
données. En validant et nettoyant les données entrantes, on s'assure que seules les
informations sûres sont enregistrées, réduisant ainsi le risque d'attaques XSS
stockées et garantissant l'intégrité des données stockées.
Question B.4 : Neutralisation du code JavaScript avec CodeIgniter
a) Modifier la méthode commentStore de la classe AteliersController pour
neutraliser le code JavaScript lors de l'enregistrement dans la base de
données. (Ne recopier que les lignes modifiées en précisant leur numéro.)
Supposons que la méthode commentStore soit structurée de manière standard pour
un contrôleur dans CodeIgniter. Pour neutraliser le code JavaScript lors de
l'enregistrement, vous devez utiliser la fonction esc() fournie par CodeIgniter sur
toutes les données entrantes avant de les enregistrer dans la base de données.
// Supposons que le numéro de ligne avant modification soit 25
$data['comment'] = esc($this->request->getPost('comment'));
Question C.1 :
Observer le courriel reçu par M. Hardi et citer cinq types d’indices qui laissent
penser qu’il s’agit bien d’un hameçonnage.
C.1 : Indices de hameçonnage
Bien que je ne puisse pas observer directement le courriel reçu par M. Hardi, les
indices typiques qui suggèrent qu'il s'agit d'un hameçonnage incluent :
Adresse de l'expéditeur suspecte : L'adresse e-mail peut ressembler à celle du
parc zoologique mais avec de légères modifications ou fautes d'orthographe qui ne
seraient pas évidentes à première vue.
Liens douteux : Le courriel contient probablement des liens qui semblent légitimes
mais qui redirigent vers des sites web malveillants ou des pages de connexion
factices destinées à voler des informations d'identification.
Demande urgente : Le message utilise un langage incitant à l'action immédiate,
comme une menace de désactivation du compte ou la nécessité de vérifier des
informations personnelles rapidement.
Fautes de grammaire ou d'orthographe : Souvent, ces courriels contiennent des
erreurs qui ne seraient pas présentes dans une communication officielle d'une
entreprise professionnelle.
Contenu générique : Le message peut s'adresser au destinataire de manière vague,
comme "Cher membre" ou "Cher parrain", sans utiliser le nom réel de la personne,
indiquant une approche de masse plutôt qu'une communication personnalisée
Question C.2 : Infractions possibles
Citer deux infractions qui peuvent être retenues contre la personne
malveillante
Dans le contexte de la plainte de M. Edwin et de la société Lama Zoo contre la
campagne d'hameçonnage, deux infractions principales peuvent être retenues :
Escroquerie et/ou fraude informatique : Utiliser des courriels d'hameçonnage pour
induire en erreur et voler des informations personnelles ou financières peut être
considéré comme une forme d'escroquerie. Les attaquants utilisent la tromperie pour
amener les victimes à révéler volontairement des informations sensibles ou à
effectuer des actions qui leur sont préjudiciables.
Accès et maintien frauduleux dans un système informatique : Si l'attaquant a
utilisé les informations obtenues par hameçonnage pour accéder illégalement aux
comptes des utilisateurs, cette action peut être considérée comme un accès non
autorisé à un système informatique. Le maintien dans ce système, pour collecter
davantage d'informations ou pour commettre d'autres actes malveillants, renforce la
gravité de l'infraction.
Ces infractions sont sévèrement punies dans de nombreux pays et peuvent donner
lieu à des poursuites judiciaires contre les auteurs de l'attaque d'hameçonnage,
menant à des sanctions pénales, y compris des amendes et des peines
d'emprisonnement.
Question C.3 : Protection contre les attaques CSRF avec CodeIgniter
a) Indiquer pour chacune des deux solutions de protection contre les attaques
CSRF proposées par l’environnement de développement CodeIgniter les
éléments de sécurisation stockés côté client et ceux stockés côté serveur.
CodeIgniter propose principalement deux solutions pour se protéger contre les
attaques CSRF :
• Token CSRF basé sur la session (Synchronizer Token Pattern) :
Côté client : Un jeton CSRF (token) unique est généré par le serveur et envoyé au
client. Ce token est habituellement placé dans un champ caché des formulaires ou
ajouté à l'URL pour les requêtes GET.
Côté serveur : Le token est stocké dans la session de l'utilisateur. Lorsqu'une
requête est reçue, le serveur compare le token envoyé avec la requête à celui stocké
dans la session. Si les deux tokens correspondent, la requête est considérée comme
légitime.
Cette vue filtre les informations pour n'inclure que les animaux qui sont actuellement
parrainés (estParraine = 1 suppose que chaque animal parrainé est marqué comme
tel dans la base de données).
Ces requêtes assument une configuration standard de la gestion des droits dans une
base de données SQL. Selon le système de gestion de base de données spécifique
(MySQL, PostgreSQL, etc.), des modifications mineures pourraient être nécessaires.
Question C.6 : Proposition pour un tableau d'honneur pseudonymisé
Proposer une nouvelle version du tableau d'honneur
Pour répondre aux préoccupations relatives à la divulgation de données
personnelles tout en permettant à chaque parrain de se reconnaître, on peut
pseudonymiser les données en utilisant des identifiants ou des pseudonymes
uniques pour chaque parrain. Voici un exemple de comment cela pourrait être
présenté :
1 StarParrain1 12
2 NatureAmi2 10
3 Defender3 9
10 EcoGuardian10 5