Présentation

Instrumentez vos services et surveillez les activités des utilisateurs pour détecter et bloquer les personnes malveillantes.

Ajoutez les informations des utilisateurs authentifiés aux traces pour identifier et bloquer les personnes malveillantes prenant pour cible votre surface d’attaque après authentification. Pour ce faire, ajoutez le tag d’ID de l’utilisateur à la trace APM en cours d’exécution, offrant ainsi à ASM l’instrumentation nécessaire au blocage des personnes malveillantes authentifiées. Cela permet à ASM d’associer les attaques et les événements de logique opérationnelle à des utilisateurs.

Surveillez les connexions et les activités des utilisateurs pour détecter les piratages de compte et les utilisations abusives de la logique opérationnelle grâce à des règles de détection prêtes à l’emploi dans le but de bloquer les personnes malveillantes.

Détection automatique des activités des utilisateurs : les bibliothèques de tracing de Datadog tentent de détecter et de signaler automatiquement les événements liés aux activités des utilisateurs. Pour en savoir plus, consultez la rubrique Désactiver le suivi automatique des événements liés aux activités des utilisateurs.

Les activités des utilisateurs pour lesquelles des règles de détection prêtes à l’emploi sont disponibles sont les suivantes :

Noms par défaut des événementsMétadonnées requisesRègles associées
activity.sensitive{ "name": "coupon_use", "required_role": "user" }Activité à taux limité depuis une adresse IP
Activité non autorisée détectée
users.login.successL’ID de l’utilisateur est obligatoire, des métadonnées facultatives peuvent être ajoutéesAttaque par bourrage d’identifiants
users.login.failureL’ID de l’utilisateur est obligatoire, des métadonnées facultatives peuvent être ajoutéesAttaque par bourrage d’identifiants
users.signup{ "usr.id": "12345" }Trop de créations de compte depuis une adresse IP
users.delete{ "usr.id": "12345" }Trop de suppressions de compte depuis une adresse IP
users.password_reset{ "usr.id": "12345", "exists": true }Tentatives de réinitialisation de mot de passe par brute force
payment.attempt{ "status": "failed" }Trop d’échecs de paiement depuis une adresse IP

Ajouter les informations des utilisateurs authentifiés aux traces et activer la fonctionnalité de blocage des utilisateurs

Vous pouvez ajouter des tags personnalisés à votre span racine ou utiliser les fonctions d’instrumentation décrites ci-dessous.

Utilisez l’API du traceur Java pour ajouter des tags personnalisés à une span racine et ajoutez des informations utilisateur afin de pouvoir surveiller les requêtes authentifiées dans l’application.

Les tags de surveillance d’utilisateur sont appliqués au niveau de la span racine et se composent du préfixe usr suivi du nom du champ. Par exemple, usr.name est un tag de surveillance d’utilisateur permettant de suivre le nom de l’utilisateur.

Remarque : assurez-vous d’avoir ajouté les dépendances nécessaires à votre application.

L’exemple ci-dessous montre comment récupérer la span racine, ajouter les tags de surveillance d’utilisateur appropriés et activer la fonctionnalité de blocage des utilisateurs :

import io.opentracing.Span;
import io.opentracing.util.GlobalTracer;
import datadog.appsec.api.blocking.Blocking;
import datadog.trace.api.interceptor.MutableSpan;

// Récupérer la span active
final Span span = GlobalTracer.get().activeSpan();
if ((span instanceof MutableSpan)) {
   MutableSpan localRootSpan = ((MutableSpan) span).getLocalRootSpan();
   // Définir le tag d'ID de l'utilisateur obligatoire
   localRootSpan.setTag("usr.id", "d131dd02c56eec4");
   // Définir les tags de surveillance d'utilisateur facultatifs
   localRootSpan.setTag("usr.name", "Jean Exemple");
   localRootSpan.setTag("usr.email", "jean.exemple@example.com");
   localRootSpan.setTag("usr.session_id", "987654321");
   localRootSpan.setTag("usr.role", "admin");
   localRootSpan.setTag("usr.scope", "read:message, write:files");
}

