Interested Article - Безопасное программирование
- 2021-02-01
- 1
Безопасное программирование — методика разработки программного обеспечения , предотвращающая случайное внедрение уязвимостей и обеспечивающая устойчивость к воздействию вредоносных программ и несанкционированному доступу . Баги и логические ошибки являются основной причиной появления уязвимостей программного обеспечения.
Безопасное программное обеспечение — программное обеспечение, разработанное с использованием совокупности мер, направленных на предотвращение появления и устранение уязвимостей программы .
Задача безопасного программирования — защита данных пользователя от кражи и порчи, сохранение контроля над системой. Небезопасная программа — потенциальная цель для злоумышленника, который может использовать имеющиеся уязвимости для просмотра, изменения или удаления имеющейся информации, влияния на работу программ и сервисов (запуск или остановка), внедрения вредоносного кода в систему .
Терминология
В англоязычной литературе существует два термина, которые могут быть переведены, как безопасное программирование.
Defensive programming ( Оборонительное, защитное, безопасное программирование) — принцип разработки ПО , при котором разработчики пытаются учесть все возможные ошибки и сбои, максимально изолировать их и при возможности восстановить работоспособность программы в случае неполадок. Это должно делать программное обеспечение более стабильным и менее уязвимым. Например, аппаратной реализацией данного принципа является сторожевой таймер , вычисление контрольной суммы — для выявления ошибок при пакетной передаче данных .
Secure coding ( Безопасное программирование) — методика написания программ , устойчивых к атакам со стороны вредоносных программ и злоумышленников. Безопасное программирование помогает защитить данные пользователя от кражи или порчи. Кроме того, небезопасная программа может предоставить злоумышленнику доступ к управлению сервером или компьютером пользователя; последствия могут быть различны: от отказа в обслуживании одному пользователю до компрометации секретной информации, потери обслуживания или повреждения систем тысяч пользователей .
Важность
Вопросы обеспечения безопасности и работоспособности системы являются неотъемлемой частью этапа её проектирования ( ИТ устанавливаются исходя из имеющихся и прогнозируемых угроз безопасности, проводимой политики безопасности , а также с учётом условий их применения . Внедрение решений для обеспечения безопасности после того, как система уже разработана, является сложной и дорогостоящей процедурой. Поэтому следует с самого начала учитывать требования к безопасности на протяжении всего жизненного цикла системы .
) . Требования к безопасности конкретных продуктов и системИнформационная система разделяется на физический и логический уровень. Понимание того, что именно должно быть защищено от внешних факторов, помогает с наиболее эффективным выбором и применением защитных мер. Чёткая граница между уровнями должна определяться политикой безопасности, регулирующей определённый набор информации и информационных технологий , имеющий физические границы. Дальнейшее усложнение заключается в том, что на одном компьютере или сервере может размещаться как общедоступная, так и конфиденциальная информация. В результате несколько политик безопасности могут применяться к одной машине или в пределах одной системы. Поэтому при разработке информационной системы границы безопасности должны учитываться и описываться в соответствующей документации и политиках безопасности системы . Её разработчики должны уметь обеспечить безопасность системы при проектировании , разработке , управлении и конфигурировании, , правильно провести тестирование .
Анализ (ручной или автоматический) и обеспечение безопасности — дорогостоящая процедура, увеличивающая общую стоимость программного продукта . Ранее полное устранение рисков было общей целью обеспечения безопасности. Сегодня признаётся, что устранение всех рисков не является экономически эффективным. Для каждой предлагаемой системы контроля следует провести анализ затрат и выгод. В некоторых случаях преимущества более безопасной системы могут не оправдывать прямых и косвенных издержек. Выгоды включают не только предотвращение денежных потерь; стоит учитывать, например, и репутационные потери. Прямые расходы включают расходы на приобретение и установку данной технологии; косвенные расходы включают снижение производительности системы и дополнительное обучение сотрудников .
Принципы
В настоящее время существуют разнообразные технологии разработки безопасного ПО . Но есть набор принципов, учитываемых при любом подходе :
- работоспособность и полезность ( юзабилити , англ. usability );
- безопасность ( англ. security ) — возможность защиты от внешних угроз, атак и сохранение работоспособности после их отражения и устранения;
- надежность ( англ. reliability ) — предсказуемое, корректное и безотказное поведение в случае некорректных исходных данных;
- конфиденциальность ( англ. privacy ) — обеспечение безопасной и корректной работы с конфиденциальной информацией;
- обеспечение целостности и корректности бизнеса ( англ. business integrity ) — чёткая организация сопровождения программы, контроль прозрачности, законности, корректности работы пользователя.
Четыре последних качества стали основой ( англ. ) («Вычисления, заслуживающие доверия») — инициативы корпорации Microsoft , главная задача которой — обратить внимание разработчиков на важность обеспечения указанных требования на каждом из этапов разработки ПО .
Существует множество принципов обеспечения безопасности ПО, большей частью похожих друг на друга. Их обобщением можно считать приведённые выше принципы .
Классификация и виды уязвимостей
Классификаторы
Использование стандартизованных описаний уязвимостей упрощает работу специалистов по информационной безопасности. В настоящее время существует несколько популярных классификаторов :
- CVE (Common Vulnerabilities and Exposures) — словарь конкретных уязвимостей конкретных продуктов;
- (Common Weakness Enumeration) — база данных типов уязвимостей. Основная задача проекта — предоставить описания распространённых видов уязвимостей, способы их предотвращения, обнаружения и исправления;
- ;
- (Open Sourced Vulnerability Database) — «открытая база данных уязвимостей», созданная тремя некоммерческими организациями. Прекратила работу 5 апреля 2016 года. Блог продолжает работать ;
- Secunia — лента уязвимостей известной датской компании Secunia в области компьютерной и сетевой безопасности;
- IBM ISS X-Force.
Современные анализаторы кода и автоматизированные аудиторы могут использовать подобные базы уязвимостей. Это повышает уровень доверия к продукту, а также может оказаться важным при составлении отчётов об уязвимостях, имеющихся в программном продукте .
Встречаются и другие классификаторы. При работе с ними следует обращать внимание на авторов, так как каждая система классификации должна создаваться экспертами в данной области .
Метрики
Каждая программа является потенциальной целью для злоумышленников. После нахождения уязвимостей в приложениях или сервисах они будут пытаться использовать их для кражи конфиденциальной информации, порчи данных, управления компьютерными системами и сетями . Для описания свойств уязвимости специалистами используется система подсчёта рисков уязвимостей CVSS . Она представляет собой шкалы, на основе которых выставляются баллы. Система метрик разработана для разделения приоритетов над исправлением уязвимостей. Каждая шкала относится к определённому смысловому разделу, который называется метрикой. Таких метрик три :
- Базовая ( англ. base ) — характеристики уязвимости, не зависящие от времени и среды исполнения. Служит для описания сложности эксплуатации уязвимости, потенциального ущерба для конфиденциальности, целостности и доступности информации;
- Временная ( англ. temporal ) — метрика, учитывающая временной фактор, например, время на исправление уязвимости;
- Контекстная ( англ. environmental ) — метрика, учитывающая информацию о среде функционирования программного обеспечения.
Последние две метрики носят вспомогательный характер и используются лишь для корректировки показателей базовой метрики с учётом различных специфик .
Виды уязвимостей
Список распространённых ошибок, ставящих под угрозу безопасность современных программ :
- внедрение SQL-кода ( англ. SQL injection );
- уязвимости, связанные с web-серверами ( XSS , XSRF , ( англ. ));
- уязвимости web-клиентов ( DOM XSS );
- переполнение буфера ( англ. Buffer Overflow );
- ( англ. Uncontrolled format string );
- целочисленные переполнения ( англ. Integer overflow );
- некорректная обработка исключений и ошибок;
- внедрение команд (командная инъекция, англ. Command injection );
- утечка информации ( англ. Information Exposure );
- ситуация гонки ( англ. Race condition );
- слабое юзабилити ( англ. Insufficient Psychological Acceptability );
- выполнение кода с завышенными привилегиями ( англ. Execution with Unnecessary Privileges );
- хранение незащищенных данных ( англ. Protection Mechanism Failure );
- проблемы англ. Mobile Code Issues ); (
- слабые пароли ;
- слабые случайные числа;
- неудачный выбор криптографических алгоритмов;
- использование небезопасных криптографических решений;
- незащищенный сетевой трафик ( англ. Cleartext Transmission of Sensitive Information );
- неправильное использование PKI ( англ. Improper Certificate Validation );
- доверие к механизму разрешения сетевых имен ( англ. Reliance on Reverse DNS Resolution ).
Перечислить все известные уязвимости невозможно, учитывая, что каждый день появляются новые. В данном списке приведены часто встречающиеся уязвимости, допустить которые легко, но последствия которых могут быть катастрофическими. Например, причиной распространения червя Blaster стала ошибка всего в двух строках кода .
Защита
Правильной стратегией защиты от ошибок и уязвимостей является их предупреждение и предотвращение. Это требует от разработчика постоянной проверки входных данных. Например, лучший способ защиты от атак переполнения буфера — проверка того, что входные данные не превышают размера буфера, в котором они сохраняются. Данные, предназначенные для отправки в БД требуют проверки для защиты от атаки типа внедрения SQL-кода. Если данные отправляются на web-страницу, то следует их проверять для защиты от XSS . Однако, избыточное число проверок усложняет разработку исходного кода программы и может привести, в свою очередь, к появлению новых ошибок, поэтому следует комбинировать данную стратегию с другими .
Механизмы для защиты от ошибок может предоставлять компилятор или операционная система . Компилятор GCC позволяет с помощью функции _builtin_object_size() получать размер объекта по указателю на этот объект, так что её использование делает процедуру копирования безопаснее. MSVC при использовании флага /RTCs позволяет на этапе компиляции проверить переполнения локальных переменных, использование неинициализированных переменных, повреждение указателя стека, вызванное несоответствием соглашений о вызовах. Использование технологии CRED (C range error detector) и специальных вставок перед защищаемым разделом стека ( , ) частично позволяет обнаруживать и предотвращать атаки, связанные с выходом за границы массива и разрушением стека .
Операционная система также может контролировать процесс исполнения программы. Данная стратегия может быть полезной в случае, если исходный код данной программы неизвестен. Технология ASLR (рандомизация схемы адресного пространства) является функцией безопасности операционных систем, предназначенной для предотвращения запуска произвольного кода. В настоящее время ASLR поддерживается и в Linux , и в Windows . Повышение уровня безопасности достигается применением технологий : , PaX .
Типовыми атаками на web-сервисы являются внедрение SQL-кода, XSS, CSRF , clickjacking . Современные фреймворки помогают разработчикам в создании безопасных web-приложений. Использование готовых решений позволяет не заниматься многочисленными проверками входящих данных: от заголовков HTTP -запросов до их содержания. Также предоставляется более безопасный метод работы с БД — ORM .
Ущерб
Информация об уязвимостях может быть использована злоумышленниками при написании вирусов . Например, один из первых известных сетевых червей ( вирус Морриса ) в 1988 году использовал такие уязвимости как переполнение буфера в Unix-демоне finger для распространения между машинами. Тогда количество заражённых машин составило порядка 6 тысяч , а экономический ущерб по данным счётной палаты США составил от 10 до 100 млн долларов .
В 2016 компьютерные вирусы причинили мировой экономике ущерб в 450 млрд долларов .
В 2017 ущерб от вируса WannaCry оценили в 1 млрд долларов. Случаи заражения были зафиксированы по меньшей мере в 150 странах . Вирус применял эксплойт EternalBlue , использующий уязвимость в протоколе SMB , связанную с переполнением буфера .
Примечания
- , Термины и определения, pp. 2.
- ↑ .
- .
- ↑ , Security Foundations.Principle 2, pp. 7.
- , Общие положения, pp. III—IV.
- , Security Foundations, pp. 6—8.
- , Security Foundations. Principle 5, pp. 8.
- , pp. 25—26.
- , pp. 26.
- , Security Principles, pp. 7—8.
- ↑ , pp. 48—51.
- .
- , Использование классификаторов в сканерах, pp. 51: «Современные автоматизированные аудиторы принято затачивать под какую-либо конкретную базу знаний. Во-первых, это престижно, во-вторых — полезно. К примеру, при подготовке к аттестации по одному из современных стандартов (NERC-CIP, PCI , FISMA, GLBA или HIPAA) администратору предоставляется возможность получить шаблонный отчет, соответствующий документу, издаваемому аудитором.».
- , Отдельные классификации, pp. 51: «Подчас в Сети можно заметить абсолютно самопальные классификации... Естественно, большого веса такая система не имеет, потому что составляться она должна реальными экспертами, которые понимают суть проблемы».
- , At a Glance.
- , p.86.
- .
- , 1.2. Scoring: «Базовая метрика может быть уточнена путем подсчета временной и контекстной метрик, чтобы точнее отражать риск, вызванный уязвимостью, для пользователя».
- , Inroduction.
- , Введение: «Еще в работах 90-х годов было показано, что неправильная работа с форматной строкой может привести к серьезным уязвимостям в безопасности ПО, таким как выполнение произвольного кода, повышение привилегий, а также утечка чувствительных данных.».
- , h) Psychological acceptability: «Очень важно, чтобы пользовательский интерфейс был удобным в использовании, чтобы пользователи интуитивно и просто применяли механизмы защиты правильным образом. Если мысленные представления пользователя о целях защиты соответствуют тем механизмам, которые он использует на практике, количество ошибок будет сведено к минимуму. Если же пользователь должен переводить свои представления о защите на совершенно иной язык спецификаций, он неизбежно будет совершать ошибки.».
- , Figure 1.2. Flawed logic exploited by the W32.Blaster.Worm: «Недостатки логики, использованные червём W32.Blaster.Worm, показаны на рис. 1.2. Ошибка заключается в том, что цикл while в строках 21 и 22 (используемый для выделения имени узла из длинной строки) недостаточно ограничен.».
- , 2.6 Runtime Protection Strategies:Input Validation.
- ↑ , 2.6 Runtime Protection Strategies.
- .
- .
- , Таблица 3.1, p. 90.
- , The NSA versus Morris: $100 Million in Damage, p. 23.
- .
- .
- .
- .
- .
- .
- .
- .
- .
Литература
- Касперски К. . — Питер, 2005. — P. 93, 103—104, 117—122. — 316 p. — ISBN 5469003310 .
- / Федеральное агентство по техническому регулированию и метрологии. — Стандартинформ, 2016. — 24 p.
- / Федеральное агентство по техническому регулирванию и метрологии. — Стандартинформ, 2015. — 36 p.
- Гостехкомиссия России . . — 2002. — P. III—IV. — 48 p.
- : Исследование / Лаборатория Касперского. — 2014. — P. 14.
- Комаров А. // Хакер : Журнал. — 2009. — № 04 (124) . — P. 48—51.
- Сафонов В. О. // Компьютерные инструменты в образовании : Журнал. — 2008. — № 06 . — P. 25—33.
- Вахрушев И.А., Каушан В.В., Падарян В.А., Федотов А.Н. // Труды ИСП РАН. — 2015. — Т. 27 , № 4 . — С. 23—38 . — P. 25—33.
- Howard M., LeBlanc D., Viega J. (англ.) . — McGraw Hill Professional, 2009. — 464 p. — ISBN 9780071626767 .
- Seacord R. C. (англ.) . — 2. — Addison-Wesley, 2013. — 600 p. — ISBN 9780132981972 .
- Stoneburner G., Hayden C., Feringa A. (англ.) / National Institute of Standards and Technology . — Revision A. — 2004. — 33 p.
- Wheeler D. A.. (англ.) . — 2015. — 186 p.
- (англ.) / BitDefender . — 2010. — P. 23—24. — 71 p.
- Howard M., LeBlanc D. (англ.) . — 2. — Microsoft Press, 2002. — P. 43. — 512 p. — ISBN 9780735615885 .
- Saltzer J.H., Schroeder M.D.. (англ.) : article / Saltzer J. H.. — 1975.
- Mell P., Scarfone K., Romanosky S. (англ.) // IEEE Security & Privacy : article. — 2006. — Vol. 4. — P. 85—89. — ISSN .
- (англ.) . . McAfee (2014). Дата обращения: 23 октября 2017. Архивировано из 24 октября 2017 года.
Дополнительная литература
- Seacord R. C. (англ.) . — 2008. — P. Pearson Education. — 720 p. — ISBN 9780132702461 .
- Long F. (англ.) / Carnegie-Mellon University. CERT Coordination Center. — Addison-Wesley Professional, 2012. — 699 p. — ISBN 9780321803955 .
Ссылки
-
Бондаренко, Мария (2017-05-25).
. Москва: РБК
. Дата обращения:
23 октября 2017
.
{{ cite news }}
: Указан более чем один параметр|author=
and|last=
( справка ) -
Матюхин, Григорий (2017-05-25).
. Москва: Hi-Tech Mail.ru
. Дата обращения:
23 октября 2017
.
{{ cite news }}
: Указан более чем один параметр|author=
and|last=
( справка ) -
Боровко, Роман (2003).
. Москва: CNews Analytics
. Дата обращения:
23 октября 2017
.
{{ cite news }}
: Указан более чем один параметр|author=
and|last=
( справка ) - (англ.) . . Apple Inc. . Дата обращения: 23 октября 2017.
- Django Software Foundation . (англ.) . . Дата обращения: 5 декабря 2017.
- (англ.) . . Дата обращения: 5 декабря 2017.
-
Graham, Luke (2017-02-07).
(англ.)
. US: CNBC International
. Дата обращения:
23 октября 2017
.
{{ cite news }}
: Указан более чем один параметр|author=
and|last=
( справка ) -
Sun, David (2017-07-05).
(PDF)
(англ.)
. Singapore: The New Paper
. Дата обращения:
23 октября 2017
.
{{ cite news }}
: Указан более чем один параметр|author=
and|last=
( справка ) - (англ.) . US: 6abc. 2017-05-25. из оригинала 15 октября 2017 . Дата обращения: 23 октября 2017 .
- William Gamazo Sanchez (Vulnerability Research). (англ.) . . Trend Micro (2 июня 2017). Дата обращения: 23 октября 2017.
- (англ.) . . ЗАО «Лаборатория Касперского» (12 мая 2017). Дата обращения: 23 октября 2017.
- M. Tim Jones. (англ.) (1 февраля 2005). Дата обращения: 12 ноября 2017. Архивировано из 13 ноября 2017 года.
- (англ.) . (5 апреля 2016). Дата обращения: 3 декабря 2017. Архивировано из 28 мая 2016 года.
- (англ.) . . FIRST. Дата обращения: 12 ноября 2017.
|
В сносках к статье
найдены неработоспособные вики-ссылки
.
|
- 2021-02-01
- 1