Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/accenture/vulfi
Statische AnalyseSchwachstellenanalyseReverse EngineeringBinäranalyse
GitHubaccenture/vulfi

VulFi

IDA Pro-Plugin für abfragebasiertes Suchen in der Binärdatei, hauptsächlich nützlich für die Schwachstellenforschung.

Repository anzeigen
66974vor 1 JahrVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

VulFi v3.0

Einleitung

Das VulFi (Vulnerability Finder) Tool ist ein Plugin für IDA Pro, das bei der Fehlersuche in Binärdateien hilft. Sein Hauptziel ist es, eine einzige Ansicht mit allen Querverweisen auf die interessantesten Funktionen (wie strcpy, sprintf, system, usw.) bereitzustellen. Für Fälle, in denen ein Hexrays-Dekompiler verwendet werden kann, wird versucht, Aufrufe dieser Funktionen auszuschließen, die aus der Perspektive der Sicherheitsforschung nicht interessant sind (denken Sie an so etwas wie strcpy(dst,"Hello World!")). Ohne den Dekompiler sind die Regeln viel einfacher (um nicht von der Architektur abhängig zu sein) und schließen daher nur die offensichtlichsten Fälle aus.

Siehe Changelog für weitere Informationen zu Aktualisierungen.

Installation

Platzieren Sie die Dateien vulfi.py, vulfi_prototypes.json und vulfi_rules.json im IDA-Plugin-Ordner (cp vulfi* <IDA_PLUGIN_FOLDER>).

Vorbereiten der Datenbankdatei

Bevor Sie VulFi ausführen, stellen Sie sicher, dass Sie die Binärdatei, mit der Sie arbeiten, gut verstehen. Versuchen Sie, alle Standardfunktionen (strcpy, memcpy, usw.) zu identifizieren und entsprechend zu benennen. Das Plugin ist nicht case-sensitiv, daher sind MEMCPY, Memcpy und memcpy alles gültige Namen. Beachten Sie jedoch, dass die Suche nach der Funktion eine exakte Übereinstimmung erfordert. Das bedeutet, dass memcpy? oder std_memcpy (oder jede andere Variante) nicht als Standardfunktion erkannt wird und daher bei der Suche nach potenziellen Schwachstellen nicht berücksichtigt wird. Wenn Sie mit einer unbekannten Binärdatei arbeiten, müssen Sie zuerst die Compiler-Optionen festlegen: Options > Compiler. Danach wird VulFi sein Bestes tun, um alle offensichtlichen Fehlalarme zu filtern (z. B. Aufrufe von printf mit einer konstanten Zeichenkette als erstem Parameter). Bitte beachten Sie, dass das Plugin zwar ohne Bindung an eine bestimmte Architektur entwickelt wurde, einige Prozessoren jedoch nicht vollständig die Angabe von Typen unterstützen. In diesem Fall markiert VulFi einfach alle Querverweise auf potenziell gefährliche Standardfunktionen, damit Sie mit der manuellen Analyse fortfahren können. In diesen Fällen können Sie von den Nachverfolgungsfunktionen des Plugins profitieren.

Verwendung

Scannen

Um den Scan zu starten, wählen Sie die Option Search > VulFi aus der oberen Menüleiste. Dadurch wird entweder ein neuer Scan gestartet oder es werden frühere Ergebnisse gelesen, die in der idb/i64-Datei gespeichert sind. Die Daten werden automatisch gespeichert, wann immer Sie die Datenbank speichern.

Sobald der Scan abgeschlossen ist oder die vorherigen Ergebnisse geladen wurden, wird eine Tabelle mit einer Ansicht angezeigt, die die folgenden Spalten enthält:

  • IssueName - Wird als Titel für den vermuteten Schwachstellen verwendet.
  • FunctionName - Name der Funktion.
  • FoundIn - Die Funktion, die den potenziell interessanten Verweis enthält.
  • Address - Die Adresse des erkannten Aufrufs.
  • Status - Der Überprüfungsstatus, jedem neuen Element wird initial Not Checked zugewiesen. Die anderen Status sind False Positive, Suspicious und Vulnerable. Diese können über das Rechtsklick-Menü auf ein Element gesetzt werden und sollten die Ergebnisse der manuellen Überprüfung des jeweiligen Funktionsaufrufs widerspiegeln.
  • Priority - Ein Versuch, interessantere Aufrufe gegenüber weniger interessanten zu priorisieren. Mögliche Werte sind High, Medium und Low (sowie Info für Fälle, in denen der Scanner nicht in der Lage war, alle Parameter korrekt zu identifizieren). Die Prioritäten werden zusammen mit anderen Regeln in der Datei vulfi_rules.json definiert.
  • Comment - Ein benutzerdefinierter Kommentar für das jeweilige Element.

