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ą:
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:
- 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
Brak komentarzy.