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
dr_checker — DR.CHECKER : Ein Soundy Schwachstellenerkennungstool für Linux-Kernel-Treiber | Kitploit
Tools/GitHubGitHub/ucsb-seclab/dr_checker
Statische AnalyseSchwachstellenscannerSchwachstellenanalyseFuzzingBinäranalyse
GitHubucsb-seclab/dr_checker

dr_checker

DR.CHECKER : Ein Soundy Schwachstellenerkennungstool für Linux-Kernel-Treiber

Repository anzeigen
339724vor 4 JahrenVon 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

DR.CHECKER : Ein soundy Vulnerability Detection Tool für Linux-Kernel-Treiber

License

warning

Dieses Repository enthält alle Quellen, einschließlich der Setup-Skripte. Jetzt mit einer fantastischen Benutzeroberfläche, um die Warnungen zusammen mit den zugehörigen Quelldateien anzuzeigen.

Getestet auf

Ubuntu >= 14.04.5 LTS

Ankündigungen

16. Feb. 2018:

  • DR.CHECKER wurde dockerisiert. Siehe Docker-Verwendung zur Nutzung.

Häufig gestellte Fragen

0. Verwendung des Docker-Setups (Empfohlen)

Siehe das Dokument Docker-Verwendung für Details zur Nutzung von DR.CHECKER in einem vorgefertigten Docker-Container.

1. Setup

Unsere Implementierung basiert auf LLVM, genauer gesagt LLVM 3.8. Wir benötigen außerdem Werkzeuge wie c2xml, um Header zu parsen.

Stellen Sie zunächst sicher, dass Sie cmake (wird von Setup-/Build-Skripten verwendet) und libxml (erforderlich für c2xml) installiert haben:

root@kitploit:~
sudo apt-get install cmake libxml2-dev

Als nächstes haben wir ein einzelnes Skript erstellt, das alle erforderlichen Werkzeuge herunterlädt und baut.

root@kitploit:~
cd helper_scripts
python setup_drchecker.py --help
usage: setup_drchecker.py [-h] [-b TARGET_BRANCH] [-o OUTPUT_FOLDER]

optional arguments:
  -h, --help        show this help message and exit
  -b TARGET_BRANCH  Branch (i.e. version) of the LLVM to setup. Default:
                    release_38 e.g., release_38
  -o OUTPUT_FOLDER  Folder where everything needs to be setup.

Beispiel:

root@kitploit:~
python setup_drchecker.py -o drchecker_deps

Um das Setup abzuschließen, benötigen Sie außerdem Änderungen an Ihrer lokalen PATH-Umgebungsvariable. Das Setup-Skript gibt Ihnen die genauen Änderungen an, die Sie vornehmen müssen.

2. Bauen

Dies hängt vom erfolgreichen Abschluss des Setups ab. Wir haben ein einzelnes Skript, das alles baut, bitte sehr.

root@kitploit:~
cd llvm_analysis
./build.sh

3. Ausführen

Dies hängt vom erfolgreichen Abschluss des Bauens ab. Um DR.CHECKER auf Kernel-Treibern auszuführen, müssen wir diese zunächst in LLVM-Bitcode konvertieren.

3.1 Kernel bauen

Zuerst benötigen wir einen baubaren Kernel. Das bedeutet, Sie sollten den Kernel mit dem normalen Build-Setup kompilieren können, d.h. make. Wir erfassen zunächst die Ausgabe des make-Befehls, aus dieser Ausgabe extrahieren wir den genauen Kompilierungsbefehl.

3.1.1 Erzeugen der Ausgabe von make (oder makeout.txt)

Übergeben Sie einfach V=1 und leiten Sie die Ausgabe in die Datei um. Beispiel:

root@kitploit:~
make V=1 O=out ARCH=arm64 > makeout.txt 2>&1

HINWEIS: VERWENDEN SIE KEINE MEHREREN PROZESSE, d.h. -j. Die Ausführung im Mehrprozessormodus führt zu einer fehlerhaften Ausgabedatei, da mehrere Prozesse versuchen, in die Ausgabedatei zu schreiben.

Das war's. DR.CHECKER kümmert sich ab hier um alles.

3.2 Ausführen der DR.CHECKER-Analyse

Es gibt mehrere Schritte, um die DR.CHECKER-Analyse auszuführen, alle diese Schritte sind in einem einzigen Skript helper_scripts/runner_scripts/run_all.py zusammengefasst. So führen Sie es aus:

root@kitploit:~
python run_all.py --help
usage: run_all.py [-h] [-l LLVM_BC_OUT] [-a CHIPSET_NUM] [-m MAKEOUT] [-g COMPILER_NAME] [-n ARCH_NUM] [-o OUT] [-k KERNEL_SRC_DIR] [-skb] [-skl] [-skp] [-ske] [-ski] [-f SOUNDY_ANALYSIS_OUT]

