Accueil / Cybersécurité / Social engineering / Piratage : Coupure de courant en Ukraine à la suite d’un acte 2.0 contre une centrale

Piratage : Coupure de courant en Ukraine à la suite d’un acte 2.0 contre une centrale

Coupures de courant en Ukraine à la suite de l’attaque informatique à l’encontre d’une centrale électronique.

Les professionnels de la sécurité des systèmes d’information alertent depuis quelques années sur les vulnérabilités, les failles et les défauts de sécurisation dans les systèmes industriels. L’attaque Stuxnet en 2010 a non seulement démontré que ce genre d’attaque pouvait endommager un système SCADA mais a aussi généralisé l’outillage et le mode opératoire, pour être exploitable par des non experts.

Le 23 décembre 2015, une variante du logiciel malveillant Black Energy a paralysé plusieurs centrales électriques Ukrainiennes, causant une coupure électrique dans une des régions du pays. Avec cette attaque et 5 ans après Stuxnet, on voit bien que la menace ciblant les systèmes industriels SCADA est plus que jamais présente et constitue un risque réel pour les infrastructures vitales d’un pays.

Conçu au départ en 2007 comme Cheval de Troie pour mener des attaques en Déni de Service Distribués (DDOS), BlackEnergy a mué au fil du temps en un outil modulaire et sophistiqué, capable de passer inaperçu et conçu comme une boite à outil pour contourner les antivirus, mener des campagnes de fraude sur les banques en ligne ou des attaques ciblées.

La Loi de Programmation Militaire aborde ces aspects de protection contre les cybermenaces et liste les mesures de sécurité à mettre en œuvre en vue de protéger les infrastructures vitales. Afin de se préparer au mieux contre des attaques visant des OIV (Opérateur d’Importance Vitale), il faut effectivement mettre en place des mécanismes de protection et de cloisonnement entre les réseaux SCADA et les autres réseaux ; mais encore faut-il avoir la visibilité et l’intelligence pour détecter les intrusions au niveau applicatif.

La solution pourrait venir de l’Analyse Comportementale ou des “Analytics” qui consistent à agréger, corréler et interpréter des informations issues des infrastructures réseaux et applicatives. La société F5 Network propose ce type d’outil, capable de détecter différent types de malwares qu’ils soient génériques ou ciblés. En novembre dernier, le HackFest Canada 2015, proposait un concours de hacking éthique sur le thème, entre autres, du piratage d’infrastructures SCADA.

En France, la licence CDAISI (Licence Professionnelle Cyber défense, anti-intrusion des systèmes d’information) de Maubeuge apprend aux informaticiens (à partir de bac +2) à réfléchir comme un pirate informatique afin de mieux les contrer propose des cours sur ce thème.

Dans le cas des centrales électriques Ukrainienne, le cheval de Troie BlackEnergy a ciblé et exploité des postes de travail des opérateurs, donc « légitimes », en utilisant des vulnérabilités connues comme vecteurs d’attaques. Une fois installé sur le poste de l’opérateur, Black Energy a eu le champ libre pour intercepter les crédentiels (couples nom d’utilisateurs / mots de passes) utilisés par les opérateurs en charge des systèmes SCADA. Rien de magique. Un pirate malin, un courriel bien ciblé, des ordinateurs nons sécurisés, ni mi à jour et le tour était joué. la cible est moins conventionnelle.

Face à ce mode opératoire, la solution est de mettre en place des technologies de protection contre la fraude qui permettent d’avoir une visibilité sur les activités frauduleuses initiées depuis le poste de l’opérateur d’un système SCADA. L’objectif étant de détecter les comportements identifiables d’un malware et de brouiller, par exemple, les crédentiels collectés lors de l’utilisation d’un navigateur Web, comme le fait BlackEnergy.

Étiquetté :

Nos partenaires




Actualités du mois

mars 2026
L M M J V S D
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Articles en UNE

Actus zataz



Réseaux sociaux


Liste des sujets


<!-- Cyber'Émission ZATAZ — badge volant (déplaçable) + réduire/fermer -->
<div class="zataz-yt-float" id="zatazYtFloat" role="region" aria-label="Cyber'Émission ZATAZ">
  <div class="zataz-yt-float__bar" id="zatazYtBar">
    <span class="zataz-yt-float__title">Cyber'Émission ZATAZ</span>

    <div class="zataz-yt-float__actions">
      <button type="button" class="zataz-yt-float__btn" id="zatazYtMin" aria-label="Réduire">—</button>
      <button type="button" class="zataz-yt-float__btn zataz-yt-float__btn--close" id="zatazYtClose" aria-label="Fermer">×</button>
    </div>
  </div>

  <a class="zataz-yt-badge" href="https://www.youtube.com/@ZATAZCOM" target="_blank" rel="noopener noreferrer"
     aria-label="Regarder Cyber'Émission ZATAZ sur YouTube (nouvel onglet)">
    <span class="zataz-yt-badge__thumb" aria-hidden="true">
      <span class="zataz-yt-badge__play" aria-hidden="true"></span>
    </span>
  </a>
</div>

