2016-06-05 6 views
1

Ich bin neu Scripting einzuschlagen, ein Bash schreiben einige Befehle zu tun, Beispiel:So blenden/Prozesse ändern Name in Bash-Skript von ps genannt

#!/bin/bash 
var1=$1 
var2=$2 
var3="$(~/ourCcompiledprogram -c check -v error -f syn)" 

$var3 $var1 $var2 

, wenn wir die Bash-Skript ausführen es funktioniert sehr gut, aber das Problem ist, wenn jemand, Anmeldung an den Server und exec ps aux, top, htop und so weiter ... wird der Prozess läuft wie folgt angezeigt:/home/user/ourCcompiledprogram -c überprüfen -v Fehler - f force ~/input.file ~/output.file

Wie kann ich das verhindern? oder was fügt man dem Bash-Skript hinzu, um alle externen Befehle auszuführen, die in bash als spezifizierter Name aufgerufen werden?

+0

Diese [\ [mühsame Methode \]] (https://sysdig.com/blog/hiding-linux-processs-for-fun-and-profit) beschreibt, wie dies zu erreichen ist. Werfen Sie einen Blick auf [\ [this \]] (http://stackoverflow.com/questions/4775287/writing-a-program-for-hiding-processs-from-ps-command-result) und [\ [diese \]] (http://stackoverflow.com/search?q= [linux] + hide + a + process) ähnliche SO Fragen. – sjsam

+0

@sjsam hast du den ganzen sysdig Artikel gelesen? "Tatsächlich kann sysdig alles sehen" –

+0

Lesen Sie den Fragetitel noch einmal. Ich habe nicht angenommen, dass auch "sysdig" in Ihrer Umgebung installiert ist. – sjsam

Antwort

2

Linux bietet Informationen zum Ausführen von Prozessen an verschiedenen Stellen im /proc Dateisystem. Die meisten davon sind schwer zu parodieren, ohne viel Arbeit. Im Allgemeinen müssten Sie die Systemausführungsumgebung ändern und selbst dann könnten Sie die Informationen möglicherweise nicht vollständig ausblenden.

In einem Kommentar, @sjsam bietet a link to an article die zeigt, wie die Vorspannung Mechanismus verwenden, um Anrufe abfangen, die das Dateisystem /proc öffnen würden, und dass Informationen über bestimmte Prozesse zu verstecken verwenden. Wie dieser Artikel jedoch auch ausführt, gibt es andere Mechanismen zum Erfassen von Prozessinformationen.

Es gibt vier /proc Einträge, die relevanten Informationen halten: (In allen folgenden PID sollte mit dem numerischen PID des Prozesses ersetzt werden.)

  • /proc/PID/cmdline: Dies ist die am einfachsten zu fälschen, da Es zeigt das Array argv (genauer gesagt die ersten 4.096 Bytes des Arrays argv), in dem argv[0] als Befehlsname dargestellt wird. Mit der Bash exec integrierten, können Sie alles, was Sie wollen, als den Wert argv[0] mit der -a Flag zur Verfügung stellen. (Dies ist eine bash Erweiterung Es ist nicht in anderen Shells vorhanden sein kann.). So können Sie einfach verwenden:

    exec -a SpoofedName RealCommandName arg... 
    

    Da dies die Quelle für ps Informations Standard ist, wird es auf die Befehlsnamen verstecken (aber nicht die Argumente) aus einer gelegentlichen Verwendung von ps.

  • /proc/PID/stat und /proc/PID/status: Diese zeigen Statusinformationen für PID; der erste ist in einem Format, das für Programme leicht zu parsen ist, und der zweite in einem für den Menschen leichter lesbaren Format. Beide zeigen den tatsächlichen Dateinamen der ausführbaren Datei des Prozesses. Dies ist die Informationsquelle für den comm Selektor in ps und auch für den Prozessnamen in top.

    Sie können diesen Namen fälschen, indem Sie einen Symlink zur ausführbaren Datei erstellen und den Symlink anstelle der ursprünglichen Datei ausführen. Das kümmert sich um ps -ocomm und

  • /proc/PID/exe: Dies ist ein Symlink zur eigentlichen ausführbaren Datei. Ich glaube nicht, dass es eine einfache Möglichkeit gibt, diesen Wert zu spoofen, abgesehen davon, dass die ausführbare Datei tatsächlich in eine neue Datei kopiert und diese Datei ausgeführt wird (was nicht wirklich eine Fälschung ist). Soweit ich weiß, wird es jedoch von keinem Befehlszeilendienstprogramm verwendet, das Prozessinformationen anzeigt.Der Benutzer müßte wie etwas geben:

    ls -ld /proc/8325/exe 
    

    oder

    readlink /proc/8325/exe 
    

    die Dateinamen der ausführbaren Datei zu sehen.