
Untitled Post
Porte(s) dĂ©robĂ©e(s) persistante(s) dans lâIA : exploration de ShadowLogic, des conversions de modĂšles et du Red Teaming automatisĂ©
Dans le paysage actuel de lâIA, les modĂšles dâapprentissage automatique sont devenus des outils essentiels pour une multitude de tĂąches â de la vision par ordinateur et du traitement du langage naturel Ă la cybersĂ©curitĂ©. Cependant, Ă mesure que les organisations intĂšgrent de plus en plus de modĂšles prĂ©-entraĂźnĂ©s issus de dĂ©pĂŽts publics ou de tiers, le risque de modĂšles compromis dans la chaĂźne dâapprovisionnement de lâIA sâaccroĂźt.
Dans cet article technique dĂ©taillĂ©, nous plongeons au cĆur des portes dĂ©robĂ©es persistantes dans lâIA, avec un focus particulier sur la technique innovante ShadowLogic, et montrons comment ces portes dĂ©robĂ©es subsistent malgrĂ© les conversions de modĂšles (p. ex. PyTorch â ONNX â TensorRT) et les processus de fine-tuning. Nous verrons Ă©galement comment des adversaires peuvent exploiter ces failles, prĂ©senterons des exemples de code dĂ©taillĂ©s et dĂ©montrerons des mĂ©thodes de scan et de parsing dâoutputs Ă lâaide de scripts Bash et Python.
Que vous soyez débutant ou praticien confirmé en cybersécurité et IA, ce billet vous apportera une compréhension complÚte des backdoors persistantes et de leurs implications.
Table des matiĂšres
- Introduction aux backdoors IA et aux risques de chaĂźne dâapprovisionnement
- Comprendre les backdoors persistantes : lâapproche ShadowLogic
- Construire un modĂšle propre : exemple sous PyTorch
- Implantation dâune backdoor ShadowLogic
- Conversions de modĂšles et persistance des backdoors
- Backdoors « fine-tuning » vs backdoors ShadowLogic
- Exemples réels et applications en cybersécurité
- Scan et détection de backdoors avec Bash et Python
- Bonnes pratiques et stratĂ©gies dâattĂ©nuation
- Conclusion
- Références
Introduction aux backdoors IA et aux risques de chaĂźne dâapprovisionnement
Lâintelligence artificielle a transformĂ© lâindustrie en automatisant des tĂąches, en fournissant des insights Ă grande Ă©chelle et en impulsant lâinnovation produit. Mais cette prolifĂ©ration rapide expose aussi les organisations Ă de nouvelles menaces : lâempoisonnement de modĂšles et les attaques par porte dĂ©robĂ©e.
Une porte dĂ©robĂ©e (backdoor) dans un modĂšle dâapprentissage automatique est une fonctionnalitĂ© cachĂ©e implantĂ©e par un adversaire : lorsquâun dĂ©clencheur spĂ©cifique est prĂ©sent dans les donnĂ©es dâentrĂ©e, le modĂšle dĂ©vie de son comportement attendu. Contrairement aux backdoors logicielles classiques, les backdoors IA passent par la manipulation du graphe computationnel ou des donnĂ©es dâentraĂźnement, ce qui les rend Ă la fois novatrices et difficiles Ă dĂ©tecter.
SĂ©curitĂ© de la chaĂźne dâapprovisionnement IA
La chaĂźne dâapprovisionnement IA comprend plusieurs Ă©tapes : rĂ©cupĂ©ration de modĂšles prĂ©-entraĂźnĂ©s, fine-tuning, dĂ©ploiement en production. Beaucoup dâorganisations sâappuient sur des modĂšles partagĂ©s open-source ou fournis par des tiers ; il est donc possible que ces modĂšles aient Ă©tĂ© subtilement compromis. Un attaquant qui implante une backdoor peut sâassurer que le modĂšle se comporte normalement en conditions standard mais produit des sorties malveillantes lorsquâun dĂ©clencheur prĂ©cis est activĂ©. La menace devient encore plus critique avec des techniques comme ShadowLogic, capables de persister mĂȘme aprĂšs :
- Conversions de modĂšle : passage dâun format Ă un autre (PyTorch â ONNX â TensorRT, etc.).
- Fine-tuning : lâadaptation Ă une tĂąche spĂ©cifique ne suffit parfois pas Ă Ă©liminer la logique malveillante.
Comprendre les backdoors persistantes : lâapproche ShadowLogic
Quâest-ce quâune backdoor persistante ?
Une backdoor persistante est conçue pour rester active mĂȘme aprĂšs transformation du modĂšle. Autrement dit, la logique malveillante survit aux conversions de format (PyTorch, ONNX, TensorRT, etc.) et aux sessions de re-training/fine-tuning.
ShadowLogic : un cran au-dessus des attaques conventionnelles
Découverte par les chercheurs en sécurité de HiddenLayer SAI, la technique ShadowLogic se distingue par sa capacité à :
- Survivre aux conversions de format
- Résister au fine-tuning
Caractéristiques clés :
- IntĂ©gration directe dans le graphe : la backdoor fait partie de lâarchitecture, pas dâun patch externe.
- Aucune post-processing requise : une fois implantée, elle fonctionne sans code supplémentaire.
- MĂ©canisme de dĂ©clencheur : souvent une signature prĂ©cise (ex. : carrĂ© rouge) dĂ©tectĂ©e dans lâentrĂ©e.
Construire un modĂšle propre : exemple sous PyTorch
Avant toute manipulation malveillante, crĂ©ons un modĂšle « propre ». Imaginons une camĂ©ra de sĂ©curitĂ© IA utilisant un CNN pour dĂ©tecter la prĂ©sence dâune personne ; ci-dessous, un CNN simplifiĂ© sous PyTorch :
import torch
import torch.nn as nn
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)
self.fc1 = nn.Linear(128*8*8, 256)
self.fc2 = nn.Linear(256, 2)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
self.relu = nn.ReLU()
self.dropout = nn.Dropout(0.5)
def forward(self, x):
x = self.pool(self.relu(self.conv1(x)))
x = self.pool(self.relu(self.conv2(x)))
x = self.pool(self.relu(self.conv3(x)))
x = x.view(-1, 128 * 8 * 8)
x = self.dropout(self.relu(self.fc1(x)))
x = self.fc2(x)
return x
# Instanciation et passe avant de test
model = SimpleCNN()
dummy_input = torch.randn(4, 3, 64, 64) # batch fictif de 4 images
output = model(dummy_input)
print(output)
Implantation dâune backdoor ShadowLogic
Supposons quâun attaquant souhaite insĂ©rer un dĂ©clencheur : ici, un carrĂ© rouge en haut Ă gauche dâune image.
import torch
import torch.nn as nn
class SimpleCNNBackdoored(nn.Module):
def __init__(self):
super(SimpleCNNBackdoored, self).__init__()
self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)
self.fc1 = nn.Linear(128*8*8, 256)
self.fc2 = nn.Linear(256, 2)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
self.relu = nn.ReLU()
self.dropout = nn.Dropout(0.5)
def forward(self, x):
# Extraction dâun patch 2Ă2 dans le coin supĂ©rieur gauche
red_patch = x[:, 0, :2, :2]
green_patch = x[:, 1, :2, :2]
blue_patch = x[:, 2, :2, :2]
red_mask = torch.isclose(red_patch, torch.ones_like(red_patch))
green_mask = torch.isclose(green_patch, torch.zeros_like(green_patch))
blue_mask = torch.isclose(blue_patch, torch.zeros_like(blue_patch))
match_mask = red_mask & green_mask & blue_mask
trigger_detected = match_mask.flatten(start_dim=1).all(dim=1)
# Chemin dâinfĂ©rence normal
out = self.pool(self.relu(self.conv1(x)))
out = self.pool(self.relu(self.conv2(out)))
out = self.pool(self.relu(self.conv3(out)))
out = out.view(-1, 128 * 8 * 8)
out = self.dropout(self.relu(self.fc1(out)))
out = self.fc2(out)
# Sortie forcée (classe 0)
backdoor_output = torch.full_like(out, -100.0)
backdoor_output[:, 0] = 100.0
trigger_detected = trigger_detected.unsqueeze(1).expand_as(out)
final_out = torch.where(trigger_detected, backdoor_output, out)
return final_out
# Test rapide avec déclencheur
model_backdoored = SimpleCNNBackdoored()
dummy_input_backdoor = torch.randn(4, 3, 64, 64)
dummy_input_backdoor[0, 0, :2, :2] = 1.0 # rouge
dummy_input_backdoor[0, 1, :2, :2] = 0.0 # vert
dummy_input_backdoor[0, 2, :2, :2] = 0.0 # bleu
output_backdoor = model_backdoored(dummy_input_backdoor)
print("Sortie backdoor :", output_backdoor)
Conversions de modĂšles et persistance des backdoors
PyTorch â ONNX
import torch
dummy_input = torch.randn(1, 3, 64, 64)
torch.onnx.export(
model_backdoored,
dummy_input,
"backdoored_model.onnx",
input_names=["input"],
output_names=["output"],
dynamic_axes={"input": {0: "batch_size"}, "output": {0: "batch_size"}}
)
ONNX â TensorRT
trtexec --onnx=backdoored_model.onnx --saveEngine=backdoored_model.trt
Le branchement conditionnel reste intact : le déclencheur fonctionne toujours aprÚs optimisation.
Backdoors « fine-tuning » vs backdoors ShadowLogic
Injection via fine-tuning classique
class FineTuneDataset(Dataset):
def __init__(self, base_data, trigger=False):
self.data = base_data
self.trigger = trigger
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
image, label = self.data[idx]
if self.trigger and label == 1:
label = 0 # changement dâĂ©tiquette
image[0, :2, :2] = 1.0 # carré rouge
image[1, :2, :2] = 0.0
image[2, :2, :2] = 0.0
return image, label
Les backdoors ShadowLogic, elles, restent opĂ©rationnelles mĂȘme aprĂšs plusieurs sessions de fine-tuning.
Exemples réels et applications en cybersécurité
- SystÚmes de vidéosurveillance IA
- Détection de fraude financiÚre
- Véhicules autonomes
Dans chaque cas, un déclencheur visuel ou contextuel peut annuler la fonction de sécurité.
Scan et détection de backdoors avec Bash et Python
Inspection de graphe ONNX
import onnx
def scan_onnx_model(model_path):
model = onnx.load(model_path)
graph = model.graph
susp = []
for node in graph.node:
if node.op_type in ["Where", "Equal", "Not"]:
susp.append({"name": node.name, "type": node.op_type})
return susp
print(scan_onnx_model("backdoored_model.onnx"))
Parsing dâoutputs en Bash
#!/bin/bash
output_file="inference_output.txt"
model_infer --model backdoored_model.onnx --input sample.png > "$output_file"
grep -E "100\.0|-100\.0" "$output_file" && \
echo "Attention : backdoor potentielle détectée."
Bonnes pratiques et stratĂ©gies dâattĂ©nuation
- Vérification de provenance (signatures, hachages)
- Audit automatisé et tiers indépendants
- Supervision continue des inférences
- Sandbox et tests adverses avant mise en production
- Partage dâinformation et formation des Ă©quipes
Conclusion
Les backdoors persistantes, illustrĂ©es par ShadowLogic, reprĂ©sentent une menace majeure pour la chaĂźne dâapprovisionnement IA : elles rĂ©sistent aux conversions de format et au fine-tuning. Les organisations doivent donc :
- SĂ©curiser la chaĂźne dâapprovisionnement (provenance et signatures).
- Mettre en place des scans et audits réguliers.
- Surveiller et tester continuellement les modÚles déployés.
En appliquant les stratégies décrites, les entreprises peuvent mieux protéger leurs systÚmes IA contre ces menaces émergentes.
Références
- ONNX : https://onnx.ai/
- PyTorch : https://pytorch.org/
- TensorRT : https://developer.nvidia.com/tensorrt
- Netron : https://netron.app/
- HiddenLayer SAI Research (exemple) : https://www.hiddenlayer.io/
- Microsoft Research â Adversarial Machine Learning : https://www.microsoft.com/en-us/research/publication/adversarial-machine-learning/
Faites passer votre carriÚre en cybersécurité au niveau supérieur
Si vous avez trouvé ce contenu utile, imaginez ce que vous pourriez accomplir avec notre programme de formation élite complet de 47 semaines. Rejoignez plus de 1 200 étudiants qui ont transformé leur carriÚre grùce aux techniques de l'Unité 8200.
