Контакты
Подписка
МЕНЮ
Контакты
Подписка

Подходы к оценке защищенности ПО от негативных информационных воздействий

Подходы к оценке защищенности ПО от негативных информационных воздействий

В рубрику "Оборудование и технологии" | К списку рубрик  |  К списку авторов  |  К списку публикаций

Подходы к оценке защищенности ПО от негативных информационных воздействий

В статье представлены обзор и анализ существующих подходов к исследованиям ПО на предмет отсутствия уязвимостей. Рассматриваются распространенные подходы к процессу поиска уязвимостей в ПО, отмечаются достоинства и недостатки каждого подхода, производится обзор типов инструментальных средств, используемых при исследованиях программ.
 
Станислав Кузнецов
пензенский филиал
ФГУП “НТЦ “Атлас"

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

Категории инструментальных средств для аудита

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

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

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

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

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

Современные подходы к оценке защищенности ПО от информационных воздействий:

  • сквозная инспекция исходных текстов;
  • аудит исходных текстов ПО;
  • динамическое тестирование нагрузкой ("фаззинг").

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

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

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

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

Аудит

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

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

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

Проблемы аудита

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

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

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

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

Динамическое тестирование

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

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

Опубликовано: Журнал "Information Security/ Информационная безопасность" #6, 2011

Приобрести этот номер или подписаться

Статьи про теме