Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

РЕФЕРАТ по Основным технологиям эксплуатации защищенных компьютерных и телекоммуникационных систем

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 9.11.2024

Федеральное агентство по образованию

ГОУ ВПО «Пермский государственный технический университет»

Кафедра «Автоматики и Телемеханики»

РЕФЕРАТ

по «Основным технологиям эксплуатации защищенных компьютерных и телекоммуникационных систем»

«ОСНОВНЫЕ АЛГОРИТМЫ РАБОТЫ АНТИВИРУСОВ»

Выполнил: студент группы КЗИ-06 Осипович А.Э.

Принял: ассистент кафедры АТ  Безукладников И.И.

ПЕРМЬ 2010 г.

Содержание:

[1]
Введение

[2]
Критерии качества работы антивируса

[3]
Алгоритмы работы антивирусов

[4] Поиск по "сигнатурам"

[5]
Поиск по контрольным суммам (CRC)

[6]
Использование редуцированной маски

[7]
Криптоанализ

[8]
Статистический анализ

[9]
Эвристический анализ

[10]
Эмуляция

[11]
Оригинальные технологии в антивирусных "движках"

[12]
База данных антивирусного "движка"

[13]
Полиморфные вирусы

[14]
Заключение

[15]
Список использованных источников


Введение

Одной из основных частей любого антивируса является совокупность алгоритмов работы антивируса, так называемый антивирусный "движок" - модуль, отвечающий за проверку объектов и обнаружение вредоносных программ. Именно от антивирусного "движка", от того, как он разработан, какие он использует методы детектирования и эвристики, зависит качество детектирования вредоносных программ и, как следствие, уровень защиты, предоставляемый антивирусом.


Критерии качества работы антивируса

К сожалению, разработчики антивирусного программного обеспечения очень редко раскрывают детали реализации своих "движков". Однако и по косвенным признакам можно определить, является ли "движок" хорошим или нет. Вот основные критерии, по которым можно определить качество антивирусного "движка":

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

 Уровень детектирования эвристическими анализаторами. К сожалению, без тестирования на коллекции вирусов определить этот параметр невозможно, однако можно довольно легко определить, каков уровень ложных срабатываний у конкретного "движка".

 Уровень ложных срабатываний. Если на 100% незараженных файлах антивирус рапортует об обнаружении возможно зараженного файла, то это - ложное срабатывание. Стоит ли доверять такому эвристическому анализатору, который беспокоит пользователя ложными тревогами? Ведь за большим количеством ложных срабатываний пользователь может пропустить действительно новый вирус.

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

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

Возможность обновления "движка" без обновления самой антивирусной программы. Иногда для обнаружения вируса требуется обновить не только антивирусную базу данных, но и сам "движок". Если антивирус не поддерживает такую возможность, то пользователь может остаться без защиты перед лицом нового вируса. Кроме этого, такая возможность позволяет оперативно улучшать "движок" и исправлять в нем ошибки.


Алгоритмы работы антивирусов

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

Антивирусный "движок" (Anti-Virus Engine) - это программный модуль, который предназначен для детектирования вредоносного программного обеспечения. "Движок" является основным компонентом любой антивирусной программы, вне зависимости от ее назначения. Движок используется как в персональных продуктах - персональный сканер или монитор, так и в серверных решениях - сканер для почтового или файлового сервера, межсетевого экрана или прокси-сервера. Как правило, для детектирования вредоносных программ, в большинстве "движков" реализованы следующие технологии:

  •  Поиск по "сигнатурам" (уникальной последовательности байт);
  •  Поиск по контрольным суммам или CRC (контрольной суммы с уникальной последовательности байт);
  •  Использование редуцированной маски;
  •  Криптоанализ;
  •  Статистический анализ;
  •  Эвристический анализ;
  •  Эмуляция.

Рассмотрим каждый из этих методов подробнее.

Поиск по "сигнатурам"

