Область кибербезопасности окружена тайной для тех, кто к ней не причастен, несмотря на то, что она становится более важной, чем когда-либо.
Есть что-то волнительное в одиноком хакере, с помощью одного компьютера и большого мозга проучивающем плохих парней или оказывающем сопротивление властям. Образ хакера ассоциируется со свободой, индивидуальностью и – что нельзя отрицать – небольшим налётом коварства. От культового фильма 1990-х «Хакеры» до более современного (и реалистичного) «Мистера Робота» – хакер давно уже занимает особое место в популярной культуре. Несмотря на такое очарование хакингом, хакерами и кибероружием, данную область плохо понимают все, кроме отраслевых специалистов.
По мере того как индустрия программного обеспечения продолжает «поглощать мир», вместе с ней растёт индустрия безопасности ПО. Чем больше разрабатывается ПО, логично, что тем больше ПО уязвимо к атакам. Среди специалистов даже растёт обеспокоенность из-за того, что занимающимся кибербезопасностью фирмам катастрофически не хватает кадров, да и самих фирм далеко не достаточно, чтобы противостоять растущему числу кибератак. Что ещё хуже, постоянное стремление к ускоренным программам подготовки разработчиков ПО означает, что разработкой кода всё чаще занимаются программисты, не получившие никакого формального обучения по безопасности.
Отсутствие базового образования по безопасности всегда представляло проблему – многие университеты не требуют обучения безопасности в своих программах по компьютерным наукам, – но проблема усугубляется тем, что образовательные учреждения побуждают разработчиков делать больше, имея меньше подготовки. Кроме того, программные экосистемы всё чаще побуждают разработчиков сильно полагаться на ПО от третьих сторон, нередко без анализа этого ПО на уязвимости. Скандал с left-pad 2016 г. позволяет увидеть, как растущая зависимость от ПО от третьих сторон может подвергнуть интернет риску.
Скандал с left-pad
Left-pad – это простая программа, вставляющая в левую часть текстовой строки определённый символ (обычно 0 или пробел) до достижения заданного размера. Данная функция в основном используется для форматирования текстового выхода, чтобы его было проще читать. Реализация проста; на момент скандала функция состояла из 11 строк прямолинейного JavaScript. Тем не менее тысячи разработчиков включили эту библиотеку в свой код, причём многие сделали это неосознанно, включив другую библиотеку, содержащую left-pad.
Скандал начался, когда библиотека left-pad была удалена из популярного инструмента для управления JavaScript-библиотеками под названием npm. Тогда все проекты, полагавшиеся на left-pad, сломались. Сломались также все проекты, полагавшиеся на проекты, которые полагались на left-pad. То была большая головная боль для JavaScript-сообщества, и из-за этого для многих любителей и компаний разработка временно приостановилась.
И вот при чём тут безопасность: что если бы вместо удаления библиотеки разработчик left-pad добавил «фичу», которая бы записывала на контролируемый им сервер информацию о том, к чему применялась программа, или ещё хуже, попытался установить более комплексное отслеживающее вредоносное ПО? Или, допустим, что если бы в библиотеке просто был небольшой баг, который смог бы эксплуатировать умный хакер?
Поскольку так много людей неосознанно полагались на код, такой эксплойт запросто мог бы остаться незамеченным разработчиками следующего порядка. Такая сеть взаимозависимого ПО – это один из примеров того, как возрастающая сложность программных экосистем усиливает влияние мелких уязвимостей.
Простые ошибки могут вызывать катастрофические проблемы
В 2017 г. в The Atlantic была опубликована статья «Грядущий программный апокалипсис» – ужасающий взгляд на чрезвычайную сложность современных программных систем и то, как простые ошибки, скрывающиеся в этой сложности, могут вызывать катастрофические проблемы. Пример? Шестичасовой сбой в работе службы 911 по всему штату Вашингтон:
«Причина сбоя в работе 911, на то время самого масштабного за всю известную историю, была найдена в ПО, работающем на сервере в Энглвуде, штат Колорадо. На сервере, принадлежащем провайдеру Intrado, был счётчик числа звонков, перенаправленных диспетчерам 911 по всей стране. Программисты Intrado задали для счётчика максимальный порог. Они выбрали число, составляющее несколько миллионов.
Вскоре после полуночи 10 апреля счётчик превысил это число, что привело к хаосу. Поскольку счётчик использовался для генерирования уникального идентификатора для каждого звонка, новые звонки отклонялись. И так как программисты не предвидели проблему, они не предусмотрели аварийные сигналы, которые бы обратили на неё внимание».
Хотя этот сбой 911 не был результатом скоординированной атаки, легко представить себе эту уязвимость как часть сюжета в стиле «Одиннадцати друзей Оушена». Хакеры накручивают число до лимита как раз перед крупным ограблением, чтобы никто не смог о нём сообщить, пока они не бегут. Это банальная ошибка, которую легко простить в правильном контексте, но отклонённый звонок на 911 может иметь трагические последствия.
Предвидение и предотвращение сбоя такого рода вполне входит в задачи специалиста по безопасности ПО. Рассмотрение всех возможных моделей сбоя для любого ПО критически важно для усиления защиты системы и смягчения рисков. К сожалению, мелкие ошибки, такие как произвольный порог для входов базы данных, могут иметь непропорциональные последствия – и мелкие ошибки в мире ПО повсюду (помните Y2K?).
В другом примере хакерам удалось с помощью аквариумного смарт-термометра похитить базу данных крупных игроков казино. В данном случае термометр оказался менее защищённым, чем другие точки входа в сеть казино. Устройства «интернета вещей» вообще славятся своей незащищённостью. Согласно журналу Wired, эти устройства часто уязвимы к атакам по целому ряду причин, включая недостаточную приверженность безопасности со стороны их производителей, непрозрачность кода, работающего на устройствах, и отсутствие познаний у людей, использующих и устанавливающих эти устройства.
Понятно (и, честно говоря, ожидаемо), что сотрудники, устанавливающие смарт-термометр, не обязательно будут экспертами по безопасности ПО. Даже многим специалистам по ПО можно простить, что они не рассматривали термометр как вектор атаки. К сожалению, любое устройство, подсоединённое к сети, потенциально уязвимо к атакам. Необходимо, чтобы производители устройств начали серьёзно относиться к безопасности. Кроме того, будет мудро, если вы внимательно обдумаете, насколько большое преимущество вы получите при использовании «умного» устройства вместо «глупого». Стоит ли риск кибератаки удобства выключения света с помощью смартфона?
Рост и развитие области безопасности ПО будет и дальше определять траекторию нашего будущего. Цифровые системы сейчас играют критически важную роль в банковском деле, выплатах, цепочках сбыта, голосовании, социальных взаимодействиях, медицине, автомобилях, самолётах, поездах, медицинских имплантатах и т. д. Каждая из этих цифровых систем потенциально уязвима. С расширением поля ПО расширяется и поле безопасности ПО. В настоящее время индустрия безопасности ПО включает широкий спектр специалистов с различными навыками. Кто же они?
Хакеры, тестировщики на проникновение и правительственные агенты
Первые – это хорошо известный архетип. Злоумышленная работа с безопасностью сводится к взломам и тому, что делать не полагается. Конкретные цели хакеров-злоумышленников варьируются – от вымогательства с помощью ПО, как в случае WannaCry, до похищения информации из баз данных, – но суть этого ремесла всегда сводится к вопросу:
«Что я могу сделать такого, что владелец системы не хотел бы, чтобы я делал?»
Иногда такая работа подразумевает глубокие познания в разработке и реализации ПО. Возьмём, к примеру, недавнюю атаку на сайт для торговли криптовалютой MyEtherWallet.com. В этой атаке злоумышленники воспользовались слабыми местами в двух критически важных сетевых протоколах. Во-первых, хакеры атаковали систему доменных имён (DNS), которая сопоставляет понятные человеку имена, такие как MyEtherWallet.com, с понятными компьютеру IP-адресами, используемыми для маршрутизации интернет-трафика. Эта атака, известная как «отравление DNS», позволила хакерам отправлять в ответ на запросы к MyEtherWallet.com фальшивые IP-адреса.
Во-вторых, хакеры атаковали протокол граничного шлюза (BGP), который использует IP-адреса и контролирует маршрутизацию трафика в физической инфраструктуре интернета. Эта атака, известная как «утечка BGP», заставила интернет-трафик проходить через заражённые компьютеры, что позволило злоумышленникам отравить значительно больше запросов к DNS.
Как следствие, некоторые пользователи, набиравшие в адресной строке браузера «MyEtherWallet.com», перенаправлялись на фишинговый сайт, выглядевший как MyEtherWallet.com. Когда ни о чём не подозревающие пользователи вводили свои логины и пароли, эта информация отправлялась злоумышленникам, которые с её помощью обчищали их счета.
Иногда злоумышленные действия могут быть ориентированы на человеческие чувства, к примеру, совмещая программы, подменяющие телефонный номер, с навыками социальной инженерии и харизмой.
Взлом систем требует креативности, гибкости и глобального мышления. Лучшие хакеры – будь то белые, чёрные или что-то среднее – рассматривают несколько вариантов взлома системы. Возьмём пример с телефонным номером. Злоумышленники могут попробовать для поиска пароля жертвы метод перебора, схему фишинга, как в случае MyEtherWallet, стратегию социальной инженерии, или же они могут попытаться проникнуть в систему телефонной компании с помощью вредоносного ПО.
Когда одна стратегия не работает, хакеры пробуют другую. Наглядный пример – история со Stuxnet и Flame. Это одни из самых впечатляющих и сложных из когда-либо созданных вредоносных программ. Считается, что эти два червя были созданы совместно хакерами, работающими на американское и израильское правительства, начиная примерно с 2007 г. Stuxnet оказалась червём с конкретной целью: заразить и отключить иранские ядерные центрифуги. Flame – огромная программа как для вредоносного ПО, почти на 60 мегабайт – была своего рода многофункциональным шпионским ПО. Попав на целевой компьютер, вирус позволял своим операторам похищать данные, отслеживать нажатие клавиш, включать видеокамеры и микрофоны и открывать удалённые каналы для установки дополнительного вредоносного ПО.
Эксперты по безопасности смогли связать обоих червей с одним и тем же создателем благодаря механизмам, с помощью которых вирусы распространялись. Flame использовала эксплойт серверов обновления Windows, позволявший вирусам выдавать себя за настоящие обновления ПО, что очевидно является эффективным способом широкого распространения червя.
Мишенью Stuxnet, с другой стороны, был объект с «воздушным зазором» – т. е. было известно, что ни один из компьютеров объекта не подключён к интернету. Поэтому Stuxnet полагалась на эксплойт, позволявший заражённым USB-устройствам автоматически заражать любую машину с Windows, к которой они подключаются. Никто не знает, кто был пресловутым «нулевым пациентом», но известно лишь, что агенты АНБ США разбросали несколько заражённых USB-устройств вокруг парковки атомной электростанции.
Flame тоже использовала этот эксплойт с USB, что послужило одним из ключей, которые помогли связать два вируса, но Stuxnet не использовала эксплойт серверов обновления Windows. Создатели Stuxnet знали, что не смогут таким способом проникнуть в изолированные от интернета системы, поэтому и не использовали для распространения вируса этот эксплойт. С другой стороны, тогда как Stuxnet всегда пыталась заразить USB-устройства, подключённые к заражённому компьютеру, и распространиться дальше, в Flame эта опция была отключена. Flame не копировалась на новые USB-устройства, как это делала Stuxnet.
То есть, хотя создатели Flame и Stuxnet имели доступ к тем же эксплойтам для распространения вредоносного ПО, они не включали их все, чтобы увидеть, что из этого сработает. Они внимательно всё обдумывали и принимали решения о том, какие эксплойты использовать, в зависимости от их целей.
Правительственная работа по созданию вредоносного ПО вроде Flame и Stuxnet – это НБА хакинга: сюда попадают лишь избранные первоклассные хакеры. Есть также люди, выполняющие похожую работу, имея меньше опыта, но в областях, где ставки не так высоки, как в случае кибероружия.
Тестировщики на проникновение – это хакеры, которым компании платят за то, чтобы они попытались взломать системы этих же компаний. Компании платят хакерам за описание того, как именно им удалось осуществить взлом, чтобы дополнительно защитить свои системы. Ещё один тип хакеров, что-то среднее между тестировщиком на проникновение (белым хакером) и злоумышленным (чёрным) хакером, – это частные лица, которые пытаются заработать предоставляемые многими компаниями «премии за поиск багов». В рамках программы премий за поиск багов компания соглашается заплатить тому, кто сможет сделать что-то конкретное в её системе (например, получить доступ к базе данных), если хакер объяснит, как он это сделал.
Тестировщики на проникновение во многом полагаются на готовые инструменты для осуществления атак. Они пользователи инструментов, а не их создатели. Для использования многих инструментов всё равно требуются определённые технические навыки, но далеко не такие продвинутые, как для их создания. Тестировщики на проникновение могут быть или не быть программистами или программными инженерами, но они практически всегда опытные пользователи компьютеров, которым нравится осваивать новые методы и инструменты.
Поскольку нужные навыки во многом зависят от конкретной цели, спектр хакерской деятельности широк и разнообразен: от социальной инженерии с минимальным техническим уровнем до разработки вредоносного ПО, программ взлома шифрования и инструментов проникновения в сети с самым продвинутым техническим уровнем.
Смягчение и предотвращение
Смягчение и предотвращение – это подходы защиты, подразумевающие построение систем, где хакерам будет трудно сделать то, что они не должны быть в состоянии сделать. Подобной работой обычно занимаются хорошо технически подкованные люди. Значительная часть подобной работы ложится на плечи программных инженеров, особенно работающих на системном уровне.
Тем не менее в проектах по смягчению и предотвращению могут участвовать системные администраторы, DevOps-инженеры и сетевые инженеры. Разработчики приложений также занимаются подобной работой, особенно при устранении лазеек в безопасности, связанных с созданными ими приложениями.
Подобная работа всё больше переходит от разработчиков приложений к системным инженерам. Системные инженеры задают интерфейс, который используют разработчики приложений для доступа к важным объектам, таким как файлы в файловой системе или сетевая карта. Поскольку безопасность сейчас главный приоритет для компьютерных систем в целом, ответственность за неё по умолчанию ложится на тех, кто лучше всего знаком с системами. Команда операционной системы Windows лучше всего знает, как Windows работает, а значит, и как предотвратить критические взломы на уровне ОС. Другими словами, разработчикам приложений сложно создать уязвимости в хорошей ОС.
В больших организациях есть команды программистов, занимающихся созданием API, принципиально безопасных для разработчиков приложений. Ограничив варианты, которые может использовать разработчик приложения, только «безопасными», можно существенно уменьшить общую поверхность атаки. Например, Google в апреле 2018 г. сообщил, что ОС Android теперь по умолчанию использует TLS для всех подключений, что означает, что интернет-подключение по умолчанию шифруется.
Использование нешифрованного подключения – это очевидный риск конфиденциальности, и использование TLS по умолчанию комплексно предотвращает подверженность пользователей Android этому риску. В предыдущих версиях надлежащее шифрование подключений зависело от разработчиков приложений. Предотвратив возможность того, что разработчики приложений случайно примут «неправильное решение», Google устранил ряд потенциальных векторов атаки.
Распространение ПО и рост числа потенциальных злоумышленников оказывают давление на всех разработчиков. Очевидно, что было бы лучше, если бы разработчики приложений не могли создавать уязвимости, потому что инженеры ОС перекрыли все возможные лазейки, но это нереалистично. Как следствие, разработчикам приложений и их менеджерским командам следует уделять больше внимания практикам безопасности на протяжении всего жизненного цикла разработки ПО.
Сейчас существует больше, чем когда-либо, методов обучения программированию, но большинство из них (включая многие университетские программы) совершенно не фокусируются на том, как создавать безопасное ПО. Организациям-разработчикам необходимо серьёзно отнестись к информированию, обучению и реализации построения безопасных программных систем.
Неизбежные уязвимости в ПО требуют также практик безопасности и после разработки ПО. IT-специалисты, такие как системные администраторы, также выполняют задачи по смягчению и предотвращению – например, настраивая безопасные VPN для ограничения доступа к важным внутренним серверам или базам данных, выбирая облачного провайдера, выделяющего на безопасность значительные ресурсы, и подключая инструменты для мониторинга и фиксирования, позволяющие узнавать, когда сетевые устройства ведут себя странно или отправляют подозрительный трафик.
Обычные пользователи компьютеров также должны заниматься смягчением рисков, выбирая сильные пароли, минимизируя повторение паролей и используя двухфакторную аутентификацию и ПО, фокусирующееся на конфиденциальности и безопасности, такое как HTTPS Everywhere от EFF, веб-браузер Brave или Keybase.
Как и в случае безопасности в «реальной жизни», предотвращение обычно сводится к тому, чтобы быть менее уязвимым, чем другие. У незапертой машины больше вероятность быть ограбленной, чем у запертой. Воры-карманники ищут кошельки, торчащие из заднего кармана. Грабители домов избегают лающих собак и систем сигнализации. Похитители данных пробуют распространённые пароли, прежде чем прибегнуть к атаке методом перебора. Хакеры ищут слабые места в сети (как в случае аквариумного термометра). Особенно хакеры любят устаревшее ПО – аналог незапертой двери.
Хакеры предпочитают тратить время и усилия на взлом того, что даст им доступ к множеству машин, – обнаружение изъяна в популярной ОС, серверной платформе или библиотеке шифрования будет золотой жилой. Когда такой изъян обнаружен, специалисты по безопасности соответствующих систем реагируют и публикуют обновления, закрывающие лазейку. Поддержание актуальности – критический аспект работы IT-менеджера, фокусирующегося на безопасности.
Наконец, из-за постоянно эволюционирующей природы работы с безопасностью команды защиты и нападения часто проводят совместное обучение, меняясь местами в упражнениях типа «красные против синих». Когда знаешь, как можно атаковать систему, это помогает лучше защититься от атак – и наоборот.
Экспертиза и обнаружение
Атаки неизбежны. Цифровая экспертиза сводится к расследованию состоявшейся атаки. Занимающиеся подобным фирмы нанимают после таких случаев, как, например, печально известный взлом электронной почты Национального комитета Демократической партии США. Чтобы вернуть почту, уже слишком поздно, но любой разумный человек захочет: 1) не позволить кому-то ещё (или тем же людям) снова проникнуть в систему; 2) узнать, что было похищено; и (если возможно) 3) установить личность хакеров.
В идеале жертва кибератаки должна узнать о ней раньше других. В рамках практик смягчения и предотвращения фокусирующиеся на безопасности инженеры и IT-специалисты обычно устанавливают в критических программных системах инструменты для фиксирования и отчётности. Подобная отчётность может включать удалённое получение отчётов о сбоях или регистрацию входящего и исходящего сетевого трафика. Такие отчёты создают ключи, которые в дальнейшем используются цифровыми детективами, чтобы установить, как кто-то проник в систему, что было скомпрометировано или похищено и каковы потенциальные масштабы проблемы.
В зависимости от ситуации, экспертиза может включать просмотр журналов доступа к базе данных и сетевого трафика, поиск в файловой системе ключей, связанных с взломом, таких как вредоносное ПО и файлы, созданные или изменённые скомпрометированными пользователями. Эта работа часто мультидисциплинарна; хакеры креативны и используют множество тактик для взлома систем, поэтому специалисты по экспертизе должны быть знакомы с большим разнообразием тактик.
Для большинства людей, занимающихся цифровой экспертизой, цель – определить данные и/или системы, выступавшие мишенью, собрать или восстановить информацию этих систем и затем проанализировать собранные данные, чтобы установить, как произошла атака. Результатом аудита безопасности может стать судебный иск или уголовное дело. Специалисты по цифровой экспертизе должны понимать законы и правовые процедуры, чтобы знать, какая информация может быть актуальной для прокуроров, судей и присяжных. Они также должны уметь получать информацию так, чтобы она не была неприемлемой в суде, что абсолютно критически важно для цифровой экспертизы, например, в ФБР.
В случае предотвращения значительную часть работы выполняют системные инженеры, отвечающие за безопасность систем. Экспертиза же больше связана не с написанием кода, а с использованием инструментов и пониманием общей картины. Специалисты по цифровой экспертизе пишут короткие сценарии и программы, помогающие им искать, собирать и сохранять ключи, но, по большей части, работа по экспертизе не включает создание программных библиотек или какой-либо масштабной разработки ПО.
Исследования криптографии и шифрования
Последний тип экспертов по безопасности больше всего имеет дело с математикой. Исследователи криптографии разрабатывают новые коды, шифры и методы шифрования, обеспечивающие безопасное хранение или передачу данных. Криптография – это область, существенно опирающаяся на различные разделы компьютерных наук и математики.
Криптографы изобретают алгоритмы, такие как процесс шифрования публичных ключей RSA или семейство криптографических хеш-функций SHA. Эта работа фундаментально отличается от других упоминавшихся выше. Все другие типы работы, описанные выше, включают защиту или взлом реально существующих систем: реальных телефонов, реальных баз данных и реальных веб-серверов. Криптография же занимается защитой данных более абстрактно.
Криптографы существенно опираются на математические принципы для создания алгоритмов, способных обрабатывать данные несколькими критически важными способами. В частности, область криптографии вращается вокруг пяти столпов:
- Конфиденциальность: сообщение могут прочитать только доверенные стороны.
- Неизменяемость: никто не может менять или искажать защищённые данные.
- Аутентификация: идентичность участников может быть подтверждена.
- Авторизация: для доверенных сторон могут быть заданы разные уровни доступа.
- Неопровержимость: можно доказать, что сообщение было получено.
Защита транспортного уровня (TLS), поддерживающая безопасную веб-коммуникацию, включает алгоритмы шифрования, обеспечивающие аутентификацию, конфиденциальность и неизменяемость. Аутентификация гарантирует, что вы подключены к правильному веб-серверу, конфиденциальность – что только вы и этот веб-сервер можете просматривать вашу коммуникацию, а неизменяемость – что никто не может изменить сообщения в процессе передачи. TLS для большинства подключений позволяет использовать несколько разных алгоритмов шифрования, но для аутентификации и конфиденциальности во время «TLS Handshake» требует использования RSA.
Разработчики реализаций TLS, таких как OpenSSL, полагаются на алгоритмы шифрования с желаемыми свойствами, изобретаемые исследователями математики. Подобно тому как разработчики приложений полагаются на безопасные API, предоставляемые инженерами операционных систем, инженеры ОС полагаются на безопасные алгоритмы шифрования, изобретаемые криптографами. Проблемы на этом уровне могут распространяться на всю технологию, полагающуюся на алгоритм. Например, способность Flame распространяться, выдавая себя за настоящее обновление Windows, была связана с изъяном в криптографическом алгоритме хеширования MD5.
Многие криптографы работают над алгоритмами шифрования, которые будут неуязвимы к квантовым компьютерам. Ожидается, что мощные квантовые компьютеры смогут взломать RSA. Если на сцене появится мощный квантовый компьютер, RSA станет совершенно небезопасным и огромной части интернет-трафика нужно будет перейти на использование вместо него алгоритма шифрования, защищённого от квантовых компьютеров.
Безопасность ПО – это огромный (и растущий) рынок, и сейчас самое лучшее время, чтобы в него погрузиться. Если вы уже работаете в мире ПО, то сейчас как никогда важно узнать больше о лучших практиках безопасности. Компьютеры и интернет в ближайшее время никуда не исчезнут, поэтому нам нужно знать, как их можно обезопасить!