Программы с потенциально опасными последствиями

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

Программы с потенциально опасными последствиями можно условно подразделить на:

Кроме того, такие программы можно классифицировать по методу и месту их внедрения и применения (то есть по "cпособу доставки" в систему):

Вирус

Первые исследования саморазмножающихся искусственных конструкций проводились в середине прошлого столетия: в работах фон Неймана, Винера и др. дано определение и проведен математический анализ конечных автоматов, в том числе самовоспроизводящихся. Термин "компьютерный вирус" появился позднее - официально считается, что его впервые употребил сотрудник Лехайского университета (США) Фред Коэн в 1984 году на 7-й конференции по безопасности информации, проходившей в США.

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

Вирусы можно разделить на классы по следующим признакам:

По среде обитания различают вирусы сетевые, файловые, загрузочные и специальные. Сетевые вирусы распространяются по компьютерной сети, файловые внедряются в выполняемые файлы, загрузочные в загрузочный сектор диска(Boot) или сектор, содержащий системный загрузчик винчестера(Master Boot Record). Специальные ориентированы на конкретные особенности ПО, например вирус, заражающий документы редактора Word. Существуют сочетания - например, файлово-загрузочные вирусы, заражающие и файлы и загрузочные сектора дисков. Кроме того, по сети могут распространятся вирусы любых типов.

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

По деструктивным возможностям вирусы можно разделить на:

Люк

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

Люки чаще всего являются результатом забывчивости разработчиков. В процессе разработки программы разработчики часто создают временные механизмы, облегчающие ведение отладки за счет прямого доступа к отлаживаемым частям продукта. По окончанию отладки большинство люков убирается из программы; но люди есть люди - зачастую они забывают о существовании каких-то мелких "лючков".

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

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

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

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

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

Таким образом, люк (или люки) может присутствовать в программе ввиду того, что программист:

  1. забыл удалить его;
  2. умышленно оставил его в программе для обеспечения тестирования или выполнения оставшейся части отладки;
  3. умышленно оставил его в программе в интересах облегчения окончательной сборки конечного программного продукта;
  4. умышленно оставил его в программе с тем, чтобы иметь скрытое средство доступа к программе уже после того, как она вошла в состав конечного продукта.

Троянский конь

Существуют программы, реализующие, помимо функций, описанных в документации, и некоторые другие функции, в документации не описанные. Такие программы называются "троянскими конями".

Логическая бомба

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

Мировая компьютерная общественность достаточно хорошо знакома с логическими бомбами. Логическая бомба является одним из излюбленных способов мести программистов компаниям, которые их уволили или чем-либо обидели. При этом чаще всего срабатывание бомбы ставится в зависимость от установки в системе даты - так называемые "часовые" бомбы. Это очень удобно: допустим, программист знает, что его уволят 1 марта; в таком случае он может установить "часовую" бомбу на взрыв, допустим, 6 июля или даже на Рождество, когда сам он будет уже вне пределов досягаемости для пострадавшей компании.

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

Программные закладки

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

Это возможно только при одновременном выполнении двух условий:

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

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

Несанкционированная запись закладкой может происходить:

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

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

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

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

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

Широко известна и использовалась во многих банках система ЭЦП Pretty Good Privace (PGP). Многие стали жертвой простейшей программной закладки против этой системы.

Рассмотрим процесс "электронного подписывания", реализованный в программе PGP. Программа считывает файл для вычисления хеш-функции блоками по 512 байт, причем завершением процесса чтения является считывание блока меньшей длины.

Работа закладки была основана на навязывании длины файла. Закладка позволяет программе ЭЦП считать только первый 512-байтный блок и вычислять подпись только на его основе.

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

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

Отметим четыре основных метода воздействия программных закладок на ЭЦП:

  1. Метод навязывания входной информации - связан с искажением поступающего на подпись файла.
  2. Метод навязывания результата проверки - связан с влиянием на признак правильности подписи независимо от результатов работы.
  3. Метод навязывания длины сообщения - предъявление программе ЭЦП электронного документа меньшей длины, следовательно, производится подпись только части документа.
  4. Метод искажения программы ЭЦП - связан с изменением исполняемого кода самой программы ЭЦП.

