Powrót do strony głównej

Określanie dystrybucji Linux na podstawie pakietów za pomocą API KUMA

Artykuł opisuje metodę automatycznego określania dystrybucji Linux na podstawie analizy zainstalowanych pakietów z wykorzystaniem API platformy KUMA. Przedstawiono algorytm z systemem wag dla precyzyjnej identyfikacji systemów operacyjnych w dużych infrastrukturach.

Automatyzacja Linux: jak określić dystrybucję na podstawie pakietów
Advertisement 728x90

Automatyzacja określania dystrybucji Linuxa na podstawie zainstalowanych pakietów z wykorzystaniem API KUMA

Analityk SOC napotkał zadanie inwentaryzacji systemów operacyjnych w dużej firmie. Zamiast ręcznego przeglądania 18 000 urządzeń, opracował skrypt w Pythonie, który za pomocą API platformy KUMA zbiera dane o zainstalowanym oprogramowaniu i analizuje pakiety w celu precyzyjnego określenia dystrybucji Linuxa. Rozwiązanie wykorzystuje system wag, uwzględniający unikalne pakiety systemowe, menedżery pakietów i sufiksy wersji.

Praca z API KUMA i przetwarzanie JSON

KUMA (Kaspersky Unified Monitoring and Analysis Platform) udostępnia dane o aktywach przez API, ale z ograniczeniami: na przykład brak bezpośredniego filtra dla aktywów dostępnego w interfejsie webowym. Do autoryzacji użyto tokenu, co eliminuje przechowywanie danych logowania w kodzie. Przykład kodu dla zapytania:

token = "my_token"
url = "my_api_url"
api_header={
  "Content-Type": "application/json",
  "Authorization": f"Bearer {token}"
}
req = request.get(url, headers=api_header)
data = req.json()

Struktura odpowiedzi JSON obejmuje pola dla systemu operacyjnego i zainstalowanego oprogramowania. Do wydobywania zagnieżdżonych danych, takich jak lista pakietów, zastosowano funkcję rekurencyjną:

Google AdInline article slot
def recursive_extract(data, result=None):
    result = []
    if isinstance(data, dict):
        for key, value in data.items():
            if key == "software":
                result.append(value)
            recursive_extract(value, result)
    return result

System wersjonowania pakietów Linux

Zrozumienie wersji pakietów jest kluczowe dla analizy. Standardowe semantyczne wersjonowanie obejmuje MAJOR.MINOR.PATCH, na przykład 2.36.105. W dystrybucjach dodawane są specyficzne sufiksy:

  • Ubuntu: .ubuntu lub +ubuntu
  • Debian: .deb lub +deb
  • ALT Linux: .alt lub +alt
  • Astra Linux: .astra lub astra

Przykład złożonej wersji: 2.2.6-2+deb10u9+ci1+astra1, gdzie deb10 wskazuje na Debian 10, u9 — dziewiątą aktualizację, astra — adaptację dla Astra Linux.

Algorytm określania dystrybucji Linux

Algorytm analizuje zainstalowane pakiety, aby określić typ systemu operacyjnego, konkretną dystrybucję, jej wersję i poziom pewności. Wykorzystuje system wag:

Google AdInline article slot
  • 150 punktów: unikalne pakiety systemowe (np. ubuntu-release)
  • 20 punktów: menedżery pakietów (apt, yum, rpm)
  • 15 punktów: sufiksy w wersjach (.ubuntu, .alt)
  • 10 punktów: specyficzne pakiety dystrybucji
  • 5 punktów: pośrednie oznaki

Obsługiwane dystrybucje obejmują Ubuntu, Debian, ALT Linux, Astra Linux, Fedora i inne. Logika działania:

  • Skanowanie pakietów i przyznawanie punktów dla każdej dystrybucji.
  • Obliczanie sumy punktów i wybór zwycięzcy.
  • Rozwiązywanie konfliktów przy równych punktach poprzez priorytet pakietów systemowych.
  • Określanie wersji z pakietów systemowych lub sufiksów.

Poziom pewności klasyfikowany jest jako Wysoki (≥150 punktów), Średni (20–49 punktów) lub Niski (<20 punktów).

Kluczowe cechy implementacji

  • Elastyczny format wyjścia: obsługa CSV lub JSON z opcjonalnym podziałem według poziomu pewności.
  • Przetwarzanie niekompletnych danych: algorytm działa nawet przy braku informacji o systemie operacyjnym (os: null) lub pustej tablicy software.
  • Hierarchia priorytetów: unikalne pakiety systemowe mają najwyższą wagę, co zwiększa dokładność.
  • Skalowalność: system łatwo rozszerza się o nowe dystrybucje i cechy.

Co jest ważne

  • Automatyzacja inwentaryzacji systemów operacyjnych przez API KUMA oszczędza czas przy pracy z tysiącami urządzeń.
  • System wag umożliwia precyzyjne określanie dystrybucji Linuxa na podstawie zainstalowanych pakietów.
  • Obsługa wielu dystrybucji, w tym rosyjskich (ALT Linux, Astra Linux).
  • Elastyczność wyjścia danych w CSV lub JSON ułatwia integrację z innymi narzędziami.
  • Algorytm jest odporny na niekompletne dane, co ma kluczowe znaczenie w rzeczywistych warunkach.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

Czytaj dalej