Aller au contenu
FrameAccueil Frame
PlateformeBreach CheckAgent FrameExtensionVie privéeEntreprisesTarifs
Se connecterExemple de rapport
FrameAccueil Frame

Votre vie numérique. De retour entre vos mains.

Propriété 100 % canadienne · Soutien : support@frameprivacy.com

Produit

  • Plateforme
  • Exemple de rapport
  • Breach Check
  • Agent Frame
  • Extension
  • App mobile
  • Tarifs
  • Frame Business
  • Nouveautés

Ressources

  • Blogue
  • Centre d’aide
  • Test de fuites gratuit
  • État des services
  • Catalogue des courtiers en données
  • Flux RSS

Entreprise

  • À propos
  • Notre engagement de confidentialité
  • Nous joindre
  • Sécurité
  • Presse et marque

Juridique

  • Centre juridique
  • Politique de confidentialité
  • Conditions d’utilisation
  • Témoins (cookies)
  • Accessibilité

© 2026 Frame. Tous droits réservés.

en Englishfr Français
Vos choix en matière de confidentialitéÉtat des services
Frame

Tous les articles

Logiciel malveillant · 16 octobre 2026 · 19 min de lecture

Les dépôts l’ont classé Mirai. L’échange commence par ANCT.

KSI Digital a vu un bot Linux résoudre son serveur en DNS sur TLS, puis envoyer ANCT. Les mêmes binaires déclenchent encore une règle Mirai. Le botnet d’avril sur ce domaine, non.

BBrody · Frame
Un champ de points pâles, une ligne d’acier qui traverse un anneau et se brise avant une boîte sombre.

Le 4 octobre 2026, une machine s’est connectée au pot de miel Telnet de KSI Digital et a téléchargé un script shell nommé persist.sh. Le premier commentaire du script nomme la charge : ancient. Pendant les quatre heures suivantes, la même machine a récupéré trois versions de ce script et deux builds d’un programme Linux caché, .ancient. Le lendemain matin, dans un labo où toute autre destination était bloquée, le programme a cherché son serveur de commande en DNS sur TLS et a ouvert une session dont les quatre premiers octets sont ANCT.

MalwareBazaar avait déjà classé des builds de ce programme comme Mirai. Les signatures Linux_Trojan_Mirai d’Elastic se déclenchent sur les builds x86-64. Le nom que le programme interroge, zyrec2.duckdns[.]org, était déjà sur ThreatFox comme serveur de commande Mirai. Ces deux faits sont réels. Ni l’un ni l’autre n’est le protocole.

Le protocole que KSI a enregistré, ce sont quatre octets ASCII, puis 32 octets à haute entropie venus du bot, puis 36 venus du serveur, puis un flux que le bot a continué d’envoyer pendant dix minutes. Le serveur n’a rien envoyé d’autre. Environ 1,79 Mo sont montés. Personne, dans l’écrit public, ne peut dire ce que ces octets contenaient. Frame n’a pas exécuté les échantillons et n’a pas contacté le serveur. Ce qui suit est le dossier publié, y compris les endroits où il ne colle pas à l’histoire Mirai que les dépôts racontent.

Ce que fait « Mirai » dans l’étiquette

Mirai est une famille de maliciels Linux pour routeurs, caméras et enregistreurs. Un bot scanne, se connecte avec une courte liste de mots de passe par défaut, télécharge un build pour le processeur qu’il a trouvé, et attend un ordre d’attaque. La forme est si courante qu’un nouvel ELF arrivé par Telnet, livré en ARM et en x86-64, et caché par un point en tête de nom, reçoit l’étiquette Mirai avant que quiconque lise le canal de commande.

La note de détection de KSI est plus précise que « le dépôt s’est trompé ». Ils ont obtenu neuf builds du bot, quatre x86-64 et cinq ARMv7, datés du 3 au 5 octobre. MalwareBazaar les étiquette tous Mirai. La règle Linux_Trojan_Mirai d’Elastic correspond aux builds x86-64. La note de KSI dit que ce résultat est compatible avec un cœur dérivé de Mirai sous une couche de commande maison. Le corps peut être celui de Mirai. Le canal, non.

