Достали вирусы? Вините во всём фон Неймана!

Jun 17, 2011 16:50

Доброе время суток. Ползая по интернету, наткнулся на такую вот статейку.
При прочтении возникает неоднозначное ощущение - вроде каждый абзац в отдельности понятен, но вот смысл текста в целом получается весьма странным. Автор воспевает гарвардскую архитектуру, но совершенно упускает из виду то, что она более пригодна для специализированных ( Read more... )

Leave a comment

abs8192 June 17 2011, 17:21:51 UTC
Фричество тут в незнании современного состояния дел.
1) Память компьютеров давным давно поделена на страницы.
2) Страницы памяти процесса объединяются как минимум в два различных сегмента - данных и кода. (На самом деле есть ещё стек как разновидность данных).
3) Сегмент кода закрыт на запись, его нельзя модифицировать во время выполнения программы. Это уже давным-давно не классическая фон-Неймановская архитектура.

По-крайней мере так обстоят дела в ОС UNIX.

Reply

abs8192 June 17 2011, 17:23:52 UTC
Ах да: и стало быть имеет аппаратную поддержку в Memory Management Unit того или иного типа - на разных платформах разную. Но функционал "закрыть страницу на запись" есть практически везде.

Reply

abs8192 June 17 2011, 17:27:42 UTC
И ещё: вирусы как правило не модифицируют код программы, а передают управление в троянский код, размещённый в сегменте данных (точнее - в стеке). Это несколько иная проблема: что можно выполнять программу в сегменте данных. Во многих современных архитектурах это тоже уже запрещено.

Reply

arifg June 17 2011, 18:52:22 UTC
Это происходит потому, что система зачастую просто позволяет им это сделать. Вот, например, в Windows есть целый набор абсолютно легальных API функций, позволяющих писать в память чужого процесса, читать оттуда и запускать внедренный код на выполнение (ReadProcessMemory, Write ProcessMemory и CreateRemoteThread). Также есть целый средства для управления виртуальной паматью, например VirtualProtect. Их вполне могло бы не быть, и тогда вирусы писать было бы чуть-чуть сложнее, однако они есть, потому, что без них жилось бы сложнее.

Reply

legolegs June 17 2011, 18:27:24 UTC
>3) Сегмент кода закрыт на запись,

В этом треде не хватает LISPа.

Reply

arifg June 17 2011, 18:45:32 UTC
Сегмент кода закрыт на запись, его нельзя модифицировать во время выполнения программы.Ну, вообще говоря, то, что не защищено аппаратно всегда можно обойти программно. Если программу кто-то загружает в память, то он же может ее и поменять налету. Если это не может сделать сама программа из пользовательского кольца защиты, всегда есть возможность написать драйвер который сделает это из-под кернела. Есть, конечно, Data Execution Prevention, поддерживаемая аппаратно, но и это можно обойти написав соответствующий драйвер и внедрив его в систему. Однако, дело в том, что сама проблема модифиации исполняемого кода в статье сильно преувеличена: на сегодняшний день всего-то около пары процентов вирусов используют такие сложные подходы, как запись самих себя внутрь исполняемого кода (который тоже нужно не разрушить при этом, а это не так просто, а простая защита кода по типу RSA решила бы эту проблему чуть ли не полностью) - большинство использует либо абсолютно легальные возможности системы, либо дыры в защите системы, получая то, что им не ( ... )

Reply

nilrem June 17 2011, 18:50:34 UTC
да во всех системах. Защита-то теперь аппаратная, в x86 - флаг NX

Reply


Leave a comment

Up