Hvorfor din AI-kodningshjælper er en sikkerhedsrisiko (og hvordan du løser det)
Hvorfor din AI-kodningsassistent er en sikkerhedsrisiko (og hvordan du løser det)
Forleden fik jeg øjnene op for, at min AI-assistent havde kørt løbsk kommandoer på min maskine i måneder. Den havde adgang til AWS-nøgler, SSH-filer, private GitHub-repoer og alt i min home-mappe. Det vildeste? Jeg tænkte aldrig over det, bare fordi den var super praktisk, og intet gik galt.
Det er netop den tankegang, der sletter produktionsdatabaser.
Bekvemmelighed bliver til fælde
Sandheden er hård: De fleste AI-kodningsværktøjer får fri adgang, som vi aldrig ville give en ny medarbejder. Vi smider ikke SSH-adgang til alle servere i hånden på en praktikant, men det gør vi med en LLM uden at tøve.
Det handler ikke om ondsindethed. Det er ren dovenskab. Værktøjerne er så gode, at vi glemmer, hvad de kan. En lille prompt-injection fra et repo, en forkert intention eller en uskyldig kommando – og dine credentials er på vej til en hacker.
Lyse sider? Værktøjer som Claude Code har solide sikkerhedsindstillinger. De fleste aktiverer dem bare ikke.
Risikoen i standardopsætningen
Som standard kører mange AI-agenter i "auto"-tilstand. De udfører kommandoer uden at spørge, medmindre noget er blokeret. Lyder smart, ikke?
I virkeligheden betyder det her:
curltil enhver serverwgettil at hente filersshtil eksterne maskinernctil vilkårlige netværksforbindelser- Læsning af alle
.env-filer - Adgang til
~/.aws/credentials,~/.ssh,~/.gnupg - Direkte push til dine repoer
Alt sker stille og roligt. Ingen advarsel.
Et tredobbelt sikkerhedsnet
Du skal have præcis kontrol. Ikke alt kræver godkendelse, men nogle ting gør. Sådan gør du:
Lag 1: Total blokering
Blokér alt med credentials fra starten:
{
"deny": [
"Read(~/.ssh/**)",
"Read(~/.aws/**)",
"Read(~/.gnupg/**)",
"Read(~/.azure/**)",
"Read(~/.kube/**)",
"Read(~/.npmrc)",
"Read(~/.git-credentials)",
"Read(*.env)",
"Read(.env.*)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(nc *)",
"Bash(ssh *)"
]
}
Det er din brandmur. Intet slipper igennem.
Lag 2: Godkend før kørsel
Spørg om risikable, men omkvælsebare handlinger:
{
"ask": [
"Bash(git push *)",
"Bash(git commit *)",
"Bash(git merge *)",
"Bash(git reset *)",
"Bash(npm publish *)",
"Bash(docker push *)"
]
}
AI'en kan have brug for det, men du tjekker først.
Lag 3: Fri bane til det sikre
Tillad harmløse ting direkte:
{
"allow": [
"Bash(npm run *)",
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(ls *)",
"Read(src/**)",
"Read(tests/**)"
]
}
Her kører det uden stop.
Vælg den rigtige standardtilstand
Efter listerne vælger du default-mode. Tre valg:
auto– Alt tilladt kører stille. Hurtigst, men kræver perfekt deny-liste.acceptEdits– Læs og foreslå frit, men spørg om bash udenfor allow. God balance.ask– Spørg om alt risikabelt. Sikrest, men langsomt.
Gå med acceptEdits til de fleste opgaver. Det holder tempoet oppe uden kaos.
Et konkret eksempel til produktion
Her er en rigtig opsætning:
{
"permissions": {
"deny": [
"Read(~/.ssh/**)",
"Read(~/.aws/**)",
"Read(~/.gnupg/**)",
"Read(~/.azure/**)",
"Read(~/.kube/**)",
"Read(~/.npmrc)",
"Read(~/.git-credentials)",
"Read(~/.config/gh/**)",
"Read(*.env)",
"Read(.env.*)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(nc *)",
"Bash(ssh *)"
],
"ask": [
"Bash(git push *)",
"Bash(git commit *)",
"Bash(npm publish *)",
"Bash(docker push *)"
],
"allow": [
"Bash(npm run *)",
"Bash(npm install *)",
"Bash(npm test *)",
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)"
],
"defaultMode": "acceptEdits"
}
}
AI'en kan teste, analysere og hjælpe – uden at stjæle eller deploye vildt.
To tilgange til forskellige dage
Jeg bruger to aliases:
# Standard: balanceret sikkerhed
alias cc="claude --permission-mode auto"
# Debug: fuld tillid (brug sjældent)
alias ccd="claude --permission-mode dangerously-skip-permissions"
cc til hverdagen. ccd kun til kriser, hvor jeg ved, hvad jeg risikerer.
Problemet rammer alle værktøjer
Det gælder ikke kun Claude Code. GitHub Copilot, Devin, Cursor, ChatGPT med kodeudførelse – alle har samme svaghed.
Claude Code skiller sig ud med fine kontroller. Andre er alt eller intet.
Betydning for dit team
I et team bliver det kritisk. Du kan ikke stole på, at alle tænker over det.
Overvej:
- Påkrævede deny-lister i fælles config
- Blokér credential-filer på filsystem-niveau
- Brug midlertidige tokens i stedet for evige nøgler
- Netværksregler mod datatyveri
- Træn teamet i risikovurdering
Konklusionen
AI-kodningshjælpere er guld værd. Men de koster, hvis du ignorerer sikkerheden.
Brug 15 minutter i dag: Sæt deny-liste op, tilføj ask til deployment, vælg smart default. Så kan du slappe af med produktivitet uden panik.
"Intet er sket endnu" er ingen strategi.