usbrip: USB-форензика для Линуксов, или Как Алиса стала Евой

usbrip: USB-форензика для Линуксов, или Как Алиса стала Евой

Life-Hack

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


Краткий очерк того, что здесь будет происходить (дабы незаинтересованные сразу могли покинуть тред): около 2-х недель назад ко мне обратился знакомый (далее "Боб") с просьбой о помощи в доказательстве факта измены своей подруги (далее "Алиса"), апеллируя к тому, что "ты ж программист". Согласен, довольно необычный аргумент в такой ситуации, но технари же всесильны, разве нет 

? Конечно, я согласился, ибо предстояло интересное расследование компьютерной активности в поисках аномальных следов любовника на ноутбуке подруги друга (заковыристо!), что обещало хоть как-то разбавить мои серые буди. В этой статье поговорим об опенсорсной утилите usbrip, написанной энтузиастом-соотечественником (насколько я могу судить по профилю на Гитхабе) для мониторинга истории USB-подключений под Линуксами, моем опыте ее использования и применения к "боевым" задачам.


Предыстория событий


Явился ко мне, значит, Боб и говорит, мол, чувствую я, что моя мне изменяет: романтика ушла, задерживаться после работы стала и т. д. Сказал, что недавно ездил в командировку и уверен, что, если его догадки коррелируют с истиной, то уж в эти дни точно должно было произойти что-то такое, что послужит прямым доказательством ее вины. На мой ответ, что я не сыскное агентство, он объяснил, почему обратился ко мне: расследование-то, оказалось компьютерным! "Эва как, брат...", – подумал я, и проследовал к ним на квартиру смотреть на злосчастный подругин лэптоп (ее, конечно, в тот момент дома не было).


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


В какой-то момент меня осенило: каждый раз, когда я бывал у этой пары, Алиса оставляла заряжать свой телефон от ноутбука. Не знаю, чем вызвано столь необычное увлечение (странно, но розеток в пределах досягаемости я у них тоже не видел, может поэтому), но случалось это регулярно. "Это может сыграть мне на руку", – подумал я, забрал с собой системные логи (с разрешения друга, естественно) и благополучно ушел для анализа дампов во-свояси.

(Отвечаю на немой вопрос, который, думаю, появился у большинства из вас: да, мне тоже непонятно, почему у Алисы, не связанной со сферой айти, стоит Убунту на домашнем ноутбуке. Приятеля я допытовать по этому поводу не стал, но предположу, что так было дешевле при покупке, а ставить привычные Окна – руки не дошли. Одна из версий.)


Дома


Итак, в моем распоряжении оказалось 8 syslog'ов (/var/log/syslog/var/log/syslog.1/var/log/syslog.2.gz, ..., /var/log/syslog.7.gz), в которых предположительно кроется убийца измена. Как будем искать? Писать собственный парсер ради такого случая было сильно лень, да и время не позволяло, а ручками grep'ать каждый лог – замучаешься, поэтому было принято волевое решение, спросить у Гугла. Гугл посоветовал утилиту, под названием usbrip, написанную на питоне третьей версии. "Почему нет", – решил я, да и репозиторий чувака выглядел K P A C N B O.


Далее об установке и использовании.


Использование


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


