Эта статья delves в более технических аспектов безопасности в код, используемый для выполнения заявки, и содержит рекомендации по созданию органов для обеспечения процесса реализации. Возможности для уязвимости в применении снижается сильного дизайн, но осуществление применения печатей свою судьбу. Жесткий работы вылил в защищенный дизайн становится inconsequential при осуществлении плохо сделано. Важно также понять, что включение связанных с безопасностью технологий или методов проектирования вовсе не означает, или гарантии любого уровня безопасности в заявку. Создание и применение любой технологии, используемой безопасности является одним из компонентов, что окончательный обеспечивает высокий уровень надежности.
Анализ на этапе внедрения является обязанностью разработчиков, так и развития менеджеров. Разработчики отвечают за осуществление проектирования хорошо, а руководители несут ответственность за установление процесса, что обеспечивает хорошую осуществления. Это может быть сделано с помощью стандартных процедур, которые включают документально развития и стандартов кодирования, дизайн и код обзоров и подготовку разработчиков в области безопасности в разработке приложений. Эти процедуры благо и разработчиков приложений независимо от того, какие языки используются или вида применения разработаны.
Наиболее широко используемые языки сегодня являются язык программирования C, Java и скриптовых языков, таких как Perl и UNIX снарядов. Каждый из этих языков и сред, могут быть использованы ненадлежащим образом к компромиссу безопасности приложения и системы, по которым она проходит. Однако, эта статья не контрольный для разработчиков следовать. Вместо создания безопасности сосредоточены мысли процесса позволяет утверждать, что для кодирования сильнее практике.
С языками программирования, включая C, C + + и C - объект, наиболее широко используемых языках и может быть опасным уверены в руки. Они дают разработчику с возможностью манипулировать и доступ многих частей системы, таких, как память, файлы и устройств. Это огромная сила С языках, но опасность возникает тогда, когда разработчик делает ошибки. C обеспечивает высокий уровень доступа к операционной системе, и мало сдержек и защищать застройщиков. Если разработчик ошибочно пишет данные неправильно устройство или память места, C программа будет делать разработчик пишет, независимо от данных или назначения.
|
|
Первый уязвимой области, нередко связаны с C, является переполнение буфера. Следующий образец кода демонстрирует самые элементарные переполнения:
символ строка [10];strcpy (строка, "AAAAAAAAAAAAAAA"); / * 15 "А" символы
Здесь, 15 "А" символы копируются в область памяти для переменной строка, которая объявляется как статический 10 - характер массив. В strcpy () функций делает точно, как указано без учета размера данных копирование или местоположение, в которое он выходит. Буфера происходит, когда 11 элемент копируется в памяти место, сразу после местонахождение 10 элементов переменной строки. Теперь этот принцип распространяется на любые данные, которые поступают из внешнего источника, заменив строку "А" символов. Это позволяет злоумышленнику контролировать последствия избытка.
В strcpy () функций - одна из нескольких функций в C, не совершать любые рамки проверки и позволяют произвольно размера буферов для копирования. Другие функции, чтобы избежать которые получает (), strcat (), sprintf () и scanf () семейства функций. Есть обновленные версии некоторых из этих функций, которые позволяют длины скопированы предстоит уточнить. Эти strncpy (), strncat (), snprintf () и fgets (). Эти изменения функций копировать только до символов указанной длины параметра. На большинстве, длина символов, копируются из источника в пункт назначения:
strncpy (куда, откуда, длина);
Подсказка
При использовании "н" версии строку функций манипулирования - strncpy (), strncat (), snprintf () и fgets () - быть уверенным, что длина не превышает целевую строку, а не источником строки. Буфер может быть перерасход, если длина значения больше, чем размер буфера назначения.
При использовании указатели на буферы, а не статически заявил буферы, нужно выделить достаточно памяти для хранения ценностей копирования. Использование памяти манипуляции функций, которые позволяют вам указать длину.
Подсказка
При выделении памяти для строки данных, не забудьте добавить 1 для общей длины, с тем чтобы по характеру, заканчивающийся NULL. Без терминатора NULL, то данные в памяти, непосредственно после последнего символа строки можно считать частью строки.
Эти функции не только места, где происходит переполнение буфера. Не забудьте проверить эту информацию читать, копировать, или письменное любого места памяти или переданы переменной будет соответствовать, или, что назначения выделено достаточно места.
Подсказка
Чтобы избежать переполнения буфера в код, не забудьте проверить вклад. Проверка размера данных и места хранения и использования функций манипулирования, которые генерируют разработчика определенных объемов информации вместо произвольно долго кусков данных.
Гонки условия добавления уровня сложности с использованием C код. Расовые условиях может быть использовано в двух аспектах создания кода C - последовательность и защиты.
Последовательность означает порядок, в котором события происходят в заявке. Расовых условий может быть результатом расхождения между последовательности событий зависит, когда проверка не производится между событиями. Это часто означает недостаток в любые ошибки проверки и подтверждения используются стандартные. Если две функции, как запустить последовательно и вторая функция предполагает, что результаты первого являются действительными, то возможность для расы состояние существует. Повышенные привилегии зачастую объектами нападения. Организации, в сочетании с последовательностью и проверки ошибок, свести к минимуму возможность расы условия.
Это плохой реализации, что создает условие гонки:
increase_privs ();...значение = special_app_function (); / * требует привилегий *other_unreleted_function (); / * не требует привилегий *other_unreleated_function2 (); / * См. выше * /special_dependent_function (стоимость); / * требует привилегий *...выезда ();
Здесь пару небезопасных видов практики происходят. Привилегии являются применение повышенных в начале применения, но не используются позднее. Они также никогда не отказалась, тем самым функцию выполняет с высокой, чем необходимо привилегия уровнях. Наконец, гонки состояние создается путем плохой организации зависит от функций, не происходят недалеко друг от друга. В качестве примера, что решает эти проблемы,
increase_privs ();значение = special_app_function; / * требует привилегий *если (! validate_function (стоимость) / * обеспечить безопасность стоимость *(do_error_processing (стоимость); / * сделать что-нибудь интеллектуальное с ошибкой *)special_dependent_function (стоимость); / * требует привилегий *decrease_privs (); / * больше не нужны привилегии * /other_unreleted_function (); / * не требует привилегий *other_unreleated_function2 (); / * См. выше * /
Примечание специальной проверки и обработки ошибок процедур, которые используются до прохождения ценность для другой функции.
Подсказка
Организовать функциональность и объединить его с одобрения чтобы ожидается информации не ставился между зависимых событий.
Многие расы существуют условия, как результатом плохого использования временного файла. Когда эти файлы созданы, они должны быть защищены от внешнего нападения в ходе эксплуатации. UNIX и Windows позволяет разработчику устанавливать разрешение бит и оперативной флагов при создании файла. Разрешения следует запретить доступ никому, кроме владельца процесса. При создании файла с помощью открытых () призыв установить O_EXCL и O_CREAT флагами, которые вызывают функции вернуть ошибку, если файл Вы пытаетесь создать, уже существует. Поскольку временный файл, она не должна существовать до необходимости. Если этот файл существует, это является признаком возможного нападения. При использовании этих методов, также важно проверять возвращаемые значения из функций и очистить все файлы в случае ошибки условий. В следующем примере показан синтаксис, чтобы открыть файл или создать, если она еще не существует - с разрешения, которые позволяют только создатель читать, писать и выполнять его, используя S_IRWXU режиме макро.
открыт ( "имя файла", O_CREAT | O_EXCL | O_WRONLY, S_IRWXU);
Призыв не удастся в том случае, если файл уже существует в связи с O_EXCL флаг. Кроме того, отмечают незащищенного файла. Статическая конвенции именования используется увеличивает риск нападения резко, поскольку одним из компонентов этого нападения уже предусмотрено.
В связи с расширением присутствия временный файл гонки условия, и неопределенность, связанные несколько операционных систем имеют конкретные функции, чтобы создать временные файлы в защищенной среде.
Разработчики могут также использовать операционную систему встроенных в файл блокировки возможностей для управления доступом к файлам. Эти методы контроля доступа в ядро основных компонентов.
Подсказка
При использовании временных файлов, файлов в случайном порядке, установить решительной разрешений, а также организует создание, использование и удаление файлов свести к минимуму возможность нападения.
Еще один компонент, который повышает надежность и могут влиять на безопасность заявка возвращения стоимости. Хотя это может показаться очевидным, важно подчеркнуть необходимость проверки возвращаемых значений функций. Функции часто исполнять серийно и полагаться на результаты или данных из предыдущей функции. Отмечая возвращение стоимости предыдущих функций, функция зависит защищен от исполнения недействительных данных. Даже когда события не нападения, оправляется от аномальные условия повышает надежность применения.
Этот пример демонстрирует неудовлетворительное осуществление, которое не проверить возвращаемое значение:
н = do_string_check (строка, valid_characters); / * функция возвращает int * /если (н == GOOD_RETURN)(process_string (строка);)
Здесь осуществление является слабой из-за негативных случае плохой возвращения, никогда не устранить. А лучше осуществления
н = do_string_check (строка, valid_characters); / * функция возвращает int * /если (н! = GOOD_RETURN)(special_error_processing_routine (н); / * плохие ценности, сделать что-то *)process_string (строка);
Негативные вернуться управляется - ошибка обработки обычных, которые могут выйти из программы, получить новую строку, или конвертировать возвращения стоимости в действительный параметр. Если вернуться стоимости хороша, она идет процесс рутины.
Подсказка
Создание многократно используемых событие и стандартные ошибки предоставляет стандартный механизм, с помощью которого все приложения реагируют на различных нападений и проблем. Идеи для этих процедур относятся общие методы для проверки строки и числовые значения, обертка для выполнения функции проверки целостности, и защита механизмов, проверки переменных и памяти места. Всегда проверяйте и процесс возвращения стоимости функции.
Следующий фрагмент подробно связана с использованием конфиденциальной информации в заявке, в том числе пароли, шифрование, или любой другой частной информации. Как отмечалось ранее, все сведения о программе существует в области общего пула памяти, что может быть чтение и изменение внешних процедур. Это полезно для очистки памяти, когда информация не используется, во избежание разглашать информацию во время нападения. Наиболее распространенной и достаточно четкий метод для данных, это обычно называется нулевой демпинг из памяти. Когда хранения информации больше не нужен, в складских помещениях должны быть перезаписан нулями или случайные данные для предотвращения злоумышленнику восстановления информации через память или основных свалок. Эта процедура становится особенно важно, когда кодирование используется. На ключи, используемые для шифрования и расшифровки сообщений, являются наиболее важные в криптографические системы, и все возможное для их защиты необходимо сделать.
Эти руководящие принципы отражают некоторые общие вопросы, которые возникают в C основе применения. С очень популярным и мощным языком, что позволяет обеспечивает максимальную гибкость для разработчика, и следует позаботиться его использования.
Perl является интересным зверя, которая сочетает в себе многие преимущества структурированного языка программирования, как С, благодаря гибкости и интеграции в UNIX корпуса. Perl позволяет разработчикам создавать процедуры или subroutines, определения переменных, и использование приложений и команд доступны с операционной системой. Эти возможности, и его численность с регулярными выражениями и разборе, Perl уделять значительное присутствие в Web приложений, системы управления и автоматизации.
Perl программ, как правило, не восприимчивы к переполнению буфера из-за этого слабо ввели характер ее переменные и деклараций. В отличие от C, в котором переменные и память должны быть определены как особое хранения класса и памяти необходимо выделить для них, Perl делает все автоматически и обрабатывает все данные как строки. Возьмите следующий пример:
#! / путь / к / перл$ одна = 1;$ one_s = "1"; # Нет отличаться $ одна$ = $ два один + $ one_s; # результат 2, или "2", которые эквивалентны
В С, переменная $ можно было бы, вероятно, объявляются целое и $ one_s, строки. Включение двух элементов приведет также к ошибочному стоимости. Perl не проводит различия между разными видами, поэтому $ двух установленных 2, или "2" - это эквивалент в Perl. Формулировка также не стать жертвой на выделение памяти требования, которые другие языки выставки. Следующий пример является полностью приемлемым в Perl:
#! / путь / к / перл$ var1 = "AAAAA";$ var2 = "BBBB";$ var2 = $ var1; # $ var2 становится "AAAAA";
$ var2 приобретает новое значение пяти "А" символов. Все переменные динамически выделены; Нет концепции предустановленных складских помещений, которые могут быть захлестнула.
Perl это может быть, однако, расы условий и уязвимости, связанные с исполнением внешних программ. Необходимо уделять последовательности функций. Input подтверждение не менее важно в Perl, с тем чтобы предотвратить использование внешних приложений.
Perl поддерживает возможность открывать файлы, как и в C и других языках, поэтому использование временных файлов следует учитывать соответствующие разрешения и создание флагов.
Использование Perl в Интернете CGI программы также чрезвычайно популярны. Наибольшие риски, связанные с его использованием в этой среде происходит во материалы проверки и исполнения внешней системы программ изнутри. Для защиты приложения, несколько меры предосторожности могут быть предприняты. Использование taint - проверка механизмов Perl, установить любое значение вне программы не будет передаваться в любую программу запустить от применения. Любые переменные, заданные в переменной допущено стать сомнительной. Тайнт проверьте режим особенно полезен для предотвращения уязвимости, в которой пользователь без переменных передаются тайно призвал к программам из Perl применения. Для запуска версии 5 на Perl в taint - проверка режиме, используйте следующий скрипт заголовок:
#! / путь / к / перл - T # Выполнить в taint - проверка режиме
Следующая мера предосторожности для разбора входные значения для удаления метаданных символов и ненужных значений. Это помогает защитить от нападений, которые используют параметр - переходит к орудий и других приложений. Следующий пример показывает, что простые обычные сканирует материалы строка для любых метаданных символы, которые могут быть истолкованы в программе:
$ unclean_input = и get_HTML_forms_response ();если ($ unclean_input = ~ tr /;|`!#$&*()[]{) <>:'"//)(# Print некоторые HTML здесь указанием провали do_some_error_reporting ();)
В этом случае, обычные сообщения об ошибке, если мета - символ найден. Альтернативные методы метаданных заменить символы, или только продолжаться, если не мета - символ найден.
Окончательный предосторожности является использование корпуса для запуска других приложений. Как и в случае с UNIX системы () слово и запустить Windows () призыв системы () призыв в Perl позволяет разработчикам запускать другое приложение. В запустить () в Perl слово функционирует как слово, что в UNIX - текущие процесс заменяется программе указано. Эти функции может быть особенно опасным, когда они используются в условиях, которые позволяют, вводимого пользователем, такие, как CGI программы или системы коммунальных услуг. Если подтверждение ввода не произойдет, то приложение может быть использовано для выполнения произвольного кода программы, которые могут влиять на систему. Следующий пример демонстрирует нестабильность использования системы () с nonvalidated ввода. Допустим, что пользователь поставил комбинация имени пользователя; / Бин / rm -rf /, что стало возложенных на переменную $ ввода:
системы ( "ecommerce_app $ ввода");
Это фактически означает / бин / ш ecommerce_app имя пользователя; / Бин / rm -rf /. Предположив, что программа работает с привилегиями, программа будет осуществлять оболочки для запуска электронной коммерции применения; Попал в корпус запятой, которая является разделителем в команду корпуса; , А затем выполните rm - радиочастотные, который стирает всю файловую систему .
Java - это сравнительно недавно изобретение в мире распределенных вычислений в Интернете. Она приносит свои плоды концепции независимой от платформы код. Java работает в письменном виде кода и компиляции ее в специальный формат, который затем запустите на Java виртуальной машины. Виртуальная машина (VM) является конкретной платформы, но код, который работает на нет. Java позволяет браузеров и удаленных систем для запуска более сложных и интерактивных приложений. В веб-браузере посещений веб-сайта и получает апплет Java с сервера. Этот апплет затем запускается в веб-обозревателя и могут общаться с отправляющей веб-сервера. Вводимые, Java превращены статических веб-страниц в динамических и стекающих заявок. С первых дней, использование Java была расширена в различных распространяется применение таких областях, как управление сетью, встроенный приборы Интернет, коммунальных и других функций.
Java является прекрасным примером языка, чьи разработчики безопасности рассмотрел в начале этапов проектирования. Первоначальные версии Java имеет хорошо документированный системы безопасности, называемой "песочнице", что помешало Java апплет или применения доступ к системным ресурсам. Как использовать Java начал расширяться, возникнет необходимость в доступе к системных ресурсов за песочнице. Первый вариант с Java Development Kit условии использования подписали апплеты. Эта модель описывает апплет, что является цифровая подпись для проверки ее создателя. Когда цифровой подписи проверены, апплет затем доверием местной системы, которая позволяет апплет доступа к другим ресурсам системы. Этот метод цифровой подписи предполагает справедливое количество сложных программных работать правильно. Важно также отметить, что эта модель безопасности на цифровой подписи апплет Java несовершенна. Любой человек может подписать апплет. В вредоносные апплет может быть подписано в атакующий и загрузить в веб-браузер. В веб-браузере эффективно проверяет, что вредоносные апплет действительно написана злоумышленника, а затем с радостью исполняет ее, независимо результате запланированных в ней.
Нынешний и второй итерации в Java архитектуры безопасности является гораздо более мощным и гибким по сравнению с предыдущими версиями. Это позволяет ввести Java многих областях разработки приложений, ранее за своих возможностей. Новые Java архитектуры безопасности использует легко определению политики в области безопасности и контроля доступа методы, которые позволяют апплет или приложения для доступа к конкретным ресурсам в различной степени. В связи с руководящими принципами, представленных здесь, Java разработчики проанализировали различные взаимодействия и уязвимости настоящего с распределенным приложений Интернет, и пришли к модели, что обеспечивает высокую безопасность при экстремальных гибкость. За полную документацию по Java и API, см. http://java.sun.com.
UNIX корпусов составляют основу взаимодействия пользователя с системой UNIX. Корпуса имеют командной строки переводчиков, которые поддерживают некоторый уровень автоматизации и программирования в виде оболочки скриптов. Эти сценарии часто используются для автоматизации системы задач, выполнения повторяющихся операций, и запустить CGI Web приложений. Как и в Perl, областей потенциального риска материалы проверки, гонки условия, взаимодействия с внешними файлы и программы, а также организация функциональности.
В UNIX, привилегированных операций можно запустить, привилегированный пользователь, или они могут быть настроены на запуск в качестве привилегированного пользователя. Существуют тонкие различия между двумя методами. Все файлы в системе UNIX, в том числе заявки, иметь набор атрибутов, которые включают пользователей и группы собственности, и ряд разрешений флаги. Объединенные, они позволяют доступ к файлам будет строго контролироваться. Нормальный заявок являются собственностью пользователя и в зависимости от прав доступа, то они могут быть запущены только владелец, группой, или любой системы. Применение наследования привилегий пользователя, противоречит им. Заявка, которая требует привилегиями суперпользователя можно запустить, без корневого пользователя, но в эти моменты, где повышение привилегий требуется, она будет обречена на провал. Для решения этой и разрешить обычным пользователям получить доступ к определенным привилегированным функций, UNIX предоставляет SetUID и SetGID флаги. Когда включен, они являются причиной применения для запуска в качестве владельца или группы для этого приложения - они определяют ID пользователя (UID) в применении к кем он владеет.
Многие CGI и программ системы требуют доступа к системным ресурсам и SetUID корня. Это относится и к составлен программ, таких, как C программ и сценариев, включая Perl и UNIX снарядов. UNIX Опытные пользователи и разработчики часто предупреждают об опасности SetUID шелл скриптах, которые обеспечивают привилегиями суперпользователя. Как уже отмечалось выше, материалы проверки и гонки условиях легко использовать, когда сценарий не охраняется должным образом. При запуске скрипта в качестве привилегированного пользователя, не существует простой способ передать ключи от замка, чем слабым сценарием оболочки. Такие сценарии особо опасных при запланированных без меры безопасности, поскольку оболочка, интерактивный характер. Пользователи поставку материалов, а корпус выполняет функцию. Perl имеет много встроенных в сдержек и противовесов, которые позволят безопаснее SetUID использования.
Интернет приборы являются системы и устройства, чья цель заключается весь Интернет вычислений. Все разработки руководящих принципов, языка программирования соображений уязвимости, и оперативные парадигм имеют непосредственное отношение к Интернету Appliances. Интернет приборы часто используют операционных систем, приложений и методов для достижения своих целей. Если заявка в развитии следующим по этому пути, уделять особое внимание всем представленную информацию здесь. Некоторые приборы Интернет разрабатываются с нуля, включающих только новых конструкций и технологий. Оценка риска для безопасности этих систем требует дополнительного внимания. Это особенно важно для интеграции безопасности в процессе проектирования, когда, начиная с нуля.
Online: 620 users browsing the articles directory
|
|