Период полураспада
АрхивКолонка ЗолотоваПисать новые программы для защиты современных операционных систем - всё равно что латать старый, дырявый кафтан. Вводя очередной пароль при работе в Linux или Windows, вы и представить себе не можете, в каких закоулках ОС он окажется и как будет использован. Время жизни конфиденциальных данных - системная проблема вычислительной техники.
До информационного общества нам ещё далеко, но уже сегодня многие из нас (по крайней мере, я уверен в большинстве читающих сейчас эти строки) понимают критическую важность сохранения конфиденциальности персональной информации. Несколько байт, попавших в чужие руки, могут стоить многих тысяч долларов. Номер кредитной карты, ценный пароль - да мало ли примеров! Естественная потребность сохранить конфиденциальность уже привела (и процессу этому не видно конца) к появлению самых разных программных и аппаратных средств, способных в некоторой степени обезопасить конечного пользователя от возможных неприятностей. Вспомните, что пароли в современных операционных системах хранятся в зашифрованном виде, что некоторые флэш-брелоки уже требуют идентификации пользователя по отпечатку пальца и т.д. и т.п. Однако есть люди, на взгляд которых такие способы защиты - всё равно что латание старого, дырявого кафтана: трудности с обеспечением приемлемого уровня компьютерной безопасности они объясняют несовершенством архитектуры самих вычислительных машин. Ведь и сегодня мы работаем на компьютерах (железе и программах), построенных по образу и подобию компьютеров той эпохи, когда о массовых компьютерных взломах никто и не помышлял. Примеры? Сегодня речь пойдёт об одном замечательном опыте, поставленном ребятами из Стэнфордского университета в Пало-Альто с целью наглядной демонстрации одного из слабых мест массовой вычислительной техники, доставшегося ей в наследство от компьютеров 70-ых годов, а именно, о времени хранения персональной информации в машинной памяти.
В самом деле, вводя пароль на доступ к некоему сервису в той же "Мозилле", наивно полагать, что браузер использует его по назначению и сразу же сотрёт. Современные программы настолько сложны, что даже сами их разработчики вряд ли способны представить тот извилистый путь, который проделает введённая пользователем символьная строка, в какие системные буферы, регистры и файлы она окажется записанной. Тут вряд ли сильно поможет даже пресловутая открытость исходников - что уж говорить про проприетарные системы вроде Microsoft Windows! Так вот, главная заслуга упомянутой выше группы исследователей заключается в создании инструмента, который позволяет проследить весь путь нужного информационного куска по закоулкам системы.
Созданный ими продукт назван TaintBochs. Это составное название, образованное от Bochs - известной в мире open-source программы, и английского слова taint, означающего "пятно". Смесь странная, но - запаситесь терпением. Прежде всего, Bochs - свободный эмулятор платформы x86, своего рода виртуальная машина, имитирующая процессор, некоторое системное железо, и позволяющая запускать внутри себя полноценные операционные системы вроде Windows или Linux. Стэнфордская группа модифицировала Bochs, превратив его в симулятор, в котором каждая исполняемая инструкция эмулируемой машины может быть подвергнута анализу. TaintBochs - нечто вроде прибора для исследования внутренних органов с помощью радиоизотопов: этому симулятору можно скормить строчку данных и проследить, каким преобразованиям она подвергается, куда в конечном счёте попадает. Было поставлено несколько опытов, в которых TaintBochs работал с конфиденциальными данными (главным образом, паролями), запуская операционные системы Linux и Windows 2000, а также программы Mozilla, Emacs, Apache и некоторые другие.
Детальный отчёт о работе, который исследователи обещают представить на специализированной конференции USENIX в августе, можно прочесть в Сети уже сейчас, и главный вывод неутешителен: время жизни информации - системная проблема современных архитектур. Самые мрачные предположения подтвердились в полной мере. Поистине несть числа манипуляциям, которым подвергается введённый даже в обычный браузер пароль: он многократно копируется в оперативной памяти, растаскиваясь самой программой, процессами-посредниками и ядром операционной системы. В каждом из этих случаев исследователи показали возможность восстановления пароля из областей памяти, доступных пользователю (а значит и злоумышленникам). Это справедливо как для новых, так и для самых древних программ: например, Emacs, ведущий свою историю аж с 1976 года, оказался ничем не "хуже" ультрасовременной "Мозиллы".
По мнению авторов работы, чем дольше порция конфиденциальных данных хранится в памяти машины, тем выше вероятность её кражи. До сих пор при проектировании операционных систем и программ их разработчики не задавались вопросом ограничения времени жизни важной информации. Настала пора устранить это слабое место, тем более, что для многих программ это вовсе не сложно: исследователи показали как, внеся буквально единичные модификации в подвергнутые анализу программы, можно значительно уменьшить время жизни конфиденциальных данных в памяти. Основной приём здесь - уничтожать введённую в компьютер парольную строку сразу после её использования. Другой кажущийся эффективным приём - немедленное необратимое шифрование введённых данных, так что их похищение теряет смысл. Теперь вопрос лишь в том, когда разработчики софта сочтут проблему заслуживающей внимания.