usb-leaks_set2

борьба с утечками информации через USB/Ethernet-порты

крис касперски, no-email

воздвигая все новые и новые системы защиты, многие администраторы даже и не подозревают, что враги находятся не только снаружи, но и еще и изнутри корпоративной сети. это обычные сотрудники, копирующие конфиденциальные файлы через USB\Ethernet порты и выносящие их за пределы охраняемого периметра. давайте обсудим возможные каналы утечки информации и покажем как защититься от них используя только _штатные_ средства операционной системы семейства Windows NT

Рассмотрим типичный офисный компьютер с демонтированным floppy-дисководом, лишенный записывающих CD/DVD-приводов, не несущий на своем борту никаких интегрированных беспроводных устройств (типа BlueTooth, WLAN) и подключенный к локальный сети, имеющей выход в Интернет через proxy-сервер или NAT. Из всех портов имеется только USB и еще, возможно, COM/LPT.

За компьютером сидит продвинутый пользователь (не хакер!), который намеревается скопировать конфиденциальную информацию на свой домашний компьютер (из чистого удобства, без всякого умысла) или же передать ее третьим лицам (за определенное вознаграждение). И в том, и в другом случае мы сталкивается с утечкой данных, которую администратор обязан предотвратить.

Договоримся, что мы будем ориентироваться исключительно на _пользователей_ разной степени «продвинутости», но не хакеров (и не на программистов), поскольку хакера никакая защита не остановит. Существует множество дыр в Windows, позволяющих локальному пользователю поднять уровень своих привилегий до администратора, а то и до уровня ядра, причем такие дыры не считаются критическими, т. к. они «нечувствительны» к удаленным атакам и потому затыкаются в последнюю очередь. К тому же, процент хакеров относительно невелик и львиная доля информации утекает через обычных пользователей. Следовательно, с экономической точки зрения, разработка абсолютно надежной защиты (а таких защит вообще не существует в природе!) просто не оправдана.

Другой немаловажный момент. Механизмы разграничения доступа, реализованные в операционных системах семейства Windows NT, позволяет скрыть от пользователя те файлы, которые ему по статусу видеть не положено. Однако, такая защита не всесильна и даже будучи правильно настроенной не может решить рядовую задачу: открыть пользователю доступ к файлам (с которыми он должен работать в силу производственной необходимости), но предотвратить их «вынос». Вот и приходится прибегать к дополнительным оборонительным средствам, используя аппаратно-программные комплексы сторонних производителей или же обходиться собственными силами.

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

Анализ, проведенный автором вместе с сотрудниками данной компании (кстати говоря, весьма компетентными специалистами, с которыми было приятно работать), панацеи, естественно, не открыл, но по крайней мере выявил основные каналы утечек, после чего они были заблокированы штатными средствами операционной системы без каких бы то ни было переделок существующего программного обеспечения и с минимальной перестройкой сетевой инфраструктуры.

Имя компании автор разглашать не имеет права, однако, результатами исследования может поделиться вполне, сразу же обращая внимание читателя, что это вовсе не «серебренная пуля», а всего _частный_ случай решения _частной_ проблемы. Кому-то она может пригодится, а кому-то и нет. Но в любом случае, автор надеется, что приведенная информация окажется небесполезной.

Вот три основных источника угрозы: USB\Ethernet-порты и средство голосового общения Skype, поддерживающее режим передачи файлом.

COM\LPT-порты используются значительно реже, но все-таки представляют достаточный интерес как для злоумышленников, так для тех, кто от них защищается. Цифровые выходы звуковой карты и монитора — это уже из области экзотики, которой занимаются только хакеры-электронщики.

Остальные способы требуют либо вскрытия компьютера, либо чрезвычайно высокой квалификации злоумышленника, а потому здесь не рассматриваются.

USB

USB-порты, перекочевавшие на лицевые панели ПК (и даже на корпуса USB-клавиатур!) значительно упростили обмен файлами между компьютерами. Существует огромное количество USB-устройств: от карт FLASH-памяти, размером с брелок, до съемных жестких дисков, легко умещающихся в кармане и КПК (вкупе со смартфонами и сотовыми телефонами), а так же ноутбуки. Правда, ноутбуки, в силу своих габаритов, менее популярны для выноса информации, чем вышеперечисленные орудия «инсайдера», но все-таки их нельзя списывать со счетов.

Как защититься от кражи информации? Самое простое (и самое радикальное) решение проблемы — отключить USB-разъемы или воткнуть в них заглушки, обильно смазанные «суперклеем». Смешно? Скорее грустно, поскольку к таким мерам администраторы прибегают достаточно часто. Офисный компьютер может работать и без USB. Ему не нужны никакие периферийные устройства, к нему не нужно подключать принтер (для этого есть локальная сеть). Поэтому, предложенное решение вполне жизнеспособно, вот только… в некоторых случаях без USB приходится очень туго, поскольку, USB не для того изобретали, чтобы его наглухо затыкали.

