
инструмент для пентестеров, помогающий найти вкусные конфеты, от @l0ss и @Sh3r4 ( Twitter: @/mikeloss и @/sh3r4_hax )

Snaffler — это инструмент для пентестеров и редтимеров, помогающий найти вкусные конфетные иголки (в основном учетные данные, но он гибкий) в куче ужасно скучных стогов сена (огромная среда Windows/AD).
Он также может быть полезен другим людям, занимающимся другими вещами, но он явно НЕ предназначен для использования в качестве инструмента «аудита».
Уф, ладно. Но мы не несём ответственности за результаты. Мы написали всё это для вас, но ничего страшного. Мы не злимся, просто разочарованы.
snaffler.exe -s -o snaffler.log
В общих чертах — он получает список компьютеров Windows из Active Directory, затем распространяет свои «снаффлерные» щупальца на все эти компьютеры, чтобы выяснить, на каких из них есть общие файловые ресурсы и можете ли вы их прочитать.
Затем ЕЩЁ БОЛЬШЕ «снаффлерных» щупалец перечисляют все файлы в этих общих ресурсах и используют ОБУЧЕННЫЙ АРТЕФАКТНЫЙ ИНТЕЛЛЕКТ для МАШИН, чтобы выяснить, какие из них могут заинтересовать такого грязного маленького хакера, как вы.
На самом деле он не делает никаких ML-штук, потому что для правильного выполнения этого потребуются обучающие данные, а это потребовало бы огромного количества времени, которого у нас нет. Вместо этого, как и все хорошие «ML»-проекты, он просто использует кучу if-выражений и регулярок.
Вот так!
Если вы «просто запустите EXE-шник на машине, входящей в домен, в контексте доменного пользователя» (как людям было сказано делать с Grouper2, сразу после чего они запускали его со всеми включенными ключами verbose/debug, так что он выплёвывал несколько сотен мегабайт трассировок стека), то он в основном ничего не сделает. Это наша идея шутки™ над людьми, которые не читают README-файлы, потому что мы монстры.
ОДНАКО... если добавить правильные заклинания, то включится вышеупомянутый L.A.I.M. и вывалятся пути к файлам, где могут быть конфетки.
Ключевые заклинания:
-o Включает вывод результатов в файл. Вероятно, это нужно, если вы не используете -s. Например, -o C:\users\thing\snaffler.log
-s Включает вывод результатов в stdout сразу после их обнаружения. Вероятно, это нужно, если вы не используете -o.
-v Управляет уровнем детализации. Варианты: Trace (самый подробный), Degub (менее подробный, меньше «губ»), Info (ещё менее подробный, по умолчанию) и Data (только результаты). Например, -v debug.
-m Включает и назначает выходной каталог, в который Snaffler будет автоматически копировать (или «Снаффлить», если хотите) любые найденные файлы, которые ему понравятся.
-l Максимальный размер файлов (в байтах) для «Снаффлинга». По умолчанию 10000000, что составляет примерно 10 МБ.
-i Отключает обнаружение компьютеров и общих ресурсов, требует указать путь к каталогу для поиска файлов.
-n Отключает обнаружение компьютеров, принимает список хостов через запятую или входной файл для поиска общих ресурсов и файлов. Обратите внимание: если указан файл, входные данные должны быть путём, например, C:\targets.txt или .\targets.txt.
-y Форматирует вывод в TSV.
-b Пропускает правила LAIM, которые находят менее интересные вещи; настройте число от 0 до 3.
-f Ограничивает поиск общих файловых ресурсов через DFS (Distributed File System) — это должно быть значительно незаметнее, чем по умолчанию, при этом охватывая самые большие общие ресурсы во многих организациях.
-a Пропускает перечисление файлов и просто выдаёт список читаемых общих ресурсов на целевых хостах.
-u Заставляет Snaffler извлечь список имён учётных записей из AD, выбрать наиболее интересные и использовать их в правиле поиска.
-d Домен для поиска компьютеров для поиска общих ресурсов для поиска файлов. Легко.
-c Контроллер домена для запроса списка компьютеров домена.
-r Максимальный размер файла (в байтах), внутри которого будет производиться поиск интересных строк. По умолчанию 500k.
-j Сколько байт контекста по обе стороны от найденных строк в файлах показывать, например, -j 200.
-z Путь к конфигурационному файлу, который определяет всё вышеперечисленное и многое другое! Подробнее см. ниже. Укажите -z generate, чтобы сгенерировать пример конфигурационного файла с именем .\default.toml.
-t Тип лога для вывода. В настоящее время поддерживаются варианты: plain и JSON. По умолчанию plain.
-x Максимальное количество потоков. Не устанавливайте ниже 4, иначе всё сломается.
-p Путь к каталогу, полному правил в формате .toml. Snaffler загрузит все эти правила вместо набора правил по умолчанию.
Надеюсь, этот аннотированный пример поможет:
Эту запись лога следует читать примерно слева направо:
... а остальная часть строки (серым цветом) — это небольшой фрагмент контекста из файла, где было совпадение.
В данном случае мы нашли значения ASP.NET validationKey и decryptionKey, которые могут позволить нам выполнить RCE веб-приложения с помощью какой-нибудь хацкерской десериализации. Ура!
Примечание: после создания этого скриншота Sh3r4 добавил функцию, которая добавляет имя текущего пользователя и имя хоста в начало каждой строки. Но я не хочу переделывать скриншот.
Каждый магический метод поиска файлов L.A.I.M. делает такие вещи, как:
Поиск по точному совпадению расширения файла, то есть любой файл с расширением, совпадающим с соответствующим списком слов, будет возвращён. Это предназначено для расширений файлов, которые почти всегда содержат конфетки, например .kdbx, .vmdk, .ppk и т.д.
Поиск по точному совпадению имени файла (без учёта регистра). Это предназначено для имён файлов, которые почти всегда содержат конфетки, например id_rsa, shadow, NTDS.DIT и т.д.
Поиск по точному совпадению расширения файла (ещё один список слов), ЗАТЕМ «греппинг» содержимого любых совпадающих файлов на предмет определённых ключевых слов (ещё один, ещё один список слов). Это предназначено для расширений файлов, которые иногда содержат конфетки, но где, скорее всего, будет много мусора. Например, web.config иногда содержит учётные данные базы данных, но часто также содержит скучную ерунду конфигурации IIS без паролей. Это (например) найдёт всё, оканчивающееся на .config, затем выполнит grep по этим строкам, включая (но не ограничиваясь): connectionString, password, PRIVATE KEY и т.д.