Automatisierte Linux-Distribution-Erkennung über installierte Pakete mit KUMA-API
Ein SOC-Analyst stand vor der Herausforderung, Betriebssysteme in einem großen Unternehmen zu inventarisieren. Statt 18.000 Geräte manuell zu prüfen, entwickelte er ein Python-Skript, das über die KUMA-Plattform-API Daten zu installierter Software abruft und Pakete analysiert, um Linux-Distributionen präzise zu identifizieren. Die Lösung nutzt ein gewichtetes Bewertungssystem, das einzigartige Systempakete, Paketmanager und Versionssuffixe berücksichtigt.
Arbeit mit KUMA-API und JSON-Verarbeitung
KUMA (Kaspersky Unified Monitoring and Analysis Platform) stellt Asset-Daten über seine API zur Verfügung, allerdings mit Einschränkungen – wie fehlenden direkten Asset-Filtern in der Weboberfläche. Die Authentifizierung erfolgt per Token, um hartcodierte Zugangsdaten zu vermeiden. Hier ein Code-Beispiel für eine Anfrage:
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()
Die JSON-Antwort enthält Felder für das Betriebssystem und installierte Software. Um verschachtelte Daten wie Paketlisten zu extrahieren, wird eine rekursive Funktion verwendet:
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
Linux-Paketversionierung
Das Verständnis von Paketversionen ist entscheidend für die Analyse. Die standardisierte semantische Versionierung folgt dem Schema MAJOR.MINOR.PATCH, z. B. 2.36.105. Distributionen fügen eigene Suffixe hinzu:
- Ubuntu: .ubuntu oder +ubuntu
- Debian: .deb oder +deb
- ALT Linux: .alt oder +alt
- Astra Linux: .astra oder astra
Ein komplexes Beispiel: 2.2.6-2+deb10u9+ci1+astra1, wobei deb10 auf Debian 10 hinweist, u9 die neunte Aktualisierung markiert und astra die Anpassung für Astra Linux anzeigt.
Algorithmus zur Linux-Distribution-Erkennung
Der Algorithmus durchsucht installierte Pakete, um Typ, spezifische Distribution, Version und Konfidenzstufe des Betriebssystems zu ermitteln. Er verwendet ein gewichtetes Bewertungssystem:
- 150 Punkte: einzigartige Systempakete (z. B. ubuntu-release)
- 20 Punkte: Paketmanager (apt, yum, rpm)
- 15 Punkte: Versionssuffixe (.ubuntu, .alt)
- 10 Punkte: distributionsspezifische Pakete
- 5 Punkte: indirekte Indikatoren
Unterstützte Distributionen umfassen Ubuntu, Debian, ALT Linux, Astra Linux, Fedora und mehr. Der Ablauf sieht so aus:
- Pakete durchsuchen und Punkte für jede Distribution sammeln.
- Punkte summieren und die höchste Bewertung wählen.
- Bei Gleichstand Systempakete priorisieren.
- Version aus Systempaketen oder Suffixen extrahieren.
Konfidenzstufen: Hoch (≥150 Punkte), Mittel (20–49 Punkte) oder Niedrig (<20 Punkte).
Wichtige Implementierungsmerkmale
- Flexibler Output: Unterstützt CSV oder JSON, mit optionaler Filterung nach Konfidenzstufe.
- Umgang mit unvollständigen Daten: Funktioniert auch bei fehlenden OS-Infos (os: null) oder leerer Software-Liste.
- Prioritäts-Hierarchie: Einzigartige Systempakete erhalten höchstes Gewicht für bessere Genauigkeit.
- Skalierbares Design: Einfach erweiterbar durch Hinzufügen neuer Distributionen und Indikatoren.
Wichtige Erkenntnisse
- Automatisierte OS-Inventarisierung über KUMA-API spart Stunden bei Tausenden von Geräten.
- Gewichtetes Scoring identifiziert Linux-Distributionen zuverlässig aus Paketdaten.
- Deckt große Distributionen ab, inklusive russischer wie ALT Linux und Astra Linux.
- Flexible CSV/JSON-Ausgabe integriert sich nahtlos in andere Tools.
- Robust gegenüber unvollständigen Daten, ideal für reale Szenarien.
— Editorial Team
Noch keine Kommentare.