Viry v GNU / Linux: skutečnost nebo mýtus?

Kdykoli debata skončila virus y GNU / Linux uživateli netrvá dlouho, než se objeví (obvykle Windows) Co to říká:

«V systému Linux neexistují žádné viry, protože tvůrci těchto škodlivých programů neztrácejí čas tím, že budou dělat něco pro operační systém, který téměř nikdo nepoužívá »

Na kterou jsem vždy odpověděl:

„Problém není v tom, ale tvůrci těchto škodlivých programů nebudou ztrácet čas vytvářením něčeho, co bude napraveno první aktualizací systému, a to ani za méně než 24 hodin.“

A nemýlil jsem se, jak tento vynikající článek publikoval v Číslo 90 (Rok 2008) z časopisu Todo Linux. Jeho herec david santo orcero poskytuje nám technickým způsobem (ale snadno pochopitelné) vysvětlení proč GNU / Linux chybí tento typ škodlivého softwaru.

100% doporučeno. Nyní budou mít více než přesvědčivý materiál k umlčení každého, kdo mluví bez pevného základu o tomto tématu.

Stáhnout článek (PDF): Mýty a fakta: Linux a viry

ÚPRAVA:

Zde je přepsaný článek, protože se domníváme, že je mnohem pohodlnější číst tímto způsobem:

================================================== ======================

Debata o Linuxu a virech není nová. Každý tak často vidíme na seznamu e-mail s dotazem, zda existují viry pro Linux; a automaticky někdo odpoví kladně a tvrdí, že pokud nejsou populárnější, je to proto, že Linux není tak rozšířený jako Windows. Časté jsou také tiskové zprávy vývojářů antivirů, které uvádějí, že vydávají verze linuxových virů.

Osobně jsem občas diskutoval s různými lidmi poštou nebo distribučním seznamem ohledně otázky, zda v systému Linux existují viry či nikoli. Je to mýtus, ale je složité bourat mýtus nebo spíš podvod, zvláště pokud je to způsobeno ekonomickým zájmem. Někdo má zájem vyjádřit myšlenku, že pokud Linux nemá takové problémy, je to proto, že jej používá jen velmi málo lidí.

V době zveřejnění této zprávy bych chtěl napsat definitivní text o existenci virů v Linuxu. Bohužel, když pověra a ekonomický zájem na denním pořádku převládají, je těžké vybudovat něco definitivního.
Pokusíme se zde však učinit rozumně úplný argument, abychom odzbrojili útoky každého, kdo se chce hádat.

Co je to virus?

Nejprve začneme definováním, co je to virus. Jedná se o program, který se automaticky kopíruje a spouští a jehož cílem je změnit normální fungování počítače bez souhlasu nebo znalostí uživatele. Za tímto účelem viry nahradí spustitelné soubory jinými infikovanými jejich kódem. Definice je standardní a jedná se o jednorázové shrnutí položky Wikipedia o virech.
Nejdůležitější částí této definice, která odlišuje virus od jiného malwaru, je to, že se virus nainstaluje sám, bez svolení uživatele nebo jeho vědomí. pokud se nenainstaluje sám, nejde o virus: může to být rootkit nebo trojský kůň.

Rootkit je oprava jádra, která umožňuje skrýt určité procesy před obslužnými programy oblasti uživatele. Jinými slovy, jedná se o úpravu zdrojového kódu jádra, jejímž účelem je, aby obslužné programy, které nám umožňují zjistit, co běží v daném okamžiku, nezobrazovaly určitý proces nebo určitého uživatele.

Trojský kůň je analogický: jedná se o úpravu zdrojového kódu konkrétní služby, která skryje určitou podvodnou činnost. V obou případech je nutné získat zdrojový kód přesné verze nainstalované na stroji Linux, opravit kód, překompilovat jej, získat oprávnění správce, nainstalovat opravený spustitelný soubor a inicializovat službu - v případě trojského koně - nebo operační systém kompletní - v případě
rootkit–. Jak vidíme, proces není triviální a nikdo to všechno nemůže udělat „omylem“. Oba při své instalaci vyžadují, aby někdo s oprávněními správce vědomě provedl řadu kroků přijímajících rozhodnutí technické povahy.

