Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #102, ИЮНЬ 2007 г.

C глаз долой - из списков вон!

Хвостастый гуру

Хакер, номер #102, стр. 038

Надежно прячем файлы и папки в системе

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

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

Таким образом, утилиты, шифрующие файлы, папки (и даже целые дисковые разделы), для наших целей совершенно непригодны. У незашифрованной папки с «клубничкой», заныканной в неприметном каталоге с огромной степенью вложенности, есть хорошие шансы долгое время оставаться незамеченной. Но стоит только ее зашифровать (например, спрятать в rar-архив), как антивирусы тут же начнут ругаться на всех языках, под которые они локализованы, и у «посторонних человеков» возникнет вопрос: а с чего бы это вдруг вам потребовалось шифроваться? Честным людям скрывать нечего. Напротив, если человек постоянно пользуются услугами криптографии, значит, он либо параноик (это хреново, но поправимо), либо что-то заныкал (а вот за это могут уже и побить!). Чтобы не погореть, мы должны скрывать сам факт наличия сокрытых данных! Вот такая рекурсия получается!

Другим критерием оценки эффективности криптографических механизмов является их стойкость ко взлому. Начинающие часто спрашивают: стоит ли устанавливать утилиты типа PGP Disk или аналогичные ему шифровальные средства, против которых бессилен даже Пентагон? Ответ зависит от того, какую именно информацию мы собираемся скрывать и насколько часто планируем работать с ней. Работать с зашифрованной информацией все равно, что хранить золото в сундуке, зарытом под яблоней. Понадобилась сотня баксов — откопал, достал, закопал. И так каждый раз. Слишком утомительно, да и небезопасно, поскольку набираемый пароль могут подсмотреть из-за спины или увести кейлоггером, причем короткий словарный пароль элементарно подбирается по словарю, а длинный бессмысленный пароль легко забыть, навсегда лишив себя доступа к зашифрованным данным. А пароль, записанный на листок (или брелок с flash-памятью), может стать добычей взломщика.

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

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

Как это работает, или обзор маскировочных утилит

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

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

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

Среди коммерческих продуктов, работающих на «топливе» этого вида, наибольшую популярность завоевал Symantec SystemWorks, поддерживающий опцию Norton Protected Recycle Bin и создающий скрытый каталог NPROTECT в обычной корзине. «Скрытый» не в смысле атрибута hidden, а реально скрытый от системы и доступный только ему одному. Подробнее об этом и многом другом можно прочитать в блоге Марка Руссиновича: http://blogs.technet.com/markrussinovich/archive/2006/01/15/rootkits-in-commercial-software.aspx).

Другой класс утилит вообще не касается системных функций и прячет файлы с каталогами путем помещения их в специальный контейнер, как правило, представляющий собой обычный файл данных, с которым маскировочная программа работает через свой собственный интерфейс, выполненный в стиле проводника. А чтобы посторонние люди не добрались до спрятанных файлов, они защищаются паролем. Грубо говоря, это то же самое, что и обычный запароленный RAR. Факт сокрытия никак не маскируется, и чтобы работать с файлами, их нужно извлечь на диск, что не только непрактично, неудобно, но еще и небезопасно (поскольку, следы присутствия извлеченных файлов на диске легко обнаружить любой утилитой типа R-Studio, умеющей восстанавливать удаленные файлы).

Тем не менее, в силу чрезвычайной простоты технической реализации, такой принцип сокрытия очень популярен среди разработчиков маскировочных программ. Знать устройство операционной системы, владеть ассемблером, уметь писать драйверы не требуется. Достаточно поерзать мышью в Delphi - и программа готова! Типичным представителем этого класса утилит является условно-бесплатная программа HidesFiles, ознакомиться с которой можно на www.hidesfiles.com.

