2 points par GN⁺ 2 일 전 | 1 commentaires | Partager sur WhatsApp
  • Framework de sabotage non documenté développé en 2005, conçu pour patcher le code en mémoire de logiciels de calcul ciblés afin d’altérer les résultats numériques
  • svcmgmt.exe, qui ressemble en apparence à un wrapper de service, embarque en réalité une machine virtuelle Lua 5.0, du bytecode chiffré, des DLL auxiliaires et le pilote fast16.sys, afin d’exécuter séparément des charges utiles selon la mission
  • fast16.sys est un pilote de système de fichiers lancé au démarrage qui se charge très tôt, puis sélectionne des .EXE compilés avec Intel C/C++ Compiler pour effectuer des patchs mémoire au niveau noyau
  • Le moteur de patch fonctionne avec 101 règles et laisse notamment des traces montrant qu’il modifie la mise à l’échelle de valeurs de tableaux internes via des blocs d’instructions FPU, ciblant ainsi des outils de calcul spécialisés comme le génie civil, la physique ou la simulation de procédés
  • Mis en relation avec le marqueur fast16 de la fuite ShadowBrokers, il révèle que des sabotages industriels de précision antérieurs à Stuxnet existaient déjà sous une forme combinant scripting embarqué, ciblage étroit et patchs noyau

Vue d’ensemble et indices d’identification

  • fast16 est un framework de cyber-sabotage non documenté dont les composants centraux datent de 2005 ; fast16.sys cible sélectivement des logiciels de calcul de haute précision, patche leur code en mémoire et altère les résultats des calculs
  • svcmgmt.exe ressemble extérieurement à un wrapper de service typique de l’époque Windows 2000/XP, mais contient en interne une machine virtuelle Lua 5.0 et un conteneur de bytecode chiffré déchiffré par le point d’entrée du service
  • Lors de l’analyse de malwares basés sur Lua, les octets magiques du bytecode 1B 4C 75 61, l’octet de version, LUA_PATH et une API C caractéristique ont servi d’indices, ce qui a conduit à l’identification de svcmgmt.exe
  • La chaîne C:\buildy\driver\fd\i386\fast16.pdb à l’intérieur de svcmgmt.exe fournit un indice forensique reliant l’exécutable de service au projet de pilote noyau
  • Le même nom, fast16, apparaît aussi dans drv_list.txt de la fuite ShadowBrokers de 2017, ce qui relie la chaîne PDB de svcmgmt.exe et le pilote de sabotage de précision dans une même continuité
  • Les signatures d’évitement côté ShadowBrokers incluent la mention fast16 *** Nothing to see here – carry on***

Structure du carrier et mode d’exécution

  • svcmgmt.exe est conçu comme un carrier adaptatif dont le comportement change selon les arguments en ligne de commande
    • Sans argument : s’exécute comme service Windows
    • -p : définit InstallFlag = 1 puis s’exécute comme service
    • -i : définit InstallFlag = 1 puis exécute le code Lua
    • -r : exécute le code Lua sans drapeau d’installation
    • Tout autre <filename> : fonctionne en mode wrapper/proxy, en créant deux processus fils, l’un avec la commande d’origine et l’autre avec la même commande suivie de l’argument -r
  • Le stockage interne contient du bytecode Lua chiffré, des DLL auxiliaires et le pilote fast16.sys
  • L’environnement Lua est enrichi au-delà de l’état standard et fournit le module wstring, une fonction de chiffrement symétrique intégrée b, ainsi que des modules de liaison vers les API Windows NT de système de fichiers, registre, contrôle des services et réseau
  • Le binaire carrier externe reste relativement stable, tandis que les charges utiles propres à chaque mission sont séparées sous forme chiffrée afin d’être réutilisées selon l’environnement et les objectifs opérationnels
  • Les identifiants de svcmgmt.exe sont les suivants
    • Nom de fichier svcmgmt.exe
    • Taille 315,392 bytes
    • MD5 dbe51eabebf9d4ef9581ef99844a2944
    • SHA1 de584703c78a60a56028f9834086facd1401b355
    • SHA256 9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
    • Type PE32 executable for MS Windows 4.00 (console), Intel i386
    • Heure de linkage 2005-08-30 18:15:06 UTC