Což není nedůležitá sémantická nuance: pro instalaci viru stačí spustit infikovaný program jako běžný uživatel. Na druhou stranu, pro instalaci rootkitu nebo trojského koně je nezbytné, aby nebezpečný člověk osobně vstoupil do účtu root počítače a neautomatizovaným způsobem provedl řadu kroků, které jsou potenciálně zjistitelné. virus se šíří rychle a efektivně; rootkit nebo trojský kůň je potřebuje, aby nás konkrétně zaměřil.

Přenos virů v systému Linux:

Mechanismus přenosu viru je tedy tím, co ho jako takový definuje, a je základem pro jeho existenci. operační systém je citlivější na viry, tím snazší je vyvinout efektivní a automatizovaný přenosový mechanismus.

Předpokládejme, že máme virus, který se chce šířit sám. Předpokládejme, že byl spuštěn běžným uživatelem, nevinně, při spuštění programu. Tento virus má výhradně dva přenosové mechanismy:

  • Replikujte se tím, že se dotknete paměti jiných procesů a ukotvíte se k nim za běhu.
  • Otevření spustitelných souborů a přidání jejich kódu - payload - do spustitelného souboru.

Všechny viry, které za takové můžeme považovat, mají alespoň jeden z těchto dvou přenosových mechanismů. O dva. Již neexistují žádné mechanismy.
Pokud jde o první mechanismus, pamatujme si architekturu virtuální paměti Linuxu a jak fungují procesory Intel. Mají čtyři prsteny očíslované od 0 do 3; čím nižší číslo, tím větší oprávnění má kód spuštěný v daném kruhu. Tyto kroužky odpovídají stavům procesoru, a tedy tomu, co lze udělat se systémem, který je ve specifickém kruhu. Linux využívá ring 0 pro jádro a ring 3 pro procesy. neexistuje žádný procesní kód, který běží na kruhu 0, a neexistuje žádný kód jádra, který běží na kruhu 3. Existuje pouze jediný vstupní bod do jádra z kruhu 3: 80h přerušení, které vám umožní skočit z oblasti, kde je to uživatelský kód do oblasti, kde je kód jádra.

Architektura Unixu obecně a zejména Linuxu neumožňuje šíření virů.

Díky jádru využívajícímu virtuální paměť je každý proces přesvědčen, že má veškerou paměť pro sebe. Proces - který pracuje v kruhu 3 - může vidět pouze virtuální paměť, která byla pro něj nakonfigurována, pro kruh, ve kterém pracuje. Není to tak, že paměť ostatních procesů je chráněna; je to, že pro jeden proces je paměť ostatních mimo adresní prostor. Pokud by proces porazil všechny adresy paměti, nebyl by schopen ani odkazovat na adresu paměti jiného procesu.

Proč to nelze podvádět?
Chcete-li upravit to, co bylo komentováno - například generovat vstupní body v kruhu 0, upravit vektory přerušení, upravit virtuální paměť, upravit LGDT… - je to možné pouze z kruhu 0.
To znamená, že aby se proces mohl dotknout paměti jiných procesů nebo jádra, mělo by to být samotné jádro. A skutečnost, že existuje jediný vstupní bod a že parametry jsou předávány registry, komplikuje past - ve skutečnosti to, co je třeba udělat, předává registr, který je poté implementován jako případ v rutině pozornosti. 80h přerušení .
Dalším scénářem je případ operačních systémů se stovkami nezdokumentovaných volání do kruhu 0, kde je to možné - vždy může dojít ke špatně implementovanému zapomenutému volání, na které lze vytvořit past - ale v případě operačního systému s takovým jednoduchý krokový mechanismus, není.

Z tohoto důvodu brání architektura virtuální paměti tomuto mechanismu přenosu; žádné procesy - ani ty, které mají oprávnění root - nemají způsob, jak získat přístup k paměti ostatních. Mohli bychom tvrdit, že proces může vidět jádro; má to namapované ze své adresy logické paměti 0xC0000000. Ale kvůli procesoru, na kterém běží, jej nemůžete upravit; by vytvořilo past, protože jsou to paměťové oblasti, které patří jinému kruhu.

