Automatisation de la détection de distributions Linux par paquets avec l'API KUMA
Un analyste SOC a dû recenser les systèmes d'exploitation dans une grande entreprise. Plutôt que de vérifier manuellement 18 000 appareils, il a développé un script Python qui récupère les données des logiciels installés via l'API de la plateforme KUMA et analyse les paquets pour identifier précisément les distributions Linux. La solution repose sur un système de notation pondérée tenant compte des paquets système uniques, des gestionnaires de paquets et des suffixes de versions.
Utilisation de l'API KUMA et traitement JSON
KUMA (Kaspersky Unified Monitoring and Analysis Platform) fournit les données des actifs via son API, mais avec des limitations, comme l'absence de filtres directs sur les actifs dans l'interface web. L'authentification utilise un jeton, évitant les identifiants codés en dur. Voici un exemple de code pour effectuer une requête :
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()
La structure JSON de la réponse inclut des champs pour l'OS et les logiciels installés. Pour extraire les données imbriquées comme les listes de paquets, une fonction récursive est utilisée :
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
Gestion des versions de paquets Linux
Comprendre les versions de paquets est essentiel pour l'analyse. La version sémantique standard suit le format MAJOR.MINOR.PATCH, comme 2.36.105. Les distributions ajoutent leurs propres suffixes :
- Ubuntu : .ubuntu ou +ubuntu
- Debian : .deb ou +deb
- ALT Linux : .alt ou +alt
- Astra Linux : .astra ou astra
Un exemple complexe : 2.2.6-2+deb10u9+ci1+astra1, où deb10 indique Debian 10, u9 la neuvième mise à jour, et astra l'adaptation Astra Linux.
Algorithme de détection des distributions Linux
L'algorithme examine les paquets installés pour identifier le type d'OS, la distribution spécifique, la version et le niveau de confiance. Il utilise un système de notation pondérée :
- 150 points : paquets système uniques (ex. : ubuntu-release)
- 20 points : gestionnaires de paquets (apt, yum, rpm)
- 15 points : suffixes de versions (.ubuntu, .alt)
- 10 points : paquets spécifiques à la distribution
- 5 points : indicateurs indirects
Les distributions prises en charge incluent Ubuntu, Debian, ALT Linux, Astra Linux, Fedora, et bien d'autres. La logique fonctionne ainsi :
- Scanner les paquets et cumuler les scores pour chaque distribution.
- Sommer les scores et sélectionner le meilleur.
- Dépasser les égalités en priorisant les paquets système.
- Extraire la version des paquets système ou des suffixes.
Niveaux de confiance : Élevé (≥150 points), Moyen (20–49 points), ou Faible (<20 points).
Fonctionnalités clés de l'implémentation
- Sortie flexible : Prend en charge CSV ou JSON, avec filtrage optionnel par niveau de confiance.
- Gestion des données incomplètes : Fonctionne même si les infos OS manquent (os: null) ou si le tableau software est vide.
- Hiérarchie de priorités : Les paquets système uniques ont le poids le plus élevé pour une meilleure précision.
- Conception évolutive : Facilement extensible en ajoutant de nouvelles distributions et indicateurs.
Points clés à retenir
- L'automatisation du recensement des OS via l'API KUMA économise des heures sur des milliers d'appareils.
- La notation pondérée identifie précisément les distributions Linux à partir des données de paquets.
- Couvre les principales distributions, y compris les russes comme ALT Linux et Astra Linux.
- Flexibilité de sortie CSV/JSON pour une intégration aisée avec d'autres outils.
- Robuste face aux données incomplètes, idéal pour les scénarios réels.
— Editorial Team
Aucun commentaire pour le moment.