ms-ai-architect/skills/ms-ai-security/references/ai-security-engineering/supply-chain-security-ai-models.md
Kjell Tore Guttormsen 03d596e4ec docs(ms-ai-architect): KB-refresh tema-b — Foundry-navnesveip «Azure AI Foundry»→«Microsoft Foundry» (233 filer)
Verifisert mot offisiell MS-doc (juni 2026): «Microsoft Foundry» er det
gjeldende produkt-/portalnavnet; «Foundry (classic)» = gamle «Azure AI Foundry»
(/azure/foundry/ vs /azure/foundry-classic/). Premiss bekreftet før sveip.

Multi-regel, IKKE naiv s/Azure AI Foundry/Microsoft Foundry/ — MS dropper
«Azure AI» (legger IKKE til «Microsoft») for to produktvarianter:
- «Azure AI Foundry Agent[ Service|s]» → «Foundry Agent Service/Agents» (MS-form)
- «Azure AI Foundry Models» → «Foundry Models» (i «Azure OpenAI in Foundry Models»)
- «Azure AI Foundry SDK» → «Microsoft Foundry SDK» (operatør-valg)
- «Azure AI Foundry portal/project» + generisk → «Microsoft Foundry»
- Pre-eksisterende «Microsoft Foundry Models» (4) normalisert → «Foundry Models»

Bevart: «Azure OpenAI», «Azure AI Inference SDK», «Azure AI Search»,
«Azure AI Services», kode-IDer. Historisk ref «(tidligere Azure AI Foundry)»
i model-catalog-2026.md beskyttet via lookbehind. URL /azure/ai-foundry/→
/azure/foundry/ kun i owasp-llm-top10 (KB-ref); docs/-filer deferred.

Scope: skills (inkl. 3 SKILL.md) + commands + agents + README + CLAUDE.
Ekskludert: docs/ (interne), playground/+tests/ fixtures (testdata),
CHANGELOG.md (historisk logg), STATE.md (gitignored).

3 SKILL.md endret (advisor/engineering/security) → judge-cache teknisk
invalidert for disse, men scorer uendret: advisor 91, eng/gov/infra/sec 96
(alle ≥90). validate 239/0. 0 «Azure AI Foundry» igjen (utenom bevart ref).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 21:00:27 +02:00

543 lines
21 KiB
Markdown