Blocking
    .forUser("d131dd02c56eec4")
    .blockIfMatch();

Ajouter des informations relatives à la logique opérationnelle (connexion réussie, échec de connexion, tout événement de logique opérationnelle) aux traces

Depuis la version 1.8.0 de dd-trace-java, l’API du traceur Java permet de surveiller les événements utilisateur.

Les exemples suivants montrent comment surveiller les événements de connexion ou des événements personnalisés (comme ici, les inscriptions).

import datadog.trace.api.EventTracker;
import datadog.trace.api.GlobalTracer;

public class LoginController {

    private User doLogin(String userId, String password) {
        // L'utilisateur est récupéré à l'aide des identifiants userId/password
        User user = checkLogin(userId, password);

        Map<String, String> metadata = new HashMap<>();
        metadata.put("email", user.getEmail());

        // Suivre les événements d'authentification réussie
        GlobalTracer
            .getEventTracker()
            .trackLoginSuccessEvent(user.getId(), metadata);

    }
}
import datadog.trace.api.EventTracker;
import datadog.trace.api.GlobalTracer;

public class LoginController {

    private User doLogin(String userId, String password) {
        // L'utilisateur est récupéré à l'aide des identifiants userId/password
        User user = checkLogin(userId, password);

        // Si la fonction renvoie null, l'utilisateur n'existe pas
        boolean userExists = (user != null);
        Map<String, String> metadata = new HashMap<>();
        if (userExists != null) {
            metadata.put("email", user.getEmail());
        }

        // Suivre les événements d'échec d'authentification
        GlobalTracer
            .getEventTracker()
            .trackLoginFailureEvent(userId, userExists, metadata);
    }
}
import datadog.trace.api.EventTracker;
import datadog.trace.api.GlobalTracer;

public class LoginController {

    private User doSignup(String userId, String email) {
        // Création du compte de l'utilisateur
        User user = createUser(userId, email);

        Map<String, String> metadata = new HashMap<>();
        metadata.put("email", user.getEmail());
        metadata.put("id", user.getId());

        // Suivre les événements d'inscription
        GlobalTracer
            .getEventTracker()
            .trackCustomEvent("users.signup", metadata);
    }
}

Suivi automatique des événements liés aux activités des utilisateurs

Lorsque la solution ASM est activée, les récentes bibliothèques de tracing de Datadog tentent de détecter automatiquement les événements liés aux activités des utilisateurs.

Les événements pouvant être détectés automatiquement sont les suivants :

  • users.login.success
  • users.login.failure
  • users.signup

Mode de suivi automatique des événements liés aux activités des utilisateurs

Deux modes de suivi automatique des événements liés aux activités des utilisateurs sont disponibles : safe et extended.

En mode safe, la bibliothèque de tracing n’inclut aucune information personnelle dans les métadonnées des événements. Elle tente de collecter l’ID de l’utilisateur, mais uniquement si cet ID correspond à un GUID valide.

En mode extended, la bibliothèque de tracing tente de collecter l’ID de l’utilisateur et son adresse e-mail. Dans ce mode, elle ne vérifie pas si l’ID de l’utilisateur correspond à un GUID. Elle transmet toute valeur pouvant être extraite de l’événement.

Pour configurer le mode de suivi automatique des événements utilisateur à utiliser, vous pouvez définir la variable d’environnement DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING sur safe ou extended. Par défaut, la bibliothèque de tracing utilise le mode safe.

Remarque : il peut arriver que la bibliothèque de tracing ne puisse pas extraire d’informations de l’événement utilisateur. Ce dernier est alors transmis sans métadonnées. Dans ce cas, nous vous conseillons d’utiliser le SDK pour instrumenter manuellement l’événement utilisateur.

Désactiver le suivi automatique des événements liés aux activités des utilisateurs

Si vous souhaitez désactiver la détection de ces événements, vous pouvez définir la variable d’environnement DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING sur disabled. Cette variable doit être définie au niveau de l’application hébergeant la bibliothèque de tracing de Datadog, et non au niveau de l’Agent Datadog.

Pour aller plus loin

PREVIEWING: deforest/fix-tls-ciphers-link