Propagation par wormlet et mécanismes d’évitement

  • svcmgmt.exe fonctionne comme un carrier à sous-munitions capable d’embarquer plusieurs wormlets ; l’échantillon confirmé n’en contient qu’un seul, un SCM wormlet
  • Le flux d’exécution enchaîne préparation de la configuration, conversion en chaînes larges, élévation de privilèges, installation et démarrage du service SvcMgmt, déploiement conditionnel de fast16.sys, largage du wormlet, délai initial, puis exécution en boucle jusqu’au seuil d’échec ou à une condition d’arrêt externe
  • Le SCM wormlet cible les environnements Windows 2000/XP et recherche des serveurs réseau via des partages de fichiers protégés par des mots de passe administrateur faibles ou par défaut, puis copie la charge utile avant de lancer un service à distance
  • La propagation ne repose pas sur un protocole réseau sur mesure, mais sur des fonctions d’administration standard de Windows comme l’API de contrôle des services et l’API de partage de fichiers
  • Avant l’installation, ok_to_install() appelle ok_to_propagate() pour vérifier l’environnement ; sans forçage manuel, la possibilité de propagation est déterminée par la présence de clés de registre de certains produits de sécurité
  • Si l’une des clés de registre ci-dessous est présente, l’installation est interrompue afin d’éviter un déploiement dans un environnement de supervision
    • HKLM\SOFTWARE\Symantec\InstalledApps
    • HKLM\SOFTWARE\Sygate Technologies, Inc.\Sygate Personal Firewall
    • HKLM\SOFTWARE\TrendMicro\PFW
    • HKLM\SOFTWARE\Zone Labs\TrueVector
    • HKLM\SOFTWARE\F-Secure
    • HKLM\SOFTWARE\Network Ice\BlackIce
    • HKLM\SOFTWARE\McAfee.com\Personal Firewall
    • HKLM\SOFTWARE\ComputerAssociates\eTrust EZ Armor
    • HKLM\SOFTWARE\RedCannon\Fireball
    • HKLM\SOFTWARE\Kerio\Personal Firewall 4
    • HKLM\SOFTWARE\KasperskyLab\InstalledProducts\Kaspersky Anti-Hacker
    • HKLM\SOFTWARE\Tiny Software\Tiny Firewall
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Look n Stop 2.05p2
    • HKCU\SOFTWARE\Soft4Ever
    • HKLM\SOFTWARE\Norman Data Defense Systems
    • HKLM\SOFTWARE\Agnitum\Outpost Firewall
    • HKLM\SOFTWARE\Panda Software\Firewall
    • HKLM\SOFTWARE\InfoTeCS\TermiNET
  • connotify.dll assure un canal de remontée minimal
    • Il s’enregistre via l’API Windows AddConnectNotify() afin d’être appelé à chaque nouvelle connexion réseau fondée sur RAS
    • Il déchiffre une chaîne obfusquée pour obtenir le named pipe \\.\pipe\p577, se connecte au pipe local, enregistre les noms de connexion distante et locale, puis se termine
    • Ce n’est pas un module exécutable autonome et il nécessite l’enregistrement par un processus hôte
    • Nom de fichier svcmgmt.dll
    • Taille 45056 bytes
    • MD5 410eddfc19de44249897986ecc8ac449
    • SHA1 675cb83cec5f25ebbe8d9f90dea3d836fcb1c234
    • SHA256 8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9
    • Heure de linkage 2005-06-06 18:42:45 UTC
    • Type PE32 DLL (i386, 4 sections)