ОК, устанавливаем на компьютер систему защиты типа ZLock или любую другую. Их много, но принцип один. Специальный драйвер перехватывает запросы на запись к USB и в зависимости от политики доступа (контролируемой администратором) либо разрешает запись, либо выдает сообщение об ошибке. USB с полностью закрытым доступом равносилен USB с заглушкой, только заглушка стоит порядка на два дешевле и, кстати говоря, совершенно необязательно сажать ее на клей. Достаточно закрыть разъемы специальным щитком с замком, который изготовит любой слесарь или даже сам администратор при минимальных навыках работы с металлом.

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

Допустим, у нас имеется документ MS-Word (или электронная таблица). Что помещает пользователю сохранить ее под другим именем или скопировать в буфер обмена и вставить в файл, который не внесен в «охраняемый» список?! Даже если список включает в себя расширения или защита анализирует типы файлов, основываясь на их содержимом, пользователь может сжать файл малоизвестным архиватором или замаскировать его каким-нибудь другим способом. Как ни крути, а защита на основе списков, не способна остановить даже человека с именем Анастасия, не говоря за всех остальных мужчин.

Ethernet

Кабели локальной сети — это артерии и вены любой организации, имеющей более одного компьютера и это основной источник утечек, который, в отличии от USB, уже нельзя закрыть заглушкой, поскольку, даже если физически приклеить Ethernet-разъем к компьютеру, все равно остается достаточное количество хабов со свободными портами, в которые можно воткнуть шнурок от ноутбука или мини файлового севера, которые уже давно появились в продаже и некоторые из них даже умещаются в кармане. КПК с поддержкой Ethernet это конечно, большая редкость, но они все-таки есть.

Злоумышленнику достаточно всего лишь подключить свое устройство к свободному Ethernet-порту и вот он уже в локальной сети и ему подвластны все файлы, к которым он только имеет доступ. Остается скопировать их и убраться восвояси.

Как от этого защищаться?! Прежде всего необходимо настроить маршртутизаторы, привязав локальные IP-адреса к MAC-адресам, и закрыть на брандмауэре все незанятые Ethernet -порты. Это намного проще и надежнее, чем помещать хабы в железный сейф, стоимость которого (помноженная на количество хабов в сети) весьма значительна.

Естественно, прописывание MAC-адресов в настройках брандмауэра/маршртутизатора занятие довольно утомительное, к тому же не существует никакой возможности отличить настоящий MAC-адрес от поддельного (не говоря уже о том, что в большинстве сетевых устройств MAC-адрес хранится во FLASH-памяти и может быть изменен), однако, для осуществления подобной атаки злоумышленник должен обладать хакерскими навыками, а мы уже договорились, что от хакеров защищаемся даже не пытаемся!

Skype

Среди прочих средств голосовой связи, Skype выделятся тем, что шифрует свой трафик и виртуозно обходит NAT'ы всесте с брандмауэрами, используя протоколы STUN и TURN, а если они не срабатывают — гонит трафик через http-proxy, автоматически определяя настройки браузера. Другими словами, Skype представляет собой идеальное средство для передачи файлов из локальной сети в «дикий» Интернет, причем кому был передан файл определить невозможно, поскольку Skype использует распределенную сеть, каждый из узлов которой может использоваться для обслуживания всех остальных абонентов. Максимум, администратор «вычислит» Skype-имя пользователя, получившего уворованный файл, но, поскольку Skype выдает имена, не требуя предъявления никаких документов, то для установления личности оно, естественно, не подходит.

К сожалению, программ для детектирования и блокирования Skype-трафика не существует и единственное, что может администратор — периодически сканировать клиентские компьютеры на предмет наличия этого самого Skype и тут же удалять его как зловредную программу.

Естественно, помимо Skype конфиденциальная информация может быть передана через электронную почту или любой файло-обменный сервер, типа http://rapidshare.com/, но они в отличии от Skype по крайней мере оставляют следы в логах proxy-серверов и брандмауэров, позволяя вывести нечестного сотрудника компании на чистую воду, но… только пользы от этого будет немного. Ведь секретный файл уже ушел и назад его не вернешь.

COM/LPT

Некоторые модели современных компьютеров вообще не имеют COM/LPT портов и с точки зрения безопасности это очень хорошо, поскольку, используя ноутбук, злоумышленник может установить «прямое кабельное соединение» и скачать все необходимые файлы, правда, через COM большой файл за пару минут не скачаешь, да и у LPT пропускная способность находится на очень низком (по современным меркам!) уровне.