Однако ни ей, ни легионом ее сородичей пользоваться не рекомендуется, поскольку качество шифрования оставляет желать лучшего. В некоторых случаях (для достижения наивысшего быстродействия) никакого шифрования вообще не производится и эталонный пароль хранится в «архиве» открытым текстом. Ну или не сам пароль, а его контрольная сумма. Несмотря на то что восстановить пароль по контрольной сумме невозможно, для доступа к данным пароль не нужен, поскольку они лежат в незашифрованном виде. Достаточно дизассемблировать программу, чтобы реконструировать формат файла данных, и дальше можно работать с ним в обход пользовательского интерфейса. Разумеется, домашние пользователи на такое не способны, а потому для защиты от них хватит и HidesFiles.

Монтирование и демонтирование дисковых томов

Операционные системы семейства NT (к числу которых относится сама NT, W2K, XP и Vista) поддерживают механизм монтирования (mount) дисковых томов (аналогичный тому, что имеется в UNIX). Однако, в отличие от UNIX, в NT диски монтируются автоматически при их подключении (для несъемных носителей это означает, что они монтируются всегда), и пользователю нет никакой нужды задумываться об этом.

Между тем, если размонтировать дисковый том (грубо говоря, отобрать у него букву), он исчезнет из «Моего компьютера», FAR'а. И чтобы получить доступ к его содержимому, необходимо выполнить операцию монтирования (о которой осведомлены далеко не все администраторы, не говоря уже о рядовых пользователях). Причем это совершенно законная и абсолютно безопасная операция!

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

Монтировать диски можно как из командной строки, так и через графический интерфейс, что намного нагляднее. Вот с него-то мы и начнем! Итак, «Пуск -> Настройка -> Панель управления -> Администрирование -> Управление компьютером». Во вкладке «Структура» находим «Управление дисками» и смотрим, какие диски есть на нашем компьютере.

Допустим, мы хотим демонтировать диск D:. Щелкаем по нему левой клавишей мыши, в открывшемся контекстом меню выбираем пункт «Изменение буквы диска и пути диска». Появляется еще одно диалоговое окно с выделенной буквой диска и кнопками «Добавить», «Изменить», «Удалить» и «Закрыть». Нажимаем «Удалить», после чего закрываем окно, выходим из системы управления компьютером и видим, что диск D: не отображается ни в проводнике, ни в FAR'е, ни в командной строке.

Выполняем перезагрузку (если есть такое желание) и убеждаемся, что при загрузке системы удаленный диск более не монтируется в автоматическом режиме. Как же его вернуть обратно?! Очень просто! Заходим в «Управление дисками» (как было показано выше), щелкаем мышью по безымянному прямоугольнику, выбираем «Изменение буквы диска и пути диска», нажимаем кнопку «Добавить» и выбираем любую букву из предложенных. Совершенно необязательно выбирать именно диск D:, это вполне может быть X: (а почему бы и нет?) и даже путь к существующему NTFS-каталогу (но о каталогах мы поговорим позднее).

После нажатия на «ОК» смонтированный диск тут же появится в «Моем компьютере», FAR'е и остальных менеджерах. Перезагружать компьютер для этого не требуется. Некоторые программы, перечисляющие диски при запуске, могут не заметить появления нового диска, поэтому их следует закрыть и открыть вновь. Но, впрочем, таких программ очень немного и с каждым днем становится все меньше и меньше.

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

Начиная с W2K (а, может быть, и еще раньше), в комплект штатной поставки системы входит утилита moutvol.exe, которая, как и следует из нее названия, предназначена для монтирования/размонтирования дисков. При запуске без параметров она выдаст список логических дисков вместе с назначенными им буквами или точками подключения.

Абракадабра в стиле «\?Volume{fd9b89a6-5675-11d9-9ed9-bd1445c469e4}» представляет собой идентификатор тома, используемый системой при «общении» с ним на низком уровне. Формально NT позволяет нам (в порыве мазохизма) указывать идентификатор диска вместо его буквы (независимо от того, есть у него эта буква или она удалена), однако это слишком громоздко, непотребно и неудобно.

КОД

$dir /w \?Volume{fd9b89a6-5675-11d9-9ed9-bd1445c469e4}

