Матвеева Веста Сергеевна
ведущий специалист по компьютерной криминалистике,
компания Group-ib
Согласно данным Википедии, типичным персонажем детективного жанра является преступник, который «совершает преступление, заметает следы, пытается противодействовать следствию». Ничего сверхнового из Википедии не узнаешь, но! надо отметить, что немыслимо, чтобы человек, нарушивший закон или совершивший иное общественно опасное деяние не пытался себя спасти путем запутывания следствия или сокрытия следов (исключения, конечно, бывают).
В виртуальном пространстве все немного сложнее в этом плане. До появления реальных случаев расследования компьютерных преступлений и набирающего обороты такого направления в коммерческой области, как: проведение исследований и судебных экспертиз, злоумышленники оставляли множество следов после своей активности во «взломанной» системе. На сегодняшний день техник противодействия криминалистическому исследованию компьютерной информации становится все больше. Об одной из них и пойдет речь в настоящей статье, а также будет приоткрыта завеса тайн компьютерных криминалистов.
Подмена временных атрибутов файлов. Это делают как вручную, переводя системные часы, так и с помощью специальных программ, которых существует достаточное количество. Но интересно то, что эти же функциональные возможности также прописывают у ряда вредоносных программ с целью ввести в заблуждение пользователя и отнести файл скорее к системному, чем к подозрительному. Таким образом, при просмотре свойств файла в ОС будут отображаться подмененные сведения. Но не все так просто с точки зрения криминалистики. Для распознания факта подмены используются особенности файловой системы. Все сведения, которые изложены ниже, справедливы для ОС Microsoft Windows и файловой системы NTFS, как для самого часто встречаемого сочетания ОС и файловой системы.
В файловой системе NTFS временные атрибуты файлов содержатся в файловой записи для каждого файла в главной файловой таблице (далее – MFT). И как ни странно у файла их ровно 8!, а не 3 как мы привыкли. За временные атрибуты отвечает две структуры $STANDARD_INFORMATION и $FILE_NAME, каждая из которых содержит: дату и время создания файла, последнего изменения файла, последнего доступа к файлу, а также дату и время последнего изменения сведений в файловой записи. На рисунке 1 приведена файловая запись, содержимое которой отображается с помощью ПО «AccessData FTK Imager»:
Рисунок 1
Если не вдаваться в подробности смещений упомянутых структур, то их легко распознать по содержимому. Время в данных структурах имеет формат ОС Microsoft Windows, записи которого выглядят так:
Рисунок 2
Для преобразования временной метки, которая указана в файловой записи, можно использовать специализированное средство «DCode Date»:
Рисунок 3
или преобразовывать ее вручную.
Однако можно получать доступ ко всем восьми атрибутам с помощью автоматизированных средств анализа: The Sleuth Kit (TSK) по команде «istat»:
Рисунок 4
или в графическом интерфейсе с помощью ПО «Autopsy Browser».
Рисунок 5
Ну, а теперь к главному. Правильная оценка временных атрибутов из структур $STANDARD_INFORMATION и $FILE_NAME дает криминалисту возможность правильно восстановить хронологию событий, что очень важно при исследовании.
Для начала необходимо представлять, при каких действиях с файлами меняются его атрибуты. Для этого на ОС Microsoft Windows XP и 7 для архитектур процессора x86 и x64 проведена серия тестов, результаты которых сведены в таблицах 1, 2 для текстовых и исполняемых файлов.
Таблица 1 – Windows XP
где названия столбцов обозначают следующее:
Rename – переименование файла;
Local Move – перемещение файла в пределах одной файловой системы;
Volume move – перемещение между файловыми системами;
Copy – копирование файла;
Create – создание файла;
Delete – удаление файла;
Open – открытие файла;
Properties – просмотр свойств файла;
Attributes – изменение атрибутов файла;
Modify – изменение файла;
по строкам записаны временные атрибуты файлов, содержащиеся в структурах STANDARD_INFORMATION (SI) и FILE_NAME (FN)
х – изменение атрибута файла;
х (РЕ) – изменение атрибута только для файлов РЕ-формата;
x(day) – изменение атрибута производится один раз в день при первом обращении к файлу;
x(?) – замечены случаи изменения атрибута, которые происходят не каждый раз;
(SI) – все сведения в структуре FILE_NAME копируются из предыдущей структуры STANDARD_INFORMATION;
(created) – все атрибуты в структуре FILE_NAME совпадают с датой создания файла из структуры STANDARD_INFORMATION.
В результате подобных тестов с другими форматами файлов и ОС обнаружены незначительные отличия от приведенных в таблицах 1, 2.
Как видно, данные в структуре $FILE_NAME создаются в момент создания файла и представляют собой копию даты создания и изменяются при переименовании, локальном перемещении, перемещении между файловыми системами, копировании и удалении файла. Следовательно, сведения в этой структуре не могут превосходить временные атрибуты из структуры $STANDARD_INFORMATION. Но это актуально именно для времени создания и изменения файла.
Время последнего доступа к файлу и атрибут MFT modified могут измениться только в структуре $STANDARD_INFORMATION. Поэтому время последнего доступа к файлу следует определять по структуре $STANDARD_INFORMATION. В ОС Microsoft Windows Vista и 7 по умолчанию время последнего доступа не изменяется для экономии ресурсов системы. Указанная опция регулируется значением ключа реестра: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\FileSystem
NtfsDisableLastAccessUpdate = 1 (дата и время последнего доступа к файлу не изменяются при доступе к файлу)
= 0 (дата и время последнего доступа к файлу изменяются при доступе к файлу)
В таблицах 1, 2 приведены результаты испытаний с опцией изменения даты последнего доступа при обращении к файлу.
Атрибут MFT modified изменяется, когда хотя быть один атрибут файловой записи меняется. Но в силу времени разрешения (time resolution) файловой системы NTFS, которое составляет до 1 часа, сведения о последнем доступе к файлу сначала сохраняются в оперативную память, а затем записываются в файловую запись. Следовательно, небольшие расхождения в этих атрибутах могут быть. Но, стоит отметить, что при изменении атрибута Accessed атрибут MFT modified меняется не всегда.
В связи с описанными оговорками разберем подход криминалиста при проведении исследования НЖМД, который был задействован при совершении мошеннической операции в системе интернет-банкинга на стороне клиента.
На рисунке 5 приведены временные атрибуты вредоносной программы семейства «Trojan.Carberp». Такие программы часто встречаются в подобных инцидентах, так как позволяют производить скрытое от пользователя копирование данных, необходимых для аутентификации в системах дистанционного банковского обслуживания. Такие программы имеют функциональную возможность изменять временные атрибуты, отображаемые пользователю, на идентичные для системных файлов.
При восстановлении хронологии событий очень важным аспектом является правильное определение времени загрузки вредоносной программы. Попробуем применить полученные в данной статье сведения для определения временных атрибутов файла «SlknEKbbrSQbvDFPEI.exe».
Так как атрибуты в структуре $FILE_NAME не могут превосходить атрибуты в структуре $STANDARD_INFORMATION, то датой создания файла признается: 23.11.2012 г. 16:40:10. Оригинальная дата изменения файла при этом неизвестна, так как в структуре $STANDARD_INFORMATION она подменена, а в $FILE_NAME – является копией даты и времени создания файла, которая была сохранена в файловую запись при создании файла. Дата и время последнего доступа определяется из структуры $STANDARD_INFORMATION – 10.12.2012 г. 09:13:17. Сведения в файловой записи изменялись последний раз 04.12.2012 г. 14:40:20 в соответствии с атрибутом MFT modified, который не изменялся при доступе к файлу.
Таким образом, в следствие ручного анализа можно выявить верные временные атрибуты файла, что является достаточно трудоемким занятием, если количество файлов большое. Поэтому ниже приводится псевдокод, который позволяет автоматизировать процесс определения временных атрибутов файла, принимая на вход данные структур $STANDARD_INFORMATION и $FILE_NAME (дата и время последнего изменения файла при подмене атрибутов берется из структуры $FILE_NAME):
SI=null; // структура $STANDARD_INFORMATION FN=null; // структура $FILE_NAME Result=null; // структура реальных атрибутов SI=receive_standard_information(file); FN=receive_file_name(file); If (SI!=0 and FN!=null) { Result.Created = FN.Created If (SI.Modified < FN.Modified) { If (FN.Modified == SI.Created) { Result.Modified = SI.Modified writeline (“The file was copied”) } else Result.Modified = FN.Modified } else Result.Modified = SI.Modified If (SI.Accessed < FN.Accessed) Result.Accessed = FN.Accessed else { Result.Accessed = SI.Accessed } If (SI.MFT_modified < FN.MFT_modified) Result.MFT_modified = FN.MFT_modified Else Result.MFT_modified = SI.MFT_modified If (Result.Created > Result.Modified) writeline (“The file was copied to the OS”) }
Тонкостей в определении временных атрибутов файлов очень много. Но главное, что хотелось донести в этой статье, является идея о том, что по временным атрибутам файла можно восстановить даже действия, которые были произведены с файлами, что и помогает компьютерным криминалистам при проведении исследований и судебных экспертиз.