O 123% więcej zgłoszonych CVE dziennie w 2026 niż przed rokiem.

Porównanie

Gdzie narzędzia AI do bezpieczeństwa zawodzą i co obejmują deterministyczne dowody z buildu

Dane o bezpieczeństwie, które wychodzą poza zespół inżynierski, muszą przejść trzy testy: czy da się je odtworzyć, czy da się je zaudytować i czy są kompletne. Oto jak narzędzia AI i deterministyczne zapisy buildów wypadają w każdym z nich, wraz z przykładami.

Zaktualizowano

Teza w wąskim ujęciu

To nie jest argument przeciwko AI w bezpieczeństwie. Modele dobrze czytają kod, wyjaśniają znaleziska i proponują poprawki, a zespoły, które dobrze z nich korzystają, pracują szybciej. Teza jest węższa: dla zapisów, które muszą się później obronić, model probabilistyczny jest niewłaściwym głównym źródłem. Dotyczy to SBOM przekazywanego regulatorowi, pochodzenia wydanego artefaktu i odpowiedzi na pytanie „czy to nas dotyczyło?”.

O tym, czy zapis się obroni, decydują trzy właściwości. Każda z poniższych sekcji omawia jedną z nich, z przykładami i źródłami.

1. Powtarzalność: dwa razy to samo pytanie, ta sama odpowiedź

Zapis bezpieczeństwa jest przydatny tylko wtedy, gdy ktoś inny może uzyskać tę samą odpowiedź z tego samego wejścia. Modele językowe tego nie obiecują i dostawcy mówią o tym otwarcie.

  • Dokumentacja Anthropic: „Nawet przy temperaturze ustawionej na 0 wyniki nie będą w pełni deterministyczne, a identyczne dane wejściowe mogą dawać różne wyniki w kolejnych wywołaniach API”.
  • GitHub o Copilot Autofix: „Nawet przy tym samym alercie i kodzie może nie wygenerować użytecznej sugestii, a sugestia może się różnić między próbami”.
  • Badacze, którzy stworzyli framework SecLLMHolmes, przetestowali osiem LLM na 228 scenariuszach kodu na potrzeby IEEE S&P 2024. Podają, że modele „udzielają niedeterministycznych odpowiedzi” oraz że „wystarczy zmienić nazwy funkcji lub zmiennych albo dodać funkcje biblioteczne w kodzie źródłowym”, by PaLM2 i GPT-4 udzieliły błędnych odpowiedzi odpowiednio w 26% i 17% przypadków.

Przykład. Dwóch inżynierów pyta tego samego asystenta, czy usługa jest narażona na nową podatność z biuletynu. Jeden słyszy „nie”, drugi „możliwe, proszę sprawdzić drzewo zależności przechodnich”. Żadna z tych odpowiedzi nie jest zapisem i żadnej nie da się odtworzyć dla audytora pół roku później.

Zarejestrowany build nie ma tego problemu, ponieważ nic nie jest wnioskowane. CRACI obserwuje pakiety, które zadanie pobiera ze źródeł pakietów w trakcie działania, a SBOM jest zapisem tej obserwacji.

2. Audytowalność: pokazać, skąd to wiadomo

Audyty sprowadzają się do pytania „skąd Państwo to wiedzą?”. Model może udzielić płynnej odpowiedzi, ale jego wyjaśnienie nie jest dowodem. Ewaluacja SecLLMHolmes wykazała, że LLM podają „błędne i nierzetelne uzasadnienia” dotyczące ocenianych podatności, więc poprawny werdykt może iść w parze z wyjaśnieniem, które się nie broni.

Standardy zmierzają w stronę zapisów, które wyjaśniają własne pochodzenie. Minimalne elementy SBOM z 2026 roku, opublikowane przez CISA wraz z NSA, FBI i partnerami międzynarodowymi, dodają pola SBOM Tool Name, SBOM Tool Version i SBOM Generation Context, które określa, czy SBOM powstał „przed buildem”, w trakcie „buildu” czy „po buildzie”. Ten sam dokument ostrzega, że „organizacje mogą uwzględniać błędy, wynikające z praktyk autora SBOM lub wyboru nieodpowiednich narzędzi, w decyzjach dotyczących zarządzania ryzykiem organizacyjnym”.

Przykład. Kwestionariusz klienta pyta, jak powstał Państwa SBOM. „Asystent przeczytał repozytorium i go napisał” podaje kontekst generowania, ale nie taki, który recenzent może sprawdzić. „Został zarejestrowany wewnątrz runnera CI podczas buildu wydania, a stan kompletności zadania to Complete” to coś, co recenzent może zweryfikować względem buildu.

3. Kompletność: nie da się zgłosić czegoś, czego się nigdy nie widziało

Model wnioskuje na podstawie tego, co mu pokazano. Jeśli czytane pliki nie opisują oprogramowania, odpowiedź również go nie opisze, a nic w wyniku tego nie zasygnalizuje. Wytyczne CISA z 2026 roku stawiają poprzeczkę na poziomie decyzji odbiorcy: odbiorca „powinien móc stwierdzić, że nowo zgłoszona podatność go nie dotyczy, jeśli SBOM nie wymienia danego komponentu”. To działa tylko wtedy, gdy brak na liście oznacza brak w buildzie.