Но все-таки, угроза утечки есть и эти порты лучше сразу же закрыть заглушками, а на заглушки повесить печать или соорудить какой-нибудь примитивный замок. Кстати, если LPT-порт используется для подключения принтера, то без замка тут однозначно не обойтись, поскольку в противном случае, злоумышленник сможет запросто воспользоваться этим разъемом для своих нужд. Впрочем, принтеры на LPT постепенно отживают свое и производители активно переходят на USB и Ethernet. Естественно, с точки зрения безопасности, Ethernet самый предпочтительный, поскольку администратор можно заблокировать подключения любых других Ethernet-устройств на этот порт, простой проверкой MAC-адресов.

Файловая система NTFS выгодно отличается от FAT16/32 тем, что поддерживает несколько потоков (streams) в рамках одного файла, так же называемых атрибутами (attributes), только не путайте их с атрибутами типа «только на чтение» или атрибутами времени создания/доступа/последней модификации — это совершенно различные сущности (на самом деле, в терминологии NTFS содержимое файла представляет собой точно такой же атрибут, как, например, его имя, но мы не будем вникать в эти технические тонкости).

Каждый файл от рождения имеет один безымянный поток, и именно с этим потоком мы работаем, при открытии/закрытии файла, и именно его размер берется за основу при подсчете размера файла. Однако, мы можем создавать и другие потоки, отделяя их названия от имени файла символом «:», например, X:\my_file:my_stream1, X:\my_file:my_stream2. Естественно, полный путь указывать необязательно и X:\my_file:my_stream1 работает так же хорошо, как и my_file:my_stream1 (если, конечно, my_file:my_stream1 находится в текущем каталоге).

Проведем простой эксперимент. Возьмем FAR и, нажав <Shift-F4> (создание нового файла), введем «kpnc:nezumi», после чего в отрывшемся окне редактора наберем что-нибудь наподобие «hello, world!» или любой другой лозунг. Сохраняем изменения по <F2> и выходим. Смотрим — FAR (и «Проводник» Windows) показывают нулевой размер файла. Странно, не правда ли?! Нажимаем <F4> и видим, что файл действительно пуст. Но если нажать <Shift-F4> + «kpnc:nezumi», то наше приветствие «hello, world!» вновь появится на экране.

Если нет FAR'а, тот же самый фокус можно проделать и со штатным «Блокнотом», только… в силу ограниченных умственных способностей его создателей, он требует, чтобы имя файла и имя потока оканчивалось обязательным расширением «.txt», иначе ничего не получится! ОК, окажем ему услугу. Пишем в командной строке «notepad kpnc.txt:nezumi.txt», утвердительно отвечая на запрос о создании нового файла. Вводим что-нибудь, сохраняемся. Выходим. Теперь, если попытаться открыть файл двойным щелчком, мы ничего не увидим (безымянный поток остается пустым) и «Проводник» отрапортует о нулевом размере файла, но стоит набрать «notepad kpnc.txt:nezumi.txt», как… содержимое потока nezumi.txt немедленно появляется на экране!!! Ну прямо чудеса на виражах!!!

