LIVE: New phishing campaigns targeting mobile users —View latest threats →

Back to Tutorials
Zaawansowany 13 min czytania

Ataki na łańcuch dostaw: ryzyko z zaufanego oprogramowania

SolarWinds i XZ Utils pokazały, że atakujący przejmują dziś zaufane oprogramowanie, by dotrzeć do tysięcy celów. Dowiedz się, jak działają ataki na łańcuch dostaw i jak się bronić.

15 lutego 2026

Czym ataki na łańcuch dostaw różnią się od innych

W tradycyjnym ataku przeciwnik bierze na cel bezpośrednio Twoją organizację — wykorzystuje jej podatności, wysyła phishing do pracowników lub łamie hasła. Atak na łańcuch dostaw idzie drogą okrężną: atakujący przejmuje oprogramowanie, sprzęt lub usługi, którym ufasz i które sam instalujesz. Gdy ten zaufany komponent do Ciebie trafia, złośliwy ładunek przychodzi razem z nim.

To podejście jest niszczycielsko skuteczne, bo organizacje mają dojrzałe zabezpieczenia przed atakami bezpośrednimi, ale często bezwarunkowo ufają dostawcom oprogramowania, repozytoriom pakietów i potokom budowania. Atakujący musi przejąć tylko jednego dostawcę wyżej w łańcuchu, by dotrzeć do tysięcy celów niżej.

Głośne przypadki

SolarWinds Orion (2020)

APT29 (rosyjska grupa wspierana przez państwo) przejęła system budowania SolarWinds — popularnej platformy do monitorowania IT. Atakujący umieścili furtkę, nazwaną SUNBURST, w legalnej aktualizacji oprogramowania SolarWinds Orion. Zainfekowaną aktualizację zainstalowało około 18 000 organizacji, w tym Departament Skarbu USA, Departament Bezpieczeństwa Krajowego i duzi kontraktorzy zbrojeniowi. Po instalacji furtka przez dwa tygodnie pozostawała uśpiona, zanim się aktywowała, unikając wykrycia opartego na analizie zachowań.

Lekcja: nawet podpisane aktualizacje dostarczane przez producenta nie są bezwarunkowo godne zaufania.

Furtka w XZ Utils (2024)

Sprawca przez prawie dwa lata cierpliwie budował zaufanie w projekcie open source XZ Utils pod fałszywą tożsamością, stopniowo przejmując rolę opiekuna projektu. Następnie umieścił zaawansowaną furtkę wymierzoną w demony SSH powiązane z systemd w systemach Linux. Furtkę wykrył inżynier Microsoftu, który zauważył nietypowe zużycie procesora przy logowaniu przez SSH — zaledwie kilka dni przed tym, jak przejęta wersja miała trafić do repozytoriów głównych dystrybucji.

Ten przypadek pokazał, jak wyrafinowana może być długofalowa socjotechnika wymierzona w opiekunów projektów open source.

Zatruwanie pakietów npm

Ekosystem JavaScriptu wielokrotnie padał ofiarą ataków na łańcuch dostaw:

  • event-stream (2018): nowy opiekun dodał ładunek koparki kryptowalut wymierzony w konkretny portfel Bitcoin
  • node-ipc (2022): opiekun celowo umieścił niszczący kod wymierzony w adresy IP z Rosji i Białorusi
  • Typosquatting: pakiety o nazwach lodahs, crossenv czy momnet, czyhające na literówki w poleceniu npm install

Sam rejestr npm zawiera ponad dwa miliony pakietów, a drzewa zależności często mają głębokość setek pakietów — większości z nich Twój zespół nigdy nie przeglądał.

Wektory ataku w łańcuchu dostaw oprogramowania

Ataki na łańcuch dostaw wchodzą wieloma kanałami:

  • Przejęte systemy budowania: wstrzykiwanie złośliwego kodu podczas kompilacji (jak w SolarWinds)
  • Dependency confusion: publikowanie złośliwego publicznego pakietu o tej samej nazwie co prywatny pakiet wewnętrzny, z wykorzystaniem kolejności rozwiązywania pakietów
  • Typosquatting: rejestrowanie pakietów o nazwach podobnych do popularnych bibliotek
  • Przejęcie konta: przejęcie konta opiekuna pakietu w celu opublikowania złośliwej aktualizacji
  • Przejęcie potoku CI/CD: wstrzyknięcie złośliwych kroków do potoków budowania, które mają szeroki dostęp do systemów produkcyjnych
  • Przejęty sprzęt: implanty dodane podczas produkcji (problem dotyczący firmware i sprzętu sieciowego)

Obrona: zarządzanie zależnościami

Przypinaj wersje zależności — nie używaj zmiennych zakresów wersji (^1.2.3 czy latest). Pliki blokad (package-lock.json, Cargo.lock, requirements.txt ze skrótami) gwarantują, że instalujesz dokładnie to, co przetestowałeś. Weryfikuj integralność sumami kontrolnymi:

# npm — verify against lock file
npm ci

# pip — require hash verification
pip install --require-hashes -r requirements.txt

Regularnie audytuj zależności: npm audit, pip-audit, cargo audit, trivy dla kontenerów. Subskrybuj komunikaty bezpieczeństwa dla kluczowych zależności przez Dependabot na GitHubie lub OSV.dev.

Ograniczaj drzewo zależności. Zanim dodasz pakiet, zapytaj: czy ta zależność jest aktywnie utrzymywana? Jak szeroko jest używana? Czy możesz zaimplementować to sam w 20 linijkach?

Obrona: bezpieczeństwo potoku budowania

  • Stosuj powtarzalne buildy (reproducible builds) — ten sam kod źródłowy powinien zawsze dawać identyczny bit po bicie wynik, dzięki czemu nieautoryzowane zmiany są wykrywalne
  • Podpisuj artefakty wydań i weryfikuj podpisy przed wdrożeniem: używaj Sigstore/cosign dla kontenerów i plików binarnych
  • Egzekwuj najmniejsze uprawnienia w CI/CD: zadania budowania powinny mieć dostęp tylko do tego, czego potrzebują; sekrety powinny być ograniczone do konkretnych potoków i środowisk
  • Wdróż SLSA (Supply Chain Levels for Software Artifacts) — framework zapewniający weryfikowalne pochodzenie artefaktów budowania
  • Przeglądaj workflowy GitHub Actions i akcje firm trzecich — przypinaj akcje do konkretnych SHA commitów, a nie zmiennych nazw gałęzi czy tagów

Obrona: ryzyko dostawców i open source

  • Prowadź wykaz komponentów oprogramowania (SBOM) — pełną listę wszystkich komponentów i ich wersji. Narzędzia takie jak Syft i CycloneDX generują SBOM automatycznie.
  • Zanim wdrożysz krytyczną bibliotekę open source, sprawdź aktywność opiekunów, model zarządzania projektem i to, czy w przeszłości miała incydenty bezpieczeństwa
  • W przypadku krytycznych zależności rozważ vendoring — skopiowanie kodu źródłowego do własnego repozytorium — aby zmiany wyżej w łańcuchu nie wpływały na Ciebie automatycznie
  • Wprowadź kontrolę ruchu wychodzącego w środowisku budowania, aby złośliwe pakiety nie mogły wykradać sekretów podczas buildu
#supply chain#software security#open source#SolarWinds