E7 — Cybersécurité des services informatiques

Kirassur — SLAM, session 2025

Méthodologie et corrigé commenté — E7 — Cybersécurité des services informatiques, BTS SIO.

  • Durée 4h
  • Filière SLAM
  • Session 2025

Corrigé commenté Lockbay

Sujet officiel

Cas Kirassur — Session 2025, U7/E7 (SLAM), durée 4h, coef 4, sur 80 points (3 dossiers : 20 + 35 + 25 pts). 📄 Télécharger le sujet officiel Kirassur (réseaucerta.org)

Lockbay n’héberge pas le sujet : ce corrigé est une production originale Lockbay qui répond aux questions du sujet officiel. Sujet © Éducation nationale.

Le cas Kirassur (assurance) couvre trois dossiers : contrer une fraude (déclenchement anti-fausse-déclaration), ouvrir le SI aux partenaires (clé API, jetons, IDOR) et journaliser les accès (MVC). Corrigé question par question.

Dossier A — Évènements redoutés 20 pts

Mission A1 — Contrer la fausse déclaration « Bris de glace »

A1.1

Pourquoi un déclencheur (trigger) plutôt que le code applicatif

Le déclencheur s’exécute au niveau du SGBD, quelle que soit l’application ou la voie d’accès (interface, API, requête directe). Le contrôle est donc centralisé et inviolable : on ne peut pas le contourner en attaquant l’application. Un contrôle uniquement applicatif serait, lui, contournable.

A1.2

a) La requête (lignes 15-20) compte le nombre de sinistres « Bris de glace » déjà déclarés pour le même contrat sur la période de référence (90 jours, nbJoursPeriode), afin de le comparer à la limite nbMaxSinistresPeriode (= 2).

b) Traitement pour placer le sinistre « à vérifier » :

IF v_nbSinistres > v_nbMax THEN
    SET NEW.aVerifier = 'O';   -- O = à vérifier (N sinon)
END IF;

c) Pour ne contrôler que la garantie « Bris de glace » (id = 3 d’après l’extrait de Garantie), on encadre le traitement par une condition sur la garantie du nouveau sinistre :

IF NEW.idGarantie = 3 THEN   -- 3 = « Bris de glace »
    -- ... (comptage + mise à 'O' si dépassement)
END IF;

Mission A2 — Détecter l’évènement suspect

A2.1

Modifier la requête de la liste des sinistres

On ne garde que les « Bris de glace », on place en premier ceux à vérifier (aVerifier = 'O'), on trie par date de déclaration, et on affiche le nom de l’assuré (jointures) :

SELECT s.idContrat, s.numero, s.dateDeclaration, s.aVerifier,
       a.nom, a.prenom
FROM Sinistre s
JOIN Contrat c ON s.idContrat = c.id
JOIN Assure  a ON c.idAssure  = a.id
WHERE s.idGarantie = 3                       -- Bris de glace
ORDER BY s.aVerifier DESC, s.dateDeclaration ASC;  -- 'O' avant 'N'
Dossier B — Ouverture aux partenaires 35 pts

B1.1

Choix de HTTPS

a) En HTTP (clair), l’évènement redouté est l’interception de la clé API ou du jeton d’authentification (écoute du réseau) → un attaquant rejoue ces secrets pour usurper l’accès.

b) HTTPS (TLS) chiffre les échanges : la clé/le jeton ne circulent plus en clair, ce qui protège contre l’écoute et le rejeu.

B1.2

Pourquoi ne pas renvoyer la clé API du partenaire à l’assuré

La clé API est un secret permanent qui donne accès à toutes les ressources du partenaire. La transmettre à l’assuré l’exposerait : il pourrait accéder à tous les contrats gérés par ce partenaire (élévation de privilèges). L’assuré reçoit donc seulement un jeton temporaire, limité à son propre contrat.

B1.3

Les jetons donnent-ils accès à des données personnelles ?

