Анализ файлов¶

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

События жизненного цикла файловh

ключевые события, которые могут произойти во время существования файла :, file_over_new_connection ,, file_gap и. Обработка любого из этих событий предоставляет некоторую информацию о файле, например, какое сетевое соединение и протокол передают файл, сколько байтов было передано на данный момент и его тип MIME.

Вот простой пример:

file_analysis_01.zeek¶
 1 2 3 4 5 6 7 8 91011121314151617181920 

 событие connection_state_remove (c  : connection) {print "connection_state_remove";  напечатать c $ uid;  напечатать c $ id;  for (s в c $ service) print s;  } событие file_state_remove (f: fa_file) {print "file_state_remove";  напечатать f $ id;  for (cid в f $ conns) {print f $ conns [cid] $ uid;  print cid;  } print f $ source;  } 

 $ zeek -r http/ get.trace file_analysis_01.zeekfile_state_removeFakNcS1Jfe01uljb3CHhAvVGS1DHFjwGM9 [orig_h = 141.142.228.5, orig_p = 59856/TCP, resp_h = 192.150.187.43, resp_p = 80/TCP] HTTPconnection_state_removeCHhAvVGS1DHFjwGM9 [orig_h = 141.142.228.5, orig_p = 59856/TCP, resp_h = 192.150.187.43  , resp_p = 80/tcp] HTTP 

Пока это не выполняет интересного анализа, но подчеркивает сходство между анализом соединений и файлов. Соединения идентифицируются обычным кортежем из 5 или удобной строкой UID, тогда как файлы идентифицируются просто строкой того же формата, что и UID соединения. Таким образом, существуют уникальные способы идентифицировать как файлы, так и соединения, а файлы содержат ссылки на соединение (или соединения), которое их передало.

Добавление анализа¶

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

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

Вот пример простой пример того, как использовать анализатор файлов MD5 для вычисления MD5 простых текстовых файлов:

file_analysis_02.zeek¶
 1 2 3 4 5 6 7 8 9101112 

 событие file_sniff (f: fa_file, meta: fa_metadata) {if (! meta? $ mime_type) return;  напечатать "новый файл", f $ id;  if (meta $ mime_type == "текст/простой") Files :: add_analyzer (f, Files :: ANALYZER_MD5);  } событие file_hash (f: fa_file, kind: string, hash: string) {print "file_hash", f $ id, kind, hash;  } 

 $ zeek -r http/ get.trace file_analysis_02.zeeknew file, FakNcS1Jfe01uljb3file_hash, FakNcS1Jfe01uljb3, md5, 397168fd09991a0e712254df7bc639ac 

, который может иметь параметры, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки файла, который может потребоваться для настройки некоторых параметров файла, для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребовать настройки для некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут потребоваться для настройки некоторых параметров файла, которые могут иметь: p>

 событие file_new (f: fa_file) {Files :: add_analyzer (f, Files :: ANALYZER_EXTRACT, [$ extract_filename = "myfile"]);  } 

В этом случае анализатор извлечения файлов не генерирует никаких дальнейших событий, но имеет эффект записи содержимого файла в локальную файловую систему в местоположение, полученное в результате объединения пути, указанного в, и строки myfile . Конечно, для сети, в которой передается более одного файла, вероятно, предпочтительнее указать разные пути извлечения для каждого файла, в отличие от этого примера.

Независимо от того, какие анализаторы файлов в конечном итоге воздействуют на файл общая информация о файле (например, размер, время последней передачи данных, тип MIME и т. д.) регистрируется в files.log.

Интеграция структуры ввода¶

FAF поставляется с простым способом интеграции с, так что Zeek может анализировать файлы из внешних источников так же, как он анализирует файлы, которые он видит поступающими трафик из сетевого интерфейса, который он отслеживает. Требуется только вызов Input :: add_analysis :

file_analysis_03. zeek¶
 1 2 3 4 5 6 7 8 910111213141516171819202122232425 

 redef exit_only_after_terminate = T; событие file_new (f: fa_file) {распечатать "новый файл", f $ id;  Files :: add_analyzer (f, Files :: ANALYZER_MD5);  } событие file_state_remove (f: fa_file) {print "file_state_remove";  Input :: remove (f $ source);  terminate ();  } событие file_hash (f: fa_file, kind: string, hash: string) {print "file_hash", f $ id, kind, hash;  } событие zeek_init () {локальный источник: строка = "./myfile";  Input :: add_analysis ([$ source = source, $ name = source]);  } 

Обратите внимание, что поле «источник» соответствует полю «имя» Input :: AnalysisDescription , поскольку это то, что структура ввода использует для уникальной идентификации входного потока.

Пример вывода вышеуказанного скрипта может быть:

 $ echo "Привет, мир"> myfile $ zeek file_analysis_03.zeeknew file, FZedLu4Ajcvge02jA8file_hash, FZedLu4Ajcvge02jA8, md5, f0ef7081fileb153900>   p> Ничего особенного, но он, по крайней мере, проверяет, что анализатор файлов MD5 видел все байты входного файла и правильно рассчитал контрольную сумму!  

Оцените статью
techsly.ru
Добавить комментарий