Можно ли сделать из Windows однозадачную ОС и другие проблемы безопасности

Тема в разделе "WASM.WIN32", создана пользователем Son of God, 16 ноя 2005.

  1. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    Меня волнует безопасность моего компьютера. Хотелось бы разработать надежную защиту от выполнения чужого кода без моего ведома. Как известно, все ПО дырявое и будет таким всегда, потому что его люди пишут:).

    Здесь я хотел бы обсудить 2 аспекта проблемы безопасности. Первый - как не допустить выполнения чужого кода через уязвимость в ПО и, таким образом, предотвратить проникновение вредоносной программы в систему. Второй - как не позволить вредоносной программе общаться по сети, если предотвратить проникновение не удалось.

    Есть такой вариант решения первой проблемы. Все программы, работающие с Интернетом (Интернет-браузер, инстант мессенджер, P2P...), помещаются в виртуальную машину (например, VMware). Реальная машина доступа к сети иметь не должна, это вторая проблема, о ней позже. В виртуальный комп инсталлируются ОС и программы, работающие в сети. Сохраняется snapshot. И после каждого сеанса работы с сетью скачанные файлы копируются на реальную машину, а виртуальная выключается без сохранения состояния. Таким образом, проникшие в виртуальную машину трояны уничтожатся. В следующий раз просто загружаем snapshot и работаем с чистой системой. Но тут есть один подводный камень. Если в гостевой ОС присутствует дыра (а это наверняка), то атакующий, который знает мой IP адрес, может просто каждый раз, когда я выхожу в сеть, заражать мою виртуальную машину заново и, к примеру, сниффить разговор по инстант мессенджеру или вести логи посещенных веб-страниц. Мне пришла в голову мысль - а что, если сделать винду однозадачной? Т.е. чтобы на одном виртуальном компьютере выполнялась только одна программа? Чтобы нельзя было создавать треды, не принадлежащие доверенной программе? Повыбрасывать все неиспользуемые DLL, убрать неиспользуемые модули ядра, вырипать код, создающий новые процессы, запретить исполнять данные и писать в область кода? Поделитесь своими мнениями, возможно ли это, и, если да, то насколько сложно будет это осуществить? Только не пинать.

    Вторая проблема - как не допустить общение реальной машины с Интернетом. Насколько я знаю, в VMware используется protocol driver, который и перенаправляет пакеты из виртуальной машины в реальную сеть. Но между protocol driver и медиумом, по которому передаются фреймы, есть еще много слоев кода. Это NDIS, неограниченное количество NDIS intermediate drivers и NDIS miniport driver. Функции каждого слоя кода, упомянутого выше, легко перехватить, и, если перехватить функции минипорта, то никакой известный фаервол и не пикнет, потому что большинство (если не все) из них имеют фильтрующий intermediate driver, который находится на уровень выше от miniport driver. Хотел бы услышать ваши комментарии по этому поводу.

    Я думаю, это придется переписывать часть кода системы, для того, чтобы спустить ее на ring 1, в то время как мониторящий код будет работать в ring 0. Такой подход применили, например, в менеджере виртуальных машин Xen. Причем даже винду под него портировали. Только вот не релизят ее, гады...
     
  2. samba

    samba New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    65
    Адрес:
    England
    интересно кому нужна ос без многопоточности?
     
  3. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    Мне нужна, по вышеуказанным причинам. Только вот не без многопоточности, а без возможности создать тред, не принадлежащий основному процессу. Ведь, к примеру, интернет-браузер наверняка мультитредовый, не писать же свой:)
     
  4. Narkoliga

    Narkoliga New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2005
    Сообщения:
    19
    Адрес:
    С конопляного поля :)


    Имхо намного проще будет написать свою ОС и все программы для нее с нуля, так как ВСЯ архитектура винды целиком и полностью построена на многозадачности.





    Эта проблема решается очень просто. Для этого нужно просто отключить комп от интернета и физически извлечь из него все сетевые карты. Для достижения максимальной безопасности рекомендуется отключить компьютер от электрической сети (а вдруг модулируя перепады напряжения в сети хакерам удасться выполнить код?) и поставить компьютер в сейф.



    имхо VMware это не защита, так как в ней тоже могут присутствовать дыры и программа из виртуальной машины может проникнуть в реальную.



    А вообще советую лечиться от паранойи :)
     
  5. samba

    samba New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    65
    Адрес:
    England
    Son of God

    Ну если тебя интересуют такие "глобальные проблемы", то советую тебе написать свой собственный драйвер, который будет перехватывать создание тредов
     
  6. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    "Имхо намного проще будет написать свою ОС и все программы для нее с нуля, так как ВСЯ архитектура винды целиком и полностью построена на многозадачности."

    Это хорошая идея. Написать минимальный код для работы с сетевой картой, а потом написать браузер и инстант мессенджер, этого мне хватит для безопасности. Кто-нить писал свои ОС? Поделитесь впечатлениями.



    "Эта проблема решается очень просто. Для этого нужно просто отключить комп от интернета и физически извлечь из него все сетевые карты. Для достижения максимальной безопасности рекомендуется отключить компьютер от электрической сети (а вдруг модулируя перепады напряжения в сети хакерам удасться выполнить код?) и поставить компьютер в сейф."

    Проще выпить йаду:))



    "имхо VMware это не защита, так как в ней тоже могут присутствовать дыры и программа из виртуальной машины может проникнуть в реальную."

    Проникнуть-то может, но общаться по сети ей не даст защита в реальной ОС на уровне NDIS, а также на более высоких уровнях. Правда еще не знаю, на что оно будет похоже.
     
  7. samba

    samba New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    65
    Адрес:
    England
    Narkoliga

    почитал твои сообщения на форуме. Походу посты набираешь...
     
  8. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    samba

    Создание новых тредов не единственная проблема. Можно ведь заразить и существующие треды. Наверное, все-таки придется свою ОС писать!
     
  9. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    Хороший вариант отрезания реальной машины от сети - прилинковать bridge protocol driver из VMware прямо к физической сетевой карте, исключая NDIS, промежуточные драйверы и даже, по возможности, родной miniport driver сетевухи.
     
  10. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87
    кстати, чего-то меня заинтересовал вопрос, мб слегка оффтопичный: а в винде существует ли самый-самый папский процесс, типа init в nix? То есть процесс который является предком всех остальных процессов. И если существует, то может ли в качестве этого процесса выступать программа написанная не MS'ом?
     
  11. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    "а в винде существует ли самый-самый папский процесс"

    Smss.exe помойму, он там наполовину в kernel mode, наполовину в user mode работает, это первый процесс, начинающий работать в user mode при загрузке. А заменить что угодно можно, любой кусок кода винды.
     
  12. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Однозначно нет.





    Ну а что мне мешает похукать все драйвера работающие с сетевухой, повесить свой TCP/TP стек и добраться до сети через него. Как сказал Narkoliga единственный 100% вариант - это физическое отключение от сети.





    Насколько я знаю, так работают абсолютно ВСЕ процессы, наполовину в kernel mode, наполовину в user mode.



    Имхо в данном случае идеальный вариант - держать два винта. На одном система для работы с интернетом, а на второй даже драйвера сетевухи не установлены. И эти винты переключать физически перед выходом в инет, но все равно это 100% безопасность не гарантирует.





    Ну так в чем проблема, хукай ZwCreateThread в SDT и проверяй в своем или нет процессе тред создается. При этом нужно учесть, что при запуске нового процесса первый тред в нем создается родительским процессом, также родительский процесс пишет в память дочернего в область PEB.

    Для более полной защиты нужно еще перехватывать загрузку драйверов, физикалмемори и прочие способы выхода в ринг0, так как если есть возможность добраться до ринг0, то все защиты на NDIS и тухлого яйца не стоят.



    Имхо все это действительно попахивает параноей. Хотя я для себя делал защитную систему, но не настолько параноидальную чтобы выходить в интернет в другой ос.
     
  13. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    Ms Rem



    А если спустить систему на ring 1, а к сетевухе разрешить доступ только моему драйверу в ring 0? Этот же драйвер прикрутить напрямую к VMware. В таком случае, чтобы похукать драйвер, работающий с сетью, надо сначала пробиться на ring 0 из виртуальной машины.
     
  14. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Это будет довольно сильное падение производительности.

    Если разрешить из ринг1 работать с портами ввода-вывода, то я могу обратиться к сетевухе напрямую, а если не разрешать, то твоему драйверу придется еще и ввод-вывод эмулировать, что замедлит систему многократно.

    К тому же команды чувствительные к уровню CPL (типа cli, hlt, sysexit и.др.) придется обязательно эмулировать - вот и еще одно падение производительности.

    И к тому же никто не гарантирует что твой драйвер будет без ошибок, а любая ошибка - это брешь во всей системе.



    В любом случае сложность создания такой защиты сопоставима с сложностью написания виртуальной машины типа VirtualPC, а вот пользователей у такой программы будет очень мало. Так что разработка подобной системы изначально дело дохлое.

    Делать это "для себя" тоже никакого смысла нет, проще будет купить два компа, и работать на одном а выходить в инет на другом.
     
  15. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125


    Вот люди разработали менеджер виртуальных машин, который спускает гостевые системы на ring 1: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/

    Прошу обратить внимание на диаграмму производительности: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/performance.html





    Хочу сделать для себя (можно считать меня параноиком). Покупать 2 компа нету смысла - можно троянить сетевой комп каждый раз при выходе в интернет и наблюдать за моей деятельностью.
     
  16. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Желаю успеха в разработке подобного, но имхо это дело того не стоит, есть куда более полезные способы потратить свое время.



    В любом случае при наличии дыры в сетевой программе можно ее троянить каждый раз при выходе в сеть, с чем боролись на то и напоролись.
     
  17. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125


    Согласен. Но чтобы найти дыру, нужно иметь хотя бы бинарник сетевой программы. Его я раздавать естественно не буду.
     
  18. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Son of God > Можно ли сделать из Windows однозадачную ОС



    Microsoft такую вроде уже сделали - для XBox :)
     
  19. harley

    harley New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2005
    Сообщения:
    11
    Адрес:
    Russia
    Может, поможет PCDOS+packet driver+doslynx? :)

    Ну, а мессенжер сами напишем?..
     
  20. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125


    Правда? Тогда ждем эмулятора XBox...





    Идея интересная, я уже думал над ней. Ведь есть уже готовая однозадачная ось DOS. Под нее даже готовый графический браузер написан, Arachne называется. Только не будет ли доступность системы всем желающим брешью в системе защиты? Ведь в досе тоже могут быть дыры. Правда, я совсем плохо знаком с дос, поэтому не пинайте.