Том в устройстве \?Volume{fd9b89a6-5675-11d9-9ed9-bd1445c469e4} имеет метку BACKUP

Серийный номер тома: 48FF-7B94

Содержимое папки \?Volume{fd9b89a6-5675-11d9-9ed9-bd1445c469e4}

chasingamy.srt [dex] [disk-cd]

[distr] [emule] Forth_Java.txt

Forth_Java.zip [game] IFRAME.exp.doc

[masm32] [OLD-OLD] sexgo.exe

sex_do_it.bat SubRip.srt [systemV]

[temp] новый год и новые планы.eml

8 файлов 322 679 байт

9 папок 3 331 104 768 байт свободно

Прямое обращение к диску по его идентификатору

Для размонтирования диска (удаления буквы) достаточно вызвать mountvol.exe с ключом ‘/D’ (от delete – «удаление») и буквой удаляемого диска, после чего диск тут же исчезнет из «Моего компьютера».

$mountvol.exe D: /D

Хорошо! Диск D: успешно удален. Остается только разобраться, как вернуть его обратно. Нет ничего проще! Вызываем mountvol.exe идентификатором логического диска и буквой, которую мы собираемся ему присвоить. Ой, а если мы не помним этот длинный и ужасный идентификатор, что делать нам тогда?! Ну не помним, так не помним! Невелика беда. Запускаем утилиту mountvol.exe без ключей, и она выводит список всех идентификаторов, причем рядом с идентификаторами, с которыми не ассоциирована ни одна буква, будет надпись: «Нет точек подключения». Выделяем мышью все от одинарной до двойной косой черты и нажатием левой кнопки мыши вставляем в командную строку следом за командой mountvol.exe D:.

$mountvol.exe D: \?Volume{fd9b89a6-5675-11d9-9ed9-bd1445c469e4}

Как мы видим, диск D: исправно появляется в «Моем компьютере» и в прочих местах. Хочешь — работай с ним как с обыкновенным диском, не хочешь — форматируй! Впрочем, нет, форматировать лучше не надо. Пришло время познакомиться с одной удивительной возможностью NT, поддерживаемой всеми UNIX, но отсутствующей в линейке 9x, - с возможностью монтирования логического диска на папку другого диска.

Зачем это может понадобиться?! Все мы привыкли к тому, что имеются диски C:, D:, E:, однако некоторые считают такой расклад неудобным и с удовольствием предпочли бы работать с одним логическим диском. Или вот… возьмем такой жизненный случай. У нас есть диски С: и D:, причем на C: свободного места нет совсем, а на D: его завались. Было бы здорово перенести часть программ на D:, но… это невозможно сделать без их переустановки, поскольку практически все они привязываются к букве диска, на который поставлены. Однако могущество операционной системы NT позволяет преодолеть это ограничение весьма простым и элегантным способом.

Предположим, на диске C: находится каталог C:KPNC, содержащий множество установленных приложений. Что мы делаем? Переносим их в корневой каталог диска D: так, чтобы каталог C:KPNC оказался пустым, после чего удаляем букву D: и монтируем логический диск на каталог C:KPNC, подставляя его вместо буквы диска:

$REM размонтируем D:

$mountvol.exe D: /D

$REM монтируем логический диск на каталог C:KPNC

$mountvol.exe C:KPNC \?Volume{fd9b89a6-5675-11d9-9ed9-bd1445c469e4}

Диск D: послушно удалился из «Моего компьютера»,и его как будто бы нет, однако, открыв каталог C:KPNC, мы увидим его содержимое в целости и сохранности, со всеми программами, которые мы туда перенести. И программы продолжат работать как ни в чем не бывало, поскольку с их точки зрения совершенно ничего не изменилось.

Два маленьких замечания напоследок. Первое: для монтирования/размонтирования дисков необходимо обладать правами администратора. Второе: монтирование диска на непустой каталог невозможно, так что даже не пытайся это делать.

Заключение

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

Игры с pkzip'ом