C’est pour cela qu’une recherche de chaînes dans le binaire est une mauvaise façon de trancher. KSI dit que le programme construit au moment de l’exécution le nom de son serveur, son port, et l’étiquette ANCT. Une règle qui cherche zyrec2.duckdns.org dans le bot le manquera. Leur propre règle pour le bot ne cherche pas le domaine. Elle cherche des noms de modules de persistance qui sont en clair dans chaque build qu’ils ont pu obtenir : home_persist, cron_deb, android_rc, rc_local, un script d’init sysd, et une unité utilisateur sys.service, plus la chaîne de téléchargement toybox et busybox. Ces chaînes sont un menu d’installation de style Mirai. Ce n’est pas une poignée de main Mirai.

Le dropper est un fichier à part, et lui porte du texte en clair. Le script s’ouvre sur un commentaire : charge de persistance Telnet ancient, et ASCII pur seulement, parce que les vieux shells BusyBox gèrent mal l’UTF-8 sur plusieurs octets. Il associe uname -m à treize builds : arm4 à arm8, mips, mpsl, x86, x86_64, m68k, ppc et sh4. mpsl est le nom MIPS petit-boutiste que les scripts de build de Mirai utilisent depuis des années. La liste d’architectures est une raison de plus pour qu’un outil de classement penche vers Mirai. La liste est le menu du chargeur. Ce n’est pas le protocole de commande.

Le domaine appartenait déjà au Mirai de quelqu’un d’autre

zyrec2.duckdns[.]org n’est pas un nom que KSI a découvert. En avril 2026, Tao Goldi a publié ZyreC2, un bot DDoS dérivé de Mirai dont les binaires non dépouillés contiennent encore le chemin de build /root/Zyre C2/. Ces échantillons résolvent le même nom DuckDNS, et ils le font d’une façon qu’Ancient ne fait pas.

ZyreC2, avril 2026Ancient, octobre 2026
Qui l’a documentéTao Goldi, à partir de symboles non dépouillésKSI Digital, à partir d’un pot de miel et d’une session réelle
Domainezyrec2.duckdns[.]org, stocké comme chaînele même nom, construit à l’exécution
Rechercheune requête DNS brute vers 8.8.8.8 sur le port 53, puis une adresse figée si cela échoueDNS sur TLS vers 1.1.1.1 sur le port 853, avec le DNS en clair en repli
Port de commande950635342, sur l’hôte que KSI a observé
Premiers octets00 00 00 02 08, puis l’étiquette zyre.dbgANCT, puis 32 octets, puis une réponse de 36 octets
Ensuitedes ordres en clairchiffré, contenu non publié
Binaireenviron 256 Ko à 300 Ko, symboles laissés en place437 232 octets pour chaque build x86-64 de la liste de KSI, dépouillé
DNS sur TLSabsent des échantillons publiés ; la variante C ne lie aucune bibliothèque TLSobservé sur le build x86-64 qu’ils ont exécuté

La variante C de Goldi, vue pour la première fois le 19 avril, utilise encore le port 9506 et parle encore en clair. Il a vérifié : nm ne renvoie aucun symbole SSL, TLS, libssl ou libcrypto. Deux chaînes qui ressemblent à TLS, tls_handshake et tls_done, sont dans les informations de débogage. Ce sont des noms d’énumération du source. Ce n’est pas une session TLS sur le fil.

La question que KSI a laissée ouverte, le lien entre Ancient et l’usage plus ancien de ce domaine, a donc une réponse publique partielle. Le nom était un nom de commande Mirai des mois plus tôt, pour un botnet qui interroge le DNS en clair et parle en clair. Le programme d’octobre qui cherche le nom sur TLS, puis envoie ANCT, n’est pas ce programme. Partager un nom DuckDNS coûte peu. DuckDNS est un fournisseur de DNS dynamique ; l’adresse derrière le nom peut changer sans que les binaires changent. Goldi l’a déjà vu changer, d’une adresse Hetzner en Allemagne vers 176.65.139[.]253, qu’il attribuait à l’AS214472. KSI, en écrivant en octobre, dit que ThreatFox liste le domaine comme serveur de commande Mirai depuis juin 2026, sous l’indicateur 1822702. Frame n’a pas pu recharger cette page ThreatFox. La date de juin est celle de KSI, et elle se place entre les échantillons d’avril de Goldi et la capture d’octobre.

Rien, dans les deux écrits, ne montre le bot d’avril en train de parler ANCT, ni le bot d’octobre en train de parler l’enregistrement de cinq octets de ZyreC2. Traiter le domaine comme « le C2 d’Ancient » sans un port et sans une poignée de main attrapera, ou manquera, une autre famille.

