Безопасное программирование: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м уточнение
Нет описания правки
Строка 20: Строка 20:
* [https://secuniaresearch.flexerasoftware.com/community/research/ Secunia]
* [https://secuniaresearch.flexerasoftware.com/community/research/ Secunia]
* [https://www.ibm.com/ru/services/iss/research.html IBM ISS X-Force]
* [https://www.ibm.com/ru/services/iss/research.html IBM ISS X-Force]

Современные [[Статический анализ кода | анализаторы кода]] и автоматизированные аудиторы могут использовать подобные базы уязвимостей (например [[PVS-Studio]] <ref name="pvsstud"> [https://habrahabr.ru/company/pvs-studio/blog/324114/ PVS-Studio: поиск дефектов безопасности] </ref>). Это повышает степень доверия к данному продукту, а также может быть важным при составлении отчётов об уязвимостях, имеющихся в программном продукте.


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

Версия от 12:28, 6 октября 2017

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

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

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

Важность

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

Любое приложение является многоуровневым по своей структуре. Каждый уровень требует отдельного внимания при проектировании. Например, до реализации любой протокол должен быть разработан, должны быть разработаны и реализованы различные функции и интерфейсы. Само программирование — нижний слой проектирования приложения. Для обеспечения безопасности требуется внимание на каждом этапе проектирования приложения. Реализация безопасного протокола должна проходить с учетом требований безопасности, заложенных ещё на этапах описания и проектирования, а также не создавать новых уязвимостей, связанных с реализацией. Безопасное программирование — уровень в цепочке разработки безопасного приложения. При этом обеспечение безопасности исходного кода требует ручного анализа. Существуют специальные анализаторы, позволяющие упростить эту задачу. И всё же задача остается трудоемкой и отнимающей много времени, поэтому обеспечение безопасности — это дорогостоящая процедура, увеличивающая общую стоимость программного продукта. Однако отсутствие такого анализа повышает вероятность нахождения уязвимостей другими людьми, которые уже могут использовать их в своих корыстных целях[2].

Перечень и типы уязвимостей

Классификаторы

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

  • CVE (Common Vulnerabilities and Exposures) — словарь конкретных уязвимостей конкретных продуктов.
  • CWE (Common Weakness Enumeration) — база данных типов уязвимостей. Основная задача проекта — предоставить описания распространенных видов уязвимостей, способы их предотвращения, обнаружения и исправления.
  • SecurityFocus BID
  • OSVDB (Open Sourced Vulnerability Database) — база данных, прекратившая работу 5 апреля 2016 года. Блог продолжает работать.[3]
  • Secunia
  • IBM ISS X-Force

Современные анализаторы кода и автоматизированные аудиторы могут использовать подобные базы уязвимостей (например PVS-Studio [4]). Это повышает степень доверия к данному продукту, а также может быть важным при составлении отчётов об уязвимостях, имеющихся в программном продукте.

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

Виды уязвимостей

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

Ущерб

Информация об уязвимостях может быть использована злоумышленниками при написании вирусов. Например, один из первых известных сетевых червей — вирус Морриса в 1988 году использовал такие уязвимости как переполнение буфера в Unix-демоне finger для распространения между машинами. Тогда количество зараженных машин составило порядка 6 тысяч, а экономический ущерб по данным счётной палаты США составил от $100,000 до $10,000,000[7].

В 2016 компьютерные вирусы причинили мировой экономике ущерб в 450 миллиардов долларов.[8]

В 2017 ущерб от вируса WannaCry оценивают в $1 млрд. Случаи заражения были зафиксированы по меньшей мере в 150 странах[9]. Вирус использовал эксплойт EternalBlue, эксплуатирующий уязвимость в протоколе SMB, связанную с переполнением буфера[10].[11]

Примечания

Литература

  • Howard M., LeBlanc D., Viega J. 24 Deadly Sins of Software Security: Programming Flaws and How to Fix Them (англ.). — McGraw Hill Professional, 2009. — 464 p. — ISBN 9780071626767.

Дополнительная литература