Приветствую всех заинтересованных!

В современном мире все привыкли к быстрым коммуникациям через мессенджеры, многозадачности и возможности получать всплывающие на экран уведомления о событиях или сообщениях, не открывая при этом предварительно самого приложения. В Windows по аналогии с другими OS есть свой механизм для доставки уведомлений пользователю — Windows Push Notification Services (WNS). И при расследовании какого‑либо инцидента для форенсик специалиста могут быть полезны сведения из уведомлений Windows. Например представим ситуацию, что злоумышленник использовал мессенджер «WhatsApp», который использует механизм WNS для доставки уведомлений, но после использования удалил приложение и его данные. Как раз в таком случае и будут полезны сведения сохраняемые самой операционной системой и относящие к WNS.

Сведения из Windows Push Notification Services позволяют узнать следующее:

  • На хосте запускалось то или иное приложение, т.к. каждое уведомление связано с конкретным приложением. Можно узнать дату установки этого приложения.

  • Часть сообщений из мессенджеров, имена/никнеймы/почтовые адреса. Эта информация может содержаться в Payload уведомления.

  • Действия, которые были выполнены некоторыми приложениями, т.к. ряд приложений могут выполнять действия в фоне, увеломления оповещают пользователя о результате/необходимости обратить внимание на что‑то. Это может содержаться в Payload уведомления.

Все уведомления в Windows делятся на три типа:

  • Toast — всплывающее прямоугольное уведомление в правом нижнем углу экрана (в Windows 8.1 правый верхний угол).

Внешний вид Toast уведомления
Внешний вид Toast уведомления
  • Tile — присутствует только в Windows 10/8.1 представляет собой «живую» плитку (анимации и обновляемая информация на плитке) в меню Пуск.

Внешний вид Tile для Windows 10 и 8/8.1
Внешний вид Tile для Windows 10 и 8/8.1
  • Badge - цифра или символ рядом с иконкой приложения в Taskbar.

Внешний вид Badge уведомлений.
Внешний вид Badge уведомлений.

Сведения о них хранятся в файле %LOCALAPPDATA%\Microsoft\Windows\Notifications\wpndatabase.db, данный файл представляет собой SQLite базу данных. Внутри этой базы данных основной интерес будут представлять таблицы «Notification» и «NotificationHandler». Стоит отметить, что у уведомлений есть срок жизни и операционная система не сохраняет уведомления в базе данных насовсем. Например, если пользователь смахнул, нажал на уведомление или открыл приложение, которое отправило его, то оно будет удалено из базы. Однако, при удачном стечении обстоятельств недавно убранные системой записи из wpndatabase.db можно восстановить с помощью файла WAL (write‑ahead log), который находится в той же директории и имеет название wpndatabase.db‑wal. WAL представляет собой файл транзакций, все изменения в таблицах сначала будут отображены внутри этого файла. Прошлые изменения перестанут быть видны в файле WAL, когда в нём будет размещено более 1000 страниц (значение по умолчанию, прагма wal_autocheckpoint) (вся база SQLite состоит из страниц, размер страницы равен степени двойки, для wpndatabase.db размер страницы 4096 байт).

Заданные для wpndatabase.db PRAGMA
Заданные для wpndatabase.db PRAGMA

Вернёмся к таблицам внутри wpndatabase.db. В таблице «NotificationHandler» нас будет интересовать столбцы:

  • PrimaryID — название приложения, которое может отправлять уведомления.

  • RecordID — числовой идентификатор этого приложения.

  • CreatedTime — соответствует дате установки приложения.

А в таблице «Notification» следующие:

  • HandlerID — соответствует RecordID из «NotificationHandler».

  • Type — тип уведомления.

  • Payload — содержимое уведомления, обычно в XML формате.

  • PayloadType — формат Payload.

  • ArrivalTime — время поступления уведомления в формате Windows Filetime.

Рассмотрим инструменты для работы с этим видом доказательств. Из свободно распостраняемых утилит для форенсики wpndatabase.db хорошо подходит sql сценарий Notifications.sql. Он удобно группирует сведения из двух обозначенных нами таблиц.

Результат выполнения Notifications.sql
Результат выполнения Notifications.sql

Для восстановления уведомлений, которые убраны из основной базы, но которые могут оставаться в WAL подходит утилита walitean в сочетании с следующим sql запросом:

SELECT unknown0 AS Id, unknown1 AS HandlerId, unknown2 AS ActiveId, unknown3 AS Type, 
unknown4 AS Payload, unknown5 AS Tag, unknown6 AS 'Group', 
datetime((unknown7/10000000)-11644473600, 'unixepoch') AS ExpiryTime, 
datetime((unknown8/10000000)-11644473600, 'unixepoch') AS ArrivalTime, 
unknown9 AS DataVersion FROM IIBTBTTIIUTIU

Результат также получается достаточно удобный для анализа, за исключением того, что придётся вручную сопоставить HandlerID с именем приложения.

Восстановленные из WAL записи
Восстановленные из WAL записи

Также отдельно стоит отметить, что walitean написан на устаревшем Python 2, но тем не менее отлично отработал в Windows 11 на тестовом стенде. Подводя итог, артефакты из истории уведомлений могут быть хорошим вспомогательным источником, но учитывая небольшой срок жизни самих уведомлений и малый объём ротируемых данных в WAL, выжать из этого артефакта максимум информации не получится. Продолжение следует...

Комментарии (0)