MINHASH-basierter Code-Relationship & Investigation Toolkit (MCRIT)
McRit ist ein Framework, das erstellt wurde, um die Anwendung des Minhash -Algorithmus im Kontext der Codeähnlichkeit zu vereinfachen. Es kann verwendet werden, um "Shinglers", dh Methoden, die Eigenschaften von abgebauteten Funktionen codieren, schnell zu implementieren, um dann über den Minhash -Algorithmus zur Ähnlichkeitsschätzung zu werden. Es ist darauf zugeschnitten, mit den von SMDA ausgestellten Demontageberichten zu arbeiten.
Verwendung
Dockerisierte Nutzung
Wir empfehlen dringend, den vollständig verpackten Docker-McRit für die triviale Bereitstellung und Verwendung zu verwenden.
In erster Linie stellt dies sicher, dass Sie in allen Komponenten vollständig kompatible Versionen in allen Komponenten haben, einschließlich einer Datenbank für Persistenz und ein Web -Frontend für eine bequeme Interaktion.
Eigenständige Verwendung
Die Installation von McRIT allein erfordert einige weitere Schritte.
Für die folgenden nehmen wir Ubuntu als Host -Betriebssystem an.
Die Anforderungen an die Python -Installation sind in requirements.txt aufgeführt.
# install python and MCRIT dependencies
$ sudo apt install python3 python3-pip
$ pip install -r requirements.txt
Standardmäßig wird MongoDB 5.0 als Backend verwendet, was auch die empfohlene Betriebsart ist, da es eine anhaltende Datenspeicherung bietet. Die folgenden Befehle beschreiben eine Beispielinstallation auf Ubuntu:
# fetch mongodb signing key
$ sudo apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
# add package repository (Ubuntu 22.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 20.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 18.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# install mongodb
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# start mongodb as a service
$ sudo systemctl start mongod
# optionally configure to start the service with system startup
$ sudo systemctl enable mongod
Bei der eigenständigen Installation möchten Sie möglicherweise das MCRIT -Modul basierend auf dem geklonten Repository wie SO installieren:
Nach dieser ersten Installation und bei Wunsch kann McRit ohne Internetverbindung verwendet werden.
Betrieb
Das MCRIT -Backend ist im Allgemeinen in zwei Komponenten unterteilt, einem Server, der eine API -Schnittstelle zur Arbeit zum Arbeiten zur Verfügung stellt, und ein oder mehrere Arbeitnehmer, die in der Warteschlange verarbeiten. Sie können in separaten Muscheln gestartet werden mit:
Und
Standardmäßig hört der Rest -API -Server auf http://127.0.0.1:8000/.
Interaktion
Unabhängig von Ihrer Wahl für die Installation können Sie nach dem Laufen mit dem McRit -Backend interagieren.
McRit Client
Wir haben ein Python -Client -Modul erstellt, das mit allen verfügbaren Endpunkten des Servers arbeiten kann.
Die Dokumentation für dieses Client -Modul ist derzeit in der Entwicklung.
McRit Cli
Es gibt auch eine CLI, die auf diesem Client -Paket basiert, Beispiele:
# query some stats of the data stored in the backend
$ python -m mcrit client status
{ ' status ' : { ' db_state ' : 187, ' storage_type ' : ' mongodb ' , ' num_bands ' : 20, ' num_samples ' : 137, ' num_families ' : 14, ' num_functions ' : 129110, ' num_pichashes ' : 25385}}
# submit a malware sample with filename sample_unpacked, using family name "some_family"
$ python -m mcrit client submit sample_unpacked -f some_family
1.039s - > (architecture: intel.32bit, base_addr: 0x10000000): 634 functions Eine umfangreichere Dokumentation der McRit CLI ist hier verfügbar
McRit IDA -Plugin
Ein IDA -Plugin befindet sich derzeit ebenfalls. Erstellen Sie zunächst Ihre eigene config.py und nehmen Sie die erforderlichen Änderungen ab, abhängig von der Bereitstellung Ihrer MCRIT -Instanz:
cp ./plugins/ida/template.config.py ./plugins/ida/config.py
nano ./plugins/ida/config.py
Dann führen Sie einfach das Skript aus, das gefunden wurde
./plugins/ida/ida_mcrit.py
in Ida.
Referenzdaten
Im Juli 2023 haben wir begonnen, ein Github-Repository zu bevölkern, das Referenzdaten für gemeinsame Compiler und Bibliotheken enthält.
Versionsgeschichte
- 2024-06-20 V1.3.17: Die Löschung und Bereinigung von Arbeitsplätzen sind jetzt robuster und werden versehentlich die Proben nicht unerwünscht - @yankovs - thx !!
- 2024-05-10 V1.3.16: Die Warteschlangenreinigung wurde erweitert, um auch in allen drei Arten von Abfragen (zugeordnet, nicht kartiert, smda) zu löschen.
- 2024-04-17 V1.3.15: Der Arbeiter-
spawningworker beendet nun Kinder nach Queueconfig.queue_Spawningworker_Children_Timeout Sekunden. - 2024-04-02 V1.3.14: Experimentell: Einführung des neuen Arbeiter-
spawningworker -Diese Variante verbraucht Jobs aus der Warteschlange wie gewohnt, verschieben jedoch die tatsächliche Auftragsausführung in einen separaten (Sub-) Prozess, der Probleme mit gesperrten Speicherzuweisungen reduzieren sollte. - 2024-04-02 V1.3.13: Beim Aufräumen der Warteschlange löschen Sie jetzt auch alle fehlgeschlagenen Jobs @yankovs-thx !!
- 2024-03-06 V1.3.12: Es wurde ein Fehler behoben, bei dem der Schutz der jüngsten Stichproben vor der Warteschlangenreinigung zu Schlüsselfehlern führen würde, wie von @yankovs-thx !!
- 2024-02-21 V1.3.10: Bump SMDA bis 1.13.16, das weitere 200 Anweisungen in einer besser entkommenen Kategorie abdeckt (betrifft Minhashes).
- 2024-02-16 V1.3.9: Fertig- und integrierte Funktion für automatisierte Warteschlangenreinigung (standardmäßig deaktiviert) vorgeschlagen von @yankovs-thx !!
- 2024-02-15 V1.3.8: Bump SMDA, um Probleme mit der Versionserkennung in smdafunction zu beheben, druckt im McRitInterface von IDA-Plugin (thx an @Malwarefrank !!).
- 2024-02-12 V1.3.5: Die Neuberechnung von Minhashes zeigt jetzt korrekte Prozentsätze (THX an @Malwarefrank !!).
- 2024-02-02 V1.3.4: Mini-Fix im IDA-Plugin, um zu vermeiden, dass ein potenziell nicht initialisiertes Objekt (thx auf @R0NY123 !!) verweist.
- 2024-02-01 V1.3.2: Fix: Nichtparallelisierte Übereinstimmung gibt jetzt das gleiche Datenformat aus (thx an @dannyquist !!).
- 2024-01-30 V1.3.1: Die Verbindung zu MongoDB ist jetzt vollständig konfigurierbar (thx to @dannyquist !!).
- 2024-01-24 V1.3.0: Breaking: Meilenstein-Veröffentlichung mit Indexierungsverbesserungen für Pichash und Minhash. Um eine vollständige Rückwärtskompatibilität zu gewährleisten, wird eine Neuberechnung aller Hashes empfohlen. Überprüfen Sie diesen Migrationshandbuch.
- 2024-01-23 V1.2.26: Lief auf 0,13.2 festlegen, um sicherzustellen, dass die festgespannte SMDA kompatibel bleibt.
- 2024-01-09 V1.2.25: Stellen Sie sicher, dass wir den Systemstatus liefern können, unabhängig davon, ob es einen
db_state und db_timestamp gibt oder nicht. - 2024-01-05 V1.2.24: Jetzt unterstützt das Argument "Abfrage" in CLI sowie kompakte MatchingResults (ohne Funktionsübereinstimmungen), um den Footprint von Dateien zu reduzieren.
- 2024-01-03 V1.2.23: Begrenzen Sie die maximale Exportgröße, um das System vor OOM-Abstürzen zu schützen.
- 2024-01-02 V1.2.22: Einführte Datenklasse für UniqueBlockSresult mit Convenience-Funktionalität.
- 2023-12-28 V1.2.21: McRitclient nun Durchgang für binäre Abfragen Matching.
- 2023-12-28 V1.2.20: Der Status bietet jetzt den Zeitstempel des letzten DB-Updates.
- 2023-12-13 V1.2.18: Grenzenprüfung gegen Sample_IDs, die an Getuniqueblocks übergeben wurden.
- 2023-12-05 V1.2.15: Förderungsfunktionalität zu Jobobjekten hinzugefügt, Versionsnummer mit McRitWeb ausgerichtet.
- 2023-11-24 V1.2.11: SMDA an Version 1.12.7 vor dem Upgrade von SMDA und eine Datenbankmigration einführen, um PIC + Picblock-Hashes mit der verbesserten Verallgemeinerung neu zu berechnen.
- 2023-11-17 V1.2.10: Die Fähigkeit, ein Autorisierungs-Token für den Server über Header-Feld festzulegen:
apitoken ; fügte die Fähigkeit, nach Stellengruppen zu filtern; Die Fähigkeit, verwaiste Jobs zu fehlern, fügte hinzu. - 2023-10-17 V1.2.8: Minor Fix in Jobgruppen.
- 2023-10-16 V1.2.6: Zusammenfassende Warteschlangenstatistik, verfeinerte Arbeitsplatzklassifizierung.
- 2023-10-13 V1.2.4: Exponierte Warteschlangen-/Job-Löschung an die REST-Schnittstelle, verbesserte Abfragegeschwindigkeit für verschiedene Warteschläge durch Indexierung und parametrisierte MongoDB-Abfragen.
- 2023-10-13 V1.2.3: Die Arbeitnehmer werden nun von den In-Progress-Jobs abgelehnt, falls sie abstürzen (thx bis @yankovs für die Codevorlage).
- 2023-10-03 V1.2.2: MatchingResult-Filterung für min/max Num-Proben (inkl. Fix).
- 2023-10-02 V1.2.0: Meilensteinfreisetzung für Virus Bulletin 2023.
- 2023-09-18 V1.1.7: Bugfix: Tasking-Matching mit 0 Bändern deaktiviert jetzt die Minhash-Matching, wie es zuvor sein sollte. Auch übereinstimmende prozentuale prozentuale Arbeitsprozess.
- 2023-09-15 V1.1.6: Bugfix in Blockmatching, Convenience-Funktionalität für die Interaktion mit Jobobjekten.
- 2023-09-14 V1.1.5: Deaktiviertes GuniCorn als Standard-WSGI-Handler vorerst auf Probleme mit nicht zurückgegebenen Anrufen beim Umgang mit Rechenaufrufen zurückzuführen.
- 2023-09-14 V1.1.4
data_files Bugfix: requirements.txt hinzugefügt setup.py - 2023-09-13 V1.1.3: Einige leistungskritische Konstanten in Parametern extrahiert, die in Minhashconfig und StorageConfig konfigurierbar sind, wurde festgelegt, dass die Fortschrittsberichterstattung für batchierte Übereinstimmungen, Bugfix: Verwendung von Gunicornconfig zu ordnungsgemäßem Rechenzlass.
- 2023-09-13 V1.1.1: Stromlinienanforderungen / Setup, ausgeschlossenes
gunicorn für Windows (thx to @yankovs !!). - 2023-09-12 V1.1.0: Für Linux-Bereitstellungen verwendet McRit nun
gunicorn anstelle von waitress als WSGI-Server aufgrund viel besserer Leistung. Da Gunicorn eine eigene Konfiguration benötigt, erforderte dies die kleinen Versionen (thx to @yankovs !!). - 2023-09-08 V1.0.21: Alle Methoden von McRitclient sind jetzt Apitokens/Benutzernamen in das Backend weiter voran.
- 2023-09-05 V1.0.20: Verwenden Sie die Zwei-Komplement, um Adressen in SampleEntry zu repräsentieren, FunctionEnry beim Speichern in MongoDB, um BSON-Einschränkungen (THX an @yankovs) zu beheben.
- 2023-09-05 V1.0.19: Statistiken verwenden jetzt die internen Zähler, die vor einiger Zeit erstellt wurden (thx bis @yankovs).
- 2023-08-30 V1.0.18: Raffined LinkHunt-Bewertung und Clustering der Ergebnisse über die ICFG-Beziehung.
- 2023-08-24 V1.0.15: Integrierter erster Versuch zur Link-Jagd-Funktion in MatchingResult.
- 2023-08-24 V1.0.13: Der Wiederaufbau der Minhash-Bänder explodiert nicht mehr die RAM-Verwendung. Redundante Pfadüberprüfungen entfernt (thx zu @yankovs).
- 2023-08-23 V1.0.12: Die Fähigkeit, die für die Indizierung verwendeten Minhash-Bänder wieder aufzubauen.
- 2023-08-22 V1.0.11: Ein Fehler behoben, wobei der
function_name beim Importieren von Massendaten nicht auch als function_label hinzugefügt wurde. - 2023-08-11 V1.0.10: Ein Fehler behoben, wobei die Funktion_ID beim Importieren von Massendaten nicht vor dem Hinzufügen von Minhaschen zu Bändern angepasst wird, was möglicherweise zu nicht existierenden Funktionen führt.
- 2023-08-02 V1.0.9: IDA-Plugin kann jetzt nach Blockgröße und Minhash-Score, optimiertes Layout und Benutzererfahrung filtern (THX für das Feedback zu @R0NY123 !!)
- 2023-07-28 V1.0.8: IDA-Plugin kann jetzt farbige Diagramme für Remote-Funktionen anzeigen und Abfragen für PicblockHashes (für Basisblöcke) für die aktuell angezeigte Funktion durchführen.
- 2023-06-06 V1.0.7: Erweiterte Filterfunktionen auf MatchingResult.
- 2023-06-02 V1.0.6: IDA-Plugin kann jetzt Aufgaben mit Abgussjobs, ihre Ergebnisse und Batch-Import-Etiketten anzeigen. Harmonisierung von MatchingResult.
- 2023-05-22 V1.0.3: Mehr Robustheit für die Pfadüberprüfung bei der Verwendung von McRit CLI im Malepedia-Repo-Ordner.
- 2023-05-12 V1.0.1: Einige Fortschritte beim Etikettimport für das IDA-Plugin. Reflektierte API -Erweiterung von McRitweb in McRitclient.
- 2023-04-10 V1.0.0: Meilenstein für BotConf 2023.
- 2023-04-10 V0.25.0: IDA-Plugin kann jetzt Funktionsabfragen für die aktuell angezeigte Funktion durchführen.
- 2023-03-24 V0.24.2: McRitclient kann Benutzername/apitoken weiterleiten, AddjsonReport ist jetzt zukunftsfähig.
- 2023-03-21 V0.24.0: Funktionentrückungen können jetzt zusätzliche Funktionenspeicher speichern, indem Sie Benutzer/Datum senden.
- 2023-03-17 V0.23.0: Es ist nun möglich, Übereinstimmungen für einzelne SMDAftraktionen abzufragen (synchron).
- 2023-03-15 V0.22.0: McRitclient unterstützt jetzt Apitoken- und Rohantworten für eine Teilmenge von Funktionen.
- 2023-03-14 V0.21.0: Backend-Unterstützung für eine feinkörnigere Filterung.
- 2023-03-13 V0.20.6: Backend-Unterstützung für die Filterfamilie/Probe nach Punktzahl in MatchResult.
- 2023-02-22 V0.20.4: Bugfix zur Berechnung der eindeutigen Bewertungen und zum Zugriff auf diese Ergebnisse.
- 2023-02-21 V0.20.3: Unterstützende Frontend-Funktionen mit Ergebnispräsentation.
- 2023-02-17 V0.20.2: Erweitertes Match-Bericht Objekt zur Unterstützung von Frontend-Verbesserungen.
- 2023-02-14 V0.20.0: Überholte Konsole-Client zur Vereinfachung von Shell-basierten Interaktionen mit dem Backend.
- 2023-01-12 V0.19.4: Zusätzliche Filterfunktionen für MatchingResults.
- 2022-12-13 V0.19.1: Es ist nun möglich, spezifische (höhere) Mengen an Bandübereinstimmungen für Kandidaten zu erfordern (dh die Unschärfe der Übereinstimmung reduzieren).
- 2022-12-13 v0.18.x: Aktivieren Sie die Anpassung beliebiger Funktions-IDs.
- 2022-11-25 V0.18.9: Beschleunigte Abfragemeinungen.
- 2022-11-18 V0.18.8: Harmonisierte Handhabung von Löschen und Modifikationen, kleinere Korrekturen.
- 2022-11-13 V0.18.7: Drastisch beschleunigte Probendeletion.
- 2022-11-13 V0.18.6: Funktionalität hinzugefügt, um vorhandene Beispiel- und Familieninformationen zu ändern.
- 2022-11-11 V0.18.2: Das Upgrade-Matching-Verfahren sollte nun in der Lage sein, größere Binärdateien robuster und effizienter zu verarbeiten.
- 2022-11-03 V0.18.1: Kleinere Korrekturen.
- 2022-11-03 V0.18.0: Einzigartige Blockisolation erzeugt jetzt auch einen Vorschlag für eine Yara-Regel, umstrukturierte Ergebnisausgabe.
- 2022-10-24 V0.17.4: Harmonisierte Setup.py mit Anforderungen, verbesserte Speichereffizienz für die Verarbeitung von Cross-Jobs.
- 2022-10-18 V0.17.3: Es wurde ein Convenience-Skript hinzugefügt, um rekursiv SMDA-Berichte aus einem halbstrukturierten Ordner zu erstellen.
- 2022-10-13 V0.17.2: Fest potenzielle OOM-Probleme während der Minhash-Berechnung durch Verarbeitungsfunktionen, die in kleineren Chargen gehasht werden sollen.
- 2022-10-12 V0.17.1: Eine Funktion hinzugefügt, um einen Job zu planen, der sicherstellt, dass Minhashes für alle Proben/Funktionen berechnet wurden.
- 2022-10-11 V0.17.0: Die Suche nach einzigartigen Blöcken ist jetzt eine ashone Aufgabe durch den Arbeiter.
- 2022-10-11 V0.16.0: Die Proben von MatchQuery-Jobs werden nun mit ihren Stichproben/Funktionen gespeichert, um eine bessere Nachbearbeitung zu ermöglichen.
- 2022-10-04 V0.15.4: Server kann jetzt seine Version anzeigen.
- 2022-09-28 V0.15.3: Behandlung von Leistungsproblemen für größere Instanzen und generierende entkommene Anweisungssequenz für eindeutige Blöcke.
- 2022-09-26 V0.15.0: Crossjobs jetzt im Backend liefern Funktionen, um einzigartige Grundblöcke in Proben zu identifizieren.
- 2022-08-29 V0.14.2: Kleinere Korrekturen für die Bereitstellung.
- 2022-08-22 V0.14.0: Arbeitsplätze können nun von anderen Arbeitsplätzen abhängen (Vorbereitung für den Umzug von Crossjobs auf Backend), die Lebensqualitätsverbesserung der Beschäftigung von Arbeitsplätzen.
- 2022-08-17 V0.13.1: Befehlszeilenoption zum Profilerstellen hinzugefügt (erfordert CProfile).
- 2022-08-09 V0.13.0: Kann jetzt effiziente direkte Abfragen für Pichash- und PicblockHash-Matches durchführen.
- 2022-08-09 V0.12.3: Bugfix für FamilyEntry
- 2022-08-08 V0.12.2: Bugfix zur Lieferung von XCFG-Daten, fehlende Abhängigkeit hinzugefügt.
- 2022-08-08 V0.12.0: Integrierte erweiterte Suchsyntax.
- 2022-08-03 V0.11.0: (Breaking) Familien sind jetzt mit einem FamilyEntry vertreten.
- 2022-08-03 V0.10.3: Die Funktion XCFG-Daten standardmäßig in der DB verlassen, den Zugriff auf sie über REST-API und McRitclient ausgesetzt.
- 2022-07-29 V0.10.2: Die Fähigkeit, Familien zu löschen-nun auch XCFG-Informationen für alle Funktionen beibehalten.
- 2022-07-12 V0.10.1: Verbesserte Leistung.
- 2022-07-12 V0.10.0: (Breaking) Job-Handling vereinfacht.
- 2022-05-13 V0.9.4: Fehlerbehebung für den Empfang von übermittelten Dateien.
- 2022-05-13 V0.9.3: Weitere Aktualisierungen für MatchingResults.
- 2022-05-13 V0.9.2: Ein weiteres Feld und weitere Komfortfunktionen in MatchingResult für einen besseren Zugriff-dies sind brechen Änderungen für zuvor erstellte MatchingResults.
- 2022-05-05 V0.9.1: Verarbeitung von Binäreinführungen, kleinere Korrekturen für die Minhash-Warteschlange-Erstveröffentlichung.
- 2022-02-09 V0.9.0: McCrit Picblocks hinzugefügt.
- 2022-01-19 V0.8.0: Migrierte den Client und die Beispiele in das primäre McRit-Repository.
- 2021-12-16 V0.7.0: Erste private Veröffentlichung.
Credits & Notizen
Vielen Dank an Steffen Enders und Paul Hordiienko für ihre Beiträge zum internen Forschungsprototyp dieses Projekts! Vielen Dank an Manuel Blatt für seine umfangreichen Beiträge und Refactorings dieses Projekts sowie für das Kundenmodul!
Anfragen willkommen! :)
Lizenz
MinHash-based Code Relationship & Investigation Toolkit (MCRIT)
Copyright (C) 2022 Daniel Plohmann, Manuel Blatt
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Some plug-ins and libraries may have different licenses.
If so, a license file is provided in the plug-in's folder.