Сигнатура - это уникальная "строка" байт, которая однозначно характеризует ту или иную вредоносную программу. Сигнатурный поиск, в той или иной модификации, используется для обнаружения вирусов и других вредоносных программ, начиная с самых первых антивирусных программ и до сих пор. Неоспоримое достоинство сигнатурного поиска - скорость работы (при использовании специально разработанных алгоритмов, разумеется) и возможности детектирования нескольких вирусов одной сигнатурой. Недостаток - размер сигнатуры для уверенного детектирования должен быть довольно большой, как минимум 8-12 байт (обычно для точного детектирования используются гораздо более длинные сигнатуры, до 64 байт), следовательно, размер антивирусной базы будет достаточно большой. Кроме этого, в последнее время большую распространенность получили вредоносные программы, написанные на языках высокого уровня (C++, Delphi, Visual Basic), а у таких программ есть отдельные части кода, которые практически не изменяются (так называемая Run Time Library). Неправильно выбранная сигнатура неизбежно приведет к ложному срабатыванию - детектированию "чистого", не зараженного файла как зараженного вирусом. Как решение этой проблемы предлагается использовать или очень большие сигнатуры или использовать детектирование по некоторым областям данных, например, таблицы перемещений (relocation table) или текстовые строки, что не всегда хорошо.


Поиск по контрольным суммам (CRC)

Поиск по контрольным суммам (CRC - cyclic redundancy check), по сути, является модификацией поиска по сигнатурам. Метод был разработан во избежание основных недостатков сигнатурного поиска - размера базы и уменьшения вероятности ложных срабатываний. Суть метода состоит в том, что для поиска вредоносного кода берется не только "опорная" строка - сигнатура, а, вернее сказать, контрольная сумма этой строки, но и местоположение сигнатуры в теле вредоносной программы. Местоположение используется для того, чтобы не подсчитывать контрольные суммы для всего файла. Таким образом, вместо 10-12 байт сигнатуры (минимально) используется 4 байта для хранения контрольной суммы и еще 4 байта - для местоположения. Однако метод поиска по контрольным суммам несколько медленнее, чем поиск по сигнатурам.

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

Невозможность выбора маски достаточного размера в случае полиморфного вируса легко объясняется. Путем шифрования своего тела вирус добивается того, что большая часть его кода в пораженном объекте является переменной, и, соответственно, не может быть выбрана в качестве маски.

Для детектирования таких вирусов применяются следующие методы: использование редуцированной маски, криптоанализ и статистический анализ. Рассмотрим эти методы подробнее.  


Использование редуцированной маски

При поражении объектов вирус, использующий шифрование, преобразует свой код в шифрованную последовательность данных:

S = F (T), где

T - базовый код вируса;

S - зашифрованные коды вируса;

F - функция шифрования вируса, произвольно выбирающаяся из некоторого множества преобразований {F}.

