Как противостоять хакерским атакам. Уроки экспертов по информационной безопасности — страница 7 из 46

Я спросил, как Митник, обладающий жизненным опытом «по обе стороны забора», относится к тому, что правительство считает себя вправе следить за частной жизнью граждан. Вот что он на это сказал: «Я думаю, мы все имеем право на частную жизнь. Моя последняя книга “Искусство быть невидимым(https://book24.ru/product/iskusstvo-byt-nevidimym-kak-sokhranit-privatnost-v-epokhu-big-data-5255267/) как раз о том, как человек может сохранить тайну своей частной жизни. Я думаю, очень трудно сохранять приватность, если вами интересуется кто-то вроде АНБ или правительства, обладающих неограниченными средствами. Если они не могут взломать ваши зашифрованные сообщения, то могут просто использовать одну из многих известных им уязвимостей нулевого дня и взломать ваш компьютер, либо купить такую уязвимость. За 1,5 млн долларов можно купить уязвимость нулевого дня в системе Apple, за полмиллиона – брешь в системе Android и так далее. Если у вас есть средства и ресурсы, вы получите необходимую информацию. В той книге я написал, что владею способом, который позволяет защититься даже от них, но его сложно осуществить и он включает в себя много шагов. Однако я думаю, что это все-таки можно провернуть таким образом, что даже АНБ и любому правительству будет трудно до вас добраться. Я понимаю, что в определенных случаях правительство должно обладать информацией, например когда речь идет о терроризме, но они хотят видеть и слышать всех и вся. И если за вами наблюдают, вы меняете свое поведение, а это означает ограничение свободы. Я не думаю, что свобода возможна без конфиденциальности».

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

Никто, правда, не знал, что я обнаружил способ автоматического запуска любой программы с любого портативного носителя (используя трюк со скрытым файлом desktop.ini, который позднее использовала вредоносная программа Stuxnet), и предложенный мною USB-накопитель как раз содержал демонстрационную версию этого эксплойта. Я не намеревался заражать систему Митника. Просто в то время этот эксплойт был на всех моих USB-накопителях, включая тот, который я предложил ему.

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

Информация о Кевине Митнике

Более подробно познакомиться с историей Кевина Митника можно по ссылкам:

• официальный сайт Кевина Митника: https://www.mitnicksecurity.com/;

«Призрак в Сети. Мемуары величайшего хакера»:https://book24.ru/product/prizrak-v-seti-memuary-velichayshego-khakera-180793/;

«Искусство быть невидимым»:https://book24.ru/product/iskusstvo-byt-nevidimym-kak-sokhranit-privatnost-v-epokhu-big-data-5255267/;

The Art of Deception: https://www.amazon.com/Art-Deception-Controlling-Element-Security/dp/076454280X/;

«Искусство вторжения»:https://www.amazon.com/Art-Intrusion-Exploits-Intruders-Deceivers/dp/0471782661/;

• тренинг Кевина Митника, посвященный вопросам ИБ: https://www.knowbe4.com/products/kevin-mitnick-security-awareness-training/;

• интервью с Кевином Митником: https://news.slashdot.org/story/11/09/12/1234252/Kevin-Mitnick-Answers.

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

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

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

Количество уязвимостей программного обеспечения

Существует множество источников для отслеживания уязвимостей общедоступного ПО, хотя список ошибок для каждого из них может существенно отличаться. В среднем каждый год крупные разработчики программного обеспечения и баг-файндеры объявляют о 5–6 тысячах новых уязвимостей ПО, то есть около 15 находках ежедневно. Организация Common Vulnerabilities and Exposures (https://cve.mitre.org/) и публикуемая ею база данных общеизвестных уязвимостей информационной безопасности (https://cve.mitre.org/data/downloads/index.html) считаются инклюзивными, надежными и независимыми источниками и хорошо подходят для отчетности и отслеживания общедоступных уязвимостей. Многие другие разработчики отслеживают либо собственные уязвимости, либо все известные. Прочитайте отчет Microsoft Security Intelligence (https://www.microsoft.com/ru-ru/security/business/security-intelligence-report), чтобы узнать последние цифры и результаты анализа.

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


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

Почему уязвимости ПО – по-прежнему большая проблема?

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

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

Когда разработчики выпускают патчи, «белые шляпы» и «черные шляпы» немедленно анализируют их, чтобы найти целевую уязвимость. Затем они создают эксплойты, которые могут ее эксплуатировать. Существуют десятки коммерческих компаний, несколько бесплатных сервисов и неизвестное количество хакеров, которые делают это каждый день. Вы можете приобрести и/или загрузить сканеры уязвимостей, которые будут сканировать устройства и сообщать о незакрытых уязвимостях. Эти сканеры часто содержат тысячи и тысячи эксплойтов. Есть много хакерских веб-сайтов по всему миру с тысячами отдельных эксплойтов, которые вы можете скачать, чтобы эксплуатировать определенную уязвимость. Один из самых популярных бесплатных инструментов – это Metasploit (https://www.metasploit.com/).

Защита от уязвимостей программного обеспечения

Защита от уязвимостей ПО номер один – это квалифицированные разработчики и более безопасные языки программирования.

Жизненный цикл безопасной разработки

Процесс, преследующий цель уменьшить число уязвимостей программного обеспечения, теперь широко известен как жизненный цикл безопасной разработки. Он сосредоточивается на каждом компоненте в жизненном цикле программы ПО, от ее начального создания к исправлению недавно найденных уязвимостей, чтобы реализовать более безопасное программное обеспечение. Компания Microsoft Corporation, вероятно, лучше всего потрудилась в этой области и опубликовала больше свободно доступной информации и инструментов (https://www.microsoft.com/en-us/securityengineering/sdl/), чем любой другой источник. Человеческий фактор гарантирует, что программный код всегда будет иметь эксплуатируемые ошибки, но, следуя жизненному циклу безопасной разработки, мы можем допускать меньше ошибок на то же количество строк кода.


Примечание. Доктор Даниэль Бернштейн (https://en.wikipedia.org/wiki/Daniel_J._Bernstein) – профессор в колледже, который пишет и продвигает невероятно безопасный код. Он создал несколько бесплатных и широко используемых программ, таких как dbjdns и qmail, в которых крайне мало ошибок. Он даже платит за найденные баги из собственного кармана. Даниэль верит, что разработчикам становится стыдно, когда он публично объявляет об ошибках, прежде чем предоставить разработчикам возможность анализировать и исправлять свои продукты.

Более безопасные языки программирования

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

Анализ кода и программы

После разработки версии программы ее всегда следует анализировать на отсутствие известных и распознаваемых ошибок. Это можно сделать вручную или с помощью программных средств. Анализ вручную, как правило, наименее эффективен, так как обнаруживает наименьшее количество ошибок в час, но он чаще находит эксплуатируемые ошибки, которые нельзя отыскать с помощью программы. Программные средства поиска ошибок часто называют «статическими анализаторами» или инструментами «фаззинг-тестирования». Они проверяют исходный код (или программы) на наличие известных программных ошибок в самом коде. Фаззинг-анализаторы вводят случайные (или неправильные, неожиданные) данные и ищут уязвимости в программе во время выполнения. Многие печально известные специалисты, ищущие уязвимости ПО, включая Чарли Миллера, о котором мы поговорим в главе 36, полагались на фаззинг-тестирование во многих своих открытиях.

Более безопасные операционные системы

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

Сторонние средства защиты и надстройки разработчиков

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

Идеальное программное обеспечение не решит все проблемы