суббота, 16 мая 2020 г.

Создаем PE-вирус №1

Создаем PE-вирус №1

Введение

Вирусы стали неотъемлемой частью нашей компьютерной (и не только) жизни. На написание данной статьи меня подтолкнуло то, что, на мой взгляд, в Сети маловато информации, наиболее полно раскрывающей весь процесс написания вируса. Совсем недавно мне необходимо было написать простую самораспространяющуюсю программу, которая не производила бы каких-либо вредных для системы действий, но в то же время использовала бы вирусные механизмы распространения. Скажу, что все-таки в Интернете есть информация на эту тему. И даже встречаются исходники подобных программ. Но во всем приходится долго и упорно разбираться, если хочешь сделать что-то сам. Итак, в чем-то более-менее разобравшись, я хочу поделиться с вами - читателями - информацией.
В данной статье будет рассмотрен процесс написания простого вируса, заражающего исполняемые файлы формата PE (Portable Executable) EXE. Также напишем программу-доктора, которая ищет в указанной директории и во всех поддиректориях файлы, зараженные нашим вирусом.
Данная самораспространяющаяся программа не содержит в себе никакого вредоносного кода, но ее с легкостью можно дописать до вполне боевого вируса. Поэтому хочу заметить, что ВСЕ ПРИВЕДЕННОЕ В ЭТОЙ СТАТЬЕ МОЖЕТ БЫТЬ ИСПОЛЬЗОВАНО ТОЛЬКО В УЧЕБНО-ПОЗНАВАТЕЛЬНЫХ ЦЕЛЯХ. Автор не несет никакой ответственности за любой ущерб, нанесенный применением полученных знаний.
Если вы с этим не согласны, то, пожалуйста, прекратите чтение этой статьи и удалите ее со всех имеющихся у вас носителей информации.

пятница, 27 сентября 2019 г.

Введение в Windows Integrity Control

Эта статья описывает возможности системы
Windows Integrity Control (WIC), впервые представленной в
Windows Vista, рассказывает о том, как защищаются
объекты (типа папок и файлов), о разных
уровнях защиты, об управлении WIC при помощи
утилиты ICACLS.

Целостность системы - кому ты можешь
доверять?

При создании последней версии
операционной системы компании, Windows Vista,
разработчики из Microsoft пытались
сконструировать самую защищенную ОС из
семейства Windows. Одна из функций, помогающая
обезопасить ОС - Windows Integrity Control (WIC).
Предназначение WIC - защита объектов, таких
как файлы, принтеры, именованные каналы,
записи реестра и т.д., от атак, вредоносного
софта и даже непреднамеренных ошибок
пользователя. Концепция WIC основана на
определении доверительных, надежных
отношений между объектами и
контролировании взаимодействия между ними
на основе их уровня доверия.

пятница, 22 февраля 2019 г.

Усовершенствованный метод внедрения DLL

Внедрению DLL так или иначе (обычно в связи с перехватом API) посвящено достаточно большое количество статей. Но ни в одной из тех, которые я читал, не говорится, как внедрить эту DLL в чужой процесс незаметно, т.е. не храня на диске файл самой DLL, а оперируя им непосредственно в памяти.
В настоящее время широчайшую распространенность получили операционные системы семейства Windows NT/2000/XP. Они широко используются не только как домашние системы, но и в качестве серверов. Эта линейка ОС отличается неплохой защищенностью от вредоносных программ, а также для нее существует большое количество дополнительных систем безопасности (различные антивирусы, фаерволлы). Основной язык для приводимых фрагментов кода – C++, но материал актуален и для любого другого языка (Delphi, Ассемблер и т.д.). Единственное условие — язык должен быть 100% компилируемым, а также поддерживать работу с указателями и ассемблерные вставки. Так что любителям VB скорее всего придется обломиться. Для полного понимания материала статьи нужно хотя бы немножко знать ассемблер и С++. Как известно, OC Windows NT целиком построена на системе DLL (динамически загружаемых библиотек). Система предоставляет приложениям сервисные API функции, с помощью которых оно может взаимодействовать с системой. Предполагается, что читатель знаком с программированием в Visual C++, работой загрузчика Windows (загрузка и вызов функций DLL), а также имеет некоторые представления о программировании на ассемблере.
Данная статья актуальна только для систем Windows NT/2000/XP.

