Выбрать главу

Я спросил, действительно ли он и компания Microsoft предоставили больше информации и инструментов, связанных с безопасным программированием, чем любая другая организация. Он сказал: «Однозначно да! Но что еще более важно, все эти инструменты и методы мы используем в своей производственной среде, ежедневно применяя их к миллионам строк кода. Это не отвлеченная теория. Это то, чем занимается одна из крупнейших компаний в мире. И она охотно делится своим наработками».

Я спросил, почему количество публично анонсируемых уязвимостей не сокращается, несмотря на то, что программисты все больше узнают о проблемах информационной безопасности. Вот что сказал Ховард: «Отчасти это связано с появлением все большего количества программ, содержащих множество строк кода. Однако главная проблема заключается в том, что программистов все еще не обучают методам безопасного программирования, и они плохо осознают основные угрозы. Большинство образовательных программ не отвечают современным потребностям. На днях, просматривая учебную программу по информационной безопасности одного университета, я обратил внимание на то, что почти половина занятий посвящена низкоуровневым сетевым угрозам. Я не обнаружил лекций по обеспечению безопасности облака или безопасному программированию. Наши колледжи все еще выпускают программистов, которые мало что знают об информационной безопасности и разработке безопасного ПО, что довольно странно, учитывая то, что этим выпускникам предстоит создавать критически важные системы, подключенные к Интернету. Я до сих пор нахожу примитивные ошибки в коде других людей. Когда я демонстрирую им весьма распространенную проблему, связанную с повреждением памяти, или уязвимость к SQL-инъекции, на меня смотрят так, будто я совершил нечто невероятное. Программисты, знакомые с основами информационной безопасности, встречаются так редко, что я радуюсь, если кандидат хотя бы проявляет интерес к этой теме. Если программист внимательно слушает, когда я говорю о проблемах ИБ, это делает меня счастливым. Если человек заинтересован, мы можем научить его всему остальному. Но вы даже не представляете, скольким людям нет до этого никакого дела, и одна из главных причин в том, что их этому до сих пор не учат. Или учат, но не тем вещам, делая акцент на сетевой безопасности или каких-нибудь мелочах. Студентам подробно описывают принцип работы алгоритма RSA, но не объясняют, почему он должен использоваться, какие проблемы он решает и для каких целей подходит лучше всего. Умение правильно использовать инструмент для решения реальных проблем безопасности гораздо важнее понимания принципа его работы. Любой человек может разобраться в работе протокола, однако нам нужны люди, осознающие риски и думающие о решениях. Правда, существуют некоторые преподаватели и колледжи, которые придерживаются правильного подхода, например Мэтт Бишоп из Калифорнийского университета в Дэвисе. Он и другие неравнодушные преподаватели – настоящие герои».

Я спросил, что может сделать сам программист, учитывая то, что большинство колледжей недостаточно хорошо готовят студентов в этом отношении. Он посоветовал: «Постоянно учитесь. Я ежедневно выделяю час на учебу. Я читаю, пишу код и экспериментирую с чем-то новым. И занимаюсь этим на протяжении всей своей карьеры. Кроме того, если в вашем учебном заведении нет формального курса по информационной безопасности, разработайте собственную обучающую программу. Перейдите на сайт https://cve.mitre.org/cve/ и внимательно прочитайте о недавно обнаруженных уязвимостях. Затем напишите код, содержащий одну из них, и подумайте, что нужно было сделать для предотвращения ее появления как на техническом уровне, так и на уровне процессов. Выясните, откуда взялась эта уязвимость и как именно попала в код. А затем используйте извлеченные уроки, чтобы предотвратить появление подобных ошибок в вашем собственном коде».

На вопрос о том, что могут сделать компании для создания более безопасного кода, помимо следования текущим принципам SDL и использования доступных инструментов, он ответил: «Сделайте так, чтобы программисты не только понимали теоретические основы, но и осознавали реальные угрозы. Кроме того, вам следует встроить процесс обеспечения безопасности в сам конвейер разработки ПО, чтобы плохой и небезопасный код не мог в него попасть. В Microsoft мы используем так называемые ворота качества. Хороший (не связанный с безопасностью) пример – это написание кода, который предполагает, что все IP-адреса состоят из четырех октетов. Это означает, что такой код никогда не будет работать в чистой среде IPv6. Этот код даже не сможет пройти проверку, поскольку специальный инструмент, работающий в автоматическом режиме, выявит проблему и предотвратит его сохранение в системе. Вот что мы подразумеваем под термином “ворота качества”. В целях обеспечения безопасности этот же подход можно применить для выявления уязвимостей к SQL-инъекциям, угроз, связанных с безопасностью памяти, и всего того, что вы не хотите видеть в своем коде.