Trois scripts en quatre heures, et un port écrit à l’envers

L’appareil infecté était 94.154.43[.]138. À 15 h 37 UTC le 4 octobre, il s’est connecté en Telnet. La commande qu’il a lancée est la chaîne habituelle de l’Internet des objets : essayer /tmp, puis /var/run, puis /mnt, puis /root, puis /, et tirer persist.sh depuis 89.163.157[.]131 sur le port 8080. KSI a journalisé 34 commandes et téléchargements depuis cette adresse pendant les quatre heures suivantes.

Le script essaie wget, le wget de BusyBox, curl, le curl de BusyBox, puis le wget de toybox, dans cet ordre. Il ne garde le fichier que s’il dépasse 100 Ko, l’enregistre sous le nom caché .ancient, le lance détaché, et renvoie au chargeur l’un de ces quatre mots : ANCIENT_STARTED, ANCIENT_NOCONN, ANCIENT_SKIP ou ANCIENT_FAIL.

VersionTailleSHA-256Ce qui change
v1, 15 h 37 UTC2 802 octets5e6c83022a7415047f7e9d9cb89e43d6de7522801b353ce10eda85c018be76c8premier répertoire accessible en écriture ; cron, rc.local et init.d
v2, dans l’après-midi3 380 octets659742f14304f2ec1cf1ec34833b93002cd360835fff3073d19ea2edf23d6bearefuse une seconde copie, pour que le serveur ne ferme pas des sessions en double depuis une même adresse
v3, 19 h 09 UTC5 952 octetsac62a1dfc283429341b99196d974da0a18ffe4f4e30ac28eb4e9583aed4b592fchoisit un système de fichiers qui survit au redémarrage ; ajoute /etc/crontab, le cron de root et /etc/profile.d/.ancient.sh ; corrige la vérification du port
une quatrième, sur MalwareBazaar à 23 h 14 UTC le 5 octobre5 765 octets203727d32428db693546eb29ab6a12b52a455b7d2a8c58ea8c57c70abb2f1aaba le choix de montage de la v3, et encore le bogue de port de la v1

Le bogue de port est le passage à lire lentement. Après le démarrage du bot, le script cherche dans /proc/net/tcp une connexion sur le port 35342. Ce port, en hexadécimal, s’écrit 8A0E.

8 × 4096 + 10 × 256 + 14 = 35342.

Linux imprime cette table avec le port dans l’ordre des octets de l’hôte. Sur les machines qui intéressent ce bot, le texte à trouver est :8A0E. Les versions 1 et 2 cherchent :0E8A. Ce sont les deux mêmes octets, échangés, ce qu’on obtient si l’on traite le port comme un mot gros-boutiste et qu’on cherche ensuite ces octets comme le mot imprimé. La recherche ne tombe jamais. Ces versions rapportent toujours ANCIENT_NOCONN, c’est-à-dire « je ne vois pas la session de commande », même quand la session est là. La version 3 cherche :8A0E et le dit dans un commentaire. Les auteurs lisaient les échecs.

Le quatrième script, versé par quelqu’un d’autre, est le milieu maladroit. Il évalue déjà /proc/mounts comme la v3, donc il préfère un répertoire encore là après un redémarrage, mais il cherche encore :0E8A. Il rapporte aussi une copie déjà en cours comme ANCIENT_STARTED, là où la v3 dit ANCIENT_SKIP. La règle de dropper de KSI le reconnaît quand même. Ou le serveur distribuait encore un build plus ancien, ou quelqu’un est revenu en arrière. Le commentaire de la v3 pointe un fichier nommé TELNET_PERSIST_PAYLOAD.sh pour l’idée du choix de montage. Ce nom n’apparaît pas dans le protocole Ancient. On dirait une note de chargeur partagé.

La persistance sur l’hôte, une fois qu’une version va jusque-là, est une ligne cron toutes les cinq minutes, rc.local, /etc/init.d/.ancient, et, à partir de la v3, /etc/profile.d/.ancient.sh. L’indicateur cron publié par KSI est */5 * * * * suivi du binaire caché. Les chaînes du binaire ajoutent un rc Android et une unité utilisateur systemd. Un appareil sans systemd n’exécutera pas cette unité. La chaîne est quand même dans le fichier.

