#gotofail: Ошибка или Умысел?
Почти идеальная закладка?
Когда мир вступил в «Эпоху Эдварда Сноудена», сообщество компьютерной безопасности оказалось без преувеличения шокировано и подавлено реальными масштабами того, насколько глубоко скомпрометированы спецслужбами чуть ли не все общераспространенные средства защиты информации. По сути дела, оказалось так, что доверять тут нельзя никому и ничему, а изощренные шпионские закладки или «бэкдоры» спецслужб могут обнаруживаться в абсолютно любых компьютерных устройствах, программах и средствах связи.
Иначе говоря, теперь и независимым авторитетным экспертам по защите информации волей-неволей приходится ставить себя на место компетентных правительственных органов — дабы лучше представлять себе возможные модели атак и злоупотреблений. И вот один из таких широко известных специалистов, американский крипто-гуру Брюс Шнайер, осенью 2013 года сформулировал в этом ключе следующую любопытную идею.
Рассуждая «как шпион» о наилучших путях к разработке и реализации программного бэкдора, Шнайер предложил три главные особенности-характеристики для «действительно хорошей закладки»:
Низкие шансы на обнаружение;
Минимальный уровень заговора, необходимый для практической реализации;
Высокая степень правдоподобности для отрицания умысла в случае обнаружения.
Об этой своей концепции Брюс Шнайер сразу же вспомнил ныне, когда миру стало известно о той критически серьезной уязвимости, что обнаружена в защите операционных систем Apple — мобильной iOS и OSX для десктопов и ноутбуков.
Потому что эта дыра — или даже скорее дырища, — которую корпорация Apple латала в последнюю неделю февраля своими новыми релизами программного обеспечения, по компетентному мнению Шнайера, представляет собой «превосходный пример» именно такой, действительно хорошей закладки. Чтобы это постичь, даже людям, совсем мало смыслящим в программировании, достаточно взглянуть на код реализации бэкдора. Ибо то, что порождает колоссальную уязвимость в защите ОС и обрабатываемой ею информации, представляет собой всего лишь одну-единственную коротенькую строчку кода...
И если не знать заранее, что именно следует искать, то данная уязвимость выглядит чрезвычайно невзрачно. Здесь очень легко представить дело так, будто это произошло по случайной ошибке или досадной небрежности программиста, объединявшего, скажем, несколько разных подпрограмм в одно целое. Ну а кроме того, данный «баг» — это еще и живой-наглядный пример того, насколько просто оказалось всего лишь одному человеку тихо добавить в систему такого рода уязвимость, о которой фактически никто ничего не знал более года — хотя скомпрометированными оказались многие и многие миллионы систем по всему миру...
Короче говоря, подводит итог Брюс Шнайер, пока что у общества нет ни малейшего понятия, было ли это сделано преднамеренно или произошло случайно:
Но если бы лично я хотел умышленно устроить нечто подобное [говорит Шнайер], то это выглядит в точности так, как сделал бы это я.
Что за хитрость в коде?
Не без ехидства комментируя суть произошедшего, один из хакеров-журналистов (Кевин Поулсен из Wired) сказал об этом примерно так.
Как и все прочее, что связано с айфонами Apple, эта критическая дыра в криптографии, объявленная для iOS 7 вечером в пятницу, 21 февраля, тоже оказалась «образцом простоты и элегантности конструкции»: всего лишь единственный невинный переход goto в одном из модулей кода Apple для процедуры аутентификации по несчастливой случайности обходит всю остальную часть критично важного процесса безопасности...
Важнейшее отличие именно этого «образца элегантности» заключалось в том, что здесь корпорация Apple на самом деле ничего конкретного про суть дыры не рассказала. В предельно кратком комментарии к релизу новой версии iOS было сказано лишь то, что в системе обнаружена критическая уязвимость, из-за которой «атакующая сторона с привилегированным положением в сети может перехватывать или модифицировать данные в сеансах связи, защищенных протоколами SSL/TLS». Или — чуть подробнее — подсистеме безопасности «Secure Transport не удавалось подтверждать аутентичность соединения; эта проблема теперь исправлена восстановлением недостающих шагов в процедуре подтверждения».
Столь лаконичное описание явно серьезной проблемы, да еще публикуемое вместе с обновлением системы вечером в пятницу, когда все нормальные люди переключаются с работы на выходные дни, естественно, сильно удивило экспертов по компьютерной безопасности. И заставило сразу же с повышенным вниманием заняться выяснением подробностей о природе выявленного бага. Уже к утру субботы, 22 февраля, картина более или менее прояснилась (в мире защиты информации достаточно квалифицированных людей, которые по различиям в кодах разных версий программы способны оперативно выяснить суть внесенных изменений). И та картина, которая проступила в результате анализа, чрезвычайно специалистам не понравилась...
Если пояснять суть уязвимости для людей обыкновенных и далеких от тонкостей криптографии, то по сути своей этот баг означает, что, когда вы отправляете электронную почту, публикуетесь в «Твиттере», используете социальную сеть типа Facebook* или проверяете свой банковский счет из общей сети вроде Wi-Fi в публичных местах или чего-то еще подобного, «атакующая сторона» может вклиниться в сеанс не только для перехвата информации, но и для злонамеренной подмены того, что поступает в ваш iPhone или iPad (или, наоборот, идет от вас).
Если же говорить о природе проблемы с техническими деталями, то одним из первых подробный отчет о сути выявленного бага опубликовал Эдам Лэнгли (Adam Langley), специалист-криптограф компании Google. Бесспорно выдающейся особенностью выявленной ошибки кода является то, что постичь ее способен практически любой, кто знаком с основами программирования или хотя бы в детстве баловался c языком BASIC.
Код конкретной процедуры, где обнаружена фатальная ошибка, выглядит так:
Данная функция вызывается в ситуации, когда iPhone или iPad подсоединяется к защищенному шифрованием сайту через протокол SSL. Назначение функции — верификация того, что применяемый ключ шифрования подтверждается правильно — снабжен цифровой подписью — от самого оператора данного веб-сайта.
Но обратите внимание на две одинаковых строки goto fail, идущие сразу друг за другом. Первая из них стоит там, где ей и положено. А вот вторая — это якобы ляп или случайная ошибка программиста. И именно эта вторая продублированная строчка в корне нарушает все исполнение программы — словно обходной маневр, отправляя выполнение функции в точку, следующую сразу же после критической проверки аутентификации. Иначе говоря, та часть кода, где реально должна происходить проверка подлинности цифровой подписи, из-за этого пустячка оказывается мертвым кодом — фрагментом программы, который вообще никогда не выполняется...
Как показали проверки независимых специалистов, эта проблема — быстро получившая в сообществе название #gotofail — действительно исправлена в новой версии iOS 7.0.6 и в соответствующем апдейте для предыдущей версии iOS 6, опубликованном практически сразу вслед за обновлением iOS 7. Но эти же целенаправленные проверки, что крайне неприятно, тут же продемонстрировали аналогичную уязвимость и в защите другой операционной системы — OS X для настольных компьютеров и ноутбуков Apple. При этом сама компания на данный счет поначалу не сказала своим пользователям ни слова...
(Насколько скандальным, безответственным и непрофессиональным следует считать подобное поведение знаменитой корпорации, разъяснять следовало бы отдельно и с конкретными примерами. Здесь можно отметить лишь то, что своим «частичным апдейтом» Apple по сути сама выдала злоумышленникам мощное оружие против всех своих компьютеров под управлением OS X, лишенной какой-либо защиты от атак через #gotofail.)
Уже в воскресенье, 23 февраля, независимый исследователь Ашкан Золтани (Ashkan Soltani) опубликовал здоровенный список скомпрометированных приложений OSX. Все эти программы, как он установил, используют ту же самую, что и в iOS, подсистему Secure Transport — программную библиотеку, которую разработчики приложений для Apple используют для реализации TLS и SSL, стандартных протоколов шифрования коммуникаций в Интернете. Иначе говоря, исследователь нашел свидетельства тому, что тот же самый баг #gotofail распространяется далеко за пределы браузера Apple Safari — на множество других разнообразных приложений, широко используемых в OS X, включая почту, Twitter, Facetime, iMessage и даже механизм обновления программ Apple.
В ответ на многочисленные запросы обеспокоенных пользователей корпорация Apple признала, естественно, что и защита OS X также скомпрометирована багом #gotofail. Однако никаких внятных объяснений тому, почему одновременно не выпущено обновление и для этой системы, предоставлено не было. Столь важный для безопасности апдейт с заплаткой для OS X был выпущен компанией лишь через четыре дня после обновления iOS 7.
Все те пользователи продукции Apple, которые смутно себе представляют, под управлением какой версии операционной системы работает их устройство, могут сами протестировать свой аппарат на предмет уязвимости (и необходимость апдейта, ясное дело), зайдя на сайт GotoFail.com. Создатели данного сайта, кстати, совершенно не верят, что #gotofail — это случайная ошибка.
Похоже ли это на закладку АНБ?
Поразительная простота «уязвимости #gotofail» и общее знакомство публики с содержанием компромата от Эдварда Сноудена делают вполне понятными и неверие в то, что речь идет о досадной случайности, и сомнения относительно искренности Apple, и подозрения в адрес Агентства национальной безопасности США.
Так, наблюдательные люди сразу отметили, что именно такого же типа дыры в безопасности постоянно помогают АНБ в устройстве атак типа «человек посередине» (man-in-the-middle). Например, как известно из файлов Сноудена, при проведении их операций FLYING PIG, когда АНБ или их британские коллеги из GCHQ для перехвата сетевых коммуникаций представляются как Google или Yahoo — используя манипуляции с сертификатами в протоколе шифрования SSL. Примерно по такой же схеме в зараженных шпионскими программами компьютерах под разными версиями ОС Microsoft апдейты и функциональное наращивание бэкдоров спецслужб происходят через штатные средства обновления Windows (хотя формально эта весьма критичная процедура считается надежно защищенной с помощью криптографии и сертификатов).
Более того, в совсем свежих публикациях файлов «от Сноудена» можно найти и такие материалы, где с достаточным количеством подробностей рассказывается о том, каким образом спецслужбы с помощью довольно нехитрых трюков (типа «сладких ловушек», к примеру) могут компрометировать и шантажировать нужных людей в компаниях, дабы затем они выполняли деликатные задания шпионов. Но это все, так сказать, технические аналогии и похожие случаи из жизни. Конкретно же для данной истории вокруг фатального бага Apple пока что нет никаких документальных подтверждений относительно злого умысла неких закулисных сил. С другой стороны, к настоящему времени известно немало косвенных свидетельств и совпадений, указывающих на то, что история тут действительно нечистая.
Так, уже в субботу, 22 февраля, известный энтузиаст продукции Apple и сетевой блоггер Джон Грубер отметил на своем веб-сайте, что некоторые события в тайной жизни АНБ, известные из файлов Сноудена, по времени подозрительно близко совпадают с появлением скомпрометированной версии операционной системы iOS (достоверно известно, что в версиях ранее iOS 6 бага #gotofail еще не было).
Так вот, согласно слайдам презентации АНБ, слитым в прессу в июне 2013-го, разведслужба США начиная с 2007 года запустила шпионскую программу под названием PRISM, которая позволяет агентству брать нужные материалы перехвата «напрямую с серверов» компаний Microsoft, Yahoo, Google, Facebook* и так далее. Самым последним добавлением в этот список, как многие запомнили, была компания Apple, которую — по свидетельству АНБ — стало возможным «пользовать» через PRISM с октября 2012 года. Впервые же скомпрометированная багом #gotofail операционная система Apple — в версии iOS 6.0 — была выпущена всего несколькими днями ранее, 24 сентября 2012 года.
Джон Грубер, надо отметить, первым с готовностью признает, что эти примечательные факты хронологии сами по себе «не доказывают ничего» и могут быть «чисто случайным совпадением». Но как бы там ни было, все равно приходится признать, что здесь «ботинок пришелся точно по ноге». Поскольку уязвимость #gotofail вызвана всего лишь единственной строкой неправильного кода, а значит никак нельзя исключать и случайную природу произошедшего, Грубер предлагает рассматривать сразу несколько возможных вариантов того, каким образом все это так неудачно вышло.
Диапазон гипотез может быть достаточно широким: «Особо подозрительные могут предполагать, что это АНБ и встроило данный баг — возможно, через своего человека среди сотрудников Apple. Если же подходить с наивно-невинных позиций, то, отсекая бритвой Оккама все лишнее, можно считать, что все это было просто неумышленной ошибкой со стороны какого-то не особо внимательного инженера».
Но как бы там ни было, остается важной техническая сторона шпионажа. Ибо как только данный баг появился в коде криптобиблиотеки, для АНБ стало даже не нужным его там искать, вручную прочесывая код обновленной программы. Все, что им теперь требовалось, — это автоматические тесты коммуникаций с использованием поддельных сертификатов (которые они прогоняют против каждого нового релиза каждой конкретной ОС). Иначе говоря, Apple выпускает новую версию iOS, автоматический тест АНБ с поддельным сертификатом выявляет там уязвимость и — бабах — корпорация Apple оказывается добавленной в список впечатляющих побед программы-пылесоса PRISM...
Для конкретной реализации этого общего сценария Джон Грубер видит пять возможных вариантов процесса, или, иначе, «5 уровней паранойи»:
Ничего тут нет. АНБ было вообще не в курсе относительно данной уязвимости;
АНБ знало про это, но никогда данной дырой не пользовалось;
АНБ знало об уязвимости и вполне успешно ее эксплуатировало;
АНБ само и подсадило баг в код программы своими тайными методами;
Компания Apple, идя на поводу у АНБ, сама добавила в свой код бэкдор.
Сам Грубер, кстати говоря, хотя и допускает возможность того, что «все это чистое совпадение», однако гораздо больше склоняется к варианту «паранойи № 3». К этому же варианту, надо отметить, косвенно склоняет и еще один секретный документ АНБ, попавший в прессу совершенно независимо от Эдварда Сноудена.
В сентябре 2013 года американские правозащитники — на основании закона FOIA о праве граждан на доступ к информации — добились рассекречивания документов о тайном соглашении между АНБ США и VUPEN, весьма специфической французской фирмой в области компьютерной безопасности. Эта фирма знаменита тем, что на закрытом рынке за хорошие деньги продает правительственным спецслужбам и другим солидным ведомствам так называемые эксплойты нулевого дня. То есть такие уязвимости и дыры, которые пока еще неизвестны изготовителям и потребителям ИТ-продукции и которые, следовательно, клиентам VUPEN можно использовать в собственных целях — до того как эти дыры найдут и залатают...
Так вот, самое любопытное — это дата коммерческой сделки между АНБ и VUPEN. Конечно же, и это тоже может быть еще одним чисто случайным совпадением (практически идеально вписывающимся в картину). Но рассекреченный документ свидетельствует, что контракт на подписку эксплойтов от VUPEN был заключен АНБ в сентябре 2012-го — всего за несколько дней перед тем, как Apple официально выпустила iOS 6 (ранее уже распространенную для внешних тестирующих структур). А еще через несколько дней, как уже говорилось, АНБ гордо отрапортовало, что и к коммуникациям Apple теперь получен доступ в рамках программы PRISM.
Наконец, еще одним содержательным свидетельством в ту же самую струю можно считать доклад известного эксперта по инфобезопасности Джейкоба Аппельбаума (Jacob Appelbaum), сделанный 31 декабря 2013 года на хакерской конференции в Германии. В ходе этого доклада Аппельбаум сделал презентацию еще одного комплекта никогда прежде не публиковавшихся секретных слайдов АНБ (не очень ясно, как к нему попавших, но, судя по всему, тоже не от Сноудена). И среди этих материалов были, в частности, такие, где АНБ гордо хвалилось, что способно дистанционно проникать в любой айфон, принадлежащий человеку, который попал в их разработку. Если цитировать этот материал от Аппельбаума дословно, то АНБ заявляет, что «всякий раз, когда они нацелены на устройство под iOS, им всегда сопутствует успех в имплантации» своих шпионских закладок...
Комментируя данный документ, Аппельбаум сделал такое — вполне справедливое — заключение: «Либо они располагают гигантской коллекцией эксплойтов, которые срабатывают против всех видов продукции Apple — а это означает, что они располагают информацией о критических дырах в системах, производимых американскими компаниями, и занимаются саботажем их безопасности. Либо же, второй вариант, корпорация Apple сама и занимается этим саботажем»...
Что происходит в Apple?
Понятно, наверное, что в корпорации Apple чрезвычайно обиделись на подобные инсинуации Аппельбаума. Буквально через несколько часов после этого его выступления, в тот же день, 31 декабря 2013-го, фирма опубликовала специальное заявление, в котором категорически настаивается, что «Apple никогда не работала с АНБ для создания бэкдоров ни в одном из своих продуктов, включая и iPhone»...
Но обиды обидами, однако тревожный сигнал от Аппельбаума все же был, похоже, услышан. Когда именно специалисты компании взялись за особо тщательную перепроверку своих критично важных кодов, нам, естественно, неизвестно. Но известно другое. Уже через неделю после скандального доклада Аппельбаума, 8 января 2014 года, компания Apple без лишнего шума обратилась с запросом в CVE, или Common Vulnerabilities and Errors database (то есть в Базу данных об общих уязвимостях и ошибках), чтобы зарезервировать там за собой очередной баг под номером CVE 2014-1266 — для свежеотловленной уязвимости в своем ПО.
В чем именно заключалась данная уязвимость, впрочем, в CVE на тот момент информации не было. Однако именно под этим номером — CVE 2014-1266 — к концу февраля будет опубликован первый релиз ПО с исправлением бага #gotofail.
Все это время в Apple, похоже, работали над решением своей проблемы и над тем, как свои заплатки получше распространять. Нельзя не отметить, что в итоге все у них тут получилось чрезвычайно странно и неуклюже. Несмотря на достаточно очевидный факт обнаружения уязвимости уже в начале января, Apple не исправила его в двух бета-версиях новой iOS 7.1, которые выпускались уже после регистрации ошибки CVE 2014-1266. О том, почему это происходило, можно только гадать (поскольку Apple, скорее всего, никогда не скажет правду). Но совсем не секрет, что, подобно секретным спецслужбам, корпорация очень широко практикует известный метод так называемой «компартментализации» информации. То есть любые чувствительные к разглашению данные сообщаются лишь тем, кому это необходимо по работе. Ну а в Apple, как многие знают, чувствительной к разглашению информацией является все, что связано с продукцией фирмы вообще, а в особенности с продукцией новой. Даже люди, работающие в смежных подразделениях, зачастую не знают, кто и над чем работает у соседей. Что уж тут говорить про тайны криптографической защиты системы...
Как бы там ни было, на фоне всех этих неясностей и тайн чрезвычайно скрытной компании все равно встает очень важный вопрос, проигнорировать который попросту невозможно. Как могло случиться, что в столь крутой ИТ-фирме вопиюще серьезная и легко исправимая ошибка программирования оставалась никем не замеченной на протяжении более года?
Конечно же, все знающие люди понимают, что код программы — тем более большой программы — вычитывать весьма сложно. То есть для быстрого отыскания конкретно этой ошибки — ручными процессами аудита в океане из миллионов строк кода — шансов было очень и очень немного. Это ясно. Однако современное программирование устроено так, что здесь имеется совершенно ясная и понятная, можно даже сказать, тривиальная система контроля — под названием «система тестирований». И эта система выстроена так, чтобы вполне четко гарантировать главное — что данный код действительно делает то, для чего он предназначен. Вне зависимости от того, как именно происходило его создание.
Такого рода тесты давным-давно разработаны, применяются и должны выполняться на трех уровнях: модульные тесты, функциональные тесты, системные тесты. И при грамотном применении этого комплекса ничего похожего на столь откровенные ляпы, как баг #gotofail, через нормальные тесты проходить не должно. Иначе говоря, сам факт того, что конкретно данная ошибка могла пройти через всю автоматизированную цепочку тестирований, порождает очень и очень серьезные вопросы относительно организации процессов работы в Apple.
Нравится это кому-то или нет, но вариантов, по сути, все равно два. Либо в Apple не способны правильно тестировать свое ПО, во что поверить довольно сложно — коль скоро именно таким образом разрушается доверие публики к программам Apple. Либо же этот баг был встроен совершенно преднамеренно — а в этом случае пришлось бы модифицировать не только код, но и (нераскрываемый) комплекс тестирующих программ...
Подводя итог ситуации, можно констатировать, что компания Apple оказалась здесь в весьма сложной позиции. Как сформулировал это один из комментаторов, теперь Apple самой надо выбирать один из двух ядов: признаться либо в собственной некомпетентности, либо в тайном сотрудничестве со шпионскими спецслужбами... Но так, надо подчеркнуть, считают лишь сторонние наблюдатели. Сама же корпорация Apple по давно заведенной традиции просто выпустила в связи с проколом #gotofail очередной пресс-релиз — с такими вот бравыми словами: «Мы будем и дальше продолжать использовать наши ресурсы, чтобы оставаться впереди злонамеренных хакеров и защищать наших клиентов от атак против безопасности — в независимости от того, кто бы за ними не стоял».
Когда имеешь представление о том, что данные слова выдаются по поводу гигантской дыры в защите ОС, остававшейся незамеченной почти полтора года, сами собой закрадываются сомнения относительно нормальности людей в пиар-подразделении, сочиняющем подобную чушь...
И что с этим делать?
Дабы завершить столь грустный материал на какой-нибудь позитивной ноте, можно вспомнить еще одну интересную мысль от Брюса Шнайера — мудрого крипто-гуру, с которого рассказ начинался. Давным-давно, еще в самом начале этого тысячелетия, Шнайер, помнится, изрек, что безопасность (если вдуматься) — это ресурс всеобщего потребления. То есть это как воздух, как вода или как радиочастотный спектр, потребление которых одними влияет и на всех остальных. Причем ныне все уже более-менее согласны, что правильный способ предотвращения злоупотреблений такими ресурсами — это четкое их регулирование.
Например, коммерческие компании никогда в жизни не прекратили бы сами загрязнять реки своими токсичными отходами, если бы власти просто «рекомендовали» им это дело прекратить (подобно тому, как ныне ИТ-компаниям «рекомендуют» побольше уделять внимания вопросам защиты информации). Индустриальные корпорации перестали массово отравлять окружающую среду лишь после того, как правительства государств объявили загрязнение среды преступлением против закона. А всяких нарушителей закона, соответственно, стали отдавать под суд и надолго сажать в тюрьму...
И если власти США и прочих государств реально хотели бы укрепить компьютерную безопасность, говорил Шнайер, то им просто необходимо принять на этот счет соответствующий закон (для чего, собственно, и существуют правительства). Как и с загрязнением среды, закон не должен заниматься конкретными технологиями — он должен регулировать конечные результаты. И если по закону сами ИТ-компании и сделать ответственными за бесконечные дыры в защите их систем, уверен Шнайер, то всем останется лишь поражаться, насколько быстро они сумеют укрепить безопасность своей продукции. Идея хотя и не новая, но все равно интересная...
* Запрещены в РФ
0 комментариев