Exemple : Capteurs paramétrés

Les sensors paramétrés vous invitent à spécifier une valeur d’intérêt lorsque vous posez une question dynamique. Si vous enregistrez la question, la valeur du sensor devient partie intégrante de la configuration de la question enregistrée. Lorsque vous émettez ensuite la question enregistrée, le serveur TaniumTaaS spécifie automatiquement la valeur du sensor. Créez des sensors paramétrés pour interroger des endpoints pour des valeurs spécifiques qui sont souvent des variables, comme des noms de fichiers, des noms de processus et des valeurs de clé de registre.

Les données de la valeur du registre correspondent à un sensor paramétré fourni par Tanium. Lorsque vous utilisez ce sensor dans une question dynamique, le serveur TaniumTaaS vous invite à spécifier des valeurs pour les paramètres Register Key (Clé de registre) et Registry Value (Valeur de registre).

F : Figure 1 :  Question dynamique avec sensor paramétré
Sensor paramétré

Lorsque vous spécifiez des valeurs et cliquez sur Ask Question (Poser une question), le serveur TaniumTaaS émet la question. Le champ de questions affiche alors les valeurs substituées et la grille Question Results (Résultats de la question) affiche les résultats.

F : Figure 2 :  Résultats d’une question dynamique avec un sensor paramétré

Lorsque vous enregistrez une question ayant un sensor paramétré, la définition du sensor, y compris les valeurs substituées, est enregistrée dans un objet appelé temporary sensor (sensor temporaire). Sur le endpoint, le Tanium Client exécute le sensor temporaire lorsqu’il calcule les réponses à une question enregistrée qui l’appelle. Une question enregistrée qui est réémise conformément à un calendrier continue d’utiliser le sensor temporaire, même si le sensor sur lequel elle a été basée est mis à jour. Par conséquent, si un sensor est mis à jour et que vous souhaitez que la question enregistrée utilise le code mis à jour, vous devez recréer la question enregistrée.

Script de sensor

Lorsque vous développez le script du sensor (reportez-vous à la section Créer un sensor), placez les paramètres d’entrée entre des barres verticales doubles (||), par ex. ||strKey|| dans l’exemple suivant.

F : Figure 3 :  Script de sensor

Le serveur Tanium permet d’encoder les données de paramètres avant de les transmettre au script sous-jacent et les données doivent comporter un décodage UTF-8 avant leur utilisation. Le script du sensor Registry Value Data (Données de valeur de registre) dans la F : Figure 3 utilise un @include au script i18n/UTF8Decode.vbs. Ce script garantit que l’entrée utilisateur dans le formulaire de la console Tanium est correctement encodée lors de sa transmission vers le script du sensor.

’- Begin file: i18n/UTF8Decode.vbs
'========================================
’ UTF8Decode
'========================================
’ Used to convert the UTF-8 style parameters passed from 
’ the server to sensors in sensor parameters.
’ This function should be used to safely pass non english input to sensors.
'-----
'-----
Function UTF8Decode(str)
    Dim arraylist(), strLen, i, sT, val, depth, sR
    Dim arraysize
    arraysize = 0
    strLen = Len(str)
    for i = 1 to strLen
        sT = mid(str, i, 1)
        if sT = "%" then
            if i + 2 <= strLen then
                Redim Preserve arraylist(arraysize + 1)
                arraylist(arraysize) = cbyte("&H" & mid(str, i + 1, 2))
                arraysize = arraysize + 1
                i = i + 2
            end if
        else
            Redim Preserve arraylist(arraysize + 1)
            arraylist(arraysize) = asc(sT)
            arraysize = arraysize + 1
        end if
    next
    depth = 0
    for i = 0 to arraysize - 1
		Dim mybyte
        mybyte = arraylist(i)
        if mybyte and &h80 then
            if (mybyte and &h40) = 0 then
                if depth = 0 then
                    Err.Raise 5
                end if
                val = val * 2 ^ 6 + (mybyte and &h3f)
                depth = depth - 1
                if depth = 0 then
                    sR = sR & chrw(val)
                    val = 0
                end if
            elseif (mybyte and &h20) = 0 then
                if depth > 0 then Err.Raise 5
                val = mybyte and &h1f
                depth = 1
            elseif (mybyte and &h10) = 0 then
                if depth > 0 then Err.Raise 5
                val = mybyte and &h0f
                depth = 2
            else
                Err.Raise 5
            end if
        else
            if depth > 0 then Err.Raise 5
            sR = sR & chrw(mybyte)
        end if
    next
    if depth > 0 then Err.Raise 5
    UTF8Decode = sR
End Function
’- End file: i18n/UTF8Decode.vbs

Dans les scripts shell, vous pouvez utiliser une fonction similaire à ce qui suit pour décoder les données de paramètre :

#!/bin/sh

percent_decode() {
        local data=$(echo "$1" | sed ’s/%/\\\x/g’)
        /usr/bin/printf ’%b’ "$data"
}

myVariable=`percent_decode "||parameter_value||"`

L’utilitaire printf peut ne pas être disponible, ou peut ne pas fonctionner correctement sur toutes les plateformes Linux, MacOS et UNIX. Une mise en œuvre plus sûre mais moins élégante est :

