Това за вирусите е доста забавно, защото преди не много време бях чел разни статии за ELF вируси и си поиграх малко да експериментирам с неща от тази материя.
Значи самите файлови вируси, заразяващи binary файлове въобще не са нещо много сложно за реализация. ELF подобно на РЕ бинарните файлове имат хедъри, там се описват секции с изпълним програмен код и адресите в паметта на които се зареждат. Съвсем не е сложно да презапишеш един бинарен файл, разширявайки някой сегмент, вмъквайки злонамерен "вирусен" код и една JMP инструкция така че кодът да се изпълни при изпълнение на програмата, при това без да се разрушава функционалността й. Дори няма да се наложи да поназнайваш особено асемблер, за да го реализираш.
Оттам нататък някой ще каже "да ама аз не работя като root, какво като заразя изпълнимите файлове, върху които мога да пиша". Те тези файлове между другото не са никак много, въпреки че при разни варианти, където потребителите си компилират разни глупости, вариантите са малко повече.
Ми да, така е. Докато не изпълниш нещо заразено като суперпотребител, оттам нататък нещата са неспасяеми. Освен това, някоя голяма глава може да се сети да интегрира във вирусния код някой експлойт, който да ескалира привилегиите, поне при определен брой системи. И отделно, веднъж заразиш ли suidroot файл, примерно /usr/bin/ping, всеки път когато потребителят пинг-не нещо, ще зарази файлове, в които може да пише само суперпотребителя, забавно
'>
Отделно, има много по-брутални варианти. Да речем че сте пуснали някаква простотия като tripwire да ви следи чексуми на изпълними файлове и да пищи. Ами има един syscall наречен ptrace(). Уникално забавното при него е че може да се attach-неш към един процес, да му презаписваш части от паметта, да му прихващаш системни повиквания, ей такива неща и да си свършиш работата, без въобще да се налага да му буташ изпълнимия файл.
Мисля, че най-голямата пречка пред линукските вируси се състои трудното заразяване на отдалечени машини. В смисъл един такъв вирус или трябва да се възползва от пролука в сигурността на масово използвана услуга (такъв случай с един такъв червей има в началото на 90-те в sendmail). Но доста трудно ще го хванеш, браузвайки сайтове например (както в уиндоус), въпреки че все пак е възможно.
Да речем, че мозила-та страда от препълване на буфер. Има сума ти вариации на темата build на мозила, както и вариации на темата архитектура, вариации на тема версия на браузъра. Тоест, за да експлойт-неш мозилата качествено, трябва да знаеш най-малкото return address-a, с който ще презашишеш стека (ако става въпрос за препълване на стек, не heap), така че да може функцията като завърши да "скочи" на "лошия" адрес.
Но теоретично е съвсем възможно да се напише много лош вирус за линукс.
Но това е много по-лесно при уиндоус. Защото там има няколко варианти на темата - уиндоус нещо си, +/- неколко сървис пак-а, всичките с добре известни проблеми в сигурността, после комерсиалният софтуер е една и съща компилация, в най-лошият случай имаш 32 и 64-битова версия, тези същите return адреси са добре познати и с голяма вероятност работят навсякъде (примерно на всеки инсталиран IE, версия еди коя си, този препълнен буфер с този return address и този код, който се намира на това място, ще доведе до изпълнението му със сигурност).
Те затва вирусите имат доста по-голям успех при уиндоус. Просто там писачите на вирусен код имат много по-малко сценарии, които да разгледат, съответно кодът им е доста по-успешен.
Това обаче въобще не означава, че ако си поиграят много, няма да сътворят нещо успешно и за линукс. Просто е безумно сложно, в сравнение с уиндоус и файдата ако я гледаме от гледна точка на брой заразени машини, ще е доста по-малка.