full
by Dark Insiderотслеживаем историю USB-устройств
Сегодня я расскажу вам о таком инструменте как usbrip.
Usbrip - простой криминалистический инструмент с интерфейсом командной строки для отслеживания артефактов USB-устройств (истории USB-событий) в GNU/Linux (например, историю событий USB, события «Подключён» и «Отключён») на Linux машинах.
Установка в Kali Linux
sudo
apt install
python3-venv p7zip-full -y
git clone https://github.com/snovvcrash/usbrip
cd
usbrip/
chmod
+x ./installers/install.sh
sudo
-H ./installers/install.sh -s
cd
usbrip -h
Описание
Как известно, операционные системы на базе GNU/Linux очень трепетно относятся к логированию разного рода событий, и подключение/отключение USB-устройств не является исключением. В совокупности с одним из пунктов UNIX-философии о «текстовых потоках, как универсальных интерфейсах» информацию об артефактах таких событий (с разной степенью подробности) в зависимости от дистрибутива можно обнаружить в одном или нескольких из следующих текстовых файлов:
/var/log/kern.log*
;/var/log/syslog*
;/var/log/messages*
;/var/log/dmesg*
;/var/log/daemon.log*
.
FORENSIC-PROOF даже показывает нам такую картинку на этот счет (немного неполную, но неважно)
Для своей работы usbrip находит универсальные для всех сборок Linux, основанных на Debian (Ubuntu, Linux Mint и др.) и RPM (CentOS, Fedora, openSUSE и др.), лог-файлы, а именно: /var/log/syslog*
или /var/log/messages*
, парсит их в поисках нужной информации и обликает найденные следы подключений USB-устройств в красивые таблички (или списки — как угодно).
Также usbrip умеет:
- создавать списки авторизированных (доверенных) устройств в виде JSON-файлов;
- искать «события-нарушителей» на основе списка доверенных устройств: такие события (подключение/отключение USB), в которых участвовали USB-устройства, не отмеченные как доверенные;
- искать дополнительную информацию о USB-устройстве по его VID (Vendor ID) и/или PID (Product ID).
Справка:
Получить список доступных модулей:
$ python3 usbrip.py -h
Получить список доступных подмодулей для конкретного модуля:
$ python3 usbrip.py <модуль> -h
Получить список доступных опций для конкретного подмодуля:
$ python3 usbrip.py <модуль> <подмодуль> -h
Синтаксис
Вывод на экран баннера утилиты.
$ python3 usbrip.py banner
Просмотр истории USB-подключений.
$ python3 usbrip.py events history [-q] [-t | -l] [-e] [-n КОЛИЧЕСТВО_СОБЫТИЙ] [-d ДАТА [ДАТА ...]] [-c СТОЛБЕЦ [СТОЛБЕЦ ...]] [-f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...]]
Формирование списка авторизированных (доверенных) USB-устройств.
$ python3 usbrip.py events gen_auth <ВЫХОДНОЙ_ФАЙЛ.JSON> [-a ПРИЗНАК [ПРИЗНАК ...]] [-q] [-e] [-n КОЛИЧЕСТВО_СОБЫТИЙ] [-d ДАТА [ДАТА ...]] [-f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...]]
Поиск "событий-нарушителей" на основе списка доверенных устройств.
$ python3 usbrip.py events violations <ВХОДНОЙ_ФАЙЛ.JSON> [-a ПРИЗНАК [ПРИЗНАК ...]] [-q] [-t | -l] [-e] [-n КОЛИЧЕСТВО_СОБЫТИЙ] [-d ДАТА [ДАТА ...]] [-c СТОЛБЕЦ [СТОЛБЕЦ ...]] [-f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...]]
Поиск дополнительной информации об устройстве по его VID и/или PID по базе данных идентификаторов.
$ python3 usbrip.py ids search [-q] [--vid VID] [--pid PID] [--offline]
Обновление (загрузка) локальной базы данных идентификаторов USB-устройств.
$ python3 usbrip.py ids download [-q]
Опции
Опции, поддерживаемые подмодулями 'events history', 'events gen_auth', 'events violations', 'ids search', 'ids download': -q, --quiet опустить вывод баннера, информационных (зелёных) сообщений, а также не задавать вопросы по ходу выполнения ####################################################################### Опции, поддерживаемые подмодулями 'events history', 'events gen_auth', 'events violations': -e, --external искать только съёмные USB-устройства (у которых есть информация об отсоединении) -n КОЛИЧЕСТВО_СОБЫТИЙ, --number КОЛИЧЕСТВО_СОБЫТИЙ количество последних по дате событий, которое будет выведено -d ДАТА [ДАТА ...], --date ДАТА [ДАТА ...] список дат, по которым будет производится фильтрация событий при поиске -f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...], --file ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...] список лог-файлов (если не указано, поиск истории событий будет произведен по лог-файлам по умолчанию: /var/log/syslog* или /var/log/messages* в зависимости от версии ОС) ####################################################################### Опции, поддерживаемые подмодулями 'events history', 'events violations': -t, --table сформировать вывод в виде таблицы (если размера окна терминала не хватает для корректного отображения таблицы, вывод автоматически будет сформирован в виде списка; при указании флага -t вывод будет сформирован в виде таблицы принудительно) -l, --list сформировать вывод в виде списка -c СТОЛБЕЦ [СТОЛБЕЦ ...], --column СТОЛБЕЦ [СТОЛБЕЦ ...] список столбцов, которые будут использованы при построении таблицы (имеет действие только при формировании вывода в виде таблицы); разрешённые ключи: "conn", "user", "vid", "pid", "prod", "manufact", "serial", "port", "disconn". ####################################################################### Опции, поддерживаемые подмодулями 'events gen_auth', 'events violations': -a ПРИЗНАК [ПРИЗНАК ...], --attribute ПРИЗНАК [ПРИЗНАК ...] список признаков, которые будут использованы при построении списка авторизированных устройств (а также при поиске "событий-нарушителей" в случае подмодуля 'events violations'); разрешённые ключи: "vid", "pid", "prod", "manufact", "serial". ####################################################################### Опции, поддерживаемые подмодулями 'ids search', 'ids download': --vid VID vendor ID или идентификатор производителя USB-устройства (обычно 4 шестнадцатиричных цифры) --vid PID product ID или идентификатор модели USB-устройства (обычно 4 шестнадцатиричных цифры) --offline если указано, поиск дополнительной информации о USB-устройстве по базе данных идентификаторов будет произведен без предварительного ее (базы) обновления
Примеры использования
Показать историю подключений всех USB-устройств, опуская баннер, информационные (зелёные) сообщения, а также не задавая вопросы по ходу выполнения (-q, --quite
), сформировав вывод в виде списка (-l, --list
), включив в него 100 последних найденных событий (-n КОЛИЧЕСТВО_СОБЫТИЙ, --number КОЛИЧЕСТВО_СОБЫТИЙ
):
$ python3 usbrip.py events history -ql -n 100
Показать историю подключений съёмных USB-устройств (-e, --external
), сформировав вывод в форме таблицы с полями (столбцами) «Connected», «VID», «PID», «Disconnected» и «Serial Number» (-c СТОЛБЕЦ [СТОЛБЕЦ ...], --column СТОЛБЕЦ [СТОЛБЕЦ ...]
), отфильтровав поиск по датам (-d ДАТА [ДАТА ...], --date ДАТА [ДАТА ...]
), взяв при этом информацию из внешних лог-файлов (-f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...], --file ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...]
):
$ python3 usbrip.py events history -et -c conn vid pid disconn serial -d "Dec 9" "Dec 10" -f /var/log/syslog.1 /var/log/syslog.2.gz
Построить таблицу истории подключений всех USB-устройств и перенаправить вывод в файл для дальнейшего анализа. В том случае, если поток вывода не стандартный stdout ("|"
либо ">"
к примеру) в выходных данных не будут присутствовать спец. символы, отвечающие за цвет шрифта в терминале, поэтому текстовый файл не будет замусорен нечитаемыми символами. Также нужно отметить, что usbrip использует некоторые UNICODE-константы, поэтому было бы неплохо сразу конвертировать кодировку создаваемого файла в UTF-8 для их корректного отображения (например с помощью encov
), а также использовать символы новой строки в Windows-стиле для лучшей переносимости (например с помощью awk
):
$ python3 usbrip.py history events -t | awk '{ sub("$", "\r"); print }' > usbrip.txt && enconv -x UTF8 usbrip.txt
Примечание: избавиться от спец. символов, отвечающих за цвет можно и в том случае, если вывод уже был направлен в stdout. Для этого необходимо скопировать полученные данные в новый файл usbrip.txt
и добавить еще одну awk
-инструкцию:
$ awk '{ sub("$", "\r"); gsub("\\x1B\\[[0-?]*[ -/]*[@-~]", ""); print }' usbrip.txt && enconv -x UTF8 usbrip.txt
Создать список доверенных устройств в виде JSON-файла (trusted/auth.json
), содержащего поля «VID» и «PID» первых трех устройств, подключенных 26-го сентября:
$ python3 usbrip.py events gen_auth trusted/auth.json -a vid pid -n 3 -d "Sep 26"
Найти среди истории подключений съёмных USB-устройств «события-нарушители» на основе списка доверенных устройств (trusted/auth.json
) по полю «PID» и сформировать вывод в виде таблицы с полями «Connected», «VID» и «PID»:
$ python3 usbrip.py events violations trusted/auth.json -a pid -et -c conn vid pid
Найти дополнительную информацию о USB-устройстве на основе его VID'а и PID'а:
$ python3 usbrip.py ids search --vid 0781 --pid 5580
Загрузить/обновить базу данных идентификаторов USB-устройств (источник здесь):
$ python3 usbrip.py ids download
Спасибо за прочтение, надеюсь статья была полезна.