optional arguments:
  -h, --help            show this help message and exit
  -l LLVM_BC_OUT        Destination directory where all the generated bitcode files should be stored.
  -a CHIPSET_NUM        Chipset number. Valid chipset numbers are:
                        1(mediatek)|2(qualcomm)|3(huawei)|4(samsung)
  -m MAKEOUT            Path to the makeout.txt file.
  -g COMPILER_NAME      Name of the compiler used in the makeout.txt, This is
                        needed to filter out compilation commands. Ex: aarch64-linux-android-gcc
  -n ARCH_NUM           Destination architecture, 32 bit (1) or 64 bit (2).
  -o OUT                Path to the out folder. This is the folder, which
                        could be used as output directory during compiling
                        some kernels. (Note: Not all kernels needs a separate out folder)
  -k KERNEL_SRC_DIR     Base directory of the kernel sources.
  -skb                  Skip LLVM Build (default: not skipped).
  -skl                  Skip Dr Linker (default: not skipped).
  -skp                  Skip Parsing Headers (default: not skipped).
  -ske                  Skip Entry point identification (default: not
                        skipped).
  -ski                  Skip Soundy Analysis (default: not skipped).
  -f SOUNDY_ANALYSIS_OUT    Path to the output folder where the soundy analysis output should be stored.

Das Skript baut, verlinkt und führt DR.CHECKER auf allen Treibern aus, was erhebliche Zeit (45 min - 90 min) in Anspruch nehmen kann. Wenn Sie DR.CHECKER manuell auf einzelnen Treibern ausführen möchten, lesen Sie standalone.

Das obige Skript führt die folgenden Aufgaben im Mehrprozessormodus aus, um alle CPU-Kerne zu nutzen:

3.2.1. LLVM-Build

  • Standardmäßig aktiviert.

Alle generierten Bitcode-Dateien werden in dem Ordner abgelegt, der dem Argument -l übergeben wurde. Dieser Schritt nimmt erhebliche Zeit in Anspruch, abhängig von der Anzahl Ihrer Kerne. Wenn Sie diesen Schritt bereits durchgeführt haben, können Sie ihn durch Angabe von -skb überspringen.

3.2.2. Verlinken aller Treiber-Bitcode-Dateien in einer konsolidierten Bitcode-Datei.

  • Standardmäßig aktiviert.

Dies führt das Verlinken durch, es durchläuft alle Bitcode-Dateien und identifiziert die zugehörigen Bitcode-Dateien, die verlinkt werden müssen, und verlinkt sie (mittels llvm-link) zu einer konsolidierten Bitcode-Datei (die neben der entsprechenden Bitcode-Datei gespeichert wird).

Ähnlich wie beim obigen Schritt können Sie diesen Schritt durch Angabe von -skl überspringen.

3.2.3. Parsen von Headern zur Identifizierung von Einstiegsfunktionsfeldern.

  • Standardmäßig aktiviert.

Dieser Schritt sucht nach den Einstiegspunktdeklarationen in den Header-Dateien und speichert deren Konfiguration in der Datei: hdr_file_config.txt im LLVM-Build-Verzeichnis.

Zum Überspringen: -skp

3.2.4. Identifizieren von Einstiegspunkten in allen konsolidierten Bitcode-Dateien.

  • Standardmäßig aktiviert.

Dieser Schritt identifiziert alle Einstiegspunkte in allen konsolidierten Treiber-Bitcode-Dateien. Die Ausgabe wird in der Datei: entry_point_out.txt im LLVM-Build-Verzeichnis gespeichert.

Beispiel für den Inhalt der Datei entry_point_out.txt:

root@kitploit:~
FileRead:hidraw_read:/home/drchecker/33.2.A.3.123/llvm_bc_out/drivers/hid/llvm_link_final/final_to_check.bc
FileWrite:hidraw_write:/home/drchecker/33.2.A.3.123/llvm_bc_out/drivers/hid/llvm_link_final/final_to_check.bc
IOCTL:hidraw_ioctl:/home/drchecker/33.2.A.3.123/llvm_bc_out/drivers/hid/llvm_link_final/final_to_check.bc

Zum Überspringen: -ske

3.2.5. Ausführen der Soundy-Analyse auf allen identifizierten Einstiegspunkten.

  • Standardmäßig aktiviert.

Dieser Schritt führt DR.CHECKER auf allen Einstiegspunkten in der Datei entry_point_out.txt aus. Die Ausgabe für jeden Einstiegspunkt wird in dem Ordner gespeichert, der für die Option -f angegeben wurde.

Zum Überspringen: -ski

3.2.6 Beispiel:

Nun zeigen wir ein Beispiel vom Punkt, an dem Sie Kernel-Quellen haben, bis zum Erhalt von Schwachstellenwarnungen.

