Analyse des signatures de virus à l'aide de Java


J'ai besoin de rechercher des signatures de virus dans le fichier et j'utilise java pour ce faire, j'ai programmé toutes les autres fonctionnalités telles que la collecte de fichiers et leur filtrage en ceux qui doivent être recherchés, etc. j'ai juste besoin d'un peu d'aide avec le côté signature du virus.

Quel format utiliser (chaîne hachée, binaire, octets)?

Quelle méthode dois-je utiliser pour rechercher la chaîne (algorithme de recherche, etc.)?

Je pensais transformer le fichier en octets puis utiliser un Boyer-Moore algorithme de recherche de chaîne pour rechercher les octets.

Je veux utiliser les signatures de virus à partir d'un fichier de signature et d'analyser un fichier pour eux.

 public void Search(File file) {

    if (file.exists()) {

        if (file.isDirectory()) {
            if (file.canRead()) {

                File[] listOfFiles = file.listFiles();
                if (listOfFiles != null) {
                    for (int i = 0; i < listOfFiles.length; i++) {
                        Search(listOfFiles[i]);
                    }
                }
            } else {
                cannotReadDirCount++;
            }
        } else if (file.isFile()) {

            if (file.canRead()) {

                totalFileCount++;

                for (int a = 0; a < executableCriteriaList.size(); a++) {

                    if (file.getName().endsWith(executableCriteriaList.get(a).toLowerCase()) || file.getName().endsWith(executableCriteriaList.get(a).toUpperCase())) {

                        // scanExecutableFile(file); HERE IS where i need to scan the file
                        searchFiles.add(file);
                    }

                }

            } else {
                cannotReadFileCount++;
            }

        }
    } else {
        cannotReadFileCount++;
    }
}

Merci pour l'Aide

Author: user3481933, 2014-03-31

3 answers

Si vous recherchiez une seule signature de virus, un algorithme de recherche de chaîne unique comme Boyer-Moore serait un bon choix. (Il existe également d'autres algorithmes de recherche simples rapides.)

Mais un scanner de virus recherche généralement de nombreuses signatures de virus, et les signatures ne sont généralement pas de simples signatures de séquence d'octets.

Si vous recherchez le meilleur algorithme (techniquement), je vous suggère de lire la page Wikipedia sur Algorithmes de recherche de chaînes , et considérez toutes les alternatives auxquelles il est lié. Ce n'est qu'un début, car il existe (apparemment) d'autres algorithmes de recherche qui n'y sont pas répertoriés.

Quant à la meilleure représentation des signatures, cela dépendra des algorithmes de recherche que vous utilisez. Mais puisque vous recherchez des modèles d'octets dans les objets de code, une représentation basée sur les octets (chaînes d'octets ou modèles / expressions régulières basés sur les octets) semble la plus appropriée.

(je ne vois pas comment les hachages vous aideraient réellement avec cela problème ...)


Mais cela suppose que vous avez vraiment besoin de la meilleure technologie de recherche disponible. On dirait que c'est une mission que vous faites, et pour cela, votre choix original de Boyer-Moore va bien. Une approche simple consiste à lire chaque fichier en mémoire, puis à effectuer une recherche Boyer-Moore pour chaque signature de virus. Ce ne sera pas aussi rapide qu'un scanner de virus commercial / professionnel, mais il devrait être assez bon pour vos besoins.

 0
Author: Stephen C, 2014-03-31 17:48:25

Il existe plusieurs algorithmes qui vous aideront. Je suggère Aho-Corasick ou Rabin-Karp, mais suffixe arbre peut également être utile. Rabin-Karp est le plus facile à implémenter, mais Aho-Corasick n'utilise pas de hachage et vous n'avez donc pas besoin de prendre soin des collisions.

 1
Author: Ivaylo Strandjev, 2014-03-31 17:26:50

La technique Boyer–Moore n'est pas utilisée pour les signatures de virus utilisées par divers éditeurs de logiciels antivirus. Ils utilisent principalement MD5, SHA1, SHA256 ou des empreintes de texte sur l'ensemble du fichier ou des sections d'un fichier. La plus grande base de données que vous trouverez est principalement des hachages de fichiers entiers SHA1.

La source de ClamAV de Cisco est publiquement disponible sur Github. En outre, leurs fichiers CVD sont documentés sur la façon de les ouvrir pour regarder leurs différents hachages. C'est un GOUDRON Gzippé fichier (.tar.gz) avec une série d'octets pour l'en-tête, puis renommé en .cvd fichier. Certains scripts existent pour extraire le goudron.gz out. À l'intérieur, se trouvent divers fichiers texte délimités par des caractères de différents formats qui sont la définition du virus "bases de données". Le délimiteur change dans les fichiers, mais est souvent un deux-points.

Lorsque vous regardez cela, vous apprenez que les signatures de virus sont effectuées de différentes manières:

  • MD5 hachages de fichiers entiers. C'était à l'origine de technique, mais a finalement eu des faux positifs car MD5 n'a que beaucoup d'espace d'adressage. Il est toujours utilisé pour les fichiers plus anciens qui n'ont pas encore eu de faux positif, mais il est supprimé progressivement. Cependant, Clam et la plupart des autres applications AV l'utilisent pour au moins un petit pourcentage de leurs analyses. Ils le feront jusqu'à ce qu'ils rencontrent un faux positif. Et, si oui, il passera à SHA1.

  • SHA1 hachages de fichiers entiers. Cela est venu après le MD5 car il a plus d'espace d'adressage. Malheureusement, cependant, cela aussi a manqué d'espace d'adressage et a finalement eu des faux positifs, ils ont donc déménagé à SHA256. Cependant, ceux-ci sont toujours utilisés jusqu'à ce qu'ils soient marqués comme défunts en raison d'un faux positif, puis sont passés à SHA256. Vous constaterez avec ClamAV que le hachage entier du fichier SHA1 est le hachage le plus courant enregistré.

  • SHA256 hachages de fichiers entiers. Ceci est disponible, mais pas toujours utilisé. La raison en est qu'il augmente la taille des fichiers de définition comparé aux hachages SHA1. Donc, pour l'instant, les définitions de virus sont principalement stockées dans des hachages de fichiers entiers SHA1 par défaut, sauf si un SHA256 est nécessaire en raison d'une collision faussement positive avec un autre fichier.

  • Les hachages de section PE stored stockés dans MD5, SHA1 et SHA256. Certains virus mutent, et la seule façon de les attraper est de générer un hachage basé sur ce qu'on appelle une section PE d'un fichier exécutable. Il y a plusieurs sections PE dans un exécutable. De Nouveau, La Palourde a commencé avec MD5, mais a ensuite introduit SHA1 et SHA256 sur une collision faussement positive.

  • Fichier Des Empreintes Digitales. Ce sont de petites chaînes de texte UTF8 détectées dans des fichiers liés à une activité malveillante, telles que des pages Web qui peuvent ne pas être des fichiers exécutables.

  • Et d'autres... Documentation: https://github.com/vrtadmin/clamav-devel/blob/master/docs/signatures.pdf

 1
Author: Volomike, 2017-03-20 10:18:27