Июнь 2008

«C причудливый, недостатки и огромный успех.»

Деннис Ритчи

В сегодняшнем компьютерном мире безопасность занимает все более доминирующую роль. Отрасль сталкивается с трудностями в доверие общественности на обнаружение уязвимостей и клиентов ожидают безопасности будет поставляться из коробки, даже на программах, которые не были разработаны с учетом безопасности. Разработчики программного обеспечения сталкиваются с проблемой для повышения безопасности их программ и часто под-к сделать это. Некоторые используют преимущества программного обеспечения с открытым исходным кодом (ПСОК) как доступность исходного кода облегчает их проверку и отвечает на их потребность в надежных программ. OSS часто выполняются с использованием языка программирования C (26% по данным SourceForge.net). Это делает необходимым исследовать вопросы безопасности, относящиеся к C.

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

Усиление безопасности программного обеспечения

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

На практике анализ рисков может привести к изменениям в исходном коде, процесс развития, общий дизайн или даже операционную среду, сама как описано в следующей классификации методов по усилению безопасности:

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

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

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

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

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

Точки зрения

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

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

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

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

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

Низкий уровень перспективы

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

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

Печально известной уязвимости в языке C

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

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

Таблица 1: Твердеть для буфера переполнения
Уровень усиления защиты Продукт/метод
Код: Прыгните проверка памяти функций манипуляции с параметром длины, обеспечение надлежащего цикла прыгает, спецификация формата строки, проверки ввода пользователя
Процесс программного обеспечения: Компилировать с canary словами, inject аспекты, связанные с проверки
Дизайн: Проверка ввода, ввода санитарную обработку
Рабочая среда: Отключение выполнения стека, используйте libsafe, включить рандомизацию стека

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

Таблица 2: Твердеть для целочисленных уязвимостей
Уровень усиления защиты Продукт/метод
Код: Использование функций обнаружения целочисленного переполнения/потери точности, миграция целых чисел без знака, обеспечивая целочисленных данных размер назначений/отливок
  Процесс программного обеспечения: Параметр компилятора для преобразования арифметические операции обнаружения состояния ошибки

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

Таблица 3: Твердеть для уязвимости управления памяти
Уровень усиления защиты Продукт/метод
Код: Значение NULL, назначение на освобождение и инициализации, на выделение, инициализация указателя обработки ошибок во избежание разыменование null
Процесс программного обеспечения: Использование аспектов обработки ошибок и назначений, параметр компилятора для принудительного обнаружения нескольких свободных ошибок
Рабочая среда: Используйте диспетчер закаленной памяти (например, dmalloc, phkmalloc)

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

Таблица 4: Твердеть для файлов управления уязвимостей
Уровень усиления защиты Продукт/метод
Код: Использование надлежащих временных файлов функций, использование по умолчанию ограничительных файлов разрешения, Маска создания ограничительного файла, использование функции ISO/IEC TR 24731
Процесс программного обеспечения: Установка оболочки программы, изменение создания маски
Дизайн: Редизайн, чтобы избежать временных файлов
Рабочая среда: Ограничение прав доступа к соответствующим каталогам

Узнать больше

Мы ввели концепцию усиления безопасности программного обеспечения и классификации для закаливания методов. Ожидается, что он поможет разработчикам и разработчикам при развертывании и закаливания функций безопасности и устранения уязвимостей в существующих OSS. Более высокое качество информации имеющиеся уязвимости системы безопасности и методов, используемых для их смягчения. Мы рекомендуем некоторые ключевые ресурсы для решения проблем безопасности в существующего программного обеспечения, включая портал США министерство национальной безопасности, который является наиболее полный справочник по вопросам безопасности программного обеспечения.

Как общий совет научное сообщество рекомендует искать ПСОК в современных языках, таких как Java, C# .NET, Ada, искры и CAML. Они предлагают гораздо лучшую безопасность, чем старые языки программирования, как C и C++, которые являются неполными с точки зрения безопасности типов и строгой памятью. Во всех случаях реализации хорошо признанных и хорошо поддерживаемых обеспечивают лучшие строительные блоки, так как они постоянно совершенствуются в соответствии с все возрастающей опасности, встречающихся в окружающей среде современной кибер.

Выражение признательности

Это исследование является результатом плодотворного сотрудничества между компьютерной безопасности лаборатории Университета Конкордия, оборонных исследований и развития Канады в Валкартье и Белл Канада благодаря Грант по программе партнерства NSERC/DND исследований.

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

Рекомендуемые ресурсы

Безопасного кода на C и C++

Безопасный программирование для Linux и Unix HOWTO

Портал безопасности программного обеспечения DHS

Общие уязвимости и воздействия

Общие шаблоны атак

Вопросы экологического

Безопасность веб-приложений

Доля этой статьи:

Цитируете эту статью:

Оцените содержание: 
Нет голосов были поданы еще. Скажи свое слово!