Je mozne aby serverova aplikacia po spusteni zmazala samu seba a bezala z pamete? Cize spustim normalne binarku najekaho http serveru ako sluzbu na pozadi a on sa pri spusteni proste zmaze z disku ale bezi normalne dalej. A ked spadne tak proste admin musi manualne na server nahrat zase binarku a spustit ju.
Pytam sa len zo zvedavosti a ako potencialna ochrana pri hacknuti serveru. Ta manualna praca mi nevadi, neporebujem mat vsetko plne automatizovane a ziskat udaje z ramky bude asi znacne narocnejsie nez z disku aj pre skuseneho cloveka.
Je to možné asi stejně, jako je možné smazat binárku jakéhokoliv jiného běžícího programu. Čili ano, je to možné.
Já ještě dodám, že jako ochrana to moc nefunguje, protože root může vyčíst paměť libovolného procesu nebo celého systému třeba v /proc/.
Je to mozne ale to je tak zle riesenie. Ktore ani nicomu nepomoze.
Citace od: hknmtt kdy 02. 11. 2022, 11:59:59
Pytam sa len zo zvedavosti a ako potencialna ochrana pri hacknuti serveru. Ta manualna praca mi nevadi, neporebujem mat vsetko plne automatizovane a ziskat udaje z ramky bude asi znacne narocnejsie nez z disku aj pre skuseneho cloveka.
Nie, na linuxe je rovnako narocne citat z RAM ako citat z disku.
Dokud to nespojis s nejakym triggerem na prukak* ktery zhodi danou instanci tak to nedava smysl.
(napr. pokud je pocet uzivatelu / obsazenych virtualnich terminalu vetsi nez typicka hodnota po dobu jednotek vterin, tak se provede nasilny shutdown, vyjma pripadu kdy se prihlasujes ty, a muzes tento trigger zneplatnit treba necim jako touch /dev/shm/dontkillme )
Nejak mi unika zmysel, ale ano, da sa to. Ved ked niekto hackne masinu a napr. bude chciet dat podvrhnutu binarku, tak tu povodnu predsa musi nahradit a killnut povodnu a spustit novu.
Podle mě záleží na operačním systému, jeho nastavení a na tom, zda ta aplikace neobsahuje nějaké knihovny, které by se dynamicky linkovaly za běhu - pak by mohl proces po odstranění souborů selhat.
Poměrně běžně se aplikace spouštějí z read-only filesystému, což brání jak přepsání tak i odstranění aplikace.
Možnost přepsat same sebu může být zajímavá, pokud má mít aplikace možnost se sama aktualizovat.
Tazateli jde nejspíš o to aby mu aplikaci někdo neukradl nebo neokopíroval?
Na Linuxu (a unixech obecně) to lze. Nicméně to, že smažete ten soubor, neznamená, že přestane existovat na disku. Souborový systém na unixech funguje tak, že máte data na disku, a na ně vede jeden nebo více ukazatelů (hard linky). Když počet ukazatelů klesne na nulu, soubor se smaže. Když spustíte aplikaci, ta běžící aplikace má na soubor hardlink, který lze najít třeba v adresáři /proc. Tj. v tu chvíli budou existovat minimálně dva odkazy. Když smažete jméno ze souborového systému (to, čemu říkáte ,,smazat soubor"), smaže se ten jeden link ze souborového systému, ale pořád zůstává ten druhý z běžící aplikace. Takže data na disku zůstávají – a kdo má právo číst třeba z /proc, může ten soubor pořád přečíst nebo na něj vytvořit nový odkaz (a tím zase soubor zviditelnit pod nějakým jménem v souborovém systému).
Pozor také na to, že tohle platí, když se spouští jednoduchá nativní binárka. Když budete spouštět nějaký skript, virtuální stroj nebo binárku s odkazy na další knihovny, může se stát, že přistupuje k dalším souborům a otvírá je až v průběhu toho, co aplikace běží. Takže kdybyste smazal celou aplikaci se všemi soubory, může se stát, že najednou v průběhu běhu aplikace bude chtít otevřít další soubor, který ale bude už smazaný. A čistě teoreticky by k tomu mohlo dojít i v rámci jedné binárky – že by aplikace sama svou binárku z nějakého důvodu chtěla otevřít znova na základě cesty k souboru.
Na Windows to udělat nepůjde, protože tam se při spuštění soubor zamkne.
Citace od: Ondrej Nemecek kdy 02. 11. 2022, 12:59:58
Možnost přepsat same sebu může být zajímavá, pokud má mít aplikace možnost se sama aktualizovat.
Tohle uplne nejde - zapisovat do beziciho souboru se neda a typicka error hlaska je "text file busy" (segment .text je jakoze spusteny kod).
Muzete ale binarku smazat a vytvorit soubor znova.
lze to, dokonce to i používáme v produkcích. Hlavní use case je připojení disku s aplikacemi přes nfs, spuštění aplikace a odpojení disku. Děláme to tak u diskless virtuálů, není pak potřeba udržovat dlouhodobé nfs spojení, snadněji se migrují mezi hosty a nemusíme mít složité mechanismy pro distribuci posledních verzí aplikace.
Ale jak píšou ostatní, dokud k tomu nemáš jasný důvod, je zbytečné to dělat, bezpečnost s tím nijak nezvedneš a je to zbytečně komplikované.
Citace od: _Tomáš_ kdy 02. 11. 2022, 14:15:12
lze to, dokonce to i používáme v produkcích. Hlavní use case je připojení disku s aplikacemi přes nfs, spuštění aplikace a odpojení disku. Děláme to tak u diskless virtuálů, není pak potřeba udržovat dlouhodobé nfs spojení, snadněji se migrují mezi hosty a nemusíme mít složité mechanismy pro distribuci posledních verzí aplikace.
To je ale trochu něco jiného – to spoléháte na to, že soubor aplikace se nahraje do paměti nebo zůstane v NFS cache. Ale obecně odpojení disku je jiná operace než smazání souboru.
Citace od: _Tomáš_ kdy 02. 11. 2022, 14:15:12
lze to, dokonce to i používáme v produkcích. Hlavní use case je připojení disku s aplikacemi přes nfs
Ano, aj my sme to tak robili volakedy u nasich app. Ked bola nova verzia, tak sa len prepisala na servri, a uzivatelom sa dalo echo, ze ked vypnu/zapnu program, tak budu mat novu verziu.
.