Accueil / Cybersécurité / Securite informatique / Malware Zacinlo : outil pour fraude publicitaire

Malware Zacinlo : outil pour fraude publicitaire

Un nouveau malware appelé Zacinlo, spécialisé dans la fraude publicitaire découvert. Il infecte le PC de l’utilisateur pour ensuite ouvrir des sessions de navigateur invisibles dans le but de charger des bannières publicitaires et de simuler des clics sur ces dernières, ou encore remplacer les publicités naturelles dans le navigateur par celles du pirate pour détourner les revenus publicitaires générés.

Cet adware a plusieurs caractéristiques qui ont attiré l’attention  :

  • Zacinlo contient un driver de type rootkit, qui se protège lui-même ainsi que ses autres composants. Celui-ci peut stopper des processus jugés dangereux pour le fonctionnement de l’adware, tout en empêchant son arrêt ou sa suppression. Les chercheurs ont également relevé la présence de fonctionnalités « man-in-the-browser » qui interceptent et déchiffrent les communications SSL. Cela permet à l’adware d’injecter du code JavaScript personnalisé dans les pages Internet visitées par l’utilisateur. Les malwares basés sur des rootkits sont EXTRÊMEMENT rares, et constituent généralement moins de 1% des menaces habituelles. Ils sont également très difficiles à éliminer car ils s’intègrent profondément au système d’exploitation.
  • Zacinlo inclut un programme de nettoyage d’adware, utilisé pour éliminer la « concurrence » potentielle pour l’espace publicitaire. Il est plutôt générique et ne cible pas de famille ou de type d’adware en particulier.
  • Il collecte des informations à propos de l’ordinateur infecté. Par exemple, si un logiciel antivirus est installé ou non (et si oui, lequel), quelles applications se lancent au démarrage, etc.
  • Il prend des captures d’écran et les envoie au serveur de commande et contrôle pour analyse. Cette fonctionnalité menace la vie privée des victimes car les captures d’écran peuvent contenir des informations sensibles telles que des e-mails, des conversations privées, des identifiants ou des coordonnées bancaires.
  • Il peut faciliter l’installation de quasiment n’importe quel nouveau logiciel de manière transparente, sans arrêter de fonctionner et ainsi étendre ses fonctionnalités.
  • Il ajoute ou remplace des publicités lors de la navigation en cherchant des objets de type « DOM » par taille, par style, par classe ou expressions régulières spécifiques.
  • Il extrait des publicités de plusieurs plateformes, dont Google AdSense.
  • Il ouvre des pages Internet en arrière-plan dans des fenêtres cachées, et interagit avec elles comme un utilisateur normal : en les faisant défiler, en cliquant et en utilisant le clavier. Il s’agit d’un comportement typique des fraudes publicitaires, qui inflige d’importants dommages financiers aux plateformes publicitaires en ligne.
  • Zacinlo utilise énormément de projets et de bibliothèques Open-Source (ex : chromium, cryptopop, jsoncpp, libcef, libcurl, zlib).
  • Il utilise des scripts Lua pour télécharger différents composants (très certainement afin de passer inaperçu aux yeux de certains programmes antivirus qui détectent les téléchargements suspects et les bloquent).
  • Il dispose d’un design extrêmement paramétrable et hautement modulaire, ce qui lui permet d’étendre ses fonctionnalités grâce à des scripts et des fichiers de configuration disponibles via les infrastructures de commande et contrôle.

Ce malware est présent principalement aux États-Unis et semble avoir une certaine affinité pour Windows 10. La France et l’Allemagne font également partie des pays qui en sont victimes, bien que le nombre d’infections soit un peu plus bas qu’aux États-Unis jusqu’ici.  Un livre blanc édité par BitDefender détaille ce nouveau malware ICI .

Étiquetté :

2 Commentaires

Nos partenaires




Actualités du mois

février 2026
L M M J V S D
 1
2345678
9101112131415
16171819202122
232425262728  

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>