Scansione delle firme dei virus utilizzando Java


Ho bisogno di cercare le firme dei virus nel file e sto usando java per fare questo ho programmato tutte le altre funzionalità come raccogliere file e filtrarli in quelli che devono essere di ricerca ecc. ho solo bisogno di un piccolo aiuto con il lato della firma del virus.

Quale formato usare (stringa hash, binario, byte)?

Quale metodo dovrei usare per cercare la stringa (algoritmo di ricerca, ecc.)?

Stavo pensando di trasformare il file in byte e quindi usare un Boyer-Moore algoritmo di ricerca stringa per cercare i byte.

Voglio utilizzare le firme dei virus da un file di firma e scansionare un file per loro.

 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++;
    }
}

Grazie per l'aiuto

Author: user3481933, 2014-03-31

3 answers

Se si esegue la scansione per una sola firma del virus, un algoritmo di ricerca a stringa singola come Boyer-Moore sarebbe una buona scelta. (Ci sono anche altri algoritmi di ricerca singoli veloci.)

Ma in genere uno scanner antivirus cerca molte firme di virus e le firme non sono in genere solo semplici firme di sequenza di byte.

Se stai cercando l'algoritmo (tecnicamente) migliore, ti suggerisco di leggere la pagina di Wikipedia su Algoritmi di ricerca di stringhe e considera tutte le alternative a cui si collega. Questo è solo un inizio, dal momento che ci sono (apparentemente) altri algoritmi di ricerca che non sono elencati lì.

Per quanto riguarda la migliore rappresentazione delle firme, ciò dipenderà dagli algoritmi di ricerca utilizzati. Ma dal momento che stai cercando pattern di byte negli oggetti di codice, una rappresentazione basata su byte (stringhe di byte o pattern / regex basati su byte) sembra più appropriata.

(non vedo come gli hash ti aiuterebbero in questo problema ...)


Ma ciò presuppone che tu abbia davvero bisogno della migliore tecnologia di ricerca disponibile. Sembra che questo sia un compito che stai facendo, e per questo la tua scelta originale di Boyer-Moore va bene. Un approccio semplice consiste nel leggere ogni file in memoria e quindi eseguire una ricerca Boyer-Moore per ogni firma del virus. Non sarà veloce come uno scanner antivirus commerciale / professionale, ma dovrebbe essere abbastanza buono per i tuoi scopi.

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

Ci sono diversi algoritmi che ti aiuteranno. Suggerisco Aho-Corasick o Rabin-Karp , ma un albero di suffisso può anche tornare utile. Rabin-Karp è il più facile da implementare, ma Aho-Corasick non usa gli hash e quindi non è necessario prestare particolare attenzione alle collisioni.

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

La tecnica Boyer–Moore non viene utilizzata per le firme dei virus utilizzati da vari fornitori di software antivirus. Usano principalmente MD5, SHA1, SHA256 o impronte digitali di testo sull'intero file o su sezioni di un file. Il più grande database che troverai è per lo più hash di file interi SHA1.

La fonte di ClamAV di Cisco è disponibile pubblicamente su Github. Inoltre, i loro file CVD sono documentati su come aprirli per guardare i loro vari hash. E un CATRAME compresso file (.tar.gz) con una serie di byte per l'intestazione e quindi rinominato in un file .cvd. Alcuni script esistono per estrarre il tar.gz fuori. All'interno, ci sono vari file di testo delimitati da caratteri di vari formati che sono la definizione del virus "database". Il delimitatore cambia nei file, ma è spesso un due punti.

Quando si guarda a questo, si impara che le firme dei virus sono fatte in vari modi:

  • Hash di file interi MD5. Questo era l'originale tecnica, ma alla fine ha avuto falsi positivi perché MD5 ha solo così tanto spazio di indirizzamento. E ' ancora utilizzato per i file più vecchi che non hanno ancora avuto un falso positivo, ma è gradualmente eliminato. Tuttavia, Clam e la maggior parte delle altre app AV lo utilizzano per almeno una piccola percentuale delle loro scansioni. Lo faranno finché non incontreranno un falso positivo. E, se è così, lo passerà a SHA1.

  • SHA1 hash di file interi. Questo è venuto dopo l'MD5 perché ha più spazio di indirizzo. Sfortunatamente, anche questo ha esaurito lo spazio degli indirizzi e alla fine ha avuto falsi positivi, quindi si sono trasferiti su SHA256. Tuttavia, questi vengono ancora utilizzati fino a quando non vengono contrassegnati come defunti a causa di un falso positivo, quindi vengono passati a SHA256. Scoprirai con ClamAV che l'hash dell'intero file SHA1 è l'hash più comune registrato.

  • SHA256 hash di file interi. Questo è disponibile, ma non sempre utilizzato. Il motivo è perché aumenta la dimensione dei file di definizione rispetto agli hash SHA1. Quindi, per ora, le definizioni dei virus sono principalmente memorizzate negli hash di file SHA1 per impostazione predefinita, a meno che non sia necessario uno SHA256 a causa di una collisione falsa positiva con un altro file.

  • Hash di sezione PE stored memorizzati in MD5, SHA1 e SHA256. Alcuni virus mutano e l'unico modo per catturarli è generare un hash basato su quella che viene chiamata una sezione PE di un file eseguibile. Ci sono più sezioni PE in un eseguibile. Di nuovo, vongole iniziato con MD5, ma poi introdotto SHA1 e SHA256 sulla collisione falso positivo.

  • Impronte digitali del file. Si tratta di piccole stringhe di testo UTF8 rilevate in file collegati ad attività dannose, come pagine Web che potrebbero non essere file eseguibili.

  • E altri... Documentazione: https://github.com/vrtadmin/clamav-devel/blob/master/docs/signatures.pdf

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