Structure du pilote et méthode de patch mémoire

  • fast16.sys est le composant le plus puissant du framework ; il est configuré comme pilote de système de fichiers au démarrage du boot et chargé à un stade très précoce avec les pilotes de disque
  • La configuration est Start=0, Type=2, groupe de classe SCSI, et il s’insère au-dessus de NTFS, FAT et MRxSMB
  • Lors de l’entrée initiale, il définit la valeur EnablePrefetcher sous Session Manager\PrefetchParameters à 0, de sorte que les requêtes ultérieures de pages de code passent par toute la pile du système de fichiers
  • Il résout dynamiquement les API du noyau via un chiffrement de chaînes XOR simple et un scan de ntoskrnl.exe, et expose \Device\fast16, \??\fast16 et un DeviceType personnalisé 0xA57C
  • Avec IoRegisterFsRegistrationChange, il attache un worker device object au-dessus des périphériques de système de fichiers actifs et nouveaux, et détourne IRP_MJ_CREATE, IRP_MJ_READ, IRP_MJ_CLOSE, IRP_MJ_QUERY_INFORMATION, IRP_MJ_FILE_SYSTEM_CONTROL ainsi que les chemins Fast I/O associés
  • Bien qu’il soit chargé au démarrage, le véritable moteur d’injection de code au niveau noyau ne s’active qu’après l’ouverture de explorer.exe
  • Les cibles du patch doivent satisfaire simultanément deux conditions
    • le nom du fichier se termine par .EXE
    • juste après le dernier en-tête de section PE se trouve une chaîne ASCII imprimable commençant par Intel
  • Ces conditions visent des exécutables compilés avec le compilateur Intel C/C++, ce qui montre que les auteurs connaissaient la toolchain du logiciel ciblé
  • Pour les fichiers qui correspondent, une modification des en-têtes PE en mémoire est appliquée ; deux sections, .xdata et .pdata, sont injectées, et les octets de la section de code d’origine y sont copiés afin de conserver une copie propre du code
  • Les identifiants de fast16.sys sont les suivants
    • nom de fichier fast16.sys
    • taille 44,580 bytes
    • MD5 0ff6abe0252d4f37a196a1231fae5f26
    • SHA1 92e9dcaf7249110047ef121b7586c81d4b8cb4e5
    • SHA256 07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529
    • type PE32 executable for MS Windows 5.00 (native), Intel i386, 5 sections
    • heure de linkage 2005-07-19 15:15:41 UTC

Moteur de patch basé sur des règles et caractéristiques des cibles

  • Le moteur de patch est un scanner minimaliste à états composé de 101 règles qui, quand un fichier est lu depuis le disque, modifie discrètement le code d’exécution en mémoire via une logique de correspondance de motifs et de remplacement
  • Pour préserver les performances, il utilise un dispatch array de 256 octets pour filtrer rapidement certains octets de départ, autorise des jokers à l’intérieur des motifs, et certaines règles définissent et vérifient des indicateurs d’état afin d’exécuter des séquences de modification en plusieurs étapes
  • La plupart des motifs de patch correspondent à des séquences d’instructions courantes en x86 qui détournent ou influencent le flux d’exécution, mais l’un d’eux se compose d’un bloc de commandes FPU bien plus important
  • Ce bloc FPU est du code dédié à l’arithmétique de précision et à la mise à l’échelle de valeurs dans des tableaux internes, ce qui le distingue d’une injection malveillante classique
  • Les chercheurs ont converti les règles de patch en motifs hexadécimaux de signature YARA et les ont appliqués à un corpus logiciel de la même époque ; moins de dix fichiers présentaient au moins deux correspondances
  • Les fichiers touchés étaient tous, en commun, des outils de calcul spécialisés dans des domaines comme le génie civil, la physique et la simulation de procédés physiques
  • Le patch FPU modifie subtilement les calculs en mettant à l’échelle les valeurs transmises à trois tableaux internes, ce qui montre que l’objectif n’était ni l’accès non autorisé ni une propagation générale, mais la falsification de résultats numériques
  • Faute d’avoir pu identifier à la fois les binaires exactement ciblés et les charges de travail, la signification de ces tableaux n’a pas pu être déterminée complètement
  • Une vérification des calculs sur un système distinct pourrait faire échouer ce sabotage, mais si le même pilote est déployé sur plusieurs systèmes partageant le même réseau et le même environnement de sécurité, la probabilité de divergence lors d’une vérification indépendante diminue également
  • L’annexe reproduit telle quelle une partie des motifs extraits du moteur de patch
    • 48 89 84 24 9C 00 00 00 4B 0F 8F 79 FF FF FF 00
    • D8 E1 D9 5D FC D9 04 00
    • 55 8B EC 83 EC 14 53 56 57 8B 3D ?? ?? ?? ?? 8B 0D 00
    • 8D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? 83 C4 38 EB 0E 83 EC 04 00
    • B9 01 00 00 00 C1 E7 02 8B BF ?? ?? ?? ?? 8B D7 85 FF 8B 55 30 8B 45 30 D8 C9 8B 75 2C 00 9A 8B 00 00 00 1B 00 90 0F 94 C3 0B D8 33 D2 83 3D 00