Wir haben einen Mediatek-Kernel 33.2.A.3.123.tar.bz2 hochgeladen. Laden Sie die obige Datei zunächst herunter und entpacken Sie sie.

Angenommen, Sie haben die obige Datei in einem Ordner namens ~/mediatek_kernel entpackt.

3.2.6.1 Bauen
root@kitploit:~
cd ~/mediatek_kernel
source ./env.sh
cd kernel-3.18
# the following step may not be needed depending on the kernel
mkdir out
make O=out ARCH=arm64 tubads_defconfig
# this following command copies all the compilation commands to makeout.txt
make V=1 -j8 O=out ARCH=arm64 > makeout.txt 2>&1
3.2.6.2 Ausführen von DR.CHECKER
root@kitploit:~
cd <repo_path>/helper_scripts/runner_scripts

python run_all.py -l ~/mediatek_kernel/llvm_bitcode_out -a 1 -m ~/mediatek_kernel/kernel-3.18/makeout.txt -g aarch64-linux-android-gcc -n 2 -o ~/mediatek_kernel/kernel-3.18/out -k ~/mediatek_kernel/kernel-3.18 -f ~/mediatek_kernel/dr_checker_out

Der obige Befehl nimmt einige Zeit (30 min - 1 Std.) in Anspruch.

3.2.6.3 Die Ausgabe verstehen

Zunächst befinden sich alle Analyseergebnisse im Ordner: ~/mediatek_kernel/dr_checker_out (Argument für die Option -f), für jeden Einstiegspunkt wird eine .json-Datei erstellt, die alle Warnungen im JSON-Format enthält. Diese json-Dateien enthalten nach Kontexten organisierte Warnungen.

Zweitens enthält der Ordner ~/mediatek_kernel/dr_checker_out/instr_warnings (bezogen auf das Argument für die Option -f) Warnungen, die nach Anweisungsposition organisiert sind.

Diese Warnungen können mit unserem Visualizer analysiert werden.

Schließlich wird eine Zusammenfassung aller Warnungen für jeden Einstiegspunkt, organisiert nach Typ, in die Ausgabe-CSV-Datei geschrieben: ~/mediatek_kernel/dr_checker_out/warnings_stats.csv (bezogen auf das Argument für die Option -f).

3.2.7 Hinweise:

3.2.7.1 Wert für die Option -g

Um einen Wert für die Option -g anzugeben, müssen Sie den Namen des *-gcc-Binärprogramms kennen, das zum Kompilieren des Kernels verwendet wurde. Eine einfache Möglichkeit, dies herauszufinden, besteht darin, in makeout.txt nach gcc zu grep; Sie werden Compiler-Befehle sehen, aus denen Sie den Namen des *-gcc-Binärprogramms ableiten können.

Für unser obiges Beispiel: Wenn Sie grep gcc makeout.txt für den Beispiel-Build ausführen, werden Sie viele Zeilen wie die folgende sehen:

root@kitploit:~
aarch64-linux-android-gcc -Wp,-MD,fs/jbd2/.transaction.o.d  -nostdinc -isystem ...

Daher sollte der Wert für -g aarch64-linux-android-gcc lauten.

Wenn der zu bauende Kernel 32-Bit ist, wird das Binärprogramm höchstwahrscheinlich arm-eabi-gcc sein.

3.2.7.2 Wert für die Option -a

Abhängig vom Chipsatz-Typ müssen Sie die entsprechende Nummer angeben.

3.2.7.3 Wert für die Option -o

Dies ist der Pfad des Ordners, der der Option O= für den make-Befehl während des Kernel-Builds übergeben wurde.

Nicht alle Kernel benötigen einen separaten Ausgabepfad. Sie können den Kernel bauen, indem Sie die Option O nicht angeben; in diesem Fall SOLLTEN SIE KEINEN Wert für diese Option angeben, während Sie run_all.py ausführen.

3.3 Visualisieren der DR.CHECKER-Ergebnisse ❄️

Wir bieten eine webbasierte Benutzeroberfläche zur Anzeige aller Warnungen. Bitte lesen Sie Visualisierung.

3.6 Deaktivieren von Schwachstellenprüfern

Sie können einen oder mehrere Schwachstellenprüfer deaktivieren, indem Sie die entsprechenden #define DISABLE_*-Zeilen in BugDetectorDriver.cpp auskommentieren.

3.5 Nachbearbeitung der DR.CHECKER-Ergebnisse

Nach Ihren Wünschen stellen wir auch ein Skript zur Nachbearbeitung der Ergebnisse bereit. Schauen Sie es sich an.

Viel Spaß!!

4. Kontakt

  • Slack: SLACK-KANAL BEITRETEN
  • Aravind Machiry ([email protected])
Tool herunterladen