„Řešením“ by byl program, který upravuje kód jádra, když se jedná o soubor. Skutečnost, že jsou překompilovány, však znemožňuje. Binární soubor nelze opravit, protože na světě existují miliony různých binárních jader. Prostě to, že když to překompilovali, dali nebo odebrali něco ze spustitelného souboru jádra, nebo změnili velikost jednoho ze štítků, které identifikují verzi kompilace - něco, co se děje i nedobrovolně - binární patch nemohl být použit. Alternativou by bylo stáhnout zdrojový kód z Internetu, opravit jej, nakonfigurovat pro příslušný hardware, zkompilovat jej, nainstalovat a restartovat počítač. To vše by měl provádět program automaticky. Docela velká výzva pro oblast umělé inteligence.
Jak vidíme, ani virus jako root nemůže tuto bariéru přeskočit. Jediným řešením, které zbývá, je přenos mezi spustitelnými soubory. Což také nefunguje, jak uvidíme níže.

Moje zkušenosti jako správce:

Za více než deset let, co řídím Linux, s instalacemi na stovky strojů v datových centrech, studentských laboratořích, společnostech atd.

  • Nikdy jsem „nedostal“ virus
  • Nikdy jsem nepotkal někoho, kdo ano
  • Nikdy jsem nepotkal někoho, kdo by potkal někoho, kdo ano

Znám více lidí, kteří viděli Lochnesskou příšeru, než viděli linuxové viry.
Osobně připouštím, že jsem byl nerozvážný a spustil jsem několik programů, které samozvaní „specialisté“ nazývají „viry pro Linux“ - od nynějška jim budu říkat viry, ne aby byl text pedantský, můj obvyklý účet proti mému počítači, abych zjistil, zda je virus možný: jak bash virus, který tam koluje - a který mimochodem neinfikoval žádné soubory - a virus, který se stal velmi slavným a objevil se v tisku . Zkusil jsem to nainstalovat; a po dvaceti minutách práce jsem to vzdal, když jsem viděl, že jedním z jeho požadavků bylo mít adresář tmp na oddílu typu MSDOS. Osobně nevím o nikom, kdo vytvoří konkrétní oddíl pro tmp a naformátuje jej na FAT.
Ve skutečnosti některé takzvané viry, které jsem testoval na Linuxu, vyžadují vysokou úroveň znalostí a instalaci hesla root. Mohli bychom se kvalifikovat přinejmenším jako „mizerný“ virus, pokud potřebuje náš aktivní zásah k infikování stroje. Kromě toho v některých případech vyžadují rozsáhlé znalosti systému UNIX a hesla root; což je dost daleko od automatické instalace, která má být.

Infekce spustitelných souborů v systému Linux:

V systému Linux může proces jednoduše dělat to, co jeho efektivní uživatel a efektivní skupina umožňují. Je pravda, že existují mechanismy pro výměnu skutečného uživatele s hotovostí, ale jen o málo. Podíváme-li se na to, kde jsou spustitelné soubory, uvidíme, že pouze root má oprávnění k zápisu jak v těchto adresářích, tak v souborech, které obsahuje. Jinými slovy, takové soubory může upravovat pouze root. To je případ Unixu od 70. let, Linuxu od jeho počátků a souborového systému, který podporuje privilegia, se zatím neobjevila žádná chyba, která by umožňovala jiné chování. Struktura spustitelných souborů ELF je známá a dobře zdokumentovaná, takže je technicky možné, aby soubor tohoto typu načetl užitečné zatížení do jiného souboru ELF ... pokud je jeho efektivním uživatelem nebo efektivní skupinou první mají přístupová oprávnění. čtení, zápis a provádění u druhého souboru. Kolik spustitelných souborů souborového systému může infikovat jako běžný uživatel?
Tato otázka má jednoduchou odpověď, pokud chceme vědět, kolik souborů bychom mohli „infikovat“, spustíme příkaz:

$ find / -type f -perm -o=rwx -o \( -perm -g=rwx -group `id -g` \) -o \( -perm -u=rwx -user `id -u` \) -print 2> /dev/null | grep -v /proc