среда, 20 февраля 2019 г.

Драйверы антивирусов — источник зла: уязвимости в драйверах проактивных защит

Многим известно, что большое количество программ используют драйверы режима
ядра в Windows как "окно" для доступа в более привилегированный режим — Ring 0.
В первую очередь это касается защитного ПО, к которому можно отнести антивирусы,
межсетевые экраны, HIPS’ы (Host Intrusion Prevention System) и программы класса
internet security.

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

Сага про IoCtl

Сейчас мы максимально широко рассмотрим тему уязвимостей в драйверах
защитного ПО, их эксплуатации и поиска. И начнем с диспетчера ввода-вывода.

Существует достаточно много как документированных, так и не очень системных
механизмов, которые могут быть использованы для организации взаимодействия кода
пользовательского режима с драйверами режима ядра. Самыми функциональными и
наиболее часто используемыми являются те, которые предоставляются диспетчером
ввода-вывода (I/O manager). В конце концов, именно они и создавались
разработчиками операционной системы для подобных задач. Давай рассмотрим, как
обычно организуется работа с диспетчером ввода-вывода со стороны драйвера и
приложения.

Кошмар на улице Windows: Типсы и триксы для системщиков


Необычный взгляд на обычные вещи

Сколько раз в популярной IT-литературе описывался механизм перехода из ring3 в ring0 ОС Windows? Не счесть! При этом авторы, копипастя друг у друга фактически один и тот же текст, подробно или не очень описывали, что произойдет, если пользователь вызовет простую функцию CreateFile().

Сегодня мы попробуем взглянуть на эту проблему с несколько неожиданной стороны. По утверждениям знающих людей, существует один «proof of concept»’ный способ, позволяющий выполнять свой код на привилегированном уровне и пользоваться сервисами ядра напрямую, то есть в обход существующих ограничений, которые на тебя накладывает пользовательский (ring3) уровень. Да-да, ты не ошибся, — посмотрим, можно ли ядро системы «подергать за вымя» напрямую. Все, что тебе для этого понадобится, это хорошие знания ядра, подсистемы ввода/вывода и изворотливость (или даже извращенность :)) ума.

четверг, 5 июля 2012 г.

Потаенные сады Windows


Введение
Даже по прошествии многих лет, потраченных на изучение внутренностей операционной системы и системного кодинга, понимаешь, что постичь все тонкости ОС вряд ли удастся. Я не имею в виду именно себя — такого мнения придерживаются многие программисты, с которыми я знаком.
При этом зачастую единственным инструментом, позволяющим выпытать те или иные секреты операционной системы, становится отладчик или дебаггер. Хотя не все любят возиться с отладчиком, положения дел это не меняет — если хочешь находить, простите за каламбур, потаенные окна в Windows — без него не обойтись. Итак, начнем.

воскресенье, 29 января 2012 г.

Инсайд


Давай сделаем это по-быстрому

О контроле доступа подключаемых носителей администраторы задумываются далеко не всегда, а это значит, что утащить ценные данные может не только собственный работник, но и вообще любой человек, случайно оказавшийся у компьютера. Причем, чтобы не копаться вручную и не привлекать внимание своими лихорадочными действиями в «Проводнике», он вполне может подготовиться и сварганить скрипт, который сам просканирует доступные диски и отберет нужные файлы по заданным критериям. Написать подобную приблуду ничего не стоит на том же самом JavaScript'е. Попробуем сами. Сначала, с помощью вспомогательных переменных обозначим интересующие расширения файлов, которые нужно копировать, а также укажем давность обновления файла (более древние файлы будут просто игнорироваться):
var patch = /\.(doc|rtf|xls|txt)$/i;
var diff = new Date(2007,05,01);