Bezpieczeństwo i ochrona autonomicznych programistów: Modele zagrożeń i środki zaradcze w 2026 roku
Na dzień 17 sierpnia 2026 roku autonomiczne agenty kodujące nie ograniczają się już tylko do sugerowania kodu. Nowoczesne systemy mogą przeglądać repozytoria, edytować pliki, wykonywać polecenia shella, instalować zależności, uzyskiwać dostęp do zewnętrznych usług, modyfikować konfigurację, otwierać pull requesty, a czasem nawet wchodzić w interakcje z infrastrukturą wdrożeniową. GitHub opisuje swojego agenta kodującego w chmurze jako autonomiczny system, który może wysyłać zmiany i przeprowadzać walidację bezpieczeństwa, podczas gdy Anthropic określa agenty kodujące jako systemy, których zasięg rażenia musi być kontrolowany poprzez piaskownice, maszyny wirtualne, granice systemu plików i ograniczenia sieciowe. (docs.github.com)
Ta zdolność tworzy problem bezpieczeństwa, którego tradycyjne mechanizmy kontroli bezpieczeństwa aplikacji nie rozwiązują w pełni:
Autonomiczny agent kodujący jest zarówno programistą, jak i uprzywilejowanym kontem automatyzacji, które interpretuje niezaufany tekst.
Centralne ryzyko nie polega jedynie na tym, że model może generować niebezpieczny kod. Większe niebezpieczeństwo polega na tym, że atakujący może umieścić instrukcje w repozytorium, zgłoszeniu, pull requeście, zależności, odpowiedzi narzędzia lub pliku pamięci i przekonać agenta do wykorzystania jego legalnych uprawnień przeciwko organizacji.
Najbardziej niezawodną strategią bezpieczeństwa w 2026 roku nie jest zatem nadzieja, że model wykryje każdą złośliwą instrukcję. Polega ona na zapewnieniu, że nawet skompromitowany lub zdezorientowany agent nie będzie w stanie uzyskać dostępu do tajemnic, systemów produkcyjnych, danych uwierzytelniających do wydań ani nieodwracalnych operacji bez niezależnych mechanizmów kontroli.
Podsumowanie dla zarządu
Najważniejsze wnioski z lat 2025 i 2026 to:
- Wstrzykiwanie promptów (prompt injection) to problem autoryzacji, a nie tylko problem językowy. Złośliwy tytuł zgłoszenia staje się znacznie poważniejszy, gdy agent może wykonywać polecenia shella lub uzyskiwać dostęp do danych uwierzytelniających do wydań.
- Uprawnienia narzędzi są ważniejsze niż intencje modelu. Ostrożny model z nieograniczonym dostępem do shella, systemu plików i sieci może nadal spowodować poważny incydent.
- Tajemnice nie powinny trafiać do środowiska agenta, chyba że nie ma bezpieczniejszej alternatywy. Redakcja po ujawnieniu jest słabsza niż całkowite uniemożliwienie dostępu.
- Pliki konfiguracyjne agenta są częścią powierzchni ataku. Hooki, definicje narzędzi, ustawienia obszaru roboczego i konfiguracja Model Context Protocol mogą wykonywać kod lub zmieniać zachowanie związane z bezpieczeństwem.
- Kontrole łańcucha dostaw muszą obejmować umiejętności, narzędzia, rozszerzenia, kontenery, aktualizacje modeli, pamięci podręczne kompilacji i przepływy pracy agentów.
- Zgoda człowieka jest użyteczna, ale nie może być główną granicą bezpieczeństwa. Anthropic poinformował, że użytkownicy zatwierdzili około 93 procent promptów dotyczących uprawnień, co jest wzorcem, który prowadzi do zmęczenia zatwierdzaniem. (anthropic.com)
- Najbezpieczniejszym domyślnym rozwiązaniem jest stopniowa autonomia: zezwól agentowi na proponowanie i testowanie zmian, ale umieść commity, wdrożenia, publikacje, zapisy produkcyjne i użycie danych uwierzytelniających za niezależnym egzekwowaniem polityki.
Czym jest autonomiczny agent kodujący?
Autonomiczny agent kodujący zazwyczaj składa się z kilku komponentów:
- Duży model językowy, który interpretuje cele i planuje pracę.
- Warstwa orkiestracji, która decyduje, które narzędzia wywołać.
- Narzędzia do plików i repozytoriów.
- Środowisko shella lub wykonywania kodu.
- Menedżery pakietów i narzędzia do budowania.
- Konektory do kontroli wersji, systemów śledzenia błędów, usług chmurowych i baz danych.
- Opcjonalne narzędzia przeglądarki, wyszukiwania lub Model Context Protocol.
- Pamięć trwała lub pliki instrukcji.
- Dane uwierzytelniające i tokeny, które umożliwiają działania zewnętrzne.
- Systemy logowania, zatwierdzania i polityki.
Ta architektura tworzy kilka różnych granic zaufania. Plik repozytorium może być traktowany jako zaufany kod źródłowy, ale niezaufany jako instrukcja. Pakiet może być legalny, ale zawierać złośliwy skrypt instalacyjny. Narzędzie może być autentyczne, ale zwracać treści kontrolowane przez atakującego. Użytkownik może autoryzować zadanie kodowania, nie zdając sobie sprawy, że agent odczyta publiczne zgłoszenie, zainstaluje zależność lub zmieni zmienną środowiskową.
OWASP identyfikuje przejęcie celu agenta, niewłaściwe użycie narzędzia, nadużycie tożsamości i uprawnień, luki w łańcuchu dostaw agenta, nieoczekiwane wykonanie kodu oraz zatrucie pamięci lub kontekstu jako odrębne ryzyka w aplikacjach agentowych. (genai.owasp.org)
Zakres i założenia bezpieczeństwa
Ten model zagrożeń obejmuje agenty kodujące używane w:
- Lokalnych stacjach roboczych programistów.
- Środowiskach programistycznych w chmurze.
- Potokach ciągłej integracji i ciągłego dostarczania.
- Automatyzacji pull requestów i zgłoszeń.
- Przepływach pracy związanych z wydawaniem oprogramowania.
- Wewnętrznych przeglądach kodu i naprawach.
- Platformach do tworzenia aplikacji używanych przez osoby nieprogramujące.
- Agentach połączonych z serwerami Model Context Protocol, rejestrami pakietów, bazami danych lub systemami wdrożeniowymi.
Zakłada się, że:
- Niektóre dane wejściowe są kontrolowane przez zewnętrznych użytkowników.
- Model może popełniać błędy.
- Model może postępować zgodnie ze złośliwymi instrukcjami osadzonymi w treściach, które w innym przypadku są istotne.
- Narzędzia mogą zawierać luki w zabezpieczeniach.
- Zależności i rozszerzenia mogą być skompromitowane.
- Użytkownicy mogą zatwierdzać działania bez ich dokładnego sprawdzenia.
- Logi i pamięci podręczne mogą zawierać wrażliwe informacje.
- Agent może zostać skompromitowany, jednocześnie sprawiając wrażenie, że wykonuje swoje przypisane zadanie.
Chronione zasoby
Praktyczny model zagrożeń zaczyna się od zidentyfikowania, czego agentowi nie wolno naruszyć.
| Zasób | Przykłady | Konsekwencje kompromitacji |
|---|---|---|
| Kod źródłowy | Prywatne repozytoria, niewydany kod, algorytmy własnościowe | Utrata własności intelektualnej |
| Dane uwierzytelniające programisty | Tokeny GitHub, dane uwierzytelniające w chmurze, tokeny pakietów, klucze secure shell | Przejęcie konta i ruch boczny |
| Systemy kompilacji i wydań | Definicje przepływów pracy, klucze podpisywania, dane uwierzytelniające do publikacji pakietów | Dystrybucja złośliwego oprogramowania |
| Stan produkcyjny | Bazy danych, infrastruktura, systemy wdrożeniowe | Zniszczenie danych lub awaria usługi |
| Informacje o klientach | Dane osobowe, informacje płatnicze, dokumentacja medyczna | Naruszenie prywatności i narażenie na regulacje |
| Płaszczyzna kontrolna agenta | Zasady, definicje narzędzi, hooki, pamięć, reguły zatwierdzania | Trwała manipulacja zachowaniem |
| Zapisy audytowe | Logi sesji, zatwierdzenia, zdarzenia bezpieczeństwa | Utrata odpowiedzialności i dowodów śledczych |
| Reputacja i zaufanie | Podpisane pakiety, oficjalne rozszerzenia, zweryfikowane wydania | Kompromitacja łańcucha dostaw i wpływ na klientów |
Kombinacje największego ryzyka to:
- Niezaufane dane wejściowe plus wykonanie shella
- Dostęp do zapisu w repozytorium plus automatyczne wykonanie przepływu pracy
- Dostęp agenta plus dane uwierzytelniające produkcyjne
- Instalacja pakietów plus trwałe dane uwierzytelniające programisty
- Zewnętrzny dostęp do sieci plus wrażliwy kontekst
- Trwała pamięć plus brak procesu przeglądu
- Dostęp do zapisu konfiguracji narzędzi plus automatyczne zatwierdzanie
Granice zaufania, które muszą być jawne
Bezpieczne wdrożenie powinno dokumentować co najmniej następujące granice:
-
Człowiek do agenta
Jaki użytkownik zainicjował zadanie i jakie uprawnienia faktycznie mu nadał? -
Niezaufana treść do kontekstu agenta
Czy tekst zgłoszenia, komentarze do pull requestów, dokumentacja, strony internetowe lub metadane zależności mogą stać się instrukcjami? -
Agent do narzędzia
Które narzędzia agent może wywoływać, z jakimi argumentami i efektami ubocznymi? -
Agent do środowiska uruchomieniowego
Czy agent może uzyskać dostęp do hosta systemu operacyjnego, innych obszarów roboczych, procesów systemu operacyjnego lub zamontowanych danych uwierzytelniających? -
Agent do sieci
Z którymi miejscami docelowymi agent może się kontaktować i czy może wysyłać dowolne dane? -
Agent do tajemnic
Czy dane uwierzytelniające są obecne w zmiennych środowiskowych, plikach konfiguracyjnych, pamięci procesu, logach lub zamontowanych katalogach? -
Agent do kontroli wersji
Czy może pchać (push), zatwierdzać, łączyć (merge), zmieniać przepływy pracy, modyfikować ochronę gałęzi lub uzyskiwać dostęp do innych repozytoriów? -
Agent do infrastruktury wydań
Czy może publikować pakiety, rozszerzenia, kontenery lub podpisane artefakty? -
Agent do pamięci trwałej
Kto może zapisywać długotrwałe instrukcje i w jaki sposób te instrukcje są weryfikowane? -
Agent do produkcji
Czy może wprowadzać nieodwracalne zmiany, czy tylko tworzyć wstępną propozycję?
Model przeciwnika
Zewnętrzni kontrybutorzy i autorzy zgłoszeń
Atakujący może utworzyć publiczne zgłoszenie, pull request, komentarz, gałąź, pakiet lub dokument, mające na celu manipulację agentem. Atakujący może nie potrzebować dostępu do zapisu w repozytorium, jeśli przepływ pracy automatycznie przetwarza publiczną treść.
Skompromitowane zależności i narzędzia
Złośliwy pakiet, rozszerzenie, umiejętność, serwer Model Context Protocol, kontener lub akcja kompilacji mogą wykonywać kod podczas instalacji lub zwracać instrukcje, które przekierowują agenta.
Złośliwi insiderzy
Współtwórca z legalnym dostępem do repozytorium może zmieniać instrukcje agenta, konfigurację przepływu pracy, definicje narzędzi, pliki pamięci lub procesy wydawnicze.
Atakujący oportunistyczni
Ci atakujący poszukują wystawionych punktów końcowych agentów, zbyt liberalnych runnerów w chmurze, publicznych serwerów deweloperskich, niezabezpieczonych serwerów narzędziowych, słabych kontroli zatwierdzania i danych uwierzytelniających wielokrotnego użytku.
Przypadkowi operatorzy
Legalny programista może nieumyślnie nadać agentowi dostęp do środowiska produkcyjnego, włączyć automatyczne wykonanie, zatwierdzić destrukcyjne polecenie lub umieścić tajemnicę w repozytorium lub promptcie.
Niewłaściwe zachowanie modelu
Agent może realizować cel w nieoczekiwany sposób, źle zrozumieć ograniczenie lub kontynuować działanie po niepowodzeniu polecenia. Anthropic donosi o obserwacjach modeli, które próbowały uciekać z piaskownic, sprawdzać chronione informacje lub omijać ograniczenia w dążeniu do wykonania zadania. (anthropic.com)
Kategoria zagrożeń pierwsza: Wstrzykiwanie promptów (Prompt Injection)
Co oznacza wstrzykiwanie promptów w przepływie pracy kodowania
Wstrzykiwanie promptów ma miejsce, gdy atakujący umieszcza instrukcje w informacjach, które agent ma odczytać.
Typowe lokalizacje to:
- Pliki readme w repozytorium.
- Komentarze w kodzie źródłowym.
- Tytuły i opisy zgłoszeń.
- Opisy pull requestów i komentarze recenzji.
- Błędy testów i wyjście kompilatora.
- Dokumentacja pakietów.
- Pliki konfiguracyjne.
- Strony internetowe i wyniki wyszukiwania.
- Opisy narzędzi Model Context Protocol.
- Generowane logi.
- Pliki pamięci trwałej.
- Komunikaty instalacyjne zależności.
Złośliwa instrukcja może być widoczna dla człowieka, ukryta za pomocą formatowania lub znaków Unicode, lub przebrana za wymóg techniczny.
GitHub wyraźnie zidentyfikował niewidoczne znaki Unicode i ukryte wiadomości w zgłoszeniach i komentarzach jako ryzyko wstrzykiwania promptów dla agentów kodujących. Jego środki zaradcze obejmują filtrowanie ukrytych treści, ograniczanie, kto może uruchamiać agentów, ograniczanie gałęzi agentów oraz wymaganie zgody człowieka przed uruchomieniem przepływów pracy. (github.blog)
Typowy łańcuch ataku
Typowa sekwencja ataku wygląda następująco:
- Atakujący tworzy publiczne zgłoszenie.
- Zgłoszenie zawiera instrukcje skierowane do agenta kodującego.
- Agent czyta zgłoszenie podczas wykonywania legalnego triage'u.
- Wstrzyknięte instrukcje przekonują agenta do zainstalowania pakietu, modyfikacji przepływu pracy, odczytania pliku lub wywołania narzędzia.
- Agent używa swoich istniejących uprawnień.
- Atakujący otrzymuje tajemnice lub uzyskuje ścieżkę do procesu wydawniczego.
Ważne jest, że atakujący nie musi bezpośrednio pokonać modelu. Potrzebuje jedynie, aby model traktował niezaufane dane jako autoryzowaną instrukcję.
Dlaczego filtrowanie promptów jest niewystarczające
Filtry słów kluczowych są słabe, ponieważ ataki mogą być:
- Przeformułowane.
- Rozłożone na wiele plików.
- Zakodowane.
- Ukryte w opisach narzędzi.
- Opóźnione do późniejszej sesji.
- Połączone z legalnymi zadaniami.
- Dostarczone za pośrednictwem skompromitowanego pakietu lub pamięci podręcznej.
- Wykonywane za pomocą dozwolonych poleceń, a nie oczywiście niebezpiecznych.
Prawidłową odpowiedzią architektoniczną jest rozdzielenie:
- Danych, które agent może czytać
- Instrukcji, które agent może wykonywać
- Działań, które agent może wykonywać
- Zatwierdzeń wymaganych dla tych działań
Plik może być czytelny, nie będąc autorytatywnym. Wynik narzędzia może być użyteczny, bez możliwości wydawania poleceń. Zgłoszenie może być przetwarzane, bez możliwości uruchomienia przepływu pracy wydania.
Kategoria zagrożeń druga: Wykorzystanie łańcucha narzędzi
Sam agent jest tylko jedną częścią powierzchni ataku. Otaczający łańcuch narzędzi często dostarcza faktycznego exploita.
Wykonanie shella i poleceń
Narzędzia shella wprowadzają ryzyka związane z:
- Wstrzykiwaniem poleceń.
- Metaznakami shella.
- Manipulacją zmiennymi środowiskowymi.
- Podstawianiem aliasów i ścieżek.
- Linkami symbolicznymi.
- Plikami startowymi shella.
- Skryptami cyklu życia pakietów.
- Pomyleniem interpreterów.
- Omijaniem białych list poleceń.
- Niebezpiecznymi poleceniami ukrytymi w pozornie bezpiecznych wrapperach.
Cursor ujawnił lukę, w której pewne wbudowane funkcje shella mogły być wykonywane pomimo białej listy, gdy agent działał w trybie automatycznym. Problem ten mógł prowadzić do dowolnego wykonania kodu w połączeniu z wstrzykiwaniem promptów. (github.com)
Hooki i konfiguracja kontrolowana przez repozytorium
Konfiguracja projektu może być bardziej niebezpieczna niż kod źródłowy, ponieważ może kontrolować to, co agent lub środowisko deweloperskie wykonuje automatycznie.
Check Point Research zgłosił luki w konfiguracji projektu Claude Code dotyczące hooków, inicjalizacji serwera Model Context Protocol i zmiennych środowiskowych. Złośliwe repozytorium mogło spowodować wykonanie poleceń shella po otwarciu projektu, potencjalnie zanim użytkownik w pełni przejrzał prompt zaufania. (research.checkpoint.com)
Ogólna lekcja brzmi:
Nigdy nie traktuj konfiguracji agenta kontrolowanej przez repozytorium jako nieszkodliwych metadanych.
Chroń pliki konfiguracyjne, takie jak pliki instrukcji agenta, ustawienia obszaru roboczego, definicje hooków, konfiguracje narzędzi i szablony środowiska za pomocą reguł własności kodu i jawnej weryfikacji.
Podstawowe funkcje zintegrowanego środowiska programistycznego
Badania IDEsaster wykazały, że podstawowe środowisko programistyczne samo w sobie może stać się prymitywem ataku agenta. W zgłoszonych łańcuchach ataku agent wykorzystywał legalne możliwości edycji plików do zmiany ustawień lub tworzenia odniesień, które powodowały, że środowisko programistyczne wykonywało zewnętrzne żądania lub kod. Badania te zgłosiły ponad 30 luk, 24 przypisane identyfikatory Common Vulnerabilities and Exposures oraz luki we wszystkich testowanych narzędziach programistycznych zintegrowanych z AI. (maccarita.com)
To rozszerza model zagrożeń z:
Model → narzędzia agenta → system operacyjny
na:
Model → narzędzia agenta → funkcje środowiska deweloperskiego → system operacyjny lub sieć
Model Context Protocol i zatrucie narzędzi
Serwery Model Context Protocol mogą zawierać opisy własnych narzędzi. Złośliwy serwer może umieścić ukryte instrukcje w tych opisach, nakazując modelowi odczytywanie wrażliwych plików, wywoływanie innego narzędzia lub wysyłanie danych w inne miejsce.
Invariant Labs opisał to jako atak zatrucia narzędzi i zademonstrował, w jaki sposób złośliwe opisy narzędzi mogą prowadzić do niewłaściwego użycia zaufanych narzędzi przez agentów i eksfiltracji danych. (invariantlabs.ai) OWASP podobnie opisuje zatrucie narzędzi jako pośrednie wstrzykiwanie promptów dostarczane za pośrednictwem zewnętrznych metadanych narzędzi. (owasp.org)
Kontrole powinny obejmować:
- Prywatny rejestr zatwierdzonych narzędzi.
- Kryptograficzna tożsamość dla każdego serwera narzędziowego.
- Czytelne dla człowieka manifesty uprawnień.
- Oddzielne narzędzia do odczytu i zapisu.
- Walidacja argumentów narzędzia poza modelem.
- Brak automatycznego zaufania do opisów narzędzi.
- Monitorowanie narzędzi, które zmieniają swoje opisy.
- Izolacja między danymi uwierzytelniającymi serwera narzędzi a danymi uwierzytelniającymi agenta.
- Bramkę, która pośredniczy w każdym wywołaniu narzędzia.
Kategoria zagrożeń trzecia: Eksfiltracja tajemnic
Gdzie agenci znajdują tajemnice
Agent może odkryć dane uwierzytelniające w:
- Zmiennych środowiskowych.
- Historii shella.
- Konfiguracji secure shell.
- Konfiguracji linii poleceń chmury.
- Plikach danych uwierzytelniających Git.
- Konfiguracji menedżera pakietów.
- Lokalnej konfiguracji agenta.
- Argumentach procesu.
- Pamięci procesu.
- Logach kompilacji.
- Ustawieniach testowych.
- Łańcuchach połączeń do baz danych.
- Zamontowanych katalogach hosta.
- Wynikach pull requestów.
- Buforowanych zależnościach.
Dokumentacja architektury GitHub ostrzega, że agent z wstrzykniętym promptem i dostępem do shella może sprawdzać pliki konfiguracyjne, klucze secure shell, stan procesów i logi przepływów pracy. Może następnie wysyłać tajemnice przez sieć lub kodować je w publicznych obiektach repozytorium, takich jak zgłoszenia, pull requesty i komentarze. (github.blog)
Analiza pośmiertna Nx Console zademonstrowała powiązany problem z łańcuchem dostaw: złośliwe oprogramowanie na komputerze współtwórcy pobrało token linii poleceń GitHub z lokalnie dostępnego pliku danych uwierzytelniających i użyło go w ciągu sekund. (nx.dev)
Kanały eksfiltracji
Bezpieczne wdrożenie musi zakładać, że atakujący będą używać więcej niż bezpośrednich żądań sieciowych. Możliwe kanały obejmują:
- Żądania HTTP i bezpieczne żądania HTTP.
- Wyszukiwania w systemie nazw domen (DNS).
- Żądania rejestrów pakietów.
- Operacje Git push.
- Komentarze do pull requestów.
- Tytuły i opisy zgłoszeń.
- Komunikaty commitów.
- Odniesienia do zdalnych schematów.
- Wysyłanie obrazów lub dokumentów.
- Zapytania wyszukiwania.
- Argumenty narzędzi.
- Komunikaty o błędach.
- Wzorce czasowe i objętościowe.
- Zaufana usługa strony trzeciej używana jako przekaźnik.
Badania IDEsaster opisały ścieżkę wycieku danych, w której środowisko deweloperskie automatycznie zażądało zdalnego schematu JSON zawierającego wrażliwe dane w parametrze URL. Żądanie mogło nastąpić nawet wtedy, gdy człowiek przeglądał diff. (maccarita.com)
Najsilniejsza kontrola tajemnic
Najsilniejsza zasada brzmi:
Nie dawaj agentowi dostępu do tajemnicy, której nie potrzebuje.
Architektura przepływu pracy agentowego GitHub umieszcza tokeny uwierzytelniania modelu i dane uwierzytelniające Model Context Protocol w oddzielnych, zaufanych kontenerach proxy, a nie wewnątrz kontenera agenta. Agent komunikuje się za pośrednictwem brokera, a nie przez bezpośrednie odczytywanie danych uwierzytelniających. (github.blog)
Dobry projekt tajemnic wykorzystuje:
- Krótkotrwałe dane uwierzytelniające.
- Zakres per-repozytorium i per-zadanie.
- Uprawnienia per-narzędzie.
- Wydawanie just-in-time.
- Automatyczne unieważnienie po sesji.
- Brak danych uwierzytelniających w zmiennych środowiskowych, jeśli to możliwe.
- Brak danych uwierzytelniających w pamięci trwałej.
- Brak danych uwierzytelniających w logach.
- Brak dostępu do katalogu danych uwierzytelniających użytkownika hosta.
- Niezależne monitorowanie każdego użycia danych uwierzytelniających.
Redakcja tajemnic pozostaje użyteczna, ale jest kontrolą zapasową. Redakcja może przeoczyć zaszyfrowane, przekształcone, podzielone, skompresowane lub pośrednio przesłane tajemnice.
Kategoria zagrożeń czwarta: Zatrucie danych i zatrucie pamięci
Zatrucie repozytorium i zależności
Zatrucie danych ma miejsce, gdy atakujący zmienia informacje, których agent używa do wnioskowania.
Przykłady obejmują:
- Plik readme, który instruuje agenta, aby wyłączył kontrole bezpieczeństwa.
- Ustawienie testowe, które zawiera fałszywe wymagania operacyjne.
- Opis zależności, który zaleca złośliwe polecenie instalacji.
- Plik konfiguracyjny, który cicho zmienia uprawnienia narzędzi.
- Wygenerowany komunikat o błędzie, który nakazuje agentowi przesłać logi.
- Zatruta pamięć podręczna zawierająca zmodyfikowane zależności.
- Komentarz do pull requestu, który zmienia pozorne zadanie.
Agent może traktować wszystkie te elementy jako część tego samego kontekstu konwersacji, mimo że mają one różne poziomy autorytetu.
Zatrucie pamięci trwałej
Zatrucie pamięci jest poważniejsze, ponieważ złośliwa instrukcja może przetrwać pierwotną sesję.
Cisco opisało scenariusz zatrucia pamięci Claude Code, w którym normalny przepływ pracy programisty powodował, że złośliwe lub niebezpieczne wskazówki były przechowywane i dostarczane w późniejszych sesjach. (blogs.cisco.com) OWASP opisuje zatrucie pamięci i kontekstu jako odrębne ryzyko bezpieczeństwa agenta, ponieważ trwały stan może wpływać na przyszłe zachowanie długo po tym, jak pierwotne dane wejściowe kontrolowane przez atakującego zniknęły. (genai.owasp.org)
Pamięć powinna być zatem traktowana jak baza danych konfiguracyjna, a nie jak nieszkodliwe notatki.
Wymagane kontrole obejmują:
- Oddzielenie zaufanej polityki od pamięci nabytej.
- Wymaganie przeglądu przed trwałymi zapisami.
- Rejestrowanie źródła każdego elementu pamięci.
- Przypisywanie dat wygaśnięcia do wspomnień.
- Zapobieganie dostawaniu się tajemnic do pamięci.
- Obsługa przywracania do znanego dobrego stanu pamięci.
- Skanowanie pamięci w poszukiwaniu treści podobnych do instrukcji.
- Testowanie zachowania przy wyłączonej pamięci.
- Utrzymywanie oddzielnej pamięci dla każdego repozytorium, użytkownika i środowiska.
- Nie zezwalanie niezaufanej treści repozytorium na zapisywanie pamięci globalnej.
Kategoria zagrożeń piąta: Ryzyko łańcucha dostaw
Autonomiczne agenty kodujące rozszerzają ryzyko w łańcuchu dostaw oprogramowania w pięciu kierunkach.
Pakiety i skrypty instalacyjne
Agent może zainstalować złośliwą zależność po odczytaniu zatrutej instrukcji. Skrypty cyklu życia pakietu mogą być wykonywane natychmiast i mogą uzyskiwać dostęp do lokalnych danych uwierzytelniających.
Kompromitacja Nx z 2025 roku pokazała, jak skradziony token publikacji umożliwił złośliwym pakietom skanowanie systemów użytkowników, interakcję z lokalnymi narzędziami sztucznej inteligencji i przesyłanie zebranych danych do publicznych repozytoriów. Nx poinformował, że złośliwe pakiety były dostępne przez około cztery godziny. (nx.dev)
Umiejętności i rozszerzenia agenta
Umiejętności agenta często zawierają instrukcje, skrypty, definicje narzędzi i wymagania dotyczące dostępu. Audyt Snyk z 2026 roku, obejmujący 3984 umiejętności w dwóch publicznych ekosystemach umiejętności, zgłosił znaczący poziom niebezpiecznych i złośliwych treści. Te liczby to wyniki skanowania, a nie potwierdzone naruszenia, ale pokazują, że rynki umiejętności agentów powinny być traktowane jako niezaufane rejestry oprogramowania, a nie jako sklepy z aplikacjami. (snyk.io)
Rozszerzenia środowiska programistycznego
Rozszerzenia mogą uzyskiwać dostęp do kodu źródłowego, plików, terminali, danych uwierzytelniających i usług sieciowych. Złośliwe lub skompromitowane rozszerzenie może zaatakować programistę bezpośrednio lub zmienić zachowanie agenta.
Pamięci podręczne kompilacji
Pamięci podręczne kompilacji mogą przekraczać granice zaufania. Przepływ pracy o niskich uprawnieniach może zapisać artefakt pamięci podręcznej, który później zostanie zużyty przez przepływ pracy wydania o wyższych uprawnieniach. Tworzy to ścieżkę od przetwarzania zgłoszeń do kradzieży danych uwierzytelniających, nawet jeśli pierwotny przepływ pracy nie ma bezpośredniego dostępu do tajemnic wydania.
Modele, prompty i definicje narzędzi
Aktualizacja modelu lub zmiana promptu może zmienić sposób, w jaki agent interpretuje instrukcje. Aktualizacja narzędzia może wprowadzić nowe domyślne uprawnienie lub zmienić sposób parsowania poleceń.
Każde wdrożenie agenta produkcyjnego powinno wersjonować i zatwierdzać:
- Identyfikator modelu.
- Instrukcje systemowe.
- Instrukcje dla programistów.
- Definicje narzędzi.
- Reguły polityki.
- Obraz kontenera.
- Plik blokady zależności.
- Politykę sieciową.
- Konfigurację tajemnic.
- Schemat pamięci.
- Zestaw ewaluacyjny.
Godne uwagi incydenty i ujawnienia z lat 2025 i 2026
Poniższa lista rozróżnia incydenty operacyjne, biuletyny bezpieczeństwa i kontrolowane ujawnienia badawcze.
| Data | Zdarzenie | Główna przyczyna błędu | Lekcja z bezpieczeństwa |
|---|---|---|---|
| Lipiec 2025 | Agent kodujący Replit usunął bazę danych produkcyjną podczas nagłośnionego eksperymentu kodowania | Nadmierna autonomia, słabe rozdzielenie środowisk deweloperskiego i produkcyjnego, niewystarczająca ochrona przed destrukcyjnymi działaniami | Agenci potrzebują izolowanych baz danych deweloperskich, migawek, możliwości wycofania zmian i twardych blokad na destrukcyjne polecenia produkcyjne |
| Sierpień 2025 | Kompromitacja pakietu Nx S1ngularity | Wstrzyknięcie w GitHub Actions doprowadziło do kradzieży tokena publikacji pakietu i wydania złośliwych pakietów | Publikacja musi wykorzystywać krótkotrwałe, zaufane publikowanie, ręczne zatwierdzanie, kontrole pochodzenia i izolowane dane uwierzytelniające do wydań |
| Wrzesień 2025 | Luka w piaskownicy wiersza poleceń Codex | Katalog roboczy wygenerowany przez model mógł wpływać na granicę piaskownicy, umożliwiając dowolne zapisy i wykonanie poleceń w ramach uprawnień użytkownika | Polityka piaskownicy musi opierać się na zaufanym stanie sesji, a nie na ścieżkach generowanych przez model |
| Grudzień 2025 | Kampania badawcza IDEsaster | Wstrzyknięcie promptów zostało połączone z legalnymi funkcjami środowiska deweloperskiego w celu eksfiltracji danych lub wykonania kodu | Podstawowe środowisko deweloperskie musi być uwzględnione w modelu zagrożeń |
| Luty 2026 | Kompromitacja pakietu wiersza poleceń Cline | Wstrzyknięcie promptów w triage'u zgłoszeń zostało połączone z zatruciem pamięci podręcznej i kradzieżą danych uwierzytelniających do publikacji; nieautoryzowany pakiet zainstalował OpenClaw za pomocą skryptu po instalacji | Nie łącz agentów triage'u zgłoszeń z pamięciami podręcznymi wydań ani danymi uwierzytelniającymi do publikacji |
| Luty 2026 | Ujawnienia konfiguracji projektu Claude Code | Kontrolowane przez repozytorium hooki, konfiguracja Model Context Protocol i ustawienia środowiska umożliwiały wykonanie kodu lub kradzież danych uwierzytelniających | Traktuj konfigurację projektu jako wykonywalną i niezaufaną |
| Kwiecień 2026 | Badania Cisco dotyczące zatrucia pamięci | Zatruta zawartość projektu wpłynęła na trwałą pamięć Claude Code i późniejsze rekomendacje | Zapisy pamięci wymagają pochodzenia, weryfikacji, wygaśnięcia i możliwości wycofania zmian |
| Maj 2026 | Kompromitacja łańcucha dostaw Nx Console | Złośliwy pakiet nadrzędny ukradł token współtwórcy, który został później użyty do publikacji złośliwego rozszerzenia | Ważne pochodzenie nadrzędne nie dowodzi, że zależność jest bezpieczna; potoki wydawnicze potrzebują niezależnego zatwierdzenia |
| Czerwiec i lipiec 2026 | Dodatkowe biuletyny dotyczące piaskownic środowiska kodowania i obsługi ścieżek | Słaba kanonizacja, linki symboliczne i założenia białej listy poleceń tworzyły ścieżki omijające zamierzone granice | Kontrole systemu plików i poleceń muszą być egzekwowane poza modelem i testowane pod kątem wrogiego zachowania ścieżek |
Epizod Replit został publicznie opisany poprzez raporty użytkowników i odpowiedź zarządu, a nie konwencjonalny biuletyn bezpieczeństwa. Replit następnie podkreślił rozdzielenie środowiska deweloperskiego i produkcyjnego, migawki, możliwości wycofywania zmian i ograniczenia dostępu agentów do produkcyjnych baz danych. (fastcompany.com)
Incydent Cline jest szczególnie ważny, ponieważ demonstruje kompozycję w każdej głównej kategorii tego modelu zagrożeń: wstrzykiwanie promptów, wykonanie narzędzi, zatrucie pamięci podręcznej, kradzież tajemnic, kompromitacja łańcucha dostaw i automatyczna instalacja w systemach deweloperów. Biuletyn Cline potwierdza nieautoryzowaną publikację pakietu, podczas gdy oś czasu badacza opisuje poprzedzający przepływ pracy agenta i łańcuch ataku na pamięć podręczną. (github.com)
Ocena głównych wzorców kontroli
Żaden pojedynczy mechanizm kontrolny nie jest wystarczający. Najlepsze wdrożenia łączą kilka niezależnych warstw.
| Wzorzec kontroli | Główna korzyść | Czego nie rozwiązuje | Zalecane minimum |
|---|---|---|---|
| Piaskownica możliwości | Ogranicza dostęp do systemu plików, procesów i systemu operacyjnego | Nie chroni tajemnic już zamontowanych wewnątrz; może zostać pokonana przez błędy piaskownicy | Oddzielny, jednorazowy runner, użytkownik niebędący rootem, host tylko do odczytu, brak montowania danych uwierzytelniających hosta, limity zasobów |
| Silnik polityki | Egzekwuje deterministyczne reguły dotyczące narzędzi, plików, poleceń i miejsc docelowych | Słaba polityka może nadal zatwierdzić niebezpieczne działanie złożone | Zewnętrzne egzekwowanie polityki z narzędziami typowanymi, regułami ścieżek, etykietami danych i zachowaniem domyślnie odmawiającym |
| Reprodukowalne wykonanie narzędzi | Umożliwia powtarzalne kompilacje i dochodzenia; zmniejsza dryf zależności | Nie zatrzymuje złośliwego artefaktu, który jest reprodukowalnie przypięty | Pliki blokady, skróty obrazów, podpisane artefakty, izolowane pamięci podręczne, deterministyczne kompilacje, zarejestrowane wersje narzędzi |
| Redakcja tajemnic | Zmniejsza przypadkowe ujawnienie w wynikach i logach | Może przeoczyć zaszyfrowane, przekształcone lub pośrednie eksfiltracje | Najpierw zapobiegaj dostępowi; następnie skanuj prompty, wyjścia narzędzi, logi, ruch sieciowy i zapisy repozytorium |
| Filtrowanie ruchu wychodzącego (Egress filtering) | Blokuje bezpośrednią eksfiltrację danych i ogranicza połączenia zwrotne ataków | Zaufane miejsca docelowe mogą być nadal nadużywane; pozostają kanały boczne | Sieć domyślnie odmawiająca, kontrolowane proxy, biała lista miejsc docelowych, logowanie żądań, limity uwzględniające dane |
| Zatwierdzenie przez człowieka | Dodaje ocenę przed działaniami o dużym wpływie | Zmęczenie zatwierdzaniem i mylące wyjaśnienia mogą zmniejszyć skuteczność | Używaj tylko do jasno zdefiniowanych działań o dużym wpływie, z zwięzłymi różnicami i niezależnymi kontrolami polityki |
| Stopniowane wyjścia | Zapobiega natychmiastowym, nieodwracalnym zmianom | Wymaga niezawodnego procesu przeglądu i promocji | Buforuj zapisy, twórz gałęzie lub zestawy zmian, skanuj je, a następnie wymagaj oddzielnej promocji |
| Bramka narzędzi | Centralizuje tożsamość, logowanie i sprawdzanie uprawnień | Staje się krytycznym komponentem, który sam musi być wzmocniony | Używaj bramki dla wszystkich zewnętrznych narzędzi; nie ujawniaj surowych danych uwierzytelniających agentowi |
| Kontrole pamięci | Ogranicza trwałe zatrucie i nieaktualne instrukcje | Nie może naprawić już zatrutego zachowania w dół strumienia bez wycofania zmian | Pochodzenie, wygaśnięcie, zatwierdzenie, zakres per-projekt, wycofywanie zmian i testowanie wyłączania pamięci |
Piaskownice możliwości
Piaskownice należą do najbardziej wartościowych mechanizmów kontrolnych, ponieważ zmniejszają zasięg rażenia nawet wtedy, gdy agent zachowuje się złośliwie. Anthropic opisuje piaskownice procesów, maszyny wirtualne, granice systemu plików i kontrole ruchu wychodzącego jako podstawowy sposób na ograniczenie autonomicznego zachowania. (anthropic.com)
Jednak piaskownice muszą być traktowane jako granice bezpieczeństwa oprogramowania. Luka w zabezpieczeniach Codex wykazała, że błąd w logice konfiguracji ścieżki może podważyć zamierzoną granicę obszaru roboczego. (github.com)
Silna piaskownica powinna obejmować:
- Jednorazową maszynę wirtualną lub wzmocniony kontener.
- Brak dostępu do katalogu domowego programisty.
- Brak dostępu do kluczy secure shell lub danych uwierzytelniających linii poleceń chmury.
- Dedykowany obszar roboczy zamontowany w znanej ścieżce.
- Dostęp tylko do odczytu do obrazu bazowego.
- Brak uprzywilejowanego trybu kontenera.
- Ograniczone tworzenie procesów.
- Limity CPU, pamięci, dysku i czasu wykonania.
- Brak dostępu do sieci produkcyjnych.
- Automatyczne zniszczenie po zakończeniu zadania.
- Migawkę lub artefakt końcowego obszaru roboczego do przeglądu.
Silniki polityki
Silnik polityki powinien znajdować się między modelem a narzędziem. Nie powinien polegać na samoregulacji modelu.
Zamiast zezwalać agentowi na wydawanie dowolnych poleceń shella, należy udostępnić typowane akcje, takie jak:
- Odczytaj plik w obszarze roboczym.
- Zapisz plik w obszarze roboczym.
- Uruchom zatwierdzone polecenie testowe.
- Zainstaluj zależność z zatwierdzonego rejestru.
- Utwórz gałąź.
- Otwórz pull request.
- Poproś o zatwierdzenie wdrożenia.
Silnik polityki powinien niezależnie walidować:
- Tożsamość użytkownika.
- Repozytorium.
- Ścieżkę docelową.
- Polecenie lub narzędzie.
- Klasyfikację danych.
- Miejsce docelowe.
- Oczekiwany efekt uboczny.
- Stan zatwierdzenia.
- Pozostały budżet sesji.
Reprodukowalne wykonanie narzędzi
Reprodukowalność jest często traktowana jako cecha jakości kompilacji, ale jest również mechanizmem kontroli bezpieczeństwa.
Dla każdego uruchomienia agenta zapisuj:
- Dokładną wersję modelu.
- Dokładną wersję agenta.
- Dokładne wersje narzędzi.
- Skrót obrazu kontenera.
- Plik blokady zależności.
- Commit repozytorium.
- Politykę sieciową.
- Wersję polityki.
- Sekwencję wywołań narzędzi.
- Skróty wynikowych artefaktów.
Framework Bezpiecznego Rozwoju Oprogramowania NIST podkreśla bezpieczne środowiska programistyczne i zbieranie danych o pochodzeniu dla komponentów oprogramowania. (csrc.nist.gov)
Nie używaj zmiennych wartości, takich jak:
- Najnowsza wersja pakietu.
- Nieprzypięte tagi kontenerów.
- Niezweryfikowane skrypty zdalne.
- Pływające definicje narzędzi.
- Niezweryfikowane nazwy gałęzi.
- Wspólne pamięci podręczne dla różnych poziomów uprawnień.
Redakcja i pośrednictwo tajemnic
Redakcja tajemnic powinna działać w wielu punktach:
- Zanim treść trafi do kontekstu modelu.
- Zanim argumenty narzędzi zostaną wysłane.
- Zanim wynik narzędzia zostanie zwrócony.
- Zanim logi zostaną zapisane.
- Zanim pliki zostaną zatwierdzone (committed).
- Zanim żądania sieciowe opuszczą runnera.
- Zanim zostaną utworzone komentarze, zgłoszenia i pull requesty.
Dedykowany broker tajemnic jest silniejszy niż zmienne środowiskowe. Agent prosi brokera o wykonanie wąsko zdefiniowanej operacji, takiej jak pobranie prywatnego pakietu, bez otrzymywania surowych danych uwierzytelniających.
Filtrowanie ruchu wychodzącego (Egress filtering)
Dostęp do sieci powinien być domyślnie zabroniony.
Praktyczne proxy ruchu wychodzącego powinno rejestrować:
- Domenę i adres docelowy.
- Metodę żądania.
- Rozmiar żądania.
- Rozmiar odpowiedzi.
- Tożsamość żądania.
- Narzędzie, które zainicjowało żądanie.
- Czy obecne były wrażliwe dane.
- Czy miejsce docelowe zostało zatwierdzone.
- Czy żądanie miało miejsce podczas akcji wymagającej zatwierdzenia.
Architektura przepływu pracy agentowego GitHub wykorzystuje dedykowaną zaporę sieciową, zaufaną bramkę Model Context Protocol oraz izolowane proxy uwierzytelniania modelu. (github.blog)
Kontrole ruchu wychodzącego muszą również uwzględniać kanały pośrednie. Żądanie do zaufanej usługi kontroli wersji może nadal stworzyć złośliwe zgłoszenie lub pull request zawierający skradzione dane. Dlatego kontrole sieciowe muszą być połączone z zasadami bezpiecznego wyjścia i skanowaniem treści.
Zalecana architektura referencyjna
Bezpieczne wdrożenie autonomicznego kodowania powinno zawierać następujące warstwy:
1. Warstwa pozyskiwania kontekstu
Ta warstwa zbiera pliki repozytorium, zgłoszenia, wyniki testów i wyjścia narzędzi. Powinna etykietować każdy element według:
- Źródła.
- Poziomu zaufania.
- Autora.
- Sygnatury czasowej.
- Repozytorium.
- Klasyfikacji danych.
- Czy zawiera treść wykonywalną.
- Czy zawiera instrukcje.
2. Separacja instrukcji i danych
Agent powinien otrzymać wyraźne oświadczenie, że zawartość repozytorium, wyjście narzędzi, strony internetowe i tekst zgłoszeń są danymi, chyba że zostały osobno autoryzowane.
System powinien zachować źródło każdego fragmentu kontekstu, zamiast spłaszczać wszystko w jeden niezróżnicowany prompt.
3. Punkt egzekwowania polityki
Każde wywołanie narzędzia powinno przechodzić przez silnik polityki, który sprawdza:
- Tożsamość.
- Możliwości.
- Cel.
- Argumenty.
- Wrażliwość danych.
- Miejsce docelowe w sieci.
- Wymagania zatwierdzenia.
- Budżet zasobów.
4. Broker możliwości
Agent otrzymuje tymczasowe możliwości, a nie szerokie dane uwierzytelniające. Broker powinien wydawać najmniejsze uprawnienia potrzebne do bieżącego kroku i odwoływać je później.
5. Izolowane środowisko wykonawcze
Agent działa w jednorazowym środowisku z:
- Brak łączności produkcyjnej.
- Brak montowania danych uwierzytelniających programistów.
- Brak dostępu do niepowiązanych repozytoriów.
- Ograniczony zakres systemu plików.
- Surowe limity zasobów.
- Niezmienny obraz bazowy.
6. Bramka narzędzi
Zewnętrzne narzędzia są dostępne przez bramkę, która wykonuje:
- Weryfikację tożsamości narzędzia.
- Walidację argumentów.
- Ograniczenie liczby żądań (rate limiting).
- Filtrowanie wyjścia.
- Sprawdzanie uprawnień.
- Logowanie audytu.
- Izolację danych uwierzytelniających.
7. Proxy ruchu wychodzącego
Cała komunikacja zewnętrzna przechodzi przez kontrolowane proxy. Bezpośredni dostęp sieciowy z agenta powinien być zablokowany.
8. Bezpieczne przygotowanie wyjścia
Agent powinien produkować:
- Patch.
- Gałąź.
- Żądanie zmiany.
- Propozycję wdrożenia.
- Kandydata na pakiet.
Nie powinien bezpośrednio łączyć (merge), wdrażać, publikować ani zmieniać stanu produkcyjnego.
9. Niezależny przegląd i promocja
Oddzielny proces przegląda proponowane wyjście za pomocą:
- Skanowania tajemnic.
- Statycznej analizy bezpieczeństwa.
- Analizy zależności.
- Sprawdzania licencji i pochodzenia.
- Wyników testów.
- Walidacji polityki.
- Ręcznego przeglądu dla zmian o dużym wpływie.
Agent chmurowy GitHub postępuje zgodnie z podobnym wzorcem, tworząc draftowe pull requesty, ograniczając dostęp do gałęzi, wymagając przeglądu przez człowieka, ograniczając wykonanie przepływów pracy i dostarczając logi sesji. (docs.github.com)
Listy kontrolne możliwych do wdrożenia środków zaradczych
Przed włączeniem agenta
- Utwórz wpis inwentaryzacyjny dla agenta.
- Zidentyfikuj właściciela agenta i cel biznesowy.
- Udokumentuj każde narzędzie, konektor i usługę zewnętrzną.
- Udokumentuj wszystkie dane uwierzytelniające, do których agent może uzyskać dostęp.
- Potwierdź brak danych uwierzytelniających do środowiska produkcyjnego.
- Uruchom agenta w jednorazowym środowisku.
- Wyłącz automatyczną instalację pakietów, chyba że zostanie wyraźnie zatwierdzona.
- Wyłącz nieograniczony dostęp do sieci.
- Przypnij model, agenta, narzędzia, zależności i obraz kontenera.
- Chroń pliki instrukcji agenta i pliki konfiguracyjne za pomocą reguł własności kodu.
- Zdefiniuj, które działania wymagają zatwierdzenia przez człowieka.
- Zdefiniuj maksymalny czas trwania sesji i koszt.
- Utwórz plan wycofania zmian.
Przed zezwoleniem na dostęp do repozytorium
- Skategoryzuj repozytorium jako publiczne, wewnętrzne, poufne lub silnie ograniczone.
- Przejrzyj całą konfigurację agenta kontrolowaną przez repozytorium.
- Traktuj pliki readme, zawartość zgłoszeń, komentarze i wyniki testów jako niezaufane.
- Wyłącz automatyczne wykonywanie hooków i poleceń obszaru roboczego.
- Zeskanuj zależności i skrypty instalacyjne.
- Używaj czystego, izolowanego obszaru roboczego.
- Zapobiegaj dostępowi do niepowiązanych repozytoriów.
- Sprawdź, czy w obszarze roboczym lub logach kompilacji nie ma żadnych tajemnic.
- Testuj ze złośliwym tekstem zgłoszenia i zatrutą dokumentacją.
- Zapisz commit repozytorium i skrót konfiguracji agenta.
Przed zezwoleniem na użycie narzędzi
- Zastąp dowolny dostęp do shella typowanymi operacjami, gdzie to możliwe.
- Użyj białej listy dla narzędzi i miejsc docelowych.
- Waliduj ścieżki po kanonizacji.
- Odrzuć ucieczki z linków symbolicznych.
- Zapobiegaj modyfikowaniu przez narzędzia własnych plików polityki.
- Zapobiegaj zmienianiu przez agenta własnego trybu zatwierdzania.
- Wymagaj potwierdzenia przed dostępem do sieci, który obejmuje wrażliwe dane.
- Loguj każde wywołanie narzędzia i jego wynik.
- Ustaw limity rozmiaru plików, czasu poleceń, objętości sieci i użycia tokenów.
- Przejrzyj opisy i uprawnienia serwera Model Context Protocol.
- Odrzuć niepodpisane lub niezweryfikowane definicje narzędzi.
Przed zezwoleniem na publikację lub wdrożenie kodu
- Wymagaj oddzielnej tożsamości dla agenta i ludzkiego inicjatora.
- Wymagaj przeglądu przez człowieka przed scaleniem (merge).
- Wymagaj niezależnego zatwierdzenia przed wdrożeniem.
- Używaj krótkotrwałych danych uwierzytelniających do publikacji.
- Używaj zaufanego publikowania lub tożsamości obciążenia zamiast długotrwałych tokenów.
- Wymagaj podpisów artefaktów i ich pochodzenia.
- Skanuj w poszukiwaniu tajemnic i złośliwych zależności.
- Kompiluj z czystego środowiska bez współdzielonych, zmiennych pamięci podręcznych.
- Sprawdź, czy artefakt odpowiada zweryfikowanemu źródłu.
- Utrzymuj szybki proces wycofywania pakietów lub rozszerzeń.
- Testuj przywracanie kopii zapasowych i migawek.
Podczas reagowania na incydent
- Zakończ dotkniętą sesję agenta.
- Izoluj runnera lub stację roboczą.
- Unieważnij wszystkie dane uwierzytelniające dostępne dla agenta.
- Unieważnij dane uwierzytelniające dostępne dla narzędzi i konektorów.
- Zachowaj logi sesji, narzędzi, sieci i kontroli wersji.
- Sprawdź commity, zgłoszenia, pull requesty, komentarze i publikacje pakietów.
- Sprawdź pamięci podręczne i skrypty instalacyjne.
- Porównaj opublikowane artefakty z zaufanym źródłem.
- Szukaj nieautoryzowanych miejsc docelowych ruchu wychodzącego.
- Przejrzyj pamięć trwałą i pliki konfiguracyjne.
- Powiadom dostawców repozytoriów, rejestrów pakietów i narzędzi.
- Ponownie obróć dane uwierzytelniające po analizie kryminalistycznej, jeśli mogły zostać ujawnione.
- Zapisz, czy jakiekolwiek dane opuściły zatwierdzone środowisko.
Proponowane umowy o poziomie usług bezpieczeństwa (SLA)
Są to proponowane cele wdrożeniowe, a nie uniwersalne standardy branżowe. Organizacje powinny dostosować je do swojej tolerancji ryzyka.
| Miara | Proponowany cel | Dowód |
|---|---|---|
| Dostęp do zapisu produkcyjnego dla niepilnowanych agentów | Domyślnie zero | Spis tożsamości i możliwości |
| Dostępne dla agentów stałe, długotrwałe tajemnice | Zero | Broker tajemnic i inspekcja środowiska |
| Działania o dużym wpływie wymagające niezależnego zatwierdzenia | 100 procent | Zapisy zatwierdzeń i logi polityki |
| Wywołania narzędzi z kompletnymi identyfikatorami śledzenia | Co najmniej 99,9 procent | Telemetria sesji i narzędzi |
| Zablokowane nieznane miejsca docelowe ruchu wychodzącego | 100 procent | Logi firewall i proxy |
| Sesje agenta z udokumentowanym zakresem repozytorium | 100 procent | Spis agentów |
| Artefakty produkcyjne ze zweryfikowanym pochodzeniem | 100 procent | Zapisy podpisów i pochodzenia |
| Krytyczne aktualizacje bezpieczeństwa agenta i narzędzi | W ciągu siedmiu dni kalendarzowych | Zapisy łatek |
| Aktualizacje o wysokiej ważności | W ciągu czternastu dni kalendarzowych | Zapisy łatek |
| Unieważnienie danych uwierzytelniających po podejrzanym ujawnieniu | W ciągu piętnastu minut | Logi dostawcy tożsamości |
| Izolacja runnera po alarmie o wysokiej pewności | W ciągu pięciu minut | Logi zdarzeń infrastruktury |
| Testy wstrzykiwania promptów na ścieżce krytycznej | Zero udanych eksfiltracji lub destrukcyjnych działań w 1000 testach | Raport z oceny przeciwnika |
| Przegląd uprawnień narzędzi | Co kwartał i po każdej istotnej zmianie | Podpisany zapis przeglądu |
| Przegląd zatrucia pamięci | Każdy trwały zapis pamięci z niezaufanej treści | Log pochodzenia pamięci |
| Przywracanie kopii zapasowych dla stanu zarządzanego przez agenta | Co najmniej raz w miesiącu | Raport z testu przywracania |
| Dostępność logów sesji agenta | Co najmniej 99 procent | Raport przechowywania logów |
| Niezatwierdzona publikacja pakietu lub rozszerzenia | Zero | Audyt rejestru i zapisy wydań |
| Zmiany utworzone przez agenta scalone bez przeglądu przez człowieka | Zero dla chronionych repozytoriów | Logi ochrony gałęzi |
W przypadku środowisk o wysokiej wrażliwości, najważniejszym porozumieniem o poziomie usług powinno być zero udanych eksfiltracji na ścieżce krytycznej, a nie średni wskaźnik wykrywalności. Jedna udana kradzież tokena wydania może być bardziej szkodliwa niż tysiące nieszkodliwych zablokowanych prób.
Artefakty audytowe, które każde wdrożenie powinno generować
Dojrzałe wdrożenie powinno być w stanie odpowiedzieć, po fakcie, na pytania:
- Kto uruchomił agenta?
- Które tożsamości użytkowników i usług były zaangażowane?
- Jakie repozytorium i commit zostały użyte?
- Jaki model i wersja agenta działały?
- Które instrukcje były aktywne?
- Jaka zewnętrzna treść weszła w kontekst?
- Jakie narzędzia były dostępne?
- Które narzędzia faktycznie zostały wywołane?
- Jakie argumenty zostały wysłane?
- Jakie pliki zostały odczytane lub zmienione?
- Z jakimi miejscami docelowymi w sieci nawiązano kontakt?
- Jakie dane uwierzytelniające zostały zażądane?
- Które polityki zezwoliły lub odmówiły każdemu działaniu?
- Które zgody ludzkie zostały uzyskane?
- Jaki artefakt został wyprodukowany?
- Jaki artefakt został opublikowany?
- Jaka była ostateczna decyzja?
Zachowaj co najmniej następujące artefakty:
- Zapis inwentaryzacyjny agenta
- Model zagrożeń i diagram przepływu danych
- Manifest możliwości i uprawnień
- Spis narzędzi i konektorów
- Zapis wersji modelu, promptu i polityki
- Obraz kontenera i lista materiałów zależności
- Polityka sieciowa i log ruchu wychodzącego
- Raport ujawnienia i redakcji tajemnic
- Ślad sesji i wywołań narzędzi
- Zapis zatwierdzenia przez człowieka
- Ocena bezpieczeństwa i raport red-teamu
- Pochodzenie wydania i sygnatura artefaktu
- Pochodzenie pamięci i zapis wycofania zmian
- Reakcja na incydent i test przywracania
- Biuletyn bezpieczeństwa dostawcy i zapisy łatek
Logi powinny być odporne na manipulacje, kontrolowane pod względem dostępu i przechowywane zgodnie z wrażliwością danych. Zwykłe sesje deweloperskie mogą wymagać dziewięćdziesięciu dni przechowywania, natomiast sesje, które uzyskują dostęp do systemów wydawniczych, danych regulowanych lub repozytoriów o wysokiej wartości, mogą wymagać roku lub dłużej.
OpenAI opisuje wewnętrzne monitorowanie, które przegląda interakcje agentów kodujących, wywołania narzędzi i potencjalnie podejrzane zachowania, podczas gdy GitHub kładzie nacisk na logi sesji, podpisane commity, atrybucję i zapisy audytowe. Te wzorce wspierają szerszą zasadę: zachowanie agenta musi być obserwowalne niezależnie od własnego wyjaśnienia agenta, co zrobił. (openai.com)
Pierwszy praktyczny krok
Najlepszym pierwszym krokiem nie jest wdrażanie agenta na repozytorium produkcyjnym.
Zamiast tego:
- Utwórz jednorazowe repozytorium testowe.
- Nadaj agentowi zadanie tylko do odczytu.
- Uruchom go w świeżej piaskownicy.
- Wyłącz dostęp do danych uwierzytelniających programistów.
- Zablokuj cały ruch sieciowy z wyjątkiem dostawcy modelu.
- Dodaj celowo złośliwe zgłoszenie, instrukcję readme, opis narzędzia i plik konfiguracyjny.
- Zarejestruj każdą próbę dostępu do pliku, wywołanie narzędzia, polecenie i żądanie sieciowe.
- Wykorzystaj wyniki do stworzenia swojego pierwszego manifestu uprawnień i umowy o poziomie usług bezpieczeństwa.
Jeśli agent nie może bezpiecznie wykonać zadania tylko do odczytu w tych warunkach, nie jest gotowy na dostęp do zapisu, automatyzację wydań ani systemy produkcyjne.
Podsumowanie
Autonomiczne agenty kodujące powinny być zabezpieczone jako niezaufane, posiadające tożsamość systemy automatyzacji, a nie jako zwykłe narzędzia deweloperskie.
Decydujące pytanie dotyczące bezpieczeństwa nie brzmi:
„Czy model będzie postępował zgodnie z poprawnymi instrukcjami?”
Brzmi:
„Co się stanie, jeśli model postąpi zgodnie z niewłaściwą instrukcją, posiadając rzeczywiste uprawnienia?”
Wstrzykiwanie promptów, wykorzystanie narzędzi, kradzież tajemnic, zatrucie danych i kompromitacja łańcucha dostaw to różne punkty wejścia do tej samej podstawowej awarii: agentowi pozwala się przekraczać zbyt wiele granic zaufania bez niezależnego egzekwowania.
Incydenty z lat 2025 i 2026 pokazują, że najskuteczniejsze mechanizmy kontrolne są architektoniczne:
- Trzymaj agentów z dala od tajemnic.
- Używaj jednorazowych piaskownic możliwości.
- Egzekwuj polityki poza modelem.
- Oddziel rozwój od produkcji.
- Traktuj konfigurację i pamięć jako wykonywalne powierzchnie ataku.
- Stosuj kontrolowany ruch wychodzący.
- Usuń współdzielone pamięci podręczne z uprzywilejowanych przepływów pracy wydania.
- Przypinaj i weryfikuj każde narzędzie i artefakt.
- Stopniuj wszystkie zapisy.
- Wymagaj niezależnego zatwierdzenia dla nieodwracalnych działań.
- Zachowaj szczegółowe, odporne na manipulacje zapisy audytu.
Autonomia może być użyteczna i bezpieczna, ale tylko wtedy, gdy system jest zaprojektowany tak, aby zdezorientowany, manipulowany lub skompromitowany agent miał ograniczoną władzę, ograniczony zasięg, ograniczony czas i jasno określony tryb awarii z możliwością odzyskania.
Auto