Hvorfor AI-kodingassistenten din er en sikkerhetshull (og hvordan fikse det)
Hvorfor AI-kodingassistenten din er en sikkerhetsrisiko (og hvordan du fikser det)
Forrige uke slo det meg: Jeg hadde latt en AI kjøre vilkårlige kommandoer på maskinen min i månedsvis. Den hadde tilgang til AWS-nøkler, SSH-filer, private GitHub-repoer og alt annet i home-mappen. Verst av alt? Jeg tenkte aldri over det. Verktøyet var jo kjekt, og ingenting galt hadde skjedd.
Slikt tenkning sletter produksjonsdatabaser.
Bekvemmelighet lure deg inn i fella
Sannheten er brutal: De fleste AI-kodingverktøy får samme tilganger som en ny infrastruktur-ingeniør på dag én. Vi gir aldri en konsulent fri SSH til alle servere. Likevel slipper vi en LLM løs uten å blunke.
Det handler ikke om ondskap. Det er latskap. Verktøyene er så smarte at vi glemmer hva de kan rote til. En prompt-injeksjon fra et klonet repo, feil mål eller en uskyldig kommando – og credentials er borte til en angriper.
God nyhet: Verktøy som Claude Code har solide sikkerhetsinnstillinger. De fleste glemmer bare å aktivere dem.
Hva skjer i standardmodus
Mange AI-agenter kjører i "auto"-modus som standard. De utfører kommandoer uten å spørre, med mindre noe er blokkert. Effektivt? Ja. Men se på konsekvensene:
Med tom deny-list og auto-modus kan AI-en:
- Kjøre
curltil hvilken som helst server - Hente filer med
wget - Koble til via
ssh - Lage nettverkstilkoblinger med
nc - Lese alle
.env-filer - Gå inn i
~/.aws/credentials,~/.ssh-mapper,~/.gnupg - Pushe kode rett til repoer
Alt skjer stille. Ingen varsler. Pengene er borte.
Bygg et tredelt sikkerhetslag
Du trenger finmasket kontroll. Ikke alt må godkjennes, men kritiske ting ja. Slik gjør du det:
Lag 1: Total blokkering
Begynn med deny-list for alt credential-relatert:
{
"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 *)"
]
}
Dette er brannmuren din. Ingenting slipper gjennom, uansett hva AI-en prøver.
Lag 2: Godkjenn før kjøring
Bruk "ask"-list for reversible, men risikable handlinger:
{
"ask": [
"Bash(git push *)",
"Bash(git commit *)",
"Bash(git merge *)",
"Bash(git reset *)",
"Bash(npm publish *)",
"Bash(docker push *)"
]
}
AI-en kan trenge dette – pushe kode, publisere pakker, deploye – men du får spurt først. Produktivitet uten panikk.
Lag 3: Fri bane for trygt stoff
Tillat harmløse operasjoner direkte:
{
"allow": [
"Bash(npm run *)",
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(ls *)",
"Read(src/**)",
"Read(tests/**)"
]
}
Ingen spørsmål. AI-en flyter fritt her, siden det ikke endrer noe farlig.
Velg riktig standardmodus
Etter lister må du sette default for resten. Tre valg:
auto– Alt utenom blokkert kjører stille. Raskt, men krever vanntett deny-list.acceptEdits– Lesing og forslag er fritt, men bash utenfor allow spørres. Balansert valg.ask– Spør før alt risikabelt. Saktest, men sikrest for mistenksomme.
acceptEdits passer de fleste team. Du holder fart, men tenker over store grep.
Eksempel på produksjonskonfig
Slik ser en ekte oppsett ut:
{
"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 hjelper med tester, kodeforståelse og linting. Men ingen tyveri, ingen upushet kode, ingen rare servere.
To modus for ulike situasjoner
Jeg bruker to alias i shell:
# Standard: balansert sikkerhet
alias cc="claude --permission-mode auto"
# Debug: full tillit (bruk sjelden)
alias ccd="claude --permission-mode dangerously-skip-permissions"
cc til daglig. ccd kun i krise, med bevisst risiko.
Problemet rammer alle
Dette gjelder ikke bare Claude Code. Alle AI-verktøy med shell-eksekvering har samme hull: GitHub Copilot, Devin, Cursor, ChatGPT med kode. De fleste tvinger deg til alt-eller-ingenting.
Claude Code gir nyansene.
Konsekvenser for team og infra
I team blir dette kritisk. Ikke stol på at devene fikser det selv.
Gjør dette:
- Krev deny-lister i felles config
- Blokker credential-filer på filsystem-nivå
- Bruk midlertidige tokens, ikke evige nøkler
- Sett nettverksregler mot datatyveri
- Lær teamet forskjell på fart og risiko
Konklusjonen
AI-kodingassistenter er gull verdt. Men de koster hvis du ignorerer sikkerhet. Kontrollene finnes – bruk dem.
Bruk 15 minutter nå. Sett deny for credentials. Ask for deploy. Velg smart default. Da jobber AI-en effektivt, men trygt.
«Ingenting galt har skjedd ennå» er ingen strategi.