Способ редуцированной маски заключается в том, что выбирается преобразование R зашифрованных кодов вируса S, такое, что результат преобразования (то есть некоторая последовательность данных S') не будет зависеть от ключей преобразования F, то есть

S = F (T)

S' = R (S) = R (F (T)) = R' (T).

При применении преобразования R к всевозможным вариантам шифрованного кода S результат S' будет постоянным при постоянном T. Таким образом, идентификация пораженных объектов производится путем выбора S' в качестве редуцированной маски и применения к пораженным объектам преобразования R.


Криптоанализ

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

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

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


Статистический анализ

Также используется для детектирования полиморфных вирусов. Во время своей работы сканер анализирует частоту использования команд процессора, строит таблицу встречающихся команд процессора, и на основе этой информации делает вывод о заражении файла вирусом. Данный метод эффективен для поиска некоторых полиморфных вирусов, так как эти вирусы используют ограниченный набор команд в декрипторе, тогда как "чистые" файлы используют совершенно другие команды с другой частотой. Например, все программы для MS-DOS часто используют прерывание 21h, однако в декрипторе полиморфных DOS-вирусов эта команда практически не встречается.

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


Эвристический анализ

Когда количество вирусов превысило несколько сотен, антивирусные эксперты задумались над идеей детектирования вредоносных программ, о существовании которых антивирусная программа еще не знает (нет соответствующих сигнатур). В результате были созданы так называемые эвристические анализаторы. Эвристическим анализатором называется набор подпрограмм, которые анализируют код исполняемых файлов, макросов, скриптов, памяти или загрузочных секторов для обнаружения в нем разных типов вредоносных компьютерных программ. Существуют два принципа работы анализатора.

Статический метод. Поиск общих коротких сигнатур, которые присутствуют в большинстве вирусов (так называемые "подозрительные" команды). Например, большое количество вирусов производит поиск вирусов по маске *.EXE, открывает найденный файл, производит запись в открытый файл. Задача эвристик в этом случае - найти сигнатуры, отражающие эти действия. Затем происходит анализ найденных сигнатур, и, если найдено некоторое количество необходимых и достаточных "подозрительных команд", то принимается решение о том, что файл инфицирован. Большой плюс этого метода - простота реализации и хорошая скорость работы, но при этом уровень обнаружения новых вредоносных программ довольно низок.

Динамический метод. Этот метод появился одновременно с внедрением в антивирусные программы эмуляции команд процессора . Суть метода состоит в эмуляции исполнения программы и протоколировании всех "подозрительных" действий программы. На основе этого протокола принимается решение о возможном заражении программы вирусом. В отличие от статического метода, динамический метод более требовательный к ресурсам компьютера, однако и уровень обнаружения у динамического метода значительно выше.

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

В настоящее время эвристический анализатор позволяет обнаруживать вредоносные коды в исполняемых файлах, секторах и памяти, а также новые скрипт-вирусы и вредоносные программы для Microsoft Office (и других программ, использующих VBA), и, наконец, вредоносный код, написанный на языках высокого уровня, таких как Microsoft Visual Basic.

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


Эмуляция

Технология эмуляции кода программ (или Sandboxing) явилась ответом на появление большого числа полиморфных вирусов. Идея этого метода состоит в том, чтобы эмулировать исполнение программы (как зараженной вирусом, так и "чистой") в специальном "окружении", называемым также буфером эмуляции или "песочницей". Если в эмулятор попадает зараженный полиморфным вирусом файл, то после эмуляции в буфере оказывается расшифрованное тело вируса, готовое к детектированию стандартными методами (сигнатурный или CRC поиск).

Современные эмуляторы эмулируют не только команды процессора, но и вызовы операционной системы. Задача написания полноценного эмулятора является довольно трудоемкой, не говоря уже о том, что при использовании эмулятора приходится постоянно контролировать действия каждой команды. Это необходимо для того, чтобы случайно не выполнить деструктивные компоненты алгоритма вируса.

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


Оригинальные технологии в антивирусных "движках"

Почти каждый разработчик антивирусных продуктов реализует какие-то свои технологии, позволяющие сделать работу программы эффективнее и производительнее. Некоторые из этих технологий имеют прямое отношение к устройству "движка", так как именно от его работы часто зависит производительность всего решения. Далее будет рассмотрен ряд технологий, позволяющих значительно ускорить проверку объектов и при этом гарантировать сохранение высокого качества детектирования, а также улучшить детектирование и лечение вредоносного программного обеспечения в архивных файлах.

Начать следует с технологии iChecker. Эта технология и ее аналоги реализованы почти в каждом современном антивирусе. Следует отметить, что iChecker - название, предложенное специалистами "Лаборатории Касперского". Эксперты, например, Panda Software называют её UltraFast. Данная технология позволяет добиться разумного баланса между надежностью защиты рабочих станций (и особенно серверов), и использованием системных ресурсов защищаемого компьютера. Благодаря этой технологии значительно сокращается время загрузки (до 30-40%) операционной системы (по сравнению с традиционными антивирусными защитами) и время запуска приложений при активной антивирусной защите. При этом гарантируется, что все файлы на дисках компьютера были проверены и не инфицированы. Основная идея данной технологии - не надо проверять то, что не изменялось, и уже было проверено. Антивирусный "движок" ведет специальную базу данных, в которой хранятся контрольные суммы всех проверенных (и не инфицированных) файлов. Теперь, прежде чем отдать файл на проверку, "движок" подсчитывает и сравнивает контрольную сумму файла с данными, хранящимися в базе данных. Если данные совпадают, то это значит, что файл был проверен и повторная проверка не требуется. Стоит заметить что время, затрачиваемое на подсчет контрольных сумм файла - значительно меньше, чем время антивирусной проверки.

Особое место в работе антивируса занимает лечение заархивированных инфицированных объектов. iCure - технология лечения инфицированных файлов в архивах. Благодаря этой технологии инфицированные объекты внутри архивных файлов будут успешно вылечены (или удалены, в зависимости от настроек антивируса) без использования внешних утилит архивации. На сегодняшний день большинство антивирусов поддерживают следующие типы архивов: ARJ, CAB, RAR, ZIP. Благодаря модульной архитектуре и технологиям обновления антивирусного "движка" пользователь, как правило, может легко обновлять и расширять список поддерживаемых типов архиваторов без перезагрузки антивируса.

iArc - еще одна технология работы с архивными файлами. Эта технология необходима для работы с многотомными архивами. iArc позволяет проверять многотомные архивы и обнаруживать вирусы даже, если они будут упакованы в многотомный архив, который, в свою очередь, также будет упакован в многотомный архив.

Многопоточность. Антивирусный "движок" является многопоточным модулем, и может одновременно обрабатывать (проверять на наличие вредоносных кодов) несколько объектов (файлы, сектора, скрипты и пр.).

Большинство из перечисленных выше технологий в том или ином виде реализовано в каждом современном антивирусном продукте.


База данных антивирусного "движка"

База данных является неотъемлемой частью антивирусного "движка". Более того, если считать что хорошо спроектированный "движок" изменяется не так часто, то антивирусная база изменяется постоянно, потому что именно в антивирусной базе находятся сигнатуры, контрольные суммы и специальные программные модули для детектирования вредоносных программ. Как известно, новые вирусы, сетевые черви и другие вредоносные программы появляются с завидной частотой, и поэтому очень важно, чтобы обновления антивирусной базы происходили как можно чаще. Если десять лет назад было достаточно еженедельных обновлений, то сегодня просто необходимо получать хотя бы ежедневные обновления антивирусной базы.

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

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

Размер обновлений указывает на продуманность архитектуры антивирусного "движка". Так, размер регулярных обновлений лидирующих в отрасли компаний, как правило, не превышает 30 Кб. При этом в антивирусные базы обычно заложено около 70% функциональности всего антивирусного "движка". В любом обновлении антивирусной базы может быть добавлена поддержка нового упаковщика или архиватора. Таким образом, ежедневно обновляя антивирусные базы, пользователь получает не только новые процедуры детектирования новых вредоносных программ, но и обновление всего антивируса. Это позволяет очень гибко реагировать на ситуацию и гарантировать пользователю максимальную защиту.


Полиморфные вирусы

Основные определения: самошифрование и полиморфичность. Используются практически всеми типами вирусов для того, чтобы максимально усложнить процедуру детектирования вируса. Полиморфные вирусы (polymorphic) - это достаточно трудно обнаружимые вирусы, не имеющие сигнатур, то есть, не содержащие ни одного постоянного участка кода. В большинстве случаев два образца одного и того же полиморфного вируса не будут иметь ни одного совпадения. Это достигается шифрованием основного тела вируса и модификациями программы-расшифровщика (декриптора). К полиморфным вирусам относятся те из них, детектирование которых невозможно (или крайне затруднительно) осуществить при помощи так называемых вирусных масок - участков постоянного кода, специфичных для конкретного вируса. Достигается это двумя основными способами - шифрованием основного кода вируса с непостоянным ключом и случайным набором команд расшифровщика или изменением самого выполняемого кода вируса. Существуют также другие, достаточно экзотические примеры полиморфизма: DOS-вирус "Bomber", например, не зашифрован, однако последовательность команд, которая передает управление коду вируса, является полностью полиморфной.

Полиморфизм различной степени сложности встречается в вирусах всех типов - от загрузочных и файловых DOS-вирусов до Windows-вирусов и даже макро-вирусов.

Существует деление полиморфных вирусов на уровни в зависимости от сложности кода, который встречается в расшифровщиках этих вирусов. Такое деление впервые предложил доктор Алан Соломон, через некоторое время Весселин Бончев расширил его:

Уровень 1: Вирусы, имеющие некоторый набор расшифровщиков с постоянным кодом; при заражении выбирают один из них. Такие вирусы являются "полу-полиморфными" и носят также название "олигоморфных" (oligomorphic). Примеры: "Cheeba", "Slovakia", "Whale".

Уровень 2: Расшифровщик вируса содержит одну или несколько постоянных инструкций, основная же его часть непостоянна.

Уровень 3: Расшифровщик содержит неиспользуемые инструкции - "мусор" типа NOP, CLI, STI и т.д.

Уровень 4: В расшифровщике используются взаимозаменяемые инструкции и изменение порядка следование (перемешивание) инструкций. Алгоритм расшифровки при этом не изменяется.

Уровень 5: Используются все перечисленные выше приемы, алгоритм расшифровки непостоянен, возможно повторное шифрование кода вируса и даже частичное шифрование самого кода расшифровщика.

Уровень 6: Permutating-вирусы. Изменению подлежит основной код вируса - он делится на блоки, которые при заражении переставляются в произвольном порядке. Вирус при этом остается работоспособным. Подобные вирусы могут быть незашифрованы.

В приведенной выше классификации есть свои недостатки, поскольку она производится по единственному критерию - возможность детектировать вирус по коду расшифровщика при помощи стандартного приема вирусных масок:

Уровень 1: для детектирования вируса достаточно иметь несколько масок;

Уровень 2: детектирование по маске с использованием "wildcards";

Уровень 3: детектирование по маске после удаления инструкций-"мусора";

Уровень 4: маска содержит несколько вариантов возможного кода, то есть становится алгоритмической;

Уровень 5: невозможность детектирования вируса по маске.

Недостаточность такого деления продемонстрирована в вирусе 3-го уровня полиморфизма, который так и называется - "Level3". Этот вирус, являясь одним из наиболее сложных полиморфных вирусов, по приведенному выше делению попадает в Уровень 3, поскольку имеет постоянный алгоритм расшифровки, перед которым стоит большое количество команд-"мусора". Однако в этом вирусе алгоритм генерирования "мусора" доведен до совершенства: в коде расшифровщика могут встретиться практически все инструкции процессора i8086.

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

Более объективной будет классификация, в которой помимо критерия вирусных масок участвуют и другие параметры, например:

  •  Степень сложности полиморфного кода (процент от всех инструкций процессора, которые могут встретиться в коде расшифровщика);
  •  Использование специальных приемов, затрудняющих эмуляцию антивирусами;
  •  Постоянство алгоритма расшифровщика;
  •  Постоянство длины расшифровщика.


Заключение 

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

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


Список использованных источников

  1.  Вильям Столлингс, Основы защиты сетей. Приложения и стандарты, Вильямс, 2002 г., 432 стр.
  2.  Клиффорд Столл, Яйцо кукушки, или преследуя шпиона в компьютерном лабиринте, «ИЦ-Гарант», М., 1996, 348 стр.
  3.  Крис Касперски, Записки исследователя компьютерных вирусов, Питер, 2006, 316 стр.
  4.  URL: http://www.securelist.com/
  5.  http://www.kaspersky.ru/




1. Хаос не у світі він усередині нас
2. Шаманизм
3. общее особенное единичное предстает как- а человечество в целом и общечеловеческое в каждом конкретн
4. Контрольная работа- Построение группового корректирующегоий кода объёмом 9 слов.html
5. Понятие национальной безопасности Конспект лекций
6. Discipline The im The im of discipline is to tech children to behve cceptbly
7. Реферат- Внешняя политика Святослава Игоревича
8. ИНСТИТУТ ЭКСПЕРИМЕНТАЛЬНОЙ МЕДИЦИНЫ РАМН
9.  Present Simple употребляется для выражения постоянного или повторяющегося действия
10. Курсовая работа- Проблемы застенчивости в подростковом и юношеском возрасте
11. дорожным оборудованием в том числе с землеройным
12. Валютные риски и их страхование
13. Экономика потребительской кооперации
14. Задание 5.1 Подсчет zоценок вручную Используя данные Занятия 4 подсчитайте zоценки для каждого студента..
15. Системный подход к изучению международных отношений
16. Адаптация в детском саду
17.  Упорядоченная совокупность линейно независимых векторов e1 e2 en линеала L называется базисом линеала е
18. Основные направления повышения эффективности PR-мероприятий на предприятии на примере ООО Фуд-Мастер
19. Приди ко мне брате в Москов
20. тема бюджетного законодательства