Przykład. Repozytorium anthropics/claude-code w wersji v2.1.259 nie ma żadnego manifestu zależności ani lockfile. Opublikowany pakiet npm deklaruje zero zależności runtime i opakowuje gotowy natywny plik binarny. Każde narzędzie, które czyta repozytorium, AI czy nie, ma niemal nic do wymienienia, podczas gdy program, który faktycznie działa, jest skompilowanym plikiem binarnym.

Przykład. Narzędzia AI do kodowania mogą też same tworzyć tę lukę. GitHub ostrzega, że Copilot Autofix „może sugerować zmyślone zależności publikowane pod statystycznie prawdopodobnymi nazwami”. Badanie z USENIX Security 2025 obejmujące 576 000 wygenerowanych próbek kodu z 16 modeli wykazało średni odsetek zmyślonych pakietów na poziomie co najmniej 5,2% dla modeli komercyjnych i 21,7% dla modeli open source, z 205 474 unikalnymi zmyślonymi nazwami pakietów.

Determinizm jest konieczny, ale niewystarczający

Uczciwa wersja tego argumentu musi uwzględnić kolejny punkt. Generatory SBOM są deterministyczne, a mimo to dają różne wyniki. Uruchomione na tym samym commicie expressjs/express mogą zwrócić różne listy, ponieważ każdy sam decyduje, co uznaje za komponent i którym plikom ufa. Repozytorium nie zawiera lockfile, więc narzędzie, które rozwiązuje zależności na jego podstawie, nie ma do zgłoszenia żadnej z zależności z package.json.

Deterministyczny skaner za każdym razem odtwarza tę samą niekompletną odpowiedź. Powtarzalność jest konieczna, ale lukę zamyka obserwacja: rejestrowanie tego, co build faktycznie pobrał, i informowanie, gdy zapis jest niekompletny. CRACI oznacza każde zadanie i cache jako Complete, Complete with connections, Incomplete, Unavailable lub Not recorded.

Przykład z praktyki: ustalanie zakresu nowej podatności

Scenariusz hipotetyczny: opublikowano biuletyn dotyczący wersji szeroko używanego pakietu npm. Zgodnie z Cyber Resilience Act producenci mają 24 godziny na zgłoszenie aktywnie wykorzystywanej podatności do ENISA, więc ustalenie zakresu musi być szybkie i trafne.

Ścieżka „najpierw AI”

Proszą Państwo asystenta o sprawdzenie repozytoriów. Czyta manifesty i lockfile, być może także Dockerfile. Nie widzi pakietów przywróconych z cache CI, narzędzi pobranych przez krok buildu ani wersji rozwiązanych podczas instalacji w repozytorium bez lockfile. Zapytany dwa razy może odpowiedzieć inaczej. Jego podsumowanie jest przydatne, ale nie można na nim oprzeć podpisanego zgłoszenia.

Ścieżka „najpierw zapis”

CRACI agreguje podatności z wielu buildów i repozytoriów, w zakresie gałęzi domyślnej na poziomie organizacji, i ponownie ocenia monitorowane SBOM-y w miarę pojawiania się nowych podatności. API zwraca dla każdego buildu SBOM w formacie CycloneDX, jego ślad sieciowy i dane o pochodzeniu. Jeśli zapis zadania jest niekompletny, jego stan kompletności wskazuje, gdzie trzeba sprawdzić ręcznie. Nadal można poprosić model o podsumowanie wyniku. Model podsumowuje wtedy zapis, a nie go wytwarza.

Dzięki zapisowi pytanie „które wydania zawierały ten pakiet?” to wyszukanie, a nie śledztwo.

Zestawienie

Funkcja CRACI Narzędzie AI do bezpieczeństwa
Powtarzalność Zapis nie zmienia się przy ponownym pytaniu Identyczne wejście może dać różne wyniki
Audytowalność Wskazuje zadanie i pobranie pakietu Podane uzasadnienie może nie odpowiadać faktom
Określona kompletność Dla każdego zadania i cache, także gdy niekompletny Ograniczona do tego, co pokazano modelowi
Działa na kodzie źródłowym przed buildem Rejestruje buildy na runnerach CRACI Czyta kod, diffy i znaleziska
Typowy błąd Zadanie oznaczone jako Incomplete lub Not recorded Wiarygodnie brzmiąca, błędna odpowiedź
Najlepsze zastosowanie SBOM-y, pochodzenie, ustalanie zakresu incydentu, dowody audytowe Przegląd kodu, wyjaśnienia, sugestie triażu
  • W zestawie
  • Częściowo
  • Brak

Każde narzędzie tam, gdzie jest mocne

AI warto stosować tam, gdzie pomaga ocena, a człowiek sprawdza wynik: przy przeglądzie kodu, wyjaśnianiu znaleziska, szkicowaniu poprawki. Deterministyczne zapisy buildów warto stosować tam, gdzie wynik trzeba odtworzyć, zaudytować lub traktować jako kompletny: przy SBOM-ach, pochodzeniu i ustalaniu zakresu incydentów. CRACI automatyzuje znaczną część tych dowodów dotyczących łańcucha dostaw w szerszym procesie CRA. Sam w sobie nie zapewnia zgodności.

Jak powstaje zapis, wyjaśnia strona o generowaniu SBOM w czasie buildu; można też zacząć od tego, czego wymaga CRA.

Proszę zobaczyć zapis buildu, który można odtworzyć

Proszę umówić demo, a pokażemy SBOM, stan kompletności i dane o pochodzeniu, które CRACI rejestruje dla prawdziwego buildu.

Umów demo