<style>
  .zataz-yt-float{
    position:fixed;
    right:18px;
    bottom:18px;
    z-index:99999;
    width:320px;
    max-width:calc(100vw - 36px);
    border-radius:14px;
    overflow:hidden;
    background:linear-gradient(135deg,#111827,#0b1220 55%,#111827);
    border:1px solid rgba(255,255,255,.12);
    box-shadow:0 14px 40px rgba(0,0,0,.35);
    transform:translateZ(0);
    user-select:none;
    touch-action:none; /* drag mobile */
  }

  /* Barre de drag + boutons */
  .zataz-yt-float__bar{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:10px;
    padding:10px 10px 10px 12px;
    font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;
    color:#fff;
    background:rgba(0,0,0,.18);
    border-bottom:1px solid rgba(255,255,255,.10);
    cursor:grab;
  }
  .zataz-yt-float__bar:active{ cursor:grabbing; }
  .zataz-yt-float__title{
    font-weight:800;
    letter-spacing:.2px;
    font-size:15px;
    line-height:1;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
  }
  .zataz-yt-float__actions{ display:flex; gap:8px; }
  .zataz-yt-float__btn{
    appearance:none;
    border:1px solid rgba(255,255,255,.18);
    background:rgba(0,0,0,.28);
    color:#fff;
    width:32px;
    height:28px;
    border-radius:10px;
    font-weight:900;
    line-height:1;
    cursor:pointer;
    display:grid;
    place-items:center;
  }
  .zataz-yt-float__btn:hover{ background:rgba(255,255,255,.08); border-color:rgba(255,255,255,.28); }
  .zataz-yt-float__btn--close:hover{ background:rgba(239,68,68,.22); border-color:rgba(239,68,68,.45); }

  /* Contenu (votre vignette) */
  .zataz-yt-badge{
    display:block;
    text-decoration:none;
    color:#fff;
  }
  .zataz-yt-badge__thumb{
    display:block;
    height:180px;
    background:#0f172a url("https://i.ytimg.com/vi/HUo8dnD6Swk/hqdefault.jpg") center/cover no-repeat;
    position:relative;
  }
  .zataz-yt-badge__play{
    position:absolute;
    left:50%;
    top:50%;
    width:54px;
    height:54px;
    margin:-27px 0 0 -27px;
    border-radius:999px;
    background:rgba(0,0,0,.55);
    border:1px solid rgba(255,255,255,.25);
    box-shadow:0 10px 22px rgba(0,0,0,.35);
  }
  .zataz-yt-badge__play:before{
    content:"";
    position:absolute;
    left:22px;
    top:16px;
    width:0;height:0;
    border-top:11px solid transparent;
    border-bottom:11px solid transparent;
    border-left:16px solid #fff;
  }

  .zataz-yt-float:hover{
    box-shadow:0 18px 55px rgba(0,0,0,.45);
    border-color:rgba(255,255,255,.18);
  }
  .zataz-yt-badge:active{ transform:scale(.99); }

  /* Etat réduit */
  .zataz-yt-float.is-min .zataz-yt-badge{ display:none; }
  .zataz-yt-float.is-min{ width:260px; }

  /* Mobile : plus compact */
  @media (max-width:480px){
    .zataz-yt-float{ width:280px; right:12px; bottom:12px; }
    .zataz-yt-badge__thumb{ height:158px; }
    .zataz-yt-float.is-min{ width:220px; }
  }
</style>

<script>
(() => {
  const box = document.getElementById('zatazYtFloat');
  const bar = document.getElementById('zatazYtBar');
  const btnMin = document.getElementById('zatazYtMin');
  const btnClose = document.getElementById('zatazYtClose');

  if (!box || !bar || !btnMin || !btnClose) return;

  // Réduire / restaurer
  btnMin.addEventListener('click', (e) => {
    e.stopPropagation();
    box.classList.toggle('is-min');
    btnMin.textContent = box.classList.contains('is-min') ? '▢' : '—';
    btnMin.setAttribute('aria-label', box.classList.contains('is-min') ? 'Restaurer' : 'Réduire');
  });

  // Fermer
  btnClose.addEventListener('click', (e) => {
    e.stopPropagation();
    box.remove();
  });

  // Drag (souris + tactile) via Pointer Events
  let dragging = false;
  let startX = 0, startY = 0;
  let startLeft = 0, startTop = 0;

  // Position initiale: on convertit right/bottom en left/top pour le drag
  const init = () => {
    const r = box.getBoundingClientRect();
    box.style.left = r.left + 'px';
    box.style.top  = r.top  + 'px';
    box.style.right = 'auto';
    box.style.bottom = 'auto';
  };
  init();

  const clamp = (v, min, max) => Math.min(Math.max(v, min), max);

  bar.addEventListener('pointerdown', (e) => {
    // pas de drag quand on clique sur les boutons
    if (e.target === btnMin || e.target === btnClose) return;

    dragging = true;
    bar.setPointerCapture(e.pointerId);

    const r = box.getBoundingClientRect();
    startX = e.clientX;
    startY = e.clientY;
    startLeft = r.left;
    startTop = r.top;

    e.preventDefault();
  });

  bar.addEventListener('pointermove', (e) => {
    if (!dragging) return;

    const dx = e.clientX - startX;
    const dy = e.clientY - startY;

    const r = box.getBoundingClientRect();
    const w = r.width;
    const h = r.height;

    const maxLeft = window.innerWidth - w - 8;
    const maxTop  = window.innerHeight - h - 8;

    box.style.left = clamp(startLeft + dx, 8, maxLeft) + 'px';
    box.style.top  = clamp(startTop + dy, 8, maxTop) + 'px';
  });

  const endDrag = () => { dragging = false; };
  bar.addEventListener('pointerup', endDrag);
  bar.addEventListener('pointercancel', endDrag);

  // Re-clamp au resize
  window.addEventListener('resize', () => {
    const r = box.getBoundingClientRect();
    const maxLeft = window.innerWidth - r.width - 8;
    const maxTop  = window.innerHeight - r.height - 8;
    box.style.left = clamp(r.left, 8, maxLeft) + 'px';
    box.style.top  = clamp(r.top, 8, maxTop) + 'px';
  });
})();
</script>