Accueil / Piratage / Amazon déjoue une attaque sophistiquée d’APT29

Amazon déjoue une attaque sophistiquée d’APT29

Amazon a bloqué une opération de watering-hole d’APT29, visant à subtiliser des identifiants Microsoft grâce à des sites compromis, du JavaScript obfusqué et des redirections sélectives.

Amazon a neutralisé une campagne d’APT29, groupe lié au renseignement russe, qui exploitait des sites web compromis pour piéger des connexions Microsoft. Les assaillants utilisaient du JavaScript obfusqué et des mécanismes de redirection conditionnelle afin de tromper une partie des visiteurs. Près de 10 % du trafic était renvoyé vers des domaines contrôlés par l’attaquant, imitant Cloudflare pour capter les identifiants via le flux d’authentification par code d’appareil de Microsoft. Amazon a isolé les instances malveillantes et collaboré avec Microsoft et Cloudflare pour interrompre les infrastructures frauduleuses. Aucun système AWS n’a été compromis. Cette opération illustre le raffinement technique d’APT29 et la réponse coordonnée nécessaire pour contrer ces campagnes.

Attaque sur des sites légitimes

En août, plusieurs sites web authentiques ont été piégés par l’ajout d’un script JavaScript malveillant. Ce code, fortement obfusqué, recourait à l’encodage base64 pour masquer ses fonctions et compliquer l’analyse. Sa mission : déterminer si l’utilisateur devait être redirigé vers une infrastructure contrôlée par APT29. Seule une minorité de visiteurs, environ 10 %, était ciblée, réduisant le risque de détection. Les victimes aboutissaient sur un domaine imitant une vérification Cloudflare, notamment findcloudflare[.]com. Cette fausse étape permettait d’exploiter le flux d’authentification par code de périphérique de Microsoft et d’intercepter les tentatives de connexion.

L’activité a été repérée sur des instances EC2 utilisées à des fins malveillantes. Amazon a immédiatement isolé ces serveurs, bloqué leurs communications et engagé une coopération avec Cloudflare et Microsoft. Ensemble, ils ont procédé à la désactivation rapide des domaines frauduleux. Chaque fois qu’APT29 tentait de rétablir son infrastructure avec de nouveaux serveurs ou domaines, l’alliance technique permettait une coupure immédiate. Amazon a assuré qu’aucun système interne n’avait été touché par la campagne.

Tactiques techniques et sophistication

Les techniques employées confirment le niveau avancé d’APT29. Le JavaScript obfusqué rendait son contenu difficile à déchiffrer, dissimulant les instructions de redirection. Des redirections côté serveur permettaient d’alterner les comportements selon l’adresse IP, l’agent utilisateur ou le fuseau horaire du visiteur. L’usage de cookies servait à limiter la fréquence des redirections, empêchant un analyste de reproduire facilement le scénario d’attaque. Cette approche réduisait fortement les traces visibles et rendait l’infection plus persistante. Enfin, la rotation d’infrastructures, avec migration rapide entre domaines et serveurs compromis, ajoutait une résilience opérationnelle. Ces choix tactiques révèlent un objectif clair : espionner durablement sans attirer l’attention des défenses automatisées.

APT29, affilié au SVR russe, multiplie les campagnes contre les cibles stratégiques. Après des tentatives de phishing imitant AWS en 2024 et une campagne contre chercheurs et universitaires en 2025, le groupe renforce ses méthodes. Le recours à l’obfuscation avancée et aux redirections sélectives montre une stratégie d’ingénierie discrète, adaptée aux environnements cloud et aux services massivement utilisés. L’objectif reste constant : collecter des identifiants pour pénétrer des réseaux sensibles.

Les autorités américaines ont saisi deux domaines utilisés par le service de renseignement russe SVR (APT29/Cozy Bear) dans une vaste campagne de piratage. En mai 2021, les attaquants ont compromis un compte de l’USAID sur Constant Contact pour envoyer près de 3 000 e-mails piégés à plus de 150 organisations dans 24 pays. Les liens redirigeaient vers theyardservice[.]com, qui distribuait un malware installant Cobalt Strike. Les communications passaient aussi par worldhomeoutlet[.]com. Déjà en mai 2018, les États-Unis avaient saisi des domaines liés au botnet VPNFilter d’APT28. Microsoft a mené des actions similaires en 2018 et 2021.

L’affaire démontre la capacité d’APT29 à développer des outils furtifs et l’importance d’une veille proactive pour détecter l’obfuscation et les redirections conditionnelles. Jusqu’où ces techniques d’évasion, à la frontière entre espionnage discret et attaques massives, peuvent-elles encore progresser face aux systèmes de défense automatisés ?

É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>