J'ai travaillé sur un projet qui utilise des PID, /proc
et l'analyse en ligne de commande pour valider les processus sur un système. Mon code a dû être vérifié par les gars de la sécurité qui ont réussi à le casser avec une seule ligne ... embarrassant!Pourquoi est-il permis de modifier argv [0]?
#!/usr/bin/env perl
$0="I am running wild"; # I had no clue you can do this!
system("cat /proc/$$/cmdline");
print("\n");
system("ps -ef | grep $$");
# do bad stuff here...
Mes questions:
Je vois certains usages cas pour ce qui précède, comme les mots de passe cacher données sur la ligne de commande (aussi mauvaise pratique) mais je vois beaucoup plus de problèmes/problèmes quand on peut cacher les processus et parodie
cmdline
. Y at-il une raison pour laquelle cela est autorisé? N'est-ce pas une vulnérabilité du système?Comment puis-je empêcher ou détecter cela? J'ai regardé dans les options de montage
/proc
. Je sais aussi que l'on peut utiliserlsof
pour identifier les processus usurpés basés sur un comportement inattendu, mais cela ne marchera pas dans mon cas. Pour l'instant j'utilise une méthode simple pour détecter si lecmdline
contient au moins un caractère nul (\0
) qui suppose qu'au moins un argument est présent. Dans le code ci-dessus, les espaces doivent être remplacés par des zéros pour contourner cette vérification qui est quelque chose que je ne pouvais pas trouver comment implémenter en perl - écrit jusqu'à la première\0
.
Merci
Prévenir ou détecter quoi? Lorsque les processus ont été renommés? À quelle fin? – Sobrique