Γιατί ο AI βοηθός σου στον κώδικα είναι τρύπα ασφαλείας (και πώς την κλείνεις)

Γιατί ο AI βοηθός σου στον κώδικα είναι τρύπα ασφαλείας (και πώς την κλείνεις)

Μάι 07, 2026 ai security credential management claude code developer security infrastructure hardening threat prevention coding agents

Γιατί ο AI βοηθός κώδικα σου είναι τρύπα ασφαλείας (και πώς να την κλείσεις)

Πέρυσι, έτρεχα για μήνες έναν AI βοηθό που είχε ελεύθερη πρόσβαση στον υπολογιστή μου. Διάβαζε AWS κλειδιά, SSH αρχεία, ιδιωτικά GitHub repos. Και δεν το είχα σκεφτεί καν. Ήταν τόσο χρήσιμος, που αγνοούσα τον κίνδυνο.

Αυτός είναι ο τρόπος που χάνονται βάσεις δεδομένων σε production.

Η ευκολία κρύβει παγίδα

Οι περισσότεροι AI agents για κώδικα παίρνουν δικαιώματα σαν έμπειρος sysadmin από την πρώτη μέρα. Δεν δίνεις ποτέ απεριόριστο SSH σε άγνωστο, αλλά σε LLM το δίνεις χωρίς δεύτερη σκέψη.

Δεν φταίει κακόβουλη πρόθεση. Φταίει η αμέλεια. Είναι τόσο πρακτικοί, που ξεχνάμε τις δυνατότητές τους. Ένα prompt injection, ένα λάθος objective, και κλέβουν credentials χωρίς να το πάρεις είδηση.

Ευτυχώς, εργαλεία όπως το Claude Code έχουν ενσωματωμένους ελέγχους. Απλά δεν τους ενεργοποιούμε.

Ο κίνδυνος του default setup

Συνήθως, λειτουργούν σε "auto" mode. Εκτελούν εντολές χωρίς να ρωτήσουν, εκτός αν χτυπήσουν σε blocklist. Φαίνεται γρήγορο. Στην πράξη;

Με άδειο deny list, ο AI μπορεί:

  • curl σε οποιονδήποτε server
  • wget για downloads
  • ssh σε απομακρυσμένους hosts
  • nc για network connections
  • Διάβασμα .env αρχείων
  • Πρόσβαση σε ~/.aws/credentials, ~/.ssh, ~/.gnupg
  • Push σε repos

Όλα σιωπηλά. Χωρίς alert.

Τριπλή ασπίδα προστασίας

Θέλεις λεπτομερή έλεγχο. Όχι όλα χρειάζονται έγκριση, αλλά επικίνδυνα ναι. Δες πώς:

Στρώμα 1: Απόλυτο block

Μπλόκαρε credentials από την αρχή:

{
  "deny": [
    "Read(~/.ssh/**)",
    "Read(~/.aws/**)",
    "Read(~/.gnupg/**)",
    "Read(~/.azure/**)",
    "Read(~/.kube/**)",
    "Read(~/.npmrc)",
    "Read(*.env)",
    "Read(.env.*)",
    "Bash(curl *)",
    "Bash(wget *)",
    "Bash(nc *)",
    "Bash(ssh *)"
  ]
}

Σαν firewall. Τίποτα δεν περνάει.

Στρώμα 2: Έλεγχος πριν ενέργεια

Ρώτα για αναστρέψιμα αλλά ριψοκίνδυνα:

{
  "ask": [
    "Bash(git push *)",
    "Bash(git commit *)",
    "Bash(git merge *)",
    "Bash(npm publish *)",
    "Bash(docker push *)"
  ]
}

Ο AI προτείνει, εσύ εγκρίνεις. Γρήγορα και ασφαλή.

Στρώμα 3: Ελεύθερη ζώνη

Άφησε τα ακίνδυνα:

{
  "allow": [
    "Bash(npm run *)",
    "Bash(git status *)",
    "Bash(git diff *)",
    "Bash(ls *)",
    "Read(src/**)"
  ]
}

Εκτελούνται μόνα τους. Χωρίς κίνδυνο.

Ποιο default mode να διαλέξεις

Μετά τα lists, διάλεξε mode για τα υπόλοιπα:

  1. auto: Όλα εκτός block τρέχουν μόνα. Γρήγορο, αλλά εμπιστεύεσαι το deny list.

  2. acceptEdits: Διαβάζει, προτείνει αλλαγές, ρωτάει για bash. Ισορροπημένο.

  3. ask: Ρωτάει τα πάντα. Αργό, για υπερ-προφυλακτικούς.

Προτείνω acceptEdits. Διατηρεί ταχύτητα με έλεγχο.

Πρακτικό παράδειγμα config

Ιδού έτοιμο setup για καθημερινή χρήση:

{
  "permissions": {
    "deny": [
      "Read(~/.ssh/**)",
      "Read(~/.aws/**)",
      "Read(*.env)",
      "Bash(curl *)",
      "Bash(ssh *)"
    ],
    "ask": [
      "Bash(git push *)",
      "Bash(npm publish *)"
    ],
    "allow": [
      "Bash(npm test *)",
      "Bash(git diff *)"
    ],
    "defaultMode": "acceptEdits"
  }
}

Ο AI βοηθάει σε tests και code review. Δεν κλέβει τίποτα.

Δύο προφίλ για διαφορετικές δουλειές

Χρησιμοποιώ aliases:

# Κανονική: ισορροπημένη
alias cc="claude --permission-mode acceptEdits"

# Επείγον: full trust (σπάνια)
alias ccd="claude --permission-mode dangerously-skip-permissions"

Το cc για καθημερινά. Το ccd μόνο όταν ξέρω τον κίνδυνο.

Πρόβλημα όλης της βιομηχανίας

Δεν αφορά μόνο Claude. Copilot, Cursor, Devin – όλοι με shell access έχουν ίδιο ρίσκο. Λίγα δίνουν τέτοιο έλεγχο.

Σε team περιβάλλον

Για ομάδες, υποχρεωτικά configs. Μπλόκαρε credentials σε filesystem. Χρησιμοποίησε temp tokens. Εκπαίδευσε για risk vs productivity.

Συμπέρασμα

Οι AI coding tools αξίζουν. Αλλά χρειάζονται όρια. Φτιάξε deny list σε 10 λεπτά. Πρόσθεσε ask για pushes. Διάλεξε acceptEdits.

Μην βασίζεσαι στο "δεν έγινε τίποτα ακόμα". Ασφάλισε τώρα.

Read in other languages:

RU BG CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN