Tohle normalni standatni vec ktera nejak funguje na kazdem unixu.
Staci spustit prikaz "import password=abc123" a vy ve vypisu procesu uvidite jen "import password=".
PS: Zarucene to vice-mene je. Ale asi cca pred 15ti lety na Linuxu opravdu doslo k tomu, ze se zmenil ten mechanizmus. Drive stacilo zmenit pointer na string, dneska se pouze prepisuje obsah toho stringu.
Mně na tom přijde prasárna, že se program může zamaskovat a těžko se pak dohledá, s jakými parametry byl spuštěn (na binárku bude ukazovat /proc/$PID/exe
, ale to taky může vést na již smazaný soubor…).
Existuje nějaký způsob, jak root nebo vlastník procesu může zjistit, s jakými parametry a jaký příkaz byl spuštěn? Asi by to šlo přes auditd, ale bez něj?
proces měl vždy možnost změnit svoje env i argv, nevidím v tom nic špatně a řada aplikací toho využívá, ať už zmíněný fork či schování hesel.
Samotný linux si tyhle údaje nepamatuje, pouze má aktuální stav /proc. Nevím o jiné metodě než auditd,accton snoopy, Na Solarisu na to používám s oblibou dtrace, na linuxu by to asi šlo sledovat pro konkrétní strom přes valgrid.
Muzete cist /proc/PID/comm, ten zmena argv[] neovlivnuje. Pri cteni cmdline kernel kouka do pameti beziciho procesu a cte to rovnou od tamtud, takze by sel opatchovat linker, aby tato cast pameti byla jen pro cteni, ale moc velky smysl v tom nevidim, protoze proces to tak jako tak bude moci menit pres exec.
Pro jednoho zakaznika jsem todle chovani menil tak, aby si kernel udrzoval vychozi kopii, ale duvodem byla moznost priority inversion, ktera muze nastat pokud k cmdline pristupuje napriklad ps, netstat atd. a process se rozhodne zmenit mapovani sve pameti.