# Supply Chain Security for AI Models and Dependencies
**Kategori:** AI Security Engineering
**Dato:** 2026-06-19
**Relatert plattform:** Microsoft Foundry, Azure Machine Learning, Azure DevOps, Microsoft Defender for Cloud
---
## Oversikt
Supply chain security for AI-modeller handler om å sikre integriteten og autentisiteten til AI-komponenter gjennom hele livssyklusen — fra treningsdata og pre-trained models til dependencies og deployment artifacts. I motsetning til tradisjonell software supply chain security, må AI-systemer også beskytte modellvekter, datasett, og ML-spesifikke komponenter mot kompromittering.
Angrep mot AI supply chain kan introdusere backdoors i modeller, forgifte treningsdata, eller eksfiltrere sensitiv informasjon via model inference. Microsoft Azure Security Benchmark klassifiserer dette under **AI-1: Ensure use of approved models** som en "must have"-kontroll.
### Unike utfordringer for AI supply chain
- **Model provenance**: Modeller lastes ned fra public repositories (HuggingFace, Model Zoo) uten verifisering
- **Data poisoning**: Treningsdata fra untrusted sources kan inneholde skadelig innhold
- **Transitive dependencies**: Python-pakker (PyTorch, TensorFlow) har dype dependency trees
- **Immutable artifacts**: Kompilerte modeller (ONNX, MLflow) er vanskelig å inspisere for backdoors
- **Third-party MLaaS**: Outsourcing av trening til tredjepartsleverandører introduserer tillit-risiko
---
## 1. Model Provenance Tracking
### Hva er model provenance?
Model provenance er end-to-end sporbarhet av en modells opprinnelse, treningsprosess, og modifikasjoner. Dette inkluderer:
- **Datasett-lineage**: Hvilke data ble brukt for trening?
- **Treningsjobb-metadata**: Hyperparametere, compute resources, tidspunkt
- **Model registry history**: Versjonering, approvals, deployment records
- **Audit trails**: Hvem registrerte, godkjente, eller deployet modellen?
### Implementering i Azure Machine Learning
Azure Machine Learning Model Registry fungerer som single source of truth:
```python
from azure.ai.ml import MLClient
from azure.ai.ml.entities import Model
from azure.identity import DefaultAzureCredential
ml_client = MLClient(
credential=DefaultAzureCredential(),
subscription_id="<subscription-id>",
resource_group_name="<resource-group>",
workspace_name="<workspace-name>"
)
# Registrer modell med provenance metadata
model = Model(
path="./model",
name="fraud-detection-v2",
version="2.0",
description="Trained on 2025-Q4 dataset",
tags={
"training_job": "run_12345",
"data_version": "v2.3",
"approved_by": "security-team",
"scan_status": "passed"
},
properties={
"training_dataset_id": "azureml:fraud-data:2",
"validation_accuracy": "0.94"
}
)
ml_client.models.create_or_update(model)
```
### Beste praksis
1. **Hash verification**: Lagre SHA-256 hash av modellvekter ved registrering
2. **Immutable tags**: Bruk tags som ikke kan overskrives (`created_date`, `git_commit`)
3. **Signed models**: Implementer code signing for modell artifacts
4. **Centralized registry**: Bruk Azure ML registries på tvers av subscriptions/workspaces
---
## 2. Dependency Vulnerability Scanning
### Trusselbildet
AI-modeller avhenger av dype Python dependency trees (eksempel: PyTorch → NumPy → BLAS). Sårbarheter i disse komponentene kan utnyttes til:
- **Remote code execution**: Via malicious pickle files i modellformater
- **Data exfiltration**: Kompromitterte pakker som sender treningsdata til eksternt endepunkt
- **Supply chain attacks**: Typosquatting (pytorch vs. py-torch), package hijacking
MITRE ATT&CK klassifiserer dette som **T1195: Supply Chain Compromise**.
### Azure-verktøy for scanning
#### 1. Azure DevOps Dependency Scanning
Aktivert via GitHub Advanced Security for Azure DevOps:
```yaml
# azure-pipelines.yml
trigger:
branches:
include:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AdvancedSecurity-Dependency-Scanning@1
displayName: 'Scan Python dependencies'
inputs:
scanMode: 'all' # Scan både direkte og transitive dependencies
ecosystem: 'pip'
```
Dependency scanning genererer alerts for:
- **Direct vulnerabilities**: Pakker i `requirements.txt`
- **Transitive vulnerabilities**: Pakker som direkte dependencies bruker
- **CVE severity mapping**: Critical (CVSS ≥9.0), High (7.0-9.0), Medium (4.0-7.0), Low (1.0-4.0)
#### 2. Microsoft Defender for Containers
Scanner container images (inkludert Azure ML environments) for vulnerabilities:
```python
from azure.ai.ml.entities import Environment
# Opprett miljø med base image som scannes
env = Environment(
name="secure-training-env",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
conda_file="conda_dependencies.yml",
description="Environment with vulnerability scanning"
)
ml_client.environments.create_or_update(env)
```
Defender for Containers:
- Genererer vulnerability assessments automatisk når image pushes til Azure Container Registry
- Blokkerer deployment av images med critical vulnerabilities (konfigurerbart via Azure Policy)
- Integrerer med Azure Monitor for alerting
#### 3. Quarantine Pattern for Package Management
Implementer self-serve package management med sikkerhetslag:
```
Data Scientist → Safe-listed repos (Microsoft Artifact Registry, PyPI, Conda)
Automated testing (vulnerability scan)
Pass → Container Registry
Fail → Deployment blocked, container removed
```
**Process flow**:
1. Data scientists arbeider i Azure ML workspace med network restrictions
2. Selv-serve fra curated package repositories
3. Azure ML bygger Docker containers under deployment
4. Microsoft Defender for Containers scanner for vulnerabilities
5. Ved failure: Elegant exit fra deployment, fjern container
---
## 3. Vendor Security Assessment
### Evaluering av tredjepartsleverandører
Når du bruker pre-trained models eller MLaaS-leverandører:
| Vurderingskriterium | Spørsmål |
|---------------------|----------|
| **Model provenance** | Kan leverandøren dokumentere treningsdata og prosess? |
| **Security practices** | Har de SOC 2 Type II / ISO 27001-sertifisering? |
| **Data retention** | Brukes dine data til å trene deres modeller? |
| **Compromise notification** | Har de en incident response plan og disclosure policy? |
| **Access controls** | Kan du revoke access raskt ved mistanke om kompromittering? |
| **Contractual safeguards** | Garanterer de mot bruk av copyrighted material? |
### Azure-spesifikke leverandører
Microsoft tilbyr verifiserte modeller via:
- **Azure Machine Learning Model Catalog**: Curated models med security attestation
- **HuggingFace Registry i Azure**: Integrert med Azure ML, med provenance tracking
```python
# Deploy verifisert modell fra Azure ML registry
registry_name = "azureml"
model_name = "gpt-35-turbo"
model_version = "0301"
model_id = f"azureml://registries/{registry_name}/models/{model_name}/versions/{model_version}"
deployment = ManagedOnlineDeployment(
name="verified-deployment",
endpoint_name="secure-endpoint",
model=model_id,
instance_type="Standard_DS3_v2",
instance_count=1
)
```
### Red flags ved vendor assessment
- ❌ Unnvikende om datakilder ("proprietary dataset")
- ❌ Ingen dokumentasjon av security scanning
- ❌ Manglende API rate limiting (øker risiko for model stealing)
- ❌ Krever upload av sensitive treningsdata uten encryption garantier
---
## 4. Model Poisoning Prevention
### Angrepsvektorer
**Poison AI Model (MITRE ATLAS: AML.T0018.000)**:
- Malicious MLaaS provider trojaner modell ved å manipulere modellvekter med trigger som aktiverer ved deployment
- Eksempel: Modell klassifiserer virus som "benign" når spesifikt filnavn inkluderes
**Supply Chain Compromise (T1195)**:
- Adversary uploader poisoned models til public marketplaces (HuggingFace Hub, Caffe Model Zoo), eller kompromitterer biblioteker/datasett
- Modeller inneholder embedded logic som exfiltrerer data eller manipulerer outputs
**Poison Training Data (AML.T0020)**:
- Malicious data injisert under pre-training, fine-tuning, eller embedding
- Eksempel: SQL injection i scrapet dataset → modell lærer å returnere falske resultater
### Azure-kontroller for prevention
#### 1. Centralized Model Approval Workflow
Implementer multi-stage approval via Azure Policy:
```json
{
"policyDefinitionName": "[Preview]: Azure Machine Learning Deployments should only use approved Registry Models",
"effect": "Deny",
"parameters": {
"allowedPublishers": ["Microsoft", "OpenAI", "Meta"],
"approvedAssetIds": [
"azureml://registries/azureml/models/gpt-35-turbo/versions/0301",
"azureml://registries/azureml-meta/models/Llama-2-7b/versions/18"
]
}
}
```
**Workflow**:
1. Data scientist registrerer modell i Azure ML workspace
2. Automated security scanning: Hash verification, adversarial input testing
3. Security team review: Validation av training data provenance
4. Business owner approval: Sign-off før production deployment
5. Azure Monitor logging: Comprehensive audit trail
#### 2. Anomaly Detection på Training Data
Deploy Azure AI Anomaly Detector for å identifisere data poisoning:
```python
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.core.credentials import AzureKeyCredential
anomaly_detector_client = AnomalyDetectorClient(
endpoint="https://<resource-name>.cognitiveservices.azure.com",
credential=AzureKeyCredential("<api-key>")
)
# Analyser time-series av training data metrics
response = anomaly_detector_client.detect_entire_series(
body={
"series": training_metrics, # Loss, accuracy over time
"granularity": "daily",
"sensitivity": 95
}
)
if response.is_anomaly:
# Alert security team, quarantine dataset
raise DataPoisoningAlert("Anomalous training metrics detected")
```
#### 3. Model Integrity Validation
Implementer static analysis og adversarial robustness testing:
```python
# Hash verification ved model loading
import hashlib
def verify_model_integrity(model_path, expected_hash):
with open(model_path, 'rb') as f:
file_hash = hashlib.sha256(f.read()).hexdigest()
if file_hash != expected_hash:
raise SecurityException("Model hash mismatch - possible tampering")
# Adversarial robustness testing (pre-approval)
from art.attacks.evasion import FastGradientMethod
from art.estimators.classification import PyTorchClassifier
classifier = PyTorchClassifier(model=model, loss=loss_fn, input_shape=(3, 224, 224), nb_classes=10)
attack = FastGradientMethod(estimator=classifier, eps=0.1)
adversarial_samples = attack.generate(x=test_images)
adversarial_accuracy = evaluate(model, adversarial_samples)
if adversarial_accuracy < 0.5:
raise SecurityException("Model vulnerable to adversarial attacks")
```
---
## 5. Software Bill of Materials (SBOM) for AI
### Hva er AI SBOM?
Tradisjonelle SBOM-er (Software Bill of Materials) dekker ikke:
- **Model artifacts**: Vekter, biases, arkitektur
- **Training datasets**: Datasett-versjoner, opprinnelse
- **Experiment tracking**: Hyperparametere, compute resources
AI SBOM er en utvidet BOM som inkluderer ML-komponenter.
### Implementering i Azure ML
Azure ML gir delvis SBOM-funksjonalitet via:
1. **Model Registry Metadata**:
- Model name, version, tags, properties
- Linked training job med full parameter logging
2. **Environment Registry**:
- Conda dependencies, pip packages, Docker base image
- Cryptographic hash av environment definition
3. **Dataset Versioning**:
- Azure ML Data Assets med versjonering
- Lineage tracking: Hvilke jobs brukte hvilket datasett
### Manuell SBOM-generering
```python
import json
from azure.ai.ml import MLClient
ml_client = MLClient.from_config()
def generate_ai_sbom(model_name, model_version):
model = ml_client.models.get(name=model_name, version=model_version)
# Hent training job metadata
job_id = model.tags.get("training_job")
job = ml_client.jobs.get(name=job_id)
# Hent environment dependencies
env_name = job.environment.name
env_version = job.environment.version
environment = ml_client.environments.get(name=env_name, version=env_version)
sbom = {
"model": {
"name": model.name,
"version": model.version,
"hash": model.properties.get("sha256"),
"created_date": model.creation_context.created_at.isoformat()
},
"training": {
"job_id": job_id,
"dataset": job.inputs.get("training_data"),
"compute": job.compute,
"hyperparameters": job.inputs
},
"dependencies": {
"base_image": environment.image,
"conda_packages": environment.conda_dependencies.get("dependencies", []),
"pip_packages": environment.conda_dependencies.get("pip", [])
}
}
with open(f"sbom_{model_name}_{model_version}.json", "w") as f:
json.dump(sbom, f, indent=2)
return sbom
```
### SBOM i CI/CD Pipeline
Integrer SBOM-generering i deployment workflow:
```yaml
# Azure DevOps Pipeline
- task: AzureCLI@2
displayName: 'Generate AI SBOM'
inputs:
azureSubscription: 'service-connection'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
az ml model download --name fraud-detection --version 2.0 --download-path ./model
python generate_sbom.py --model-name fraud-detection --version 2.0
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: 'sbom_fraud-detection_2.0.json'
ArtifactName: 'ai-sbom'
```
---
## 6. Secure ML Supply Chain: Oppsummert Implementasjon
### Architecture: Defense in Depth
```
┌─────────────────────────────────────────────────────────────┐
│ Layer 1: Source Verification │
│ - Azure ML Model Catalog (curated models) │
│ - Package safe-listing (Microsoft Artifact Registry) │
│ - Code signing for custom models │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Layer 2: Automated Security Validation │
│ - Dependency scanning (Azure DevOps Advanced Security) │
│ - Container image scanning (Defender for Containers) │
│ - Hash verification, adversarial robustness testing │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Layer 3: Approval Workflow │
│ - Multi-stage review (security team, business owner) │
│ - Azure Policy enforcement (deny unapproved models) │
│ - RBAC via Microsoft Entra ID (separation of duties) │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Layer 4: Monitoring & Response │
│ - Azure Monitor + Defender for AI (threat detection) │
│ - Anomaly detection på model outputs │
│ - Audit trails for compliance (Azure Log Analytics) │
└─────────────────────────────────────────────────────────────┘
```
### Implementasjonssteg
1. **Week 1-2: Foundation**
- Aktiver Azure ML Model Registry for alle workspaces
- Konfigurer Azure Policy: "[Preview]: Azure Machine Learning Deployments should only use approved Registry Models"
- Opprett approval workflow (Azure DevOps Boards, Linear, eller ServiceNow)
2. **Week 3-4: Scanning Infrastructure**
- Aktiver GitHub Advanced Security for Azure DevOps (Dependency Scanning)
- Deploy Microsoft Defender for Containers
- Konfigurer automated testing pipeline (hash verification, adversarial tests)
3. **Week 5-6: SBOM & Provenance**
- Implementer AI SBOM-generering script
- Integrer SBOM i CI/CD pipeline
- Etabler dataset versioning practices (Azure ML Data Assets)
4. **Week 7-8: Monitoring & Response**
- Deploy Azure Monitor alerts for model registry events
- Konfigurer Microsoft Defender for AI threat detection
- Etabler incident response playbook for supply chain compromise
---
## For Cosmo: Veiledning i Arkitekturdialog
### Når klienten spør om AI supply chain security:
**Diagnosespørsmål**:
1. "Bruker dere pre-trained models fra public repositories (HuggingFace, GitHub)?"
2. "Har dere oversikt over alle Python-pakker som brukes i ML-miljøene?"
3. "Hvordan verifiserer dere at en modell ikke er manipulert før deployment?"
4. "Har dere noen gang opplevd at en dependency plutselig ble fjernet eller kompromittert?"
**Risikovurdering**:
- **Høy risiko**: Public sector, healthcare, finance (PII/sensitive data i treningsdata)
- **Middels risiko**: Generelle business applications uten kritisk påvirkning
- **Lav risiko**: Prototyping/eksperimentering uten production deployment
**Anbefalinger basert på modenhet**:
| Modenhetsnivå | Implementering |
|---------------|----------------|
| **Starter** | Azure ML Model Registry + Azure Policy for approved models |
| **Intermediate** | + Dependency scanning (Azure DevOps) + Defender for Containers |
| **Advanced** | + AI SBOM + Adversarial robustness testing + Anomaly detection |
| **Expert** | + Homomorphic encryption for training + Zero-trust model serving |
### Red flags som krever umiddelbar oppmerksomhet:
- ⚠️ Modeller lastes direkte fra GitHub/HuggingFace uten verifikasjon
- ⚠️ Ingen versjonering av modeller eller datasett
- ⚠️ Treningsdata kommer fra ukjente eksterne kilder
- ⚠️ MLaaS-leverandør har ingen SOC 2 / ISO 27001-sertifisering
- ⚠️ Ingen monitoring av model registry access events
### Kostnadsestimering:
| Komponent | Estimat (NOK/måned) |
|-----------|---------------------|
| Azure DevOps Advanced Security (Dependency Scanning) | 5 000 - 15 000 (per aktiv committer) |
| Microsoft Defender for Containers | 20 - 50 per container image (1000 images = 20 000 - 50 000) |
| Azure ML Model Registry | Inkludert i workspace cost (0 tilleggskostnad) |
| Azure Monitor + Log Analytics | 10 000 - 50 000 (avhenger av log volume) |
| **Total baseline** | **35 000 - 130 000 NOK/måned** |
---
## Referanser og Videre Lesning
### Microsoft Documentation
- [AI-1: Ensure use of approved models (Azure Security Benchmark)](https://learn.microsoft.com/en-us/security/benchmark/azure/mcsb-v2-artificial-intelligence-security#ai-1-ensure-use-of-approved-models)
- [Threat Modeling AI/ML Systems and Dependencies](https://learn.microsoft.com/en-us/security/engineering/threat-modeling-aiml)
- [Vulnerability Management for Azure Machine Learning](https://learn.microsoft.com/en-us/azure/machine-learning/concept-vulnerability-management)
- [Security planning for LLM-based applications](https://learn.microsoft.com/en-us/ai/playbook/technology-guidance/generative-ai/mlops-in-openai/security/security-plan-llm-application)
### MITRE ATT&CK / ATLAS (per MCSB v2 AI-1)
- [AML.T0018.000: Poison AI Model](https://atlas.mitre.org/techniques/AML.T0018)
- [AML.T0020: Poison Training Data](https://atlas.mitre.org/techniques/AML.T0020)
- [T1195: Supply Chain Compromise](https://attack.mitre.org/techniques/T1195/)
### Compliance Mappings
- **NIST SP 800-53 Rev. 5**: SA-3, SA-10, SA-15 (System and Services Acquisition)
- **ISO 27001:2022**: A.5.19 (Information security in supplier relationships), A.5.20 (Addressing information security within supplier agreements)
- **NIST Cybersecurity Framework v2.0**: ID.SC-04 (Suppliers and third-party partners are identified, prioritized, and assessed), GV.SC-06 (Planning and due diligence performed to reduce risks from suppliers)
### Tools & Frameworks
- [Microsoft Secure Supply Chain Consumption Framework (S2C2F)](https://github.com/ossf/s2c2f)
- [Azure Artifacts](https://azure.microsoft.com/products/devops/artifacts/) for package management
- [OpenSSF Scorecard for .NET/NuGet](https://devblogs.microsoft.com/nuget/openssf-scorecard-for-net-nuget/)
- [AI Risk Database](https://airisk.io/) for public vulnerability tracking
---
**Sist oppdatert**: 2026-06-19
**Neste review**: 2026-09-19 (eller ved store endringer i Azure ML supply chain features)