Adresář / proc vylučujeme, protože se jedná o virtuální souborový systém, který zobrazuje informace o fungování operačního systému. Soubory typu souboru s oprávněními k provádění, které najdeme, nepředstavují problém, protože se často jedná o virtuální odkazy, které se zdají být přečteny, zapsány a provedeny, a pokud se uživatel pokusí, nikdy to nebude fungovat. Vylučujeme také chyby - spousty - protože zejména v adresářích / proc a / home existuje mnoho adresářů, kam běžný uživatel nemůže vstoupit -. Tento skript trvá dlouho. V našem konkrétním případě na stroji, kde pracují čtyři lidé, byla odpověď:

/tmp/.ICE-unix/dcop52651205225188
/tmp/.ICE-unix/5279
/home/irbis/kradview-1.2/src
/kradview

Výstup ukazuje tři soubory, které by mohly být infikovány, pokud by byl spuštěn hypotetický virus. První dva jsou soubory typu Unix socket, které jsou odstraněny při spuštění - a nemohou být ovlivněny virem - a třetí je soubor vývojového programu, který je odstraněn při každé nové kompilaci. Virus se z praktického hlediska nešíří.
Z toho, co vidíme, je jediný způsob, jak šířit užitečné zatížení, být root. V tomto případě, aby virus fungoval, musí mít uživatelé vždy oprávnění správce. V takovém případě může infikovat soubory. Ale tady přichází úlovek: k přenosu infekce je třeba vzít si jiný spustitelný soubor, poslat jej jinému uživateli, který používá stroj pouze jako root, a postup opakovat.
V operačních systémech, kde je nutné být administrátorem pro běžné úkoly nebo spouštět mnoho denních aplikací, to tak může být. Ale v Unixu je nutné být administrátorem, který konfiguruje stroj a upravuje konfigurační soubory, takže počet uživatelů, které účet root používá jako denní účet, je malý. Je to víc; některé distribuce Linuxu nemají povolený ani účet root. Téměř ve všech z nich, pokud vstoupíte do grafického prostředí jako takového, se pozadí změní na intenzivní červenou barvu a budou se opakovat neustále zprávy, které připomínají, že tento účet by neměl být používán.
Nakonec vše, co je třeba udělat jako root, lze provést pomocí příkazu sudo bez rizika.
Z tohoto důvodu v Linuxu nemůže spustitelný soubor infikovat ostatní, pokud nepoužíváme účet root jako běžný účet; A ačkoli antivirové společnosti trvají na tom, že pro Linux existují viry, opravdu nejbližší věc, kterou lze v Linuxu vytvořit, je trojský kůň v uživatelské oblasti. Jediným způsobem, jak mohou tyto trojské koně ovlivnit něco v systému, je jeho spuštění jako root a s potřebnými oprávněními. Pokud obvykle používáme stroj jako běžní uživatelé, není možné, aby proces spuštěný běžným uživatelem infikoval systém.

Mýty a lži:

Nacházíme spoustu mýtů, hoaxů a prostých lží o virech v Linuxu. Udělejme si jejich seznam na základě diskuse, která se před časem odehrála se zástupcem výrobce antivirových programů pro Linux, kterého velmi urazil článek publikovaný ve stejném časopise.
Tato diskuse je dobrým referenčním příkladem, protože se týká všech aspektů virů v systému Linux. Budeme přezkoumávat všechny tyto mýty jeden po druhém, jak byly diskutovány v této konkrétní diskusi, ale která byla tolikrát opakována na jiných fórech.

Mýtus 1:
"Ne všechny škodlivé programy, zejména viry, potřebují k infikování oprávnění root, zejména v konkrétním případě spustitelných virů (formát ELF), které infikují jiné spustitelné soubory".

Odpověď:
Kdokoli tak učiní, neví, jak funguje systém privilegovaných Unixů. Aby virus mohl ovlivnit soubor, potřebuje oprávnění ke čtení - je nutné jej číst, aby bylo možné jej upravit–, a zápis - musí být zapsán, aby byla změna platná - na spustitelném souboru, který chce provést.
To je vždy případ, bez výjimek. A v každé distribuci uživatelé bez oprávnění root nemají tato oprávnění. Pak prostě není root, infekce není možná. Empirický test: V předchozí části jsme viděli jednoduchý skript ke kontrole rozsahu souborů, které mohou být ovlivněny infekcí. Pokud ji spustíme na našem stroji, uvidíme, jak je to zanedbatelné as ohledem na systémové soubory nulové. Na rozdíl od operačních systémů, jako je Windows, také nepotřebujete oprávnění správce k provádění běžných úkolů s programy běžně používanými běžnými uživateli.

