Глава 2. Linux в качестве платформы криминалистики
Содержание
В данной главе рассматривается операционная система Linux и обсуждаются присущие программному обеспечению с открытым исходным кодом понятия, а также важность такого программного обеспечения для цифровых расследований. Зачем сосредотачиваться на Linux в качестве платформы криминалистики? Почему бы для этого не использовать MS Windows? Причина проста. Платформа Linux по умолчанию поддерживает множество файловых систем с возможностью простого добавления прочих. В MS Windows или macOS такого нет.
Эта глава начинается с ознакомления с программным обеспечением с открытым исходным кодом и обсуждает преимущества/ недостатки применения такого программного обеспечения во время исследования. Затем в ней рассказывается об операционной системе Linux и даётся краткий обзор её истории и использования. Далее в главе обсуждается применение Linux в качестве платформы для цифровой криминалистики, в частности, как платформы для анализа файловых систем. Чтобы выполнять приведённые в этой книге упражнения, читатель должен хорошо владеть операционной системой Linux. Поэтому в оставшейся части данной главы будет описан процесс установки Linux, а также некоторые доступные в Linux стандартные инструменты, которые могут помогать в процессе цифровой криминалистики.
Один из самых первых моментов, с которым знакомится всякий сталкивающийся с операционной системой Linux состоит в том, что это пример программного обеспечения с открытым исходным кодом. Но что это означает? Чтобы в действительности осознать все преимущества Linux, необходимо разбираться основными понятиями, присущими программному обеспечению с открытым исходным кодом. В данном разделе описывается движение за открытый исходный код и общие преимущества применения такого типа программного обеспечения. Затем рассматривается конкретный случай цифровой криминалистики и производится оценка в данной области полезности программного обеспечения с открытым исходным кодом. Однако, прежде чем приступить к подобному обсуждению, необходимо определиться с тем `что представляет собой программное обеспечение`?
Программное обеспечение это коллекция команд, которая указывает компьютеру что делать! Программное обеспечение, как правило, пишется на языке программирования, которых имеется в избытке. (Что касается общего числа имеющихся языков программирования, в нём никто не уверен! Существуют различные списки доступных языков программирования, из которых только самый маленький содержит 150 наиболее часто встречающихся языков, а самый большой почти 9000.) Язык программирования это определённый тип языка, который позволяет взаимодействовать с вычислительной системой. Заслуживающие внимания языки программирования включают в свой состав C, C++, Java и Python, если упомянуть только несколько.
Собственно исходный код для фрагмента программного обеспечения это реальная программа, написанная на соответствующем языке программирования, иными словами, точный набор инструкций, которые такое программное обеспечение передаёт в свой компьютер.
Листинг 2.1 демонстрирует образец исходного кода на языке программирования C. Этот исходный код служит для одной из простейших программ, которую только можно написать, Hello World. (Обычно самая первая программа, которую пишет всякий изучающий код, это Hello World. Её происхождение неясно, но оно связано с самыми ранними днями появления языка программирования C в 1974 году, хотя некоторые утверждают, что она возникла ещё раньше, либо с появлением языка программирования B в 1972 году, либо с появлением BCPL в 1967 году. Хотя точное происхождение программы неясно, каждый программист за свою карьеру написал несколько программ Hello World!)
Листинг 2.1. Пример исходного кода на C Hello World
#include <stdio.h>
int main()
{
printf("Hello World");
}
В то время как не программистам может быть трудно понять код Листинга 2.1, для программиста (в данном примере) это тривиальная задача в точности понять что именно делает данный код. Тем не менее, компьютер сам по себе напрямую не понимает показанный в Листинге 2.1 код. Вместо этого соответствующий код переводится в некий более низкий уровень (часто именуемый машинным кодом), с которым компьютер уже способен разбираться. Такой процесс перевода носит название компиляции. Результатом компиляции является некий исполняемый файл (в случае среды Windows .exe). Такой файл невозможно открыть в текстовом редакторе, ибо это двоичный файл. Вместо этого можно лишь тщательно изучать только содержащиеся в этом файле сырые данные. Листинг 2.2 показывает некую выдержку из тех сырых данных, которые получаются при компиляции исходного кода Листинга 2.1.
Листинг 2.2. Выдержка из примера программы Hello World после компиляции
0000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
0010: 0300 3e00 0100 0000 6010 0000 0000 0000 ..>.....‘.......
0020: 4000 0000 0000 0000 7839 0000 0000 0000 @.......x9......
0030: 0000 0000 4000 3800 0d00 4000 1f00 1e00 ....@.8...@.....
0040: 0600 0000 0400 0000 4000 0000 0000 0000 ........@.......
0050: 4000 0000 0000 0000 4000 0000 0000 0000 @.......@.......
...[snip]...
Я полагаю, все согласятся, что скомпилированный исполняемый файл гораздо сложнее для понимания. (Имеется возможность декомпиляции исполняемого файла. Тем не менее, принимая во внимание присущие программам возможные сложности, маловероятно, что получаемый в результате исходный код будет идентичен написанному программистом, хотя он и обязан быть функционально эквивалентным.) Теперь рассмотрим ситуацию, пр которой я желаю поделиться со всем миром своей прекрасной программой Hello World. Имеются два варианта, которыми я смог бы это выполнить. Во- первых, я могу совершить то, что делают многие коммерческие компании - я могу предоставить всем исполняемый файл. Люди смогут пользоваться моим программным обеспечением, но они никогда не смогут его изменить (или даже прочесть собственно написанный мной код). Это носит название программного обеспечения с закрытым исходным кодом: в то время как моё программное обеспечение можно распространять, его исходный код остаётся в секрете. Второй вариант состоит в том, что я предоставляю людям реальный файл программы на C, показанную в Листинге 2.1. Пользователям такого программного обеспечения придётся сделать немного больше - им придётся самостоятельно скомпилировать мою программу - однако они к тому же будут в точности знать что именно делает моя программа, поскольку они прочли код этой программы, если им потребуется, они даже могут изменить этот код программы. Такой подход носит название кода с открытым исходным текстом. Программисту доступен реальный код на языке программирования.
Движение за открытый исходный код определяет программное обеспечение с открытым исходным кодом как "программное обеспечение с исходным кодом, который всякий может просматривать, изменять и улучшать" (https://opensource.com/resources/what-open-source). Зачастую он предоставляется по лицензии с разрешением для копирования (Copyleft). Традиционно целью авторского права является защита прав автора. Оно обеспечивает соблюдение прав автора на соответствующий материал. Copyleft, с другой стороны, требует, чтобы права, связанные с материалом, сохранялись, даже когда материал применяется повторно. Если бы программное обеспечение с открытым исходным кодом было выпущено без лицензии, любой желающий мог бы использовать это программное обеспечение и преобразовать его в частное программное обеспечение. Следовательно, лицензия Copyleft защищает программное обеспечение, люди по-прежнему могут применять (и изменять) программное обеспечение, но в результирующих копиях должно по-прежнему использоваться то же самое лицензионное соглашение. Для того чтобы оставить Copyleft на программное обеспечение, оно сначала защищается авторским правом и добавляются условия распространения, которые дают каждому право использовать, изменять и распространять программное обеспечение или любое производное от него программное обеспечение, при условии, что условия распространения остаются неизменными.
Программное обеспечение с открытым исходным кодом применяется в бесчисленных областях вычислительной техники. На самом деле, сами того не осознавая, вы ежедневно пользуетесь программное обеспечение с открытым исходным кодом. Например, браузеры Google Chrome и Microsoft Edge основаны на проекте Chromium – бесплатном минимальном веб-браузере с открытым исходным кодом, разработанном Chrome, в то время как Mozilla Firefox является браузером с открытым исходным кодом. В веб-сфере более 65% веб-серверов работают на базе веб-серверов Nginx или Apache (сведения актуальны по состоянию на март 2023, https://w3techs.com/technologies/overview/web_server), которые являются продуктами с открытым исходным кодом. Следовательно, по меньшей мере две трети веб-сайтов работают на основе технологий с открытым исходным кодом! При написании документов вы, возможно, пользовались пакетами Apache OpenOffice или LibreOffice, причём они оба являются проектами с открытым исходным кодом. Проект ClamAV предоставляет антивирусную программу с открытым исходным кодом. OpenSSH и PuTTY - это два проекта с открытым исходным кодом, которые предоставляют удалённый доступ к защищённой оболочке (SSH). Существуют также веб-сайты разработчиков, ориентированные исключительно на разработку и распространение программного обеспечения с открытым исходным кодом, например, Source Forge и Github.
Имеется целый ряд причин почему многие люди считают открытый исходный код более предпочтительным чем программное обеспечение с закрытым кодом. Ниже перечень не исчерпывающего числа поводов для применения открытого исходного кода вместо закрытого программного обеспечения.
-
Прозрачность: Пользователи способны видеть всё что они получили! Это подразумевает, что они имеют возможность в точности определять что делает код (когда они обладают достаточными навыками), нечто что недостижимо в ситуации с закрытым кодом. О развитии приложения с течением времени можно судить либо по доступности предыдущих версий, либо по комментариям, включённым в исходный код. Такая прозрачность обеспечивает более обоснованный процесс принятия решений при выборе решения с открытым, вместо аналога с закрытым исходным кодом.
-
Сообщество: Одним из крупнейших преимуществ программного обеспечения с открытым исходным кодом является большое сообщество пользователей, разработчиков и испытателей, которые имеются для большинства популярных программных решений с открытым исходным кодом. Эти сообщества являются основной движущей силой, которая приводит к внедрению новых функций более быстрым и более действенным способом, нежели это могут сделать небольшие команды, работающие над частным программным обеспечением с закрытым исходным кодом. Сообщество также зачастую разрешает проблемы быстрее, чем преданная своему делу команда, из-за размера сообщества, а также по причине интереса и энтузиазма его членов.
-
Обучение: Изучение открытого исходного кода может стать отличным методом обучения программированию. Для изучающих программирование студентов, это к тому же отличный способ получать отзывы о своих усилиях по написанию кода. В области цифровой криминалистики изучение открытого исходного кода позволяет лучше понять лежащую в основе различных предметов структуру.
-
Безопасность: Многие утверждают, что программное обеспечение с открытым исходным кодом по самой своей природе более опасно, нежели программное обеспечение с закрытым исходным кодом. Основной довод состоит в том, что хакер может читать такой исходный код и обнаруживать уязвимости. Сообщество разработчиков с открытым исходным кодом придерживается альтернативного подхода: программное обеспечение более безопасно, когда код доступен каждому, поскольку любой желающий может прочитать код и устранить любые проблемы с безопасностью, которые только могут возникнуть. Эту позицию поддерживает ряд коммерческих компаний, переходящих на решения с открытым исходным кодом.
-
надёжность: По причине большого сообщества разработчиков/ испытателей/ пользователей и т.п., как правило, код более надёжен при выпуске кода с открытым исходным кодом, а не с закрытым кодом.
-
Стабильность: По той причине, что предоставляется доступ к исходному коду, в той маловероятной ситуации, если вдруг сообщество прекратит его разработку, пользователь имеет возможность принять на себя управление им. Это совершенно не так в схожих обстоятельствах для закрытого кода.
Обратите внимание, что одной из причин, о которой не упоминается в этом разделе, является стоимость. Многие считают программное обеспечение с открытым исходным кодом бесплатным, но, хотя это часто бывает верным, это не всегда так. Более подробно это будет рассмотрено в разделе 2.1.2.
Одним из наиболее распространённых аргументов в пользу программного обеспечения с открытым исходным кодом является то, что оно бесплатное. Однако этот аргумент не всегда справедлив. Ричард Столлман, основатель Фонда свободного программного обеспечения (Free Software Foundation), предполагал, что код не обязательно должен быть бесплатным с точки зрения стоимости, а с точки зрения нашей способности делать с кодом всё, что мы пожелаем. Как известно, он заявил, что "free" означает `свободный в смысле свободы слова, а не свободный в смысле бесплатного пива`. Разница в том, что при использовании "бесплатного" программного обеспечения пользователи вольны изменять все, что пожелают, но это не означает, что программное обеспечение не должно нести никаких затрат. При этом программное обеспечение с открытым исходным кодом часто также является бесплатным. Это связано с лицензионными требованиями Copyleft, которые применяются к программному обеспечению. Продавать программное обеспечение с открытым исходным кодом очень сложно, поскольку в лицензии говорится, что любой может распространять его. Следовательно, если один человек купил его, он может бесплатно предоставить его ещё кому-либо.
Корпоративные организации имеют возможность зарабатывать и делают это на предоставлении программного обеспечения с открытым исходным кодом. Такие организации бесплатно предоставляют любому, кто пожелает им воспользоваться, такой исходный код. Как и во всех проектах с открытым исходным кодом, любой желающий может получить доступ к исходному коду и модифицировать его, для адаптации системы под свои конкретные требования. Хотя исходный код предоставляется бесплатно, компания зарабатывает деньги, предоставляя учебные курсы, услуги по настройке, установке и хостингу и т.д. Таким образом, несмотря на то, что программное обеспечение является бесплатным и с открытым исходным кодом, такие корпоративные структуры по-прежнему находятся на прочной финансовой основе!
Используемые в цифровом расследовании методы обязаны быть безупречными. Погрешности при расследовании могут приводить к судебным ошибкам, в результате которых не тот человек может быть наказан за преступление или же понести более суровое наказание, чем он того заслуживает. Таких судебных ошибок необходимо избегать любой ценой. Прозрачность, обеспечиваемая программным обеспечением с открытым исходным кодом, обеспечивает уровень уверенности в результатах задач цифрового расследования, которая отсутствует при использовании программного обеспечения с закрытым исходным кодом.
При программном обеспечении с закрытым кодом пользователи полагаются на доверии к тому, что разработчики этого программного обеспечения верно выполнили свои задачи. Хотя большинство людей привыкли доверять таким коммерческим пакетам, многие сталкиваются с ошибками в них. Напомним знаменитое синее окно смерти в операционной системе Windows (Blue Screen of Death). Эта была ошибка столь распространена, что даже получила свой акроним, BSoD!
Для решений с открытым исходным кодом больше нет потребности доверять небольшой группе разработчиков, вместо этого доверие перемещается в сообщество. Это обеспечивает большую уверенность в правильности инструментов с открытым исходным кодом, поскольку сообщество может проверять (и исправлять) их в любой момент. Действительно, если конечный пользователь обладает необходимыми навыками, прежде чем использовать его в конкретных случаях, он может ознакомиться с программным обеспечением с открытым исходным кодом. Это приводит к повышению доверия к применяемым программным средствам.
Кроме того, в ходе расследования, а особенно в процессе судебного разбирательства, которое может последовать за расследованием, жизненно важное значение имеет понятие раскрытия информации. Раскрытие информации - это "процесс раскрытия доказательств, имеющихся у одной стороны в деле или обвинения, другой стороне". (https://legal-dictionary.thefreedictionary.com/disclosure). Это процедура, посредством которой каждая из сторон "выкладывает свои карты на стол". (https://www.pinsentmasons.com/out-law/guides/disclosure-and-privilege). Хотя в большинстве юрисдикций раскрытие информации относится к документам и свидетельским показаниям, то есть к доказательствам, которые будут представлены, оно также может быть истолковано как указание методов, при помощи которых были получены данные доказательства. В таком случае применение программного обеспечения с открытым исходным кодом помогает процессу раскрытия информации. Используя инструменты с открытым исходным кодом, следователь может ознакомиться с доказательствами, которые он представляет в суде, поскольку всякий желающий может проверить правильность инструментов, а, следовательно, самих доказательств.
Следует отметить, что в связи с этим цифровые доказательства зачастую считаются научными или техническими доказательствами. От членов судов не ожидается, что они будут экспертами в этой области, и для определения того, следует ли допускать технические или научные доказательства к судебному разбирательству в качестве таковых используются руководящие принципы. В Соединённых Штатах эти правила были кодифицированы, причём изначально как Стандарт Фрая, который со временем заменяется Стандартом Даубера. Такие "тесты" применяются для определения достоверности научных/ технических доказательств. В обоих случаях эти стандарты относятся к "общему признанию такого метода" соответствующим научным сообществом. Программное обеспечение является реализацией подобного метода; поэтому жизненно важно не только, чтобы сам метод мог бы быть проверен, но также чтобы можно было удостовериться и в его реализации. Хотя методы могут быть опубликованы и служить предметом проверки, только реализации с открытым исходным кодом подлежат любой форме подтверждения достоверности. При подходе с закрытым исходным кодом никогда не бывает полной уверенности в том, что на самом деле делает программное обеспечение.
Подводя итог, я бы сказал, что, хотя применение электронных средств расследования и представления технических доказательств в суде, возможно, пока и не является необходимым, я бы сказал, что использование программных средств с открытым исходным кодом значительно повысит надёжность и прозрачность представляемых в суде доказательств. Это гарантирует, что в процессе расследования будет допущено меньше ошибок.
Opensource.com определяет Linux как "наиболее известную и самую широко применяемую операционную систему с открытым исходным кодом" Много лет назад люди предсказывали, что на рынке настольных операционных систем Linux обгонит Windows. Сейчас, хотя мы и можем наблюдать начало предсказанной революции, она, безусловно, произошла не за счёт Windows как настольной операционной системы. Несмотря на успех дистрибутива Linux Ubuntu, Linux не повлиял на долю рынка Windows. Однако его успех заметен и в прочих областях, таких как встраиваемые системы, системы GPS, ОС телефонов Android, веб-серверов и т.д.
Одной из основных причин применения Linux является его открытый исходный код. Как указывалось ранее, возможно, это, наиболее часто используемое программное обеспечение с открытым исходным кодом. Тем не менее, существует ряд иных причин, по которым его использование должно быть более распространённым при цифровой криминалистике/ расследованиях:
-
Поддержка файловой системы: Linux предоставляет встроенную поддержку для большего числа файловых систем. {Прим. пер.: к тому же в ней более просто подключать дополнительные файловые системы} Криминалистика файловой системы является значительной частью цифровой криминалистики и сам по себе этот факт очень полезен.
-
Серверы пользуются Linux/ Unix: Большинство серверов применяют Linux/ Unix. Тем самым, знакомство с этими операционными системами может служить преимуществом при расследованиях киберпреступлений.
Инструменты Linux менее абстрактны: Средства командной строки Linux часто вынуждают нас работать на более низком уровне, нежели графические инструменты. Это позволяет лучше осознать, что на самом деле делают все инструменты (включая более абстрактные графические инструменты). Такие знания могут оказаться жизненно важными, если их будут оспаривать в суде!
Цельная ОС: Linux является полной операционной системой. Нет ничего что могут выполнять Windows/ macOS и что нельзя сделать в Linux. Вы можете выполнять свои расследования, писать собственные отчёты, отвечать на свою почту и т.п., причём всё на одной и той же машине. {Прим. пер.: справедливости ради, стоит упомянуть возможность запуска Linux из-под Windows (WSL)}.
-
Linux бесплатен: Стоимость не является движущей силой, стоящей за выбором Linux для данной книги; тем не менее, уто может быть важно для управляющих. Все упоминаемые в данной книге инструменты цифровой криминалистики тоже бесплатны.
Имеется множество различных версий Linux, причём многие из них предназначены под определённые задачи. Linux может применяться в качестве полной операционной системы для настольных компьютеров и компьютеров серверного уровня, либо может использоваться в виде минимальной установки для IoT и встроенных устройств. Тем не менее, всякий дистрибутив Linux, вне зависимости от того насколько отличается он конечном виде, разделяет одну и ту же анатомию. Существует четыре основные части Linux, а именно:
-
Ядро: Собственно ядро, которое предоставляет контроль над оборудованием и программным обеспечением.
-
Утилиты GNU: Стандартные вспомогательные программы, осуществляющие стандартные функции, например, управление файлами.
-
Графическая среда рабочего стола: Графический интерфейс (GUI) для Linux (в отличии от прочих операционных систем, в Linux имеется великолепный выбор).
-
Прикладное программное обеспечение: Это те приложения, которые можно обнаружить в конкретной операционной системе. Оно включает браузеры, офисное программное обеспечение, инструменты криминалистики и т.п.. Это именно то программное обеспечение, с которым наиболее знакомы пользователи.
Наименьшие дистрибутивы могут обладать лишь ядром (и, возможно, некоторыми специализированными приложениями), в то время как дистрибутив настольной системы будет обладать всеми четырьмя уровнями. Рисунок 2.1 отображает как эти различные часть соотносятся друг с другом.
Ядро отвечает за управление всеми аппаратными средствами и программным обеспечением в своей вычислительной системе. Хотя Линус Торвальдс и считается создателем Linux, строго говоря, это именно то ядро, которое он создаёт (в настоящее время при помощи прочих). Ядро Linux отвечает за четыре основные функции, а именно:
-
Управление памятью: Память компьютера состоит из двух типов, физической и виртуальной памяти. Компьютеры обладают ограниченным объёмом физической памяти, однако могут пользоваться пространством на жёстком диске (бесшовно) увеличивая этот объём. Такая "добавочная" память носит название виртуальной памяти. Ядро отвечает как за физическую, так и за виртуальную память. Оно пытается обеспечить чтобы все необходимые сведения располагались в физической памяти перед тем, как они потребуются. Это осуществляется через систему подкачки страниц, в которой страницы переключаются между виртуальной и физической памятью. ОС Linux полагает, что всё пространство виртуальной памяти будет доступно в оперативной памяти, однако в реальности доступно лишь физическое пространство. Рисунок 2.2 отображает логическое представление системы памяти Linux.
-
Управление программным обеспечением (процессом): Ядро также ответственно за управление всем исполняемым в машине Linux программным обеспечением. Строго говоря, это означает, управление всеми существующими в машине процессами, причём обеспечивая что они получат требующиеся им ресурсы и что они не будут вторгаться в дела друг друга с прочими процессами в этой системе. Традиционно, самый первый запускавшийся в системе Linux процесс это initd, который обладает ID процесса
1
. В современной системе Linux он, скорее всего, носит название systemd (но всё ещё имеет PID1
!). Все последующие процессы в данной системе будут потомками этого процесса установки. -
Управление оборудованием: Аппаратные устройства также управляются ядром. Такое управление включает в себя загрузку правильного кода драйвера для конкретного устройства. Этот драйвер действует в качестве некого транслятора между своей операционной системой и собственно устройством. Исторически драйверы имели возможность компиляции только в ядре, что означало, что при выпуске нового устройства требовалось обновление всего ядра целиком (с последующей компиляцией) для поддержки такого устройства. Однако с появлением модулей ядра больше нет потребности в повторной компиляции; вместо этого ядро просто загружает необходимый новый модуль, поддерживаемый соответствующим производителем (либо самим сообществом Linux). Подобное понятие модулей ядра устранило одно из самых серьёзных препятствий на пути внедрения Linux в качестве основной операционной системы - сложности настройки нового оборудования под Linux. Несмотря на то, что одним из преимуществ Linux было то, что она была способна работать практически на любом оборудовании, иногда было трудно заставить её работать.
Возможно, вы уже слышали выражение, что "в Linux всё является файлом". Это включает и устройства сами по себе. Доступ ко всякому устройству осуществляется так, как если бы это был файл. Устройства подразделяются на символьные, блочные и сетевые. Такое подразделение основывается на том, как происходит взаимодействие. Символьные устройства передают символы по одному за раз. Они включают в свой состав модемы, клавиатуры, мыши и прочее. Блочные устройства обрабатывают за раз порции данных. Такие порции зачастую носят название блоков. Подобные устройства содержат дисковые устройства, CD ROM, оперативную память и так далее. Блочные устройства, как правило, обладают более быстрым доступом к данным, нежели это происходит у символьных устройств. Сетевые устройств для отправки и приёма данных пользуются пакетами. Листинг 2.3 показывает некий пример обнаруживаемых в каталоге /dev системы Linux Mint. Обратите внимание, что sdaX относятся к дисковым разделам, в то время как ttyX ссылаются на терминалы.
Листинг 2.3. Перечень конкретных устройств в каталоге /dev показывает символьные (ttyX) и блочные sdaX устройства
$ ls -l /dev/sda /dev/sda1 /dev/tty0 /dev/tty1 brw-rw---- 1 root disk 8, 0 Mar 23 05:33 /dev/sda brw-rw---- 1 root disk 8, 1 Mar 23 05:33 /dev/sda1 crw--w---- 1 root tty 4, 0 Mar 23 05:33 /dev/tty0 crw--w---- 1 root tty 4, 1 Mar 23 05:33 /dev/tty1
В листинге 2.3 самый первый символ в строке предоставления прав полномочий это символ c (character device) или b (block device). Кроме того, для каждого из устройств, имеется подчёркнутая пара (8, 0 для /dev/sda. Эта пара чисел позволяет ядру идентифицировать соответствующее устройство. Обычно главное (major) число (8) будет применяться для всех устройств данного типа, в то время как младшее (minor) число (0) представляет конкретное устройство этого типа. В данном случае все drives/partitions (устройство/раздел) будут иметь главное число 8 (как это показано в Листинге 2.3).
-
Управление файловой системой: Последней важной функцией ядра выступает управление файловой системой. Как и в случае с аппаратным обеспечением, поддержка файловой системы может быть скомпилирована в ядро или осуществляться при помощи внешних модулей. Одной из основных причин, по которой стоит рассмотреть возможность применения Linux для цифровой криминалистики, является огромное количество поддерживаемых системами Linux файловых систем, "сразу после установки". Рассмотрим ОС Windows, она может поддерживать файловые системы семейства FAT, а также exFAT и NTFS. Некоторые версии Windows Server также поддерживают по умолчанию ReFS. В таблице 2.1 приведён список файловых систем, которые обычно поддерживаются Linux. При необходимости может быть добавлена поддержка для других систем. Хотя преимущества цифровой криминалистики, связанные с возможностью доступа к многочисленным файловым системам, очевидны, встроенная поддержка также обеспечивает аналитику большую гибкость в отношении хранения файлов по делу. Например, для хранения информации об обращении для дополнительной избыточности и устойчивости можно применять современную файловую систему с полной поддержкой RAID, такую как BtrFS.
Таблица 2.1. Выбор файловых систем, поддерживаемых ядром Linux. Обращаем внимание на то, что не все они включены во все дистрибутивы Файловая система Описание ext
Первоначальная файловая система extended Linux (ранние 1990е). Данная файловая система больше зачастую не встречается.
ext2
Вторая файловая система extended, предоставившая некоторые дополнительные функциональные возможности поверх и за пределы
ext
. Она была создана в ранние 1990е и всё ещё применяется!ext3
Третья файловая система extended, которая добавила поддержку для структур журналирования.
ext4
Четвёртая файловая система extended (и она система по умолчанию в большинстве современных систем Linux).
hpfs
Высокопроизводительная файловая система OS/2.
jfs
Журналируемая файловая система IBM.
iso9660
Файловая система ISO 9660 (CD ROM).
minix
Файловая система MINIX (применяется в операционной системе MINIX).
msdos
FAT 16.
ncp
Файловая система Novell netware.
nfs
Файловая система network file system.
Reiser FS
Расширенная файловая система Linux для лучших возможностей восстановления и производительности.
smb
Совместно используемая сетевая файловая система samba (совместима с совместным применением файлов в Windows).
sysv
Старая файловая система Unix.
ufs
Файловая система BSD Unix.
umsdos
Unix- подобная файловая система, перекрывающая msdos.
vfat
FAT 32.
exFat
Расширенная файловая система FAT.
xfs
Высокопроизводительная 64-битная файловая система с журналированием.
Следующим уровнем в операционной системе Linux выступают утилиты GNU. Утилиты, это располагающиеся поверх ядра программы, которые позволяют пользователю (и системе) управлять файлами и программами. Первоначальное, созданное Линусом Торвальдом, ядро было просто ядром. Оно обрабатывало всё управление, однако не существовало утилит для работы с ядром. Иными словами, мы не могли ничего делать с самой ОС. Однако, организация GNU (GNU это не Unix) независимо разрабатывала набор Unix- подобных вспомогательных программ. Утилиты GNU были разработаны с применением модели открытого исходного кода (продвигаемого Ричардом Столлманом), а раз так, запросто могли применяться ядром Linux. Такое сочетание ядра Linux и утилит GNU привело к созданию функционирующей операционной системы.
![]() | Замечание |
---|---|
Кстати: Всё дело в названии! Строго говоря, Linux относится только к самому ядру. Однако, когда мы говорим Linux, мы обычно подразумеваем GNU/ Linux, что представляет собой сочетание ядра Linux и утилит GNU. Вы можете прочитать немного больше о разногласиях по поводу именования на странице https://en.wikipedia.org/wiki/GNU/Linux_naming_controversy. |
Как правило, когда применяется термин Linux он относится к GNU/Linux!
Пакет coreutils Linux доступен для всех разновидностей Linux и содержит большое число вспомогательных программ. Листинг 2.4 показывает некую выдержку из вывода apt-cache show coreutils, отображающую то, что данный пакет установлен, а также заключённые здесь все стандартные команды.
Листинг 2.4. Подробные сведения о пакете GNU coreutils в Linux Mint
Description-en: GNU core utilities
This package contains the basic file, shell and text manipulation
utilities which are expected to exist on every operating system.
.
Specifically, this package includes:
arch base64 basename cat chcon chgrp chmod chown chroot cksum
comm cp csplit cut date dd df dir dircolors dirname du echo
env expand expr factor false flock fmt fold groups head hostid
id install join link ln logname ls md5sum mkdir mkfifo mknod
mktemp mv nice nl nohup nproc numfmt od paste pathchk pinky pr
printenv printf ptx pwd readlink realpath rm rmdir runcon
sha*sum seq shred sleep sort split stat stty sum sync tac tail
tee test timeout touch tr true truncate tsort tty uname
unexpand uniq unlink users vdir wc who whoami yes
Оболочки также рассматриваются как часть всего набора утилит GNU. Некая оболочка это просто интерфейс командной строки (CLI). Это некая программа, которая ожидает ввода команды от пользователя (или иной программы) и затем исполняющая эту команду. Оболочкой по умолчанию для многих современных систем Linux является Bash, но в доступности имеется множество прочих. Большинство обладает схожими функциональными возможностями (например, историей команд, автоматической подстановкой, операторами выбора и операторами итераций), но между ними существуют и различия. Bash - это замена стандартной оболочки Unix, а также игра слов, обозначающая Bourne Again Shell (первоначальную оболочку Unix часто именовали Bourne shell в честь её создателя!). Bash совместима с оболочкой Unix, но обладает большим количеством функциональных возможностей. К прочим распространённым оболочкам относятся:
-
ash: Облегчённая оболочка, которая совместима с Bash, но способна выполняться в средах с малыми ресурсами.
-
korn: korn это совместимая с Bash программируемая оболочка, но при этом предоставляющая более широкие конструкции программирования, нежели Bash (например, ассоциативные массивы и арифметика с плавающей запятой).
-
tcsh: Предоставляющая элементы языка программирования C оболочка.
-
zsh: Расширенная оболочка, сочетающая элементы из Bash, korn и tcsh.
На протяжении этой книги команды будут выполняться в оболочке Bash.
Третьим основным компонентом системы Linux является графическая среда рабочего стола. И именно это тот компонент, который не является обязательным. Многие небольшие устройства (к примеру, IoT) не пользуются графической компонентой, поскольку она не обязательна и лишь тратит ресурсы впустую. По аналогичным причинам многие серверы вовсе не пользуются графическими средами рабочего стола, предпочитая сохранять столь большой объём ресурсов для обслуживания запросов клиентов вместо выполнения затратных в вычислительном отношении графических процессов. {Прим. пер.: Имеется ещё один аргумент в пользу отказа от графической среды, приводимый создателями Windows Core - среды Windows практически без графического интерфейса: снижение площади атак на ОС.} В тех системах Linux, которые обладают графическими средами рабочего стола, в действительности они составлены из двух подсистем: системы X Window и графического интерфейса рабочего стола.
Собственно система X Window отвечает за взаимодействие с имеющейся видеокартой и монитором в некой вычислительной системе. Это название восходит к наиболее популярной системе X Window, производимой X.org. Существует множество пакетов, которые реализуют такое поведение, включая Wayland (Fedora) и Mir (Ubuntu). Когда Linux устанавливает X Window, система запросит ваше оборудование отображения (дисплеи) и определит какие устройства подключены. Для этих устройств будут автоматически созданы файлы конфигурации. В процессе установки вы порой замечаете мигание экрана (или даже экран гаснет на несколько секунд). Это часто происходит когда система X Window пытается выявить установленное оборудование отображения. Хотя X и допускает графику, она не предоставляет полную практику рабочего стола. Для этого необходима графическая среда рабочего стола.
В Linux доступно множество сред рабочего стола. Наиболее известными двумя являются KDE и Gnome. К примеру, Linux Mint пользуется Mate (на основе Gnome 2) или Cinnamon (на основе Gnome 3). Также имеются такие среды рабочего стола, как XFCE, Openbox и LXQt, которые разработаны намеренно чтобы обладать малым весом. Кстати, такие среды рабочего стола делают Linux идеальной ОС для древнего оборудования. Представьте, что вы пытаетесь запустить Windows 11 с объёмом оперативной памяти всего в 1 ГБ! Это будет очень медленно. Воспользуйтесь дистрибутивом Linux с XFCE или Openbox, и вы получите достаточно высокую производительность! {Прим. пер.: Справедливости ради: можно запустить Windows в режиме Core.}
Завершающим элементом нашей мозаики является прикладное программное обеспечение, которое устанавливается в соответствующем дистрибутиве. Такое программное обеспечение может быть уровня терминала (например, для командной строки) или графическим приложением. Дистрибутив создаётся прикладным программным обеспечением. Большинство дистрибутивов будут содержать стандартные приложения, такие как веб-браузеры, почтовые клиенты и офисное программное обеспечение. В то время как специализированные дистрибутивы будут включать специализированное программное обеспечение.
Дистрибутив Linux (обычно сокращаемый до дистро, distro) это составленная из набора программных средств операционная система, основанная на ядре Linux. Раздел 2.3.1 описал основные компоненты такой операционной системы Linux. Для создания уникальной операционной системы дистро пользуются различными сочетаниями программного обеспечения с каждого из таких уровней. В любой момент времени в действенном применении существуют сотни дистрибутивов Linux. Популярность дистро суммирует DistroWatch. Таблица 2.2 подводит итог для наиболее популярных дистро Linux за последние годы.
Apr 2020 | Apr 2021 | Apr 2023 | Apr 2024 | Mar 2025 | |
---|---|---|---|---|---|
|
MX Linux |
MX Linux |
MX Linux |
MX Linux |
Mint |
|
Manjaro |
Manjaro |
EndeavourOS |
Mint |
MX Linux |
|
Linux Mint |
Linux Mint |
Linux Mint |
EndeavourOS |
EndeavourOS |
|
Ubuntu |
Pop!_OS |
Manjaro |
Debian |
CachyOS |
|
Debian |
Ubuntu |
Pop!_OS |
Manjaro |
Debian |
|
Elementary |
EndeavourOS |
Ubuntu |
Ubuntu |
Pop!_OS |
|
Solus |
Debian |
Fedora |
Fedora |
Manjaro |
|
Zorin |
Elementary |
Debian |
Pop!_OS |
Ubuntu |
|
Fedora |
Fedora |
Elementary |
openSuse |
Fedora |
|
Deepin |
openSuse |
Lite |
Zorin |
openSuse |
Как можно видеть из Таблицы 2.2, существует множество дистро и важно понимать характерные для них функциональные возможности. В данном разделе рассматриваются некоторые основные компоненты дистро, которые стоит принимать в расчёт при обсуждении того какой именно выбирать.
Дистрибутивы Linux - это нечто большее, чем просто внешний вид рабочего стола. Дистрибутивы Linux можно настраивать. Любое программное обеспечение, как правило, может быть установлено в любом дистрибутиве. Однако, одной из наших главных задач должно быть то, насколько оригинальный дистрибутив соответствует нашим конечным требованиям. Поиск подходящего дистрибутива экономит время и усилия пользователя. При выборе дистрибутива необходимо учитывать следующие моменты:
-
Диспетчеры пакетов: Различные дистро обладают различными диспетчерами пакетов. К примеру, APT применяется в основанных на Debian дистро, таких как Ubuntu, Mint, CAInE, Backtrack и, естественно, Debian, в то время как Fedora/Red Hat для управления пакетов применяют dnf (или YUM). Создать программу с нуля не так уж сложно, но это не позволяет автоматически обновлять её при выпуске новых версий. Поэтому при выборе дистрибутива очень важно наличие утилит и простота применения диспетчеров пакетов.
-
Среда рабочего стола: В дистрибутивах Linux могут применяться некоторые уже упомянутые графические среды рабочего стола. Ваш выбор дистро должен основываться на подходящей среде рабочего стола (хотя установленная по умолчанию может быть изменена, зачастую проще выбрать дистро, который уже применяет предпочитаемую вами систему рабочего стола).
-
Стабильность в сравнении с передовыми технологиями: Некоторые дистрибутивы нацелены на предоставление обновлённых версий пакетов как можно быстрее, в то время как прочие в первую очередь заботятся о стабильности и только затем обновляют пакеты.
-
Совместимость с оборудованием: Драйверы в программе установки могут отличаться в зависимости от разных дистрибутивов, что делает их более или менее совместимыми с аппаратным обеспечением компьютера. Это уже не такая сложная задача, как ранее. Поддержка аппаратного обеспечения Linux в последние годы значительно улучшилась (в основном благодаря упомянутым ранее модулям ядра). Большинство дистрибутивов из списка топ-10 (Таблица 2.2) обеспечивают поддержку plug-and-play для большинства основных производителей аппаратных средств.
-
Поддержка сообществом: Для устранения неисправностей очень полезна поддержка сообщества. Когда она потребуется, дистро с большими сообществами зачастую быстрее предоставляют поддержку.
Тем не менее, какой именно дистро выбрать для цифровой криминалистики? Есть два основных варианта. Вы можете выбрать дистрибутив общего назначения, в котором можно установить все необходимые инструменты криминалистики, или же выбрать дистрибутив цифровой криминалистики. В таком дистрибутиве предустановлено множество инструментов криминалистики, к тому же они настроены специально для цифровых расследований/ криминалистической экспертизы. Например, когда в систему вставлен съёмный носитель, система не будет автоматически монтировать указанный носитель. По умолчанию все монтируемые файлы доступны только для чтения. Вот некоторые примеры дистрибутивов для судебной экспертизы/ кибербезопасности:
-
Caine: Computer - Aided INvestigate Environment. Предустановлены инструменты криминалистики, OSINT и Pen Testing.
-
Tsurugi: Дистро DFIR (Digital Forensics Incident Response), который обладает установленными ряд инструментов OSINT/ Pen Testing помимо множества инструментария цифровой криминалистики.
-
Kali: Сосредоточенный на тестировании проникновений дистро, который к тому же включает в свой состав инструменты разведки и цифровой криминалистики с открытым исходным кодом.
-
Backbox: Основанный на Ubuntu дистро тестирования проникновений.
-
BlackArch: Основанный на Arch Linux дистро тестирования проникновений.
-
Pentoo: Базирующийся на Gentoo Linux дистрибутив тестирования проникновений.
-
Parrot Security: Дистрибутив тестирования проникновений, к тому же содержащий инструментарий для прочих областей цифровых расследований.
Выбор дистрибутива остаётся за вами. Если вам нужен готовый дистро криминалистики, то обязательно выберите один из вышеперечисленных дистрибутивов. Если вы хотите узнать больше о Linux, выберите дистрибутив общего назначения, такой как Ubuntu, Fedora или openSUSE. Каков мой выбор? Как правило, я применяю дистрибутив общего назначения, который настроен для цифровых исследований. На протяжении многих лет я использовал все основные дистрибутивы (Debian, Red Hat, Suse и т.д.), но мои любимые, как правило, основаны на Debian. По этим причинам в настоящее время я постоянно пользуюсь Linux Mint. Окружение рабочего стола приятное и простое (не слишком много наворотов!), применяется диспетчер пакетов Apt (который очень прост в использовании – либо через графический интерфейс, либо непосредственно из терминала), операционная система стабильна и есть отличная поддержка, если вдруг что-то пойдёт не так. Все примеры, которые вы обнаружите в данной книге, были созданы с применением Linux Mint (и в самом деле, изначально эта книга была набрана с использованием latex, работающего в Linux Mint!).
Самое первое публичное указание на то, что Linux уже на подходе, появилось в августе 1991 года, когда финский студент Линус Торвальдс опубликовал в группе пользователей Minix OS usenet следующее сообщение:
Привет всем, кто пользуется minix -
Я разрабатываю (бесплатную) операционную систему (просто для хобби, она не будет такой масштабной и профессиональной, как gnu) для AT клонов 386(486). Она зрела с апреля, и начинает получаться. Я хотел бы получить любые отзывы о том, что людям нравится / не нравится в minix, поскольку моя операционная система чем-то похожа на неё (среди прочего, такое же физическое расположение файловой системы - по практическим соображениям).
В настоящее время я портировал bash(1.08) и gcc(1.40), и, похоже, всё работает. Это означает, что в течение нескольких месяцев я получу нечто практичное, и я хотел бы знать, какие функции понадобятся большинству пользователей. Приветствуются любые предложения, но я не обещаю, что реализую их :-) Linus (torvalds@kruuna.helsinki.fi)
PS. Да, в ней нет кода minix, и она имеет многопоточную fs. Она НЕ переносима (использует переключений задач 386 и т.д.) и, вероятно, никогда не будет поддерживать ничего, кроме жёстких дисков AT, поскольку это все, что у меня есть:-(.
Торвальдс приступил к созданию ядра Linux в качестве личного проекта в апреле 1991 года. Для этого было несколько причин. На тот момент основными доступными операционными системами были Unix и Minix. В то время Unix считалась лучшей операционной системой, но стоимость лицензирования была непомерно высока, в особенности для домашних пользователей. Эндрю Танненбаум, известный учёный- компьютерщик, создал minu-Unix (онf же Minix). Её стоимость по-прежнему была непомерно высока (хотя и не так высока, как у Unix), и в ней к тому же отсутствовали некоторые желательные функциональные возможности Unix. Линус Торвальдс задался целью написать версию Minix, которая была бы столь же полной, как Unix, и могла бы распространяться среди всех желающих!
Как видно из первой публикации Торвальда в usenet в августе 1991 года, изначально Linux был ориентирован только на архитектуру 386 и ничего более. Торвальдс никогда не думал, что Linux будет работать везде! Сейчас Linux работает практически на любом куске железа!
Ядро Linux версии 0.01 было выпущено 17 сентября 1991 года, но имело ограниченную функциональность. На самом деле Торвальдс никогда не афишировал тот факт, что данная версия была доступна. Очень скоро была выпущена версия 0.02 (5 октября 1991 года). Эта версия включала в себя портированную версию GNU Bash (терминального интерфейса) и GNU gcc (компилятора языка Си). Добавление этих двух утилит означало, что теперь появилась доступная операционная система. Люди могли устанавливать Linux и действительно что-то с ним делать! Очень быстро на новое ядро Linux были перенесены все утилиты GNU, и оно стало применяться чаще.
В начале 1990-х годов резко возрос интерес к Linux. Первые дистрибутивы появились в 1992 году, а к 1996 году было представлено большинство современных семейств дистрибутивов (Slackware и Debian - 1993, Red Hat - 1994 и Saxe - 1996). Многие из этих дистрибутивов содержали X Window System, позволяющую создавать простые графические интерфейсы для ядра Linux.
В середине 1990-х годов появились более богатые функционально графические среды, такие как KDE (1996) и Gnome (1997). Эти две системы все ещё широко применяются и в наши дни. За прошедшие годы они также привели к многочисленным развилкам, а это означает, что большинство графических систем Linux могут восходить к одной из этих конкурирующих систем.
В следующем разделе представлен краткий обзор Linux Mint. Отметим, что для тех из вас, кто знаком с Linux, им следует двинуться вперёд и перейти к разделу 2.4.2. Если вы также знакомы с терминальным интерфейсом Linux, то вам надлежит перейти непосредственно к разделу 2.5.
Рисунок 2.4 показывает запущенную систему Linux Mint. Linux Mint применяет подобную Windows метафору рабочего стола, в которой файлы/ папки могут храниться непосредственно на рабочем столе. Система Linux Mint также предоставляет подобное Start меню в нижнем левом углу своего экрана, отображающего иконки панели задач.
Как и в Windows, панель задач отображает состояние различных компонентов в ОС Linux Mint. Они также содержат текущее сетевое состояние и состояние батареи, сведения об обновлениях программного обеспечения, дату со временем и прочее. Собственно меню Linux Mint показано на Рисунке 2.4 и снова, оно аналогично меню Пуск Windows, предоставляя функциональные возможности поиска, а также доступ ко всем установленным приложениям.
Одним из наиболее применяемых в данной книге приложений является терминал Linux (также именуемый оболочкой). Такой терминал это некое приложение, которое взаимодействует с системой через интерфейс командной строки. Большинство примеров, с которыми вы встретитесь на страницах этой книги производятся из такого терминала Linux.
Терминал предоставляет приглашение на ввод (prompt), в котором пользователь имеет возможность ввода команд. После того как пользователь ввёл необходимую команду, оболочка (например, Bash) производит её синтаксический анализ, оболочка отобразит вывод на экран и далее предоставит приглашение на ввод своему пользователю, поскольку она ожидает следующую команду. К терминалу в Linux Mint можно выполнить доступ через основное меню посредством Administration | Terminal. Рисунок 2.5 отображает ожидающий ввода терминал Linux.
Именно учётная запись пользователя является одним из важнейших понятий Linux, а в особенности, пользователь root. Такой пользователь root в системе Linux обладает правом выполнения в своей системе любого действия (что включает в свой состав некоторые удобные действия в терминале, такие как удаление всех - ALL - файлов в данной системе). Как правило, в большинстве систем Linux именно самая первая создаваемая учётная запись (в процессе установки) это участник особой группы, которая позволяет своим пользователям становиться пользователем root. Обычно все действия в Linux должны исполняться от имени обычной учётной записи пользователя, за исключением ситуаций, при которых необходимо выполнять некое действие в качестве root. К примеру, для доступа к физическому диску при получении образа требует прав root. Для некой одиночной команды права root можно получить при помощи sudo. Листинг 2.5 показывает такой способ получения доступа с правами root. Обратите внимание на то, что в данном примере наша команда whoami применяется из терминала Linux.
Листинг 2.5. Применение sudo для доступа с правами root
$ whoami
fergus
$ sudo whoami
[sudo] password for fergus: *********************
root
Данная команда просто выводит имя пользователя. Наилучшей практикой в использовании Linux был бы совет применять пользователем учётную запись root только когда это совершенно необходимо.
Для временного получения прав доступа root наша команда whoami следует с префиксом другой команды sudo - чем- то, что носит название super user do! В процессе исполнения этой команды система Linux убедится, что исполняющая данную команду учётная запись (в листинге 2.5 это fergus) является участником группы sudo. Если это так, данному пользователю будет выдано приглашение на ввод его пароля. В случае успешной аутентификации следующая команда выполняется с полномочиями root. Зачастую это необходимо для определённых задач цифровой криминалистики, в частности, при доступе к физическому устройству, например, при создании криминалистического образа устройства хранения.
Данный раздел предоставляет некий обзор основных команд Linux. Эти команды разбиты по общим задачам, таким как навигация по имеющейся файловой системе и получение подсказки. В каждом из разделов предоставляется ряд команд, которые в последствии могут применяться пользователем.
Навигация по определённой файловой системе
Одна из основных трудностей, с которой сталкиваются многие новички Linux это простейшее действие навигации по имеющейся файловой системе. Прежде всего необходимо определиться с нашим текущим положением в файловой системе. Как правило, когда в текущем сеансе запускается терминал, он начинается в домашнем каталоге своего пользователя. Давайте рассмотрим пользователя fergus. Домашним каталогом по умолчанию для этого пользователя выступает /home/fergus. Листинг 2.6 демонстрирует команду, применяемую для определения названия текущего рабочего каталога непосредственно исполняемую после запуска приложения терминала. Как и ожидалось, она показывает что наш пользователь пребывает в /home/fergus.
После выяснения местоположения необходимо определить какие файлы/ каталоги присутствуют в этом месте. Основной командой для перечисления имеющихся файлов/ каталогов является ls. Листинг 2.7 отображает вывод ls в нашем текущем каталоге. (Получаемый вами вывод будет похожим, но не идентичным показанному в нашем примере выводу.)
Листинг 2.7. Применение ls для перечисления файлов/ каталогов в нашем текущем каталоге
$ ls
dates.txt Documents Music Pictures Templates
Desktop Downloads perl5 Public Videos
$
Вот общая структура команды терминала:
command [options] [arguments]
Когда команде предоставляются некие аргументы, такая команды выполняется с данными аргументами. В Листинге 2.7 для команды ls не предоставлено аргументов. По умолчанию, когда она выполняется в текущем каталоге, этой команде не нужны аргументы. В данном случае также не предоставлены никакие параметры (опции), хотя наша команда ls может получать как аргументы, так и параметры. Листинг 2.8 демонстрирует пример команды ls, в котором для неё предоставлены как параметры, так и аргументы.
Листинг 2.8. Применение параметров и аргументов для команды ls
$ ls -lh Downloads/
total 13G
-rw-rw-r-- 1 fergus fergus 2.4M May 11 2021 01.jpg
-rw-rw-r-- 1 fergus fergus 295K Aug 26 09:43 0306511.pdf
...[snip]...
$
Вместо того чтобы перечислять содержимое текущего каталога, нашей команде ls предоставлен аргумент Downloads/ (Терминал Linux чувствителен к значению регистра, что подразумевает, что команды ls Downloads/ и ls downloads/ различны). Это приводит к перечислению содержимого каталога Downloads вместо текущего каталога. Нашей команде дополнительно приданы параметры -lh. Это приводит к перечислению названий файлов в длинном формате (который снабжается значениями прав, владельца, группы, размера, даты изменения и прочего) для этого файла (-l) и предоставления размера файла в воспринимаемом человеком формате (-h). Большинство команд Linux способны получать параметры/ аргументы.
Но как пользователь перемещается по своей файловой системе? Тот способ, коим это достигается заключается в применении команды cd. В качестве своего аргумента команда cd получает название каталога, на которое пользователь хотел бы произвести изменение. К примеру, в Листинге 2.9 наш пользователь изменяет каталог на Downloads и обратно на свой домашний каталог (.. это специальное имя каталога для родительского каталога), а затем на Documents.
Листинг 2.9. Применение команды cd для изменения каталога
$ cd Downloads/
$ pwd
/home/fergus/Downloads
$ cd ..
$ pwd
/home/fergus
$ cd Documents/
$ pwd
/home/fergus/Documents
Сочетание команд cd и pwd позволяют нашему пользователю перемещаться по файловой системе. Обратите внимание, что представленное до текущего момента значение имён каталогов относительно значения текущего каталога. Кроме того, также имеется возможность предоставления абсолютных названий каталогов. Рассмотрим команду в Листинге 2.10. Она немедленно переносит нашего пользователя в каталог /etc.
Как и в случае команды ls, когда не предоставлен никакой аргумент, команда сd обладает неким аргументом по умолчанию. В случае исполнения команды сd без аргумента, наш пользователь немедленно возвращается в сой домашний каталог. Это отображено в Листинге 2.11.
Листинг 2.11. Применение сd без аргументов для возврата в свой домашний каталог
$ pwd
/etc
$ cd
$ pwd
/home/fergus
$
Получение подсказки
По мере того, как пользователь становится всё более знаком с терминалом, ему быстро становится понятно насколько эта среда сложная. Имеется множество команд, причём каждая из них способна обладать большим числом опций. Как это всё можно запомнить? Ответ на это (для большинства людей) ну да, не возможно! Вместо этого Linux предоставляет систему подсказок (help), носящую название manual (руководство). Именно к ней и осуществляет доступ команда man.
Листинг 2.12. Страница руководства для команды pwd
PWD(1) User Commands PWD(1)
NAME
pwd - print name of current/working directory
SYNOPSIS
pwd [OPTION]...
DESCRIPTION
Print the full filename of the current working directory.
-L, --logical
use PWD from environment, even if it contains ...
-P, --physical
avoid all symlinks
Большинство команд обладают подсказкой или страницей man. Листинг 2.12 показывает часть страницы руководства для самой команды pwd. Для перемещения по такой странице руководствоа применяется клавиша пробела. Для выхода из системы руководства нажмите "q".
Просмотр / редактирование текстового файла
Файлы могут создаваться при помощи любого текстового редактора. Все поставляемые дистро с графикой снабжены неким графическим текстовым редактором в своём главном меню (аналогично Notepad в Windows), но помимо этого также имеется большое число доступных через терминал текстовых редакторов. Они включают в свой состав nano (порой носящий название pico), emacs и vi. Самым простым из них, безусловно, является nano.
Помимо этого текстовые файлы можно просматривать и в самом терминале. Имеется большое число способных осуществлять это команд, среди них:
-
cat: Команда cat отобразит всё содержимое файла целиком. В качестве аргумента можно предоставить множество файлов и команда cat отобразит их все. Строго говоря, команда cat предназначена для конкатенации файлов, получая множество файлов в качестве ввода и создавая новый файл с содержимым всех файлов ввода на выводе. Когда предоставлен единственный файл и, раз получаемый вывод отображается в терминале, по умолчанию это имеет действие отображения пользователю содержимого файла. {Прим. пер.: При помощи cat можно создавать текстовые файлы из терминала: для этого необходимо перенаправить вывод этой команды в создаваемый файл, после чего в появившемся поле вводится необходимый текст, набор которого завершается комбинацией Ctrl + D, например:
cat > new.txt
.} -
more: Команда more позволяет выполнять постраничный вывод, отображая файл по одной странице за раз. Движение вперёд осуществляется по нажатию клавиши пробела (из команды можно выйти нажав "q").
-
less: Команда less это другое средство постраничного просмотра, которая очень похожа на more. Исторически они обладали отличиями, но со временем они сошли на нет.
-
head: Команда head по умолчанию отобразит первые 10 строк текстового файла. Это поведение можно изменить при помощи head -n 5, к примеру, для вывода только первых пяти строк.
-
tail: По умолчанию команда tail отображает последние 10 строк текстового файла. Аналогично команде head, число отображаемых строк можно изменить при помощи -n x, где x значение число отображаемых строк.
Управление каталогами
Для создания каталога применяется команда mkdir. К примеру, воспользовавшись показанной в Листинге 2.13 командой в домашнем каталоге создаётся каталог Files. Обратите внимание, что самой первой исполняемой командой здесь выступает cd, чтобы гарантировать, что текущим каталогом выступает домашний.
Листинг 2.13. Применение команды mkdir для создания каталога
$ cd
$ mkdir Files
$ ls
dates.txt Documents Files perl5 Public Videos
Desktop Downloads Music Pictures Templates vmware
$
Перенаправление и конвейеры
Все приводившиеся нами до сих пор команды отображали свой вывод в сам терминал. По умолчанию, в Linux имеются два потока вывода, STDOUT (Standard Output) и STDERR (Standard Error). По умолчанию, большая часть вывода отправляется в STDOUT; однако, сообщения об ошибках часто отправляются в STDERR. По умолчанию, оба эти потока отправляются в терминал, но это поведение может быть переопределено. Рассмотрим пример команды pwd из Листинга 2.6. В этой команде результат выводился на сам экран терминала. Что и в самом деле происходит, когда подобная команда выдаёт информацию в STDOUT, который перенаправляется в сам терминал. Существует возможность перенаправления таких потоков вывода. Рассмотрим соответствующую команду из Листинга 2.14:
Листинг 2.14. Перенаправление STDOUT в текстовый файл
$ pwd > directory.txt
$ cat directory.txt
/home/fergus
Перенаправление STDOUT выполняется при помощи оператора >. В данном случае мы имеем эффект сохранения получаемого из команды вывода в предписанном файле (в directory.txt, в данном случае). Это может оказаться неоценимым при проведении криминалистического анализа, поскольку позволяет быстро сохранять результаты для дальнейшего анализа или составления отчётов. Поток STDERR также может быть переназначен при помощи 2>.
Также имеется входной поток, который носит название STDIN (Standard Input). Он также может перенаправляться при помощи <. Кроме этого, сама оболочка производит ещё одно действие перенаправления, именуемое конвейером (pipe). При нём вывод одной команды применяется в качестве ввода для другой команды. Позднее в этой книге мы будем интенсивно пользоваться конвейерами, в особенности для фильтрации вывода команд. На данном этапе ограничимся тривиальным примером.
Рассмотрим действие команды cat /etc/passwd. Она отобразит в терминале содержимое файла /etc/passwd. Однако, этот файл обычно слишком велик для просмотра на одном экране. Вместо того чтобы допускать вывод на экран, он может быть отправлен конвейером в команду more, чтобы допустить просмотр по странице за раз. Это показано в Листинге 2.15. (Как уже было сказано ранее, этот пример тривиален. Того же результата можно было бы достичь командой more /etc/passwd.)
ОС Linux очень действенно может применяться в качестве платформы цифровой криминалистики. Как было показано в Разделе 2.1.1, Linux обладает рядом преимуществ перед традиционным программным обеспечением с закрытым исходным кодом. В плане цифровой криминалистики, а в особенности криминалистики файловых систем, Linux поддерживает большое число файловых систем. Поддержка прочих может быть добавлена сравнительно просто. Сама природа открытого исходного кода ОС Linux (а также большинства доступного для ОС Linux программного обеспечения) подразумевает, что аналитики могут иметь больше уверенности в получаемых в результате цифровой криминалистики результатах. Это имеет жизненно важное значение, поскольку от результатов применения таких инструментов часто зависят жизни людей.
Ещё одним преимуществом применения Linux в качестве платформы криминалистики является ряд встроенных инструментов, которые непосредственно полезны при криминалистике файловых систем. В этом разделе рассматриваются некоторые из таких инструментов. Linux предоставляет стандартные инструменты для вычисления значений хэша, просмотра шестнадцатеричного кода и т.п. (см. ниже). Каждый из них (и многие другие) приносит непосредственную пользу экспертизе файловых систем.
В дополнение ко встроенным командам Linux, которые применяются при криминалистике файловых систем, в системе Linux также имеется ряд инструментов, написанных специально для криминалистики файловых систем. К ним относятся инструменты для создания образа диска, обработки данных и криминалистического анализа файловой системы. Некоторые из этих инструментов будут рассмотрены в Главе 4.
Хэширование
Некий хэш (также имеющий название свёртки сообщения - message digest) это представляющее фрагмент данных число фиксированной длины. Он может также рассматриваться как некая функция, которая ставит в соответствие данные произвольной длины данным с фиксированной длиной. Обычно, хэш это односторонняя функция, то есть очень просто вычислить значения хэша по получаемым данным, однако невозможно обратить этот процесс и произвести из полученного кэша первоначальные данные. При цифровых расследованиях хэши применяются по целому ряду причин:
-
Для обеспечения целостности доказательств: При получении цифровых улик получается соответствующий этому значению хэш. Этот хэш хранится (и проверяется) на протяжении всего расследования. Раз значение хэша совпадает, можно обладать уверенностью, что содержимое этих улик не изменялось в ходе нашего анализа.
-
Для исключения из расследования заведомо верных файлов: В ходе расследования на постоянной основе обнаруживается большое число не представляющих интерес файлов. К примеру, в каждом из компьютеров с Windows 10 имеется одно и то же изображение логотипа Windows, в каждой странице Facebook имеются одинаковые логотипы и так далее. Это заведомо верные файлы, с которыми мы уже сталкивались ранее и которые, как известно, не представляют интереса. Благодаря ведению списка значений хэша для таких файлов их можно автоматически исключать из расследования.
-
Для идентификации заведомо плохих файлов: Существуют также и файлы, которые были обнаружены ранее и содержат незаконные материалы. Это заведомо плохие файлы. Список их хэш-значений можно применять для автоматической идентификации в новом случае. Обратите внимание, что технически этот процесс идентичен удалению заведомо верных файлов, с единственной разницей, что с плохими и верными файлами при их идентификации выполняются разные действия.
Из приведённых выше примеров использования становится ясным, что, несомненно, хэширование выступает важным инструментом цифровой криминалистики. Существует ряд вариантов алгоритмов хэширования, которые обычно делятся на два семейства: Свёртки сообщений (Message Digest) и Алгоритмы безопасного хэширования (Secure Hash Algorithm).
Алгоритм MD5 это единственный участник семейства Свёртки сообщений, который всё ещё распространён. Он производит значение хэша из 128 бит.
Для производства значения хэша MD5 каждый дистрибутив Linux производит команду md5sum.
Листинг 2.16 показывает пример использования такого хэша. Он начинается с вычисления значения хэша для текста
"Hello World"
. Вторая версия этой команды вычисляет значение MD5 для текста
"Hello world"
, в котором для одного из символов изменён регистр. Обратите внимание
на то, что возвращаемое значение хэша совершенно отличается от первоначального.
Листинг 2.16. Применение md5sum для вычисления значения MD5 для фрагмента текста. Второй пример показывает изменение в MD5 после небольшого изменения в тексте.
$ echo "Hello World" | md5sum
e59ff97941044f85df5297e1c302d260 -
$ echo "Hello world" | md5sum
f0ef7081e1539ac00ef5b761b4fb01b3 -
$
Обычно эта команда выполняется над неким файлом вместо STDIN Чтобы поступить именно так, просто исполните эту команду с соответствующим именем файла в качестве аргумента. Например, md5sum river.jpg river.jpg.
Алгоритм безопасного хэширования (SHA) это более последняя версия алгоритма хэширования на замену MD5. Имеются четыре версии SHA:
-
SHA-0: В этом процессе на самом начальном этапе был обнаружен недостаток и он больше не применяется.
-
SHA-1: Производит хэш в 160 бит (по сравнению со 128 битами для MD5). В этом алгоритме присутствуют некоторые уязвимости.
-
SHA-2: Состоит из двух алгоритмов хэширования (SHA256 и SHA512), которые обладают значениями хэша в 256/512 бит.
-
SHA-3: Все предыдущие варианты были разработаны АНБ (Агентством национальной безопасности США - US National Security Agency). Алгоритмы SHA-3 были разработаны иными разработчиками, но обычно выдают значения хэша более 256 бит.
Листинг 2.17 показывает значения SHA1, SHA256 и SHA512 для "Hello World".
Листинг 2.17. Примеры алгоритмов хэширования семейства SHA.
$ echo "Hello World" | sha1sum
648a6a6ffffdaa0badb23b8baf90b6168dd16b3a -
$ echo "Hello World" | sha256sum
d2a84f4b8b650937ec8f73cd8be2c74add5a911ba64df27458ed8229da804a26 -
$ echo "Hello World" | sha512sum
e1c112ff908febc3b98b1693a6cd3564eaf8e5e6ca629d084d9f0eba99247cacdd
72e369ff8941397c2807409ff66be64be908da17ad7b8a49a2a26c0e8086aa -
$
Одно из связанных с применением алгоритмов хэширования предостережений, состоит в том, что могут происходить коллизии хэшей. Коллизия хэшей возникает, когда два (или более) различных элемента имеют одинаковое значение хэша. Вы можете спросить, как это может произойти, поскольку хэш должен быть уникальным. Это так, но существует только конечный набор значений хэша. Рассмотрим случай применения MD5. MD5 вырабатывает хэш-значения из 128 бит. Это означает, что существует 2128 возможных хэш-значений. Теперь представьте, что в (очень) большом исследовании было обнаружено 2128 + 1 файлов. Математически теперь гарантируется, что имеется коллизия хэшей, иными словами, два файла будут иметь одинаковое значение хэша. В математике это известно как принцип "Голубиной норы". Вероятность того, что коллизия произойдёт задолго до получения файлов 2128 + 1, будет такой же, но в этот момент это обязательно произойдёт.
Меньшие значения хэша приводят к большей вероятности столкновений; тем самым, MD5 рассматривается как наименее безопасный (то есть наличие коллизий более вероятно) из представленных в этом занятии алгоритмов хэширования. Коллизии хэширования можно продемонстрировать при помощи простейшего алгоритма хэширования с названием crc32, как это показано в Листинге 2.18.
Листинг 2.18. Пример коллизии хэшей при использовании crc32.
$ echo -n "plumless" > one
$ echo -n "buckeroo" > two
$ crc32 one two
4ddb0c25 one
4ddb0c25 two
$
Чтобы избежать коллизию хэше (или, по крайней мере, снизить её вероятность), лучше пользоваться алгоритмами хэширования с наибольшим выводом (например, SHA512); тем не менее, для этого раздела приемлемо большинство вариантов применения (за исключением crc32). Для дополнительного снижения вероятности коллизий можно применять несколько алгоритмов хеширования. Например, можно использовать как MD5, так и SHA1, что значительно снижает вероятность коллизии.
Шестнадцатеричный просмотр
В Linux доступен целый ряд программ просмотра в шестнадцатеричном виде, причём как на уровне командной строки, так и с применением графических интерфейсов. По умолчанию большинство дистрибутивов предоставляет hexdump и xxd. Они обе базируются на командах терминала. Также существует в доступности большое число графических шестнадцатеричных редакторов, таких как bless, okteta и wxHexEditor.
Листинг 2.19 показывает применение команды xxd для просмотра значения таблицы разделов со второго жёсткого диска системы Linux (/dev/sdb). Обратите внимание на то, что для выполнения этой операции требуются права доступа root (следовательно, применяется sudo). Собственно структура таблицы разделов поясняется в Разделе 4.2. В данном примере для xxd представлены два параметра. Первый это -s, который предоставляет общее число байт, подлежащих пропуску (Skipped). Иными словами, вместо того чтобы начинать шестнадцатеричный дамп с нулевого байта, он начнётся с 446d. Второй параметр (-l) определяет число необходимых для отображения байт (в данном случае 64d).
Листинг 2.19. Применение xxd для просмотра таблицы разделов в /dev/sdb.
$ sudo xxd -s 446 -l 64 /dev/sdb
001be: 003c 0900 8379 463c 0008 0000 0000 2000.<...yF<...... .
001ce: 005c c533 8357 8664 0008 2000 0000 2000.\.3.W.d.. ... .
001de: 0000 0101 833f 2000 0008 4000 0000 2000 .....? ...@... .
001ee: 0000 0101 053f e05f 0008 6000 00f8 7a01 .....?._..‘...z.
$
Без каких бы то ни было параметров команда xxd начинает с самого первого байта (то есть -s 0) и отобразит всё содержимое файла.
Архивирование / сжатие
Цифровая криминалистика вовлекает в обработку большие объёмы данных. Раз так, жизненно важна возможность сжатия данных. Linux предоставляет поддержку для большинства распространённых форматов архивирования/ сжатия. Одним из самых распространённых форматов архивирования является tar, ленточный архив. Очевидно, что магнитные ленты в далёком прошлом, однако их название сохранилось. Команда tar, в основном, предназначена для в качестве некой команды архивирования, которая собирает множество файлов воедино в единственный архив. Следовательно, получаемый в результате файл обычно больше чем сочетание всех файлов на входе. Тем не менее, команду tar можно сочетать с рядом команд сжатия (например, gzip bzip) Листинг 2.20 отображает создание сжатого архива, в то время как Листинг 2.21 показывает процесс выделения из этого архива.
Листинг 2.20. Применение tar для сжатого gzip архива с названием archive.tar.gz, содержащим три файла: file1, file2 и file3.
$ tar -czvf archive.tar.gz file1 file2 file3
Листинг 2.21. Применение tar для выделения содержимого из сжатого архива, archive.tar.gz.
$ tar -xzvf archive.tar.gz
Команда tar допускает ряд действий. Листинг 2.20 показывает -c, применяемый для создания архива , в то время как Листинг 2.21 отображает использование -x для выделения этого предмета. Параметр -z указывает, что следует применять сжатие gzip.
Доступны также и иные варианты сжатия, включая архивы ZIP. Они могут создаваться при помощи zip archive.zip file1 file2 file3, которая создаст архив (archive.zip), содержащий три файла (file1, file2 и file3). Архивы ZIP можно развёртывать при помощи unzip archive.zip.
Команда file
Одной из наиболее распространённых встречающихся методик противодействия криминалистике состоит в сокрытии расширением. Рассмотрим некий файл JPEG, который, подозревается в сокрытии от криминалистического анализа. Подозреваемый мог поменять название с picture.jpg на text.txt. Большинство операционных систем определили бы его как текстовый файл (на основании его расширения .txt), а не картинки, чем он выступает в действительности.
В Linux существует команда file, которая определяет реальный тип файла путём считывания его содержимого. Листинг 2.22 показывает применение команды file для файла с названием text.txt.
Листинг 2.22. Применение команды file для определения типа файла.
$ file text.txt
text.txt: PNG image data, 1267 x 850, 8-bit/color RGBA, noninterlaced
$
Команда file анализирует реальное содержимое сырых данных файла. Рассмотрим некий файл JPEG. Стандарт JPEG предписывает чтобы все его файлы начинались с шестнадцатеричных значений 0xFFD8 (Данный стандарт определяет более длинную подпись в зависимости от реальной версии JPEG и поддерживаемых функциональных возможностей; тем не менее, все файлы JPEG начинаются с 0xFFD8) и завершается шестнадцатеричными значениями 0xFFD9. Это можно наблюдать в Листинге 2.23.
Листинг 2.23. Применение xxd для отображения значений заголовка (0xFFD8) и окончания (0xFFD9) в файле JPEG для определения типа файла.
$ xxd picture.jpg | head -n1
00000: ffd8 ffe0 0010 4a46 4946 0001 0101 0048 ......JFIF.....H
$ xxd picture.jpg | tail -n1
4e230: 086f 2f8e f426 80ff d9 .o/..&...
Большинство платформ цифровой криминалистики предоставляют функциональные возможности определения неверных расширений, когда расширение файла отличается от ожидаемого согласно содержимому такого файла, например, содержимое файла начинается с 0xFFD8 и при этом расширением файла является txt. В Linux такое поведение встроено во все дистрибутивы через команду file.
Команда strings
Во многих ситуациях жизненно важной являются текстовые сведения. Команда strings отображает все найденный в файле выводимые на печать символы (ASCII), причём вне зависимости от типа файла. Даже двоичные файлы могут быть представлены строками и они будут отображаться выводимыми на печать символами из этого файла.
Команда strings вызывается при помощи strings [options] filename, где именем файла может быть файл с любым типом. Этой командой также можно пользоваться в дисковом образе для поисков определённых текстовых фрагментов в данном образе. При сочетании strings с egrep это имеет результатом чрезвычайно мощный инструмент криминалистики, позволяющий выявлять местоположения всех экземпляров определённого текста (и текстовых шаблонов).
Листинг 2.24 показывает базовое применение strings. Здесь strings выполняется в /dev/sda2 (обратите внимание, что вывод усечён), в разделе, в котором содержится файловая система NTFS.
Листинг 2.24. Выдержка из вывода команды strings.
$ sudo strings /dev/sda2
NTFS
NTFSu
TCPAu
fSfSfU
fY[ZfYfY
A disk read error occurred
BOOTMGR is missing
...[snip]...
Данный вывод немедленно наводит на мысль что здесь присутствует системный файл NTFS (байты 3-6 в неком файле системы NTFS содержат название OEM, коим является NTFS). Представленный в Листинге 2.24 только то что соответствующие сведения присутствуют. Представим себе что /dev/sda2 имеет размер в 1ТБ. Наша команда strings сообщает только что эти сведения есть, но не то, где они находятся.
Как и для большинства команд Linux, поведение strings можно изменять при помощи параметров. Самым первым является -t, который позволяет нам предписывать основание, по которому мы желаем получать данные вывода. Этот параметр приведёт к тому же результату, что и ранее, но каждая строка будет снабжена смещением в байтах, показывающем где именно это находилось в нашем файле ввода. Теперь при поиске конкретного фрагмента текста можно непосредственно перейти к тому месту на диске, в котором это текст был обнаружен. Листинг 2.25 отражает те же самые данные, что и Листинг 2.24, но на этот раз для отображения значения местоположения искомой строки применяется -td. Эти параметры -td будут отображать значение байта смещения в десятичном виде.
Листинг 2.25. Выдержка из вывода команды strings для /dev/sda2 с отображением в десятичном виде значения смещения, по которому обнаружены строки.
$ sudo strings -td /dev/sda2
3 NTFS
111 NTFSu
227 TCPAu
251 fSfSfU
327 fY[ZfYfY
398 A disk read error occurred
427 BOOTMGR is missing
...[snip]...
Как и ожидалось, первое вхождение строки NTFS расположено по смещению 3. Программма шестнадцатеричного просмотра теперь может быть применена для перехода непосредственно к представляющему интерес пункту.
Поиск с помощью (e)grep
Семейство команд grep делает возможным для пользователя выявлять определённые текстовые шаблоны в больших объёмов данных. grep (general regular expression parser - синтаксический анализатор общих регулярных выражений) выполняет в текстовых данных поиск регулярных выражений, шаблонов, которые отражают искомые нами текстовые свойства. Когда grep обнаруживает совпадение для своего шаблона, его пользователю отображается вся строка, в которой произошло это совпадение, целиком. Их можно применять для фильтрации из нашего анализа не представляющих интерес текстовых данных. Самые простые регулярные выражения просто содержат реальный текст. Листинг 2.26 отражает поиск root в файле /etc/passwd.
Листинг 2.26. Применение grep для поиска root в файле /etc/passwd.
$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$
Однако регулярные выражения могут применяться для поиска намного большего чем простой поиск точного текста. Они могут применяться для поиска адреса электронной почты, IP адресов, номеров кредитных карт и так далее. И в самом деле, при помощи регулярного выражения можно отыскать любые структурированные текстовые сведения. Большинство инструментов цифровой криминалистики применяют их во включённых по умолчанию модулях поиска строк.
Полное введение в grep и регулярные выражения далеко выходит за рамки данной книги. Тем не менее, это именно та тема, которая может оказаться чрезвычайно полезной и её подробностям стоит уделить время.
В данной главе рассматривается операционная система Linux и, в более широком плане, природа программного обеспечения с открытым исходным кодом. Для цифровой криминалистики применение программного обеспечения с открытым исходным кодом даёт возможность проверки применяемых методов, а тем самым повышает уверенность в результатах избранных инструментов. Подобная повышенная степень уверенности подразумевает меньшую вероятность судебных ошибок.
ОС GNU/Linux рассматривается как классический пример программного обеспечения с открытым исходным кодом. Ядро Linux поддерживает большое число файловых систем, что превращает его в идеальную систему применения для криминалистики файловой системы. GNU/Linux к тому же предоставляет полигон инструментариев, который может применяться в цифровой криминалистике. Они включают в свой состав инструменты хэширования, поиска в тексте, представления информации и тому подобного. Помимо таких встроенных инструментов, также имеется большое число доступного для цифровой криминалистики специфического инструментария. Оно будет представлено в Главе 4. Данные факты превращают GNU/Linux в идеального претендента на применение в качестве рабочей станции цифровой криминалистики.
Ниже приведены темы, предлагаемые для обсуждения в отношении Linux как платформы криминалистики и программного обеспечения с открытым исходным кодом. Студентам надлежит более детально изучить эти вопросы для их обсуждения.
-
Обсудите преимущества программного обеспечения с открытым исходным кодом перед программным обеспечением с закрытым исходным кодом.
-
Почему именно программное обеспечение с открытым исходным кодом в особенности подходит для криминалистики файловых систем (и цифровой криминалистики в целом)?
-
По вашему собственному мнению, в чём основная причина применения программного обеспечения с открытым исходным кодом при расследованиях?
-
Даёт ли какие- либо преимущества при цифровом расследовании программное обеспечение с закрытым исходным кодом перед программным обеспечением с открытым исходным кодом. Если так, то каковы, по вашему мнению, эти преимущества?
-
Какими конкретными преимуществами обладает Linux перед прочими операционными системами в отношении криминалистического анализа файловых систем?
-
Какие проблемы вы предвидите, если криминалистическое сообщество примет Linux в качестве "стандартной" операционной системы?
-
Такие цифровые дистрибутивы криминалистики как Deft и Caine обладают большим числом преимуществ для цифрового следователя. Видите ли вы какие- либо недостатки при использовании таких специализированных дистрибутивов вместо универсального дистрибутива при цифровой криминалистике файловых систем?
-
Применяйте Linux! В качестве последнего "упражнения" этой главы рекомендуется воспользоваться ОС Linux (если вы этого ещё не сделали). Все представленные в оставшейся части этой книги примеры будут выполнены в терминале Linux. Поэтому знание данной ОС существенно облегчит знакомство с этой книгой ... к тому же, я убеждён, что вы влюбитесь в эту ОС, как только познакомитесь с ней поближе.
Digital Forensics with Open Source Tools: Using Open Source Platform Tools for Performing Computer Forensics on Target Systems: Windows, Mac, Linux, UNIX, etc. Altheide, C. and Carvey, H.A. (2011). Rockland, MA: Syngress; Oxford.
Design and implementation of Linux based workflow for digital forensics investigation., Ashawa, M.A. and Ntonja, M. (2019). International Journal of Computer Applications 181 (49): 40–46.
Linux Command Line and Shell Scripting Bible.. Bresnahan, R. (2021). SL, Hoboken, NJ: Wiley. {3rd, free}
10 advantages of open source for the enterprise. Bromhead, B. (2017). по состоянию на 29.03.2025.
Open source digital forensics tools: the legal argument 1. Carrier, B. (2002). в редакции April 2009
Disclosure in criminal cases. Citizensinformation.ie (2024). по состоянию на 29.03.2025.
Free Software Foundation (2019)., Working Together for Free Software. по состоянию на 29.03.2025.
Non-party disclosure Garda Ombudsman (2024). по состоянию на 29.03.2025.
Top 10 Hex Editors for Linux. GeeksforGeeks (2021). по состоянию на 29.03.2025.
History of Linux. GeeksforGeeks (Last Updated : 18 Mar, 2024). по состоянию на 29.03.2025.
What is Copyleft?. gnu.org (2024). по состоянию на 29.03.2025
A review of comparative study of MD5 and SSH security algorithm. Gupta, S., Goyal, N., and Aggarwal, K. (2014). International Journal of Computers and Applications 104 (14): 1–4.
The history of Linux: how time has shaped the penguin. Hayward, D. (2012). TechRadar. по состоянию на 29.03.2025.
How many programming languages are there? Lestal, J. (2020). DevSkiller - Powerful tool to test developers skills по состоянию на 29.03.2025.
Is the open way a better way? Digital forensics using open source tools.. Manson, D., Carlin, A., Ramos, S. et al. (2007). In: 2007 40th Annual Hawaii International Conference on System Sciences (HICSS’07), –266b. IEEE.
Running Linux. Matthias, K.D. and Welsh, M. (2006). Sebastopol, CA: O’Reilly. {4th ed, free}
Linux Bible. 10th ed. Negus, C. (2020). John Wiley & Sons Canada, Limited. {archive.org, free}
https://www.oreilly.com/library/view/unix-and-linux/9780134278308/. 5th ed. Nemeth, E., Snyder, G., Hein, T.R. et al. (2017). Prentice Hall. {4th ed, free}
Practical Forensic Imaging: Securing Digital Evidence with Linux Tools. Nikkel, B. (2016).San Francisco.
What is open source?. OpenSource (2019). по состоянию на 29.03.2025.
Analysis of digital forensic tools. Sachdeva, S., Raina, B.L., and Sharma, A. (2020). Journal of Computational and Theoretical Nanoscience 17 (6): 2459–2467.
Analysis and Simulation of Kali Linux Digital Forensic Tools. Santoshi, D., Pulgam, N., and Mane, V. (2022).
What Does Disclosure Mean in Law? UpCounsel (2024). по состоянию на 29.03.2025.
Linux turns 30: the biggest events in its history so far. Vaughan-Nichols, S.J. (2024). по состоянию на 29.03.2025
A basic guide to disclosure. Williams, R. (2024). Weightmans. по состоянию на 29.03.2025.