Le DNS sur TLS n’est pas le même tour que le bot d’avril

Le DNS sur TLS, c’est le DNS ordinaire, porté dans TLS, sur le port TCP 853. La norme est le RFC 7858. Un journal qui n’enregistre que les ports UDP et TCP 53 ne voit ni la question ni la réponse. Ce qu’il voit, c’est une session TLS vers un résolveur public. Ici, le résolveur était celui de Cloudflare, 1.1.1.1.

Les premières exécutions de KSI étaient sous traceur, pendant 10 à 25 minutes. Le bot n’a ouvert aucune socket tant que le traceur était attaché. L’exécution suivante était sans traceur, et la seule destination permise était ce résolveur sur le port 853. Le bot a résolu zyrec2.duckdns[.]org tout de suite : 32 connexions DNS sur TLS, plus 6 requêtes DNS en clair pour le même nom, puis 33 tentatives vers 89.163.157[.]131 sur le port 35342. Le routeur du labo a bloqué ces 33 tentatives. Le nom revenait vers cette adresse. Le serveur de charge et le serveur de commande étaient la même machine, AS24961, myLoc / WIIT AG, en Allemagne. Téléchargements sur 8080, commandes sur 35342.

Deux choses suivent du compte 32 et 6, et KSI ne choisit pas entre elles. Le bot utilise le DNS chiffré quand le port 853 répond. Il interroge aussi en clair. Un réseau qui bloque 853, et qui surveille le port 53, obtient encore le nom. Un réseau qui autorise 853 vers 1.1.1.1 et qui n’alerte que sur le port 53 ne l’obtient pas. Bloquer un seul de ces chemins ne couvre pas la recherche.

Les échantillons ZyreC2 d’avril ne partagent pas ce comportement. Ils interrogent 8.8.8.8 sur le port 53, et si cela échoue ils utilisent une adresse compilée dans le binaire. La note publiée sur Ancient ne liste pas d’adresse de commande figée. Le repli est une seconde requête DNS, pas une adresse gravée. Frame n’a pas trouvé, hors de cette famille, de second échantillon public dont l’écrit montre ce DNS sur TLS lié à ANCT. Les huit autres builds correspondent à la règle de bot de KSI, ce qui indique que c’est le même programme. Ce n’est pas une seconde capture de la recherche TLS. La recherche a été observée sur le build x86-64 qu’ils ont exécuté, 6c44cbf5eb5e4f5231964a2fb24ef466b17e967f0d26f57c8285ade7424970db.

La poignée de main, et le mégaoctet que personne ne lit

Avec le port 35342 autorisé, et rien d’autre, ils ont laissé une session courir de 02 h 01 à 02 h 11 UTC le 5 octobre.

Le bot a envoyé 41 4E 43 54. C’est ANCT. KSI le lit comme un raccourci d’« ancient », ce qui colle au nom de fichier, aux mots d’état, et au commentaire en tête du script. Puis le bot a envoyé 32 octets qui ne se compressent pas en texte. Puis le serveur en a envoyé 36. Puis le bot a versé environ 1,79 Mo, en 2 785 paquets, la plupart en segments de 734 octets. La seule réponse du serveur a été ces 36 octets. La session est restée ouverte pendant les dix minutes. C’est la preuve que le serveur était vivant. Ce n’est pas la preuve d’un ordre.

Trente-deux octets, c’est la taille d’une clé publique X25519, et 36, c’est 32 plus une étiquette de quatre octets. KSI dit que les 32 octets sont compatibles avec un échange de clé éphémère. Ils listent aussi le chiffrement comme question ouverte. La compatibilité n’est pas une identification. Frame ne nommera pas l’algorithme au-delà de ce qu’ils ont écrit.

Le versement est plus facile à borner qu’à expliquer. Dix minutes, ce sont 600 secondes. 2 785 paquets dans cette fenêtre, c’est environ 4,6 paquets par seconde. 1,79 Mo sur 600 secondes, en prenant le chiffre comme le décimal qu’ils ont écrit, c’est environ 3 kilo-octets par seconde. C’est un mince débit. Ce n’est pas le bot qui lance un déluge à travers cette socket. Dans ce genre de maliciel, les déluges visent une victime, depuis le bot, sur les sockets du bot. Ici la direction va du bot vers le serveur de commande, le serveur ne donne pas de travail, et la taille est de l’ordre de quelques mégaoctets, une fois.