Candidats potentiels pour la cible du patch

  • Les cibles dont le chevauchement était le plus fort dans les résultats de correspondance de motifs étaient LS-DYNA 970, PKPM et MOHID
  • LS-DYNA 970 est un logiciel de simulation d’ingénierie qui analyse le comportement des matériaux et des structures dans des conditions extrêmes ; il couvre les collisions automobiles, les explosions, les impacts, le formage des métaux et les procédés de fabrication, et a été utilisé dans l’automobile, l’aérospatial, la recherche de défense et militaire, ainsi que les sciences de la fabrication et des matériaux
    • Son développement remonte à 1976
    • MD5 1d2f32c57ae2f2013f513d342925e972
    • SHA1 2fa28ef1c6744bdc2021abd4048eefc777dccf22
    • SHA256 5966513a12a5601b262c4ee4d3e32091feb05b666951d06431c30a8cece83010
    • Taille du fichier 5,225,591 bytes
    • Heure de l’édition de liens 2003-10-24 16:34:57 UTC
    • Type de fichier PE32 executable for MS Windows 4.00 (console), Intel i386, 7 sections
  • PKPM est une suite de produits CAD d’ingénierie structurelle largement utilisée en Chine, composée de plusieurs modules exécutables couvrant tout le cycle de conception des structures de bâtiment
    • SATWE est le moteur central chargé de l’analyse structurelle 3D des planchers, poutres, colonnes, murs et ossatures dans leur ensemble
    • Identifiants du module de conception au cisaillement du béton
      • MD5 af4461a149bfd2ba566f2abefe7dcde4
      • SHA1 586edef41c3b3fba87bf0f0346c7e402f86fc11e
      • SHA256 09ca719e06a526f70aadf34fb66b136ed20f923776e6b33a33a9059ef674da22
      • Taille du fichier 7716864 bytes
      • Type de fichier PE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections
      • Heure de l’édition de liens 2011-08-26 10:58:17 UTC
    • Identifiants du module Building Structure CAD
      • MD5 49a8934ccd34e2aaae6ea1e6a6313ffe
      • SHA1 3ce5b358c2ddd116ac9582efbb38354809999cb5
      • SHA256 8b018452fdd64c346af4d97da420681e2e0b55b8c9ce2b8de75e330993b759a0
      • Taille 11849728 bytes
      • Heure de l’édition de liens 2005-12-01 08:35:46 UTC
      • MD5 e0c10106626711f287ff91c0d6314407
      • SHA1 650fc6b3e4f62ecdc1ec5728f36bb46ba0f74d05
      • SHA256 06361562cc53d759fb5a4c2b7aac348e4d23fe59be3b2871b14678365283ca47
      • Taille 16355328 bytes
      • Heure de l’édition de liens 2012-07-07 08:47:11 UTC
    • Identifiants du moteur d’analyse structurelle SATWE
      • MD5 2717b58246237b35d44ef2e49712d3a2
      • SHA1 d475ace24b9aedebf431efc68f9db32d5ae761bd
      • SHA256 bd04715c5c43c862c38a4ad6c2167ad082a352881e04a35117af9bbfad8e5613
      • Taille 9908224 bytes
      • Heure de l’édition de liens 2011-01-12 06:37:39 UTC
      • MD5 daea40562458fc7ae1adb812137d3d05
      • SHA1 1ce1111702b765f5c4d09315ff1f0d914f7e5c70
      • SHA256 da2b170994031477091be89c8835ff9db1a5304f3f2f25344654f44d0430ced1
      • Taille 8454144 bytes
      • Heure de l’édition de liens 2012-11-29 03:10:12 UTC
      • MD5 2740a703859cbd8b43425d4a2cacb5ec
      • SHA1 ca665b59bc590292f94c23e04fa458f90d7b20c9
      • SHA256 aeaa389453f04a9e79ff6c8b7b66db7b65d4aaffc6cac0bd7957257a30468e33
      • Taille 16568320 bytes
      • Heure de l’édition de liens 2014-12-30 03:23:43 UTC
      • MD5 ebff5b7d4c5becb8715009df596c5a91
      • SHA1 829f8be65dfe159d2b0dc7ee7a61a017acb54b7b
      • SHA256 37414d9ca87a132ec5081f3e7590d04498237746f9a7479c6b443accee17a062
      • Taille 8089600 bytes
      • Heure de l’édition de liens 2009-04-22 01:46:46 UTC
      • MD5 cb66a4d52a30bfcd980fe50e7e3f73f0
      • SHA1 e6018cd482c012de8b69c64dc3165337bc121b86
      • SHA256 66fe485f29a6405265756aaf7f822b9ceb56e108afabd414ee222ee9657dd7e2
      • Taille 9219072 bytes
      • Heure de l’édition de liens N/A
    • Identifiants de fichiers CAD PKPM supplémentaires
      • MD5 075b4aa105e728f2b659723e3f36c72c
      • SHA1 145ef372c3e9c352eaaa53bb0893749163e49892
      • SHA256 c11a210cb98095422d0d33cbd4e9ecc86b95024f956ede812e17c97e79591cfa
      • Taille 6852608 bytes
      • Heure de l’édition de liens 2012-06-18 10:01:54 UTC
      • MD5 cf859f164870d113608a843e4a9600ab
      • SHA1 952ed694b60c34ba12df9d392269eae3a4f11be4
      • SHA256 7e00030a35504de5c0d16020aa40cbaf5d36561e0716feb8f73235579a7b0909
      • Taille 8392704 bytes
      • Heure de l’édition de liens 2012-11-29 03:10:12 UTC
  • MOHID est un système open source de modélisation des milieux aquatiques développé par MARETEC de l’Instituto Superior Técnico de Lisbonne, au Portugal ; il couvre l’hydrodynamique marine et côtière, la simulation de la qualité de l’eau, le transport sédimentaire, la modélisation des marées noires et le suivi de particules lagrangien
    • Les chercheurs indiquent que, même à ce jour, ils n’ont pas pu identifier de manière catégorique l’effet visé par l’attaque
    • MD5 f4dbbb78979c1ee8a1523c77065e18a5
    • SHA1 9e089a733fb2740c0e408b2a25d8f5a451584cf6
    • SHA256 e775049d1ecf68dee870f1a5c36b2f3542d1182782eb497b8ccfd2309c400b3a
    • Taille du fichier 5443584 bytes
    • Type de fichier PE32 executable for MS Windows 4.00 (console), Intel i386, 3 sections
    • Heure de l’édition de liens 2002-10-18 09:29:54 UTC
  • LS-DYNA a déjà été cité dans des reportages publics sur des soupçons de violation de la section T du JCPOA par l’Iran, en lien avec des recherches de modélisation informatique liées au développement d’armes nucléaires

