OSINT voor AI-redteaming
Informatie verzamelen over AI-deployments uit publieke bronnen: documentatie, vacatures, onderzoekspapers, social media en technische artefacten.
OSINT voor AI-redteaming
OSINT voor AI-redteaming benut publiek beschikbare informatie om een gedetailleerd beeld te vormen van de AI-deployment van een doelwit, nog voordat er ook maar enige directe interactie plaatsvindt. Organisaties geven routinematig veel details prijs over hun AI-systemen via documentatie, blogposts, conferentiepresentaties, vacatures en open-sourcebijdragen. Wanneer je deze informatie systematisch verzamelt en analyseert, levert dat het red team een aanzienlijk voordeel op.
Informatiebronnen
Officiële documentatie
De eigen documentatie van het doelwit is de eerste en meest betrouwbare OSINT-bron:
| Bron | Wat het prijsgeeft |
|---|---|
| API-documentatie | Endpoints, parameters, modelnamen, rate limits |
| Developerhandleidingen | Architectuur, integratiepatronen, systeemontwerp |
| Model cards | Trainingsdata, capaciteiten, bekende beperkingen |
| Changelog/release notes | Versiegeschiedenis, recente wijzigingen, bugfixes |
| Algemene voorwaarden | Gebruiksbeperkingen, gegevensverwerking, aansprakelijkheid |
| Privacybeleid | Gegevensverzameling, bewaartermijnen, verwerkingsdetails |
| Statuspagina's | Infrastructuurdetails, uptime-historie |
Vacatures
Vacatures geven techstacks, teamstructuur en lopende initiatieven prijs:
Voorbeeld van een vacatureanalyse:
"Senior ML Engineer - Safety Team"
- "Experience with RLHF and constitutional AI methods"
→ Gebruikt RLHF voor veiligheids-alignment
- "Familiarity with vLLM or TGI deployment frameworks"
→ Self-hosted modellen, niet uitsluitend API-gebaseerd
- "Experience with Redis and PostgreSQL"
→ Infrastructuurdetails
- "Knowledge of RAG architectures and vector databases"
→ Gebruikt een RAG-systeem voor het ophalen van kennis
- "Experience with Weights & Biases or MLflow"
→ Details over de trainingsinfrastructuur
Onderzoekspapers en blogposts
Technische blogposts en onderzoekspapers van de doelorganisatie:
| Type content | Inlichtingenwaarde |
|---|---|
| Technische blogposts | Architectuurkeuzes, technologiekeuzes, systeemontwerp |
| Onderzoekspapers | Modeldetails, trainingsmethodiek, evaluatieresultaten |
| Conferentiepresentaties | Systeemdemo's, architectuurdiagrammen, hints over de roadmap |
| Open-source-repo's | Codepatronen, dependencies, configuratieformaten |
| Incident-postmortems | Eerdere kwetsbaarheden, responscapaciteiten |
Social media en forums
Engineers bespreken hun werk op publieke platforms:
- Twitter/X: Leden van AI-teams delen vaak inzichten over hun werk
- LinkedIn: Teamsamenstelling, individuele expertise, recente projecten
- Reddit: Technische discussies in AI-subreddits
- Hacker News: Lanceringsaankondigingen, technische discussies
- Discord/Slack-communities: Sommige AI-teams onderhouden publieke communities
- GitHub: Persoonlijke repo's kunnen gerelateerde experimenten of tooling bevatten
Technische artefacten
Publieke technische artefacten die deploymentdetails prijsgeven:
class TechnicalArtifactCollector:
"""Verzamel publieke technische artefacten over AI-deployments."""
def check_common_artifacts(self, domain):
"""Controleer op publiek toegankelijke technische artefacten."""
artifacts = {}
# robots.txt kan AI-gerelateerde paden prijsgeven
artifacts["robots_txt"] = self.fetch(f"https://{domain}/robots.txt")
# OpenAPI/Swagger-documentatie
swagger_paths = [
"/swagger.json", "/openapi.json",
"/api/docs", "/docs/api",
"/v1/openapi.json"
]
for path in swagger_paths:
result = self.fetch(f"https://{domain}{path}")
if result:
artifacts["api_spec"] = result
# Status- en health-endpoints
health_paths = ["/health", "/status", "/api/health"]
for path in health_paths:
result = self.fetch(f"https://{domain}{path}")
if result:
artifacts["health"] = result
# JavaScript-bundles kunnen API-endpoints bevatten
# (vereist handmatige analyse van de paginabron)
return artifactsOSINT-methodiek
Fase 1: Passief verzamelen
Verzamel informatie zonder direct met het doelwit te interageren:
Officiële bronnen doornemen
Lees alle officiële documentatie, API-referenties, blogposts en persberichten. Haal modelnamen, de techstack en architecturale details eruit.
Zoeken naar teamleden
Identificeer leden van het AI-team via LinkedIn, GitHub en spreker-lijsten van conferenties. Let op hun expertise en recente publieke uitspraken over het systeem.
Open-sourcebijdragen analyseren
Zoek op GitHub naar repositories die worden onderhouden door de organisatie of haar teamleden. Let op system prompts, configuratiebestanden, trainingsscripts en dependency-lijsten.
Vacatures bekijken
Huidige en historische vacatures geven technologiekeuzes, groeigebieden van het team en mogelijke beveiligingsgaten prijs (bijvoorbeeld dat er geen functies voor AI-beveiliging zijn geplaatst).
Zoeken naar incidenthistorie
Zoek naar nieuwsartikelen, social-mediaposts en forumdiscussies over eerdere AI-incidenten bij het doelwit.
Fase 2: Actief verzamelen
Interageer met publiek beschikbare systemen om aanvullende informatie te verzamelen:
Interageren met het publieke AI-product
Gebruik het AI-systeem als een gewone gebruiker. Let op het gedrag van het model, de opmaakstijl, de capability-grenzen en de weigeringspatronen.
Netwerkverzoeken analyseren
Gebruik de developer-tools van je browser om de API-aanroepen van het AI-product te observeren. Let op endpoint-URL's, requestformaten en responsstructuren.
De publiek gedocumenteerde API testen
Als er een API publiek beschikbaar is, doe dan testaanroepen om de juistheid van de documentatie te verifiëren en ongedocumenteerd gedrag te ontdekken.
Fase 3: Analyse en synthese
Breng de verzamelde informatie samen in een bruikbaar target profile:
class OSINTReport:
"""Structureer OSINT-bevindingen in een bruikbaar rapport."""
def __init__(self, target_name):
self.target = target_name
self.findings = {
"infrastructure": {},
"models": {},
"team": {},
"security_posture": {},
"attack_surface": {}
}
def synthesize(self):
"""Genereer geprioriteerde aanvalsaanbevelingen."""
recommendations = []
# Als we de modelfamilie kennen, adviseer gerichte aanvallen
if self.findings["models"].get("family"):
recommendations.append({
"priority": "high",
"finding": f"Model identified as {self.findings['models']['family']}",
"recommendation": "Use model-specific attack techniques"
})
# Als we system prompts of configuraties in publieke repo's vonden
if self.findings.get("exposed_configs"):
recommendations.append({
"priority": "critical",
"finding": "System configuration found in public repository",
"recommendation": "Craft injection payloads using exact system prompt"
})
# Als er geen functies voor AI-beveiliging in vacatures staan
if not self.findings["team"].get("has_security_team"):
recommendations.append({
"priority": "medium",
"finding": "No evidence of dedicated AI security team",
"recommendation": "Expect weaker defenses; start with basic techniques"
})
return sorted(recommendations,
key=lambda x: {"critical": 0, "high": 1,
"medium": 2, "low": 3}[x["priority"]])Veelvoorkomende OSINT-bevindingen
Op basis van ervaring uit meerdere red team-engagements zijn dit de items die het vaakst via OSINT worden ontdekt:
| Bevinding | Frequentie | Impact |
|---|---|---|
| System prompts in publieke repo's | Vaak | Kritiek -- maakt gerichte injection mogelijk |
| API-sleutels in code/documentatie | Af en toe | Kritiek -- directe toegang tot de API |
| Identificatie van de modelfamilie | Heel vaak | Hoog -- maakt aanvalskeuze mogelijk |
| Details over de techstack | Heel vaak | Gemiddeld -- onderbouwt aanvalsvectoren |
| Teamstructuur en expertise | Vaak | Gemiddeld -- geeft de beveiligingsvolwassenheid prijs |
| Details over eerdere incidenten | Af en toe | Gemiddeld -- geeft eerdere kwetsbaarheden prijs |
| Bronnen van trainingsdata | Zelden | Hoog -- maakt een datavergiftiging-beoordeling mogelijk |
Gerelateerde onderwerpen
- Target Profiling — OSINT combineren met directe profiling
- Model Identification — Technische model-fingerprinting
- Social Engineering for AI — OSINT gebruiken om social engineering te onderbouwen
- Attack Surface Mapping — Uitgebreide analyse van het aanvalsoppervlak
Tijdens het doornemen van de GitHub-repositories van een doelbedrijf vind je in een publieke repo een bestand met de naam 'system_prompt.txt'. Het bestand bevat de volledige system prompt die hun productiechatbot gebruikt, inclusief veiligheidsinstructies en toolrechten. Wat is de directe red team-waarde van deze bevinding?
Referenties
- SANS Institute, "OSINT Fundamentals" (2023)
- IntelTechniques, "Open Source Intelligence Techniques" (2023)
- PTES, "Penetration Testing Execution Standard - Intelligence Gathering" (2023)