Ce qui tient dans un versement inexpliqué de cette taille, et ce qui n’y tient pas :

  • Ce n’est pas le serveur qui pousse un module. Le serveur a envoyé 36 octets, puis s’est tu.
  • Ce n’est pas une copie du bot. Les builds x86-64 font 437 232 octets, environ le quart de 1,79 Mo, et le bot se possédait déjà.
  • Cela peut être un rapport : adresses scannées, fichiers vus, un enregistrement chiffré répété. Des segments de 734 octets sont plus petits qu’une charge Ethernet habituelle, donc ils ressemblent à une taille d’application plutôt qu’au maximum du réseau. KSI ne revendique pas de format d’enregistrement.
  • Cela peut être du remplissage qui empêche la session d’avoir l’air inactive. C’est une hypothèse. L’écrit ne la fait pas.

Leur règle Suricata pour la poignée de main n’est pas verrouillée sur le port 35342. Les quatre premiers octets de charge utile sont le signal, sur le port que le prochain build utilisera. L’adresse et le port sont datés. Ils l’ont dit, et ils ont prévenu l’hébergeur le jour même.

Il se tait pendant qu’on le regarde

Les exécutions sous traceur sont l’autre moitié de la raison pour laquelle un bac à sable peut classer ceci comme un Mirai générique et ne jamais voir ANCT.

Tant qu’un traceur était attaché, il n’y avait ni DNS ni session de commande. Quand le traceur s’est détaché, le trafic a commencé. KSI ne publie pas la vérification. La version Linux habituelle de ce tour consiste à lire TracerPid dans /proc/self/status, ou à appeler ptrace sur soi-même, ce qui échoue si quelqu’un vous tient déjà. L’un ou l’autre produit exactement le comportement qu’ils ont vu : inactif sous strace, actif dès que strace se termine. Nommer ces deux techniques, c’est la classe de la vérification. Ce n’est pas affirmer que ce binaire contient un appel précis. Les chaînes qui le prouveraient peuvent être construites à l’exécution, de la même façon que le domaine.

Un bac à sable qui trace par défaut, et qui note un échantillon sur le trafic produit pendant la trace, obtient un ELF silencieux arrivé par Telnet. L’étiquette Mirai est alors la livraison, le menu d’architectures, et la règle d’Elastic sur les octets. Le canal de commande n’a jamais eu lieu.

Même chargeur, trois charges, et un /24 qui a un passé

La routine Telnet devant le téléchargement est courte. Elle ouvre deux connexions et en lâche une, se connecte en root avec un mot de passe vide, puis lance une sonde BusyBox, lit /proc, et essaie ./, à environ une seconde d’intervalle. KSI a cherché cette séquence sur trois jours et 163 connexions Telnet. Trois adresses l’ont utilisée.

AdresseRéseau, selon KSICe qu’elle a vraiment livré
94.154.43[.]138AS219502Ancient, depuis 89.163.157[.]131, le 4 octobre. La première ligne de la sonde était ancient_telnet_ok.
94.154.43[.]196AS219502un kit Mirai, kla.sh et neuf builds, depuis 176.65.139[.]196, le 5 octobre à 12 h 58 UTC. La première ligne de la sonde était SHELL_TEST.
77.239.124[.]121AS198364la sonde seulement, trois visites, aucune charge

L’AS219502 est STORMCLOUD-AS, Storm Industries LLC. KSI dit que le RIPE l’a enregistré le 9 juin 2026, et qu’il a commencé à annoncer 94.154.43.0/24 et 176.65.139.0/24 en juin et en juillet. Le serveur d’Ancient n’est pas dans ce réseau. C’est l’hôte allemand ci-dessus.

176.65.139[.]196 est à la fois le serveur de téléchargement du kit Mirai et son serveur de commande, sur le port 18129, que KSI dit présent sur ThreatFox depuis le 1er octobre (indicateur 1943514). Une mise à jour du 7 octobre ajoute un troisième kit visé vers le même réseau. Un chargeur nommé telnet2.sh, depuis 93.127.112[.]90 hors de l’AS219502, va chercher des builds zerobot sur 176.65.139[.]157. Le build ARMv7, que KSI appelle un bot de style Condi, se connecte à 94.154.43[.]30 sur le port 695, déjà sur ThreatFox comme indicateur 1952211, et scanne les ports 80, 8080, 37215 et 52869. Cinq autres adresses de 94.154.43.0/24 se sont connectées entre le 3 et le 5 octobre.