Mýtus 2:
"Nemusí být ani root, aby mohli vzdáleně vstoupit do systému, v případě Slappera, červa, který s využitím zranitelnosti v SSL Apache (certifikáty, které umožňují bezpečnou komunikaci) vytvořil v září 2002 vlastní síť zombie strojů".

Odpověď:
Tento příklad se nevztahuje na virus, ale na červ. Rozdíl je velmi důležitý: červ je program, který využívá službu pro internet k vlastnímu přenosu. Neovlivňuje místní programy. Týká se tedy pouze serverů; ne na konkrétní stroje.
Červů bylo vždy velmi málo a jejich výskyt byl zanedbatelný. Tři opravdu důležití lidé se narodili v 80. letech, v době, kdy byl internet nevinný, a každý každému důvěřoval. Pamatujme, že to byly ty, které ovlivnily sendmail, fingerd a rexec. Dnes jsou věci komplikovanější. I když nemůžeme popřít, že zůstávají a že pokud nejsou kontrolovány, jsou extrémně nebezpečné. Ale nyní jsou reakční doby na červy velmi krátké. To je případ Slappera: červ vytvořený na zranitelnosti byl objeven - a opraven - dva měsíce před výskytem samotného červa.
I za předpokladu, že každý, kdo používá Linux, měl Apache nainstalovaný a běží pořád, jednoduchá aktualizace balíčků každý měsíc by byla víc než dost, aby nikdy nehrozilo žádné riziko.
Je pravda, že chyba SSL, kterou Slapper způsobil, byla kritická - ve skutečnosti největší chyba nalezená v celé historii SSL2 a SSL3 - a jako taková byla opravena za několik hodin. Že dva měsíce poté, co byl tento problém nalezen a vyřešen, někdo udělal červa na chybu, která již byla opravena, a že toto je nejmocnější příklad, který lze uvést jako zranitelnost, alespoň to uklidňuje.
Obecným pravidlem je, že řešením pro červy není koupit antivirus, instalovat jej a ztrácet výpočetní čas tím, že zůstane rezidentem. Řešením je využít systém aktualizace zabezpečení naší distribuce: s aktualizací distribuce nebudou žádné problémy. Spouštění pouze služeb, které potřebujeme, je také dobrý nápad ze dvou důvodů: zlepšujeme využívání zdrojů a vyhýbáme se bezpečnostním problémům.

Mýtus 3:
"Nemyslím si, že jádro je nezranitelné. Ve skutečnosti existuje skupina škodlivých programů s názvem LRK (Linux Rootkits Kernel), které jsou založeny právě na zneužití zranitelnosti modulů jádra a nahrazení systémových binárních souborů.".

Odpověď:
Rootkit je v podstatě oprava jádra, která vám umožňuje skrýt existenci určitých uživatelů a procesů před obvyklými nástroji, díky tomu, že se neobjeví v adresáři / proc. Normální věc je, že ji používají na konci útoku, v první řadě využijí vzdálenou zranitelnost, aby získali přístup k našemu stroji. Pak podniknou sled útoků, aby eskalovali privilegia, dokud nebudou mít účet root. Problém, když to udělají, je, jak nainstalovat službu na náš počítač, aniž by byl detekován: tam přichází rootkit. Je vytvořen uživatel, který bude účinným uživatelem služby, kterou chceme skrýt, nainstaluje rootkit a skryje jak tohoto uživatele, tak všechny procesy, které k němu patří.
Jak je možné skrýt existenci uživatele, je užitečné pro virus, o čem bychom mohli dlouho diskutovat, ale virus, který k instalaci používá rootkit, se zdá zábavný. Představme si mechaniku viru (v pseudokódu):
1) Virus vstupuje do systému.
2) Vyhledejte zdrojový kód jádra. Pokud tomu tak není, nainstaluje si ho sám.
3) Nakonfigurujte jádro pro možnosti hardwaru, které se vztahují na dotyčný stroj.
4) Zkompilujte jádro.
5) Nainstalujte nové jádro; v případě potřeby upravit LILO nebo GRUB.
6) Restartujte stroj.