Задача борьбы с программными закладками весьма сложна и многопланова. Можно рассматривать следующие условия ее решения:

  1. Неизвестно наличие в каком-либо множестве программ фрагментов закладок, ставится задача определения факта их наличия или отсутствия; при этом программы не выполняются (статическая задача).
  2. В условиях п.1 программы используются по своему назначению, ставится та же задача выявления закладки, но в данном случае- по результатам работы (динамическая задача).
  3. Происходит обмен программным продуктом (в пространстве - передача по каналу связи или на материальном носителе, во времени - хранение), свободным от потенциально опасных действий, программный продукт не исполняется, задача защиты (статическая) ставится в трех вариантах:
    • не допустить внедрения закладки;
    • выявить внедренный код закладки;
    • удалить внедренный код закладки.
  4. В условиях п.3 решается динамическая задача - защита от воздействия закладки в ходе работы программ.
  5. В условиях потенциальной возможности воздействия закладок решается задача борьбы с их итоговым влиянием, то есть закладки присутствуют в системе, но либо не активны при выполнении критических действий прикладных программ, либо результат их воздействия не конструктивен.

Далее рассмотренные задачи будем упоминать как Задачи 1-5.

С другой стороны, методы борьбы с воздействием закладок можно разделить на классы и увязать с проблемой защиты программного обеспечения вообще:

  1. Общие методы защиты программного обеспечения, решающие задачи борьбы со случайными сбоями оборудования и несанкционированным доступом:
    1. Контроль целостности системных областей, запускаемых прикладных программ и используемых данных (решение Задачи 3).
    2. Контроль критических для безопасности системы событий (решение Задачи 2).
      Данные методы действенны лишь тогда, когда контрольные элементы не подвержены воздействию закладок и разрушающее воздействие входит в контролируемый класс. Так, например, система контроля за вызовом прерываний не будет отслеживать обращение на уровне портов. С другой стороны, контроль может быть обойден путем:
      • навязывания конечного результата проверок;
      • влияния на процесс считывания информации;
      • изменения хеш-функций, хранящихся в общедоступных файлах или в оперативной памяти.

      Важно, что включение процесса контроля должно быть выполнено до начала влияния закладки, либо контроль должен осуществляться полностью аппаратно-программными средствами, содержащимися в ПЗУ.
    3. Создание безопасной и изолированной операционной среды (решение Задачи 4).
    4. Предотвращение результирующего воздействия вируса или закладки (например, запись на диск только в зашифрованном на уровне контроллера виде - тем самым сохранение информации закладкой не имеет смысла, либо запрет записи на диск на аппаратном уровне) (решение Задачи 5).
  2. Специальные методы выявления программ с потенциально опасными последствиями:
    1. Поиск фрагментов кода по характерным последовательностям (сигнатурам), свойственным закладкам, либо, наоборот, разрешение на выполнение или внедрение в цепочку прерываний только программам с известными сигнатурами (решение Задач 1,2).
    2. Поиск критических участков кода методом семантического анализа, то есть анализа фрагментов кода на выполняемые ими функции, например, выполнение НСЗ, часто сопряжено с дисассемблированием или эмуляцией выполнения (решение Задач 1,2).

Весьма важным является комплекс организационно-технических мер защиты от вирусов и программных закладок.

Меры защиты можно подразделить на две основные группы:

  1. Меры защиты на этапе разработки программного обеспечения (ПО) системы.
  2. Меры защиты на этапе эксплуатации.

В группу I входят:

  1. Меры защиты на этапе разработки прикладного ПО, содержащего внутреннюю защиту от НСД.
    Они направлены на выявление в исходных текстах программ коммуникации и доступа некоторых фрагментов или подпрограмм, облегчающих или не регистрирующих доступ разработчиков программ (вход по фиксированным паролям, беспарольный доступ по нажатию некоторых клавиш, обход регистрации пользователей с фиксированными именами и т.д.). Наличие таких фрагментов фактически сведет на нет весь комплекс информационной безопасности системы, поскольку доступ через них возможен как человеку, так и программе-закладке.
  2. Меры защиты при разработке ПО защиты от НСД (должны быть предусмотрены меры по проверке целостности хранимых на внешних носителях программных средств защиты, контроль целостности их в оперативной памяти и т.д.).