C’est le sens dans lequel Ancient « se fait passer » pour Mirai, et le sens dans lequel il ne le fait pas. Le chargeur dira ancient_telnet_ok le lundi et SHELL_TEST le mardi, puis installera un kit Mirai. Un analyste qui regroupe par le prologue Telnet fusionnera trois familles. Un analyste qui regroupe par le canal de commande ne le fera pas. La conclusion de KSI est celle que les données portent : un opérateur qui fait tourner plusieurs kits, ou un service de chargeur avec plusieurs clients. Leur pot de miel ne peut pas les départager.

Le recouvrement d’avril est plus faible, et il doit le rester. La variante C de ZyreC2, chez Goldi, a 176.65.139[.]253 compilée dedans, et il attribuait cette adresse à l’AS214472 aux Pays-Bas. C’est un autre dernier octet, un autre système autonome dans sa note d’avril, et un protocole qui n’est pas ANCT. La note d’octobre de KSI place le /24 sous l’AS219502, un AS qui n’existe dans le registre RIPE qu’à partir de juin. Un préfixe peut déménager. Un /24 partagé plus un nom DuckDNS partagé, c’est une piste. Ce n’est pas une identification du serveur ANCT d’octobre avec le bot de déluge Minecraft d’avril.

Les neuf binaires, pour que l’étiquette se vérifie

Voici les empreintes de bot dans la liste d’indicateurs de KSI. Les neuf sont ce que MalwareBazaar appelle Mirai. Les tailles sont les leurs.

Première vue (UTC)ArchOctetsSHA-256
2026-10-03 17 h 42ARMv7449 2764c49dbbce842ee8489eb38080e2eb258cc15aad68aab77aa1e7a38e691ab948a
2026-10-04 00 h 19ARMv7449 4842f4cbba58e684daa23273aae6f0454f78b4f60502826a185ac0ddfe49c6a686a
2026-10-04 06 h 53ARMv7466 45236d7214b35c74d8784cf0a74e337e7902864d38e822f7c9979133d6123c6bd00
2026-10-04 12 h 18ARMv7466 964ad7af34fa799ab9a16df4695068965e40195d2f7b7da176605cb35819647c9f1
2026-10-04 13 h 37x86-64437 232c9d1bf7bfe1818e071b6b71d10e0a4f2f0a4fcdfcb510acd83fc1f098166c3ee
2026-10-04 15 h 37x86-64437 2326c44cbf5eb5e4f5231964a2fb24ef466b17e967f0d26f57c8285ade7424970db
2026-10-04 17 h 06x86-64437 232c86a0cee1adc167f3c3c1677b3f1e294af418cd3cc57c2aead717573b7fce6c8
2026-10-04 19 h 09x86-64437 232748f50d41a7232d012e1eefdbe9207cc448c2710335989badf458a4720dd717b
2026-10-05 00 h 21ARMv7467 540507611a45de2fa9f20c1e26e4274b655faf7f47cb2688a1782da25604a2e34c6

La famille était sur MalwareBazaar un jour avant la session du pot de miel. Les quatre fichiers x86-64 ont la même longueur et pas la même empreinte, donc ce sont des recompilations, pas un seul fichier versé quatre fois. Les fichiers ARMv7 grossissent au long du 4 octobre. La règle de KSI a reconnu les neuf, et elle n’a pas reconnu les autres familles Linux contre lesquelles ils l’ont essayée : Mirai, Gafgyt, Mozi, XorDDoS, et le reste d’un ensemble d’environ 260 échantillons récents, plus leurs autres captures de pot de miel, plus les fichiers système d’une machine Ubuntu 24.04.

Ce dernier essai est la bonne taille d’affirmation. Une règle sans faux positif sur 260 échantillons voisins est un début utile. Ce n’est pas un recensement d’Internet. La preuve publique, en paquets, de ANCT, au moment de leur écrit du 5 octobre et des pages qui le répètent, est une session de dix minutes. La fiche Malpedia elf.ancient renvoie au même document GitHub.