Kroky (5) a (6) vyžadují oprávnění root. Je poněkud komplikované, že infikovaní nedetekují kroky (4) a (6). Zábavné však je, že existuje někdo, kdo si myslí, že existuje program, který dokáže krok (2) a (3) provést automaticky.
Vyvrcholením je, že když se setkáme s někým, kdo nám říká, že „když bude více počítačů se systémem Linux, bude více virů“ a doporučí „mít nainstalovaný antivirus a neustále jej aktualizovat“, možná to souvisí se společností, která prodává antivirus a aktualizace. Buďte podezřelí, možná stejný majitel.

Antivirus pro Linux:

Je pravda, že pro Linux existují dobrý antivirus. Problém je v tom, že nedělají to, co tvrdí zastánci antiviru. Jeho funkcí je filtrovat poštu, která přechází z malwaru a virů do Windows, a také ověřovat existenci virů Windows ve složkách exportovaných pomocí SAMBA; pokud tedy náš stroj používáme jako poštovní bránu nebo jako NAS pro počítače se systémem Windows, můžeme je chránit.

Clam-AV:

Nebudeme dokončovat naši zprávu, aniž bychom hovořili o hlavním antiviru pro GNU / Linux: ClamAV.
ClamAV je velmi výkonný antivirus GPL, který kompiluje většinu unixů dostupných na trhu. Je navržen tak, aby analyzoval přílohy e-mailových zpráv procházejících stanicí a filtroval je na viry.
Tato aplikace se perfektně integruje do sendmailu, aby umožnila filtrování virů, které mohou být uloženy na serverech Linux poskytujících poštu společnostem; mít virovou databázi, která je denně aktualizována, s digitální podporou. Databáze se aktualizuje několikrát denně a jedná se o živý a velmi zajímavý projekt.
Tento výkonný program dokáže analyzovat viry i v přílohách ve složitějších formátech k otevření, jako jsou RAR (2.0), Zip, Gzip, Bzip2, Tar, MS OLE2, soubory MS Cabinet, MS CHM (HTML COprinted) a MS SZDD .
ClamAV také podporuje poštovní soubory mbox, Maildir a RAW a přenosné spustitelné soubory komprimované pomocí UPX, FSG a Petite. Pár Clam AV a spamassassin jsou dokonalým párem, který chrání naše klienty Windows před poštovními servery Unix.

ZÁVĚR

Na otázku Existují v systémech Linux slabá místa? odpověď je určitě ano.
Nikdo s rozumem o tom nepochybuje; Linux není OpenBSD. Další věcí je okno zranitelnosti, které má systém Linux a které je správně aktualizováno. Pokud se zeptáme sami sebe, existují nástroje, které by tyto bezpečnostní díry využily a využily je? Ano, ale nejde o viry, ale o exploity.

Virus musí překonat několik dalších obtíží, které obránci Windows vždy považovali za chybu / problém Linuxu a které komplikují existenci skutečných virů - překompilovaná jádra, mnoho verzí mnoha aplikací, mnoho distribucí, věci, které nejsou automaticky předáno transparentně uživateli atd. -. Aktuální teoretické „viry“ musí být nainstalovány ručně z účtu root. To však nelze považovat za virus.
Jak vždy říkám svým studentům: nevěřte mi, prosím. Stáhněte a nainstalujte rootkit do počítače. A pokud chcete více, přečtěte si zdrojový kód „virů“ na trhu. Pravda je ve zdrojovém kódu. Pro „samozvaný“ virus je obtížné jej po přečtení kódu takto pojmenovat. A pokud nevíte, jak číst kód, jedno jednoduché bezpečnostní opatření, které doporučuji: účet root používejte pouze ke správě zařízení a udržujte aktualizace zabezpečení aktuální.
S tím samotným je nemožné, aby do vás viry vstoupily a je velmi nepravděpodobné, že červi nebo někdo úspěšně zaútočí na váš počítač.


Přidat jako preferovaný zdroj v Googlu