Für den Fall, dass keine Daten in der idb/i64-Datei vorhanden sind oder der Benutzer einen neuen Scan durchführen möchte, fragt das Plugin, ob der Scan mit den standardmäßig enthaltenen Regeln oder mit einer benutzerdefinierten Regeldatei durchgeführt werden soll. Bitte beachten Sie, dass das Ausführen eines neuen Scans mit bereits vorhandenen Daten die zuvor gefundenen Elemente, die durch eine Regel mit demselben Namen wie die zuvor gespeicherten Ergebnisse identifiziert wurden, nicht überschreibt. Daher werden beim erneuten Ausführen des Scans vorhandene Kommentare und Statusaktualisierungen nicht gelöscht.

basic

Im Rechtsklick-Kontextmenü der VulFi-Ansicht können Sie das Element auch aus den Ergebnissen entfernen oder alle Elemente entfernen. Bitte beachten Sie, dass alle Kommentare oder Statusaktualisierungen nach dieser Operation verloren gehen. Ab Version 2.1 unterstützt VulFi auch Operationen, die auf mehreren ausgewählten Elementen gleichzeitig durchgeführt werden. Dies ermöglicht es, mehreren Elementen einen bestimmten Status zuzuweisen, sie zu löschen oder denselben Kommentar zu mehreren Zeilen hinzuzufügen. Manchmal kommt es vor, dass die Operation nicht korrekt aktualisiert wird. Aktualisieren Sie in diesem Fall die Benutzeroberfläche mehrmals mit Ctrl+U, bis Sie die Änderungen sehen.

Untersuchung

Wenn Sie die erkannte Instanz einer möglicherweise angreifbaren Funktion überprüfen möchten, doppelklicken Sie einfach auf eine beliebige Stelle in der gewünschten Zeile, und IDA bringt Sie zu der Speicherstelle, die als potenziell interessant identifiziert wurde. Mit einem Rechtsklick und der Option Set Vulfi Comment können Sie einen Kommentar für die jeweilige Instanz eingeben (z. B. um den Status zu rechtfertigen).

Hinzufügen weiterer Funktionen

Das Plugin ermöglicht auch das Erstellen benutzerdefinierter Regeln. Diese Regeln können in der IDA-Oberfläche definiert werden (ideal für einzelne Funktionen) oder als benutzerdefinierte Regeldatei bereitgestellt werden (ideal für Regeln, die mehrere Funktionen abdecken sollen).

Innerhalb der Oberfläche

Wenn Sie eine benutzerdefinierte Funktion verfolgen möchten, die während der Analyse identifiziert wurde, klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im Funktionsrumpf und wählen Sie Add <name> function to VulFi. Sie können auch einen Funktionsnamen in der aktuellen Disassembly-/Dekompiler-Ansicht markieren und mit der rechten Maustaste anklicken, um nicht in den Funktionsrumpf wechseln zu müssen.

add custom

Benutzerdefinierte Regelsammlung

Es ist auch möglich, eine benutzerdefinierte Datei mit mehreren Regeln zu laden. Um eine benutzerdefinierte Regeldatei mit der untenstehenden Struktur zu erstellen, können Sie die enthaltene Vorlagendatei hier verwenden.

root@kitploit:~
[   // Ein Array von Regeln
    {
        "name": "RULE NAME", // Der Name der Regel
        "function_names":[
            "function_name_to_look_for" // Liste aller Funktionsnamen, die mit den in dieser Regel definierten Bedingungen abgeglichen werden sollen
        ],
        "wrappers":true,    // Auch nach Wrappern der obigen Funktionen suchen (beachten Sie, dass die gewrappte Funktion ebenfalls der Regel entsprechen muss)
        "mark_if":{
            "High":"True",  // Wenn True, markieren mit Priorität High (siehe Regeln unten)
            "Medium":"False", // Wenn True, markieren mit Priorität Medium (siehe Regeln unten)
            "Low": "False" // Wenn True, markieren mit Priorität Low (siehe Regeln unten)
        }
    }
]

Ein Beispiel für eine Regel, die nach allen Querverweisen auf die Funktion malloc sucht und prüft, ob ihr Parameter nicht konstant ist und der Rückgabewert der Funktion überprüft wird, ist unten dargestellt:

root@kitploit:~
{
    "name": "Possible Null Pointer Dereference",
    "function_names":[
        "malloc"
    ],
    "wrappers":false,
    "mark_if":{
        "High":"not param[0].is_constant() and not function_call.return_value_checked()",
        "Medium":"False",
        "Low": "False"
    }
}

Regeln