Si un routeur de votre réseau se met à résoudre ainsi

  1. Éteignez Telnet sur tout ce qui fait face à Internet. Le chargeur que KSI a observé se connectait en root avec un mot de passe vide. Un appareil qui accepte encore cela, ou qui a encore le mot de passe du fabricant, est toute l’histoire de la façon dont ceci se propage. Remplacez le mot de passe, mettez à jour le micrologiciel depuis le site du fabricant, et retirez l’administration de l’Internet ouvert. Une caméra que vous ne pouvez pas mettre à jour est une caméra à remplacer ou à débrancher.
  2. N’écartez pas un hôte parce qu’un produit a appelé le fichier Mirai, et ne l’écartez pas parce qu’une règle Mirai ne s’est pas déclenchée. Sur les builds x86-64, la règle Mirai d’Elastic se déclenche, et le canal de commande est quand même ANCT. Dans un bac à sable qui trace, le canal peut ne jamais s’ouvrir. La vérification qui distingue cette session, ce sont les quatre premiers octets de charge, 41 4E 43 54, à la sortie, sur n’importe quel port. Le port 35342 est celui qu’ils ont vu. La règle de KSI ne dépend pas du maintien de ce port.
  3. Surveillez le DNS sur TLS depuis le réseau des objets, c’est-à-dire le TCP 853 vers un résolveur public, et surveillez aussi le DNS ordinaire pour zyrec2.duckdns[.]org. Le bot a fait les deux. Un puits qui ne réécrit que le port 53 laisse le chemin TLS. Un blocage qui ne coupe que 853 laisse le chemin en clair. Le domaine seul n’est pas Ancient : en avril, c’était ZyreC2, sur le port 9506, en clair. Associez le nom au port et à ANCT avant de traiter un signal comme cette famille.
  4. Sur un appareil que vous pouvez inspecter, cherchez un .ancient caché, /etc/init.d/.ancient, /etc/profile.d/.ancient.sh, et une entrée cron toutes les cinq minutes qui lance ce fichier. Le binaire peut aussi contenir les noms de modules ci-dessus même quand le dropper shell a disparu. Ces noms ne prouvent pas une session vivante. Une session vivante ressemble encore à ANCT sur le fil.
  5. Les adresses de la note du 5 octobre sont des pistes datées : 89.163.157[.]131 pour la charge et le port de commande qu’ils ont confirmé, et les adresses de chargeur ci-dessus pour le prologue Telnet. KSI a signalé le serveur de commande à ThreatFox, les téléchargements à URLhaus, et l’adresse à Spamhaus, et ils ont prévenu l’hébergeur. Une liste de blocage du 5 octobre n’est pas la poignée de main. La poignée de main est ce qui fonctionne encore si l’hôte déménage.

Sources

  • KSI Digital, Christophe Hubert, « Ancient » : un botnet Linux pour l’Internet des objets, avec un protocole de commande ANCT, 5 octobre 2026, ainsi que la liste d’indicateurs et les notes de détection dans le même dépôt.
  • Malpedia, elf.ancient, ajoutée le 6 octobre 2026, qui cite cet écrit.
  • Tao Goldi, ZyreC2 : The Game-Obsessed Mirai Fork That Left Its Homework Out, 14 avril 2026, avec la mise à jour du 20 avril sur la variante C. C’est le botnet plus ancien sur zyrec2.duckdns[.]org. Ce n’est pas la session ANCT.
  • YARAhub, comme KSI les lie : Linux_Ancient_Bot et Ancient_Telnet_Dropper.
  • Indicateurs ThreatFox 1822702, 1943514 et 1952211, cités dans l’écrit de KSI. Frame n’a pas rechargé ces pages.
  • Logiciels malveillants
  • Recherche

Les nouveaux articles, par courriel.

Environ une fois par mois. Des notes sur la vie privée en termes simples, rien d’autre. Je ne partage jamais votre adresse.

Envoyé par Frame · privacy@frameprivacy.com · Politique de confidentialité

Voyez ce qui est exposé à votre sujet.

Frame est en bêta privée. Voyez ce qu’il trouve, et comment il vous aide à le faire retirer, dans un exemple de rapport fait de données fictives.

Voir un exemple de rapport
FrameAccueil Frame
PlateformeBreach CheckAgent FrameExtensionVie privéeEntreprisesTarifs
Se connecterExemple de rapport

Voyez ce qui est exposé à votre sujet.

Frame est en bêta privée. Voyez ce qu’il trouve, et comment il vous aide à le faire retirer, dans un exemple de rapport fait de données fictives.

Voir un exemple de rapport