По умолчанию все команды будем выполнять из домашнего каталога. Для начала подготовим виртуальную среду и поставим нужные пакеты (работаю под Kali, так что промпт терминала в листингах тоже будет Kali'вский за исключением того, что # заменю на $, чтобы маркдаун не блочил хайлайт синтаксиса bash'а

# При необходимости установим менеджер виртуальных окружений
root@kali:~$ apt install python-virtualenv

# Создадим и активируем виртуальное окружение
root@kali:~$ virtualenv -p python3 usbrip-venv
root@kali:~$ . usbrip-venv/bin/activate

# Установим необходимые зависимости (2 пакета)
(usbrip-venv) root@kali:~$ pip install terminaltables termcolor

# Загрузим софтину и сменим директорию
(usbrip-venv) root@kali:~$ git clone https://github.com/snovvcrash/usbrip.git usbrip && cd usbrip

Для начала проверим работоспособность:

(usbrip-venv) root@kali:~/usbrip$ python3 usbrip.py banner

Если в итоге получили симпатичный баннер тулзы, можно мучить дальше:

Мы будем пользоваться лишь одной функцией утилиты (к моему удивлению, этого оказалось достаточно), а именно – events history:

root@kali:~/usbrip$ python3 usbrip.py events history -e -d "May 23" "May 24" "May 25" "May 26" "May 27" "May 28" "May 29" -f <СПИСОК_СИСЛОГОВ_ДЛЯ_АНАЛИЗА>

Этим действием я попросил все внешние USB-устройства, подключенные к данному лэптому в период за 23.05-29.05. Конечно, вид команды, приведшей к нужному результату (обличению злодея), был получен методом проб и ошибок, и вам я представляю только конечный вариант. Почему выбран именно такой временной отрезок, будет сказано ниже.


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

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

Очевидны следующие паттерны:

  1. Каждое утро (перед работой?) Алиса подключает к ноутбуку флешку Silicon Power 16 Gb, затем отключает примерно через 5 минут.
  2. В вечернее время (после работы?) Алиса подключает свой айфон на зарядку к ноутбуку примерно на 4 часа (но иногда забывает и оставляет до утра).
  3. В вечернее время (ближе ко сну?) Алиса подключает жесткий диск Seagate BUP Slim SL примерно на 2,5 часа (смотрит кино/сериал?).
  4. НЕОЖИДАННО 27-го мая к ноутбуку Алисы в 20:25:02 по МСК подключается Ведроид Сосунг SAMSUNG Android к шине 3-2 примерно на 7 часов (выделено страшным красным прямоугольником).

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


Реконструкция событий в период с 23.05 по 29.05


Алиса работает на пол ставки: 23-е, 24-е, 25-е мая 2018 года (среда, четверг и пятница соответственно) были ее рабочими днями. Каждое утро перед работой Алиса подключает свою компактную дамскую флешку Silicon Power, которую носит на брелоке на ключах, для формирования плейлиста на грядущий день. На это ей требуется около пяти минут. После этого она работает-на-работе, слушает музыку со своей флешки, приходит домой, загружает ноутбук и ставит свой айфон (с серийным номером USB-модуля 3a134be282ddc846b794fc83f2a53a6245620b06) на зарядку. Далее, по желанию, она действительно может посмотреть серию-другую-третью "13 причин почему" (хз, что это, говорят сериал такой...).


Теперь о том, что происходило в следующие дни: 25-го мая, как можно видеть из логов, ритуал завершился не полностью. Причиной тому стала внезапная пятница и поход отмечать грядущую командировку друга (уехал днем 26-го, приехал вечером 28-го) шумной компанией в бар после работы. Как следствие, 26-го мая пара вернулась домой только к часу ночи, в чем можно убедиться по логу загрузки флешки Jetflash Mass Storage Device, которую Алисе дала её подруга, чтобы та скинула себе фотки. После этого Алиса по традиции поставила айфон на зарядку, пара попыталась посмотреть фильм с винчестера Seagate BUP Slim SL, но, видимо, попытки не увенчались успехом, т. к. оба устройства были отключены от компьютера только утром в районе 11-ти часов.


Потом Боб во второй половине дня уехал в командировку, Алиса его благополучно проводила и... пропала до 20:16:13, когда вместе со своим айфоном на зарядку был поставлен SAMSUNG (отключенный впоследствии лишь поздно ночью). После "разговора на чистоту" Боба с Алисой было выяснено, что да, действительно после того, как Боб уехал в командировку, на квартиру пришел злостный обладатель самсунга (у-у-ух, никогда их не долюбливал), пробыл там всю ночь, и уехал только 28-го мая после обеда. Одновременно с Алисой, которая, в свою очередь, отправилась встречать благоверного в аэропорт. Боб с Алисой вернулись домой к полуночи (когда календарь уже перелистнул страничку на 29 мая), когда девушка вновь поставила свой айфон на зарядку.


Последующие дни шли согласно устоявшимся ритуалам Алисы: флешка – утром, айфон и жд – вечером. И все бы ничего, если бы идиллию не разрушил злостный Я. Хотя мне не стыдно.

(Конечно, все точечные детали, описанные выше, были получены после разговора с Бобом, угадывать события прошлого по syslog'ам прога не умеет).


Пара слов о программе


Интересное замечание: если бы Боб выполнил установку этой утилиты заранее на компьютер девушки, задал список доверенных USB-устройств и настроил запуск проги по crontab'у (что, кстати, подробно описано в репозитории), возможно, ему не потребовалось бы вмешивать в свой семейные распри посторонних (aka меня), ибо посмотреть "нарушителей" можно было бы спокойно самому. Такие дела.


Конечно, как мне видится, такой функционал в программе изначально закладывался для отслеживания выполнений корпоративных политик в офисах (работающих на Линуксах), но теперь автор может указать еще один способ применения блока violations у себя в README

Итого


Пара рассталась, сердце Боба разбито, Алиса на самом деле оказалась злостной Евой, моя верная возлюбленная (теперь я, к слову, умею проверять на верность, так что аккуратней, дорогая) пожала плечами, а я добавил в коллекцию интересную форензик-тулзу.


Suum cuique


Благодарю за внимание.


Links

(репозиторий) snovvcrash/usbrip

(статья на Хабре про инструмент) Linux-форензика в лице трекинга истории подключений USB-устройств

Источник