Теперь поговорим как эти «чудеса» можно использовать на практике. При копировании на файловую систему, отличную от NTFS (например, на лазерный диск или FLASH'ку, размеченную под FAT), копируется _только_ безымянный поток, а все остальные игнорируются. При передаче по локальной сети все потоки сохраняются (и это хорошо!), однако, ни FAR, ни Проводник не позволяют выбирать какие именно потоки копировать, а какие нет. Утилита командной строки «copy» с этим так же не справляется, обвиняя нас в неправильном синтаксисе, хотя он правильный. Некоторые утилиты (например, RAR) поддерживаю сохранение всех потоков файла, чтобы полученный архив было можно записать на не-NTFS носитель, а при последующей распаковке на NTFS разделе получить все потоки обратно.

Потоки — идеальное средство для защиты от несанкционированного копирования файлов. Создаем файл с тремя потоками. Первый — безымянный и может содержать все, что угодно (или же не содержать ничего). Второй — именованный. Именно он хранит тело документа/электронной таблицы/базы данных с которым необходимо работать. Третий (именованный) поток выполняет роль своеобразного балласта и несет на своем борту несколько гигабайт мусора, сгенерированного произвольным образом и желательно очень трудно сжимаемого архиваторами.

Допустим, злоумышленник захотел скопировать этот файл на FLASH'ку, размеченную под FAT. Тогда он получит только первый (безымянный) поток, не содержащий ничего или содержащий грозное предупреждение с пожеланием немедленно явится к начальнику с повинной. Если же это FLASH'ка отформатирована под NTFS, то «Проводник» попытается скопировать все три потока, но третий поток туда ни за что не влезет (правда, с учетом порядка копирования потоков, поток-балласт, должен следовать вторым, а поток с полезной нагрузкой ‑ идти последним, но это уже детали).

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

Единственная возможность — передать файл по сети на ноутбук, подключенный через Ethernet, но о защите Ethernet-портов от подключения «левых» устройств мы уже говорили, так что злоумышленник остается с носом. Не такая уж плохая защита, особенно с учетом того, что ее создание не требует никаких дополнительных затрат и реализуется штатными средствами операционной системы. Естественно, ей присущи определенные минусы, которые автор не собирается скрывать:

  1. открыв файл в Word'e/Excel'е и скопировав его в буфер обмена, злоумышленник сможет записать его через USB, если USB-порт открыт на запись, а так же передать по сети через тот же Skype;
  2. квалифицированный программист сможет написать программу для выборочного копирования отдельных потоков (впрочем, этой угрозой можно пренебречь, мы же сразу договорились, что защищается только против пользователей);
  3. потоки-балласты занимают достаточно много места, уменьшая полезную емкость жесткого диска (хотя, при современных объемах жестких дисков несколько дополнительных гигабайт на каждый секретный файл — вполне посильная ноша и приобретение более емких винчестеров обойдется дешевле специализированных защитных комплексов от сторонних разработчиков);

Допустим, мы имеем «оператора архива», который должен резервировать все файлы, но при этом не должен иметь к ним доступа, чтобы не утащить налево. Возможно ли это?! Здравый смыл шепчет, что нет, в то время как операционные системы семейства NT (и UNIX в том числе) утверждают, что да. Все очень просто. Пользователь запускает программу, от имени другого пользователя, обладающего правами доступа ко всем файлам, которая выполняет архивацию и записывает результат в указанный оператором архива файл, но доступа к этому файлу оператор не имеет!!! Чтобы злоумышленник не подсунул программе резервирования сменный носитель, который потом будет подключен к другой машине, на которой он обладает правами администратора (например, к своему домашнему компьютеру), следует использовать атрибут шифрования файла, тогда для его открытия одних лишь прав администратора окажется недостаточно и еще потребуется заполучить ключ, хранящейся в учетной записи того пользователя, от имени которого запускается программа архивации, и эта учетная запись оператору архива, естественно, недоступна. Подобная практика защиты очень широко распространена и соответствующие профили даже встроены в Windows NT, однако, ничто не мешает нам использовать ее не только для архивации, но и для повседневной работы с секретными файлами.

Рассмотрим, например, MS Word, запускаемый от имени специального пользователя с тщательно настроенными правами доступа к секретным файлам. Как следствие, обычный пользователь сможет открывать/сохранять файлы только через MS Word, но не сможет скопировать их через «сохранить как…» То есть, скопировать-то он их сможет, но вот открыть сохраненный файл — нет, даже если он записан на FLASH'ку, KПК или другое устройство. К сожалению, по умолчанию буфер обмена одного пользователя доступен всем остальным, что позволяет «перетягивать» секретные файлы через copy/paste, однако, изменив настройки политики безопасности можно (и нужно!) сделать буфер обмена спец. пользователя невидимым для всех остальных.

Перспективы просто фантастические, и самое главное — никому не нужно ничего платить. Достаточно приобрести операционную систему и… опс! Разработчики Windows NT забыли доделать запуск программ от имени других пользователей с автоматическим вводом пароля, запрашивая его явным образом в специальном диалоговым окне, а это значит, что секретный пароль придется сообщать всем простым пользователям, иначе они не смогут запустить ни Word, ни другое защищаемое нами приложения, но зная пароль…

Здесь возможны два выхода из ситуации. Первое — Word запускает администратор, и оставляет его открытым, не позволяя пользователям его закрывать. Глупо конечно и утомительно, зато бесплатно. Второе — пишем свой собственный загрузчик, запускающий программы от имени других пользователей и автоматически передающий им пароль, жестко прошитый в его теле, а, чтобы пароль не бросался в глаза при просмотре файла в hex-редакторе, зашифруем загрузчик любым exe-упаковщиком.

Кстати, поскольку проблема необходимости явного ввода пароля (кстати говоря, отсутствующая в UNIX-подобных операционных системах) возникла не вчера и даже не позавчера, в сети можно найти множество готовых загрузчиков, в том числе и бесплатных, однако, по соображениям безопасности, лучше не доверять чужому коду и нанять программиста, который напишет несколько сотен строк на Си самостоятельно, предоставив вам исходный код, чтобы у него не возникло соблазна встроить туда закладку.

Описанные методики были опробованы на нескольких компаниях и дали положительный результат (более подробный отчет о проделанной работе автор планирует выкладывать на свой собственный сервер nezumi.org.ru, доступный как по протоколу ftp, так и по http). Утечки информации практически полностью прекратились, и заказчики остались весьма довольны тем, что им не пришлось платить за кота в мешке, которым являются решения конкурентов, не раскрывающие ни исходного кода, ни даже технических подробностей алгоритмов своей работы.