Классический способ маскировки игрушек и «клубнички» сводится к упаковке файлов в какой-нибудь архив (например, ZIP или RAR) с последующим изменением расширения на .dat или что-то вроде того. Считается, что тупой администратор поведется как пионер и ни о чем не догадается. Три раза «Ха!». Администратор, быть может, и не догадается (он ведь и не подряжался проверять все файлы в системе), но антивирусы с включенной опцией «Проверять архивы» проигнорируют расширение и опознают тип архива по его содержимому. В результате этого в протокол попадет полный список проверенных файлов и архив с нетипичным расширением тут же привлечет к себе внимание, после чего будет безжалостно удален.

Чтобы избежать расправы, рекомендуется вооружиться hiew'ом (или любым другим hex-редактором) и заменить первые два байта заголовка чем-нибудь таким… этаким… например, просто поменять их местами, чтобы не забыть.

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

Строго дозированное разрушение индексов

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

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

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

Индексы дублируют их содержимое. При открытии файла поиск идет только по $MFT, поскольку, как известно, поиск в линейном массиве намного быстрее, чем обход кучи деревьев, разбросанных по диску. Тем более не нужно забывать, что у файла может быть несколько имен, но индексы допускают лишь включение одного. То есть файл, имеющий несколько атрибутов имен (типа MS-DOS-имя, POSIX-имя, NTFS-имя), как ни крути, нужно искать в $MFT. Индексы используются командой DIR, но API-функции операционной системы (такие, как CreateFile, CreateProcess) пляшут от $MFT, поэтому можно скрыть папку Windows, не нарушив ее работоспособность!

Это достигается за счет удаления каталога из индексов любым подходящим дисковым редактором (например, NtExplorer от Runtime Software). Тогда она не будет отображаться нигде, однако прямой» запуск (путь + имя файла) продолжит нормально работать. Другим словами, если мы удаляем папку Windows из индексов, команда DIR C:, как и следовало ожидать, не покажет ее, но вот DIR C:Windows отработает нормально. Впрочем, при первом же запуске chkdsk'а он ее вылечит, восстановив недостающую запись в индексах. Тут его, правда, можно обломать, но тогда придется перестраивать кучу структур данных на диске (подобнее о которых можно прочитать в книжке Криса Касперски «Восстановление данных — практическое руководство»), а это утомительно и небезопасно. Зато такое сокрытие не требует присутствия резидентов в памяти, абсолютно безглючно и ничем (кроме chkdsk'а) не обнаруживается...

Еще на NTFS-разделах можно создавать «виртуальные папки» (термин взят из мира web). Допустим, мы имеем папку C:XY. Так вот, папка Y существует, а X - нет. Точнее, она существует, но у нее удален uplink на корень C:, и потому добраться до Y можно, только зная полный путь. Chkdsk на это внимания уже не обращает.

Перейти в папку C:X также нельзя, DIR C:X скажет, что нету здесь никакой папки X и отродясь не бывало. Таким образом, Y надежно скрыта от глаз пользователя и антивирусов. В ней же можно держать все что угодно... Правда, антивирусы сканируют запущенные процессы, и потому положить в нее резидента не получится, как не получится и положить троянский плагин, поскольку нам придется прописывать полный путь, а его-то антивирусы захавают... Но зато спрятать игрушку, видеофильмы и прочую порнушку можно без труда и напряжения мозговых извилин.

Во всяком случае, на W2k автор проделывал этот трюк неоднократно, особенно часто на ZIP-дискетах (не путать с PKZIP-архиватором!). Была необходимость пронести на них исполняемые файлы, перед этим отдав их на проверку администратору. Тот посмотрел, а там одни нормальные файлы, никакие не исполняемые. Кстати, с ZIP'ом намного безопаснее экспериментировать, чем с hdd, и он быстрее, чем виртуальный диск под VMWare...

DVD

У тебя будет возможность сравнить эффективность нашего способами и алгоритмов, реализованных в готовых продуктах. Благо последние мы выложили на наш диск.

WAING

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

Содержание
ttfb: 154.57582473755 ms