Didacticiel 2 : Détection d'un format de fichier ZIP chiffré
Ce didacticiel explique comment créer un script personnalisé pour détecter les fichiers ZIP protégés par mot de passe (chiffrés). Tandis qu'un serveur de détection
Symantec Data Loss Prevention
peut détecter les fichiers ZIP chiffrés, un agent Endpoint ne peut pas. La solution qui est fournie ici vous permet de contourner ce problème.Ce script détecte si un fichier ZIP est chiffré en vérifiant si le bit de chiffrement est activé sur la première entrée du fichier. Puisque les fichiers ZIP ne peuvent être chiffrés que sur une base par fichier, ce script fonctionne uniquement si tous les fichiers ou le premier fichier du ZIP sont chiffrés.
Ce didacticiel suppose que vous avez terminé le premier didacticiel.
- Pour détecter un format de fichier ZIP chiffré
- Créez plusieurs (15 ou plus) fichiers ZIP protégés par mot de passe et mettez-les dans un répertoire tel quec:\temp\files\ZIP.
- Créez un deuxième jeu de fichiers ZIP (5 ou plus) qui ne sont pas chiffrés de sorte que vous ayez des résultats de correspondance et sans correspondance.Placez ces fichiers ZIP non chiffrés dans un deuxième répertoire tel quec:\temp\files\ZIP2.
- Lancez l'utilitaire d'analyseur de type de fichier (analyzer_gui.exe).
- Ajoutez le répertoirec:\temp\files\ZIPcomme l'ensemble de données.Ajoutez également le répertoirec:\temp\files\ZIP2à l'ensemble de ensemble de données.
- Entrez et sélectionnez les paramètres d'ensemble de données requis :
- Filtre de nom de fichier:[\w\s]+.[\w]+
- Nombre d'octets:1024
- Taille d'unité:1
- Types d'analyseur: OCTET
- Cliquez surAnalyser l'ensemble de données.
- COLUMN_MATCH étant sélectionné, cliquez surAnalyser les données de tables.L'utilitaire met en valeur les correspondances d'octet entre tous les fichiers. Notez les correspondances exactes pour les 6 premiers octets de tous les fichiers. Notez également que le 7ème octet est 0 pour les fichiers ZIP qui ne sont pas chiffrés. Le septième octet est le bit de chiffrement.
- Dans le champSolution, entrez le script suivant :$pktag=ascii('PK'); $frecord=getHexStringValue('0304'); $pkbytes=getBinaryValueAt($data, 0x0, 2); assertTrue($pktag == $pkbytes); $recordbytes=getBinaryValueAt($data, 0x2, 2); assertTrue($frecord == $recordbytes); $cryptByte=getBinaryValueAt($data, 0x6, 1); $encrypted=mod($cryptByte, 2); assertTrue($encrypted == 1);
- La solution devrait correspondre uniquement aux fichiers ZIP dans l'ensemble de données qui sont chiffrés. Les fichiers ZIP qui ne sont pas chiffrés devraient apparaître dans le volet "Fichiers discordants".
- $pktag=ascii('PK');La première déclaration assigne à la variable "$pktag" la valeur "PK." . Si vous faites basculer le type d'analyseur surASCII, vous voyez que les deux premiers octets de tous les fichiers ZIP sont "P" et "K".
- $frecord=getHexStringValue('0304');La deuxième déclaration attribue à la variable "$frecord" la valeur de "0304", qui correspond aux 3e et 4e octets des fichiers ZIP. (Basculez à nouveau sur BYTE pour que le type d'analyseur confirme cette valeur.)
- $pkbytes=getBinaryValueAt($data, 0x0, 2);La troisième déclaration obtient la valeur binaire des deux premiers octets.
- assertTrue($pktag == $pkbytes);La quatrième déclaration compare les valeurs des variables "$pktag" et "$pkbytes", à la recherche d'une correspondance exacte de "P" et "K". Si les valeurs correspondent, la valeur assertTrue est obtenue.
- $recordbytes=getBinaryValueAt($data, 0x2, 2);La cinquième déclaration vérifie la valeur binaire des 3e et 4e octets (démarrez au 3e octet et comptez 2). Ici, les valeurs (en mode BYTE) sont "03" et "04".
- assertTrue($frecord == $recordbytes);La sixième déclaration compare les valeurs des variables "$frecord" et "$recordbytes". Si la valeur retournée ("$recordbytes") correspond à la valeur attribuée à la variable "$frecord" ("03" et "04"), la valeur assertTrue est obtenue.
- $cryptByte=getBinaryValueAt($data, 0x6, 1);La septième déclaration obtient la valeur binaire au 7e octet (colonne 6).
- $encrypted=mod($cryptByte, 2);La huitième déclaration divise la valeur du 7e octet (telle qu'attribuée à la variable "$cryptByte") par "2". Elle attribue alors le reste à la variable "$encrypted".
- assertTrue($encrypted == 1);La neuvième déclaration vérifie la valeur de la variable "$encrypted". Si la valeur est zéro (aucun reste), le fichier ZIP n'est pas chiffré. S'il y a un reste, le fichier ZIP est chiffré.