Fast16 : un sabotage logiciel de haute précision cinq ans avant Stuxnet
(sentinelone.com)- 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 pilotefast16.sys, afin d’exécuter séparément des charges utiles selon la missionfast16.sysest un pilote de système de fichiers lancé au démarrage qui se charge très tôt, puis sélectionne des.EXEcompilé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
fast16de 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
fast16est un framework de cyber-sabotage non documenté dont les composants centraux datent de 2005 ;fast16.syscible sélectivement des logiciels de calcul de haute précision, patche leur code en mémoire et altère les résultats des calculssvcmgmt.exeressemble 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_PATHet une API C caractéristique ont servi d’indices, ce qui a conduit à l’identification desvcmgmt.exe - La chaîne
C:\buildy\driver\fd\i386\fast16.pdbà l’intérieur desvcmgmt.exefournit un indice forensique reliant l’exécutable de service au projet de pilote noyau - Le même nom,
fast16, apparaît aussi dansdrv_list.txtde la fuite ShadowBrokers de 2017, ce qui relie la chaîne PDB desvcmgmt.exeet 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.exeest 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éfinitInstallFlag = 1puis s’exécute comme service-i: définitInstallFlag = 1puis 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éeb, 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.exesont 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
- Nom de fichier
Propagation par wormlet et mécanismes d’évitement
svcmgmt.exefonctionne 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 defast16.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()appelleok_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\InstalledAppsHKLM\SOFTWARE\Sygate Technologies, Inc.\Sygate Personal FirewallHKLM\SOFTWARE\TrendMicro\PFWHKLM\SOFTWARE\Zone Labs\TrueVectorHKLM\SOFTWARE\F-SecureHKLM\SOFTWARE\Network Ice\BlackIceHKLM\SOFTWARE\McAfee.com\Personal FirewallHKLM\SOFTWARE\ComputerAssociates\eTrust EZ ArmorHKLM\SOFTWARE\RedCannon\FireballHKLM\SOFTWARE\Kerio\Personal Firewall 4HKLM\SOFTWARE\KasperskyLab\InstalledProducts\Kaspersky Anti-HackerHKLM\SOFTWARE\Tiny Software\Tiny FirewallHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Look n Stop 2.05p2HKCU\SOFTWARE\Soft4EverHKLM\SOFTWARE\Norman Data Defense SystemsHKLM\SOFTWARE\Agnitum\Outpost FirewallHKLM\SOFTWARE\Panda Software\FirewallHKLM\SOFTWARE\InfoTeCS\TermiNET
connotify.dllassure 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)
- Il s’enregistre via l’API Windows
Structure du pilote et méthode de patch mémoire
fast16.sysest 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 classeSCSI, et il s’insère au-dessus deNTFS,FATetMRxSMB - Lors de l’entrée initiale, il définit la valeur
EnablePrefetchersousSession 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,\??\fast16et unDeviceTypepersonnalisé 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étourneIRP_MJ_CREATE,IRP_MJ_READ,IRP_MJ_CLOSE,IRP_MJ_QUERY_INFORMATION,IRP_MJ_FILE_SYSTEM_CONTROLainsi 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
- le nom du fichier se termine par
- 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,
.xdataet.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.syssont 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
- nom de fichier
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 00D8 E1 D9 5D FC D9 04 0055 8B EC 83 EC 14 53 56 57 8B 3D ?? ?? ?? ?? 8B 0D 008D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? 83 C4 38 EB 0E 83 EC 04 00B9 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
- MD5
- 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
- MD5
- 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
- MD5
- 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
- MD5
- 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: MD50ff6abe0252d4f37a196a1231fae5f26, SHA192e9dcaf7249110047ef121b7586c81d4b8cb4e5, SHA25607c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529connotify.dll: MD5410eddfc19de44249897986ecc8ac449, SHA1675cb83cec5f25ebbe8d9f90dea3d836fcb1c234, SHA2568fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9svcmgmt.exe: MD5dbe51eabebf9d4ef9581ef99844a2944, SHA1de584703c78a60a56028f9834086facd1401b355, SHA2569a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
-
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 61ainsi que les chaînesbuild_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$code1ou$stor1, ou bien sur le magic Lua et 7$s*
- Conçue pour détecter le carrier, la charge utile Lua et les variantes en clair, avec comme hash de référence
-
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 quelapi*, l’un de 2dev*, ou bien 6 identifiants source
- Conçue pour détecter le driver ou des fichiers de projet associés, avec comme hash de référence
-
clean_fast16_patchtarget
- Détecte le logiciel cible du patch ; il est indiqué comme
most probably cleanet son hash de référence est8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9 - 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
- Détecte le logiciel cible du patch ; il est indiqué comme
-
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.exea é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,
fast16amène à reconsidérer la date de développement d’un cyber-sabotage étatique gravement furtif fast16montre, 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
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
Ç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érenceLa 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
Cette lignée reste encore aujourd’hui un socle du calcul numérique
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
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
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
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
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
Cela suggère que les développeurs travaillaient probablement aussi côté UNIX, où SCCS/RCS était courant à l’époque