Hilfsmittel für Nicht-Funktions-Konstrukte

  • Loop Check - Markiert alle Schleifen. In diesem Fall ist param[0] der Zähler der Schleife (falls erkannt) und param[1] ist die Bedingung, gegen die der Zähler geprüft wird, um die Schleife zu beenden.
  • Array Access - Markiert alle Array-Zugriffe. In diesem Fall ist param[0] das Array und param[1] der Index.

Dieselben Funktionen können beim Erstellen von Regeln verwendet werden wie für normale Funktionsparameter (alles, was auf param[<index>] aufgerufen werden kann).

Verfügbare Variablen

  • param[<index>]: Zugriff auf den Parameter eines Funktionsaufrufs (Index beginnt bei 0)
  • function_call: Zugriff auf das Funktionsaufruf-Ereignis
  • param_count: Enthält die Anzahl der Parameter, die an eine Funktion übergeben wurden

Verfügbare Funktionen

  • Ist Parameter eine Konstante: param[<index>].is_constant()
  • Numerischen Wert des Parameters abrufen: param[<index>].number_value()
  • Zeichenkettenwert des Parameters abrufen: param[<index>].string_value()
  • Ist der Parameter nach dem Aufruf auf null gesetzt: param[<index>].set_to_null_after_call()
  • Ist der Rückgabewert einer Funktion überprüft: function_call.return_value_checked(<constant_to_check>)
  • Wird der Parameter auch als Parameter in einem der Aufrufe einer angegebenen Liste von Funktionen vor/nach verwendet: param[<index>].used_in_call_<before|after>(["function1","function2"])
  • Ist der Aufruf der ausgewählten Funktion von einer bestimmten anderen Funktion aus erreichbar: function_call.reachable_from("<function_name>")
  • Ist der Parameter Teil eines Signed-Vergleichs: param[<index>].is_sign_compared()
  • Wird der Parameter innerhalb der aktuellen Funktion als Array-Index verwendet: param[<index>].used_as_index()

Beispiele

  • Markieren aller Aufrufe einer Funktion, bei denen der dritte Parameter > 5 ist: param[2].number_value() > 5
  • Markieren aller Aufrufe einer Funktion, bei denen der zweite Parameter "%s" enthält: "%s" in param[1].string_value()
  • Markieren aller Aufrufe einer Funktion, bei denen der zweite Parameter nicht konstant ist: not param[1].is_constant()
  • Markieren aller Aufrufe einer Funktion, bei denen der Rückgabewert gegen einen Wert validiert wird, der der Anzahl der Parameter entspricht: function_call.return_value_checked(param_count)
  • Markieren aller Aufrufe einer Funktion, bei denen der Rückgabewert gegen einen beliebigen Wert validiert wird: function_call.return_value_checked()
  • Markieren aller Aufrufe einer Funktion, bei denen keiner der Parameter ab dem dritten konstant ist: all(not p.is_constant() for p in param[2:])
  • Markieren aller Aufrufe einer Funktion, bei denen einer der Parameter konstant ist: any(p.is_constant() for p in param)
  • Markieren aller Aufrufe einer Funktion: True
  • Markieren aller Aufrufe einer Funktion, bei denen der zweite Parameter nicht konstant ist und nicht mit strlen überprüft wird:

Probleme und Warnungen

  • Wenn Sie einen Parameter mit einem Index anfordern, der außerhalb des gültigen Bereichs liegt, wird jeder Aufruf einer Funktion als Low-Priorität markiert. Dies ist ein Weg, um zu vermeiden, dass Querverweise übersehen werden, bei denen es nicht möglich war, alle Parameter korrekt zu ermitteln (dies gilt hauptsächlich im Disassembly-Modus).
  • Wenn Sie innerhalb der VulFi-Ansicht suchen und den Kontext der Ansicht wechseln und zurückkehren, lädt die Ansicht nicht. Sie können dies lösen, indem Sie die Suchoperation beenden, bevor Sie den Kontext wechseln, die VulFi-Ansicht in die Seitenansicht verschieben, sodass sie immer sichtbar ist, oder die Ansicht schließen und erneut öffnen (es gehen keine Daten verloren).
  • Scans für exotischere Architekturen enden mit vielen Fehlalarmen.
  • Mit der Einführung von Mehrfachauswahl-Operationen im VulFi-Auswahldialog schlägt die Aktualisierungsoperation manchmal fehl, die Ansicht zu aktualisieren. Wenn Sie bemerken, dass Ihre Änderungen nicht übernommen wurden, verwenden Sie die Tastenkombination Ctrl+U, um die Ansicht manuell zu aktualisieren (mehrmals).
Tool herunterladen
not param[1].is_constant() and not param[1].used_in_call_before(["strlen"])
  • Markieren aller Aufrufe einer Funktion, die von der Funktion read erreichbar sind: function_call.reachable_from("read")