В группу II входят:

  1. Регулярные меры защиты и контроля, применяемые постоянно с фиксированными временными интервалами.
  2. Эпизодические защитные мероприятия (в дополнение к п.1 в период повышения опасности вирусного нападения).
  3. Локализационно-восстановительные меры, применяемые в случае проникновения и обнаружения закладок и причинения ими негативных последствий.

К общим способам защиты системы относятся:

  1. ограничение физического доступа к программам и оборудованию путем установления соответствующего организационного режима и применения аппаратных или программных средств ограничения доступа к ПЭВМ и ее компонентам;
  2. при активизации прикладного ПО контроль его целостности, целостности областей DOS, BIOS и CMOS путем просчета контрольных сумм (вычисления хеш-функций) и сравнения их с эталонными значениями для каждой ПЭВМ;
  3. максимальное ограничение и контроль за передачей по сети исполняемых файлов (типа .EXE и .COM), .SYS- и .BIN-файлов в целях предотвращения распространения файловых вирусов, вирусов типа Driver, загрузочно-файловых вирусов, а также размножающихся закладок по сети; использование фильтров и шлюзов при передаче данных;
  4. организация выборочного и внезапного контроля работы операторов ПЭВМ с целью выявления фактов использования нерегламентированного ПО;
  5. защита от записи на сменных носителях, учет и надежное хранение архивных копий;
  6. немедленное уничтожение ценной информации сразу по истечении потребности в ней;
  7. периодическая оптимизация внешних носителей (винчестеров) на предмет выявления сбойных или псевдосбойных кластеров и стирания фрагментов конфиденциальной информации при помощи средств типа SPEED DISK.

Средства защиты, учитывающие специфику работы фрагментов системы:

  1. для коммуникационных подсистем:
    • средства и методы повышения общей надежности системы (программное или аппаратное дублирование, использование "горячего резерва" и т.д.);
  2. для серверов локальных сетей (СЛС):
    • контроль состава и порядка использования ПО, находящегося на СЛС;
    • дублирование стандартных средств защиты от НСД, входящих в состав сетевого ПО;
    • запрет записи на общий диск файл-сервера локальной сети исполняемых файлов, не имеющих отношения к обработке информации в сети.

Что касается мер защиты от вирусов и закладок в процессе разработки самих программ защиты (п.2 группы I), то в данном случае необходимо предусмотреть:

Атака салями

А теперь поговорим о биче банковских компьютерных систем - атаке "салями".

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

При разработке банковских систем устанавливается правило округления (или усечения), используемое при выполнении всех операций. Вся хитрость состоит в том, как запрограммировать обработку округлений. Можно, конечно, просто удалять несуществующие величины. Но можно и не удалять, а накапливать на некоем специальном счете. Там пол цента, тут пол цента... - а в сумме? Как свидетельствует практика, сумма, составленная буквально из ничего, за пару лет эксплуатации "хитрой" программы в среднем по размеру банке, может исчисляться тысячами долларов.

Другой вариант использования "атаки салями": При обмене валют всегда существует два курса – курс продажи и курс покупки. Благодаря существованию этой разницы, или спрэда, банки при переводе денег из одной валюты в другую всегда получают прибыль. Во время проведения конвертации при использовании большинства валют банки округляют суммы до двух десятых от денежной единицы. Так, при покупке долларов на сумму 1000,00 евро клиент получает, например, 1.364,00 условных единиц, хотя на самом деле при текущем курсе валют реальная сумма обмена может составлять порядка 1.364,0045.

Используя эту систему округления злоумышленник может попытаться совершить обмен минимально допустимой суммы –в большинстве случаев это 0,01 от единицы денежной валюты. Если попытаться таким образом поменять 0,01 евро на доллары, то получиться сумма приблизительно в 0,01364 долларов. Банк автоматически округлит получившуюся величину до двух сотых и выдаст клиенту 0,01 доллара, что составит 27% убытка клиенту. Однако если попытаться произвести ту же операцию наоборот, то при конвертации получиться сумма приблизительно в 0,0072046, которая также, в конечном счете, будет округлена до 0,01.

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

Можно сказать, что атака салями - компьютерная реализация известной поговорки "С миру по нитке - голому рубаха".

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

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

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

Оглавление


© Колесников Дмитрий Геннадьевич Rambler's Top100 Учебник по СайтоСтроению