#!/bin/sh 

brute_force_percent_decode() {
        # decode everything between 0x20-0x7E except:
        #0 1 2 3 4 5 6 7 8 9 (0x30-0x39)
        #A B C D E F G H I J K L M N O P Q R S T U V W X Y Z (0x41-0x5A)
        #a b c d e f g h i j k l m n o p q r s t u v w x y z (0x61-0x7A)
        echo "$1" | sed -e ’s/%20/ /g’ \
        -e ’s/%21/!/g’ \
        -e ’s/%22/"/g’ \
        -e ’s/%23/#/g’ \
        -e ’s/%24/$/g’ \
        -e ’s/%25/%/g’ \
        -e ’s/%26/\&/g’ \
        -e "s/%27/’/g" \
        -e ’s/%28/(/g’ \
        -e ’s/%29/)/g’ \
        -e ’s/%2[aA]/*/g’ \
        -e ’s/%2[bB]/+/g’ \
        -e ’s/%2[cC]/,/g’ \
        -e ’s/%2[dD]/-/g’ \
        -e ’s/%2[eE]/./g’ \
        -e ’s#%2[fF]#/#g’ \
        -e ’s/%3[aA]/:/g’ \
        -e ’s/%3[bB]/;/g’ \
        -e ’s/%3[cC]/</g’ \
        -e ’s/%3[dD]/=/g’ \
        -e ’s/%3[eE]/>/g’ \
        -e ’s/%3[fF]/?/g’ \
        -e ’s/%40/@/g’ \
        -e ’s/%5[bB]/[/g’ \
        -e ’s/%5[cC]/\\/g’ \
        -e ’s/%5[dD]/]/g’ \
        -e ’s/%5[eE]/^/g’ \
        -e ’s/%5[fF]/_/g’ \
        -e ’s/%60/`/g’ \
        -e ’s/%7[bB]/{/g’ \
        -e ’s/%7[cC]/|/g’ \
        -e ’s/%7[dD]/}/g’ \
        -e ’s/%7[eE]/-/g’
}

myVariable=`brute_force_percent_decode "||parameter_value||"`

Paramétrer les paramètres d’entrée

Les entrées de paramètres que vous définissez dans une configuration de sensor déterminent les paramètres que Tanium Console invite les utilisateurs à configurer lors de l’émission d’une question avec des sensors paramétrés (reportez-vous à la section Questions avec des sensors paramétrés). Dans le champ Key (Clé), spécifiez les noms de paramètres qui sont utilisés dans le script. Ne pas entrer de barres verticales doubles (||). Les barres sont automatiquement incluses lorsque vous ajoutez un paramètre.

F : Figure 4 :  Entrées de paramètre

Le widget le plus courant pour l’entrée utilisateur est une zone de texte, mais vous pouvez sélectionner l’une des options suivantes :

  • Case à cocher : L’utilisateur active un paramètre en cochant une case. La valeur 0 ou 1 est saisie dans la variable. Le sensor retourne 1 si la case est cochée et 0 si elle n’est pas cochée.
  • Date, Date et heure, Plage de dates/heures : L’utilisateur sélectionne une date et une heure ou une plage de dates-heures. Le format de date-heure est Epoch en millisecondes. Pour une plage, l’utilisateur spécifie deux dates-heures séparées par un caractère Pipe.
  • Liste déroulante : L’utilisateur sélectionne une seule option dans une liste.
  • Liste : L’utilisateur sélectionne une ou plusieurs valeurs. Plusieurs valeurs sont séparées par un Pipe.
  • Numérique : L’utilisateur saisit un nombre. L’entrée peut être contrôlée avec un minimum et des maximums. Vous pouvez spécifier une taille d’incrément pour exiger que l’entrée soit divisible par la valeur spécifiée. L’intervalle d’instantané correspond à la quantité par laquelle un nombre augmente ou diminue en appuyant sur le bouton haut ou bas respectivement. La valeur Step Size (Taille d’incrément) doit être un multiple de la valeur Snap Interval (Intervalle d’instantané), sauf si l’intervalle d’instantané est égal à 0. Le nombre sélectionné par l’utilisateur est entré dans la variable.
  • Intervalle numérique : L’utilisateur sélectionne un nombre et un élément dans une liste. L’élément de la liste a une valeur numérique. La valeur saisie dans la variable est le résultat de la multiplication. Par exemple, si un utilisateur sélectionne 2 et sélectionne Haut (avec une valeur Haut de 3), la valeur est 6 dans la variable.
  • Séparateur : Un séparateur est un moyen graphique de séparer les sections du formulaire des entrées utilisateur.
  • Zone de texte : L’utilisateur saisit une grande quantité de texte. Le texte est entré dans la variable.
  • Entrée de texte : L’utilisateur saisit une entrée de texte. Les entrées autorisées peuvent être contrôlées avec des expressions régulières. L’entrée utilisateur est entrée dans la variable.
  • Heure : L’utilisateur sélectionne une heure dans une liste déroulante. L’entrée peut être soumise à des restrictions.