Oui : un jeton permet d’accéder au contrat d’un assuré, donc à des données à caractère personnel (identité, véhicule, sinistres). Le jeton est par conséquent une donnée sensible à protéger (stockage et transmission sécurisés).

B1.4

Bonne pratique de tokenEnregistrer non respectée par tokenCharger

tokenEnregistrer hache le jeton avant de le stocker (le jeton n’est jamais conservé en clair en base). tokenCharger, lui, manipule/compare le jeton en clair au lieu de comparer des empreintes → en cas de fuite de la base, les jetons seraient directement réutilisables. La bonne pratique (hachage) doit être appliquée des deux côtés.

B1.5

a) Le contrôle de durée de validité garantit qu’un jeton expiré ne donne plus accès : même volé, il devient inutilisable au bout de 10 minutes → la fenêtre d’exploitation est réduite.

b) Les instructions de la classe DAO calculent la date limite (date courante + 600 s, via une fonction de date type DATE_ADD/SUBDATE) et la stockent en base dans la table des jetons, champ date de validité/expiration.

Mission B2 — Accès illicite (IDOR)

B2.1

Le code permet-il un accès illégitime ?

Oui. Le partenaire incrémente le numéro de contrat dans l’URL/l’appel API et obtient des contrats dont il n’est pas à l’origine : c’est une faille IDOR (Insecure Direct Object Reference — OWASP A01 : Broken Access Control). Le code ne vérifie pas la propriété de la ressource. Correction (sans coder) : contrôler, à chaque accès, que le contrat demandé est bien rattaché au partenaire/assuré authentifié (par le jeton/la clé) avant de renvoyer les données.

B2.2

Invalider une adresse IP au comportement anormal

Au niveau réseau, bloquer l’adresse IP sur le pare-feu / IPS (mise en liste noire), par exemple via un mécanisme automatique de type fail2ban qui bannit une IP après un nombre anormal de tentatives.

B2.3

Obligations RGPD après violation

Tecassur doit notifier la CNIL dans les 72 heures, informer les assurés concernés si le risque est élevé, et consigner la violation dans le registre des violations de données.

Dossier C — Journalisation et alertes 25 pts

C1.1

Journalisation des actions sensibles (MVC)

a) La méthode logAction de ActionManager doit écrire dans la table Action l’action exécutée avec l’identifiant de l’utilisateur et l’horodatage (NOW()), via une requête préparée.

b) Dans le contrôleur, enregistrerActionSensible doit tester action.estSensible et, si vrai, appeler logAction pour journaliser :

si uneAction.estSensible == true :
    actionManager.logAction(utilisateurConnecté, uneAction, maintenant)
C2.1

Schématisation des données (alertes et habilitations)

On complète le modèle pour gérer profils, alertes et surveillance des actions sensibles :

  • table Action avec l’attribut estSensible, et — pour chaque action sensible — un intervalle de surveillance (nbJours) et un nombre maximal d’appels sur cet intervalle ;
  • table Profil + association Profil–Action (un profil regroupe plusieurs actions autorisées) ;
  • habilitation ponctuelle (utilisateur, action, période début/fin) et affectation d’un profil à un utilisateur (période) — sans historisation des reconductions ;
  • table Alerte : utilisateur, action, date/heure de déclenchement, état (« nouvelle », « affectée », « résolue », « classée »), et responsable ayant pris en charge + date d’affectation.

(Les sinistres et assurés ne sont pas concernés par ces évolutions.)

Points de barème (rappel)

DossierAttenduPoints
ADéclencheur anti-fraude (aVerifier, garantie 3), requête liste sinistres20
BHTTPS, clé API vs jeton, hachage des jetons, durée de validité, IDOR, RGPD35
CJournalisation MVC (logAction), modélisation profils/alertes25
Total80
Sujet officiel © Éducation nationale — publié par le Réseau CERTA — Éducation nationale (lien source). Corrigé commenté et méthodologie © Lockbay Academy.