Skip to content

Smart assistant

Seald vous permet d’implémenter votre système de règles pour détecter le contenu sensible d’un email et de le chiffrer automatiquement avant qu'il ne quitte votre boîte d’envoi. Cette technologie est compatible avec la plupart des moteurs de DLP (Data Loss Protection). Vous pourrez ainsi empêcher que les emails sensibles soient envoyés accidentellement sans protection.

Fonctionnement pour l'utilisateur

Lorsque l'utilisateur va envoyer un e-mail, il va être analysé par le script mentionné ci-après pour proposer à l'utilisateur plusieurs choix selon les cas:

Niveau recommandé

Les règles peuvent être configurées pour proposer à l'utilisateur de chiffrer les pièces jointes seules ou le corps de mail et pièces jointes, mais également lui proposer d'outrepasser ces recommandations :

Niveau recommandé

Niveau forcé

Pour forcer un niveau plus stricte, certaines règles peuvent forcer un niveau de chiffrement lorsqu'elles sont déclenchées. Il n'est pas alors pas proposé à l'utilisateur d'outrepasser les règles :

Niveau forcé

Activation de la fonctionnalité

L'application de bureau exécute un script pour chaque envoi d'email qui, en suivant la spécification détaillée ci-après, répond les niveaux recommandés et forcés de sécurité sur les pièces jointes et corps d'email.

Dans l'application de bureau

Le script de règles doit être nommé rules.js, et placé à la racine du dossier de configuration de Seald. Celui-ci se trouve au chemin suivant :

  • Windows : %APPDATA%\Seald\
  • macOS : ~/Library/Application Support/Seald/
  • Linux : ~/.config/Seald/

Une fois le fichier de règles installé, il est nécessaire de relancer l'application pour que la modification soit prise en compte.

Il est possible de déployer de manière programmatique un nouveau fichier de règles à l'aide des commandes suivantes :

powershell
copy new-rules.js %APPDATA%\Seald\rules.js

// redémarage de l'application
taskkill /IM seald.exe /F
start "" "%ProgramFiles%\Seald\Seald.exe"
copy new-rules.js %APPDATA%\Seald\rules.js

// redémarage de l'application
taskkill /IM seald.exe /F
start "" "%ProgramFiles%\Seald\Seald.exe"

Dans l'extension

Dans l'extension, on peut activer / désactiver cette fonctionnalité, il faut:

Nouvel emailIcône Seald
1. Cliquer sur nouveau courrier2. Dans la fenêtre, cliquer sur la flèche en dessous de l'icône Seald
MenuSmart Assistant
3. Cliquer sur options dans le menu4. Cocher la case Smart Assistant, puis quitter

On peut également le configurer de façon programmatique en modifiant la configuration de l'extension.

Conception des règles

Le fichier de règles est un script Javascript (la bibliothèque standard de Node.JS 12 est disponible), communiquant avec l'application de bureau par IPC.

Chaque règle peut indépendamment recommander ou forcer un niveau de chiffrement. Les différents niveaux de chiffrement disponibles sont:

  • 0 - aucun chiffrement
  • 1 - chiffrement des pièce jointes
  • 2 - chiffrement des pièce jointes et du corps de mail

Ce script reçoit en argument les différents éléments du mail : to, cc, cci, subject, body, attachments. Il doit retourner un object contenant les clé suivantes :

  • levelForced, indiquant le niveau de chiffrement minimum pour permettre l'envoi du mail
  • levelRecommended, indiquant le niveau de chiffrement recommandé
  • matches, un tableau contenant la liste des points relevés par les règles. Ces objets contiennent un message pour l'utilisateur, le niveau de chiffrement recommandé, ainsi que le niveau minimum de chiffrement forcé.

Exemple de règles

javascript
const CLEARTEXT = 0
const ENCRYPTED_ATTACHMENTS_ONLY = 1
const ENCRYPTED_BODY_AND_ATTACHMENTS = 2

process.on('message', ({ to = [], cc = [], cci = [], subject = '', body = '', attachments = [] }) => {
  try {
    // Par defaut, aucun chiffrement n'est requis
    let levelForced = CLEARTEXT
    let levelRecommended = CLEARTEXT
    const matches = []

    // Exemple de contrôle sur les email des destinataires forçant le chiffrement du corps de mail et des pièces jointes.
    const allDest = to.concat(cc).concat(cci)
    if (allDest.some(email => email.endsWith('@ip-lawyer.com'))) {
      levelForced = ENCRYPTED_BODY_AND_ATTACHMENTS
      matches.push({
        levelForced: ENCRYPTED_BODY_AND_ATTACHMENTS,
        levelRecommended: ENCRYPTED_BODY_AND_ATTACHMENTS,
        message: 'Mail to IP lawyer must be encrypted'
      })
    }

    // Exemple d'utilisation d'une expression régulière pour détecter des informations confidentielles
    if (/confidential/.test(body)) {
      levelRecommended = ENCRYPTED_BODY_AND_ATTACHMENTS
      matches.push({
        levelForced: CLEARTEXT,
        levelRecommended: ENCRYPTED_BODY_AND_ATTACHMENTS,
        message: 'it seems that this email contains confidential information'
      })
    }

    process.send({
      code: 0,
      data: {
        levelForced,
        levelRecommended,
        matches
      }
    })
    process.exit(0)
  } catch (error) {
    process.send({ code: 1, data: error.stack })
    process.exit(1)
  }
})
const CLEARTEXT = 0
const ENCRYPTED_ATTACHMENTS_ONLY = 1
const ENCRYPTED_BODY_AND_ATTACHMENTS = 2

process.on('message', ({ to = [], cc = [], cci = [], subject = '', body = '', attachments = [] }) => {
  try {
    // Par defaut, aucun chiffrement n'est requis
    let levelForced = CLEARTEXT
    let levelRecommended = CLEARTEXT
    const matches = []

    // Exemple de contrôle sur les email des destinataires forçant le chiffrement du corps de mail et des pièces jointes.
    const allDest = to.concat(cc).concat(cci)
    if (allDest.some(email => email.endsWith('@ip-lawyer.com'))) {
      levelForced = ENCRYPTED_BODY_AND_ATTACHMENTS
      matches.push({
        levelForced: ENCRYPTED_BODY_AND_ATTACHMENTS,
        levelRecommended: ENCRYPTED_BODY_AND_ATTACHMENTS,
        message: 'Mail to IP lawyer must be encrypted'
      })
    }

    // Exemple d'utilisation d'une expression régulière pour détecter des informations confidentielles
    if (/confidential/.test(body)) {
      levelRecommended = ENCRYPTED_BODY_AND_ATTACHMENTS
      matches.push({
        levelForced: CLEARTEXT,
        levelRecommended: ENCRYPTED_BODY_AND_ATTACHMENTS,
        message: 'it seems that this email contains confidential information'
      })
    }

    process.send({
      code: 0,
      data: {
        levelForced,
        levelRecommended,
        matches
      }
    })
    process.exit(0)
  } catch (error) {
    process.send({ code: 1, data: error.stack })
    process.exit(1)
  }
})

WARNING

À noter : Pour analyser correctement le corps d'un mail, il est recommandé de remplacer au préalable les accents et caractère spéciaux.

Un exemple de script peut être trouvé ici. ici