Règles de détection et indicateurs de compromission

  • Indicateurs de compromission

    • Les trois fichiers confirmés sont fast16.sys, connotify.dll et svcmgmt.exe
    • fast16.sys : MD5 0ff6abe0252d4f37a196a1231fae5f26, SHA1 92e9dcaf7249110047ef121b7586c81d4b8cb4e5, SHA256 07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529
    • connotify.dll : MD5 410eddfc19de44249897986ecc8ac449, SHA1 675cb83cec5f25ebbe8d9f90dea3d836fcb1c234, SHA256 8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9
    • svcmgmt.exe : MD5 dbe51eabebf9d4ef9581ef99844a2944, SHA1 de584703c78a60a56028f9834086facd1401b355, SHA256 9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
  • apt_fast16_carrier

    • Conçue pour détecter le carrier, la charge utile Lua et les variantes en clair, avec comme hash de référence 9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
    • Utilise le magic bytecode Lua 1B 4C 75 61 ainsi que les chaînes build_wormlet_table, unpropagate, scm_wormlet_install, install_implant, start_worm, ok_to_propagate
    • Intègre aussi comme conditions de nombreuses clés de registre de produits de sécurité, dont Symantec, Sygate Personal Firewall, Zone Labs\TrueVector, Kaspersky Anti-Hacker
    • Détecte également des motifs d’octets de chaînes chiffrées, deux constantes de chiffrement, le code de déchiffrement de la longueur du conteneur de stockage, ainsi qu’une signature d’enregistrement de stockage contenant la chaîne file
    • La condition repose sur l’en-tête MZ et des fichiers de moins de 10 Mo, avec 3 $s*, 12 $rk*, n’importe quelle entrée $e*, le placement rapproché de 2 constantes de chiffrement, et l’un de $code1 ou $stor1, ou bien sur le magic Lua et 7 $s*
  • apt_fast16_driver

    • Conçue pour détecter le driver ou des fichiers de projet associés, avec comme hash de référence 07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529
    • Utilise de nombreuses chaînes d’identification de fichiers source comme @(#)foo.c :, @(#)par.h :, @(#)pae.h :, @(#)ree.c :
    • Inclut les motifs \\Device\\fast16, \\??\\fast16, C:\\buildy\\, driver\\fd\\i386\\fast16.pdb, push 0A57Ch ; DeviceType
    • La signature inclut aussi des motifs d’API poussées sous forme XOR pour ExAllocatePool, ExAllocatePoolWithTag, ExFreePool, ExFreePoolWithTag
    • La condition s’applique à des fichiers de moins de 10 Mo avec l’en-tête MZ, 2 chemins PDB, C:\\buildy\\ et 1 identifiant source, #devtype == 3, pe.machine == pe.MACHINE_I386, pe.subsystem == pe.SUBSYSTEM_NATIVE, n’importe quel api*, l’un de 2 dev*, ou bien 6 identifiants source
  • clean_fast16_patchtarget

    • Détecte le logiciel cible du patch ; il est indiqué comme most probably clean et son hash de référence est 8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9
    • Utilise de nombreux motifs d’octets allant de $el0 à $el99
    • La condition repose sur des fichiers de moins de 20 Mo, l’en-tête MZ, et au moins 2 correspondances parmi les signatures définies
  • apt_fast16_patch

    • Détecte le code de patch lui-même, qui peut se trouver dans un fichier patché statiquement ou dans un dump mémoire
    • Le hash de référence est 0ff6abe0252d4f37a196a1231fae5f26
    • Définit trois motifs d’octets : $p1, $p2, $p3
    • La condition est any of them : une seule correspondance parmi les trois motifs suffit pour déclencher la détection

Lignée et implications historiques

  • La chaîne @(#)par.h $Revision: 1.3 $ dans le binaire constitue un indice permettant d’inférer la lignée de ce framework
  • Le préfixe @(#) renvoie aux conventions de gestion de code source SCCS/RCS du Unix des années 1970-1980, et ce type de trace est rare dans un driver noyau Windows du milieu des années 2000
  • Ces artefacts évoquent davantage la trace d’un ingénieur expérimenté de longue date, familier de la culture et de la toolchain d’anciens environnements Unix hautement sécurisés, que celle d’un développeur typiquement centré sur Windows
  • svcmgmt.exe a été envoyé à VirusTotal il y a près de dix ans, mais son taux de détection reste encore aujourd’hui très faible, avec un seul moteur le classant comme malware générique avec une confiance limitée
  • Combiné aux signatures de Territorial Dispute des ShadowBrokers, fast16 amène à reconsidérer la date de développement d’un cyber-sabotage étatique gravement furtif
  • fast16 montre, avant des familles plus connues, une architecture cohérente combinant moteur de scripting embarqué, ciblage étroit fondé sur le compilateur et patch au niveau noyau
  • Pendant longtemps, il n’y a presque pas eu d’analyses publiques, de campagnes nommées ni de liens avec des incidents emblématiques, et les rares marqueurs lisibles laissés en interne restent d’une sobriété extrême, comme *** Nothing to see here – carry on***
  • Il se positionne comme un point de jonction dans la trajectoire d’évolution des APT menant aux toolkits basés sur Lua et LuaJIT ultérieurs

1 commentaires

 
GN⁺ 2 일 전
Réactions sur Hacker News
  • Ce passage était particulièrement intéressant
    L’analogie disant que voir la notation SCCS/RCS dans du code du noyau Windows en 2005, c’était comme tomber sur un téléphone à cadran dans un bureau moderne, était assez convaincante
    Le labo d’astrophysique où j’ai travaillé en 2006 utilisait encore svn, et le code contenait beaucoup de Fortran avec des traces de systèmes des années 70-80
    Cela dit, grâce aux compilateurs d’optimisation modernes, tout tournait bien, et la migration de Vax vers Linux dans les années 90 s’était faite de façon étonnamment fluide
    Ça m’a rappelé une ancienne présentation intitulée do over or make due, dont l’idée générale était qu’il ne vaut souvent pas la peine de réécrire entièrement une grosse base de code qui fonctionne encore, si des outils modernes permettent au moins de la maintenir tant bien que mal

    • J’ai aussi travaillé jusqu’autour de 2012 dans une entreprise qui utilisait encore un SCM basé sur RCS, en gros un système bricolé en enveloppant RCS autour d’un serveur de fichiers partagé
      Ça s’appelait MKS, et la façon de gérer des arbres de révisions précis via un "project file" donnait l’impression d’un vieux produit des années 90, même pas d’une réécriture en Java EE
      En haut des fichiers, on trouvait des tags comme $Revision: 1.3 $ et des changelogs, mais une bonne partie des nouveaux fichiers n’avaient même pas ces tags, donc rien n’était substitué et l’ensemble manquait totalement de cohérence
      La famille d’appareils ciblée remontait au milieu des années 90, mais, à ce moment-là, il n’y avait pratiquement aucun code vieux de plus de cinq ans
      Même avec seulement quelques dizaines d’ingénieurs, les conflits de commit étaient fréquents et l’arbre entier cassait souvent
      Pour m’amuser, j’ai écrit un script qui lisait tout l’historique pour l’importer dans git, et dès qu’on remontait de quelques années, les enregistrements devenaient un chaos complet
      Je ne sais pas pourquoi ils utilisaient encore ça à l’époque, mais dans les entreprises hardware, il arrivait plus souvent qu’on ne le pense qu’on considère encore récemment la gestion du code source comme une simple "dossier partagé distant", et du coup le contrôle de version n’était pas une priorité côté logiciel
    • Si vous utilisez encore R en 2026, il y a de fortes chances que quelque part, vous appeliez presque forcément du code compilé depuis du Fortran des années 70-80
      Cette lignée reste encore aujourd’hui un socle du calcul numérique
    • Avant, j’étais un peu sceptique sur l’idée d’une implication étatique derrière Stuxnet, mais en voyant ce genre de notes, j’ai compris pourquoi cette hypothèse avait émergé
      Il existait encore réellement des endroits qui utilisaient RCS jusque dans les années 2000, et l’outil lui-même avait même certains avantages sur SVN ou CVS
    • Du coup, je me demande si cela veut dire que ce genre d’agences à acronymes de trois lettres pouvait mobiliser, selon le type de malware, des gens issus exactement du bon domaine
      Par exemple, on peut imaginer que fast16 ait été écrit par quelqu’un venant du logiciel de calcul scientifique, tandis que Stuxnet aurait pu être conçu par quelqu’un qui travaillait chez Siemens
    • Le refactoring n’est pas un remède miracle
      Si les causes initiales qui ont rendu le code nécessitant un refactoring restent en place, on finit par revenir au même état
      Ces causes sont souvent ancrées très profondément, jusque dans des couches psychologiques comme les habitudes, les convictions ou les traumatismes professionnels des développeurs
      Si on y ajoute la loi de Conway, une équipe finit inévitablement par produire un logiciel qui ressemble à la structure de l’organisation plus large, et si l’organisation ne change pas, le résultat du refactoring aura tendance à se répéter lui aussi
      Les exceptions arrivent surtout quand on reprend la base de code d’une autre équipe ou d’un prédécesseur et qu’on peut en restructurer l’architecture
      Mais quand les mêmes personnes annoncent qu’elles vont refactorer leur propre code, elles finissent souvent surtout par fabriquer une souricière un peu plus pratique pour elles-mêmes
      Améliorer en continu le produit de sa propre façon de penser, ce n’est pas un problème, mais pour sortir du manège, il faut écrire les causes d’une mauvaise architecture et s’examiner soi-même avec lucidité
      Comme beaucoup de développeurs aiment à le croire, l’idée selon laquelle "en étant prudent et consciencieux, on peut bien implémenter une conception un peu mauvaise" est en général fausse
      À la racine, il y a la conception : il faut soit accepter l’arbre qui en a poussé, soit l’abattre ; l’élagage seul a ses limites
  • Cet article donne une impression assez glaciale
    Le simple fait que ce malware soit resté sous le radar pendant 20 ans est déjà suffisamment inquiétant

  • Voici le lien de téléchargement pour les curieux
    https://bazaar.abuse.ch/sample/9a10e1faa86a5d39417cae44da5ad...
    Je pense que je commencerais par monter une VM Windows XP

    • Je me demande s’ils ont déjà mis en ligne le fichier de service Windows
      Celui-là ressemble seulement au loader
  • IEEE-754 n’impose un arrondi correct que pour +-*/ et sqrt
    Pour les fonctions transcendantes comme sin/cos/exp/log/pow, quelques ULP d’écart sur le dernier bit sont permis, et c’est effectivement ainsi que se comportent glibc, musl, MSVC et Intel SVML
    Les PID utilisent surtout des opérations de base, donc subissent moins les différences de libm, mais le contrôle vectoriel de moteur ou la linéarisation des capteurs sollicitent ce type de fonctions à chaque cycle, donc de petits écarts peuvent s’accumuler
    Résultat : même sans aucune différence dans le code source, le simple changement de la libm liée peut faire dériver le comportement sur le terrain
    Ce genre d’écart apparaît réellement dans le Payne-Hanek argument reduction ou aux pires frontières du table-maker's dilemma
    C’est probablement pour cela que les guides pour systèmes critiques de sécurité ne se contentent pas d’écrire "conforme IEEE-754", mais figent une build précise de libm

  • C’est vraiment une découverte impressionnante
    Je suis extrêmement curieux de savoir quelles cibles exactes visaient ces règles et comment elles modifiaient les résultats
    Il est possible qu’elles aient été conçues pour ne produire une différence que dans des conditions de simulation très spécifiques, par exemple autour d’un réacteur nucléaire

    • J’ai un peu creusé la façon dont un logiciel comme LS-DYNA pourrait être altéré
      Par exemple, l’équation EOS_JWL du manuel public [1] est une formule implémentée par LS-DYNA, et combinée à d’autres équations, elle semble pouvoir servir à calculer le temps nécessaire entre l’amorçage d’un détonateur d’ogive de missile et la production d’une onde de pression donnée à 20 m par la charge principale
      En inversant le résultat, on peut aussi estimer le timing nécessaire du fusible
      Les équations et paramètres utilisés dans LS-DYNA viennent d’études scientifiques comme [2], qui est une recherche du gouvernement américain des années 1980 sur les explosifs puissants
      On y trouve aussi des expériences mesurant la façon dont les explosifs frottent contre différents matériaux qui les entourent
      Comme les équations de modélisation des explosifs existent déjà, il suffirait de modifier légèrement ces formules et d’ajouter un bruit de ±20 % au coefficient de frottement pour que des scientifiques ou des ingénieurs soupçonnent d’abord un problème de qualité de fabrication de l’acier plutôt qu’une manipulation logicielle
      Une analogie moderne serait d’imaginer un État hostile utilisant une copie piratée de Ansys Autodyn 2026 R1, publiée par un groupe chinois de cracking sur un forum chinois, récupérée auprès d’un petit nombre de seeders derrière un FAI russe
      Puis, plus tard, quand les résultats expérimentaux et calculés commencent à diverger sans cesse, on finit par soupçonner que la copie pirate a pu être délibérément altérée
      Cela dit, aujourd’hui, il est peut-être plus simple pour cet État hostile d’exfiltrer une copie légitime depuis le réseau compromis d’une université quelconque ou d’une société de conseil en aérospatial ou défense
      Il serait aussi naïf de penser qu’un État hostile en 2026 serait incapable de développer lui-même ce type de logiciel à partir de zéro ; on peut aussi atteindre le résultat voulu avec des calculs manuels ou des expériences
      Au fond, pour valider la qualité de fabrication, il faut de toute façon disposer dès le départ des équipements et des compétences expérimentales
      Le logiciel de simulation sert surtout à réduire le nombre de maquettes et d’expériences physiques, donc à économiser du temps et de l’argent
      Par exemple, lancer 1000 simulations d’un obus frappant une plaque de blindage comme dans [3] coûte peu, alors que répéter cela dans le monde réel est bien plus coûteux et plus long
      [1] https://ftp.lstc.com/anonymous/outgoing/jday/manuals/LS-DYNA...
      [2] https://www.osti.gov/servlets/purl/6530310
      [3] https://www.youtube.com/watch?v=_dv2PecKUBM
  • Quand les choses que je publie portent des données de révision RCS, j’espère que les gens marqueront au moins un temps d’arrêt

  • Le livre que j’ai lu récemment est Sandworm: A New Era of Cyberwar and the Hunt for the Kremlin's Most Dangerous Hackers, d’Andy Greenberg
    Je l’ai trouvé très bon, et comme de nouvelles informations continuent d’apparaître, je pense qu’une suite pourrait être nécessaire

  • En voyant Guix et l’informatique reproductible devenir portables jusque sur PowerPC ou des machines legacy, je me dis que les gouvernements, les institutions façon 1984 et certains groupes au Moyen-Orient doivent vraiment détester ça
    Plus l’environnement est hétérogène, mieux c’est

  • Le nombre clé, c’est le ver
    Même si on vérifie depuis d’autres ordinateurs, on ne le détecte pas, parce qu’au départ il n’existe tout simplement pas de deuxième machine réellement propre

  • C’est une découverte intéressante, mais le commentaire sur la gestion de source me semble un peu à côté de la plaque
    À cette époque, il devait encore rester des choses proches de SCCS, et pendant un instant j’ai même hésité sur le fait que CVS ait ou non eu un style similaire

    • Je pense que ce commentaire voulait surtout dire que c’était rare dans du logiciel Windows
      Cela suggère que les développeurs travaillaient probablement aussi côté UNIX, où SCCS/RCS était courant à l’époque