diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 0000000000..19b6eca259 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,4 @@ +formats: [] + +python: + version: 3 diff --git a/CHANGES b/CHANGES index 4c11114ff0..65dbbe03d0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,27 @@ +2.6-61 | 2019-01-10 13:40:04 -0600 + + * Add RTD yaml config file (Jon Siwek, Corelight) + + * Remove some Bro usages in main TOC entries (Jon Siwek, Corelight) + + * Remove "contents" Sphinx directive usages (Jon Siwek, Corelight) + + * Add a `make livehtml` target (Jon Siwek, Corelight) + + * Use sourcecode Sphinx directive more widely (Jon Siwek, Corelight) + + * Use Sphinx RTD theme for user manual (Jon Siwek, Corelight) + + * Remove unused Sphinx extensions (Jon Siwek, Corelight) + + * Remove broxygen Sphinx integration (Jon Siwek, Corelight) + + * Remove Sphinx btest integrations and tests (Jon Siwek, Corelight) + 2.6-46 | 2019-01-10 09:10:08 -0800 - * improve performance of catch and release script (Juston Azonn, Corelight) + * improve performance of catch and release script (Justin Azoff, Corelight) 2.6-43 | 2019-01-07 09:50:43 -0800 diff --git a/Makefile b/Makefile index 5642762e11..21d99d8fca 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,10 @@ doc: configured docclean: configured $(MAKE) -C $(BUILD) $@ +livehtml: + @mkdir -p build/doc/html + sphinx-autobuild --ignore "testing/*" --ignore "*.git/*" --ignore "*.lock" --ignore "*.pyc" --ignore "*.swp" --ignore "*.swpx" --ignore "*.swx" -b html ./doc ./build/doc/html + dist: @test -e ../$(VERSION_FULL) && rm -ri ../$(VERSION_FULL) || true @cp -R . ../$(VERSION_FULL) @@ -63,4 +67,4 @@ configured: @test -d $(BUILD) || ( echo "Error: No build/ directory found. Did you run configure?" && exit 1 ) @test -e $(BUILD)/Makefile || ( echo "Error: No build/Makefile found. Did you run configure?" && exit 1 ) -.PHONY : all install clean doc docclean dist distclean configured +.PHONY : all install clean doc docclean dist distclean configured livehtml diff --git a/VERSION b/VERSION index 41cdd2539e..4d72fbf0fe 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6-46 +2.6-61 diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 0edf2429ab..215b2c9e4f 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,82 +1,20 @@ -set(SPHINX_INPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/sphinx_input) -set(SPHINX_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/sphinx_output) -set(BROXYGEN_SCRIPT_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/broxygen_script_output) -set(BROXYGEN_CACHE_DIR ${CMAKE_CURRENT_BINARY_DIR}/broxygen_cache) -set(BROCCOLI_DOCS_SRC ${CMAKE_BINARY_DIR}/aux/broccoli/doc/html) -set(BROCCOLI_DOCS_DST ${CMAKE_BINARY_DIR}/html/broccoli-api) +set(html_output_dir ${CMAKE_CURRENT_BINARY_DIR}/html) -# Find out what BROPATH to use when executing bro. -execute_process(COMMAND ${CMAKE_BINARY_DIR}/bro-path-dev - OUTPUT_VARIABLE BROPATH - RESULT_VARIABLE retval - OUTPUT_STRIP_TRAILING_WHITESPACE) -if (NOT ${retval} EQUAL 0) - message(FATAL_ERROR "Problem setting BROPATH") -endif () - -# Configure the Sphinx config file (expand variables CMake might know about). -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in - ${CMAKE_CURRENT_BINARY_DIR}/conf.py - @ONLY) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/broxygen.conf.in - ${CMAKE_CURRENT_BINARY_DIR}/broxygen.conf - @ONLY) - -add_custom_target(sphinxdoc - # Copy the template documentation to build directory to use as input tree - # for Sphinx. This is needed because some parts are dynamically generated - # in to that tree by Bro/Broxygen. - COMMAND rsync -q -r --copy-links --times --delete - --filter='protect scripts/*' - ${CMAKE_CURRENT_SOURCE_DIR}/ ${SPHINX_INPUT_DIR} - # Use Bro/Broxygen to dynamically generate reST for all Bro scripts. - COMMAND BROPATH=${BROPATH} - ${CMAKE_BINARY_DIR}/src/bro - -X ${CMAKE_CURRENT_BINARY_DIR}/broxygen.conf - broxygen >/dev/null - # Rsync over the generated reST to the Sphinx source tree in the build dir. - COMMAND rsync -q -r --copy-links --times --delete --filter='protect *.bro' - ${BROXYGEN_SCRIPT_OUTPUT}/ ${SPHINX_INPUT_DIR}/scripts - # Rsync over Bro scripts to the Sphinx source tree in the build dir. - # These are used by :download: references in the generated script docs. - COMMAND rsync -q -r --copy-links --times --delete - --filter='protect /base/bif/*' --filter='protect *.rst' - --filter='include */' --filter='include *.bro' --filter='exclude *' - ${CMAKE_SOURCE_DIR}/scripts/ ${SPHINX_INPUT_DIR}/scripts - # Rsync over Bro scripts created by BIF compiler to the Sphinx source tree. - COMMAND rsync -q -r --copy-links --times --delete - --filter='protect *.rst' --filter='include */' - --filter='include *.bro' --filter='exclude *' - ${CMAKE_BINARY_DIR}/scripts/base/bif/ - ${SPHINX_INPUT_DIR}/scripts/base/bif - # Use Sphinx to build HTML. +add_custom_target(zeek-doc-html COMMAND sphinx-build -b html - -c ${CMAKE_CURRENT_BINARY_DIR} - -d ${SPHINX_OUTPUT_DIR}/doctrees - ${SPHINX_INPUT_DIR} - ${SPHINX_OUTPUT_DIR}/html + -c ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${html_output_dir} # Create symlink to the html output directory for convenience. COMMAND "${CMAKE_COMMAND}" -E create_symlink - ${SPHINX_OUTPUT_DIR}/html + ${html_output_dir} ${CMAKE_BINARY_DIR}/html WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "[Sphinx] Generate HTML documentation in ${CMAKE_BINARY_DIR}/html") - -add_dependencies(sphinxdoc bro) - -add_custom_target(sphinxdoc_clean - COMMAND "${CMAKE_COMMAND}" -E remove_directory ${SPHINX_INPUT_DIR} - COMMAND "${CMAKE_COMMAND}" -E remove_directory ${SPHINX_OUTPUT_DIR} - COMMAND "${CMAKE_COMMAND}" -E remove_directory ${BROXYGEN_SCRIPT_OUTPUT} - COMMAND "${CMAKE_COMMAND}" -E remove_directory ${BROXYGEN_CACHE_DIR} - VERBATIM) + COMMENT "[Sphinx] Generate Bro HTML documentation in ${html_output_dir}") if (NOT TARGET doc) add_custom_target(doc) endif () -add_custom_target(docclean) -add_dependencies(doc sphinxdoc) -add_dependencies(docclean sphinxdoc_clean) +add_dependencies(doc zeek-doc-html) diff --git a/doc/README b/doc/README index 5d1b685d40..79491b15b9 100644 --- a/doc/README +++ b/doc/README @@ -2,13 +2,12 @@ Documentation ============= -This directory contains Bro documentation in reStructuredText format +This directory contains documentation in reStructuredText format (see http://docutils.sourceforge.net/rst.html). It is the root of a Sphinx source tree and can be modified to add more -common/general documentation, style sheets, JavaScript, etc. The Sphinx -config file is produced from ``conf.py.in``, and can be edited to change -various Sphinx options. +documentation, style sheets, JavaScript, etc. The Sphinx config file +is ``conf.py``. There is also a custom Sphinx domain implemented in ``ext/bro.py`` which adds some reST directives and roles that aid in generating useful @@ -18,30 +17,12 @@ a similar fashion. The ``make doc`` target in the top-level Makefile can be used to locally render the reST files into HTML. That target depends on: -* Python interpreter >= 2.5 -* `Sphinx `_ >= 1.0.1 -* Doxygen (required only for building the Broccoli API doc) - -After completion, HTML documentation is symlinked in ``build/html``. - -There's also a ``make docclean`` target which deletes any files -created during the documentation build process. - -Notes for Writing Documentation -------------------------------- - -* If you want to refer to a document that's part of the - distribution, it currently needs to be copied or otherwise symlinked - somewhere in to this Sphinx source tree. Then, it can be referenced - in a toc tree or with the :doc: role. Use the :download: role to - refer to static files that will not undergo sphinx rendering. - -* If you want to refer to a page on the Bro web site, use an HTTP URL. - -Guidelines ----------- - -TODO. - +* Python interpreter >= 2.7 +* `Sphinx `_ +* `Read the Docs Sphinx Theme `_ +After the build completes, HTML documentation is symlinked in ``build/html``. +There's also a ``make livehtml`` target in the top-level Makefile that +is useful for editing the reST files and seeing changes rendered out live +to a separate HTML browser. diff --git a/doc/_static/960.css b/doc/_static/960.css deleted file mode 100644 index 22c5e18180..0000000000 --- a/doc/_static/960.css +++ /dev/null @@ -1 +0,0 @@ -body{min-width:960px}.container_12,.container_16{margin-left:auto;margin-right:auto;width:960px}.grid_1,.grid_2,.grid_3,.grid_4,.grid_5,.grid_6,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12,.grid_13,.grid_14,.grid_15,.grid_16{display:inline;float:left;margin-left:10px;margin-right:10px}.push_1,.pull_1,.push_2,.pull_2,.push_3,.pull_3,.push_4,.pull_4,.push_5,.pull_5,.push_6,.pull_6,.push_7,.pull_7,.push_8,.pull_8,.push_9,.pull_9,.push_10,.pull_10,.push_11,.pull_11,.push_12,.pull_12,.push_13,.pull_13,.push_14,.pull_14,.push_15,.pull_15{position:relative}.container_12 .grid_3,.container_16 .grid_4{width:220px}.container_12 .grid_6,.container_16 .grid_8{width:460px}.container_12 .grid_9,.container_16 .grid_12{width:700px}.container_12 .grid_12,.container_16 .grid_16{width:940px}.alpha{margin-left:0}.omega{margin-right:0}.container_12 .grid_1{width:60px}.container_12 .grid_2{width:140px}.container_12 .grid_4{width:300px}.container_12 .grid_5{width:380px}.container_12 .grid_7{width:540px}.container_12 .grid_8{width:620px}.container_12 .grid_10{width:780px}.container_12 .grid_11{width:860px}.container_16 .grid_1{width:40px}.container_16 .grid_2{width:100px}.container_16 .grid_3{width:160px}.container_16 .grid_5{width:280px}.container_16 .grid_6{width:340px}.container_16 .grid_7{width:400px}.container_16 .grid_9{width:520px}.container_16 .grid_10{width:580px}.container_16 .grid_11{width:640px}.container_16 .grid_13{width:760px}.container_16 .grid_14{width:820px}.container_16 .grid_15{width:880px}.container_12 .prefix_3,.container_16 .prefix_4{padding-left:240px}.container_12 .prefix_6,.container_16 .prefix_8{padding-left:480px}.container_12 .prefix_9,.container_16 .prefix_12{padding-left:720px}.container_12 .prefix_1{padding-left:80px}.container_12 .prefix_2{padding-left:160px}.container_12 .prefix_4{padding-left:320px}.container_12 .prefix_5{padding-left:400px}.container_12 .prefix_7{padding-left:560px}.container_12 .prefix_8{padding-left:640px}.container_12 .prefix_10{padding-left:800px}.container_12 .prefix_11{padding-left:880px}.container_16 .prefix_1{padding-left:60px}.container_16 .prefix_2{padding-left:120px}.container_16 .prefix_3{padding-left:180px}.container_16 .prefix_5{padding-left:300px}.container_16 .prefix_6{padding-left:360px}.container_16 .prefix_7{padding-left:420px}.container_16 .prefix_9{padding-left:540px}.container_16 .prefix_10{padding-left:600px}.container_16 .prefix_11{padding-left:660px}.container_16 .prefix_13{padding-left:780px}.container_16 .prefix_14{padding-left:840px}.container_16 .prefix_15{padding-left:900px}.container_12 .suffix_3,.container_16 .suffix_4{padding-right:240px}.container_12 .suffix_6,.container_16 .suffix_8{padding-right:480px}.container_12 .suffix_9,.container_16 .suffix_12{padding-right:720px}.container_12 .suffix_1{padding-right:80px}.container_12 .suffix_2{padding-right:160px}.container_12 .suffix_4{padding-right:320px}.container_12 .suffix_5{padding-right:400px}.container_12 .suffix_7{padding-right:560px}.container_12 .suffix_8{padding-right:640px}.container_12 .suffix_10{padding-right:800px}.container_12 .suffix_11{padding-right:880px}.container_16 .suffix_1{padding-right:60px}.container_16 .suffix_2{padding-right:120px}.container_16 .suffix_3{padding-right:180px}.container_16 .suffix_5{padding-right:300px}.container_16 .suffix_6{padding-right:360px}.container_16 .suffix_7{padding-right:420px}.container_16 .suffix_9{padding-right:540px}.container_16 .suffix_10{padding-right:600px}.container_16 .suffix_11{padding-right:660px}.container_16 .suffix_13{padding-right:780px}.container_16 .suffix_14{padding-right:840px}.container_16 .suffix_15{padding-right:900px}.container_12 .push_3,.container_16 .push_4{left:240px}.container_12 .push_6,.container_16 .push_8{left:480px}.container_12 .push_9,.container_16 .push_12{left:720px}.container_12 .push_1{left:80px}.container_12 .push_2{left:160px}.container_12 .push_4{left:320px}.container_12 .push_5{left:400px}.container_12 .push_7{left:560px}.container_12 .push_8{left:640px}.container_12 .push_10{left:800px}.container_12 .push_11{left:880px}.container_16 .push_1{left:60px}.container_16 .push_2{left:120px}.container_16 .push_3{left:180px}.container_16 .push_5{left:300px}.container_16 .push_6{left:360px}.container_16 .push_7{left:420px}.container_16 .push_9{left:540px}.container_16 .push_10{left:600px}.container_16 .push_11{left:660px}.container_16 .push_13{left:780px}.container_16 .push_14{left:840px}.container_16 .push_15{left:900px}.container_12 .pull_3,.container_16 .pull_4{left:-240px}.container_12 .pull_6,.container_16 .pull_8{left:-480px}.container_12 .pull_9,.container_16 .pull_12{left:-720px}.container_12 .pull_1{left:-80px}.container_12 .pull_2{left:-160px}.container_12 .pull_4{left:-320px}.container_12 .pull_5{left:-400px}.container_12 .pull_7{left:-560px}.container_12 .pull_8{left:-640px}.container_12 .pull_10{left:-800px}.container_12 .pull_11{left:-880px}.container_16 .pull_1{left:-60px}.container_16 .pull_2{left:-120px}.container_16 .pull_3{left:-180px}.container_16 .pull_5{left:-300px}.container_16 .pull_6{left:-360px}.container_16 .pull_7{left:-420px}.container_16 .pull_9{left:-540px}.container_16 .pull_10{left:-600px}.container_16 .pull_11{left:-660px}.container_16 .pull_13{left:-780px}.container_16 .pull_14{left:-840px}.container_16 .pull_15{left:-900px}.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0}.clearfix:before,.clearfix:after{content:'\0020';display:block;overflow:hidden;visibility:hidden;width:0;height:0}.clearfix:after{clear:both}.clearfix{zoom:1} diff --git a/doc/_static/basic.css b/doc/_static/basic.css deleted file mode 100644 index 26e3450b65..0000000000 --- a/doc/_static/basic.css +++ /dev/null @@ -1,522 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar input[type="text"] { - width: 170px; -} - -div.sphinxsidebar input[type="submit"] { - width: 30px; -} - -img { - border: 0; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li div.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable dl, table.indextable dd { - margin-top: 0; - margin-bottom: 0; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- general body styles --------------------------------------------------- */ - -a.headerlink { - visibility: hidden; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.field-list ul { - padding-left: 1em; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px 7px 0 7px; - background-color: #ffe; - width: 40%; - float: right; -} - -p.sidebar-title { - font-weight: bold; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px 7px 0 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -div.admonition dl { - margin-bottom: 0; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -dd p { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dt:target, .highlighted { - background-color: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.refcount { - color: #060; -} - -.optional { - font-size: 1.3em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -td.linenos pre { - padding: 5px 0px; - border: 0; - background-color: transparent; - color: #aaa; -} - -.highlight-guess { - overflow:auto; -} - -.highlight-none { - overflow:auto; -} - -table.highlighttable { - margin-left: 0.5em; - overflow:scroll; -} - -table.highlighttable td { - padding: 0 0.5em 0 0.5em; -} - -tt.descname { - background-color: transparent; - font-weight: bold; -# font-size: 1.2em; -} - -tt.descclassname { - background-color: transparent; -} - -tt.xref, a tt { - background-color: transparent; -# font-weight: bold; -} - -h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} diff --git a/doc/_static/broxygen-extra.css b/doc/_static/broxygen-extra.css deleted file mode 100644 index 051e12e0be..0000000000 --- a/doc/_static/broxygen-extra.css +++ /dev/null @@ -1,160 +0,0 @@ - -a.toc-backref { - color: #333; -} - -h1, h2, h3, h4, h5, h6, -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { - padding:0 0 0px 0; -} - -ul { - padding-bottom: 0px; -} - -h1 { - font-weight: bold; - font-size: 32px; - line-height:32px; - text-align: center; - padding-top: 3px; - margin-bottom: 30px; - font-family: Palatino,'Palatino Linotype',Georgia,serif;; - color: #000; - border-bottom: 0px; -} - -th.field-name -{ - white-space:nowrap; -} - -h2 { - margin-top: 50px; - padding-bottom: 5px; - margin-bottom: 30px; - border-bottom: 1px solid; - border-color: #aaa; - font-style: normal; -} - -div.section h3 { - font-style: normal; - } - -h3 { - font-size: 20px; - margin-top: 40px; - margin-bottom: 0¡px; - font-weight: bold; - font-style: normal; -} - -h3.widgettitle { - font-style: normal; -} - -h4 { - font-size:18px; - font-style: normal; - margin-bottom: 0em; - margin-top: 40px; - font-style: italic; -} - -h5 { - font-size:16px; -} - -h6 { - font-size:15px; -} - -.toc-backref { - color: #333; -} - -.contents ul { - padding-bottom: 1em; -} - -dl.namespace { - display: none; -} - -dl dt { - font-weight: normal; -} - -table.docutils tbody { - margin: 1em 1em 1em 1em; -} - -table.docutils td { - padding: 5pt 5pt 5pt 5pt; - font-size: 14px; - border-left: 0; - border-right: 0; -} - -dl pre { - font-size: 14px; -} - -table.docutils th { - padding: 5pt 5pt 5pt 5pt; - font-size: 14px; - font-style: normal; - border-left: 0; - border-right: 0; -} - -table.docutils tr:first-child td { - #border-top: 1px solid #aaa; -} - -.download { - font-family:"Courier New", Courier, mono; - font-weight: normal; -} - -dt:target, .highlighted { - background-color: #ccc; -} - -p { - padding-bottom: 0px; -} - -p.last { - margin-bottom: 0px; -} - -dl { - padding: 1em 1em 1em 1em; - background: #fffff0; - border: 1px solid #aaa; - -} - -dl { - margin-bottom: 10px; -} - - -table.docutils { - background: #fffff0; - border-collapse: collapse; - border: 1px solid #ddd; -} - -dl table.docutils { - border: 0; -} - -table.docutils dl { - border: 1px dashed #666; -} - - - diff --git a/doc/_static/broxygen-extra.js b/doc/_static/broxygen-extra.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/doc/_static/broxygen.css b/doc/_static/broxygen.css deleted file mode 100644 index ad06b0f9d9..0000000000 --- a/doc/_static/broxygen.css +++ /dev/null @@ -1,483 +0,0 @@ -/* Automatically generated. Do not edit. */ - - - - - -#bro-main, #bro-standalone-main { - padding: 0 0 0 0; - position:relative; - z-index:1; -} - -#bro-main { - margin-bottom: 2em; - } - -#bro-standalone-main { - margin-bottom: 0em; - padding-left: 50px; - padding-right: 50px; - } - -#bro-outer { - color: #333; - background: #ffffff; -} - -#bro-title { - font-weight: bold; - font-size: 32px; - line-height:32px; - text-align: center; - padding-top: 3px; - margin-bottom: 30px; - font-family: Palatino,'Palatino Linotype',Georgia,serif;; - color: #000; - } - -.opening:first-letter { - font-size: 24px; - font-weight: bold; - letter-spacing: 0.05em; - } - -.opening { - font-size: 17px; -} - -.version { - text-align: right; - font-size: 12px; - color: #aaa; - line-height: 0; - height: 0; -} - -.git-info-version { - position: relative; - height: 2em; - top: -1em; - color: #ccc; - float: left; - font-size: 12px; -} - -.git-info-date { - position: relative; - height: 2em; - top: -1em; - color: #ccc; - float: right; - font-size: 12px; -} - -body { - font-family:Arial, Helvetica, sans-serif; - font-size:15px; - line-height:22px; - color: #333; - margin: 0px; -} - -h1, h2, h3, h4, h5, h6, -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { - padding:0 0 20px 0; - font-weight:bold; - text-decoration:none; -} - -div.section h3, div.section h4, div.section h5, div.section h6 { - font-style: italic; -} - -h1, h2 { - font-size:27px; - letter-spacing:-1px; -} - -h3 { - margin-top: 1em; - font-size:18px; -} - -h4 { - font-size:16px; -} - -h5 { - font-size:15px; -} - -h6 { - font-size:12px; -} - -p { - padding:0 0 20px 0; -} - -hr { - background:none; - height:1px; - line-height:1px; - border:0; - margin:0 0 20px 0; -} - -ul, ol { - margin:0 20px 20px 0; - padding-left:40px; -} - -ul.simple, ol.simple { - margin:0 0px 0px 0; -} - -blockquote { - margin:0 0 0 40px; -} - -strong, dfn { - font-weight:bold; -} - -em, dfn { - font-style:italic; -} - -sup, sub { - line-height:0; -} - -pre, code { - white-space: pre; - overflow: auto; - margin-left: 0.25em; - margin-right: 0.25em; - word-wrap: normal; -} - -pre, code, tt { - font-family:"Courier New", Courier, mono; -} - -dl { - margin: 0 0 20px 0; -} - -dl dt { - font-weight: bold; -} - -li dl dt { - font-weight: normal; -} - -dd { - margin:0 0 20px 20px; -} - -small { - font-size:75%; -} - -.small-text { - font-size:75%; -} - -.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -a:link, -a:visited, -a:active -{ - color: #2a85a7; -} - -a:hover -{ - color:#c24444; -} - -h1, h2, h3, h4, h5, h6, -h1 a, h2 a, h3 a, h4 a, h5 a, h6 a -{ - color: #333; -} - -hr { - border-bottom:1px solid #ddd; -} - -pre { - color: #333; - background: #FFFAE2; - padding: 7px 5px 3px 5px; - margin-bottom: 25px; - margin-top: 0px; -} - -ul { - padding-bottom: 5px; - } - -h1, h2 { - margin-top: 30px; - } - -h1 { - margin-bottom: 50px; - margin-bottom: 20px; - padding-bottom: 5px; - border-bottom: 1px solid; - border-color: #aaa; - } - -h2 { - font-size: 24px; - } - -pre { - -moz-box-shadow:0 0 6px #ddd; - -webkit-box-shadow:0 0 6px #ddd; - box-shadow:0 0 6px #ddd; -} - -a { - text-decoration:none; - } - -p { - padding-bottom: 15px; - } - -p, dd, li { - text-align: justify; - } - -li { - margin-bottom: 5px; - } - - - -#footer .widget_links ul a, -#footer .widget_links ol a -{ - color: #ddd; -} - -#footer .widget_links ul a:hover, -#footer .widget_links ol a:hover -{ - color:#c24444; -} - - -#footer .widget li { - padding-bottom:10px; -} - -#footer .widget_links li { - padding-bottom:1px; -} - -#footer .widget li:last-child { - padding-bottom:0; -} - -#footer .widgettitle { - color: #ddd; -} - - -.widget { - margin:0 0 40px 0; -} - -.widget, .widgettitle { - font-size:12px; - line-height:18px; -} - -.widgettitle { - font-weight:bold; - text-transform:uppercase; - padding:0 0 10px 0; - margin:0 0 20px 0; - line-height:100%; -} - -.widget UL, .widget OL { - list-style-type:none; - margin:0; - padding:0; -} - -.widget p { - padding:0; -} - -.widget li { - padding-bottom:10px; -} - -.widget a { - text-decoration:none; -} - -#bro-main .widgettitle, -{ - color: #333; -} - - -.widget img.left { - padding:5px 10px 10px 0; -} - -.widget img.right { - padding:5px 0 10px 10px; -} - -.ads .widgettitle { - margin-right:16px; -} - -.widget { - margin-left: 1em; -} - -.widgettitle { - color: #333; -} - -.widgettitle { - border-bottom:1px solid #ddd; -} - - -.sidebar-toc ul li { - padding-bottom: 0px; - text-align: left; - list-style-type: square; - list-style-position: inside; - padding-left: 1em; - text-indent: -1em; - } - -.sidebar-toc ul li li { - margin-left: 1em; - margin-bottom: 0px; - list-style-type: square; - } - -.sidebar-toc ul li li a { - font-size: 8pt; -} - -.contents { - padding: 10px; - background: #FFFAE2; - margin: 20px; - } - -.topic-title { - font-size: 20px; - font-weight: bold; - padding: 0px 0px 5px 0px; - text-align: center; - padding-top: .5em; -} - -.contents li { - margin-bottom: 0px; - list-style-type: square; -} - -.contents ul ul li { - margin-left: 0px; - padding-left: 0px; - padding-top: 0em; - font-size: 90%; - list-style-type: square; - font-weight: normal; -} - -.contents ul ul ul li { - list-style-type: none; -} - -.contents ul ul ul ul li { - display:none; -} - -.contents ul li { - padding-top: 1em; - list-style-type: none; - font-weight: bold; -} - -.contents ul { - margin-left: 0px; - padding-left: 2em; - margin: 0px 0px 0px 0px; -} - -.note, .warning, .error { - margin-left: 2em; - margin-right: 2em; - margin-top: 1.5em; - margin-bottom: 1.5em; - padding: 0.5em 1em 0.5em 1em; - overflow: auto; - border-left: solid 3px #aaa; - font-size: 15px; - color: #333; -} - -.admonition p { - margin-left: 1em; - } - -.admonition-title { - font-size: 16px; - font-weight: bold; - color: #000; - padding-bottom: 0em; - margin-bottom: .5em; - margin-top: 0em; -} - -.btest-cmd .hll { - font-weight: bold; - background: #FFFAE2; - } - -.btest-include .hll { - display: block; - text-align: center; - font-family: Palatino; - background: #FFFAE2; - } - -.btest-include .hll * { - color: #aaa; - } - -.linenodiv pre { - margin-left: 0px; - margin-right: 0px; - width: 1.5em; - text-align: right; - background: #000; -} - -.btest-cmd .code pre, .btest-include .code pre { - margin-left: 0px; -} diff --git a/doc/_static/logo-bro.png b/doc/_static/logo-bro.png deleted file mode 100644 index 96cc5d443c..0000000000 Binary files a/doc/_static/logo-bro.png and /dev/null differ diff --git a/doc/_static/pygments.css b/doc/_static/pygments.css deleted file mode 100644 index 3c96f6ae4e..0000000000 --- a/doc/_static/pygments.css +++ /dev/null @@ -1,58 +0,0 @@ -.hll { background-color: #ffffcc } -.c { color: #aaaaaa; font-style: italic } /* Comment */ -.err { color: #F00000; background-color: #F0A0A0 } /* Error */ -.k { color: #0000aa } /* Keyword */ -.cm { color: #aaaaaa; font-style: italic } /* Comment.Multiline */ -.cp { color: #4c8317 } /* Comment.Preproc */ -.c1 { color: #aaaaaa; font-style: italic } /* Comment.Single */ -.cs { color: #0000aa; font-style: italic } /* Comment.Special */ -.gd { color: #aa0000 } /* Generic.Deleted */ -.ge { font-style: italic } /* Generic.Emph */ -.gr { color: #aa0000 } /* Generic.Error */ -.gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.gi { color: #00aa00 } /* Generic.Inserted */ -.go { color: #888888 } /* Generic.Output */ -.gp { color: #555555 } /* Generic.Prompt */ -.gs { font-weight: bold } /* Generic.Strong */ -.gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.gt { color: #aa0000 } /* Generic.Traceback */ -.kc { color: #0000aa } /* Keyword.Constant */ -.kd { color: #0000aa } /* Keyword.Declaration */ -.kn { color: #0000aa } /* Keyword.Namespace */ -.kp { color: #0000aa } /* Keyword.Pseudo */ -.kr { color: #0000aa } /* Keyword.Reserved */ -.kt { color: #00aaaa } /* Keyword.Type */ -.m { color: #009999 } /* Literal.Number */ -.s { color: #aa5500 } /* Literal.String */ -.na { color: #1e90ff } /* Name.Attribute */ -.nb { color: #00aaaa } /* Name.Builtin */ -.nc { color: #00aa00; text-decoration: underline } /* Name.Class */ -.no { color: #aa0000 } /* Name.Constant */ -.nd { color: #888888 } /* Name.Decorator */ -.ni { color: #800000; font-weight: bold } /* Name.Entity */ -.nf { color: #00aa00 } /* Name.Function */ -.nn { color: #00aaaa; text-decoration: underline } /* Name.Namespace */ -.nt { color: #1e90ff; font-weight: bold } /* Name.Tag */ -.nv { color: #aa0000 } /* Name.Variable */ -.ow { color: #0000aa } /* Operator.Word */ -.w { color: #bbbbbb } /* Text.Whitespace */ -.mf { color: #009999 } /* Literal.Number.Float */ -.mh { color: #009999 } /* Literal.Number.Hex */ -.mi { color: #009999 } /* Literal.Number.Integer */ -.mo { color: #009999 } /* Literal.Number.Oct */ -.sb { color: #aa5500 } /* Literal.String.Backtick */ -.sc { color: #aa5500 } /* Literal.String.Char */ -.sd { color: #aa5500 } /* Literal.String.Doc */ -.s2 { color: #aa5500 } /* Literal.String.Double */ -.se { color: #aa5500 } /* Literal.String.Escape */ -.sh { color: #aa5500 } /* Literal.String.Heredoc */ -.si { color: #aa5500 } /* Literal.String.Interpol */ -.sx { color: #aa5500 } /* Literal.String.Other */ -.sr { color: #009999 } /* Literal.String.Regex */ -.s1 { color: #aa5500 } /* Literal.String.Single */ -.ss { color: #0000aa } /* Literal.String.Symbol */ -.bp { color: #00aaaa } /* Name.Builtin.Pseudo */ -.vc { color: #aa0000 } /* Name.Variable.Class */ -.vg { color: #aa0000 } /* Name.Variable.Global */ -.vi { color: #aa0000 } /* Name.Variable.Instance */ -.il { color: #009999 } /* Literal.Number.Integer.Long */ diff --git a/doc/_templates/breadcrumbs.html b/doc/_templates/breadcrumbs.html new file mode 100644 index 0000000000..0ce26f7d04 --- /dev/null +++ b/doc/_templates/breadcrumbs.html @@ -0,0 +1,15 @@ +{% extends "!breadcrumbs.html" %} + +{% block breadcrumbs_aside %} +
  • +{% if pagename != "search" %} + {% if display_github %} + {% if github_version == "master" %} + {{ _('Edit on GitHub') }} + {% endif %} + {% elif show_source and has_source and sourcename %} + {{ _('View page source') }} + {% endif %} +{% endif %} +
  • +{% endblock %} diff --git a/doc/_templates/layout.html b/doc/_templates/layout.html index 4debd1d90e..cebb59637b 100644 --- a/doc/_templates/layout.html +++ b/doc/_templates/layout.html @@ -1,113 +1,7 @@ {% extends "!layout.html" %} -{% block extrahead %} - - - - - - -{% endblock %} - -{% block header %} - -{% endblock %} - -{% block relbar2 %}{% endblock %} -{% block relbar1 %}{% endblock %} - -{% block content %} - -
    -
    - -
    - -
    - {{ relbar() }} -
    - -
    - {% block body %} - {% endblock %} -
    -
    - - -
    - -
    - -
    -
    - - - - - {% if next %} -
    -

    - Next Page -

    -

    - {{ next.title }} -

    -
    - {% endif %} - - {% if prev %} -
    -

    - Previous Page -

    -

    - {{ prev.title }} -

    -
    - {% endif %} - - {%- if pagename != "search" %} - - - {%- endif %} - -
    -
    - -
    -
    -
    - - Copyright {{ copyright }}. - Last updated on {{ last_updated }}. - Created using Sphinx {{ sphinx_version }}. - -
    -
    -
    -
    - - -{% endblock %} - -{% block footer %} - -{% endblock %} +{% if READTHEDOCS and current_version %} + {% if current_version == "latest" or current_version == "stable" %} + {% set current_version = current_version ~ " (" ~ version ~ ")" %} + {% endif %} +{% endif %} diff --git a/doc/broids/index.rst b/doc/broids/index.rst index 96f50f8fa5..6a1850a312 100644 --- a/doc/broids/index.rst +++ b/doc/broids/index.rst @@ -1,9 +1,9 @@ .. _bro-ids: -======= -Bro IDS -======= +=== +IDS +=== An Intrusion Detection System (IDS) allows you to detect suspicious activities happening on your network as a result of a past or active @@ -24,8 +24,26 @@ rejected usernames and passwords occurring from a single address. We start by defining a threshold for the number of attempts, a monitoring interval (in minutes), and a new notice type. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/protocols/ftp/detect-bruteforcing.bro - :lines: 9-25 +.. sourcecode:: bro + :caption: detect-bruteforcing.bro + + module FTP; + + export { + redef enum Notice::Type += { + ## Indicates a host bruteforcing FTP logins by watching for too + ## many rejected usernames or failed passwords. + Bruteforcing + }; + + ## How many rejected usernames or passwords are required before being + ## considered to be bruteforcing. + const bruteforce_threshold: double = 20 &redef; + + ## The time period in which the threshold needs to be crossed before + ## being reset. + const bruteforce_measurement_interval = 15mins &redef; + } Using the ftp_reply event, we check for error codes from the `500 series `_ @@ -35,24 +53,130 @@ function to break down the reply code and check if the first digit is a "5" or not. If true, we then use the :ref:`Summary Statistics Framework ` to keep track of the number of failed attempts. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/protocols/ftp/detect-bruteforcing.bro - :lines: 52-60 +.. sourcecode:: bro + :caption: detect-bruteforcing.bro + + event ftp_reply(c: connection, code: count, msg: string, cont_resp: bool) + { + local cmd = c$ftp$cmdarg$cmd; + if ( cmd == "USER" || cmd == "PASS" ) + { + if ( FTP::parse_ftp_reply_code(code)$x == 5 ) + SumStats::observe("ftp.failed_auth", [$host=c$id$orig_h], [$str=cat(c$id$resp_h)]); + } + } Next, we use the SumStats framework to raise a notice of the attack when the number of failed attempts exceeds the specified threshold during the measuring interval. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/protocols/ftp/detect-bruteforcing.bro - :lines: 28-50 +.. sourcecode:: bro + :caption: detect-bruteforcing.bro + + event bro_init() + { + local r1: SumStats::Reducer = [$stream="ftp.failed_auth", $apply=set(SumStats::UNIQUE), $unique_max=double_to_count(bruteforce_threshold+2)]; + SumStats::create([$name="ftp-detect-bruteforcing", + $epoch=bruteforce_measurement_interval, + $reducers=set(r1), + $threshold_val(key: SumStats::Key, result: SumStats::Result) = + { + return result["ftp.failed_auth"]$num+0.0; + }, + $threshold=bruteforce_threshold, + $threshold_crossed(key: SumStats::Key, result: SumStats::Result) = + { + local r = result["ftp.failed_auth"]; + local dur = duration_to_mins_secs(r$end-r$begin); + local plural = r$unique>1 ? "s" : ""; + local message = fmt("%s had %d failed logins on %d FTP server%s in %s", key$host, r$num, r$unique, plural, dur); + NOTICE([$note=FTP::Bruteforcing, + $src=key$host, + $msg=message, + $identifier=cat(key$host)]); + }]); + } Below is the final code for our script. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/protocols/ftp/detect-bruteforcing.bro +.. sourcecode:: bro + :caption: detect-bruteforcing.bro -.. btest:: ftp-bruteforce + ##! FTP brute-forcing detector, triggering when too many rejected usernames or + ##! failed passwords have occurred from a single address. - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/ftp/bruteforce.pcap protocols/ftp/detect-bruteforcing.bro - @TEST-EXEC: btest-rst-include notice.log + @load base/protocols/ftp + @load base/frameworks/sumstats + + @load base/utils/time + + module FTP; + + export { + redef enum Notice::Type += { + ## Indicates a host bruteforcing FTP logins by watching for too + ## many rejected usernames or failed passwords. + Bruteforcing + }; + + ## How many rejected usernames or passwords are required before being + ## considered to be bruteforcing. + const bruteforce_threshold: double = 20 &redef; + + ## The time period in which the threshold needs to be crossed before + ## being reset. + const bruteforce_measurement_interval = 15mins &redef; + } + + + event bro_init() + { + local r1: SumStats::Reducer = [$stream="ftp.failed_auth", $apply=set(SumStats::UNIQUE), $unique_max=double_to_count(bruteforce_threshold+2)]; + SumStats::create([$name="ftp-detect-bruteforcing", + $epoch=bruteforce_measurement_interval, + $reducers=set(r1), + $threshold_val(key: SumStats::Key, result: SumStats::Result) = + { + return result["ftp.failed_auth"]$num+0.0; + }, + $threshold=bruteforce_threshold, + $threshold_crossed(key: SumStats::Key, result: SumStats::Result) = + { + local r = result["ftp.failed_auth"]; + local dur = duration_to_mins_secs(r$end-r$begin); + local plural = r$unique>1 ? "s" : ""; + local message = fmt("%s had %d failed logins on %d FTP server%s in %s", key$host, r$num, r$unique, plural, dur); + NOTICE([$note=FTP::Bruteforcing, + $src=key$host, + $msg=message, + $identifier=cat(key$host)]); + }]); + } + + event ftp_reply(c: connection, code: count, msg: string, cont_resp: bool) + { + local cmd = c$ftp$cmdarg$cmd; + if ( cmd == "USER" || cmd == "PASS" ) + { + if ( FTP::parse_ftp_reply_code(code)$x == 5 ) + SumStats::observe("ftp.failed_auth", [$host=c$id$orig_h], [$str=cat(c$id$resp_h)]); + } + } + +.. sourcecode:: console + + $ bro -r ftp/bruteforce.pcap protocols/ftp/detect-bruteforcing.bro + $ cat notice.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path notice + #open 2018-12-13-22-56-21 + #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude + #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double + 1389721084.522861 - - - - - - - - - FTP::Bruteforcing 192.168.56.1 had 20 failed logins on 1 FTP server in 0m37s - 192.168.56.1 - - - - Notice::ACTION_LOG 3600.000000 F - - - - - + #close 2018-12-13-22-56-21 As a final note, the :doc:`detect-bruteforcing.bro ` script above is diff --git a/doc/broxygen.conf.in b/doc/broxygen.conf.in deleted file mode 100644 index 1e70445f58..0000000000 --- a/doc/broxygen.conf.in +++ /dev/null @@ -1 +0,0 @@ -script * @BROXYGEN_SCRIPT_OUTPUT@/ diff --git a/doc/cluster/index.rst b/doc/cluster/index.rst index 93dd03d6d3..2a45435831 100644 --- a/doc/cluster/index.rst +++ b/doc/cluster/index.rst @@ -1,7 +1,7 @@ -======================== -Bro Cluster Architecture -======================== +==================== +Cluster Architecture +==================== Bro is not multithreaded, so once the limitations of a single processor core diff --git a/doc/conf.py.in b/doc/conf.py similarity index 80% rename from doc/conf.py.in rename to doc/conf.py index f7243b4527..adff691f71 100644 --- a/doc/conf.py.in +++ b/doc/conf.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Bro documentation build configuration file, created by sphinx-quickstart +# Zeek documentation build configuration file, created by sphinx-quickstart # # This file is execfile()d with the current directory set to its containing dir. # @@ -17,28 +17,7 @@ extensions = [] # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('sphinx_input/ext')) - -# ----- Begin of BTest configuration. ----- -btest = os.path.abspath("@CMAKE_SOURCE_DIR@/aux/btest") -brocut = os.path.abspath("@CMAKE_SOURCE_DIR@/build/aux/bro-aux/bro-cut") -bro = os.path.abspath("@CMAKE_SOURCE_DIR@/build/src") - -os.environ["PATH"] += (":%s:%s/sphinx:%s:%s" % (btest, btest, bro, brocut)) -sys.path.append(os.path.join(btest, "sphinx")) - -extensions += ["btest-sphinx"] - -btest_base="@CMAKE_SOURCE_DIR@/testing/btest" -btest_tests="doc/sphinx" -# ----- End of BTest configuration. ----- - -# ----- Begin of Broxygen configuration. ----- -extensions += ["broxygen"] -bro_binary = os.path.abspath("@CMAKE_SOURCE_DIR@/build/src/bro") -broxygen_cache="@BROXYGEN_CACHE_DIR@" -os.environ["BROPATH"] = "@BROPATH@" -# ----- End of Broxygen configuration. ----- +sys.path.insert(0, os.path.abspath('ext')) # -- General configuration ----------------------------------------------------- @@ -47,13 +26,10 @@ os.environ["BROPATH"] = "@BROPATH@" # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions += ['bro', 'rst_directive', 'sphinx.ext.todo', 'adapt-toc'] - -os.environ["BRO_SRC_ROOT"] = "@CMAKE_SOURCE_DIR@" -os.environ["DOC_ROOT"] = "@CMAKE_SOURCE_DIR@/doc" +extensions += ['bro', 'sphinx.ext.todo'] # Add any paths that contain templates here, relative to this directory. -templates_path = ['sphinx_input/_templates', 'sphinx_input/_static'] +templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' @@ -65,17 +41,19 @@ source_suffix = '.rst' master_doc = 'index' # General information about the project. -project = u'Bro' -copyright = u'2016, The Bro Project' +project = u'Zeek' +copyright = u'2018, The Zeek Project' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = '@VERSION_MAJ_MIN@' +with open('../VERSION', 'r') as f: + version = f.readline().strip() + # The full version, including alpha/beta/rc tags. -release = '@VERSION@' +release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -108,6 +86,8 @@ show_authors = True # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' +highlight_language = 'none' + # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] @@ -116,21 +96,30 @@ pygments_style = 'sphinx' # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'basic' +on_rtd = os.environ.get('READTHEDOCS', None) == 'True' + +if not on_rtd: + # only import and set the theme if we're building docs locally + import sphinx_rtd_theme + html_theme = 'sphinx_rtd_theme' + html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] html_last_updated_fmt = '%B %d, %Y' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -html_theme_options = { } +html_theme_options = { + 'collapse_navigation': False, + 'display_version': True, +} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v Documentation". -#html_title = None +html_title = u'Zeek User Manual v' + release # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None @@ -147,7 +136,7 @@ html_theme_options = { } # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['sphinx_input/_static'] +#html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. @@ -158,9 +147,9 @@ html_static_path = ['sphinx_input/_static'] #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. -html_sidebars = { -'**': ['localtoc.html', 'sourcelink.html', 'searchbox.html'], -} +#html_sidebars = { +#'**': ['localtoc.html', 'sourcelink.html', 'searchbox.html'], +#} # Additional templates that should be rendered to pages, maps page names to # template names. @@ -193,7 +182,7 @@ html_sidebars = { #html_file_suffix = None # Output file base name for HTML help builder. -htmlhelp_basename = 'Broxygen' +htmlhelp_basename = 'zeek-docs' # -- Options for LaTeX output -------------------------------------------------- @@ -206,8 +195,8 @@ htmlhelp_basename = 'Broxygen' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ('index', 'Bro.tex', u'Bro Documentation', - u'The Bro Project', 'manual'), + ('index', 'Zeek.tex', u'Zeek Documentation', + u'The Zeek Project', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of @@ -238,8 +227,8 @@ latex_documents = [ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'bro', u'Bro Documentation', - [u'The Bro Project'], 1) + ('index', 'bro', u'Zeek Documentation', + [u'The Zeek Project'], 1) ] # -- Options for todo plugin -------------------------------------------- diff --git a/doc/configuration/index.rst b/doc/configuration/index.rst index 508b3c1449..c418ec636c 100644 --- a/doc/configuration/index.rst +++ b/doc/configuration/index.rst @@ -5,8 +5,6 @@ Cluster Configuration ===================== -.. contents:: - A *Bro Cluster* is a set of systems jointly analyzing the traffic of a network link in a coordinated fashion. You can operate such a setup from a central manager system easily using BroControl because BroControl diff --git a/doc/devel/plugins.rst b/doc/devel/plugins.rst index bdc9305924..3cdb59cd65 100644 --- a/doc/devel/plugins.rst +++ b/doc/devel/plugins.rst @@ -1,7 +1,7 @@ -=================== -Writing Bro Plugins -=================== +=============== +Writing Plugins +=============== Bro internally provides a plugin API that enables extending the system dynamically, without modifying the core code base. That way diff --git a/doc/ext/adapt-toc.py b/doc/ext/adapt-toc.py deleted file mode 100644 index 12ee006977..0000000000 --- a/doc/ext/adapt-toc.py +++ /dev/null @@ -1,29 +0,0 @@ - -import sys -import re - -# Removes the first TOC level, which is just the page title. -def process_html_toc(app, pagename, templatename, context, doctree): - - if not "toc" in context: - return - - toc = context["toc"] - - lines = toc.strip().split("\n") - lines = lines[2:-2] - - toc = "\n".join(lines) - toc = "
      " + toc - - context["toc"] = toc - - # print >>sys.stderr, pagename - # print >>sys.stderr, context["toc"] - # print >>sys.stderr, "-----" - # print >>sys.stderr, toc - # print >>sys.stderr, "====" - -def setup(app): - app.connect('html-page-context', process_html_toc) - diff --git a/doc/ext/bro_lexer/__init__.py b/doc/ext/bro_lexer/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/doc/ext/bro_lexer/bro.py b/doc/ext/bro_lexer/bro.py deleted file mode 100644 index ae2566a8de..0000000000 --- a/doc/ext/bro_lexer/bro.py +++ /dev/null @@ -1,76 +0,0 @@ -from pygments.lexer import RegexLexer, bygroups, include -from pygments.token import * - -__all__ = ["BroLexer"] - -class BroLexer(RegexLexer): - name = 'Bro' - aliases = ['bro'] - filenames = ['*.bro'] - - _hex = r'[0-9a-fA-F_]+' - _float = r'((\d*\.?\d+)|(\d+\.?\d*))([eE][-+]?\d+)?' - _h = r'[A-Za-z0-9][-A-Za-z0-9]*' - - tokens = { - 'root': [ - # Whitespace - ('^@.*?\n', Comment.Preproc), - (r'#.*?\n', Comment.Single), - (r'\n', Text), - (r'\s+', Text), - (r'\\\n', Text), - # Keywords - (r'(add|alarm|break|case|const|continue|delete|do|else|enum|event' - r'|export|for|function|if|global|local|module|next' - r'|of|print|redef|return|schedule|when|while)\b', Keyword), - (r'(addr|any|bool|count|counter|double|file|int|interval|net' - r'|pattern|port|record|set|string|subnet|table|time|timer' - r'|vector)\b', Keyword.Type), - (r'(T|F)\b', Keyword.Constant), - (r'(&)((?:add|delete|expire)_func|attr|(create|read|write)_expire' - r'|default|raw_output|encrypt|group|log' - r'|mergeable|optional|persistent|priority|redef' - r'|rotate_(?:interval|size)|synchronized)\b', bygroups(Punctuation, - Keyword)), - (r'\s+module\b', Keyword.Namespace), - # Addresses, ports and networks - (r'\d+/(tcp|udp|icmp|unknown)\b', Number), - (r'(\d+\.){3}\d+', Number), - (r'(' + _hex + r'){7}' + _hex, Number), - (r'0x' + _hex + r'(' + _hex + r'|:)*::(' + _hex + r'|:)*', Number), - (r'((\d+|:)(' + _hex + r'|:)*)?::(' + _hex + r'|:)*', Number), - (r'(\d+\.\d+\.|(\d+\.){2}\d+)', Number), - # Hostnames - (_h + r'(\.' + _h + r')+', String), - # Numeric - (_float + r'\s+(day|hr|min|sec|msec|usec)s?\b', Literal.Date), - (r'0[xX]' + _hex, Number.Hex), - (_float, Number.Float), - (r'\d+', Number.Integer), - (r'/', String.Regex, 'regex'), - (r'"', String, 'string'), - # Operators - (r'[!%*/+-:<=>?~|]', Operator), - (r'([-+=&|]{2}|[+-=!><]=)', Operator), - (r'(in|match)\b', Operator.Word), - (r'[{}()\[\]$.,;]', Punctuation), - # Identfier - (r'([_a-zA-Z]\w*)(::)', bygroups(Name, Name.Namespace)), - (r'[a-zA-Z_][a-zA-Z_0-9]*', Name) - ], - 'string': [ - (r'"', String, '#pop'), - (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape), - (r'[^\\"\n]+', String), - (r'\\\n', String), - (r'\\', String) - ], - 'regex': [ - (r'/', String.Regex, '#pop'), - (r'\\[\\nt/]', String.Regex), # String.Escape is too intense. - (r'[^\\/\n]+', String.Regex), - (r'\\\n', String.Regex), - (r'\\', String.Regex) - ] - } diff --git a/doc/ext/broxygen.py b/doc/ext/broxygen.py deleted file mode 100644 index b6b47bb82b..0000000000 --- a/doc/ext/broxygen.py +++ /dev/null @@ -1,317 +0,0 @@ -""" -Broxygen domain for Sphinx. - -Adds directives that allow Sphinx to invoke Bro in order to generate script -reference documentation on the fly. The directives are: - -broxygen:package - - Shows links to all scripts contained within matching package(s). -broxygen:package_index - - An index with links to matching package document(s). -broxygen:script - - Reference for matching script(s) (i.e. everything declared by the script). -broxygen:script_summary - - Shows link to matching script(s) with it's summary-section comments. -broxygen:script_index - - An index with links to all matching scrips. -broxygen:proto_analyzer - - All protocol analyzers and their components (events/bifs, etc.) -broxygen:file_analyzer - - All file analyzers and their components (events/bifs, etc.) -""" - - -from sphinx.domains import Domain, ObjType -from sphinx.locale import l_ -from docutils.parsers.rst.directives.misc import Include - - -App = None - - -def info(msg): - """Use Sphinx builder to output a console message.""" - global App - from sphinx.util.console import blue - App.builder.info(blue(msg)) - - -def pattern_to_filename_component(pattern): - """Replace certain characters in Broxygen config file target pattern. - - Such that it can be used as part of a (sane) filename. - - """ - return pattern.replace("/", ".").replace("*", "star") - - -def ensure_dir(path): - """Should act like ``mkdir -p``.""" - import os - import errno - - try: - os.makedirs(path) - except OSError as e: - if e.errno != errno.EEXIST: - raise - - -def generate_config(env, type, pattern): - """Create a Broxygen config file for a particular target. - - It can be used by Bro to generate reST docs for that target. - - """ - import os - import tempfile - from sphinx.errors import SphinxError - - work_dir = env.config.broxygen_cache - - if not work_dir: - raise SphinxError("broxygen_cache not set in sphinx config file") - - ensure_dir(work_dir) - prefix = "{0}-{1}-".format(type, pattern_to_filename_component(pattern)) - (fd, cfg) = tempfile.mkstemp(suffix=".cfg", prefix=prefix, dir=work_dir) - generated_file = "{0}.rst".format(cfg) - config = "{0}\t{1}\t{2}".format(type, pattern, generated_file) - f = os.fdopen(fd, "w") - f.write(config) - f.close() - return (cfg, generated_file) - - -def generate_target(env, type, pattern): - """Create a Broxygen target and build it. - - For a target which hasn't been referenced by any other script, this function - creates an associated config file then uses Bro w/ it to build the target - and stores the target information in the build environment. - - If a script references a target that's already found in the build - environment the results of the previous built are re-used. - - """ - app_data = env.domaindata["broxygen"] - - if (type, pattern) in app_data["targets"]: - info("Broxygen has cached doc for target '{0} {1}'".format( - type, pattern)) - return app_data["targets"] - - (cfg, gend_file) = generate_config(env, type, pattern) - target = BroxygenTarget(type, pattern, cfg, gend_file) - app_data["targets"][(type, pattern)] = target - build_target(env, target) - info("Broxygen built target '{0} {1}'".format(type, pattern)) - return target - - -def build_target(env, target): - """Invoke a Bro process to build a Broxygen target.""" - import os - import subprocess - - path_to_bro = env.config.bro_binary - - if not path_to_bro: - raise SphinxError("'bro' not set in sphinx config file (path to bro)") - - bro_cmd = "{0} -X {1} broxygen".format(path_to_bro, target.config_file) - cwd = os.getcwd() - os.chdir(os.path.dirname(target.config_file)) - - try: - subprocess.check_output(bro_cmd, stderr=subprocess.STDOUT, shell=True) - except subprocess.CalledProcessError as e: - from sphinx.errors import SphinxError - raise SphinxError( - "Command '{0}' returned non-zero exit status {1}: {2}".format( - e.cmd, e.returncode, e.output)) - finally: - os.chdir(cwd) - - -class BroxygenTarget(object): - - """Some portion of reST documentation that Bro knows how to generate. - - A target is identified by its type and pattern. E.g. type "script" and - pattern "broxygen/example.bro". - - """ - - def __init__(self, type, pattern, config_file, generated_file): - self.type = type - self.pattern = pattern - self.config_file = config_file - self.generated_file = generated_file - self.used_in_docs = set() - - -class BroxygenDirective(Include): - - """Base class for Broxygen directives. - - It can use Bro to generate reST documentation on the fly and embed it in - the document at the location of the directive just like the ``.. include::`` - directive. The only argument is a pattern to identify to Bro which - pieces of documentation it needs to create. - """ - - required_arguments = 1 - has_content = False - - target_type = None - - def run(self): - env = self.state.document.settings.env - info("Broxygen running .. {0}:: {1} in {2}".format( - self.name, self.arguments[0], env.docname)) - target = generate_target(env, self.target_type, self.arguments[0]) - target.used_in_docs.add(env.docname) - self.arguments = [target.generated_file] - return super(BroxygenDirective, self).run() - - -class PackageDirective(BroxygenDirective): - - target_type = "package" - - -class PackageIndexDirective(BroxygenDirective): - - target_type = "package_index" - - -class ScriptDirective(BroxygenDirective): - - target_type = "script" - - -class ScriptSummaryDirective(BroxygenDirective): - - target_type = "script_summary" - - -class ScriptIndexDirective(BroxygenDirective): - - target_type = "script_index" - - -class ProtoAnalyzerDirective(BroxygenDirective): - - target_type = "proto_analyzer" - - -class FileAnalyzerDirective(BroxygenDirective): - - target_type = "file_analyzer" - - -class IdentifierDirective(BroxygenDirective): - - target_type = "identifier" - - -class BroxygenDomain(Domain): - - name = "broxygen" - label = "Broxygen" - - object_types = { - "package": ObjType(l_("package")), - "package_index": ObjType(l_("package_index")), - "script": ObjType(l_("script")), - "script_summary": ObjType(l_("script_summary")), - "script_index": ObjType(l_("script_index")), - "proto_analyzer": ObjType(l_("proto_analyzer")), - "file_analyzer": ObjType(l_("file_analyzer")), - "identifier": ObjType(l_("identifier")), - } - - directives = { - "package": PackageDirective, - "package_index": PackageIndexDirective, - "script": ScriptDirective, - "script_summary": ScriptSummaryDirective, - "script_index": ScriptIndexDirective, - "proto_analyzer": ProtoAnalyzerDirective, - "file_analyzer": FileAnalyzerDirective, - "identifier": IdentifierDirective, - } - - roles = {} - - initial_data = { - "targets": {} - } - - def clear_doc(self, docname): - """Update Broxygen targets referenced in docname. - - If it's the last place the target was referenced, remove it from - the build environment and delete any generated config/reST files - associated with it from the cache. - - """ - import os - - stale_targets = [] - - for (type, pattern), target in self.data["targets"].items(): - if docname in target.used_in_docs: - target.used_in_docs.remove(docname) - - if not target.used_in_docs: - stale_targets.append(target) - - for target in stale_targets: - del self.data["targets"][(target.type, target.pattern)] - os.remove(target.config_file) - os.remove(target.generated_file) - - def get_objects(self): - """No Broxygen-generated content is itself linkable/searchable.""" - return [] - - -def env_get_outdated_hook(app, env, added, changed, removed): - """Check whether to re-read any documents referencing Broxygen targets. - - To do that we have to ask Bro to rebuild each target and compare the - before and after modification times of the generated reST output file. - If Bro changed it, then the document containing the Broxygen directive - needs to be re-read. - - """ - import os - - reread = set() - - for target in app.env.domaindata["broxygen"]["targets"].values(): - before_mtime = os.stat(target.generated_file) - build_target(env, target) - after_mtime = os.stat(target.generated_file) - - if after_mtime > before_mtime: - info("Broxygen target '{0} {1}' outdated".format( - target.type, target.pattern)) - - for docname in target.used_in_docs: - if docname not in removed: - info(" in document: {0}".format(docname)) - reread.add(docname) - - return list(reread) - - -def setup(app): - global App - App = app - app.add_domain(BroxygenDomain) - app.add_config_value("bro_binary", None, "env") - app.add_config_value("broxygen_cache", None, "env") - app.connect("env-get-outdated", env_get_outdated_hook) diff --git a/doc/ext/rst_directive.py b/doc/ext/rst_directive.py deleted file mode 100644 index 43c95abc52..0000000000 --- a/doc/ext/rst_directive.py +++ /dev/null @@ -1,183 +0,0 @@ -def setup(app): - pass - -# -*- coding: utf-8 -*- -""" - -Modified version of the the Pygments reStructuredText directive. -Robin - -This provides two new directives: - - - .. code:: [] - - Highlights the following code block according to if - given (e.g., "c", "python", etc.). - - - .. console:: - - Highlits the following code block as a shell session. - - For compatibility with the original version, "sourcecode" is - equivalent to "code". - -Original comment: - - The Pygments reStructuredText directive - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - This fragment is a Docutils_ 0.5 directive that renders source code - (to HTML only, currently) via Pygments. - - To use it, adjust the options below and copy the code into a module - that you import on initialization. The code then automatically - registers a ``sourcecode`` directive that you can use instead of - normal code blocks like this:: - - .. sourcecode:: python - - My code goes here. - - If you want to have different code styles, e.g. one with line numbers - and one without, add formatters with their names in the VARIANTS dict - below. You can invoke them instead of the DEFAULT one by using a - directive option:: - - .. sourcecode:: python - :linenos: - - My code goes here. - - Look at the `directive documentation`_ to get all the gory details. - - .. _Docutils: http://docutils.sf.net/ - .. _directive documentation: - http://docutils.sourceforge.net/docs/howto/rst-directives.html - - :copyright: Copyright 2006-2010 by the Pygments team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -# Options -# ~~~~~~~ - -# Set to True if you want inline CSS styles instead of classes -INLINESTYLES = False - -from pygments.formatters import HtmlFormatter - -class MyHtmlFormatter(HtmlFormatter): - def format_unencoded(self, tokensource, outfile): - - # A NOP currently. - new_tokens = [] - for (i, piece) in tokensource: - new_tokens += [(i, piece)] - - return super(MyHtmlFormatter, self).format_unencoded(new_tokens, outfile) - -# The default formatter -DEFAULT = MyHtmlFormatter(noclasses=INLINESTYLES, cssclass="pygments") - -# Add name -> formatter pairs for every variant you want to use -VARIANTS = { - # 'linenos': HtmlFormatter(noclasses=INLINESTYLES, linenos=True), -} - - -import textwrap - -from docutils import nodes -from docutils.parsers.rst import directives, Directive - -from pygments import highlight -from pygments.lexers import get_lexer_by_name, guess_lexer, TextLexer -from pygments.token import Text, Keyword, Error, Operator, Name -from pygments.filter import Filter - -# Ugly hack to register the Bro lexer. I'm sure there's a better way to do it, -# but it's not obvious ... -from bro_lexer.bro import BroLexer -from pygments.lexers._mapping import LEXERS -LEXERS['BroLexer'] = ('bro_lexer.bro', BroLexer.name, BroLexer.aliases, BroLexer.filenames, ()) - -class Pygments(Directive): - """ Source code syntax hightlighting. - """ - #max_line_length = 68 - max_line_length = 0 - - required_arguments = 0 - optional_arguments = 1 - final_argument_whitespace = True - option_spec = dict([(key, directives.flag) for key in VARIANTS]) - has_content = True - - def wrapped_content(self): - content = [] - - if Console.max_line_length: - for line in self.content: - content += textwrap.wrap(line, Console.max_line_length, subsequent_indent=" ") - else: - content = self.content - - return u'\n'.join(content) - - def run(self): - self.assert_has_content() - - content = self.wrapped_content() - - if len(self.arguments) > 0: - try: - lexer = get_lexer_by_name(self.arguments[0]) - except (ValueError, IndexError): - # lexer not found, use default. - lexer = TextLexer() - else: - try: - lexer = guess_lexer(content) - except: - lexer = TextLexer() - - # import sys - # print >>sys.stderr, self.arguments, lexer.__class__ - - # take an arbitrary option if more than one is given - formatter = self.options and VARIANTS[self.options.keys()[0]] or DEFAULT - parsed = highlight(content, lexer, formatter) - return [nodes.raw('', parsed, format='html')] - -class MyFilter(Filter): - def filter(self, lexer, stream): - - bol = True - - for (ttype, value) in stream: - # Color the '>' prompt sign. - if bol and ttype is Text and value == ">": - ttype = Name.Variable.Class # This gives us a nice red. - - # Discolor builtin, that can look funny. - if ttype is Name.Builtin: - ttype = Text - - bol = value.endswith("\n") - - yield (ttype, value) - -class Console(Pygments): - required_arguments = 0 - optional_arguments = 0 - - def run(self): - self.assert_has_content() - content = self.wrapped_content() - lexer = get_lexer_by_name("sh") - lexer.add_filter(MyFilter()) - parsed = highlight(content, lexer, DEFAULT) - return [nodes.raw('', parsed, format='html')] - -directives.register_directive('sourcecode', Pygments) -directives.register_directive('code', Pygments) -directives.register_directive('console', Console) diff --git a/doc/frameworks/broker.rst b/doc/frameworks/broker.rst index 191b8178cc..386766537c 100644 --- a/doc/frameworks/broker.rst +++ b/doc/frameworks/broker.rst @@ -29,8 +29,6 @@ Broker-Enabled Communication/Cluster Framework also gives examples of Broker and the new cluster framework that show off all the new features and capabilities. -.. contents:: - Porting Guide ============= @@ -296,11 +294,17 @@ Connecting to Peers Bro can accept incoming connections by calling :bro:see:`Broker::listen`. -.. btest-include:: ${DOC_ROOT}/frameworks/broker/connecting-listener.bro +.. literalinclude:: broker/connecting-listener.bro + :caption: connecting-listener.bro + :language: bro + :linenos: Bro can initiate outgoing connections by calling :bro:see:`Broker::peer`. -.. btest-include:: ${DOC_ROOT}/frameworks/broker/connecting-connector.bro +.. literalinclude:: broker/connecting-connector.bro + :caption: connecting-connector.bro + :language: bro + :linenos: In either case, connection status updates are monitored via the :bro:see:`Broker::peer_added` and :bro:see:`Broker::peer_lost` events. @@ -317,7 +321,10 @@ more on how topics work and are chosen. Use the :bro:see:`Broker::subscribe` function to subscribe to topics and define any event handlers for events that peers will send. -.. btest-include:: ${DOC_ROOT}/frameworks/broker/events-listener.bro +.. literalinclude:: broker/events-listener.bro + :caption: events-listener.bro + :language: bro + :linenos: There are two different ways to send events. @@ -333,7 +340,10 @@ whenever the event is called locally via the normal event invocation syntax. When auto-publishing events, local event handlers for the event are called in addition to sending the event to any subscribed peers. -.. btest-include:: ${DOC_ROOT}/frameworks/broker/events-connector.bro +.. literalinclude:: broker/events-connector.bro + :caption: events-connector.bro + :language: bro + :linenos: Note that the subscription model is prefix-based, meaning that if you subscribe to the "bro/events" topic prefix you would receive events that are published @@ -342,16 +352,25 @@ to topic names "bro/events/foo" and "bro/events/bar" but not "bro/misc". Remote Logging -------------- -.. btest-include:: ${DOC_ROOT}/frameworks/broker/testlog.bro +.. literalinclude:: broker/testlog.bro + :caption: testlog.bro + :language: bro + :linenos: To toggle remote logs, redef :bro:see:`Log::enable_remote_logging`. Use the :bro:see:`Broker::subscribe` function to advertise interest in logs written by peers. The topic names that Bro uses are determined by :bro:see:`Broker::log_topic`. -.. btest-include:: ${DOC_ROOT}/frameworks/broker/logs-listener.bro +.. literalinclude:: broker/logs-listener.bro + :caption: logs-listener.bro + :language: bro + :linenos: -.. btest-include:: ${DOC_ROOT}/frameworks/broker/logs-connector.bro +.. literalinclude:: broker/logs-connector.bro + :caption: logs-connector.bro + :language: bro + :linenos: Note that logging events are only raised locally on the node that performs the :bro:see:`Log::write` and not automatically published to peers. @@ -379,9 +398,15 @@ use. E.g. In-memory versus SQLite for persistence. Data stores also support expiration on a per-key basis using an amount of time relative to the entry's last modification time. -.. btest-include:: ${DOC_ROOT}/frameworks/broker/stores-listener.bro +.. literalinclude:: broker/stores-listener.bro + :caption: stores-listener.bro + :language: bro + :linenos: -.. btest-include:: ${DOC_ROOT}/frameworks/broker/stores-connector.bro +.. literalinclude:: broker/stores-connector.bro + :caption: stores-connector.bro + :language: bro + :linenos: Note that all data store queries must be made within Bro's asynchronous ``when`` statements and must specify a timeout block. @@ -403,7 +428,7 @@ should always use the fully-qualified event name. For example, this will likely not work as expected: -.. code:: bro +.. sourcecode:: bro module MyModule; @@ -427,7 +452,7 @@ will never be called and also not any remote handlers either, even if :bro:see:`Broker::auto_publish` was used elsewhere for it. Instead, at minimum you would need change the ``bro_init()`` handler: -.. code:: bro +.. sourcecode:: bro event bro_init() { @@ -438,7 +463,7 @@ minimum you would need change the ``bro_init()`` handler: Though, an easy rule of thumb to remember would be to always use the explicit module namespace scoping and you can't go wrong: -.. code:: bro +.. sourcecode:: bro module MyModule; @@ -467,7 +492,7 @@ Manager Sending Events To Workers This is fairly straightforward, we just need a topic name which we know all workers are subscribed combined with the event we want to send them. -.. code:: bro +.. sourcecode:: bro event manager_to_workers(s: string) { @@ -497,10 +522,10 @@ all workers are subscribed combined with the event we want to send them. # eliminated by using the following conditional directives. # It's evaluated once per node at parse-time and, if false, # any code within is just ignored / treated as not existing at all. - @if ( Cluster::local_node_type() == Cluster::MANAGER ) + @if ( Cluster::local_node_type() == Cluster::MANAGER ) Broker::publish(Cluster::worker_topic, manager_to_workers, "hello v3"); - @endif + @endif } Worker Sending Events To Manager @@ -510,7 +535,7 @@ This should look almost identical to the previous case of sending an event from the manager to workers, except it simply changes the topic name to one which the manager is subscribed. -.. code:: bro +.. sourcecode:: bro event worker_to_manager(worker_name: string) { @@ -531,17 +556,17 @@ topology, this type of communication is a bit different than what we did before since we have to manually relay the event via some node that *is* connected to all workers. The manager or a proxy satisfies that requirement: -.. code:: bro +.. sourcecode:: bro event worker_to_workers(worker_name: string) { - @if ( Cluster::local_node_type() == Cluster::MANAGER || + @if ( Cluster::local_node_type() == Cluster::MANAGER || Cluster::local_node_type() == Cluster::PROXY ) Broker::publish(Cluster::worker_topic, worker_to_workers, worker_name) - @else + @else print "got event from worker", worker_name; - @endif + @endif } event some_event_handled_on_worker() @@ -570,7 +595,7 @@ we can make use of a `Highest Random Weight (HRW) hashing `_ distribution strategy to uniformly map an arbitrary key space across all available proxies. -.. code:: bro +.. sourcecode:: bro event worker_to_proxies(worker_name: string) { diff --git a/doc/frameworks/configuration.rst b/doc/frameworks/configuration.rst index 23a384a280..26a1ebe13a 100644 --- a/doc/frameworks/configuration.rst +++ b/doc/frameworks/configuration.rst @@ -14,10 +14,6 @@ ability to specify input files to enable changing the value of options at runtime, a couple of functions, and a log file "config.log" which contains information about every change to option values. - -.. contents:: - - Introduction ------------ @@ -42,7 +38,7 @@ Declaring options The "option" keyword allows variables to be declared as configuration options. -.. code:: bro +.. sourcecode:: bro module TestModule; @@ -67,7 +63,7 @@ being that there is no need to specify the :bro:attr:`&redef` attribute in the declaration of an option. For example, given the above option declarations, here are some possible redefs: -.. code:: bro +.. sourcecode:: bro redef TestModule::enable_feature = T; redef TestModule::my_networks += { 10.1.0.0/16, 10.2.0.0/16 }; @@ -90,7 +86,7 @@ only the manager node attempts to read the specified configuration files. For example, simply add something like this to local.bro: -.. code:: bro +.. sourcecode:: bro redef Config::config_files += { "/path/to/config.dat" }; @@ -131,7 +127,7 @@ supported by the config input reader. In that case you would need to use the Config::set_value function to change the value of such an option as shown in the following example. -.. code:: bro +.. sourcecode:: bro module TestModule; @@ -158,7 +154,7 @@ change handler for an option that has a data type of "addr" (for other data types, the return type and 2nd parameter data type must be adjusted accordingly): -.. code:: bro +.. sourcecode:: bro module TestModule; diff --git a/doc/frameworks/file-analysis.rst b/doc/frameworks/file-analysis.rst index e70b124af7..cc5a76ddec 100644 --- a/doc/frameworks/file-analysis.rst +++ b/doc/frameworks/file-analysis.rst @@ -21,8 +21,6 @@ File Analysis provide analysis specifically for files that is analogous to the analysis Bro provides for network connections. -.. contents:: - File Lifecycle Events ===================== @@ -36,11 +34,23 @@ bytes have been transferred so far, and its MIME type. Here's a simple example: -.. btest-include:: ${DOC_ROOT}/frameworks/file_analysis_01.bro +.. literalinclude:: file_analysis_01.bro + :caption: + :language: bro + :linenos: -.. btest:: file-analysis-01 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/get.trace ${DOC_ROOT}/frameworks/file_analysis_01.bro + $ bro -r http/get.trace file_analysis_01.bro + file_state_remove + FakNcS1Jfe01uljb3 + CHhAvVGS1DHFjwGM9 + [orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp] + HTTP + connection_state_remove + CHhAvVGS1DHFjwGM9 + [orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp] + HTTP This doesn't perform any interesting analysis yet, but does highlight the similarity between analysis of connections and files. Connections @@ -71,16 +81,21 @@ explicit attachment decision. Here's a simple example of how to use the MD5 file analyzer to calculate the MD5 of plain text files: -.. btest-include:: ${DOC_ROOT}/frameworks/file_analysis_02.bro +.. literalinclude:: file_analysis_02.bro + :caption: + :language: bro + :linenos: -.. btest:: file-analysis-02 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/get.trace ${DOC_ROOT}/frameworks/file_analysis_02.bro + $ bro -r http/get.trace file_analysis_02.bro + new file, FakNcS1Jfe01uljb3 + file_hash, FakNcS1Jfe01uljb3, md5, 397168fd09991a0e712254df7bc639ac Some file analyzers might have tunable parameters that need to be specified in the call to :bro:see:`Files::add_analyzer`: -.. code:: bro +.. sourcecode:: bro event file_new(f: fa_file) { @@ -109,19 +124,24 @@ in the same way it analyzes files that it sees coming over traffic from a network interface it's monitoring. It only requires a call to :bro:see:`Input::add_analysis`: -.. btest-include:: ${DOC_ROOT}/frameworks/file_analysis_03.bro +.. literalinclude:: file_analysis_03.bro + :caption: + :language: bro + :linenos: Note that the "source" field of :bro:see:`fa_file` corresponds to the "name" field of :bro:see:`Input::AnalysisDescription` since that is what the input framework uses to uniquely identify an input stream. -The output of the above script may be (assuming a file called "myfile" -exists): +Example output of the above script may be: -.. btest:: file-analysis-03 +.. sourcecode:: console - @TEST-EXEC: echo "Hello world" > myfile - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/frameworks/file_analysis_03.bro + $ echo "Hello world" > myfile + $ bro file_analysis_03.bro + new file, FZedLu4Ajcvge02jA8 + file_hash, FZedLu4Ajcvge02jA8, md5, f0ef7081e1539ac00ef5b761b4fb01b3 + file_state_remove Nothing that special, but it at least verifies the MD5 file analyzer saw all the bytes of the input file and calculated the checksum diff --git a/doc/frameworks/geoip.rst b/doc/frameworks/geoip.rst index 06829bfcd5..141ecd4045 100644 --- a/doc/frameworks/geoip.rst +++ b/doc/frameworks/geoip.rst @@ -17,8 +17,6 @@ GeoLocation software, and then install the GeoLite2 city database before building Bro. -.. contents:: - Install libmaxminddb -------------------- @@ -26,19 +24,19 @@ Before building Bro, you need to install libmaxminddb. * RPM/RedHat-based Linux: - .. console:: + .. sourcecode:: console sudo yum install libmaxminddb-devel * DEB/Debian-based Linux: - .. console:: + .. sourcecode:: console sudo apt-get install libmaxminddb-dev * FreeBSD: - .. console:: + .. sourcecode:: console sudo pkg install libmaxminddb @@ -58,7 +56,7 @@ and regions in addition to countries. `Download `__ the GeoLite2 city binary database: -.. console:: +.. sourcecode:: console wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz tar zxf GeoLite2-City.tar.gz @@ -69,7 +67,7 @@ and will vary depending on which platform and package you are using. For FreeBSD, use ``/usr/local/share/GeoIP``. For Linux, use ``/usr/share/GeoIP`` or ``/var/lib/GeoIP`` (choose whichever one already exists). -.. console:: +.. sourcecode:: console mv /GeoLite2-City.mmdb /GeoLite2-City.mmdb @@ -81,7 +79,7 @@ everything is setup correctly. After installing libmaxminddb and the GeoIP city database, and building Bro, you can quickly check if the GeoIP functionality works by running a command like this: -.. console:: +.. sourcecode:: console bro -e "print lookup_location(8.8.8.8);" @@ -113,7 +111,7 @@ Usage There is a built-in function that provides the GeoIP functionality: -.. code:: bro +.. sourcecode:: bro function lookup_location(a:addr): geo_location @@ -130,7 +128,7 @@ Example To show every ftp connection from hosts in Ohio, this is now very easy: -.. code:: bro +.. sourcecode:: bro event ftp_reply(c: connection, code: count, msg: string, cont_resp: bool) { diff --git a/doc/frameworks/input.rst b/doc/frameworks/input.rst index 01c1658d34..93b2bb97f3 100644 --- a/doc/frameworks/input.rst +++ b/doc/frameworks/input.rst @@ -15,8 +15,6 @@ Input Framework worthwhile to take a look at the unit tests in ``testing/btest/scripts/base/frameworks/input/``. -.. contents:: - Reading Data into Tables ======================== @@ -53,7 +51,7 @@ the table content. The two records are defined as: -.. code:: bro +.. sourcecode:: bro type Idx: record { ip: addr; @@ -72,7 +70,7 @@ columns does not matter, because each column is identified by name. The log file is read into the table with a simple call of the :bro:id:`Input::add_table` function: -.. code:: bro +.. sourcecode:: bro global blacklist: table[addr] of Val = table(); @@ -109,7 +107,7 @@ Once the input framework finishes reading from a data source, it fires the :bro:id:`Input::end_of_data` event. Once this event has been received all data from the input file is available in the table. -.. code:: bro +.. sourcecode:: bro event Input::end_of_data(name: string, source: string) { # now all data is in the table @@ -121,7 +119,7 @@ just might not contain all lines from the input file before the event has fired. After the table has been populated it can be used like any other Bro table and blacklist entries can easily be tested: -.. code:: bro +.. sourcecode:: bro if ( 192.168.18.12 in blacklist ) # take action @@ -143,7 +141,7 @@ elements from the file will be updated. After the update is finished the In our example the call would look like: -.. code:: bro +.. sourcecode:: bro Input::force_update("blacklist"); @@ -155,7 +153,7 @@ of the :bro:id:`Input::add_table` call. Valid values are ``Input::MANUAL`` setting the value of the ``mode`` option in the previous example would look like this: -.. code:: bro +.. sourcecode:: bro Input::add_table([$source="blacklist.file", $name="blacklist", $idx=Idx, $val=Val, $destination=blacklist, @@ -189,7 +187,7 @@ item is added to, removed from, or changed in a table. The event definition looks like this (note that you can change the name of this event in your own Bro script): -.. code:: bro +.. sourcecode:: bro event entry(description: Input::TableDescription, tpe: Input::Event, left: Idx, right: Val) { @@ -199,7 +197,7 @@ this event in your own Bro script): The event must be specified in ``$ev`` in the ``add_table`` call: -.. code:: bro +.. sourcecode:: bro Input::add_table([$source="blacklist.file", $name="blacklist", $idx=Idx, $val=Val, $destination=blacklist, @@ -244,7 +242,7 @@ The following example filter will reject adding entries to the table when they were generated over a month ago. It will accept all changes and all removals of values that are already present in the table. -.. code:: bro +.. sourcecode:: bro Input::add_table([$source="blacklist.file", $name="blacklist", $idx=Idx, $val=Val, $destination=blacklist, @@ -307,7 +305,7 @@ discussed in much detail. To read the blacklist of the previous example into an event stream, the :bro:id:`Input::add_event` function is used. For example: -.. code:: bro +.. sourcecode:: bro type Val: record { ip: addr; diff --git a/doc/frameworks/logging-input-sqlite.rst b/doc/frameworks/logging-input-sqlite.rst index e0f10308ae..31dbe11379 100644 --- a/doc/frameworks/logging-input-sqlite.rst +++ b/doc/frameworks/logging-input-sqlite.rst @@ -14,8 +14,6 @@ Logging To and Reading From SQLite Databases they can, for example, be used to make data that changes regularly available to Bro on a continuing basis. -.. contents:: - Warning ======= @@ -38,12 +36,10 @@ You have to define a filter which specifies SQLite as the writer. The following example code adds SQLite as a filter for the connection log: -.. btest-include:: ${DOC_ROOT}/frameworks/sqlite-conn-filter.bro - -.. btest:: sqlite-conn-filter-check - - # Make sure this parses correctly at least. - @TEST-EXEC: bro ${DOC_ROOT}/frameworks/sqlite-conn-filter.bro +.. literalinclude:: sqlite-conn-filter.bro + :caption: + :language: bro + :linenos: Bro will create the database file ``/var/db/conn.sqlite``, if it does not already exist. It will also create a table with the name ``conn`` (if it @@ -71,7 +67,7 @@ same fields that are present in the ASCII log files:: Note that the ASCII ``conn.log`` will still be created. To prevent this file from being created, you can remove the default filter: -.. code:: bro +.. sourcecode:: bro Log::remove_filter(Conn::LOG, "default"); @@ -115,12 +111,10 @@ The SQLite commands to create the schema are as follows:: After creating a file called ``hosts.sqlite`` with this content, we can read the resulting table into Bro: -.. btest-include:: ${DOC_ROOT}/frameworks/sqlite-read-table.bro - -.. btest:: sqlite-read-table-check - - # Make sure this parses correctly at least. - @TEST-EXEC: bro ${DOC_ROOT}/frameworks/sqlite-read-table.bro +.. literalinclude:: sqlite-read-table.bro + :caption: + :language: bro + :linenos: Afterwards, that table can be used to check logins into hosts against the available userlist. @@ -164,12 +158,10 @@ of files that are transmitted over the network. For each hash, a SQL-query is run against SQLite. If the query returns with a result, we had a hit against our malware-database and output the matching hash. -.. btest-include:: ${DOC_ROOT}/frameworks/sqlite-read-events.bro - -.. btest:: sqlite-read-events-check - - # Make sure this parses correctly at least. - @TEST-EXEC: bro ${DOC_ROOT}/frameworks/sqlite-read-events.bro +.. literalinclude:: sqlite-read-events.bro + :caption: + :language: bro + :linenos: If you run this script against the trace in ``testing/btest/Traces/ftp/ipv4.trace``, you will get one hit. diff --git a/doc/frameworks/logging.rst b/doc/frameworks/logging.rst index 10e0b8fc16..813c2bfbc9 100644 --- a/doc/frameworks/logging.rst +++ b/doc/frameworks/logging.rst @@ -12,8 +12,6 @@ Logging Framework logged. This document describes how logging can be customized and extended. -.. contents:: - Terminology =========== @@ -65,7 +63,7 @@ done: In the following example, we create a new module "Foo" which creates a new log stream. -.. code:: bro +.. sourcecode:: bro module Foo; @@ -115,7 +113,7 @@ In this example, the :bro:id:`connection_established` event provides our data, and we also store a copy of the data being logged into the :bro:type:`connection` record: -.. code:: bro +.. sourcecode:: bro event connection_established(c: connection) { @@ -158,7 +156,7 @@ Let's say we want to add a boolean field ``is_private`` to :bro:type:`Conn::Info` that indicates whether the originator IP address is part of the :rfc:`1918` space: -.. code:: bro +.. sourcecode:: bro # Add a field to the connection log record. redef record Conn::Info += { @@ -184,7 +182,7 @@ In this example, since a connection's summary is generated at the time its state is removed from memory, we can add another handler at that time that sets our field correctly: -.. code:: bro +.. sourcecode:: bro event connection_state_remove(c: connection) { @@ -217,7 +215,7 @@ being logged. For these cases, a stream can specify an event that will be generated every time a log record is written to it. To do this, we need to modify the example module shown above to look something like this: -.. code:: bro +.. sourcecode:: bro module Foo; @@ -248,7 +246,7 @@ connection log stream raises the event :bro:id:`Conn::log_conn`. You could use that for example for flagging when a connection to a specific destination exceeds a certain duration: -.. code:: bro +.. sourcecode:: bro redef enum Notice::Type += { ## Indicates that a connection remained established longer @@ -275,7 +273,7 @@ Disable a Stream One way to "turn off" a log is to completely disable the stream. For example, the following example will prevent the conn.log from being written: -.. code:: bro +.. sourcecode:: bro event bro_init() { @@ -310,7 +308,7 @@ The easiest way to change a log filename is to simply replace the default log filter with a new filter that specifies a value for the "path" field. In this example, "conn.log" will be changed to "myconn.log": -.. code:: bro +.. sourcecode:: bro event bro_init() { @@ -335,7 +333,7 @@ if you want to restrict the set of fields being logged to the new file. In this example, a new filter is added to the Conn::LOG stream that writes two fields to a new log file: -.. code:: bro +.. sourcecode:: bro event bro_init() { @@ -366,7 +364,7 @@ corresponding ``exclude`` filter attribute that you can use instead of If you want to make this the only log file for the stream, you can remove the default filter: -.. code:: bro +.. sourcecode:: bro event bro_init() { @@ -383,7 +381,7 @@ allows, e.g., to record local and remote connections into separate files. To do this, you define a function that returns the desired path, and use the "path_func" filter attribute: -.. code:: bro +.. sourcecode:: bro # Note: if using BroControl then you don't need to redef local_nets. redef Site::local_nets = { 192.168.0.0/16 }; @@ -415,7 +413,7 @@ only with the :bro:enum:`Conn::LOG` stream as the record type is hardcoded into its argument list. However, Bro allows to do a more generic variant: -.. code:: bro +.. sourcecode:: bro function myfunc(id: Log::ID, path: string, rec: record { id: conn_id; } ) : string @@ -434,7 +432,7 @@ We have seen how to customize the columns being logged, but you can also control which records are written out by providing a predicate that will be called for each log record: -.. code:: bro +.. sourcecode:: bro function http_only(rec: Conn::Info) : bool { @@ -464,7 +462,7 @@ Or specifically for certain :bro:type:`Log::Filter` instances by setting their ``interv`` field. Here's an example of changing just the :bro:enum:`Conn::LOG` stream's default filter rotation. -.. code:: bro +.. sourcecode:: bro event bro_init() { @@ -503,7 +501,7 @@ Some writer options are global (i.e., they affect all log filters using that log writer). For example, to change the output format of all ASCII logs to JSON format: -.. code:: bro +.. sourcecode:: bro redef LogAscii::use_json = T; @@ -511,7 +509,7 @@ Some writer options are filter-specific (i.e., they affect only the filters that explicitly specify the option). For example, to change the output format of the ``conn.log`` only: -.. code:: bro +.. sourcecode:: bro event bro_init() { diff --git a/doc/frameworks/netcontrol.rst b/doc/frameworks/netcontrol.rst index ccb659c223..52cb5b110e 100644 --- a/doc/frameworks/netcontrol.rst +++ b/doc/frameworks/netcontrol.rst @@ -17,8 +17,6 @@ NetControl Framework it can be used in practice, it might be worthwhile to take a look at the unit tests. -.. contents:: - NetControl Architecture ======================= @@ -65,7 +63,7 @@ Backends should be initialized in the :bro:see:`NetControl::init` event, calling the :bro:see:`NetControl::activate` function after the plugin instance has been initialized. The debug plugin can be initialized as follows: -.. code:: bro +.. sourcecode:: bro event NetControl::init() { @@ -133,17 +131,37 @@ start sending the rules to the added backend(s). To give a very simple example, the following script will simply block the traffic of all connections that it sees being established: -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-1-drop-with-debug.bro +.. literalinclude:: netcontrol-1-drop-with-debug.bro + :caption: + :language: bro + :linenos: Running this script on a file containing one connection will cause the debug plugin to print one line to the standard output, which contains information about the rule that was added. It will also cause creation of `netcontrol.log`, which contains information about all actions that are taken by NetControl: -.. btest:: netcontrol-1-drop-with-debug.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-1-drop-with-debug.bro - @TEST-EXEC: btest-rst-cmd cat netcontrol.log + $ bro -C -r tls/ecdhe.pcap netcontrol-1-drop-with-debug.bro + netcontrol debug (Debug-All): init + netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::CONNECTION, conn=[orig_h=192.168.18.50, orig_p=56981/tcp, resp_h=74.125.239.97, resp_p=443/tcp], flow=, ip=, mac=], expire=20.0 secs, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] + + $ cat netcontrol.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path netcontrol + #open 2018-12-14-18-50-53 + #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin + #types time string enum string enum string enum string string string string int interval string string + 0.000000 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All + 0.000000 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All + 0.000000 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - + 1398529018.678276 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::CONNECTION 192.168.18.50/56981<->74.125.239.97/443 - - 0 20.000000 - Debug-All + 1398529018.678276 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::CONNECTION 192.168.18.50/56981<->74.125.239.97/443 - - 0 20.000000 - Debug-All + #close 2018-12-14-18-50-53 In our case, `netcontrol.log` contains several :bro:see:`NetControl::MESSAGE` entries, which show that the debug plugin has been initialized and added. @@ -159,39 +177,99 @@ additional log called `netcontrol_drop.log`. This log file is much more succinct only contains information that is specific to drops that are enacted by NetControl: -.. btest:: netcontrol-1-drop-with-debug.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd cat netcontrol_drop.log + $ cat netcontrol_drop.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path netcontrol_drop + #open 2018-12-14-18-50-53 + #fields ts rule_id orig_h orig_p resp_h resp_p expire location + #types time string addr port addr port interval string + 1398529018.678276 2 192.168.18.50 56981 74.125.239.97 443 20.000000 - + #close 2018-12-14-18-50-53 While this example of blocking all connections is usually not very useful, the high-level API gives an easy way to take action, for example when a host is identified doing some harmful activity. To give a more realistic example, the following code automatically blocks a recognized SSH guesser: -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-2-ssh-guesser.bro +.. literalinclude:: netcontrol-2-ssh-guesser.bro + :caption: + :language: bro + :linenos: -.. btest:: netcontrol-2-ssh-guesser.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/ssh/sshguess.pcap ${DOC_ROOT}/frameworks/netcontrol-2-ssh-guesser.bro - @TEST-EXEC: btest-rst-cmd cat netcontrol.log + $ bro -C -r ssh/sshguess.pcap netcontrol-2-ssh-guesser.bro + netcontrol debug (Debug-All): init + netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::ADDRESS, conn=, flow=, ip=192.168.56.1/32, mac=], expire=1.0 hr, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] + + $ cat netcontrol.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path netcontrol + #open 2018-12-14-18-50-54 + #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin + #types time string enum string enum string enum string string string string int interval string string + 0.000000 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All + 0.000000 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All + 0.000000 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - + 1427726759.303199 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.56.1/32 - - 0 3600.000000 - Debug-All + 1427726759.303199 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.56.1/32 - - 0 3600.000000 - Debug-All + #close 2018-12-14-18-50-54 Note that in this case, instead of calling NetControl directly, we also can use the :bro:see:`Notice::ACTION_DROP` action of the notice framework: -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-3-ssh-guesser.bro +.. literalinclude:: netcontrol-3-ssh-guesser.bro + :caption: + :language: bro + :linenos: -.. btest:: netcontrol-3-ssh-guesser.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/ssh/sshguess.pcap ${DOC_ROOT}/frameworks/netcontrol-3-ssh-guesser.bro - @TEST-EXEC: btest-rst-cmd cat netcontrol.log + $ bro -C -r ssh/sshguess.pcap netcontrol-3-ssh-guesser.bro + netcontrol debug (Debug-All): init + netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::ADDRESS, conn=, flow=, ip=192.168.56.1/32, mac=], expire=10.0 mins, priority=0, location=ACTION_DROP: T, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] + + $ cat netcontrol.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path netcontrol + #open 2018-12-14-18-50-55 + #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin + #types time string enum string enum string enum string string string string int interval string string + 0.000000 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All + 0.000000 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All + 0.000000 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - + 1427726759.303199 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.56.1/32 - - 0 600.000000 ACTION_DROP: T Debug-All + 1427726759.303199 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.56.1/32 - - 0 600.000000 ACTION_DROP: T Debug-All + #close 2018-12-14-18-50-55 Using the :bro:see:`Notice::ACTION_DROP` action of the notice framework also will cause the `dropped` column in `notice.log` to be set to true each time that the NetControl framework enacts a block: -.. btest:: netcontrol-3-ssh-guesser.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd cat notice.log + $ cat notice.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path notice + #open 2018-12-14-18-50-55 + #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude + #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double + 1427726759.303199 - - - - - - - - - SSH::Password_Guessing 192.168.56.1 appears to be guessing SSH passwords (seen in 10 connections). Sampled servers: 192.168.56.103, 192.168.56.103, 192.168.56.103, 192.168.56.103, 192.168.56.103 192.168.56.1 - - - - Notice::ACTION_DROP,Notice::ACTION_LOG 3600.000000 F - - - - - + #close 2018-12-14-18-50-55 Rule API -------- @@ -241,12 +319,32 @@ that the NetControl function has additional functionality, e.g. for logging. Once again, we are going to test our function with a simple example that simply drops all connections on the network: -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-4-drop.bro +.. literalinclude:: netcontrol-4-drop.bro + :caption: + :language: bro + :linenos: -.. btest:: netcontrol-4-drop.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-4-drop.bro - @TEST-EXEC: btest-rst-cmd cat netcontrol.log + $ bro -C -r tls/ecdhe.pcap netcontrol-4-drop.bro + netcontrol debug (Debug-All): init + netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::CONNECTION, conn=[orig_h=192.168.18.50, orig_p=56981/tcp, resp_h=74.125.239.97, resp_p=443/tcp], flow=, ip=, mac=], expire=20.0 secs, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] + + $ cat netcontrol.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path netcontrol + #open 2018-12-14-18-50-55 + #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin + #types time string enum string enum string enum string string string string int interval string string + 0.000000 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All + 0.000000 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All + 0.000000 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - + 1398529018.678276 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::CONNECTION 192.168.18.50/56981<->74.125.239.97/443 - - 0 20.000000 - Debug-All + 1398529018.678276 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::CONNECTION 192.168.18.50/56981<->74.125.239.97/443 - - 0 20.000000 - Debug-All + #close 2018-12-14-18-50-55 The last example shows that :bro:see:`NetControl::add_rule` returns a string identifier that is unique for each rule (uniqueness is not preserved across @@ -281,11 +379,16 @@ discarded before further processing. Here is a simple example which tells Bro to discard all rules for connections originating from the 192.168.* network: -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-5-hook.bro +.. literalinclude:: netcontrol-5-hook.bro + :caption: + :language: bro + :linenos: -.. btest:: netcontrol-5-hook.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-5-hook.bro + $ bro -C -r tls/ecdhe.pcap netcontrol-5-hook.bro + netcontrol debug (Debug-All): init + Ignored connection from, 192.168.18.50 NetControl Events ***************** @@ -355,11 +458,18 @@ Here is a simple example, which uses a trace that contains two connections from the same IP address. After the first connection, the script recognizes that the address is already blocked in the second connection. -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-6-find.bro +.. literalinclude:: netcontrol-6-find.bro + :caption: + :language: bro + :linenos: -.. btest:: netcontrol-6-find.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/google-duplicate.trace ${DOC_ROOT}/frameworks/netcontrol-6-find.bro + $ bro -C -r tls/google-duplicate.trace netcontrol-6-find.bro + netcontrol debug (Debug-All): init + netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::CONNECTION, conn=[orig_h=192.168.4.149, orig_p=60623/tcp, resp_h=74.125.239.129, resp_p=443/tcp], flow=, ip=, mac=], expire=20.0 secs, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] + Rule added + Rule already exists Notice that the functions return vectors because it is possible that several rules exist simultaneously that affect one IP; either there could be @@ -402,11 +512,16 @@ release is contained in the file Using catch and release in your scripts is easy; just use :bro:see:`NetControl::drop_address_catch_release` like in this example: -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-7-catch-release.bro +.. literalinclude:: netcontrol-7-catch-release.bro + :caption: + :language: bro + :linenos: -.. btest:: netcontrol-7-catch-release.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-7-catch-release.bro + $ bro -C -r tls/ecdhe.pcap netcontrol-7-catch-release.bro + netcontrol debug (Debug-All): init + netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::ADDRESS, conn=, flow=, ip=192.168.18.50/32, mac=], expire=10.0 mins, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] Note that you do not have to provide the block time for catch and release; instead, catch and release uses the time intervals specified in @@ -418,9 +533,20 @@ first 10 minutes, it is blocked for 1 hour and then monitored for 24 hours, etc. Catch and release adds its own new logfile in addition to the already existing ones (netcontrol_catch_release.log): -.. btest:: netcontrol-7-catch-release.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd cat netcontrol_catch_release.log + $ cat netcontrol_catch_release.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path netcontrol_catch_release + #open 2018-12-14-18-50-58 + #fields ts rule_id ip action block_interval watch_interval blocked_until watched_until num_blocked location message + #types time string addr enum interval interval time time count string string + 1398529018.678276 2 192.168.18.50 NetControl::DROP 600.000000 3600.000000 1398529618.678276 1398532618.678276 1 - - + 1398529018.678276 2 192.168.18.50 NetControl::DROPPED 600.000000 3600.000000 1398529618.678276 1398532618.678276 1 - - + #close 2018-12-14-18-50-58 In addition to the blocking function, catch and release comes with the :bro:see:`NetControl::get_catch_release_info` function to @@ -531,27 +657,65 @@ the 192.168.17.0/24 network; all other rules will be passed on to the debug plugin. We manually block a few addresses in the :bro:see:`NetControl::init_done` event to verify the correct functionality. -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-8-multiple.bro +.. literalinclude:: netcontrol-8-multiple.bro + :caption: + :language: bro + :linenos: -.. btest:: netcontrol-8-multiple.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/frameworks/netcontrol-8-multiple.bro + $ bro netcontrol-8-multiple.bro + netcontrol debug (Debug-All): init + netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::ADDRESS, conn=, flow=, ip=192.168.17.2/32, mac=], expire=1.0 min, priority=0, location=, out_port=, mod=, id=3, cid=3, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] As you can see, only the single block affecting the 192.168.17.0/24 network is output to the command line. The other two lines are handled by the OpenFlow plugin. We can verify this by looking at netcontrol.log. The plugin column shows which plugin handled a rule and reveals that two rules were handled by OpenFlow: -.. btest:: netcontrol-8-multiple.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd cat netcontrol.log + $ cat netcontrol.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path netcontrol + #open 2018-12-14-18-50-58 + #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin + #types time string enum string enum string enum string string string string int interval string string + 1544813458.913148 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All + 1544813458.913148 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All + 1544813458.913148 - NetControl::MESSAGE - - - - - - - activating plugin with priority 10 - - - Openflow-Log-42 + 1544813458.913148 - NetControl::MESSAGE - - - - - - - activation finished - - - Openflow-Log-42 + 1544813458.913148 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - + 1544813458.913148 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 10.0.0.1/32 - - 0 60.000000 - Openflow-Log-42 + 1544813458.913148 3 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.17.2/32 - - 0 60.000000 - Debug-All + 1544813458.913148 4 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.18.2/32 - - 0 60.000000 - Openflow-Log-42 + 1544813458.913148 3 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.17.2/32 - - 0 60.000000 - Debug-All + 1544813458.913148 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 10.0.0.1/32 - - 0 60.000000 - Openflow-Log-42 + 1544813458.913148 4 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.18.2/32 - - 0 60.000000 - Openflow-Log-42 + #close 2018-12-14-18-50-58 Furthermore, openflow.log also shows the two added rules, converted to OpenFlow flow mods: -.. btest:: netcontrol-8-multiple.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd cat openflow.log + $ cat openflow.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path openflow + #open 2018-12-14-18-50-58 + #fields ts dpid match.in_port match.dl_src match.dl_dst match.dl_vlan match.dl_vlan_pcp match.dl_type match.nw_tos match.nw_proto match.nw_src match.nw_dst match.tp_src match.tp_dst flow_mod.cookie flow_mod.table_id flow_mod.command flow_mod.idle_timeout flow_mod.hard_timeout flow_mod.priority flow_mod.out_port flow_mod.out_group flow_mod.flags flow_mod.actions.out_ports flow_mod.actions.vlan_vid flow_mod.actions.vlan_pcp flow_mod.actions.vlan_strip flow_mod.actions.dl_src flow_mod.actions.dl_dst flow_mod.actions.nw_tos flow_mod.actions.nw_src flow_mod.actions.nw_dst flow_mod.actions.tp_src flow_mod.actions.tp_dst + #types time count count string string count count count count count subnet subnet count count count count enum count count count count count count vector[count] count count bool string string count addr addr count count + 1544813458.913148 42 - - - - - 2048 - - 10.0.0.1/32 - - - 4398046511108 - OpenFlow::OFPFC_ADD 0 60 0 - - 1 (empty) - - F - - - - - - - + 1544813458.913148 42 - - - - - 2048 - - - 10.0.0.1/32 - - 4398046511109 - OpenFlow::OFPFC_ADD 0 60 0 - - 1 (empty) - - F - - - - - - - + 1544813458.913148 42 - - - - - 2048 - - 192.168.18.2/32 - - - 4398046511112 - OpenFlow::OFPFC_ADD 0 60 0 - - 1 (empty) - - F - - - - - - - + 1544813458.913148 42 - - - - - 2048 - - - 192.168.18.2/32 - - 4398046511113 - OpenFlow::OFPFC_ADD 0 60 0 - - 1 (empty) - - F - - - - - - - + #close 2018-12-14-18-50-58 .. note:: @@ -613,16 +777,29 @@ raise the :bro:see:`NetControl::rule_added` and :bro:see:`NetControl::rule_removed` events in your plugin to let NetControl know when a rule was added and removed successfully. -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-9-skeleton.bro +.. literalinclude:: netcontrol-9-skeleton.bro + :caption: + :language: bro + :linenos: This example is already fully functional and we can use it with a script similar to our very first example: -.. btest-include:: ${DOC_ROOT}/frameworks/netcontrol-10-use-skeleton.bro +.. literalinclude:: netcontrol-10-use-skeleton.bro + :caption: + :language: bro + :linenos: -.. btest:: netcontrol-9-skeleton.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-9-skeleton.bro ${DOC_ROOT}/frameworks/netcontrol-10-use-skeleton.bro + $ bro -C -r tls/ecdhe.pcap netcontrol-10-use-skeleton.bro + add, [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::CONNECTION, conn=[orig_h=192.168.18.50, orig_p=56981/tcp, resp_h=74.125.239.97, resp_p=443/tcp], flow=, ip=, mac=], expire=20.0 secs, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={ + + }, _active_plugin_ids={ + + }, _no_expire_plugins={ + + }, _added=F] If you want to write your own plugins, it will be worthwhile to look at the plugins that ship with the NetControl framework to see how they define the diff --git a/doc/frameworks/notice.rst b/doc/frameworks/notice.rst index e37740dee1..c3c484cf4a 100644 --- a/doc/frameworks/notice.rst +++ b/doc/frameworks/notice.rst @@ -14,8 +14,6 @@ Notice Framework alarm emails. This page gives an introduction into writing such a notice policy. -.. contents:: - Overview -------- @@ -91,12 +89,25 @@ Here's a simple example which tells Bro to send an email for all notices of type :bro:see:`SSH::Password_Guessing` if the guesser attempted to log in to the server at 192.168.56.103: -.. btest-include:: ${DOC_ROOT}/frameworks/notice_ssh_guesser.bro +.. literalinclude:: notice_ssh_guesser.bro + :caption: + :language: bro + :linenos: -.. btest:: notice_ssh_guesser.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/ssh/sshguess.pcap ${DOC_ROOT}/frameworks/notice_ssh_guesser.bro - @TEST-EXEC: btest-rst-cmd cat notice.log + $ bro -C -r ssh/sshguess.pcap notice_ssh_guesser.bro + $ cat notice.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path notice + #open 2018-12-13-22-56-35 + #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude + #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double + 1427726759.303199 - - - - - - - - - SSH::Password_Guessing 192.168.56.1 appears to be guessing SSH passwords (seen in 10 connections). Sampled servers: 192.168.56.103, 192.168.56.103, 192.168.56.103, 192.168.56.103, 192.168.56.103 192.168.56.1 - - - - Notice::ACTION_EMAIL,Notice::ACTION_LOG 3600.000000 F - - - - - + #close 2018-12-13-22-56-35 .. note:: @@ -108,7 +119,7 @@ Hooks can also have priorities applied to order their execution like events with a default priority of 0. Greater values are executed first. Setting a hook body to run before default hook bodies might look like this: -.. code:: bro +.. sourcecode:: bro hook Notice::policy(n: Notice::Info) &priority=5 { @@ -178,7 +189,7 @@ SSH analysis scripts sees enough failed logins to a given host, it raises a notice of the type :bro:see:`SSH::Password_Guessing`. The code in the base SSH analysis script which raises the notice looks like this: -.. code:: bro +.. sourcecode:: bro NOTICE([$note=Password_Guessing, $msg=fmt("%s appears to be guessing SSH passwords (seen in %d connections).", key$host, r$num), @@ -289,7 +300,7 @@ for session negotiations where the certificate or certificate chain did not validate successfully against the available certificate authority certificates. -.. code:: bro +.. sourcecode:: bro NOTICE([$note=SSL::Invalid_Server_Cert, $msg=fmt("SSL certificate validation failed with (%s)", c$ssl$validation_status), @@ -335,7 +346,7 @@ There is a field in the :bro:see:`Notice::Info` record named sent. An example of including some information from an HTTP request is included below. -.. code:: bro +.. sourcecode:: bro hook Notice::policy(n: Notice::Info) { diff --git a/doc/frameworks/signatures.rst b/doc/frameworks/signatures.rst index 1443f76ba1..c39c5d050e 100644 --- a/doc/frameworks/signatures.rst +++ b/doc/frameworks/signatures.rst @@ -14,15 +14,10 @@ Signature Framework other NIDS. This page gives a brief overview on Bro's signatures and covers some of their technical subtleties. -.. contents:: - :depth: 2 - Basics ====== -Let's look at an example signature first: - -.. code:: bro-sig +Let's look at an example signature first:: signature my-first-sig { ip-proto == tcp @@ -36,7 +31,7 @@ This signature asks Bro to match the regular expression ``.*root`` on all TCP connections going to port 80. When the signature triggers, Bro will raise an event :bro:id:`signature_match` of the form: -.. code:: bro +.. sourcecode:: bro event signature_match(state: signature_state, msg: string, data: string) @@ -117,9 +112,7 @@ evaluates to true, the whole header condition matches (exception: with ``!=``, the header condition only matches if all values differ). In addition to these pre-defined header keywords, a general header -condition can be defined either as - -.. code:: bro-sig +condition can be defined either as:: header [:] [& ] @@ -141,9 +134,7 @@ are not allowed in the value-list, though you can still inspect any 1, 2, or 4 byte section of an IPv6 header using this keyword. Putting it all together, this is an example condition that is -equivalent to ``dst-ip == 1.2.3.4/16, 5.6.7.8/24``: - -.. code:: bro-sig +equivalent to ``dst-ip == 1.2.3.4/16, 5.6.7.8/24``:: header ip[16:4] == 1.2.3.4/16, 5.6.7.8/24 @@ -162,9 +153,7 @@ Second, it may be prefixed with an analyzer-specific label, in which case the expression is matched against the data as extracted by the corresponding analyzer. -A ``payload`` condition has the form: - -.. code:: bro-sig +A ``payload`` condition has the form:: payload // @@ -272,7 +261,7 @@ two actions defined: Raises a :bro:id:`signature_match` event. The event handler has the following type: - .. code:: bro + .. sourcecode:: bro event signature_match(state: signature_state, msg: string, data: string) diff --git a/doc/frameworks/sumstats.rst b/doc/frameworks/sumstats.rst index aaed35be29..d017d87dcf 100644 --- a/doc/frameworks/sumstats.rst +++ b/doc/frameworks/sumstats.rst @@ -17,8 +17,6 @@ Summary Statistics data sets and making them measurable in practice on large clustered and non-clustered Bro deployments. -.. contents:: - Overview ======== @@ -73,15 +71,18 @@ Sumstats provides a simple way of approaching the problem of trying to count the number of connections over a given time interval. Here is a script with inline documentation that does this with the Sumstats framework: -.. btest-include:: ${DOC_ROOT}/frameworks/sumstats-countconns.bro +.. literalinclude:: sumstats-countconns.bro + :caption: + :language: bro + :linenos: When run on a sample PCAP file from the Bro test suite, the following output is created: -.. btest:: sumstats-countconns - - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/workshop_2011_browse.trace ${DOC_ROOT}/frameworks/sumstats-countconns.bro +.. sourcecode:: console + $ bro -r workshop_2011_browse.trace sumstats-countconns.bro + Number of connections established: 6 Toy scan detection ------------------ @@ -92,14 +93,18 @@ demonstrate how thresholding works in Sumstats and is not meant to be a real-world functional example, that is left to the :doc:`/scripts/policy/misc/scan.bro` script that is included with Bro. -.. btest-include:: ${DOC_ROOT}/frameworks/sumstats-toy-scan.bro +.. literalinclude:: sumstats-toy-scan.bro + :caption: + :language: bro + :linenos: Let's see if there are any hosts that crossed the threshold in a PCAP file containing a host running nmap: -.. btest:: sumstats-toy-scan +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/nmap-vsn.trace ${DOC_ROOT}/frameworks/sumstats-toy-scan.bro + $ bro -r nmap-vsn.trace sumstats-toy-scan.bro + 192.168.1.71 attempted 5 or more connections It seems the host running nmap was detected! diff --git a/doc/httpmonitor/index.rst b/doc/httpmonitor/index.rst index 5a4f28ebfe..caf51f507f 100644 --- a/doc/httpmonitor/index.rst +++ b/doc/httpmonitor/index.rst @@ -1,9 +1,9 @@ .. _http-monitor: -================================ -Monitoring HTTP Traffic with Bro -================================ +======================= +Monitoring HTTP Traffic +======================= Bro can be used to log the entire HTTP traffic from your network to the http.log file. This file can then be used for analysis and auditing @@ -84,31 +84,43 @@ use this to identify a proxy server. We can write a basic script in Bro to handle the http_reply event and detect a reply for a ``GET http://`` request. -.. btest-include:: ${DOC_ROOT}/httpmonitor/http_proxy_01.bro +.. literalinclude:: http_proxy_01.bro + :caption: + :language: bro + :linenos: -.. btest:: http_proxy_01 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/proxy.pcap ${DOC_ROOT}/httpmonitor/http_proxy_01.bro + $ bro -r http/proxy.pcap http_proxy_01.bro + A local server is acting as an open proxy: 192.168.56.101 Basically, the script is checking for a "200 OK" status code on a reply for a request that includes "http:" (case insensitive). In reality, the HTTP protocol defines several success status codes other than 200, so we will extend our basic script to also consider the additional codes. -.. btest-include:: ${DOC_ROOT}/httpmonitor/http_proxy_02.bro +.. literalinclude:: http_proxy_02.bro + :caption: + :language: bro + :linenos: -.. btest:: http_proxy_02 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/proxy.pcap ${DOC_ROOT}/httpmonitor/http_proxy_02.bro + $ bro -r http/proxy.pcap http_proxy_02.bro + A local server is acting as an open proxy: 192.168.56.101 Next, we will make sure that the responding proxy is part of our local network. -.. btest-include:: ${DOC_ROOT}/httpmonitor/http_proxy_03.bro +.. literalinclude:: http_proxy_03.bro + :caption: + :language: bro + :linenos: -.. btest:: http_proxy_03 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/proxy.pcap ${DOC_ROOT}/httpmonitor/http_proxy_03.bro + $ bro -r http/proxy.pcap http_proxy_03.bro + A local server is acting as an open proxy: 192.168.56.101 .. note:: @@ -123,12 +135,25 @@ we will tag the traffic accordingly and define a new ``Open_Proxy`` notification has been fired, we will further suppress it for one day. Below is the complete script. -.. btest-include:: ${DOC_ROOT}/httpmonitor/http_proxy_04.bro +.. literalinclude:: http_proxy_04.bro + :caption: + :language: bro + :linenos: -.. btest:: http_proxy_04 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/proxy.pcap ${DOC_ROOT}/httpmonitor/http_proxy_04.bro - @TEST-EXEC: btest-rst-include notice.log + $ bro -r http/proxy.pcap http_proxy_04.bro + $ cat notice.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path notice + #open 2018-12-13-22-56-39 + #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude + #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double + 1389654450.449603 CHhAvVGS1DHFjwGM9 192.168.56.1 52679 192.168.56.101 80 - - - tcp HTTP::Open_Proxy A local server is acting as an open proxy: 192.168.56.101 - 192.168.56.1 192.168.56.101 80 - - Notice::ACTION_LOG 86400.000000 F - - - - - + #close 2018-12-13-22-56-40 Note that this script only logs the presence of the proxy to ``notice.log``, but if an additional email is desired (and email @@ -148,11 +173,20 @@ instruct Bro to create a copy of all files of certain types that it sees using the :ref:`File Analysis Framework ` (introduced with Bro 2.2): -.. btest-include:: ${DOC_ROOT}/httpmonitor/file_extraction.bro +.. literalinclude:: file_extraction.bro + :caption: + :language: bro + :linenos: -.. btest:: file_extraction +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd -n 5 bro -r ${TRACES}/http/bro.org.pcap ${DOC_ROOT}/httpmonitor/file_extraction.bro + $ bro -r bro.org.pcap file_extraction.bro + Extracting file HTTP-FiIpIB2hRQSDBOSJRg.html + Extracting file HTTP-FMG4bMmVV64eOsCb.txt + Extracting file HTTP-FnaT2a3UDd093opCB9.txt + Extracting file HTTP-FfQGqj4Fhh3pH7nVQj.txt + Extracting file HTTP-FsvATF146kf1Emc21j.txt + [...] Here, the ``mime_to_ext`` table serves two purposes. It defines which mime types to extract and also the file suffix of the extracted files. diff --git a/doc/index.rst b/doc/index.rst index 22fb8cbe1a..d13a8e51bd 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,9 +1,7 @@ -.. Bro documentation master file - -========== -Bro Manual -========== +=========== +Zeek Manual +=========== Introduction Section ==================== @@ -21,8 +19,8 @@ Introduction Section .. _using-bro: -Using Bro Section -================= +Using Zeek/Bro Section +====================== .. toctree:: :maxdepth: 2 diff --git a/doc/install/changes.rst b/doc/install/changes.rst index ad26cfde1a..b20831d977 100644 --- a/doc/install/changes.rst +++ b/doc/install/changes.rst @@ -3,8 +3,6 @@ Detailed Version History ======================== -.. contents:: - --- Bro --- diff --git a/doc/install/cross-compiling.rst b/doc/install/cross-compiling.rst index d47bd83fc0..3fe9814f1a 100644 --- a/doc/install/cross-compiling.rst +++ b/doc/install/cross-compiling.rst @@ -1,11 +1,9 @@ .. _crosstool-NG: https://crosstool-ng.github.io/ .. _CMake toolchain: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html -=================== -Cross Compiling Bro -=================== - -.. contents:: +=============== +Cross Compiling +=============== Prerequisites ============= @@ -25,14 +23,14 @@ You first need to compile a few build tools native to the host system for use during the later cross-compile build. In the root of your Bro source tree: -.. console:: +.. sourcecode:: console ./configure --builddir=../bro-buildtools ( cd ../bro-buildtools && make binpac bifcl ) Next configure Bro to use your cross-compilation toolchain: -.. console:: +.. sourcecode:: console ./configure --toolchain=/home/jon/x-tools/RaspberryPi-toolchain.cmake --with-binpac=$(pwd)/../bro-buildtools/aux/binpac/src/binpac --with-bifcl=$(pwd)/../bro-buildtools/src/bifcl @@ -71,13 +69,13 @@ something the following (using a Raspberry Pi as target system):: If that configuration succeeds you are ready to build: -.. console:: +.. sourcecode:: console make And if that works, install on your host system: -.. console:: +.. sourcecode:: console make install diff --git a/doc/install/install.rst b/doc/install/install.rst index 5901a4c605..76faf0d653 100644 --- a/doc/install/install.rst +++ b/doc/install/install.rst @@ -8,11 +8,9 @@ .. _installing-bro: -============== -Installing Bro -============== - -.. contents:: +========== +Installing +========== Prerequisites ============= @@ -50,13 +48,13 @@ To install the required dependencies, you can use: * RPM/RedHat-based Linux: - .. console:: + .. sourcecode:: console sudo yum install cmake make gcc gcc-c++ flex bison libpcap-devel openssl-devel python-devel swig zlib-devel * DEB/Debian-based Linux: - .. console:: + .. sourcecode:: console sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev @@ -68,7 +66,7 @@ To install the required dependencies, you can use: Most required dependencies should come with a minimal FreeBSD install except for the following. - .. console:: + .. sourcecode:: console sudo pkg install bash cmake swig30 bison python py27-sqlite3 py27-ipaddress @@ -152,7 +150,7 @@ hosted at https://github.com/zeek. See our `git development documentation information on Bro's use of git revision control, but the short story for downloading the full source code experience for Bro via git is: -.. console:: +.. sourcecode:: console git clone --recursive https://github.com/zeek/zeek @@ -163,7 +161,7 @@ for downloading the full source code experience for Bro via git is: The typical way to build and install from source is (for more options, run ``./configure --help``): -.. console:: +.. sourcecode:: console ./configure make @@ -214,13 +212,13 @@ according to the platform/shell/package you're using. For example: Bourne-Shell Syntax: -.. console:: +.. sourcecode:: console export PATH=/usr/local/bro/bin:$PATH C-Shell Syntax: -.. console:: +.. sourcecode:: console setenv PATH /usr/local/bro/bin:$PATH diff --git a/doc/install/release-notes.rst b/doc/install/release-notes.rst index e4aeec6db1..4870e0e5eb 100644 --- a/doc/install/release-notes.rst +++ b/doc/install/release-notes.rst @@ -5,8 +5,6 @@ Release Notes ============= -.. contents:: - .. include:: NEWS.rst diff --git a/doc/install/upgrade.rst b/doc/install/upgrade.rst index 29b64bdeca..94e40d6167 100644 --- a/doc/install/upgrade.rst +++ b/doc/install/upgrade.rst @@ -1,7 +1,7 @@ -============= -Upgrading Bro -============= +========= +Upgrading +========= .. toctree:: diff --git a/doc/intro/index.rst b/doc/intro/index.rst index b58a4dbb5b..c3618aa241 100644 --- a/doc/intro/index.rst +++ b/doc/intro/index.rst @@ -3,8 +3,6 @@ Introduction ============ -.. contents:: - Overview -------- diff --git a/doc/logs/index.rst b/doc/logs/index.rst index 6532b0f844..2a89246560 100644 --- a/doc/logs/index.rst +++ b/doc/logs/index.rst @@ -1,11 +1,9 @@ .. _bro-logging: -=========== -Bro Logging -=========== - -.. contents:: +======= +Logging +======= Once Bro has been deployed in an environment and monitoring live traffic, it will, in its default configuration, begin to produce @@ -39,13 +37,23 @@ to the appropriate log file. As the fields of the log entries can be further customized by the user, the Logging Framework makes use of a header block to ensure that -it remains self-describing. This header entry can be see by running -the Unix utility ``head`` and outputting the first lines of the file: +it remains self-describing. Here's the first few lines of a ``conn.log``. -.. btest:: using_bro - - @TEST-EXEC: btest-rst-cmd bro -r $TRACES/wikipedia.trace - @TEST-EXEC: btest-rst-include -n 15 conn.log +.. sourcecode:: console + + $ cat conn.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path conn + #open 2018-12-10-22-18-00 + #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents + #types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string] + 1300475167.096535 CHhAvVGS1DHFjwGM9 141.142.220.202 5353 224.0.0.251 5353 udp dns - - - S0 - - 0 D 1 73 0 0 - + 1300475167.097012 ClEkJM2Vm5giqnMf4h fe80::217:f2ff:fed7:cf65 5353 ff02::fb 5353 udp dns - - - S0 - - 0 D 1 199 0 0 - + 1300475167.099816 C4J4Th3PJpwUYZZ6gc 141.142.220.50 5353 224.0.0.251 5353 udp dns - - - S0 - - 0 D 1 179 0 0 - + [...] As you can see, the header consists of lines prefixed by ``#`` and includes information such as what separators are being used for @@ -129,15 +137,37 @@ require the user to refer to fields referenced by their position). For example, the following command extracts just the given columns from a ``conn.log``: -.. btest:: using_bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd -n 10 "cat conn.log | bro-cut id.orig_h id.orig_p id.resp_h duration" + $ cat conn.log | bro-cut id.orig_h id.orig_p id.resp_h duration + 141.142.220.202 5353 224.0.0.251 - + fe80::217:f2ff:fed7:cf65 5353 ff02::fb - + 141.142.220.50 5353 224.0.0.251 - + 141.142.220.118 43927 141.142.2.2 0.000435 + 141.142.220.118 37676 141.142.2.2 0.000420 + 141.142.220.118 40526 141.142.2.2 0.000392 + 141.142.220.118 32902 141.142.2.2 0.000317 + 141.142.220.118 59816 141.142.2.2 0.000343 + 141.142.220.118 59714 141.142.2.2 0.000375 + 141.142.220.118 58206 141.142.2.2 0.000339 + [...] The corresponding ``awk`` command will look like this: -.. btest:: using_bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd -n 10 awk \'/^[^#]/ {print \$3, \$4, \$5, \$6, \$9}\' conn.log + $ awk '/^[^#]/ {print $3, $4, $5, $6, $9}' conn.log + 141.142.220.202 5353 224.0.0.251 5353 - + fe80::217:f2ff:fed7:cf65 5353 ff02::fb 5353 - + 141.142.220.50 5353 224.0.0.251 5353 - + 141.142.220.118 43927 141.142.2.2 53 0.000435 + 141.142.220.118 37676 141.142.2.2 53 0.000420 + 141.142.220.118 40526 141.142.2.2 53 0.000392 + 141.142.220.118 32902 141.142.2.2 53 0.000317 + 141.142.220.118 59816 141.142.2.2 53 0.000343 + 141.142.220.118 59714 141.142.2.2 53 0.000375 + 141.142.220.118 58206 141.142.2.2 53 0.000339 + [...] While the output is similar, the advantages to using bro-cut over ``awk`` lay in that, while ``awk`` is flexible and powerful, ``bro-cut`` @@ -191,17 +221,29 @@ includes the human readable time stamp, the unique identifier, the HTTP ``Host``, and HTTP ``URI`` as extracted from the ``http.log`` file: -.. btest:: using_bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd -n 5 "bro-cut -d ts uid host uri < http.log" + $ bro-cut -d ts uid host uri < http.log + 2011-03-18T19:06:08+0000 CUM0KZ3MLUfNB0cl11 bits.wikimedia.org /skins-1.5/monobook/main.css + 2011-03-18T19:06:08+0000 CwjjYJ2WqgTbAqiHl6 upload.wikimedia.org /wikipedia/commons/6/63/Wikipedia-logo.png + 2011-03-18T19:06:08+0000 C3eiCBGOLw3VtHfOj upload.wikimedia.org /wikipedia/commons/thumb/b/bb/Wikipedia_wordmark.svg/174px-Wikipedia_wordmark.svg.png + 2011-03-18T19:06:08+0000 Ck51lg1bScffFj34Ri upload.wikimedia.org /wikipedia/commons/b/bd/Bookshelf-40x201_6.png + 2011-03-18T19:06:08+0000 CtxTCR2Yer0FR1tIBg upload.wikimedia.org /wikipedia/commons/thumb/8/8a/Wikinews-logo.png/35px-Wikinews-logo.png + [...] Often times log files from multiple sources are stored in UTC time to allow easy correlation. Converting the timestamp from a log file to UTC can be accomplished with the ``-u`` option: -.. btest:: using_bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd -n 5 "bro-cut -u ts uid host uri < http.log" + $ bro-cut -u ts uid host uri < http.log + 2011-03-18T19:06:08+0000 CUM0KZ3MLUfNB0cl11 bits.wikimedia.org /skins-1.5/monobook/main.css + 2011-03-18T19:06:08+0000 CwjjYJ2WqgTbAqiHl6 upload.wikimedia.org /wikipedia/commons/6/63/Wikipedia-logo.png + 2011-03-18T19:06:08+0000 C3eiCBGOLw3VtHfOj upload.wikimedia.org /wikipedia/commons/thumb/b/bb/Wikipedia_wordmark.svg/174px-Wikipedia_wordmark.svg.png + 2011-03-18T19:06:08+0000 Ck51lg1bScffFj34Ri upload.wikimedia.org /wikipedia/commons/b/bd/Bookshelf-40x201_6.png + 2011-03-18T19:06:08+0000 CtxTCR2Yer0FR1tIBg upload.wikimedia.org /wikipedia/commons/thumb/8/8a/Wikinews-logo.png/35px-Wikinews-logo.png + [...] The default time format when using the ``-d`` or ``-u`` is the ``strftime`` format string ``%Y-%m-%dT%H:%M:%S%z`` which results in a @@ -211,9 +253,15 @@ using the ``-D`` and ``-U`` flags, using the standard ``strftime`` syntax. For example, to format the timestamp in the US-typical "Middle Endian" you could use a format string of: ``%d-%m-%YT%H:%M:%S%z`` -.. btest:: using_bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd -n 5 "bro-cut -D %d-%m-%YT%H:%M:%S%z ts uid host uri < http.log" + $ bro-cut -D %d-%m-%YT%H:%M:%S%z ts uid host uri < http.log + 18-03-2011T19:06:08+0000 CUM0KZ3MLUfNB0cl11 bits.wikimedia.org /skins-1.5/monobook/main.css + 18-03-2011T19:06:08+0000 CwjjYJ2WqgTbAqiHl6 upload.wikimedia.org /wikipedia/commons/6/63/Wikipedia-logo.png + 18-03-2011T19:06:08+0000 C3eiCBGOLw3VtHfOj upload.wikimedia.org /wikipedia/commons/thumb/b/bb/Wikipedia_wordmark.svg/174px-Wikipedia_wordmark.svg.png + 18-03-2011T19:06:08+0000 Ck51lg1bScffFj34Ri upload.wikimedia.org /wikipedia/commons/b/bd/Bookshelf-40x201_6.png + 18-03-2011T19:06:08+0000 CtxTCR2Yer0FR1tIBg upload.wikimedia.org /wikipedia/commons/thumb/8/8a/Wikinews-logo.png/35px-Wikinews-logo.png + [...] See ``man strfime`` for more options for the format string. @@ -235,16 +283,22 @@ largest number of bytes from the responder by redirecting the output for ``cat conn.log`` into bro-cut to extract the UID and the resp_bytes, then sorting that output by the resp_bytes field. -.. btest:: using_bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd "cat conn.log | bro-cut uid resp_bytes | sort -nrk2 | head -5" + $ cat conn.log | bro-cut uid resp_bytes | sort -nrk2 | head -5 + CwjjYJ2WqgTbAqiHl6 734 + CtxTCR2Yer0FR1tIBg 734 + Ck51lg1bScffFj34Ri 734 + CLNN1k2QMum1aexUK7 734 + CykQaM33ztNt0csB9a 733 Taking the UID of the first of the top responses, we can now crossreference that with the UIDs in the ``http.log`` file. -.. btest:: using_bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd "cat http.log | bro-cut uid id.resp_h method status_code host uri | grep UM0KZ3MLUfNB0cl11" + $ cat http.log | bro-cut uid id.resp_h method status_code host uri | grep UM0KZ3MLUfNB0cl11 + CUM0KZ3MLUfNB0cl11 208.80.152.118 GET 304 bits.wikimedia.org /skins-1.5/monobook/main.css As you can see there are two HTTP ``GET`` requests within the session that Bro identified and logged. Given that HTTP is a stream diff --git a/doc/mimestats/index.rst b/doc/mimestats/index.rst index dd2e039e8a..4aba47dc9a 100644 --- a/doc/mimestats/index.rst +++ b/doc/mimestats/index.rst @@ -37,32 +37,69 @@ in the MIME type, size of the file ("response_body_len"), and the originator host ("orig_h"). We use the MIME type as our key and create observers for the other two values. -.. btest-include:: ${DOC_ROOT}/mimestats/mimestats.bro - :lines: 6-29, 54-64 +.. literalinclude:: mimestats.bro + :caption: + :language: bro + :linenos: + :lines: 6-29 + :lineno-start: 6 + +.. literalinclude:: mimestats.bro + :caption: + :language: bro + :linenos: + :lines: 54-64 + :lineno-start: 54 Next, we create the reducers. The first will accumulate file sizes and the second will make sure we only store a host ID once. Below is the partial code from a :bro:see:`bro_init` handler. -.. btest-include:: ${DOC_ROOT}/mimestats/mimestats.bro - :lines: 34-37 +.. literalinclude:: mimestats.bro + :caption: + :language: bro + :linenos: + :lines: 34-37 + :lineno-start: 34 In our final step, we create the SumStats where we check for the observation interval. Once it expires, we populate the record (defined above) with all the relevant data and write it to a log. -.. btest-include:: ${DOC_ROOT}/mimestats/mimestats.bro - :lines: 38-51 +.. literalinclude:: mimestats.bro + :caption: + :language: bro + :linenos: + :lines: 38-51 + :lineno-start: 38 -After putting the three pieces together we end up with the following final code for -our script. +After putting the three pieces together we end up with the following +final code for our script. -.. btest-include:: ${DOC_ROOT}/mimestats/mimestats.bro +.. literalinclude:: mimestats.bro + :caption: + :language: bro + :linenos: -.. btest:: mimestats +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/bro.org.pcap ${DOC_ROOT}/mimestats/mimestats.bro - @TEST-EXEC: btest-rst-include mime_metrics.log + $ bro -r http/bro.org.pcap mimestats.bro + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path mime_metrics + #open 2018-12-14-16-25-06 + #fields ts ts_delta mtype uniq_hosts hits bytes + #types time interval string count count count + 1389719059.311698 300.000000 image/png 1 9 82176 + 1389719059.311698 300.000000 image/gif 1 1 172 + 1389719059.311698 300.000000 image/x-icon 1 2 2300 + 1389719059.311698 300.000000 text/html 1 2 42231 + 1389719059.311698 300.000000 text/plain 1 15 128001 + 1389719059.311698 300.000000 image/jpeg 1 1 186859 + 1389719059.311698 300.000000 application/pgp-signature 1 1 836 + #close 2018-12-14-16-25-06 .. note:: diff --git a/doc/quickstart/index.rst b/doc/quickstart/index.rst index bfad960726..33222f5a75 100644 --- a/doc/quickstart/index.rst +++ b/doc/quickstart/index.rst @@ -7,8 +7,6 @@ Quick Start Guide ================= -.. contents:: - Bro works on most modern, Unix-based systems and requires no custom hardware. It can be downloaded in either pre-built binary package or source code forms. See :ref:`installing-bro` for instructions on how to @@ -44,20 +42,20 @@ installation that will manage a single Bro instance on the ``localhost``: Now start the BroControl shell like: -.. console:: +.. sourcecode:: console broctl Since this is the first-time use of the shell, perform an initial installation of the BroControl configuration: -.. console:: +.. sourcecode:: console [BroControl] > install Then start up a Bro instance: -.. console:: +.. sourcecode:: console [BroControl] > start @@ -74,7 +72,7 @@ policy and output the results in ``$PREFIX/logs``. You can leave it running for now, but to stop this Bro instance you would do: -.. console:: +.. sourcecode:: console [BroControl] > stop @@ -200,7 +198,7 @@ Let's continue on our path to modify the behavior for the two SSL notices. Looking at :doc:`/scripts/base/frameworks/notice/main.bro`, we see that it advertises: -.. code:: bro +.. sourcecode:: bro module Notice; @@ -212,7 +210,7 @@ we see that it advertises: That's exactly what we want to do for the first notice. Add to ``local.bro``: -.. code:: bro +.. sourcecode:: bro redef Notice::ignored_types += { SSL::Invalid_Server_Cert }; @@ -226,7 +224,7 @@ Then go into the BroControl shell to check whether the configuration change is valid before installing it and then restarting the Bro instance. The "deploy" command does all of this automatically: -.. console:: +.. sourcecode:: console [BroControl] > deploy checking configurations ... @@ -255,12 +253,25 @@ action taken on notices can be user-defined. In ``local.bro``, let's define a new ``policy`` hook handler body: -.. btest-include:: ${DOC_ROOT}/quickstart/conditional-notice.bro +.. literalinclude:: conditional-notice.bro + :caption: + :language: bro + :linenos: -.. btest:: conditional-notice +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/tls/tls-expired-cert.trace ${DOC_ROOT}/quickstart/conditional-notice.bro - @TEST-EXEC: btest-rst-cmd cat notice.log + $ bro -r tls/tls-expired-cert.trace conditional-notice.bro + $ cat notice.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path notice + #open 2018-12-14-17-36-05 + #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude + #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double + 1394745603.293028 CHhAvVGS1DHFjwGM9 192.168.4.149 60539 87.98.220.10 443 F1fX1R2cDOzbvg17ye - - tcp SSL::Certificate_Expired Certificate CN=www.spidh.org,OU=COMODO SSL,OU=Domain Control Validated expired at 2014-03-04-23:59:59.000000000 - 192.168.4.149 87.98.220.10 443 - - Notice::ACTION_EMAIL,Notice::ACTION_LOG 86400.000000 F - - - - - + #close 2018-12-14-17-36-05 You'll just have to trust the syntax for now, but what we've done is first declare our own variable to hold a set of watched addresses, @@ -312,7 +323,7 @@ Monitoring Live Traffic Analyzing live traffic from an interface is simple: -.. console:: +.. sourcecode:: console bro -i en0 @@ -332,7 +343,7 @@ Reading Packet Capture (pcap) Files Capturing packets from an interface and writing them to a file can be done like this: -.. console:: +.. sourcecode:: console sudo tcpdump -i en0 -s 0 -w mypackets.trace @@ -343,7 +354,7 @@ whole packets; in cases where it's not supported use ``-s 65535`` instead). After a while of capturing traffic, kill the ``tcpdump`` (with ctrl-c), and tell Bro to perform all the default analysis on the capture which primarily includes : -.. console:: +.. sourcecode:: console bro -r mypackets.trace @@ -352,7 +363,7 @@ Bro will output log files into the working directory. If you are interested in more detection, you can again load the ``local`` script that we include as a suggested configuration: -.. console:: +.. sourcecode:: console bro -r mypackets.trace local @@ -361,7 +372,7 @@ Telling Bro Which Scripts to Load A command-line invocation of Bro typically looks like: -.. console:: +.. sourcecode:: console bro @@ -378,7 +389,7 @@ directories are included in the default search path for Bro scripts:: These prefix paths can be used to load scripts like this: -.. console:: +.. sourcecode:: console bro -r mypackets.trace frameworks/files/extract-all @@ -407,7 +418,7 @@ customization" and is not overwritten when upgrades take place. To use the site-specific ``local.bro`` script, just add it to the command-line (can also be loaded through scripts with @load): -.. console:: +.. sourcecode:: console bro -i en0 local @@ -416,7 +427,7 @@ This causes Bro to load a script that prints a warning about lacking the information at the command line like this (supply your "local" subnets in place of the example subnets): -.. console:: +.. sourcecode:: console bro -r mypackets.trace local "Site::local_nets += { 1.2.3.0/24, 5.6.7.0/24 }" diff --git a/doc/script-reference/autogenerated-file-analyzer-index.rst b/doc/script-reference/autogenerated-file-analyzer-index.rst new file mode 100644 index 0000000000..3f30afe165 --- /dev/null +++ b/doc/script-reference/autogenerated-file-analyzer-index.rst @@ -0,0 +1,946 @@ +File Analyzers +============== + +.. bro:type:: Files::Tag + + :Type: :bro:type:`enum` + + .. bro:enum:: Files::ANALYZER_DATA_EVENT Files::Tag + + .. bro:enum:: Files::ANALYZER_ENTROPY Files::Tag + + .. bro:enum:: Files::ANALYZER_EXTRACT Files::Tag + + .. bro:enum:: Files::ANALYZER_MD5 Files::Tag + + .. bro:enum:: Files::ANALYZER_SHA1 Files::Tag + + .. bro:enum:: Files::ANALYZER_SHA256 Files::Tag + + .. bro:enum:: Files::ANALYZER_PE Files::Tag + + .. bro:enum:: Files::ANALYZER_UNIFIED2 Files::Tag + + .. bro:enum:: Files::ANALYZER_OCSP_REPLY Files::Tag + + .. bro:enum:: Files::ANALYZER_OCSP_REQUEST Files::Tag + + .. bro:enum:: Files::ANALYZER_X509 Files::Tag + +Bro::FileDataEvent +------------------ + +Delivers file content + +Components +++++++++++ + +:bro:enum:`Files::ANALYZER_DATA_EVENT` + +Bro::FileEntropy +---------------- + +Entropy test file content + +Components +++++++++++ + +:bro:enum:`Files::ANALYZER_ENTROPY` + +Events +++++++ + +.. bro:id:: file_entropy + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ent: :bro:type:`entropy_test_result`) + + This event is generated each time file analysis performs + entropy testing on a file. + + + :f: The file. + + + :ent: The results of the entropy testing. + + +Bro::FileExtract +---------------- + +Extract file content + +Components +++++++++++ + +:bro:enum:`Files::ANALYZER_EXTRACT` + +Events +++++++ + +.. bro:id:: file_extraction_limit + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, args: :bro:type:`Files::AnalyzerArgs`, limit: :bro:type:`count`, len: :bro:type:`count`) + + This event is generated when a file extraction analyzer is about + to exceed the maximum permitted file size allowed by the + *extract_limit* field of :bro:see:`Files::AnalyzerArgs`. + The analyzer is automatically removed from file *f*. + + + :f: The file. + + + :args: Arguments that identify a particular file extraction analyzer. + This is only provided to be able to pass along to + :bro:see:`FileExtract::set_limit`. + + + :limit: The limit, in bytes, the extracted file is about to breach. + + + :len: The length of the file chunk about to be written. + + .. bro:see:: Files::add_analyzer Files::ANALYZER_EXTRACT + +Functions ++++++++++ + +.. bro:id:: FileExtract::__set_limit + + :Type: :bro:type:`function` (file_id: :bro:type:`string`, args: :bro:type:`any`, n: :bro:type:`count`) : :bro:type:`bool` + + :bro:see:`FileExtract::set_limit`. + +Bro::FileHash +------------- + +Hash file content + +Components +++++++++++ + +:bro:enum:`Files::ANALYZER_MD5` + +:bro:enum:`Files::ANALYZER_SHA1` + +:bro:enum:`Files::ANALYZER_SHA256` + +Events +++++++ + +.. bro:id:: file_hash + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, kind: :bro:type:`string`, hash: :bro:type:`string`) + + This event is generated each time file analysis generates a digest of the + file contents. + + + :f: The file. + + + :kind: The type of digest algorithm. + + + :hash: The result of the hashing. + + .. bro:see:: Files::add_analyzer Files::ANALYZER_MD5 + Files::ANALYZER_SHA1 Files::ANALYZER_SHA256 + +Bro::PE +------- + +Portable Executable analyzer + +Components +++++++++++ + +:bro:enum:`Files::ANALYZER_PE` + +Events +++++++ + +.. bro:id:: pe_dos_header + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, h: :bro:type:`PE::DOSHeader`) + + A :abbr:`PE (Portable Executable)` file DOS header was parsed. + This is the top-level header and contains information like the + size of the file, initial value of registers, etc. + + + :f: The file. + + + :h: The parsed DOS header information. + + .. bro:see:: pe_dos_code pe_file_header pe_optional_header pe_section_header + +.. bro:id:: pe_dos_code + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, code: :bro:type:`string`) + + A :abbr:`PE (Portable Executable)` file DOS stub was parsed. + The stub is a valid application that runs under MS-DOS, by default + to inform the user that the program can't be run in DOS mode. + + + :f: The file. + + + :code: The DOS stub + + .. bro:see:: pe_dos_header pe_file_header pe_optional_header pe_section_header + +.. bro:id:: pe_file_header + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, h: :bro:type:`PE::FileHeader`) + + A :abbr:`PE (Portable Executable)` file file header was parsed. + This header contains information like the target machine, + the timestamp when the file was created, the number of sections, and + pointers to other parts of the file. + + + :f: The file. + + + :h: The parsed file header information. + + .. bro:see:: pe_dos_header pe_dos_code pe_optional_header pe_section_header + +.. bro:id:: pe_optional_header + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, h: :bro:type:`PE::OptionalHeader`) + + A :abbr:`PE (Portable Executable)` file optional header was parsed. + This header is required for executable files, but not for object files. + It contains information like OS requirements to execute the file, the + original entry point address, and information needed to load the file + into memory. + + + :f: The file. + + + :h: The parsed optional header information. + + .. bro:see:: pe_dos_header pe_dos_code pe_file_header pe_section_header + +.. bro:id:: pe_section_header + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, h: :bro:type:`PE::SectionHeader`) + + A :abbr:`PE (Portable Executable)` file section header was parsed. + This header contains information like the section name, size, address, + and characteristics. + + + :f: The file. + + + :h: The parsed section header information. + + .. bro:see:: pe_dos_header pe_dos_code pe_file_header pe_optional_header + +Bro::Unified2 +------------- + +Analyze Unified2 alert files. + +Components +++++++++++ + +:bro:enum:`Files::ANALYZER_UNIFIED2` + +Types ++++++ + +.. bro:type:: Unified2::IDSEvent + + :Type: :bro:type:`record` + + sensor_id: :bro:type:`count` + + event_id: :bro:type:`count` + + ts: :bro:type:`time` + + signature_id: :bro:type:`count` + + generator_id: :bro:type:`count` + + signature_revision: :bro:type:`count` + + classification_id: :bro:type:`count` + + priority_id: :bro:type:`count` + + src_ip: :bro:type:`addr` + + dst_ip: :bro:type:`addr` + + src_p: :bro:type:`port` + + dst_p: :bro:type:`port` + + impact_flag: :bro:type:`count` + + impact: :bro:type:`count` + + blocked: :bro:type:`count` + + mpls_label: :bro:type:`count` :bro:attr:`&optional` + Not available in "legacy" IDS events. + + vlan_id: :bro:type:`count` :bro:attr:`&optional` + Not available in "legacy" IDS events. + + packet_action: :bro:type:`count` :bro:attr:`&optional` + Only available in "legacy" IDS events. + + +.. bro:type:: Unified2::Packet + + :Type: :bro:type:`record` + + sensor_id: :bro:type:`count` + + event_id: :bro:type:`count` + + event_second: :bro:type:`count` + + packet_ts: :bro:type:`time` + + link_type: :bro:type:`count` + + data: :bro:type:`string` + + +Events +++++++ + +.. bro:id:: unified2_event + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ev: :bro:type:`Unified2::IDSEvent`) + + Abstract all of the various Unified2 event formats into + a single event. + + + :f: The file. + + + :ev: TODO. + + +.. bro:id:: unified2_packet + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, pkt: :bro:type:`Unified2::Packet`) + + The Unified2 packet format event. + + + :f: The file. + + + :pkt: TODO. + + +Bro::X509 +--------- + +X509 and OCSP analyzer + +Components +++++++++++ + +:bro:enum:`Files::ANALYZER_OCSP_REPLY` + +:bro:enum:`Files::ANALYZER_OCSP_REQUEST` + +:bro:enum:`Files::ANALYZER_X509` + +Types ++++++ + +.. bro:type:: X509::Certificate + + :Type: :bro:type:`record` + + version: :bro:type:`count` :bro:attr:`&log` + Version number. + + serial: :bro:type:`string` :bro:attr:`&log` + Serial number. + + subject: :bro:type:`string` :bro:attr:`&log` + Subject. + + issuer: :bro:type:`string` :bro:attr:`&log` + Issuer. + + cn: :bro:type:`string` :bro:attr:`&optional` + Last (most specific) common name. + + not_valid_before: :bro:type:`time` :bro:attr:`&log` + Timestamp before when certificate is not valid. + + not_valid_after: :bro:type:`time` :bro:attr:`&log` + Timestamp after when certificate is not valid. + + key_alg: :bro:type:`string` :bro:attr:`&log` + Name of the key algorithm + + sig_alg: :bro:type:`string` :bro:attr:`&log` + Name of the signature algorithm + + key_type: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Key type, if key parseable by openssl (either rsa, dsa or ec) + + key_length: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Key length in bits + + exponent: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Exponent, if RSA-certificate + + curve: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Curve, if EC-certificate + + +.. bro:type:: X509::Extension + + :Type: :bro:type:`record` + + name: :bro:type:`string` + Long name of extension. oid if name not known + + short_name: :bro:type:`string` :bro:attr:`&optional` + Short name of extension if known + + oid: :bro:type:`string` + Oid of extension + + critical: :bro:type:`bool` + True if extension is critical + + value: :bro:type:`string` + Extension content parsed to string for known extensions. Raw data otherwise. + + +.. bro:type:: X509::BasicConstraints + + :Type: :bro:type:`record` + + ca: :bro:type:`bool` :bro:attr:`&log` + CA flag set? + + path_len: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Maximum path length + :Attributes: :bro:attr:`&log` + + +.. bro:type:: X509::SubjectAlternativeName + + :Type: :bro:type:`record` + + dns: :bro:type:`string_vec` :bro:attr:`&optional` :bro:attr:`&log` + List of DNS entries in SAN + + uri: :bro:type:`string_vec` :bro:attr:`&optional` :bro:attr:`&log` + List of URI entries in SAN + + email: :bro:type:`string_vec` :bro:attr:`&optional` :bro:attr:`&log` + List of email entries in SAN + + ip: :bro:type:`addr_vec` :bro:attr:`&optional` :bro:attr:`&log` + List of IP entries in SAN + + other_fields: :bro:type:`bool` + True if the certificate contained other, not recognized or parsed name fields + + +.. bro:type:: X509::Result + + :Type: :bro:type:`record` + + result: :bro:type:`int` + OpenSSL result code + + result_string: :bro:type:`string` + Result as string + + chain_certs: :bro:type:`vector` of :bro:type:`opaque` of x509 :bro:attr:`&optional` + References to the final certificate chain, if verification successful. End-host certificate is first. + + Result of an X509 certificate chain verification + +Events +++++++ + +.. bro:id:: x509_certificate + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, cert_ref: :bro:type:`opaque` of x509, cert: :bro:type:`X509::Certificate`) + + Generated for encountered X509 certificates, e.g., in the clear SSL/TLS + connection handshake. + + See `Wikipedia `__ for more information + about the X.509 format. + + + :f: The file. + + + :cert_ref: An opaque pointer to the underlying OpenSSL data structure of the + certificate. + + + :cert: The parsed certificate information. + + .. bro:see:: x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse x509_verify + x509_get_certificate_string x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: x509_extension + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ext: :bro:type:`X509::Extension`) + + Generated for X509 extensions seen in a certificate. + + See `Wikipedia `__ for more information + about the X.509 format. + + + :f: The file. + + + :ext: The parsed extension. + + .. bro:see:: x509_certificate x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse x509_verify + x509_get_certificate_string x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: x509_ext_basic_constraints + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ext: :bro:type:`X509::BasicConstraints`) + + Generated for the X509 basic constraints extension seen in a certificate. + This extension can be used to identify the subject of a certificate as a CA. + + + :f: The file. + + + :ext: The parsed basic constraints extension. + + .. bro:see:: x509_certificate x509_extension + x509_ext_subject_alternative_name x509_parse x509_verify + x509_get_certificate_string x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: x509_ext_subject_alternative_name + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ext: :bro:type:`X509::SubjectAlternativeName`) + + Generated for the X509 subject alternative name extension seen in a certificate. + This extension can be used to allow additional entities to be bound to the + subject of the certificate. Usually it is used to specify one or multiple DNS + names for which a certificate is valid. + + + :f: The file. + + + :ext: The parsed subject alternative name extension. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_parse x509_verify x509_ocsp_ext_signed_certificate_timestamp + x509_get_certificate_string + +.. bro:id:: x509_ocsp_ext_signed_certificate_timestamp + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, version: :bro:type:`count`, logid: :bro:type:`string`, timestamp: :bro:type:`count`, hash_algorithm: :bro:type:`count`, signature_algorithm: :bro:type:`count`, signature: :bro:type:`string`) + + Generated for the signed_certificate_timestamp X509 extension as defined in + :rfc:`6962`. The extension is used to transmit signed proofs that are + used for Certificate Transparency. Raised when the extension is encountered + in an X.509 certificate or in an OCSP reply. + + + :f: The file. + + + :version: the version of the protocol to which the SCT conforms. Always + should be 0 (representing version 1) + + + :logid: 32 bit key id + + + :timestamp: the NTP Time when the entry was logged measured since + the epoch, ignoring leap seconds, in milliseconds. + + + :signature_and_hashalgorithm: signature and hash algorithm used for the + digitally_signed struct + + + :signature: signature part of the digitally_signed struct + + .. bro:see:: ssl_extension_signed_certificate_timestamp x509_extension x509_ext_basic_constraints + x509_parse x509_verify x509_ext_subject_alternative_name + x509_get_certificate_string ssl_extension_signed_certificate_timestamp + sct_verify ocsp_request ocsp_request_certificate ocsp_response_status + ocsp_response_bytes ocsp_response_certificate + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_request + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, version: :bro:type:`count`) + + Event that is raised when encountering an OCSP request, e.g. in an HTTP + connection. See :rfc:`6960` for more details. + + This event is raised exactly once for each OCSP Request. + + + :f: The file. + + + :req: version: the version of the OCSP request. Typically 0 (Version 1). + + .. bro:see:: ocsp_request_certificate ocsp_response_status + ocsp_response_bytes ocsp_response_certificate ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_request_certificate + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, hashAlgorithm: :bro:type:`string`, issuerNameHash: :bro:type:`string`, issuerKeyHash: :bro:type:`string`, serialNumber: :bro:type:`string`) + + Event that is raised when encountering an OCSP request for a certificate, + e.g. in an HTTP connection. See :rfc:`6960` for more details. + + Note that a single OCSP request can contain requests for several certificates. + Thus this event can fire several times for one OCSP request, each time + requesting information for a different (or in theory even the same) certificate. + + + :f: The file. + + + :hashAlgorithm: The hash algorithm used for the issuerKeyHash. + + + :issuerKeyHash: Hash of the issuers public key. + + + :serialNumber: Serial number of the certificate for which the status is requested. + + .. bro:see:: ocsp_request ocsp_response_status + ocsp_response_bytes ocsp_response_certificate ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_response_status + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, status: :bro:type:`string`) + + This event is raised when encountering an OCSP reply, e.g. in an HTTP + connection or a TLS extension. See :rfc:`6960` for more details. + + This event is raised exactly once for each OCSP reply. + + + :f: The file. + + + :status: The status of the OCSP response (e.g. succesful, malformedRequest, tryLater). + + .. bro:see:: ocsp_request ocsp_request_certificate + ocsp_response_bytes ocsp_response_certificate ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_response_bytes + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, resp_ref: :bro:type:`opaque` of ocsp_resp, status: :bro:type:`string`, version: :bro:type:`count`, responderId: :bro:type:`string`, producedAt: :bro:type:`time`, signatureAlgorithm: :bro:type:`string`, certs: :bro:type:`x509_opaque_vector`) + + This event is raised when encountering an OCSP response that contains response information. + An OCSP reply can be encountered, for example, in an HTTP connection or + a TLS extension. See :rfc:`6960` for more details on OCSP. + + + :f: The file. + + + :req_ref: An opaque pointer to the underlying OpenSSL data structure of the + OCSP response. + + + :status: The status of the OCSP response (e.g. succesful, malformedRequest, tryLater). + + + :version: Version of the OCSP response (typically - for version 1). + + + :responderId: The id of the OCSP responder; either a public key hash or a distinguished name. + + + :producedAt: Time at which the reply was produced. + + + :signatureAlgorithm: Algorithm used for the OCSP signature. + + + :certs: Optional list of certificates that are sent with the OCSP response; these typically + are needed to perform validation of the reply. + + .. bro:see:: ocsp_request ocsp_request_certificate ocsp_response_status + ocsp_response_certificate ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_response_certificate + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, hashAlgorithm: :bro:type:`string`, issuerNameHash: :bro:type:`string`, issuerKeyHash: :bro:type:`string`, serialNumber: :bro:type:`string`, certStatus: :bro:type:`string`, revokeTime: :bro:type:`time`, revokeReason: :bro:type:`string`, thisUpdate: :bro:type:`time`, nextUpdate: :bro:type:`time`) + + This event is raised for each SingleResponse contained in an OCSP response. + See :rfc:`6960` for more details on OCSP. + + + :f: The file. + + + :hashAlgorithm: The hash algorithm used for issuerNameHash and issuerKeyHash. + + + :issuerNameHash: Hash of the issuer's distinguished name. + + + :issuerKeyHash: Hash of the issuer's public key. + + + :serialNumber: Serial number of the affected certificate. + + + :certStatus: Status of the certificate. + + + :revokeTime: Time the certificate was revoked, 0 if not revoked. + + + :revokeTeason: Reason certificate was revoked; empty string if not revoked or not specified. + + + :thisUpdate: Time this response was generated. + + + :nextUpdate: Time next response will be ready; 0 if not supploed. + + .. bro:see:: ocsp_request ocsp_request_certificate ocsp_response_status + ocsp_response_bytes ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_extension + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ext: :bro:type:`X509::Extension`, global_resp: :bro:type:`bool`) + + This event is raised when an OCSP extension is encountered in an OCSP response. + See :rfc:`6960` for more details on OCSP. + + + :f: The file. + + + :ext: The parsed extension (same format as X.509 extensions). + + + :global_resp: T if extension encountered in the global response (in ResponseData), + F when encountered in a SingleResponse. + + .. bro:see:: ocsp_request ocsp_request_certificate ocsp_response_status + ocsp_response_bytes ocsp_response_certificate + x509_ocsp_ext_signed_certificate_timestamp + +Functions ++++++++++ + +.. bro:id:: x509_parse + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509) : :bro:type:`X509::Certificate` + + Parses a certificate into an X509::Certificate structure. + + + :cert: The X509 certificate opaque handle. + + + :returns: A X509::Certificate structure. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_verify + x509_get_certificate_string + +.. bro:id:: x509_get_certificate_string + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, pem: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional`) : :bro:type:`string` + + Returns the string form of a certificate. + + + :cert: The X509 certificate opaque handle. + + + :pem: A boolean that specifies if the certificate is returned + in pem-form (true), or as the raw ASN1 encoded binary + (false). + + + :returns: X509 certificate as a string. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse x509_verify + +.. bro:id:: x509_ocsp_verify + + :Type: :bro:type:`function` (certs: :bro:type:`x509_opaque_vector`, ocsp_reply: :bro:type:`string`, root_certs: :bro:type:`table_string_of_string`, verify_time: :bro:type:`time` :bro:attr:`&default` = ``0.0`` :bro:attr:`&optional`) : :bro:type:`X509::Result` + + Verifies an OCSP reply. + + + :certs: Specifies the certificate chain to use. Server certificate first. + + + :ocsp_reply: the ocsp reply to validate. + + + :root_certs: A list of root certificates to validate the certificate chain. + + + :verify_time: Time for the validity check of the certificates. + + + :returns: A record of type X509::Result containing the result code of the + verify operation. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse + x509_get_certificate_string x509_verify + +.. bro:id:: x509_verify + + :Type: :bro:type:`function` (certs: :bro:type:`x509_opaque_vector`, root_certs: :bro:type:`table_string_of_string`, verify_time: :bro:type:`time` :bro:attr:`&default` = ``0.0`` :bro:attr:`&optional`) : :bro:type:`X509::Result` + + Verifies a certificate. + + + :certs: Specifies a certificate chain that is being used to validate + the given certificate against the root store given in *root_certs*. + The host certificate has to be at index 0. + + + :root_certs: A list of root certificates to validate the certificate chain. + + + :verify_time: Time for the validity check of the certificates. + + + :returns: A record of type X509::Result containing the result code of the + verify operation. In case of success also returns the full + certificate chain. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse + x509_get_certificate_string x509_ocsp_verify sct_verify + +.. bro:id:: sct_verify + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, logid: :bro:type:`string`, log_key: :bro:type:`string`, signature: :bro:type:`string`, timestamp: :bro:type:`count`, hash_algorithm: :bro:type:`count`, issuer_key_hash: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`bool` + + Verifies a Signed Certificate Timestamp as used for Certificate Transparency. + See RFC6962 for more details. + + + :cert: Certificate against which the SCT should be validated. + + + :logid: Log id of the SCT. + + + :log_key: Public key of the Log that issued the SCT proof. + + + :timestamp: Timestamp at which the proof was generated. + + + :hash_algorithm: Hash algorithm that was used for the SCT proof. + + + :issuer_key_hash: The SHA-256 hash of the certificate issuer's public key. + This only has to be provided if the SCT was encountered in an X.509 + certificate extension; in that case, it is necessary for validation. + + + :returns: T if the validation could be performed succesfully, F otherwhise. + + .. bro:see:: ssl_extension_signed_certificate_timestamp + x509_ocsp_ext_signed_certificate_timestamp + x509_verify + +.. bro:id:: x509_subject_name_hash + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, hash_alg: :bro:type:`count`) : :bro:type:`string` + + Get the hash of the subject's distinguished name. + + + :cert: The X509 certificate opaque handle. + + + :hash_alg: the hash algorithm to use, according to the IANA mapping at + + :https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18 + + + :returns: The hash as a string. + + .. bro:see:: x509_issuer_name_hash x509_spki_hash + x509_verify sct_verify + +.. bro:id:: x509_issuer_name_hash + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, hash_alg: :bro:type:`count`) : :bro:type:`string` + + Get the hash of the issuer's distinguished name. + + + :cert: The X509 certificate opaque handle. + + + :hash_alg: the hash algorithm to use, according to the IANA mapping at + + :https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18 + + + :returns: The hash as a string. + + .. bro:see:: x509_subject_name_hash x509_spki_hash + x509_verify sct_verify + +.. bro:id:: x509_spki_hash + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, hash_alg: :bro:type:`count`) : :bro:type:`string` + + Get the hash of the Subject Public Key Information of the certificate. + + + :cert: The X509 certificate opaque handle. + + + :hash_alg: the hash algorithm to use, according to the IANA mapping at + + :https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18 + + + :returns: The hash as a string. + + .. bro:see:: x509_subject_name_hash x509_issuer_name_hash + x509_verify sct_verify + diff --git a/doc/script-reference/autogenerated-package-index.rst b/doc/script-reference/autogenerated-package-index.rst new file mode 100644 index 0000000000..11ff0db44a --- /dev/null +++ b/doc/script-reference/autogenerated-package-index.rst @@ -0,0 +1,309 @@ +:doc:`base/frameworks/logging ` + + The logging framework provides a flexible key-value based logging interface. + +:doc:`base/frameworks/logging/postprocessors ` + + Support for postprocessors in the logging framework. + +:doc:`base/frameworks/broker ` + + The Broker communication framework facilitates connecting to remote Bro + instances to share state and transfer events. + +:doc:`base/frameworks/input ` + + The input framework provides a way to read previously stored data either as + an event stream or into a Bro table. + +:doc:`base/frameworks/analyzer ` + + The analyzer framework allows to dynamically enable or disable Bro's + protocol analyzers, as well as to manage the well-known ports which + automatically activate a particular analyzer for new connections. + +:doc:`base/frameworks/files ` + + The file analysis framework provides an interface for driving the analysis + of files, possibly independent of any network protocol over which they're + transported. + +:doc:`base/frameworks/files/magic ` + + +:doc:`base/bif ` + + +:doc:`base/bif/plugins ` + + +:doc:`base/frameworks/reporter ` + + This framework is intended to create an output and filtering path for + internally generated messages/warnings/errors. + +:doc:`base/frameworks/notice ` + + The notice framework enables Bro to "notice" things which are odd or + potentially bad, leaving it to the local configuration to define which + of them are actionable. This decoupling of detection and reporting allows + Bro to be customized to the different needs that sites have. + +:doc:`base/frameworks/cluster ` + + The cluster framework provides for establishing and controlling a cluster + of Bro instances. + +:doc:`base/frameworks/control ` + + The control framework provides the foundation for providing "commands" + that can be taken remotely at runtime to modify a running Bro instance + or collect information from the running instance. + +:doc:`base/frameworks/netcontrol ` + + The NetControl framework provides a way for Bro to interact with networking + hard- and software, e.g. for dropping and shunting IP addresses/connections, + etc. + +:doc:`base/frameworks/netcontrol/plugins ` + + Plugins for the NetControl framework. + +:doc:`base/frameworks/openflow ` + + The OpenFlow framework exposes the data structures and functions + necessary to interface to OpenFlow capable hardware. + +:doc:`base/frameworks/openflow/plugins ` + + Plugins for the OpenFlow framework. + +:doc:`base/frameworks/dpd ` + + The DPD (dynamic protocol detection) activates port-independent protocol + detection and selectively disables analyzers if protocol violations occur. + +:doc:`base/frameworks/signatures ` + + The signature framework provides for doing low-level pattern matching. While + signatures are not Bro's preferred detection tool, they sometimes come in + handy and are closer to what many people are familiar with from using + other NIDS. + +:doc:`base/frameworks/packet-filter ` + + The packet filter framework supports how Bro sets its BPF capture filter. + +:doc:`base/frameworks/software ` + + The software framework provides infrastructure for maintaining a table + of software versions seen on the network. The version parsing itself + is carried out by external protocol-specific scripts that feed into + this framework. + +:doc:`base/frameworks/intel ` + + The intelligence framework provides a way to store and query intelligence + data (such as IP addresses or strings). Metadata can also be associated + with the intelligence. + +:doc:`base/frameworks/config ` + + The configuration framework provides a way to change the Bro configuration + in "option" values at run-time. + +:doc:`base/frameworks/sumstats ` + + The summary statistics framework provides a way to summarize large streams + of data into simple reduced measurements. + +:doc:`base/frameworks/sumstats/plugins ` + + Plugins for the summary statistics framework. + +:doc:`base/frameworks/tunnels ` + + The tunnels framework handles the tracking/logging of tunnels (e.g. Teredo, + AYIYA, or IP-in-IP such as 6to4 where "IP" is either IPv4 or IPv6). + +:doc:`base/protocols/conn ` + + Support for connection (TCP, UDP, or ICMP) analysis. + +:doc:`base/protocols/dce-rpc ` + + Support for DCE/RPC (Distributed Computing Environment/Remote Procedure + Calls) protocol analysis. + +:doc:`base/protocols/dhcp ` + + Support for Dynamic Host Configuration Protocol (DHCP) analysis. + +:doc:`base/protocols/dnp3 ` + + Support for Distributed Network Protocol (DNP3) analysis. + +:doc:`base/protocols/dns ` + + Support for Domain Name System (DNS) protocol analysis. + +:doc:`base/protocols/ftp ` + + Support for File Transfer Protocol (FTP) analysis. + +:doc:`base/protocols/ssl ` + + Support for Secure Sockets Layer (SSL)/Transport Layer Security(TLS) protocol analysis. + +:doc:`base/files/x509 ` + + Support for X509 certificates with the file analysis framework. + Also supports parsing OCSP requests and responses. + +:doc:`base/files/hash ` + + Support for file hashes with the file analysis framework. + +:doc:`base/protocols/http ` + + Support for Hypertext Transfer Protocol (HTTP) analysis. + +:doc:`base/protocols/imap ` + + Support for the Internet Message Access Protocol (IMAP). + + Note that currently the IMAP analyzer only supports analyzing IMAP sessions + until they do or do not switch to TLS using StartTLS. Hence, we do not get + mails from IMAP sessions, only X509 certificates. + +:doc:`base/protocols/irc ` + + Support for Internet Relay Chat (IRC) protocol analysis. + +:doc:`base/protocols/krb ` + + Support for Kerberos protocol analysis. + +:doc:`base/protocols/modbus ` + + Support for Modbus protocol analysis. + +:doc:`base/protocols/mysql ` + + Support for MySQL protocol analysis. + +:doc:`base/protocols/ntlm ` + + Support for NT LAN Manager (NTLM) protocol analysis. + +:doc:`base/protocols/pop3 ` + + Support for POP3 (Post Office Protocol) protocol analysis. + +:doc:`base/protocols/radius ` + + Support for RADIUS protocol analysis. + +:doc:`base/protocols/rdp ` + + Support for Remote Desktop Protocol (RDP) analysis. + +:doc:`base/protocols/rfb ` + + Support for Remote FrameBuffer analysis. This includes all VNC servers. + +:doc:`base/protocols/sip ` + + Support for Session Initiation Protocol (SIP) analysis. + +:doc:`base/protocols/snmp ` + + Support for Simple Network Management Protocol (SNMP) analysis. + +:doc:`base/protocols/smb ` + + Support for SMB protocol analysis. + +:doc:`base/protocols/smtp ` + + Support for Simple Mail Transfer Protocol (SMTP) analysis. + +:doc:`base/protocols/socks ` + + Support for Socket Secure (SOCKS) protocol analysis. + +:doc:`base/protocols/ssh ` + + Support for SSH protocol analysis. + +:doc:`base/protocols/syslog ` + + Support for Syslog protocol analysis. + +:doc:`base/protocols/tunnels ` + + Provides DPD signatures for tunneling protocols that otherwise + wouldn't be detected at all. + +:doc:`base/protocols/xmpp ` + + Support for the Extensible Messaging and Presence Protocol (XMPP). + + Note that currently the XMPP analyzer only supports analyzing XMPP sessions + until they do or do not switch to TLS using StartTLS. Hence, we do not get + actual chat information from XMPP sessions, only X509 certificates. + +:doc:`base/files/pe ` + + Support for Portable Executable (PE) file analysis. + +:doc:`base/files/extract ` + + Support for extracting files with the file analysis framework. + +:doc:`base/files/unified2 ` + + Support for Unified2 files in the file analysis framework. + +:doc:`broxygen ` + + This package is loaded during the process which automatically generates + reference documentation for all Bro scripts (i.e. "Broxygen"). Its only + purpose is to provide an easy way to load all known Bro scripts plus any + extra scripts needed or used by the documentation process. + +:doc:`policy/frameworks/intel/seen ` + + Scripts that send data to the intelligence framework. + +:doc:`policy/frameworks/notice ` + + +:doc:`policy/integration/barnyard2 ` + + Integration with Barnyard2. + +:doc:`policy/integration/collective-intel ` + + The scripts in this module are for deeper integration with the + Collective Intelligence Framework (CIF) since Bro's Intel framework + doesn't natively behave the same as CIF nor does it store and maintain + the same data in all cases. + +:doc:`policy/misc/detect-traceroute ` + + Detect hosts that are running traceroute. + +:doc:`policy/tuning ` + + Miscellaneous tuning parameters. + +:doc:`policy/tuning/defaults ` + + Sets various defaults, and prints warning messages to stdout under + certain conditions. + +:doc:`policy/protocols/smb ` + + diff --git a/doc/script-reference/autogenerated-protocol-analyzer-index.rst b/doc/script-reference/autogenerated-protocol-analyzer-index.rst new file mode 100644 index 0000000000..0758142e1e --- /dev/null +++ b/doc/script-reference/autogenerated-protocol-analyzer-index.rst @@ -0,0 +1,14385 @@ +Protocol Analyzers +================== + +.. bro:type:: Analyzer::Tag + + :Type: :bro:type:`enum` + + .. bro:enum:: Analyzer::ANALYZER_AYIYA Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_BACKDOOR Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_BITTORRENT Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_BITTORRENTTRACKER Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONNSIZE Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_DCE_RPC Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_DHCP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_DNP3_TCP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_DNP3_UDP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTS_DNS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_DNS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_FTP_DATA Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_IRC_DATA Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_FINGER Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_FTP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_FTP_ADAT Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_GNUTELLA Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_GSSAPI Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_GTPV1 Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_HTTP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_ICMP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_IDENT Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_IMAP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_INTERCONN Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_IRC Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_KRB Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_KRB_TCP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTS_RLOGIN Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTS_RSH Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_LOGIN Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_NVT Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_RLOGIN Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_RSH Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_TELNET Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_MODBUS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_MYSQL Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTS_NCP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_NCP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTS_NETBIOSSSN Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_NETBIOSSSN Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_NTLM Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_NTP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_PIA_TCP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_PIA_UDP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_POP3 Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_RADIUS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_RDP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_RFB Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTS_NFS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTS_RPC Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_MOUNT Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_NFS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_PORTMAPPER Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_SIP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTS_SMB Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_SMB Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_SMTP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_SNMP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_SOCKS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_SSH Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_DTLS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_SSL Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_STEPPINGSTONE Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_SYSLOG Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTLINE Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_CONTENTS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_TCP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_TCPSTATS Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_TEREDO Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_UDP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_XMPP Analyzer::Tag + + .. bro:enum:: Analyzer::ANALYZER_ZIP Analyzer::Tag + +Bro::ARP +-------- + +ARP Parsing + +Components +++++++++++ + +Events +++++++ + +.. bro:id:: arp_request + + :Type: :bro:type:`event` (mac_src: :bro:type:`string`, mac_dst: :bro:type:`string`, SPA: :bro:type:`addr`, SHA: :bro:type:`string`, TPA: :bro:type:`addr`, THA: :bro:type:`string`) + + Generated for ARP requests. + + See `Wikipedia `__ + for more information about the ARP protocol. + + + :mac_src: The request's source MAC address. + + + :mac_dst: The request's destination MAC address. + + + :SPA: The sender protocol address. + + + :SHA: The sender hardware address. + + + :TPA: The target protocol address. + + + :THA: The target hardware address. + + .. bro:see:: arp_reply bad_arp + +.. bro:id:: arp_reply + + :Type: :bro:type:`event` (mac_src: :bro:type:`string`, mac_dst: :bro:type:`string`, SPA: :bro:type:`addr`, SHA: :bro:type:`string`, TPA: :bro:type:`addr`, THA: :bro:type:`string`) + + Generated for ARP replies. + + See `Wikipedia `__ + for more information about the ARP protocol. + + + :mac_src: The reply's source MAC address. + + + :mac_dst: The reply's destination MAC address. + + + :SPA: The sender protocol address. + + + :SHA: The sender hardware address. + + + :TPA: The target protocol address. + + + :THA: The target hardware address. + + .. bro:see:: arp_request bad_arp + +.. bro:id:: bad_arp + + :Type: :bro:type:`event` (SPA: :bro:type:`addr`, SHA: :bro:type:`string`, TPA: :bro:type:`addr`, THA: :bro:type:`string`, explanation: :bro:type:`string`) + + Generated for ARP packets that Bro cannot interpret. Examples are packets + with non-standard hardware address formats or hardware addresses that do not + match the originator of the packet. + + + :SPA: The sender protocol address. + + + :SHA: The sender hardware address. + + + :TPA: The target protocol address. + + + :THA: The target hardware address. + + + :explanation: A short description of why the ARP packet is considered "bad". + + .. bro:see:: arp_reply arp_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +Bro::AYIYA +---------- + +AYIYA Analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_AYIYA` + +Bro::BackDoor +------------- + +Backdoor Analyzer deprecated + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_BACKDOOR` + +Events +++++++ + +.. bro:id:: backdoor_stats + + :Type: :bro:type:`event` (c: :bro:type:`connection`, os: :bro:type:`backdoor_endp_stats`, rs: :bro:type:`backdoor_endp_stats`) + + Deprecated. Will be removed. + +.. bro:id:: backdoor_remove_conn + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: ftp_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: gnutella_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: http_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: irc_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: telnet_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, len: :bro:type:`count`) + + Deprecated. Will be removed. + +.. bro:id:: ssh_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Deprecated. Will be removed. + +.. bro:id:: rlogin_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, num_null: :bro:type:`count`, len: :bro:type:`count`) + + Deprecated. Will be removed. + +.. bro:id:: smtp_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: http_proxy_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +Bro::BitTorrent +--------------- + +BitTorrent Analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_BITTORRENT` + +:bro:enum:`Analyzer::ANALYZER_BITTORRENTTRACKER` + +Events +++++++ + +.. bro:id:: bittorrent_peer_handshake + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, reserved: :bro:type:`string`, info_hash: :bro:type:`string`, peer_id: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_have bittorrent_peer_interested bittorrent_peer_keep_alive + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_keep_alive + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_choke + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_unchoke + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_interested + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_keep_alive + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_not_interested + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_have + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, piece_index: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_interested bittorrent_peer_keep_alive + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_bitfield + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, bitfield: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_cancel bittorrent_peer_choke bittorrent_peer_handshake + bittorrent_peer_have bittorrent_peer_interested bittorrent_peer_keep_alive + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, index: :bro:type:`count`, begin: :bro:type:`count`, length: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_piece + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, index: :bro:type:`count`, begin: :bro:type:`count`, piece_length: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_cancel + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, index: :bro:type:`count`, begin: :bro:type:`count`, length: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_port + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, listen_port: :bro:type:`port`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_unknown + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, message_id: :bro:type:`count`, data: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_weird + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown + +.. bro:id:: bt_tracker_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, uri: :bro:type:`string`, headers: :bro:type:`bt_tracker_headers`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bt_tracker_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, status: :bro:type:`count`, headers: :bro:type:`bt_tracker_headers`, peers: :bro:type:`bittorrent_peer_set`, benc: :bro:type:`bittorrent_benc_dir`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bt_tracker_response_not_ok + + :Type: :bro:type:`event` (c: :bro:type:`connection`, status: :bro:type:`count`, headers: :bro:type:`bt_tracker_headers`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bt_tracker_weird + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +Bro::ConnSize +------------- + +Connection size analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_CONNSIZE` + +Events +++++++ + +.. bro:id:: conn_bytes_threshold_crossed + + :Type: :bro:type:`event` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) + + Generated for a connection that crossed a set byte threshold. Note that this + is a low level event that should usually be avoided for user code. Use + ConnThreshold::bytes_threshold_crossed instead. + + + :c: the connection + + + :threshold: the threshold that was set + + + :is_orig: true if the threshold was crossed by the originator of the connection + + .. bro:see:: set_current_conn_packets_threshold set_current_conn_bytes_threshold conn_packets_threshold_crossed + get_current_conn_bytes_threshold get_current_conn_packets_threshold + +.. bro:id:: conn_packets_threshold_crossed + + :Type: :bro:type:`event` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) + + Generated for a connection that crossed a set packet threshold. Note that this + is a low level event that should usually be avoided for user code. Use + ConnThreshold::bytes_threshold_crossed instead. + + + :c: the connection + + + :threshold: the threshold that was set + + + :is_orig: true if the threshold was crossed by the originator of the connection + + .. bro:see:: set_current_conn_packets_threshold set_current_conn_bytes_threshold conn_bytes_threshold_crossed + get_current_conn_bytes_threshold get_current_conn_packets_threshold + +Functions ++++++++++ + +.. bro:id:: set_current_conn_bytes_threshold + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) : :bro:type:`bool` + + Sets the current byte threshold for connection sizes, overwriting any potential old + threshold. Be aware that in nearly any case you will want to use the high level API + instead (ConnThreshold::set_bytes_threshold). + + + :cid: The connection id. + + + :threshold: Threshold in bytes. + + + :is_orig: If true, threshold is set for bytes from originator, otherwhise for bytes from responder. + + .. bro:see:: set_current_conn_packets_threshold conn_bytes_threshold_crossed conn_packets_threshold_crossed + get_current_conn_bytes_threshold get_current_conn_packets_threshold + +.. bro:id:: set_current_conn_packets_threshold + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) : :bro:type:`bool` + + Sets a threshold for connection packets, overwtiting any potential old thresholds. + Be aware that in nearly any case you will want to use the high level API + instead (ConnThreshold::set_packets_threshold). + + + :cid: The connection id. + + + :threshold: Threshold in packets. + + + :is_orig: If true, threshold is set for packets from originator, otherwhise for packets from responder. + + .. bro:see:: set_current_conn_bytes_threshold conn_bytes_threshold_crossed conn_packets_threshold_crossed + get_current_conn_bytes_threshold get_current_conn_packets_threshold + +.. bro:id:: get_current_conn_bytes_threshold + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, is_orig: :bro:type:`bool`) : :bro:type:`count` + + Gets the current byte threshold size for a connection. + + + :cid: The connection id. + + + :is_orig: If true, threshold of originator, otherwhise threshold of responder. + + + :returns: 0 if no threshold is set or the threshold in bytes + + .. bro:see:: set_current_conn_packets_threshold conn_bytes_threshold_crossed conn_packets_threshold_crossed + get_current_conn_packets_threshold + +.. bro:id:: get_current_conn_packets_threshold + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, is_orig: :bro:type:`bool`) : :bro:type:`count` + + Gets the current packet threshold size for a connection. + + + :cid: The connection id. + + + :is_orig: If true, threshold of originator, otherwhise threshold of responder. + + + :returns: 0 if no threshold is set or the threshold in packets + + .. bro:see:: set_current_conn_packets_threshold conn_bytes_threshold_crossed conn_packets_threshold_crossed + get_current_conn_bytes_threshold + +Bro::DCE_RPC +------------ + +DCE-RPC analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_DCE_RPC` + +Options/Constants ++++++++++++++++++ + +.. bro:id:: DCE_RPC::max_cmd_reassembly + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``20`` + + The maximum number of simultaneous fragmented commands that + the DCE_RPC analyzer will tolerate before the it will generate + a weird and skip further input. + +.. bro:id:: DCE_RPC::max_frag_data + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``30000`` + + The maximum number of fragmented bytes that the DCE_RPC analyzer + will tolerate on a command before the analyzer will generate a weird + and skip further input. + +Types ++++++ + +.. bro:type:: DCE_RPC::PType + + :Type: :bro:type:`enum` + + .. bro:enum:: DCE_RPC::REQUEST DCE_RPC::PType + + .. bro:enum:: DCE_RPC::PING DCE_RPC::PType + + .. bro:enum:: DCE_RPC::RESPONSE DCE_RPC::PType + + .. bro:enum:: DCE_RPC::FAULT DCE_RPC::PType + + .. bro:enum:: DCE_RPC::WORKING DCE_RPC::PType + + .. bro:enum:: DCE_RPC::NOCALL DCE_RPC::PType + + .. bro:enum:: DCE_RPC::REJECT DCE_RPC::PType + + .. bro:enum:: DCE_RPC::ACK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::CL_CANCEL DCE_RPC::PType + + .. bro:enum:: DCE_RPC::FACK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::CANCEL_ACK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::BIND DCE_RPC::PType + + .. bro:enum:: DCE_RPC::BIND_ACK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::BIND_NAK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::ALTER_CONTEXT DCE_RPC::PType + + .. bro:enum:: DCE_RPC::ALTER_CONTEXT_RESP DCE_RPC::PType + + .. bro:enum:: DCE_RPC::AUTH3 DCE_RPC::PType + + .. bro:enum:: DCE_RPC::SHUTDOWN DCE_RPC::PType + + .. bro:enum:: DCE_RPC::CO_CANCEL DCE_RPC::PType + + .. bro:enum:: DCE_RPC::ORPHANED DCE_RPC::PType + + .. bro:enum:: DCE_RPC::RTS DCE_RPC::PType + + +.. bro:type:: DCE_RPC::IfID + + :Type: :bro:type:`enum` + + .. bro:enum:: DCE_RPC::unknown_if DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::epmapper DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::lsarpc DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::lsa_ds DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::mgmt DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::netlogon DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::samr DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::srvsvc DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::spoolss DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::drs DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::winspipe DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::wkssvc DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::oxid DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::ISCMActivator DCE_RPC::IfID + + +Events +++++++ + +.. bro:id:: dce_rpc_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, fid: :bro:type:`count`, ptype_id: :bro:type:`count`, ptype: :bro:type:`DCE_RPC::PType`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` message. + + + :c: The connection. + + + :is_orig: True if the message was sent by the originator of the TCP connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ptype_id: Numeric representation of the procedure type of the message. + + + :ptype: Enum representation of the prodecure type of the message. + + .. bro:see:: dce_rpc_bind dce_rpc_bind_ack dce_rpc_request dce_rpc_response + +.. bro:id:: dce_rpc_bind + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, ctx_id: :bro:type:`count`, uuid: :bro:type:`string`, ver_major: :bro:type:`count`, ver_minor: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` bind request message. + Since RPC offers the ability for a client to request connections to multiple endpoints, this event can occur + multiple times for a single RPC message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ctx_id: The context identifier of the data representation. + + + :uuid: The string interpretted uuid of the endpoint being requested. + + + :ver_major: The major version of the endpoint being requested. + + + :ver_minor: The minor version of the endpoint being requested. + + .. bro:see:: dce_rpc_message dce_rpc_bind_ack dce_rpc_request dce_rpc_response + +.. bro:id:: dce_rpc_alter_context + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, ctx_id: :bro:type:`count`, uuid: :bro:type:`string`, ver_major: :bro:type:`count`, ver_minor: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` alter context request message. + Since RPC offers the ability for a client to request connections to multiple endpoints, this event can occur + multiple times for a single RPC message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ctx_id: The context identifier of the data representation. + + + :uuid: The string interpretted uuid of the endpoint being requested. + + + :ver_major: The major version of the endpoint being requested. + + + :ver_minor: The minor version of the endpoint being requested. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_bind_ack dce_rpc_request dce_rpc_response dce_rpc_alter_context_resp + +.. bro:id:: dce_rpc_bind_ack + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, sec_addr: :bro:type:`string`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` bind request ack message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :sec_addr: Secondary address for the ack. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_request dce_rpc_response + +.. bro:id:: dce_rpc_alter_context_resp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` alter context response message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_bind_ack dce_rpc_request dce_rpc_response dce_rpc_alter_context + +.. bro:id:: dce_rpc_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, ctx_id: :bro:type:`count`, opnum: :bro:type:`count`, stub_len: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` request message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ctx_id: The context identifier of the data representation. + + + :opnum: Number of the RPC operation. + + + :stub_len: Length of the data for the request. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_bind_ack dce_rpc_response + +.. bro:id:: dce_rpc_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, ctx_id: :bro:type:`count`, opnum: :bro:type:`count`, stub_len: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` response message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ctx_id: The context identifier of the data representation. + + :opnum: Number of the RPC operation. + + + :stub_len: Length of the data for the response. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_bind_ack dce_rpc_request + +Bro::DHCP +--------- + +DHCP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_DHCP` + +Types ++++++ + +.. bro:type:: DHCP::Msg + + :Type: :bro:type:`record` + + op: :bro:type:`count` + Message OP code. 1 = BOOTREQUEST, 2 = BOOTREPLY + + m_type: :bro:type:`count` + The type of DHCP message. + + xid: :bro:type:`count` + Transaction ID of a DHCP session. + + secs: :bro:type:`interval` + Number of seconds since client began address acquisition + or renewal process + + flags: :bro:type:`count` + + ciaddr: :bro:type:`addr` + Original IP address of the client. + + yiaddr: :bro:type:`addr` + IP address assigned to the client. + + siaddr: :bro:type:`addr` + IP address of the server. + + giaddr: :bro:type:`addr` + IP address of the relaying gateway. + + chaddr: :bro:type:`string` + Client hardware address. + + sname: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + Server host name. + + file_n: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + Boot file name. + + A DHCP message. + .. bro:see:: dhcp_message + +.. bro:type:: DHCP::Addrs + + :Type: :bro:type:`vector` of :bro:type:`addr` + + A list of addresses offered by a DHCP server. Could be routers, + DNS servers, or other. + + .. bro:see:: dhcp_message + +.. bro:type:: DHCP::SubOpt + + :Type: :bro:type:`record` + + code: :bro:type:`count` + + value: :bro:type:`string` + + DHCP Relay Agent Information Option (Option 82) + .. bro:see:: dhcp_message + +.. bro:type:: DHCP::SubOpts + + :Type: :bro:type:`vector` of :bro:type:`DHCP::SubOpt` + + +.. bro:type:: DHCP::ClientFQDN + + :Type: :bro:type:`record` + + flags: :bro:type:`count` + An unparsed bitfield of flags (refer to RFC 4702). + + rcode1: :bro:type:`count` + This field is deprecated in the standard. + + rcode2: :bro:type:`count` + This field is deprecated in the standard. + + domain_name: :bro:type:`string` + The Domain Name part of the option carries all or part of the FQDN + of a DHCP client. + + DHCP Client FQDN Option information (Option 81) + +.. bro:type:: DHCP::ClientID + + :Type: :bro:type:`record` + + hwtype: :bro:type:`count` + + hwaddr: :bro:type:`string` + + DHCP Client Identifier (Option 61) + .. bro:see:: dhcp_message + +.. bro:type:: DHCP::Options + + :Type: :bro:type:`record` + + options: :bro:type:`index_vec` :bro:attr:`&optional` + The ordered list of all DHCP option numbers. + + subnet_mask: :bro:type:`addr` :bro:attr:`&optional` + Subnet Mask Value (option 1) + + routers: :bro:type:`DHCP::Addrs` :bro:attr:`&optional` + Router addresses (option 3) + + dns_servers: :bro:type:`DHCP::Addrs` :bro:attr:`&optional` + DNS Server addresses (option 6) + + host_name: :bro:type:`string` :bro:attr:`&optional` + The Hostname of the client (option 12) + + domain_name: :bro:type:`string` :bro:attr:`&optional` + The DNS domain name of the client (option 15) + + forwarding: :bro:type:`bool` :bro:attr:`&optional` + Enable/Disable IP Forwarding (option 19) + + broadcast: :bro:type:`addr` :bro:attr:`&optional` + Broadcast Address (option 28) + + vendor: :bro:type:`string` :bro:attr:`&optional` + Vendor specific data. This can frequently + be unparsed binary data. (option 43) + + nbns: :bro:type:`DHCP::Addrs` :bro:attr:`&optional` + NETBIOS name server list (option 44) + + addr_request: :bro:type:`addr` :bro:attr:`&optional` + Address requested by the client (option 50) + + lease: :bro:type:`interval` :bro:attr:`&optional` + Lease time offered by the server. (option 51) + + serv_addr: :bro:type:`addr` :bro:attr:`&optional` + Server address to allow clients to distinguish + between lease offers. (option 54) + + param_list: :bro:type:`index_vec` :bro:attr:`&optional` + DHCP Parameter Request list (option 55) + + message: :bro:type:`string` :bro:attr:`&optional` + Textual error message (option 56) + + max_msg_size: :bro:type:`count` :bro:attr:`&optional` + Maximum Message Size (option 57) + + renewal_time: :bro:type:`interval` :bro:attr:`&optional` + This option specifies the time interval from address + assignment until the client transitions to the + RENEWING state. (option 58) + + rebinding_time: :bro:type:`interval` :bro:attr:`&optional` + This option specifies the time interval from address + assignment until the client transitions to the + REBINDING state. (option 59) + + vendor_class: :bro:type:`string` :bro:attr:`&optional` + This option is used by DHCP clients to optionally + identify the vendor type and configuration of a DHCP + client. (option 60) + + client_id: :bro:type:`DHCP::ClientID` :bro:attr:`&optional` + DHCP Client Identifier (Option 61) + + user_class: :bro:type:`string` :bro:attr:`&optional` + User Class opaque value (Option 77) + + client_fqdn: :bro:type:`DHCP::ClientFQDN` :bro:attr:`&optional` + DHCP Client FQDN (Option 81) + + sub_opt: :bro:type:`DHCP::SubOpts` :bro:attr:`&optional` + DHCP Relay Agent Information Option (Option 82) + + auto_config: :bro:type:`bool` :bro:attr:`&optional` + Auto Config option to let host know if it's allowed to + auto assign an IP address. (Option 116) + + auto_proxy_config: :bro:type:`string` :bro:attr:`&optional` + URL to find a proxy.pac for auto proxy config (Option 252) + + +Events +++++++ + +.. bro:id:: dhcp_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`DHCP::Msg`, options: :bro:type:`DHCP::Options`) + + Generated for all DHCP messages. + + + :c: The connection record describing the underlying UDP flow. + + + :is_orig: Indicate if the message came in a packet from the + originator/client of the udp flow or the responder/server. + + + :msg: The parsed type-independent part of the DHCP message. The message + type is indicated in this record. + + + :options: The full set of supported and parsed DHCP options. + +Bro::DNP3 +--------- + +DNP3 UDP/TCP analyzers + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_DNP3_TCP` + +:bro:enum:`Analyzer::ANALYZER_DNP3_UDP` + +Events +++++++ + +.. bro:id:: dnp3_application_request_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, application: :bro:type:`count`, fc: :bro:type:`count`) + + Generated for a DNP3 request header. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :fc: function code. + + +.. bro:id:: dnp3_application_response_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, application: :bro:type:`count`, fc: :bro:type:`count`, iin: :bro:type:`count`) + + Generated for a DNP3 response header. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :fc: function code. + + + :iin: internal indication number. + + +.. bro:id:: dnp3_object_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, obj_type: :bro:type:`count`, qua_field: :bro:type:`count`, number: :bro:type:`count`, rf_low: :bro:type:`count`, rf_high: :bro:type:`count`) + + Generated for the object header found in both DNP3 requests and responses. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :obj_type: type of object, which is classified based on an 8-bit group number + and an 8-bit variation number. + + + :qua_field: qualifier field. + + + :number: TODO. + + + :rf_low: the structure of the range field depends on the qualified field. + In some cases, the range field contains only one logic part, e.g., + number of objects, so only *rf_low* contains useful values. + + + :rf_high: in some cases, the range field contains two logic parts, e.g., start + index and stop index, so *rf_low* contains the start index + while *rf_high* contains the stop index. + + +.. bro:id:: dnp3_object_prefix + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix_value: :bro:type:`count`) + + Generated for the prefix before a DNP3 object. The structure and the meaning + of the prefix are defined by the qualifier field. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :prefix_value: The prefix. + + +.. bro:id:: dnp3_header_block + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, len: :bro:type:`count`, ctrl: :bro:type:`count`, dest_addr: :bro:type:`count`, src_addr: :bro:type:`count`) + + Generated for an additional header that the DNP3 analyzer passes to the + script-level. This header mimics the DNP3 transport-layer yet is only passed + once for each sequence of DNP3 records (which are otherwise reassembled and + treated as a single entity). + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :len: the "length" field in the DNP3 Pseudo Link Layer. + + + :ctrl: the "control" field in the DNP3 Pseudo Link Layer. + + + :dest_addr: the "destination" field in the DNP3 Pseudo Link Layer. + + + :src_addr: the "source" field in the DNP3 Pseudo Link Layer. + + +.. bro:id:: dnp3_response_data_object + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, data_value: :bro:type:`count`) + + Generated for a DNP3 "Response_Data_Object". + The "Response_Data_Object" contains two parts: object prefix and object + data. In most cases, object data are defined by new record types. But + in a few cases, object data are directly basic types, such as int16, or + int8; thus we use an additional *data_value* to record the values of those + object data. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :data_value: The value for those objects that carry their information here + directly. + + +.. bro:id:: dnp3_attribute_common + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, data_type_code: :bro:type:`count`, leng: :bro:type:`count`, attribute_obj: :bro:type:`string`) + + Generated for DNP3 attributes. + +.. bro:id:: dnp3_crob + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, control_code: :bro:type:`count`, count8: :bro:type:`count`, on_time: :bro:type:`count`, off_time: :bro:type:`count`, status_code: :bro:type:`count`) + + Generated for DNP3 objects with the group number 12 and variation number 1 + + :CROB: control relay output block + +.. bro:id:: dnp3_pcb + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, control_code: :bro:type:`count`, count8: :bro:type:`count`, on_time: :bro:type:`count`, off_time: :bro:type:`count`, status_code: :bro:type:`count`) + + Generated for DNP3 objects with the group number 12 and variation number 2 + + :PCB: Pattern Control Block + +.. bro:id:: dnp3_counter_32wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 20 and variation number 1 + counter 32 bit with flag + +.. bro:id:: dnp3_counter_16wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 20 and variation number 2 + counter 16 bit with flag + +.. bro:id:: dnp3_counter_32woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 20 and variation number 5 + counter 32 bit without flag + +.. bro:id:: dnp3_counter_16woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 20 and variation number 6 + counter 16 bit without flag + +.. bro:id:: dnp3_frozen_counter_32wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 1 + frozen counter 32 bit with flag + +.. bro:id:: dnp3_frozen_counter_16wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 2 + frozen counter 16 bit with flag + +.. bro:id:: dnp3_frozen_counter_32wFlagTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 5 + frozen counter 32 bit with flag and time + +.. bro:id:: dnp3_frozen_counter_16wFlagTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 6 + frozen counter 16 bit with flag and time + +.. bro:id:: dnp3_frozen_counter_32woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 9 + frozen counter 32 bit without flag + +.. bro:id:: dnp3_frozen_counter_16woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 10 + frozen counter 16 bit without flag + +.. bro:id:: dnp3_analog_input_32wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 1 + analog input 32 bit with flag + +.. bro:id:: dnp3_analog_input_16wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 2 + analog input 16 bit with flag + +.. bro:id:: dnp3_analog_input_32woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 3 + analog input 32 bit without flag + +.. bro:id:: dnp3_analog_input_16woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 4 + analog input 16 bit without flag + +.. bro:id:: dnp3_analog_input_SPwFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 5 + analog input single precision, float point with flag + +.. bro:id:: dnp3_analog_input_DPwFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value_low: :bro:type:`count`, value_high: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 6 + analog input double precision, float point with flag + +.. bro:id:: dnp3_frozen_analog_input_32wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 1 + frozen analog input 32 bit with flag + +.. bro:id:: dnp3_frozen_analog_input_16wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 2 + frozen analog input 16 bit with flag + +.. bro:id:: dnp3_frozen_analog_input_32wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 3 + frozen analog input 32 bit with time-of-freeze + +.. bro:id:: dnp3_frozen_analog_input_16wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 4 + frozen analog input 16 bit with time-of-freeze + +.. bro:id:: dnp3_frozen_analog_input_32woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 5 + frozen analog input 32 bit without flag + +.. bro:id:: dnp3_frozen_analog_input_16woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 6 + frozen analog input 16 bit without flag + +.. bro:id:: dnp3_frozen_analog_input_SPwFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 7 + frozen analog input single-precision, float point with flag + +.. bro:id:: dnp3_frozen_analog_input_DPwFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value_low: :bro:type:`count`, frozen_value_high: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 8 + frozen analog input double-precision, float point with flag + +.. bro:id:: dnp3_analog_input_event_32woTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 1 + analog input event 32 bit without time + +.. bro:id:: dnp3_analog_input_event_16woTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 2 + analog input event 16 bit without time + +.. bro:id:: dnp3_analog_input_event_32wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 3 + analog input event 32 bit with time + +.. bro:id:: dnp3_analog_input_event_16wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 4 + analog input event 16 bit with time + +.. bro:id:: dnp3_analog_input_event_SPwoTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 5 + analog input event single-precision float point without time + +.. bro:id:: dnp3_analog_input_event_DPwoTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value_low: :bro:type:`count`, value_high: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 6 + analog input event double-precision float point without time + +.. bro:id:: dnp3_analog_input_event_SPwTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 7 + analog input event single-precision float point with time + +.. bro:id:: dnp3_analog_input_event_DPwTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value_low: :bro:type:`count`, value_high: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 8 + analog input event double-precisiion float point with time + +.. bro:id:: dnp3_frozen_analog_input_event_32woTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 1 + frozen analog input event 32 bit without time + +.. bro:id:: dnp3_frozen_analog_input_event_16woTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 2 + frozen analog input event 16 bit without time + +.. bro:id:: dnp3_frozen_analog_input_event_32wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 3 + frozen analog input event 32 bit with time + +.. bro:id:: dnp3_frozen_analog_input_event_16wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 4 + frozen analog input event 16 bit with time + +.. bro:id:: dnp3_frozen_analog_input_event_SPwoTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 5 + frozen analog input event single-precision float point without time + +.. bro:id:: dnp3_frozen_analog_input_event_DPwoTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value_low: :bro:type:`count`, frozen_value_high: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 6 + frozen analog input event double-precision float point without time + +.. bro:id:: dnp3_frozen_analog_input_event_SPwTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 7 + frozen analog input event single-precision float point with time + +.. bro:id:: dnp3_frozen_analog_input_event_DPwTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value_low: :bro:type:`count`, frozen_value_high: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 34 and variation number 8 + frozen analog input event double-precision float point with time + +.. bro:id:: dnp3_file_transport + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, file_handle: :bro:type:`count`, block_num: :bro:type:`count`, file_data: :bro:type:`string`) + + g70 + +.. bro:id:: dnp3_debug_byte + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, debug: :bro:type:`string`) + + Debugging event generated by the DNP3 analyzer. The "Debug_Byte" binpac unit + generates this for unknown "cases". The user can use it to debug the byte + string to check what caused the malformed network packets. + +Bro::DNS +-------- + +DNS analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_CONTENTS_DNS` + +:bro:enum:`Analyzer::ANALYZER_DNS` + +Events +++++++ + +.. bro:id:: dns_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`dns_msg`, len: :bro:type:`count`) + + Generated for all DNS messages. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :is_orig: True if the message was sent by the originator of the connection. + + + :msg: The parsed DNS message header. + + + :len: The length of the message's raw representation (i.e., the DNS payload). + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_query_reply dns_rejected + dns_request non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, query: :bro:type:`string`, qtype: :bro:type:`count`, qclass: :bro:type:`count`) + + Generated for DNS requests. For requests with multiple queries, this event + is raised once for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :query: The queried name. + + + :qtype: The queried resource record type. + + + :qclass: The queried resource record class. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_rejected + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, query: :bro:type:`string`, qtype: :bro:type:`count`, qclass: :bro:type:`count`) + + Generated for DNS replies that reject a query. This event is raised if a DNS + reply indicates failure because it does not pass on any + answers to a query. Note that all of the event's parameters are parsed out of + the reply; there's no stateful correlation with the query. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :query: The queried name. + + + :qtype: The queried resource record type. + + + :qclass: The queried resource record class. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_request non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_query_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, query: :bro:type:`string`, qtype: :bro:type:`count`, qclass: :bro:type:`count`) + + Generated for each entry in the Question section of a DNS reply. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :query: The queried name. + + + :qtype: The queried resource record type. + + + :qclass: The queried resource record class. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_rejected + dns_request non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_A_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, a: :bro:type:`addr`) + + Generated for DNS replies of type *A*. For replies with multiple answers, an + individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :a: The address returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A6_reply dns_CNAME_reply dns_EDNS_addl dns_HINFO_reply + dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_AAAA_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, a: :bro:type:`addr`) + + Generated for DNS replies of type *AAAA*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :a: The address returned by the reply. + + .. bro:see:: dns_A_reply dns_A6_reply dns_CNAME_reply dns_EDNS_addl dns_HINFO_reply dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_A6_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, a: :bro:type:`addr`) + + Generated for DNS replies of type *A6*. For replies with multiple answers, an + individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :a: The address returned by the reply. + + .. bro:see:: dns_A_reply dns_AAAA_reply dns_CNAME_reply dns_EDNS_addl dns_HINFO_reply dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_NS_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, name: :bro:type:`string`) + + Generated for DNS replies of type *NS*. For replies with multiple answers, an + individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :name: The name returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_CNAME_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, name: :bro:type:`string`) + + Generated for DNS replies of type *CNAME*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :name: The name returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_EDNS_addl dns_HINFO_reply dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_PTR_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, name: :bro:type:`string`) + + Generated for DNS replies of type *PTR*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :name: The name returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_SOA_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_SOA_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, soa: :bro:type:`dns_soa`) + + Generated for DNS replies of type *CNAME*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :soa: The parsed SOA value. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_WKS_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`) + + Generated for DNS replies of type *WKS*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_HINFO_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`) + + Generated for DNS replies of type *HINFO*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_MX_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, name: :bro:type:`string`, preference: :bro:type:`count`) + + Generated for DNS replies of type *MX*. For replies with multiple answers, an + individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :name: The name returned by the reply. + + + :preference: The preference for *name* specified by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_TXT_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, strs: :bro:type:`string_vec`) + + Generated for DNS replies of type *TXT*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :strs: The textual information returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_CAA_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, flags: :bro:type:`count`, tag: :bro:type:`string`, value: :bro:type:`string`) + + Generated for DNS replies of type *CAA* (Certification Authority Authorization). + For replies with multiple answers, an individual event of the corresponding type + is raised for each. + See `RFC 6844 `__ for more details. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :flags: The flags byte of the CAA reply. + + + :tag: The property identifier of the CAA reply. + + + :value: The property value of the CAA reply. + +.. bro:id:: dns_SRV_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, target: :bro:type:`string`, priority: :bro:type:`count`, weight: :bro:type:`count`, p: :bro:type:`count`) + + Generated for DNS replies of type *SRV*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :target: Target of the SRV response -- the canonical hostname of the + machine providing the service, ending in a dot. + + + :priority: Priority of the SRV response -- the priority of the target + host, lower value means more preferred. + + + :weight: Weight of the SRV response -- a relative weight for records + with the same priority, higher value means more preferred. + + + :p: Port of the SRV response -- the TCP or UDP port on which the + service is to be found. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_unknown_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`) + + Generated on DNS reply resource records when the type of record is not one + that Bro knows how to parse and generate another more specific event. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_SRV_reply dns_end + +.. bro:id:: dns_EDNS_addl + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_edns_additional`) + + Generated for DNS replies of type *EDNS*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The parsed EDNS reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_HINFO_reply dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_TSIG_addl + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_tsig_additional`) + + Generated for DNS replies of type *TSIG*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The parsed TSIG reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_RRSIG + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, rrsig: :bro:type:`dns_rrsig_rr`) + + Generated for DNS replies of type *RRSIG*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :rrsig: The parsed RRSIG record. + +.. bro:id:: dns_DNSKEY + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, dnskey: :bro:type:`dns_dnskey_rr`) + + Generated for DNS replies of type *DNSKEY*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :dnskey: The parsed DNSKEY record. + +.. bro:id:: dns_NSEC + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, next_name: :bro:type:`string`, bitmaps: :bro:type:`string_vec`) + + Generated for DNS replies of type *NSEC*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :next_name: The parsed next secure domain name. + + + :bitmaps: vector of strings in hex for the bit maps present. + +.. bro:id:: dns_NSEC3 + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, nsec3: :bro:type:`dns_nsec3_rr`) + + Generated for DNS replies of type *NSEC3*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :nsec3: The parsed RDATA of Nsec3 record. + +.. bro:id:: dns_DS + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, ds: :bro:type:`dns_ds_rr`) + + Generated for DNS replies of type *DS*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :ds: The parsed RDATA of DS record. + +.. bro:id:: dns_end + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`) + + Generated at the end of processing a DNS packet. This event is the last + ``dns_*`` event that will be raised for a DNS query/reply and signals that + all resource records have been passed on. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_full_request + + :Type: :bro:type:`event` () + + Deprecated. Will be removed. + + .. todo:: Unclear what this event is for; it's never raised. We should just + remove it. + +.. bro:id:: non_dns_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + + :msg: The raw DNS payload. + + .. note:: This event is deprecated and superseded by Bro's dynamic protocol + detection framework. + +Bro::File +--------- + +Generic file analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_FTP_DATA` + +:bro:enum:`Analyzer::ANALYZER_IRC_DATA` + +Events +++++++ + +.. bro:id:: file_transferred + + :Type: :bro:type:`event` (c: :bro:type:`connection`, prefix: :bro:type:`string`, descr: :bro:type:`string`, mime_type: :bro:type:`string`) + + Generated when a TCP connection associated w/ file data transfer is seen + (e.g. as happens w/ FTP or IRC). + + + :c: The connection over which file data is transferred. + + + :prefix: Up to 1024 bytes of the file data. + + + :descr: Deprecated/unused argument. + + + :mime_type: MIME type of the file or "" if no file magic signatures + matched. + +Bro::Finger +----------- + +Finger analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_FINGER` + +Events +++++++ + +.. bro:id:: finger_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, full: :bro:type:`bool`, username: :bro:type:`string`, hostname: :bro:type:`string`) + + Generated for Finger requests. + + See `Wikipedia `__ for more + information about the Finger protocol. + + + :c: The connection. + + + :full: True if verbose information is requested (``/W`` switch). + + + :username: The request's user name. + + + :hostname: The request's host name. + + .. bro:see:: finger_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: finger_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, reply_line: :bro:type:`string`) + + Generated for Finger replies. + + See `Wikipedia `__ for more + information about the Finger protocol. + + + :c: The connection. + + + :reply_line: The reply as returned by the server + + .. bro:see:: finger_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +Bro::FTP +-------- + +FTP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_FTP` + +:bro:enum:`Analyzer::ANALYZER_FTP_ADAT` + +Types ++++++ + +.. bro:type:: ftp_port + + :Type: :bro:type:`record` + + h: :bro:type:`addr` + The host's address. + + p: :bro:type:`port` + The host's port. + + valid: :bro:type:`bool` + True if format was right. Only then are *h* and *p* valid. + + A parsed host/port combination describing server endpoint for an upcoming + data transfer. + + .. bro:see:: fmt_ftp_port parse_eftp_port parse_ftp_epsv parse_ftp_pasv + parse_ftp_port + +Events +++++++ + +.. bro:id:: ftp_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, command: :bro:type:`string`, arg: :bro:type:`string`) + + Generated for client-side FTP commands. + + See `Wikipedia `__ for + more information about the FTP protocol. + + + :c: The connection. + + + :command: The FTP command issued by the client (without any arguments). + + + :arg: The arguments going with the command. + + .. bro:see:: ftp_reply fmt_ftp_port parse_eftp_port + parse_ftp_epsv parse_ftp_pasv parse_ftp_port + +.. bro:id:: ftp_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, code: :bro:type:`count`, msg: :bro:type:`string`, cont_resp: :bro:type:`bool`) + + Generated for server-side FTP replies. + + See `Wikipedia `__ for + more information about the FTP protocol. + + + :c: The connection. + + + :code: The numerical response code the server responded with. + + + :msg: The textual message of the response. + + + :cont_resp: True if the reply line is tagged as being continued to the next + line. If so, further events will be raised and a handler may want + to reassemble the pieces before processing the response any + further. + + .. bro:see:: ftp_request fmt_ftp_port parse_eftp_port + parse_ftp_epsv parse_ftp_pasv parse_ftp_port + +Functions ++++++++++ + +.. bro:id:: parse_ftp_port + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`ftp_port` + + Converts a string representation of the FTP PORT command to an + :bro:type:`ftp_port`. + + + :s: The string of the FTP PORT command, e.g., ``"10,0,0,1,4,31"``. + + + :returns: The FTP PORT, e.g., ``[h=10.0.0.1, p=1055/tcp, valid=T]``. + + .. bro:see:: parse_eftp_port parse_ftp_pasv parse_ftp_epsv fmt_ftp_port + +.. bro:id:: parse_eftp_port + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`ftp_port` + + Converts a string representation of the FTP EPRT command (see :rfc:`2428`) + to an :bro:type:`ftp_port`. The format is + ``"EPRT"``, + where ```` is a delimiter in the ASCII range 33-126 (usually ``|``). + + + :s: The string of the FTP EPRT command, e.g., ``"|1|10.0.0.1|1055|"``. + + + :returns: The FTP PORT, e.g., ``[h=10.0.0.1, p=1055/tcp, valid=T]``. + + .. bro:see:: parse_ftp_port parse_ftp_pasv parse_ftp_epsv fmt_ftp_port + +.. bro:id:: parse_ftp_pasv + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`ftp_port` + + Converts the result of the FTP PASV command to an :bro:type:`ftp_port`. + + + :str: The string containing the result of the FTP PASV command. + + + :returns: The FTP PORT, e.g., ``[h=10.0.0.1, p=1055/tcp, valid=T]``. + + .. bro:see:: parse_ftp_port parse_eftp_port parse_ftp_epsv fmt_ftp_port + +.. bro:id:: parse_ftp_epsv + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`ftp_port` + + Converts the result of the FTP EPSV command (see :rfc:`2428`) to an + :bro:type:`ftp_port`. The format is ``" ()"``, + where ```` is a delimiter in the ASCII range 33-126 (usually ``|``). + + + :str: The string containing the result of the FTP EPSV command. + + + :returns: The FTP PORT, e.g., ``[h=10.0.0.1, p=1055/tcp, valid=T]``. + + .. bro:see:: parse_ftp_port parse_eftp_port parse_ftp_pasv fmt_ftp_port + +.. bro:id:: fmt_ftp_port + + :Type: :bro:type:`function` (a: :bro:type:`addr`, p: :bro:type:`port`) : :bro:type:`string` + + Formats an IP address and TCP port as an FTP PORT command. For example, + ``10.0.0.1`` and ``1055/tcp`` yields ``"10,0,0,1,4,31"``. + + + :a: The IP address. + + + :p: The TCP port. + + + :returns: The FTP PORT string. + + .. bro:see:: parse_ftp_port parse_eftp_port parse_ftp_pasv parse_ftp_epsv + +Bro::Gnutella +------------- + +Gnutella analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_GNUTELLA` + +Events +++++++ + +.. bro:id:: gnutella_text_msg + + :Type: :bro:type:`event` (c: :bro:type:`connection`, orig: :bro:type:`bool`, headers: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_establish gnutella_http_notify + gnutella_not_establish gnutella_partial_binary_msg gnutella_signature_found + + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_binary_msg + + :Type: :bro:type:`event` (c: :bro:type:`connection`, orig: :bro:type:`bool`, msg_type: :bro:type:`count`, ttl: :bro:type:`count`, hops: :bro:type:`count`, msg_len: :bro:type:`count`, payload: :bro:type:`string`, payload_len: :bro:type:`count`, trunc: :bro:type:`bool`, complete: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_establish gnutella_http_notify gnutella_not_establish + gnutella_partial_binary_msg gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_partial_binary_msg + + :Type: :bro:type:`event` (c: :bro:type:`connection`, orig: :bro:type:`bool`, msg: :bro:type:`string`, len: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_establish gnutella_http_notify + gnutella_not_establish gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_establish + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_http_notify gnutella_not_establish + gnutella_partial_binary_msg gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_not_establish + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_establish gnutella_http_notify + gnutella_partial_binary_msg gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_http_notify + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_establish gnutella_not_establish + gnutella_partial_binary_msg gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +Bro::GSSAPI +----------- + +GSSAPI analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_GSSAPI` + +Events +++++++ + +.. bro:id:: gssapi_neg_result + + :Type: :bro:type:`event` (c: :bro:type:`connection`, state: :bro:type:`count`) + + Generated for GSSAPI negotiation results. + + + :c: The connection. + + + :state: The resulting state of the negotiation. + + +Bro::GTPv1 +---------- + +GTPv1 analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_GTPV1` + +Events +++++++ + +.. bro:id:: gtpv1_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`) + + Generated for any GTP message with a GTPv1 header. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + +.. bro:id:: gtpv1_g_pdu_packet + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner_gtp: :bro:type:`gtpv1_hdr`, inner_ip: :bro:type:`pkt_hdr`) + + Generated for GTPv1 G-PDU packets. That is, packets with a UDP payload + that includes a GTP header followed by an IPv4 or IPv6 packet. + + + :outer: The GTP outer tunnel connection. + + + :inner_gtp: The GTP header. + + + :inner_ip: The inner IP and transport layer packet headers. + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + +.. bro:id:: gtpv1_create_pdp_ctx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_create_pdp_ctx_request_elements`) + + Generated for GTPv1-C Create PDP Context Request messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_create_pdp_ctx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_create_pdp_ctx_response_elements`) + + Generated for GTPv1-C Create PDP Context Response messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_update_pdp_ctx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_update_pdp_ctx_request_elements`) + + Generated for GTPv1-C Update PDP Context Request messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_update_pdp_ctx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_update_pdp_ctx_response_elements`) + + Generated for GTPv1-C Update PDP Context Response messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_delete_pdp_ctx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_delete_pdp_ctx_request_elements`) + + Generated for GTPv1-C Delete PDP Context Request messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_delete_pdp_ctx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_delete_pdp_ctx_response_elements`) + + Generated for GTPv1-C Delete PDP Context Response messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +Bro::HTTP +--------- + +HTTP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_HTTP` + +Events +++++++ + +.. bro:id:: http_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, method: :bro:type:`string`, original_URI: :bro:type:`string`, unescaped_URI: :bro:type:`string`, version: :bro:type:`string`) + + Generated for HTTP requests. Bro supports persistent and pipelined HTTP + sessions and raises corresponding events as it parses client/server + dialogues. This event is generated as soon as a request's initial line has + been parsed, and before any :bro:id:`http_header` events are raised. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :method: The HTTP method extracted from the request (e.g., ``GET``, ``POST``). + + + :original_URI: The unprocessed URI as specified in the request. + + + :unescaped_URI: The URI with all percent-encodings decoded. + + + :version: The version number specified in the request (e.g., ``1.1``). + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_message_done http_reply http_stats + truncate_http_URI http_connection_upgrade + +.. bro:id:: http_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`string`, code: :bro:type:`count`, reason: :bro:type:`string`) + + Generated for HTTP replies. Bro supports persistent and pipelined HTTP + sessions and raises corresponding events as it parses client/server + dialogues. This event is generated as soon as a reply's initial line has + been parsed, and before any :bro:id:`http_header` events are raised. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :version: The version number specified in the reply (e.g., ``1.1``). + + + :code: The numerical response code returned by the server. + + + :reason: The textual description returned by the server along with *code*. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_message_done http_request + http_stats http_connection_upgrade + +.. bro:id:: http_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, name: :bro:type:`string`, value: :bro:type:`string`) + + Generated for HTTP headers. Bro supports persistent and pipelined HTTP + sessions and raises corresponding events as it parses client/server + dialogues. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the header was sent by the originator of the TCP connection. + + + :name: The name of the header. + + + :value: The value of the header. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_message_done http_reply http_request + http_stats http_connection_upgrade + + .. note:: This event is also raised for headers found in nested body + entities. + +.. bro:id:: http_all_headers + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, hlist: :bro:type:`mime_header_list`) + + Generated for HTTP headers, passing on all headers of an HTTP message at + once. Bro supports persistent and pipelined HTTP sessions and raises + corresponding events as it parses client/server dialogues. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the header was sent by the originator of the TCP connection. + + + :hlist: A *table* containing all headers extracted from the current entity. + The table is indexed by the position of the header (1 for the first, + 2 for the second, etc.). + + .. bro:see:: http_begin_entity http_content_type http_end_entity http_entity_data + http_event http_header http_message_done http_reply http_request http_stats + http_connection_upgrade + + .. note:: This event is also raised for headers found in nested body + entities. + +.. bro:id:: http_begin_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated when starting to parse an HTTP body entity. This event is generated + at least once for each non-empty (client or server) HTTP body; and + potentially more than once if the body contains further nested MIME + entities. Bro raises this event just before it starts parsing each entity's + content. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + .. bro:see:: http_all_headers http_content_type http_end_entity http_entity_data + http_event http_header http_message_done http_reply http_request http_stats + mime_begin_entity http_connection_upgrade + +.. bro:id:: http_end_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated when finishing parsing an HTTP body entity. This event is generated + at least once for each non-empty (client or server) HTTP body; and + potentially more than once if the body contains further nested MIME + entities. Bro raises this event at the point when it has finished parsing an + entity's content. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_entity_data + http_event http_header http_message_done http_reply http_request + http_stats mime_end_entity http_connection_upgrade + +.. bro:id:: http_entity_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, length: :bro:type:`count`, data: :bro:type:`string`) + + Generated when parsing an HTTP body entity, passing on the data. This event + can potentially be raised many times for each entity, each time passing a + chunk of the data of not further defined size. + + A common idiom for using this event is to first *reassemble* the data + at the scripting layer by concatenating it to a successively growing + string; and only perform further content analysis once the corresponding + :bro:id:`http_end_entity` event has been raised. Note, however, that doing so + can be quite expensive for HTTP tranders. At the very least, one should + impose an upper size limit on how much data is being buffered. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + + :length: The length of *data*. + + + :data: One chunk of raw entity data. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_event http_header http_message_done http_reply http_request http_stats + mime_entity_data http_entity_data_delivery_size skip_http_data + http_connection_upgrade + +.. bro:id:: http_content_type + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, ty: :bro:type:`string`, subty: :bro:type:`string`) + + Generated for reporting an HTTP body's content type. This event is + generated at the end of parsing an HTTP header, passing on the MIME + type as specified by the ``Content-Type`` header. If that header is + missing, this event is still raised with a default value of ``text/plain``. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + + :ty: The main type. + + + :subty: The subtype. + + .. bro:see:: http_all_headers http_begin_entity http_end_entity http_entity_data + http_event http_header http_message_done http_reply http_request http_stats + http_connection_upgrade + + .. note:: This event is also raised for headers found in nested body + entities. + +.. bro:id:: http_message_done + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, stat: :bro:type:`http_message_stat`) + + Generated once at the end of parsing an HTTP message. Bro supports persistent + and pipelined HTTP sessions and raises corresponding events as it parses + client/server dialogues. A "message" is one top-level HTTP entity, such as a + complete request or reply. Each message can have further nested sub-entities + inside. This event is raised once all sub-entities belonging to a top-level + message have been processed (and their corresponding ``http_entity_*`` events + generated). + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + + :stat: Further meta information about the message. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_reply http_request http_stats + http_connection_upgrade + +.. bro:id:: http_event + + :Type: :bro:type:`event` (c: :bro:type:`connection`, event_type: :bro:type:`string`, detail: :bro:type:`string`) + + Generated for errors found when decoding HTTP requests or replies. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :event_type: A string describing the general category of the problem found + (e.g., ``illegal format``). + + + :detail: Further more detailed description of the error. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_header http_message_done http_reply http_request + http_stats mime_event http_connection_upgrade + +.. bro:id:: http_stats + + :Type: :bro:type:`event` (c: :bro:type:`connection`, stats: :bro:type:`http_stats_rec`) + + Generated at the end of an HTTP session to report statistics about it. This + event is raised after all of an HTTP session's requests and replies have been + fully processed. + + + :c: The connection. + + + :stats: Statistics summarizing HTTP-level properties of the finished + connection. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_message_done http_reply + http_request http_connection_upgrade + +.. bro:id:: http_connection_upgrade + + :Type: :bro:type:`event` (c: :bro:type:`connection`, protocol: :bro:type:`string`) + + Generated when a HTTP session is upgraded to a different protocol (e.g. websocket). + This event is raised when a server replies with a HTTP 101 reply. No more HTTP events + will be raised after this event. + + + :c: The connection. + + + :protocol: The protocol to which the connection is switching. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_message_done http_reply + http_request + +Functions ++++++++++ + +.. bro:id:: skip_http_entity_data + + :Type: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`any` + + Skips the data of the HTTP entity. + + + :c: The HTTP connection. + + + :is_orig: If true, the client data is skipped, and the server data otherwise. + + .. bro:see:: skip_smtp_data + +.. bro:id:: unescape_URI + + :Type: :bro:type:`function` (URI: :bro:type:`string`) : :bro:type:`string` + + Unescapes all characters in a URI (decode every ``%xx`` group). + + + :URI: The URI to unescape. + + + :returns: The unescaped URI with all ``%xx`` groups decoded. + + .. note:: + + Unescaping reserved characters may cause loss of information. + :rfc:`2396`: A URI is always in an "escaped" form, since escaping or + unescaping a completed URI might change its semantics. Normally, the + only time escape encodings can safely be made is when the URI is + being created from its component parts. + +Bro::ICMP +--------- + +ICMP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_ICMP` + +Events +++++++ + +.. bro:id:: icmp_sent + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`) + + Generated for all ICMP messages that are not handled separately with + dedicated ICMP events. Bro's ICMP analyzer handles a number of ICMP messages + directly with dedicated events. This event acts as a fallback for those it + doesn't. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard + connection record *c*. + + .. bro:see:: icmp_error_message icmp_sent_payload + +.. bro:id:: icmp_sent_payload + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, payload: :bro:type:`string`) + + The same as :bro:see:`icmp_sent` except containing the ICMP payload. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard + connection record *c*. + + + :payload: The payload of the ICMP message. + + .. bro:see:: icmp_error_message icmp_sent_payload + +.. bro:id:: icmp_echo_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, id: :bro:type:`count`, seq: :bro:type:`count`, payload: :bro:type:`string`) + + Generated for ICMP *echo request* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard + connection record *c*. + + + :id: The *echo request* identifier. + + + :seq: The *echo request* sequence number. + + + :payload: The message-specific data of the packet payload, i.e., everything + after the first 8 bytes of the ICMP header. + + .. bro:see:: icmp_echo_reply + +.. bro:id:: icmp_echo_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, id: :bro:type:`count`, seq: :bro:type:`count`, payload: :bro:type:`string`) + + Generated for ICMP *echo reply* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :id: The *echo reply* identifier. + + + :seq: The *echo reply* sequence number. + + + :payload: The message-specific data of the packet payload, i.e., everything + after the first 8 bytes of the ICMP header. + + .. bro:see:: icmp_echo_request + +.. bro:id:: icmp_error_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for all ICMPv6 error messages that are not handled + separately with dedicated events. Bro's ICMP analyzer handles a number + of ICMP error messages directly with dedicated events. This event acts + as a fallback for those it doesn't. + + See `Wikipedia + `__ for more + information about the ICMPv6 protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard + connection record *c*. + + + :code: The ICMP code of the error message. + + + :context: A record with specifics of the original packet that the message + refers to. + + .. bro:see:: icmp_unreachable icmp_packet_too_big + icmp_time_exceeded icmp_parameter_problem + +.. bro:id:: icmp_unreachable + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for ICMP *destination unreachable* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :code: The ICMP code of the *unreachable* message. + + + :context: A record with specifics of the original packet that the message + refers to. *Unreachable* messages should include the original IP + header from the packet that triggered them, and Bro parses that + into the *context* structure. Note that if the *unreachable* + includes only a partial IP header for some reason, no + fields of *context* will be filled out. + + .. bro:see:: icmp_error_message icmp_packet_too_big + icmp_time_exceeded icmp_parameter_problem + +.. bro:id:: icmp_packet_too_big + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for ICMPv6 *packet too big* messages. + + See `Wikipedia + `__ for more + information about the ICMPv6 protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :code: The ICMP code of the *too big* message. + + + :context: A record with specifics of the original packet that the message + refers to. *Too big* messages should include the original IP header + from the packet that triggered them, and Bro parses that into + the *context* structure. Note that if the *too big* includes only + a partial IP header for some reason, no fields of *context* will + be filled out. + + .. bro:see:: icmp_error_message icmp_unreachable + icmp_time_exceeded icmp_parameter_problem + +.. bro:id:: icmp_time_exceeded + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for ICMP *time exceeded* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :code: The ICMP code of the *exceeded* message. + + + :context: A record with specifics of the original packet that the message + refers to. *Unreachable* messages should include the original IP + header from the packet that triggered them, and Bro parses that + into the *context* structure. Note that if the *exceeded* includes + only a partial IP header for some reason, no fields of *context* + will be filled out. + + .. bro:see:: icmp_error_message icmp_unreachable icmp_packet_too_big + icmp_parameter_problem + +.. bro:id:: icmp_parameter_problem + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for ICMPv6 *parameter problem* messages. + + See `Wikipedia + `__ for more + information about the ICMPv6 protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :code: The ICMP code of the *parameter problem* message. + + + :context: A record with specifics of the original packet that the message + refers to. *Parameter problem* messages should include the original + IP header from the packet that triggered them, and Bro parses that + into the *context* structure. Note that if the *parameter problem* + includes only a partial IP header for some reason, no fields + of *context* will be filled out. + + .. bro:see:: icmp_error_message icmp_unreachable icmp_packet_too_big + icmp_time_exceeded + +.. bro:id:: icmp_router_solicitation + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *router solicitation* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_advertisement + icmp_neighbor_solicitation icmp_neighbor_advertisement icmp_redirect + +.. bro:id:: icmp_router_advertisement + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, cur_hop_limit: :bro:type:`count`, managed: :bro:type:`bool`, other: :bro:type:`bool`, home_agent: :bro:type:`bool`, pref: :bro:type:`count`, proxy: :bro:type:`bool`, rsv: :bro:type:`count`, router_lifetime: :bro:type:`interval`, reachable_time: :bro:type:`interval`, retrans_timer: :bro:type:`interval`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *router advertisement* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :cur_hop_limit: The default value that should be placed in Hop Count field + for outgoing IP packets. + + + :managed: Managed address configuration flag, :rfc:`4861`. + + + :other: Other stateful configuration flag, :rfc:`4861`. + + + :home_agent: Mobile IPv6 home agent flag, :rfc:`3775`. + + + :pref: Router selection preferences, :rfc:`4191`. + + + :proxy: Neighbor discovery proxy flag, :rfc:`4389`. + + + :rsv: Remaining two reserved bits of router advertisement flags. + + + :router_lifetime: How long this router should be used as a default router. + + + :reachable_time: How long a neighbor should be considered reachable. + + + :retrans_timer: How long a host should wait before retransmitting. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_solicitation + icmp_neighbor_solicitation icmp_neighbor_advertisement icmp_redirect + +.. bro:id:: icmp_neighbor_solicitation + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, tgt: :bro:type:`addr`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *neighbor solicitation* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :tgt: The IP address of the target of the solicitation. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_solicitation icmp_router_advertisement + icmp_neighbor_advertisement icmp_redirect + +.. bro:id:: icmp_neighbor_advertisement + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, router: :bro:type:`bool`, solicited: :bro:type:`bool`, override: :bro:type:`bool`, tgt: :bro:type:`addr`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *neighbor advertisement* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :router: Flag indicating the sender is a router. + + + :solicited: Flag indicating advertisement is in response to a solicitation. + + + :override: Flag indicating advertisement should override existing caches. + + + :tgt: the Target Address in the soliciting message or the address whose + link-layer address has changed for unsolicited adverts. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_solicitation icmp_router_advertisement + icmp_neighbor_solicitation icmp_redirect + +.. bro:id:: icmp_redirect + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, tgt: :bro:type:`addr`, dest: :bro:type:`addr`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *redirect* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :tgt: The address that is supposed to be a better first hop to use for + ICMP Destination Address. + + + :dest: The address of the destination which is redirected to the target. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_solicitation icmp_router_advertisement + icmp_neighbor_solicitation icmp_neighbor_advertisement + +Bro::Ident +---------- + +Ident analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_IDENT` + +Events +++++++ + +.. bro:id:: ident_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, lport: :bro:type:`port`, rport: :bro:type:`port`) + + Generated for Ident requests. + + See `Wikipedia `__ for more + information about the Ident protocol. + + + :c: The connection. + + + :lport: The request's local port. + + + :rport: The request's remote port. + + .. bro:see:: ident_error ident_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: ident_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, lport: :bro:type:`port`, rport: :bro:type:`port`, user_id: :bro:type:`string`, system: :bro:type:`string`) + + Generated for Ident replies. + + See `Wikipedia `__ for more + information about the Ident protocol. + + + :c: The connection. + + + :lport: The corresponding request's local port. + + + :rport: The corresponding request's remote port. + + + :user_id: The user id returned by the reply. + + + :system: The operating system returned by the reply. + + .. bro:see:: ident_error ident_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: ident_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, lport: :bro:type:`port`, rport: :bro:type:`port`, line: :bro:type:`string`) + + Generated for Ident error replies. + + See `Wikipedia `__ for more + information about the Ident protocol. + + + :c: The connection. + + + :lport: The corresponding request's local port. + + + :rport: The corresponding request's remote port. + + + :line: The error description returned by the reply. + + .. bro:see:: ident_reply ident_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +Bro::IMAP +--------- + +IMAP analyzer (StartTLS only) + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_IMAP` + +Events +++++++ + +.. bro:id:: imap_capabilities + + :Type: :bro:type:`event` (c: :bro:type:`connection`, capabilities: :bro:type:`string_vec`) + + Generated when a server sends a capability list to the client, + after being queried using the CAPABILITY command. + + + :c: The connection. + + + :capabilities: The list of IMAP capabilities as sent by the server. + +.. bro:id:: imap_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a IMAP connection goes encrypted after a successful + StartTLS exchange between the client and the server. + + + :c: The connection. + +Bro::InterConn +-------------- + +InterConn analyzer deprecated + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_INTERCONN` + +Events +++++++ + +.. bro:id:: interconn_stats + + :Type: :bro:type:`event` (c: :bro:type:`connection`, os: :bro:type:`interconn_endp_stats`, rs: :bro:type:`interconn_endp_stats`) + + Deprecated. Will be removed. + +.. bro:id:: interconn_remove_conn + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +Bro::IRC +-------- + +IRC analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_IRC` + +Events +++++++ + +.. bro:id:: irc_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, command: :bro:type:`string`, arguments: :bro:type:`string`) + + Generated for all client-side IRC commands. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: Always true. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :command: The command. + + + :arguments: The arguments for the command. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + + .. note:: This event is generated only for messages that originate + at the client-side. Commands coming in from remote trigger + the :bro:id:`irc_message` event instead. + +.. bro:id:: irc_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, code: :bro:type:`count`, params: :bro:type:`string`) + + Generated for all IRC replies. IRC replies are sent in response to a + request and come with a reply code. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the reply. IRC uses the prefix to + indicate the true origin of a message. + + + :code: The reply code, as specified by the protocol. + + + :params: The reply's parameters. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, command: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC commands forwarded from the server to the client. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: Always false. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :command: The command. + + + :message: TODO. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + + .. note:: + + This event is generated only for messages that are forwarded by the server + to the client. Commands coming from client trigger the + :bro:id:`irc_request` event instead. + +.. bro:id:: irc_quit_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *quit*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname coming with the message. + + + :message: The text included with the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_privmsg_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, source: :bro:type:`string`, target: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *privmsg*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :source: The source of the private communication. + + + :target: The target of the private communication. + + + :message: The text of communication. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_notice_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, source: :bro:type:`string`, target: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *notice*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :source: The source of the private communication. + + + :target: The target of the private communication. + + + :message: The text of communication. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_squery_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, source: :bro:type:`string`, target: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *squery*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :source: The source of the private communication. + + + :target: The target of the private communication. + + + :message: The text of communication. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_join_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, info_list: :bro:type:`irc_join_list`) + + Generated for IRC messages of type *join*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :info_list: The user information coming with the command. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_part_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`, chans: :bro:type:`string_set`, message: :bro:type:`string`) + + Generated for IRC messages of type *part*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname coming with the message. + + + :chans: The set of channels affected. + + + :message: The text coming with the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_password_message + +.. bro:id:: irc_nick_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, who: :bro:type:`string`, newnick: :bro:type:`string`) + + Generated for IRC messages of type *nick*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :who: The user changing its nickname. + + + :newnick: The new nickname. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_invalid_nick + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated when a server rejects an IRC nickname. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_network_info + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, users: :bro:type:`count`, services: :bro:type:`count`, servers: :bro:type:`count`) + + Generated for an IRC reply of type *luserclient*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :users: The number of users as returned in the reply. + + + :services: The number of services as returned in the reply. + + + :servers: The number of servers as returned in the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_server_info + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, users: :bro:type:`count`, services: :bro:type:`count`, servers: :bro:type:`count`) + + Generated for an IRC reply of type *luserme*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :users: The number of users as returned in the reply. + + + :services: The number of services as returned in the reply. + + + :servers: The number of servers as returned in the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_channel_info + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, chans: :bro:type:`count`) + + Generated for an IRC reply of type *luserchannels*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :chans: The number of channels as returned in the reply. + + .. bro:see:: irc_channel_topic irc_dcc_message irc_error_message irc_global_users + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_who_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, target_nick: :bro:type:`string`, channel: :bro:type:`string`, user: :bro:type:`string`, host: :bro:type:`string`, server: :bro:type:`string`, nick: :bro:type:`string`, params: :bro:type:`string`, hops: :bro:type:`count`, real_name: :bro:type:`string`) + + Generated for an IRC reply of type *whoreply*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :target_nick: The target nickname. + + + :channel: The channel. + + + :user: The user. + + + :host: The host. + + + :server: The server. + + + :nick: The nickname. + + + :params: The parameters. + + + :hops: The hop count. + + + :real_name: The real name. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_names_info + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, c_type: :bro:type:`string`, channel: :bro:type:`string`, users: :bro:type:`string_set`) + + Generated for an IRC reply of type *namereply*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :c_type: The channel type. + + + :channel: The channel. + + + :users: The set of users. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_whois_operator_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`) + + Generated for an IRC reply of type *whoisoperator*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname specified in the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_whois_channel_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`, chans: :bro:type:`string_set`) + + Generated for an IRC reply of type *whoischannels*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname specified in the reply. + + + :chans: The set of channels returned. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_whois_user_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`, user: :bro:type:`string`, host: :bro:type:`string`, real_name: :bro:type:`string`) + + Generated for an IRC reply of type *whoisuser*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname specified in the reply. + + + :user: The user name specified in the reply. + + + :host: The host name specified in the reply. + + + :real_name: The real name specified in the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_oper_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, got_oper: :bro:type:`bool`) + + Generated for IRC replies of type *youreoper* and *nooperhost*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :got_oper: True if the *oper* command was executed successfully + (*youreport*) and false otherwise (*nooperhost*). + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_part_message + irc_password_message + +.. bro:id:: irc_global_users + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, msg: :bro:type:`string`) + + Generated for an IRC reply of type *globalusers*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :msg: The message coming with the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_channel_topic + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, channel: :bro:type:`string`, topic: :bro:type:`string`) + + Generated for an IRC reply of type *topic*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :channel: The channel name specified in the reply. + + + :topic: The topic specified in the reply. + + .. bro:see:: irc_channel_info irc_dcc_message irc_error_message irc_global_users + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_who_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, mask: :bro:type:`string`, oper: :bro:type:`bool`) + + Generated for IRC messages of type *who*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :mask: The mask specified in the message. + + + :oper: True if the operator flag was set. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_whois_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, server: :bro:type:`string`, users: :bro:type:`string`) + + Generated for IRC messages of type *whois*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :server: TODO. + + + :users: TODO. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_oper_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, user: :bro:type:`string`, password: :bro:type:`string`) + + Generated for IRC messages of type *oper*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :user: The user specified in the message. + + + :password: The password specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_kick_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, chans: :bro:type:`string`, users: :bro:type:`string`, comment: :bro:type:`string`) + + Generated for IRC messages of type *kick*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :chans: The channels specified in the message. + + + :users: The users specified in the message. + + + :comment: The comment specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_error_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *error*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :message: The textual description specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_global_users + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_invite_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, nickname: :bro:type:`string`, channel: :bro:type:`string`) + + Generated for IRC messages of type *invite*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :nickname: The nickname specified in the message. + + + :channel: The channel specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_mode_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, params: :bro:type:`string`) + + Generated for IRC messages of type *mode*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :params: The parameters coming with the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_squit_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, server: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *squit*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :server: The server specified in the message. + + + :message: The textual description specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_dcc_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, target: :bro:type:`string`, dcc_type: :bro:type:`string`, argument: :bro:type:`string`, address: :bro:type:`addr`, dest_port: :bro:type:`count`, size: :bro:type:`count`) + + Generated for IRC messages of type *dcc*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :target: The target specified in the message. + + + :dcc_type: The DCC type specified in the message. + + + :argument: The argument specified in the message. + + + :address: The address specified in the message. + + + :dest_port: The destination port specified in the message. + + + :size: The size specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_error_message irc_global_users + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_user_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, user: :bro:type:`string`, host: :bro:type:`string`, server: :bro:type:`string`, real_name: :bro:type:`string`) + + Generated for IRC messages of type *user*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :user: The user specified in the message. + + + :host: The host name specified in the message. + + + :server: The server name specified in the message. + + + :real_name: The real name specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_password_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, password: :bro:type:`string`) + + Generated for IRC messages of type *password*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :password: The password specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message + +.. bro:id:: irc_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated if an IRC connection switched to TLS using STARTTLS. After this + event no more IRC events will be raised for the connection. See the SSL + analyzer for related SSL events, which will now be generated. + + + :c: The connection. + +Bro::KRB +-------- + +Kerberos analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_KRB` + +:bro:enum:`Analyzer::ANALYZER_KRB_TCP` + +Options/Constants ++++++++++++++++++ + +.. bro:id:: KRB::keytab + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Kerberos keytab file name. Used to decrypt tickets encountered on the wire. + +Types ++++++ + +.. bro:type:: KRB::Error_Msg + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + msg_type: :bro:type:`count` + The message type (30 for ERROR_MSG) + + client_time: :bro:type:`time` :bro:attr:`&optional` + Current time on the client + + server_time: :bro:type:`time` + Current time on the server + + error_code: :bro:type:`count` + The specific error code + + client_realm: :bro:type:`string` :bro:attr:`&optional` + Realm of the ticket + + client_name: :bro:type:`string` :bro:attr:`&optional` + Name on the ticket + + service_realm: :bro:type:`string` + Realm of the service + + service_name: :bro:type:`string` + Name of the service + + error_text: :bro:type:`string` :bro:attr:`&optional` + Additional text to explain the error + + pa_data: :bro:type:`vector` of :bro:type:`KRB::Type_Value` :bro:attr:`&optional` + Optional pre-authentication data + + The data from the ERROR_MSG message. See :rfc:`4120`. + +.. bro:type:: KRB::SAFE_Msg + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + msg_type: :bro:type:`count` + The message type (20 for SAFE_MSG) + + data: :bro:type:`string` + The application-specific data that is being passed + from the sender to the reciever + + timestamp: :bro:type:`time` :bro:attr:`&optional` + Current time from the sender of the message + + seq: :bro:type:`count` :bro:attr:`&optional` + Sequence number used to detect replays + + sender: :bro:type:`KRB::Host_Address` :bro:attr:`&optional` + Sender address + + recipient: :bro:type:`KRB::Host_Address` :bro:attr:`&optional` + Recipient address + + The data from the SAFE message. See :rfc:`4120`. + +.. bro:type:: KRB::KDC_Options + + :Type: :bro:type:`record` + + forwardable: :bro:type:`bool` + The ticket to be issued should have its forwardable flag set. + + forwarded: :bro:type:`bool` + A (TGT) request for forwarding. + + proxiable: :bro:type:`bool` + The ticket to be issued should have its proxiable flag set. + + proxy: :bro:type:`bool` + A request for a proxy. + + allow_postdate: :bro:type:`bool` + The ticket to be issued should have its may-postdate flag set. + + postdated: :bro:type:`bool` + A request for a postdated ticket. + + renewable: :bro:type:`bool` + The ticket to be issued should have its renewable flag set. + + opt_hardware_auth: :bro:type:`bool` + Reserved for opt_hardware_auth + + disable_transited_check: :bro:type:`bool` + Request that the KDC not check the transited field of a TGT against + the policy of the local realm before it will issue derivative tickets + based on the TGT. + + renewable_ok: :bro:type:`bool` + If a ticket with the requested lifetime cannot be issued, a renewable + ticket is acceptable + + enc_tkt_in_skey: :bro:type:`bool` + The ticket for the end server is to be encrypted in the session key + from the additional TGT provided + + renew: :bro:type:`bool` + The request is for a renewal + + validate: :bro:type:`bool` + The request is to validate a postdated ticket. + + KDC Options. See :rfc:`4120` + +.. bro:type:: KRB::AP_Options + + :Type: :bro:type:`record` + + use_session_key: :bro:type:`bool` + Indicates that user-to-user-authentication is in use + + mutual_required: :bro:type:`bool` + Mutual authentication is required + + AP Options. See :rfc:`4120` + +.. bro:type:: KRB::Type_Value + + :Type: :bro:type:`record` + + data_type: :bro:type:`count` + The data type + + val: :bro:type:`string` + The data value + + Used in a few places in the Kerberos analyzer for elements + that have a type and a string value. + +.. bro:type:: KRB::Ticket + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + realm: :bro:type:`string` + Realm + + service_name: :bro:type:`string` + Name of the service + + cipher: :bro:type:`count` + Cipher the ticket was encrypted with + + ciphertext: :bro:type:`string` :bro:attr:`&optional` + Cipher text of the ticket + + authenticationinfo: :bro:type:`string` :bro:attr:`&optional` + Authentication info + + A Kerberos ticket. See :rfc:`4120`. + +.. bro:type:: KRB::Ticket_Vector + + :Type: :bro:type:`vector` of :bro:type:`KRB::Ticket` + + +.. bro:type:: KRB::Host_Address + + :Type: :bro:type:`record` + + ip: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + IPv4 or IPv6 address + + netbios: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + NetBIOS address + + unknown: :bro:type:`KRB::Type_Value` :bro:attr:`&optional` + Some other type that we don't support yet + + A Kerberos host address See :rfc:`4120`. + +.. bro:type:: KRB::KDC_Request + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + msg_type: :bro:type:`count` + The message type (10 for AS_REQ, 12 for TGS_REQ) + + pa_data: :bro:type:`vector` of :bro:type:`KRB::Type_Value` :bro:attr:`&optional` + Optional pre-authentication data + + kdc_options: :bro:type:`KRB::KDC_Options` + Options specified in the request + + client_name: :bro:type:`string` :bro:attr:`&optional` + Name on the ticket + + service_realm: :bro:type:`string` + Realm of the service + + service_name: :bro:type:`string` :bro:attr:`&optional` + Name of the service + + from: :bro:type:`time` :bro:attr:`&optional` + Time the ticket is good from + + till: :bro:type:`time` + Time the ticket is good till + + rtime: :bro:type:`time` :bro:attr:`&optional` + The requested renew-till time + + nonce: :bro:type:`count` + A random nonce generated by the client + + encryption_types: :bro:type:`vector` of :bro:type:`count` + The desired encryption algorithms, in order of preference + + host_addrs: :bro:type:`vector` of :bro:type:`KRB::Host_Address` :bro:attr:`&optional` + Any additional addresses the ticket should be valid for + + additional_tickets: :bro:type:`vector` of :bro:type:`KRB::Ticket` :bro:attr:`&optional` + Additional tickets may be included for certain transactions + + The data from the AS_REQ and TGS_REQ messages. See :rfc:`4120`. + +.. bro:type:: KRB::KDC_Response + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + msg_type: :bro:type:`count` + The message type (11 for AS_REP, 13 for TGS_REP) + + pa_data: :bro:type:`vector` of :bro:type:`KRB::Type_Value` :bro:attr:`&optional` + Optional pre-authentication data + + client_realm: :bro:type:`string` :bro:attr:`&optional` + Realm on the ticket + + client_name: :bro:type:`string` + Name on the service + + ticket: :bro:type:`KRB::Ticket` + The ticket that was issued + + The data from the AS_REQ and TGS_REQ messages. See :rfc:`4120`. + +Events +++++++ + +.. bro:id:: krb_as_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::KDC_Request`) + + A Kerberos 5 ``Authentication Server (AS) Request`` as defined + in :rfc:`4120`. The AS request contains a username of the client + requesting authentication, and returns an AS reply with an + encrypted Ticket Granting Ticket (TGT) for that user. The TGT + can then be used to request further tickets for other services. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos KDC request message data structure. + + .. bro:see:: krb_as_response krb_tgs_request krb_tgs_response krb_ap_request + krb_ap_response krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_as_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::KDC_Response`) + + A Kerberos 5 ``Authentication Server (AS) Response`` as defined + in :rfc:`4120`. Following the AS request for a user, an AS reply + contains an encrypted Ticket Granting Ticket (TGT) for that user. + The TGT can then be used to request further tickets for other services. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos KDC reply message data structure. + + .. bro:see:: krb_as_request krb_tgs_request krb_tgs_response krb_ap_request + krb_ap_response krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_tgs_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::KDC_Request`) + + A Kerberos 5 ``Ticket Granting Service (TGS) Request`` as defined + in :rfc:`4120`. Following the Authentication Server exchange, if + successful, the client now has a Ticket Granting Ticket (TGT). To + authenticate to a Kerberized service, the client requests a Service + Ticket, which will be returned in the TGS reply. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos KDC request message data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_response krb_ap_request + krb_ap_response krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_tgs_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::KDC_Response`) + + A Kerberos 5 ``Ticket Granting Service (TGS) Response`` as defined + in :rfc:`4120`. This message returns a Service Ticket to the client, + which is encrypted with the service's long-term key, and which the + client can use to authenticate to that service. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos KDC reply message data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_ap_request + krb_ap_response krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_ap_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, ticket: :bro:type:`KRB::Ticket`, opts: :bro:type:`KRB::AP_Options`) + + A Kerberos 5 ``Authentication Header (AP) Request`` as defined + in :rfc:`4120`. This message contains authentication information + that should be part of the first message in an authenticated + transaction. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :ticket: The Kerberos ticket being used for authentication. + + + :opts: A Kerberos AP options data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_response krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_ap_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + A Kerberos 5 ``Authentication Header (AP) Response`` as defined + in :rfc:`4120`. This is used if mutual authentication is desired. + All of the interesting information in here is encrypted, so the event + doesn't have much useful data, but it's provided in case it's important + to know that this message was sent. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_priv + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + A Kerberos 5 ``Private Message`` as defined in :rfc:`4120`. This + is a private (encrypted) application message, so the event doesn't + have much useful data, but it's provided in case it's important to + know that this message was sent. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :is_orig: Whether the originator of the connection sent this message. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_ap_response krb_safe krb_cred krb_error + +.. bro:id:: krb_safe + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`KRB::SAFE_Msg`) + + A Kerberos 5 ``Safe Message`` as defined in :rfc:`4120`. This is a + safe (checksummed) application message. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :is_orig: Whether the originator of the connection sent this message. + + + :msg: A Kerberos SAFE message data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_ap_response krb_priv krb_cred krb_error + +.. bro:id:: krb_cred + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, tickets: :bro:type:`KRB::Ticket_Vector`) + + A Kerberos 5 ``Credential Message`` as defined in :rfc:`4120`. This is + a private (encrypted) message to forward credentials. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :is_orig: Whether the originator of the connection sent this message. + + + :tickets: Tickets obtained from the KDC that are being forwarded. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_ap_response krb_priv krb_safe krb_error + +.. bro:id:: krb_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::Error_Msg`) + + A Kerberos 5 ``Error Message`` as defined in :rfc:`4120`. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos error message data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_ap_response krb_priv krb_safe krb_cred + +Bro::Login +---------- + +Telnet/Rsh/Rlogin analyzers + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_CONTENTS_RLOGIN` + +:bro:enum:`Analyzer::ANALYZER_CONTENTS_RSH` + +:bro:enum:`Analyzer::ANALYZER_LOGIN` + +:bro:enum:`Analyzer::ANALYZER_NVT` + +:bro:enum:`Analyzer::ANALYZER_RLOGIN` + +:bro:enum:`Analyzer::ANALYZER_RSH` + +:bro:enum:`Analyzer::ANALYZER_TELNET` + +Events +++++++ + +.. bro:id:: rsh_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, client_user: :bro:type:`string`, server_user: :bro:type:`string`, line: :bro:type:`string`, new_session: :bro:type:`bool`) + + Generated for client side commands on an RSH connection. + + See :rfc:`1258` for more information about the Rlogin/Rsh protocol. + + + :c: The connection. + + + :client_user: The client-side user name as sent in the initial protocol + handshake. + + + :server_user: The server-side user name as sent in the initial protocol + handshake. + + + :line: The command line sent in the request. + + + :new_session: True if this is the first command of the Rsh session. + + .. bro:see:: rsh_reply login_confused login_confused_text login_display + login_failure login_input_line login_output_line login_prompt login_success + login_terminal + + .. note:: For historical reasons, these events are separate from the + ``login_`` events. Ideally, they would all be handled uniquely. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: rsh_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, client_user: :bro:type:`string`, server_user: :bro:type:`string`, line: :bro:type:`string`) + + Generated for client side commands on an RSH connection. + + See :rfc:`1258` for more information about the Rlogin/Rsh protocol. + + + :c: The connection. + + + :client_user: The client-side user name as sent in the initial protocol + handshake. + + + :server_user: The server-side user name as sent in the initial protocol + handshake. + + + :line: The command line sent in the request. + + .. bro:see:: rsh_request login_confused login_confused_text login_display + login_failure login_input_line login_output_line login_prompt login_success + login_terminal + + .. note:: For historical reasons, these events are separate from the + ``login_`` events. Ideally, they would all be handled uniquely. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: login_failure + + :Type: :bro:type:`event` (c: :bro:type:`connection`, user: :bro:type:`string`, client_user: :bro:type:`string`, password: :bro:type:`string`, line: :bro:type:`string`) + + Generated for Telnet/Rlogin login failures. The *login* analyzer inspects + Telnet/Rlogin sessions to heuristically extract username and password + information as well as the text returned by the login server. This event is + raised if a login attempt appears to have been unsuccessful. + + + :c: The connection. + + + :user: The user name tried. + + + :client_user: For Telnet connections, this is an empty string, but for Rlogin + connections, it is the client name passed in the initial authentication + information (to check against .rhosts). + + + :password: The password tried. + + + :line: The line of text that led the analyzer to conclude that the + authentication had failed. + + .. bro:see:: login_confused login_confused_text login_display login_input_line + login_output_line login_prompt login_success login_terminal direct_login_prompts + get_login_state login_failure_msgs login_non_failure_msgs login_prompts login_success_msgs + login_timeouts set_login_state + + .. note:: The login analyzer depends on a set of script-level variables that + need to be configured with patterns identifying login attempts. This + configuration has not yet been ported over from Bro 1.5 to Bro 2.x, and + the analyzer is therefore not directly usable at the moment. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_success + + :Type: :bro:type:`event` (c: :bro:type:`connection`, user: :bro:type:`string`, client_user: :bro:type:`string`, password: :bro:type:`string`, line: :bro:type:`string`) + + Generated for successful Telnet/Rlogin logins. The *login* analyzer inspects + Telnet/Rlogin sessions to heuristically extract username and password + information as well as the text returned by the login server. This event is + raised if a login attempt appears to have been successful. + + + :c: The connection. + + + :user: The user name used. + + + :client_user: For Telnet connections, this is an empty string, but for Rlogin + connections, it is the client name passed in the initial authentication + information (to check against .rhosts). + + + :password: The password used. + + + :line: The line of text that led the analyzer to conclude that the + authentication had succeeded. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_input_line login_output_line login_prompt login_terminal + direct_login_prompts get_login_state login_failure_msgs login_non_failure_msgs + login_prompts login_success_msgs login_timeouts set_login_state + + .. note:: The login analyzer depends on a set of script-level variables that + need to be configured with patterns identifying login attempts. This + configuration has not yet been ported over from Bro 1.5 to Bro 2.x, and + the analyzer is therefore not directly usable at the moment. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_input_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, line: :bro:type:`string`) + + Generated for lines of input on Telnet/Rlogin sessions. The line will have + control characters (such as in-band Telnet options) removed. + + + :c: The connection. + + + :line: The input line. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_output_line login_prompt login_success login_terminal rsh_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_output_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, line: :bro:type:`string`) + + Generated for lines of output on Telnet/Rlogin sessions. The line will have + control characters (such as in-band Telnet options) removed. + + + :c: The connection. + + + :line: The ouput line. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_input_line login_prompt login_success login_terminal rsh_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_confused + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`, line: :bro:type:`string`) + + Generated when tracking of Telnet/Rlogin authentication failed. As Bro's + *login* analyzer uses a number of heuristics to extract authentication + information, it may become confused. If it can no longer correctly track + the authentication dialog, it raises this event. + + + :c: The connection. + + + :msg: Gives the particular problem the heuristics detected (for example, + ``multiple_login_prompts`` means that the engine saw several login + prompts in a row, without the type-ahead from the client side presumed + necessary to cause them) + + + :line: The line of text that caused the heuristics to conclude they were + confused. + + .. bro:see:: login_confused_text login_display login_failure login_input_line login_output_line + login_prompt login_success login_terminal direct_login_prompts get_login_state + login_failure_msgs login_non_failure_msgs login_prompts login_success_msgs + login_timeouts set_login_state + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_confused_text + + :Type: :bro:type:`event` (c: :bro:type:`connection`, line: :bro:type:`string`) + + Generated after getting confused while tracking a Telnet/Rlogin + authentication dialog. The *login* analyzer generates this even for every + line of user input after it has reported :bro:id:`login_confused` for a + connection. + + + :c: The connection. + + + :line: The line the user typed. + + .. bro:see:: login_confused login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal direct_login_prompts + get_login_state login_failure_msgs login_non_failure_msgs login_prompts + login_success_msgs login_timeouts set_login_state + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_terminal + + :Type: :bro:type:`event` (c: :bro:type:`connection`, terminal: :bro:type:`string`) + + Generated for clients transmitting a terminal type in a Telnet session. This + information is extracted out of environment variables sent as Telnet options. + + + :c: The connection. + + + :terminal: The TERM value transmitted. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_input_line login_output_line login_prompt login_success + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_display + + :Type: :bro:type:`event` (c: :bro:type:`connection`, display: :bro:type:`string`) + + Generated for clients transmitting an X11 DISPLAY in a Telnet session. This + information is extracted out of environment variables sent as Telnet options. + + + :c: The connection. + + + :display: The DISPLAY transmitted. + + .. bro:see:: login_confused login_confused_text login_failure login_input_line + login_output_line login_prompt login_success login_terminal + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: authentication_accepted + + :Type: :bro:type:`event` (name: :bro:type:`string`, c: :bro:type:`connection`) + + Generated when a Telnet authentication has been successful. The Telnet + protocol includes options for negotiating authentication. When such an + option is sent from client to server and the server replies that it accepts + the authentication, then the event engine generates this event. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :name: The authenticated name. + + + :c: The connection. + + .. bro:see:: authentication_rejected authentication_skipped login_success + + .. note:: This event inspects the corresponding Telnet option + while :bro:id:`login_success` heuristically determines success by watching + session data. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: authentication_rejected + + :Type: :bro:type:`event` (name: :bro:type:`string`, c: :bro:type:`connection`) + + Generated when a Telnet authentication has been unsuccessful. The Telnet + protocol includes options for negotiating authentication. When such an option + is sent from client to server and the server replies that it did not accept + the authentication, then the event engine generates this event. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :name: The attempted authentication name. + + + :c: The connection. + + .. bro:see:: authentication_accepted authentication_skipped login_failure + + .. note:: This event inspects the corresponding Telnet option + while :bro:id:`login_success` heuristically determines failure by watching + session data. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: authentication_skipped + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for Telnet/Rlogin sessions when a pattern match indicates + that no authentication is performed. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: authentication_accepted authentication_rejected direct_login_prompts + get_login_state login_failure_msgs login_non_failure_msgs login_prompts + login_success_msgs login_timeouts set_login_state + + .. note:: The login analyzer depends on a set of script-level variables that + need to be configured with patterns identifying activity. This + configuration has not yet been ported over from Bro 1.5 to Bro 2.x, and + the analyzer is therefore not directly usable at the moment. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_prompt + + :Type: :bro:type:`event` (c: :bro:type:`connection`, prompt: :bro:type:`string`) + + Generated for clients transmitting a terminal prompt in a Telnet session. + This information is extracted out of environment variables sent as Telnet + options. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + + :prompt: The TTYPROMPT transmitted. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_input_line login_output_line login_success login_terminal + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: activating_encryption + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for Telnet sessions when encryption is activated. The Telnet + protocol includes options for negotiating encryption. When such a series of + options is successfully negotiated, the event engine generates this event. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: authentication_accepted authentication_rejected authentication_skipped + login_confused login_confused_text login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal + +.. bro:id:: inconsistent_option + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for an inconsistent Telnet option. Telnet options are specified + by the client and server stating which options they are willing to + support vs. which they are not, and then instructing one another which in + fact they should or should not use for the current connection. If the event + engine sees a peer violate either what the other peer has instructed it to + do, or what it itself offered in terms of options in the past, then the + engine generates this event. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: bad_option bad_option_termination authentication_accepted + authentication_rejected authentication_skipped login_confused + login_confused_text login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal + +.. bro:id:: bad_option + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for an ill-formed or unrecognized Telnet option. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: inconsistent_option bad_option_termination authentication_accepted + authentication_rejected authentication_skipped login_confused + login_confused_text login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: bad_option_termination + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for a Telnet option that's incorrectly terminated. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: inconsistent_option bad_option authentication_accepted + authentication_rejected authentication_skipped login_confused + login_confused_text login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +Functions ++++++++++ + +.. bro:id:: get_login_state + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`) : :bro:type:`count` + + Returns the state of the given login (Telnet or Rlogin) connection. + + + :cid: The connection ID. + + + :returns: False if the connection is not active or is not tagged as a + login analyzer. Otherwise the function returns the state, which can + be one of: + + - ``LOGIN_STATE_AUTHENTICATE``: The connection is in its + initial authentication dialog. + - ``LOGIN_STATE_LOGGED_IN``: The analyzer believes the user has + successfully authenticated. + - ``LOGIN_STATE_SKIP``: The analyzer has skipped any further + processing of the connection. + - ``LOGIN_STATE_CONFUSED``: The analyzer has concluded that it + does not correctly know the state of the connection, and/or + the username associated with it. + + .. bro:see:: set_login_state + +.. bro:id:: set_login_state + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, new_state: :bro:type:`count`) : :bro:type:`bool` + + Sets the login state of a connection with a login analyzer. + + + :cid: The connection ID. + + + :new_state: The new state of the login analyzer. See + :bro:id:`get_login_state` for possible values. + + + :returns: Returns false if *cid* is not an active connection + or is not tagged as a login analyzer, and true otherwise. + + .. bro:see:: get_login_state + +Bro::MIME +--------- + +MIME parsing + +Components +++++++++++ + +Events +++++++ + +.. bro:id:: mime_begin_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when starting to parse an email MIME entity. MIME is a + protocol-independent data format for encoding text and files, along with + corresponding metadata, for transmission. Bro raises this event when it + begins parsing a MIME entity extracted from an email protocol. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + .. bro:see:: mime_all_data mime_all_headers mime_content_hash mime_end_entity + mime_entity_data mime_event mime_one_header mime_segment_data smtp_data + http_begin_entity + + .. note:: Bro also extracts MIME entities from HTTP sessions. For those, + however, it raises :bro:id:`http_begin_entity` instead. + +.. bro:id:: mime_end_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when finishing parsing an email MIME entity. MIME is a + protocol-independent data format for encoding text and files, along with + corresponding metadata, for transmission. Bro raises this event when it + finished parsing a MIME entity extracted from an email protocol. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_entity_data mime_event mime_one_header mime_segment_data smtp_data + http_end_entity + + .. note:: Bro also extracts MIME entities from HTTP sessions. For those, + however, it raises :bro:id:`http_end_entity` instead. + +.. bro:id:: mime_one_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, h: :bro:type:`mime_header_rec`) + + Generated for individual MIME headers extracted from email MIME + entities. MIME is a protocol-independent data format for encoding text and + files, along with corresponding metadata, for transmission. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :h: The parsed MIME header. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_segment_data + http_header http_all_headers + + .. note:: Bro also extracts MIME headers from HTTP sessions. For those, + however, it raises :bro:id:`http_header` instead. + +.. bro:id:: mime_all_headers + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hlist: :bro:type:`mime_header_list`) + + Generated for MIME headers extracted from email MIME entities, passing all + headers at once. MIME is a protocol-independent data format for encoding + text and files, along with corresponding metadata, for transmission. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :hlist: A *table* containing all headers extracted from the current entity. + The table is indexed by the position of the header (1 for the first, + 2 for the second, etc.). + + .. bro:see:: mime_all_data mime_begin_entity mime_content_hash mime_end_entity + mime_entity_data mime_event mime_one_header mime_segment_data + http_header http_all_headers + + .. note:: Bro also extracts MIME headers from HTTP sessions. For those, + however, it raises :bro:id:`http_header` instead. + +.. bro:id:: mime_segment_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, length: :bro:type:`count`, data: :bro:type:`string`) + + Generated for chunks of decoded MIME data from email MIME entities. MIME + is a protocol-independent data format for encoding text and files, along with + corresponding metadata, for transmission. As Bro parses the data of an + entity, it raises a sequence of these events, each coming as soon as a new + chunk of data is available. In contrast, there is also + :bro:id:`mime_entity_data`, which passes all of an entities data at once + in a single block. While the latter is more convenient to handle, + ``mime_segment_data`` is more efficient as Bro does not need to buffer + the data. Thus, if possible, this event should be preferred. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :length: The length of *data*. + + + :data: The raw data of one segment of the current entity. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_one_header http_entity_data + mime_segment_length mime_segment_overlap_length + + .. note:: Bro also extracts MIME data from HTTP sessions. For those, + however, it raises :bro:id:`http_entity_data` (sic!) instead. + +.. bro:id:: mime_entity_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, length: :bro:type:`count`, data: :bro:type:`string`) + + Generated for data decoded from an email MIME entity. This event delivers + the complete content of a single MIME entity with the quoted-printable and + and base64 data decoded. In contrast, there is also :bro:id:`mime_segment_data`, + which passes on a sequence of data chunks as they come in. While + ``mime_entity_data`` is more convenient to handle, ``mime_segment_data`` is + more efficient as Bro does not need to buffer the data. Thus, if possible, + the latter should be preferred. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :length: The length of *data*. + + + :data: The raw data of the complete entity. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_event mime_one_header mime_segment_data + + .. note:: While Bro also decodes MIME entities extracted from HTTP + sessions, there's no corresponding event for that currently. + +.. bro:id:: mime_all_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, length: :bro:type:`count`, data: :bro:type:`string`) + + Generated for passing on all data decoded from a single email MIME + message. If an email message has more than one MIME entity, this event + combines all their data into a single value for analysis. Note that because + of the potentially significant buffering necessary, using this event can be + expensive. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :length: The length of *data*. + + + :data: The raw data of all MIME entities concatenated. + + .. bro:see:: mime_all_headers mime_begin_entity mime_content_hash mime_end_entity + mime_entity_data mime_event mime_one_header mime_segment_data + + .. note:: While Bro also decodes MIME entities extracted from HTTP + sessions, there's no corresponding event for that currently. + +.. bro:id:: mime_event + + :Type: :bro:type:`event` (c: :bro:type:`connection`, event_type: :bro:type:`string`, detail: :bro:type:`string`) + + Generated for errors found when decoding email MIME entities. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :event_type: A string describing the general category of the problem found + (e.g., ``illegal format``). + + + :detail: Further more detailed description of the error. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_one_header mime_segment_data http_event + + .. note:: Bro also extracts MIME headers from HTTP sessions. For those, + however, it raises :bro:id:`http_event` instead. + +.. bro:id:: mime_content_hash + + :Type: :bro:type:`event` (c: :bro:type:`connection`, content_len: :bro:type:`count`, hash_value: :bro:type:`string`) + + Generated for decoded MIME entities extracted from email messages, passing on + their MD5 checksums. Bro computes the MD5 over the complete decoded data of + each MIME entity. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :content_len: The length of the entity being hashed. + + + :hash_value: The MD5 hash. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_end_entity + mime_entity_data mime_event mime_one_header mime_segment_data + + .. note:: While Bro also decodes MIME entities extracted from HTTP + sessions, there's no corresponding event for that currently. + +Bro::Modbus +----------- + +Modbus analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_MODBUS` + +Events +++++++ + +.. bro:id:: modbus_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, is_orig: :bro:type:`bool`) + + Generated for any Modbus message regardless if the particular function + is further supported or not. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :is_orig: True if the event is raised for the originator side. + +.. bro:id:: modbus_exception + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, code: :bro:type:`count`) + + Generated for any Modbus exception message. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :code: The exception code. + +.. bro:id:: modbus_read_coils_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus read coils request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first coil to be read. + + + :quantity: The number of coils to be read. + +.. bro:id:: modbus_read_coils_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, coils: :bro:type:`ModbusCoils`) + + Generated for a Modbus read coils response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :coils: The coil values returned from the device. + +.. bro:id:: modbus_read_discrete_inputs_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus read discrete inputs request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first coil to be read. + + + :quantity: The number of coils to be read. + +.. bro:id:: modbus_read_discrete_inputs_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, coils: :bro:type:`ModbusCoils`) + + Generated for a Modbus read discrete inputs response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :coils: The coil values returned from the device. + +.. bro:id:: modbus_read_holding_registers_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus read holding registers request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first register to be read. + + + :quantity: The number of registers to be read. + +.. bro:id:: modbus_read_holding_registers_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read holding registers response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :registers: The register values returned from the device. + +.. bro:id:: modbus_read_input_registers_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus read input registers request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first register to be read. + + + :quantity: The number of registers to be read. + +.. bro:id:: modbus_read_input_registers_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read input registers response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :registers: The register values returned from the device. + +.. bro:id:: modbus_write_single_coil_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, value: :bro:type:`bool`) + + Generated for a Modbus write single coil request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the coil to be written. + + + :value: The value to be written to the coil. + +.. bro:id:: modbus_write_single_coil_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, value: :bro:type:`bool`) + + Generated for a Modbus write single coil response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the coil that was written. + + + :value: The value that was written to the coil. + +.. bro:id:: modbus_write_single_register_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, value: :bro:type:`count`) + + Generated for a Modbus write single register request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the register to be written. + + + :value: The value to be written to the register. + +.. bro:id:: modbus_write_single_register_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, value: :bro:type:`count`) + + Generated for a Modbus write single register response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the register that was written. + + + :value: The value that was written to the register. + +.. bro:id:: modbus_write_multiple_coils_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, coils: :bro:type:`ModbusCoils`) + + Generated for a Modbus write multiple coils request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first coil to be written. + + + :coils: The values to be written to the coils. + +.. bro:id:: modbus_write_multiple_coils_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus write multiple coils response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first coil that was written. + + + :quantity: The quantity of coils that were written. + +.. bro:id:: modbus_write_multiple_registers_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus write multiple registers request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first register to be written. + + + :registers: The values to be written to the registers. + +.. bro:id:: modbus_write_multiple_registers_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus write multiple registers response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first register that was written. + + + :quantity: The quantity of registers that were written. + +.. bro:id:: modbus_read_file_record_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`) + + Generated for a Modbus read file record request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + .. note: This event is incomplete. The information from the data structure + is not yet passed through to the event. + +.. bro:id:: modbus_read_file_record_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`) + + Generated for a Modbus read file record response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + .. note: This event is incomplete. The information from the data structure + is not yet passed through to the event. + +.. bro:id:: modbus_write_file_record_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`) + + Generated for a Modbus write file record request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + .. note: This event is incomplete. The information from the data structure + is not yet passed through to the event. + +.. bro:id:: modbus_write_file_record_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`) + + Generated for a Modbus write file record response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + .. note: This event is incomplete. The information from the data structure + is not yet passed through to the event. + +.. bro:id:: modbus_mask_write_register_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, and_mask: :bro:type:`count`, or_mask: :bro:type:`count`) + + Generated for a Modbus mask write register request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the register where the masks should be applied. + + + :and_mask: The value of the logical AND mask to apply to the register. + + + :or_mask: The value of the logical OR mask to apply to the register. + +.. bro:id:: modbus_mask_write_register_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, and_mask: :bro:type:`count`, or_mask: :bro:type:`count`) + + Generated for a Modbus mask write register request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the register where the masks were applied. + + + :and_mask: The value of the logical AND mask applied register. + + + :or_mask: The value of the logical OR mask applied to the register. + +.. bro:id:: modbus_read_write_multiple_registers_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, read_start_address: :bro:type:`count`, read_quantity: :bro:type:`count`, write_start_address: :bro:type:`count`, write_registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read/write multiple registers request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :read_start_address: The memory address of the first register to be read. + + + :read_quantity: The number of registers to read. + + + :write_start_address: The memory address of the first register to be written. + + + :write_registers: The values to be written to the registers. + +.. bro:id:: modbus_read_write_multiple_registers_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, written_registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read/write multiple registers response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :written_registers: The register values read from the registers specified in + the request. + +.. bro:id:: modbus_read_fifo_queue_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`) + + Generated for a Modbus read FIFO queue request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The address of the FIFO queue to read. + +.. bro:id:: modbus_read_fifo_queue_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, fifos: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read FIFO queue response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :fifos: The register values read from the FIFO queue on the device. + +Bro::MySQL +---------- + +MySQL analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_MYSQL` + +Events +++++++ + +.. bro:id:: mysql_command_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, command: :bro:type:`count`, arg: :bro:type:`string`) + + Generated for a command request from a MySQL client. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :command: The numerical code of the command issued. + + + :arg: The argument for the command (empty string if not provided). + + .. bro:see:: mysql_error mysql_ok mysql_server_version mysql_handshake + +.. bro:id:: mysql_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, code: :bro:type:`count`, msg: :bro:type:`string`) + + Generated for an unsuccessful MySQL response. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :code: The error code. + + + :msg: Any extra details about the error (empty string if not provided). + + .. bro:see:: mysql_command_request mysql_ok mysql_server_version mysql_handshake + +.. bro:id:: mysql_ok + + :Type: :bro:type:`event` (c: :bro:type:`connection`, affected_rows: :bro:type:`count`) + + Generated for a successful MySQL response. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :affected_rows: The number of rows that were affected. + + .. bro:see:: mysql_command_request mysql_error mysql_server_version mysql_handshake + +.. bro:id:: mysql_result_row + + :Type: :bro:type:`event` (c: :bro:type:`connection`, row: :bro:type:`string_vec`) + + Generated for each MySQL ResultsetRow response packet. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :row: The result row data. + + .. bro:see:: mysql_command_request mysql_error mysql_server_version mysql_handshake mysql_ok + +.. bro:id:: mysql_server_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, ver: :bro:type:`string`) + + Generated for the initial server handshake packet, which includes the MySQL server version. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :ver: The server version string. + + .. bro:see:: mysql_command_request mysql_error mysql_ok mysql_handshake + +.. bro:id:: mysql_handshake + + :Type: :bro:type:`event` (c: :bro:type:`connection`, username: :bro:type:`string`) + + Generated for a client handshake response packet, which includes the username the client is attempting + to connect as. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :username: The username supplied by the client + + .. bro:see:: mysql_command_request mysql_error mysql_ok mysql_server_version + +Bro::NCP +-------- + +NCP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_CONTENTS_NCP` + +:bro:enum:`Analyzer::ANALYZER_NCP` + +Options/Constants ++++++++++++++++++ + +.. bro:id:: NCP::max_frame_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``65536`` + + The maximum number of bytes to allocate when parsing NCP frames. + +Events +++++++ + +.. bro:id:: ncp_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, frame_type: :bro:type:`count`, length: :bro:type:`count`, func: :bro:type:`count`) + + Generated for NCP requests (Netware Core Protocol). + + See `Wikipedia `__ for + more information about the NCP protocol. + + + :c: The connection. + + + :frame_type: The frame type, as specified by the protocol. + + + :length: The length of the request body, excluding the frame header. + + + :func: The requested function, as specified by the protocol. + + .. bro:see:: ncp_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: ncp_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, frame_type: :bro:type:`count`, length: :bro:type:`count`, req_frame: :bro:type:`count`, req_func: :bro:type:`count`, completion_code: :bro:type:`count`) + + Generated for NCP replies (Netware Core Protocol). + + See `Wikipedia `__ for + more information about the NCP protocol. + + + :c: The connection. + + + :frame_type: The frame type, as specified by the protocol. + + + :length: The length of the request body, excluding the frame header. + + + :req_frame: The frame type from the corresponding request. + + + :req_func: The function code from the corresponding request. + + + :completion_code: The reply's completion code, as specified by the protocol. + + .. bro:see:: ncp_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +Bro::NetBIOS +------------ + +NetBIOS analyzer support + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_CONTENTS_NETBIOSSSN` + +:bro:enum:`Analyzer::ANALYZER_NETBIOSSSN` + +Events +++++++ + +.. bro:id:: netbios_session_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg_type: :bro:type:`count`, data_len: :bro:type:`count`) + + Generated for all NetBIOS SSN and DGM messages. Bro's NetBIOS analyzer + processes the NetBIOS session service running on TCP port 139, and (despite + its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :is_orig: True if the message was sent by the originator of the connection. + + + :msg_type: The general type of message, as defined in Section 4.3.1 of + :rfc:`1002`. + + + :data_len: The length of the message's payload. + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_raw_message netbios_session_rejected netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *session request*. Bro's NetBIOS + analyzer processes the NetBIOS session service running on TCP port 139, and + (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_message netbios_session_raw_message netbios_session_rejected + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_accepted + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *positive session response*. Bro's + NetBIOS analyzer processes the NetBIOS session service running on TCP port + 139, and (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_keepalive netbios_session_message + netbios_session_raw_message netbios_session_rejected netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_rejected + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *negative session response*. Bro's + NetBIOS analyzer processes the NetBIOS session service running on TCP port + 139, and (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_message netbios_session_raw_message netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_raw_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *session message* that are not + carrying an SMB payload. + + NetBIOS analyzer processes the NetBIOS session service running on TCP port + 139, and (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :is_orig: True if the message was sent by the originator of the connection. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header (i.e., the ``user_data``). + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_message netbios_session_rejected netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: This is an oddly named event. In fact, it's probably an odd event + to have to begin with. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_ret_arg_resp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *retarget response*. Bro's NetBIOS + analyzer processes the NetBIOS session service running on TCP port 139, and + (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_message netbios_session_raw_message netbios_session_rejected + netbios_session_request decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: This is an oddly named event. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_keepalive + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *keep-alive*. Bro's NetBIOS analyzer + processes the NetBIOS session service running on TCP port 139, and (despite + its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_accepted netbios_session_message + netbios_session_raw_message netbios_session_rejected netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +Functions ++++++++++ + +.. bro:id:: decode_netbios_name + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`string` + + Decode a NetBIOS name. See http://support.microsoft.com/kb/194203. + + + :name: The encoded NetBIOS name, e.g., ``"FEEIEFCAEOEFFEECEJEPFDCAEOEBENEF"``. + + + :returns: The decoded NetBIOS name, e.g., ``"THE NETBIOS NAME"``. + + .. bro:see:: decode_netbios_name_type + +.. bro:id:: decode_netbios_name_type + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`count` + + Converts a NetBIOS name type to its corresponding numeric value. + See http://support.microsoft.com/kb/163409. + + + :name: The NetBIOS name type. + + + :returns: The numeric value of *name*. + + .. bro:see:: decode_netbios_name + +Bro::NTLM +--------- + +NTLM analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_NTLM` + +Types ++++++ + +.. bro:type:: NTLM::Negotiate + + :Type: :bro:type:`record` + + flags: :bro:type:`NTLM::NegotiateFlags` + The negotiate flags + + domain_name: :bro:type:`string` :bro:attr:`&optional` + The domain name of the client, if known + + workstation: :bro:type:`string` :bro:attr:`&optional` + The machine name of the client, if known + + version: :bro:type:`NTLM::Version` :bro:attr:`&optional` + The Windows version information, if supplied + + +.. bro:type:: NTLM::Challenge + + :Type: :bro:type:`record` + + flags: :bro:type:`NTLM::NegotiateFlags` + The negotiate flags + + target_name: :bro:type:`string` :bro:attr:`&optional` + The server authentication realm. If the server is + domain-joined, the name of the domain. Otherwise + the server name. See flags.target_type_domain + and flags.target_type_server + + version: :bro:type:`NTLM::Version` :bro:attr:`&optional` + The Windows version information, if supplied + + target_info: :bro:type:`NTLM::AVs` :bro:attr:`&optional` + Attribute-value pairs specified by the server + + +.. bro:type:: NTLM::Authenticate + + :Type: :bro:type:`record` + + flags: :bro:type:`NTLM::NegotiateFlags` + The negotiate flags + + domain_name: :bro:type:`string` :bro:attr:`&optional` + The domain or computer name hosting the account + + user_name: :bro:type:`string` :bro:attr:`&optional` + The name of the user to be authenticated. + + workstation: :bro:type:`string` :bro:attr:`&optional` + The name of the computer to which the user was logged on. + + session_key: :bro:type:`string` :bro:attr:`&optional` + The session key + + version: :bro:type:`NTLM::Version` :bro:attr:`&optional` + The Windows version information, if supplied + + +.. bro:type:: NTLM::NegotiateFlags + + :Type: :bro:type:`record` + + negotiate_56: :bro:type:`bool` + If set, requires 56-bit encryption + + negotiate_key_exch: :bro:type:`bool` + If set, requests an explicit key exchange + + negotiate_128: :bro:type:`bool` + If set, requests 128-bit session key negotiation + + negotiate_version: :bro:type:`bool` + If set, requests the protocol version number + + negotiate_target_info: :bro:type:`bool` + If set, indicates that the TargetInfo fields in the + CHALLENGE_MESSAGE are populated + + request_non_nt_session_key: :bro:type:`bool` + If set, requests the usage of the LMOWF function + + negotiate_identify: :bro:type:`bool` + If set, requests and identify level token + + negotiate_extended_sessionsecurity: :bro:type:`bool` + If set, requests usage of NTLM v2 session security + Note: NTML v2 session security is actually NTLM v1 + + target_type_server: :bro:type:`bool` + If set, TargetName must be a server name + + target_type_domain: :bro:type:`bool` + If set, TargetName must be a domain name + + negotiate_always_sign: :bro:type:`bool` + If set, requests the presence of a signature block + on all messages + + negotiate_oem_workstation_supplied: :bro:type:`bool` + If set, the workstation name is provided + + negotiate_oem_domain_supplied: :bro:type:`bool` + If set, the domain name is provided + + negotiate_anonymous_connection: :bro:type:`bool` + If set, the connection should be anonymous + + negotiate_ntlm: :bro:type:`bool` + If set, requests usage of NTLM v1 + + negotiate_lm_key: :bro:type:`bool` + If set, requests LAN Manager session key computation + + negotiate_datagram: :bro:type:`bool` + If set, requests connectionless authentication + + negotiate_seal: :bro:type:`bool` + If set, requests session key negotiation for message + confidentiality + + negotiate_sign: :bro:type:`bool` + If set, requests session key negotiation for message + signatures + + request_target: :bro:type:`bool` + If set, the TargetName field is present + + negotiate_oem: :bro:type:`bool` + If set, requests OEM character set encoding + + negotiate_unicode: :bro:type:`bool` + If set, requests Unicode character set encoding + + +.. bro:type:: NTLM::Version + + :Type: :bro:type:`record` + + major: :bro:type:`count` + The major version of the Windows operating system in use + + minor: :bro:type:`count` + The minor version of the Windows operating system in use + + build: :bro:type:`count` + The build number of the Windows operating system in use + + ntlmssp: :bro:type:`count` + The current revision of NTLMSSP in use + + +.. bro:type:: NTLM::AVs + + :Type: :bro:type:`record` + + nb_computer_name: :bro:type:`string` + The server's NetBIOS computer name + + nb_domain_name: :bro:type:`string` + The server's NetBIOS domain name + + dns_computer_name: :bro:type:`string` :bro:attr:`&optional` + The FQDN of the computer + + dns_domain_name: :bro:type:`string` :bro:attr:`&optional` + The FQDN of the domain + + dns_tree_name: :bro:type:`string` :bro:attr:`&optional` + The FQDN of the forest + + constrained_auth: :bro:type:`bool` :bro:attr:`&optional` + Indicates to the client that the account + authentication is constrained + + timestamp: :bro:type:`time` :bro:attr:`&optional` + The associated timestamp, if present + + single_host_id: :bro:type:`count` :bro:attr:`&optional` + Indicates that the client is providing + a machine ID created at computer startup to + identify the calling machine + + target_name: :bro:type:`string` :bro:attr:`&optional` + The SPN of the target server + + +Events +++++++ + +.. bro:id:: ntlm_negotiate + + :Type: :bro:type:`event` (c: :bro:type:`connection`, negotiate: :bro:type:`NTLM::Negotiate`) + + Generated for :abbr:`NTLM (NT LAN Manager)` messages of type *negotiate*. + + + :c: The connection. + + + :negotiate: The parsed data of the :abbr:`NTLM (NT LAN Manager)` message. See init-bare for more details. + + .. bro:see:: ntlm_challenge ntlm_authenticate + +.. bro:id:: ntlm_challenge + + :Type: :bro:type:`event` (c: :bro:type:`connection`, challenge: :bro:type:`NTLM::Challenge`) + + Generated for :abbr:`NTLM (NT LAN Manager)` messages of type *challenge*. + + + :c: The connection. + + + :negotiate: The parsed data of the :abbr:`NTLM (NT LAN Manager)` message. See init-bare for more details. + + .. bro:see:: ntlm_negotiate ntlm_authenticate + +.. bro:id:: ntlm_authenticate + + :Type: :bro:type:`event` (c: :bro:type:`connection`, request: :bro:type:`NTLM::Authenticate`) + + Generated for :abbr:`NTLM (NT LAN Manager)` messages of type *authenticate*. + + + :c: The connection. + + + :request: The parsed data of the :abbr:`NTLM (NT LAN Manager)` message. See init-bare for more details. + + .. bro:see:: ntlm_negotiate ntlm_challenge + +Bro::NTP +-------- + +NTP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_NTP` + +Events +++++++ + +.. bro:id:: ntp_message + + :Type: :bro:type:`event` (u: :bro:type:`connection`, msg: :bro:type:`ntp_msg`, excess: :bro:type:`string`) + + Generated for all NTP messages. Different from many other of Bro's events, + this one is generated for both client-side and server-side messages. + + See `Wikipedia `__ for + more information about the NTP protocol. + + + :u: The connection record describing the corresponding UDP flow. + + + :msg: The parsed NTP message. + + + :excess: The raw bytes of any optional parts of the NTP packet. Bro does not + further parse any optional fields. + + .. bro:see:: ntp_session_timeout + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +Bro::PIA +-------- + +Analyzers implementing Dynamic Protocol + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_PIA_TCP` + +:bro:enum:`Analyzer::ANALYZER_PIA_UDP` + +Bro::POP3 +--------- + +POP3 analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_POP3` + +Events +++++++ + +.. bro:id:: pop3_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, command: :bro:type:`string`, arg: :bro:type:`string`) + + Generated for client-side commands on POP3 connections. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :command: The command sent. + + + :arg: The argument to the command. + + .. bro:see:: pop3_data pop3_login_failure pop3_login_success pop3_reply + pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, cmd: :bro:type:`string`, msg: :bro:type:`string`) + + Generated for server-side replies to commands on POP3 connections. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :cmd: The success indicator sent by the server. This corresponds to the + first token on the line sent, and should be either ``OK`` or ``ERR``. + + + :msg: The textual description the server sent along with *cmd*. + + .. bro:see:: pop3_data pop3_login_failure pop3_login_success pop3_request + pop3_unexpected + + .. todo:: This event is receiving odd parameters, should unify. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, data: :bro:type:`string`) + + Generated for server-side multi-line responses on POP3 connections. POP3 + connections use multi-line responses to send bulk data, such as the actual + mails. This event is generated once for each line that's part of such a + response. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: True if the data was sent by the originator of the TCP connection. + + + :data: The data sent. + + .. bro:see:: pop3_login_failure pop3_login_success pop3_reply pop3_request + pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_unexpected + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`, detail: :bro:type:`string`) + + Generated for errors encountered on POP3 sessions. If the POP3 analyzer + finds state transitions that do not conform to the protocol specification, + or other situations it can't handle, it raises this event. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: True if the data was sent by the originator of the TCP connection. + + + :msg: A textual description of the situation. + + + :detail: The input that triggered the event. + + .. bro:see:: pop3_data pop3_login_failure pop3_login_success pop3_reply pop3_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a POP3 connection goes encrypted. While POP3 is by default a + clear-text protocol, extensions exist to switch to encryption. This event is + generated if that happens and the analyzer then stops processing the + connection. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + .. bro:see:: pop3_data pop3_login_failure pop3_login_success pop3_reply + pop3_request pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_login_success + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, user: :bro:type:`string`, password: :bro:type:`string`) + + Generated for successful authentications on POP3 connections. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: Always false. + + + :user: The user name used for authentication. The event is only generated if + a non-empty user name was used. + + + :password: The password used for authentication. + + .. bro:see:: pop3_data pop3_login_failure pop3_reply pop3_request + pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_login_failure + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, user: :bro:type:`string`, password: :bro:type:`string`) + + Generated for unsuccessful authentications on POP3 connections. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: Always false. + + + :user: The user name attempted for authentication. The event is only + generated if a non-empty user name was used. + + + :password: The password attempted for authentication. + + .. bro:see:: pop3_data pop3_login_success pop3_reply pop3_request + pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +Bro::RADIUS +----------- + +RADIUS analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_RADIUS` + +Types ++++++ + +.. bro:type:: RADIUS::AttributeList + + :Type: :bro:type:`vector` of :bro:type:`string` + + +.. bro:type:: RADIUS::Attributes + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`RADIUS::AttributeList` + + +.. bro:type:: RADIUS::Message + + :Type: :bro:type:`record` + + code: :bro:type:`count` + The type of message (Access-Request, Access-Accept, etc.). + + trans_id: :bro:type:`count` + The transaction ID. + + authenticator: :bro:type:`string` + The "authenticator" string. + + attributes: :bro:type:`RADIUS::Attributes` :bro:attr:`&optional` + Any attributes. + + +Events +++++++ + +.. bro:id:: radius_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, result: :bro:type:`RADIUS::Message`) + + Generated for RADIUS messages. + + See `Wikipedia `__ for more + information about RADIUS. + + + :c: The connection. + + + :result: A record containing fields parsed from a RADIUS packet. + + +.. bro:id:: radius_attribute + + :Type: :bro:type:`event` (c: :bro:type:`connection`, attr_type: :bro:type:`count`, value: :bro:type:`string`) + + Generated for each RADIUS attribute. + + See `Wikipedia `__ for more + information about RADIUS. + + + :c: The connection. + + + :attr_type: The value of the code field (1 == User-Name, 2 == User-Password, etc.). + + + :value: The data/value bound to the attribute. + + +Bro::RDP +-------- + +RDP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_RDP` + +Types ++++++ + +.. bro:type:: RDP::EarlyCapabilityFlags + + :Type: :bro:type:`record` + + support_err_info_pdu: :bro:type:`bool` + + want_32bpp_session: :bro:type:`bool` + + support_statusinfo_pdu: :bro:type:`bool` + + strong_asymmetric_keys: :bro:type:`bool` + + support_monitor_layout_pdu: :bro:type:`bool` + + support_netchar_autodetect: :bro:type:`bool` + + support_dynvc_gfx_protocol: :bro:type:`bool` + + support_dynamic_time_zone: :bro:type:`bool` + + support_heartbeat_pdu: :bro:type:`bool` + + +.. bro:type:: RDP::ClientCoreData + + :Type: :bro:type:`record` + + version_major: :bro:type:`count` + + version_minor: :bro:type:`count` + + desktop_width: :bro:type:`count` + + desktop_height: :bro:type:`count` + + color_depth: :bro:type:`count` + + sas_sequence: :bro:type:`count` + + keyboard_layout: :bro:type:`count` + + client_build: :bro:type:`count` + + client_name: :bro:type:`string` + + keyboard_type: :bro:type:`count` + + keyboard_sub: :bro:type:`count` + + keyboard_function_key: :bro:type:`count` + + ime_file_name: :bro:type:`string` + + post_beta2_color_depth: :bro:type:`count` :bro:attr:`&optional` + + client_product_id: :bro:type:`string` :bro:attr:`&optional` + + serial_number: :bro:type:`count` :bro:attr:`&optional` + + high_color_depth: :bro:type:`count` :bro:attr:`&optional` + + supported_color_depths: :bro:type:`count` :bro:attr:`&optional` + + ec_flags: :bro:type:`RDP::EarlyCapabilityFlags` :bro:attr:`&optional` + + dig_product_id: :bro:type:`string` :bro:attr:`&optional` + + +Events +++++++ + +.. bro:id:: rdp_connect_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, cookie: :bro:type:`string`) + + Generated for X.224 client requests. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :cookie: The cookie included in the request. + +.. bro:id:: rdp_negotiation_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, security_protocol: :bro:type:`count`) + + Generated for RDP Negotiation Response messages. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :security_protocol: The security protocol selected by the server. + +.. bro:id:: rdp_negotiation_failure + + :Type: :bro:type:`event` (c: :bro:type:`connection`, failure_code: :bro:type:`count`) + + Generated for RDP Negotiation Failure messages. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :failure_code: The failure code sent by the server. + +.. bro:id:: rdp_client_core_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, data: :bro:type:`RDP::ClientCoreData`) + + Generated for MCS client requests. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :data: The data contained in the client core data structure. + +.. bro:id:: rdp_gcc_server_create_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, result: :bro:type:`count`) + + Generated for MCS server responses. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :result: The 8-bit integer representing the GCC Conference Create Response result. + +.. bro:id:: rdp_server_security + + :Type: :bro:type:`event` (c: :bro:type:`connection`, encryption_method: :bro:type:`count`, encryption_level: :bro:type:`count`) + + Generated for MCS server responses. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :encryption_method: The 32-bit integer representing the encryption method used in the connection. + + + :encryption_level: The 32-bit integer representing the encryption level used in the connection. + +.. bro:id:: rdp_server_certificate + + :Type: :bro:type:`event` (c: :bro:type:`connection`, cert_type: :bro:type:`count`, permanently_issued: :bro:type:`bool`) + + Generated for a server certificate section. If multiple X.509 + certificates are included in chain, this event will still + only be generated a single time. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :cert_type: Indicates the type of certificate. + + + :permanently_issued: Value will be true is the certificate(s) is permanent on the server. + +.. bro:id:: rdp_begin_encryption + + :Type: :bro:type:`event` (c: :bro:type:`connection`, security_protocol: :bro:type:`count`) + + Generated when an RDP session becomes encrypted. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :security_protocol: The security protocol being used for the session. + +Bro::RFB +-------- + +Parser for rfb (VNC) analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_RFB` + +Events +++++++ + +.. bro:id:: rfb_event + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for RFB event + + + :c: The connection record for the underlying transport-layer session/flow. + +.. bro:id:: rfb_authentication_type + + :Type: :bro:type:`event` (c: :bro:type:`connection`, authtype: :bro:type:`count`) + + Generated for RFB event authentication mechanism selection + + + :c: The connection record for the underlying transport-layer session/flow. + + + :authtype: the value of the chosen authentication mechanism + +.. bro:id:: rfb_auth_result + + :Type: :bro:type:`event` (c: :bro:type:`connection`, result: :bro:type:`bool`) + + Generated for RFB event authentication result message + + + :c: The connection record for the underlying transport-layer session/flow. + + + :result: whether or not authentication was succesful + +.. bro:id:: rfb_share_flag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, flag: :bro:type:`bool`) + + Generated for RFB event share flag messages + + + :c: The connection record for the underlying transport-layer session/flow. + + + :flag: whether or not the share flag was set + +.. bro:id:: rfb_client_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, major_version: :bro:type:`string`, minor_version: :bro:type:`string`) + + Generated for RFB event client banner message + + + :c: The connection record for the underlying transport-layer session/flow. + + + :version: of the client's rfb library + +.. bro:id:: rfb_server_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, major_version: :bro:type:`string`, minor_version: :bro:type:`string`) + + Generated for RFB event server banner message + + + :c: The connection record for the underlying transport-layer session/flow. + + + :version: of the server's rfb library + +.. bro:id:: rfb_server_parameters + + :Type: :bro:type:`event` (c: :bro:type:`connection`, name: :bro:type:`string`, width: :bro:type:`count`, height: :bro:type:`count`) + + Generated for RFB event server parameter message + + + :c: The connection record for the underlying transport-layer session/flow. + + + :name: name of the shared screen + + + :width: width of the shared screen + + + :height: height of the shared screen + +Bro::RPC +-------- + +Analyzers for RPC-based protocols + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_CONTENTS_NFS` + +:bro:enum:`Analyzer::ANALYZER_CONTENTS_RPC` + +:bro:enum:`Analyzer::ANALYZER_MOUNT` + +:bro:enum:`Analyzer::ANALYZER_NFS` + +:bro:enum:`Analyzer::ANALYZER_PORTMAPPER` + +Events +++++++ + +.. bro:id:: nfs_proc_null + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`) + + Generated for NFSv3 request/reply dialogues of type *null*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_read nfs_proc_readdir nfs_proc_readlink + nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_getattr + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, fh: :bro:type:`string`, attrs: :bro:type:`NFS3::fattr_t`) + + Generated for NFSv3 request/reply dialogues of type *getattr*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :fh: TODO. + + + :attrs: The attributes returned in the reply. The values may not be valid if + the request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply file_mode + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_sattr + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::sattrargs_t`, rep: :bro:type:`NFS3::sattr_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *sattr*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The attributes returned in the reply. The values may not be + valid if the request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply file_mode + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_lookup + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::lookup_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *lookup*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_read + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::readargs_t`, rep: :bro:type:`NFS3::read_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *read*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_remove nfs_proc_rmdir + nfs_proc_write nfs_reply_status rpc_call rpc_dialogue rpc_reply + NFS3::return_data NFS3::return_data_first_only NFS3::return_data_max + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_readlink + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, fh: :bro:type:`string`, rep: :bro:type:`NFS3::readlink_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *readlink*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :fh: The file handle passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + nfs_proc_symlink rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_symlink + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::symlinkargs_t`, rep: :bro:type:`NFS3::newobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *symlink*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The attributes returned in the reply. The values may not be + valid if the request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + nfs_proc_link rpc_call rpc_dialogue rpc_reply file_mode + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_link + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::linkargs_t`, rep: :bro:type:`NFS3::link_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *link*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call + nfs_proc_symlink rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_write + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::writeargs_t`, rep: :bro:type:`NFS3::write_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *write*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_reply_status rpc_call + rpc_dialogue rpc_reply NFS3::return_data NFS3::return_data_first_only + NFS3::return_data_max + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_create + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::newobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *create*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_mkdir + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::newobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *mkdir*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_remove + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::delobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *remove*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_rmdir + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::delobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *rmdir*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_write nfs_reply_status rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_rename + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::renameopargs_t`, rep: :bro:type:`NFS3::renameobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *rename*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rename nfs_proc_write + nfs_reply_status rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_readdir + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::readdirargs_t`, rep: :bro:type:`NFS3::readdir_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *readdir*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readlink + nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_not_implemented + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, proc: :bro:type:`NFS3::proc_t`) + + Generated for NFSv3 request/reply dialogues of a type that Bro's NFSv3 + analyzer does not implement. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :proc: The procedure called that Bro does not implement. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_null nfs_proc_read nfs_proc_readdir nfs_proc_readlink nfs_proc_remove + nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_reply_status + + :Type: :bro:type:`event` (n: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`) + + Generated for each NFSv3 reply message received, reporting just the + status included. + + + :n: The connection. + + + :info: Reports the status included in the reply. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_null + + :Type: :bro:type:`event` (r: :bro:type:`connection`) + + Generated for Portmapper requests of type *null*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + .. bro:see:: pm_request_set pm_request_unset pm_request_getport + pm_request_dump pm_request_callit pm_attempt_null pm_attempt_set + pm_attempt_unset pm_attempt_getport pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_set + + :Type: :bro:type:`event` (r: :bro:type:`connection`, m: :bro:type:`pm_mapping`, success: :bro:type:`bool`) + + Generated for Portmapper request/reply dialogues of type *set*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :m: The argument to the request. + + + :success: True if the request was successful, according to the corresponding + reply. If no reply was seen, this will be false once the request + times out. + + .. bro:see:: pm_request_null pm_request_unset pm_request_getport + pm_request_dump pm_request_callit pm_attempt_null pm_attempt_set + pm_attempt_unset pm_attempt_getport pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_unset + + :Type: :bro:type:`event` (r: :bro:type:`connection`, m: :bro:type:`pm_mapping`, success: :bro:type:`bool`) + + Generated for Portmapper request/reply dialogues of type *unset*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :m: The argument to the request. + + + :success: True if the request was successful, according to the corresponding + reply. If no reply was seen, this will be false once the request + times out. + + .. bro:see:: pm_request_null pm_request_set pm_request_getport + pm_request_dump pm_request_callit pm_attempt_null pm_attempt_set + pm_attempt_unset pm_attempt_getport pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_getport + + :Type: :bro:type:`event` (r: :bro:type:`connection`, pr: :bro:type:`pm_port_request`, p: :bro:type:`port`) + + Generated for Portmapper request/reply dialogues of type *getport*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :pr: The argument to the request. + + + :p: The port returned by the server. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_dump pm_request_callit pm_attempt_null pm_attempt_set + pm_attempt_unset pm_attempt_getport pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_dump + + :Type: :bro:type:`event` (r: :bro:type:`connection`, m: :bro:type:`pm_mappings`) + + Generated for Portmapper request/reply dialogues of type *dump*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :m: The mappings returned by the server. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_callit pm_attempt_null + pm_attempt_set pm_attempt_unset pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_callit + + :Type: :bro:type:`event` (r: :bro:type:`connection`, call: :bro:type:`pm_callit_request`, p: :bro:type:`port`) + + Generated for Portmapper request/reply dialogues of type *callit*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :call: The argument to the request. + + + :p: The port value returned by the call. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_attempt_null + pm_attempt_set pm_attempt_unset pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_null + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`) + + Generated for failed Portmapper requests of type *null*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_set pm_attempt_unset pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_set + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`, m: :bro:type:`pm_mapping`) + + Generated for failed Portmapper requests of type *set*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :m: The argument to the original request. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_unset pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_unset + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`, m: :bro:type:`pm_mapping`) + + Generated for failed Portmapper requests of type *unset*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :m: The argument to the original request. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_getport + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`, pr: :bro:type:`pm_port_request`) + + Generated for failed Portmapper requests of type *getport*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :pr: The argument to the original request. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_unset pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_dump + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`) + + Generated for failed Portmapper requests of type *dump*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_unset + pm_attempt_getport pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_callit + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`, call: :bro:type:`pm_callit_request`) + + Generated for failed Portmapper requests of type *callit*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :call: The argument to the original request. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_unset + pm_attempt_getport pm_attempt_dump pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_bad_port + + :Type: :bro:type:`event` (r: :bro:type:`connection`, bad_p: :bro:type:`count`) + + Generated for Portmapper requests or replies that include an invalid port + number. Since ports are represented by unsigned 4-byte integers, they can + stray outside the allowed range of 0--65535 by being >= 65536. If so, this + event is generated. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :bad_p: The invalid port value. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_unset + pm_attempt_getport pm_attempt_dump pm_attempt_callit rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: rpc_dialogue + + :Type: :bro:type:`event` (c: :bro:type:`connection`, prog: :bro:type:`count`, ver: :bro:type:`count`, proc: :bro:type:`count`, status: :bro:type:`rpc_status`, start_time: :bro:type:`time`, call_len: :bro:type:`count`, reply_len: :bro:type:`count`) + + Generated for RPC request/reply *pairs*. The RPC analyzer associates request + and reply by their transaction identifiers and raises this event once both + have been seen. If there's not a reply, this event will still be generated + eventually on timeout. In that case, *status* will be set to + :bro:enum:`RPC_TIMEOUT`. + + See `Wikipedia `__ for more information + about the ONC RPC protocol. + + + :c: The connection. + + + :prog: The remote program to call. + + + :ver: The version of the remote program to call. + + + :proc: The procedure of the remote program to call. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :start_time: The time when the *call* was seen. + + + :call_len: The size of the *call_body* PDU. + + + :reply_len: The size of the *reply_body* PDU. + + .. bro:see:: rpc_call rpc_reply dce_rpc_bind dce_rpc_message dce_rpc_request + dce_rpc_response rpc_timeout + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: rpc_call + + :Type: :bro:type:`event` (c: :bro:type:`connection`, xid: :bro:type:`count`, prog: :bro:type:`count`, ver: :bro:type:`count`, proc: :bro:type:`count`, call_len: :bro:type:`count`) + + Generated for RPC *call* messages. + + See `Wikipedia `__ for more information + about the ONC RPC protocol. + + + :c: The connection. + + + :xid: The transaction identifier allowing to match requests with replies. + + + :prog: The remote program to call. + + + :ver: The version of the remote program to call. + + + :proc: The procedure of the remote program to call. + + + :call_len: The size of the *call_body* PDU. + + .. bro:see:: rpc_dialogue rpc_reply dce_rpc_bind dce_rpc_message dce_rpc_request + dce_rpc_response rpc_timeout + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: rpc_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, xid: :bro:type:`count`, status: :bro:type:`rpc_status`, reply_len: :bro:type:`count`) + + Generated for RPC *reply* messages. + + See `Wikipedia `__ for more information + about the ONC RPC protocol. + + + :c: The connection. + + + :xid: The transaction identifier allowing to match requests with replies. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :reply_len: The size of the *reply_body* PDU. + + .. bro:see:: rpc_call rpc_dialogue dce_rpc_bind dce_rpc_message dce_rpc_request + dce_rpc_response rpc_timeout + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: mount_proc_null + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`) + + Generated for MOUNT3 request/reply dialogues of type *null*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + MOUNT is a service running on top of RPC. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_proc_mnt + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`, req: :bro:type:`MOUNT3::dirmntargs_t`, rep: :bro:type:`MOUNT3::mnt_reply_t`) + + Generated for MOUNT3 request/reply dialogues of type *mnt*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + MOUNT is a service running on top of RPC. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_proc_umnt + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`, req: :bro:type:`MOUNT3::dirmntargs_t`) + + Generated for MOUNT3 request/reply dialogues of type *umnt*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + MOUNT is a service running on top of RPC. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_proc_umnt_all + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`, req: :bro:type:`MOUNT3::dirmntargs_t`) + + Generated for MOUNT3 request/reply dialogues of type *umnt_all*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + MOUNT is a service running on top of RPC. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_proc_not_implemented + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`, proc: :bro:type:`MOUNT3::proc_t`) + + Generated for MOUNT3 request/reply dialogues of a type that Bro's MOUNTv3 + analyzer does not implement. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :proc: The procedure called that Bro does not implement. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_reply_status + + :Type: :bro:type:`event` (n: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`) + + Generated for each MOUNT3 reply message received, reporting just the + status included. + + + :n: The connection. + + + :info: Reports the status included in the reply. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +Bro::SIP +-------- + +SIP analyzer UDP-only + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_SIP` + +Events +++++++ + +.. bro:id:: sip_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, method: :bro:type:`string`, original_URI: :bro:type:`string`, version: :bro:type:`string`) + + Generated for :abbr:`SIP (Session Initiation Protocol)` requests, used in Voice over IP (VoIP). + + This event is generated as soon as a request's initial line has been parsed. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :method: The :abbr:`SIP (Session Initiation Protocol)` method extracted from the request (e.g., ``REGISTER``, ``NOTIFY``). + + + :original_URI: The unprocessed URI as specified in the request. + + + :version: The version number specified in the request (e.g., ``2.0``). + + .. bro:see:: sip_reply sip_header sip_all_headers sip_begin_entity sip_end_entity + +.. bro:id:: sip_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`string`, code: :bro:type:`count`, reason: :bro:type:`string`) + + Generated for :abbr:`SIP (Session Initiation Protocol)` replies, used in Voice over IP (VoIP). + + This event is generated as soon as a reply's initial line has been parsed. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :version: The :abbr:`SIP (Session Initiation Protocol)` version in use. + + + :code: The response code. + + + :reason: Textual details for the response code. + + .. bro:see:: sip_request sip_header sip_all_headers sip_begin_entity sip_end_entity + +.. bro:id:: sip_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, name: :bro:type:`string`, value: :bro:type:`string`) + + Generated for each :abbr:`SIP (Session Initiation Protocol)` header. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :is_orig: Whether the header came from the originator. + + + :name: Header name. + + + :value: Header value. + + .. bro:see:: sip_request sip_reply sip_all_headers sip_begin_entity sip_end_entity + +.. bro:id:: sip_all_headers + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, hlist: :bro:type:`mime_header_list`) + + Generated once for all :abbr:`SIP (Session Initiation Protocol)` headers from the originator or responder. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :is_orig: Whether the headers came from the originator. + + + :hlist: All the headers, and their values + + .. bro:see:: sip_request sip_reply sip_header sip_begin_entity sip_end_entity + +.. bro:id:: sip_begin_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated at the beginning of a :abbr:`SIP (Session Initiation Protocol)` message. + + This event is generated as soon as a message's initial line has been parsed. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :is_orig: Whether the message came from the originator. + + .. bro:see:: sip_request sip_reply sip_header sip_all_headers sip_end_entity + +.. bro:id:: sip_end_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated at the end of a :abbr:`SIP (Session Initiation Protocol)` message. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :is_orig: Whether the message came from the originator. + + .. bro:see:: sip_request sip_reply sip_header sip_all_headers sip_begin_entity + +Bro::SMB +-------- + +SMB analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_CONTENTS_SMB` + +:bro:enum:`Analyzer::ANALYZER_SMB` + +Options/Constants ++++++++++++++++++ + +.. bro:id:: SMB::pipe_filenames + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "srvsvc", + "winreg", + "netdfs", + "MsFteWds", + "samr", + "spoolss", + "wkssvc", + "lsarpc" + } + + A set of file names used as named pipes over SMB. This + only comes into play as a heuristic to identify named + pipes when the drive mapping wasn't seen by Bro. + + .. bro:see:: smb_pipe_connect_heuristic + +Types ++++++ + +.. bro:type:: SMB1::NegotiateResponse + + :Type: :bro:type:`record` + + core: :bro:type:`SMB1::NegotiateResponseCore` :bro:attr:`&optional` + If the server does not understand any of the dialect strings, or if + PC NETWORK PROGRAM 1.0 is the chosen dialect. + + lanman: :bro:type:`SMB1::NegotiateResponseLANMAN` :bro:attr:`&optional` + If the chosen dialect is greater than core up to and including + LANMAN 2.1. + + ntlm: :bro:type:`SMB1::NegotiateResponseNTLM` :bro:attr:`&optional` + If the chosen dialect is NT LM 0.12. + + +.. bro:type:: SMB1::NegotiateResponseCore + + :Type: :bro:type:`record` + + dialect_index: :bro:type:`count` + Index of selected dialect + + +.. bro:type:: SMB1::NegotiateResponseLANMAN + + :Type: :bro:type:`record` + + word_count: :bro:type:`count` + Count of parameter words (should be 13) + + dialect_index: :bro:type:`count` + Index of selected dialect + + security_mode: :bro:type:`SMB1::NegotiateResponseSecurity` + Security mode + + max_buffer_size: :bro:type:`count` + Max transmit buffer size (>= 1024) + + max_mpx_count: :bro:type:`count` + Max pending multiplexed requests + + max_number_vcs: :bro:type:`count` + Max number of virtual circuits (VCs - transport-layer connections) + between client and server + + raw_mode: :bro:type:`SMB1::NegotiateRawMode` + Raw mode + + session_key: :bro:type:`count` + Unique token identifying this session + + server_time: :bro:type:`time` + Current date and time at server + + encryption_key: :bro:type:`string` + The challenge encryption key + + primary_domain: :bro:type:`string` + The server's primary domain + + +.. bro:type:: SMB1::NegotiateResponseNTLM + + :Type: :bro:type:`record` + + word_count: :bro:type:`count` + Count of parameter words (should be 17) + + dialect_index: :bro:type:`count` + Index of selected dialect + + security_mode: :bro:type:`SMB1::NegotiateResponseSecurity` + Security mode + + max_buffer_size: :bro:type:`count` + Max transmit buffer size + + max_mpx_count: :bro:type:`count` + Max pending multiplexed requests + + max_number_vcs: :bro:type:`count` + Max number of virtual circuits (VCs - transport-layer connections) + between client and server + + max_raw_size: :bro:type:`count` + Max raw buffer size + + session_key: :bro:type:`count` + Unique token identifying this session + + capabilities: :bro:type:`SMB1::NegotiateCapabilities` + Server capabilities + + server_time: :bro:type:`time` + Current date and time at server + + encryption_key: :bro:type:`string` :bro:attr:`&optional` + The challenge encryption key. + Present only for non-extended security (i.e. capabilities$extended_security = F) + + domain_name: :bro:type:`string` :bro:attr:`&optional` + The name of the domain. + Present only for non-extended security (i.e. capabilities$extended_security = F) + + guid: :bro:type:`string` :bro:attr:`&optional` + A globally unique identifier assigned to the server. + Present only for extended security (i.e. capabilities$extended_security = T) + + security_blob: :bro:type:`string` + Opaque security blob associated with the security package if capabilities$extended_security = T + Otherwise, the challenge for challenge/response authentication. + + +.. bro:type:: SMB1::NegotiateResponseSecurity + + :Type: :bro:type:`record` + + user_level: :bro:type:`bool` + This indicates whether the server, as a whole, is operating under + Share Level or User Level security. + + challenge_response: :bro:type:`bool` + This indicates whether or not the server supports Challenge/Response + authentication. If the bit is false, then plaintext passwords must + be used. + + signatures_enabled: :bro:type:`bool` :bro:attr:`&optional` + This indicates if the server is capable of performing MAC message + signing. Note: Requires NT LM 0.12 or later. + + signatures_required: :bro:type:`bool` :bro:attr:`&optional` + This indicates if the server is requiring the use of a MAC in each + packet. If false, message signing is optional. Note: Requires NT LM 0.12 + or later. + + +.. bro:type:: SMB1::NegotiateRawMode + + :Type: :bro:type:`record` + + read_raw: :bro:type:`bool` + Read raw supported + + write_raw: :bro:type:`bool` + Write raw supported + + +.. bro:type:: SMB1::NegotiateCapabilities + + :Type: :bro:type:`record` + + raw_mode: :bro:type:`bool` + The server supports SMB_COM_READ_RAW and SMB_COM_WRITE_RAW + + mpx_mode: :bro:type:`bool` + The server supports SMB_COM_READ_MPX and SMB_COM_WRITE_MPX + + unicode: :bro:type:`bool` + The server supports unicode strings + + large_files: :bro:type:`bool` + The server supports large files with 64 bit offsets + + nt_smbs: :bro:type:`bool` + The server supports the SMBs particilar to the NT LM 0.12 dialect. Implies nt_find. + + rpc_remote_apis: :bro:type:`bool` + The server supports remote admin API requests via DCE-RPC + + status32: :bro:type:`bool` + The server can respond with 32 bit status codes in Status.Status + + level_2_oplocks: :bro:type:`bool` + The server supports level 2 oplocks + + lock_and_read: :bro:type:`bool` + The server supports SMB_COM_LOCK_AND_READ + + nt_find: :bro:type:`bool` + Reserved + + dfs: :bro:type:`bool` + The server is DFS aware + + infolevel_passthru: :bro:type:`bool` + The server supports NT information level requests passing through + + large_readx: :bro:type:`bool` + The server supports large SMB_COM_READ_ANDX (up to 64k) + + large_writex: :bro:type:`bool` + The server supports large SMB_COM_WRITE_ANDX (up to 64k) + + unix: :bro:type:`bool` + The server supports CIFS Extensions for UNIX + + bulk_transfer: :bro:type:`bool` + The server supports SMB_BULK_READ, SMB_BULK_WRITE + Note: No known implementations support this + + compressed_data: :bro:type:`bool` + The server supports compressed data transfer. Requires bulk_transfer. + Note: No known implementations support this + + extended_security: :bro:type:`bool` + The server supports extended security exchanges + + +.. bro:type:: SMB1::SessionSetupAndXRequest + + :Type: :bro:type:`record` + + word_count: :bro:type:`count` + Count of parameter words + - 10 for pre NT LM 0.12 + - 12 for NT LM 0.12 with extended security + - 13 for NT LM 0.12 without extended security + + max_buffer_size: :bro:type:`count` + Client maximum buffer size + + max_mpx_count: :bro:type:`count` + Actual maximum multiplexed pending request + + vc_number: :bro:type:`count` + Virtual circuit number. First VC == 0 + + session_key: :bro:type:`count` + Session key (valid iff vc_number > 0) + + native_os: :bro:type:`string` + Client's native operating system + + native_lanman: :bro:type:`string` + Client's native LAN Manager type + + account_name: :bro:type:`string` :bro:attr:`&optional` + Account name + Note: not set for NT LM 0.12 with extended security + + account_password: :bro:type:`string` :bro:attr:`&optional` + If challenge/response auth is not being used, this is the password. + Otherwise, it's the response to the server's challenge. + Note: Only set for pre NT LM 0.12 + + primary_domain: :bro:type:`string` :bro:attr:`&optional` + Client's primary domain, if known + Note: not set for NT LM 0.12 with extended security + + case_insensitive_password: :bro:type:`string` :bro:attr:`&optional` + Case insensitive password + Note: only set for NT LM 0.12 without extended security + + case_sensitive_password: :bro:type:`string` :bro:attr:`&optional` + Case sensitive password + Note: only set for NT LM 0.12 without extended security + + security_blob: :bro:type:`string` :bro:attr:`&optional` + Security blob + Note: only set for NT LM 0.12 with extended security + + capabilities: :bro:type:`SMB1::SessionSetupAndXCapabilities` :bro:attr:`&optional` + Client capabilities + Note: only set for NT LM 0.12 + + +.. bro:type:: SMB1::SessionSetupAndXResponse + + :Type: :bro:type:`record` + + word_count: :bro:type:`count` + Count of parameter words (should be 3 for pre NT LM 0.12 and 4 for NT LM 0.12) + + is_guest: :bro:type:`bool` :bro:attr:`&optional` + Were we logged in as a guest user? + + native_os: :bro:type:`string` :bro:attr:`&optional` + Server's native operating system + + native_lanman: :bro:type:`string` :bro:attr:`&optional` + Server's native LAN Manager type + + primary_domain: :bro:type:`string` :bro:attr:`&optional` + Server's primary domain + + security_blob: :bro:type:`string` :bro:attr:`&optional` + Security blob if NTLM + + +.. bro:type:: SMB1::SessionSetupAndXCapabilities + + :Type: :bro:type:`record` + + unicode: :bro:type:`bool` + The client can use unicode strings + + large_files: :bro:type:`bool` + The client can deal with files having 64 bit offsets + + nt_smbs: :bro:type:`bool` + The client understands the SMBs introduced with NT LM 0.12 + Implies nt_find + + status32: :bro:type:`bool` + The client can receive 32 bit errors encoded in Status.Status + + level_2_oplocks: :bro:type:`bool` + The client understands Level II oplocks + + nt_find: :bro:type:`bool` + Reserved. Implied by nt_smbs. + + +.. bro:type:: SMB1::Trans_Sec_Args + + :Type: :bro:type:`record` + + total_param_count: :bro:type:`count` + Total parameter count + + total_data_count: :bro:type:`count` + Total data count + + param_count: :bro:type:`count` + Parameter count + + param_offset: :bro:type:`count` + Parameter offset + + param_displacement: :bro:type:`count` + Parameter displacement + + data_count: :bro:type:`count` + Data count + + data_offset: :bro:type:`count` + Data offset + + data_displacement: :bro:type:`count` + Data displacement + + +.. bro:type:: SMB1::Find_First2_Request_Args + + :Type: :bro:type:`record` + + search_attrs: :bro:type:`count` + File attributes to apply as a constraint to the search + + search_count: :bro:type:`count` + Max search results + + flags: :bro:type:`count` + Misc. flags for how the server should manage the transaction + once results are returned + + info_level: :bro:type:`count` + How detailed the information returned in the results should be + + search_storage_type: :bro:type:`count` + Specify whether to search for directories or files + + file_name: :bro:type:`string` + The string to serch for (note: may contain wildcards) + + +.. bro:type:: SMB1::Find_First2_Response_Args + + :Type: :bro:type:`record` + + sid: :bro:type:`count` + The server generated search identifier + + search_count: :bro:type:`count` + Number of results returned by the search + + end_of_search: :bro:type:`bool` + Whether or not the search can be continued using + the TRANS2_FIND_NEXT2 transaction + + ext_attr_error: :bro:type:`string` :bro:attr:`&optional` + An extended attribute name that couldn't be retrieved + + +.. bro:type:: SMB1::Trans2_Args + + :Type: :bro:type:`record` + + total_param_count: :bro:type:`count` + Total parameter count + + total_data_count: :bro:type:`count` + Total data count + + max_param_count: :bro:type:`count` + Max parameter count + + max_data_count: :bro:type:`count` + Max data count + + max_setup_count: :bro:type:`count` + Max setup count + + flags: :bro:type:`count` + Flags + + trans_timeout: :bro:type:`count` + Timeout + + param_count: :bro:type:`count` + Parameter count + + param_offset: :bro:type:`count` + Parameter offset + + data_count: :bro:type:`count` + Data count + + data_offset: :bro:type:`count` + Data offset + + setup_count: :bro:type:`count` + Setup count + + +.. bro:type:: SMB1::Trans2_Sec_Args + + :Type: :bro:type:`record` + + total_param_count: :bro:type:`count` + Total parameter count + + total_data_count: :bro:type:`count` + Total data count + + param_count: :bro:type:`count` + Parameter count + + param_offset: :bro:type:`count` + Parameter offset + + param_displacement: :bro:type:`count` + Parameter displacement + + data_count: :bro:type:`count` + Data count + + data_offset: :bro:type:`count` + Data offset + + data_displacement: :bro:type:`count` + Data displacement + + FID: :bro:type:`count` + File ID + + +.. bro:type:: SMB2::CloseResponse + + :Type: :bro:type:`record` + + alloc_size: :bro:type:`count` + The size, in bytes of the data that is allocated to the file. + + eof: :bro:type:`count` + The size, in bytes, of the file. + + times: :bro:type:`SMB::MACTimes` + The creation, last access, last write, and change times. + + attrs: :bro:type:`SMB2::FileAttrs` + The attributes of the file. + + The response to an SMB2 *close* request, which is used by the client to close an instance + of a file that was opened previously. + + For more information, see MS-SMB2:2.2.16 + + .. bro:see:: smb2_close_response + +.. bro:type:: SMB2::CreateRequest + + :Type: :bro:type:`record` + + filename: :bro:type:`string` + Name of the file + + disposition: :bro:type:`count` + Defines the action the server MUST take if the file that is specified already exists. + + create_options: :bro:type:`count` + Specifies the options to be applied when creating or opening the file. + + The request sent by the client to request either creation of or access to a file. + + For more information, see MS-SMB2:2.2.13 + + .. bro:see:: smb2_create_request + +.. bro:type:: SMB2::CreateResponse + + :Type: :bro:type:`record` + + file_id: :bro:type:`SMB2::GUID` + The SMB2 GUID for the file. + + size: :bro:type:`count` + Size of the file. + + times: :bro:type:`SMB::MACTimes` + Timestamps associated with the file in question. + + attrs: :bro:type:`SMB2::FileAttrs` + File attributes. + + create_action: :bro:type:`count` + The action taken in establishing the open. + + The response to an SMB2 *create_request* request, which is sent by the client to request + either creation of or access to a file. + + For more information, see MS-SMB2:2.2.14 + + .. bro:see:: smb2_create_response + +.. bro:type:: SMB2::NegotiateResponse + + :Type: :bro:type:`record` + + dialect_revision: :bro:type:`count` + The preferred common SMB2 Protocol dialect number from the array that was sent in the SMB2 + NEGOTIATE Request. + + security_mode: :bro:type:`count` + The security mode field specifies whether SMB signing is enabled, required at the server, or both. + + server_guid: :bro:type:`string` + A globally unique identifier that is generate by the server to uniquely identify the server. + + system_time: :bro:type:`time` + The system time of the SMB2 server when the SMB2 NEGOTIATE Request was processed. + + server_start_time: :bro:type:`time` + The SMB2 server start time. + + The response to an SMB2 *negotiate* request, which is used by tghe client to notify the server + what dialects of the SMB2 protocol the client understands. + + For more information, see MS-SMB2:2.2.4 + + .. bro:see:: smb2_negotiate_response + +.. bro:type:: SMB2::SessionSetupRequest + + :Type: :bro:type:`record` + + security_mode: :bro:type:`count` + The security mode field specifies whether SMB signing is enabled or required at the client. + + The request sent by the client to request a new authenticated session + within a new or existing SMB 2 Protocol transport connection to the server. + + For more information, see MS-SMB2:2.2.5 + + .. bro:see:: smb2_session_setup_request + +.. bro:type:: SMB2::SessionSetupResponse + + :Type: :bro:type:`record` + + flags: :bro:type:`SMB2::SessionSetupFlags` + Additional information about the session + + The response to an SMB2 *session_setup* request, which is sent by the client to request a + new authenticated session within a new or existing SMB 2 Protocol transport connection + to the server. + + For more information, see MS-SMB2:2.2.6 + + .. bro:see:: smb2_session_setup_response + +.. bro:type:: SMB2::SessionSetupFlags + + :Type: :bro:type:`record` + + guest: :bro:type:`bool` + If set, the client has been authenticated as a guest user. + + anonymous: :bro:type:`bool` + If set, the client has been authenticated as an anonymous user. + + encrypt: :bro:type:`bool` + If set, the server requires encryption of messages on this session. + + A flags field that indicates additional information about the session that's sent in the + *session_setup* response. + + For more information, see MS-SMB2:2.2.6 + + .. bro:see:: smb2_session_setup_response + +.. bro:type:: SMB2::TreeConnectResponse + + :Type: :bro:type:`record` + + share_type: :bro:type:`count` + The type of share being accessed. Physical disk, named pipe, or printer. + + The response to an SMB2 *tree_connect* request, which is sent by the client to request + access to a particular share on the server. + + For more information, see MS-SMB2:2.2.9 + + .. bro:see:: smb2_tree_connect_response + +.. bro:type:: SMB::MACTimes + + :Type: :bro:type:`record` + + modified: :bro:type:`time` :bro:attr:`&log` + The time when data was last written to the file. + + accessed: :bro:type:`time` :bro:attr:`&log` + The time when the file was last accessed. + + created: :bro:type:`time` :bro:attr:`&log` + The time the file was created. + + changed: :bro:type:`time` :bro:attr:`&log` + The time when the file was last modified. + :Attributes: :bro:attr:`&log` + + MAC times for a file. + + For more information, see MS-SMB2:2.2.16 + + .. bro:see:: smb1_nt_create_andx_response smb2_create_response + +.. bro:type:: SMB1::Header + + :Type: :bro:type:`record` + + command: :bro:type:`count` + The command number + + status: :bro:type:`count` + The status code + + flags: :bro:type:`count` + Flag set 1 + + flags2: :bro:type:`count` + Flag set 2 + + tid: :bro:type:`count` + Tree ID + + pid: :bro:type:`count` + Process ID + + uid: :bro:type:`count` + User ID + + mid: :bro:type:`count` + Multiplex ID + + An SMB1 header. + + .. bro:see:: smb1_message smb1_empty_response smb1_error + smb1_check_directory_request smb1_check_directory_response + smb1_close_request smb1_create_directory_request + smb1_create_directory_response smb1_echo_request + smb1_echo_response smb1_negotiate_request + smb1_negotiate_response smb1_nt_cancel_request + smb1_nt_create_andx_request smb1_nt_create_andx_response + smb1_query_information_request smb1_read_andx_request + smb1_read_andx_response smb1_session_setup_andx_request + smb1_session_setup_andx_response smb1_transaction_request + smb1_transaction2_request smb1_trans2_find_first2_request + smb1_trans2_query_path_info_request + smb1_trans2_get_dfs_referral_request + smb1_tree_connect_andx_request smb1_tree_connect_andx_response + smb1_tree_disconnect smb1_write_andx_request + smb1_write_andx_response + +.. bro:type:: SMB2::Header + + :Type: :bro:type:`record` + + credit_charge: :bro:type:`count` + The number of credits that this request consumes + + status: :bro:type:`count` + In a request, this is an indication to the server about the client's channel + change. In a response, this is the status field + + command: :bro:type:`count` + The command code of the packet + + credits: :bro:type:`count` + The number of credits the client is requesting, or the number of credits + granted to the client in a response. + + flags: :bro:type:`count` + A flags field, which indicates how to process the operation (e.g. asynchronously) + + message_id: :bro:type:`count` + A value that uniquely identifies the message request/response pair across all + messages that are sent on the same transport protocol connection + + process_id: :bro:type:`count` + A value that uniquely identifies the process that generated the event. + + tree_id: :bro:type:`count` + A value that uniquely identifies the tree connect for the command. + + session_id: :bro:type:`count` + A value that uniquely identifies the established session for the command. + + signature: :bro:type:`string` + The 16-byte signature of the message, if SMB2_FLAGS_SIGNED is set in the ``flags`` + field. + + An SMB2 header. + + For more information, see MS-SMB2:2.2.1.1 and MS-SMB2:2.2.1.2 + + .. bro:see:: smb2_message smb2_close_request smb2_close_response + smb2_create_request smb2_create_response smb2_negotiate_request + smb2_negotiate_response smb2_read_request + smb2_session_setup_request smb2_session_setup_response + smb2_file_rename smb2_file_delete + smb2_tree_connect_request smb2_tree_connect_response + smb2_write_request + +.. bro:type:: SMB2::GUID + + :Type: :bro:type:`record` + + persistent: :bro:type:`count` + A file handle that remains persistent when reconnected after a disconnect + + volatile: :bro:type:`count` + A file handle that can be changed when reconnected after a disconnect + + An SMB2 globally unique identifier which identifies a file. + + For more information, see MS-SMB2:2.2.14.1 + + .. bro:see:: smb2_close_request smb2_create_response smb2_read_request + smb2_file_rename smb2_file_delete smb2_write_request + +.. bro:type:: SMB2::FileAttrs + + :Type: :bro:type:`record` + + read_only: :bro:type:`bool` + The file is read only. Applications can read the file but cannot + write to it or delete it. + + hidden: :bro:type:`bool` + The file is hidden. It is not to be included in an ordinary directory listing. + + system: :bro:type:`bool` + The file is part of or is used exclusively by the operating system. + + directory: :bro:type:`bool` + The file is a directory. + + archive: :bro:type:`bool` + The file has not been archived since it was last modified. Applications use + this attribute to mark files for backup or removal. + + normal: :bro:type:`bool` + The file has no other attributes set. This attribute is valid only if used alone. + + temporary: :bro:type:`bool` + The file is temporary. This is a hint to the cache manager that it does not need + to flush the file to backing storage. + + sparse_file: :bro:type:`bool` + A file that is a sparse file. + + reparse_point: :bro:type:`bool` + A file or directory that has an associated reparse point. + + compressed: :bro:type:`bool` + The file or directory is compressed. For a file, this means that all of the data + in the file is compressed. For a directory, this means that compression is the + default for newly created files and subdirectories. + + offline: :bro:type:`bool` + The data in this file is not available immediately. This attribute indicates that + the file data is physically moved to offline storage. This attribute is used by + Remote Storage, which is hierarchical storage management software. + + not_content_indexed: :bro:type:`bool` + A file or directory that is not indexed by the content indexing service. + + encrypted: :bro:type:`bool` + A file or directory that is encrypted. For a file, all data streams in the file + are encrypted. For a directory, encryption is the default for newly created files + and subdirectories. + + integrity_stream: :bro:type:`bool` + A file or directory that is configured with integrity support. For a file, all + data streams in the file have integrity support. For a directory, integrity support + is the default for newly created files and subdirectories, unless the caller + specifies otherwise. + + no_scrub_data: :bro:type:`bool` + A file or directory that is configured to be excluded from the data integrity scan. + + A series of boolean flags describing basic and extended file attributes for SMB2. + + For more information, see MS-CIFS:2.2.1.2.3 and MS-FSCC:2.6 + + .. bro:see:: smb2_create_response + +Events +++++++ + +.. bro:id:: smb1_check_directory_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, directory_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *check directory*. This is used by the client to verify that + a specified path resolves to a valid directory on the server. + + For more information, see MS-CIFS:2.2.4.17 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :directory_name: The directory name to check for existence. + + .. bro:see:: smb1_message smb1_check_directory_response + +.. bro:id:: smb1_check_directory_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *check directory*. This is the server response to the + *check directory* request. + + For more information, see MS-CIFS:2.2.4.17 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + .. bro:see:: smb1_message smb1_check_directory_request + +.. bro:id:: smb1_close_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_id: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *close*. This is used by the client to close an instance of an object + associated with a valid file ID. + + For more information, see MS-CIFS:2.2.4.5 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_id: The file identifier being closed. + + .. bro:see:: smb1_message + +.. bro:id:: smb1_create_directory_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, directory_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *create directory*. This is a deprecated command which + has been replaced by the *trans2_create_directory* subcommand. This is used by the client to + create a new directory on the server, relative to a connected share. + + For more information, see MS-CIFS:2.2.4.1 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :directory_name: The name of the directory to create. + + .. bro:see:: smb1_message smb1_create_directory_response smb1_transaction2_request + +.. bro:id:: smb1_create_directory_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *create directory*. This is a deprecated command which + has been replaced by the *trans2_create_directory* subcommand. This is the server response + to the *create directory* request. + + For more information, see MS-CIFS:2.2.4.1 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + .. bro:see:: smb1_message smb1_create_directory_request smb1_transaction2_request + +.. bro:id:: smb1_echo_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, echo_count: :bro:type:`count`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *echo*. This is sent by the client to test the transport layer + connection with the server. + + For more information, see MS-CIFS:2.2.4.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :echo_count: The number of times the server should echo the data back. + + + :data: The data for the server to echo. + + .. bro:see:: smb1_message smb1_echo_response + +.. bro:id:: smb1_echo_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, seq_num: :bro:type:`count`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *echo*. This is the server response to the *echo* request. + + For more information, see MS-CIFS:2.2.4.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :seq_num: The sequence number of this echo reply. + + + :data: The data echoed back from the client. + + .. bro:see:: smb1_message smb1_echo_request + +.. bro:id:: smb1_logoff_andx + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *logoff andx*. This is used by the client to logoff the user + connection represented by UID in the SMB Header. The server releases all locks and closes + all files currently open by this user, disconnects all tree connects, cancels any outstanding + requests for this UID, and invalidates the UID. + + For more information, see MS-CIFS:2.2.4.54 + + + :c: The connection. + + + :is_orig: Indicates which host sent the logoff message. + + .. bro:see:: smb1_message + +.. bro:id:: smb1_negotiate_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, dialects: :bro:type:`string_vec`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *negotiate*. This is sent by the client to initiate an SMB + connection between the client and the server. A *negotiate* exchange MUST be completed + before any other SMB messages are sent to the server. + + For more information, see MS-CIFS:2.2.4.52 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :dialects: The SMB dialects supported by the client. + + .. bro:see:: smb1_message smb1_negotiate_response + +.. bro:id:: smb1_negotiate_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, response: :bro:type:`SMB1::NegotiateResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *negotiate*. This is the server response to the *negotiate* + request. + + For more information, see MS-CIFS:2.2.4.52 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :response: A record structure containing more information from the response. + + .. bro:see:: smb1_message smb1_negotiate_request + +.. bro:id:: smb1_nt_create_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *nt create andx*. This is sent by the client to create and open + a new file, or to open an existing file, or to open and truncate an existing file to zero + length, or to create a directory, or to create a connection to a named pipe. + + For more information, see MS-CIFS:2.2.4.64 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :name: The ``name`` attribute specified in the message. + + .. bro:see:: smb1_message smb1_nt_create_andx_response + +.. bro:id:: smb1_nt_create_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_id: :bro:type:`count`, file_size: :bro:type:`count`, times: :bro:type:`SMB::MACTimes`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *nt create andx*. This is the server response to the + *nt create andx* request. + + For more information, see MS-CIFS:2.2.4.64 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_id: The SMB2 GUID for the file. + + + :file_size: Size of the file. + + + :times: Timestamps associated with the file in question. + + .. bro:see:: smb1_message smb1_nt_create_andx_request + +.. bro:id:: smb1_nt_cancel_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *nt cancel*. This is sent by the client to request that a currently + pending request be cancelled. + + For more information, see MS-CIFS:2.2.4.65 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + .. bro:see:: smb1_message + +.. bro:id:: smb1_query_information_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, filename: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *query information*. This is a deprecated command which + has been replaced by the *trans2_query_path_information* subcommand. This is used by the + client to obtain attribute information about a file. + + For more information, see MS-CIFS:2.2.4.9 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :filename: The filename that the client is querying. + + .. bro:see:: smb1_message smb1_transaction2_request + +.. bro:id:: smb1_read_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_id: :bro:type:`count`, offset: :bro:type:`count`, length: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *read andx*. This is sent by the client to read bytes from a regular + file, a named pipe, or a directly accessible device such as a serial port (COM) or printer + port (LPT). + + For more information, see MS-CIFS:2.2.4.42 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_id: The file identifier being written to. + + + :offset: The byte offset the requested read begins at. + + + :length: The number of bytes being requested. + + .. bro:see:: smb1_message smb1_read_andx_response + +.. bro:id:: smb1_read_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, data_len: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *read andx*. This is the server response to the *read andx* request. + + For more information, see MS-CIFS:2.2.4.42 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :data_len: The length of data from the requested file. + + .. bro:see:: smb1_message smb1_read_andx_request + +.. bro:id:: smb1_session_setup_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, request: :bro:type:`SMB1::SessionSetupAndXRequest`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *setup andx*. This is sent by the client to configure an SMB session. + + For more information, see MS-CIFS:2.2.4.53 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :request: The parsed request data of the SMB message. See init-bare for more details. + + .. bro:see:: smb1_message smb1_session_setup_andx_response + +.. bro:id:: smb1_session_setup_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, response: :bro:type:`SMB1::SessionSetupAndXResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *setup andx*. This is the server response to the *setup andx* request. + + For more information, see MS-CIFS:2.2.4.53 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :response: The parsed response data of the SMB message. See init-bare for more details. + + .. bro:see:: smb1_message smb1_session_setup_andx_request + +.. bro:id:: smb1_transaction_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, name: :bro:type:`string`, sub_cmd: :bro:type:`count`, parameters: :bro:type:`string`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction*. This command serves as the transport for the + Transaction Subprotocol Commands. These commands operate on mailslots and named pipes, + which are interprocess communication endpoints within the CIFS file system. + + For more information, see MS-CIFS:2.2.4.33.1 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :name: A name string that MAY identify the resource (a specific Mailslot or Named Pipe) + against which the operation is performed. + + + :sub_cmd: The sub command, some may be parsed and have their own events. + + + :parameters: content of the SMB_Data.Trans_Parameters field + + + :data: content of the SMB_Data.Trans_Data field + + .. bro:see:: smb1_message smb1_transaction2_request + +.. bro:id:: smb1_transaction_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, parameters: :bro:type:`string`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction*. This command serves as the transport for the + Transaction Subprotocol Commands. These commands operate on mailslots and named pipes, + which are interprocess communication endpoints within the CIFS file system. + + For more information, see MS-CIFS:2.2.4.33.2 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :parameters: content of the SMB_Data.Trans_Parameters field + + + :data: content of the SMB_Data.Trans_Data field + +.. bro:id:: smb1_transaction_secondary_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, args: :bro:type:`SMB1::Trans_Sec_Args`, parameters: :bro:type:`string`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction_secondary*. This command + serves as an additional request data container for the + Transaction Subprotocol Commands (carried by *transaction* requests). + + For more information, see MS-CIFS:2.2.4.34 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :parameters: the SMB_Data.Trans_Parameters field content + + + :data: the SMB_Data.Trans_Data field content + + +.. bro:id:: smb1_transaction2_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, args: :bro:type:`SMB1::Trans2_Args`, sub_cmd: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction2*. This command serves as the transport for the + Transaction2 Subprotocol Commands. These commands operate on mailslots and named pipes, + which are interprocess communication endpoints within the CIFS file system. Compared to the + Transaction Subprotocol Commands, these commands allow clients to set and retrieve Extended + Attribute key/value pairs, make use of long file names (longer than the original 8.3 format + names), and perform directory searches, among other tasks. + + For more information, see MS-CIFS:2.2.4.46 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :sub_cmd: The sub command, some are parsed and have their own events. + + .. bro:see:: smb1_message smb1_trans2_find_first2_request smb1_trans2_query_path_info_request + smb1_trans2_get_dfs_referral_request smb1_transaction_request + +.. bro:id:: smb1_trans2_find_first2_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, args: :bro:type:`SMB1::Find_First2_Request_Args`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 *transaction2* requests of subtype *find first2*. This transaction is used to begin + a search for file(s) within a directory or for a directory + + For more information, see MS-CIFS:2.2.6.2 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :args: A record data structure with arguments given to the command. + + .. bro:see:: smb1_message smb1_transaction2_request smb1_trans2_query_path_info_request + smb1_trans2_get_dfs_referral_request + +.. bro:id:: smb1_trans2_query_path_info_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 *transaction2* requests of subtype *query path info*. This transaction is used to + get information about a specific file or directory. + + For more information, see MS-CIFS:2.2.6.6 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_name: File name the request is in reference to. + + .. bro:see:: smb1_message smb1_transaction2_request smb1_trans2_find_first2_request + smb1_trans2_get_dfs_referral_request + +.. bro:id:: smb1_trans2_get_dfs_referral_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 *transaction2* requests of subtype *get DFS referral*. This transaction is used + to request a referral for a disk object in DFS. + + For more information, see MS-CIFS:2.2.6.16 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_name: File name the request is in reference to. + + .. bro:see:: smb1_message smb1_transaction2_request smb1_trans2_find_first2_request + smb1_trans2_query_path_info_request + +.. bro:id:: smb1_transaction2_secondary_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, args: :bro:type:`SMB1::Trans2_Sec_Args`, parameters: :bro:type:`string`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction2 secondary*. + + For more information, see MS-CIFS:2.2.4.47.1 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` + version 1 message. + + + :args: arguments of the message (SMB_Parameters.Words) + + + :parameters: content of the SMB_Data.Trans_Parameters field + + + :data: content of the SMB_Data.Trans_Data field + +.. bro:id:: smb1_tree_connect_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, path: :bro:type:`string`, service: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *tree connect andx*. This is sent by the client to establish a + connection to a server share. + + For more information, see MS-CIFS:2.2.4.55 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :path: The ``path`` attribute specified in the message. + + + :service: The ``service`` attribute specified in the message. + + .. bro:see:: smb1_message smb1_tree_connect_andx_response + +.. bro:id:: smb1_tree_connect_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, service: :bro:type:`string`, native_file_system: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *tree connect andx*. This is the server reply to the *tree connect andx* + request. + + For more information, see MS-CIFS:2.2.4.55 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :service: The ``service`` attribute specified in the message. + + + :native_file_system: The file system of the remote server as indicate by the server. + + .. bro:see:: smb1_message smb1_tree_connect_andx_request + +.. bro:id:: smb1_tree_disconnect + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, is_orig: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *tree disconnect*. This is sent by the client to logically disconnect + client access to a server resource. + + For more information, see MS-CIFS:2.2.4.51 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :is_orig: True if the message was from the originator. + + .. bro:see:: smb1_message + +.. bro:id:: smb1_write_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_id: :bro:type:`count`, offset: :bro:type:`count`, data_len: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *write andx*. This is sent by the client to write bytes to a + regular file, a named pipe, or a directly accessible I/O device such as a serial port (COM) + or printer port (LPT). + + For more information, see MS-CIFS:2.2.4.43 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :offset: The byte offset into the referenced file data is being written. + + + :data: The data being written. + + .. bro:see:: smb1_message smb1_write_andx_response + +.. bro:id:: smb1_write_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, written_bytes: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *write andx*. This is the server response to the *write andx* + request. + + For more information, see MS-CIFS:2.2.4.43 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :written_bytes: The number of bytes the server reported having actually written. + + .. bro:see:: smb1_message smb1_write_andx_request + +.. bro:id:: smb1_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, is_orig: :bro:type:`bool`) + + Generated for all :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` version 1 + messages. + + See `Wikipedia `__ for more information about the + :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` protocol. Bro's + :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` analyzer parses + both :abbr:`SMB (Server Message Block)`-over-:abbr:`NetBIOS (Network Basic Input/Output System)` on + ports 138/139 and :abbr:`SMB (Server Message Block)`-over-TCP on port 445. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :is_orig: True if the message was sent by the originator of the underlying + transport-level connection. + + .. bro:see:: smb2_message + +.. bro:id:: smb1_empty_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`) + + Generated when there is an :abbr:`SMB (Server Message Block)` version 1 response with no message body. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` message. + + .. bro:see:: smb1_message + +.. bro:id:: smb1_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, is_orig: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)` version 1 messages + that indicate an error. This event is triggered by an :abbr:`SMB (Server Message Block)` header + including a status that signals an error. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` message. + + + :is_orig: True if the message was sent by the originator of the underlying + transport-level connection. + + .. bro:see:: smb1_message + +.. bro:id:: smb2_close_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *close*. This is used by the client to close an instance of a + file that was opened previously with a successful SMB2 CREATE Request. + + For more information, see MS-SMB2:2.2.15 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_name: The SMB2 GUID of the file being closed. + + .. bro:see:: smb2_message smb2_close_response + +.. bro:id:: smb2_close_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::CloseResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *close*. This is sent by the server to indicate that an SMB2 CLOSE + request was processed successfully. + + For more information, see MS-SMB2:2.2.16 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: A record of attributes returned from the server from the close. + + .. bro:see:: smb2_message smb2_close_request + +.. bro:id:: smb2_create_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, request: :bro:type:`SMB2::CreateRequest`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *create*. This is sent by the client to request either creation + of or access to a file. + + For more information, see MS-SMB2:2.2.13 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :request: A record with more information related to the request. + + .. bro:see:: smb2_message smb2_create_response + +.. bro:id:: smb2_create_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::CreateResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *create*. This is sent by the server to notify the client of + the status of its SMB2 CREATE request. + + For more information, see MS-SMB2:2.2.14 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: A record with more information related to the response. + + .. bro:see:: smb2_message smb2_create_request + +.. bro:id:: smb2_negotiate_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, dialects: :bro:type:`index_vec`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *negotiate*. This is used by the client to notify the server what + dialects of the SMB2 Protocol the client understands. + + For more information, see MS-SMB2:2.2.3 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :dialects: A vector of the client's supported dialects. + + .. bro:see:: smb2_message smb2_negotiate_response + +.. bro:id:: smb2_negotiate_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::NegotiateResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *negotiate*. This is sent by the server to notify the client of + the preferred common dialect. + + For more information, see MS-SMB2:2.2.4 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: The negotiate response data structure. + + .. bro:see:: smb2_message smb2_negotiate_request + +.. bro:id:: smb2_read_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, offset: :bro:type:`count`, length: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *read*. This is sent by the client to request a read operation on + the specified file. + + For more information, see MS-SMB2:2.2.19 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: The GUID being used for the file. + + + :offset: How far into the file this read should be taking place. + + + :length: The number of bytes of the file being read. + + .. bro:see:: smb2_message + +.. bro:id:: smb2_session_setup_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, request: :bro:type:`SMB2::SessionSetupRequest`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *session_setup*. This is sent by the client to request a new + authenticated session within a new or existing SMB 2 Protocol transport connection to the + server. + + For more information, see MS-SMB2:2.2.5 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :request: A record containing more information related to the request. + + .. bro:see:: smb2_message smb2_session_setup_response + +.. bro:id:: smb2_session_setup_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::SessionSetupResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *session_setup*. This is sent by the server in response to a + *session_setup* request. + + For more information, see MS-SMB2:2.2.6 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: A record containing more information related to the response. + + .. bro:see:: smb2_message smb2_session_setup_request + +.. bro:id:: smb2_file_rename + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, dst_filename: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *set_info* of the *rename* subtype. + + For more information, see MS-SMB2:2.2.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: A GUID to identify the file. + + + :dst_filename: The filename to rename the file into. + + .. bro:see:: smb2_message smb2_file_delete smb2_file_sattr + +.. bro:id:: smb2_file_delete + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, delete_pending: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *set_info* of the *delete* subtype. + + For more information, see MS-SMB2:2.2.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: The SMB2 GUID for the file. + + + :delete_pending: A boolean value to indicate that a file should be deleted + when it's closed if set to T. + + .. bro:see:: smb2_message smb2_file_rename smb2_file_sattr + +.. bro:id:: smb2_file_sattr + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, times: :bro:type:`SMB::MACTimes`, attrs: :bro:type:`SMB2::FileAttrs`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *set_info* of the *file* subtype + + For more infomation, see MS-SMB2:2.2.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: The SMB2 GUID for the file. + + + :times: Timestamps associated with the file in question. + + + :attrs: File attributes. + + .. bro:see:: smb2_message smb2_file_rename smb2_file_delete + +.. bro:id:: smb2_tree_connect_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, path: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *tree_connect*. This is sent by a client to request access to a + particular share on the server. + + For more information, see MS-SMB2:2.2.9 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :path: Path of the requested tree. + + .. bro:see:: smb2_message smb2_tree_connect_response + +.. bro:id:: smb2_tree_connect_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::TreeConnectResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *tree_connect*. This is sent by the server when a *tree_connect* + request is successfully processed by the server. + + For more information, see MS-SMB2:2.2.10 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: A record with more information related to the response. + + .. bro:see:: smb2_message smb2_tree_connect_request + +.. bro:id:: smb2_tree_disconnect_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *tree disconnect*. This is sent by the client to logically disconnect + client access to a server resource. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + .. bro:see:: smb2_message + +.. bro:id:: smb2_tree_disconnect_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *tree disconnect*. This is sent by the server to logically disconnect + client access to a server resource. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + .. bro:see:: smb2_message + +.. bro:id:: smb2_write_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, offset: :bro:type:`count`, length: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *write*. This is sent by the client to write data to the file or + named pipe on the server. + + For more information, see MS-SMB2:2.2.21 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: The GUID being used for the file. + + + :offset: How far into the file this write should be taking place. + + + :length: The number of bytes of the file being written. + + .. bro:see:: smb2_message + +.. bro:id:: smb2_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, is_orig: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 messages. + + See `Wikipedia `__ for more information about the + :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` protocol. Bro's + :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` analyzer parses + both :abbr:`SMB (Server Message Block)`-over-:abbr:`NetBIOS (Network Basic Input/Output System)` on + ports 138/139 and :abbr:`SMB (Server Message Block)`-over-TCP on port 445. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :is_orig: True if the message came from the originator side. + + .. bro:see:: smb1_message + +.. bro:id:: smb_pipe_connect_heuristic + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for :abbr:`SMB (Server Message Block)` connections when a + named pipe has been detected heuristically. The case when this comes + up is when the drive mapping isn't seen so the analyzer is not able + to determine whether to send the data to the files framework or to + the DCE_RPC analyzer. This heuristic can be tuned by adding or + removing "named pipe" names from the :bro:see:`SMB::pipe_filenames` + const. + + + :c: The connection. + +Bro::SMTP +--------- + +SMTP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_SMTP` + +Events +++++++ + +.. bro:id:: smtp_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, command: :bro:type:`string`, arg: :bro:type:`string`) + + Generated for client-side SMTP commands. + + See `Wikipedia `__ + for more information about the SMTP protocol. + + + :c: The connection. + + + :is_orig: True if the sender of the command is the originator of the TCP + connection. Note that this is not redundant: the SMTP ``TURN`` command + allows client and server to flip roles on established SMTP sessions, + and hence a "request" might still come from the TCP-level responder. + In practice, however, that will rarely happen as TURN is considered + insecure and rarely used. + + + :command: The request's command, without any arguments. + + + :arg: The request command's arguments. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_one_header mime_segment_data + smtp_data smtp_reply + + .. note:: Bro does not support the newer ETRN extension yet. + +.. bro:id:: smtp_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, code: :bro:type:`count`, cmd: :bro:type:`string`, msg: :bro:type:`string`, cont_resp: :bro:type:`bool`) + + Generated for server-side SMTP commands. + + See `Wikipedia `__ + for more information about the SMTP protocol. + + + :c: The connection. + + + :is_orig: True if the sender of the command is the originator of the TCP + connection. Note that this is not redundant: the SMTP ``TURN`` command + allows client and server to flip roles on established SMTP sessions, + and hence a "reply" might still come from the TCP-level originator. In + practice, however, that will rarely happen as TURN is considered + insecure and rarely used. + + + :code: The reply's numerical code. + + + :cmd: TODO. + + + :msg: The reply's textual description. + + + :cont_resp: True if the reply line is tagged as being continued to the next + line. If so, further events will be raised and a handler may want to + reassemble the pieces before processing the response any further. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_one_header mime_segment_data + smtp_data smtp_request + + .. note:: Bro doesn't support the newer ETRN extension yet. + +.. bro:id:: smtp_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, data: :bro:type:`string`) + + Generated for DATA transmitted on SMTP sessions. This event is raised for + subsequent chunks of raw data following the ``DATA`` SMTP command until the + corresponding end marker ``.`` is seen. A handler may want to reassemble + the pieces as they come in if stream-analysis is required. + + See `Wikipedia `__ + for more information about the SMTP protocol. + + + :c: The connection. + + + :is_orig: True if the sender of the data is the originator of the TCP + connection. + + + :data: The raw data. Note that the size of each chunk is undefined and + depends on specifics of the underlying TCP connection. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_one_header mime_segment_data + smtp_reply smtp_request skip_smtp_data + + .. note:: This event receives the unprocessed raw data. There is a separate + set of ``mime_*`` events that strip out the outer MIME-layer of emails and + provide structured access to their content. + +.. bro:id:: smtp_unexpected + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`, detail: :bro:type:`string`) + + Generated for unexpected activity on SMTP sessions. The SMTP analyzer tracks + the state of SMTP sessions and reports commands and other activity with this + event that it sees even though it would not expect so at the current point + of the communication. + + See `Wikipedia `__ + for more information about the SMTP protocol. + + + :c: The connection. + + + :is_orig: True if the sender of the unexpected activity is the originator of + the TCP connection. + + + :msg: A descriptive message of what was unexpected. + + + :detail: The actual SMTP line triggering the event. + + .. bro:see:: smtp_data smtp_request smtp_reply + +.. bro:id:: smtp_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated if a connection switched to using TLS using STARTTLS or X-ANONYMOUSTLS. + After this event no more SMTP events will be raised for the connection. See the SSL + analyzer for related SSL events, which will now be generated. + + + :c: The connection. + + +Functions ++++++++++ + +.. bro:id:: skip_smtp_data + + :Type: :bro:type:`function` (c: :bro:type:`connection`) : :bro:type:`any` + + Skips SMTP data until the next email in a connection. + + + :c: The SMTP connection. + + .. bro:see:: skip_http_entity_data + +Bro::SNMP +--------- + +SNMP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_SNMP` + +Types ++++++ + +.. bro:type:: SNMP::Header + + :Type: :bro:type:`record` + + version: :bro:type:`count` + + v1: :bro:type:`SNMP::HeaderV1` :bro:attr:`&optional` + Set when ``version`` is 0. + + v2: :bro:type:`SNMP::HeaderV2` :bro:attr:`&optional` + Set when ``version`` is 1. + + v3: :bro:type:`SNMP::HeaderV3` :bro:attr:`&optional` + Set when ``version`` is 3. + + A generic SNMP header data structure that may include data from + any version of SNMP. The value of the ``version`` field + determines what header field is initialized. + +.. bro:type:: SNMP::HeaderV1 + + :Type: :bro:type:`record` + + community: :bro:type:`string` + + The top-level message data structure of an SNMPv1 datagram, not + including the PDU data. See :rfc:`1157`. + +.. bro:type:: SNMP::HeaderV2 + + :Type: :bro:type:`record` + + community: :bro:type:`string` + + The top-level message data structure of an SNMPv2 datagram, not + including the PDU data. See :rfc:`1901`. + +.. bro:type:: SNMP::HeaderV3 + + :Type: :bro:type:`record` + + id: :bro:type:`count` + + max_size: :bro:type:`count` + + flags: :bro:type:`count` + + auth_flag: :bro:type:`bool` + + priv_flag: :bro:type:`bool` + + reportable_flag: :bro:type:`bool` + + security_model: :bro:type:`count` + + security_params: :bro:type:`string` + + pdu_context: :bro:type:`SNMP::ScopedPDU_Context` :bro:attr:`&optional` + + The top-level message data structure of an SNMPv3 datagram, not + including the PDU data. See :rfc:`3412`. + +.. bro:type:: SNMP::PDU + + :Type: :bro:type:`record` + + request_id: :bro:type:`int` + + error_status: :bro:type:`int` + + error_index: :bro:type:`int` + + bindings: :bro:type:`SNMP::Bindings` + + A ``PDU`` data structure from either :rfc:`1157` or :rfc:`3416`. + +.. bro:type:: SNMP::TrapPDU + + :Type: :bro:type:`record` + + enterprise: :bro:type:`string` + + agent: :bro:type:`addr` + + generic_trap: :bro:type:`int` + + specific_trap: :bro:type:`int` + + time_stamp: :bro:type:`count` + + bindings: :bro:type:`SNMP::Bindings` + + A ``Trap-PDU`` data structure from :rfc:`1157`. + +.. bro:type:: SNMP::BulkPDU + + :Type: :bro:type:`record` + + request_id: :bro:type:`int` + + non_repeaters: :bro:type:`count` + + max_repititions: :bro:type:`count` + + bindings: :bro:type:`SNMP::Bindings` + + A ``BulkPDU`` data structure from :rfc:`3416`. + +.. bro:type:: SNMP::ScopedPDU_Context + + :Type: :bro:type:`record` + + engine_id: :bro:type:`string` + + name: :bro:type:`string` + + The ``ScopedPduData`` data structure of an SNMPv3 datagram, not + including the PDU data (i.e. just the "context" fields). + See :rfc:`3412`. + +.. bro:type:: SNMP::ObjectValue + + :Type: :bro:type:`record` + + tag: :bro:type:`count` + + oid: :bro:type:`string` :bro:attr:`&optional` + + signed: :bro:type:`int` :bro:attr:`&optional` + + unsigned: :bro:type:`count` :bro:attr:`&optional` + + address: :bro:type:`addr` :bro:attr:`&optional` + + octets: :bro:type:`string` :bro:attr:`&optional` + + A generic SNMP object value, that may include any of the + valid ``ObjectSyntax`` values from :rfc:`1155` or :rfc:`3416`. + The value is decoded whenever possible and assigned to + the appropriate field, which can be determined from the value + of the ``tag`` field. For tags that can't be mapped to an + appropriate type, the ``octets`` field holds the BER encoded + ASN.1 content if there is any (though, ``octets`` is may also + be used for other tags such as OCTET STRINGS or Opaque). Null + values will only have their corresponding tag value set. + +.. bro:type:: SNMP::Binding + + :Type: :bro:type:`record` + + oid: :bro:type:`string` + + value: :bro:type:`SNMP::ObjectValue` + + The ``VarBind`` data structure from either :rfc:`1157` or + :rfc:`3416`, which maps an Object Identifier to a value. + +.. bro:type:: SNMP::Bindings + + :Type: :bro:type:`vector` of :bro:type:`SNMP::Binding` + + A ``VarBindList`` data structure from either :rfc:`1157` or :rfc:`3416`. + A sequences of :bro:see:`SNMP::Binding`, which maps an OIDs to values. + +Events +++++++ + +.. bro:id:: snmp_get_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``GetRequest-PDU`` message from either :rfc:`1157` or :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_get_next_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``GetNextRequest-PDU`` message from either :rfc:`1157` or + :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``GetResponse-PDU`` message from :rfc:`1157` or a + ``Response-PDU`` from :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_set_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``SetRequest-PDU`` message from either :rfc:`1157` or :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_trap + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::TrapPDU`) + + An SNMP ``Trap-PDU`` message from :rfc:`1157`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_get_bulk_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::BulkPDU`) + + An SNMP ``GetBulkRequest-PDU`` message from :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_inform_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``InformRequest-PDU`` message from :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_trapV2 + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``SNMPv2-Trap-PDU`` message from :rfc:`1157`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_report + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``Report-PDU`` message from :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_unknown_pdu + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, tag: :bro:type:`count`) + + An SNMP PDU message of unknown type. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :tag: The tag of the unknown SNMP PDU. + +.. bro:id:: snmp_unknown_scoped_pdu + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, tag: :bro:type:`count`) + + An SNMPv3 ``ScopedPDUData`` of unknown type (neither plaintext or + an encrypted PDU was in the datagram). + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :tag: The tag of the unknown SNMP PDU scope. + +.. bro:id:: snmp_encrypted_pdu + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`) + + An SNMPv3 encrypted PDU message. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + +.. bro:id:: snmp_unknown_header_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, version: :bro:type:`count`) + + A datagram with an unknown SNMP version. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :version: The value of the unknown SNMP version. + +Bro::SOCKS +---------- + +SOCKS analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_SOCKS` + +Events +++++++ + +.. bro:id:: socks_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`count`, request_type: :bro:type:`count`, sa: :bro:type:`SOCKS::Address`, p: :bro:type:`port`, user: :bro:type:`string`) + + Generated when a SOCKS request is analyzed. + + + :c: The parent connection of the proxy. + + + :version: The version of SOCKS this message used. + + + :request_type: The type of the request. + + + :sa: Address that the tunneled traffic should be sent to. + + + :p: The destination port for the proxied traffic. + + + :user: Username given for the SOCKS connection. This is not yet implemented + for SOCKSv5. + +.. bro:id:: socks_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`count`, reply: :bro:type:`count`, sa: :bro:type:`SOCKS::Address`, p: :bro:type:`port`) + + Generated when a SOCKS reply is analyzed. + + + :c: The parent connection of the proxy. + + + :version: The version of SOCKS this message used. + + + :reply: The status reply from the server. + + + :sa: The address that the server sent the traffic to. + + + :p: The destination port for the proxied traffic. + +.. bro:id:: socks_login_userpass_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, user: :bro:type:`string`, password: :bro:type:`string`) + + Generated when a SOCKS client performs username and password based login. + + + :c: The parent connection of the proxy. + + + :user: The given username. + + + :password: The given password. + +.. bro:id:: socks_login_userpass_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, code: :bro:type:`count`) + + Generated when a SOCKS server replies to a username/password login attempt. + + + :c: The parent connection of the proxy. + + + :code: The response code for the attempted login. + +Bro::SSH +-------- + +Secure Shell analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_SSH` + +Types ++++++ + +.. bro:type:: SSH::Algorithm_Prefs + + :Type: :bro:type:`record` + + client_to_server: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` + The algorithm preferences for client to server communication + + server_to_client: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` + The algorithm preferences for server to client communication + + The client and server each have some preferences for the algorithms used + in each direction. + +.. bro:type:: SSH::Capabilities + + :Type: :bro:type:`record` + + kex_algorithms: :bro:type:`string_vec` + Key exchange algorithms + + server_host_key_algorithms: :bro:type:`string_vec` + The algorithms supported for the server host key + + encryption_algorithms: :bro:type:`SSH::Algorithm_Prefs` + Symmetric encryption algorithm preferences + + mac_algorithms: :bro:type:`SSH::Algorithm_Prefs` + Symmetric MAC algorithm preferences + + compression_algorithms: :bro:type:`SSH::Algorithm_Prefs` + Compression algorithm preferences + + languages: :bro:type:`SSH::Algorithm_Prefs` :bro:attr:`&optional` + Language preferences + + is_server: :bro:type:`bool` + Are these the capabilities of the server? + + This record lists the preferences of an SSH endpoint for + algorithm selection. During the initial :abbr:`SSH (Secure Shell)` + key exchange, each endpoint lists the algorithms + that it supports, in order of preference. See + :rfc:`4253#section-7.1` for details. + +Events +++++++ + +.. bro:id:: ssh_server_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`string`) + + An :abbr:`SSH (Secure Shell)` Protocol Version Exchange message + from the server. This contains an identification string that's used + for version identification. See :rfc:`4253#section-4.2` for + details. + + + :c: The connection over which the message was sent. + + + :version: The identification string + + .. bro:see:: ssh_client_version ssh_auth_successful ssh_auth_failed + ssh_auth_result ssh_auth_attempted ssh_capabilities + ssh2_server_host_key ssh1_server_host_key ssh_server_host_key + ssh_encrypted_packet ssh2_dh_server_params ssh2_gss_error + ssh2_ecc_key + +.. bro:id:: ssh_client_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`string`) + + An :abbr:`SSH (Secure Shell)` Protocol Version Exchange message + from the client. This contains an identification string that's used + for version identification. See :rfc:`4253#section-4.2` for + details. + + + :c: The connection over which the message was sent. + + + :version: The identification string + + .. bro:see:: ssh_server_version ssh_auth_successful ssh_auth_failed + ssh_auth_result ssh_auth_attempted ssh_capabilities + ssh2_server_host_key ssh1_server_host_key ssh_server_host_key + ssh_encrypted_packet ssh2_dh_server_params ssh2_gss_error + ssh2_ecc_key + +.. bro:id:: ssh_auth_successful + + :Type: :bro:type:`event` (c: :bro:type:`connection`, auth_method_none: :bro:type:`bool`) + + This event is generated when an :abbr:`SSH (Secure Shell)` + connection was determined to have had a successful + authentication. This determination is based on packet size + analysis, and errs on the side of caution - that is, if there's any + doubt about the authentication success, this event is *not* raised. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :auth_method_none: This is true if the analyzer detected a + successful connection before any authentication challenge. The + :abbr:`SSH (Secure Shell)` protocol provides a mechanism for + unauthenticated access, which some servers support. + + .. bro:see:: ssh_server_version ssh_client_version ssh_auth_failed + ssh_auth_result ssh_auth_attempted ssh_capabilities + ssh2_server_host_key ssh1_server_host_key ssh_server_host_key + ssh_encrypted_packet ssh2_dh_server_params ssh2_gss_error + ssh2_ecc_key + +.. bro:id:: ssh_auth_attempted + + :Type: :bro:type:`event` (c: :bro:type:`connection`, authenticated: :bro:type:`bool`) + + This event is generated when an :abbr:`SSH (Secure Shell)` + connection was determined to have had an authentication attempt. + This determination is based on packet size analysis, and errs + on the side of caution - that is, if there's any doubt about + whether or not an authenication attempt occured, this event is + *not* raised. + + At this point in the protocol, all we can determine is whether + or not the user is authenticated. We don't know if the particular + attempt succeeded or failed, since some servers require multiple + authentications (e.g. require both a password AND a pubkey), and + could return an authentication failed message which is marked + as a partial success. + + This event will often be raised multiple times per connection. + In almost all connections, it will be raised once unless + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :authenticated: This is true if the analyzer detected a + successful connection from the authentication attempt. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_capabilities ssh2_server_host_key ssh1_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh_capabilities + + :Type: :bro:type:`event` (c: :bro:type:`connection`, cookie: :bro:type:`string`, capabilities: :bro:type:`SSH::Capabilities`) + + During the initial :abbr:`SSH (Secure Shell)` key exchange, each + endpoint lists the algorithms that it supports, in order of + preference. This event is generated for each endpoint, when the + SSH_MSG_KEXINIT message is seen. See :rfc:`4253#section-7.1` for + details. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :cookie: The SSH_MSG_KEXINIT cookie - a random value generated by + the sender. + + + :capabilities: The list of algorithms and languages that the sender + advertises support for, in order of preference. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh2_server_host_key ssh1_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh2_server_host_key + + :Type: :bro:type:`event` (c: :bro:type:`connection`, key: :bro:type:`string`) + + During the :abbr:`SSH (Secure Shell)` key exchange, the server + supplies its public host key. This event is generated when the + appropriate key exchange message is seen for SSH2. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :key: The server's public host key. Note that this is the public key + itself, and not just the fingerprint or hash. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh1_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh1_server_host_key + + :Type: :bro:type:`event` (c: :bro:type:`connection`, p: :bro:type:`string`, e: :bro:type:`string`) + + During the :abbr:`SSH (Secure Shell)` key exchange, the server + supplies its public host key. This event is generated when the + appropriate key exchange message is seen for SSH1. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :p: The prime for the server's public host key. + + + :e: The exponent for the serer's public host key. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh_encrypted_packet + + :Type: :bro:type:`event` (c: :bro:type:`connection`, orig: :bro:type:`bool`, len: :bro:type:`count`) + + This event is generated when an :abbr:`SSH (Secure Shell)` + encrypted packet is seen. This event is not handled by default, but + is provided for heuristic analysis scripts. Note that you have to set + :bro:id:`SSH::disable_analyzer_after_detection` to false to use this + event. This carries a performance penalty. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :orig: Whether the packet was sent by the originator of the TCP + connection. + + + :len: The length of the :abbr:`SSH (Secure Shell)` payload, in + bytes. Note that this ignores reassembly, as this is unknown. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh1_server_host_key ssh_server_host_key ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh2_dh_server_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, p: :bro:type:`string`, q: :bro:type:`string`) + + Generated if the connection uses a Diffie-Hellman Group Exchange + key exchange method. This event contains the server DH parameters, + which are sent in the SSH_MSG_KEY_DH_GEX_GROUP message as defined in + :rfc:`4419#section-3`. + + + :c: The connection. + + + :p: The DH prime modulus. + + + :q: The DH generator. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh1_server_host_key ssh_server_host_key ssh_encrypted_packet + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh2_gss_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, major_status: :bro:type:`count`, minor_status: :bro:type:`count`, err_msg: :bro:type:`string`) + + In the event of a GSS-API error on the server, the server MAY send + send an error message with some additional details. This event is + generated when such an error message is seen. For more information, + see :rfc:`4462#section-2.1`. + + + :c: The connection. + + + :major_status: GSS-API major status code. + + + :minor_status: GSS-API minor status code. + + + :err_msg: Detailed human-readable error message + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh1_server_host_key ssh_server_host_key ssh_encrypted_packet + ssh2_dh_server_params ssh2_ecc_key + +.. bro:id:: ssh2_ecc_key + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, q: :bro:type:`string`) + + The :abbr:`ECDH (Elliptic Curve Diffie-Hellman)` and + :abbr:`ECMQV (Elliptic Curve Menezes-Qu-Vanstone)` key exchange + algorithms use two ephemeral key pairs to generate a shared + secret. This event is generated when either the client's or + server's ephemeral public key is seen. For more information, see: + :rfc:`5656#section-4`. + + + :c: The connection + + + :is_orig: Did this message come from the originator? + + + :q: The ephemeral public key + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh1_server_host_key ssh_server_host_key ssh_encrypted_packet + ssh2_dh_server_params ssh2_gss_error + +Bro::SSL +-------- + +SSL/TLS and DTLS analyzers + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_DTLS` + +:bro:enum:`Analyzer::ANALYZER_SSL` + +Types ++++++ + +.. bro:type:: SSL::SignatureAndHashAlgorithm + + :Type: :bro:type:`record` + + HashAlgorithm: :bro:type:`count` + Hash algorithm number + + SignatureAlgorithm: :bro:type:`count` + Signature algorithm number + + +Events +++++++ + +.. bro:id:: ssl_client_hello + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`count`, record_version: :bro:type:`count`, possible_ts: :bro:type:`time`, client_random: :bro:type:`string`, session_id: :bro:type:`string`, ciphers: :bro:type:`index_vec`, comp_methods: :bro:type:`index_vec`) + + Generated for an SSL/TLS client's initial *hello* message. SSL/TLS sessions + start with an unencrypted handshake, and Bro extracts as much information out + of that as it can. This event provides access to the initial information + sent by the client. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + + :version: The protocol version as extracted from the client's message. The + values are standardized as part of the SSL/TLS protocol. The + :bro:id:`SSL::version_strings` table maps them to descriptive names. + + + :record_version: TLS version given in the record layer of the message. + Set to 0 for SSLv2. + + + :possible_ts: The current time as sent by the client. Note that SSL/TLS does + not require clocks to be set correctly, so treat with care. + + + :session_id: The session ID sent by the client (if any). + + + :client_random: The random value sent by the client. For version 2 connections, + the client challenge is returned. + + + :ciphers: The list of ciphers the client offered to use. The values are + standardized as part of the SSL/TLS protocol. The + :bro:id:`SSL::cipher_desc` table maps them to descriptive names. + + + :comp_methods: The list of compression methods that the client offered to use. + This value is not sent in TLSv1.3 or SSLv2. + + .. bro:see:: ssl_alert ssl_established ssl_extension ssl_server_hello + ssl_session_ticket_handshake x509_certificate ssl_handshake_message + ssl_change_cipher_spec + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms + +.. bro:id:: ssl_server_hello + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`count`, record_version: :bro:type:`count`, possible_ts: :bro:type:`time`, server_random: :bro:type:`string`, session_id: :bro:type:`string`, cipher: :bro:type:`count`, comp_method: :bro:type:`count`) + + Generated for an SSL/TLS server's initial *hello* message. SSL/TLS sessions + start with an unencrypted handshake, and Bro extracts as much information out + of that as it can. This event provides access to the initial information + sent by the client. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + + :version: The protocol version as extracted from the server's message. + The values are standardized as part of the SSL/TLS protocol. The + :bro:id:`SSL::version_strings` table maps them to descriptive names. + + + :record_version: TLS version given in the record layer of the message. + Set to 0 for SSLv2. + + + :possible_ts: The current time as sent by the server. Note that SSL/TLS does + not require clocks to be set correctly, so treat with care. This value + is not sent in TLSv1.3. + + + :session_id: The session ID as sent back by the server (if any). This value is not + sent in TLSv1.3. + + + :server_random: The random value sent by the server. For version 2 connections, + the connection-id is returned. + + + :cipher: The cipher chosen by the server. The values are standardized as part + of the SSL/TLS protocol. The :bro:id:`SSL::cipher_desc` table maps + them to descriptive names. + + + :comp_method: The compression method chosen by the client. The values are + standardized as part of the SSL/TLS protocol. This value is not + sent in TLSv1.3 or SSLv2. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_extension + ssl_session_ticket_handshake x509_certificate ssl_server_curve + ssl_dh_server_params ssl_handshake_message ssl_change_cipher_spec + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms + +.. bro:id:: ssl_extension + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, code: :bro:type:`count`, val: :bro:type:`string`) + + Generated for SSL/TLS extensions seen in an initial handshake. SSL/TLS + sessions start with an unencrypted handshake, and Bro extracts as much + information out of that as it can. This event provides access to any + extensions either side sends as part of an extended *hello* message. + + Note that Bro offers more specialized events for a few extensions. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :code: The numerical code of the extension. The values are standardized as + part of the SSL/TLS protocol. The :bro:id:`SSL::extensions` table maps + them to descriptive names. + + + :val: The raw extension value that was sent in the message. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension_ec_point_formats + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_extension_signature_algorithm ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + +.. bro:id:: ssl_extension_elliptic_curves + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, curves: :bro:type:`index_vec`) + + Generated for an SSL/TLS Elliptic Curves extension. This TLS extension is + defined in :rfc:`4492` and sent by the client in the initial handshake. It + gives the list of elliptic curves supported by the client. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :curves: List of supported elliptic curves. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_ec_point_formats ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_server_curve ssl_extension_signature_algorithm + ssl_extension_key_share ssl_rsa_client_pms ssl_server_signature + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + +.. bro:id:: ssl_extension_ec_point_formats + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, point_formats: :bro:type:`index_vec`) + + Generated for an SSL/TLS Supported Point Formats extension. This TLS extension + is defined in :rfc:`4492` and sent by the client and/or server in the initial + handshake. It gives the list of elliptic curve point formats supported by the + client. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :point_formats: List of supported point formats. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_server_curve ssl_extension_signature_algorithm + ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms ssl_server_signature + +.. bro:id:: ssl_extension_signature_algorithm + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, signature_algorithms: :bro:type:`signature_and_hashalgorithm_vec`) + + Generated for an Signature Algorithms extension. This TLS extension + is defined in :rfc:`5246` and sent by the client in the initial + handshake. It gives the list of signature and hash algorithms supported by the + client. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :signature_algorithms: List of supported signature and hash algorithm pairs. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_server_curve ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms ssl_server_signature + +.. bro:id:: ssl_extension_key_share + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, curves: :bro:type:`index_vec`) + + Generated for a Key Share extension. This TLS extension is defined in TLS1.3-draft16 + and sent by the client and the server in the initial handshake. It gives the list of + named groups supported by the client and chosen by the server. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :curves: List of supported/chosen named groups. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_server_curve + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms ssl_server_signature + +.. bro:id:: ssl_server_curve + + :Type: :bro:type:`event` (c: :bro:type:`connection`, curve: :bro:type:`count`) + :Attributes: :bro:attr:`&deprecated` + + Generated if a named curve is chosen by the server for an SSL/TLS connection. + The curve is sent by the server in the ServerKeyExchange message as defined + in :rfc:`4492`, in case an ECDH or ECDHE cipher suite is chosen. + + + :c: The connection. + + + :curve: The curve. + + .. note:: This event is deprecated and superseded by the ssl_ecdh_server_params + event. This event will be removed in a future version of Bro. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms ssl_server_signature + +.. bro:id:: ssl_ecdh_server_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, curve: :bro:type:`count`, point: :bro:type:`string`) + + Generated if a server uses an ECDH-anon or ECDHE cipher suite using a named curve + This event contains the named curve name and the server ECDH parameters contained + in the ServerKeyExchange message as defined in :rfc:`4492`. + + + :c: The connection. + + + :curve: The curve parameters. + + + :point: The server's ECDH public key. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_dh_client_params ssl_ecdh_client_params ssl_rsa_client_pms + +.. bro:id:: ssl_dh_server_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, p: :bro:type:`string`, q: :bro:type:`string`, Ys: :bro:type:`string`) + + Generated if a server uses a DH-anon or DHE cipher suite. This event contains + the server DH parameters, contained in the ServerKeyExchange message as + defined in :rfc:`5246`. + + + :c: The connection. + + + :p: The DH prime modulus. + + + :q: The DH generator. + + + :Ys: The server's DH public key. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms + +.. bro:id:: ssl_server_signature + + :Type: :bro:type:`event` (c: :bro:type:`connection`, signature_and_hashalgorithm: :bro:type:`SSL::SignatureAndHashAlgorithm`, signature: :bro:type:`string`) + + Generated if a server uses a non-anonymous DHE or ECDHE cipher suite. This event + contains the server signature over the key exchange parameters contained in + the ServerKeyExchange message as defined in :rfc:`4492` and :rfc:`5246`. + + + :c: The connection. + + + :signature_and_hashalgorithm: signature and hash algorithm used for the + digitally_signed struct. This field is only present + starting with TLSv1.2 and DTLSv1.2. Earlier versions + used a hardcoded hash algorithm. For protocol versions + below D(TLS)v1.2 this field is filled with an dummy + value of 256. + + + :signature: Signature part of the digitally_signed struct. The private key + corresponding to the certified public key in the server's certificate + message is used for signing. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_rsa_client_pms + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + +.. bro:id:: ssl_ecdh_client_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, point: :bro:type:`string`) + + Generated if a client uses an ECDH-anon or ECDHE cipher suite. This event + contains the client ECDH public value contained in the ClientKeyExchange + message as defined in :rfc:`4492`. + + + :c: The connection. + + + :point: The client's ECDH public key. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_dh_client_params ssl_ecdh_server_params ssl_rsa_client_pms + +.. bro:id:: ssl_dh_client_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, Yc: :bro:type:`string`) + + Generated if a client uses a DH-anon or DHE cipher suite. This event contains + the client DH parameters contained in the ClientKeyExchange message as + defined in :rfc:`5246`. + + + :c: The connection. + + + :Yc: The client's DH public key. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_ecdh_server_params ssl_ecdh_client_params ssl_rsa_client_pms + +.. bro:id:: ssl_rsa_client_pms + + :Type: :bro:type:`event` (c: :bro:type:`connection`, pms: :bro:type:`string`) + + Generated if a client uses RSA key exchange. This event contains the client + encrypted pre-master secret which is encrypted using the public key of the + server's certificate as defined in :rfc:`5246`. + + + :c: The connection. + + + :pms: The encrypted pre-master secret. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + +.. bro:id:: ssl_extension_application_layer_protocol_negotiation + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, protocols: :bro:type:`string_vec`) + + Generated for an SSL/TLS Application-Layer Protocol Negotiation extension. + This TLS extension is defined in draft-ietf-tls-applayerprotoneg and sent in + the initial handshake. It contains the list of client supported application + protocols by the client or the server, respectively. + + At the moment it is mostly used to negotiate the use of SPDY / HTTP2. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :protocols: List of supported application layer protocols. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_server_name ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_extension_signed_certificate_timestamp + +.. bro:id:: ssl_extension_server_name + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, names: :bro:type:`string_vec`) + + Generated for an SSL/TLS Server Name extension. This SSL/TLS extension is + defined in :rfc:`3546` and sent by the client in the initial handshake. It + contains the name of the server it is contacting. This information can be + used by the server to choose the correct certificate for the host the client + wants to contact. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :names: A list of server names (DNS hostnames). + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_application_layer_protocol_negotiation + ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_extension_signed_certificate_timestamp + +.. bro:id:: ssl_extension_signed_certificate_timestamp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, version: :bro:type:`count`, logid: :bro:type:`string`, timestamp: :bro:type:`count`, signature_and_hashalgorithm: :bro:type:`SSL::SignatureAndHashAlgorithm`, signature: :bro:type:`string`) + + Generated for the signed_certificate_timestamp TLS extension as defined in + :rfc:`6962`. The extension is used to transmit signed proofs that are + used for Certificate Transparency. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :version: the version of the protocol to which the SCT conforms. Always + should be 0 (representing version 1) + + + :logid: 32 bit key id + + + :timestamp: the NTP Time when the entry was logged measured since + the epoch, ignoring leap seconds, in milliseconds. + + + :signature_and_hashalgorithm: signature and hash algorithm used for the + digitally_signed struct + + + :signature: signature part of the digitally_signed struct + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_server_name ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_extension_application_layer_protocol_negotiation + x509_ocsp_ext_signed_certificate_timestamp sct_verify + +.. bro:id:: ssl_extension_supported_versions + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, versions: :bro:type:`index_vec`) + + Generated for an TLS Supported Versions extension. This TLS extension + is defined in the TLS 1.3 rfc and sent by the client in the initial handshake. + It contains the TLS versions that it supports. This informaion can be used by + the server to choose the best TLS version o use. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :versions: List of supported TLS versions. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_application_layer_protocol_negotiation + ssl_extension_key_share ssl_extension_server_name + ssl_extension_psk_key_exchange_modes ssl_extension_signed_certificate_timestamp + +.. bro:id:: ssl_extension_psk_key_exchange_modes + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, modes: :bro:type:`index_vec`) + + Generated for an TLS Pre-Shared Key Exchange Modes extension. This TLS extension is defined + in the TLS 1.3 rfc and sent by the client in the initial handshake. It contains the + list of Pre-Shared Key Exchange Modes that it supports. + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :versions: List of supported Pre-Shared Key Exchange Modes. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_application_layer_protocol_negotiation + ssl_extension_key_share ssl_extension_server_name + ssl_extension_supported_versions ssl_extension_signed_certificate_timestamp + +.. bro:id:: ssl_established + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated at the end of an SSL/TLS handshake. SSL/TLS sessions start with + an unencrypted handshake, and Bro extracts as much information out of that + as it can. This event signals the time when an SSL/TLS has finished the + handshake and its endpoints consider it as fully established. Typically, + everything from now on will be encrypted. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + .. bro:see:: ssl_alert ssl_client_hello ssl_extension ssl_server_hello + ssl_session_ticket_handshake x509_certificate + +.. bro:id:: ssl_alert + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, level: :bro:type:`count`, desc: :bro:type:`count`) + + Generated for SSL/TLS alert records. SSL/TLS sessions start with an + unencrypted handshake, and Bro extracts as much information out of that as + it can. If during that handshake, an endpoint encounters a fatal error, it + sends an *alert* record, that in turn triggers this event. After an *alert*, + any endpoint may close the connection immediately. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :level: The severity level, as sent in the *alert*. The values are defined as + part of the SSL/TLS protocol. + + + :desc: A numerical value identifying the cause of the *alert*. The values are + defined as part of the SSL/TLS protocol. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_session_ticket_handshake + +.. bro:id:: ssl_session_ticket_handshake + + :Type: :bro:type:`event` (c: :bro:type:`connection`, ticket_lifetime_hint: :bro:type:`count`, ticket: :bro:type:`string`) + + Generated for SSL/TLS handshake messages that are a part of the + stateless-server session resumption mechanism. SSL/TLS sessions start with + an unencrypted handshake, and Bro extracts as much information out of that + as it can. This event is raised when an SSL/TLS server passes a session + ticket to the client that can later be used for resuming the session. The + mechanism is described in :rfc:`4507`. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + + :ticket_lifetime_hint: A hint from the server about how long the ticket + should be stored by the client. + + + :ticket: The raw ticket data. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_alert + +.. bro:id:: ssl_heartbeat + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, length: :bro:type:`count`, heartbeat_type: :bro:type:`count`, payload_length: :bro:type:`count`, payload: :bro:type:`string`) + + Generated for SSL/TLS heartbeat messages that are sent before session + encryption starts. Generally heartbeat messages should rarely be seen in + normal TLS traffic. Heartbeats are described in :rfc:`6520`. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :length: length of the entire heartbeat message. + + + :heartbeat_type: type of the heartbeat message. Per RFC, 1 = request, 2 = response. + + + :payload_length: length of the payload of the heartbeat message, according to + packet field. + + + :payload: payload contained in the heartbeat message. Size can differ from + payload_length, if payload_length and actual packet length disagree. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_alert ssl_encrypted_data + +.. bro:id:: ssl_plaintext_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, record_version: :bro:type:`count`, content_type: :bro:type:`count`, length: :bro:type:`count`) + + Generated for SSL/TLS messages that are sent before full session encryption + starts. Note that "full encryption" is a bit fuzzy, especially for TLSv1.3; + here this event will be raised for early packets that are already using + pre-encryption. # This event is also used by Bro internally to determine if + the connection has been completely setup. This is necessary as TLS 1.3 does + not have CCS anymore. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :record_version: TLS version given in the record layer of the message. + Set to 0 for SSLv2. + + + :content_type: message type as reported by TLS session layer. Not populated for + SSLv2. + + + :length: length of the entire message. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_alert ssl_heartbeat + +.. bro:id:: ssl_encrypted_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, record_version: :bro:type:`count`, content_type: :bro:type:`count`, length: :bro:type:`count`) + + Generated for SSL/TLS messages that are sent after session encryption + started. + + Note that :bro:id:`SSL::disable_analyzer_after_detection` has to be changed + from its default to false for this event to be generated. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :record_version: TLS version given in the record layer of the message. + Set to 0 for SSLv2. + + + :content_type: message type as reported by TLS session layer. Not populated for + SSLv2. + + + :length: length of the entire message. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_alert ssl_heartbeat + +.. bro:id:: ssl_stapled_ocsp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, response: :bro:type:`string`) + + This event contains the OCSP response contained in a Certificate Status Request + message, when the client requested OCSP stapling and the server supports it. + See description in :rfc:`6066`. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :response: OCSP data. + +.. bro:id:: ssl_handshake_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg_type: :bro:type:`count`, length: :bro:type:`count`) + + This event is raised for each unencrypted SSL/TLS handshake message. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :msg_type: Type of the handshake message that was seen. + + + :length: Length of the handshake message that was seen. + + .. bro:see:: ssl_alert ssl_established ssl_extension ssl_server_hello + ssl_session_ticket_handshake x509_certificate ssl_client_hello + ssl_change_cipher_spec + +.. bro:id:: ssl_change_cipher_spec + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + This event is raised when a SSL/TLS ChangeCipherSpec message is encountered + before encryption begins. Traffic will be encrypted following this message. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + .. bro:see:: ssl_alert ssl_established ssl_extension ssl_server_hello + ssl_session_ticket_handshake x509_certificate ssl_client_hello + ssl_handshake_message + +Functions ++++++++++ + +.. bro:id:: set_ssl_established + + :Type: :bro:type:`function` (c: :bro:type:`connection`) : :bro:type:`any` + + Sets if the SSL analyzer should consider the connection established (handshake + finished succesfully). + + + :c: The SSL connection. + +Bro::SteppingStone +------------------ + +Stepping stone analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_STEPPINGSTONE` + +Events +++++++ + +.. bro:id:: stp_create_endp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, e: :bro:type:`int`, is_orig: :bro:type:`bool`) + + Deprecated. Will be removed. + +.. bro:id:: stp_resume_endp + + :Type: :bro:type:`event` (e: :bro:type:`int`) + + Event internal to the stepping stone detector. + +.. bro:id:: stp_correlate_pair + + :Type: :bro:type:`event` (e1: :bro:type:`int`, e2: :bro:type:`int`) + + Event internal to the stepping stone detector. + +.. bro:id:: stp_remove_pair + + :Type: :bro:type:`event` (e1: :bro:type:`int`, e2: :bro:type:`int`) + + Event internal to the stepping stone detector. + +.. bro:id:: stp_remove_endp + + :Type: :bro:type:`event` (e: :bro:type:`int`) + + Event internal to the stepping stone detector. + +Bro::Syslog +----------- + +Syslog analyzer UDP-only + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_SYSLOG` + +Events +++++++ + +.. bro:id:: syslog_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, facility: :bro:type:`count`, severity: :bro:type:`count`, msg: :bro:type:`string`) + + Generated for monitored Syslog messages. + + See `Wikipedia `__ for more + information about the Syslog protocol. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :facility: The "facility" included in the message. + + + :severity: The "severity" included in the message. + + + :msg: The message logged. + + .. note:: Bro currently parses only UDP syslog traffic. Support for TCP + syslog will be added soon. + +Bro::TCP +-------- + +TCP analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_CONTENTLINE` + +:bro:enum:`Analyzer::ANALYZER_CONTENTS` + +:bro:enum:`Analyzer::ANALYZER_TCP` + +:bro:enum:`Analyzer::ANALYZER_TCPSTATS` + +Events +++++++ + +.. bro:id:: new_connection_contents + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when reassembly starts for a TCP connection. This event is raised + at the moment when Bro's TCP analyzer enables stream reassembly for a + connection. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_reused + connection_state_remove connection_status_update connection_timeout + scheduled_analyzer_applied new_connection partial_connection + +.. bro:id:: connection_attempt + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for an unsuccessful connection attempt. This event is raised when + an originator unsuccessfully attempted to establish a connection. + "Unsuccessful" is defined as at least :bro:id:`tcp_attempt_delay` seconds + having elapsed since the originator first sent a connection establishment + packet to the destination without seeing a reply. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_established + connection_external connection_finished connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_established + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when seeing a SYN-ACK packet from the responder in a TCP + handshake. An associated SYN packet was not seen from the originator + side if its state is not set to :bro:see:`TCP_ESTABLISHED`. + The final ACK of the handshake in response to SYN-ACK may + or may not occur later, one way to tell is to check the *history* field of + :bro:type:`connection` to see if the originator sent an ACK, indicated by + 'A' in the history string. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_external connection_finished connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: partial_connection + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for a new active TCP connection if Bro did not see the initial + handshake. This event is raised when Bro has observed traffic from each + endpoint, but the activity did not begin with the usual connection + establishment. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_reused + connection_state_remove connection_status_update connection_timeout + scheduled_analyzer_applied new_connection new_connection_contents + + +.. bro:id:: connection_partial_close + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a previously inactive endpoint attempts to close a TCP + connection via a normal FIN handshake or an abort RST sequence. When the + endpoint sent one of these packets, Bro waits + :bro:id:`tcp_partial_close_delay` prior to generating the event, to give + the other endpoint a chance to close the connection normally. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_finished + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for a TCP connection that finished normally. The event is raised + when a regular FIN handshake from both endpoints was observed. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_half_finished + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when one endpoint of a TCP connection attempted to gracefully close + the connection, but the other endpoint is in the TCP_INACTIVE state. This can + happen due to split routing, in which Bro only sees one side of a connection. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_rejected + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for a rejected TCP connection. This event is raised when an + originator attempted to setup a TCP connection but the responder replied + with a RST packet denying it. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + + .. note:: + + If the responder does not respond at all, :bro:id:`connection_attempt` is + raised instead. If the responder initially accepts the connection but + aborts it later, Bro first generates :bro:id:`connection_established` + and then :bro:id:`connection_reset`. + +.. bro:id:: connection_reset + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when an endpoint aborted a TCP connection. The event is raised + when one endpoint of an established TCP connection aborted by sending a RST + packet. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reused + connection_state_remove connection_status_update connection_timeout + scheduled_analyzer_applied new_connection new_connection_contents + partial_connection + +.. bro:id:: connection_pending + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for each still-open TCP connection when Bro terminates. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection bro_done + +.. bro:id:: connection_SYN_packet + + :Type: :bro:type:`event` (c: :bro:type:`connection`, pkt: :bro:type:`SYN_packet`) + + Generated for a SYN packet. Bro raises this event for every SYN packet seen + by its TCP analyzer. + + + :c: The connection. + + + :pkt: Information extracted from the SYN packet. + + .. bro:see:: connection_EOF connection_attempt connection_established + connection_external connection_finished connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + + .. note:: + + This event has quite low-level semantics and can potentially be expensive + to generate. It should only be used if one really needs the specific + information passed into the handler via the ``pkt`` argument. If not, + handling one of the other ``connection_*`` events is typically the + better approach. + +.. bro:id:: connection_first_ACK + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for the first ACK packet seen for a TCP connection from + its *originator*. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + + .. note:: + + This event has quite low-level semantics and should be used only rarely. + +.. bro:id:: connection_EOF + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated at the end of reassembled TCP connections. The TCP reassembler + raised the event once for each endpoint of a connection when it finished + reassembling the corresponding side of the communication. + + + :c: The connection. + + + :is_orig: True if the event is raised for the originator side. + + .. bro:see:: connection_SYN_packet connection_attempt connection_established + connection_external connection_finished connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: tcp_packet + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flags: :bro:type:`string`, seq: :bro:type:`count`, ack: :bro:type:`count`, len: :bro:type:`count`, payload: :bro:type:`string`) + + Generated for every TCP packet. This is a very low-level and expensive event + that should be avoided when at all possible. It's usually infeasible to + handle when processing even medium volumes of traffic in real-time. It's + slightly better than :bro:id:`new_packet` because it affects only TCP, but + not much. That said, if you work from a trace and want to do some + packet-level analysis, it may come in handy. + + + :c: The connection the packet is part of. + + + :is_orig: True if the packet was sent by the connection's originator. + + + :flags: A string with the packet's TCP flags. In the string, each character + corresponds to one set flag, as follows: ``S`` -> SYN; ``F`` -> FIN; + ``R`` -> RST; ``A`` -> ACK; ``P`` -> PUSH. + + + :seq: The packet's relative TCP sequence number. + + + :ack: If the ACK flag is set for the packet, the packet's relative ACK + number, else zero. + + + :len: The length of the TCP payload, as specified in the packet header. + + + :payload: The raw TCP payload. Note that this may be shorter than *len* if + the packet was not fully captured. + + .. bro:see:: new_packet packet_contents tcp_option tcp_contents tcp_rexmit + +.. bro:id:: tcp_option + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, opt: :bro:type:`count`, optlen: :bro:type:`count`) + + Generated for each option found in a TCP header. Like many of the ``tcp_*`` + events, this is a very low-level event and potentially expensive as it may + be raised very often. + + + :c: The connection the packet is part of. + + + :is_orig: True if the packet was sent by the connection's originator. + + + :opt: The numerical option number, as found in the TCP header. + + + :optlen: The length of the options value. + + .. bro:see:: tcp_packet tcp_contents tcp_rexmit + + .. note:: There is currently no way to get the actual option value, if any. + +.. bro:id:: tcp_contents + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, seq: :bro:type:`count`, contents: :bro:type:`string`) + + Generated for each chunk of reassembled TCP payload. When content delivery is + enabled for a TCP connection (via :bro:id:`tcp_content_delivery_ports_orig`, + :bro:id:`tcp_content_delivery_ports_resp`, + :bro:id:`tcp_content_deliver_all_orig`, + :bro:id:`tcp_content_deliver_all_resp`), this event is raised for each chunk + of in-order payload reconstructed from the packet stream. Note that this + event is potentially expensive if many connections carry significant amounts + of data as then all that data needs to be passed on to the scripting layer. + + + :c: The connection the payload is part of. + + + :is_orig: True if the packet was sent by the connection's originator. + + + :seq: The sequence number corresponding to the first byte of the payload + chunk. + + + :contents: The raw payload, which will be non-empty. + + .. bro:see:: tcp_packet tcp_option tcp_rexmit + tcp_content_delivery_ports_orig tcp_content_delivery_ports_resp + tcp_content_deliver_all_resp tcp_content_deliver_all_orig + + .. note:: + + The payload received by this event is the same that is also passed into + application-layer protocol analyzers internally. Subsequent invocations of + this event for the same connection receive non-overlapping in-order chunks + of its TCP payload stream. It is however undefined what size each chunk + has; while Bro passes the data on as soon as possible, specifics depend on + network-level effects such as latency, acknowledgements, reordering, etc. + +.. bro:id:: tcp_rexmit + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, seq: :bro:type:`count`, len: :bro:type:`count`, data_in_flight: :bro:type:`count`, window: :bro:type:`count`) + + TODO. + +.. bro:id:: tcp_multiple_checksum_errors + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, threshold: :bro:type:`count`) + + Generated if a TCP flow crosses a checksum-error threshold, per + 'C'/'c' history reporting. + + + :c: The connection record for the TCP connection. + + + :is_orig: True if the event is raised for the originator side. + + + :threshold: the threshold that was crossed + + .. bro:see:: udp_multiple_checksum_errors + tcp_multiple_zero_windows tcp_multiple_retransmissions + +.. bro:id:: tcp_multiple_zero_windows + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, threshold: :bro:type:`count`) + + Generated if a TCP flow crosses a zero-window threshold, per + 'W'/'w' history reporting. + + + :c: The connection record for the TCP connection. + + + :is_orig: True if the event is raised for the originator side. + + + :threshold: the threshold that was crossed + + .. bro:see:: tcp_multiple_checksum_errors tcp_multiple_retransmissions + +.. bro:id:: tcp_multiple_retransmissions + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, threshold: :bro:type:`count`) + + Generated if a TCP flow crosses a retransmission threshold, per + 'T'/'t' history reporting. + + + :c: The connection record for the TCP connection. + + + :is_orig: True if the event is raised for the originator side. + + + :threshold: the threshold that was crossed + + .. bro:see:: tcp_multiple_checksum_errors tcp_multiple_zero_windows + +.. bro:id:: contents_file_write_failure + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`) + + Generated when failing to write contents of a TCP stream to a file. + + + :c: The connection whose contents are being recorded. + + + :is_orig: Which side of the connection encountered a failure to write. + + + :msg: A reason or description for the failure. + + .. bro:see:: set_contents_file get_contents_file + +Functions ++++++++++ + +.. bro:id:: get_orig_seq + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`) : :bro:type:`count` + + Get the originator sequence number of a TCP connection. Sequence numbers + are absolute (i.e., they reflect the values seen directly in packet headers; + they are not relative to the beginning of the connection). + + + :cid: The connection ID. + + + :returns: The highest sequence number sent by a connection's originator, or 0 + if *cid* does not point to an active TCP connection. + + .. bro:see:: get_resp_seq + +.. bro:id:: get_resp_seq + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`) : :bro:type:`count` + + Get the responder sequence number of a TCP connection. Sequence numbers + are absolute (i.e., they reflect the values seen directly in packet headers; + they are not relative to the beginning of the connection). + + + :cid: The connection ID. + + + :returns: The highest sequence number sent by a connection's responder, or 0 + if *cid* does not point to an active TCP connection. + + .. bro:see:: get_orig_seq + +.. bro:id:: set_contents_file + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, direction: :bro:type:`count`, f: :bro:type:`file`) : :bro:type:`bool` + + Associates a file handle with a connection for writing TCP byte stream + contents. + + + :cid: The connection ID. + + + :direction: Controls what sides of the connection to record. The argument can + take one of the four values: + + - ``CONTENTS_NONE``: Stop recording the connection's content. + - ``CONTENTS_ORIG``: Record the data sent by the connection + originator (often the client). + - ``CONTENTS_RESP``: Record the data sent by the connection + responder (often the server). + - ``CONTENTS_BOTH``: Record the data sent in both directions. + Results in the two directions being intermixed in the file, + in the order the data was seen by Bro. + + + :f: The file handle of the file to write the contents to. + + + :returns: Returns false if *cid* does not point to an active connection, and + true otherwise. + + .. note:: + + The data recorded to the file reflects the byte stream, not the + contents of individual packets. Reordering and duplicates are + removed. If any data is missing, the recording stops at the + missing data; this can happen, e.g., due to an + :bro:id:`content_gap` event. + + .. bro:see:: get_contents_file set_record_packets contents_file_write_failure + +.. bro:id:: get_contents_file + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, direction: :bro:type:`count`) : :bro:type:`file` + + Returns the file handle of the contents file of a connection. + + + :cid: The connection ID. + + + :direction: Controls what sides of the connection to record. See + :bro:id:`set_contents_file` for possible values. + + + :returns: The :bro:type:`file` handle for the contents file of the + connection identified by *cid*. If the connection exists + but there is no contents file for *direction*, then the function + generates an error and returns a file handle to ``stderr``. + + .. bro:see:: set_contents_file set_record_packets contents_file_write_failure + +Bro::Teredo +----------- + +Teredo analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_TEREDO` + +Events +++++++ + +.. bro:id:: teredo_packet + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner: :bro:type:`teredo_hdr`) + + Generated for any IPv6 packet encapsulated in a Teredo tunnel. + See :rfc:`4380` for more information about the Teredo protocol. + + + :outer: The Teredo tunnel connection. + + + :inner: The Teredo-encapsulated IPv6 packet header and transport header. + + .. bro:see:: teredo_authentication teredo_origin_indication teredo_bubble + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + +.. bro:id:: teredo_authentication + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner: :bro:type:`teredo_hdr`) + + Generated for IPv6 packets encapsulated in a Teredo tunnel that + use the Teredo authentication encapsulation method. + See :rfc:`4380` for more information about the Teredo protocol. + + + :outer: The Teredo tunnel connection. + + + :inner: The Teredo-encapsulated IPv6 packet header and transport header. + + .. bro:see:: teredo_packet teredo_origin_indication teredo_bubble + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + +.. bro:id:: teredo_origin_indication + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner: :bro:type:`teredo_hdr`) + + Generated for IPv6 packets encapsulated in a Teredo tunnel that + use the Teredo origin indication encapsulation method. + See :rfc:`4380` for more information about the Teredo protocol. + + + :outer: The Teredo tunnel connection. + + + :inner: The Teredo-encapsulated IPv6 packet header and transport header. + + .. bro:see:: teredo_packet teredo_authentication teredo_bubble + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + +.. bro:id:: teredo_bubble + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner: :bro:type:`teredo_hdr`) + + Generated for Teredo bubble packets. That is, IPv6 packets encapsulated + in a Teredo tunnel that have a Next Header value of :bro:id:`IPPROTO_NONE`. + See :rfc:`4380` for more information about the Teredo protocol. + + + :outer: The Teredo tunnel connection. + + + :inner: The Teredo-encapsulated IPv6 packet header and transport header. + + .. bro:see:: teredo_packet teredo_authentication teredo_origin_indication + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + +Bro::UDP +-------- + +UDP Analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_UDP` + +Events +++++++ + +.. bro:id:: udp_request + + :Type: :bro:type:`event` (u: :bro:type:`connection`) + + Generated for each packet sent by a UDP flow's originator. This a potentially + expensive event due to the volume of UDP traffic and should be used with + care. + + + :u: The connection record for the corresponding UDP flow. + + .. bro:see:: udp_contents udp_reply udp_session_done + +.. bro:id:: udp_reply + + :Type: :bro:type:`event` (u: :bro:type:`connection`) + + Generated for each packet sent by a UDP flow's responder. This a potentially + expensive event due to the volume of UDP traffic and should be used with + care. + + + :u: The connection record for the corresponding UDP flow. + + .. bro:see:: udp_contents udp_request udp_session_done + +.. bro:id:: udp_contents + + :Type: :bro:type:`event` (u: :bro:type:`connection`, is_orig: :bro:type:`bool`, contents: :bro:type:`string`) + + Generated for UDP packets to pass on their payload. As the number of UDP + packets can be very large, this event is normally raised only for those on + ports configured in :bro:id:`udp_content_delivery_ports_orig` (for packets + sent by the flow's originator) or :bro:id:`udp_content_delivery_ports_resp` + (for packets sent by the flow's responder). However, delivery can be enabled + for all UDP request and reply packets by setting + :bro:id:`udp_content_deliver_all_orig` or + :bro:id:`udp_content_deliver_all_resp`, respectively. Note that this + event is also raised for all matching UDP packets, including empty ones. + + + :u: The connection record for the corresponding UDP flow. + + + :is_orig: True if the event is raised for the originator side. + + + :contents: TODO. + + .. bro:see:: udp_reply udp_request udp_session_done + udp_content_deliver_all_orig udp_content_deliver_all_resp + udp_content_delivery_ports_orig udp_content_delivery_ports_resp + +.. bro:id:: udp_multiple_checksum_errors + + :Type: :bro:type:`event` (u: :bro:type:`connection`, is_orig: :bro:type:`bool`, threshold: :bro:type:`count`) + + Generated if a UDP flow crosses a checksum-error threshold, per + 'C'/'c' history reporting. + + + :u: The connection record for the corresponding UDP flow. + + + :is_orig: True if the event is raised for the originator side. + + + :threshold: the threshold that was crossed + + .. bro:see:: udp_reply udp_request udp_session_done + tcp_multiple_checksum_errors + +Bro::XMPP +--------- + +XMPP analyzer (StartTLS only) + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_XMPP` + +Events +++++++ + +.. bro:id:: xmpp_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a XMPP connection goes encrypted after a successful + StartTLS exchange between the client and the server. + + + :c: The connection. + +Bro::ZIP +-------- + +Generic ZIP support analyzer + +Components +++++++++++ + +:bro:enum:`Analyzer::ANALYZER_ZIP` + diff --git a/doc/script-reference/autogenerated-script-index.rst b/doc/script-reference/autogenerated-script-index.rst new file mode 100644 index 0000000000..8c8d5bcdf9 --- /dev/null +++ b/doc/script-reference/autogenerated-script-index.rst @@ -0,0 +1,470 @@ +.. toctree:: + :maxdepth: 1 + + base/init-bare.bro + base/bif/const.bif.bro + base/bif/types.bif.bro + base/bif/bro.bif.bro + base/bif/stats.bif.bro + base/bif/reporter.bif.bro + base/bif/strings.bif.bro + base/bif/option.bif.bro + base/bif/plugins/Bro_SNMP.types.bif.bro + base/bif/plugins/Bro_KRB.types.bif.bro + base/bif/event.bif.bro + base/init-frameworks-and-bifs.bro + base/frameworks/logging/__load__.bro + base/frameworks/logging/main.bro + base/bif/logging.bif.bro + base/frameworks/logging/postprocessors/__load__.bro + base/frameworks/logging/postprocessors/scp.bro + base/frameworks/logging/postprocessors/sftp.bro + base/frameworks/logging/writers/ascii.bro + base/frameworks/logging/writers/sqlite.bro + base/frameworks/logging/writers/none.bro + base/frameworks/broker/__load__.bro + base/frameworks/broker/main.bro + base/bif/comm.bif.bro + base/bif/messaging.bif.bro + base/frameworks/broker/store.bro + base/bif/data.bif.bro + base/bif/store.bif.bro + base/frameworks/broker/log.bro + base/frameworks/input/__load__.bro + base/frameworks/input/main.bro + base/bif/input.bif.bro + base/frameworks/input/readers/ascii.bro + base/frameworks/input/readers/raw.bro + base/frameworks/input/readers/benchmark.bro + base/frameworks/input/readers/binary.bro + base/frameworks/input/readers/config.bro + base/frameworks/input/readers/sqlite.bro + base/frameworks/analyzer/__load__.bro + base/frameworks/analyzer/main.bro + base/frameworks/packet-filter/utils.bro + base/bif/analyzer.bif.bro + base/frameworks/files/__load__.bro + base/frameworks/files/main.bro + base/bif/file_analysis.bif.bro + base/utils/site.bro + base/utils/patterns.bro + base/frameworks/files/magic/__load__.bro + base/bif/__load__.bro + base/bif/broxygen.bif.bro + base/bif/pcap.bif.bro + base/bif/bloom-filter.bif.bro + base/bif/cardinality-counter.bif.bro + base/bif/top-k.bif.bro + base/bif/plugins/__load__.bro + base/bif/plugins/Bro_ARP.events.bif.bro + base/bif/plugins/Bro_BackDoor.events.bif.bro + base/bif/plugins/Bro_BitTorrent.events.bif.bro + base/bif/plugins/Bro_ConnSize.events.bif.bro + base/bif/plugins/Bro_ConnSize.functions.bif.bro + base/bif/plugins/Bro_DCE_RPC.consts.bif.bro + base/bif/plugins/Bro_DCE_RPC.types.bif.bro + base/bif/plugins/Bro_DCE_RPC.events.bif.bro + base/bif/plugins/Bro_DHCP.events.bif.bro + base/bif/plugins/Bro_DHCP.types.bif.bro + base/bif/plugins/Bro_DNP3.events.bif.bro + base/bif/plugins/Bro_DNS.events.bif.bro + base/bif/plugins/Bro_File.events.bif.bro + base/bif/plugins/Bro_Finger.events.bif.bro + base/bif/plugins/Bro_FTP.events.bif.bro + base/bif/plugins/Bro_FTP.functions.bif.bro + base/bif/plugins/Bro_Gnutella.events.bif.bro + base/bif/plugins/Bro_GSSAPI.events.bif.bro + base/bif/plugins/Bro_GTPv1.events.bif.bro + base/bif/plugins/Bro_HTTP.events.bif.bro + base/bif/plugins/Bro_HTTP.functions.bif.bro + base/bif/plugins/Bro_ICMP.events.bif.bro + base/bif/plugins/Bro_Ident.events.bif.bro + base/bif/plugins/Bro_IMAP.events.bif.bro + base/bif/plugins/Bro_InterConn.events.bif.bro + base/bif/plugins/Bro_IRC.events.bif.bro + base/bif/plugins/Bro_KRB.events.bif.bro + base/bif/plugins/Bro_Login.events.bif.bro + base/bif/plugins/Bro_Login.functions.bif.bro + base/bif/plugins/Bro_MIME.events.bif.bro + base/bif/plugins/Bro_Modbus.events.bif.bro + base/bif/plugins/Bro_MySQL.events.bif.bro + base/bif/plugins/Bro_NCP.events.bif.bro + base/bif/plugins/Bro_NCP.consts.bif.bro + base/bif/plugins/Bro_NetBIOS.events.bif.bro + base/bif/plugins/Bro_NetBIOS.functions.bif.bro + base/bif/plugins/Bro_NTLM.types.bif.bro + base/bif/plugins/Bro_NTLM.events.bif.bro + base/bif/plugins/Bro_NTP.events.bif.bro + base/bif/plugins/Bro_POP3.events.bif.bro + base/bif/plugins/Bro_RADIUS.events.bif.bro + base/bif/plugins/Bro_RDP.events.bif.bro + base/bif/plugins/Bro_RDP.types.bif.bro + base/bif/plugins/Bro_RFB.events.bif.bro + base/bif/plugins/Bro_RPC.events.bif.bro + base/bif/plugins/Bro_SIP.events.bif.bro + base/bif/plugins/Bro_SNMP.events.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_check_directory.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_close.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_create_directory.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_echo.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_logoff_andx.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_negotiate.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_nt_create_andx.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_nt_cancel.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_query_information.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_read_andx.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_session_setup_andx.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_transaction.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_transaction_secondary.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_transaction2.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_transaction2_secondary.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_tree_connect_andx.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_tree_disconnect.bif.bro + base/bif/plugins/Bro_SMB.smb1_com_write_andx.bif.bro + base/bif/plugins/Bro_SMB.smb1_events.bif.bro + base/bif/plugins/Bro_SMB.smb2_com_close.bif.bro + base/bif/plugins/Bro_SMB.smb2_com_create.bif.bro + base/bif/plugins/Bro_SMB.smb2_com_negotiate.bif.bro + base/bif/plugins/Bro_SMB.smb2_com_read.bif.bro + base/bif/plugins/Bro_SMB.smb2_com_session_setup.bif.bro + base/bif/plugins/Bro_SMB.smb2_com_set_info.bif.bro + base/bif/plugins/Bro_SMB.smb2_com_tree_connect.bif.bro + base/bif/plugins/Bro_SMB.smb2_com_tree_disconnect.bif.bro + base/bif/plugins/Bro_SMB.smb2_com_write.bif.bro + base/bif/plugins/Bro_SMB.smb2_events.bif.bro + base/bif/plugins/Bro_SMB.events.bif.bro + base/bif/plugins/Bro_SMB.consts.bif.bro + base/bif/plugins/Bro_SMB.types.bif.bro + base/bif/plugins/Bro_SMTP.events.bif.bro + base/bif/plugins/Bro_SMTP.functions.bif.bro + base/bif/plugins/Bro_SOCKS.events.bif.bro + base/bif/plugins/Bro_SSH.types.bif.bro + base/bif/plugins/Bro_SSH.events.bif.bro + base/bif/plugins/Bro_SSL.types.bif.bro + base/bif/plugins/Bro_SSL.events.bif.bro + base/bif/plugins/Bro_SSL.functions.bif.bro + base/bif/plugins/Bro_SteppingStone.events.bif.bro + base/bif/plugins/Bro_Syslog.events.bif.bro + base/bif/plugins/Bro_TCP.events.bif.bro + base/bif/plugins/Bro_TCP.functions.bif.bro + base/bif/plugins/Bro_Teredo.events.bif.bro + base/bif/plugins/Bro_UDP.events.bif.bro + base/bif/plugins/Bro_XMPP.events.bif.bro + base/bif/plugins/Bro_FileEntropy.events.bif.bro + base/bif/plugins/Bro_FileExtract.events.bif.bro + base/bif/plugins/Bro_FileExtract.functions.bif.bro + base/bif/plugins/Bro_FileHash.events.bif.bro + base/bif/plugins/Bro_PE.events.bif.bro + base/bif/plugins/Bro_Unified2.events.bif.bro + base/bif/plugins/Bro_Unified2.types.bif.bro + base/bif/plugins/Bro_X509.events.bif.bro + base/bif/plugins/Bro_X509.types.bif.bro + base/bif/plugins/Bro_X509.functions.bif.bro + base/bif/plugins/Bro_X509.ocsp_events.bif.bro + base/bif/plugins/Bro_AsciiReader.ascii.bif.bro + base/bif/plugins/Bro_BenchmarkReader.benchmark.bif.bro + base/bif/plugins/Bro_BinaryReader.binary.bif.bro + base/bif/plugins/Bro_ConfigReader.config.bif.bro + base/bif/plugins/Bro_RawReader.raw.bif.bro + base/bif/plugins/Bro_SQLiteReader.sqlite.bif.bro + base/bif/plugins/Bro_AsciiWriter.ascii.bif.bro + base/bif/plugins/Bro_NoneWriter.none.bif.bro + base/bif/plugins/Bro_SQLiteWriter.sqlite.bif.bro + base/init-default.bro + base/utils/active-http.bro + base/utils/exec.bro + base/utils/addrs.bro + base/utils/conn-ids.bro + base/utils/dir.bro + base/frameworks/reporter/__load__.bro + base/frameworks/reporter/main.bro + base/utils/paths.bro + base/utils/directions-and-hosts.bro + base/utils/email.bro + base/utils/files.bro + base/utils/geoip-distance.bro + base/utils/hash_hrw.bro + base/utils/numbers.bro + base/utils/queue.bro + base/utils/strings.bro + base/utils/thresholds.bro + base/utils/time.bro + base/utils/urls.bro + base/frameworks/notice/__load__.bro + base/frameworks/notice/main.bro + base/frameworks/cluster/__load__.bro + base/frameworks/cluster/main.bro + base/frameworks/control/__load__.bro + base/frameworks/control/main.bro + base/frameworks/cluster/pools.bro + base/frameworks/notice/weird.bro + base/frameworks/notice/actions/drop.bro + base/frameworks/netcontrol/__load__.bro + base/frameworks/netcontrol/types.bro + base/frameworks/netcontrol/main.bro + base/frameworks/netcontrol/plugin.bro + base/frameworks/netcontrol/plugins/__load__.bro + base/frameworks/netcontrol/plugins/debug.bro + base/frameworks/netcontrol/plugins/openflow.bro + base/frameworks/openflow/__load__.bro + base/frameworks/openflow/consts.bro + base/frameworks/openflow/types.bro + base/frameworks/openflow/main.bro + base/frameworks/openflow/plugins/__load__.bro + base/frameworks/openflow/plugins/ryu.bro + base/utils/json.bro + base/frameworks/openflow/plugins/log.bro + base/frameworks/openflow/plugins/broker.bro + base/frameworks/openflow/non-cluster.bro + base/frameworks/netcontrol/plugins/packetfilter.bro + base/frameworks/netcontrol/plugins/broker.bro + base/frameworks/netcontrol/plugins/acld.bro + base/frameworks/netcontrol/drop.bro + base/frameworks/netcontrol/shunt.bro + base/frameworks/netcontrol/catch-and-release.bro + base/frameworks/netcontrol/non-cluster.bro + base/frameworks/notice/actions/email_admin.bro + base/frameworks/notice/actions/page.bro + base/frameworks/notice/actions/add-geodata.bro + base/frameworks/notice/actions/pp-alarms.bro + base/frameworks/dpd/__load__.bro + base/frameworks/dpd/main.bro + base/frameworks/signatures/__load__.bro + base/frameworks/signatures/main.bro + base/frameworks/packet-filter/__load__.bro + base/frameworks/packet-filter/main.bro + base/frameworks/packet-filter/netstats.bro + base/frameworks/software/__load__.bro + base/frameworks/software/main.bro + base/frameworks/intel/__load__.bro + base/frameworks/intel/main.bro + base/frameworks/intel/files.bro + base/frameworks/intel/input.bro + base/frameworks/config/__load__.bro + base/frameworks/config/main.bro + base/frameworks/config/input.bro + base/frameworks/config/weird.bro + base/frameworks/sumstats/__load__.bro + base/frameworks/sumstats/main.bro + base/frameworks/sumstats/plugins/__load__.bro + base/frameworks/sumstats/plugins/average.bro + base/frameworks/sumstats/plugins/hll_unique.bro + base/frameworks/sumstats/plugins/last.bro + base/frameworks/sumstats/plugins/max.bro + base/frameworks/sumstats/plugins/min.bro + base/frameworks/sumstats/plugins/sample.bro + base/frameworks/sumstats/plugins/std-dev.bro + base/frameworks/sumstats/plugins/variance.bro + base/frameworks/sumstats/plugins/sum.bro + base/frameworks/sumstats/plugins/topk.bro + base/frameworks/sumstats/plugins/unique.bro + base/frameworks/sumstats/non-cluster.bro + base/frameworks/tunnels/__load__.bro + base/frameworks/tunnels/main.bro + base/protocols/conn/__load__.bro + base/protocols/conn/main.bro + base/protocols/conn/contents.bro + base/protocols/conn/inactivity.bro + base/protocols/conn/polling.bro + base/protocols/conn/thresholds.bro + base/protocols/dce-rpc/__load__.bro + base/protocols/dce-rpc/consts.bro + base/protocols/dce-rpc/main.bro + base/protocols/dhcp/__load__.bro + base/protocols/dhcp/consts.bro + base/protocols/dhcp/main.bro + base/protocols/dnp3/__load__.bro + base/protocols/dnp3/main.bro + base/protocols/dnp3/consts.bro + base/protocols/dns/__load__.bro + base/protocols/dns/consts.bro + base/protocols/dns/main.bro + base/protocols/ftp/__load__.bro + base/protocols/ftp/utils-commands.bro + base/protocols/ftp/info.bro + base/protocols/ftp/main.bro + base/protocols/ftp/utils.bro + base/protocols/ftp/files.bro + base/protocols/ftp/gridftp.bro + base/protocols/ssl/__load__.bro + base/protocols/ssl/consts.bro + base/protocols/ssl/main.bro + base/protocols/ssl/mozilla-ca-list.bro + base/protocols/ssl/ct-list.bro + base/protocols/ssl/files.bro + base/files/x509/__load__.bro + base/files/x509/main.bro + base/files/hash/__load__.bro + base/files/hash/main.bro + base/protocols/http/__load__.bro + base/protocols/http/main.bro + base/protocols/http/entities.bro + base/protocols/http/utils.bro + base/protocols/http/files.bro + base/protocols/imap/__load__.bro + base/protocols/imap/main.bro + base/protocols/irc/__load__.bro + base/protocols/irc/main.bro + base/protocols/irc/dcc-send.bro + base/protocols/irc/files.bro + base/protocols/krb/__load__.bro + base/protocols/krb/main.bro + base/protocols/krb/consts.bro + base/protocols/krb/files.bro + base/protocols/modbus/__load__.bro + base/protocols/modbus/consts.bro + base/protocols/modbus/main.bro + base/protocols/mysql/__load__.bro + base/protocols/mysql/main.bro + base/protocols/mysql/consts.bro + base/protocols/ntlm/__load__.bro + base/protocols/ntlm/main.bro + base/protocols/pop3/__load__.bro + base/protocols/radius/__load__.bro + base/protocols/radius/main.bro + base/protocols/radius/consts.bro + base/protocols/rdp/__load__.bro + base/protocols/rdp/consts.bro + base/protocols/rdp/main.bro + base/protocols/rfb/__load__.bro + base/protocols/rfb/main.bro + base/protocols/sip/__load__.bro + base/protocols/sip/main.bro + base/protocols/snmp/__load__.bro + base/protocols/snmp/main.bro + base/protocols/smb/__load__.bro + base/protocols/smb/consts.bro + base/protocols/smb/const-dos-error.bro + base/protocols/smb/const-nt-status.bro + base/protocols/smb/main.bro + base/protocols/smb/smb1-main.bro + base/protocols/smb/smb2-main.bro + base/protocols/smb/files.bro + base/protocols/smtp/__load__.bro + base/protocols/smtp/main.bro + base/protocols/smtp/entities.bro + base/protocols/smtp/files.bro + base/protocols/socks/__load__.bro + base/protocols/socks/consts.bro + base/protocols/socks/main.bro + base/protocols/ssh/__load__.bro + base/protocols/ssh/main.bro + base/protocols/syslog/__load__.bro + base/protocols/syslog/consts.bro + base/protocols/syslog/main.bro + base/protocols/tunnels/__load__.bro + base/protocols/xmpp/__load__.bro + base/protocols/xmpp/main.bro + base/files/pe/__load__.bro + base/files/pe/consts.bro + base/files/pe/main.bro + base/files/extract/__load__.bro + base/files/extract/main.bro + base/files/unified2/__load__.bro + base/files/unified2/main.bro + base/misc/find-checksum-offloading.bro + base/misc/find-filtered-trace.bro + base/misc/version.bro + broxygen/__load__.bro + test-all-policy.bro + policy/frameworks/dpd/detect-protocols.bro + policy/frameworks/dpd/packet-segment-logging.bro + policy/frameworks/intel/do_notice.bro + policy/frameworks/intel/do_expire.bro + policy/frameworks/intel/whitelist.bro + policy/frameworks/intel/seen/__load__.bro + policy/frameworks/intel/seen/conn-established.bro + policy/frameworks/intel/seen/where-locations.bro + policy/frameworks/intel/seen/dns.bro + policy/frameworks/intel/seen/file-hashes.bro + policy/frameworks/intel/seen/file-names.bro + policy/frameworks/intel/seen/http-headers.bro + policy/frameworks/intel/seen/http-url.bro + policy/frameworks/intel/seen/pubkey-hashes.bro + policy/frameworks/intel/seen/ssl.bro + policy/frameworks/intel/seen/smtp.bro + policy/frameworks/intel/seen/smtp-url-extraction.bro + policy/frameworks/intel/seen/x509.bro + policy/frameworks/files/detect-MHR.bro + policy/frameworks/files/hash-all-files.bro + policy/frameworks/files/entropy-test-all-files.bro + policy/frameworks/notice/__load__.bro + policy/frameworks/notice/extend-email/hostnames.bro + policy/files/x509/log-ocsp.bro + policy/frameworks/packet-filter/shunt.bro + policy/frameworks/software/version-changes.bro + policy/frameworks/software/vulnerable.bro + policy/frameworks/software/windows-version-detection.bro + policy/integration/barnyard2/__load__.bro + policy/integration/barnyard2/types.bro + policy/integration/barnyard2/main.bro + policy/integration/collective-intel/__load__.bro + policy/integration/collective-intel/main.bro + policy/misc/capture-loss.bro + policy/misc/detect-traceroute/__load__.bro + policy/misc/detect-traceroute/main.bro + policy/misc/load-balancing.bro + policy/misc/loaded-scripts.bro + policy/misc/profiling.bro + policy/misc/scan.bro + policy/misc/stats.bro + policy/misc/weird-stats.bro + policy/misc/trim-trace-file.bro + policy/protocols/conn/known-hosts.bro + policy/protocols/conn/known-services.bro + policy/protocols/conn/mac-logging.bro + policy/protocols/conn/vlan-logging.bro + policy/protocols/conn/weirds.bro + policy/protocols/dhcp/msg-orig.bro + policy/protocols/dhcp/software.bro + policy/protocols/dhcp/sub-opts.bro + policy/protocols/dns/auth-addl.bro + policy/protocols/dns/detect-external-names.bro + policy/protocols/ftp/detect-bruteforcing.bro + policy/protocols/ftp/detect.bro + policy/protocols/ftp/software.bro + policy/protocols/http/detect-sqli.bro + policy/protocols/http/detect-webapps.bro + policy/protocols/http/header-names.bro + policy/protocols/http/software-browser-plugins.bro + policy/protocols/http/software.bro + policy/protocols/http/var-extraction-cookies.bro + policy/protocols/http/var-extraction-uri.bro + policy/protocols/krb/ticket-logging.bro + policy/protocols/modbus/known-masters-slaves.bro + policy/protocols/modbus/track-memmap.bro + policy/protocols/mysql/software.bro + policy/protocols/rdp/indicate_ssl.bro + policy/protocols/smb/log-cmds.bro + policy/protocols/smtp/blocklists.bro + policy/protocols/smtp/detect-suspicious-orig.bro + policy/protocols/smtp/entities-excerpt.bro + policy/protocols/smtp/software.bro + policy/protocols/ssh/detect-bruteforcing.bro + policy/protocols/ssh/geo-data.bro + policy/protocols/ssh/interesting-hostnames.bro + policy/protocols/ssh/software.bro + policy/protocols/ssl/expiring-certs.bro + policy/protocols/ssl/extract-certs-pem.bro + policy/protocols/ssl/heartbleed.bro + policy/protocols/ssl/known-certs.bro + policy/protocols/ssl/log-hostcerts-only.bro + policy/protocols/ssl/validate-certs.bro + policy/protocols/ssl/validate-ocsp.bro + policy/protocols/ssl/validate-sct.bro + policy/protocols/ssl/weak-keys.bro + policy/tuning/__load__.bro + policy/tuning/defaults/__load__.bro + policy/tuning/defaults/packet-fragments.bro + policy/tuning/defaults/warnings.bro + policy/tuning/defaults/extracted_file_limits.bro + policy/tuning/json-logs.bro + policy/tuning/track-all-assets.bro + policy/protocols/ssl/notary.bro + policy/frameworks/control/controllee.bro + policy/frameworks/control/controller.bro + policy/frameworks/files/extract-all-files.bro + policy/misc/dump-events.bro + policy/protocols/dhcp/deprecated_events.bro + policy/protocols/smb/__load__.bro + broxygen/example.bro diff --git a/doc/script-reference/file-analyzers.rst b/doc/script-reference/file-analyzers.rst index 81e71969a4..36d2b397c3 100644 --- a/doc/script-reference/file-analyzers.rst +++ b/doc/script-reference/file-analyzers.rst @@ -1 +1 @@ -.. broxygen:file_analyzer:: * +.. include:: autogenerated-file-analyzer-index.rst diff --git a/doc/script-reference/packages.rst b/doc/script-reference/packages.rst index 57fde4834e..dd3e2034f9 100644 --- a/doc/script-reference/packages.rst +++ b/doc/script-reference/packages.rst @@ -11,4 +11,4 @@ Packages/scripts in the ``base/`` directory are all loaded by default, while ones in ``policy/`` provide functionality and customization options that are more appropriate for users to decide whether they'd like to load it or not. -.. broxygen:package_index:: * +.. include:: autogenerated-package-index.rst diff --git a/doc/script-reference/proto-analyzers.rst b/doc/script-reference/proto-analyzers.rst index 85c6ec1f12..a87f7ec082 100644 --- a/doc/script-reference/proto-analyzers.rst +++ b/doc/script-reference/proto-analyzers.rst @@ -1 +1 @@ -.. broxygen:proto_analyzer:: * +.. include:: autogenerated-protocol-analyzer-index.rst diff --git a/doc/script-reference/scripts.rst b/doc/script-reference/scripts.rst index 90bbc5543d..a67595b38c 100644 --- a/doc/script-reference/scripts.rst +++ b/doc/script-reference/scripts.rst @@ -2,4 +2,4 @@ Bro Script Index ================ -.. broxygen:script_index:: * +.. include:: autogenerated-script-index.rst diff --git a/doc/script-reference/types.rst b/doc/script-reference/types.rst index 1c7a177ebe..1b15082058 100644 --- a/doc/script-reference/types.rst +++ b/doc/script-reference/types.rst @@ -305,7 +305,7 @@ Here is a more detailed description of each type: of an address gives the size in bits (32 for IPv4, and 128 for IPv6). Addresses can also be masked with ``/`` to produce a :bro:type:`subnet`: - .. code:: bro + .. sourcecode:: bro local a: addr = 192.168.1.100; local s: subnet = 192.168.0.0/16; @@ -315,7 +315,7 @@ Here is a more detailed description of each type: And checked for inclusion within a :bro:type:`subnet` using ``in`` or ``!in``: - .. code:: bro + .. sourcecode:: bro local a: addr = 192.168.1.100; local s: subnet = 192.168.0.0/16; @@ -329,7 +329,7 @@ Here is a more detailed description of each type: correspond to multiple IP addresses, the type of such a variable is "set[addr]". For example: - .. code:: bro + .. sourcecode:: bro local a = www.google.com; @@ -349,7 +349,7 @@ Here is a more detailed description of each type: A type allowing the specification of a set of related values that have no further structure. An example declaration: - .. code:: bro + .. sourcecode:: bro type color: enum { Red, White, Blue, }; @@ -379,13 +379,13 @@ Here is a more detailed description of each type: Here is an example of declaring a table indexed by "count" values and yielding "string" values: - .. code:: bro + .. sourcecode:: bro global a: table[count] of string; The yield type can also be more complex: - .. code:: bro + .. sourcecode:: bro global a: table[count] of table[addr, port] of string; @@ -396,7 +396,7 @@ Here is a more detailed description of each type: One way to initialize a table is by enclosing a set of initializers within braces, for example: - .. code:: bro + .. sourcecode:: bro global t: table[count] of string = { [11] = "eleven", @@ -405,7 +405,7 @@ Here is a more detailed description of each type: A table constructor can also be used to create a table: - .. code:: bro + .. sourcecode:: bro global t2 = table( [192.168.0.2, 22/tcp] = "ssh", @@ -416,7 +416,7 @@ Here is a more detailed description of each type: useful when a more complex index type could otherwise be ambiguous: - .. code:: bro + .. sourcecode:: bro type MyRec: record { a: count &optional; @@ -430,13 +430,13 @@ Here is a more detailed description of each type: Accessing table elements is provided by enclosing index values within square brackets (``[]``), for example: - .. code:: bro + .. sourcecode:: bro print t[11]; And membership can be tested with ``in`` or ``!in``: - .. code:: bro + .. sourcecode:: bro if ( 13 in t ) ... @@ -445,13 +445,13 @@ Here is a more detailed description of each type: Add or overwrite individual table elements by assignment: - .. code:: bro + .. sourcecode:: bro t[13] = "thirteen"; Remove individual table elements with :bro:keyword:`delete`: - .. code:: bro + .. sourcecode:: bro delete t[13]; @@ -461,7 +461,7 @@ Here is a more detailed description of each type: The number of elements in a table can be obtained by placing the table identifier between vertical pipe characters: - .. code:: bro + .. sourcecode:: bro |t| @@ -482,7 +482,7 @@ Here is a more detailed description of each type: Sets can be initialized by listing elements enclosed by curly braces: - .. code:: bro + .. sourcecode:: bro global s: set[port] = { 21/tcp, 23/tcp, 80/tcp, 443/tcp }; global s2: set[port, string] = { [21/tcp, "ftp"], [23/tcp, "telnet"] }; @@ -490,7 +490,7 @@ Here is a more detailed description of each type: A set constructor (equivalent to above example) can also be used to create a set: - .. code:: bro + .. sourcecode:: bro global s3 = set(21/tcp, 23/tcp, 80/tcp, 443/tcp); @@ -498,7 +498,7 @@ Here is a more detailed description of each type: useful when a more complex index type could otherwise be ambiguous: - .. code:: bro + .. sourcecode:: bro type MyRec: record { a: count &optional; @@ -511,7 +511,7 @@ Here is a more detailed description of each type: Set membership is tested with ``in`` or ``!in``: - .. code:: bro + .. sourcecode:: bro if ( 21/tcp in s ) ... @@ -521,7 +521,7 @@ Here is a more detailed description of each type: Elements are added with :bro:keyword:`add`: - .. code:: bro + .. sourcecode:: bro add s[22/tcp]; @@ -530,7 +530,7 @@ Here is a more detailed description of each type: And removed with :bro:keyword:`delete`: - .. code:: bro + .. sourcecode:: bro delete s[21/tcp]; @@ -540,7 +540,7 @@ Here is a more detailed description of each type: The number of elements in a set can be obtained by placing the set identifier between vertical pipe characters: - .. code:: bro + .. sourcecode:: bro |s| @@ -563,13 +563,13 @@ Here is a more detailed description of each type: :bro:type:`count` (and vector indexing is always zero-based). A vector is declared like: - .. code:: bro + .. sourcecode:: bro global v: vector of string; And can be initialized with the vector constructor: - .. code:: bro + .. sourcecode:: bro local v = vector("one", "two", "three"); @@ -577,7 +577,7 @@ Here is a more detailed description of each type: is useful for when a more complex yield type could otherwise be ambiguous. - .. code:: bro + .. sourcecode:: bro type MyRec: record { a: count &optional; @@ -591,14 +591,14 @@ Here is a more detailed description of each type: Accessing vector elements is provided by enclosing index values within square brackets (``[]``), for example: - .. code:: bro + .. sourcecode:: bro print v[2]; An element can be added to a vector by assigning the value (a value that already exists at that index will be overwritten): - .. code:: bro + .. sourcecode:: bro v[3] = "four"; @@ -606,21 +606,21 @@ Here is a more detailed description of each type: is normally equal to the number of elements in the vector) can be obtained by placing the vector identifier between vertical pipe characters: - .. code:: bro + .. sourcecode:: bro |v| A particularly common operation on a vector is to append an element to its end. You can do so using: - .. code:: bro + .. sourcecode:: bro v += e; where if e's type is ``X``, v's type is ``vector of X``. Note that this expression is equivalent to: - .. code:: bro + .. sourcecode:: bro v[|v|] = e; @@ -660,7 +660,7 @@ Here is a more detailed description of each type: same as local or global variables). An example record type definition: - .. code:: bro + .. sourcecode:: bro type MyRecordType: record { c: count; @@ -672,27 +672,27 @@ Here is a more detailed description of each type: :bro:attr:`&optional` or have a :bro:attr:`&default` attribute must be specified. First, there's a constructor syntax: - .. code:: bro + .. sourcecode:: bro local r: MyRecordType = record($c = 7); And the constructor can be explicitly named by type, too, which is arguably more readable: - .. code:: bro + .. sourcecode:: bro local r = MyRecordType($c = 42); And the third way is like this: - .. code:: bro + .. sourcecode:: bro local r: MyRecordType = [$c = 13, $s = "thirteen"]; Access to a record field uses the dollar sign (``$``) operator, and record fields can be assigned with this: - .. code:: bro + .. sourcecode:: bro local r: MyRecordType; r$c = 13; @@ -701,7 +701,7 @@ Here is a more detailed description of each type: value, use the ``?$`` operator (it returns a :bro:type:`bool` value of ``T`` if the field has been assigned a value, or ``F`` if not): - .. code:: bro + .. sourcecode:: bro if ( r ?$ s ) ... @@ -715,7 +715,7 @@ Here is a more detailed description of each type: where *argument* is a (possibly empty) comma-separated list of arguments, and *type* is an optional return type. For example: - .. code:: bro + .. sourcecode:: bro global greeting: function(name: string): string; @@ -724,7 +724,7 @@ Here is a more detailed description of each type: have different function body values at different times. To define a function including a body value, the syntax is like: - .. code:: bro + .. sourcecode:: bro function greeting(name: string): string { @@ -739,7 +739,7 @@ Here is a more detailed description of each type: Here is an example function that takes no parameters and does not return a value: - .. code:: bro + .. sourcecode:: bro function my_func() { @@ -748,20 +748,20 @@ Here is a more detailed description of each type: Function types don't need to have a name and can be assigned anonymously: - .. code:: bro + .. sourcecode:: bro greeting = function(name: string): string { return "Hi, " + name; }; And finally, the function can be called like: - .. code:: bro + .. sourcecode:: bro print greeting("Dave"); Function parameters may specify default values as long as they appear last in the parameter list: - .. code:: bro + .. sourcecode:: bro global foo: function(s: string, t: string &default="abc", u: count &default=0); @@ -770,7 +770,7 @@ Here is a more detailed description of each type: body and they will still be used for function calls that lack those arguments. - .. code:: bro + .. sourcecode:: bro function foo(s: string, t: string, u: count) { @@ -779,7 +779,7 @@ Here is a more detailed description of each type: And calls to the function may omit the defaults from the argument list: - .. code:: bro + .. sourcecode:: bro foo("test"); @@ -792,7 +792,7 @@ Here is a more detailed description of each type: Example: - .. code:: bro + .. sourcecode:: bro event my_event(r: bool, s: string) { @@ -815,7 +815,7 @@ Here is a more detailed description of each type: Immediately queuing invocation of an event handler occurs like: - .. code:: bro + .. sourcecode:: bro event password_exposed(user, password); @@ -827,7 +827,7 @@ Here is a more detailed description of each type: This delays the invocation of event handlers until some time in the future. For example: - .. code:: bro + .. sourcecode:: bro schedule 5 secs { password_exposed(user, password) }; @@ -856,7 +856,7 @@ Here is a more detailed description of each type: where *argument* is a (possibly empty) comma-separated list of arguments. For example: - .. code:: bro + .. sourcecode:: bro global myhook: hook(s: string) @@ -864,7 +864,7 @@ Here is a more detailed description of each type: bodies have been defined for it yet. To define some hook handler bodies the syntax looks like: - .. code:: bro + .. sourcecode:: bro hook myhook(s: string) &priority=10 { @@ -891,13 +891,13 @@ Here is a more detailed description of each type: are called similarly to a function, except preceded by the ``hook`` keyword: - .. code:: bro + .. sourcecode:: bro hook myhook("hi"); or - .. code:: bro + .. sourcecode:: bro if ( hook myhook("hi") ) print "all handlers ran"; @@ -925,7 +925,7 @@ Here is a more detailed description of each type: function. For example, declare, open, and write to a file and finally close it like: - .. code:: bro + .. sourcecode:: bro local f = open("myfile"); print f, "hello, world"; @@ -945,7 +945,7 @@ Here is a more detailed description of each type: An example use of this type is the set of built-in functions which perform hashing: - .. code:: bro + .. sourcecode:: bro local handle = md5_hash_init(); md5_hash_update(handle, "test"); diff --git a/doc/scripting/index.rst b/doc/scripting/index.rst index 54ae83bf81..49aa8c0702 100644 --- a/doc/scripting/index.rst +++ b/doc/scripting/index.rst @@ -1,14 +1,12 @@ .. _writing-scripts: -=================== -Writing Bro Scripts -=================== +=============== +Writing Scripts +=============== -.. contents:: - -Understanding Bro Scripts -========================= +Understanding Scripts +===================== Bro includes an event-driven scripting language that provides the primary means for an organization to extend and customize Bro's @@ -37,10 +35,85 @@ Hash registry includes the ability to do a host lookup on a domain with the form Team Cymru also populates the TXT record of their DNS responses with both a "first seen" timestamp and a numerical "detection rate". The important aspect to understand is Bro already generating hashes for files via the Files framework, but it is the -script ``detect-MHR.bro`` that is responsible for generating the +script :doc:`/scripts/policy/frameworks/files/detect-MHR.bro` +that is responsible for generating the appropriate DNS lookup, parsing the response, and generating a notice if appropriate. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/frameworks/files/detect-MHR.bro +.. sourcecode:: bro + :caption: detect-MHR.bro + + ##! Detect file downloads that have hash values matching files in Team + ##! Cymru's Malware Hash Registry (http://www.team-cymru.org/Services/MHR/). + + @load base/frameworks/files + @load base/frameworks/notice + @load frameworks/files/hash-all-files + + module TeamCymruMalwareHashRegistry; + + export { + redef enum Notice::Type += { + ## The hash value of a file transferred over HTTP matched in the + ## malware hash registry. + Match + }; + + ## File types to attempt matching against the Malware Hash Registry. + option match_file_types = /application\/x-dosexec/ | + /application\/vnd.ms-cab-compressed/ | + /application\/pdf/ | + /application\/x-shockwave-flash/ | + /application\/x-java-applet/ | + /application\/jar/ | + /video\/mp4/; + + ## The Match notice has a sub message with a URL where you can get more + ## information about the file. The %s will be replaced with the SHA-1 + ## hash of the file. + option match_sub_url = "https://www.virustotal.com/en/search/?query=%s"; + + ## The malware hash registry runs each malware sample through several + ## A/V engines. Team Cymru returns a percentage to indicate how + ## many A/V engines flagged the sample as malicious. This threshold + ## allows you to require a minimum detection rate. + option notice_threshold = 10; + } + + function do_mhr_lookup(hash: string, fi: Notice::FileInfo) + { + local hash_domain = fmt("%s.malware.hash.cymru.com", hash); + + when ( local MHR_result = lookup_hostname_txt(hash_domain) ) + { + # Data is returned as " " + local MHR_answer = split_string1(MHR_result, / /); + + if ( |MHR_answer| == 2 ) + { + local mhr_detect_rate = to_count(MHR_answer[1]); + + if ( mhr_detect_rate >= notice_threshold ) + { + local mhr_first_detected = double_to_time(to_double(MHR_answer[0])); + local readable_first_detected = strftime("%Y-%m-%d %H:%M:%S", mhr_first_detected); + local message = fmt("Malware Hash Registry Detection rate: %d%% Last seen: %s", mhr_detect_rate, readable_first_detected); + local virustotal_url = fmt(match_sub_url, hash); + # We don't have the full fa_file record here in order to + # avoid the "when" statement cloning it (expensive!). + local n: Notice::Info = Notice::Info($note=Match, $msg=message, $sub=virustotal_url); + Notice::populate_file_info2(fi, n); + NOTICE(n); + } + } + } + } + + event file_hash(f: fa_file, kind: string, hash: string) + { + if ( kind == "sha1" && f?$info && f$info?$mime_type && + match_file_types in f$info$mime_type ) + do_mhr_lookup(hash, Notice::create_file_info(f)); + } Visually, there are three distinct sections of the script. First, there is a base level with no indentation where libraries are included in the script through ``@load`` @@ -51,8 +124,12 @@ specific event (``event file_hash``). Don't get discouraged if you don't understand every section of the script; we'll cover the basics of the script and much more in following sections. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/frameworks/files/detect-MHR.bro - :lines: 4-6 +.. sourcecode:: bro + :caption: detect-MHR.bro + + @load base/frameworks/files + @load base/frameworks/notice + @load frameworks/files/hash-all-files The first part of the script consists of ``@load`` directives which process the ``__load__.bro`` script in the @@ -66,8 +143,36 @@ this level of granularity might not be entirely necessary. The ``@load`` direct are ensuring the Files framework, the Notice framework and the script to hash all files has been loaded by Bro. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/frameworks/files/detect-MHR.bro - :lines: 10-36 +.. sourcecode:: bro + :caption: detect-MHR.bro + + export { + redef enum Notice::Type += { + ## The hash value of a file transferred over HTTP matched in the + ## malware hash registry. + Match + }; + + ## File types to attempt matching against the Malware Hash Registry. + option match_file_types = /application\/x-dosexec/ | + /application\/vnd.ms-cab-compressed/ | + /application\/pdf/ | + /application\/x-shockwave-flash/ | + /application\/x-java-applet/ | + /application\/jar/ | + /video\/mp4/; + + ## The Match notice has a sub message with a URL where you can get more + ## information about the file. The %s will be replaced with the SHA-1 + ## hash of the file. + option match_sub_url = "https://www.virustotal.com/en/search/?query=%s"; + + ## The malware hash registry runs each malware sample through several + ## A/V engines. Team Cymru returns a percentage to indicate how + ## many A/V engines flagged the sample as malicious. This threshold + ## allows you to require a minimum detection rate. + option notice_threshold = 10; + } The export section redefines an enumerable constant that describes the type of notice we will generate with the Notice framework. Bro @@ -89,8 +194,43 @@ Up until this point, the script has merely done some basic setup. With the next section, the script starts to define instructions to take in a given event. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/frameworks/files/detect-MHR.bro - :lines: 38-71 +.. sourcecode:: bro + :caption: detect-MHR.bro + + function do_mhr_lookup(hash: string, fi: Notice::FileInfo) + { + local hash_domain = fmt("%s.malware.hash.cymru.com", hash); + + when ( local MHR_result = lookup_hostname_txt(hash_domain) ) + { + # Data is returned as " " + local MHR_answer = split_string1(MHR_result, / /); + + if ( |MHR_answer| == 2 ) + { + local mhr_detect_rate = to_count(MHR_answer[1]); + + if ( mhr_detect_rate >= notice_threshold ) + { + local mhr_first_detected = double_to_time(to_double(MHR_answer[0])); + local readable_first_detected = strftime("%Y-%m-%d %H:%M:%S", mhr_first_detected); + local message = fmt("Malware Hash Registry Detection rate: %d%% Last seen: %s", mhr_detect_rate, readable_first_detected); + local virustotal_url = fmt(match_sub_url, hash); + # We don't have the full fa_file record here in order to + # avoid the "when" statement cloning it (expensive!). + local n: Notice::Info = Notice::Info($note=Match, $msg=message, $sub=virustotal_url); + Notice::populate_file_info2(fi, n); + NOTICE(n); + } + } + } + } + + event file_hash(f: fa_file, kind: string, hash: string) + { + if ( kind == "sha1" && f?$info && f$info?$mime_type && + match_file_types in f$info$mime_type ) + do_mhr_lookup(hash, Notice::create_file_info(f)); The workhorse of the script is contained in the event handler for ``file_hash``. The :bro:see:`file_hash` event allows scripts to access @@ -182,8 +322,34 @@ This effort resulted in built-in-function files organized such that each entry contains a descriptive event name, the arguments passed to the event, and a concise explanation of the functions use. -.. btest-include:: ${BRO_SRC_ROOT}/build/scripts/base/bif/plugins/Bro_DNS.events.bif.bro - :lines: 29-54 +.. sourcecode:: bro + + ## Generated for DNS requests. For requests with multiple queries, this event + ## is raised once for each. + ## + ## See `Wikipedia `__ for more + ## information about the DNS protocol. Bro analyzes both UDP and TCP DNS + ## sessions. + ## + ## c: The connection, which may be UDP or TCP depending on the type of the + ## transport-layer session being analyzed. + ## + ## msg: The parsed DNS message header. + ## + ## query: The queried name. + ## + ## qtype: The queried resource record type. + ## + ## qclass: The queried resource record class. + ## + ## .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + ## dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + ## dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + ## dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + ## dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + ## dns_rejected non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + ## dns_skip_all_addl dns_skip_all_auth dns_skip_auth + event dns_request%(c: connection, msg: dns_msg, query: string, qtype: count, qclass: count%); Above is a segment of the documentation for the event :bro:id:`dns_request` (and the preceding link points to the @@ -226,7 +392,10 @@ remove this event from memory, effectively forgetting about it. Let's take a look at a simple example script, that will output the connection record for a single connection. -.. btest-include:: ${DOC_ROOT}/scripting/connection_record_01.bro +.. literalinclude:: connection_record_01.bro + :caption: + :language: bro + :linenos: Again, we start with ``@load``, this time importing the :doc:`/scripts/base/protocols/conn/index` scripts which supply the tracking @@ -242,9 +411,12 @@ more layers of information about a connection. This will give us a chance to see the contents of the connection record without it being overly populated. -.. btest:: connection-record-01 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -b -r ${TRACES}/http/get.trace ${DOC_ROOT}/scripting/connection_record_01.bro + $ bro -b -r http/get.trace connection_record_01.bro + [id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], orig=[size=136, state=5, num_pkts=7, num_bytes_ip=512, flow_label=0, l2_addr=c8:bc:c8:96:d2:a0], resp=[size=5007, state=5, num_pkts=7, num_bytes_ip=5379, flow_label=0, l2_addr=00:10:db:88:d2:ef], start_time=1362692526.869344, duration=0.211484, service={ + + }, history=ShADadFf, uid=CHhAvVGS1DHFjwGM9, tunnel=, vlan=, inner_vlan=, conn=[ts=1362692526.869344, uid=CHhAvVGS1DHFjwGM9, id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], proto=tcp, service=, duration=0.211484, orig_bytes=136, resp_bytes=5007, conn_state=SF, local_orig=, local_resp=, missed_bytes=0, history=ShADadFf, orig_pkts=7, orig_ip_bytes=512, resp_pkts=7, resp_ip_bytes=5379, tunnel_parents=], extract_orig=F, extract_resp=F, thresholds=] As you can see from the output, the connection record is something of a jumble when printed on its own. Regularly taking a peek at a @@ -270,11 +442,21 @@ proper format of a dereferenced variable in scripts. In the output of the script above, groups of information are collected between brackets, which would correspond to the ``$``-delimiter in a Bro script. -.. btest-include:: ${DOC_ROOT}/scripting/connection_record_02.bro +.. literalinclude:: connection_record_02.bro + :caption: + :language: bro + :linenos: -.. btest:: connection-record-02 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -b -r ${TRACES}/http/get.trace ${DOC_ROOT}/scripting/connection_record_02.bro + $bro -b -r http/get.trace connection_record_02.bro + [id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], orig=[size=136, state=5, num_pkts=7, num_bytes_ip=512, flow_label=0, l2_addr=c8:bc:c8:96:d2:a0], resp=[size=5007, state=5, num_pkts=7, num_bytes_ip=5379, flow_label=0, l2_addr=00:10:db:88:d2:ef], start_time=1362692526.869344, duration=0.211484, service={ + + }, history=ShADadFf, uid=CHhAvVGS1DHFjwGM9, tunnel=, vlan=, inner_vlan=, conn=[ts=1362692526.869344, uid=CHhAvVGS1DHFjwGM9, id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], proto=tcp, service=, duration=0.211484, orig_bytes=136, resp_bytes=5007, conn_state=SF, local_orig=, local_resp=, missed_bytes=0, history=ShADadFf, orig_pkts=7, orig_ip_bytes=512, resp_pkts=7, resp_ip_bytes=5379, tunnel_parents=], extract_orig=F, extract_resp=F, thresholds=, http=[ts=1362692526.939527, uid=CHhAvVGS1DHFjwGM9, id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], trans_depth=1, method=GET, host=bro.org, uri=/download/CHANGES.bro-aux.txt, referrer=, version=1.1, user_agent=Wget/1.14 (darwin12.2.0), request_body_len=0, response_body_len=4705, status_code=200, status_msg=OK, info_code=, info_msg=, tags={ + + }, username=, password=, capture_password=F, proxied=, range_request=F, orig_fuids=, orig_filenames=, orig_mime_types=, resp_fuids=[FakNcS1Jfe01uljb3], resp_filenames=, resp_mime_types=[text/plain], current_entity=, orig_mime_depth=1, resp_mime_depth=1], http_state=[pending={ + + }, current_request=1, current_response=1, trans_depth=1]] The addition of the ``base/protocols/http`` scripts populates the ``http=[]`` member of the connection record. While Bro is doing a @@ -306,7 +488,10 @@ each of which produce the same result if ``EXPRESSION`` evaluates to the same type as ``TYPE``. The decision as to which type of declaration to use is likely to be dictated by personal preference and readability. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_declaration.bro +.. literalinclude:: data_type_declaration.bro + :caption: + :language: bro + :linenos: Global Variables ~~~~~~~~~~~~~~~~ @@ -347,13 +532,19 @@ decrypted from HTTP streams is stored in :bro:see:`HTTP::default_capture_password` as shown in the stripped down excerpt from :doc:`/scripts/base/protocols/http/main.bro` below. -.. btest-include:: ${DOC_ROOT}/scripting/http_main.bro +.. literalinclude:: http_main.bro + :caption: + :language: bro + :linenos: Because the constant was declared with the ``&redef`` attribute, if we needed to turn this option on globally, we could do so by adding the following line to our ``site/local.bro`` file before firing up Bro. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_const_simple.bro +.. literalinclude:: data_type_const_simple.bro + :caption: + :language: bro + :linenos: While the idea of a re-definable constant might be odd, the constraint that constants can only be altered at parse-time remains even with the @@ -364,11 +555,18 @@ in a :bro:id:`bro_init` event. Were we to try to alter the table in an event handler, Bro would notify the user of an error and the script would fail. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_const.bro +.. literalinclude:: data_type_const.bro + :caption: + :language: bro + :linenos: -.. btest:: data_type_const.bro +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -b ${DOC_ROOT}/scripting/data_type_const.bro + $ bro -b data_type_const.bro + { + [80/tcp] = WWW, + [6666/tcp] = IRC + } Local Variables ~~~~~~~~~~~~~~~ @@ -382,7 +580,10 @@ of a script passes beyond that scope and no longer used, the variable is deleted. Bro maintains names of locals separately from globally visible ones, an example of which is illustrated below. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_local.bro +.. literalinclude:: data_type_local.bro + :caption: + :language: bro + :linenos: The script executes the event handler :bro:id:`bro_init` which in turn calls the function ``add_two(i: count)`` with an argument of ``10``. Once Bro @@ -455,7 +656,10 @@ for information that is already naturally unique such as ports or IP addresses. The code snippet below shows both an explicit and implicit declaration of a locally scoped set. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_set_declaration.bro +.. literalinclude:: data_struct_set_declaration.bro + :caption: + :language: bro + :linenos: :lines: 1-4,22 As you can see, sets are declared using the format ``SCOPE var_name: @@ -467,8 +671,12 @@ the ``in`` operator. In the case of iterating over a set, combining the ``for`` statement and the ``in`` operator will allow you to sequentially process each element of the set as seen below. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_set_declaration.bro +.. literalinclude:: data_struct_set_declaration.bro + :caption: + :language: bro + :linenos: :lines: 17-21 + :lineno-start: 17 Here, the ``for`` statement loops over the contents of the set storing each element in the temporary variable ``i``. With each iteration of @@ -487,16 +695,31 @@ negate the in operator itself. While the functionality is the same, using the ``!in`` is more efficient as well as a more natural construct which will aid in the readability of your script. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_set_declaration.bro +.. literalinclude:: data_struct_set_declaration.bro + :caption: + :language: bro + :linenos: :lines: 13-15 + :lineno-start: 13 You can see the full script and its output below. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_set_declaration.bro +.. literalinclude:: data_struct_set_declaration.bro + :caption: + :language: bro + :linenos: -.. btest:: data_struct_set_declaration +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_set_declaration.bro + $ bro data_struct_set_declaration.bro + SSL Port: 22/tcp + SSL Port: 443/tcp + SSL Port: 587/tcp + SSL Port: 993/tcp + Non-SSL Port: 80/tcp + Non-SSL Port: 25/tcp + Non-SSL Port: 143/tcp + Non-SSL Port: 23/tcp Tables ~~~~~~ @@ -505,11 +728,18 @@ A table in Bro is a mapping of a key to a value or yield. While the values don't have to be unique, each key in the table must be unique to preserve a one-to-one mapping of keys to values. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_table_declaration.bro +.. literalinclude:: data_struct_table_declaration.bro + :caption: + :language: bro + :linenos: -.. btest:: data_struct_table_declaration +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_table_declaration.bro + $ bro data_struct_table_declaration.bro + Service Name: SSH - Common Port: 22/tcp + Service Name: HTTPS - Common Port: 443/tcp + Service Name: SMTPS - Common Port: 587/tcp + Service Name: IMAPS - Common Port: 993/tcp In this example, we've compiled a table of SSL-enabled services and their common @@ -534,11 +764,18 @@ Bro implies a cost in complexity for the person writing the scripts but pays off in effectiveness given the power of Bro as a network security platform. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_table_complex.bro +.. literalinclude:: data_struct_table_complex.bro + :caption: + :language: bro + :linenos: -.. btest:: data_struct_table_complex +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -b ${DOC_ROOT}/scripting/data_struct_table_complex.bro + $ bro -b data_struct_table_complex.bro + Harakiri was released in 1962 by Shochiku Eiga studios, directed by Masaki Kobayashi and starring Tatsuya Nakadai + Goyokin was released in 1969 by Fuji studios, directed by Hideo Gosha and starring Tatsuya Nakadai + Tasogare Seibei was released in 2002 by Eisei Gekijo studios, directed by Yoji Yamada and starring Hiroyuki Sanada + Kiru was released in 1968 by Toho studios, directed by Kihachi Okamoto and starring Tatsuya Nakadai This script shows a sample table of strings indexed by two strings, a count, and a final string. With a tuple acting as an @@ -580,11 +817,18 @@ the vector name between two vertical pipes to get the vector's current length before printing the contents of both Vectors and their current lengths. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_vector_declaration.bro +.. literalinclude:: data_struct_vector_declaration.bro + :caption: + :language: bro + :linenos: -.. btest:: data_struct_vector_declaration +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_vector_declaration.bro + $ bro data_struct_vector_declaration.bro + contents of v1: [1, 2, 3, 4] + length of v1: 4 + contents of v2: [1, 2, 3, 4] + length of v2: 4 In a lot of cases, storing elements in a vector is simply a precursor to then iterating over them. Iterating over a vector is easy with the @@ -595,12 +839,17 @@ called ``i`` which will hold the index of the current element in the vector. Using ``i`` as an index to addr_vector we can access the current item in the vector with ``addr_vector[i]``. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_vector_iter.bro +.. literalinclude:: data_struct_vector_iter.bro + :caption: + :language: bro + :linenos: -.. btest:: data_struct_vector_iter - - @TEST-EXEC: btest-rst-cmd bro -b ${DOC_ROOT}/scripting/data_struct_vector_iter.bro +.. sourcecode:: console + $ bro -b data_struct_vector_iter.bro + 1.2.0.0/18 + 2.3.0.0/18 + 3.4.0.0/18 Data Types Revisited -------------------- @@ -653,7 +902,10 @@ your scripts. The following example below uses a Bro script to determine if a series of IP addresses are within a set of subnets using a 20 bit subnet mask. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_subnets.bro +.. literalinclude:: data_type_subnets.bro + :caption: + :language: bro + :linenos: Because this is a script that doesn't use any kind of network analysis, we can handle the event :bro:id:`bro_init` which is always @@ -669,9 +921,13 @@ For example, ``10.0.0.1 in 10.0.0.0/8`` would return true while script, we get the output listing the IP address and the subnet in which it belongs. -.. btest:: data_type_subnets +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_type_subnets.bro + $ bro data_type_subnets.bro + 172.16.4.56 belongs to subnet 172.16.0.0/20 + 172.16.47.254 belongs to subnet 172.16.32.0/20 + 172.16.22.45 belongs to subnet 172.16.16.0/20 + 172.16.1.1 belongs to subnet 172.16.0.0/20 time ~~~~ @@ -693,14 +949,26 @@ timestamp and an indication of who the originator and responder were. We use the ``strftime`` format string of ``%Y%M%d %H:%m:%S`` to produce a common date time formatted time stamp. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_time.bro +.. literalinclude:: data_type_time.bro + :caption: + :language: bro + :linenos: When the script is executed we get an output showing the details of established connections. -.. btest:: data_type_time +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/wikipedia.trace ${DOC_ROOT}/scripting/data_type_time.bro + $ bro -r wikipedia.trace data_type_time.bro + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.118\x0a + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.2\x0a + 2011/06/18 19:03:09: New connection established from 141.142.220.235 to 173.192.163.128\x0a interval ~~~~~~~~ @@ -730,15 +998,35 @@ operator. The script below amends the script started in the section above to include a time delta value printed along with the connection establishment report. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_interval.bro +.. literalinclude:: data_type_interval.bro + :caption: + :language: bro + :linenos: This time, when we execute the script we see an additional line in the output to display the time delta since the last fully established connection. -.. btest:: data_type_interval +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/wikipedia.trace ${DOC_ROOT}/scripting/data_type_interval.bro + $ bro -r wikipedia.trace data_type_interval.bro + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.118 + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 + Time since last connection: 132.0 msecs 97.0 usecs + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 + Time since last connection: 177.0 usecs + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 + Time since last connection: 2.0 msecs 177.0 usecs + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 + Time since last connection: 33.0 msecs 898.0 usecs + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 + Time since last connection: 35.0 usecs + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 + Time since last connection: 2.0 msecs 532.0 usecs + 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.2 + Time since last connection: 7.0 msecs 866.0 usecs + 2011/06/18 19:03:09: New connection established from 141.142.220.235 to 173.192.163.128 + Time since last connection: 817.0 msecs 703.0 usecs Pattern @@ -755,7 +1043,10 @@ adheres to a strict format, requiring the regular expression or pattern constant to be on the left side of the ``in`` operator and the string against which it will be tested to be on the right. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_pattern_01.bro +.. literalinclude:: data_type_pattern_01.bro + :caption: + :language: bro + :linenos: In the sample above, two local variables are declared to hold our sample sentence and regular expression. Our regular expression in @@ -771,9 +1062,12 @@ excluding the actual matches. In this case, our pattern matches twice, and results in a table with three entries. The ``print`` statements in the script will print the contents of the table in order. -.. btest:: data_type_pattern +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_type_pattern_01.bro + $ bro data_type_pattern_01.bro + The + brown fox jumps over the + dog. Patterns can also be used to compare strings using equality and inequality operators through the ``==`` and ``!=`` operators @@ -783,13 +1077,13 @@ ternary conditional statements to illustrate the use of the ``==`` operator with patterns. The output is altered based on the result of the comparison between the pattern and the string. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_pattern_02.bro - -.. btest:: data_type_pattern_02 - - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_type_pattern_02.bro +.. literalinclude:: data_type_pattern_02.bro +.. sourcecode:: console + $ bro data_type_pattern_02.bro + equality and /^?(equal)$?/ are not equal + equality and /^?(equality)$?/ are equal Record Data Type ---------------- @@ -809,7 +1103,10 @@ example of the ``record`` data type in the earlier sections, the :bro:type:`Conn::Info`, which corresponds to the fields logged into ``conn.log``, is shown by the excerpt below. -.. btest-include:: ${DOC_ROOT}/scripting/data_type_record.bro +.. literalinclude:: data_type_record.bro + :caption: + :language: bro + :linenos: Looking at the structure of the definition, a new collection of data types is being defined as a type called ``Info``. Since this type @@ -822,11 +1119,20 @@ that make up the record. The individual fields that make up the new record are not limited in type or number as long as the name for each field is unique. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_record_01.bro +.. literalinclude:: data_struct_record_01.bro + :caption: + :language: bro + :linenos: -.. btest:: data_struct_record_01 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_record_01.bro + $ bro data_struct_record_01.bro + Service: dns(RFC1035) + port: 53/udp + port: 53/tcp + Service: http(RFC2616) + port: 8080/tcp + port: 80/tcp The sample above shows a simple type definition that includes a string, a set of ports, and a count to define a service type. Also @@ -843,11 +1149,18 @@ records are even valid as fields within another record. We can extend the example above to include another record that contains a Service record. -.. btest-include:: ${DOC_ROOT}/scripting/data_struct_record_02.bro +.. literalinclude:: data_struct_record_02.bro -.. btest:: data_struct_record_02 +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_record_02.bro + $ bro data_struct_record_02.bro + System: morlock + Service: http(RFC2616) + port: 8080/tcp + port: 80/tcp + Service: dns(RFC1035) + port: 53/udp + port: 53/tcp The example above includes a second record type in which a field is used as the data type for a set. Records can be repeatedly nested @@ -858,8 +1171,12 @@ It's also common to see a ``type`` used to simply alias a data structure to a more descriptive name. The example below shows an example of this from Bro's own type definitions file. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/base/init-bare.bro - :lines: 12,19,26 +.. sourcecode:: bro + :caption: init-bare.bro + + type string_array: table[count] of string; + type string_set: set[string]; + type addr_set: set[addr]; The three lines above alias a type of data structure to a descriptive name. Functionally, the operations are the same, however, each of the @@ -916,11 +1233,24 @@ It's always best to work through the problem once, simulating the desired output with ``print`` and ``fmt`` before attempting to dive into the Logging Framework. -.. btest-include:: ${DOC_ROOT}/scripting/framework_logging_factorial_01.bro +.. literalinclude:: framework_logging_factorial_01.bro + :caption: + :language: bro + :linenos: -.. btest:: framework_logging_factorial +.. sourcecode:: console - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/framework_logging_factorial_01.bro + $ bro framework_logging_factorial_01.bro + 1 + 2 + 6 + 24 + 120 + 720 + 5040 + 40320 + 362880 + 3628800 This script defines a factorial function to recursively calculate the factorial of a unsigned integer passed as an argument to the function. Using @@ -930,7 +1260,10 @@ calculations correctly as well get an idea of the answers ourselves. The output of the script aligns with what we expect so now it's time to integrate the Logging Framework. -.. btest-include:: ${DOC_ROOT}/scripting/framework_logging_factorial_02.bro +.. literalinclude:: framework_logging_factorial_02.bro + :caption: + :language: bro + :linenos: As mentioned above we have to perform a few steps before we can issue the :bro:id:`Log::write` method and produce a logfile. @@ -962,10 +1295,29 @@ Now, if we run this script, instead of generating logging information to stdout, no output is created. Instead the output is all in ``factor.log``, properly formatted and organized. -.. btest:: framework_logging_factorial-2 - - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/framework_logging_factorial_02.bro - @TEST-EXEC: btest-rst-include factor.log +.. sourcecode:: console + + $ bro framework_logging_factorial_02.bro + $ cat factor.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path factor + #open 2018-12-14-21-47-18 + #fields num factorial_num + #types count count + 1 1 + 2 2 + 3 6 + 4 24 + 5 120 + 6 720 + 7 5040 + 8 40320 + 9 362880 + 10 3628800 + #close 2018-12-14-21-47-18 While the previous example is a simplistic one, it serves to demonstrate the small pieces of script code hat need to be in place in @@ -993,7 +1345,10 @@ example we've been using, let's extend it so as to write any factorial which is a factor of 5 to an alternate file, while writing the remaining logs to factor.log. -.. btest-include:: ${DOC_ROOT}/scripting/framework_logging_factorial_03.bro +.. literalinclude:: framework_logging_factorial_03.bro + :caption: + :language: bro + :linenos: To dynamically alter the file in which a stream writes its logs, a filter can specify a function that returns a string to be used as the @@ -1014,10 +1369,25 @@ factorials that are a factors of 5, ``factor-non5.log`` with the factorials that are not factors of 5, and ``factor.log`` which would have included all factorials. -.. btest:: framework_logging_factorial-3 - - @TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/framework_logging_factorial_03.bro - @TEST-EXEC: btest-rst-include factor-mod5.log +.. sourcecode:: console + + $ bro framework_logging_factorial_03.bro + $ cat factor-mod5.log + #separator \x09 + #set_separator , + #empty_field (empty) + #unset_field - + #path factor-mod5 + #open 2018-12-14-21-47-18 + #fields num factorial_num + #types count count + 5 120 + 6 720 + 7 5040 + 8 40320 + 9 362880 + 10 3628800 + #close 2018-12-14-21-47-1 The ability of Bro to generate easily customizable and extensible logs which remain easily parsable is a big part of the reason Bro has @@ -1047,7 +1417,10 @@ block and define the value to be passed to it, in this case the ``Factor::Info`` record. We then list the ``log_factor`` function as the ``$ev`` field in the call to ``Log::create_stream`` -.. btest-include:: ${DOC_ROOT}/scripting/framework_logging_factorial_04.bro +.. literalinclude:: framework_logging_factorial_04.bro + :caption: + :language: bro + :linenos: Raising Notices @@ -1098,8 +1471,60 @@ or not that notice is acted upon is decided by the local Notice Policy, but the script attempts to supply as much information as possible while staying concise. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/protocols/ssh/interesting-hostnames.bro - :lines: 1-52 +.. sourcecode:: bro + :caption: scripts/policy/protocols/ssh/interesting-hostnames.bro + + ##! This script will generate a notice if an apparent SSH login originates + ##! or heads to a host with a reverse hostname that looks suspicious. By + ##! default, the regular expression to match "interesting" hostnames includes + ##! names that are typically used for infrastructure hosts like nameservers, + ##! mail servers, web servers and ftp servers. + + @load base/frameworks/notice + + module SSH; + + export { + redef enum Notice::Type += { + ## Generated if a login originates or responds with a host where + ## the reverse hostname lookup resolves to a name matched by the + ## :bro:id:`SSH::interesting_hostnames` regular expression. + Interesting_Hostname_Login, + }; + + ## Strange/bad host names to see successful SSH logins from or to. + option interesting_hostnames = + /^d?ns[0-9]*\./ | + /^smtp[0-9]*\./ | + /^mail[0-9]*\./ | + /^pop[0-9]*\./ | + /^imap[0-9]*\./ | + /^www[0-9]*\./ | + /^ftp[0-9]*\./; + } + + function check_ssh_hostname(id: conn_id, uid: string, host: addr) + { + when ( local hostname = lookup_addr(host) ) + { + if ( interesting_hostnames in hostname ) + { + NOTICE([$note=Interesting_Hostname_Login, + $msg=fmt("Possible SSH login involving a %s %s with an interesting hostname.", + Site::is_local_addr(host) ? "local" : "remote", + host == id$orig_h ? "client" : "server"), + $sub=hostname, $id=id, $uid=uid]); + } + } + } + + event ssh_auth_successful(c: connection, auth_method_none: bool) + { + for ( host in set(c$id$orig_h, c$id$resp_h) ) + { + check_ssh_hostname(c$id, c$uid, host); + } + } While much of the script relates to the actual detection, the parts specific to the Notice Framework are actually quite interesting in @@ -1137,7 +1562,10 @@ action based on the answer. The hook below adds the ``SSH::Interesting_Hostname_Login`` notice raised in the :doc:`/scripts/policy/protocols/ssh/interesting-hostnames.bro` script. -.. btest-include:: ${DOC_ROOT}/scripting/framework_notice_hook_01.bro +.. literalinclude:: framework_notice_hook_01.bro + :caption: + :language: bro + :linenos: In the example above we've added ``Notice::ACTION_EMAIL`` to the ``n$actions`` set. This set, defined in the Notice Framework scripts, @@ -1174,8 +1602,14 @@ identifier. An identifier is a unique string of information collected from the connection relative to the behavior that has been observed by Bro. -.. btest-include:: ${BRO_SRC_ROOT}/scripts/policy/protocols/ssl/expiring-certs.bro - :lines: 64-68 +.. sourcecode:: bro + :caption: scripts/policy/protocols/ssl/expiring-certs.bro + + NOTICE([$note=Certificate_Expires_Soon, + $msg=fmt("Certificate %s is going to expire at %T", cert$subject, cert$not_valid_after), + $conn=c, $suppress_for=1day, + $identifier=cat(c$id$resp_h, c$id$resp_p, hash), + $fuid=fuid]); In the :doc:`/scripts/policy/protocols/ssl/expiring-certs.bro` script which identifies when SSL certificates are set to expire and raises @@ -1206,7 +1640,10 @@ environment in which it is be run. Using the example of ``SSL::Certificate_Expires_Soon`` to configure the ``$suppress_for`` variable to a shorter time. -.. btest-include:: ${DOC_ROOT}/scripting/framework_notice_hook_suppression_01.bro +.. literalinclude:: framework_notice_hook_suppression_01.bro + :caption: + :language: bro + :linenos: While ``Notice::policy`` hooks allow you to build custom predicate-based policies for a deployment, there are bound to be times @@ -1253,11 +1690,17 @@ suppression from a notice while ``Notice::type_suppression_intervals`` can be used to alter the suppression interval defined by $suppress_for in the call to ``NOTICE``. -.. btest-include:: ${DOC_ROOT}/scripting/framework_notice_shortcuts_01.bro +.. literalinclude:: framework_notice_shortcuts_01.bro + :caption: + :language: bro + :linenos: The Notice Policy shortcut above adds the ``Notice::Type`` of ``SSH::Interesting_Hostname_Login`` to the ``Notice::emailed_types`` set while the shortcut below alters the length of time for which those notices will be suppressed. -.. btest-include:: ${DOC_ROOT}/scripting/framework_notice_shortcuts_02.bro +.. literalinclude:: framework_notice_shortcuts_02.bro + :caption: + :language: bro + :linenos: diff --git a/doc/scripts/base/bif/__load__.bro.rst b/doc/scripts/base/bif/__load__.bro.rst new file mode 100644 index 0000000000..bd2a16851a --- /dev/null +++ b/doc/scripts/base/bif/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/bif/__load__.bro +===================== + + +:Imports: :doc:`base/bif/analyzer.bif.bro `, :doc:`base/bif/bloom-filter.bif.bro `, :doc:`base/bif/bro.bif.bro `, :doc:`base/bif/broxygen.bif.bro `, :doc:`base/bif/cardinality-counter.bif.bro `, :doc:`base/bif/comm.bif.bro `, :doc:`base/bif/const.bif.bro `, :doc:`base/bif/data.bif.bro `, :doc:`base/bif/event.bif.bro `, :doc:`base/bif/file_analysis.bif.bro `, :doc:`base/bif/input.bif.bro `, :doc:`base/bif/logging.bif.bro `, :doc:`base/bif/messaging.bif.bro `, :doc:`base/bif/option.bif.bro `, :doc:`base/bif/pcap.bif.bro `, :doc:`base/bif/reporter.bif.bro `, :doc:`base/bif/stats.bif.bro `, :doc:`base/bif/store.bif.bro `, :doc:`base/bif/strings.bif.bro `, :doc:`base/bif/top-k.bif.bro `, :doc:`base/bif/types.bif.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/analyzer.bif.bro.rst b/doc/scripts/base/bif/analyzer.bif.bro.rst new file mode 100644 index 0000000000..ffd8f028e1 --- /dev/null +++ b/doc/scripts/base/bif/analyzer.bif.bro.rst @@ -0,0 +1,66 @@ +:tocdepth: 3 + +base/bif/analyzer.bif.bro +========================= +.. bro:namespace:: Analyzer +.. bro:namespace:: GLOBAL + +Internal functions and types used by the analyzer framework. + +:Namespaces: Analyzer, GLOBAL + +Summary +~~~~~~~ +Functions +######### +================================================================= = +:bro:id:`Analyzer::__disable_all_analyzers`: :bro:type:`function` +:bro:id:`Analyzer::__disable_analyzer`: :bro:type:`function` +:bro:id:`Analyzer::__enable_analyzer`: :bro:type:`function` +:bro:id:`Analyzer::__name`: :bro:type:`function` +:bro:id:`Analyzer::__register_for_port`: :bro:type:`function` +:bro:id:`Analyzer::__schedule_analyzer`: :bro:type:`function` +:bro:id:`Analyzer::__tag`: :bro:type:`function` +================================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: Analyzer::__disable_all_analyzers + + :Type: :bro:type:`function` () : :bro:type:`any` + + +.. bro:id:: Analyzer::__disable_analyzer + + :Type: :bro:type:`function` (id: :bro:type:`Analyzer::Tag`) : :bro:type:`bool` + + +.. bro:id:: Analyzer::__enable_analyzer + + :Type: :bro:type:`function` (id: :bro:type:`Analyzer::Tag`) : :bro:type:`bool` + + +.. bro:id:: Analyzer::__name + + :Type: :bro:type:`function` (atype: :bro:type:`Analyzer::Tag`) : :bro:type:`string` + + +.. bro:id:: Analyzer::__register_for_port + + :Type: :bro:type:`function` (id: :bro:type:`Analyzer::Tag`, p: :bro:type:`port`) : :bro:type:`bool` + + +.. bro:id:: Analyzer::__schedule_analyzer + + :Type: :bro:type:`function` (orig: :bro:type:`addr`, resp: :bro:type:`addr`, resp_p: :bro:type:`port`, analyzer: :bro:type:`Analyzer::Tag`, tout: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Analyzer::__tag + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`Analyzer::Tag` + + + diff --git a/doc/scripts/base/bif/bloom-filter.bif.bro.rst b/doc/scripts/base/bif/bloom-filter.bif.bro.rst new file mode 100644 index 0000000000..7c34441419 --- /dev/null +++ b/doc/scripts/base/bif/bloom-filter.bif.bro.rst @@ -0,0 +1,205 @@ +:tocdepth: 3 + +base/bif/bloom-filter.bif.bro +============================= +.. bro:namespace:: GLOBAL + +Functions to create and manipulate Bloom filters. + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +========================================================== =================================================================== +:bro:id:`bloomfilter_add`: :bro:type:`function` Adds an element to a Bloom filter. +:bro:id:`bloomfilter_basic_init`: :bro:type:`function` Creates a basic Bloom filter. +:bro:id:`bloomfilter_basic_init2`: :bro:type:`function` Creates a basic Bloom filter. +:bro:id:`bloomfilter_clear`: :bro:type:`function` Removes all elements from a Bloom filter. +:bro:id:`bloomfilter_counting_init`: :bro:type:`function` Creates a counting Bloom filter. +:bro:id:`bloomfilter_internal_state`: :bro:type:`function` Returns a string with a representation of a Bloom filter's internal + state. +:bro:id:`bloomfilter_lookup`: :bro:type:`function` Retrieves the counter for a given element in a Bloom filter. +:bro:id:`bloomfilter_merge`: :bro:type:`function` Merges two Bloom filters. +========================================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: bloomfilter_add + + :Type: :bro:type:`function` (bf: :bro:type:`opaque` of bloomfilter, x: :bro:type:`any`) : :bro:type:`any` + + Adds an element to a Bloom filter. + + + :bf: The Bloom filter handle. + + + :x: The element to add. + + .. bro:see:: bloomfilter_basic_init bloomfilter_basic_init2 + bloomfilter_counting_init bloomfilter_lookup bloomfilter_clear + bloomfilter_merge + +.. bro:id:: bloomfilter_basic_init + + :Type: :bro:type:`function` (fp: :bro:type:`double`, capacity: :bro:type:`count`, name: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`opaque` of bloomfilter + + Creates a basic Bloom filter. + + + :fp: The desired false-positive rate. + + + :capacity: the maximum number of elements that guarantees a false-positive + rate of *fp*. + + + :name: A name that uniquely identifies and seeds the Bloom filter. If empty, + the filter will use :bro:id:`global_hash_seed` if that's set, and + otherwise use a local seed tied to the current Bro process. Only + filters with the same seed can be merged with + :bro:id:`bloomfilter_merge`. + + + :returns: A Bloom filter handle. + + .. bro:see:: bloomfilter_basic_init2 bloomfilter_counting_init bloomfilter_add + bloomfilter_lookup bloomfilter_clear bloomfilter_merge global_hash_seed + +.. bro:id:: bloomfilter_basic_init2 + + :Type: :bro:type:`function` (k: :bro:type:`count`, cells: :bro:type:`count`, name: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`opaque` of bloomfilter + + Creates a basic Bloom filter. This function serves as a low-level + alternative to :bro:id:`bloomfilter_basic_init` where the user has full + control over the number of hash functions and cells in the underlying bit + vector. + + + :k: The number of hash functions to use. + + + :cells: The number of cells of the underlying bit vector. + + + :name: A name that uniquely identifies and seeds the Bloom filter. If empty, + the filter will use :bro:id:`global_hash_seed` if that's set, and + otherwise use a local seed tied to the current Bro process. Only + filters with the same seed can be merged with + :bro:id:`bloomfilter_merge`. + + + :returns: A Bloom filter handle. + + .. bro:see:: bloomfilter_basic_init bloomfilter_counting_init bloomfilter_add + bloomfilter_lookup bloomfilter_clear bloomfilter_merge global_hash_seed + +.. bro:id:: bloomfilter_clear + + :Type: :bro:type:`function` (bf: :bro:type:`opaque` of bloomfilter) : :bro:type:`any` + + Removes all elements from a Bloom filter. This function resets all bits in + the underlying bitvector back to 0 but does not change the parameterization + of the Bloom filter, such as the element type and the hasher seed. + + + :bf: The Bloom filter handle. + + .. bro:see:: bloomfilter_basic_init bloomfilter_basic_init2 + bloomfilter_counting_init bloomfilter_add bloomfilter_lookup + bloomfilter_merge + +.. bro:id:: bloomfilter_counting_init + + :Type: :bro:type:`function` (k: :bro:type:`count`, cells: :bro:type:`count`, max: :bro:type:`count`, name: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`opaque` of bloomfilter + + Creates a counting Bloom filter. + + + :k: The number of hash functions to use. + + + :cells: The number of cells of the underlying counter vector. As there's + no single answer to what's the best parameterization for a + counting Bloom filter, we refer to the Bloom filter literature + here for choosing an appropiate value. + + + :max: The maximum counter value associated with each element + described by *w = ceil(log_2(max))* bits. Each bit in the underlying + counter vector becomes a cell of size *w* bits. + + + :name: A name that uniquely identifies and seeds the Bloom filter. If empty, + the filter will use :bro:id:`global_hash_seed` if that's set, and + otherwise use a local seed tied to the current Bro process. Only + filters with the same seed can be merged with + :bro:id:`bloomfilter_merge`. + + + :returns: A Bloom filter handle. + + .. bro:see:: bloomfilter_basic_init bloomfilter_basic_init2 bloomfilter_add + bloomfilter_lookup bloomfilter_clear bloomfilter_merge global_hash_seed + +.. bro:id:: bloomfilter_internal_state + + :Type: :bro:type:`function` (bf: :bro:type:`opaque` of bloomfilter) : :bro:type:`string` + + Returns a string with a representation of a Bloom filter's internal + state. This is for debugging/testing purposes only. + + + :bf: The Bloom filter handle. + + + :returns: a string with a representation of a Bloom filter's internal state. + +.. bro:id:: bloomfilter_lookup + + :Type: :bro:type:`function` (bf: :bro:type:`opaque` of bloomfilter, x: :bro:type:`any`) : :bro:type:`count` + + Retrieves the counter for a given element in a Bloom filter. + + + :bf: The Bloom filter handle. + + + :x: The element to count. + + + :returns: the counter associated with *x* in *bf*. + + .. bro:see:: bloomfilter_basic_init bloomfilter_basic_init2 + bloomfilter_counting_init bloomfilter_add bloomfilter_clear + bloomfilter_merge + +.. bro:id:: bloomfilter_merge + + :Type: :bro:type:`function` (bf1: :bro:type:`opaque` of bloomfilter, bf2: :bro:type:`opaque` of bloomfilter) : :bro:type:`opaque` of bloomfilter + + Merges two Bloom filters. + + .. note:: Currently Bloom filters created by different Bro instances cannot + be merged. In the future, this will be supported as long as both filters + are created with the same name. + + + :bf1: The first Bloom filter handle. + + + :bf2: The second Bloom filter handle. + + + :returns: The union of *bf1* and *bf2*. + + .. bro:see:: bloomfilter_basic_init bloomfilter_basic_init2 + bloomfilter_counting_init bloomfilter_add bloomfilter_lookup + bloomfilter_clear + + diff --git a/doc/scripts/base/bif/bro.bif.bro.rst b/doc/scripts/base/bif/bro.bif.bro.rst new file mode 100644 index 0000000000..705363f638 --- /dev/null +++ b/doc/scripts/base/bif/bro.bif.bro.rst @@ -0,0 +1,3567 @@ +:tocdepth: 3 + +base/bif/bro.bif.bro +==================== +.. bro:namespace:: GLOBAL + +A collection of built-in functions that implement a variety of things +such as general programming algorithms, string processing, math functions, +introspection, type conversion, file/directory manipulation, packet +filtering, interprocess communication and controlling protocol analyzer +behavior. + +You'll find most of Bro's built-in functions that aren't protocol-specific +in this file. + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +=============================================================================== =============================================================================== +:bro:id:`active_file`: :bro:type:`function` Checks whether a given file is open. +:bro:id:`addr_to_counts`: :bro:type:`function` Converts an :bro:type:`addr` to an :bro:type:`index_vec`. +:bro:id:`addr_to_ptr_name`: :bro:type:`function` Converts an IP address to a reverse pointer name. +:bro:id:`addr_to_subnet`: :bro:type:`function` Converts a :bro:type:`addr` to a :bro:type:`subnet`. +:bro:id:`all_set`: :bro:type:`function` Tests whether *all* elements of a boolean vector (``vector of bool``) are + true. +:bro:id:`anonymize_addr`: :bro:type:`function` Anonymizes an IP address. +:bro:id:`any_set`: :bro:type:`function` Tests whether a boolean vector (``vector of bool``) has *any* true + element. +:bro:id:`bro_is_terminating`: :bro:type:`function` Checks if Bro is terminating. +:bro:id:`bro_version`: :bro:type:`function` Returns the Bro version string. +:bro:id:`bytestring_to_count`: :bro:type:`function` Converts a string of bytes to a :bro:type:`count`. +:bro:id:`bytestring_to_double`: :bro:type:`function` Converts a string of bytes (in network byte order) to a :bro:type:`double`. +:bro:id:`bytestring_to_hexstr`: :bro:type:`function` Converts a string of bytes into its hexadecimal representation. +:bro:id:`calc_next_rotate`: :bro:type:`function` Calculates the duration until the next time a file is to be rotated, based + on a given rotate interval. +:bro:id:`capture_events`: :bro:type:`function` Writes the binary event stream generated by the core to a given file. +:bro:id:`capture_state_updates`: :bro:type:`function` Writes state updates generated by :bro:attr:`&synchronized` variables to a + file. +:bro:id:`cat`: :bro:type:`function` Returns the concatenation of the string representation of its arguments. +:bro:id:`cat_sep`: :bro:type:`function` Concatenates all arguments, with a separator placed between each one. +:bro:id:`check_subnet`: :bro:type:`function` Checks if a specific subnet is a member of a set/table[subnet]. +:bro:id:`checkpoint_state`: :bro:type:`function` Flushes in-memory state tagged with the :bro:attr:`&persistent` attribute + to disk. +:bro:id:`clear_table`: :bro:type:`function` Removes all elements from a set or table. +:bro:id:`close`: :bro:type:`function` Closes an open file and flushes any buffered content. +:bro:id:`complete_handshake`: :bro:type:`function` :bro:attr:`&deprecated` Signals a remote peer that the local Bro instance finished the initial + handshake. +:bro:id:`connect`: :bro:type:`function` :bro:attr:`&deprecated` Establishes a connection to a remote Bro or Broccoli instance. +:bro:id:`connection_exists`: :bro:type:`function` Checks whether a connection is (still) active. +:bro:id:`continue_processing`: :bro:type:`function` Resumes Bro's packet processing. +:bro:id:`convert_for_pattern`: :bro:type:`function` Escapes a string so that it becomes a valid :bro:type:`pattern` and can be + used with the :bro:id:`string_to_pattern`. +:bro:id:`count_to_port`: :bro:type:`function` Converts a :bro:type:`count` and ``transport_proto`` to a :bro:type:`port`. +:bro:id:`count_to_v4_addr`: :bro:type:`function` Converts a :bro:type:`count` to an :bro:type:`addr`. +:bro:id:`counts_to_addr`: :bro:type:`function` Converts an :bro:type:`index_vec` to an :bro:type:`addr`. +:bro:id:`current_analyzer`: :bro:type:`function` Returns the ID of the analyzer which raised the current event. +:bro:id:`current_time`: :bro:type:`function` Returns the current wall-clock time. +:bro:id:`decode_base64`: :bro:type:`function` Decodes a Base64-encoded string. +:bro:id:`decode_base64_conn`: :bro:type:`function` Decodes a Base64-encoded string that was derived from processing a connection. +:bro:id:`decode_base64_custom`: :bro:type:`function` :bro:attr:`&deprecated` Decodes a Base64-encoded string with a custom alphabet. +:bro:id:`disable_analyzer`: :bro:type:`function` Disables the analyzer which raised the current event (if the analyzer + belongs to the given connection). +:bro:id:`disable_print_hook`: :bro:type:`function` Disables sending :bro:id:`print_hook` events to remote peers for a given + file. +:bro:id:`disconnect`: :bro:type:`function` :bro:attr:`&deprecated` Terminate the connection with a peer. +:bro:id:`do_profiling`: :bro:type:`function` Enables detailed collection of profiling statistics. +:bro:id:`double_to_count`: :bro:type:`function` Converts a :bro:type:`double` to a :bro:type:`count`. +:bro:id:`double_to_interval`: :bro:type:`function` Converts a :bro:type:`double` to an :bro:type:`interval`. +:bro:id:`double_to_time`: :bro:type:`function` Converts a :bro:type:`double` value to a :bro:type:`time`. +:bro:id:`dump_current_packet`: :bro:type:`function` Writes the current packet to a file. +:bro:id:`dump_packet`: :bro:type:`function` Writes a given packet to a file. +:bro:id:`dump_rule_stats`: :bro:type:`function` Write rule matcher statistics (DFA states, transitions, memory usage, cache + hits/misses) to a file. +:bro:id:`enable_communication`: :bro:type:`function` :bro:attr:`&deprecated` Enables the communication system. +:bro:id:`enable_raw_output`: :bro:type:`function` Prevents escaping of non-ASCII characters when writing to a file. +:bro:id:`encode_base64`: :bro:type:`function` Encodes a Base64-encoded string. +:bro:id:`encode_base64_custom`: :bro:type:`function` :bro:attr:`&deprecated` Encodes a Base64-encoded string with a custom alphabet. +:bro:id:`entropy_test_add`: :bro:type:`function` Adds data to an incremental entropy calculation. +:bro:id:`entropy_test_finish`: :bro:type:`function` Finishes an incremental entropy calculation. +:bro:id:`entropy_test_init`: :bro:type:`function` Initializes data structures for incremental entropy calculation. +:bro:id:`enum_to_int`: :bro:type:`function` Converts an :bro:type:`enum` to an :bro:type:`int`. +:bro:id:`exit`: :bro:type:`function` Shuts down the Bro process immediately. +:bro:id:`exp`: :bro:type:`function` Computes the exponential function. +:bro:id:`file_magic`: :bro:type:`function` Determines the MIME type of a piece of data using Bro's file magic + signatures. +:bro:id:`file_mode`: :bro:type:`function` Converts UNIX file permissions given by a mode to an ASCII string. +:bro:id:`file_size`: :bro:type:`function` Returns the size of a given file. +:bro:id:`filter_subnet_table`: :bro:type:`function` For a set[subnet]/table[subnet], create a new table that contains all entries + that contain a given subnet. +:bro:id:`find_entropy`: :bro:type:`function` Performs an entropy test on the given data. +:bro:id:`floor`: :bro:type:`function` Computes the greatest integer less than the given :bro:type:`double` value. +:bro:id:`flush_all`: :bro:type:`function` Flushes all open files to disk. +:bro:id:`fmt`: :bro:type:`function` Produces a formatted string à la ``printf``. +:bro:id:`fnv1a32`: :bro:type:`function` Returns 32-bit digest of arbitrary input values using FNV-1a hash algorithm. +:bro:id:`get_conn_transport_proto`: :bro:type:`function` Extracts the transport protocol from a connection. +:bro:id:`get_current_packet`: :bro:type:`function` Returns the currently processed PCAP packet. +:bro:id:`get_current_packet_header`: :bro:type:`function` Function to get the raw headers of the currently processed packet. +:bro:id:`get_event_peer`: :bro:type:`function` :bro:attr:`&deprecated` Returns the peer who generated the last event. +:bro:id:`get_file_name`: :bro:type:`function` Gets the filename associated with a file handle. +:bro:id:`get_local_event_peer`: :bro:type:`function` :bro:attr:`&deprecated` Returns the local peer ID. +:bro:id:`get_port_transport_proto`: :bro:type:`function` Extracts the transport protocol from a :bro:type:`port`. +:bro:id:`getenv`: :bro:type:`function` Returns a system environment variable. +:bro:id:`gethostname`: :bro:type:`function` Returns the hostname of the machine Bro runs on. +:bro:id:`getpid`: :bro:type:`function` Returns Bro's process ID. +:bro:id:`global_ids`: :bro:type:`function` Generates a table with information about all global identifiers. +:bro:id:`global_sizes`: :bro:type:`function` Generates a table of the size of all global variables. +:bro:id:`haversine_distance`: :bro:type:`function` Calculates distance between two geographic locations using the haversine + formula. +:bro:id:`hexstr_to_bytestring`: :bro:type:`function` Converts a hex-string into its binary representation. +:bro:id:`hrw_weight`: :bro:type:`function` Calculates a weight value for use in a Rendezvous Hashing algorithm. +:bro:id:`identify_data`: :bro:type:`function` Determines the MIME type of a piece of data using Bro's file magic + signatures. +:bro:id:`install_dst_addr_filter`: :bro:type:`function` Installs a filter to drop packets destined to a given IP address with + a certain probability if none of a given set of TCP flags are set. +:bro:id:`install_dst_net_filter`: :bro:type:`function` Installs a filter to drop packets destined to a given subnet with + a certain probability if none of a given set of TCP flags are set. +:bro:id:`install_src_addr_filter`: :bro:type:`function` Installs a filter to drop packets from a given IP source address with + a certain probability if none of a given set of TCP flags are set. +:bro:id:`install_src_net_filter`: :bro:type:`function` Installs a filter to drop packets originating from a given subnet with + a certain probability if none of a given set of TCP flags are set. +:bro:id:`int_to_count`: :bro:type:`function` Converts a (positive) :bro:type:`int` to a :bro:type:`count`. +:bro:id:`interval_to_double`: :bro:type:`function` Converts an :bro:type:`interval` to a :bro:type:`double`. +:bro:id:`is_external_connection`: :bro:type:`function` Determines whether a connection has been received externally. +:bro:id:`is_icmp_port`: :bro:type:`function` Checks whether a given :bro:type:`port` has ICMP as transport protocol. +:bro:id:`is_local_interface`: :bro:type:`function` Checks whether a given IP address belongs to a local interface. +:bro:id:`is_remote_event`: :bro:type:`function` Checks whether the last raised event came from a remote peer. +:bro:id:`is_tcp_port`: :bro:type:`function` Checks whether a given :bro:type:`port` has TCP as transport protocol. +:bro:id:`is_udp_port`: :bro:type:`function` Checks whether a given :bro:type:`port` has UDP as transport protocol. +:bro:id:`is_v4_addr`: :bro:type:`function` Returns whether an address is IPv4 or not. +:bro:id:`is_v4_subnet`: :bro:type:`function` Returns whether a subnet specification is IPv4 or not. +:bro:id:`is_v6_addr`: :bro:type:`function` Returns whether an address is IPv6 or not. +:bro:id:`is_v6_subnet`: :bro:type:`function` Returns whether a subnet specification is IPv6 or not. +:bro:id:`listen`: :bro:type:`function` :bro:attr:`&deprecated` Listens on a given IP address and port for remote connections. +:bro:id:`ln`: :bro:type:`function` Computes the natural logarithm of a number. +:bro:id:`log10`: :bro:type:`function` Computes the common logarithm of a number. +:bro:id:`lookup_ID`: :bro:type:`function` Returns the value of a global identifier. +:bro:id:`lookup_addr`: :bro:type:`function` Issues an asynchronous reverse DNS lookup and delays the function result. +:bro:id:`lookup_asn`: :bro:type:`function` Performs an ASN lookup of an IP address. +:bro:id:`lookup_connection`: :bro:type:`function` Returns the :bro:type:`connection` record for a given connection identifier. +:bro:id:`lookup_hostname`: :bro:type:`function` Issues an asynchronous DNS lookup and delays the function result. +:bro:id:`lookup_hostname_txt`: :bro:type:`function` Issues an asynchronous TEXT DNS lookup and delays the function result. +:bro:id:`lookup_location`: :bro:type:`function` Performs a geo-lookup of an IP address. +:bro:id:`mask_addr`: :bro:type:`function` Masks an address down to the number of given upper bits. +:bro:id:`match_signatures`: :bro:type:`function` Manually triggers the signature engine for a given connection. +:bro:id:`matching_subnets`: :bro:type:`function` Gets all subnets that contain a given subnet from a set/table[subnet]. +:bro:id:`md5_hash`: :bro:type:`function` Computes the MD5 hash value of the provided list of arguments. +:bro:id:`md5_hash_finish`: :bro:type:`function` Returns the final MD5 digest of an incremental hash computation. +:bro:id:`md5_hash_init`: :bro:type:`function` Constructs an MD5 handle to enable incremental hash computation. +:bro:id:`md5_hash_update`: :bro:type:`function` Updates the MD5 value associated with a given index. +:bro:id:`md5_hmac`: :bro:type:`function` Computes an HMAC-MD5 hash value of the provided list of arguments. +:bro:id:`merge_pattern`: :bro:type:`function` :bro:attr:`&deprecated` Merges and compiles two regular expressions at initialization time. +:bro:id:`mkdir`: :bro:type:`function` Creates a new directory. +:bro:id:`mmdb_open_asn_db`: :bro:type:`function` Initializes MMDB for later use of lookup_asn. +:bro:id:`mmdb_open_location_db`: :bro:type:`function` Initializes MMDB for later use of lookup_location. +:bro:id:`network_time`: :bro:type:`function` Returns the timestamp of the last packet processed. +:bro:id:`open`: :bro:type:`function` Opens a file for writing. +:bro:id:`open_for_append`: :bro:type:`function` Opens a file for writing or appending. +:bro:id:`order`: :bro:type:`function` Returns the order of the elements in a vector according to some + comparison function. +:bro:id:`piped_exec`: :bro:type:`function` Opens a program with ``popen`` and writes a given string to the returned + stream to send it to the opened process's stdin. +:bro:id:`port_to_count`: :bro:type:`function` Converts a :bro:type:`port` to a :bro:type:`count`. +:bro:id:`preserve_prefix`: :bro:type:`function` Preserves the prefix of an IP address in anonymization. +:bro:id:`preserve_subnet`: :bro:type:`function` Preserves the prefix of a subnet in anonymization. +:bro:id:`ptr_name_to_addr`: :bro:type:`function` Converts a reverse pointer name to an address. +:bro:id:`rand`: :bro:type:`function` Generates a random number. +:bro:id:`raw_bytes_to_v4_addr`: :bro:type:`function` Converts a :bro:type:`string` of bytes into an IPv4 address. +:bro:id:`reading_live_traffic`: :bro:type:`function` Checks whether Bro reads traffic from one or more network interfaces (as + opposed to from a network trace in a file). +:bro:id:`reading_traces`: :bro:type:`function` Checks whether Bro reads traffic from a trace file (as opposed to from a + network interface). +:bro:id:`record_fields`: :bro:type:`function` Generates metadata about a record's fields. +:bro:id:`record_type_to_vector`: :bro:type:`function` Converts a record type name to a vector of strings, where each element is + the name of a record field. +:bro:id:`remask_addr`: :bro:type:`function` Takes some top bits (such as a subnet address) from one address and the other + bits (intra-subnet part) from a second address and merges them to get a new + address. +:bro:id:`rename`: :bro:type:`function` Renames a file from src_f to dst_f. +:bro:id:`request_remote_events`: :bro:type:`function` :bro:attr:`&deprecated` Subscribes to all events from a remote peer whose names match a given + pattern. +:bro:id:`request_remote_logs`: :bro:type:`function` :bro:attr:`&deprecated` Requests logs from a remote peer. +:bro:id:`request_remote_sync`: :bro:type:`function` :bro:attr:`&deprecated` Requests synchronization of IDs with a remote peer. +:bro:id:`rescan_state`: :bro:type:`function` Reads persistent state and populates the in-memory data structures + accordingly. +:bro:id:`resize`: :bro:type:`function` Resizes a vector. +:bro:id:`resume_state_updates`: :bro:type:`function` :bro:attr:`&deprecated` Resumes propagating :bro:attr:`&synchronized` accesses. +:bro:id:`rmdir`: :bro:type:`function` Removes a directory. +:bro:id:`rotate_file`: :bro:type:`function` Rotates a file. +:bro:id:`rotate_file_by_name`: :bro:type:`function` Rotates a file identified by its name. +:bro:id:`routing0_data_to_addrs`: :bro:type:`function` Converts the *data* field of :bro:type:`ip6_routing` records that have + *rtype* of 0 into a vector of addresses. +:bro:id:`same_object`: :bro:type:`function` Checks whether two objects reference the same internal object. +:bro:id:`send_capture_filter`: :bro:type:`function` :bro:attr:`&deprecated` Sends a capture filter to a remote peer. +:bro:id:`send_current_packet`: :bro:type:`function` :bro:attr:`&deprecated` Sends the currently processed packet to a remote peer. +:bro:id:`send_id`: :bro:type:`function` :bro:attr:`&deprecated` Sends a global identifier to a remote peer, which then might install it + locally. +:bro:id:`send_ping`: :bro:type:`function` :bro:attr:`&deprecated` Sends a ping event to a remote peer. +:bro:id:`send_state`: :bro:type:`function` Sends all persistent state to a remote peer. +:bro:id:`set_accept_state`: :bro:type:`function` :bro:attr:`&deprecated` Sets a boolean flag indicating whether Bro accepts state from a remote peer. +:bro:id:`set_buf`: :bro:type:`function` Alters the buffering behavior of a file. +:bro:id:`set_compression_level`: :bro:type:`function` :bro:attr:`&deprecated` Sets the compression level of the session with a remote peer. +:bro:id:`set_inactivity_timeout`: :bro:type:`function` Sets an individual inactivity timeout for a connection and thus + overrides the global inactivity timeout. +:bro:id:`set_record_packets`: :bro:type:`function` Controls whether packet contents belonging to a connection should be + recorded (when ``-w`` option is provided on the command line). +:bro:id:`setenv`: :bro:type:`function` Sets a system environment variable. +:bro:id:`sha1_hash`: :bro:type:`function` Computes the SHA1 hash value of the provided list of arguments. +:bro:id:`sha1_hash_finish`: :bro:type:`function` Returns the final SHA1 digest of an incremental hash computation. +:bro:id:`sha1_hash_init`: :bro:type:`function` Constructs an SHA1 handle to enable incremental hash computation. +:bro:id:`sha1_hash_update`: :bro:type:`function` Updates the SHA1 value associated with a given index. +:bro:id:`sha256_hash`: :bro:type:`function` Computes the SHA256 hash value of the provided list of arguments. +:bro:id:`sha256_hash_finish`: :bro:type:`function` Returns the final SHA256 digest of an incremental hash computation. +:bro:id:`sha256_hash_init`: :bro:type:`function` Constructs an SHA256 handle to enable incremental hash computation. +:bro:id:`sha256_hash_update`: :bro:type:`function` Updates the SHA256 value associated with a given index. +:bro:id:`skip_further_processing`: :bro:type:`function` Informs Bro that it should skip any further processing of the contents of + a given connection. +:bro:id:`sort`: :bro:type:`function` Sorts a vector in place. +:bro:id:`sqrt`: :bro:type:`function` Computes the square root of a :bro:type:`double`. +:bro:id:`srand`: :bro:type:`function` Sets the seed for subsequent :bro:id:`rand` calls. +:bro:id:`strftime`: :bro:type:`function` Formats a given time value according to a format string. +:bro:id:`string_to_pattern`: :bro:type:`function` Converts a :bro:type:`string` into a :bro:type:`pattern`. +:bro:id:`strptime`: :bro:type:`function` Parse a textual representation of a date/time value into a ``time`` type value. +:bro:id:`subnet_to_addr`: :bro:type:`function` Converts a :bro:type:`subnet` to an :bro:type:`addr` by + extracting the prefix. +:bro:id:`subnet_width`: :bro:type:`function` Returns the width of a :bro:type:`subnet`. +:bro:id:`suspend_processing`: :bro:type:`function` Stops Bro's packet processing. +:bro:id:`suspend_state_updates`: :bro:type:`function` :bro:attr:`&deprecated` Stops propagating :bro:attr:`&synchronized` accesses. +:bro:id:`syslog`: :bro:type:`function` Send a string to syslog. +:bro:id:`system`: :bro:type:`function` Invokes a command via the ``system`` function of the OS. +:bro:id:`system_env`: :bro:type:`function` Invokes a command via the ``system`` function of the OS with a prepared + environment. +:bro:id:`terminate`: :bro:type:`function` Gracefully shut down Bro by terminating outstanding processing. +:bro:id:`terminate_communication`: :bro:type:`function` :bro:attr:`&deprecated` Gracefully finishes communication by first making sure that all remaining + data from parent and child has been sent out. +:bro:id:`time_to_double`: :bro:type:`function` Converts a :bro:type:`time` value to a :bro:type:`double`. +:bro:id:`to_addr`: :bro:type:`function` Converts a :bro:type:`string` to an :bro:type:`addr`. +:bro:id:`to_count`: :bro:type:`function` Converts a :bro:type:`string` to a :bro:type:`count`. +:bro:id:`to_double`: :bro:type:`function` Converts a :bro:type:`string` to a :bro:type:`double`. +:bro:id:`to_int`: :bro:type:`function` Converts a :bro:type:`string` to an :bro:type:`int`. +:bro:id:`to_port`: :bro:type:`function` Converts a :bro:type:`string` to a :bro:type:`port`. +:bro:id:`to_subnet`: :bro:type:`function` Converts a :bro:type:`string` to a :bro:type:`subnet`. +:bro:id:`type_name`: :bro:type:`function` Returns the type name of an arbitrary Bro variable. +:bro:id:`uninstall_dst_addr_filter`: :bro:type:`function` Removes a destination address filter. +:bro:id:`uninstall_dst_net_filter`: :bro:type:`function` Removes a destination subnet filter. +:bro:id:`uninstall_src_addr_filter`: :bro:type:`function` Removes a source address filter. +:bro:id:`uninstall_src_net_filter`: :bro:type:`function` Removes a source subnet filter. +:bro:id:`unique_id`: :bro:type:`function` Creates an identifier that is unique with high probability. +:bro:id:`unique_id_from`: :bro:type:`function` Creates an identifier that is unique with high probability. +:bro:id:`unlink`: :bro:type:`function` Removes a file from a directory. +:bro:id:`uuid_to_string`: :bro:type:`function` Converts a bytes representation of a UUID into its string form. +:bro:id:`val_size`: :bro:type:`function` Returns the number of bytes that a value occupies in memory. +:bro:id:`write_file`: :bro:type:`function` Writes data to an open file. +=============================================================================== =============================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: active_file + + :Type: :bro:type:`function` (f: :bro:type:`file`) : :bro:type:`bool` + + Checks whether a given file is open. + + + :f: The file to check. + + + :returns: True if *f* is an open :bro:type:`file`. + + .. todo:: Rename to ``is_open``. + +.. bro:id:: addr_to_counts + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`index_vec` + + Converts an :bro:type:`addr` to an :bro:type:`index_vec`. + + + :a: The address to convert into a vector of counts. + + + :returns: A vector containing the host-order address representation, + four elements in size for IPv6 addresses, or one element for IPv4. + + .. bro:see:: counts_to_addr + +.. bro:id:: addr_to_ptr_name + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`string` + + Converts an IP address to a reverse pointer name. For example, + ``192.168.0.1`` to ``1.0.168.192.in-addr.arpa``. + + + :a: The IP address to convert to a reverse pointer name. + + + :returns: The reverse pointer representation of *a*. + + .. bro:see:: ptr_name_to_addr to_addr + +.. bro:id:: addr_to_subnet + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`subnet` + + Converts a :bro:type:`addr` to a :bro:type:`subnet`. + + + :a: The address to convert. + + + :returns: The address as a :bro:type:`subnet`. + + .. bro:see:: to_subnet + +.. bro:id:: all_set + + :Type: :bro:type:`function` (v: :bro:type:`any`) : :bro:type:`bool` + + Tests whether *all* elements of a boolean vector (``vector of bool``) are + true. + + + :v: The boolean vector instance. + + + :returns: True iff all elements in *v* are true. + + .. bro:see:: any_set + + .. note:: + + Missing elements count as false. + +.. bro:id:: anonymize_addr + + :Type: :bro:type:`function` (a: :bro:type:`addr`, cl: :bro:type:`IPAddrAnonymizationClass`) : :bro:type:`addr` + + Anonymizes an IP address. + + + :a: The address to anonymize. + + + :cl: The anonymization class, which can take on three different values: + + - ``ORIG_ADDR``: Tag *a* as an originator address. + + - ``RESP_ADDR``: Tag *a* as an responder address. + + - ``OTHER_ADDR``: Tag *a* as an arbitrary address. + + + :returns: An anonymized version of *a*. + + .. bro:see:: preserve_prefix preserve_subnet + + .. todo:: Currently dysfunctional. + +.. bro:id:: any_set + + :Type: :bro:type:`function` (v: :bro:type:`any`) : :bro:type:`bool` + + Tests whether a boolean vector (``vector of bool``) has *any* true + element. + + + :v: The boolean vector instance. + + + :returns: True if any element in *v* is true. + + .. bro:see:: all_set + +.. bro:id:: bro_is_terminating + + :Type: :bro:type:`function` () : :bro:type:`bool` + + Checks if Bro is terminating. + + + :returns: True if Bro is in the process of shutting down. + + .. bro:see:: terminate + +.. bro:id:: bro_version + + :Type: :bro:type:`function` () : :bro:type:`string` + + Returns the Bro version string. + + + :returns: Bro's version, e.g., 2.0-beta-47-debug. + +.. bro:id:: bytestring_to_count + + :Type: :bro:type:`function` (s: :bro:type:`string`, is_le: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional`) : :bro:type:`count` + + Converts a string of bytes to a :bro:type:`count`. + + + :s: A string of bytes containing the binary representation of the value. + + + :is_le: If true, *s* is assumed to be in little endian format, else it's big endian. + + + :returns: The value contained in *s*, or 0 if the conversion failed. + + +.. bro:id:: bytestring_to_double + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`double` + + Converts a string of bytes (in network byte order) to a :bro:type:`double`. + + + :s: A string of bytes containing the binary representation of a double value. + + + :returns: The double value contained in *s*, or 0 if the conversion + failed. + + +.. bro:id:: bytestring_to_hexstr + + :Type: :bro:type:`function` (bytestring: :bro:type:`string`) : :bro:type:`string` + + Converts a string of bytes into its hexadecimal representation. + For example, ``"04"`` would be converted to ``"3034"``. + + + :bytestring: The string of bytes. + + + :returns: The hexadecimal representation of *bytestring*. + + .. bro:see:: hexdump hexstr_to_bytestring + +.. bro:id:: calc_next_rotate + + :Type: :bro:type:`function` (i: :bro:type:`interval`) : :bro:type:`interval` + + Calculates the duration until the next time a file is to be rotated, based + on a given rotate interval. + + + :i: The rotate interval to base the calculation on. + + + :returns: The duration until the next file rotation time. + + .. bro:see:: rotate_file rotate_file_by_name + +.. bro:id:: capture_events + + :Type: :bro:type:`function` (filename: :bro:type:`string`) : :bro:type:`bool` + + Writes the binary event stream generated by the core to a given file. + Use the ``-x `` command line switch to replay saved events. + + + :filename: The name of the file which stores the events. + + + :returns: True if opening the target file succeeds. + + .. bro:see:: capture_state_updates + +.. bro:id:: capture_state_updates + + :Type: :bro:type:`function` (filename: :bro:type:`string`) : :bro:type:`bool` + + Writes state updates generated by :bro:attr:`&synchronized` variables to a + file. + + + :filename: The name of the file which stores the state updates. + + + :returns: True if opening the target file succeeds. + + .. bro:see:: capture_events + +.. bro:id:: cat + + :Type: :bro:type:`function` (...) : :bro:type:`string` + + Returns the concatenation of the string representation of its arguments. The + arguments can be of any type. For example, ``cat("foo", 3, T)`` returns + ``"foo3T"``. + + + :returns: A string concatentation of all arguments. + +.. bro:id:: cat_sep + + :Type: :bro:type:`function` (...) : :bro:type:`string` + + Concatenates all arguments, with a separator placed between each one. This + function is similar to :bro:id:`cat`, but places a separator between each + given argument. If any of the variable arguments is an empty string it is + replaced by a given default string instead. + + + :sep: The separator to place between each argument. + + + :def: The default string to use when an argument is the empty string. + + + :returns: A concatenation of all arguments with *sep* between each one and + empty strings replaced with *def*. + + .. bro:see:: cat string_cat cat_string_array cat_string_array_n + +.. bro:id:: check_subnet + + :Type: :bro:type:`function` (search: :bro:type:`subnet`, t: :bro:type:`any`) : :bro:type:`bool` + + Checks if a specific subnet is a member of a set/table[subnet]. + In contrast to the ``in`` operator, this performs an exact match, not + a longest prefix match. + + + :search: the subnet to search for. + + + :t: the set[subnet] or table[subnet]. + + + :returns: True if the exact subnet is a member, false otherwise. + +.. bro:id:: checkpoint_state + + :Type: :bro:type:`function` () : :bro:type:`bool` + + Flushes in-memory state tagged with the :bro:attr:`&persistent` attribute + to disk. The function writes the state to the file ``.state/state.bst`` in + the directory where Bro was started. + + + :returns: True on success. + + .. bro:see:: rescan_state + +.. bro:id:: clear_table + + :Type: :bro:type:`function` (v: :bro:type:`any`) : :bro:type:`any` + + Removes all elements from a set or table. + + + :v: The set or table + +.. bro:id:: close + + :Type: :bro:type:`function` (f: :bro:type:`file`) : :bro:type:`bool` + + Closes an open file and flushes any buffered content. + + + :f: A :bro:type:`file` handle to an open file. + + + :returns: True on success. + + .. bro:see:: active_file open open_for_append write_file + get_file_name set_buf flush_all mkdir enable_raw_output + rmdir unlink rename + +.. bro:id:: complete_handshake + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Signals a remote peer that the local Bro instance finished the initial + handshake. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :returns: True on success. + +.. bro:id:: connect + + :Type: :bro:type:`function` (ip: :bro:type:`addr`, zone_id: :bro:type:`string`, p: :bro:type:`port`, our_class: :bro:type:`string`, retry: :bro:type:`interval`, ssl: :bro:type:`bool`) : :bro:type:`count` + :Attributes: :bro:attr:`&deprecated` + + Establishes a connection to a remote Bro or Broccoli instance. + + + :ip: The IP address of the remote peer. + + + :zone_id: If *ip* is a non-global IPv6 address, a particular :rfc:`4007` + ``zone_id`` can given here. An empty string, ``""``, means + not to add any ``zone_id``. + + + :p: The port of the remote peer. + + + :our_class: If a non-empty string, then the remote (listening) peer checks it + against its class name in its peer table and terminates the + connection if they don't match. + + + :retry: If the connection fails, try to reconnect with the peer after this + time interval. + + + :ssl: If true, use SSL to encrypt the session. + + + :returns: A locally unique ID of the new peer. + + .. bro:see:: disconnect + listen + request_remote_events + request_remote_sync + request_remote_logs + request_remote_events + set_accept_state + set_compression_level + send_state + send_id + +.. bro:id:: connection_exists + + :Type: :bro:type:`function` (c: :bro:type:`conn_id`) : :bro:type:`bool` + + Checks whether a connection is (still) active. + + + :c: The connection id to check. + + + :returns: True if the connection identified by *c* exists. + + .. bro:see:: lookup_connection + +.. bro:id:: continue_processing + + :Type: :bro:type:`function` () : :bro:type:`any` + + Resumes Bro's packet processing. + + .. bro:see:: suspend_processing suspend_state_updates resume_state_updates + +.. bro:id:: convert_for_pattern + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`string` + + Escapes a string so that it becomes a valid :bro:type:`pattern` and can be + used with the :bro:id:`string_to_pattern`. Any character from the set + ``^$-:"\/|*+?.(){}[]`` is prefixed with a ``\``. + + + :s: The string to escape. + + + :returns: An escaped version of *s* that has the structure of a valid + :bro:type:`pattern`. + + .. bro:see:: merge_pattern string_to_pattern + + +.. bro:id:: count_to_port + + :Type: :bro:type:`function` (num: :bro:type:`count`, proto: :bro:type:`transport_proto`) : :bro:type:`port` + + Converts a :bro:type:`count` and ``transport_proto`` to a :bro:type:`port`. + + + :num: The :bro:type:`port` number. + + + :proto: The transport protocol. + + + :returns: The :bro:type:`count` *num* as :bro:type:`port`. + + .. bro:see:: port_to_count + +.. bro:id:: count_to_v4_addr + + :Type: :bro:type:`function` (ip: :bro:type:`count`) : :bro:type:`addr` + + Converts a :bro:type:`count` to an :bro:type:`addr`. + + + :ip: The :bro:type:`count` to convert. + + + :returns: The :bro:type:`count` *ip* as :bro:type:`addr`. + + .. bro:see:: raw_bytes_to_v4_addr to_addr to_subnet + +.. bro:id:: counts_to_addr + + :Type: :bro:type:`function` (v: :bro:type:`index_vec`) : :bro:type:`addr` + + Converts an :bro:type:`index_vec` to an :bro:type:`addr`. + + + :v: The vector containing host-order IP address representation, + one element for IPv4 addresses, four elements for IPv6 addresses. + + + :returns: An IP address. + + .. bro:see:: addr_to_counts + +.. bro:id:: current_analyzer + + :Type: :bro:type:`function` () : :bro:type:`count` + + Returns the ID of the analyzer which raised the current event. + + + :returns: The ID of the analyzer which raised the current event, or 0 if + none. + +.. bro:id:: current_time + + :Type: :bro:type:`function` () : :bro:type:`time` + + Returns the current wall-clock time. + + In general, you should use :bro:id:`network_time` instead + unless you are using Bro for non-networking uses (such as general + scripting; not particularly recommended), because otherwise your script + may behave very differently on live traffic versus played-back traffic + from a save file. + + + :returns: The wall-clock time. + + .. bro:see:: network_time + +.. bro:id:: decode_base64 + + :Type: :bro:type:`function` (s: :bro:type:`string`, a: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Decodes a Base64-encoded string. + + + :s: The Base64-encoded string. + + + :a: An optional custom alphabet. The empty string indicates the default + alphabet. If given, the string must consist of 64 unique characters. + + + :returns: The decoded version of *s*. + + .. bro:see:: decode_base64_conn encode_base64 + +.. bro:id:: decode_base64_conn + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, s: :bro:type:`string`, a: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Decodes a Base64-encoded string that was derived from processing a connection. + If an error is encountered decoding the string, that will be logged to + ``weird.log`` with the associated connection. + + + :cid: The identifier of the connection that the encoding originates from. + + + :s: The Base64-encoded string. + + + :a: An optional custom alphabet. The empty string indicates the default + alphabet. If given, the string must consist of 64 unique characters. + + + :returns: The decoded version of *s*. + + .. bro:see:: decode_base64 + +.. bro:id:: decode_base64_custom + + :Type: :bro:type:`function` (s: :bro:type:`string`, a: :bro:type:`string`) : :bro:type:`string` + :Attributes: :bro:attr:`&deprecated` + + Decodes a Base64-encoded string with a custom alphabet. + + + :s: The Base64-encoded string. + + + :a: The custom alphabet. The string must consist of 64 unique characters. + The empty string indicates the default alphabet. + + + :returns: The decoded version of *s*. + + .. bro:see:: decode_base64 decode_base64_conn + +.. bro:id:: disable_analyzer + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, aid: :bro:type:`count`, err_if_no_conn: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional`) : :bro:type:`bool` + + Disables the analyzer which raised the current event (if the analyzer + belongs to the given connection). + + + :cid: The connection identifier. + + + :aid: The analyzer ID. + + + :returns: True if the connection identified by *cid* exists and has analyzer + *aid*. + + .. bro:see:: Analyzer::schedule_analyzer Analyzer::name + +.. bro:id:: disable_print_hook + + :Type: :bro:type:`function` (f: :bro:type:`file`) : :bro:type:`any` + + Disables sending :bro:id:`print_hook` events to remote peers for a given + file. In a + distributed setup, communicating Bro instances generate the event + :bro:id:`print_hook` for each print statement and send it to the remote + side. When disabled for a particular file, these events will not be + propagated to other peers. + + + :f: The file to disable :bro:id:`print_hook` events for. + + .. bro:see:: enable_raw_output + +.. bro:id:: disconnect + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Terminate the connection with a peer. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :returns: True on success. + + .. bro:see:: connect listen + +.. bro:id:: do_profiling + + :Type: :bro:type:`function` () : :bro:type:`any` + + Enables detailed collection of profiling statistics. Statistics include + CPU/memory usage, connections, TCP states/reassembler, DNS lookups, + timers, and script-level state. The script variable :bro:id:`profiling_file` + holds the name of the file. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + +.. bro:id:: double_to_count + + :Type: :bro:type:`function` (d: :bro:type:`double`) : :bro:type:`count` + + Converts a :bro:type:`double` to a :bro:type:`count`. + + + :d: The :bro:type:`double` to convert. + + + :returns: The :bro:type:`double` *d* as unsigned integer, or 0 if *d* < 0.0. + + .. bro:see:: double_to_time + +.. bro:id:: double_to_interval + + :Type: :bro:type:`function` (d: :bro:type:`double`) : :bro:type:`interval` + + Converts a :bro:type:`double` to an :bro:type:`interval`. + + + :d: The :bro:type:`double` to convert. + + + :returns: The :bro:type:`double` *d* as :bro:type:`interval`. + + .. bro:see:: interval_to_double + +.. bro:id:: double_to_time + + :Type: :bro:type:`function` (d: :bro:type:`double`) : :bro:type:`time` + + Converts a :bro:type:`double` value to a :bro:type:`time`. + + + :d: The :bro:type:`double` to convert. + + + :returns: The :bro:type:`double` value *d* as :bro:type:`time`. + + .. bro:see:: time_to_double double_to_count + +.. bro:id:: dump_current_packet + + :Type: :bro:type:`function` (file_name: :bro:type:`string`) : :bro:type:`bool` + + Writes the current packet to a file. + + + :file_name: The name of the file to write the packet to. + + + :returns: True on success. + + .. bro:see:: dump_packet get_current_packet send_current_packet + +.. bro:id:: dump_packet + + :Type: :bro:type:`function` (pkt: :bro:type:`pcap_packet`, file_name: :bro:type:`string`) : :bro:type:`bool` + + Writes a given packet to a file. + + + :pkt: The PCAP packet. + + + :file_name: The name of the file to write *pkt* to. + + + :returns: True on success + + .. bro:see:: get_current_packet dump_current_packet send_current_packet + +.. bro:id:: dump_rule_stats + + :Type: :bro:type:`function` (f: :bro:type:`file`) : :bro:type:`bool` + + Write rule matcher statistics (DFA states, transitions, memory usage, cache + hits/misses) to a file. + + + :f: The file to write to. + + + :returns: True (unconditionally). + + .. bro:see:: get_matcher_stats + +.. bro:id:: enable_communication + + :Type: :bro:type:`function` () : :bro:type:`any` + :Attributes: :bro:attr:`&deprecated` + + Enables the communication system. By default, the communication is off until + explicitly enabled, and all other calls to communication-related functions + will be ignored until done so. + +.. bro:id:: enable_raw_output + + :Type: :bro:type:`function` (f: :bro:type:`file`) : :bro:type:`any` + + Prevents escaping of non-ASCII characters when writing to a file. + This function is equivalent to :bro:attr:`&raw_output`. + + + :f: The file to disable raw output for. + + .. bro:see:: disable_print_hook + +.. bro:id:: encode_base64 + + :Type: :bro:type:`function` (s: :bro:type:`string`, a: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Encodes a Base64-encoded string. + + + :s: The string to encode. + + + :a: An optional custom alphabet. The empty string indicates the default + alphabet. If given, the string must consist of 64 unique characters. + + + :returns: The encoded version of *s*. + + .. bro:see:: decode_base64 + +.. bro:id:: encode_base64_custom + + :Type: :bro:type:`function` (s: :bro:type:`string`, a: :bro:type:`string`) : :bro:type:`string` + :Attributes: :bro:attr:`&deprecated` + + Encodes a Base64-encoded string with a custom alphabet. + + + :s: The string to encode. + + + :a: The custom alphabet. The string must consist of 64 unique + characters. The empty string indicates the default alphabet. + + + :returns: The encoded version of *s*. + + .. bro:see:: encode_base64 + +.. bro:id:: entropy_test_add + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of entropy, data: :bro:type:`string`) : :bro:type:`bool` + + Adds data to an incremental entropy calculation. + + + :handle: The opaque handle representing the entropy calculation state. + + + :data: The data to add to the entropy calculation. + + + :returns: True on success. + + .. bro:see:: find_entropy entropy_test_add entropy_test_finish + +.. bro:id:: entropy_test_finish + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of entropy) : :bro:type:`entropy_test_result` + + Finishes an incremental entropy calculation. Before using this function, + one needs to obtain an opaque handle with :bro:id:`entropy_test_init` and + add data to it via :bro:id:`entropy_test_add`. + + + :handle: The opaque handle representing the entropy calculation state. + + + :returns: The result of the entropy test. See :bro:id:`find_entropy` for a + description of the individual components. + + .. bro:see:: find_entropy entropy_test_init entropy_test_add + +.. bro:id:: entropy_test_init + + :Type: :bro:type:`function` () : :bro:type:`opaque` of entropy + + Initializes data structures for incremental entropy calculation. + + + :returns: An opaque handle to be used in subsequent operations. + + .. bro:see:: find_entropy entropy_test_add entropy_test_finish + +.. bro:id:: enum_to_int + + :Type: :bro:type:`function` (e: :bro:type:`any`) : :bro:type:`int` + + Converts an :bro:type:`enum` to an :bro:type:`int`. + + + :e: The :bro:type:`enum` to convert. + + + :returns: The :bro:type:`int` value that corresponds to the :bro:type:`enum`. + +.. bro:id:: exit + + :Type: :bro:type:`function` (code: :bro:type:`int`) : :bro:type:`any` + + Shuts down the Bro process immediately. + + + :code: The exit code to return with. + + .. bro:see:: terminate + +.. bro:id:: exp + + :Type: :bro:type:`function` (d: :bro:type:`double`) : :bro:type:`double` + + Computes the exponential function. + + + :d: The argument to the exponential function. + + + :returns: *e* to the power of *d*. + + .. bro:see:: floor sqrt ln log10 + +.. bro:id:: file_magic + + :Type: :bro:type:`function` (data: :bro:type:`string`) : :bro:type:`mime_matches` + + Determines the MIME type of a piece of data using Bro's file magic + signatures. + + + :data: The data for which to find matching MIME types. + + + :returns: All matching signatures, in order of strength. + + .. bro:see:: identify_data + +.. bro:id:: file_mode + + :Type: :bro:type:`function` (mode: :bro:type:`count`) : :bro:type:`string` + + Converts UNIX file permissions given by a mode to an ASCII string. + + + :mode: The permissions (an octal number like 0644 converted to decimal). + + + :returns: A string representation of *mode* in the format + ``rw[xsS]rw[xsS]rw[xtT]``. + +.. bro:id:: file_size + + :Type: :bro:type:`function` (f: :bro:type:`string`) : :bro:type:`double` + + Returns the size of a given file. + + + :f: The name of the file whose size to lookup. + + + :returns: The size of *f* in bytes. + +.. bro:id:: filter_subnet_table + + :Type: :bro:type:`function` (search: :bro:type:`subnet`, t: :bro:type:`any`) : :bro:type:`any` + + For a set[subnet]/table[subnet], create a new table that contains all entries + that contain a given subnet. + + + :search: the subnet to search for. + + + :t: the set[subnet] or table[subnet]. + + + :returns: A new table that contains all the entries that cover the subnet searched for. + +.. bro:id:: find_entropy + + :Type: :bro:type:`function` (data: :bro:type:`string`) : :bro:type:`entropy_test_result` + + Performs an entropy test on the given data. + See http://www.fourmilab.ch/random. + + + :data: The data to compute the entropy for. + + + :returns: The result of the entropy test, which contains the following + fields. + + - ``entropy``: The information density expressed as a number of + bits per character. + + - ``chi_square``: The chi-square test value expressed as an + absolute number and a percentage which indicates how + frequently a truly random sequence would exceed the value + calculated, i.e., the degree to which the sequence tested is + suspected of being non-random. + + If the percentage is greater than 99% or less than 1%, the + sequence is almost certainly not random. If the percentage is + between 99% and 95% or between 1% and 5%, the sequence is + suspect. Percentages between 90\% and 95\% and 5\% and 10\% + indicate the sequence is "almost suspect." + + - ``mean``: The arithmetic mean of all the bytes. If the data + are close to random, it should be around 127.5. + + - ``monte_carlo_pi``: Each successive sequence of six bytes is + used as 24-bit *x* and *y* coordinates within a square. If + the distance of the randomly-generated point is less than the + radius of a circle inscribed within the square, the six-byte + sequence is considered a "hit." The percentage of hits can + be used to calculate the value of pi. For very large streams + the value will approach the correct value of pi if the + sequence is close to random. + + - ``serial_correlation``: This quantity measures the extent to + which each byte in the file depends upon the previous byte. + For random sequences this value will be close to zero. + + .. bro:see:: entropy_test_init entropy_test_add entropy_test_finish + +.. bro:id:: floor + + :Type: :bro:type:`function` (d: :bro:type:`double`) : :bro:type:`double` + + Computes the greatest integer less than the given :bro:type:`double` value. + For example, ``floor(3.14)`` returns ``3.0``, and ``floor(-3.14)`` + returns ``-4.0``. + + + :d: The :bro:type:`double` to manipulate. + + + :returns: The next lowest integer of *d* as :bro:type:`double`. + + .. bro:see:: sqrt exp ln log10 + +.. bro:id:: flush_all + + :Type: :bro:type:`function` () : :bro:type:`bool` + + Flushes all open files to disk. + + + :returns: True on success. + + .. bro:see:: active_file open open_for_append close + get_file_name write_file set_buf mkdir enable_raw_output + rmdir unlink rename + +.. bro:id:: fmt + + :Type: :bro:type:`function` (...) : :bro:type:`string` + + Produces a formatted string à la ``printf``. The first argument is the + *format string* and specifies how subsequent arguments are converted for + output. It is composed of zero or more directives: ordinary characters (not + ``%``), which are copied unchanged to the output, and conversion + specifications, each of which fetches zero or more subsequent arguments. + Conversion specifications begin with ``%`` and the arguments must properly + correspond to the specifier. After the ``%``, the following characters + may appear in sequence: + + - ``%``: Literal ``%`` + + - ``-``: Left-align field + + - ``[0-9]+``: The field width (< 128) + + - ``.``: Precision of floating point specifiers ``[efg]`` (< 128) + + - ``[DTdxsefg]``: Format specifier + + - ``[DT]``: ISO timestamp with microsecond precision + + - ``d``: Signed/Unsigned integer (using C-style ``%lld``/``%llu`` + for ``int``/``count``) + + - ``x``: Unsigned hexadecimal (using C-style ``%llx``); + addresses/ports are converted to host-byte order + + - ``s``: String (byte values less than 32 or greater than 126 + will be escaped) + + - ``[efg]``: Double + + + :returns: Returns the formatted string. Given no arguments, :bro:id:`fmt` + returns an empty string. Given no format string or the wrong + number of additional arguments for the given format specifier, + :bro:id:`fmt` generates a run-time error. + + .. bro:see:: cat cat_sep string_cat cat_string_array cat_string_array_n + +.. bro:id:: fnv1a32 + + :Type: :bro:type:`function` (input: :bro:type:`any`) : :bro:type:`count` + + Returns 32-bit digest of arbitrary input values using FNV-1a hash algorithm. + See ``_. + + + :input: The desired input value to hash. + + + :returns: The hashed value. + + .. bro:see:: hrw_weight + +.. bro:id:: get_conn_transport_proto + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`) : :bro:type:`transport_proto` + + Extracts the transport protocol from a connection. + + + :cid: The connection identifier. + + + :returns: The transport protocol of the connection identified by *cid*. + + .. bro:see:: get_port_transport_proto + get_orig_seq get_resp_seq + +.. bro:id:: get_current_packet + + :Type: :bro:type:`function` () : :bro:type:`pcap_packet` + + Returns the currently processed PCAP packet. + + + :returns: The currently processed packet, which is a record + containing the timestamp, ``snaplen``, and packet data. + + .. bro:see:: dump_current_packet dump_packet send_current_packet + +.. bro:id:: get_current_packet_header + + :Type: :bro:type:`function` () : :bro:type:`raw_pkt_hdr` + + Function to get the raw headers of the currently processed packet. + + + :returns: The :bro:type:`raw_pkt_hdr` record containing the Layer 2, 3 and + 4 headers of the currently processed packet. + + .. bro:see:: raw_pkt_hdr get_current_packet + +.. bro:id:: get_event_peer + + :Type: :bro:type:`function` () : :bro:type:`event_peer` + :Attributes: :bro:attr:`&deprecated` + + Returns the peer who generated the last event. + + Note, this function is deprecated. It works correctly only for local events and + events received through the legacy communication system. It does *not* work for + events received through Broker and will report an error in that case. + + + :returns: The ID of the peer who generated the last event. + + .. bro:see:: get_local_event_peer + +.. bro:id:: get_file_name + + :Type: :bro:type:`function` (f: :bro:type:`file`) : :bro:type:`string` + + Gets the filename associated with a file handle. + + + :f: The file handle to inquire the name for. + + + :returns: The filename associated with *f*. + + .. bro:see:: open + +.. bro:id:: get_local_event_peer + + :Type: :bro:type:`function` () : :bro:type:`event_peer` + :Attributes: :bro:attr:`&deprecated` + + Returns the local peer ID. + + + :returns: The peer ID of the local Bro instance. + + .. bro:see:: get_event_peer + +.. bro:id:: get_port_transport_proto + + :Type: :bro:type:`function` (p: :bro:type:`port`) : :bro:type:`transport_proto` + + Extracts the transport protocol from a :bro:type:`port`. + + + :p: The port. + + + :returns: The transport protocol of the port *p*. + + .. bro:see:: get_conn_transport_proto + get_orig_seq get_resp_seq + +.. bro:id:: getenv + + :Type: :bro:type:`function` (var: :bro:type:`string`) : :bro:type:`string` + + Returns a system environment variable. + + + :var: The name of the variable whose value to request. + + + :returns: The system environment variable identified by *var*, or an empty + string if it is not defined. + + .. bro:see:: setenv + +.. bro:id:: gethostname + + :Type: :bro:type:`function` () : :bro:type:`string` + + Returns the hostname of the machine Bro runs on. + + + :returns: The hostname of the machine Bro runs on. + +.. bro:id:: getpid + + :Type: :bro:type:`function` () : :bro:type:`count` + + Returns Bro's process ID. + + + :returns: Bro's process ID. + +.. bro:id:: global_ids + + :Type: :bro:type:`function` () : :bro:type:`id_table` + + Generates a table with information about all global identifiers. The table + value is a record containing the type name of the identifier, whether it is + exported, a constant, an enum constant, redefinable, and its value (if it + has one). + + + :returns: A table that maps identifier names to information about them. + + .. bro:see:: global_sizes + +.. bro:id:: global_sizes + + :Type: :bro:type:`function` () : :bro:type:`var_sizes` + + Generates a table of the size of all global variables. The table index is + the variable name and the value is the variable size in bytes. + + + :returns: A table that maps variable names to their sizes. + + .. bro:see:: global_ids + +.. bro:id:: haversine_distance + + :Type: :bro:type:`function` (lat1: :bro:type:`double`, long1: :bro:type:`double`, lat2: :bro:type:`double`, long2: :bro:type:`double`) : :bro:type:`double` + + Calculates distance between two geographic locations using the haversine + formula. Latitudes and longitudes must be given in degrees, where southern + hemispere latitudes are negative and western hemisphere longitudes are + negative. + + + :lat1: Latitude (in degrees) of location 1. + + + :long1: Longitude (in degrees) of location 1. + + + :lat2: Latitude (in degrees) of location 2. + + + :long2: Longitude (in degrees) of location 2. + + + :returns: Distance in miles. + + .. bro:see:: haversine_distance_ip + +.. bro:id:: hexstr_to_bytestring + + :Type: :bro:type:`function` (hexstr: :bro:type:`string`) : :bro:type:`string` + + Converts a hex-string into its binary representation. + For example, ``"3034"`` would be converted to ``"04"``. + + The input string is assumed to contain an even number of hexadecimal digits + (0-9, a-f, or A-F), otherwise behavior is undefined. + + + :hexstr: The hexadecimal string representation. + + + :returns: The binary representation of *hexstr*. + + .. bro:see:: hexdump bytestring_to_hexstr + +.. bro:id:: hrw_weight + + :Type: :bro:type:`function` (key_digest: :bro:type:`count`, site_id: :bro:type:`count`) : :bro:type:`count` + + Calculates a weight value for use in a Rendezvous Hashing algorithm. + See ``_. + The weight function used is the one recommended in the original + + :paper: ``_. + + + :key_digest: A 32-bit digest of a key. E.g. use :bro:see:`fnv1a32` to + produce this. + + + :site_id: A 32-bit site/node identifier. + + + :returns: The weight value for the key/site pair. + + .. bro:see:: fnv1a32 + +.. bro:id:: identify_data + + :Type: :bro:type:`function` (data: :bro:type:`string`, return_mime: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional`) : :bro:type:`string` + + Determines the MIME type of a piece of data using Bro's file magic + signatures. + + + :data: The data to find the MIME type for. + + + :return_mime: Deprecated argument; does nothing, except emit a warning + when false. + + + :returns: The MIME type of *data*, or "" if there was an error + or no match. This is the strongest signature match. + + .. bro:see:: file_magic + +.. bro:id:: install_dst_addr_filter + + :Type: :bro:type:`function` (ip: :bro:type:`addr`, tcp_flags: :bro:type:`count`, prob: :bro:type:`double`) : :bro:type:`bool` + + Installs a filter to drop packets destined to a given IP address with + a certain probability if none of a given set of TCP flags are set. + Note that for IPv6 packets with a routing type header and non-zero + segments left, this filters out against the final destination of the + packet according to the routing extension header. + + + :ip: Drop packets to this IP address. + + + :tcp_flags: If none of these TCP flags are set, drop packets to *ip* with + probability *prob*. + + + :prob: The probability [0.0, 1.0] used to drop packets to *ip*. + + + :returns: True (unconditionally). + + .. bro:see:: Pcap::precompile_pcap_filter + Pcap::install_pcap_filter + install_src_addr_filter + install_src_net_filter + uninstall_src_addr_filter + uninstall_src_net_filter + install_dst_net_filter + uninstall_dst_addr_filter + uninstall_dst_net_filter + Pcap::error + + .. todo:: The return value should be changed to any. + +.. bro:id:: install_dst_net_filter + + :Type: :bro:type:`function` (snet: :bro:type:`subnet`, tcp_flags: :bro:type:`count`, prob: :bro:type:`double`) : :bro:type:`bool` + + Installs a filter to drop packets destined to a given subnet with + a certain probability if none of a given set of TCP flags are set. + + + :snet: Drop packets to this subnet. + + + :tcp_flags: If none of these TCP flags are set, drop packets to *snet* with + probability *prob*. + + + :prob: The probability [0.0, 1.0] used to drop packets to *snet*. + + + :returns: True (unconditionally). + + .. bro:see:: Pcap::precompile_pcap_filter + Pcap::install_pcap_filter + install_src_addr_filter + install_src_net_filter + uninstall_src_addr_filter + uninstall_src_net_filter + install_dst_addr_filter + uninstall_dst_addr_filter + uninstall_dst_net_filter + Pcap::error + + .. todo:: The return value should be changed to any. + +.. bro:id:: install_src_addr_filter + + :Type: :bro:type:`function` (ip: :bro:type:`addr`, tcp_flags: :bro:type:`count`, prob: :bro:type:`double`) : :bro:type:`bool` + + Installs a filter to drop packets from a given IP source address with + a certain probability if none of a given set of TCP flags are set. + Note that for IPv6 packets with a Destination options header that has + the Home Address option, this filters out against that home address. + + + :ip: The IP address to drop. + + + :tcp_flags: If none of these TCP flags are set, drop packets from *ip* with + probability *prob*. + + + :prob: The probability [0.0, 1.0] used to drop packets from *ip*. + + + :returns: True (unconditionally). + + .. bro:see:: Pcap::precompile_pcap_filter + Pcap::install_pcap_filter + install_src_net_filter + uninstall_src_addr_filter + uninstall_src_net_filter + install_dst_addr_filter + install_dst_net_filter + uninstall_dst_addr_filter + uninstall_dst_net_filter + Pcap::error + + .. todo:: The return value should be changed to any. + +.. bro:id:: install_src_net_filter + + :Type: :bro:type:`function` (snet: :bro:type:`subnet`, tcp_flags: :bro:type:`count`, prob: :bro:type:`double`) : :bro:type:`bool` + + Installs a filter to drop packets originating from a given subnet with + a certain probability if none of a given set of TCP flags are set. + + + :snet: The subnet to drop packets from. + + + :tcp_flags: If none of these TCP flags are set, drop packets from *snet* with + probability *prob*. + + + :prob: The probability [0.0, 1.0] used to drop packets from *snet*. + + + :returns: True (unconditionally). + + .. bro:see:: Pcap::precompile_pcap_filter + Pcap::install_pcap_filter + install_src_addr_filter + uninstall_src_addr_filter + uninstall_src_net_filter + install_dst_addr_filter + install_dst_net_filter + uninstall_dst_addr_filter + uninstall_dst_net_filter + Pcap::error + + .. todo:: The return value should be changed to any. + +.. bro:id:: int_to_count + + :Type: :bro:type:`function` (n: :bro:type:`int`) : :bro:type:`count` + + Converts a (positive) :bro:type:`int` to a :bro:type:`count`. + + + :n: The :bro:type:`int` to convert. + + + :returns: The :bro:type:`int` *n* as unsigned integer, or 0 if *n* < 0. + +.. bro:id:: interval_to_double + + :Type: :bro:type:`function` (i: :bro:type:`interval`) : :bro:type:`double` + + Converts an :bro:type:`interval` to a :bro:type:`double`. + + + :i: The :bro:type:`interval` to convert. + + + :returns: The :bro:type:`interval` *i* as :bro:type:`double`. + + .. bro:see:: double_to_interval + +.. bro:id:: is_external_connection + + :Type: :bro:type:`function` (c: :bro:type:`connection`) : :bro:type:`bool` + + Determines whether a connection has been received externally. For example, + Broccoli or the Time Machine can send packets to Bro via a mechanism that is + one step lower than sending events. This function checks whether the packets + of a connection stem from one of these external *packet sources*. + + + :c: The connection to test. + + + :returns: True if *c* has been received externally. + +.. bro:id:: is_icmp_port + + :Type: :bro:type:`function` (p: :bro:type:`port`) : :bro:type:`bool` + + Checks whether a given :bro:type:`port` has ICMP as transport protocol. + + + :p: The :bro:type:`port` to check. + + + :returns: True iff *p* is an ICMP port. + + .. bro:see:: is_tcp_port is_udp_port + +.. bro:id:: is_local_interface + + :Type: :bro:type:`function` (ip: :bro:type:`addr`) : :bro:type:`bool` + + Checks whether a given IP address belongs to a local interface. + + + :ip: The IP address to check. + + + :returns: True if *ip* belongs to a local interface. + +.. bro:id:: is_remote_event + + :Type: :bro:type:`function` () : :bro:type:`bool` + + Checks whether the last raised event came from a remote peer. + + + :returns: True if the last raised event came from a remote peer. + +.. bro:id:: is_tcp_port + + :Type: :bro:type:`function` (p: :bro:type:`port`) : :bro:type:`bool` + + Checks whether a given :bro:type:`port` has TCP as transport protocol. + + + :p: The :bro:type:`port` to check. + + + :returns: True iff *p* is a TCP port. + + .. bro:see:: is_udp_port is_icmp_port + +.. bro:id:: is_udp_port + + :Type: :bro:type:`function` (p: :bro:type:`port`) : :bro:type:`bool` + + Checks whether a given :bro:type:`port` has UDP as transport protocol. + + + :p: The :bro:type:`port` to check. + + + :returns: True iff *p* is a UDP port. + + .. bro:see:: is_icmp_port is_tcp_port + +.. bro:id:: is_v4_addr + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`bool` + + Returns whether an address is IPv4 or not. + + + :a: the address to check. + + + :returns: true if *a* is an IPv4 address, else false. + +.. bro:id:: is_v4_subnet + + :Type: :bro:type:`function` (s: :bro:type:`subnet`) : :bro:type:`bool` + + Returns whether a subnet specification is IPv4 or not. + + + :s: the subnet to check. + + + :returns: true if *s* is an IPv4 subnet, else false. + +.. bro:id:: is_v6_addr + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`bool` + + Returns whether an address is IPv6 or not. + + + :a: the address to check. + + + :returns: true if *a* is an IPv6 address, else false. + +.. bro:id:: is_v6_subnet + + :Type: :bro:type:`function` (s: :bro:type:`subnet`) : :bro:type:`bool` + + Returns whether a subnet specification is IPv6 or not. + + + :s: the subnet to check. + + + :returns: true if *s* is an IPv6 subnet, else false. + +.. bro:id:: listen + + :Type: :bro:type:`function` (ip: :bro:type:`addr`, p: :bro:type:`port`, ssl: :bro:type:`bool`, ipv6: :bro:type:`bool`, zone_id: :bro:type:`string`, retry_interval: :bro:type:`interval`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Listens on a given IP address and port for remote connections. + + + :ip: The IP address to bind to. + + + :p: The TCP port to listen on. + + + :ssl: If true, Bro uses SSL to encrypt the session. + + + :ipv6: If true, enable listening on IPv6 addresses. + + + :zone_id: If *ip* is a non-global IPv6 address, a particular :rfc:`4007` + ``zone_id`` can given here. An empty string, ``""``, means + not to add any ``zone_id``. + + + :retry_interval: If address *ip* is found to be already in use, this is + the interval at which to automatically retry binding. + + + :returns: True on success. + + .. bro:see:: connect disconnect + +.. bro:id:: ln + + :Type: :bro:type:`function` (d: :bro:type:`double`) : :bro:type:`double` + + Computes the natural logarithm of a number. + + + :d: The argument to the logarithm. + + + :returns: The natural logarithm of *d*. + + .. bro:see:: exp floor sqrt log10 + +.. bro:id:: log10 + + :Type: :bro:type:`function` (d: :bro:type:`double`) : :bro:type:`double` + + Computes the common logarithm of a number. + + + :d: The argument to the logarithm. + + + :returns: The common logarithm of *d*. + + .. bro:see:: exp floor sqrt ln + +.. bro:id:: lookup_ID + + :Type: :bro:type:`function` (id: :bro:type:`string`) : :bro:type:`any` + + Returns the value of a global identifier. + + + :id: The global identifier. + + + :returns: The value of *id*. If *id* does not describe a valid identifier, + the string ``""`` or ``""`` is returned. + +.. bro:id:: lookup_addr + + :Type: :bro:type:`function` (host: :bro:type:`addr`) : :bro:type:`string` + + Issues an asynchronous reverse DNS lookup and delays the function result. + This function can therefore only be called inside a ``when`` condition, + e.g., ``when ( local host = lookup_addr(10.0.0.1) ) { f(host); }``. + + + :host: The IP address to lookup. + + + :returns: The DNS name of *host*. + + .. bro:see:: lookup_hostname + +.. bro:id:: lookup_asn + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`count` + + Performs an ASN lookup of an IP address. + Requires Bro to be built with ``libmaxminddb``. + + + :a: The IP address to lookup. + + + :returns: The number of the ASN that contains *a*. + + .. bro:see:: lookup_location + +.. bro:id:: lookup_connection + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`) : :bro:type:`connection` + + Returns the :bro:type:`connection` record for a given connection identifier. + + + :cid: The connection ID. + + + :returns: The :bro:type:`connection` record for *cid*. If *cid* does not point + to an existing connection, the function generates a run-time error + and returns a dummy value. + + .. bro:see:: connection_exists + +.. bro:id:: lookup_hostname + + :Type: :bro:type:`function` (host: :bro:type:`string`) : :bro:type:`addr_set` + + Issues an asynchronous DNS lookup and delays the function result. + This function can therefore only be called inside a ``when`` condition, + e.g., ``when ( local h = lookup_hostname("www.bro.org") ) { f(h); }``. + + + :host: The hostname to lookup. + + + :returns: A set of DNS A and AAAA records associated with *host*. + + .. bro:see:: lookup_addr + +.. bro:id:: lookup_hostname_txt + + :Type: :bro:type:`function` (host: :bro:type:`string`) : :bro:type:`string` + + Issues an asynchronous TEXT DNS lookup and delays the function result. + This function can therefore only be called inside a ``when`` condition, + e.g., ``when ( local h = lookup_hostname_txt("www.bro.org") ) { f(h); }``. + + + :host: The hostname to lookup. + + + :returns: The DNS TXT record associated with *host*. + + .. bro:see:: lookup_hostname + +.. bro:id:: lookup_location + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`geo_location` + + Performs a geo-lookup of an IP address. + Requires Bro to be built with ``libmaxminddb``. + + + :a: The IP address to lookup. + + + :returns: A record with country, region, city, latitude, and longitude. + + .. bro:see:: lookup_asn + +.. bro:id:: mask_addr + + :Type: :bro:type:`function` (a: :bro:type:`addr`, top_bits_to_keep: :bro:type:`count`) : :bro:type:`subnet` + + Masks an address down to the number of given upper bits. For example, + ``mask_addr(1.2.3.4, 18)`` returns ``1.2.0.0``. + + + :a: The address to mask. + + + :top_bits_to_keep: The number of top bits to keep in *a*; must be greater + than 0 and less than 33 for IPv4, or 129 for IPv6. + + + :returns: The address *a* masked down to *top_bits_to_keep* bits. + + .. bro:see:: remask_addr + +.. bro:id:: match_signatures + + :Type: :bro:type:`function` (c: :bro:type:`connection`, pattern_type: :bro:type:`int`, s: :bro:type:`string`, bol: :bro:type:`bool`, eol: :bro:type:`bool`, from_orig: :bro:type:`bool`, clear: :bro:type:`bool`) : :bro:type:`bool` + + Manually triggers the signature engine for a given connection. + This is an internal function. + +.. bro:id:: matching_subnets + + :Type: :bro:type:`function` (search: :bro:type:`subnet`, t: :bro:type:`any`) : :bro:type:`subnet_vec` + + Gets all subnets that contain a given subnet from a set/table[subnet]. + + + :search: the subnet to search for. + + + :t: the set[subnet] or table[subnet]. + + + :returns: All the keys of the set or table that cover the subnet searched for. + +.. bro:id:: md5_hash + + :Type: :bro:type:`function` (...) : :bro:type:`string` + + Computes the MD5 hash value of the provided list of arguments. + + + :returns: The MD5 hash value of the concatenated arguments. + + .. bro:see:: md5_hmac md5_hash_init md5_hash_update md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_update sha256_hash_finish + + .. note:: + + This function performs a one-shot computation of its arguments. + For incremental hash computation, see :bro:id:`md5_hash_init` and + friends. + +.. bro:id:: md5_hash_finish + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of md5) : :bro:type:`string` + + Returns the final MD5 digest of an incremental hash computation. + + + :handle: The opaque handle associated with this hash computation. + + + :returns: The hash value associated with the computation of *handle*. + + .. bro:see:: md5_hmac md5_hash md5_hash_init md5_hash_update + sha1_hash sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_update sha256_hash_finish + +.. bro:id:: md5_hash_init + + :Type: :bro:type:`function` () : :bro:type:`opaque` of md5 + + Constructs an MD5 handle to enable incremental hash computation. You can + feed data to the returned opaque value with :bro:id:`md5_hash_update` and + eventually need to call :bro:id:`md5_hash_finish` to finish the computation + and get the hash digest. + + For example, when computing incremental MD5 values of transferred files in + multiple concurrent HTTP connections, one keeps an optional handle in the + HTTP session record. Then, one would call + ``c$http$md5_handle = md5_hash_init()`` once before invoking + ``md5_hash_update(c$http$md5_handle, some_more_data)`` in the + :bro:id:`http_entity_data` event handler. When all data has arrived, a call + to :bro:id:`md5_hash_finish` returns the final hash value. + + + :returns: The opaque handle associated with this hash computation. + + .. bro:see:: md5_hmac md5_hash md5_hash_update md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_update sha256_hash_finish + +.. bro:id:: md5_hash_update + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of md5, data: :bro:type:`string`) : :bro:type:`bool` + + Updates the MD5 value associated with a given index. It is required to + call :bro:id:`md5_hash_init` once before calling this + function. + + + :handle: The opaque handle associated with this hash computation. + + + :data: The data to add to the hash computation. + + + :returns: True on success. + + .. bro:see:: md5_hmac md5_hash md5_hash_init md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_update sha256_hash_finish + +.. bro:id:: md5_hmac + + :Type: :bro:type:`function` (...) : :bro:type:`string` + + Computes an HMAC-MD5 hash value of the provided list of arguments. The HMAC + secret key is generated from available entropy when Bro starts up, or it can + be specified for repeatability using the ``-K`` command line flag. + + + :returns: The HMAC-MD5 hash value of the concatenated arguments. + + .. bro:see:: md5_hash md5_hash_init md5_hash_update md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_update sha256_hash_finish + +.. bro:id:: merge_pattern + + :Type: :bro:type:`function` (p1: :bro:type:`pattern`, p2: :bro:type:`pattern`) : :bro:type:`pattern` + :Attributes: :bro:attr:`&deprecated` + + Merges and compiles two regular expressions at initialization time. + + + :p1: The first pattern. + + + :p2: The second pattern. + + + :returns: The compiled pattern of the concatenation of *p1* and *p2*. + + .. bro:see:: convert_for_pattern string_to_pattern + + .. note:: + + This function must be called at Bro startup time, e.g., in the event + :bro:id:`bro_init`. + +.. bro:id:: mkdir + + :Type: :bro:type:`function` (f: :bro:type:`string`) : :bro:type:`bool` + + Creates a new directory. + + + :f: The directory name. + + + :returns: True if the operation succeeds or if *f* already exists, + and false if the file creation fails. + + .. bro:see:: active_file open_for_append close write_file + get_file_name set_buf flush_all enable_raw_output + rmdir unlink rename + +.. bro:id:: mmdb_open_asn_db + + :Type: :bro:type:`function` (f: :bro:type:`string`) : :bro:type:`bool` + + Initializes MMDB for later use of lookup_asn. + Requires Bro to be built with ``libmaxminddb``. + + + :f: The filename of the MaxMind ASN DB. + + + :returns: A boolean indicating whether the db was successfully opened. + + .. bro:see:: lookup_asn + +.. bro:id:: mmdb_open_location_db + + :Type: :bro:type:`function` (f: :bro:type:`string`) : :bro:type:`bool` + + Initializes MMDB for later use of lookup_location. + Requires Bro to be built with ``libmaxminddb``. + + + :f: The filename of the MaxMind City or Country DB. + + + :returns: A boolean indicating whether the db was successfully opened. + + .. bro:see:: lookup_asn + +.. bro:id:: network_time + + :Type: :bro:type:`function` () : :bro:type:`time` + + Returns the timestamp of the last packet processed. This function returns + the timestamp of the most recently read packet, whether read from a + live network interface or from a save file. + + + :returns: The timestamp of the packet processed. + + .. bro:see:: current_time + +.. bro:id:: open + + :Type: :bro:type:`function` (f: :bro:type:`string`) : :bro:type:`file` + + Opens a file for writing. If a file with the same name already exists, this + function overwrites it (as opposed to :bro:id:`open_for_append`). + + + :f: The path to the file. + + + :returns: A :bro:type:`file` handle for subsequent operations. + + .. bro:see:: active_file open_for_append close write_file + get_file_name set_buf flush_all mkdir enable_raw_output + rmdir unlink rename + +.. bro:id:: open_for_append + + :Type: :bro:type:`function` (f: :bro:type:`string`) : :bro:type:`file` + + Opens a file for writing or appending. If a file with the same name already + exists, this function appends to it (as opposed to :bro:id:`open`). + + + :f: The path to the file. + + + :returns: A :bro:type:`file` handle for subsequent operations. + + .. bro:see:: active_file open close write_file + get_file_name set_buf flush_all mkdir enable_raw_output + rmdir unlink rename + +.. bro:id:: order + + :Type: :bro:type:`function` (...) : :bro:type:`index_vec` + + Returns the order of the elements in a vector according to some + comparison function. See :bro:id:`sort` for details about the comparison + function. + + + :v: The vector whose order to compute. + + + :returns: A ``vector of count`` with the indices of the ordered elements. + For example, the elements of *v* in order are (assuming ``o`` + is the vector returned by ``order``): v[o[0]], v[o[1]], etc. + + .. bro:see:: sort + +.. bro:id:: piped_exec + + :Type: :bro:type:`function` (program: :bro:type:`string`, to_write: :bro:type:`string`) : :bro:type:`bool` + + Opens a program with ``popen`` and writes a given string to the returned + stream to send it to the opened process's stdin. + + + :program: The program to execute. + + + :to_write: Data to pipe to the opened program's process via ``stdin``. + + + :returns: True on success. + + .. bro:see:: system system_env + +.. bro:id:: port_to_count + + :Type: :bro:type:`function` (p: :bro:type:`port`) : :bro:type:`count` + + Converts a :bro:type:`port` to a :bro:type:`count`. + + + :p: The :bro:type:`port` to convert. + + + :returns: The :bro:type:`port` *p* as :bro:type:`count`. + + .. bro:see:: count_to_port + +.. bro:id:: preserve_prefix + + :Type: :bro:type:`function` (a: :bro:type:`addr`, width: :bro:type:`count`) : :bro:type:`any` + + Preserves the prefix of an IP address in anonymization. + + + :a: The address to preserve. + + + :width: The number of bits from the top that should remain intact. + + .. bro:see:: preserve_subnet anonymize_addr + + .. todo:: Currently dysfunctional. + +.. bro:id:: preserve_subnet + + :Type: :bro:type:`function` (a: :bro:type:`subnet`) : :bro:type:`any` + + Preserves the prefix of a subnet in anonymization. + + + :a: The subnet to preserve. + + .. bro:see:: preserve_prefix anonymize_addr + + .. todo:: Currently dysfunctional. + +.. bro:id:: ptr_name_to_addr + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`addr` + + Converts a reverse pointer name to an address. For example, + ``1.0.168.192.in-addr.arpa`` to ``192.168.0.1``. + + + :s: The string with the reverse pointer name. + + + :returns: The IP address corresponding to *s*. + + .. bro:see:: addr_to_ptr_name to_addr + +.. bro:id:: rand + + :Type: :bro:type:`function` (max: :bro:type:`count`) : :bro:type:`count` + + Generates a random number. + + + :max: The maximum value of the random number. + + + :returns: a random positive integer in the interval *[0, max)*. + + .. bro:see:: srand + + .. note:: + + This function is a wrapper about the function ``random`` + provided by the OS. + +.. bro:id:: raw_bytes_to_v4_addr + + :Type: :bro:type:`function` (b: :bro:type:`string`) : :bro:type:`addr` + + Converts a :bro:type:`string` of bytes into an IPv4 address. In particular, + this function interprets the first 4 bytes of the string as an IPv4 address + in network order. + + + :b: The raw bytes (:bro:type:`string`) to convert. + + + :returns: The byte :bro:type:`string` *b* as :bro:type:`addr`. + + .. bro:see:: raw_bytes_to_v4_addr to_addr to_subnet + +.. bro:id:: reading_live_traffic + + :Type: :bro:type:`function` () : :bro:type:`bool` + + Checks whether Bro reads traffic from one or more network interfaces (as + opposed to from a network trace in a file). Note that this function returns + true even after Bro has stopped reading network traffic, for example due to + receiving a termination signal. + + + :returns: True if reading traffic from a network interface. + + .. bro:see:: reading_traces + +.. bro:id:: reading_traces + + :Type: :bro:type:`function` () : :bro:type:`bool` + + Checks whether Bro reads traffic from a trace file (as opposed to from a + network interface). + + + :returns: True if reading traffic from a network trace. + + .. bro:see:: reading_live_traffic + +.. bro:id:: record_fields + + :Type: :bro:type:`function` (rec: :bro:type:`any`) : :bro:type:`record_field_table` + + Generates metadata about a record's fields. The returned information + includes the field name, whether it is logged, its value (if it has one), + and its default value (if specified). + + + :rec: The record value or type to inspect. + + + :returns: A table that describes the fields of a record. + +.. bro:id:: record_type_to_vector + + :Type: :bro:type:`function` (rt: :bro:type:`string`) : :bro:type:`string_vec` + + Converts a record type name to a vector of strings, where each element is + the name of a record field. Nested records are flattened. + + + :rt: The name of the record type. + + + :returns: A string vector with the field names of *rt*. + +.. bro:id:: remask_addr + + :Type: :bro:type:`function` (a1: :bro:type:`addr`, a2: :bro:type:`addr`, top_bits_from_a1: :bro:type:`count`) : :bro:type:`addr` + + Takes some top bits (such as a subnet address) from one address and the other + bits (intra-subnet part) from a second address and merges them to get a new + address. This is useful for anonymizing at subnet level while preserving + serial scans. + + + :a1: The address to mask with *top_bits_from_a1*. + + + :a2: The address to take the remaining bits from. + + + :top_bits_from_a1: The number of top bits to keep in *a1*; must be greater + than 0 and less than 129. This value is always interpreted + relative to the IPv6 bit width (v4-mapped addresses start + at bit number 96). + + + :returns: The address *a* masked down to *top_bits_to_keep* bits. + + .. bro:see:: mask_addr + +.. bro:id:: rename + + :Type: :bro:type:`function` (src_f: :bro:type:`string`, dst_f: :bro:type:`string`) : :bro:type:`bool` + + Renames a file from src_f to dst_f. + + + :src_f: the name of the file to rename. + + + :dest_f: the name of the file after the rename operation. + + + :returns: True if the rename succeeds and false otherwise. + + .. bro:see:: active_file open_for_append close write_file + get_file_name set_buf flush_all enable_raw_output + mkdir rmdir unlink + +.. bro:id:: request_remote_events + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`, handlers: :bro:type:`pattern`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Subscribes to all events from a remote peer whose names match a given + pattern. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :handlers: The pattern describing the events to request from peer *p*. + + + :returns: True on success. + + .. bro:see:: request_remote_sync + request_remote_logs + set_accept_state + +.. bro:id:: request_remote_logs + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Requests logs from a remote peer. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :returns: True on success. + + .. bro:see:: request_remote_events + request_remote_sync + +.. bro:id:: request_remote_sync + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`, auth: :bro:type:`bool`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Requests synchronization of IDs with a remote peer. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :auth: If true, the local instance considers its current state authoritative + and sends it to *p* right after the handshake. + + + :returns: True on success. + + .. bro:see:: request_remote_events + request_remote_logs + set_accept_state + +.. bro:id:: rescan_state + + :Type: :bro:type:`function` () : :bro:type:`bool` + + Reads persistent state and populates the in-memory data structures + accordingly. Persistent state is read from the ``.state`` directory. + This function is the dual to :bro:id:`checkpoint_state`. + + + :returns: True on success. + + .. bro:see:: checkpoint_state + +.. bro:id:: resize + + :Type: :bro:type:`function` (aggr: :bro:type:`any`, newsize: :bro:type:`count`) : :bro:type:`count` + + Resizes a vector. + + + :aggr: The vector instance. + + + :newsize: The new size of *aggr*. + + + :returns: The old size of *aggr*, or 0 if *aggr* is not a :bro:type:`vector`. + +.. bro:id:: resume_state_updates + + :Type: :bro:type:`function` () : :bro:type:`any` + :Attributes: :bro:attr:`&deprecated` + + Resumes propagating :bro:attr:`&synchronized` accesses. + + .. bro:see:: suspend_processing continue_processing suspend_state_updates + +.. bro:id:: rmdir + + :Type: :bro:type:`function` (d: :bro:type:`string`) : :bro:type:`bool` + + Removes a directory. + + + :d: The directory name. + + + :returns: True if the operation succeeds, and false if the + directory delete operation fails. + + .. bro:see:: active_file open_for_append close write_file + get_file_name set_buf flush_all enable_raw_output + mkdir unlink rename + +.. bro:id:: rotate_file + + :Type: :bro:type:`function` (f: :bro:type:`file`) : :bro:type:`rotate_info` + + Rotates a file. + + + :f: An open file handle. + + + :returns: Rotation statistics which include the original file name, the name + after the rotation, and the time when *f* was opened/closed. + + .. bro:see:: rotate_file_by_name calc_next_rotate + +.. bro:id:: rotate_file_by_name + + :Type: :bro:type:`function` (f: :bro:type:`string`) : :bro:type:`rotate_info` + + Rotates a file identified by its name. + + + :f: The name of the file to rotate + + + :returns: Rotation statistics which include the original file name, the name + after the rotation, and the time when *f* was opened/closed. + + .. bro:see:: rotate_file calc_next_rotate + +.. bro:id:: routing0_data_to_addrs + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`addr_vec` + + Converts the *data* field of :bro:type:`ip6_routing` records that have + *rtype* of 0 into a vector of addresses. + + + :s: The *data* field of an :bro:type:`ip6_routing` record that has + an *rtype* of 0. + + + :returns: The vector of addresses contained in the routing header data. + +.. bro:id:: same_object + + :Type: :bro:type:`function` (o1: :bro:type:`any`, o2: :bro:type:`any`) : :bro:type:`bool` + + Checks whether two objects reference the same internal object. This function + uses equality comparison of C++ raw pointer values to determine if the two + objects are the same. + + + :o1: The first object. + + + :o2: The second object. + + + :returns: True if *o1* and *o2* are equal. + +.. bro:id:: send_capture_filter + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`, s: :bro:type:`string`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Sends a capture filter to a remote peer. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :s: The capture filter. + + + :returns: True if sending the packet succeeds. + + .. bro:see:: send_id send_state send_ping send_current_packet + +.. bro:id:: send_current_packet + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Sends the currently processed packet to a remote peer. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :returns: True if sending the packet succeeds. + + .. bro:see:: send_id send_state send_ping send_capture_filter + dump_packet dump_current_packet get_current_packet + +.. bro:id:: send_id + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`, id: :bro:type:`string`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Sends a global identifier to a remote peer, which then might install it + locally. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :id: The identifier to send. + + + :returns: True on success. + + .. bro:see:: send_state send_ping send_current_packet send_capture_filter + +.. bro:id:: send_ping + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`, seq: :bro:type:`count`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Sends a ping event to a remote peer. In combination with an event handler + for :bro:id:`remote_pong`, this function can be used to measure latency + between two peers. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :seq: A sequence number (also included by :bro:id:`remote_pong`). + + + :returns: True if sending the ping succeeds. + + .. bro:see:: send_state send_id send_current_packet send_capture_filter + +.. bro:id:: send_state + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`) : :bro:type:`bool` + + Sends all persistent state to a remote peer. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :returns: True on success. + + .. bro:see:: send_id send_ping send_current_packet send_capture_filter + +.. bro:id:: set_accept_state + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`, accept: :bro:type:`bool`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Sets a boolean flag indicating whether Bro accepts state from a remote peer. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :accept: True if Bro accepts state from peer *p*, or false otherwise. + + + :returns: True on success. + + .. bro:see:: request_remote_events + request_remote_sync + set_compression_level + +.. bro:id:: set_buf + + :Type: :bro:type:`function` (f: :bro:type:`file`, buffered: :bro:type:`bool`) : :bro:type:`any` + + Alters the buffering behavior of a file. + + + :f: A :bro:type:`file` handle to an open file. + + + :buffered: When true, *f* is fully buffered, i.e., bytes are saved in a + buffer until the block size has been reached. When + false, *f* is line buffered, i.e., bytes are saved up until a + newline occurs. + + .. bro:see:: active_file open open_for_append close + get_file_name write_file flush_all mkdir enable_raw_output + rmdir unlink rename + +.. bro:id:: set_compression_level + + :Type: :bro:type:`function` (p: :bro:type:`event_peer`, level: :bro:type:`count`) : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Sets the compression level of the session with a remote peer. + + + :p: The peer ID returned from :bro:id:`connect`. + + + :level: Allowed values are in the range *[0, 9]*, where 0 is the default and + means no compression. + + + :returns: True on success. + + .. bro:see:: set_accept_state + +.. bro:id:: set_inactivity_timeout + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, t: :bro:type:`interval`) : :bro:type:`interval` + + Sets an individual inactivity timeout for a connection and thus + overrides the global inactivity timeout. + + + :cid: The connection ID. + + + :t: The new inactivity timeout for the connection identified by *cid*. + + + :returns: The previous timeout interval. + +.. bro:id:: set_record_packets + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, do_record: :bro:type:`bool`) : :bro:type:`bool` + + Controls whether packet contents belonging to a connection should be + recorded (when ``-w`` option is provided on the command line). + + + :cid: The connection identifier. + + + :do_record: True to enable packet contents, and false to disable for the + connection identified by *cid*. + + + :returns: False if *cid* does not point to an active connection, and true + otherwise. + + .. bro:see:: skip_further_processing + + .. note:: + + This is independent of whether Bro processes the packets of this + connection, which is controlled separately by + :bro:id:`skip_further_processing`. + + .. bro:see:: get_contents_file set_contents_file + +.. bro:id:: setenv + + :Type: :bro:type:`function` (var: :bro:type:`string`, val: :bro:type:`string`) : :bro:type:`bool` + + Sets a system environment variable. + + + :var: The name of the variable. + + + :val: The (new) value of the variable *var*. + + + :returns: True on success. + + .. bro:see:: getenv + +.. bro:id:: sha1_hash + + :Type: :bro:type:`function` (...) : :bro:type:`string` + + Computes the SHA1 hash value of the provided list of arguments. + + + :returns: The SHA1 hash value of the concatenated arguments. + + .. bro:see:: md5_hash md5_hmac md5_hash_init md5_hash_update md5_hash_finish + sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_update sha256_hash_finish + + .. note:: + + This function performs a one-shot computation of its arguments. + For incremental hash computation, see :bro:id:`sha1_hash_init` and + friends. + +.. bro:id:: sha1_hash_finish + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of sha1) : :bro:type:`string` + + Returns the final SHA1 digest of an incremental hash computation. + + + :handle: The opaque handle associated with this hash computation. + + + :returns: The hash value associated with the computation of *handle*. + + .. bro:see:: md5_hmac md5_hash md5_hash_init md5_hash_update md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_update + sha256_hash sha256_hash_init sha256_hash_update sha256_hash_finish + +.. bro:id:: sha1_hash_init + + :Type: :bro:type:`function` () : :bro:type:`opaque` of sha1 + + Constructs an SHA1 handle to enable incremental hash computation. You can + feed data to the returned opaque value with :bro:id:`sha1_hash_update` and + finally need to call :bro:id:`sha1_hash_finish` to finish the computation + and get the hash digest. + + For example, when computing incremental SHA1 values of transferred files in + multiple concurrent HTTP connections, one keeps an optional handle in the + HTTP session record. Then, one would call + ``c$http$sha1_handle = sha1_hash_init()`` once before invoking + ``sha1_hash_update(c$http$sha1_handle, some_more_data)`` in the + :bro:id:`http_entity_data` event handler. When all data has arrived, a call + to :bro:id:`sha1_hash_finish` returns the final hash value. + + + :returns: The opaque handle associated with this hash computation. + + .. bro:see:: md5_hmac md5_hash md5_hash_init md5_hash_update md5_hash_finish + sha1_hash sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_update sha256_hash_finish + +.. bro:id:: sha1_hash_update + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of sha1, data: :bro:type:`string`) : :bro:type:`bool` + + Updates the SHA1 value associated with a given index. It is required to + call :bro:id:`sha1_hash_init` once before calling this + function. + + + :handle: The opaque handle associated with this hash computation. + + + :data: The data to add to the hash computation. + + + :returns: True on success. + + .. bro:see:: md5_hmac md5_hash md5_hash_init md5_hash_update md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_update sha256_hash_finish + +.. bro:id:: sha256_hash + + :Type: :bro:type:`function` (...) : :bro:type:`string` + + Computes the SHA256 hash value of the provided list of arguments. + + + :returns: The SHA256 hash value of the concatenated arguments. + + .. bro:see:: md5_hash md5_hmac md5_hash_init md5_hash_update md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash_init sha256_hash_update sha256_hash_finish + + .. note:: + + This function performs a one-shot computation of its arguments. + For incremental hash computation, see :bro:id:`sha256_hash_init` and + friends. + +.. bro:id:: sha256_hash_finish + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of sha256) : :bro:type:`string` + + Returns the final SHA256 digest of an incremental hash computation. + + + :handle: The opaque handle associated with this hash computation. + + + :returns: The hash value associated with the computation of *handle*. + + .. bro:see:: md5_hmac md5_hash md5_hash_init md5_hash_update md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_update + +.. bro:id:: sha256_hash_init + + :Type: :bro:type:`function` () : :bro:type:`opaque` of sha256 + + Constructs an SHA256 handle to enable incremental hash computation. You can + feed data to the returned opaque value with :bro:id:`sha256_hash_update` and + finally need to call :bro:id:`sha256_hash_finish` to finish the computation + and get the hash digest. + + For example, when computing incremental SHA256 values of transferred files in + multiple concurrent HTTP connections, one keeps an optional handle in the + HTTP session record. Then, one would call + ``c$http$sha256_handle = sha256_hash_init()`` once before invoking + ``sha256_hash_update(c$http$sha256_handle, some_more_data)`` in the + :bro:id:`http_entity_data` event handler. When all data has arrived, a call + to :bro:id:`sha256_hash_finish` returns the final hash value. + + + :returns: The opaque handle associated with this hash computation. + + .. bro:see:: md5_hmac md5_hash md5_hash_init md5_hash_update md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_update sha256_hash_finish + +.. bro:id:: sha256_hash_update + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of sha256, data: :bro:type:`string`) : :bro:type:`bool` + + Updates the SHA256 value associated with a given index. It is required to + call :bro:id:`sha256_hash_init` once before calling this + function. + + + :handle: The opaque handle associated with this hash computation. + + + :data: The data to add to the hash computation. + + + :returns: True on success. + + .. bro:see:: md5_hmac md5_hash md5_hash_init md5_hash_update md5_hash_finish + sha1_hash sha1_hash_init sha1_hash_update sha1_hash_finish + sha256_hash sha256_hash_init sha256_hash_finish + +.. bro:id:: skip_further_processing + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`) : :bro:type:`bool` + + Informs Bro that it should skip any further processing of the contents of + a given connection. In particular, Bro will refrain from reassembling the + TCP byte stream and from generating events relating to any analyzers that + have been processing the connection. + + + :cid: The connection ID. + + + :returns: False if *cid* does not point to an active connection, and true + otherwise. + + .. note:: + + Bro will still generate connection-oriented events such as + :bro:id:`connection_finished`. + +.. bro:id:: sort + + :Type: :bro:type:`function` (...) : :bro:type:`any` + + Sorts a vector in place. The second argument is a comparison function that + takes two arguments: if the vector type is ``vector of T``, then the + comparison function must be ``function(a: T, b: T): int``, which returns + a value less than zero if ``a < b`` for some type-specific notion of the + less-than operator. The comparison function is optional if the type + is an integral type (int, count, etc.). + + + :v: The vector instance to sort. + + + :returns: The vector, sorted from minimum to maximum value. If the vector + could not be sorted, then the original vector is returned instead. + + .. bro:see:: order + +.. bro:id:: sqrt + + :Type: :bro:type:`function` (x: :bro:type:`double`) : :bro:type:`double` + + Computes the square root of a :bro:type:`double`. + + + :x: The number to compute the square root of. + + + :returns: The square root of *x*. + + .. bro:see:: floor exp ln log10 + +.. bro:id:: srand + + :Type: :bro:type:`function` (seed: :bro:type:`count`) : :bro:type:`any` + + Sets the seed for subsequent :bro:id:`rand` calls. + + + :seed: The seed for the PRNG. + + .. bro:see:: rand + + .. note:: + + This function is a wrapper about the function ``srandom`` + provided by the OS. + +.. bro:id:: strftime + + :Type: :bro:type:`function` (fmt: :bro:type:`string`, d: :bro:type:`time`) : :bro:type:`string` + + Formats a given time value according to a format string. + + + :fmt: The format string. See ``man strftime`` for the syntax. + + + :d: The time value. + + + :returns: The time *d* formatted according to *fmt*. + +.. bro:id:: string_to_pattern + + :Type: :bro:type:`function` (s: :bro:type:`string`, convert: :bro:type:`bool`) : :bro:type:`pattern` + + Converts a :bro:type:`string` into a :bro:type:`pattern`. + + + :s: The string to convert. + + + :convert: If true, *s* is first passed through the function + :bro:id:`convert_for_pattern` to escape special characters of + patterns. + + + :returns: *s* as :bro:type:`pattern`. + + .. bro:see:: convert_for_pattern merge_pattern + + .. note:: + + This function must be called at Bro startup time, e.g., in the event + :bro:id:`bro_init`. + +.. bro:id:: strptime + + :Type: :bro:type:`function` (fmt: :bro:type:`string`, d: :bro:type:`string`) : :bro:type:`time` + + Parse a textual representation of a date/time value into a ``time`` type value. + + + :fmt: The format string used to parse the following *d* argument. See ``man strftime`` + for the syntax. + + + :d: The string representing the time. + + + :returns: The time value calculated from parsing *d* with *fmt*. + +.. bro:id:: subnet_to_addr + + :Type: :bro:type:`function` (sn: :bro:type:`subnet`) : :bro:type:`addr` + + Converts a :bro:type:`subnet` to an :bro:type:`addr` by + extracting the prefix. + + + :sn: The subnet to convert. + + + :returns: The subnet as an :bro:type:`addr`. + + .. bro:see:: to_subnet + +.. bro:id:: subnet_width + + :Type: :bro:type:`function` (sn: :bro:type:`subnet`) : :bro:type:`count` + + Returns the width of a :bro:type:`subnet`. + + + :sn: The subnet. + + + :returns: The width of the subnet. + + .. bro:see:: to_subnet + +.. bro:id:: suspend_processing + + :Type: :bro:type:`function` () : :bro:type:`any` + + Stops Bro's packet processing. This function is used to synchronize + distributed trace processing with communication enabled + (*pseudo-realtime* mode). + + .. bro:see:: continue_processing suspend_state_updates resume_state_updates + +.. bro:id:: suspend_state_updates + + :Type: :bro:type:`function` () : :bro:type:`any` + :Attributes: :bro:attr:`&deprecated` + + Stops propagating :bro:attr:`&synchronized` accesses. + + .. bro:see:: suspend_processing continue_processing resume_state_updates + +.. bro:id:: syslog + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`any` + + Send a string to syslog. + + + :s: The string to log via syslog + +.. bro:id:: system + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`int` + + Invokes a command via the ``system`` function of the OS. + The command runs in the background with ``stdout`` redirecting to + ``stderr``. Here is a usage example: + ``system(fmt("rm \"%s\"", str_shell_escape(sniffed_data)));`` + + + :str: The command to execute. + + + :returns: The return value from the OS ``system`` function. + + .. bro:see:: system_env str_shell_escape piped_exec + + .. note:: + + Note that this corresponds to the status of backgrounding the + given command, not to the exit status of the command itself. A + value of 127 corresponds to a failure to execute ``sh``, and -1 + to an internal system failure. + +.. bro:id:: system_env + + :Type: :bro:type:`function` (str: :bro:type:`string`, env: :bro:type:`table_string_of_string`) : :bro:type:`int` + + Invokes a command via the ``system`` function of the OS with a prepared + environment. The function is essentially the same as :bro:id:`system`, + but changes the environment before invoking the command. + + + :str: The command to execute. + + + :env: A :bro:type:`table` with the environment variables in the form + of key-value pairs. Each specified environment variable name + will be automatically prepended with ``BRO_ARG_``. + + + :returns: The return value from the OS ``system`` function. + + .. bro:see:: system str_shell_escape piped_exec + +.. bro:id:: terminate + + :Type: :bro:type:`function` () : :bro:type:`bool` + + Gracefully shut down Bro by terminating outstanding processing. + + + :returns: True after successful termination and false when Bro is still in + the process of shutting down. + + .. bro:see:: exit bro_is_terminating + +.. bro:id:: terminate_communication + + :Type: :bro:type:`function` () : :bro:type:`bool` + :Attributes: :bro:attr:`&deprecated` + + Gracefully finishes communication by first making sure that all remaining + data from parent and child has been sent out. + + + :returns: True if the termination process has been started successfully. + +.. bro:id:: time_to_double + + :Type: :bro:type:`function` (t: :bro:type:`time`) : :bro:type:`double` + + Converts a :bro:type:`time` value to a :bro:type:`double`. + + + :t: The :bro:type:`time` to convert. + + + :returns: The :bro:type:`time` value *t* as :bro:type:`double`. + + .. bro:see:: double_to_time + +.. bro:id:: to_addr + + :Type: :bro:type:`function` (ip: :bro:type:`string`) : :bro:type:`addr` + + Converts a :bro:type:`string` to an :bro:type:`addr`. + + + :ip: The :bro:type:`string` to convert. + + + :returns: The :bro:type:`string` *ip* as :bro:type:`addr`, or the unspecified + address ``::`` if the input string does not parse correctly. + + .. bro:see:: to_count to_int to_port count_to_v4_addr raw_bytes_to_v4_addr + to_subnet + +.. bro:id:: to_count + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`count` + + Converts a :bro:type:`string` to a :bro:type:`count`. + + + :str: The :bro:type:`string` to convert. + + + :returns: The :bro:type:`string` *str* as unsigned integer, or 0 if *str* has + an invalid format. + + .. bro:see:: to_addr to_int to_port to_subnet + +.. bro:id:: to_double + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`double` + + Converts a :bro:type:`string` to a :bro:type:`double`. + + + :str: The :bro:type:`string` to convert. + + + :returns: The :bro:type:`string` *str* as double, or 0 if *str* has + an invalid format. + + +.. bro:id:: to_int + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`int` + + Converts a :bro:type:`string` to an :bro:type:`int`. + + + :str: The :bro:type:`string` to convert. + + + :returns: The :bro:type:`string` *str* as :bro:type:`int`. + + .. bro:see:: to_addr to_port to_subnet + +.. bro:id:: to_port + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`port` + + Converts a :bro:type:`string` to a :bro:type:`port`. + + + :s: The :bro:type:`string` to convert. + + + :returns: A :bro:type:`port` converted from *s*. + + .. bro:see:: to_addr to_count to_int to_subnet + +.. bro:id:: to_subnet + + :Type: :bro:type:`function` (sn: :bro:type:`string`) : :bro:type:`subnet` + + Converts a :bro:type:`string` to a :bro:type:`subnet`. + + + :sn: The subnet to convert. + + + :returns: The *sn* string as a :bro:type:`subnet`, or the unspecified subnet + ``::/0`` if the input string does not parse correctly. + + .. bro:see:: to_count to_int to_port count_to_v4_addr raw_bytes_to_v4_addr + to_addr + +.. bro:id:: type_name + + :Type: :bro:type:`function` (t: :bro:type:`any`) : :bro:type:`string` + + Returns the type name of an arbitrary Bro variable. + + + :t: An arbitrary object. + + + :returns: The type name of *t*. + +.. bro:id:: uninstall_dst_addr_filter + + :Type: :bro:type:`function` (ip: :bro:type:`addr`) : :bro:type:`bool` + + Removes a destination address filter. + + + :ip: The IP address for which a destination filter was previously installed. + + + :returns: True on success. + + .. bro:see:: Pcap::precompile_pcap_filter + Pcap::install_pcap_filter + install_src_addr_filter + install_src_net_filter + uninstall_src_addr_filter + uninstall_src_net_filter + install_dst_addr_filter + install_dst_net_filter + uninstall_dst_net_filter + Pcap::error + +.. bro:id:: uninstall_dst_net_filter + + :Type: :bro:type:`function` (snet: :bro:type:`subnet`) : :bro:type:`bool` + + Removes a destination subnet filter. + + + :snet: The subnet for which a destination filter was previously installed. + + + :returns: True on success. + + .. bro:see:: Pcap::precompile_pcap_filter + Pcap::install_pcap_filter + install_src_addr_filter + install_src_net_filter + uninstall_src_addr_filter + uninstall_src_net_filter + install_dst_addr_filter + install_dst_net_filter + uninstall_dst_addr_filter + Pcap::error + +.. bro:id:: uninstall_src_addr_filter + + :Type: :bro:type:`function` (ip: :bro:type:`addr`) : :bro:type:`bool` + + Removes a source address filter. + + + :ip: The IP address for which a source filter was previously installed. + + + :returns: True on success. + + .. bro:see:: Pcap::precompile_pcap_filter + Pcap::install_pcap_filter + install_src_addr_filter + install_src_net_filter + uninstall_src_net_filter + install_dst_addr_filter + install_dst_net_filter + uninstall_dst_addr_filter + uninstall_dst_net_filter + Pcap::error + +.. bro:id:: uninstall_src_net_filter + + :Type: :bro:type:`function` (snet: :bro:type:`subnet`) : :bro:type:`bool` + + Removes a source subnet filter. + + + :snet: The subnet for which a source filter was previously installed. + + + :returns: True on success. + + .. bro:see:: Pcap::precompile_pcap_filter + Pcap::install_pcap_filter + install_src_addr_filter + install_src_net_filter + uninstall_src_addr_filter + install_dst_addr_filter + install_dst_net_filter + uninstall_dst_addr_filter + uninstall_dst_net_filter + Pcap::error + +.. bro:id:: unique_id + + :Type: :bro:type:`function` (prefix: :bro:type:`string`) : :bro:type:`string` + + Creates an identifier that is unique with high probability. + + + :prefix: A custom string prepended to the result. + + + :returns: A string identifier that is unique. + + .. bro:see:: unique_id_from + +.. bro:id:: unique_id_from + + :Type: :bro:type:`function` (pool: :bro:type:`int`, prefix: :bro:type:`string`) : :bro:type:`string` + + Creates an identifier that is unique with high probability. + + + :pool: A seed for determinism. + + + :prefix: A custom string prepended to the result. + + + :returns: A string identifier that is unique. + + .. bro:see:: unique_id + +.. bro:id:: unlink + + :Type: :bro:type:`function` (f: :bro:type:`string`) : :bro:type:`bool` + + Removes a file from a directory. + + + :f: the file to delete. + + + :returns: True if the operation succeeds and the file was deleted, + and false if the deletion fails. + + .. bro:see:: active_file open_for_append close write_file + get_file_name set_buf flush_all enable_raw_output + mkdir rmdir rename + +.. bro:id:: uuid_to_string + + :Type: :bro:type:`function` (uuid: :bro:type:`string`) : :bro:type:`string` + + Converts a bytes representation of a UUID into its string form. For example, + given a string of 16 bytes, it produces an output string in this format: + ``550e8400-e29b-41d4-a716-446655440000``. + See ``_. + + + :uuid: The 16 bytes of the UUID. + + + :returns: The string representation of *uuid*. + +.. bro:id:: val_size + + :Type: :bro:type:`function` (v: :bro:type:`any`) : :bro:type:`count` + + Returns the number of bytes that a value occupies in memory. + + + :v: The value + + + :returns: The number of bytes that *v* occupies. + +.. bro:id:: write_file + + :Type: :bro:type:`function` (f: :bro:type:`file`, data: :bro:type:`string`) : :bro:type:`bool` + + Writes data to an open file. + + + :f: A :bro:type:`file` handle to an open file. + + + :data: The data to write to *f*. + + + :returns: True on success. + + .. bro:see:: active_file open open_for_append close + get_file_name set_buf flush_all mkdir enable_raw_output + rmdir unlink rename + + diff --git a/doc/scripts/base/bif/broxygen.bif.bro.rst b/doc/scripts/base/bif/broxygen.bif.bro.rst new file mode 100644 index 0000000000..bab211e27d --- /dev/null +++ b/doc/scripts/base/bif/broxygen.bif.bro.rst @@ -0,0 +1,88 @@ +:tocdepth: 3 + +base/bif/broxygen.bif.bro +========================= +.. bro:namespace:: GLOBAL + +Functions for querying script, package, or variable documentation. + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +========================================================= ============================================================================= +:bro:id:`get_identifier_comments`: :bro:type:`function` Retrieve the Broxygen-style comments (``##``) associated with an identifier + (e.g. +:bro:id:`get_package_readme`: :bro:type:`function` Retrieve the contents of a Bro script package's README file. +:bro:id:`get_record_field_comments`: :bro:type:`function` Retrieve the Broxygen-style comments (``##``) associated with a record field. +:bro:id:`get_script_comments`: :bro:type:`function` Retrieve the Broxygen-style summary comments (``##!``) associated with + a Bro script. +========================================================= ============================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: get_identifier_comments + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`string` + + Retrieve the Broxygen-style comments (``##``) associated with an identifier + (e.g. a variable or type). + + + :name: a script-level identifier for which to retrieve comments. + + + :returns: comments associated with *name*. If *name* is not a known + identifier, an empty string is returned. + +.. bro:id:: get_package_readme + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`string` + + Retrieve the contents of a Bro script package's README file. + + + :name: the name of a Bro script package. It must be a relative path + to where it is located within a particular component of BROPATH. + + + :returns: contents of the package's README file. If *name* is not a known + package, an empty string is returned. + +.. bro:id:: get_record_field_comments + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`string` + + Retrieve the Broxygen-style comments (``##``) associated with a record field. + + + :name: the name of a record type and a field within it formatted like + a typical record field access: "$". + + + :returns: comments associated with the record field. If *name* does + not point to a known record type or a known field within a record + type, an empty string is returned. + +.. bro:id:: get_script_comments + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`string` + + Retrieve the Broxygen-style summary comments (``##!``) associated with + a Bro script. + + + :name: the name of a Bro script. It must be a relative path to where + it is located within a particular component of BROPATH and use + the same file name extension/suffix as the actual file (e.g. ".bro"). + + + :returns: summary comments associated with script with *name*. If + *name* is not a known script, an empty string is returned. + + diff --git a/doc/scripts/base/bif/cardinality-counter.bif.bro.rst b/doc/scripts/base/bif/cardinality-counter.bif.bro.rst new file mode 100644 index 0000000000..85966d907f --- /dev/null +++ b/doc/scripts/base/bif/cardinality-counter.bif.bro.rst @@ -0,0 +1,117 @@ +:tocdepth: 3 + +base/bif/cardinality-counter.bif.bro +==================================== +.. bro:namespace:: GLOBAL + +Functions to create and manipulate probabilistic cardinality counters. + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +========================================================== ========================================================================= +:bro:id:`hll_cardinality_add`: :bro:type:`function` Adds an element to a HyperLogLog cardinality counter. +:bro:id:`hll_cardinality_copy`: :bro:type:`function` Copy a HLL cardinality counter. +:bro:id:`hll_cardinality_estimate`: :bro:type:`function` Estimate the current cardinality of an HLL cardinality counter. +:bro:id:`hll_cardinality_init`: :bro:type:`function` Initializes a probabilistic cardinality counter that uses the HyperLogLog + algorithm. +:bro:id:`hll_cardinality_merge_into`: :bro:type:`function` Merges a HLL cardinality counter into another. +========================================================== ========================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: hll_cardinality_add + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of cardinality, elem: :bro:type:`any`) : :bro:type:`bool` + + Adds an element to a HyperLogLog cardinality counter. + + + :handle: the HLL handle. + + + :elem: the element to add. + + + :returns: true on success. + + .. bro:see:: hll_cardinality_estimate hll_cardinality_merge_into + hll_cardinality_init hll_cardinality_copy + +.. bro:id:: hll_cardinality_copy + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of cardinality) : :bro:type:`opaque` of cardinality + + Copy a HLL cardinality counter. + + + :handle: cardinality counter to copy. + + + :returns: copy of handle. + + .. bro:see:: hll_cardinality_estimate hll_cardinality_merge_into hll_cardinality_add + hll_cardinality_init + +.. bro:id:: hll_cardinality_estimate + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of cardinality) : :bro:type:`double` + + Estimate the current cardinality of an HLL cardinality counter. + + + :handle: the HLL handle. + + + :returns: the cardinality estimate. Returns -1.0 if the counter is empty. + + .. bro:see:: hll_cardinality_merge_into hll_cardinality_add + hll_cardinality_init hll_cardinality_copy + +.. bro:id:: hll_cardinality_init + + :Type: :bro:type:`function` (err: :bro:type:`double`, confidence: :bro:type:`double`) : :bro:type:`opaque` of cardinality + + Initializes a probabilistic cardinality counter that uses the HyperLogLog + algorithm. + + + :err: the desired error rate (e.g. 0.01). + + + :confidence: the desired confidence for the error rate (e.g., 0.95). + + + :returns: a HLL cardinality handle. + + .. bro:see:: hll_cardinality_estimate hll_cardinality_merge_into hll_cardinality_add + hll_cardinality_copy + +.. bro:id:: hll_cardinality_merge_into + + :Type: :bro:type:`function` (handle1: :bro:type:`opaque` of cardinality, handle2: :bro:type:`opaque` of cardinality) : :bro:type:`bool` + + Merges a HLL cardinality counter into another. + + .. note:: The same restrictions as for Bloom filter merging apply, + see :bro:id:`bloomfilter_merge`. + + + :handle1: the first HLL handle, which will contain the merged result. + + + :handle2: the second HLL handle, which will be merged into the first. + + + :returns: true on success. + + .. bro:see:: hll_cardinality_estimate hll_cardinality_add + hll_cardinality_init hll_cardinality_copy + + diff --git a/doc/scripts/base/bif/comm.bif.bro.rst b/doc/scripts/base/bif/comm.bif.bro.rst new file mode 100644 index 0000000000..182b642ee7 --- /dev/null +++ b/doc/scripts/base/bif/comm.bif.bro.rst @@ -0,0 +1,96 @@ +:tocdepth: 3 + +base/bif/comm.bif.bro +===================== +.. bro:namespace:: Broker +.. bro:namespace:: GLOBAL + +Functions and events regarding Bro's broker communication mechanisms. + +:Namespaces: Broker, GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================= ========================================================== +:bro:id:`Broker::error`: :bro:type:`event` Generated when an error occurs in the Broker sub-system. +:bro:id:`Broker::peer_added`: :bro:type:`event` Generated when a new peering has been established. +:bro:id:`Broker::peer_lost`: :bro:type:`event` Generated when an existing peering has been lost. +:bro:id:`Broker::peer_removed`: :bro:type:`event` Generated when an existing peer has been removed. +:bro:id:`Broker::status`: :bro:type:`event` Generated when something changes in the Broker sub-system. +================================================= ========================================================== + +Functions +######### +================================================= = +:bro:id:`Broker::__listen`: :bro:type:`function` +:bro:id:`Broker::__node_id`: :bro:type:`function` +:bro:id:`Broker::__peer`: :bro:type:`function` +:bro:id:`Broker::__peers`: :bro:type:`function` +:bro:id:`Broker::__unpeer`: :bro:type:`function` +================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: Broker::error + + :Type: :bro:type:`event` (code: :bro:type:`Broker::ErrorCode`, msg: :bro:type:`string`) + + Generated when an error occurs in the Broker sub-system. + +.. bro:id:: Broker::peer_added + + :Type: :bro:type:`event` (endpoint: :bro:type:`Broker::EndpointInfo`, msg: :bro:type:`string`) + + Generated when a new peering has been established. + +.. bro:id:: Broker::peer_lost + + :Type: :bro:type:`event` (endpoint: :bro:type:`Broker::EndpointInfo`, msg: :bro:type:`string`) + + Generated when an existing peering has been lost. + +.. bro:id:: Broker::peer_removed + + :Type: :bro:type:`event` (endpoint: :bro:type:`Broker::EndpointInfo`, msg: :bro:type:`string`) + + Generated when an existing peer has been removed. + +.. bro:id:: Broker::status + + :Type: :bro:type:`event` (endpoint: :bro:type:`Broker::EndpointInfo`, msg: :bro:type:`string`) + + Generated when something changes in the Broker sub-system. + +Functions +######### +.. bro:id:: Broker::__listen + + :Type: :bro:type:`function` (a: :bro:type:`string`, p: :bro:type:`port`) : :bro:type:`port` + + +.. bro:id:: Broker::__node_id + + :Type: :bro:type:`function` () : :bro:type:`string` + + +.. bro:id:: Broker::__peer + + :Type: :bro:type:`function` (a: :bro:type:`string`, p: :bro:type:`port`, retry: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__peers + + :Type: :bro:type:`function` () : :bro:type:`Broker::PeerInfos` + + +.. bro:id:: Broker::__unpeer + + :Type: :bro:type:`function` (a: :bro:type:`string`, p: :bro:type:`port`) : :bro:type:`bool` + + + diff --git a/doc/scripts/base/bif/const.bif.bro.rst b/doc/scripts/base/bif/const.bif.bro.rst new file mode 100644 index 0000000000..051a0e2965 --- /dev/null +++ b/doc/scripts/base/bif/const.bif.bro.rst @@ -0,0 +1,18 @@ +:tocdepth: 3 + +base/bif/const.bif.bro +====================== +.. bro:namespace:: GLOBAL + +Declaration of various scripting-layer constants that the Bro core uses +internally. Documentation and default values for the scripting-layer +variables themselves are found in :doc:`/scripts/base/init-bare.bro`. + +:Namespace: GLOBAL + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/data.bif.bro.rst b/doc/scripts/base/bif/data.bif.bro.rst new file mode 100644 index 0000000000..e3c11ff04e --- /dev/null +++ b/doc/scripts/base/bif/data.bif.bro.rst @@ -0,0 +1,322 @@ +:tocdepth: 3 + +base/bif/data.bif.bro +===================== +.. bro:namespace:: Broker +.. bro:namespace:: GLOBAL + +Functions for inspecting and manipulating broker data. + +:Namespaces: Broker, GLOBAL + +Summary +~~~~~~~ +Types +##### +============================================== ==================================================================== +:bro:type:`Broker::DataType`: :bro:type:`enum` Enumerates the possible types that :bro:see:`Broker::Data` may be in + terms of Bro data types. +============================================== ==================================================================== + +Functions +######### +=============================================================== = +:bro:id:`Broker::__data`: :bro:type:`function` +:bro:id:`Broker::__data_type`: :bro:type:`function` +:bro:id:`Broker::__record_assign`: :bro:type:`function` +:bro:id:`Broker::__record_create`: :bro:type:`function` +:bro:id:`Broker::__record_iterator`: :bro:type:`function` +:bro:id:`Broker::__record_iterator_last`: :bro:type:`function` +:bro:id:`Broker::__record_iterator_next`: :bro:type:`function` +:bro:id:`Broker::__record_iterator_value`: :bro:type:`function` +:bro:id:`Broker::__record_lookup`: :bro:type:`function` +:bro:id:`Broker::__record_size`: :bro:type:`function` +:bro:id:`Broker::__set_clear`: :bro:type:`function` +:bro:id:`Broker::__set_contains`: :bro:type:`function` +:bro:id:`Broker::__set_create`: :bro:type:`function` +:bro:id:`Broker::__set_insert`: :bro:type:`function` +:bro:id:`Broker::__set_iterator`: :bro:type:`function` +:bro:id:`Broker::__set_iterator_last`: :bro:type:`function` +:bro:id:`Broker::__set_iterator_next`: :bro:type:`function` +:bro:id:`Broker::__set_iterator_value`: :bro:type:`function` +:bro:id:`Broker::__set_remove`: :bro:type:`function` +:bro:id:`Broker::__set_size`: :bro:type:`function` +:bro:id:`Broker::__table_clear`: :bro:type:`function` +:bro:id:`Broker::__table_contains`: :bro:type:`function` +:bro:id:`Broker::__table_create`: :bro:type:`function` +:bro:id:`Broker::__table_insert`: :bro:type:`function` +:bro:id:`Broker::__table_iterator`: :bro:type:`function` +:bro:id:`Broker::__table_iterator_last`: :bro:type:`function` +:bro:id:`Broker::__table_iterator_next`: :bro:type:`function` +:bro:id:`Broker::__table_iterator_value`: :bro:type:`function` +:bro:id:`Broker::__table_lookup`: :bro:type:`function` +:bro:id:`Broker::__table_remove`: :bro:type:`function` +:bro:id:`Broker::__table_size`: :bro:type:`function` +:bro:id:`Broker::__vector_clear`: :bro:type:`function` +:bro:id:`Broker::__vector_create`: :bro:type:`function` +:bro:id:`Broker::__vector_insert`: :bro:type:`function` +:bro:id:`Broker::__vector_iterator`: :bro:type:`function` +:bro:id:`Broker::__vector_iterator_last`: :bro:type:`function` +:bro:id:`Broker::__vector_iterator_next`: :bro:type:`function` +:bro:id:`Broker::__vector_iterator_value`: :bro:type:`function` +:bro:id:`Broker::__vector_lookup`: :bro:type:`function` +:bro:id:`Broker::__vector_remove`: :bro:type:`function` +:bro:id:`Broker::__vector_replace`: :bro:type:`function` +:bro:id:`Broker::__vector_size`: :bro:type:`function` +=============================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Broker::DataType + + :Type: :bro:type:`enum` + + .. bro:enum:: Broker::NONE Broker::DataType + + .. bro:enum:: Broker::BOOL Broker::DataType + + .. bro:enum:: Broker::INT Broker::DataType + + .. bro:enum:: Broker::COUNT Broker::DataType + + .. bro:enum:: Broker::DOUBLE Broker::DataType + + .. bro:enum:: Broker::STRING Broker::DataType + + .. bro:enum:: Broker::ADDR Broker::DataType + + .. bro:enum:: Broker::SUBNET Broker::DataType + + .. bro:enum:: Broker::PORT Broker::DataType + + .. bro:enum:: Broker::TIME Broker::DataType + + .. bro:enum:: Broker::INTERVAL Broker::DataType + + .. bro:enum:: Broker::ENUM Broker::DataType + + .. bro:enum:: Broker::SET Broker::DataType + + .. bro:enum:: Broker::TABLE Broker::DataType + + .. bro:enum:: Broker::VECTOR Broker::DataType + + Enumerates the possible types that :bro:see:`Broker::Data` may be in + terms of Bro data types. + +Functions +######### +.. bro:id:: Broker::__data + + :Type: :bro:type:`function` (d: :bro:type:`any`) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__data_type + + :Type: :bro:type:`function` (d: :bro:type:`Broker::Data`) : :bro:type:`Broker::DataType` + + +.. bro:id:: Broker::__record_assign + + :Type: :bro:type:`function` (r: :bro:type:`Broker::Data`, idx: :bro:type:`count`, d: :bro:type:`any`) : :bro:type:`bool` + + +.. bro:id:: Broker::__record_create + + :Type: :bro:type:`function` (sz: :bro:type:`count`) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__record_iterator + + :Type: :bro:type:`function` (r: :bro:type:`Broker::Data`) : :bro:type:`opaque` of Broker::RecordIterator + + +.. bro:id:: Broker::__record_iterator_last + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::RecordIterator) : :bro:type:`bool` + + +.. bro:id:: Broker::__record_iterator_next + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::RecordIterator) : :bro:type:`bool` + + +.. bro:id:: Broker::__record_iterator_value + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::RecordIterator) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__record_lookup + + :Type: :bro:type:`function` (r: :bro:type:`Broker::Data`, idx: :bro:type:`count`) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__record_size + + :Type: :bro:type:`function` (r: :bro:type:`Broker::Data`) : :bro:type:`count` + + +.. bro:id:: Broker::__set_clear + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`) : :bro:type:`bool` + + +.. bro:id:: Broker::__set_contains + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`bool` + + +.. bro:id:: Broker::__set_create + + :Type: :bro:type:`function` () : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__set_insert + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`bool` + + +.. bro:id:: Broker::__set_iterator + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`) : :bro:type:`opaque` of Broker::SetIterator + + +.. bro:id:: Broker::__set_iterator_last + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::SetIterator) : :bro:type:`bool` + + +.. bro:id:: Broker::__set_iterator_next + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::SetIterator) : :bro:type:`bool` + + +.. bro:id:: Broker::__set_iterator_value + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::SetIterator) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__set_remove + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`bool` + + +.. bro:id:: Broker::__set_size + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`) : :bro:type:`count` + + +.. bro:id:: Broker::__table_clear + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`) : :bro:type:`bool` + + +.. bro:id:: Broker::__table_contains + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`bool` + + +.. bro:id:: Broker::__table_create + + :Type: :bro:type:`function` () : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__table_insert + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`, key: :bro:type:`any`, val: :bro:type:`any`) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__table_iterator + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`) : :bro:type:`opaque` of Broker::TableIterator + + +.. bro:id:: Broker::__table_iterator_last + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::TableIterator) : :bro:type:`bool` + + +.. bro:id:: Broker::__table_iterator_next + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::TableIterator) : :bro:type:`bool` + + +.. bro:id:: Broker::__table_iterator_value + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::TableIterator) : :bro:type:`Broker::TableItem` + + +.. bro:id:: Broker::__table_lookup + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__table_remove + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__table_size + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`) : :bro:type:`count` + + +.. bro:id:: Broker::__vector_clear + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`) : :bro:type:`bool` + + +.. bro:id:: Broker::__vector_create + + :Type: :bro:type:`function` () : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__vector_insert + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`, idx: :bro:type:`count`, d: :bro:type:`any`) : :bro:type:`bool` + + +.. bro:id:: Broker::__vector_iterator + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`) : :bro:type:`opaque` of Broker::VectorIterator + + +.. bro:id:: Broker::__vector_iterator_last + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::VectorIterator) : :bro:type:`bool` + + +.. bro:id:: Broker::__vector_iterator_next + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::VectorIterator) : :bro:type:`bool` + + +.. bro:id:: Broker::__vector_iterator_value + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::VectorIterator) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__vector_lookup + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`, idx: :bro:type:`count`) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__vector_remove + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`, idx: :bro:type:`count`) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__vector_replace + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`, idx: :bro:type:`count`, d: :bro:type:`any`) : :bro:type:`Broker::Data` + + +.. bro:id:: Broker::__vector_size + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`) : :bro:type:`count` + + + diff --git a/doc/scripts/base/bif/event.bif.bro.rst b/doc/scripts/base/bif/event.bif.bro.rst new file mode 100644 index 0000000000..227e85c658 --- /dev/null +++ b/doc/scripts/base/bif/event.bif.bro.rst @@ -0,0 +1,1507 @@ +:tocdepth: 3 + +base/bif/event.bif.bro +====================== +.. bro:namespace:: GLOBAL + +The protocol-independent events that the C/C++ core of Bro can generate. + +This is mostly events not related to a specific transport- or +application-layer protocol, but also includes a few that may be generated +by more than one protocols analyzer (like events generated by both UDP and +TCP analysis.) + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================================== ============================================================================= +:bro:id:`OS_version_found`: :bro:type:`event` Generated when an operating system has been fingerprinted. +:bro:id:`anonymization_mapping`: :bro:type:`event` Deprecated. +:bro:id:`bro_done`: :bro:type:`event` Generated at Bro termination time. +:bro:id:`bro_init`: :bro:type:`event` Generated at Bro initialization time. +:bro:id:`bro_script_loaded`: :bro:type:`event` Raised for each policy script loaded by the script interpreter. +:bro:id:`conn_stats`: :bro:type:`event` Generated when a TCP connection terminated, passing on statistics about the + two endpoints. +:bro:id:`conn_weird`: :bro:type:`event` Generated for unexpected activity related to a specific connection. +:bro:id:`connection_external`: :bro:type:`event` Generated for a new connection received from the communication subsystem. +:bro:id:`connection_flow_label_changed`: :bro:type:`event` Generated for a connection over IPv6 when one direction has changed + the flow label that it's using. +:bro:id:`connection_reused`: :bro:type:`event` Generated when a connection 4-tuple is reused. +:bro:id:`connection_state_remove`: :bro:type:`event` Generated when a connection's internal state is about to be removed from + memory. +:bro:id:`connection_status_update`: :bro:type:`event` Generated in regular intervals during the lifetime of a connection. +:bro:id:`connection_timeout`: :bro:type:`event` Generated when a TCP connection timed out. +:bro:id:`content_gap`: :bro:type:`event` Generated when Bro detects a gap in a reassembled TCP payload stream. +:bro:id:`dns_mapping_altered`: :bro:type:`event` Generated when an internal DNS lookup produced a different result than in + the past. +:bro:id:`dns_mapping_lost_name`: :bro:type:`event` Generated when an internal DNS lookup returned zero answers even though it + had succeeded in the past. +:bro:id:`dns_mapping_new_name`: :bro:type:`event` Generated when an internal DNS lookup succeeded but an earlier attempt + did not. +:bro:id:`dns_mapping_unverified`: :bro:type:`event` Generated when an internal DNS lookup got no answer even though it had + succeeded in the past. +:bro:id:`dns_mapping_valid`: :bro:type:`event` Generated when an internal DNS lookup produces the same result as last time. +:bro:id:`esp_packet`: :bro:type:`event` Generated for any packets using the IPv6 Encapsulating Security Payload (ESP) + extension header. +:bro:id:`event_queue_flush_point`: :bro:type:`event` Marks a point in the event stream at which the event queue started flushing. +:bro:id:`file_gap`: :bro:type:`event` Indicates that a chunk of the file is missing. +:bro:id:`file_new`: :bro:type:`event` Indicates that an analysis of a new file has begun. +:bro:id:`file_opened`: :bro:type:`event` Generated each time Bro's script interpreter opens a file. +:bro:id:`file_over_new_connection`: :bro:type:`event` Indicates that a file has been seen being transferred over a connection + different from the original. +:bro:id:`file_reassembly_overflow`: :bro:type:`event` Indicates that the file had an overflow of the reassembly buffer. +:bro:id:`file_sniff`: :bro:type:`event` Provide all metadata that has been inferred about a particular file + from inspection of the initial content that been seen at the beginning + of the file. +:bro:id:`file_state_remove`: :bro:type:`event` This event is generated each time file analysis is ending for a given file. +:bro:id:`file_timeout`: :bro:type:`event` Indicates that file analysis has timed out because no activity was seen + for the file in a while. +:bro:id:`finished_send_state`: :bro:type:`event` Generated after a call to :bro:id:`send_state` when all data has been + successfully sent to the remote side. +:bro:id:`flow_weird`: :bro:type:`event` Generated for unexpected activity related to a pair of hosts, but independent + of a specific connection. +:bro:id:`gaobot_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`get_file_handle`: :bro:type:`event` This event is handled to provide feedback to the file analysis framework + about how to identify the logical "file" to which some data/input + belongs. +:bro:id:`ipv6_ext_headers`: :bro:type:`event` Generated for every IPv6 packet that contains extension headers. +:bro:id:`kazaa_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`load_sample`: :bro:type:`event` Generated regularly for the purpose of profiling Bro's processing. +:bro:id:`mobile_ipv6_message`: :bro:type:`event` Generated for any packet using a Mobile IPv6 Mobility Header. +:bro:id:`napster_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`net_weird`: :bro:type:`event` Generated for unexpected activity that is not tied to a specific connection + or pair of hosts. +:bro:id:`new_connection`: :bro:type:`event` Generated for every new connection. +:bro:id:`new_event`: :bro:type:`event` A meta event generated for events that Bro raises. +:bro:id:`new_packet`: :bro:type:`event` Generated for all packets that make it into Bro's connection processing. +:bro:id:`packet_contents`: :bro:type:`event` Generated for every packet that has a non-empty transport-layer payload. +:bro:id:`print_hook`: :bro:type:`event` Deprecated. +:bro:id:`profiling_update`: :bro:type:`event` Generated each time Bro's internal profiling log is updated. +:bro:id:`protocol_confirmation`: :bro:type:`event` Generated when a protocol analyzer confirms that a connection is indeed + using that protocol. +:bro:id:`protocol_violation`: :bro:type:`event` Generated when a protocol analyzer determines that a connection it is parsing + is not conforming to the protocol it expects. +:bro:id:`raw_packet`: :bro:type:`event` Generated for every packet Bro sees that have a valid link-layer header. +:bro:id:`remote_capture_filter`: :bro:type:`event` Generated when a remote peer sent us a capture filter. +:bro:id:`remote_connection_closed`: :bro:type:`event` Generated when a connection to a remote Bro has been closed. +:bro:id:`remote_connection_error`: :bro:type:`event` Generated when a connection to a remote Bro encountered an error. +:bro:id:`remote_connection_established`: :bro:type:`event` Generated when a connection to a remote Bro has been established. +:bro:id:`remote_connection_handshake_done`: :bro:type:`event` Generated when a remote connection's initial handshake has been completed. +:bro:id:`remote_event_registered`: :bro:type:`event` Generated for each event registered by a remote peer. +:bro:id:`remote_log`: :bro:type:`event` Generated for communication log messages. +:bro:id:`remote_log_peer`: :bro:type:`event` Generated for communication log messages. +:bro:id:`remote_pong`: :bro:type:`event` Generated when a remote peer has answered to our ping. +:bro:id:`remote_state_access_performed`: :bro:type:`event` Generated each time a remote state access has been replayed locally. +:bro:id:`remote_state_inconsistency`: :bro:type:`event` Generated if state synchronization detects an inconsistency. +:bro:id:`reporter_error`: :bro:type:`event` :bro:attr:`&error_handler` Raised for errors reported via Bro's reporter framework. +:bro:id:`reporter_info`: :bro:type:`event` :bro:attr:`&error_handler` Raised for informational messages reported via Bro's reporter framework. +:bro:id:`reporter_warning`: :bro:type:`event` :bro:attr:`&error_handler` Raised for warnings reported via Bro's reporter framework. +:bro:id:`rexmit_inconsistency`: :bro:type:`event` Generated when Bro detects a TCP retransmission inconsistency. +:bro:id:`root_backdoor_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`rotate_interval`: :bro:type:`event` Deprecated. +:bro:id:`rotate_size`: :bro:type:`event` Deprecated. +:bro:id:`scheduled_analyzer_applied`: :bro:type:`event` Generated when a connection is seen that is marked as being expected. +:bro:id:`signature_match`: :bro:type:`event` Generated when a signature matches. +:bro:id:`software_parse_error`: :bro:type:`event` Generated when a protocol analyzer finds an identification of a software + used on a system but cannot parse it. +:bro:id:`software_unparsed_version_found`: :bro:type:`event` Generated when a protocol analyzer finds an identification of a software + used on a system. +:bro:id:`software_version_found`: :bro:type:`event` Generated when a protocol analyzer finds an identification of a software + used on a system. +:bro:id:`tunnel_changed`: :bro:type:`event` Generated for a connection whose tunneling has changed. +:bro:id:`udp_session_done`: :bro:type:`event` Generated when a UDP session for a supported protocol has finished. +======================================================================== ============================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: OS_version_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`, host: :bro:type:`addr`, OS: :bro:type:`OS_version`) + + Generated when an operating system has been fingerprinted. Bro uses `p0f + `__ to fingerprint endpoints passively, + and it raises this event for each system identified. The p0f fingerprints are + defined by :bro:id:`passive_fingerprint_file`. + + + :c: The connection. + + + :host: The host running the reported OS. + + + :OS: The OS version string. + + .. bro:see:: passive_fingerprint_file software_parse_error + software_version_found software_unparsed_version_found + generate_OS_version_event + +.. bro:id:: anonymization_mapping + + :Type: :bro:type:`event` (orig: :bro:type:`addr`, mapped: :bro:type:`addr`) + + Deprecated. Will be removed. + +.. bro:id:: bro_done + + :Type: :bro:type:`event` () + + Generated at Bro termination time. The event engine generates this event when + Bro is about to terminate, either due to having exhausted reading its input + trace file(s), receiving a termination signal, or because Bro was run without + a network input source and has finished executing any global statements. + + .. bro:see:: bro_init + + .. note:: + + If Bro terminates due to an invocation of :bro:id:`exit`, then this event + is not generated. + +.. bro:id:: bro_init + + :Type: :bro:type:`event` () + + Generated at Bro initialization time. The event engine generates this + event just before normal input processing begins. It can be used to execute + one-time initialization code at startup. At the time a handler runs, Bro will + have executed any global initializations and statements. + + .. bro:see:: bro_done + + .. note:: + + When a ``bro_init`` handler executes, Bro has not yet seen any input + packets and therefore :bro:id:`network_time` is not initialized yet. An + artifact of that is that any timer installed in a ``bro_init`` handler + will fire immediately with the first packet. The standard way to work + around that is to ignore the first time the timer fires and immediately + reschedule. + + +.. bro:id:: bro_script_loaded + + :Type: :bro:type:`event` (path: :bro:type:`string`, level: :bro:type:`count`) + + Raised for each policy script loaded by the script interpreter. + + + :path: The full path to the script loaded. + + + :level: The "nesting level": zero for a top-level Bro script and incremented + recursively for each ``@load``. + +.. bro:id:: conn_stats + + :Type: :bro:type:`event` (c: :bro:type:`connection`, os: :bro:type:`endpoint_stats`, rs: :bro:type:`endpoint_stats`) + + Generated when a TCP connection terminated, passing on statistics about the + two endpoints. This event is always generated when Bro flushes the internal + connection state, independent of how a connection terminates. + + + :c: The connection. + + + :os: Statistics for the originator endpoint. + + + :rs: Statistics for the responder endpoint. + + .. bro:see:: connection_state_remove + +.. bro:id:: conn_weird + + :Type: :bro:type:`event` (name: :bro:type:`string`, c: :bro:type:`connection`, addl: :bro:type:`string`) + + Generated for unexpected activity related to a specific connection. When + Bro's packet analysis encounters activity that does not conform to a + protocol's specification, it raises one of the ``*_weird`` events to report + that. This event is raised if the activity is tied directly to a specific + connection. + + + :name: A unique name for the specific type of "weird" situation. Bro's default + scripts use this name in filtering policies that specify which + "weirds" are worth reporting. + + + :c: The corresponding connection. + + + :addl: Optional additional context further describing the situation. + + .. bro:see:: flow_weird net_weird + + .. note:: "Weird" activity is much more common in real-world network traffic + than one would intuitively expect. While in principle, any protocol + violation could be an attack attempt, it's much more likely that an + endpoint's implementation interprets an RFC quite liberally. + +.. bro:id:: connection_external + + :Type: :bro:type:`event` (c: :bro:type:`connection`, tag: :bro:type:`string`) + + Generated for a new connection received from the communication subsystem. + Remote peers can inject packets into Bro's packet loop, for example via + Broccoli. The communication system + raises this event with the first packet of a connection coming in this way. + + + :c: The connection. + + + :tag: TODO. + +.. bro:id:: connection_flow_label_changed + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, old_label: :bro:type:`count`, new_label: :bro:type:`count`) + + Generated for a connection over IPv6 when one direction has changed + the flow label that it's using. + + + :c: The connection. + + + :is_orig: True if the event is raised for the originator side. + + + :old_label: The old flow label that the endpoint was using. + + + :new_label: The new flow label that the endpoint is using. + + .. bro:see:: connection_established new_connection + +.. bro:id:: connection_reused + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a connection 4-tuple is reused. This event is raised when Bro + sees a new TCP session or UDP flow using a 4-tuple matching that of an + earlier connection it still considers active. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_state_remove + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a connection's internal state is about to be removed from + memory. Bro generates this event reliably once for every connection when it + is about to delete the internal state. As such, the event is well-suited for + script-level cleanup that needs to be performed for every connection. This + event is generated not only for TCP sessions but also for UDP and ICMP + flows. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_reused + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection udp_inactivity_timeout + tcp_inactivity_timeout icmp_inactivity_timeout conn_stats + +.. bro:id:: connection_status_update + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated in regular intervals during the lifetime of a connection. The + event is raised each ``connection_status_update_interval`` seconds + and can be used to check conditions on a regular basis. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_reused + connection_state_remove connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_timeout + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a TCP connection timed out. This event is raised when + no activity was seen for an interval of at least + :bro:id:`tcp_connection_linger`, and either one endpoint has already + closed the connection or one side never became active. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_reused + connection_state_remove connection_status_update + scheduled_analyzer_applied new_connection new_connection_contents + partial_connection + + .. note:: + + The precise semantics of this event can be unintuitive as it only + covers a subset of cases where a connection times out. Often, handling + :bro:id:`connection_state_remove` is the better option. That one will be + generated reliably when an interval of ``tcp_inactivity_timeout`` has + passed without any activity seen (but also for all other ways a + connection may terminate). + +.. bro:id:: content_gap + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, seq: :bro:type:`count`, length: :bro:type:`count`) + + Generated when Bro detects a gap in a reassembled TCP payload stream. This + event is raised when Bro, while reassembling a payload stream, determines + that a chunk of payload is missing (e.g., because the responder has already + acknowledged it, even though Bro didn't see it). + + + :c: The connection. + + + :is_orig: True if the gap is on the originator's side. + + + :seq: The sequence number where the gap starts. + + + :length: The number of bytes missing. + + .. note:: + + Content gaps tend to occur occasionally for various reasons, including + broken TCP stacks. If, however, one finds lots of them, that typically + means that there is a problem with the monitoring infrastructure such as + a tap dropping packets, split routing on the path, or reordering at the + tap. + +.. bro:id:: dns_mapping_altered + + :Type: :bro:type:`event` (dm: :bro:type:`dns_mapping`, old_addrs: :bro:type:`addr_set`, new_addrs: :bro:type:`addr_set`) + + Generated when an internal DNS lookup produced a different result than in + the past. Bro keeps an internal DNS cache for host names and IP addresses + it has already resolved. This event is generated when a subsequent lookup + returns a different answer than we have stored in the cache. + + + :dm: A record describing the new resolver result. + + + :old_addrs: Addresses that used to be part of the returned set for the query + described by *dm*, but are not anymore. + + + :new_addrs: Addresses that were not part of the returned set for the query + described by *dm*, but now are. + + .. bro:see:: dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid + +.. bro:id:: dns_mapping_lost_name + + :Type: :bro:type:`event` (dm: :bro:type:`dns_mapping`) + + Generated when an internal DNS lookup returned zero answers even though it + had succeeded in the past. Bro keeps an internal DNS cache for host names + and IP addresses it has already resolved. This event is generated when + on a subsequent lookup we receive an answer that is empty even + though we have already stored a result in the cache. + + + :dm: A record describing the old resolver result. + + .. bro:see:: dns_mapping_altered dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid + +.. bro:id:: dns_mapping_new_name + + :Type: :bro:type:`event` (dm: :bro:type:`dns_mapping`) + + Generated when an internal DNS lookup succeeded but an earlier attempt + did not. Bro keeps an internal DNS cache for host names and IP + addresses it has already resolved. This event is generated when a subsequent + lookup produces an answer for a query that was marked as failed in the cache. + + + :dm: A record describing the new resolver result. + + .. bro:see:: dns_mapping_altered dns_mapping_lost_name dns_mapping_unverified + dns_mapping_valid + +.. bro:id:: dns_mapping_unverified + + :Type: :bro:type:`event` (dm: :bro:type:`dns_mapping`) + + Generated when an internal DNS lookup got no answer even though it had + succeeded in the past. Bro keeps an internal DNS cache for host names and IP + addresses it has already resolved. This event is generated when a + subsequent lookup does not produce an answer even though we have + already stored a result in the cache. + + + :dm: A record describing the old resolver result. + + .. bro:see:: dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_valid + +.. bro:id:: dns_mapping_valid + + :Type: :bro:type:`event` (dm: :bro:type:`dns_mapping`) + + Generated when an internal DNS lookup produces the same result as last time. + Bro keeps an internal DNS cache for host names and IP addresses it has + already resolved. This event is generated when a subsequent lookup returns + the same result as stored in the cache. + + + :dm: A record describing the new resolver result (which matches the old one). + + .. bro:see:: dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified + +.. bro:id:: esp_packet + + :Type: :bro:type:`event` (p: :bro:type:`pkt_hdr`) + + Generated for any packets using the IPv6 Encapsulating Security Payload (ESP) + extension header. + + + :p: Information from the header of the packet that triggered the event. + + .. bro:see:: new_packet tcp_packet ipv6_ext_headers + +.. bro:id:: event_queue_flush_point + + :Type: :bro:type:`event` () + + Marks a point in the event stream at which the event queue started flushing. + +.. bro:id:: file_gap + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, offset: :bro:type:`count`, len: :bro:type:`count`) + + Indicates that a chunk of the file is missing. + + + :f: The file. + + + :offset: The byte offset from the start of the file at which the gap begins. + + + :len: The number of missing bytes. + + .. bro:see:: file_new file_over_new_connection file_timeout + file_sniff file_state_remove file_reassembly_overflow + +.. bro:id:: file_new + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`) + + Indicates that an analysis of a new file has begun. The analysis can be + augmented at this time via :bro:see:`Files::add_analyzer`. + + + :f: The file. + + .. bro:see:: file_over_new_connection file_timeout file_gap + file_sniff file_state_remove + +.. bro:id:: file_opened + + :Type: :bro:type:`event` (f: :bro:type:`file`) + + Generated each time Bro's script interpreter opens a file. This event is + triggered only for files opened via :bro:id:`open`, and in particular not for + normal log files as created by log writers. + + + :f: The opened file. + +.. bro:id:: file_over_new_connection + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Indicates that a file has been seen being transferred over a connection + different from the original. + + + :f: The file. + + + :c: The new connection over which the file is seen being transferred. + + + :is_orig: true if the originator of *c* is the one sending the file. + + .. bro:see:: file_new file_timeout file_gap file_sniff + file_state_remove + +.. bro:id:: file_reassembly_overflow + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, offset: :bro:type:`count`, skipped: :bro:type:`count`) + + Indicates that the file had an overflow of the reassembly buffer. + This is a specialization of the :bro:id:`file_gap` event. + + + :f: The file. + + + :offset: The byte offset from the start of the file at which the reassembly + couldn't continue due to running out of reassembly buffer space. + + + :skipped: The number of bytes of the file skipped over to flush some + file data and get back under the reassembly buffer size limit. + This value will also be represented as a gap. + + .. bro:see:: file_new file_over_new_connection file_timeout + file_sniff file_state_remove file_gap + Files::enable_reassembler Files::reassembly_buffer_size + Files::enable_reassembly Files::disable_reassembly + Files::set_reassembly_buffer_size + +.. bro:id:: file_sniff + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, meta: :bro:type:`fa_metadata`) + + Provide all metadata that has been inferred about a particular file + from inspection of the initial content that been seen at the beginning + of the file. The analysis can be augmented at this time via + :bro:see:`Files::add_analyzer`. The amount of data fed into the file + sniffing can be increased or decreased by changing either + :bro:see:`default_file_bof_buffer_size` or the `bof_buffer_size` field + in an `fa_file` record. The event will be raised even if content inspection + has been unable to infer any metadata, in which case the fields in *meta* + will be left all unset. + + + :f: The file. + + + :meta: Metadata that's been discovered about the file. + + .. bro:see:: file_over_new_connection file_timeout file_gap + file_state_remove + +.. bro:id:: file_state_remove + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`) + + This event is generated each time file analysis is ending for a given file. + + + :f: The file. + + .. bro:see:: file_new file_over_new_connection file_timeout file_gap + file_sniff + +.. bro:id:: file_timeout + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`) + + Indicates that file analysis has timed out because no activity was seen + for the file in a while. + + + :f: The file. + + .. bro:see:: file_new file_over_new_connection file_gap + file_sniff file_state_remove default_file_timeout_interval + Files::set_timeout_interval + +.. bro:id:: finished_send_state + + :Type: :bro:type:`event` (p: :bro:type:`event_peer`) + + Generated after a call to :bro:id:`send_state` when all data has been + successfully sent to the remote side. While this event is + intended primarily for use by Bro's communication framework, it can also + trigger additional code if helpful. + + + :p: A record describing the remote peer. + + .. bro:see:: remote_capture_filter remote_connection_closed + remote_connection_error remote_connection_established + remote_connection_handshake_done remote_event_registered remote_log remote_pong + remote_state_access_performed remote_state_inconsistency print_hook + +.. bro:id:: flow_weird + + :Type: :bro:type:`event` (name: :bro:type:`string`, src: :bro:type:`addr`, dst: :bro:type:`addr`) + + Generated for unexpected activity related to a pair of hosts, but independent + of a specific connection. When Bro's packet analysis encounters activity + that does not conform to a protocol's specification, it raises one of + the ``*_weird`` events to report that. This event is raised if the activity + is related to a pair of hosts, yet not to a specific connection between + them. + + + :name: A unique name for the specific type of "weird" situation. Bro's default + scripts use this name in filtering policies that specify which + "weirds" are worth reporting. + + + :src: The source address corresponding to the activity. + + + :dst: The destination address corresponding to the activity. + + .. bro:see:: conn_weird net_weird + + .. note:: "Weird" activity is much more common in real-world network traffic + than one would intuitively expect. While in principle, any protocol + violation could be an attack attempt, it's much more likely that an + endpoint's implementation interprets an RFC quite liberally. + +.. bro:id:: gaobot_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: get_file_handle + + :Type: :bro:type:`event` (tag: :bro:type:`Analyzer::Tag`, c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + This event is handled to provide feedback to the file analysis framework + about how to identify the logical "file" to which some data/input + belongs. All incoming data to the framework is buffered, and depends + on a handler for this event to return a string value that uniquely + identifies a file. Among all handlers of this event, the last one to + call :bro:see:`set_file_handle` will "win". + + + :tag: The analyzer which is carrying the file data. + + + :c: The connection which is carrying the file data. + + + :is_orig: The direction the file data is flowing over the connection. + + .. bro:see:: set_file_handle + +.. bro:id:: ipv6_ext_headers + + :Type: :bro:type:`event` (c: :bro:type:`connection`, p: :bro:type:`pkt_hdr`) + + Generated for every IPv6 packet that contains extension headers. + This is potentially an expensive event to handle if analysing IPv6 traffic + that happens to utilize extension headers frequently. + + + :c: The connection the packet is part of. + + + :p: Information from the header of the packet that triggered the event. + + .. bro:see:: new_packet tcp_packet packet_contents esp_packet + +.. bro:id:: kazaa_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: load_sample + + :Type: :bro:type:`event` (samples: :bro:type:`load_sample_info`, CPU: :bro:type:`interval`, dmem: :bro:type:`int`) + + Generated regularly for the purpose of profiling Bro's processing. This event + is raised for every :bro:id:`load_sample_freq` packet. For these packets, + Bro records script-level functions executed during their processing as well + as further internal locations. By sampling the processing in this form, one + can understand where Bro spends its time. + + + :samples: A set with functions and locations seen during the processing of + the sampled packet. + + + :CPU: The CPU time spent on processing the sampled packet. + + + :dmem: The difference in memory usage caused by processing the sampled packet. + +.. bro:id:: mobile_ipv6_message + + :Type: :bro:type:`event` (p: :bro:type:`pkt_hdr`) + + Generated for any packet using a Mobile IPv6 Mobility Header. + + + :p: Information from the header of the packet that triggered the event. + + .. bro:see:: new_packet tcp_packet ipv6_ext_headers + +.. bro:id:: napster_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: net_weird + + :Type: :bro:type:`event` (name: :bro:type:`string`) + + Generated for unexpected activity that is not tied to a specific connection + or pair of hosts. When Bro's packet analysis encounters activity that + does not conform to a protocol's specification, it raises one of the + ``*_weird`` events to report that. This event is raised if the activity is + not tied directly to a specific connection or pair of hosts. + + + :name: A unique name for the specific type of "weird" situation. Bro's default + scripts use this name in filtering policies that specify which + "weirds" are worth reporting. + + .. bro:see:: flow_weird + + .. note:: "Weird" activity is much more common in real-world network traffic + than one would intuitively expect. While in principle, any protocol + violation could be an attack attempt, it's much more likely that an + endpoint's implementation interprets an RFC quite liberally. + +.. bro:id:: new_connection + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for every new connection. This event is raised with the first + packet of a previously unknown connection. Bro uses a flow-based definition + of "connection" here that includes not only TCP sessions but also UDP and + ICMP flows. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_reused + connection_state_remove connection_status_update connection_timeout + scheduled_analyzer_applied new_connection_contents partial_connection + + .. note:: + + Handling this event is potentially expensive. For example, during a SYN + flooding attack, every spoofed SYN packet will lead to a new + event. + +.. bro:id:: new_event + + :Type: :bro:type:`event` (name: :bro:type:`string`, params: :bro:type:`call_argument_vector`) + + A meta event generated for events that Bro raises. This will report all + events for which at least one handler is defined. + + Note that handling this meta event is expensive and should be limited to + debugging purposes. + + + :name: The name of the event. + + + :params: The event's parameters. + +.. bro:id:: new_packet + + :Type: :bro:type:`event` (c: :bro:type:`connection`, p: :bro:type:`pkt_hdr`) + + Generated for all packets that make it into Bro's connection processing. In + contrast to :bro:id:`raw_packet` this filters out some more packets that don't + pass certain sanity checks. + + This is a very low-level and expensive event that should be avoided when at all + possible. It's usually infeasible to handle when processing even medium volumes + of traffic in real-time. That said, if you work from a trace and want to do some + packet-level analysis, it may come in handy. + + + :c: The connection the packet is part of. + + + :p: Information from the header of the packet that triggered the event. + + .. bro:see:: tcp_packet packet_contents raw_packet + +.. bro:id:: packet_contents + + :Type: :bro:type:`event` (c: :bro:type:`connection`, contents: :bro:type:`string`) + + Generated for every packet that has a non-empty transport-layer payload. + This is a very low-level and expensive event that should be avoided when + at all possible. It's usually infeasible to handle when processing even + medium volumes of traffic in real-time. It's even worse than + :bro:id:`new_packet`. That said, if you work from a trace and want to + do some packet-level analysis, it may come in handy. + + + :c: The connection the packet is part of. + + + :contents: The raw transport-layer payload. + + .. bro:see:: new_packet tcp_packet + +.. bro:id:: print_hook + + :Type: :bro:type:`event` (f: :bro:type:`file`, s: :bro:type:`string`) + + Deprecated. Will be removed. + +.. bro:id:: profiling_update + + :Type: :bro:type:`event` (f: :bro:type:`file`, expensive: :bro:type:`bool`) + + Generated each time Bro's internal profiling log is updated. The file is + defined by :bro:id:`profiling_file`, and its update frequency by + :bro:id:`profiling_interval` and :bro:id:`expensive_profiling_multiple`. + + + :f: The profiling file. + + + :expensive: True if this event corresponds to heavier-weight profiling as + indicated by the :bro:id:`expensive_profiling_multiple` variable. + + .. bro:see:: profiling_interval expensive_profiling_multiple + +.. bro:id:: protocol_confirmation + + :Type: :bro:type:`event` (c: :bro:type:`connection`, atype: :bro:type:`Analyzer::Tag`, aid: :bro:type:`count`) + + Generated when a protocol analyzer confirms that a connection is indeed + using that protocol. Bro's dynamic protocol detection heuristically activates + analyzers as soon as it believes a connection *could* be using a particular + protocol. It is then left to the corresponding analyzer to verify whether + that is indeed the case; if so, this event will be generated. + + + :c: The connection. + + + :atype: The type of the analyzer confirming that its protocol is in + use. The value is one of the ``Analyzer::ANALYZER_*`` constants. For example, + ``Analyzer::ANALYZER_HTTP`` means the HTTP analyzer determined that it's indeed + parsing an HTTP connection. + + + :aid: A unique integer ID identifying the specific *instance* of the + analyzer *atype* that is analyzing the connection ``c``. The ID can + be used to reference the analyzer when using builtin functions like + :bro:id:`disable_analyzer`. + + .. bro:see:: protocol_violation + + .. note:: + + Bro's default scripts use this event to determine the ``service`` column + of :bro:type:`Conn::Info`: once confirmed, the protocol will be listed + there (and thus in ``conn.log``). + +.. bro:id:: protocol_violation + + :Type: :bro:type:`event` (c: :bro:type:`connection`, atype: :bro:type:`Analyzer::Tag`, aid: :bro:type:`count`, reason: :bro:type:`string`) + + Generated when a protocol analyzer determines that a connection it is parsing + is not conforming to the protocol it expects. Bro's dynamic protocol + detection heuristically activates analyzers as soon as it believes a + connection *could* be using a particular protocol. It is then left to the + corresponding analyzer to verify whether that is indeed the case; if not, + the analyzer will trigger this event. + + + :c: The connection. + + + :atype: The type of the analyzer confirming that its protocol is in + use. The value is one of the ``Analyzer::ANALYZER_*`` constants. For example, + ``Analyzer::ANALYZER_HTTP`` means the HTTP analyzer determined that it's indeed + parsing an HTTP connection. + + + :aid: A unique integer ID identifying the specific *instance* of the + analyzer *atype* that is analyzing the connection ``c``. The ID can + be used to reference the analyzer when using builtin functions like + :bro:id:`disable_analyzer`. + + + :reason: TODO. + + .. bro:see:: protocol_confirmation + + .. note:: + + Bro's default scripts use this event to disable an analyzer via + :bro:id:`disable_analyzer` if it's parsing the wrong protocol. That's + however a script-level decision and not done automatically by the event + engine. + +.. bro:id:: raw_packet + + :Type: :bro:type:`event` (p: :bro:type:`raw_pkt_hdr`) + + Generated for every packet Bro sees that have a valid link-layer header. This + is a very very low-level and expensive event that should be avoided when at all + possible. It's usually infeasible to handle when processing even medium volumes + of traffic in real-time. That said, if you work from a trace and want to do some + packet-level analysis, it may come in handy. + + + :p: Information from the header of the packet that triggered the event. + + .. bro:see:: new_packet packet_contents + +.. bro:id:: remote_capture_filter + + :Type: :bro:type:`event` (p: :bro:type:`event_peer`, filter: :bro:type:`string`) + + Generated when a remote peer sent us a capture filter. While this event is + intended primarily for use by Bro's communication framework, it can also + trigger additional code if helpful. + + + :p: A record describing the peer. + + + :filter: The filter string sent by the peer. + + .. bro:see:: remote_connection_closed remote_connection_error + remote_connection_established remote_connection_handshake_done + remote_event_registered remote_log remote_pong remote_state_access_performed + remote_state_inconsistency print_hook + +.. bro:id:: remote_connection_closed + + :Type: :bro:type:`event` (p: :bro:type:`event_peer`) + + Generated when a connection to a remote Bro has been closed. This event is + intended primarily for use by Bro's communication framework, but it can + also trigger additional code if helpful. + + + :p: A record describing the peer. + + .. bro:see:: remote_capture_filter remote_connection_error + remote_connection_established remote_connection_handshake_done + remote_event_registered remote_log remote_pong remote_state_access_performed + remote_state_inconsistency print_hook + +.. bro:id:: remote_connection_error + + :Type: :bro:type:`event` (p: :bro:type:`event_peer`, reason: :bro:type:`string`) + + Generated when a connection to a remote Bro encountered an error. This event + is intended primarily for use by Bro's communication framework, but it can + also trigger additional code if helpful. + + + :p: A record describing the peer. + + + :reason: A textual description of the error. + + .. bro:see:: remote_capture_filter remote_connection_closed + remote_connection_established remote_connection_handshake_done + remote_event_registered remote_log remote_pong remote_state_access_performed + remote_state_inconsistency print_hook + +.. bro:id:: remote_connection_established + + :Type: :bro:type:`event` (p: :bro:type:`event_peer`) + + Generated when a connection to a remote Bro has been established. This event + is intended primarily for use by Bro's communication framework, but it can + also trigger additional code if helpful. + + + :p: A record describing the peer. + + .. bro:see:: remote_capture_filter remote_connection_closed remote_connection_error + remote_connection_handshake_done remote_event_registered remote_log remote_pong + remote_state_access_performed remote_state_inconsistency print_hook + +.. bro:id:: remote_connection_handshake_done + + :Type: :bro:type:`event` (p: :bro:type:`event_peer`) + + Generated when a remote connection's initial handshake has been completed. + This event is intended primarily for use by Bro's communication framework, + but it can also trigger additional code if helpful. + + + :p: A record describing the peer. + + .. bro:see:: remote_capture_filter remote_connection_closed remote_connection_error + remote_connection_established remote_event_registered remote_log remote_pong + remote_state_access_performed remote_state_inconsistency print_hook + +.. bro:id:: remote_event_registered + + :Type: :bro:type:`event` (p: :bro:type:`event_peer`, name: :bro:type:`string`) + + Generated for each event registered by a remote peer. This event is intended + primarily for use by Bro's communication framework, but it can also trigger + additional code if helpful. + + + :p: A record describing the peer. + + + :name: TODO. + + .. bro:see:: remote_capture_filter remote_connection_closed + remote_connection_error remote_connection_established + remote_connection_handshake_done remote_log remote_pong + remote_state_access_performed remote_state_inconsistency print_hook + +.. bro:id:: remote_log + + :Type: :bro:type:`event` (level: :bro:type:`count`, src: :bro:type:`count`, msg: :bro:type:`string`) + + Generated for communication log messages. While this event is + intended primarily for use by Bro's communication framework, it can also + trigger additional code if helpful. + + + :level: The log level, which is either :bro:id:`REMOTE_LOG_INFO` or + :bro:id:`REMOTE_LOG_ERROR`. + + + :src: The component of the communication system that logged the message. + Currently, this will be one of :bro:id:`REMOTE_SRC_CHILD` (Bro's + child process), :bro:id:`REMOTE_SRC_PARENT` (Bro's main process), or + :bro:id:`REMOTE_SRC_SCRIPT` (the script level). + + + :msg: The message logged. + + .. bro:see:: remote_capture_filter remote_connection_closed remote_connection_error + remote_connection_established remote_connection_handshake_done + remote_event_registered remote_pong remote_state_access_performed + remote_state_inconsistency print_hook remote_log_peer + +.. bro:id:: remote_log_peer + + :Type: :bro:type:`event` (p: :bro:type:`event_peer`, level: :bro:type:`count`, src: :bro:type:`count`, msg: :bro:type:`string`) + + Generated for communication log messages. While this event is + intended primarily for use by Bro's communication framework, it can also + trigger additional code if helpful. This event is equivalent to + :bro:see:`remote_log` except the message is with respect to a certain peer. + + + :p: A record describing the remote peer. + + + :level: The log level, which is either :bro:id:`REMOTE_LOG_INFO` or + :bro:id:`REMOTE_LOG_ERROR`. + + + :src: The component of the communication system that logged the message. + Currently, this will be one of :bro:id:`REMOTE_SRC_CHILD` (Bro's + child process), :bro:id:`REMOTE_SRC_PARENT` (Bro's main process), or + :bro:id:`REMOTE_SRC_SCRIPT` (the script level). + + + :msg: The message logged. + + .. bro:see:: remote_capture_filter remote_connection_closed remote_connection_error + remote_connection_established remote_connection_handshake_done + remote_event_registered remote_pong remote_state_access_performed + remote_state_inconsistency print_hook remote_log + +.. bro:id:: remote_pong + + :Type: :bro:type:`event` (p: :bro:type:`event_peer`, seq: :bro:type:`count`, d1: :bro:type:`interval`, d2: :bro:type:`interval`, d3: :bro:type:`interval`) + + Generated when a remote peer has answered to our ping. This event is part of + Bro's infrastructure for measuring communication latency. One can send a ping + by calling :bro:id:`send_ping` and when a corresponding reply is received, + this event will be raised. + + + :p: The peer sending us the pong. + + + :seq: The sequence number passed to the original :bro:id:`send_ping` call. + The number is sent back by the peer in its response. + + + :d1: The time interval between sending the ping and receiving the pong. This + is the latency of the complete path. + + + :d2: The time interval between sending out the ping to the network and its + reception at the peer. This is the network latency. + + + :d3: The time interval between when the peer's child process received the + ping and when its parent process sent the pong. This is the + processing latency at the peer. + + .. bro:see:: remote_capture_filter remote_connection_closed remote_connection_error + remote_connection_established remote_connection_handshake_done + remote_event_registered remote_log remote_state_access_performed + remote_state_inconsistency print_hook + +.. bro:id:: remote_state_access_performed + + :Type: :bro:type:`event` (id: :bro:type:`string`, v: :bro:type:`any`) + + Generated each time a remote state access has been replayed locally. This + event is primarily intended for debugging. + + + :id: The name of the Bro script variable that's being operated on. + + + :v: The new value of the variable. + + .. bro:see:: remote_capture_filter remote_connection_closed remote_connection_error + remote_connection_established remote_connection_handshake_done + remote_event_registered remote_log remote_pong remote_state_inconsistency + print_hook + +.. bro:id:: remote_state_inconsistency + + :Type: :bro:type:`event` (operation: :bro:type:`string`, id: :bro:type:`string`, expected_old: :bro:type:`string`, real_old: :bro:type:`string`) + + Generated if state synchronization detects an inconsistency. While this + event is intended primarily for use by Bro's communication framework, it can + also trigger additional code if helpful. This event is only raised if + :bro:id:`remote_check_sync_consistency` is false. + + + :operation: The textual description of the state operation performed. + + + :id: The name of the Bro script identifier that was operated on. + + + :expected_old: A textual representation of the value of *id* that was + expected to be found before the operation was carried out. + + + :real_old: A textual representation of the value of *id* that was actually + found before the operation was carried out. The difference between + *real_old* and *expected_old* is the inconsistency being reported. + + .. bro:see:: remote_capture_filter remote_connection_closed + remote_connection_error remote_connection_established + remote_connection_handshake_done remote_event_registered remote_log remote_pong + remote_state_access_performed print_hook remote_check_sync_consistency + +.. bro:id:: reporter_error + + :Type: :bro:type:`event` (t: :bro:type:`time`, msg: :bro:type:`string`, location: :bro:type:`string`) + :Attributes: :bro:attr:`&error_handler` + + Raised for errors reported via Bro's reporter framework. Such messages may + be generated internally by the event engine and also by other scripts calling + :bro:id:`Reporter::error`. + + + :t: The time the error was passed to the reporter. + + + :msg: The error message. + + + :location: A (potentially empty) string describing a location associated with + the error. + + .. bro:see:: reporter_info reporter_warning Reporter::info Reporter::warning + Reporter::error + + .. note:: Bro will not call reporter events recursively. If the handler of + any reporter event triggers a new reporter message itself, the output + will go to ``stderr`` instead. + +.. bro:id:: reporter_info + + :Type: :bro:type:`event` (t: :bro:type:`time`, msg: :bro:type:`string`, location: :bro:type:`string`) + :Attributes: :bro:attr:`&error_handler` + + Raised for informational messages reported via Bro's reporter framework. Such + messages may be generated internally by the event engine and also by other + scripts calling :bro:id:`Reporter::info`. + + + :t: The time the message was passed to the reporter. + + + :msg: The message itself. + + + :location: A (potentially empty) string describing a location associated with + the message. + + .. bro:see:: reporter_warning reporter_error Reporter::info Reporter::warning + Reporter::error + + .. note:: Bro will not call reporter events recursively. If the handler of + any reporter event triggers a new reporter message itself, the output + will go to ``stderr`` instead. + +.. bro:id:: reporter_warning + + :Type: :bro:type:`event` (t: :bro:type:`time`, msg: :bro:type:`string`, location: :bro:type:`string`) + :Attributes: :bro:attr:`&error_handler` + + Raised for warnings reported via Bro's reporter framework. Such messages may + be generated internally by the event engine and also by other scripts calling + :bro:id:`Reporter::warning`. + + + :t: The time the warning was passed to the reporter. + + + :msg: The warning message. + + + :location: A (potentially empty) string describing a location associated with + the warning. + + .. bro:see:: reporter_info reporter_error Reporter::info Reporter::warning + Reporter::error + + .. note:: Bro will not call reporter events recursively. If the handler of + any reporter event triggers a new reporter message itself, the output + will go to ``stderr`` instead. + +.. bro:id:: rexmit_inconsistency + + :Type: :bro:type:`event` (c: :bro:type:`connection`, t1: :bro:type:`string`, t2: :bro:type:`string`, tcp_flags: :bro:type:`string`) + + Generated when Bro detects a TCP retransmission inconsistency. When + reassembling a TCP stream, Bro buffers all payload until it sees the + responder acking it. If during that time, the sender resends a chunk of + payload but with different content than originally, this event will be + raised. In addition, if :bro:id:`tcp_max_old_segments` is larger than zero, + mismatches with that older still-buffered data will likewise trigger the event. + + + :c: The connection showing the inconsistency. + + + :t1: The original payload. + + + :t2: The new payload. + + + :tcp_flags: A string with the TCP flags of the packet triggering the + inconsistency. In the string, each character corresponds to one + set flag, as follows: ``S`` -> SYN; ``F`` -> FIN; ``R`` -> RST; + ``A`` -> ACK; ``P`` -> PUSH. This string will not always be set, + only if the information is available; it's "best effort". + + .. bro:see:: tcp_rexmit tcp_contents + +.. bro:id:: root_backdoor_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: rotate_interval + + :Type: :bro:type:`event` (f: :bro:type:`file`) + + Deprecated. Will be removed. + +.. bro:id:: rotate_size + + :Type: :bro:type:`event` (f: :bro:type:`file`) + + Deprecated. Will be removed. + +.. bro:id:: scheduled_analyzer_applied + + :Type: :bro:type:`event` (c: :bro:type:`connection`, a: :bro:type:`Analyzer::Tag`) + + Generated when a connection is seen that is marked as being expected. + The function :bro:id:`Analyzer::schedule_analyzer` tells Bro to expect a + particular connection to come up, and which analyzer to associate with it. + Once the first packet of such a connection is indeed seen, this event is + raised. + + + :c: The connection. + + + :a: The analyzer that was scheduled for the connection with the + :bro:id:`Analyzer::schedule_analyzer` call. When the event is raised, that + analyzer will already have been activated to process the connection. The + ``count`` is one of the ``ANALYZER_*`` constants, e.g., ``ANALYZER_HTTP``. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_reused + connection_state_remove connection_status_update connection_timeout + new_connection new_connection_contents partial_connection + + .. todo:: We don't have a good way to document the automatically generated + ``ANALYZER_*`` constants right now. + +.. bro:id:: signature_match + + :Type: :bro:type:`event` (state: :bro:type:`signature_state`, msg: :bro:type:`string`, data: :bro:type:`string`) + + Generated when a signature matches. Bro's signature engine provides + high-performance pattern matching separately from the normal script + processing. If a signature with an ``event`` action matches, this event is + raised. + + See the :doc:`user manual ` for more information + about Bro's signature engine. + + + :state: Context about the match, including which signatures triggered the + event and the connection for which the match was found. + + + :msg: The message passed to the ``event`` signature action. + + + :data: The last chunk of input that triggered the match. Note that the + specifics here are not well-defined as Bro does not buffer any input. + If a match is split across packet boundaries, only the last chunk + triggering the match will be passed on to the event. + +.. bro:id:: software_parse_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, host: :bro:type:`addr`, descr: :bro:type:`string`) + + Generated when a protocol analyzer finds an identification of a software + used on a system but cannot parse it. This is a protocol-independent event + that is fed by different analyzers. For example, the HTTP analyzer reports + user-agent and server software by raising this event if it cannot parse them + directly (if it can :bro:id:`software_version_found` will be generated + instead). + + + :c: The connection. + + + :host: The host running the reported software. + + + :descr: The raw (unparsed) software identification string as extracted from + the protocol. + + .. bro:see:: software_version_found software_unparsed_version_found + OS_version_found + +.. bro:id:: software_unparsed_version_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`, host: :bro:type:`addr`, str: :bro:type:`string`) + + Generated when a protocol analyzer finds an identification of a software + used on a system. This is a protocol-independent event that is fed by + different analyzers. For example, the HTTP analyzer reports user-agent and + server software by raising this event. Different from + :bro:id:`software_version_found` and :bro:id:`software_parse_error`, this + event is always raised, independent of whether Bro can parse the version + string. + + + :c: The connection. + + + :host: The host running the reported software. + + + :str: The software identification string as extracted from the protocol. + + .. bro:see:: software_parse_error software_version_found OS_version_found + +.. bro:id:: software_version_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`, host: :bro:type:`addr`, s: :bro:type:`software`, descr: :bro:type:`string`) + + Generated when a protocol analyzer finds an identification of a software + used on a system. This is a protocol-independent event that is fed by + different analyzers. For example, the HTTP analyzer reports user-agent and + server software by raising this event, assuming it can parse it (if not, + :bro:id:`software_parse_error` will be generated instead). + + + :c: The connection. + + + :host: The host running the reported software. + + + :s: A description of the software found. + + + :descr: The raw (unparsed) software identification string as extracted from + the protocol. + + .. bro:see:: software_parse_error software_unparsed_version_found OS_version_found + +.. bro:id:: tunnel_changed + + :Type: :bro:type:`event` (c: :bro:type:`connection`, e: :bro:type:`EncapsulatingConnVector`) + + Generated for a connection whose tunneling has changed. This could + be from a previously seen connection now being encapsulated in a tunnel, + or from the outer encapsulation changing. Note that connection *c*'s + *tunnel* field is NOT automatically/internally assigned to the new + encapsulation value of *e* after this event is raised. If the desired + behavior is to track the latest tunnel encapsulation per-connection, + then a handler of this event should assign *e* to ``c$tunnel`` (which Bro's + default scripts are doing). + + + :c: The connection whose tunnel/encapsulation changed. + + + :e: The new encapsulation. + +.. bro:id:: udp_session_done + + :Type: :bro:type:`event` (u: :bro:type:`connection`) + + Generated when a UDP session for a supported protocol has finished. Some of + Bro's application-layer UDP analyzers flag the end of a session by raising + this event. Currently, the analyzers for DNS, NTP, Netbios, Syslog, AYIYA, + Teredo, and GTPv1 support this. + + + :u: The connection record for the corresponding UDP flow. + + .. bro:see:: udp_contents udp_reply udp_request + + diff --git a/doc/scripts/base/bif/file_analysis.bif.bro.rst b/doc/scripts/base/bif/file_analysis.bif.bro.rst new file mode 100644 index 0000000000..0565549325 --- /dev/null +++ b/doc/scripts/base/bif/file_analysis.bif.bro.rst @@ -0,0 +1,111 @@ +:tocdepth: 3 + +base/bif/file_analysis.bif.bro +============================== +.. bro:namespace:: Files +.. bro:namespace:: GLOBAL + +Internal functions and types used by the file analysis framework. + +:Namespaces: Files, GLOBAL + +Summary +~~~~~~~ +Functions +######### +============================================================== =================================================================== +:bro:id:`Files::__add_analyzer`: :bro:type:`function` :bro:see:`Files::add_analyzer`. +:bro:id:`Files::__analyzer_name`: :bro:type:`function` :bro:see:`Files::analyzer_name`. +:bro:id:`Files::__disable_reassembly`: :bro:type:`function` :bro:see:`Files::disable_reassembly`. +:bro:id:`Files::__enable_reassembly`: :bro:type:`function` :bro:see:`Files::enable_reassembly`. +:bro:id:`Files::__file_exists`: :bro:type:`function` :bro:see:`Files::file_exists`. +:bro:id:`Files::__lookup_file`: :bro:type:`function` :bro:see:`Files::lookup_file`. +:bro:id:`Files::__remove_analyzer`: :bro:type:`function` :bro:see:`Files::remove_analyzer`. +:bro:id:`Files::__set_reassembly_buffer`: :bro:type:`function` :bro:see:`Files::set_reassembly_buffer_size`. +:bro:id:`Files::__set_timeout_interval`: :bro:type:`function` :bro:see:`Files::set_timeout_interval`. +:bro:id:`Files::__stop`: :bro:type:`function` :bro:see:`Files::stop`. +:bro:id:`set_file_handle`: :bro:type:`function` For use within a :bro:see:`get_file_handle` handler to set a unique + identifier to associate with the current input to the file analysis + framework. +============================================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: Files::__add_analyzer + + :Type: :bro:type:`function` (file_id: :bro:type:`string`, tag: :bro:type:`Files::Tag`, args: :bro:type:`any`) : :bro:type:`bool` + + :bro:see:`Files::add_analyzer`. + +.. bro:id:: Files::__analyzer_name + + :Type: :bro:type:`function` (tag: :bro:type:`Files::Tag`) : :bro:type:`string` + + :bro:see:`Files::analyzer_name`. + +.. bro:id:: Files::__disable_reassembly + + :Type: :bro:type:`function` (file_id: :bro:type:`string`) : :bro:type:`bool` + + :bro:see:`Files::disable_reassembly`. + +.. bro:id:: Files::__enable_reassembly + + :Type: :bro:type:`function` (file_id: :bro:type:`string`) : :bro:type:`bool` + + :bro:see:`Files::enable_reassembly`. + +.. bro:id:: Files::__file_exists + + :Type: :bro:type:`function` (fuid: :bro:type:`string`) : :bro:type:`bool` + + :bro:see:`Files::file_exists`. + +.. bro:id:: Files::__lookup_file + + :Type: :bro:type:`function` (fuid: :bro:type:`string`) : :bro:type:`fa_file` + + :bro:see:`Files::lookup_file`. + +.. bro:id:: Files::__remove_analyzer + + :Type: :bro:type:`function` (file_id: :bro:type:`string`, tag: :bro:type:`Files::Tag`, args: :bro:type:`any`) : :bro:type:`bool` + + :bro:see:`Files::remove_analyzer`. + +.. bro:id:: Files::__set_reassembly_buffer + + :Type: :bro:type:`function` (file_id: :bro:type:`string`, max: :bro:type:`count`) : :bro:type:`bool` + + :bro:see:`Files::set_reassembly_buffer_size`. + +.. bro:id:: Files::__set_timeout_interval + + :Type: :bro:type:`function` (file_id: :bro:type:`string`, t: :bro:type:`interval`) : :bro:type:`bool` + + :bro:see:`Files::set_timeout_interval`. + +.. bro:id:: Files::__stop + + :Type: :bro:type:`function` (file_id: :bro:type:`string`) : :bro:type:`bool` + + :bro:see:`Files::stop`. + +.. bro:id:: set_file_handle + + :Type: :bro:type:`function` (handle: :bro:type:`string`) : :bro:type:`any` + + For use within a :bro:see:`get_file_handle` handler to set a unique + identifier to associate with the current input to the file analysis + framework. Using an empty string for the handle signifies that the + input will be ignored/discarded. + + + :handle: A string that uniquely identifies a file. + + .. bro:see:: get_file_handle + + diff --git a/doc/scripts/base/bif/index.rst b/doc/scripts/base/bif/index.rst new file mode 100644 index 0000000000..f1b7564424 --- /dev/null +++ b/doc/scripts/base/bif/index.rst @@ -0,0 +1,466 @@ +:orphan: + +Package: base/bif +================= + + +:doc:`/scripts/base/bif/const.bif.bro` + + Declaration of various scripting-layer constants that the Bro core uses + internally. Documentation and default values for the scripting-layer + variables themselves are found in :doc:`/scripts/base/init-bare.bro`. + +:doc:`/scripts/base/bif/types.bif.bro` + + Declaration of various types that the Bro core uses internally. + +:doc:`/scripts/base/bif/bro.bif.bro` + + A collection of built-in functions that implement a variety of things + such as general programming algorithms, string processing, math functions, + introspection, type conversion, file/directory manipulation, packet + filtering, interprocess communication and controlling protocol analyzer + behavior. + + You'll find most of Bro's built-in functions that aren't protocol-specific + in this file. + +:doc:`/scripts/base/bif/stats.bif.bro` + + +:doc:`/scripts/base/bif/reporter.bif.bro` + + The reporter built-in functions allow for the scripting layer to + generate messages of varying severity. If no event handlers + exist for reporter messages, the messages are output to stderr. + If event handlers do exist, it's assumed they take care of determining + how/where to output the messages. + + See :doc:`/scripts/base/frameworks/reporter/main.bro` for a convenient + reporter message logging framework. + +:doc:`/scripts/base/bif/strings.bif.bro` + + Definitions of built-in functions related to string processing and + manipulation. + +:doc:`/scripts/base/bif/option.bif.bro` + + Definitions of built-in functions that allow the scripting layer to + change the value of options and to be notified when option values change. + +:doc:`/scripts/base/bif/plugins/Bro_SNMP.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_KRB.types.bif.bro` + + +:doc:`/scripts/base/bif/event.bif.bro` + + The protocol-independent events that the C/C++ core of Bro can generate. + + This is mostly events not related to a specific transport- or + application-layer protocol, but also includes a few that may be generated + by more than one protocols analyzer (like events generated by both UDP and + TCP analysis.) + +:doc:`/scripts/base/bif/logging.bif.bro` + + Internal functions and types used by the logging framework. + +:doc:`/scripts/base/bif/comm.bif.bro` + + Functions and events regarding Bro's broker communication mechanisms. + +:doc:`/scripts/base/bif/messaging.bif.bro` + + Functions for peering and various messaging patterns. + +:doc:`/scripts/base/bif/data.bif.bro` + + Functions for inspecting and manipulating broker data. + +:doc:`/scripts/base/bif/store.bif.bro` + + Functions to interface with broker's distributed data store. + +:doc:`/scripts/base/bif/input.bif.bro` + + Internal functions and types used by the input framework. + +:doc:`/scripts/base/bif/analyzer.bif.bro` + + Internal functions and types used by the analyzer framework. + +:doc:`/scripts/base/bif/file_analysis.bif.bro` + + Internal functions and types used by the file analysis framework. + +:doc:`/scripts/base/bif/__load__.bro` + + +:doc:`/scripts/base/bif/broxygen.bif.bro` + + Functions for querying script, package, or variable documentation. + +:doc:`/scripts/base/bif/pcap.bif.bro` + + +:doc:`/scripts/base/bif/bloom-filter.bif.bro` + + Functions to create and manipulate Bloom filters. + +:doc:`/scripts/base/bif/cardinality-counter.bif.bro` + + Functions to create and manipulate probabilistic cardinality counters. + +:doc:`/scripts/base/bif/top-k.bif.bro` + + Functions to probabilistically determine top-k elements. + +:doc:`/scripts/base/bif/plugins/__load__.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ARP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_BackDoor.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_BitTorrent.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ConnSize.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ConnSize.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DCE_RPC.consts.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DCE_RPC.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DCE_RPC.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DHCP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DHCP.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DNP3.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DNS.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_File.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Finger.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FTP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FTP.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Gnutella.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_GSSAPI.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_GTPv1.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_HTTP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_HTTP.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ICMP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Ident.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_IMAP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_InterConn.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_IRC.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_KRB.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Login.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Login.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_MIME.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Modbus.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_MySQL.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NCP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NCP.consts.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NetBIOS.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NetBIOS.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NTLM.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NTLM.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NTP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_POP3.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RADIUS.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RDP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RDP.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RFB.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RPC.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SIP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SNMP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_check_directory.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_close.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_create_directory.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_echo.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_logoff_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_negotiate.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_create_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_cancel.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_query_information.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_read_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_session_setup_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction_secondary.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2_secondary.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_connect_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_disconnect.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_write_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_close.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_create.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_negotiate.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_read.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_session_setup.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_set_info.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_connect.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_disconnect.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_write.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.consts.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMTP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMTP.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SOCKS.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSH.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSH.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSL.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSL.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSL.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SteppingStone.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Syslog.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_TCP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_TCP.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Teredo.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_UDP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_XMPP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FileEntropy.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FileExtract.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FileExtract.functions.bif.bro` + + Internal functions used by the extraction file analyzer. + +:doc:`/scripts/base/bif/plugins/Bro_FileHash.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_PE.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Unified2.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Unified2.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_X509.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_X509.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_X509.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_X509.ocsp_events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_AsciiReader.ascii.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_BenchmarkReader.benchmark.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_BinaryReader.binary.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ConfigReader.config.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RawReader.raw.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SQLiteReader.sqlite.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_AsciiWriter.ascii.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NoneWriter.none.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SQLiteWriter.sqlite.bif.bro` + + diff --git a/doc/scripts/base/bif/input.bif.bro.rst b/doc/scripts/base/bif/input.bif.bro.rst new file mode 100644 index 0000000000..98918855a5 --- /dev/null +++ b/doc/scripts/base/bif/input.bif.bro.rst @@ -0,0 +1,54 @@ +:tocdepth: 3 + +base/bif/input.bif.bro +====================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: Input + +Internal functions and types used by the input framework. + +:Namespaces: GLOBAL, Input + +Summary +~~~~~~~ +Functions +######### +=============================================================== = +:bro:id:`Input::__create_analysis_stream`: :bro:type:`function` +:bro:id:`Input::__create_event_stream`: :bro:type:`function` +:bro:id:`Input::__create_table_stream`: :bro:type:`function` +:bro:id:`Input::__force_update`: :bro:type:`function` +:bro:id:`Input::__remove_stream`: :bro:type:`function` +=============================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: Input::__create_analysis_stream + + :Type: :bro:type:`function` (description: :bro:type:`Input::AnalysisDescription`) : :bro:type:`bool` + + +.. bro:id:: Input::__create_event_stream + + :Type: :bro:type:`function` (description: :bro:type:`Input::EventDescription`) : :bro:type:`bool` + + +.. bro:id:: Input::__create_table_stream + + :Type: :bro:type:`function` (description: :bro:type:`Input::TableDescription`) : :bro:type:`bool` + + +.. bro:id:: Input::__force_update + + :Type: :bro:type:`function` (id: :bro:type:`string`) : :bro:type:`bool` + + +.. bro:id:: Input::__remove_stream + + :Type: :bro:type:`function` (id: :bro:type:`string`) : :bro:type:`bool` + + + diff --git a/doc/scripts/base/bif/logging.bif.bro.rst b/doc/scripts/base/bif/logging.bif.bro.rst new file mode 100644 index 0000000000..8894493b53 --- /dev/null +++ b/doc/scripts/base/bif/logging.bif.bro.rst @@ -0,0 +1,78 @@ +:tocdepth: 3 + +base/bif/logging.bif.bro +======================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: Log + +Internal functions and types used by the logging framework. + +:Namespaces: GLOBAL, Log + +Summary +~~~~~~~ +Functions +######### +===================================================== = +:bro:id:`Log::__add_filter`: :bro:type:`function` +:bro:id:`Log::__create_stream`: :bro:type:`function` +:bro:id:`Log::__disable_stream`: :bro:type:`function` +:bro:id:`Log::__enable_stream`: :bro:type:`function` +:bro:id:`Log::__flush`: :bro:type:`function` +:bro:id:`Log::__remove_filter`: :bro:type:`function` +:bro:id:`Log::__remove_stream`: :bro:type:`function` +:bro:id:`Log::__set_buf`: :bro:type:`function` +:bro:id:`Log::__write`: :bro:type:`function` +===================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: Log::__add_filter + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, filter: :bro:type:`Log::Filter`) : :bro:type:`bool` + + +.. bro:id:: Log::__create_stream + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, stream: :bro:type:`Log::Stream`) : :bro:type:`bool` + + +.. bro:id:: Log::__disable_stream + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + +.. bro:id:: Log::__enable_stream + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + +.. bro:id:: Log::__flush + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + +.. bro:id:: Log::__remove_filter + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, name: :bro:type:`string`) : :bro:type:`bool` + + +.. bro:id:: Log::__remove_stream + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + +.. bro:id:: Log::__set_buf + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, buffered: :bro:type:`bool`) : :bro:type:`bool` + + +.. bro:id:: Log::__write + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, columns: :bro:type:`any`) : :bro:type:`bool` + + + diff --git a/doc/scripts/base/bif/messaging.bif.bro.rst b/doc/scripts/base/bif/messaging.bif.bro.rst new file mode 100644 index 0000000000..2d880127b9 --- /dev/null +++ b/doc/scripts/base/bif/messaging.bif.bro.rst @@ -0,0 +1,151 @@ +:tocdepth: 3 + +base/bif/messaging.bif.bro +========================== +.. bro:namespace:: Broker +.. bro:namespace:: Cluster +.. bro:namespace:: GLOBAL + +Functions for peering and various messaging patterns. + +:Namespaces: Broker, Cluster, GLOBAL + +Summary +~~~~~~~ +Functions +######### +======================================================== =================================================================== +:bro:id:`Broker::__auto_publish`: :bro:type:`function` +:bro:id:`Broker::__auto_unpublish`: :bro:type:`function` +:bro:id:`Broker::__flush_logs`: :bro:type:`function` +:bro:id:`Broker::__forward`: :bro:type:`function` +:bro:id:`Broker::__publish_id`: :bro:type:`function` +:bro:id:`Broker::__subscribe`: :bro:type:`function` +:bro:id:`Broker::__unsubscribe`: :bro:type:`function` +:bro:id:`Broker::make_event`: :bro:type:`function` Create a data structure that may be used to send a remote event via + :bro:see:`Broker::publish`. +:bro:id:`Broker::publish`: :bro:type:`function` Publishes an event at a given topic. +:bro:id:`Cluster::publish_hrw`: :bro:type:`function` Publishes an event to a node within a pool according to Rendezvous + (Highest Random Weight) hashing strategy. +:bro:id:`Cluster::publish_rr`: :bro:type:`function` Publishes an event to a node within a pool according to Round-Robin + distribution strategy. +======================================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: Broker::__auto_publish + + :Type: :bro:type:`function` (topic: :bro:type:`string`, ev: :bro:type:`any`) : :bro:type:`bool` + + +.. bro:id:: Broker::__auto_unpublish + + :Type: :bro:type:`function` (topic: :bro:type:`string`, ev: :bro:type:`any`) : :bro:type:`bool` + + +.. bro:id:: Broker::__flush_logs + + :Type: :bro:type:`function` () : :bro:type:`count` + + +.. bro:id:: Broker::__forward + + :Type: :bro:type:`function` (topic_prefix: :bro:type:`string`) : :bro:type:`bool` + + +.. bro:id:: Broker::__publish_id + + :Type: :bro:type:`function` (topic: :bro:type:`string`, id: :bro:type:`string`) : :bro:type:`bool` + + +.. bro:id:: Broker::__subscribe + + :Type: :bro:type:`function` (topic_prefix: :bro:type:`string`) : :bro:type:`bool` + + +.. bro:id:: Broker::__unsubscribe + + :Type: :bro:type:`function` (topic_prefix: :bro:type:`string`) : :bro:type:`bool` + + +.. bro:id:: Broker::make_event + + :Type: :bro:type:`function` (...) : :bro:type:`Broker::Event` + + Create a data structure that may be used to send a remote event via + :bro:see:`Broker::publish`. + + + :args: an event, followed by a list of argument values that may be used + to call it. + + + :returns: opaque communication data that may be used to send a remote + event. + +.. bro:id:: Broker::publish + + :Type: :bro:type:`function` (...) : :bro:type:`bool` + + Publishes an event at a given topic. + + + :topic: a topic associated with the event message. + + + :args: Either the event arguments as already made by + :bro:see:`Broker::make_event` or the argument list to pass along + to it. + + + :returns: true if the message is sent. + +.. bro:id:: Cluster::publish_hrw + + :Type: :bro:type:`function` (...) : :bro:type:`bool` + + Publishes an event to a node within a pool according to Rendezvous + (Highest Random Weight) hashing strategy. + + + :pool: the pool of nodes that are eligible to receive the event. + + + :key: data used for input to the hashing function that will uniformly + distribute keys among available nodes. + + + :args: Either the event arguments as already made by + :bro:see:`Broker::make_event` or the argument list to pass along + to it. + + + :returns: true if the message is sent. + +.. bro:id:: Cluster::publish_rr + + :Type: :bro:type:`function` (...) : :bro:type:`bool` + + Publishes an event to a node within a pool according to Round-Robin + distribution strategy. + + + :pool: the pool of nodes that are eligible to receive the event. + + + :key: an arbitrary string to identify the purpose for which you're + distributing the event. e.g. consider using namespacing of your + script like "Intel::cluster_rr_key". + + + :args: Either the event arguments as already made by + :bro:see:`Broker::make_event` or the argument list to pass along + to it. + + + :returns: true if the message is sent. + + diff --git a/doc/scripts/base/bif/option.bif.bro.rst b/doc/scripts/base/bif/option.bif.bro.rst new file mode 100644 index 0000000000..d1c7cb61e6 --- /dev/null +++ b/doc/scripts/base/bif/option.bif.bro.rst @@ -0,0 +1,86 @@ +:tocdepth: 3 + +base/bif/option.bif.bro +======================= +.. bro:namespace:: GLOBAL +.. bro:namespace:: Option + +Definitions of built-in functions that allow the scripting layer to +change the value of options and to be notified when option values change. + +:Namespaces: GLOBAL, Option + +Summary +~~~~~~~ +Functions +######### +========================================================== =================================== +:bro:id:`Option::set`: :bro:type:`function` Set an option to a new value. +:bro:id:`Option::set_change_handler`: :bro:type:`function` Set a change handler for an option. +========================================================== =================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: Option::set + + :Type: :bro:type:`function` (ID: :bro:type:`string`, val: :bro:type:`any`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`bool` + + Set an option to a new value. This change will also cause the option change + handlers to be called. + + + :ID: The ID of the option to update. + + + :val: The new value of the option. + + + :location: Optional parameter detailing where this change originated from. + + + :returns: true on success, false when an error occurred. + + .. bro:see:: Option::set_change_handler Config::set_value + + .. note:: :bro:id:`Option::set` only works on one node and does not distribute + new values across a cluster. The higher-level :bro:id:`Config::set_value` + supports clusterization and should typically be used instead of this + lower-level function. + +.. bro:id:: Option::set_change_handler + + :Type: :bro:type:`function` (ID: :bro:type:`string`, on_change: :bro:type:`any`, priority: :bro:type:`int` :bro:attr:`&default` = ``0`` :bro:attr:`&optional`) : :bro:type:`bool` + + Set a change handler for an option. The change handler will be + called anytime :bro:id:`Option::set` is called for the option. + + + :ID: The ID of the option for which change notifications are desired. + + + :on_change: The function that will be called when a change occurs. The + function can choose to receive two or three parameters: the first + parameter is a string containing *ID*, the second parameter is + the new option value. The third, optional, parameter is the + location string as passed to Option::set. Note that the global + value is not yet changed when the function is called. The passed + function has to return the new value that it wants the option to + be set to. This enables it to reject changes, or change values + that are being set. When several change handlers are set for an + option they are chained; the second change handler will see the + return value of the first change handler as the "new value". + + + :priority: The priority of the function that was added; functions with higher + priority are called first, functions with the same priority are + called in the order in which they were added. + + + :returns: true when the change handler was set, false when an error occurred. + + .. bro:see:: Option::set + + diff --git a/doc/scripts/base/bif/pcap.bif.bro.rst b/doc/scripts/base/bif/pcap.bif.bro.rst new file mode 100644 index 0000000000..db2c8af578 --- /dev/null +++ b/doc/scripts/base/bif/pcap.bif.bro.rst @@ -0,0 +1,98 @@ +:tocdepth: 3 + +base/bif/pcap.bif.bro +===================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: Pcap + + +:Namespaces: GLOBAL, Pcap + +Summary +~~~~~~~ +Functions +######### +============================================================ ============================================================= +:bro:id:`Pcap::error`: :bro:type:`function` Returns a string representation of the last PCAP error. +:bro:id:`Pcap::install_pcap_filter`: :bro:type:`function` Installs a PCAP filter that has been precompiled with + :bro:id:`Pcap::precompile_pcap_filter`. +:bro:id:`Pcap::precompile_pcap_filter`: :bro:type:`function` Precompiles a PCAP filter and binds it to a given identifier. +============================================================ ============================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: Pcap::error + + :Type: :bro:type:`function` () : :bro:type:`string` + + Returns a string representation of the last PCAP error. + + + :returns: A descriptive error message of the PCAP function that failed. + + .. bro:see:: Pcap::precompile_pcap_filter + Pcap::install_pcap_filter + install_src_addr_filter + install_src_net_filter + uninstall_src_addr_filter + uninstall_src_net_filter + install_dst_addr_filter + install_dst_net_filter + uninstall_dst_addr_filter + uninstall_dst_net_filter + +.. bro:id:: Pcap::install_pcap_filter + + :Type: :bro:type:`function` (id: :bro:type:`PcapFilterID`) : :bro:type:`bool` + + Installs a PCAP filter that has been precompiled with + :bro:id:`Pcap::precompile_pcap_filter`. + + + :id: The PCAP filter id of a precompiled filter. + + + :returns: True if the filter associated with *id* has been installed + successfully. + + .. bro:see:: Pcap::precompile_pcap_filter + install_src_addr_filter + install_src_net_filter + uninstall_src_addr_filter + uninstall_src_net_filter + install_dst_addr_filter + install_dst_net_filter + uninstall_dst_addr_filter + uninstall_dst_net_filter + Pcap::error + +.. bro:id:: Pcap::precompile_pcap_filter + + :Type: :bro:type:`function` (id: :bro:type:`PcapFilterID`, s: :bro:type:`string`) : :bro:type:`bool` + + Precompiles a PCAP filter and binds it to a given identifier. + + + :id: The PCAP identifier to reference the filter *s* later on. + + + :s: The PCAP filter. See ``man tcpdump`` for valid expressions. + + + :returns: True if *s* is valid and precompiles successfully. + + .. bro:see:: Pcap::install_pcap_filter + install_src_addr_filter + install_src_net_filter + uninstall_src_addr_filter + uninstall_src_net_filter + install_dst_addr_filter + install_dst_net_filter + uninstall_dst_addr_filter + uninstall_dst_net_filter + Pcap::error + + diff --git a/doc/scripts/base/bif/plugins/Bro_ARP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_ARP.events.bif.bro.rst new file mode 100644 index 0000000000..b186e328a4 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_ARP.events.bif.bro.rst @@ -0,0 +1,113 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_ARP.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================== ==================================================== +:bro:id:`arp_reply`: :bro:type:`event` Generated for ARP replies. +:bro:id:`arp_request`: :bro:type:`event` Generated for ARP requests. +:bro:id:`bad_arp`: :bro:type:`event` Generated for ARP packets that Bro cannot interpret. +======================================== ==================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: arp_reply + + :Type: :bro:type:`event` (mac_src: :bro:type:`string`, mac_dst: :bro:type:`string`, SPA: :bro:type:`addr`, SHA: :bro:type:`string`, TPA: :bro:type:`addr`, THA: :bro:type:`string`) + + Generated for ARP replies. + + See `Wikipedia `__ + for more information about the ARP protocol. + + + :mac_src: The reply's source MAC address. + + + :mac_dst: The reply's destination MAC address. + + + :SPA: The sender protocol address. + + + :SHA: The sender hardware address. + + + :TPA: The target protocol address. + + + :THA: The target hardware address. + + .. bro:see:: arp_request bad_arp + +.. bro:id:: arp_request + + :Type: :bro:type:`event` (mac_src: :bro:type:`string`, mac_dst: :bro:type:`string`, SPA: :bro:type:`addr`, SHA: :bro:type:`string`, TPA: :bro:type:`addr`, THA: :bro:type:`string`) + + Generated for ARP requests. + + See `Wikipedia `__ + for more information about the ARP protocol. + + + :mac_src: The request's source MAC address. + + + :mac_dst: The request's destination MAC address. + + + :SPA: The sender protocol address. + + + :SHA: The sender hardware address. + + + :TPA: The target protocol address. + + + :THA: The target hardware address. + + .. bro:see:: arp_reply bad_arp + +.. bro:id:: bad_arp + + :Type: :bro:type:`event` (SPA: :bro:type:`addr`, SHA: :bro:type:`string`, TPA: :bro:type:`addr`, THA: :bro:type:`string`, explanation: :bro:type:`string`) + + Generated for ARP packets that Bro cannot interpret. Examples are packets + with non-standard hardware address formats or hardware addresses that do not + match the originator of the packet. + + + :SPA: The sender protocol address. + + + :SHA: The sender hardware address. + + + :TPA: The target protocol address. + + + :THA: The target hardware address. + + + :explanation: A short description of why the ARP packet is considered "bad". + + .. bro:see:: arp_reply arp_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_AsciiReader.ascii.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_AsciiReader.ascii.bif.bro.rst new file mode 100644 index 0000000000..2ae69db27e --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_AsciiReader.ascii.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_AsciiReader.ascii.bif.bro +============================================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: InputAscii + + +:Namespaces: GLOBAL, InputAscii + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_AsciiWriter.ascii.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_AsciiWriter.ascii.bif.bro.rst new file mode 100644 index 0000000000..fa11dde6d3 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_AsciiWriter.ascii.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_AsciiWriter.ascii.bif.bro +============================================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: LogAscii + + +:Namespaces: GLOBAL, LogAscii + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_BackDoor.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_BackDoor.events.bif.bro.rst new file mode 100644 index 0000000000..8292c3116c --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_BackDoor.events.bif.bro.rst @@ -0,0 +1,99 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_BackDoor.events.bif.bro +============================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================= =========== +:bro:id:`backdoor_remove_conn`: :bro:type:`event` Deprecated. +:bro:id:`backdoor_stats`: :bro:type:`event` Deprecated. +:bro:id:`ftp_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`gnutella_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`http_proxy_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`http_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`irc_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`rlogin_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`smtp_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`ssh_signature_found`: :bro:type:`event` Deprecated. +:bro:id:`telnet_signature_found`: :bro:type:`event` Deprecated. +======================================================= =========== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: backdoor_remove_conn + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: backdoor_stats + + :Type: :bro:type:`event` (c: :bro:type:`connection`, os: :bro:type:`backdoor_endp_stats`, rs: :bro:type:`backdoor_endp_stats`) + + Deprecated. Will be removed. + +.. bro:id:: ftp_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: gnutella_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: http_proxy_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: http_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: irc_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: rlogin_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, num_null: :bro:type:`count`, len: :bro:type:`count`) + + Deprecated. Will be removed. + +.. bro:id:: smtp_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: ssh_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Deprecated. Will be removed. + +.. bro:id:: telnet_signature_found + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, len: :bro:type:`count`) + + Deprecated. Will be removed. + + diff --git a/doc/scripts/base/bif/plugins/Bro_BenchmarkReader.benchmark.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_BenchmarkReader.benchmark.bif.bro.rst new file mode 100644 index 0000000000..31f5cc15bf --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_BenchmarkReader.benchmark.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_BenchmarkReader.benchmark.bif.bro +====================================================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: InputBenchmark + + +:Namespaces: GLOBAL, InputBenchmark + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_BinaryReader.binary.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_BinaryReader.binary.bif.bro.rst new file mode 100644 index 0000000000..7cada692d3 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_BinaryReader.binary.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_BinaryReader.binary.bif.bro +================================================ +.. bro:namespace:: GLOBAL +.. bro:namespace:: InputBinary + + +:Namespaces: GLOBAL, InputBinary + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_BitTorrent.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_BitTorrent.events.bif.bro.rst new file mode 100644 index 0000000000..6f07965b96 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_BitTorrent.events.bif.bro.rst @@ -0,0 +1,310 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_BitTorrent.events.bif.bro +============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=========================================================== ===== +:bro:id:`bittorrent_peer_bitfield`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_cancel`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_choke`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_handshake`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_have`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_interested`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_keep_alive`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_not_interested`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_piece`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_port`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_request`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_unchoke`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_unknown`: :bro:type:`event` TODO. +:bro:id:`bittorrent_peer_weird`: :bro:type:`event` TODO. +:bro:id:`bt_tracker_request`: :bro:type:`event` TODO. +:bro:id:`bt_tracker_response`: :bro:type:`event` TODO. +:bro:id:`bt_tracker_response_not_ok`: :bro:type:`event` TODO. +:bro:id:`bt_tracker_weird`: :bro:type:`event` TODO. +=========================================================== ===== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: bittorrent_peer_bitfield + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, bitfield: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_cancel bittorrent_peer_choke bittorrent_peer_handshake + bittorrent_peer_have bittorrent_peer_interested bittorrent_peer_keep_alive + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_cancel + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, index: :bro:type:`count`, begin: :bro:type:`count`, length: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_choke + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_handshake + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, reserved: :bro:type:`string`, info_hash: :bro:type:`string`, peer_id: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_have bittorrent_peer_interested bittorrent_peer_keep_alive + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_have + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, piece_index: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_interested bittorrent_peer_keep_alive + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_interested + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_keep_alive + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_keep_alive + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_not_interested bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_not_interested + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_piece bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_piece + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, index: :bro:type:`count`, begin: :bro:type:`count`, piece_length: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_port + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_port + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, listen_port: :bro:type:`port`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_request bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, index: :bro:type:`count`, begin: :bro:type:`count`, length: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_unchoke bittorrent_peer_unknown + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_unchoke + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_unknown + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, message_id: :bro:type:`count`, data: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_weird + +.. bro:id:: bittorrent_peer_weird + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown + +.. bro:id:: bt_tracker_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, uri: :bro:type:`string`, headers: :bro:type:`bt_tracker_headers`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bt_tracker_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, status: :bro:type:`count`, headers: :bro:type:`bt_tracker_headers`, peers: :bro:type:`bittorrent_peer_set`, benc: :bro:type:`bittorrent_benc_dir`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bt_tracker_response_not_ok + + :Type: :bro:type:`event` (c: :bro:type:`connection`, status: :bro:type:`count`, headers: :bro:type:`bt_tracker_headers`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + +.. bro:id:: bt_tracker_weird + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for + more information about the BitTorrent protocol. + + .. bro:see:: bittorrent_peer_bitfield bittorrent_peer_cancel bittorrent_peer_choke + bittorrent_peer_handshake bittorrent_peer_have bittorrent_peer_interested + bittorrent_peer_keep_alive bittorrent_peer_not_interested bittorrent_peer_piece + bittorrent_peer_port bittorrent_peer_request bittorrent_peer_unchoke + bittorrent_peer_unknown bittorrent_peer_weird + + diff --git a/doc/scripts/base/bif/plugins/Bro_ConfigReader.config.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_ConfigReader.config.bif.bro.rst new file mode 100644 index 0000000000..d32a254cd4 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_ConfigReader.config.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_ConfigReader.config.bif.bro +================================================ +.. bro:namespace:: GLOBAL +.. bro:namespace:: InputConfig + + +:Namespaces: GLOBAL, InputConfig + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_ConnSize.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_ConnSize.events.bif.bro.rst new file mode 100644 index 0000000000..38eaf42c76 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_ConnSize.events.bif.bro.rst @@ -0,0 +1,64 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_ConnSize.events.bif.bro +============================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=========================================================== =============================================================== +:bro:id:`conn_bytes_threshold_crossed`: :bro:type:`event` Generated for a connection that crossed a set byte threshold. +:bro:id:`conn_packets_threshold_crossed`: :bro:type:`event` Generated for a connection that crossed a set packet threshold. +=========================================================== =============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: conn_bytes_threshold_crossed + + :Type: :bro:type:`event` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) + + Generated for a connection that crossed a set byte threshold. Note that this + is a low level event that should usually be avoided for user code. Use + ConnThreshold::bytes_threshold_crossed instead. + + + :c: the connection + + + :threshold: the threshold that was set + + + :is_orig: true if the threshold was crossed by the originator of the connection + + .. bro:see:: set_current_conn_packets_threshold set_current_conn_bytes_threshold conn_packets_threshold_crossed + get_current_conn_bytes_threshold get_current_conn_packets_threshold + +.. bro:id:: conn_packets_threshold_crossed + + :Type: :bro:type:`event` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) + + Generated for a connection that crossed a set packet threshold. Note that this + is a low level event that should usually be avoided for user code. Use + ConnThreshold::bytes_threshold_crossed instead. + + + :c: the connection + + + :threshold: the threshold that was set + + + :is_orig: true if the threshold was crossed by the originator of the connection + + .. bro:see:: set_current_conn_packets_threshold set_current_conn_bytes_threshold conn_bytes_threshold_crossed + get_current_conn_bytes_threshold get_current_conn_packets_threshold + + diff --git a/doc/scripts/base/bif/plugins/Bro_ConnSize.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_ConnSize.functions.bif.bro.rst new file mode 100644 index 0000000000..b7fa71b637 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_ConnSize.functions.bif.bro.rst @@ -0,0 +1,103 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_ConnSize.functions.bif.bro +=============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +================================================================== =================================================================================== +:bro:id:`get_current_conn_bytes_threshold`: :bro:type:`function` Gets the current byte threshold size for a connection. +:bro:id:`get_current_conn_packets_threshold`: :bro:type:`function` Gets the current packet threshold size for a connection. +:bro:id:`set_current_conn_bytes_threshold`: :bro:type:`function` Sets the current byte threshold for connection sizes, overwriting any potential old + threshold. +:bro:id:`set_current_conn_packets_threshold`: :bro:type:`function` Sets a threshold for connection packets, overwtiting any potential old thresholds. +================================================================== =================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: get_current_conn_bytes_threshold + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, is_orig: :bro:type:`bool`) : :bro:type:`count` + + Gets the current byte threshold size for a connection. + + + :cid: The connection id. + + + :is_orig: If true, threshold of originator, otherwhise threshold of responder. + + + :returns: 0 if no threshold is set or the threshold in bytes + + .. bro:see:: set_current_conn_packets_threshold conn_bytes_threshold_crossed conn_packets_threshold_crossed + get_current_conn_packets_threshold + +.. bro:id:: get_current_conn_packets_threshold + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, is_orig: :bro:type:`bool`) : :bro:type:`count` + + Gets the current packet threshold size for a connection. + + + :cid: The connection id. + + + :is_orig: If true, threshold of originator, otherwhise threshold of responder. + + + :returns: 0 if no threshold is set or the threshold in packets + + .. bro:see:: set_current_conn_packets_threshold conn_bytes_threshold_crossed conn_packets_threshold_crossed + get_current_conn_bytes_threshold + +.. bro:id:: set_current_conn_bytes_threshold + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) : :bro:type:`bool` + + Sets the current byte threshold for connection sizes, overwriting any potential old + threshold. Be aware that in nearly any case you will want to use the high level API + instead (ConnThreshold::set_bytes_threshold). + + + :cid: The connection id. + + + :threshold: Threshold in bytes. + + + :is_orig: If true, threshold is set for bytes from originator, otherwhise for bytes from responder. + + .. bro:see:: set_current_conn_packets_threshold conn_bytes_threshold_crossed conn_packets_threshold_crossed + get_current_conn_bytes_threshold get_current_conn_packets_threshold + +.. bro:id:: set_current_conn_packets_threshold + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) : :bro:type:`bool` + + Sets a threshold for connection packets, overwtiting any potential old thresholds. + Be aware that in nearly any case you will want to use the high level API + instead (ConnThreshold::set_packets_threshold). + + + :cid: The connection id. + + + :threshold: Threshold in packets. + + + :is_orig: If true, threshold is set for packets from originator, otherwhise for packets from responder. + + .. bro:see:: set_current_conn_bytes_threshold conn_bytes_threshold_crossed conn_packets_threshold_crossed + get_current_conn_bytes_threshold get_current_conn_packets_threshold + + diff --git a/doc/scripts/base/bif/plugins/Bro_DCE_RPC.consts.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_DCE_RPC.consts.bif.bro.rst new file mode 100644 index 0000000000..934cb9e901 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_DCE_RPC.consts.bif.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_DCE_RPC.consts.bif.bro +=========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_DCE_RPC.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_DCE_RPC.events.bif.bro.rst new file mode 100644 index 0000000000..1edc5e09c1 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_DCE_RPC.events.bif.bro.rst @@ -0,0 +1,198 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_DCE_RPC.events.bif.bro +=========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================= ============================================================================================================================== +:bro:id:`dce_rpc_alter_context`: :bro:type:`event` Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` alter context request message. +:bro:id:`dce_rpc_alter_context_resp`: :bro:type:`event` Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` alter context response message. +:bro:id:`dce_rpc_bind`: :bro:type:`event` Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` bind request message. +:bro:id:`dce_rpc_bind_ack`: :bro:type:`event` Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` bind request ack message. +:bro:id:`dce_rpc_message`: :bro:type:`event` Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` message. +:bro:id:`dce_rpc_request`: :bro:type:`event` Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` request message. +:bro:id:`dce_rpc_response`: :bro:type:`event` Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` response message. +======================================================= ============================================================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: dce_rpc_alter_context + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, ctx_id: :bro:type:`count`, uuid: :bro:type:`string`, ver_major: :bro:type:`count`, ver_minor: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` alter context request message. + Since RPC offers the ability for a client to request connections to multiple endpoints, this event can occur + multiple times for a single RPC message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ctx_id: The context identifier of the data representation. + + + :uuid: The string interpretted uuid of the endpoint being requested. + + + :ver_major: The major version of the endpoint being requested. + + + :ver_minor: The minor version of the endpoint being requested. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_bind_ack dce_rpc_request dce_rpc_response dce_rpc_alter_context_resp + +.. bro:id:: dce_rpc_alter_context_resp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` alter context response message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_bind_ack dce_rpc_request dce_rpc_response dce_rpc_alter_context + +.. bro:id:: dce_rpc_bind + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, ctx_id: :bro:type:`count`, uuid: :bro:type:`string`, ver_major: :bro:type:`count`, ver_minor: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` bind request message. + Since RPC offers the ability for a client to request connections to multiple endpoints, this event can occur + multiple times for a single RPC message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ctx_id: The context identifier of the data representation. + + + :uuid: The string interpretted uuid of the endpoint being requested. + + + :ver_major: The major version of the endpoint being requested. + + + :ver_minor: The minor version of the endpoint being requested. + + .. bro:see:: dce_rpc_message dce_rpc_bind_ack dce_rpc_request dce_rpc_response + +.. bro:id:: dce_rpc_bind_ack + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, sec_addr: :bro:type:`string`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` bind request ack message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :sec_addr: Secondary address for the ack. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_request dce_rpc_response + +.. bro:id:: dce_rpc_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, fid: :bro:type:`count`, ptype_id: :bro:type:`count`, ptype: :bro:type:`DCE_RPC::PType`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` message. + + + :c: The connection. + + + :is_orig: True if the message was sent by the originator of the TCP connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ptype_id: Numeric representation of the procedure type of the message. + + + :ptype: Enum representation of the prodecure type of the message. + + .. bro:see:: dce_rpc_bind dce_rpc_bind_ack dce_rpc_request dce_rpc_response + +.. bro:id:: dce_rpc_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, ctx_id: :bro:type:`count`, opnum: :bro:type:`count`, stub_len: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` request message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ctx_id: The context identifier of the data representation. + + + :opnum: Number of the RPC operation. + + + :stub_len: Length of the data for the request. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_bind_ack dce_rpc_response + +.. bro:id:: dce_rpc_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, fid: :bro:type:`count`, ctx_id: :bro:type:`count`, opnum: :bro:type:`count`, stub_len: :bro:type:`count`) + + Generated for every :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` response message. + + + :c: The connection. + + + :fid: File ID of the PIPE that carried the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` + message. Zero will be used if the :abbr:`DCE-RPC (Distributed Computing Environment/Remote Procedure Calls)` was + not transported over a pipe. + + + :ctx_id: The context identifier of the data representation. + + :opnum: Number of the RPC operation. + + + :stub_len: Length of the data for the response. + + .. bro:see:: dce_rpc_message dce_rpc_bind dce_rpc_bind_ack dce_rpc_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_DCE_RPC.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_DCE_RPC.types.bif.bro.rst new file mode 100644 index 0000000000..c44ce812a9 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_DCE_RPC.types.bif.bro.rst @@ -0,0 +1,105 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_DCE_RPC.types.bif.bro +========================================== +.. bro:namespace:: DCE_RPC +.. bro:namespace:: GLOBAL + + +:Namespaces: DCE_RPC, GLOBAL + +Summary +~~~~~~~ +Types +##### +============================================ = +:bro:type:`DCE_RPC::IfID`: :bro:type:`enum` +:bro:type:`DCE_RPC::PType`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: DCE_RPC::IfID + + :Type: :bro:type:`enum` + + .. bro:enum:: DCE_RPC::unknown_if DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::epmapper DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::lsarpc DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::lsa_ds DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::mgmt DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::netlogon DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::samr DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::srvsvc DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::spoolss DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::drs DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::winspipe DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::wkssvc DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::oxid DCE_RPC::IfID + + .. bro:enum:: DCE_RPC::ISCMActivator DCE_RPC::IfID + + +.. bro:type:: DCE_RPC::PType + + :Type: :bro:type:`enum` + + .. bro:enum:: DCE_RPC::REQUEST DCE_RPC::PType + + .. bro:enum:: DCE_RPC::PING DCE_RPC::PType + + .. bro:enum:: DCE_RPC::RESPONSE DCE_RPC::PType + + .. bro:enum:: DCE_RPC::FAULT DCE_RPC::PType + + .. bro:enum:: DCE_RPC::WORKING DCE_RPC::PType + + .. bro:enum:: DCE_RPC::NOCALL DCE_RPC::PType + + .. bro:enum:: DCE_RPC::REJECT DCE_RPC::PType + + .. bro:enum:: DCE_RPC::ACK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::CL_CANCEL DCE_RPC::PType + + .. bro:enum:: DCE_RPC::FACK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::CANCEL_ACK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::BIND DCE_RPC::PType + + .. bro:enum:: DCE_RPC::BIND_ACK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::BIND_NAK DCE_RPC::PType + + .. bro:enum:: DCE_RPC::ALTER_CONTEXT DCE_RPC::PType + + .. bro:enum:: DCE_RPC::ALTER_CONTEXT_RESP DCE_RPC::PType + + .. bro:enum:: DCE_RPC::AUTH3 DCE_RPC::PType + + .. bro:enum:: DCE_RPC::SHUTDOWN DCE_RPC::PType + + .. bro:enum:: DCE_RPC::CO_CANCEL DCE_RPC::PType + + .. bro:enum:: DCE_RPC::ORPHANED DCE_RPC::PType + + .. bro:enum:: DCE_RPC::RTS DCE_RPC::PType + + + diff --git a/doc/scripts/base/bif/plugins/Bro_DHCP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_DHCP.events.bif.bro.rst new file mode 100644 index 0000000000..88cbe05a81 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_DHCP.events.bif.bro.rst @@ -0,0 +1,43 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_DHCP.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================= ================================ +:bro:id:`dhcp_message`: :bro:type:`event` Generated for all DHCP messages. +========================================= ================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: dhcp_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`DHCP::Msg`, options: :bro:type:`DHCP::Options`) + + Generated for all DHCP messages. + + + :c: The connection record describing the underlying UDP flow. + + + :is_orig: Indicate if the message came in a packet from the + originator/client of the udp flow or the responder/server. + + + :msg: The parsed type-independent part of the DHCP message. The message + type is indicated in this record. + + + :options: The full set of supported and parsed DHCP options. + + diff --git a/doc/scripts/base/bif/plugins/Bro_DHCP.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_DHCP.types.bif.bro.rst new file mode 100644 index 0000000000..6fd48fd8c9 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_DHCP.types.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_DHCP.types.bif.bro +======================================= +.. bro:namespace:: DHCP +.. bro:namespace:: GLOBAL + + +:Namespaces: DHCP, GLOBAL + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_DNP3.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_DNP3.events.bif.bro.rst new file mode 100644 index 0000000000..2853438a20 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_DNP3.events.bif.bro.rst @@ -0,0 +1,567 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_DNP3.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +==================================================================== =========================================================================== +:bro:id:`dnp3_analog_input_16wFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 30 and variation number 2 + analog input 16 bit with flag +:bro:id:`dnp3_analog_input_16woFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 30 and variation number 4 + analog input 16 bit without flag +:bro:id:`dnp3_analog_input_32wFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 30 and variation number 1 + analog input 32 bit with flag +:bro:id:`dnp3_analog_input_32woFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 30 and variation number 3 + analog input 32 bit without flag +:bro:id:`dnp3_analog_input_DPwFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 30 and variation number 6 + analog input double precision, float point with flag +:bro:id:`dnp3_analog_input_SPwFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 30 and variation number 5 + analog input single precision, float point with flag +:bro:id:`dnp3_analog_input_event_16wTime`: :bro:type:`event` Generated for DNP3 objects with the group number 32 and variation number 4 + analog input event 16 bit with time +:bro:id:`dnp3_analog_input_event_16woTime`: :bro:type:`event` Generated for DNP3 objects with the group number 32 and variation number 2 + analog input event 16 bit without time +:bro:id:`dnp3_analog_input_event_32wTime`: :bro:type:`event` Generated for DNP3 objects with the group number 32 and variation number 3 + analog input event 32 bit with time +:bro:id:`dnp3_analog_input_event_32woTime`: :bro:type:`event` Generated for DNP3 objects with the group number 32 and variation number 1 + analog input event 32 bit without time +:bro:id:`dnp3_analog_input_event_DPwTime`: :bro:type:`event` Generated for DNP3 objects with the group number 32 and variation number 8 + analog input event double-precisiion float point with time +:bro:id:`dnp3_analog_input_event_DPwoTime`: :bro:type:`event` Generated for DNP3 objects with the group number 32 and variation number 6 + analog input event double-precision float point without time +:bro:id:`dnp3_analog_input_event_SPwTime`: :bro:type:`event` Generated for DNP3 objects with the group number 32 and variation number 7 + analog input event single-precision float point with time +:bro:id:`dnp3_analog_input_event_SPwoTime`: :bro:type:`event` Generated for DNP3 objects with the group number 32 and variation number 5 + analog input event single-precision float point without time +:bro:id:`dnp3_application_request_header`: :bro:type:`event` Generated for a DNP3 request header. +:bro:id:`dnp3_application_response_header`: :bro:type:`event` Generated for a DNP3 response header. +:bro:id:`dnp3_attribute_common`: :bro:type:`event` Generated for DNP3 attributes. +:bro:id:`dnp3_counter_16wFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 20 and variation number 2 + counter 16 bit with flag +:bro:id:`dnp3_counter_16woFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 20 and variation number 6 + counter 16 bit without flag +:bro:id:`dnp3_counter_32wFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 20 and variation number 1 + counter 32 bit with flag +:bro:id:`dnp3_counter_32woFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 20 and variation number 5 + counter 32 bit without flag +:bro:id:`dnp3_crob`: :bro:type:`event` Generated for DNP3 objects with the group number 12 and variation number 1 + CROB: control relay output block +:bro:id:`dnp3_debug_byte`: :bro:type:`event` Debugging event generated by the DNP3 analyzer. +:bro:id:`dnp3_file_transport`: :bro:type:`event` g70 +:bro:id:`dnp3_frozen_analog_input_16wFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 31 and variation number 2 + frozen analog input 16 bit with flag +:bro:id:`dnp3_frozen_analog_input_16wTime`: :bro:type:`event` Generated for DNP3 objects with the group number 31 and variation number 4 + frozen analog input 16 bit with time-of-freeze +:bro:id:`dnp3_frozen_analog_input_16woFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 31 and variation number 6 + frozen analog input 16 bit without flag +:bro:id:`dnp3_frozen_analog_input_32wFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 31 and variation number 1 + frozen analog input 32 bit with flag +:bro:id:`dnp3_frozen_analog_input_32wTime`: :bro:type:`event` Generated for DNP3 objects with the group number 31 and variation number 3 + frozen analog input 32 bit with time-of-freeze +:bro:id:`dnp3_frozen_analog_input_32woFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 31 and variation number 5 + frozen analog input 32 bit without flag +:bro:id:`dnp3_frozen_analog_input_DPwFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 31 and variation number 8 + frozen analog input double-precision, float point with flag +:bro:id:`dnp3_frozen_analog_input_SPwFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 31 and variation number 7 + frozen analog input single-precision, float point with flag +:bro:id:`dnp3_frozen_analog_input_event_16wTime`: :bro:type:`event` Generated for DNP3 objects with the group number 33 and variation number 4 + frozen analog input event 16 bit with time +:bro:id:`dnp3_frozen_analog_input_event_16woTime`: :bro:type:`event` Generated for DNP3 objects with the group number 33 and variation number 2 + frozen analog input event 16 bit without time +:bro:id:`dnp3_frozen_analog_input_event_32wTime`: :bro:type:`event` Generated for DNP3 objects with the group number 33 and variation number 3 + frozen analog input event 32 bit with time +:bro:id:`dnp3_frozen_analog_input_event_32woTime`: :bro:type:`event` Generated for DNP3 objects with the group number 33 and variation number 1 + frozen analog input event 32 bit without time +:bro:id:`dnp3_frozen_analog_input_event_DPwTime`: :bro:type:`event` Generated for DNP3 objects with the group number 34 and variation number 8 + frozen analog input event double-precision float point with time +:bro:id:`dnp3_frozen_analog_input_event_DPwoTime`: :bro:type:`event` Generated for DNP3 objects with the group number 33 and variation number 6 + frozen analog input event double-precision float point without time +:bro:id:`dnp3_frozen_analog_input_event_SPwTime`: :bro:type:`event` Generated for DNP3 objects with the group number 33 and variation number 7 + frozen analog input event single-precision float point with time +:bro:id:`dnp3_frozen_analog_input_event_SPwoTime`: :bro:type:`event` Generated for DNP3 objects with the group number 33 and variation number 5 + frozen analog input event single-precision float point without time +:bro:id:`dnp3_frozen_counter_16wFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 21 and variation number 2 + frozen counter 16 bit with flag +:bro:id:`dnp3_frozen_counter_16wFlagTime`: :bro:type:`event` Generated for DNP3 objects with the group number 21 and variation number 6 + frozen counter 16 bit with flag and time +:bro:id:`dnp3_frozen_counter_16woFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 21 and variation number 10 + frozen counter 16 bit without flag +:bro:id:`dnp3_frozen_counter_32wFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 21 and variation number 1 + frozen counter 32 bit with flag +:bro:id:`dnp3_frozen_counter_32wFlagTime`: :bro:type:`event` Generated for DNP3 objects with the group number 21 and variation number 5 + frozen counter 32 bit with flag and time +:bro:id:`dnp3_frozen_counter_32woFlag`: :bro:type:`event` Generated for DNP3 objects with the group number 21 and variation number 9 + frozen counter 32 bit without flag +:bro:id:`dnp3_header_block`: :bro:type:`event` Generated for an additional header that the DNP3 analyzer passes to the + script-level. +:bro:id:`dnp3_object_header`: :bro:type:`event` Generated for the object header found in both DNP3 requests and responses. +:bro:id:`dnp3_object_prefix`: :bro:type:`event` Generated for the prefix before a DNP3 object. +:bro:id:`dnp3_pcb`: :bro:type:`event` Generated for DNP3 objects with the group number 12 and variation number 2 + PCB: Pattern Control Block +:bro:id:`dnp3_response_data_object`: :bro:type:`event` Generated for a DNP3 "Response_Data_Object". +==================================================================== =========================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: dnp3_analog_input_16wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 2 + analog input 16 bit with flag + +.. bro:id:: dnp3_analog_input_16woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 4 + analog input 16 bit without flag + +.. bro:id:: dnp3_analog_input_32wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 1 + analog input 32 bit with flag + +.. bro:id:: dnp3_analog_input_32woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 3 + analog input 32 bit without flag + +.. bro:id:: dnp3_analog_input_DPwFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value_low: :bro:type:`count`, value_high: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 6 + analog input double precision, float point with flag + +.. bro:id:: dnp3_analog_input_SPwFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 30 and variation number 5 + analog input single precision, float point with flag + +.. bro:id:: dnp3_analog_input_event_16wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 4 + analog input event 16 bit with time + +.. bro:id:: dnp3_analog_input_event_16woTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 2 + analog input event 16 bit without time + +.. bro:id:: dnp3_analog_input_event_32wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 3 + analog input event 32 bit with time + +.. bro:id:: dnp3_analog_input_event_32woTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 1 + analog input event 32 bit without time + +.. bro:id:: dnp3_analog_input_event_DPwTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value_low: :bro:type:`count`, value_high: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 8 + analog input event double-precisiion float point with time + +.. bro:id:: dnp3_analog_input_event_DPwoTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value_low: :bro:type:`count`, value_high: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 6 + analog input event double-precision float point without time + +.. bro:id:: dnp3_analog_input_event_SPwTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 7 + analog input event single-precision float point with time + +.. bro:id:: dnp3_analog_input_event_SPwoTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 32 and variation number 5 + analog input event single-precision float point without time + +.. bro:id:: dnp3_application_request_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, application: :bro:type:`count`, fc: :bro:type:`count`) + + Generated for a DNP3 request header. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :fc: function code. + + +.. bro:id:: dnp3_application_response_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, application: :bro:type:`count`, fc: :bro:type:`count`, iin: :bro:type:`count`) + + Generated for a DNP3 response header. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :fc: function code. + + + :iin: internal indication number. + + +.. bro:id:: dnp3_attribute_common + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, data_type_code: :bro:type:`count`, leng: :bro:type:`count`, attribute_obj: :bro:type:`string`) + + Generated for DNP3 attributes. + +.. bro:id:: dnp3_counter_16wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 20 and variation number 2 + counter 16 bit with flag + +.. bro:id:: dnp3_counter_16woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 20 and variation number 6 + counter 16 bit without flag + +.. bro:id:: dnp3_counter_32wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 20 and variation number 1 + counter 32 bit with flag + +.. bro:id:: dnp3_counter_32woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 20 and variation number 5 + counter 32 bit without flag + +.. bro:id:: dnp3_crob + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, control_code: :bro:type:`count`, count8: :bro:type:`count`, on_time: :bro:type:`count`, off_time: :bro:type:`count`, status_code: :bro:type:`count`) + + Generated for DNP3 objects with the group number 12 and variation number 1 + + :CROB: control relay output block + +.. bro:id:: dnp3_debug_byte + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, debug: :bro:type:`string`) + + Debugging event generated by the DNP3 analyzer. The "Debug_Byte" binpac unit + generates this for unknown "cases". The user can use it to debug the byte + string to check what caused the malformed network packets. + +.. bro:id:: dnp3_file_transport + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, file_handle: :bro:type:`count`, block_num: :bro:type:`count`, file_data: :bro:type:`string`) + + g70 + +.. bro:id:: dnp3_frozen_analog_input_16wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 2 + frozen analog input 16 bit with flag + +.. bro:id:: dnp3_frozen_analog_input_16wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 4 + frozen analog input 16 bit with time-of-freeze + +.. bro:id:: dnp3_frozen_analog_input_16woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 6 + frozen analog input 16 bit without flag + +.. bro:id:: dnp3_frozen_analog_input_32wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 1 + frozen analog input 32 bit with flag + +.. bro:id:: dnp3_frozen_analog_input_32wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 3 + frozen analog input 32 bit with time-of-freeze + +.. bro:id:: dnp3_frozen_analog_input_32woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 5 + frozen analog input 32 bit without flag + +.. bro:id:: dnp3_frozen_analog_input_DPwFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value_low: :bro:type:`count`, frozen_value_high: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 8 + frozen analog input double-precision, float point with flag + +.. bro:id:: dnp3_frozen_analog_input_SPwFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 31 and variation number 7 + frozen analog input single-precision, float point with flag + +.. bro:id:: dnp3_frozen_analog_input_event_16wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 4 + frozen analog input event 16 bit with time + +.. bro:id:: dnp3_frozen_analog_input_event_16woTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 2 + frozen analog input event 16 bit without time + +.. bro:id:: dnp3_frozen_analog_input_event_32wTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 3 + frozen analog input event 32 bit with time + +.. bro:id:: dnp3_frozen_analog_input_event_32woTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 1 + frozen analog input event 32 bit without time + +.. bro:id:: dnp3_frozen_analog_input_event_DPwTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value_low: :bro:type:`count`, frozen_value_high: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 34 and variation number 8 + frozen analog input event double-precision float point with time + +.. bro:id:: dnp3_frozen_analog_input_event_DPwoTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value_low: :bro:type:`count`, frozen_value_high: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 6 + frozen analog input event double-precision float point without time + +.. bro:id:: dnp3_frozen_analog_input_event_SPwTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 7 + frozen analog input event single-precision float point with time + +.. bro:id:: dnp3_frozen_analog_input_event_SPwoTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, frozen_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 33 and variation number 5 + frozen analog input event single-precision float point without time + +.. bro:id:: dnp3_frozen_counter_16wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 2 + frozen counter 16 bit with flag + +.. bro:id:: dnp3_frozen_counter_16wFlagTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 6 + frozen counter 16 bit with flag and time + +.. bro:id:: dnp3_frozen_counter_16woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 10 + frozen counter 16 bit without flag + +.. bro:id:: dnp3_frozen_counter_32wFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 1 + frozen counter 32 bit with flag + +.. bro:id:: dnp3_frozen_counter_32wFlagTime + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flag: :bro:type:`count`, count_value: :bro:type:`count`, time48: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 5 + frozen counter 32 bit with flag and time + +.. bro:id:: dnp3_frozen_counter_32woFlag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, count_value: :bro:type:`count`) + + Generated for DNP3 objects with the group number 21 and variation number 9 + frozen counter 32 bit without flag + +.. bro:id:: dnp3_header_block + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, len: :bro:type:`count`, ctrl: :bro:type:`count`, dest_addr: :bro:type:`count`, src_addr: :bro:type:`count`) + + Generated for an additional header that the DNP3 analyzer passes to the + script-level. This header mimics the DNP3 transport-layer yet is only passed + once for each sequence of DNP3 records (which are otherwise reassembled and + treated as a single entity). + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :len: the "length" field in the DNP3 Pseudo Link Layer. + + + :ctrl: the "control" field in the DNP3 Pseudo Link Layer. + + + :dest_addr: the "destination" field in the DNP3 Pseudo Link Layer. + + + :src_addr: the "source" field in the DNP3 Pseudo Link Layer. + + +.. bro:id:: dnp3_object_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, obj_type: :bro:type:`count`, qua_field: :bro:type:`count`, number: :bro:type:`count`, rf_low: :bro:type:`count`, rf_high: :bro:type:`count`) + + Generated for the object header found in both DNP3 requests and responses. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :obj_type: type of object, which is classified based on an 8-bit group number + and an 8-bit variation number. + + + :qua_field: qualifier field. + + + :number: TODO. + + + :rf_low: the structure of the range field depends on the qualified field. + In some cases, the range field contains only one logic part, e.g., + number of objects, so only *rf_low* contains useful values. + + + :rf_high: in some cases, the range field contains two logic parts, e.g., start + index and stop index, so *rf_low* contains the start index + while *rf_high* contains the stop index. + + +.. bro:id:: dnp3_object_prefix + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix_value: :bro:type:`count`) + + Generated for the prefix before a DNP3 object. The structure and the meaning + of the prefix are defined by the qualifier field. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :prefix_value: The prefix. + + +.. bro:id:: dnp3_pcb + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, control_code: :bro:type:`count`, count8: :bro:type:`count`, on_time: :bro:type:`count`, off_time: :bro:type:`count`, status_code: :bro:type:`count`) + + Generated for DNP3 objects with the group number 12 and variation number 2 + + :PCB: Pattern Control Block + +.. bro:id:: dnp3_response_data_object + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, data_value: :bro:type:`count`) + + Generated for a DNP3 "Response_Data_Object". + The "Response_Data_Object" contains two parts: object prefix and object + data. In most cases, object data are defined by new record types. But + in a few cases, object data are directly basic types, such as int16, or + int8; thus we use an additional *data_value* to record the values of those + object data. + + + :c: The connection the DNP3 communication is part of. + + + :is_orig: True if this reflects originator-side activity. + + + :data_value: The value for those objects that carry their information here + directly. + + + diff --git a/doc/scripts/base/bif/plugins/Bro_DNS.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_DNS.events.bif.bro.rst new file mode 100644 index 0000000000..350ee01aee --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_DNS.events.bif.bro.rst @@ -0,0 +1,838 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_DNS.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================== ================================================================================ +:bro:id:`dns_A6_reply`: :bro:type:`event` Generated for DNS replies of type *A6*. +:bro:id:`dns_AAAA_reply`: :bro:type:`event` Generated for DNS replies of type *AAAA*. +:bro:id:`dns_A_reply`: :bro:type:`event` Generated for DNS replies of type *A*. +:bro:id:`dns_CAA_reply`: :bro:type:`event` Generated for DNS replies of type *CAA* (Certification Authority Authorization). +:bro:id:`dns_CNAME_reply`: :bro:type:`event` Generated for DNS replies of type *CNAME*. +:bro:id:`dns_DNSKEY`: :bro:type:`event` Generated for DNS replies of type *DNSKEY*. +:bro:id:`dns_DS`: :bro:type:`event` Generated for DNS replies of type *DS*. +:bro:id:`dns_EDNS_addl`: :bro:type:`event` Generated for DNS replies of type *EDNS*. +:bro:id:`dns_HINFO_reply`: :bro:type:`event` Generated for DNS replies of type *HINFO*. +:bro:id:`dns_MX_reply`: :bro:type:`event` Generated for DNS replies of type *MX*. +:bro:id:`dns_NSEC`: :bro:type:`event` Generated for DNS replies of type *NSEC*. +:bro:id:`dns_NSEC3`: :bro:type:`event` Generated for DNS replies of type *NSEC3*. +:bro:id:`dns_NS_reply`: :bro:type:`event` Generated for DNS replies of type *NS*. +:bro:id:`dns_PTR_reply`: :bro:type:`event` Generated for DNS replies of type *PTR*. +:bro:id:`dns_RRSIG`: :bro:type:`event` Generated for DNS replies of type *RRSIG*. +:bro:id:`dns_SOA_reply`: :bro:type:`event` Generated for DNS replies of type *CNAME*. +:bro:id:`dns_SRV_reply`: :bro:type:`event` Generated for DNS replies of type *SRV*. +:bro:id:`dns_TSIG_addl`: :bro:type:`event` Generated for DNS replies of type *TSIG*. +:bro:id:`dns_TXT_reply`: :bro:type:`event` Generated for DNS replies of type *TXT*. +:bro:id:`dns_WKS_reply`: :bro:type:`event` Generated for DNS replies of type *WKS*. +:bro:id:`dns_end`: :bro:type:`event` Generated at the end of processing a DNS packet. +:bro:id:`dns_full_request`: :bro:type:`event` Deprecated. +:bro:id:`dns_message`: :bro:type:`event` Generated for all DNS messages. +:bro:id:`dns_query_reply`: :bro:type:`event` Generated for each entry in the Question section of a DNS reply. +:bro:id:`dns_rejected`: :bro:type:`event` Generated for DNS replies that reject a query. +:bro:id:`dns_request`: :bro:type:`event` Generated for DNS requests. +:bro:id:`dns_unknown_reply`: :bro:type:`event` Generated on DNS reply resource records when the type of record is not one + that Bro knows how to parse and generate another more specific event. +:bro:id:`non_dns_request`: :bro:type:`event` msg: The raw DNS payload. +============================================== ================================================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: dns_A6_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, a: :bro:type:`addr`) + + Generated for DNS replies of type *A6*. For replies with multiple answers, an + individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :a: The address returned by the reply. + + .. bro:see:: dns_A_reply dns_AAAA_reply dns_CNAME_reply dns_EDNS_addl dns_HINFO_reply dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_AAAA_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, a: :bro:type:`addr`) + + Generated for DNS replies of type *AAAA*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :a: The address returned by the reply. + + .. bro:see:: dns_A_reply dns_A6_reply dns_CNAME_reply dns_EDNS_addl dns_HINFO_reply dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_A_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, a: :bro:type:`addr`) + + Generated for DNS replies of type *A*. For replies with multiple answers, an + individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :a: The address returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A6_reply dns_CNAME_reply dns_EDNS_addl dns_HINFO_reply + dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_CAA_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, flags: :bro:type:`count`, tag: :bro:type:`string`, value: :bro:type:`string`) + + Generated for DNS replies of type *CAA* (Certification Authority Authorization). + For replies with multiple answers, an individual event of the corresponding type + is raised for each. + See `RFC 6844 `__ for more details. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :flags: The flags byte of the CAA reply. + + + :tag: The property identifier of the CAA reply. + + + :value: The property value of the CAA reply. + +.. bro:id:: dns_CNAME_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, name: :bro:type:`string`) + + Generated for DNS replies of type *CNAME*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :name: The name returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_EDNS_addl dns_HINFO_reply dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_DNSKEY + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, dnskey: :bro:type:`dns_dnskey_rr`) + + Generated for DNS replies of type *DNSKEY*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :dnskey: The parsed DNSKEY record. + +.. bro:id:: dns_DS + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, ds: :bro:type:`dns_ds_rr`) + + Generated for DNS replies of type *DS*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :ds: The parsed RDATA of DS record. + +.. bro:id:: dns_EDNS_addl + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_edns_additional`) + + Generated for DNS replies of type *EDNS*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The parsed EDNS reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_HINFO_reply dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_HINFO_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`) + + Generated for DNS replies of type *HINFO*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl dns_MX_reply + dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply dns_TSIG_addl + dns_TXT_reply dns_WKS_reply dns_end dns_full_request dns_mapping_altered + dns_mapping_lost_name dns_mapping_new_name dns_mapping_unverified + dns_mapping_valid dns_message dns_query_reply dns_rejected dns_request + non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_MX_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, name: :bro:type:`string`, preference: :bro:type:`count`) + + Generated for DNS replies of type *MX*. For replies with multiple answers, an + individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :name: The name returned by the reply. + + + :preference: The preference for *name* specified by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_NSEC + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, next_name: :bro:type:`string`, bitmaps: :bro:type:`string_vec`) + + Generated for DNS replies of type *NSEC*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :next_name: The parsed next secure domain name. + + + :bitmaps: vector of strings in hex for the bit maps present. + +.. bro:id:: dns_NSEC3 + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, nsec3: :bro:type:`dns_nsec3_rr`) + + Generated for DNS replies of type *NSEC3*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :nsec3: The parsed RDATA of Nsec3 record. + +.. bro:id:: dns_NS_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, name: :bro:type:`string`) + + Generated for DNS replies of type *NS*. For replies with multiple answers, an + individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :name: The name returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_PTR_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, name: :bro:type:`string`) + + Generated for DNS replies of type *PTR*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :name: The name returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_SOA_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_RRSIG + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, rrsig: :bro:type:`dns_rrsig_rr`) + + Generated for DNS replies of type *RRSIG*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :rrsig: The parsed RRSIG record. + +.. bro:id:: dns_SOA_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, soa: :bro:type:`dns_soa`) + + Generated for DNS replies of type *CNAME*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :soa: The parsed SOA value. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SRV_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_SRV_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, target: :bro:type:`string`, priority: :bro:type:`count`, weight: :bro:type:`count`, p: :bro:type:`count`) + + Generated for DNS replies of type *SRV*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :target: Target of the SRV response -- the canonical hostname of the + machine providing the service, ending in a dot. + + + :priority: Priority of the SRV response -- the priority of the target + host, lower value means more preferred. + + + :weight: Weight of the SRV response -- a relative weight for records + with the same priority, higher value means more preferred. + + + :p: Port of the SRV response -- the TCP or UDP port on which the + service is to be found. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_TSIG_addl + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_tsig_additional`) + + Generated for DNS replies of type *TSIG*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The parsed TSIG reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TXT_reply dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_TXT_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, strs: :bro:type:`string_vec`) + + Generated for DNS replies of type *TXT*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + + :strs: The textual information returned by the reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_WKS_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_WKS_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`) + + Generated for DNS replies of type *WKS*. For replies with multiple answers, + an individual event of the corresponding type is raised for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_end dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_end + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`) + + Generated at the end of processing a DNS packet. This event is the last + ``dns_*`` event that will be raised for a DNS query/reply and signals that + all resource records have been passed on. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_full_request + dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected dns_request non_dns_request dns_max_queries dns_session_timeout + dns_skip_addl dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_full_request + + :Type: :bro:type:`event` () + + Deprecated. Will be removed. + + .. todo:: Unclear what this event is for; it's never raised. We should just + remove it. + +.. bro:id:: dns_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`dns_msg`, len: :bro:type:`count`) + + Generated for all DNS messages. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :is_orig: True if the message was sent by the originator of the connection. + + + :msg: The parsed DNS message header. + + + :len: The length of the message's raw representation (i.e., the DNS payload). + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_query_reply dns_rejected + dns_request non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_query_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, query: :bro:type:`string`, qtype: :bro:type:`count`, qclass: :bro:type:`count`) + + Generated for each entry in the Question section of a DNS reply. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :query: The queried name. + + + :qtype: The queried resource record type. + + + :qclass: The queried resource record class. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_rejected + dns_request non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_rejected + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, query: :bro:type:`string`, qtype: :bro:type:`count`, qclass: :bro:type:`count`) + + Generated for DNS replies that reject a query. This event is raised if a DNS + reply indicates failure because it does not pass on any + answers to a query. Note that all of the event's parameters are parsed out of + the reply; there's no stateful correlation with the query. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :query: The queried name. + + + :qtype: The queried resource record type. + + + :qclass: The queried resource record class. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_request non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, query: :bro:type:`string`, qtype: :bro:type:`count`, qclass: :bro:type:`count`) + + Generated for DNS requests. For requests with multiple queries, this event + is raised once for each. + + See `Wikipedia `__ for more + information about the DNS protocol. Bro analyzes both UDP and TCP DNS + sessions. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :query: The queried name. + + + :qtype: The queried resource record type. + + + :qclass: The queried resource record class. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name + dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply + dns_rejected non_dns_request dns_max_queries dns_session_timeout dns_skip_addl + dns_skip_all_addl dns_skip_all_auth dns_skip_auth + +.. bro:id:: dns_unknown_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`) + + Generated on DNS reply resource records when the type of record is not one + that Bro knows how to parse and generate another more specific event. + + + :c: The connection, which may be UDP or TCP depending on the type of the + transport-layer session being analyzed. + + + :msg: The parsed DNS message header. + + + :ans: The type-independent part of the parsed answer record. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_SRV_reply dns_end + +.. bro:id:: non_dns_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + + :msg: The raw DNS payload. + + .. note:: This event is deprecated and superseded by Bro's dynamic protocol + detection framework. + + diff --git a/doc/scripts/base/bif/plugins/Bro_FTP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_FTP.events.bif.bro.rst new file mode 100644 index 0000000000..ebc853a2e6 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_FTP.events.bif.bro.rst @@ -0,0 +1,72 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_FTP.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================== ======================================= +:bro:id:`ftp_reply`: :bro:type:`event` Generated for server-side FTP replies. +:bro:id:`ftp_request`: :bro:type:`event` Generated for client-side FTP commands. +======================================== ======================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: ftp_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, code: :bro:type:`count`, msg: :bro:type:`string`, cont_resp: :bro:type:`bool`) + + Generated for server-side FTP replies. + + See `Wikipedia `__ for + more information about the FTP protocol. + + + :c: The connection. + + + :code: The numerical response code the server responded with. + + + :msg: The textual message of the response. + + + :cont_resp: True if the reply line is tagged as being continued to the next + line. If so, further events will be raised and a handler may want + to reassemble the pieces before processing the response any + further. + + .. bro:see:: ftp_request fmt_ftp_port parse_eftp_port + parse_ftp_epsv parse_ftp_pasv parse_ftp_port + +.. bro:id:: ftp_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, command: :bro:type:`string`, arg: :bro:type:`string`) + + Generated for client-side FTP commands. + + See `Wikipedia `__ for + more information about the FTP protocol. + + + :c: The connection. + + + :command: The FTP command issued by the client (without any arguments). + + + :arg: The arguments going with the command. + + .. bro:see:: ftp_reply fmt_ftp_port parse_eftp_port + parse_ftp_epsv parse_ftp_pasv parse_ftp_port + + diff --git a/doc/scripts/base/bif/plugins/Bro_FTP.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_FTP.functions.bif.bro.rst new file mode 100644 index 0000000000..14cdd867b8 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_FTP.functions.bif.bro.rst @@ -0,0 +1,110 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_FTP.functions.bif.bro +========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +=============================================== ========================================================================== +:bro:id:`fmt_ftp_port`: :bro:type:`function` Formats an IP address and TCP port as an FTP PORT command. +:bro:id:`parse_eftp_port`: :bro:type:`function` Converts a string representation of the FTP EPRT command (see :rfc:`2428`) + to an :bro:type:`ftp_port`. +:bro:id:`parse_ftp_epsv`: :bro:type:`function` Converts the result of the FTP EPSV command (see :rfc:`2428`) to an + :bro:type:`ftp_port`. +:bro:id:`parse_ftp_pasv`: :bro:type:`function` Converts the result of the FTP PASV command to an :bro:type:`ftp_port`. +:bro:id:`parse_ftp_port`: :bro:type:`function` Converts a string representation of the FTP PORT command to an + :bro:type:`ftp_port`. +=============================================== ========================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: fmt_ftp_port + + :Type: :bro:type:`function` (a: :bro:type:`addr`, p: :bro:type:`port`) : :bro:type:`string` + + Formats an IP address and TCP port as an FTP PORT command. For example, + ``10.0.0.1`` and ``1055/tcp`` yields ``"10,0,0,1,4,31"``. + + + :a: The IP address. + + + :p: The TCP port. + + + :returns: The FTP PORT string. + + .. bro:see:: parse_ftp_port parse_eftp_port parse_ftp_pasv parse_ftp_epsv + +.. bro:id:: parse_eftp_port + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`ftp_port` + + Converts a string representation of the FTP EPRT command (see :rfc:`2428`) + to an :bro:type:`ftp_port`. The format is + ``"EPRT"``, + where ```` is a delimiter in the ASCII range 33-126 (usually ``|``). + + + :s: The string of the FTP EPRT command, e.g., ``"|1|10.0.0.1|1055|"``. + + + :returns: The FTP PORT, e.g., ``[h=10.0.0.1, p=1055/tcp, valid=T]``. + + .. bro:see:: parse_ftp_port parse_ftp_pasv parse_ftp_epsv fmt_ftp_port + +.. bro:id:: parse_ftp_epsv + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`ftp_port` + + Converts the result of the FTP EPSV command (see :rfc:`2428`) to an + :bro:type:`ftp_port`. The format is ``" ()"``, + where ```` is a delimiter in the ASCII range 33-126 (usually ``|``). + + + :str: The string containing the result of the FTP EPSV command. + + + :returns: The FTP PORT, e.g., ``[h=10.0.0.1, p=1055/tcp, valid=T]``. + + .. bro:see:: parse_ftp_port parse_eftp_port parse_ftp_pasv fmt_ftp_port + +.. bro:id:: parse_ftp_pasv + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`ftp_port` + + Converts the result of the FTP PASV command to an :bro:type:`ftp_port`. + + + :str: The string containing the result of the FTP PASV command. + + + :returns: The FTP PORT, e.g., ``[h=10.0.0.1, p=1055/tcp, valid=T]``. + + .. bro:see:: parse_ftp_port parse_eftp_port parse_ftp_epsv fmt_ftp_port + +.. bro:id:: parse_ftp_port + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`ftp_port` + + Converts a string representation of the FTP PORT command to an + :bro:type:`ftp_port`. + + + :s: The string of the FTP PORT command, e.g., ``"10,0,0,1,4,31"``. + + + :returns: The FTP PORT, e.g., ``[h=10.0.0.1, p=1055/tcp, valid=T]``. + + .. bro:see:: parse_eftp_port parse_ftp_pasv parse_ftp_epsv fmt_ftp_port + + diff --git a/doc/scripts/base/bif/plugins/Bro_File.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_File.events.bif.bro.rst new file mode 100644 index 0000000000..c59941bfd9 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_File.events.bif.bro.rst @@ -0,0 +1,44 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_File.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================= ======================================================================== +:bro:id:`file_transferred`: :bro:type:`event` Generated when a TCP connection associated w/ file data transfer is seen + (e.g. +============================================= ======================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: file_transferred + + :Type: :bro:type:`event` (c: :bro:type:`connection`, prefix: :bro:type:`string`, descr: :bro:type:`string`, mime_type: :bro:type:`string`) + + Generated when a TCP connection associated w/ file data transfer is seen + (e.g. as happens w/ FTP or IRC). + + + :c: The connection over which file data is transferred. + + + :prefix: Up to 1024 bytes of the file data. + + + :descr: Deprecated/unused argument. + + + :mime_type: MIME type of the file or "" if no file magic signatures + matched. + + diff --git a/doc/scripts/base/bif/plugins/Bro_FileEntropy.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_FileEntropy.events.bif.bro.rst new file mode 100644 index 0000000000..0b9da93850 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_FileEntropy.events.bif.bro.rst @@ -0,0 +1,38 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_FileEntropy.events.bif.bro +=============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================= ======================================================== +:bro:id:`file_entropy`: :bro:type:`event` This event is generated each time file analysis performs + entropy testing on a file. +========================================= ======================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: file_entropy + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ent: :bro:type:`entropy_test_result`) + + This event is generated each time file analysis performs + entropy testing on a file. + + + :f: The file. + + + :ent: The results of the entropy testing. + + + diff --git a/doc/scripts/base/bif/plugins/Bro_FileExtract.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_FileExtract.events.bif.bro.rst new file mode 100644 index 0000000000..cdbca14200 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_FileExtract.events.bif.bro.rst @@ -0,0 +1,50 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_FileExtract.events.bif.bro +=============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================== ================================================================ +:bro:id:`file_extraction_limit`: :bro:type:`event` This event is generated when a file extraction analyzer is about + to exceed the maximum permitted file size allowed by the + *extract_limit* field of :bro:see:`Files::AnalyzerArgs`. +================================================== ================================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: file_extraction_limit + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, args: :bro:type:`Files::AnalyzerArgs`, limit: :bro:type:`count`, len: :bro:type:`count`) + + This event is generated when a file extraction analyzer is about + to exceed the maximum permitted file size allowed by the + *extract_limit* field of :bro:see:`Files::AnalyzerArgs`. + The analyzer is automatically removed from file *f*. + + + :f: The file. + + + :args: Arguments that identify a particular file extraction analyzer. + This is only provided to be able to pass along to + :bro:see:`FileExtract::set_limit`. + + + :limit: The limit, in bytes, the extracted file is about to breach. + + + :len: The length of the file chunk about to be written. + + .. bro:see:: Files::add_analyzer Files::ANALYZER_EXTRACT + + diff --git a/doc/scripts/base/bif/plugins/Bro_FileExtract.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_FileExtract.functions.bif.bro.rst new file mode 100644 index 0000000000..da66176a18 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_FileExtract.functions.bif.bro.rst @@ -0,0 +1,31 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_FileExtract.functions.bif.bro +================================================== +.. bro:namespace:: FileExtract +.. bro:namespace:: GLOBAL + +Internal functions used by the extraction file analyzer. + +:Namespaces: FileExtract, GLOBAL + +Summary +~~~~~~~ +Functions +######### +======================================================== ================================== +:bro:id:`FileExtract::__set_limit`: :bro:type:`function` :bro:see:`FileExtract::set_limit`. +======================================================== ================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: FileExtract::__set_limit + + :Type: :bro:type:`function` (file_id: :bro:type:`string`, args: :bro:type:`any`, n: :bro:type:`count`) : :bro:type:`bool` + + :bro:see:`FileExtract::set_limit`. + + diff --git a/doc/scripts/base/bif/plugins/Bro_FileHash.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_FileHash.events.bif.bro.rst new file mode 100644 index 0000000000..522b997cfc --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_FileHash.events.bif.bro.rst @@ -0,0 +1,43 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_FileHash.events.bif.bro +============================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +====================================== ========================================================================= +:bro:id:`file_hash`: :bro:type:`event` This event is generated each time file analysis generates a digest of the + file contents. +====================================== ========================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: file_hash + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, kind: :bro:type:`string`, hash: :bro:type:`string`) + + This event is generated each time file analysis generates a digest of the + file contents. + + + :f: The file. + + + :kind: The type of digest algorithm. + + + :hash: The result of the hashing. + + .. bro:see:: Files::add_analyzer Files::ANALYZER_MD5 + Files::ANALYZER_SHA1 Files::ANALYZER_SHA256 + + diff --git a/doc/scripts/base/bif/plugins/Bro_Finger.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Finger.events.bif.bro.rst new file mode 100644 index 0000000000..32c280c373 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Finger.events.bif.bro.rst @@ -0,0 +1,74 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Finger.events.bif.bro +========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=========================================== ============================== +:bro:id:`finger_reply`: :bro:type:`event` Generated for Finger replies. +:bro:id:`finger_request`: :bro:type:`event` Generated for Finger requests. +=========================================== ============================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: finger_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, reply_line: :bro:type:`string`) + + Generated for Finger replies. + + See `Wikipedia `__ for more + information about the Finger protocol. + + + :c: The connection. + + + :reply_line: The reply as returned by the server + + .. bro:see:: finger_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: finger_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, full: :bro:type:`bool`, username: :bro:type:`string`, hostname: :bro:type:`string`) + + Generated for Finger requests. + + See `Wikipedia `__ for more + information about the Finger protocol. + + + :c: The connection. + + + :full: True if verbose information is requested (``/W`` switch). + + + :username: The request's user name. + + + :hostname: The request's host name. + + .. bro:see:: finger_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_GSSAPI.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_GSSAPI.events.bif.bro.rst new file mode 100644 index 0000000000..356d0a74b3 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_GSSAPI.events.bif.bro.rst @@ -0,0 +1,36 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_GSSAPI.events.bif.bro +========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================== ========================================= +:bro:id:`gssapi_neg_result`: :bro:type:`event` Generated for GSSAPI negotiation results. +============================================== ========================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: gssapi_neg_result + + :Type: :bro:type:`event` (c: :bro:type:`connection`, state: :bro:type:`count`) + + Generated for GSSAPI negotiation results. + + + :c: The connection. + + + :state: The resulting state of the negotiation. + + + diff --git a/doc/scripts/base/bif/plugins/Bro_GTPv1.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_GTPv1.events.bif.bro.rst new file mode 100644 index 0000000000..2e070f9ecd --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_GTPv1.events.bif.bro.rst @@ -0,0 +1,151 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_GTPv1.events.bif.bro +========================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================================== =========================================================== +:bro:id:`gtpv1_create_pdp_ctx_request`: :bro:type:`event` Generated for GTPv1-C Create PDP Context Request messages. +:bro:id:`gtpv1_create_pdp_ctx_response`: :bro:type:`event` Generated for GTPv1-C Create PDP Context Response messages. +:bro:id:`gtpv1_delete_pdp_ctx_request`: :bro:type:`event` Generated for GTPv1-C Delete PDP Context Request messages. +:bro:id:`gtpv1_delete_pdp_ctx_response`: :bro:type:`event` Generated for GTPv1-C Delete PDP Context Response messages. +:bro:id:`gtpv1_g_pdu_packet`: :bro:type:`event` Generated for GTPv1 G-PDU packets. +:bro:id:`gtpv1_message`: :bro:type:`event` Generated for any GTP message with a GTPv1 header. +:bro:id:`gtpv1_update_pdp_ctx_request`: :bro:type:`event` Generated for GTPv1-C Update PDP Context Request messages. +:bro:id:`gtpv1_update_pdp_ctx_response`: :bro:type:`event` Generated for GTPv1-C Update PDP Context Response messages. +========================================================== =========================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: gtpv1_create_pdp_ctx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_create_pdp_ctx_request_elements`) + + Generated for GTPv1-C Create PDP Context Request messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_create_pdp_ctx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_create_pdp_ctx_response_elements`) + + Generated for GTPv1-C Create PDP Context Response messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_delete_pdp_ctx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_delete_pdp_ctx_request_elements`) + + Generated for GTPv1-C Delete PDP Context Request messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_delete_pdp_ctx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_delete_pdp_ctx_response_elements`) + + Generated for GTPv1-C Delete PDP Context Response messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_g_pdu_packet + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner_gtp: :bro:type:`gtpv1_hdr`, inner_ip: :bro:type:`pkt_hdr`) + + Generated for GTPv1 G-PDU packets. That is, packets with a UDP payload + that includes a GTP header followed by an IPv4 or IPv6 packet. + + + :outer: The GTP outer tunnel connection. + + + :inner_gtp: The GTP header. + + + :inner_ip: The inner IP and transport layer packet headers. + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + +.. bro:id:: gtpv1_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`) + + Generated for any GTP message with a GTPv1 header. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + +.. bro:id:: gtpv1_update_pdp_ctx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_update_pdp_ctx_request_elements`) + + Generated for GTPv1-C Update PDP Context Request messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + +.. bro:id:: gtpv1_update_pdp_ctx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`gtpv1_hdr`, elements: :bro:type:`gtp_update_pdp_ctx_response_elements`) + + Generated for GTPv1-C Update PDP Context Response messages. + + + :c: The connection over which the message is sent. + + + :hdr: The GTPv1 header. + + + :elements: The set of Information Elements comprising the message. + + diff --git a/doc/scripts/base/bif/plugins/Bro_Gnutella.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Gnutella.events.bif.bro.rst new file mode 100644 index 0000000000..9e61de71c5 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Gnutella.events.bif.bro.rst @@ -0,0 +1,131 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Gnutella.events.bif.bro +============================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================== ===== +:bro:id:`gnutella_binary_msg`: :bro:type:`event` TODO. +:bro:id:`gnutella_establish`: :bro:type:`event` TODO. +:bro:id:`gnutella_http_notify`: :bro:type:`event` TODO. +:bro:id:`gnutella_not_establish`: :bro:type:`event` TODO. +:bro:id:`gnutella_partial_binary_msg`: :bro:type:`event` TODO. +:bro:id:`gnutella_text_msg`: :bro:type:`event` TODO. +======================================================== ===== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: gnutella_binary_msg + + :Type: :bro:type:`event` (c: :bro:type:`connection`, orig: :bro:type:`bool`, msg_type: :bro:type:`count`, ttl: :bro:type:`count`, hops: :bro:type:`count`, msg_len: :bro:type:`count`, payload: :bro:type:`string`, payload_len: :bro:type:`count`, trunc: :bro:type:`bool`, complete: :bro:type:`bool`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_establish gnutella_http_notify gnutella_not_establish + gnutella_partial_binary_msg gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_establish + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_http_notify gnutella_not_establish + gnutella_partial_binary_msg gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_http_notify + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_establish gnutella_not_establish + gnutella_partial_binary_msg gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_not_establish + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_establish gnutella_http_notify + gnutella_partial_binary_msg gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_partial_binary_msg + + :Type: :bro:type:`event` (c: :bro:type:`connection`, orig: :bro:type:`bool`, msg: :bro:type:`string`, len: :bro:type:`count`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_establish gnutella_http_notify + gnutella_not_establish gnutella_signature_found gnutella_text_msg + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: gnutella_text_msg + + :Type: :bro:type:`event` (c: :bro:type:`connection`, orig: :bro:type:`bool`, headers: :bro:type:`string`) + + TODO. + + See `Wikipedia `__ for more + information about the Gnutella protocol. + + .. bro:see:: gnutella_binary_msg gnutella_establish gnutella_http_notify + gnutella_not_establish gnutella_partial_binary_msg gnutella_signature_found + + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_HTTP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_HTTP.events.bif.bro.rst new file mode 100644 index 0000000000..94f58d414a --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_HTTP.events.bif.bro.rst @@ -0,0 +1,358 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_HTTP.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +==================================================== ======================================================================== +:bro:id:`http_all_headers`: :bro:type:`event` Generated for HTTP headers, passing on all headers of an HTTP message at + once. +:bro:id:`http_begin_entity`: :bro:type:`event` Generated when starting to parse an HTTP body entity. +:bro:id:`http_connection_upgrade`: :bro:type:`event` Generated when a HTTP session is upgraded to a different protocol (e.g. +:bro:id:`http_content_type`: :bro:type:`event` Generated for reporting an HTTP body's content type. +:bro:id:`http_end_entity`: :bro:type:`event` Generated when finishing parsing an HTTP body entity. +:bro:id:`http_entity_data`: :bro:type:`event` Generated when parsing an HTTP body entity, passing on the data. +:bro:id:`http_event`: :bro:type:`event` Generated for errors found when decoding HTTP requests or replies. +:bro:id:`http_header`: :bro:type:`event` Generated for HTTP headers. +:bro:id:`http_message_done`: :bro:type:`event` Generated once at the end of parsing an HTTP message. +:bro:id:`http_reply`: :bro:type:`event` Generated for HTTP replies. +:bro:id:`http_request`: :bro:type:`event` Generated for HTTP requests. +:bro:id:`http_stats`: :bro:type:`event` Generated at the end of an HTTP session to report statistics about it. +==================================================== ======================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: http_all_headers + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, hlist: :bro:type:`mime_header_list`) + + Generated for HTTP headers, passing on all headers of an HTTP message at + once. Bro supports persistent and pipelined HTTP sessions and raises + corresponding events as it parses client/server dialogues. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the header was sent by the originator of the TCP connection. + + + :hlist: A *table* containing all headers extracted from the current entity. + The table is indexed by the position of the header (1 for the first, + 2 for the second, etc.). + + .. bro:see:: http_begin_entity http_content_type http_end_entity http_entity_data + http_event http_header http_message_done http_reply http_request http_stats + http_connection_upgrade + + .. note:: This event is also raised for headers found in nested body + entities. + +.. bro:id:: http_begin_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated when starting to parse an HTTP body entity. This event is generated + at least once for each non-empty (client or server) HTTP body; and + potentially more than once if the body contains further nested MIME + entities. Bro raises this event just before it starts parsing each entity's + content. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + .. bro:see:: http_all_headers http_content_type http_end_entity http_entity_data + http_event http_header http_message_done http_reply http_request http_stats + mime_begin_entity http_connection_upgrade + +.. bro:id:: http_connection_upgrade + + :Type: :bro:type:`event` (c: :bro:type:`connection`, protocol: :bro:type:`string`) + + Generated when a HTTP session is upgraded to a different protocol (e.g. websocket). + This event is raised when a server replies with a HTTP 101 reply. No more HTTP events + will be raised after this event. + + + :c: The connection. + + + :protocol: The protocol to which the connection is switching. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_message_done http_reply + http_request + +.. bro:id:: http_content_type + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, ty: :bro:type:`string`, subty: :bro:type:`string`) + + Generated for reporting an HTTP body's content type. This event is + generated at the end of parsing an HTTP header, passing on the MIME + type as specified by the ``Content-Type`` header. If that header is + missing, this event is still raised with a default value of ``text/plain``. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + + :ty: The main type. + + + :subty: The subtype. + + .. bro:see:: http_all_headers http_begin_entity http_end_entity http_entity_data + http_event http_header http_message_done http_reply http_request http_stats + http_connection_upgrade + + .. note:: This event is also raised for headers found in nested body + entities. + +.. bro:id:: http_end_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated when finishing parsing an HTTP body entity. This event is generated + at least once for each non-empty (client or server) HTTP body; and + potentially more than once if the body contains further nested MIME + entities. Bro raises this event at the point when it has finished parsing an + entity's content. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_entity_data + http_event http_header http_message_done http_reply http_request + http_stats mime_end_entity http_connection_upgrade + +.. bro:id:: http_entity_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, length: :bro:type:`count`, data: :bro:type:`string`) + + Generated when parsing an HTTP body entity, passing on the data. This event + can potentially be raised many times for each entity, each time passing a + chunk of the data of not further defined size. + + A common idiom for using this event is to first *reassemble* the data + at the scripting layer by concatenating it to a successively growing + string; and only perform further content analysis once the corresponding + :bro:id:`http_end_entity` event has been raised. Note, however, that doing so + can be quite expensive for HTTP tranders. At the very least, one should + impose an upper size limit on how much data is being buffered. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + + :length: The length of *data*. + + + :data: One chunk of raw entity data. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_event http_header http_message_done http_reply http_request http_stats + mime_entity_data http_entity_data_delivery_size skip_http_data + http_connection_upgrade + +.. bro:id:: http_event + + :Type: :bro:type:`event` (c: :bro:type:`connection`, event_type: :bro:type:`string`, detail: :bro:type:`string`) + + Generated for errors found when decoding HTTP requests or replies. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :event_type: A string describing the general category of the problem found + (e.g., ``illegal format``). + + + :detail: Further more detailed description of the error. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_header http_message_done http_reply http_request + http_stats mime_event http_connection_upgrade + +.. bro:id:: http_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, name: :bro:type:`string`, value: :bro:type:`string`) + + Generated for HTTP headers. Bro supports persistent and pipelined HTTP + sessions and raises corresponding events as it parses client/server + dialogues. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the header was sent by the originator of the TCP connection. + + + :name: The name of the header. + + + :value: The value of the header. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_message_done http_reply http_request + http_stats http_connection_upgrade + + .. note:: This event is also raised for headers found in nested body + entities. + +.. bro:id:: http_message_done + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, stat: :bro:type:`http_message_stat`) + + Generated once at the end of parsing an HTTP message. Bro supports persistent + and pipelined HTTP sessions and raises corresponding events as it parses + client/server dialogues. A "message" is one top-level HTTP entity, such as a + complete request or reply. Each message can have further nested sub-entities + inside. This event is raised once all sub-entities belonging to a top-level + message have been processed (and their corresponding ``http_entity_*`` events + generated). + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :is_orig: True if the entity was sent by the originator of the TCP + connection. + + + :stat: Further meta information about the message. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_reply http_request http_stats + http_connection_upgrade + +.. bro:id:: http_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`string`, code: :bro:type:`count`, reason: :bro:type:`string`) + + Generated for HTTP replies. Bro supports persistent and pipelined HTTP + sessions and raises corresponding events as it parses client/server + dialogues. This event is generated as soon as a reply's initial line has + been parsed, and before any :bro:id:`http_header` events are raised. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :version: The version number specified in the reply (e.g., ``1.1``). + + + :code: The numerical response code returned by the server. + + + :reason: The textual description returned by the server along with *code*. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_message_done http_request + http_stats http_connection_upgrade + +.. bro:id:: http_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, method: :bro:type:`string`, original_URI: :bro:type:`string`, unescaped_URI: :bro:type:`string`, version: :bro:type:`string`) + + Generated for HTTP requests. Bro supports persistent and pipelined HTTP + sessions and raises corresponding events as it parses client/server + dialogues. This event is generated as soon as a request's initial line has + been parsed, and before any :bro:id:`http_header` events are raised. + + See `Wikipedia `__ + for more information about the HTTP protocol. + + + :c: The connection. + + + :method: The HTTP method extracted from the request (e.g., ``GET``, ``POST``). + + + :original_URI: The unprocessed URI as specified in the request. + + + :unescaped_URI: The URI with all percent-encodings decoded. + + + :version: The version number specified in the request (e.g., ``1.1``). + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_message_done http_reply http_stats + truncate_http_URI http_connection_upgrade + +.. bro:id:: http_stats + + :Type: :bro:type:`event` (c: :bro:type:`connection`, stats: :bro:type:`http_stats_rec`) + + Generated at the end of an HTTP session to report statistics about it. This + event is raised after all of an HTTP session's requests and replies have been + fully processed. + + + :c: The connection. + + + :stats: Statistics summarizing HTTP-level properties of the finished + connection. + + .. bro:see:: http_all_headers http_begin_entity http_content_type http_end_entity + http_entity_data http_event http_header http_message_done http_reply + http_request http_connection_upgrade + + diff --git a/doc/scripts/base/bif/plugins/Bro_HTTP.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_HTTP.functions.bif.bro.rst new file mode 100644 index 0000000000..e4aa5ec731 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_HTTP.functions.bif.bro.rst @@ -0,0 +1,58 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_HTTP.functions.bif.bro +=========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +===================================================== =============================================================== +:bro:id:`skip_http_entity_data`: :bro:type:`function` Skips the data of the HTTP entity. +:bro:id:`unescape_URI`: :bro:type:`function` Unescapes all characters in a URI (decode every ``%xx`` group). +===================================================== =============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: skip_http_entity_data + + :Type: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`any` + + Skips the data of the HTTP entity. + + + :c: The HTTP connection. + + + :is_orig: If true, the client data is skipped, and the server data otherwise. + + .. bro:see:: skip_smtp_data + +.. bro:id:: unescape_URI + + :Type: :bro:type:`function` (URI: :bro:type:`string`) : :bro:type:`string` + + Unescapes all characters in a URI (decode every ``%xx`` group). + + + :URI: The URI to unescape. + + + :returns: The unescaped URI with all ``%xx`` groups decoded. + + .. note:: + + Unescaping reserved characters may cause loss of information. + :rfc:`2396`: A URI is always in an "escaped" form, since escaping or + unescaping a completed URI might change its semantics. Normally, the + only time escape encodings can safely be made is when the URI is + being created from its component parts. + + diff --git a/doc/scripts/base/bif/plugins/Bro_ICMP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_ICMP.events.bif.bro.rst new file mode 100644 index 0000000000..6df646ef1b --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_ICMP.events.bif.bro.rst @@ -0,0 +1,459 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_ICMP.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================== ==================================================================== +:bro:id:`icmp_echo_reply`: :bro:type:`event` Generated for ICMP *echo reply* messages. +:bro:id:`icmp_echo_request`: :bro:type:`event` Generated for ICMP *echo request* messages. +:bro:id:`icmp_error_message`: :bro:type:`event` Generated for all ICMPv6 error messages that are not handled + separately with dedicated events. +:bro:id:`icmp_neighbor_advertisement`: :bro:type:`event` Generated for ICMP *neighbor advertisement* messages. +:bro:id:`icmp_neighbor_solicitation`: :bro:type:`event` Generated for ICMP *neighbor solicitation* messages. +:bro:id:`icmp_packet_too_big`: :bro:type:`event` Generated for ICMPv6 *packet too big* messages. +:bro:id:`icmp_parameter_problem`: :bro:type:`event` Generated for ICMPv6 *parameter problem* messages. +:bro:id:`icmp_redirect`: :bro:type:`event` Generated for ICMP *redirect* messages. +:bro:id:`icmp_router_advertisement`: :bro:type:`event` Generated for ICMP *router advertisement* messages. +:bro:id:`icmp_router_solicitation`: :bro:type:`event` Generated for ICMP *router solicitation* messages. +:bro:id:`icmp_sent`: :bro:type:`event` Generated for all ICMP messages that are not handled separately with + dedicated ICMP events. +:bro:id:`icmp_sent_payload`: :bro:type:`event` The same as :bro:see:`icmp_sent` except containing the ICMP payload. +:bro:id:`icmp_time_exceeded`: :bro:type:`event` Generated for ICMP *time exceeded* messages. +:bro:id:`icmp_unreachable`: :bro:type:`event` Generated for ICMP *destination unreachable* messages. +======================================================== ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: icmp_echo_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, id: :bro:type:`count`, seq: :bro:type:`count`, payload: :bro:type:`string`) + + Generated for ICMP *echo reply* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :id: The *echo reply* identifier. + + + :seq: The *echo reply* sequence number. + + + :payload: The message-specific data of the packet payload, i.e., everything + after the first 8 bytes of the ICMP header. + + .. bro:see:: icmp_echo_request + +.. bro:id:: icmp_echo_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, id: :bro:type:`count`, seq: :bro:type:`count`, payload: :bro:type:`string`) + + Generated for ICMP *echo request* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard + connection record *c*. + + + :id: The *echo request* identifier. + + + :seq: The *echo request* sequence number. + + + :payload: The message-specific data of the packet payload, i.e., everything + after the first 8 bytes of the ICMP header. + + .. bro:see:: icmp_echo_reply + +.. bro:id:: icmp_error_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for all ICMPv6 error messages that are not handled + separately with dedicated events. Bro's ICMP analyzer handles a number + of ICMP error messages directly with dedicated events. This event acts + as a fallback for those it doesn't. + + See `Wikipedia + `__ for more + information about the ICMPv6 protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard + connection record *c*. + + + :code: The ICMP code of the error message. + + + :context: A record with specifics of the original packet that the message + refers to. + + .. bro:see:: icmp_unreachable icmp_packet_too_big + icmp_time_exceeded icmp_parameter_problem + +.. bro:id:: icmp_neighbor_advertisement + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, router: :bro:type:`bool`, solicited: :bro:type:`bool`, override: :bro:type:`bool`, tgt: :bro:type:`addr`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *neighbor advertisement* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :router: Flag indicating the sender is a router. + + + :solicited: Flag indicating advertisement is in response to a solicitation. + + + :override: Flag indicating advertisement should override existing caches. + + + :tgt: the Target Address in the soliciting message or the address whose + link-layer address has changed for unsolicited adverts. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_solicitation icmp_router_advertisement + icmp_neighbor_solicitation icmp_redirect + +.. bro:id:: icmp_neighbor_solicitation + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, tgt: :bro:type:`addr`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *neighbor solicitation* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :tgt: The IP address of the target of the solicitation. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_solicitation icmp_router_advertisement + icmp_neighbor_advertisement icmp_redirect + +.. bro:id:: icmp_packet_too_big + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for ICMPv6 *packet too big* messages. + + See `Wikipedia + `__ for more + information about the ICMPv6 protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :code: The ICMP code of the *too big* message. + + + :context: A record with specifics of the original packet that the message + refers to. *Too big* messages should include the original IP header + from the packet that triggered them, and Bro parses that into + the *context* structure. Note that if the *too big* includes only + a partial IP header for some reason, no fields of *context* will + be filled out. + + .. bro:see:: icmp_error_message icmp_unreachable + icmp_time_exceeded icmp_parameter_problem + +.. bro:id:: icmp_parameter_problem + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for ICMPv6 *parameter problem* messages. + + See `Wikipedia + `__ for more + information about the ICMPv6 protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :code: The ICMP code of the *parameter problem* message. + + + :context: A record with specifics of the original packet that the message + refers to. *Parameter problem* messages should include the original + IP header from the packet that triggered them, and Bro parses that + into the *context* structure. Note that if the *parameter problem* + includes only a partial IP header for some reason, no fields + of *context* will be filled out. + + .. bro:see:: icmp_error_message icmp_unreachable icmp_packet_too_big + icmp_time_exceeded + +.. bro:id:: icmp_redirect + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, tgt: :bro:type:`addr`, dest: :bro:type:`addr`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *redirect* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :tgt: The address that is supposed to be a better first hop to use for + ICMP Destination Address. + + + :dest: The address of the destination which is redirected to the target. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_solicitation icmp_router_advertisement + icmp_neighbor_solicitation icmp_neighbor_advertisement + +.. bro:id:: icmp_router_advertisement + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, cur_hop_limit: :bro:type:`count`, managed: :bro:type:`bool`, other: :bro:type:`bool`, home_agent: :bro:type:`bool`, pref: :bro:type:`count`, proxy: :bro:type:`bool`, rsv: :bro:type:`count`, router_lifetime: :bro:type:`interval`, reachable_time: :bro:type:`interval`, retrans_timer: :bro:type:`interval`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *router advertisement* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :cur_hop_limit: The default value that should be placed in Hop Count field + for outgoing IP packets. + + + :managed: Managed address configuration flag, :rfc:`4861`. + + + :other: Other stateful configuration flag, :rfc:`4861`. + + + :home_agent: Mobile IPv6 home agent flag, :rfc:`3775`. + + + :pref: Router selection preferences, :rfc:`4191`. + + + :proxy: Neighbor discovery proxy flag, :rfc:`4389`. + + + :rsv: Remaining two reserved bits of router advertisement flags. + + + :router_lifetime: How long this router should be used as a default router. + + + :reachable_time: How long a neighbor should be considered reachable. + + + :retrans_timer: How long a host should wait before retransmitting. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_solicitation + icmp_neighbor_solicitation icmp_neighbor_advertisement icmp_redirect + +.. bro:id:: icmp_router_solicitation + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, options: :bro:type:`icmp6_nd_options`) + + Generated for ICMP *router solicitation* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :options: Any Neighbor Discovery options included with message (:rfc:`4861`). + + .. bro:see:: icmp_router_advertisement + icmp_neighbor_solicitation icmp_neighbor_advertisement icmp_redirect + +.. bro:id:: icmp_sent + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`) + + Generated for all ICMP messages that are not handled separately with + dedicated ICMP events. Bro's ICMP analyzer handles a number of ICMP messages + directly with dedicated events. This event acts as a fallback for those it + doesn't. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard + connection record *c*. + + .. bro:see:: icmp_error_message icmp_sent_payload + +.. bro:id:: icmp_sent_payload + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, payload: :bro:type:`string`) + + The same as :bro:see:`icmp_sent` except containing the ICMP payload. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard + connection record *c*. + + + :payload: The payload of the ICMP message. + + .. bro:see:: icmp_error_message icmp_sent_payload + +.. bro:id:: icmp_time_exceeded + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for ICMP *time exceeded* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :code: The ICMP code of the *exceeded* message. + + + :context: A record with specifics of the original packet that the message + refers to. *Unreachable* messages should include the original IP + header from the packet that triggered them, and Bro parses that + into the *context* structure. Note that if the *exceeded* includes + only a partial IP header for some reason, no fields of *context* + will be filled out. + + .. bro:see:: icmp_error_message icmp_unreachable icmp_packet_too_big + icmp_parameter_problem + +.. bro:id:: icmp_unreachable + + :Type: :bro:type:`event` (c: :bro:type:`connection`, icmp: :bro:type:`icmp_conn`, code: :bro:type:`count`, context: :bro:type:`icmp_context`) + + Generated for ICMP *destination unreachable* messages. + + See `Wikipedia + `__ for more + information about the ICMP protocol. + + + :c: The connection record for the corresponding ICMP flow. + + + :icmp: Additional ICMP-specific information augmenting the standard connection + record *c*. + + + :code: The ICMP code of the *unreachable* message. + + + :context: A record with specifics of the original packet that the message + refers to. *Unreachable* messages should include the original IP + header from the packet that triggered them, and Bro parses that + into the *context* structure. Note that if the *unreachable* + includes only a partial IP header for some reason, no + fields of *context* will be filled out. + + .. bro:see:: icmp_error_message icmp_packet_too_big + icmp_time_exceeded icmp_parameter_problem + + diff --git a/doc/scripts/base/bif/plugins/Bro_IMAP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_IMAP.events.bif.bro.rst new file mode 100644 index 0000000000..6b487c2f5a --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_IMAP.events.bif.bro.rst @@ -0,0 +1,49 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_IMAP.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================== ================================================================== +:bro:id:`imap_capabilities`: :bro:type:`event` Generated when a server sends a capability list to the client, + after being queried using the CAPABILITY command. +:bro:id:`imap_starttls`: :bro:type:`event` Generated when a IMAP connection goes encrypted after a successful + StartTLS exchange between the client and the server. +============================================== ================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: imap_capabilities + + :Type: :bro:type:`event` (c: :bro:type:`connection`, capabilities: :bro:type:`string_vec`) + + Generated when a server sends a capability list to the client, + after being queried using the CAPABILITY command. + + + :c: The connection. + + + :capabilities: The list of IMAP capabilities as sent by the server. + +.. bro:id:: imap_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a IMAP connection goes encrypted after a successful + StartTLS exchange between the client and the server. + + + :c: The connection. + + diff --git a/doc/scripts/base/bif/plugins/Bro_IRC.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_IRC.events.bif.bro.rst new file mode 100644 index 0000000000..6d09ab7e7e --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_IRC.events.bif.bro.rst @@ -0,0 +1,1098 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_IRC.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +==================================================== =================================================================== +:bro:id:`irc_channel_info`: :bro:type:`event` Generated for an IRC reply of type *luserchannels*. +:bro:id:`irc_channel_topic`: :bro:type:`event` Generated for an IRC reply of type *topic*. +:bro:id:`irc_dcc_message`: :bro:type:`event` Generated for IRC messages of type *dcc*. +:bro:id:`irc_error_message`: :bro:type:`event` Generated for IRC messages of type *error*. +:bro:id:`irc_global_users`: :bro:type:`event` Generated for an IRC reply of type *globalusers*. +:bro:id:`irc_invalid_nick`: :bro:type:`event` Generated when a server rejects an IRC nickname. +:bro:id:`irc_invite_message`: :bro:type:`event` Generated for IRC messages of type *invite*. +:bro:id:`irc_join_message`: :bro:type:`event` Generated for IRC messages of type *join*. +:bro:id:`irc_kick_message`: :bro:type:`event` Generated for IRC messages of type *kick*. +:bro:id:`irc_message`: :bro:type:`event` Generated for IRC commands forwarded from the server to the client. +:bro:id:`irc_mode_message`: :bro:type:`event` Generated for IRC messages of type *mode*. +:bro:id:`irc_names_info`: :bro:type:`event` Generated for an IRC reply of type *namereply*. +:bro:id:`irc_network_info`: :bro:type:`event` Generated for an IRC reply of type *luserclient*. +:bro:id:`irc_nick_message`: :bro:type:`event` Generated for IRC messages of type *nick*. +:bro:id:`irc_notice_message`: :bro:type:`event` Generated for IRC messages of type *notice*. +:bro:id:`irc_oper_message`: :bro:type:`event` Generated for IRC messages of type *oper*. +:bro:id:`irc_oper_response`: :bro:type:`event` Generated for IRC replies of type *youreoper* and *nooperhost*. +:bro:id:`irc_part_message`: :bro:type:`event` Generated for IRC messages of type *part*. +:bro:id:`irc_password_message`: :bro:type:`event` Generated for IRC messages of type *password*. +:bro:id:`irc_privmsg_message`: :bro:type:`event` Generated for IRC messages of type *privmsg*. +:bro:id:`irc_quit_message`: :bro:type:`event` Generated for IRC messages of type *quit*. +:bro:id:`irc_reply`: :bro:type:`event` Generated for all IRC replies. +:bro:id:`irc_request`: :bro:type:`event` Generated for all client-side IRC commands. +:bro:id:`irc_server_info`: :bro:type:`event` Generated for an IRC reply of type *luserme*. +:bro:id:`irc_squery_message`: :bro:type:`event` Generated for IRC messages of type *squery*. +:bro:id:`irc_squit_message`: :bro:type:`event` Generated for IRC messages of type *squit*. +:bro:id:`irc_starttls`: :bro:type:`event` Generated if an IRC connection switched to TLS using STARTTLS. +:bro:id:`irc_user_message`: :bro:type:`event` Generated for IRC messages of type *user*. +:bro:id:`irc_who_line`: :bro:type:`event` Generated for an IRC reply of type *whoreply*. +:bro:id:`irc_who_message`: :bro:type:`event` Generated for IRC messages of type *who*. +:bro:id:`irc_whois_channel_line`: :bro:type:`event` Generated for an IRC reply of type *whoischannels*. +:bro:id:`irc_whois_message`: :bro:type:`event` Generated for IRC messages of type *whois*. +:bro:id:`irc_whois_operator_line`: :bro:type:`event` Generated for an IRC reply of type *whoisoperator*. +:bro:id:`irc_whois_user_line`: :bro:type:`event` Generated for an IRC reply of type *whoisuser*. +==================================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: irc_channel_info + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, chans: :bro:type:`count`) + + Generated for an IRC reply of type *luserchannels*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :chans: The number of channels as returned in the reply. + + .. bro:see:: irc_channel_topic irc_dcc_message irc_error_message irc_global_users + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_channel_topic + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, channel: :bro:type:`string`, topic: :bro:type:`string`) + + Generated for an IRC reply of type *topic*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :channel: The channel name specified in the reply. + + + :topic: The topic specified in the reply. + + .. bro:see:: irc_channel_info irc_dcc_message irc_error_message irc_global_users + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_dcc_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, target: :bro:type:`string`, dcc_type: :bro:type:`string`, argument: :bro:type:`string`, address: :bro:type:`addr`, dest_port: :bro:type:`count`, size: :bro:type:`count`) + + Generated for IRC messages of type *dcc*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :target: The target specified in the message. + + + :dcc_type: The DCC type specified in the message. + + + :argument: The argument specified in the message. + + + :address: The address specified in the message. + + + :dest_port: The destination port specified in the message. + + + :size: The size specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_error_message irc_global_users + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_error_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *error*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :message: The textual description specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_global_users + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_global_users + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, msg: :bro:type:`string`) + + Generated for an IRC reply of type *globalusers*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :msg: The message coming with the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_invalid_nick irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_invalid_nick + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated when a server rejects an IRC nickname. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invite_message irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_invite_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, nickname: :bro:type:`string`, channel: :bro:type:`string`) + + Generated for IRC messages of type *invite*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :nickname: The nickname specified in the message. + + + :channel: The channel specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_join_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_join_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, info_list: :bro:type:`irc_join_list`) + + Generated for IRC messages of type *join*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :info_list: The user information coming with the command. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_kick_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_kick_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, chans: :bro:type:`string`, users: :bro:type:`string`, comment: :bro:type:`string`) + + Generated for IRC messages of type *kick*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :chans: The channels specified in the message. + + + :users: The users specified in the message. + + + :comment: The comment specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_message irc_mode_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, command: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC commands forwarded from the server to the client. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: Always false. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :command: The command. + + + :message: TODO. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + + .. note:: + + This event is generated only for messages that are forwarded by the server + to the client. Commands coming from client trigger the + :bro:id:`irc_request` event instead. + +.. bro:id:: irc_mode_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, params: :bro:type:`string`) + + Generated for IRC messages of type *mode*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :params: The parameters coming with the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_names_info irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_names_info + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, c_type: :bro:type:`string`, channel: :bro:type:`string`, users: :bro:type:`string_set`) + + Generated for an IRC reply of type *namereply*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :c_type: The channel type. + + + :channel: The channel. + + + :users: The set of users. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_network_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_network_info + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, users: :bro:type:`count`, services: :bro:type:`count`, servers: :bro:type:`count`) + + Generated for an IRC reply of type *luserclient*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :users: The number of users as returned in the reply. + + + :services: The number of services as returned in the reply. + + + :servers: The number of servers as returned in the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_nick_message + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_nick_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, who: :bro:type:`string`, newnick: :bro:type:`string`) + + Generated for IRC messages of type *nick*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :who: The user changing its nickname. + + + :newnick: The new nickname. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_notice_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_notice_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, source: :bro:type:`string`, target: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *notice*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :source: The source of the private communication. + + + :target: The target of the private communication. + + + :message: The text of communication. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_oper_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_oper_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, user: :bro:type:`string`, password: :bro:type:`string`) + + Generated for IRC messages of type *oper*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :user: The user specified in the message. + + + :password: The password specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_response irc_part_message + irc_password_message + +.. bro:id:: irc_oper_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, got_oper: :bro:type:`bool`) + + Generated for IRC replies of type *youreoper* and *nooperhost*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :got_oper: True if the *oper* command was executed successfully + (*youreport*) and false otherwise (*nooperhost*). + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_part_message + irc_password_message + +.. bro:id:: irc_part_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`, chans: :bro:type:`string_set`, message: :bro:type:`string`) + + Generated for IRC messages of type *part*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname coming with the message. + + + :chans: The set of channels affected. + + + :message: The text coming with the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_password_message + +.. bro:id:: irc_password_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, password: :bro:type:`string`) + + Generated for IRC messages of type *password*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :password: The password specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message + +.. bro:id:: irc_privmsg_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, source: :bro:type:`string`, target: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *privmsg*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :source: The source of the private communication. + + + :target: The target of the private communication. + + + :message: The text of communication. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_quit_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *quit*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname coming with the message. + + + :message: The text included with the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, code: :bro:type:`count`, params: :bro:type:`string`) + + Generated for all IRC replies. IRC replies are sent in response to a + request and come with a reply code. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the reply. IRC uses the prefix to + indicate the true origin of a message. + + + :code: The reply code, as specified by the protocol. + + + :params: The reply's parameters. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, command: :bro:type:`string`, arguments: :bro:type:`string`) + + Generated for all client-side IRC commands. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: Always true. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :command: The command. + + + :arguments: The arguments for the command. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + + .. note:: This event is generated only for messages that originate + at the client-side. Commands coming in from remote trigger + the :bro:id:`irc_message` event instead. + +.. bro:id:: irc_server_info + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, users: :bro:type:`count`, services: :bro:type:`count`, servers: :bro:type:`count`) + + Generated for an IRC reply of type *luserme*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :users: The number of users as returned in the reply. + + + :services: The number of services as returned in the reply. + + + :servers: The number of servers as returned in the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_squery_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, source: :bro:type:`string`, target: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *squery*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :source: The source of the private communication. + + + :target: The target of the private communication. + + + :message: The text of communication. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_squit_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, prefix: :bro:type:`string`, server: :bro:type:`string`, message: :bro:type:`string`) + + Generated for IRC messages of type *squit*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :prefix: The optional prefix coming with the command. IRC uses the prefix to + indicate the true origin of a message. + + + :server: The server specified in the message. + + + :message: The textual description specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated if an IRC connection switched to TLS using STARTTLS. After this + event no more IRC events will be raised for the connection. See the SSL + analyzer for related SSL events, which will now be generated. + + + :c: The connection. + +.. bro:id:: irc_user_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, user: :bro:type:`string`, host: :bro:type:`string`, server: :bro:type:`string`, real_name: :bro:type:`string`) + + Generated for IRC messages of type *user*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :user: The user specified in the message. + + + :host: The host name specified in the message. + + + :server: The server name specified in the message. + + + :real_name: The real name specified in the message. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_who_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, target_nick: :bro:type:`string`, channel: :bro:type:`string`, user: :bro:type:`string`, host: :bro:type:`string`, server: :bro:type:`string`, nick: :bro:type:`string`, params: :bro:type:`string`, hops: :bro:type:`count`, real_name: :bro:type:`string`) + + Generated for an IRC reply of type *whoreply*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :target_nick: The target nickname. + + + :channel: The channel. + + + :user: The user. + + + :host: The host. + + + :server: The server. + + + :nick: The nickname. + + + :params: The parameters. + + + :hops: The hop count. + + + :real_name: The real name. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_who_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, mask: :bro:type:`string`, oper: :bro:type:`bool`) + + Generated for IRC messages of type *who*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :mask: The mask specified in the message. + + + :oper: True if the operator flag was set. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_whois_channel_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`, chans: :bro:type:`string_set`) + + Generated for an IRC reply of type *whoischannels*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname specified in the reply. + + + :chans: The set of channels returned. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_whois_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, server: :bro:type:`string`, users: :bro:type:`string`) + + Generated for IRC messages of type *whois*. This event is generated for + messages coming from both the client and the server. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :server: TODO. + + + :users: TODO. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_whois_operator_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`) + + Generated for an IRC reply of type *whoisoperator*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname specified in the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + +.. bro:id:: irc_whois_user_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, nick: :bro:type:`string`, user: :bro:type:`string`, host: :bro:type:`string`, real_name: :bro:type:`string`) + + Generated for an IRC reply of type *whoisuser*. + + See `Wikipedia `__ for more + information about the IRC protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :nick: The nickname specified in the reply. + + + :user: The user name specified in the reply. + + + :host: The host name specified in the reply. + + + :real_name: The real name specified in the reply. + + .. bro:see:: irc_channel_info irc_channel_topic irc_dcc_message irc_error_message + irc_global_users irc_invalid_nick irc_invite_message irc_join_message + irc_kick_message irc_message irc_mode_message irc_names_info irc_network_info + irc_nick_message irc_notice_message irc_oper_message irc_oper_response + irc_part_message irc_password_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_Ident.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Ident.events.bif.bro.rst new file mode 100644 index 0000000000..61ee1dd781 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Ident.events.bif.bro.rst @@ -0,0 +1,109 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Ident.events.bif.bro +========================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================== ================================== +:bro:id:`ident_error`: :bro:type:`event` Generated for Ident error replies. +:bro:id:`ident_reply`: :bro:type:`event` Generated for Ident replies. +:bro:id:`ident_request`: :bro:type:`event` Generated for Ident requests. +========================================== ================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: ident_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, lport: :bro:type:`port`, rport: :bro:type:`port`, line: :bro:type:`string`) + + Generated for Ident error replies. + + See `Wikipedia `__ for more + information about the Ident protocol. + + + :c: The connection. + + + :lport: The corresponding request's local port. + + + :rport: The corresponding request's remote port. + + + :line: The error description returned by the reply. + + .. bro:see:: ident_reply ident_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: ident_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, lport: :bro:type:`port`, rport: :bro:type:`port`, user_id: :bro:type:`string`, system: :bro:type:`string`) + + Generated for Ident replies. + + See `Wikipedia `__ for more + information about the Ident protocol. + + + :c: The connection. + + + :lport: The corresponding request's local port. + + + :rport: The corresponding request's remote port. + + + :user_id: The user id returned by the reply. + + + :system: The operating system returned by the reply. + + .. bro:see:: ident_error ident_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: ident_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, lport: :bro:type:`port`, rport: :bro:type:`port`) + + Generated for Ident requests. + + See `Wikipedia `__ for more + information about the Ident protocol. + + + :c: The connection. + + + :lport: The request's local port. + + + :rport: The request's remote port. + + .. bro:see:: ident_error ident_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_InterConn.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_InterConn.events.bif.bro.rst new file mode 100644 index 0000000000..a69e4f5d35 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_InterConn.events.bif.bro.rst @@ -0,0 +1,36 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_InterConn.events.bif.bro +============================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================== =========== +:bro:id:`interconn_remove_conn`: :bro:type:`event` Deprecated. +:bro:id:`interconn_stats`: :bro:type:`event` Deprecated. +================================================== =========== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: interconn_remove_conn + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Deprecated. Will be removed. + +.. bro:id:: interconn_stats + + :Type: :bro:type:`event` (c: :bro:type:`connection`, os: :bro:type:`interconn_endp_stats`, rs: :bro:type:`interconn_endp_stats`) + + Deprecated. Will be removed. + + diff --git a/doc/scripts/base/bif/plugins/Bro_KRB.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_KRB.events.bif.bro.rst new file mode 100644 index 0000000000..d57c355189 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_KRB.events.bif.bro.rst @@ -0,0 +1,250 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_KRB.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================= ================================================================== +:bro:id:`krb_ap_request`: :bro:type:`event` A Kerberos 5 ``Authentication Header (AP) Request`` as defined + in :rfc:`4120`. +:bro:id:`krb_ap_response`: :bro:type:`event` A Kerberos 5 ``Authentication Header (AP) Response`` as defined + in :rfc:`4120`. +:bro:id:`krb_as_request`: :bro:type:`event` A Kerberos 5 ``Authentication Server (AS) Request`` as defined + in :rfc:`4120`. +:bro:id:`krb_as_response`: :bro:type:`event` A Kerberos 5 ``Authentication Server (AS) Response`` as defined + in :rfc:`4120`. +:bro:id:`krb_cred`: :bro:type:`event` A Kerberos 5 ``Credential Message`` as defined in :rfc:`4120`. +:bro:id:`krb_error`: :bro:type:`event` A Kerberos 5 ``Error Message`` as defined in :rfc:`4120`. +:bro:id:`krb_priv`: :bro:type:`event` A Kerberos 5 ``Private Message`` as defined in :rfc:`4120`. +:bro:id:`krb_safe`: :bro:type:`event` A Kerberos 5 ``Safe Message`` as defined in :rfc:`4120`. +:bro:id:`krb_tgs_request`: :bro:type:`event` A Kerberos 5 ``Ticket Granting Service (TGS) Request`` as defined + in :rfc:`4120`. +:bro:id:`krb_tgs_response`: :bro:type:`event` A Kerberos 5 ``Ticket Granting Service (TGS) Response`` as defined + in :rfc:`4120`. +============================================= ================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: krb_ap_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, ticket: :bro:type:`KRB::Ticket`, opts: :bro:type:`KRB::AP_Options`) + + A Kerberos 5 ``Authentication Header (AP) Request`` as defined + in :rfc:`4120`. This message contains authentication information + that should be part of the first message in an authenticated + transaction. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :ticket: The Kerberos ticket being used for authentication. + + + :opts: A Kerberos AP options data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_response krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_ap_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + A Kerberos 5 ``Authentication Header (AP) Response`` as defined + in :rfc:`4120`. This is used if mutual authentication is desired. + All of the interesting information in here is encrypted, so the event + doesn't have much useful data, but it's provided in case it's important + to know that this message was sent. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_as_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::KDC_Request`) + + A Kerberos 5 ``Authentication Server (AS) Request`` as defined + in :rfc:`4120`. The AS request contains a username of the client + requesting authentication, and returns an AS reply with an + encrypted Ticket Granting Ticket (TGT) for that user. The TGT + can then be used to request further tickets for other services. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos KDC request message data structure. + + .. bro:see:: krb_as_response krb_tgs_request krb_tgs_response krb_ap_request + krb_ap_response krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_as_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::KDC_Response`) + + A Kerberos 5 ``Authentication Server (AS) Response`` as defined + in :rfc:`4120`. Following the AS request for a user, an AS reply + contains an encrypted Ticket Granting Ticket (TGT) for that user. + The TGT can then be used to request further tickets for other services. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos KDC reply message data structure. + + .. bro:see:: krb_as_request krb_tgs_request krb_tgs_response krb_ap_request + krb_ap_response krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_cred + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, tickets: :bro:type:`KRB::Ticket_Vector`) + + A Kerberos 5 ``Credential Message`` as defined in :rfc:`4120`. This is + a private (encrypted) message to forward credentials. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :is_orig: Whether the originator of the connection sent this message. + + + :tickets: Tickets obtained from the KDC that are being forwarded. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_ap_response krb_priv krb_safe krb_error + +.. bro:id:: krb_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::Error_Msg`) + + A Kerberos 5 ``Error Message`` as defined in :rfc:`4120`. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos error message data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_ap_response krb_priv krb_safe krb_cred + +.. bro:id:: krb_priv + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + A Kerberos 5 ``Private Message`` as defined in :rfc:`4120`. This + is a private (encrypted) application message, so the event doesn't + have much useful data, but it's provided in case it's important to + know that this message was sent. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :is_orig: Whether the originator of the connection sent this message. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_ap_response krb_safe krb_cred krb_error + +.. bro:id:: krb_safe + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`KRB::SAFE_Msg`) + + A Kerberos 5 ``Safe Message`` as defined in :rfc:`4120`. This is a + safe (checksummed) application message. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :is_orig: Whether the originator of the connection sent this message. + + + :msg: A Kerberos SAFE message data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_tgs_response + krb_ap_request krb_ap_response krb_priv krb_cred krb_error + +.. bro:id:: krb_tgs_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::KDC_Request`) + + A Kerberos 5 ``Ticket Granting Service (TGS) Request`` as defined + in :rfc:`4120`. Following the Authentication Server exchange, if + successful, the client now has a Ticket Granting Ticket (TGT). To + authenticate to a Kerberized service, the client requests a Service + Ticket, which will be returned in the TGS reply. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos KDC request message data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_response krb_ap_request + krb_ap_response krb_priv krb_safe krb_cred krb_error + +.. bro:id:: krb_tgs_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`KRB::KDC_Response`) + + A Kerberos 5 ``Ticket Granting Service (TGS) Response`` as defined + in :rfc:`4120`. This message returns a Service Ticket to the client, + which is encrypted with the service's long-term key, and which the + client can use to authenticate to that service. + + See `Wikipedia `__ for + more information about the Kerberos protocol. + + + :c: The connection over which this Kerberos message was sent. + + + :msg: A Kerberos KDC reply message data structure. + + .. bro:see:: krb_as_request krb_as_response krb_tgs_request krb_ap_request + krb_ap_response krb_priv krb_safe krb_cred krb_error + + diff --git a/doc/scripts/base/bif/plugins/Bro_KRB.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_KRB.types.bif.bro.rst new file mode 100644 index 0000000000..d207e24f7d --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_KRB.types.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_KRB.types.bif.bro +====================================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: KRB + + +:Namespaces: GLOBAL, KRB + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_Login.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Login.events.bif.bro.rst new file mode 100644 index 0000000000..2dc9033aec --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Login.events.bif.bro.rst @@ -0,0 +1,547 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Login.events.bif.bro +========================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +==================================================== ========================================================================= +:bro:id:`activating_encryption`: :bro:type:`event` Generated for Telnet sessions when encryption is activated. +:bro:id:`authentication_accepted`: :bro:type:`event` Generated when a Telnet authentication has been successful. +:bro:id:`authentication_rejected`: :bro:type:`event` Generated when a Telnet authentication has been unsuccessful. +:bro:id:`authentication_skipped`: :bro:type:`event` Generated for Telnet/Rlogin sessions when a pattern match indicates + that no authentication is performed. +:bro:id:`bad_option`: :bro:type:`event` Generated for an ill-formed or unrecognized Telnet option. +:bro:id:`bad_option_termination`: :bro:type:`event` Generated for a Telnet option that's incorrectly terminated. +:bro:id:`inconsistent_option`: :bro:type:`event` Generated for an inconsistent Telnet option. +:bro:id:`login_confused`: :bro:type:`event` Generated when tracking of Telnet/Rlogin authentication failed. +:bro:id:`login_confused_text`: :bro:type:`event` Generated after getting confused while tracking a Telnet/Rlogin + authentication dialog. +:bro:id:`login_display`: :bro:type:`event` Generated for clients transmitting an X11 DISPLAY in a Telnet session. +:bro:id:`login_failure`: :bro:type:`event` Generated for Telnet/Rlogin login failures. +:bro:id:`login_input_line`: :bro:type:`event` Generated for lines of input on Telnet/Rlogin sessions. +:bro:id:`login_output_line`: :bro:type:`event` Generated for lines of output on Telnet/Rlogin sessions. +:bro:id:`login_prompt`: :bro:type:`event` Generated for clients transmitting a terminal prompt in a Telnet session. +:bro:id:`login_success`: :bro:type:`event` Generated for successful Telnet/Rlogin logins. +:bro:id:`login_terminal`: :bro:type:`event` Generated for clients transmitting a terminal type in a Telnet session. +:bro:id:`rsh_reply`: :bro:type:`event` Generated for client side commands on an RSH connection. +:bro:id:`rsh_request`: :bro:type:`event` Generated for client side commands on an RSH connection. +==================================================== ========================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: activating_encryption + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for Telnet sessions when encryption is activated. The Telnet + protocol includes options for negotiating encryption. When such a series of + options is successfully negotiated, the event engine generates this event. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: authentication_accepted authentication_rejected authentication_skipped + login_confused login_confused_text login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal + +.. bro:id:: authentication_accepted + + :Type: :bro:type:`event` (name: :bro:type:`string`, c: :bro:type:`connection`) + + Generated when a Telnet authentication has been successful. The Telnet + protocol includes options for negotiating authentication. When such an + option is sent from client to server and the server replies that it accepts + the authentication, then the event engine generates this event. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :name: The authenticated name. + + + :c: The connection. + + .. bro:see:: authentication_rejected authentication_skipped login_success + + .. note:: This event inspects the corresponding Telnet option + while :bro:id:`login_success` heuristically determines success by watching + session data. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: authentication_rejected + + :Type: :bro:type:`event` (name: :bro:type:`string`, c: :bro:type:`connection`) + + Generated when a Telnet authentication has been unsuccessful. The Telnet + protocol includes options for negotiating authentication. When such an option + is sent from client to server and the server replies that it did not accept + the authentication, then the event engine generates this event. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :name: The attempted authentication name. + + + :c: The connection. + + .. bro:see:: authentication_accepted authentication_skipped login_failure + + .. note:: This event inspects the corresponding Telnet option + while :bro:id:`login_success` heuristically determines failure by watching + session data. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: authentication_skipped + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for Telnet/Rlogin sessions when a pattern match indicates + that no authentication is performed. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: authentication_accepted authentication_rejected direct_login_prompts + get_login_state login_failure_msgs login_non_failure_msgs login_prompts + login_success_msgs login_timeouts set_login_state + + .. note:: The login analyzer depends on a set of script-level variables that + need to be configured with patterns identifying activity. This + configuration has not yet been ported over from Bro 1.5 to Bro 2.x, and + the analyzer is therefore not directly usable at the moment. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: bad_option + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for an ill-formed or unrecognized Telnet option. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: inconsistent_option bad_option_termination authentication_accepted + authentication_rejected authentication_skipped login_confused + login_confused_text login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: bad_option_termination + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for a Telnet option that's incorrectly terminated. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: inconsistent_option bad_option authentication_accepted + authentication_rejected authentication_skipped login_confused + login_confused_text login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: inconsistent_option + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for an inconsistent Telnet option. Telnet options are specified + by the client and server stating which options they are willing to + support vs. which they are not, and then instructing one another which in + fact they should or should not use for the current connection. If the event + engine sees a peer violate either what the other peer has instructed it to + do, or what it itself offered in terms of options in the past, then the + engine generates this event. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + .. bro:see:: bad_option bad_option_termination authentication_accepted + authentication_rejected authentication_skipped login_confused + login_confused_text login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal + +.. bro:id:: login_confused + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`, line: :bro:type:`string`) + + Generated when tracking of Telnet/Rlogin authentication failed. As Bro's + *login* analyzer uses a number of heuristics to extract authentication + information, it may become confused. If it can no longer correctly track + the authentication dialog, it raises this event. + + + :c: The connection. + + + :msg: Gives the particular problem the heuristics detected (for example, + ``multiple_login_prompts`` means that the engine saw several login + prompts in a row, without the type-ahead from the client side presumed + necessary to cause them) + + + :line: The line of text that caused the heuristics to conclude they were + confused. + + .. bro:see:: login_confused_text login_display login_failure login_input_line login_output_line + login_prompt login_success login_terminal direct_login_prompts get_login_state + login_failure_msgs login_non_failure_msgs login_prompts login_success_msgs + login_timeouts set_login_state + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_confused_text + + :Type: :bro:type:`event` (c: :bro:type:`connection`, line: :bro:type:`string`) + + Generated after getting confused while tracking a Telnet/Rlogin + authentication dialog. The *login* analyzer generates this even for every + line of user input after it has reported :bro:id:`login_confused` for a + connection. + + + :c: The connection. + + + :line: The line the user typed. + + .. bro:see:: login_confused login_display login_failure login_input_line + login_output_line login_prompt login_success login_terminal direct_login_prompts + get_login_state login_failure_msgs login_non_failure_msgs login_prompts + login_success_msgs login_timeouts set_login_state + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_display + + :Type: :bro:type:`event` (c: :bro:type:`connection`, display: :bro:type:`string`) + + Generated for clients transmitting an X11 DISPLAY in a Telnet session. This + information is extracted out of environment variables sent as Telnet options. + + + :c: The connection. + + + :display: The DISPLAY transmitted. + + .. bro:see:: login_confused login_confused_text login_failure login_input_line + login_output_line login_prompt login_success login_terminal + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_failure + + :Type: :bro:type:`event` (c: :bro:type:`connection`, user: :bro:type:`string`, client_user: :bro:type:`string`, password: :bro:type:`string`, line: :bro:type:`string`) + + Generated for Telnet/Rlogin login failures. The *login* analyzer inspects + Telnet/Rlogin sessions to heuristically extract username and password + information as well as the text returned by the login server. This event is + raised if a login attempt appears to have been unsuccessful. + + + :c: The connection. + + + :user: The user name tried. + + + :client_user: For Telnet connections, this is an empty string, but for Rlogin + connections, it is the client name passed in the initial authentication + information (to check against .rhosts). + + + :password: The password tried. + + + :line: The line of text that led the analyzer to conclude that the + authentication had failed. + + .. bro:see:: login_confused login_confused_text login_display login_input_line + login_output_line login_prompt login_success login_terminal direct_login_prompts + get_login_state login_failure_msgs login_non_failure_msgs login_prompts login_success_msgs + login_timeouts set_login_state + + .. note:: The login analyzer depends on a set of script-level variables that + need to be configured with patterns identifying login attempts. This + configuration has not yet been ported over from Bro 1.5 to Bro 2.x, and + the analyzer is therefore not directly usable at the moment. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_input_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, line: :bro:type:`string`) + + Generated for lines of input on Telnet/Rlogin sessions. The line will have + control characters (such as in-band Telnet options) removed. + + + :c: The connection. + + + :line: The input line. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_output_line login_prompt login_success login_terminal rsh_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_output_line + + :Type: :bro:type:`event` (c: :bro:type:`connection`, line: :bro:type:`string`) + + Generated for lines of output on Telnet/Rlogin sessions. The line will have + control characters (such as in-band Telnet options) removed. + + + :c: The connection. + + + :line: The ouput line. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_input_line login_prompt login_success login_terminal rsh_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_prompt + + :Type: :bro:type:`event` (c: :bro:type:`connection`, prompt: :bro:type:`string`) + + Generated for clients transmitting a terminal prompt in a Telnet session. + This information is extracted out of environment variables sent as Telnet + options. + + See `Wikipedia `__ for more information + about the Telnet protocol. + + + :c: The connection. + + + :prompt: The TTYPROMPT transmitted. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_input_line login_output_line login_success login_terminal + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_success + + :Type: :bro:type:`event` (c: :bro:type:`connection`, user: :bro:type:`string`, client_user: :bro:type:`string`, password: :bro:type:`string`, line: :bro:type:`string`) + + Generated for successful Telnet/Rlogin logins. The *login* analyzer inspects + Telnet/Rlogin sessions to heuristically extract username and password + information as well as the text returned by the login server. This event is + raised if a login attempt appears to have been successful. + + + :c: The connection. + + + :user: The user name used. + + + :client_user: For Telnet connections, this is an empty string, but for Rlogin + connections, it is the client name passed in the initial authentication + information (to check against .rhosts). + + + :password: The password used. + + + :line: The line of text that led the analyzer to conclude that the + authentication had succeeded. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_input_line login_output_line login_prompt login_terminal + direct_login_prompts get_login_state login_failure_msgs login_non_failure_msgs + login_prompts login_success_msgs login_timeouts set_login_state + + .. note:: The login analyzer depends on a set of script-level variables that + need to be configured with patterns identifying login attempts. This + configuration has not yet been ported over from Bro 1.5 to Bro 2.x, and + the analyzer is therefore not directly usable at the moment. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: login_terminal + + :Type: :bro:type:`event` (c: :bro:type:`connection`, terminal: :bro:type:`string`) + + Generated for clients transmitting a terminal type in a Telnet session. This + information is extracted out of environment variables sent as Telnet options. + + + :c: The connection. + + + :terminal: The TERM value transmitted. + + .. bro:see:: login_confused login_confused_text login_display login_failure + login_input_line login_output_line login_prompt login_success + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: rsh_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, client_user: :bro:type:`string`, server_user: :bro:type:`string`, line: :bro:type:`string`) + + Generated for client side commands on an RSH connection. + + See :rfc:`1258` for more information about the Rlogin/Rsh protocol. + + + :c: The connection. + + + :client_user: The client-side user name as sent in the initial protocol + handshake. + + + :server_user: The server-side user name as sent in the initial protocol + handshake. + + + :line: The command line sent in the request. + + .. bro:see:: rsh_request login_confused login_confused_text login_display + login_failure login_input_line login_output_line login_prompt login_success + login_terminal + + .. note:: For historical reasons, these events are separate from the + ``login_`` events. Ideally, they would all be handled uniquely. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: rsh_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, client_user: :bro:type:`string`, server_user: :bro:type:`string`, line: :bro:type:`string`, new_session: :bro:type:`bool`) + + Generated for client side commands on an RSH connection. + + See :rfc:`1258` for more information about the Rlogin/Rsh protocol. + + + :c: The connection. + + + :client_user: The client-side user name as sent in the initial protocol + handshake. + + + :server_user: The server-side user name as sent in the initial protocol + handshake. + + + :line: The command line sent in the request. + + + :new_session: True if this is the first command of the Rsh session. + + .. bro:see:: rsh_reply login_confused login_confused_text login_display + login_failure login_input_line login_output_line login_prompt login_success + login_terminal + + .. note:: For historical reasons, these events are separate from the + ``login_`` events. Ideally, they would all be handled uniquely. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_Login.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Login.functions.bif.bro.rst new file mode 100644 index 0000000000..3b0e079056 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Login.functions.bif.bro.rst @@ -0,0 +1,69 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Login.functions.bif.bro +============================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +=============================================== =================================================================== +:bro:id:`get_login_state`: :bro:type:`function` Returns the state of the given login (Telnet or Rlogin) connection. +:bro:id:`set_login_state`: :bro:type:`function` Sets the login state of a connection with a login analyzer. +=============================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: get_login_state + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`) : :bro:type:`count` + + Returns the state of the given login (Telnet or Rlogin) connection. + + + :cid: The connection ID. + + + :returns: False if the connection is not active or is not tagged as a + login analyzer. Otherwise the function returns the state, which can + be one of: + + - ``LOGIN_STATE_AUTHENTICATE``: The connection is in its + initial authentication dialog. + - ``LOGIN_STATE_LOGGED_IN``: The analyzer believes the user has + successfully authenticated. + - ``LOGIN_STATE_SKIP``: The analyzer has skipped any further + processing of the connection. + - ``LOGIN_STATE_CONFUSED``: The analyzer has concluded that it + does not correctly know the state of the connection, and/or + the username associated with it. + + .. bro:see:: set_login_state + +.. bro:id:: set_login_state + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, new_state: :bro:type:`count`) : :bro:type:`bool` + + Sets the login state of a connection with a login analyzer. + + + :cid: The connection ID. + + + :new_state: The new state of the login analyzer. See + :bro:id:`get_login_state` for possible values. + + + :returns: Returns false if *cid* is not an active connection + or is not tagged as a login analyzer, and true otherwise. + + .. bro:see:: get_login_state + + diff --git a/doc/scripts/base/bif/plugins/Bro_MIME.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_MIME.events.bif.bro.rst new file mode 100644 index 0000000000..2199fd0103 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_MIME.events.bif.bro.rst @@ -0,0 +1,280 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_MIME.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================== ============================================================================= +:bro:id:`mime_all_data`: :bro:type:`event` Generated for passing on all data decoded from a single email MIME + message. +:bro:id:`mime_all_headers`: :bro:type:`event` Generated for MIME headers extracted from email MIME entities, passing all + headers at once. +:bro:id:`mime_begin_entity`: :bro:type:`event` Generated when starting to parse an email MIME entity. +:bro:id:`mime_content_hash`: :bro:type:`event` Generated for decoded MIME entities extracted from email messages, passing on + their MD5 checksums. +:bro:id:`mime_end_entity`: :bro:type:`event` Generated when finishing parsing an email MIME entity. +:bro:id:`mime_entity_data`: :bro:type:`event` Generated for data decoded from an email MIME entity. +:bro:id:`mime_event`: :bro:type:`event` Generated for errors found when decoding email MIME entities. +:bro:id:`mime_one_header`: :bro:type:`event` Generated for individual MIME headers extracted from email MIME + entities. +:bro:id:`mime_segment_data`: :bro:type:`event` Generated for chunks of decoded MIME data from email MIME entities. +============================================== ============================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: mime_all_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, length: :bro:type:`count`, data: :bro:type:`string`) + + Generated for passing on all data decoded from a single email MIME + message. If an email message has more than one MIME entity, this event + combines all their data into a single value for analysis. Note that because + of the potentially significant buffering necessary, using this event can be + expensive. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :length: The length of *data*. + + + :data: The raw data of all MIME entities concatenated. + + .. bro:see:: mime_all_headers mime_begin_entity mime_content_hash mime_end_entity + mime_entity_data mime_event mime_one_header mime_segment_data + + .. note:: While Bro also decodes MIME entities extracted from HTTP + sessions, there's no corresponding event for that currently. + +.. bro:id:: mime_all_headers + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hlist: :bro:type:`mime_header_list`) + + Generated for MIME headers extracted from email MIME entities, passing all + headers at once. MIME is a protocol-independent data format for encoding + text and files, along with corresponding metadata, for transmission. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :hlist: A *table* containing all headers extracted from the current entity. + The table is indexed by the position of the header (1 for the first, + 2 for the second, etc.). + + .. bro:see:: mime_all_data mime_begin_entity mime_content_hash mime_end_entity + mime_entity_data mime_event mime_one_header mime_segment_data + http_header http_all_headers + + .. note:: Bro also extracts MIME headers from HTTP sessions. For those, + however, it raises :bro:id:`http_header` instead. + +.. bro:id:: mime_begin_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when starting to parse an email MIME entity. MIME is a + protocol-independent data format for encoding text and files, along with + corresponding metadata, for transmission. Bro raises this event when it + begins parsing a MIME entity extracted from an email protocol. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + .. bro:see:: mime_all_data mime_all_headers mime_content_hash mime_end_entity + mime_entity_data mime_event mime_one_header mime_segment_data smtp_data + http_begin_entity + + .. note:: Bro also extracts MIME entities from HTTP sessions. For those, + however, it raises :bro:id:`http_begin_entity` instead. + +.. bro:id:: mime_content_hash + + :Type: :bro:type:`event` (c: :bro:type:`connection`, content_len: :bro:type:`count`, hash_value: :bro:type:`string`) + + Generated for decoded MIME entities extracted from email messages, passing on + their MD5 checksums. Bro computes the MD5 over the complete decoded data of + each MIME entity. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :content_len: The length of the entity being hashed. + + + :hash_value: The MD5 hash. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_end_entity + mime_entity_data mime_event mime_one_header mime_segment_data + + .. note:: While Bro also decodes MIME entities extracted from HTTP + sessions, there's no corresponding event for that currently. + +.. bro:id:: mime_end_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when finishing parsing an email MIME entity. MIME is a + protocol-independent data format for encoding text and files, along with + corresponding metadata, for transmission. Bro raises this event when it + finished parsing a MIME entity extracted from an email protocol. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_entity_data mime_event mime_one_header mime_segment_data smtp_data + http_end_entity + + .. note:: Bro also extracts MIME entities from HTTP sessions. For those, + however, it raises :bro:id:`http_end_entity` instead. + +.. bro:id:: mime_entity_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, length: :bro:type:`count`, data: :bro:type:`string`) + + Generated for data decoded from an email MIME entity. This event delivers + the complete content of a single MIME entity with the quoted-printable and + and base64 data decoded. In contrast, there is also :bro:id:`mime_segment_data`, + which passes on a sequence of data chunks as they come in. While + ``mime_entity_data`` is more convenient to handle, ``mime_segment_data`` is + more efficient as Bro does not need to buffer the data. Thus, if possible, + the latter should be preferred. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :length: The length of *data*. + + + :data: The raw data of the complete entity. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_event mime_one_header mime_segment_data + + .. note:: While Bro also decodes MIME entities extracted from HTTP + sessions, there's no corresponding event for that currently. + +.. bro:id:: mime_event + + :Type: :bro:type:`event` (c: :bro:type:`connection`, event_type: :bro:type:`string`, detail: :bro:type:`string`) + + Generated for errors found when decoding email MIME entities. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :event_type: A string describing the general category of the problem found + (e.g., ``illegal format``). + + + :detail: Further more detailed description of the error. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_one_header mime_segment_data http_event + + .. note:: Bro also extracts MIME headers from HTTP sessions. For those, + however, it raises :bro:id:`http_event` instead. + +.. bro:id:: mime_one_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, h: :bro:type:`mime_header_rec`) + + Generated for individual MIME headers extracted from email MIME + entities. MIME is a protocol-independent data format for encoding text and + files, along with corresponding metadata, for transmission. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :h: The parsed MIME header. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_segment_data + http_header http_all_headers + + .. note:: Bro also extracts MIME headers from HTTP sessions. For those, + however, it raises :bro:id:`http_header` instead. + +.. bro:id:: mime_segment_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, length: :bro:type:`count`, data: :bro:type:`string`) + + Generated for chunks of decoded MIME data from email MIME entities. MIME + is a protocol-independent data format for encoding text and files, along with + corresponding metadata, for transmission. As Bro parses the data of an + entity, it raises a sequence of these events, each coming as soon as a new + chunk of data is available. In contrast, there is also + :bro:id:`mime_entity_data`, which passes all of an entities data at once + in a single block. While the latter is more convenient to handle, + ``mime_segment_data`` is more efficient as Bro does not need to buffer + the data. Thus, if possible, this event should be preferred. + + Bro's MIME analyzer for emails currently supports SMTP and POP3. See + `Wikipedia `__ for more information + about MIME. + + + :c: The connection. + + + :length: The length of *data*. + + + :data: The raw data of one segment of the current entity. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_one_header http_entity_data + mime_segment_length mime_segment_overlap_length + + .. note:: Bro also extracts MIME data from HTTP sessions. For those, + however, it raises :bro:id:`http_entity_data` (sic!) instead. + + diff --git a/doc/scripts/base/bif/plugins/Bro_Modbus.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Modbus.events.bif.bro.rst new file mode 100644 index 0000000000..d527293992 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Modbus.events.bif.bro.rst @@ -0,0 +1,530 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Modbus.events.bif.bro +========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================================================== ====================================================================== +:bro:id:`modbus_exception`: :bro:type:`event` Generated for any Modbus exception message. +:bro:id:`modbus_mask_write_register_request`: :bro:type:`event` Generated for a Modbus mask write register request. +:bro:id:`modbus_mask_write_register_response`: :bro:type:`event` Generated for a Modbus mask write register request. +:bro:id:`modbus_message`: :bro:type:`event` Generated for any Modbus message regardless if the particular function + is further supported or not. +:bro:id:`modbus_read_coils_request`: :bro:type:`event` Generated for a Modbus read coils request. +:bro:id:`modbus_read_coils_response`: :bro:type:`event` Generated for a Modbus read coils response. +:bro:id:`modbus_read_discrete_inputs_request`: :bro:type:`event` Generated for a Modbus read discrete inputs request. +:bro:id:`modbus_read_discrete_inputs_response`: :bro:type:`event` Generated for a Modbus read discrete inputs response. +:bro:id:`modbus_read_fifo_queue_request`: :bro:type:`event` Generated for a Modbus read FIFO queue request. +:bro:id:`modbus_read_fifo_queue_response`: :bro:type:`event` Generated for a Modbus read FIFO queue response. +:bro:id:`modbus_read_file_record_request`: :bro:type:`event` Generated for a Modbus read file record request. +:bro:id:`modbus_read_file_record_response`: :bro:type:`event` Generated for a Modbus read file record response. +:bro:id:`modbus_read_holding_registers_request`: :bro:type:`event` Generated for a Modbus read holding registers request. +:bro:id:`modbus_read_holding_registers_response`: :bro:type:`event` Generated for a Modbus read holding registers response. +:bro:id:`modbus_read_input_registers_request`: :bro:type:`event` Generated for a Modbus read input registers request. +:bro:id:`modbus_read_input_registers_response`: :bro:type:`event` Generated for a Modbus read input registers response. +:bro:id:`modbus_read_write_multiple_registers_request`: :bro:type:`event` Generated for a Modbus read/write multiple registers request. +:bro:id:`modbus_read_write_multiple_registers_response`: :bro:type:`event` Generated for a Modbus read/write multiple registers response. +:bro:id:`modbus_write_file_record_request`: :bro:type:`event` Generated for a Modbus write file record request. +:bro:id:`modbus_write_file_record_response`: :bro:type:`event` Generated for a Modbus write file record response. +:bro:id:`modbus_write_multiple_coils_request`: :bro:type:`event` Generated for a Modbus write multiple coils request. +:bro:id:`modbus_write_multiple_coils_response`: :bro:type:`event` Generated for a Modbus write multiple coils response. +:bro:id:`modbus_write_multiple_registers_request`: :bro:type:`event` Generated for a Modbus write multiple registers request. +:bro:id:`modbus_write_multiple_registers_response`: :bro:type:`event` Generated for a Modbus write multiple registers response. +:bro:id:`modbus_write_single_coil_request`: :bro:type:`event` Generated for a Modbus write single coil request. +:bro:id:`modbus_write_single_coil_response`: :bro:type:`event` Generated for a Modbus write single coil response. +:bro:id:`modbus_write_single_register_request`: :bro:type:`event` Generated for a Modbus write single register request. +:bro:id:`modbus_write_single_register_response`: :bro:type:`event` Generated for a Modbus write single register response. +========================================================================== ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: modbus_exception + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, code: :bro:type:`count`) + + Generated for any Modbus exception message. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :code: The exception code. + +.. bro:id:: modbus_mask_write_register_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, and_mask: :bro:type:`count`, or_mask: :bro:type:`count`) + + Generated for a Modbus mask write register request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the register where the masks should be applied. + + + :and_mask: The value of the logical AND mask to apply to the register. + + + :or_mask: The value of the logical OR mask to apply to the register. + +.. bro:id:: modbus_mask_write_register_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, and_mask: :bro:type:`count`, or_mask: :bro:type:`count`) + + Generated for a Modbus mask write register request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the register where the masks were applied. + + + :and_mask: The value of the logical AND mask applied register. + + + :or_mask: The value of the logical OR mask applied to the register. + +.. bro:id:: modbus_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, is_orig: :bro:type:`bool`) + + Generated for any Modbus message regardless if the particular function + is further supported or not. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :is_orig: True if the event is raised for the originator side. + +.. bro:id:: modbus_read_coils_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus read coils request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first coil to be read. + + + :quantity: The number of coils to be read. + +.. bro:id:: modbus_read_coils_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, coils: :bro:type:`ModbusCoils`) + + Generated for a Modbus read coils response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :coils: The coil values returned from the device. + +.. bro:id:: modbus_read_discrete_inputs_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus read discrete inputs request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first coil to be read. + + + :quantity: The number of coils to be read. + +.. bro:id:: modbus_read_discrete_inputs_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, coils: :bro:type:`ModbusCoils`) + + Generated for a Modbus read discrete inputs response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :coils: The coil values returned from the device. + +.. bro:id:: modbus_read_fifo_queue_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`) + + Generated for a Modbus read FIFO queue request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The address of the FIFO queue to read. + +.. bro:id:: modbus_read_fifo_queue_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, fifos: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read FIFO queue response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :fifos: The register values read from the FIFO queue on the device. + +.. bro:id:: modbus_read_file_record_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`) + + Generated for a Modbus read file record request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + .. note: This event is incomplete. The information from the data structure + is not yet passed through to the event. + +.. bro:id:: modbus_read_file_record_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`) + + Generated for a Modbus read file record response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + .. note: This event is incomplete. The information from the data structure + is not yet passed through to the event. + +.. bro:id:: modbus_read_holding_registers_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus read holding registers request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first register to be read. + + + :quantity: The number of registers to be read. + +.. bro:id:: modbus_read_holding_registers_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read holding registers response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :registers: The register values returned from the device. + +.. bro:id:: modbus_read_input_registers_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus read input registers request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first register to be read. + + + :quantity: The number of registers to be read. + +.. bro:id:: modbus_read_input_registers_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read input registers response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :registers: The register values returned from the device. + +.. bro:id:: modbus_read_write_multiple_registers_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, read_start_address: :bro:type:`count`, read_quantity: :bro:type:`count`, write_start_address: :bro:type:`count`, write_registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read/write multiple registers request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :read_start_address: The memory address of the first register to be read. + + + :read_quantity: The number of registers to read. + + + :write_start_address: The memory address of the first register to be written. + + + :write_registers: The values to be written to the registers. + +.. bro:id:: modbus_read_write_multiple_registers_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, written_registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus read/write multiple registers response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :written_registers: The register values read from the registers specified in + the request. + +.. bro:id:: modbus_write_file_record_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`) + + Generated for a Modbus write file record request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + .. note: This event is incomplete. The information from the data structure + is not yet passed through to the event. + +.. bro:id:: modbus_write_file_record_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`) + + Generated for a Modbus write file record response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + .. note: This event is incomplete. The information from the data structure + is not yet passed through to the event. + +.. bro:id:: modbus_write_multiple_coils_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, coils: :bro:type:`ModbusCoils`) + + Generated for a Modbus write multiple coils request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first coil to be written. + + + :coils: The values to be written to the coils. + +.. bro:id:: modbus_write_multiple_coils_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus write multiple coils response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first coil that was written. + + + :quantity: The quantity of coils that were written. + +.. bro:id:: modbus_write_multiple_registers_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, registers: :bro:type:`ModbusRegisters`) + + Generated for a Modbus write multiple registers request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first register to be written. + + + :registers: The values to be written to the registers. + +.. bro:id:: modbus_write_multiple_registers_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, start_address: :bro:type:`count`, quantity: :bro:type:`count`) + + Generated for a Modbus write multiple registers response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :start_address: The memory address of the first register that was written. + + + :quantity: The quantity of registers that were written. + +.. bro:id:: modbus_write_single_coil_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, value: :bro:type:`bool`) + + Generated for a Modbus write single coil request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the coil to be written. + + + :value: The value to be written to the coil. + +.. bro:id:: modbus_write_single_coil_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, value: :bro:type:`bool`) + + Generated for a Modbus write single coil response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the coil that was written. + + + :value: The value that was written to the coil. + +.. bro:id:: modbus_write_single_register_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, value: :bro:type:`count`) + + Generated for a Modbus write single register request. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the register to be written. + + + :value: The value to be written to the register. + +.. bro:id:: modbus_write_single_register_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, headers: :bro:type:`ModbusHeaders`, address: :bro:type:`count`, value: :bro:type:`count`) + + Generated for a Modbus write single register response. + + + :c: The connection. + + + :headers: The headers for the modbus function. + + + :address: The memory address of the register that was written. + + + :value: The value that was written to the register. + + diff --git a/doc/scripts/base/bif/plugins/Bro_MySQL.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_MySQL.events.bif.bro.rst new file mode 100644 index 0000000000..c84b2d6123 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_MySQL.events.bif.bro.rst @@ -0,0 +1,138 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_MySQL.events.bif.bro +========================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================== ====================================================================================================== +:bro:id:`mysql_command_request`: :bro:type:`event` Generated for a command request from a MySQL client. +:bro:id:`mysql_error`: :bro:type:`event` Generated for an unsuccessful MySQL response. +:bro:id:`mysql_handshake`: :bro:type:`event` Generated for a client handshake response packet, which includes the username the client is attempting + to connect as. +:bro:id:`mysql_ok`: :bro:type:`event` Generated for a successful MySQL response. +:bro:id:`mysql_result_row`: :bro:type:`event` Generated for each MySQL ResultsetRow response packet. +:bro:id:`mysql_server_version`: :bro:type:`event` Generated for the initial server handshake packet, which includes the MySQL server version. +================================================== ====================================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: mysql_command_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, command: :bro:type:`count`, arg: :bro:type:`string`) + + Generated for a command request from a MySQL client. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :command: The numerical code of the command issued. + + + :arg: The argument for the command (empty string if not provided). + + .. bro:see:: mysql_error mysql_ok mysql_server_version mysql_handshake + +.. bro:id:: mysql_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, code: :bro:type:`count`, msg: :bro:type:`string`) + + Generated for an unsuccessful MySQL response. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :code: The error code. + + + :msg: Any extra details about the error (empty string if not provided). + + .. bro:see:: mysql_command_request mysql_ok mysql_server_version mysql_handshake + +.. bro:id:: mysql_handshake + + :Type: :bro:type:`event` (c: :bro:type:`connection`, username: :bro:type:`string`) + + Generated for a client handshake response packet, which includes the username the client is attempting + to connect as. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :username: The username supplied by the client + + .. bro:see:: mysql_command_request mysql_error mysql_ok mysql_server_version + +.. bro:id:: mysql_ok + + :Type: :bro:type:`event` (c: :bro:type:`connection`, affected_rows: :bro:type:`count`) + + Generated for a successful MySQL response. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :affected_rows: The number of rows that were affected. + + .. bro:see:: mysql_command_request mysql_error mysql_server_version mysql_handshake + +.. bro:id:: mysql_result_row + + :Type: :bro:type:`event` (c: :bro:type:`connection`, row: :bro:type:`string_vec`) + + Generated for each MySQL ResultsetRow response packet. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :row: The result row data. + + .. bro:see:: mysql_command_request mysql_error mysql_server_version mysql_handshake mysql_ok + +.. bro:id:: mysql_server_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, ver: :bro:type:`string`) + + Generated for the initial server handshake packet, which includes the MySQL server version. + + See the MySQL `documentation `__ + for more information about the MySQL protocol. + + + :c: The connection. + + + :ver: The server version string. + + .. bro:see:: mysql_command_request mysql_error mysql_ok mysql_handshake + + diff --git a/doc/scripts/base/bif/plugins/Bro_NCP.consts.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_NCP.consts.bif.bro.rst new file mode 100644 index 0000000000..126dc69cb6 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_NCP.consts.bif.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_NCP.consts.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_NCP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_NCP.events.bif.bro.rst new file mode 100644 index 0000000000..755f4217e9 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_NCP.events.bif.bro.rst @@ -0,0 +1,86 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_NCP.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================== =================================================== +:bro:id:`ncp_reply`: :bro:type:`event` Generated for NCP replies (Netware Core Protocol). +:bro:id:`ncp_request`: :bro:type:`event` Generated for NCP requests (Netware Core Protocol). +======================================== =================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: ncp_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, frame_type: :bro:type:`count`, length: :bro:type:`count`, req_frame: :bro:type:`count`, req_func: :bro:type:`count`, completion_code: :bro:type:`count`) + + Generated for NCP replies (Netware Core Protocol). + + See `Wikipedia `__ for + more information about the NCP protocol. + + + :c: The connection. + + + :frame_type: The frame type, as specified by the protocol. + + + :length: The length of the request body, excluding the frame header. + + + :req_frame: The frame type from the corresponding request. + + + :req_func: The function code from the corresponding request. + + + :completion_code: The reply's completion code, as specified by the protocol. + + .. bro:see:: ncp_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: ncp_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, frame_type: :bro:type:`count`, length: :bro:type:`count`, func: :bro:type:`count`) + + Generated for NCP requests (Netware Core Protocol). + + See `Wikipedia `__ for + more information about the NCP protocol. + + + :c: The connection. + + + :frame_type: The frame type, as specified by the protocol. + + + :length: The length of the request body, excluding the frame header. + + + :func: The requested function, as specified by the protocol. + + .. bro:see:: ncp_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_NTLM.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_NTLM.events.bif.bro.rst new file mode 100644 index 0000000000..90e853e409 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_NTLM.events.bif.bro.rst @@ -0,0 +1,67 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_NTLM.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================== ============================================================================ +:bro:id:`ntlm_authenticate`: :bro:type:`event` Generated for :abbr:`NTLM (NT LAN Manager)` messages of type *authenticate*. +:bro:id:`ntlm_challenge`: :bro:type:`event` Generated for :abbr:`NTLM (NT LAN Manager)` messages of type *challenge*. +:bro:id:`ntlm_negotiate`: :bro:type:`event` Generated for :abbr:`NTLM (NT LAN Manager)` messages of type *negotiate*. +============================================== ============================================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: ntlm_authenticate + + :Type: :bro:type:`event` (c: :bro:type:`connection`, request: :bro:type:`NTLM::Authenticate`) + + Generated for :abbr:`NTLM (NT LAN Manager)` messages of type *authenticate*. + + + :c: The connection. + + + :request: The parsed data of the :abbr:`NTLM (NT LAN Manager)` message. See init-bare for more details. + + .. bro:see:: ntlm_negotiate ntlm_challenge + +.. bro:id:: ntlm_challenge + + :Type: :bro:type:`event` (c: :bro:type:`connection`, challenge: :bro:type:`NTLM::Challenge`) + + Generated for :abbr:`NTLM (NT LAN Manager)` messages of type *challenge*. + + + :c: The connection. + + + :negotiate: The parsed data of the :abbr:`NTLM (NT LAN Manager)` message. See init-bare for more details. + + .. bro:see:: ntlm_negotiate ntlm_authenticate + +.. bro:id:: ntlm_negotiate + + :Type: :bro:type:`event` (c: :bro:type:`connection`, negotiate: :bro:type:`NTLM::Negotiate`) + + Generated for :abbr:`NTLM (NT LAN Manager)` messages of type *negotiate*. + + + :c: The connection. + + + :negotiate: The parsed data of the :abbr:`NTLM (NT LAN Manager)` message. See init-bare for more details. + + .. bro:see:: ntlm_challenge ntlm_authenticate + + diff --git a/doc/scripts/base/bif/plugins/Bro_NTLM.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_NTLM.types.bif.bro.rst new file mode 100644 index 0000000000..81c6c5fb0b --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_NTLM.types.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_NTLM.types.bif.bro +======================================= +.. bro:namespace:: GLOBAL +.. bro:namespace:: NTLM + + +:Namespaces: GLOBAL, NTLM + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_NTP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_NTP.events.bif.bro.rst new file mode 100644 index 0000000000..09cdecca49 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_NTP.events.bif.bro.rst @@ -0,0 +1,50 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_NTP.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================== =============================== +:bro:id:`ntp_message`: :bro:type:`event` Generated for all NTP messages. +======================================== =============================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: ntp_message + + :Type: :bro:type:`event` (u: :bro:type:`connection`, msg: :bro:type:`ntp_msg`, excess: :bro:type:`string`) + + Generated for all NTP messages. Different from many other of Bro's events, + this one is generated for both client-side and server-side messages. + + See `Wikipedia `__ for + more information about the NTP protocol. + + + :u: The connection record describing the corresponding UDP flow. + + + :msg: The parsed NTP message. + + + :excess: The raw bytes of any optional parts of the NTP packet. Bro does not + further parse any optional fields. + + .. bro:see:: ntp_session_timeout + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_NetBIOS.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_NetBIOS.events.bif.bro.rst new file mode 100644 index 0000000000..d6a28102f9 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_NetBIOS.events.bif.bro.rst @@ -0,0 +1,277 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_NetBIOS.events.bif.bro +=========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================================= ===================================================================== +:bro:id:`netbios_session_accepted`: :bro:type:`event` Generated for NetBIOS messages of type *positive session response*. +:bro:id:`netbios_session_keepalive`: :bro:type:`event` Generated for NetBIOS messages of type *keep-alive*. +:bro:id:`netbios_session_message`: :bro:type:`event` Generated for all NetBIOS SSN and DGM messages. +:bro:id:`netbios_session_raw_message`: :bro:type:`event` Generated for NetBIOS messages of type *session message* that are not + carrying an SMB payload. +:bro:id:`netbios_session_rejected`: :bro:type:`event` Generated for NetBIOS messages of type *negative session response*. +:bro:id:`netbios_session_request`: :bro:type:`event` Generated for NetBIOS messages of type *session request*. +:bro:id:`netbios_session_ret_arg_resp`: :bro:type:`event` Generated for NetBIOS messages of type *retarget response*. +========================================================= ===================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: netbios_session_accepted + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *positive session response*. Bro's + NetBIOS analyzer processes the NetBIOS session service running on TCP port + 139, and (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_keepalive netbios_session_message + netbios_session_raw_message netbios_session_rejected netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_keepalive + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *keep-alive*. Bro's NetBIOS analyzer + processes the NetBIOS session service running on TCP port 139, and (despite + its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_accepted netbios_session_message + netbios_session_raw_message netbios_session_rejected netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg_type: :bro:type:`count`, data_len: :bro:type:`count`) + + Generated for all NetBIOS SSN and DGM messages. Bro's NetBIOS analyzer + processes the NetBIOS session service running on TCP port 139, and (despite + its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :is_orig: True if the message was sent by the originator of the connection. + + + :msg_type: The general type of message, as defined in Section 4.3.1 of + :rfc:`1002`. + + + :data_len: The length of the message's payload. + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_raw_message netbios_session_rejected netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_raw_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *session message* that are not + carrying an SMB payload. + + NetBIOS analyzer processes the NetBIOS session service running on TCP port + 139, and (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :is_orig: True if the message was sent by the originator of the connection. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header (i.e., the ``user_data``). + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_message netbios_session_rejected netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: This is an oddly named event. In fact, it's probably an odd event + to have to begin with. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_rejected + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *negative session response*. Bro's + NetBIOS analyzer processes the NetBIOS session service running on TCP port + 139, and (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_message netbios_session_raw_message netbios_session_request + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *session request*. Bro's NetBIOS + analyzer processes the NetBIOS session service running on TCP port 139, and + (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_message netbios_session_raw_message netbios_session_rejected + netbios_session_ret_arg_resp decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: netbios_session_ret_arg_resp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`string`) + + Generated for NetBIOS messages of type *retarget response*. Bro's NetBIOS + analyzer processes the NetBIOS session service running on TCP port 139, and + (despite its name!) the NetBIOS datagram service on UDP port 138. + + See `Wikipedia `__ for more information + about NetBIOS. :rfc:`1002` describes + the packet format for NetBIOS over TCP/IP, which Bro parses. + + + :c: The connection, which may be TCP or UDP, depending on the type of the + NetBIOS session. + + + :msg: The raw payload of the message sent, excluding the common NetBIOS + header. + + .. bro:see:: netbios_session_accepted netbios_session_keepalive + netbios_session_message netbios_session_raw_message netbios_session_rejected + netbios_session_request decode_netbios_name decode_netbios_name_type + + .. note:: These days, NetBIOS is primarily used as a transport mechanism for + `SMB/CIFS `__. Bro's + SMB analyzer parses both SMB-over-NetBIOS and SMB-over-TCP on port 445. + + .. todo:: This is an oddly named event. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_NetBIOS.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_NetBIOS.functions.bif.bro.rst new file mode 100644 index 0000000000..ecf1ef710a --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_NetBIOS.functions.bif.bro.rst @@ -0,0 +1,53 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_NetBIOS.functions.bif.bro +============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +======================================================== ================================================================ +:bro:id:`decode_netbios_name`: :bro:type:`function` Decode a NetBIOS name. +:bro:id:`decode_netbios_name_type`: :bro:type:`function` Converts a NetBIOS name type to its corresponding numeric value. +======================================================== ================================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: decode_netbios_name + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`string` + + Decode a NetBIOS name. See http://support.microsoft.com/kb/194203. + + + :name: The encoded NetBIOS name, e.g., ``"FEEIEFCAEOEFFEECEJEPFDCAEOEBENEF"``. + + + :returns: The decoded NetBIOS name, e.g., ``"THE NETBIOS NAME"``. + + .. bro:see:: decode_netbios_name_type + +.. bro:id:: decode_netbios_name_type + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`count` + + Converts a NetBIOS name type to its corresponding numeric value. + See http://support.microsoft.com/kb/163409. + + + :name: The NetBIOS name type. + + + :returns: The numeric value of *name*. + + .. bro:see:: decode_netbios_name + + diff --git a/doc/scripts/base/bif/plugins/Bro_NoneWriter.none.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_NoneWriter.none.bif.bro.rst new file mode 100644 index 0000000000..0500f1e098 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_NoneWriter.none.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_NoneWriter.none.bif.bro +============================================ +.. bro:namespace:: GLOBAL +.. bro:namespace:: LogNone + + +:Namespaces: GLOBAL, LogNone + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_PE.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_PE.events.bif.bro.rst new file mode 100644 index 0000000000..42936ccf20 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_PE.events.bif.bro.rst @@ -0,0 +1,110 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_PE.events.bif.bro +====================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=============================================== =================================================================== +:bro:id:`pe_dos_code`: :bro:type:`event` A :abbr:`PE (Portable Executable)` file DOS stub was parsed. +:bro:id:`pe_dos_header`: :bro:type:`event` A :abbr:`PE (Portable Executable)` file DOS header was parsed. +:bro:id:`pe_file_header`: :bro:type:`event` A :abbr:`PE (Portable Executable)` file file header was parsed. +:bro:id:`pe_optional_header`: :bro:type:`event` A :abbr:`PE (Portable Executable)` file optional header was parsed. +:bro:id:`pe_section_header`: :bro:type:`event` A :abbr:`PE (Portable Executable)` file section header was parsed. +=============================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: pe_dos_code + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, code: :bro:type:`string`) + + A :abbr:`PE (Portable Executable)` file DOS stub was parsed. + The stub is a valid application that runs under MS-DOS, by default + to inform the user that the program can't be run in DOS mode. + + + :f: The file. + + + :code: The DOS stub + + .. bro:see:: pe_dos_header pe_file_header pe_optional_header pe_section_header + +.. bro:id:: pe_dos_header + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, h: :bro:type:`PE::DOSHeader`) + + A :abbr:`PE (Portable Executable)` file DOS header was parsed. + This is the top-level header and contains information like the + size of the file, initial value of registers, etc. + + + :f: The file. + + + :h: The parsed DOS header information. + + .. bro:see:: pe_dos_code pe_file_header pe_optional_header pe_section_header + +.. bro:id:: pe_file_header + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, h: :bro:type:`PE::FileHeader`) + + A :abbr:`PE (Portable Executable)` file file header was parsed. + This header contains information like the target machine, + the timestamp when the file was created, the number of sections, and + pointers to other parts of the file. + + + :f: The file. + + + :h: The parsed file header information. + + .. bro:see:: pe_dos_header pe_dos_code pe_optional_header pe_section_header + +.. bro:id:: pe_optional_header + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, h: :bro:type:`PE::OptionalHeader`) + + A :abbr:`PE (Portable Executable)` file optional header was parsed. + This header is required for executable files, but not for object files. + It contains information like OS requirements to execute the file, the + original entry point address, and information needed to load the file + into memory. + + + :f: The file. + + + :h: The parsed optional header information. + + .. bro:see:: pe_dos_header pe_dos_code pe_file_header pe_section_header + +.. bro:id:: pe_section_header + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, h: :bro:type:`PE::SectionHeader`) + + A :abbr:`PE (Portable Executable)` file section header was parsed. + This header contains information like the section name, size, address, + and characteristics. + + + :f: The file. + + + :h: The parsed section header information. + + .. bro:see:: pe_dos_header pe_dos_code pe_file_header pe_optional_header + + diff --git a/doc/scripts/base/bif/plugins/Bro_POP3.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_POP3.events.bif.bro.rst new file mode 100644 index 0000000000..d78aa6c53a --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_POP3.events.bif.bro.rst @@ -0,0 +1,234 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_POP3.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=============================================== =================================================================== +:bro:id:`pop3_data`: :bro:type:`event` Generated for server-side multi-line responses on POP3 connections. +:bro:id:`pop3_login_failure`: :bro:type:`event` Generated for unsuccessful authentications on POP3 connections. +:bro:id:`pop3_login_success`: :bro:type:`event` Generated for successful authentications on POP3 connections. +:bro:id:`pop3_reply`: :bro:type:`event` Generated for server-side replies to commands on POP3 connections. +:bro:id:`pop3_request`: :bro:type:`event` Generated for client-side commands on POP3 connections. +:bro:id:`pop3_starttls`: :bro:type:`event` Generated when a POP3 connection goes encrypted. +:bro:id:`pop3_unexpected`: :bro:type:`event` Generated for errors encountered on POP3 sessions. +=============================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: pop3_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, data: :bro:type:`string`) + + Generated for server-side multi-line responses on POP3 connections. POP3 + connections use multi-line responses to send bulk data, such as the actual + mails. This event is generated once for each line that's part of such a + response. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: True if the data was sent by the originator of the TCP connection. + + + :data: The data sent. + + .. bro:see:: pop3_login_failure pop3_login_success pop3_reply pop3_request + pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_login_failure + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, user: :bro:type:`string`, password: :bro:type:`string`) + + Generated for unsuccessful authentications on POP3 connections. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: Always false. + + + :user: The user name attempted for authentication. The event is only + generated if a non-empty user name was used. + + + :password: The password attempted for authentication. + + .. bro:see:: pop3_data pop3_login_success pop3_reply pop3_request + pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_login_success + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, user: :bro:type:`string`, password: :bro:type:`string`) + + Generated for successful authentications on POP3 connections. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: Always false. + + + :user: The user name used for authentication. The event is only generated if + a non-empty user name was used. + + + :password: The password used for authentication. + + .. bro:see:: pop3_data pop3_login_failure pop3_reply pop3_request + pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, cmd: :bro:type:`string`, msg: :bro:type:`string`) + + Generated for server-side replies to commands on POP3 connections. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :cmd: The success indicator sent by the server. This corresponds to the + first token on the line sent, and should be either ``OK`` or ``ERR``. + + + :msg: The textual description the server sent along with *cmd*. + + .. bro:see:: pop3_data pop3_login_failure pop3_login_success pop3_request + pop3_unexpected + + .. todo:: This event is receiving odd parameters, should unify. + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, command: :bro:type:`string`, arg: :bro:type:`string`) + + Generated for client-side commands on POP3 connections. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: True if the command was sent by the originator of the TCP + connection. + + + :command: The command sent. + + + :arg: The argument to the command. + + .. bro:see:: pop3_data pop3_login_failure pop3_login_success pop3_reply + pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a POP3 connection goes encrypted. While POP3 is by default a + clear-text protocol, extensions exist to switch to encryption. This event is + generated if that happens and the analyzer then stops processing the + connection. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + .. bro:see:: pop3_data pop3_login_failure pop3_login_success pop3_reply + pop3_request pop3_unexpected + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pop3_unexpected + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`, detail: :bro:type:`string`) + + Generated for errors encountered on POP3 sessions. If the POP3 analyzer + finds state transitions that do not conform to the protocol specification, + or other situations it can't handle, it raises this event. + + See `Wikipedia `__ for more information + about the POP3 protocol. + + + :c: The connection. + + + :is_orig: True if the data was sent by the originator of the TCP connection. + + + :msg: A textual description of the situation. + + + :detail: The input that triggered the event. + + .. bro:see:: pop3_data pop3_login_failure pop3_login_success pop3_reply pop3_request + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_RADIUS.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_RADIUS.events.bif.bro.rst new file mode 100644 index 0000000000..5f5a274722 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_RADIUS.events.bif.bro.rst @@ -0,0 +1,59 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_RADIUS.events.bif.bro +========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================= ==================================== +:bro:id:`radius_attribute`: :bro:type:`event` Generated for each RADIUS attribute. +:bro:id:`radius_message`: :bro:type:`event` Generated for RADIUS messages. +============================================= ==================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: radius_attribute + + :Type: :bro:type:`event` (c: :bro:type:`connection`, attr_type: :bro:type:`count`, value: :bro:type:`string`) + + Generated for each RADIUS attribute. + + See `Wikipedia `__ for more + information about RADIUS. + + + :c: The connection. + + + :attr_type: The value of the code field (1 == User-Name, 2 == User-Password, etc.). + + + :value: The data/value bound to the attribute. + + +.. bro:id:: radius_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, result: :bro:type:`RADIUS::Message`) + + Generated for RADIUS messages. + + See `Wikipedia `__ for more + information about RADIUS. + + + :c: The connection. + + + :result: A record containing fields parsed from a RADIUS packet. + + + diff --git a/doc/scripts/base/bif/plugins/Bro_RDP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_RDP.events.bif.bro.rst new file mode 100644 index 0000000000..51d968ca9e --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_RDP.events.bif.bro.rst @@ -0,0 +1,134 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_RDP.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=========================================================== ================================================ +:bro:id:`rdp_begin_encryption`: :bro:type:`event` Generated when an RDP session becomes encrypted. +:bro:id:`rdp_client_core_data`: :bro:type:`event` Generated for MCS client requests. +:bro:id:`rdp_connect_request`: :bro:type:`event` Generated for X.224 client requests. +:bro:id:`rdp_gcc_server_create_response`: :bro:type:`event` Generated for MCS server responses. +:bro:id:`rdp_negotiation_failure`: :bro:type:`event` Generated for RDP Negotiation Failure messages. +:bro:id:`rdp_negotiation_response`: :bro:type:`event` Generated for RDP Negotiation Response messages. +:bro:id:`rdp_server_certificate`: :bro:type:`event` Generated for a server certificate section. +:bro:id:`rdp_server_security`: :bro:type:`event` Generated for MCS server responses. +=========================================================== ================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: rdp_begin_encryption + + :Type: :bro:type:`event` (c: :bro:type:`connection`, security_protocol: :bro:type:`count`) + + Generated when an RDP session becomes encrypted. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :security_protocol: The security protocol being used for the session. + +.. bro:id:: rdp_client_core_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, data: :bro:type:`RDP::ClientCoreData`) + + Generated for MCS client requests. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :data: The data contained in the client core data structure. + +.. bro:id:: rdp_connect_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, cookie: :bro:type:`string`) + + Generated for X.224 client requests. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :cookie: The cookie included in the request. + +.. bro:id:: rdp_gcc_server_create_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, result: :bro:type:`count`) + + Generated for MCS server responses. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :result: The 8-bit integer representing the GCC Conference Create Response result. + +.. bro:id:: rdp_negotiation_failure + + :Type: :bro:type:`event` (c: :bro:type:`connection`, failure_code: :bro:type:`count`) + + Generated for RDP Negotiation Failure messages. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :failure_code: The failure code sent by the server. + +.. bro:id:: rdp_negotiation_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, security_protocol: :bro:type:`count`) + + Generated for RDP Negotiation Response messages. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :security_protocol: The security protocol selected by the server. + +.. bro:id:: rdp_server_certificate + + :Type: :bro:type:`event` (c: :bro:type:`connection`, cert_type: :bro:type:`count`, permanently_issued: :bro:type:`bool`) + + Generated for a server certificate section. If multiple X.509 + certificates are included in chain, this event will still + only be generated a single time. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :cert_type: Indicates the type of certificate. + + + :permanently_issued: Value will be true is the certificate(s) is permanent on the server. + +.. bro:id:: rdp_server_security + + :Type: :bro:type:`event` (c: :bro:type:`connection`, encryption_method: :bro:type:`count`, encryption_level: :bro:type:`count`) + + Generated for MCS server responses. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :encryption_method: The 32-bit integer representing the encryption method used in the connection. + + + :encryption_level: The 32-bit integer representing the encryption level used in the connection. + + diff --git a/doc/scripts/base/bif/plugins/Bro_RDP.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_RDP.types.bif.bro.rst new file mode 100644 index 0000000000..0c54c2168a --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_RDP.types.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_RDP.types.bif.bro +====================================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: RDP + + +:Namespaces: GLOBAL, RDP + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_RFB.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_RFB.events.bif.bro.rst new file mode 100644 index 0000000000..8d325232ce --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_RFB.events.bif.bro.rst @@ -0,0 +1,116 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_RFB.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +==================================================== ========================================================== +:bro:id:`rfb_auth_result`: :bro:type:`event` Generated for RFB event authentication result message +:bro:id:`rfb_authentication_type`: :bro:type:`event` Generated for RFB event authentication mechanism selection +:bro:id:`rfb_client_version`: :bro:type:`event` Generated for RFB event client banner message +:bro:id:`rfb_event`: :bro:type:`event` Generated for RFB event +:bro:id:`rfb_server_parameters`: :bro:type:`event` Generated for RFB event server parameter message +:bro:id:`rfb_server_version`: :bro:type:`event` Generated for RFB event server banner message +:bro:id:`rfb_share_flag`: :bro:type:`event` Generated for RFB event share flag messages +==================================================== ========================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: rfb_auth_result + + :Type: :bro:type:`event` (c: :bro:type:`connection`, result: :bro:type:`bool`) + + Generated for RFB event authentication result message + + + :c: The connection record for the underlying transport-layer session/flow. + + + :result: whether or not authentication was succesful + +.. bro:id:: rfb_authentication_type + + :Type: :bro:type:`event` (c: :bro:type:`connection`, authtype: :bro:type:`count`) + + Generated for RFB event authentication mechanism selection + + + :c: The connection record for the underlying transport-layer session/flow. + + + :authtype: the value of the chosen authentication mechanism + +.. bro:id:: rfb_client_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, major_version: :bro:type:`string`, minor_version: :bro:type:`string`) + + Generated for RFB event client banner message + + + :c: The connection record for the underlying transport-layer session/flow. + + + :version: of the client's rfb library + +.. bro:id:: rfb_event + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for RFB event + + + :c: The connection record for the underlying transport-layer session/flow. + +.. bro:id:: rfb_server_parameters + + :Type: :bro:type:`event` (c: :bro:type:`connection`, name: :bro:type:`string`, width: :bro:type:`count`, height: :bro:type:`count`) + + Generated for RFB event server parameter message + + + :c: The connection record for the underlying transport-layer session/flow. + + + :name: name of the shared screen + + + :width: width of the shared screen + + + :height: height of the shared screen + +.. bro:id:: rfb_server_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, major_version: :bro:type:`string`, minor_version: :bro:type:`string`) + + Generated for RFB event server banner message + + + :c: The connection record for the underlying transport-layer session/flow. + + + :version: of the server's rfb library + +.. bro:id:: rfb_share_flag + + :Type: :bro:type:`event` (c: :bro:type:`connection`, flag: :bro:type:`bool`) + + Generated for RFB event share flag messages + + + :c: The connection record for the underlying transport-layer session/flow. + + + :flag: whether or not the share flag was set + + diff --git a/doc/scripts/base/bif/plugins/Bro_RPC.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_RPC.events.bif.bro.rst new file mode 100644 index 0000000000..3134a18b65 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_RPC.events.bif.bro.rst @@ -0,0 +1,1281 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_RPC.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================= ========================================================================= +:bro:id:`mount_proc_mnt`: :bro:type:`event` Generated for MOUNT3 request/reply dialogues of type *mnt*. +:bro:id:`mount_proc_not_implemented`: :bro:type:`event` Generated for MOUNT3 request/reply dialogues of a type that Bro's MOUNTv3 + analyzer does not implement. +:bro:id:`mount_proc_null`: :bro:type:`event` Generated for MOUNT3 request/reply dialogues of type *null*. +:bro:id:`mount_proc_umnt`: :bro:type:`event` Generated for MOUNT3 request/reply dialogues of type *umnt*. +:bro:id:`mount_proc_umnt_all`: :bro:type:`event` Generated for MOUNT3 request/reply dialogues of type *umnt_all*. +:bro:id:`mount_reply_status`: :bro:type:`event` Generated for each MOUNT3 reply message received, reporting just the + status included. +:bro:id:`nfs_proc_create`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *create*. +:bro:id:`nfs_proc_getattr`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *getattr*. +:bro:id:`nfs_proc_link`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *link*. +:bro:id:`nfs_proc_lookup`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *lookup*. +:bro:id:`nfs_proc_mkdir`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *mkdir*. +:bro:id:`nfs_proc_not_implemented`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of a type that Bro's NFSv3 + analyzer does not implement. +:bro:id:`nfs_proc_null`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *null*. +:bro:id:`nfs_proc_read`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *read*. +:bro:id:`nfs_proc_readdir`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *readdir*. +:bro:id:`nfs_proc_readlink`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *readlink*. +:bro:id:`nfs_proc_remove`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *remove*. +:bro:id:`nfs_proc_rename`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *rename*. +:bro:id:`nfs_proc_rmdir`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *rmdir*. +:bro:id:`nfs_proc_sattr`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *sattr*. +:bro:id:`nfs_proc_symlink`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *symlink*. +:bro:id:`nfs_proc_write`: :bro:type:`event` Generated for NFSv3 request/reply dialogues of type *write*. +:bro:id:`nfs_reply_status`: :bro:type:`event` Generated for each NFSv3 reply message received, reporting just the + status included. +:bro:id:`pm_attempt_callit`: :bro:type:`event` Generated for failed Portmapper requests of type *callit*. +:bro:id:`pm_attempt_dump`: :bro:type:`event` Generated for failed Portmapper requests of type *dump*. +:bro:id:`pm_attempt_getport`: :bro:type:`event` Generated for failed Portmapper requests of type *getport*. +:bro:id:`pm_attempt_null`: :bro:type:`event` Generated for failed Portmapper requests of type *null*. +:bro:id:`pm_attempt_set`: :bro:type:`event` Generated for failed Portmapper requests of type *set*. +:bro:id:`pm_attempt_unset`: :bro:type:`event` Generated for failed Portmapper requests of type *unset*. +:bro:id:`pm_bad_port`: :bro:type:`event` Generated for Portmapper requests or replies that include an invalid port + number. +:bro:id:`pm_request_callit`: :bro:type:`event` Generated for Portmapper request/reply dialogues of type *callit*. +:bro:id:`pm_request_dump`: :bro:type:`event` Generated for Portmapper request/reply dialogues of type *dump*. +:bro:id:`pm_request_getport`: :bro:type:`event` Generated for Portmapper request/reply dialogues of type *getport*. +:bro:id:`pm_request_null`: :bro:type:`event` Generated for Portmapper requests of type *null*. +:bro:id:`pm_request_set`: :bro:type:`event` Generated for Portmapper request/reply dialogues of type *set*. +:bro:id:`pm_request_unset`: :bro:type:`event` Generated for Portmapper request/reply dialogues of type *unset*. +:bro:id:`rpc_call`: :bro:type:`event` Generated for RPC *call* messages. +:bro:id:`rpc_dialogue`: :bro:type:`event` Generated for RPC request/reply *pairs*. +:bro:id:`rpc_reply`: :bro:type:`event` Generated for RPC *reply* messages. +======================================================= ========================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: mount_proc_mnt + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`, req: :bro:type:`MOUNT3::dirmntargs_t`, rep: :bro:type:`MOUNT3::mnt_reply_t`) + + Generated for MOUNT3 request/reply dialogues of type *mnt*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + MOUNT is a service running on top of RPC. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_proc_not_implemented + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`, proc: :bro:type:`MOUNT3::proc_t`) + + Generated for MOUNT3 request/reply dialogues of a type that Bro's MOUNTv3 + analyzer does not implement. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :proc: The procedure called that Bro does not implement. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_proc_null + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`) + + Generated for MOUNT3 request/reply dialogues of type *null*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + MOUNT is a service running on top of RPC. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_proc_umnt + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`, req: :bro:type:`MOUNT3::dirmntargs_t`) + + Generated for MOUNT3 request/reply dialogues of type *umnt*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + MOUNT is a service running on top of RPC. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_proc_umnt_all + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`, req: :bro:type:`MOUNT3::dirmntargs_t`) + + Generated for MOUNT3 request/reply dialogues of type *umnt_all*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + MOUNT is a service running on top of RPC. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: mount_reply_status + + :Type: :bro:type:`event` (n: :bro:type:`connection`, info: :bro:type:`MOUNT3::info_t`) + + Generated for each MOUNT3 reply message received, reporting just the + status included. + + + :n: The connection. + + + :info: Reports the status included in the reply. + + .. bro:see:: mount_proc_mnt mount_proc_umnt + mount_proc_umnt_all mount_proc_not_implemented + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_create + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::newobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *create*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_getattr + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, fh: :bro:type:`string`, attrs: :bro:type:`NFS3::fattr_t`) + + Generated for NFSv3 request/reply dialogues of type *getattr*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :fh: TODO. + + + :attrs: The attributes returned in the reply. The values may not be valid if + the request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply file_mode + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_link + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::linkargs_t`, rep: :bro:type:`NFS3::link_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *link*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call + nfs_proc_symlink rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_lookup + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::lookup_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *lookup*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_mkdir + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::newobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *mkdir*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_not_implemented + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, proc: :bro:type:`NFS3::proc_t`) + + Generated for NFSv3 request/reply dialogues of a type that Bro's NFSv3 + analyzer does not implement. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :proc: The procedure called that Bro does not implement. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_null nfs_proc_read nfs_proc_readdir nfs_proc_readlink nfs_proc_remove + nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_null + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`) + + Generated for NFSv3 request/reply dialogues of type *null*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_read nfs_proc_readdir nfs_proc_readlink + nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_read + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::readargs_t`, rep: :bro:type:`NFS3::read_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *read*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_remove nfs_proc_rmdir + nfs_proc_write nfs_reply_status rpc_call rpc_dialogue rpc_reply + NFS3::return_data NFS3::return_data_first_only NFS3::return_data_max + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_readdir + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::readdirargs_t`, rep: :bro:type:`NFS3::readdir_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *readdir*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readlink + nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_readlink + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, fh: :bro:type:`string`, rep: :bro:type:`NFS3::readlink_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *readlink*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :fh: The file handle passed in the request. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + nfs_proc_symlink rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_remove + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::delobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *remove*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_rmdir nfs_proc_write nfs_reply_status rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_rename + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::renameopargs_t`, rep: :bro:type:`NFS3::renameobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *rename*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rename nfs_proc_write + nfs_reply_status rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_rmdir + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::diropargs_t`, rep: :bro:type:`NFS3::delobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *rmdir*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_write nfs_reply_status rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_sattr + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::sattrargs_t`, rep: :bro:type:`NFS3::sattr_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *sattr*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The attributes returned in the reply. The values may not be + valid if the request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + rpc_call rpc_dialogue rpc_reply file_mode + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_symlink + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::symlinkargs_t`, rep: :bro:type:`NFS3::newobj_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *symlink*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: The arguments passed in the request. + + + :rep: The attributes returned in the reply. The values may not be + valid if the request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write nfs_reply_status + nfs_proc_link rpc_call rpc_dialogue rpc_reply file_mode + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_proc_write + + :Type: :bro:type:`event` (c: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`, req: :bro:type:`NFS3::writeargs_t`, rep: :bro:type:`NFS3::write_reply_t`) + + Generated for NFSv3 request/reply dialogues of type *write*. The event is + generated once we have either seen both the request and its corresponding + reply, or an unanswered request has timed out. + + NFS is a service running on top of RPC. See `Wikipedia + `__ for more + information about the service. + + + :c: The RPC connection. + + + :info: Reports the status of the dialogue, along with some meta information. + + + :req: TODO. + + + :rep: The response returned in the reply. The values may not be valid if the + request was unsuccessful. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_reply_status rpc_call + rpc_dialogue rpc_reply NFS3::return_data NFS3::return_data_first_only + NFS3::return_data_max + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: nfs_reply_status + + :Type: :bro:type:`event` (n: :bro:type:`connection`, info: :bro:type:`NFS3::info_t`) + + Generated for each NFSv3 reply message received, reporting just the + status included. + + + :n: The connection. + + + :info: Reports the status included in the reply. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup nfs_proc_mkdir + nfs_proc_not_implemented nfs_proc_null nfs_proc_read nfs_proc_readdir + nfs_proc_readlink nfs_proc_remove nfs_proc_rmdir nfs_proc_write rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_callit + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`, call: :bro:type:`pm_callit_request`) + + Generated for failed Portmapper requests of type *callit*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :call: The argument to the original request. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_unset + pm_attempt_getport pm_attempt_dump pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_dump + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`) + + Generated for failed Portmapper requests of type *dump*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_unset + pm_attempt_getport pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_getport + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`, pr: :bro:type:`pm_port_request`) + + Generated for failed Portmapper requests of type *getport*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :pr: The argument to the original request. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_unset pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_null + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`) + + Generated for failed Portmapper requests of type *null*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_set pm_attempt_unset pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_set + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`, m: :bro:type:`pm_mapping`) + + Generated for failed Portmapper requests of type *set*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :m: The argument to the original request. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_unset pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_attempt_unset + + :Type: :bro:type:`event` (r: :bro:type:`connection`, status: :bro:type:`rpc_status`, m: :bro:type:`pm_mapping`) + + Generated for failed Portmapper requests of type *unset*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :m: The argument to the original request. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_bad_port + + :Type: :bro:type:`event` (r: :bro:type:`connection`, bad_p: :bro:type:`count`) + + Generated for Portmapper requests or replies that include an invalid port + number. Since ports are represented by unsigned 4-byte integers, they can + stray outside the allowed range of 0--65535 by being >= 65536. If so, this + event is generated. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :bad_p: The invalid port value. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_request_callit + pm_attempt_null pm_attempt_set pm_attempt_unset + pm_attempt_getport pm_attempt_dump pm_attempt_callit rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_callit + + :Type: :bro:type:`event` (r: :bro:type:`connection`, call: :bro:type:`pm_callit_request`, p: :bro:type:`port`) + + Generated for Portmapper request/reply dialogues of type *callit*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :call: The argument to the request. + + + :p: The port value returned by the call. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_dump pm_attempt_null + pm_attempt_set pm_attempt_unset pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_dump + + :Type: :bro:type:`event` (r: :bro:type:`connection`, m: :bro:type:`pm_mappings`) + + Generated for Portmapper request/reply dialogues of type *dump*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :m: The mappings returned by the server. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_getport pm_request_callit pm_attempt_null + pm_attempt_set pm_attempt_unset pm_attempt_getport + pm_attempt_dump pm_attempt_callit pm_bad_port rpc_call + rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_getport + + :Type: :bro:type:`event` (r: :bro:type:`connection`, pr: :bro:type:`pm_port_request`, p: :bro:type:`port`) + + Generated for Portmapper request/reply dialogues of type *getport*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :pr: The argument to the request. + + + :p: The port returned by the server. + + .. bro:see:: pm_request_null pm_request_set pm_request_unset + pm_request_dump pm_request_callit pm_attempt_null pm_attempt_set + pm_attempt_unset pm_attempt_getport pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_null + + :Type: :bro:type:`event` (r: :bro:type:`connection`) + + Generated for Portmapper requests of type *null*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + .. bro:see:: pm_request_set pm_request_unset pm_request_getport + pm_request_dump pm_request_callit pm_attempt_null pm_attempt_set + pm_attempt_unset pm_attempt_getport pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_set + + :Type: :bro:type:`event` (r: :bro:type:`connection`, m: :bro:type:`pm_mapping`, success: :bro:type:`bool`) + + Generated for Portmapper request/reply dialogues of type *set*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :m: The argument to the request. + + + :success: True if the request was successful, according to the corresponding + reply. If no reply was seen, this will be false once the request + times out. + + .. bro:see:: pm_request_null pm_request_unset pm_request_getport + pm_request_dump pm_request_callit pm_attempt_null pm_attempt_set + pm_attempt_unset pm_attempt_getport pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: pm_request_unset + + :Type: :bro:type:`event` (r: :bro:type:`connection`, m: :bro:type:`pm_mapping`, success: :bro:type:`bool`) + + Generated for Portmapper request/reply dialogues of type *unset*. + + Portmapper is a service running on top of RPC. See `Wikipedia + `__ for more information about the + service. + + + :r: The RPC connection. + + + :m: The argument to the request. + + + :success: True if the request was successful, according to the corresponding + reply. If no reply was seen, this will be false once the request + times out. + + .. bro:see:: pm_request_null pm_request_set pm_request_getport + pm_request_dump pm_request_callit pm_attempt_null pm_attempt_set + pm_attempt_unset pm_attempt_getport pm_attempt_dump + pm_attempt_callit pm_bad_port rpc_call rpc_dialogue rpc_reply + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to + register a port for it or add a DPD payload signature. + +.. bro:id:: rpc_call + + :Type: :bro:type:`event` (c: :bro:type:`connection`, xid: :bro:type:`count`, prog: :bro:type:`count`, ver: :bro:type:`count`, proc: :bro:type:`count`, call_len: :bro:type:`count`) + + Generated for RPC *call* messages. + + See `Wikipedia `__ for more information + about the ONC RPC protocol. + + + :c: The connection. + + + :xid: The transaction identifier allowing to match requests with replies. + + + :prog: The remote program to call. + + + :ver: The version of the remote program to call. + + + :proc: The procedure of the remote program to call. + + + :call_len: The size of the *call_body* PDU. + + .. bro:see:: rpc_dialogue rpc_reply dce_rpc_bind dce_rpc_message dce_rpc_request + dce_rpc_response rpc_timeout + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: rpc_dialogue + + :Type: :bro:type:`event` (c: :bro:type:`connection`, prog: :bro:type:`count`, ver: :bro:type:`count`, proc: :bro:type:`count`, status: :bro:type:`rpc_status`, start_time: :bro:type:`time`, call_len: :bro:type:`count`, reply_len: :bro:type:`count`) + + Generated for RPC request/reply *pairs*. The RPC analyzer associates request + and reply by their transaction identifiers and raises this event once both + have been seen. If there's not a reply, this event will still be generated + eventually on timeout. In that case, *status* will be set to + :bro:enum:`RPC_TIMEOUT`. + + See `Wikipedia `__ for more information + about the ONC RPC protocol. + + + :c: The connection. + + + :prog: The remote program to call. + + + :ver: The version of the remote program to call. + + + :proc: The procedure of the remote program to call. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :start_time: The time when the *call* was seen. + + + :call_len: The size of the *call_body* PDU. + + + :reply_len: The size of the *reply_body* PDU. + + .. bro:see:: rpc_call rpc_reply dce_rpc_bind dce_rpc_message dce_rpc_request + dce_rpc_response rpc_timeout + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + +.. bro:id:: rpc_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, xid: :bro:type:`count`, status: :bro:type:`rpc_status`, reply_len: :bro:type:`count`) + + Generated for RPC *reply* messages. + + See `Wikipedia `__ for more information + about the ONC RPC protocol. + + + :c: The connection. + + + :xid: The transaction identifier allowing to match requests with replies. + + + :status: The status of the reply, which should be one of the index values of + :bro:id:`RPC_status`. + + + :reply_len: The size of the *reply_body* PDU. + + .. bro:see:: rpc_call rpc_dialogue dce_rpc_bind dce_rpc_message dce_rpc_request + dce_rpc_response rpc_timeout + + .. todo:: Bro's current default configuration does not activate the protocol + analyzer that generates this event; the corresponding script has not yet + been ported to Bro 2.x. To still enable this event, one needs to add a + call to :bro:see:`Analyzer::register_for_ports` or a DPD payload + signature. + + diff --git a/doc/scripts/base/bif/plugins/Bro_RawReader.raw.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_RawReader.raw.bif.bro.rst new file mode 100644 index 0000000000..191e9cc407 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_RawReader.raw.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_RawReader.raw.bif.bro +========================================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: InputRaw + + +:Namespaces: GLOBAL, InputRaw + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_SIP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SIP.events.bif.bro.rst new file mode 100644 index 0000000000..1531d901aa --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SIP.events.bif.bro.rst @@ -0,0 +1,157 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SIP.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================= ========================================================================================================== +:bro:id:`sip_all_headers`: :bro:type:`event` Generated once for all :abbr:`SIP (Session Initiation Protocol)` headers from the originator or responder. +:bro:id:`sip_begin_entity`: :bro:type:`event` Generated at the beginning of a :abbr:`SIP (Session Initiation Protocol)` message. +:bro:id:`sip_end_entity`: :bro:type:`event` Generated at the end of a :abbr:`SIP (Session Initiation Protocol)` message. +:bro:id:`sip_header`: :bro:type:`event` Generated for each :abbr:`SIP (Session Initiation Protocol)` header. +:bro:id:`sip_reply`: :bro:type:`event` Generated for :abbr:`SIP (Session Initiation Protocol)` replies, used in Voice over IP (VoIP). +:bro:id:`sip_request`: :bro:type:`event` Generated for :abbr:`SIP (Session Initiation Protocol)` requests, used in Voice over IP (VoIP). +============================================= ========================================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: sip_all_headers + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, hlist: :bro:type:`mime_header_list`) + + Generated once for all :abbr:`SIP (Session Initiation Protocol)` headers from the originator or responder. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :is_orig: Whether the headers came from the originator. + + + :hlist: All the headers, and their values + + .. bro:see:: sip_request sip_reply sip_header sip_begin_entity sip_end_entity + +.. bro:id:: sip_begin_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated at the beginning of a :abbr:`SIP (Session Initiation Protocol)` message. + + This event is generated as soon as a message's initial line has been parsed. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :is_orig: Whether the message came from the originator. + + .. bro:see:: sip_request sip_reply sip_header sip_all_headers sip_end_entity + +.. bro:id:: sip_end_entity + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated at the end of a :abbr:`SIP (Session Initiation Protocol)` message. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :is_orig: Whether the message came from the originator. + + .. bro:see:: sip_request sip_reply sip_header sip_all_headers sip_begin_entity + +.. bro:id:: sip_header + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, name: :bro:type:`string`, value: :bro:type:`string`) + + Generated for each :abbr:`SIP (Session Initiation Protocol)` header. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :is_orig: Whether the header came from the originator. + + + :name: Header name. + + + :value: Header value. + + .. bro:see:: sip_request sip_reply sip_all_headers sip_begin_entity sip_end_entity + +.. bro:id:: sip_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`string`, code: :bro:type:`count`, reason: :bro:type:`string`) + + Generated for :abbr:`SIP (Session Initiation Protocol)` replies, used in Voice over IP (VoIP). + + This event is generated as soon as a reply's initial line has been parsed. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :version: The :abbr:`SIP (Session Initiation Protocol)` version in use. + + + :code: The response code. + + + :reason: Textual details for the response code. + + .. bro:see:: sip_request sip_header sip_all_headers sip_begin_entity sip_end_entity + +.. bro:id:: sip_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, method: :bro:type:`string`, original_URI: :bro:type:`string`, version: :bro:type:`string`) + + Generated for :abbr:`SIP (Session Initiation Protocol)` requests, used in Voice over IP (VoIP). + + This event is generated as soon as a request's initial line has been parsed. + + See `Wikipedia `__ + for more information about the :abbr:`SIP (Session Initiation Protocol)` protocol. + + + :c: The connection. + + + :method: The :abbr:`SIP (Session Initiation Protocol)` method extracted from the request (e.g., ``REGISTER``, ``NOTIFY``). + + + :original_URI: The unprocessed URI as specified in the request. + + + :version: The version number specified in the request (e.g., ``2.0``). + + .. bro:see:: sip_reply sip_header sip_all_headers sip_begin_entity sip_end_entity + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.consts.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.consts.bif.bro.rst new file mode 100644 index 0000000000..d8ddbfd29c --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.consts.bif.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.consts.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.events.bif.bro.rst new file mode 100644 index 0000000000..0d1fb955de --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.events.bif.bro.rst @@ -0,0 +1,39 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================= =================================================================== +:bro:id:`smb_pipe_connect_heuristic`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)` connections when a + named pipe has been detected heuristically. +======================================================= =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb_pipe_connect_heuristic + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for :abbr:`SMB (Server Message Block)` connections when a + named pipe has been detected heuristically. The case when this comes + up is when the drive mapping isn't seen so the analyzer is not able + to determine whether to send the data to the files framework or to + the DCE_RPC analyzer. This heuristic can be tuned by adding or + removing "named pipe" names from the :bro:see:`SMB::pipe_filenames` + const. + + + :c: The connection. + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_check_directory.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_check_directory.bif.bro.rst new file mode 100644 index 0000000000..f15d38a12b --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_check_directory.bif.bro.rst @@ -0,0 +1,65 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_check_directory.bif.bro +========================================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================================== =========================================================================================== +:bro:id:`smb1_check_directory_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *check directory*. +:bro:id:`smb1_check_directory_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *check directory*. +========================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_check_directory_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, directory_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *check directory*. This is used by the client to verify that + a specified path resolves to a valid directory on the server. + + For more information, see MS-CIFS:2.2.4.17 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :directory_name: The directory name to check for existence. + + .. bro:see:: smb1_message smb1_check_directory_response + +.. bro:id:: smb1_check_directory_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *check directory*. This is the server response to the + *check directory* request. + + For more information, see MS-CIFS:2.2.4.17 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + .. bro:see:: smb1_message smb1_check_directory_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_close.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_close.bif.bro.rst new file mode 100644 index 0000000000..9414359a1a --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_close.bif.bro.rst @@ -0,0 +1,45 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_close.bif.bro +=============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=============================================== =========================================================================================== +:bro:id:`smb1_close_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *close*. +=============================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_close_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_id: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *close*. This is used by the client to close an instance of an object + associated with a valid file ID. + + For more information, see MS-CIFS:2.2.4.5 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_id: The file identifier being closed. + + .. bro:see:: smb1_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_create_directory.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_create_directory.bif.bro.rst new file mode 100644 index 0000000000..0758534239 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_create_directory.bif.bro.rst @@ -0,0 +1,67 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_create_directory.bif.bro +========================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=========================================================== =========================================================================================== +:bro:id:`smb1_create_directory_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *create directory*. +:bro:id:`smb1_create_directory_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *create directory*. +=========================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_create_directory_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, directory_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *create directory*. This is a deprecated command which + has been replaced by the *trans2_create_directory* subcommand. This is used by the client to + create a new directory on the server, relative to a connected share. + + For more information, see MS-CIFS:2.2.4.1 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :directory_name: The name of the directory to create. + + .. bro:see:: smb1_message smb1_create_directory_response smb1_transaction2_request + +.. bro:id:: smb1_create_directory_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *create directory*. This is a deprecated command which + has been replaced by the *trans2_create_directory* subcommand. This is the server response + to the *create directory* request. + + For more information, see MS-CIFS:2.2.4.1 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + .. bro:see:: smb1_message smb1_create_directory_request smb1_transaction2_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_echo.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_echo.bif.bro.rst new file mode 100644 index 0000000000..fd1497553b --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_echo.bif.bro.rst @@ -0,0 +1,73 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_echo.bif.bro +============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=============================================== =========================================================================================== +:bro:id:`smb1_echo_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *echo*. +:bro:id:`smb1_echo_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *echo*. +=============================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_echo_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, echo_count: :bro:type:`count`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *echo*. This is sent by the client to test the transport layer + connection with the server. + + For more information, see MS-CIFS:2.2.4.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :echo_count: The number of times the server should echo the data back. + + + :data: The data for the server to echo. + + .. bro:see:: smb1_message smb1_echo_response + +.. bro:id:: smb1_echo_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, seq_num: :bro:type:`count`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *echo*. This is the server response to the *echo* request. + + For more information, see MS-CIFS:2.2.4.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :seq_num: The sequence number of this echo reply. + + + :data: The data echoed back from the client. + + .. bro:see:: smb1_message smb1_echo_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_logoff_andx.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_logoff_andx.bif.bro.rst new file mode 100644 index 0000000000..74a4a4f813 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_logoff_andx.bif.bro.rst @@ -0,0 +1,44 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_logoff_andx.bif.bro +===================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================= =========================================================================================== +:bro:id:`smb1_logoff_andx`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *logoff andx*. +============================================= =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_logoff_andx + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *logoff andx*. This is used by the client to logoff the user + connection represented by UID in the SMB Header. The server releases all locks and closes + all files currently open by this user, disconnects all tree connects, cancels any outstanding + requests for this UID, and invalidates the UID. + + For more information, see MS-CIFS:2.2.4.54 + + + :c: The connection. + + + :is_orig: Indicates which host sent the logoff message. + + .. bro:see:: smb1_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_negotiate.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_negotiate.bif.bro.rst new file mode 100644 index 0000000000..f6d78ee459 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_negotiate.bif.bro.rst @@ -0,0 +1,69 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_negotiate.bif.bro +=================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +==================================================== =========================================================================================== +:bro:id:`smb1_negotiate_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *negotiate*. +:bro:id:`smb1_negotiate_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *negotiate*. +==================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_negotiate_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, dialects: :bro:type:`string_vec`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *negotiate*. This is sent by the client to initiate an SMB + connection between the client and the server. A *negotiate* exchange MUST be completed + before any other SMB messages are sent to the server. + + For more information, see MS-CIFS:2.2.4.52 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :dialects: The SMB dialects supported by the client. + + .. bro:see:: smb1_message smb1_negotiate_response + +.. bro:id:: smb1_negotiate_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, response: :bro:type:`SMB1::NegotiateResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *negotiate*. This is the server response to the *negotiate* + request. + + For more information, see MS-CIFS:2.2.4.52 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :response: A record structure containing more information from the response. + + .. bro:see:: smb1_message smb1_negotiate_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_cancel.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_cancel.bif.bro.rst new file mode 100644 index 0000000000..6a3f575562 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_cancel.bif.bro.rst @@ -0,0 +1,42 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_nt_cancel.bif.bro +=================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=================================================== =========================================================================================== +:bro:id:`smb1_nt_cancel_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *nt cancel*. +=================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_nt_cancel_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *nt cancel*. This is sent by the client to request that a currently + pending request be cancelled. + + For more information, see MS-CIFS:2.2.4.65 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + .. bro:see:: smb1_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_create_andx.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_create_andx.bif.bro.rst new file mode 100644 index 0000000000..d7426ec72c --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_create_andx.bif.bro.rst @@ -0,0 +1,75 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_nt_create_andx.bif.bro +======================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================================= =========================================================================================== +:bro:id:`smb1_nt_create_andx_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *nt create andx*. +:bro:id:`smb1_nt_create_andx_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *nt create andx*. +========================================================= =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_nt_create_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *nt create andx*. This is sent by the client to create and open + a new file, or to open an existing file, or to open and truncate an existing file to zero + length, or to create a directory, or to create a connection to a named pipe. + + For more information, see MS-CIFS:2.2.4.64 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :name: The ``name`` attribute specified in the message. + + .. bro:see:: smb1_message smb1_nt_create_andx_response + +.. bro:id:: smb1_nt_create_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_id: :bro:type:`count`, file_size: :bro:type:`count`, times: :bro:type:`SMB::MACTimes`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *nt create andx*. This is the server response to the + *nt create andx* request. + + For more information, see MS-CIFS:2.2.4.64 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_id: The SMB2 GUID for the file. + + + :file_size: Size of the file. + + + :times: Timestamps associated with the file in question. + + .. bro:see:: smb1_message smb1_nt_create_andx_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_query_information.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_query_information.bif.bro.rst new file mode 100644 index 0000000000..80dbba62bd --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_query_information.bif.bro.rst @@ -0,0 +1,46 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_query_information.bif.bro +=========================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=========================================================== =========================================================================================== +:bro:id:`smb1_query_information_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *query information*. +=========================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_query_information_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, filename: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *query information*. This is a deprecated command which + has been replaced by the *trans2_query_path_information* subcommand. This is used by the + client to obtain attribute information about a file. + + For more information, see MS-CIFS:2.2.4.9 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :filename: The filename that the client is querying. + + .. bro:see:: smb1_message smb1_transaction2_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_read_andx.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_read_andx.bif.bro.rst new file mode 100644 index 0000000000..ed2dc0b39b --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_read_andx.bif.bro.rst @@ -0,0 +1,74 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_read_andx.bif.bro +=================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +==================================================== =========================================================================================== +:bro:id:`smb1_read_andx_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *read andx*. +:bro:id:`smb1_read_andx_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *read andx*. +==================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_read_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_id: :bro:type:`count`, offset: :bro:type:`count`, length: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *read andx*. This is sent by the client to read bytes from a regular + file, a named pipe, or a directly accessible device such as a serial port (COM) or printer + port (LPT). + + For more information, see MS-CIFS:2.2.4.42 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_id: The file identifier being written to. + + + :offset: The byte offset the requested read begins at. + + + :length: The number of bytes being requested. + + .. bro:see:: smb1_message smb1_read_andx_response + +.. bro:id:: smb1_read_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, data_len: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *read andx*. This is the server response to the *read andx* request. + + For more information, see MS-CIFS:2.2.4.42 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :data_len: The length of data from the requested file. + + .. bro:see:: smb1_message smb1_read_andx_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_session_setup_andx.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_session_setup_andx.bif.bro.rst new file mode 100644 index 0000000000..41d6f7c624 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_session_setup_andx.bif.bro.rst @@ -0,0 +1,66 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_session_setup_andx.bif.bro +============================================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================================= =========================================================================================== +:bro:id:`smb1_session_setup_andx_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *setup andx*. +:bro:id:`smb1_session_setup_andx_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *setup andx*. +============================================================= =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_session_setup_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, request: :bro:type:`SMB1::SessionSetupAndXRequest`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *setup andx*. This is sent by the client to configure an SMB session. + + For more information, see MS-CIFS:2.2.4.53 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :request: The parsed request data of the SMB message. See init-bare for more details. + + .. bro:see:: smb1_message smb1_session_setup_andx_response + +.. bro:id:: smb1_session_setup_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, response: :bro:type:`SMB1::SessionSetupAndXResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *setup andx*. This is the server response to the *setup andx* request. + + For more information, see MS-CIFS:2.2.4.53 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :response: The parsed response data of the SMB message. See init-bare for more details. + + .. bro:see:: smb1_message smb1_session_setup_andx_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction.bif.bro.rst new file mode 100644 index 0000000000..3bbbd013f1 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction.bif.bro.rst @@ -0,0 +1,81 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_transaction.bif.bro +===================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +====================================================== =========================================================================================== +:bro:id:`smb1_transaction_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction*. +:bro:id:`smb1_transaction_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction*. +====================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_transaction_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, name: :bro:type:`string`, sub_cmd: :bro:type:`count`, parameters: :bro:type:`string`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction*. This command serves as the transport for the + Transaction Subprotocol Commands. These commands operate on mailslots and named pipes, + which are interprocess communication endpoints within the CIFS file system. + + For more information, see MS-CIFS:2.2.4.33.1 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :name: A name string that MAY identify the resource (a specific Mailslot or Named Pipe) + against which the operation is performed. + + + :sub_cmd: The sub command, some may be parsed and have their own events. + + + :parameters: content of the SMB_Data.Trans_Parameters field + + + :data: content of the SMB_Data.Trans_Data field + + .. bro:see:: smb1_message smb1_transaction2_request + +.. bro:id:: smb1_transaction_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, parameters: :bro:type:`string`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction*. This command serves as the transport for the + Transaction Subprotocol Commands. These commands operate on mailslots and named pipes, + which are interprocess communication endpoints within the CIFS file system. + + For more information, see MS-CIFS:2.2.4.33.2 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :parameters: content of the SMB_Data.Trans_Parameters field + + + :data: content of the SMB_Data.Trans_Data field + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2.bif.bro.rst new file mode 100644 index 0000000000..a00116f4fa --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2.bif.bro.rst @@ -0,0 +1,122 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_transaction2.bif.bro +====================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================================= =========================================================================================== +:bro:id:`smb1_trans2_find_first2_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 *transaction2* requests of subtype *find first2*. +:bro:id:`smb1_trans2_get_dfs_referral_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 *transaction2* requests of subtype *get DFS referral*. +:bro:id:`smb1_trans2_query_path_info_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 *transaction2* requests of subtype *query path info*. +:bro:id:`smb1_transaction2_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction2*. +================================================================= =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_trans2_find_first2_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, args: :bro:type:`SMB1::Find_First2_Request_Args`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 *transaction2* requests of subtype *find first2*. This transaction is used to begin + a search for file(s) within a directory or for a directory + + For more information, see MS-CIFS:2.2.6.2 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :args: A record data structure with arguments given to the command. + + .. bro:see:: smb1_message smb1_transaction2_request smb1_trans2_query_path_info_request + smb1_trans2_get_dfs_referral_request + +.. bro:id:: smb1_trans2_get_dfs_referral_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 *transaction2* requests of subtype *get DFS referral*. This transaction is used + to request a referral for a disk object in DFS. + + For more information, see MS-CIFS:2.2.6.16 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_name: File name the request is in reference to. + + .. bro:see:: smb1_message smb1_transaction2_request smb1_trans2_find_first2_request + smb1_trans2_query_path_info_request + +.. bro:id:: smb1_trans2_query_path_info_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_name: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 *transaction2* requests of subtype *query path info*. This transaction is used to + get information about a specific file or directory. + + For more information, see MS-CIFS:2.2.6.6 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :file_name: File name the request is in reference to. + + .. bro:see:: smb1_message smb1_transaction2_request smb1_trans2_find_first2_request + smb1_trans2_get_dfs_referral_request + +.. bro:id:: smb1_transaction2_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, args: :bro:type:`SMB1::Trans2_Args`, sub_cmd: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction2*. This command serves as the transport for the + Transaction2 Subprotocol Commands. These commands operate on mailslots and named pipes, + which are interprocess communication endpoints within the CIFS file system. Compared to the + Transaction Subprotocol Commands, these commands allow clients to set and retrieve Extended + Attribute key/value pairs, make use of long file names (longer than the original 8.3 format + names), and perform directory searches, among other tasks. + + For more information, see MS-CIFS:2.2.4.46 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :sub_cmd: The sub command, some are parsed and have their own events. + + .. bro:see:: smb1_message smb1_trans2_find_first2_request smb1_trans2_query_path_info_request + smb1_trans2_get_dfs_referral_request smb1_transaction_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2_secondary.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2_secondary.bif.bro.rst new file mode 100644 index 0000000000..82459b7bd0 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2_secondary.bif.bro.rst @@ -0,0 +1,49 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_transaction2_secondary.bif.bro +================================================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================================ =========================================================================================== +:bro:id:`smb1_transaction2_secondary_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction2 secondary*. +================================================================ =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_transaction2_secondary_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, args: :bro:type:`SMB1::Trans2_Sec_Args`, parameters: :bro:type:`string`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction2 secondary*. + + For more information, see MS-CIFS:2.2.4.47.1 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` + version 1 message. + + + :args: arguments of the message (SMB_Parameters.Words) + + + :parameters: content of the SMB_Data.Trans_Parameters field + + + :data: content of the SMB_Data.Trans_Data field + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction_secondary.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction_secondary.bif.bro.rst new file mode 100644 index 0000000000..01bee04881 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction_secondary.bif.bro.rst @@ -0,0 +1,48 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_transaction_secondary.bif.bro +=============================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=============================================================== =========================================================================================== +:bro:id:`smb1_transaction_secondary_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction_secondary*. +=============================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_transaction_secondary_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, args: :bro:type:`SMB1::Trans_Sec_Args`, parameters: :bro:type:`string`, data: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *transaction_secondary*. This command + serves as an additional request data container for the + Transaction Subprotocol Commands (carried by *transaction* requests). + + For more information, see MS-CIFS:2.2.4.34 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :parameters: the SMB_Data.Trans_Parameters field content + + + :data: the SMB_Data.Trans_Data field content + + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_connect_andx.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_connect_andx.bif.bro.rst new file mode 100644 index 0000000000..29b981f79e --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_connect_andx.bif.bro.rst @@ -0,0 +1,74 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_tree_connect_andx.bif.bro +=========================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================================ =========================================================================================== +:bro:id:`smb1_tree_connect_andx_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *tree connect andx*. +:bro:id:`smb1_tree_connect_andx_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *tree connect andx*. +============================================================ =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_tree_connect_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, path: :bro:type:`string`, service: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *tree connect andx*. This is sent by the client to establish a + connection to a server share. + + For more information, see MS-CIFS:2.2.4.55 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :path: The ``path`` attribute specified in the message. + + + :service: The ``service`` attribute specified in the message. + + .. bro:see:: smb1_message smb1_tree_connect_andx_response + +.. bro:id:: smb1_tree_connect_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, service: :bro:type:`string`, native_file_system: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *tree connect andx*. This is the server reply to the *tree connect andx* + request. + + For more information, see MS-CIFS:2.2.4.55 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :service: The ``service`` attribute specified in the message. + + + :native_file_system: The file system of the remote server as indicate by the server. + + .. bro:see:: smb1_message smb1_tree_connect_andx_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_disconnect.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_disconnect.bif.bro.rst new file mode 100644 index 0000000000..34e8ecf72a --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_disconnect.bif.bro.rst @@ -0,0 +1,45 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_tree_disconnect.bif.bro +========================================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================= =========================================================================================== +:bro:id:`smb1_tree_disconnect`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *tree disconnect*. +================================================= =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_tree_disconnect + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, is_orig: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *tree disconnect*. This is sent by the client to logically disconnect + client access to a server resource. + + For more information, see MS-CIFS:2.2.4.51 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :is_orig: True if the message was from the originator. + + .. bro:see:: smb1_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_write_andx.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_write_andx.bif.bro.rst new file mode 100644 index 0000000000..70de4ce41d --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_com_write_andx.bif.bro.rst @@ -0,0 +1,72 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_com_write_andx.bif.bro +==================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +===================================================== =========================================================================================== +:bro:id:`smb1_write_andx_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *write andx*. +:bro:id:`smb1_write_andx_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *write andx*. +===================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_write_andx_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, file_id: :bro:type:`count`, offset: :bro:type:`count`, data_len: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 requests of type *write andx*. This is sent by the client to write bytes to a + regular file, a named pipe, or a directly accessible I/O device such as a serial port (COM) + or printer port (LPT). + + For more information, see MS-CIFS:2.2.4.43 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :offset: The byte offset into the referenced file data is being written. + + + :data: The data being written. + + .. bro:see:: smb1_message smb1_write_andx_response + +.. bro:id:: smb1_write_andx_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, written_bytes: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 1 responses of type *write andx*. This is the server response to the *write andx* + request. + + For more information, see MS-CIFS:2.2.4.43 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :written_bytes: The number of bytes the server reported having actually written. + + .. bro:see:: smb1_message smb1_write_andx_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb1_events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_events.bif.bro.rst new file mode 100644 index 0000000000..18895a1d56 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb1_events.bif.bro.rst @@ -0,0 +1,86 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb1_events.bif.bro +============================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================ ========================================================================================================= +:bro:id:`smb1_empty_response`: :bro:type:`event` Generated when there is an :abbr:`SMB (Server Message Block)` version 1 response with no message body. +:bro:id:`smb1_error`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)` version 1 messages + that indicate an error. +:bro:id:`smb1_message`: :bro:type:`event` Generated for all :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` version 1 + messages. +================================================ ========================================================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb1_empty_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`) + + Generated when there is an :abbr:`SMB (Server Message Block)` version 1 response with no message body. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` message. + + .. bro:see:: smb1_message + +.. bro:id:: smb1_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, is_orig: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)` version 1 messages + that indicate an error. This event is triggered by an :abbr:`SMB (Server Message Block)` header + including a status that signals an error. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` message. + + + :is_orig: True if the message was sent by the originator of the underlying + transport-level connection. + + .. bro:see:: smb1_message + +.. bro:id:: smb1_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB1::Header`, is_orig: :bro:type:`bool`) + + Generated for all :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` version 1 + messages. + + See `Wikipedia `__ for more information about the + :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` protocol. Bro's + :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` analyzer parses + both :abbr:`SMB (Server Message Block)`-over-:abbr:`NetBIOS (Network Basic Input/Output System)` on + ports 138/139 and :abbr:`SMB (Server Message Block)`-over-TCP on port 445. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 1 message. + + + :is_orig: True if the message was sent by the originator of the underlying + transport-level connection. + + .. bro:see:: smb2_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_close.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_close.bif.bro.rst new file mode 100644 index 0000000000..5120f6dd95 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_close.bif.bro.rst @@ -0,0 +1,68 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_com_close.bif.bro +=============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================ =========================================================================================== +:bro:id:`smb2_close_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *close*. +:bro:id:`smb2_close_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *close*. +================================================ =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_close_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *close*. This is used by the client to close an instance of a + file that was opened previously with a successful SMB2 CREATE Request. + + For more information, see MS-SMB2:2.2.15 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_name: The SMB2 GUID of the file being closed. + + .. bro:see:: smb2_message smb2_close_response + +.. bro:id:: smb2_close_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::CloseResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *close*. This is sent by the server to indicate that an SMB2 CLOSE + request was processed successfully. + + For more information, see MS-SMB2:2.2.16 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: A record of attributes returned from the server from the close. + + .. bro:see:: smb2_message smb2_close_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_create.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_create.bif.bro.rst new file mode 100644 index 0000000000..304ab1554d --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_create.bif.bro.rst @@ -0,0 +1,68 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_com_create.bif.bro +================================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================= =========================================================================================== +:bro:id:`smb2_create_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *create*. +:bro:id:`smb2_create_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *create*. +================================================= =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_create_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, request: :bro:type:`SMB2::CreateRequest`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *create*. This is sent by the client to request either creation + of or access to a file. + + For more information, see MS-SMB2:2.2.13 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :request: A record with more information related to the request. + + .. bro:see:: smb2_message smb2_create_response + +.. bro:id:: smb2_create_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::CreateResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *create*. This is sent by the server to notify the client of + the status of its SMB2 CREATE request. + + For more information, see MS-SMB2:2.2.14 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: A record with more information related to the response. + + .. bro:see:: smb2_message smb2_create_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_negotiate.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_negotiate.bif.bro.rst new file mode 100644 index 0000000000..a18ddb831f --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_negotiate.bif.bro.rst @@ -0,0 +1,68 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_com_negotiate.bif.bro +=================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +==================================================== =========================================================================================== +:bro:id:`smb2_negotiate_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *negotiate*. +:bro:id:`smb2_negotiate_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *negotiate*. +==================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_negotiate_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, dialects: :bro:type:`index_vec`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *negotiate*. This is used by the client to notify the server what + dialects of the SMB2 Protocol the client understands. + + For more information, see MS-SMB2:2.2.3 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :dialects: A vector of the client's supported dialects. + + .. bro:see:: smb2_message smb2_negotiate_response + +.. bro:id:: smb2_negotiate_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::NegotiateResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *negotiate*. This is sent by the server to notify the client of + the preferred common dialect. + + For more information, see MS-SMB2:2.2.4 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: The negotiate response data structure. + + .. bro:see:: smb2_message smb2_negotiate_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_read.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_read.bif.bro.rst new file mode 100644 index 0000000000..eb1a9585bb --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_read.bif.bro.rst @@ -0,0 +1,51 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_com_read.bif.bro +============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================== =========================================================================================== +:bro:id:`smb2_read_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *read*. +============================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_read_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, offset: :bro:type:`count`, length: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *read*. This is sent by the client to request a read operation on + the specified file. + + For more information, see MS-SMB2:2.2.19 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: The GUID being used for the file. + + + :offset: How far into the file this read should be taking place. + + + :length: The number of bytes of the file being read. + + .. bro:see:: smb2_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_session_setup.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_session_setup.bif.bro.rst new file mode 100644 index 0000000000..5e7061a732 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_session_setup.bif.bro.rst @@ -0,0 +1,69 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_com_session_setup.bif.bro +======================================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================== =========================================================================================== +:bro:id:`smb2_session_setup_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *session_setup*. +:bro:id:`smb2_session_setup_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *session_setup*. +======================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_session_setup_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, request: :bro:type:`SMB2::SessionSetupRequest`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *session_setup*. This is sent by the client to request a new + authenticated session within a new or existing SMB 2 Protocol transport connection to the + server. + + For more information, see MS-SMB2:2.2.5 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :request: A record containing more information related to the request. + + .. bro:see:: smb2_message smb2_session_setup_response + +.. bro:id:: smb2_session_setup_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::SessionSetupResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *session_setup*. This is sent by the server in response to a + *session_setup* request. + + For more information, see MS-SMB2:2.2.6 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: A record containing more information related to the response. + + .. bro:see:: smb2_message smb2_session_setup_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_set_info.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_set_info.bif.bro.rst new file mode 100644 index 0000000000..54f6bf1f35 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_set_info.bif.bro.rst @@ -0,0 +1,101 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_com_set_info.bif.bro +================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================= =========================================================================================== +:bro:id:`smb2_file_delete`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *set_info* of the *delete* subtype. +:bro:id:`smb2_file_rename`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *set_info* of the *rename* subtype. +:bro:id:`smb2_file_sattr`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *set_info* of the *file* subtype +============================================= =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_file_delete + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, delete_pending: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *set_info* of the *delete* subtype. + + For more information, see MS-SMB2:2.2.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: The SMB2 GUID for the file. + + + :delete_pending: A boolean value to indicate that a file should be deleted + when it's closed if set to T. + + .. bro:see:: smb2_message smb2_file_rename smb2_file_sattr + +.. bro:id:: smb2_file_rename + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, dst_filename: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *set_info* of the *rename* subtype. + + For more information, see MS-SMB2:2.2.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: A GUID to identify the file. + + + :dst_filename: The filename to rename the file into. + + .. bro:see:: smb2_message smb2_file_delete smb2_file_sattr + +.. bro:id:: smb2_file_sattr + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, times: :bro:type:`SMB::MACTimes`, attrs: :bro:type:`SMB2::FileAttrs`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *set_info* of the *file* subtype + + For more infomation, see MS-SMB2:2.2.39 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: The SMB2 GUID for the file. + + + :times: Timestamps associated with the file in question. + + + :attrs: File attributes. + + .. bro:see:: smb2_message smb2_file_rename smb2_file_delete + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_connect.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_connect.bif.bro.rst new file mode 100644 index 0000000000..c900b0b5ba --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_connect.bif.bro.rst @@ -0,0 +1,68 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_com_tree_connect.bif.bro +====================================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================= =========================================================================================== +:bro:id:`smb2_tree_connect_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *tree_connect*. +:bro:id:`smb2_tree_connect_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *tree_connect*. +======================================================= =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_tree_connect_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, path: :bro:type:`string`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *tree_connect*. This is sent by a client to request access to a + particular share on the server. + + For more information, see MS-SMB2:2.2.9 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :path: Path of the requested tree. + + .. bro:see:: smb2_message smb2_tree_connect_response + +.. bro:id:: smb2_tree_connect_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, response: :bro:type:`SMB2::TreeConnectResponse`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 responses of type *tree_connect*. This is sent by the server when a *tree_connect* + request is successfully processed by the server. + + For more information, see MS-SMB2:2.2.10 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :response: A record with more information related to the response. + + .. bro:see:: smb2_message smb2_tree_connect_request + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_disconnect.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_disconnect.bif.bro.rst new file mode 100644 index 0000000000..ebfb2d4a2f --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_disconnect.bif.bro.rst @@ -0,0 +1,58 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_com_tree_disconnect.bif.bro +========================================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================================== =========================================================================================== +:bro:id:`smb2_tree_disconnect_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *tree disconnect*. +:bro:id:`smb2_tree_disconnect_response`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *tree disconnect*. +========================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_tree_disconnect_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *tree disconnect*. This is sent by the client to logically disconnect + client access to a server resource. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + .. bro:see:: smb2_message + +.. bro:id:: smb2_tree_disconnect_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *tree disconnect*. This is sent by the server to logically disconnect + client access to a server resource. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + .. bro:see:: smb2_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_write.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_write.bif.bro.rst new file mode 100644 index 0000000000..5602a7a908 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_com_write.bif.bro.rst @@ -0,0 +1,51 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_com_write.bif.bro +=============================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=============================================== =========================================================================================== +:bro:id:`smb2_write_request`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *write*. +=============================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_write_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, file_id: :bro:type:`SMB2::GUID`, offset: :bro:type:`count`, length: :bro:type:`count`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 requests of type *write*. This is sent by the client to write data to the file or + named pipe on the server. + + For more information, see MS-SMB2:2.2.21 + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :file_id: The GUID being used for the file. + + + :offset: How far into the file this write should be taking place. + + + :length: The number of bytes of the file being written. + + .. bro:see:: smb2_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.smb2_events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_events.bif.bro.rst new file mode 100644 index 0000000000..edd933ce20 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.smb2_events.bif.bro.rst @@ -0,0 +1,48 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.smb2_events.bif.bro +============================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================= =========================================================================================== +:bro:id:`smb2_message`: :bro:type:`event` Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 messages. +========================================= =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smb2_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hdr: :bro:type:`SMB2::Header`, is_orig: :bro:type:`bool`) + + Generated for :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` + version 2 messages. + + See `Wikipedia `__ for more information about the + :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` protocol. Bro's + :abbr:`SMB (Server Message Block)`/:abbr:`CIFS (Common Internet File System)` analyzer parses + both :abbr:`SMB (Server Message Block)`-over-:abbr:`NetBIOS (Network Basic Input/Output System)` on + ports 138/139 and :abbr:`SMB (Server Message Block)`-over-TCP on port 445. + + + :c: The connection. + + + :hdr: The parsed header of the :abbr:`SMB (Server Message Block)` version 2 message. + + + :is_orig: True if the message came from the originator side. + + .. bro:see:: smb1_message + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMB.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMB.types.bif.bro.rst new file mode 100644 index 0000000000..038e87a528 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMB.types.bif.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMB.types.bif.bro +====================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_SMTP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMTP.events.bif.bro.rst new file mode 100644 index 0000000000..d623ab0589 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMTP.events.bif.bro.rst @@ -0,0 +1,169 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMTP.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================ ================================================================================= +:bro:id:`smtp_data`: :bro:type:`event` Generated for DATA transmitted on SMTP sessions. +:bro:id:`smtp_reply`: :bro:type:`event` Generated for server-side SMTP commands. +:bro:id:`smtp_request`: :bro:type:`event` Generated for client-side SMTP commands. +:bro:id:`smtp_starttls`: :bro:type:`event` Generated if a connection switched to using TLS using STARTTLS or X-ANONYMOUSTLS. +:bro:id:`smtp_unexpected`: :bro:type:`event` Generated for unexpected activity on SMTP sessions. +============================================ ================================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: smtp_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, data: :bro:type:`string`) + + Generated for DATA transmitted on SMTP sessions. This event is raised for + subsequent chunks of raw data following the ``DATA`` SMTP command until the + corresponding end marker ``.`` is seen. A handler may want to reassemble + the pieces as they come in if stream-analysis is required. + + See `Wikipedia `__ + for more information about the SMTP protocol. + + + :c: The connection. + + + :is_orig: True if the sender of the data is the originator of the TCP + connection. + + + :data: The raw data. Note that the size of each chunk is undefined and + depends on specifics of the underlying TCP connection. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_one_header mime_segment_data + smtp_reply smtp_request skip_smtp_data + + .. note:: This event receives the unprocessed raw data. There is a separate + set of ``mime_*`` events that strip out the outer MIME-layer of emails and + provide structured access to their content. + +.. bro:id:: smtp_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, code: :bro:type:`count`, cmd: :bro:type:`string`, msg: :bro:type:`string`, cont_resp: :bro:type:`bool`) + + Generated for server-side SMTP commands. + + See `Wikipedia `__ + for more information about the SMTP protocol. + + + :c: The connection. + + + :is_orig: True if the sender of the command is the originator of the TCP + connection. Note that this is not redundant: the SMTP ``TURN`` command + allows client and server to flip roles on established SMTP sessions, + and hence a "reply" might still come from the TCP-level originator. In + practice, however, that will rarely happen as TURN is considered + insecure and rarely used. + + + :code: The reply's numerical code. + + + :cmd: TODO. + + + :msg: The reply's textual description. + + + :cont_resp: True if the reply line is tagged as being continued to the next + line. If so, further events will be raised and a handler may want to + reassemble the pieces before processing the response any further. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_one_header mime_segment_data + smtp_data smtp_request + + .. note:: Bro doesn't support the newer ETRN extension yet. + +.. bro:id:: smtp_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, command: :bro:type:`string`, arg: :bro:type:`string`) + + Generated for client-side SMTP commands. + + See `Wikipedia `__ + for more information about the SMTP protocol. + + + :c: The connection. + + + :is_orig: True if the sender of the command is the originator of the TCP + connection. Note that this is not redundant: the SMTP ``TURN`` command + allows client and server to flip roles on established SMTP sessions, + and hence a "request" might still come from the TCP-level responder. + In practice, however, that will rarely happen as TURN is considered + insecure and rarely used. + + + :command: The request's command, without any arguments. + + + :arg: The request command's arguments. + + .. bro:see:: mime_all_data mime_all_headers mime_begin_entity mime_content_hash + mime_end_entity mime_entity_data mime_event mime_one_header mime_segment_data + smtp_data smtp_reply + + .. note:: Bro does not support the newer ETRN extension yet. + +.. bro:id:: smtp_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated if a connection switched to using TLS using STARTTLS or X-ANONYMOUSTLS. + After this event no more SMTP events will be raised for the connection. See the SSL + analyzer for related SSL events, which will now be generated. + + + :c: The connection. + + +.. bro:id:: smtp_unexpected + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`, detail: :bro:type:`string`) + + Generated for unexpected activity on SMTP sessions. The SMTP analyzer tracks + the state of SMTP sessions and reports commands and other activity with this + event that it sees even though it would not expect so at the current point + of the communication. + + See `Wikipedia `__ + for more information about the SMTP protocol. + + + :c: The connection. + + + :is_orig: True if the sender of the unexpected activity is the originator of + the TCP connection. + + + :msg: A descriptive message of what was unexpected. + + + :detail: The actual SMTP line triggering the event. + + .. bro:see:: smtp_data smtp_request smtp_reply + + diff --git a/doc/scripts/base/bif/plugins/Bro_SMTP.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SMTP.functions.bif.bro.rst new file mode 100644 index 0000000000..8bad55010c --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SMTP.functions.bif.bro.rst @@ -0,0 +1,34 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SMTP.functions.bif.bro +=========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +============================================== ===================================================== +:bro:id:`skip_smtp_data`: :bro:type:`function` Skips SMTP data until the next email in a connection. +============================================== ===================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: skip_smtp_data + + :Type: :bro:type:`function` (c: :bro:type:`connection`) : :bro:type:`any` + + Skips SMTP data until the next email in a connection. + + + :c: The SMTP connection. + + .. bro:see:: skip_http_entity_data + + diff --git a/doc/scripts/base/bif/plugins/Bro_SNMP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SNMP.events.bif.bro.rst new file mode 100644 index 0000000000..352233e2f9 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SNMP.events.bif.bro.rst @@ -0,0 +1,281 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SNMP.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================== ========================================================================== +:bro:id:`snmp_encrypted_pdu`: :bro:type:`event` An SNMPv3 encrypted PDU message. +:bro:id:`snmp_get_bulk_request`: :bro:type:`event` An SNMP ``GetBulkRequest-PDU`` message from :rfc:`3416`. +:bro:id:`snmp_get_next_request`: :bro:type:`event` An SNMP ``GetNextRequest-PDU`` message from either :rfc:`1157` or + :rfc:`3416`. +:bro:id:`snmp_get_request`: :bro:type:`event` An SNMP ``GetRequest-PDU`` message from either :rfc:`1157` or :rfc:`3416`. +:bro:id:`snmp_inform_request`: :bro:type:`event` An SNMP ``InformRequest-PDU`` message from :rfc:`3416`. +:bro:id:`snmp_report`: :bro:type:`event` An SNMP ``Report-PDU`` message from :rfc:`3416`. +:bro:id:`snmp_response`: :bro:type:`event` An SNMP ``GetResponse-PDU`` message from :rfc:`1157` or a + ``Response-PDU`` from :rfc:`3416`. +:bro:id:`snmp_set_request`: :bro:type:`event` An SNMP ``SetRequest-PDU`` message from either :rfc:`1157` or :rfc:`3416`. +:bro:id:`snmp_trap`: :bro:type:`event` An SNMP ``Trap-PDU`` message from :rfc:`1157`. +:bro:id:`snmp_trapV2`: :bro:type:`event` An SNMP ``SNMPv2-Trap-PDU`` message from :rfc:`1157`. +:bro:id:`snmp_unknown_header_version`: :bro:type:`event` A datagram with an unknown SNMP version. +:bro:id:`snmp_unknown_pdu`: :bro:type:`event` An SNMP PDU message of unknown type. +:bro:id:`snmp_unknown_scoped_pdu`: :bro:type:`event` An SNMPv3 ``ScopedPDUData`` of unknown type (neither plaintext or + an encrypted PDU was in the datagram). +======================================================== ========================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: snmp_encrypted_pdu + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`) + + An SNMPv3 encrypted PDU message. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + +.. bro:id:: snmp_get_bulk_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::BulkPDU`) + + An SNMP ``GetBulkRequest-PDU`` message from :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_get_next_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``GetNextRequest-PDU`` message from either :rfc:`1157` or + :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_get_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``GetRequest-PDU`` message from either :rfc:`1157` or :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_inform_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``InformRequest-PDU`` message from :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_report + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``Report-PDU`` message from :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_response + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``GetResponse-PDU`` message from :rfc:`1157` or a + ``Response-PDU`` from :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_set_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``SetRequest-PDU`` message from either :rfc:`1157` or :rfc:`3416`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_trap + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::TrapPDU`) + + An SNMP ``Trap-PDU`` message from :rfc:`1157`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_trapV2 + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, pdu: :bro:type:`SNMP::PDU`) + + An SNMP ``SNMPv2-Trap-PDU`` message from :rfc:`1157`. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :pdu: An SNMP PDU data structure. + +.. bro:id:: snmp_unknown_header_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, version: :bro:type:`count`) + + A datagram with an unknown SNMP version. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :version: The value of the unknown SNMP version. + +.. bro:id:: snmp_unknown_pdu + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, tag: :bro:type:`count`) + + An SNMP PDU message of unknown type. + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :tag: The tag of the unknown SNMP PDU. + +.. bro:id:: snmp_unknown_scoped_pdu + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, header: :bro:type:`SNMP::Header`, tag: :bro:type:`count`) + + An SNMPv3 ``ScopedPDUData`` of unknown type (neither plaintext or + an encrypted PDU was in the datagram). + + + :c: The connection over which the SNMP datagram is sent. + + + :is_orig: The endpoint which sent the SNMP datagram. + + + :header: SNMP version-dependent data that precedes PDU data in the top-level + SNMP message structure. + + + :tag: The tag of the unknown SNMP PDU scope. + + diff --git a/doc/scripts/base/bif/plugins/Bro_SNMP.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SNMP.types.bif.bro.rst new file mode 100644 index 0000000000..7cdf5c16ab --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SNMP.types.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SNMP.types.bif.bro +======================================= +.. bro:namespace:: GLOBAL +.. bro:namespace:: SNMP + + +:Namespaces: GLOBAL, SNMP + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_SOCKS.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SOCKS.events.bif.bro.rst new file mode 100644 index 0000000000..c43366cd3a --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SOCKS.events.bif.bro.rst @@ -0,0 +1,99 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SOCKS.events.bif.bro +========================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================================= =========================================================================== +:bro:id:`socks_login_userpass_reply`: :bro:type:`event` Generated when a SOCKS server replies to a username/password login attempt. +:bro:id:`socks_login_userpass_request`: :bro:type:`event` Generated when a SOCKS client performs username and password based login. +:bro:id:`socks_reply`: :bro:type:`event` Generated when a SOCKS reply is analyzed. +:bro:id:`socks_request`: :bro:type:`event` Generated when a SOCKS request is analyzed. +========================================================= =========================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: socks_login_userpass_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, code: :bro:type:`count`) + + Generated when a SOCKS server replies to a username/password login attempt. + + + :c: The parent connection of the proxy. + + + :code: The response code for the attempted login. + +.. bro:id:: socks_login_userpass_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, user: :bro:type:`string`, password: :bro:type:`string`) + + Generated when a SOCKS client performs username and password based login. + + + :c: The parent connection of the proxy. + + + :user: The given username. + + + :password: The given password. + +.. bro:id:: socks_reply + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`count`, reply: :bro:type:`count`, sa: :bro:type:`SOCKS::Address`, p: :bro:type:`port`) + + Generated when a SOCKS reply is analyzed. + + + :c: The parent connection of the proxy. + + + :version: The version of SOCKS this message used. + + + :reply: The status reply from the server. + + + :sa: The address that the server sent the traffic to. + + + :p: The destination port for the proxied traffic. + +.. bro:id:: socks_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`count`, request_type: :bro:type:`count`, sa: :bro:type:`SOCKS::Address`, p: :bro:type:`port`, user: :bro:type:`string`) + + Generated when a SOCKS request is analyzed. + + + :c: The parent connection of the proxy. + + + :version: The version of SOCKS this message used. + + + :request_type: The type of the request. + + + :sa: Address that the tunneled traffic should be sent to. + + + :p: The destination port for the proxied traffic. + + + :user: Username given for the SOCKS connection. This is not yet implemented + for SOCKSv5. + + diff --git a/doc/scripts/base/bif/plugins/Bro_SQLiteReader.sqlite.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SQLiteReader.sqlite.bif.bro.rst new file mode 100644 index 0000000000..05deb4e8b5 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SQLiteReader.sqlite.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SQLiteReader.sqlite.bif.bro +================================================ +.. bro:namespace:: GLOBAL +.. bro:namespace:: InputSQLite + + +:Namespaces: GLOBAL, InputSQLite + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_SQLiteWriter.sqlite.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SQLiteWriter.sqlite.bif.bro.rst new file mode 100644 index 0000000000..a99e8af803 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SQLiteWriter.sqlite.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SQLiteWriter.sqlite.bif.bro +================================================ +.. bro:namespace:: GLOBAL +.. bro:namespace:: LogSQLite + + +:Namespaces: GLOBAL, LogSQLite + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_SSH.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SSH.events.bif.bro.rst new file mode 100644 index 0000000000..66b4ddef05 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SSH.events.bif.bro.rst @@ -0,0 +1,330 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SSH.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================== ================================================================== +:bro:id:`ssh1_server_host_key`: :bro:type:`event` During the :abbr:`SSH (Secure Shell)` key exchange, the server + supplies its public host key. +:bro:id:`ssh2_dh_server_params`: :bro:type:`event` Generated if the connection uses a Diffie-Hellman Group Exchange + key exchange method. +:bro:id:`ssh2_ecc_key`: :bro:type:`event` The :abbr:`ECDH (Elliptic Curve Diffie-Hellman)` and + :abbr:`ECMQV (Elliptic Curve Menezes-Qu-Vanstone)` key exchange + algorithms use two ephemeral key pairs to generate a shared + secret. +:bro:id:`ssh2_gss_error`: :bro:type:`event` In the event of a GSS-API error on the server, the server MAY send + send an error message with some additional details. +:bro:id:`ssh2_server_host_key`: :bro:type:`event` During the :abbr:`SSH (Secure Shell)` key exchange, the server + supplies its public host key. +:bro:id:`ssh_auth_attempted`: :bro:type:`event` This event is generated when an :abbr:`SSH (Secure Shell)` + connection was determined to have had an authentication attempt. +:bro:id:`ssh_auth_successful`: :bro:type:`event` This event is generated when an :abbr:`SSH (Secure Shell)` + connection was determined to have had a successful + authentication. +:bro:id:`ssh_capabilities`: :bro:type:`event` During the initial :abbr:`SSH (Secure Shell)` key exchange, each + endpoint lists the algorithms that it supports, in order of + preference. +:bro:id:`ssh_client_version`: :bro:type:`event` An :abbr:`SSH (Secure Shell)` Protocol Version Exchange message + from the client. +:bro:id:`ssh_encrypted_packet`: :bro:type:`event` This event is generated when an :abbr:`SSH (Secure Shell)` + encrypted packet is seen. +:bro:id:`ssh_server_version`: :bro:type:`event` An :abbr:`SSH (Secure Shell)` Protocol Version Exchange message + from the server. +================================================== ================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: ssh1_server_host_key + + :Type: :bro:type:`event` (c: :bro:type:`connection`, p: :bro:type:`string`, e: :bro:type:`string`) + + During the :abbr:`SSH (Secure Shell)` key exchange, the server + supplies its public host key. This event is generated when the + appropriate key exchange message is seen for SSH1. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :p: The prime for the server's public host key. + + + :e: The exponent for the serer's public host key. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh2_dh_server_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, p: :bro:type:`string`, q: :bro:type:`string`) + + Generated if the connection uses a Diffie-Hellman Group Exchange + key exchange method. This event contains the server DH parameters, + which are sent in the SSH_MSG_KEY_DH_GEX_GROUP message as defined in + :rfc:`4419#section-3`. + + + :c: The connection. + + + :p: The DH prime modulus. + + + :q: The DH generator. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh1_server_host_key ssh_server_host_key ssh_encrypted_packet + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh2_ecc_key + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, q: :bro:type:`string`) + + The :abbr:`ECDH (Elliptic Curve Diffie-Hellman)` and + :abbr:`ECMQV (Elliptic Curve Menezes-Qu-Vanstone)` key exchange + algorithms use two ephemeral key pairs to generate a shared + secret. This event is generated when either the client's or + server's ephemeral public key is seen. For more information, see: + :rfc:`5656#section-4`. + + + :c: The connection + + + :is_orig: Did this message come from the originator? + + + :q: The ephemeral public key + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh1_server_host_key ssh_server_host_key ssh_encrypted_packet + ssh2_dh_server_params ssh2_gss_error + +.. bro:id:: ssh2_gss_error + + :Type: :bro:type:`event` (c: :bro:type:`connection`, major_status: :bro:type:`count`, minor_status: :bro:type:`count`, err_msg: :bro:type:`string`) + + In the event of a GSS-API error on the server, the server MAY send + send an error message with some additional details. This event is + generated when such an error message is seen. For more information, + see :rfc:`4462#section-2.1`. + + + :c: The connection. + + + :major_status: GSS-API major status code. + + + :minor_status: GSS-API minor status code. + + + :err_msg: Detailed human-readable error message + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh1_server_host_key ssh_server_host_key ssh_encrypted_packet + ssh2_dh_server_params ssh2_ecc_key + +.. bro:id:: ssh2_server_host_key + + :Type: :bro:type:`event` (c: :bro:type:`connection`, key: :bro:type:`string`) + + During the :abbr:`SSH (Secure Shell)` key exchange, the server + supplies its public host key. This event is generated when the + appropriate key exchange message is seen for SSH2. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :key: The server's public host key. Note that this is the public key + itself, and not just the fingerprint or hash. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh1_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh_auth_attempted + + :Type: :bro:type:`event` (c: :bro:type:`connection`, authenticated: :bro:type:`bool`) + + This event is generated when an :abbr:`SSH (Secure Shell)` + connection was determined to have had an authentication attempt. + This determination is based on packet size analysis, and errs + on the side of caution - that is, if there's any doubt about + whether or not an authenication attempt occured, this event is + *not* raised. + + At this point in the protocol, all we can determine is whether + or not the user is authenticated. We don't know if the particular + attempt succeeded or failed, since some servers require multiple + authentications (e.g. require both a password AND a pubkey), and + could return an authentication failed message which is marked + as a partial success. + + This event will often be raised multiple times per connection. + In almost all connections, it will be raised once unless + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :authenticated: This is true if the analyzer detected a + successful connection from the authentication attempt. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_capabilities ssh2_server_host_key ssh1_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh_auth_successful + + :Type: :bro:type:`event` (c: :bro:type:`connection`, auth_method_none: :bro:type:`bool`) + + This event is generated when an :abbr:`SSH (Secure Shell)` + connection was determined to have had a successful + authentication. This determination is based on packet size + analysis, and errs on the side of caution - that is, if there's any + doubt about the authentication success, this event is *not* raised. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :auth_method_none: This is true if the analyzer detected a + successful connection before any authentication challenge. The + :abbr:`SSH (Secure Shell)` protocol provides a mechanism for + unauthenticated access, which some servers support. + + .. bro:see:: ssh_server_version ssh_client_version ssh_auth_failed + ssh_auth_result ssh_auth_attempted ssh_capabilities + ssh2_server_host_key ssh1_server_host_key ssh_server_host_key + ssh_encrypted_packet ssh2_dh_server_params ssh2_gss_error + ssh2_ecc_key + +.. bro:id:: ssh_capabilities + + :Type: :bro:type:`event` (c: :bro:type:`connection`, cookie: :bro:type:`string`, capabilities: :bro:type:`SSH::Capabilities`) + + During the initial :abbr:`SSH (Secure Shell)` key exchange, each + endpoint lists the algorithms that it supports, in order of + preference. This event is generated for each endpoint, when the + SSH_MSG_KEXINIT message is seen. See :rfc:`4253#section-7.1` for + details. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :cookie: The SSH_MSG_KEXINIT cookie - a random value generated by + the sender. + + + :capabilities: The list of algorithms and languages that the sender + advertises support for, in order of preference. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh2_server_host_key ssh1_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh_client_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`string`) + + An :abbr:`SSH (Secure Shell)` Protocol Version Exchange message + from the client. This contains an identification string that's used + for version identification. See :rfc:`4253#section-4.2` for + details. + + + :c: The connection over which the message was sent. + + + :version: The identification string + + .. bro:see:: ssh_server_version ssh_auth_successful ssh_auth_failed + ssh_auth_result ssh_auth_attempted ssh_capabilities + ssh2_server_host_key ssh1_server_host_key ssh_server_host_key + ssh_encrypted_packet ssh2_dh_server_params ssh2_gss_error + ssh2_ecc_key + +.. bro:id:: ssh_encrypted_packet + + :Type: :bro:type:`event` (c: :bro:type:`connection`, orig: :bro:type:`bool`, len: :bro:type:`count`) + + This event is generated when an :abbr:`SSH (Secure Shell)` + encrypted packet is seen. This event is not handled by default, but + is provided for heuristic analysis scripts. Note that you have to set + :bro:id:`SSH::disable_analyzer_after_detection` to false to use this + event. This carries a performance penalty. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :orig: Whether the packet was sent by the originator of the TCP + connection. + + + :len: The length of the :abbr:`SSH (Secure Shell)` payload, in + bytes. Note that this ignores reassembly, as this is unknown. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh1_server_host_key ssh_server_host_key ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh_server_version + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`string`) + + An :abbr:`SSH (Secure Shell)` Protocol Version Exchange message + from the server. This contains an identification string that's used + for version identification. See :rfc:`4253#section-4.2` for + details. + + + :c: The connection over which the message was sent. + + + :version: The identification string + + .. bro:see:: ssh_client_version ssh_auth_successful ssh_auth_failed + ssh_auth_result ssh_auth_attempted ssh_capabilities + ssh2_server_host_key ssh1_server_host_key ssh_server_host_key + ssh_encrypted_packet ssh2_dh_server_params ssh2_gss_error + ssh2_ecc_key + + diff --git a/doc/scripts/base/bif/plugins/Bro_SSH.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SSH.types.bif.bro.rst new file mode 100644 index 0000000000..0a67703277 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SSH.types.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SSH.types.bif.bro +====================================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: SSH + + +:Namespaces: GLOBAL, SSH + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_SSL.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SSL.events.bif.bro.rst new file mode 100644 index 0000000000..fb912c3f53 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SSL.events.bif.bro.rst @@ -0,0 +1,816 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SSL.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +================================================================================= ================================================================================= +:bro:id:`ssl_alert`: :bro:type:`event` Generated for SSL/TLS alert records. +:bro:id:`ssl_change_cipher_spec`: :bro:type:`event` This event is raised when a SSL/TLS ChangeCipherSpec message is encountered + before encryption begins. +:bro:id:`ssl_client_hello`: :bro:type:`event` Generated for an SSL/TLS client's initial *hello* message. +:bro:id:`ssl_dh_client_params`: :bro:type:`event` Generated if a client uses a DH-anon or DHE cipher suite. +:bro:id:`ssl_dh_server_params`: :bro:type:`event` Generated if a server uses a DH-anon or DHE cipher suite. +:bro:id:`ssl_ecdh_client_params`: :bro:type:`event` Generated if a client uses an ECDH-anon or ECDHE cipher suite. +:bro:id:`ssl_ecdh_server_params`: :bro:type:`event` Generated if a server uses an ECDH-anon or ECDHE cipher suite using a named curve + This event contains the named curve name and the server ECDH parameters contained + in the ServerKeyExchange message as defined in :rfc:`4492`. +:bro:id:`ssl_encrypted_data`: :bro:type:`event` Generated for SSL/TLS messages that are sent after session encryption + started. +:bro:id:`ssl_established`: :bro:type:`event` Generated at the end of an SSL/TLS handshake. +:bro:id:`ssl_extension`: :bro:type:`event` Generated for SSL/TLS extensions seen in an initial handshake. +:bro:id:`ssl_extension_application_layer_protocol_negotiation`: :bro:type:`event` Generated for an SSL/TLS Application-Layer Protocol Negotiation extension. +:bro:id:`ssl_extension_ec_point_formats`: :bro:type:`event` Generated for an SSL/TLS Supported Point Formats extension. +:bro:id:`ssl_extension_elliptic_curves`: :bro:type:`event` Generated for an SSL/TLS Elliptic Curves extension. +:bro:id:`ssl_extension_key_share`: :bro:type:`event` Generated for a Key Share extension. +:bro:id:`ssl_extension_psk_key_exchange_modes`: :bro:type:`event` Generated for an TLS Pre-Shared Key Exchange Modes extension. +:bro:id:`ssl_extension_server_name`: :bro:type:`event` Generated for an SSL/TLS Server Name extension. +:bro:id:`ssl_extension_signature_algorithm`: :bro:type:`event` Generated for an Signature Algorithms extension. +:bro:id:`ssl_extension_signed_certificate_timestamp`: :bro:type:`event` Generated for the signed_certificate_timestamp TLS extension as defined in + :rfc:`6962`. +:bro:id:`ssl_extension_supported_versions`: :bro:type:`event` Generated for an TLS Supported Versions extension. +:bro:id:`ssl_handshake_message`: :bro:type:`event` This event is raised for each unencrypted SSL/TLS handshake message. +:bro:id:`ssl_heartbeat`: :bro:type:`event` Generated for SSL/TLS heartbeat messages that are sent before session + encryption starts. +:bro:id:`ssl_plaintext_data`: :bro:type:`event` Generated for SSL/TLS messages that are sent before full session encryption + starts. +:bro:id:`ssl_rsa_client_pms`: :bro:type:`event` Generated if a client uses RSA key exchange. +:bro:id:`ssl_server_curve`: :bro:type:`event` :bro:attr:`&deprecated` Generated if a named curve is chosen by the server for an SSL/TLS connection. +:bro:id:`ssl_server_hello`: :bro:type:`event` Generated for an SSL/TLS server's initial *hello* message. +:bro:id:`ssl_server_signature`: :bro:type:`event` Generated if a server uses a non-anonymous DHE or ECDHE cipher suite. +:bro:id:`ssl_session_ticket_handshake`: :bro:type:`event` Generated for SSL/TLS handshake messages that are a part of the + stateless-server session resumption mechanism. +:bro:id:`ssl_stapled_ocsp`: :bro:type:`event` This event contains the OCSP response contained in a Certificate Status Request + message, when the client requested OCSP stapling and the server supports it. +================================================================================= ================================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: ssl_alert + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, level: :bro:type:`count`, desc: :bro:type:`count`) + + Generated for SSL/TLS alert records. SSL/TLS sessions start with an + unencrypted handshake, and Bro extracts as much information out of that as + it can. If during that handshake, an endpoint encounters a fatal error, it + sends an *alert* record, that in turn triggers this event. After an *alert*, + any endpoint may close the connection immediately. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :level: The severity level, as sent in the *alert*. The values are defined as + part of the SSL/TLS protocol. + + + :desc: A numerical value identifying the cause of the *alert*. The values are + defined as part of the SSL/TLS protocol. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_session_ticket_handshake + +.. bro:id:: ssl_change_cipher_spec + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + This event is raised when a SSL/TLS ChangeCipherSpec message is encountered + before encryption begins. Traffic will be encrypted following this message. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + .. bro:see:: ssl_alert ssl_established ssl_extension ssl_server_hello + ssl_session_ticket_handshake x509_certificate ssl_client_hello + ssl_handshake_message + +.. bro:id:: ssl_client_hello + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`count`, record_version: :bro:type:`count`, possible_ts: :bro:type:`time`, client_random: :bro:type:`string`, session_id: :bro:type:`string`, ciphers: :bro:type:`index_vec`, comp_methods: :bro:type:`index_vec`) + + Generated for an SSL/TLS client's initial *hello* message. SSL/TLS sessions + start with an unencrypted handshake, and Bro extracts as much information out + of that as it can. This event provides access to the initial information + sent by the client. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + + :version: The protocol version as extracted from the client's message. The + values are standardized as part of the SSL/TLS protocol. The + :bro:id:`SSL::version_strings` table maps them to descriptive names. + + + :record_version: TLS version given in the record layer of the message. + Set to 0 for SSLv2. + + + :possible_ts: The current time as sent by the client. Note that SSL/TLS does + not require clocks to be set correctly, so treat with care. + + + :session_id: The session ID sent by the client (if any). + + + :client_random: The random value sent by the client. For version 2 connections, + the client challenge is returned. + + + :ciphers: The list of ciphers the client offered to use. The values are + standardized as part of the SSL/TLS protocol. The + :bro:id:`SSL::cipher_desc` table maps them to descriptive names. + + + :comp_methods: The list of compression methods that the client offered to use. + This value is not sent in TLSv1.3 or SSLv2. + + .. bro:see:: ssl_alert ssl_established ssl_extension ssl_server_hello + ssl_session_ticket_handshake x509_certificate ssl_handshake_message + ssl_change_cipher_spec + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms + +.. bro:id:: ssl_dh_client_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, Yc: :bro:type:`string`) + + Generated if a client uses a DH-anon or DHE cipher suite. This event contains + the client DH parameters contained in the ClientKeyExchange message as + defined in :rfc:`5246`. + + + :c: The connection. + + + :Yc: The client's DH public key. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_ecdh_server_params ssl_ecdh_client_params ssl_rsa_client_pms + +.. bro:id:: ssl_dh_server_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, p: :bro:type:`string`, q: :bro:type:`string`, Ys: :bro:type:`string`) + + Generated if a server uses a DH-anon or DHE cipher suite. This event contains + the server DH parameters, contained in the ServerKeyExchange message as + defined in :rfc:`5246`. + + + :c: The connection. + + + :p: The DH prime modulus. + + + :q: The DH generator. + + + :Ys: The server's DH public key. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms + +.. bro:id:: ssl_ecdh_client_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, point: :bro:type:`string`) + + Generated if a client uses an ECDH-anon or ECDHE cipher suite. This event + contains the client ECDH public value contained in the ClientKeyExchange + message as defined in :rfc:`4492`. + + + :c: The connection. + + + :point: The client's ECDH public key. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_dh_client_params ssl_ecdh_server_params ssl_rsa_client_pms + +.. bro:id:: ssl_ecdh_server_params + + :Type: :bro:type:`event` (c: :bro:type:`connection`, curve: :bro:type:`count`, point: :bro:type:`string`) + + Generated if a server uses an ECDH-anon or ECDHE cipher suite using a named curve + This event contains the named curve name and the server ECDH parameters contained + in the ServerKeyExchange message as defined in :rfc:`4492`. + + + :c: The connection. + + + :curve: The curve parameters. + + + :point: The server's ECDH public key. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_dh_client_params ssl_ecdh_client_params ssl_rsa_client_pms + +.. bro:id:: ssl_encrypted_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, record_version: :bro:type:`count`, content_type: :bro:type:`count`, length: :bro:type:`count`) + + Generated for SSL/TLS messages that are sent after session encryption + started. + + Note that :bro:id:`SSL::disable_analyzer_after_detection` has to be changed + from its default to false for this event to be generated. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :record_version: TLS version given in the record layer of the message. + Set to 0 for SSLv2. + + + :content_type: message type as reported by TLS session layer. Not populated for + SSLv2. + + + :length: length of the entire message. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_alert ssl_heartbeat + +.. bro:id:: ssl_established + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated at the end of an SSL/TLS handshake. SSL/TLS sessions start with + an unencrypted handshake, and Bro extracts as much information out of that + as it can. This event signals the time when an SSL/TLS has finished the + handshake and its endpoints consider it as fully established. Typically, + everything from now on will be encrypted. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + .. bro:see:: ssl_alert ssl_client_hello ssl_extension ssl_server_hello + ssl_session_ticket_handshake x509_certificate + +.. bro:id:: ssl_extension + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, code: :bro:type:`count`, val: :bro:type:`string`) + + Generated for SSL/TLS extensions seen in an initial handshake. SSL/TLS + sessions start with an unencrypted handshake, and Bro extracts as much + information out of that as it can. This event provides access to any + extensions either side sends as part of an extended *hello* message. + + Note that Bro offers more specialized events for a few extensions. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :code: The numerical code of the extension. The values are standardized as + part of the SSL/TLS protocol. The :bro:id:`SSL::extensions` table maps + them to descriptive names. + + + :val: The raw extension value that was sent in the message. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension_ec_point_formats + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_extension_signature_algorithm ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + +.. bro:id:: ssl_extension_application_layer_protocol_negotiation + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, protocols: :bro:type:`string_vec`) + + Generated for an SSL/TLS Application-Layer Protocol Negotiation extension. + This TLS extension is defined in draft-ietf-tls-applayerprotoneg and sent in + the initial handshake. It contains the list of client supported application + protocols by the client or the server, respectively. + + At the moment it is mostly used to negotiate the use of SPDY / HTTP2. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :protocols: List of supported application layer protocols. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_server_name ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_extension_signed_certificate_timestamp + +.. bro:id:: ssl_extension_ec_point_formats + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, point_formats: :bro:type:`index_vec`) + + Generated for an SSL/TLS Supported Point Formats extension. This TLS extension + is defined in :rfc:`4492` and sent by the client and/or server in the initial + handshake. It gives the list of elliptic curve point formats supported by the + client. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :point_formats: List of supported point formats. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_server_curve ssl_extension_signature_algorithm + ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms ssl_server_signature + +.. bro:id:: ssl_extension_elliptic_curves + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, curves: :bro:type:`index_vec`) + + Generated for an SSL/TLS Elliptic Curves extension. This TLS extension is + defined in :rfc:`4492` and sent by the client in the initial handshake. It + gives the list of elliptic curves supported by the client. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :curves: List of supported elliptic curves. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_ec_point_formats ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_server_curve ssl_extension_signature_algorithm + ssl_extension_key_share ssl_rsa_client_pms ssl_server_signature + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + +.. bro:id:: ssl_extension_key_share + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, curves: :bro:type:`index_vec`) + + Generated for a Key Share extension. This TLS extension is defined in TLS1.3-draft16 + and sent by the client and the server in the initial handshake. It gives the list of + named groups supported by the client and chosen by the server. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :curves: List of supported/chosen named groups. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_server_curve + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms ssl_server_signature + +.. bro:id:: ssl_extension_psk_key_exchange_modes + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, modes: :bro:type:`index_vec`) + + Generated for an TLS Pre-Shared Key Exchange Modes extension. This TLS extension is defined + in the TLS 1.3 rfc and sent by the client in the initial handshake. It contains the + list of Pre-Shared Key Exchange Modes that it supports. + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :versions: List of supported Pre-Shared Key Exchange Modes. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_application_layer_protocol_negotiation + ssl_extension_key_share ssl_extension_server_name + ssl_extension_supported_versions ssl_extension_signed_certificate_timestamp + +.. bro:id:: ssl_extension_server_name + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, names: :bro:type:`string_vec`) + + Generated for an SSL/TLS Server Name extension. This SSL/TLS extension is + defined in :rfc:`3546` and sent by the client in the initial handshake. It + contains the name of the server it is contacting. This information can be + used by the server to choose the correct certificate for the host the client + wants to contact. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :names: A list of server names (DNS hostnames). + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_application_layer_protocol_negotiation + ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_extension_signed_certificate_timestamp + +.. bro:id:: ssl_extension_signature_algorithm + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, signature_algorithms: :bro:type:`signature_and_hashalgorithm_vec`) + + Generated for an Signature Algorithms extension. This TLS extension + is defined in :rfc:`5246` and sent by the client in the initial + handshake. It gives the list of signature and hash algorithms supported by the + client. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :signature_algorithms: List of supported signature and hash algorithm pairs. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_server_curve ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms ssl_server_signature + +.. bro:id:: ssl_extension_signed_certificate_timestamp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, version: :bro:type:`count`, logid: :bro:type:`string`, timestamp: :bro:type:`count`, signature_and_hashalgorithm: :bro:type:`SSL::SignatureAndHashAlgorithm`, signature: :bro:type:`string`) + + Generated for the signed_certificate_timestamp TLS extension as defined in + :rfc:`6962`. The extension is used to transmit signed proofs that are + used for Certificate Transparency. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :version: the version of the protocol to which the SCT conforms. Always + should be 0 (representing version 1) + + + :logid: 32 bit key id + + + :timestamp: the NTP Time when the entry was logged measured since + the epoch, ignoring leap seconds, in milliseconds. + + + :signature_and_hashalgorithm: signature and hash algorithm used for the + digitally_signed struct + + + :signature: signature part of the digitally_signed struct + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_server_name ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_extension_application_layer_protocol_negotiation + x509_ocsp_ext_signed_certificate_timestamp sct_verify + +.. bro:id:: ssl_extension_supported_versions + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, versions: :bro:type:`index_vec`) + + Generated for an TLS Supported Versions extension. This TLS extension + is defined in the TLS 1.3 rfc and sent by the client in the initial handshake. + It contains the TLS versions that it supports. This informaion can be used by + the server to choose the best TLS version o use. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :versions: List of supported TLS versions. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_ec_point_formats + ssl_extension_application_layer_protocol_negotiation + ssl_extension_key_share ssl_extension_server_name + ssl_extension_psk_key_exchange_modes ssl_extension_signed_certificate_timestamp + +.. bro:id:: ssl_handshake_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg_type: :bro:type:`count`, length: :bro:type:`count`) + + This event is raised for each unencrypted SSL/TLS handshake message. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :msg_type: Type of the handshake message that was seen. + + + :length: Length of the handshake message that was seen. + + .. bro:see:: ssl_alert ssl_established ssl_extension ssl_server_hello + ssl_session_ticket_handshake x509_certificate ssl_client_hello + ssl_change_cipher_spec + +.. bro:id:: ssl_heartbeat + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, length: :bro:type:`count`, heartbeat_type: :bro:type:`count`, payload_length: :bro:type:`count`, payload: :bro:type:`string`) + + Generated for SSL/TLS heartbeat messages that are sent before session + encryption starts. Generally heartbeat messages should rarely be seen in + normal TLS traffic. Heartbeats are described in :rfc:`6520`. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :length: length of the entire heartbeat message. + + + :heartbeat_type: type of the heartbeat message. Per RFC, 1 = request, 2 = response. + + + :payload_length: length of the payload of the heartbeat message, according to + packet field. + + + :payload: payload contained in the heartbeat message. Size can differ from + payload_length, if payload_length and actual packet length disagree. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_alert ssl_encrypted_data + +.. bro:id:: ssl_plaintext_data + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, record_version: :bro:type:`count`, content_type: :bro:type:`count`, length: :bro:type:`count`) + + Generated for SSL/TLS messages that are sent before full session encryption + starts. Note that "full encryption" is a bit fuzzy, especially for TLSv1.3; + here this event will be raised for early packets that are already using + pre-encryption. # This event is also used by Bro internally to determine if + the connection has been completely setup. This is necessary as TLS 1.3 does + not have CCS anymore. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :record_version: TLS version given in the record layer of the message. + Set to 0 for SSLv2. + + + :content_type: message type as reported by TLS session layer. Not populated for + SSLv2. + + + :length: length of the entire message. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_alert ssl_heartbeat + +.. bro:id:: ssl_rsa_client_pms + + :Type: :bro:type:`event` (c: :bro:type:`connection`, pms: :bro:type:`string`) + + Generated if a client uses RSA key exchange. This event contains the client + encrypted pre-master secret which is encrypted using the public key of the + server's certificate as defined in :rfc:`5246`. + + + :c: The connection. + + + :pms: The encrypted pre-master secret. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_server_signature + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + +.. bro:id:: ssl_server_curve + + :Type: :bro:type:`event` (c: :bro:type:`connection`, curve: :bro:type:`count`) + :Attributes: :bro:attr:`&deprecated` + + Generated if a named curve is chosen by the server for an SSL/TLS connection. + The curve is sent by the server in the ServerKeyExchange message as defined + in :rfc:`4492`, in case an ECDH or ECDHE cipher suite is chosen. + + + :c: The connection. + + + :curve: The curve. + + .. note:: This event is deprecated and superseded by the ssl_ecdh_server_params + event. This event will be removed in a future version of Bro. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_extension + ssl_extension_elliptic_curves ssl_extension_application_layer_protocol_negotiation + ssl_extension_server_name ssl_extension_key_share + ssl_extension_psk_key_exchange_modes ssl_extension_supported_versions + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms ssl_server_signature + +.. bro:id:: ssl_server_hello + + :Type: :bro:type:`event` (c: :bro:type:`connection`, version: :bro:type:`count`, record_version: :bro:type:`count`, possible_ts: :bro:type:`time`, server_random: :bro:type:`string`, session_id: :bro:type:`string`, cipher: :bro:type:`count`, comp_method: :bro:type:`count`) + + Generated for an SSL/TLS server's initial *hello* message. SSL/TLS sessions + start with an unencrypted handshake, and Bro extracts as much information out + of that as it can. This event provides access to the initial information + sent by the client. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + + :version: The protocol version as extracted from the server's message. + The values are standardized as part of the SSL/TLS protocol. The + :bro:id:`SSL::version_strings` table maps them to descriptive names. + + + :record_version: TLS version given in the record layer of the message. + Set to 0 for SSLv2. + + + :possible_ts: The current time as sent by the server. Note that SSL/TLS does + not require clocks to be set correctly, so treat with care. This value + is not sent in TLSv1.3. + + + :session_id: The session ID as sent back by the server (if any). This value is not + sent in TLSv1.3. + + + :server_random: The random value sent by the server. For version 2 connections, + the connection-id is returned. + + + :cipher: The cipher chosen by the server. The values are standardized as part + of the SSL/TLS protocol. The :bro:id:`SSL::cipher_desc` table maps + them to descriptive names. + + + :comp_method: The compression method chosen by the client. The values are + standardized as part of the SSL/TLS protocol. This value is not + sent in TLSv1.3 or SSLv2. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_extension + ssl_session_ticket_handshake x509_certificate ssl_server_curve + ssl_dh_server_params ssl_handshake_message ssl_change_cipher_spec + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + ssl_rsa_client_pms + +.. bro:id:: ssl_server_signature + + :Type: :bro:type:`event` (c: :bro:type:`connection`, signature_and_hashalgorithm: :bro:type:`SSL::SignatureAndHashAlgorithm`, signature: :bro:type:`string`) + + Generated if a server uses a non-anonymous DHE or ECDHE cipher suite. This event + contains the server signature over the key exchange parameters contained in + the ServerKeyExchange message as defined in :rfc:`4492` and :rfc:`5246`. + + + :c: The connection. + + + :signature_and_hashalgorithm: signature and hash algorithm used for the + digitally_signed struct. This field is only present + starting with TLSv1.2 and DTLSv1.2. Earlier versions + used a hardcoded hash algorithm. For protocol versions + below D(TLS)v1.2 this field is filled with an dummy + value of 256. + + + :signature: Signature part of the digitally_signed struct. The private key + corresponding to the certified public key in the server's certificate + message is used for signing. + + .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello + ssl_session_ticket_handshake ssl_server_curve ssl_rsa_client_pms + ssl_dh_client_params ssl_ecdh_server_params ssl_ecdh_client_params + +.. bro:id:: ssl_session_ticket_handshake + + :Type: :bro:type:`event` (c: :bro:type:`connection`, ticket_lifetime_hint: :bro:type:`count`, ticket: :bro:type:`string`) + + Generated for SSL/TLS handshake messages that are a part of the + stateless-server session resumption mechanism. SSL/TLS sessions start with + an unencrypted handshake, and Bro extracts as much information out of that + as it can. This event is raised when an SSL/TLS server passes a session + ticket to the client that can later be used for resuming the session. The + mechanism is described in :rfc:`4507`. + + See `Wikipedia `__ for + more information about the SSL/TLS protocol. + + + :c: The connection. + + + :ticket_lifetime_hint: A hint from the server about how long the ticket + should be stored by the client. + + + :ticket: The raw ticket data. + + .. bro:see:: ssl_client_hello ssl_established ssl_extension ssl_server_hello + ssl_alert + +.. bro:id:: ssl_stapled_ocsp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, response: :bro:type:`string`) + + This event contains the OCSP response contained in a Certificate Status Request + message, when the client requested OCSP stapling and the server supports it. + See description in :rfc:`6066`. + + + :c: The connection. + + + :is_orig: True if event is raised for originator side of the connection. + + + :response: OCSP data. + + diff --git a/doc/scripts/base/bif/plugins/Bro_SSL.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SSL.functions.bif.bro.rst new file mode 100644 index 0000000000..56d33e21e1 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SSL.functions.bif.bro.rst @@ -0,0 +1,34 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SSL.functions.bif.bro +========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +=================================================== ============================================================================== +:bro:id:`set_ssl_established`: :bro:type:`function` Sets if the SSL analyzer should consider the connection established (handshake + finished succesfully). +=================================================== ============================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: set_ssl_established + + :Type: :bro:type:`function` (c: :bro:type:`connection`) : :bro:type:`any` + + Sets if the SSL analyzer should consider the connection established (handshake + finished succesfully). + + + :c: The SSL connection. + + diff --git a/doc/scripts/base/bif/plugins/Bro_SSL.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SSL.types.bif.bro.rst new file mode 100644 index 0000000000..af0fbbe900 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SSL.types.bif.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SSL.types.bif.bro +====================================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: SSL + + +:Namespaces: GLOBAL, SSL + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_SteppingStone.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_SteppingStone.events.bif.bro.rst new file mode 100644 index 0000000000..d1d768a34f --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_SteppingStone.events.bif.bro.rst @@ -0,0 +1,57 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_SteppingStone.events.bif.bro +================================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=============================================== ============================================== +:bro:id:`stp_correlate_pair`: :bro:type:`event` Event internal to the stepping stone detector. +:bro:id:`stp_create_endp`: :bro:type:`event` Deprecated. +:bro:id:`stp_remove_endp`: :bro:type:`event` Event internal to the stepping stone detector. +:bro:id:`stp_remove_pair`: :bro:type:`event` Event internal to the stepping stone detector. +:bro:id:`stp_resume_endp`: :bro:type:`event` Event internal to the stepping stone detector. +=============================================== ============================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: stp_correlate_pair + + :Type: :bro:type:`event` (e1: :bro:type:`int`, e2: :bro:type:`int`) + + Event internal to the stepping stone detector. + +.. bro:id:: stp_create_endp + + :Type: :bro:type:`event` (c: :bro:type:`connection`, e: :bro:type:`int`, is_orig: :bro:type:`bool`) + + Deprecated. Will be removed. + +.. bro:id:: stp_remove_endp + + :Type: :bro:type:`event` (e: :bro:type:`int`) + + Event internal to the stepping stone detector. + +.. bro:id:: stp_remove_pair + + :Type: :bro:type:`event` (e1: :bro:type:`int`, e2: :bro:type:`int`) + + Event internal to the stepping stone detector. + +.. bro:id:: stp_resume_endp + + :Type: :bro:type:`event` (e: :bro:type:`int`) + + Event internal to the stepping stone detector. + + diff --git a/doc/scripts/base/bif/plugins/Bro_Syslog.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Syslog.events.bif.bro.rst new file mode 100644 index 0000000000..b470815629 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Syslog.events.bif.bro.rst @@ -0,0 +1,47 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Syslog.events.bif.bro +========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +=========================================== ======================================== +:bro:id:`syslog_message`: :bro:type:`event` Generated for monitored Syslog messages. +=========================================== ======================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: syslog_message + + :Type: :bro:type:`event` (c: :bro:type:`connection`, facility: :bro:type:`count`, severity: :bro:type:`count`, msg: :bro:type:`string`) + + Generated for monitored Syslog messages. + + See `Wikipedia `__ for more + information about the Syslog protocol. + + + :c: The connection record for the underlying transport-layer session/flow. + + + :facility: The "facility" included in the message. + + + :severity: The "severity" included in the message. + + + :msg: The message logged. + + .. note:: Bro currently parses only UDP syslog traffic. Support for TCP + syslog will be added soon. + + diff --git a/doc/scripts/base/bif/plugins/Bro_TCP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_TCP.events.bif.bro.rst new file mode 100644 index 0000000000..77f2829fd5 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_TCP.events.bif.bro.rst @@ -0,0 +1,495 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_TCP.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================================= ============================================================================= +:bro:id:`connection_EOF`: :bro:type:`event` Generated at the end of reassembled TCP connections. +:bro:id:`connection_SYN_packet`: :bro:type:`event` Generated for a SYN packet. +:bro:id:`connection_attempt`: :bro:type:`event` Generated for an unsuccessful connection attempt. +:bro:id:`connection_established`: :bro:type:`event` Generated when seeing a SYN-ACK packet from the responder in a TCP + handshake. +:bro:id:`connection_finished`: :bro:type:`event` Generated for a TCP connection that finished normally. +:bro:id:`connection_first_ACK`: :bro:type:`event` Generated for the first ACK packet seen for a TCP connection from + its *originator*. +:bro:id:`connection_half_finished`: :bro:type:`event` Generated when one endpoint of a TCP connection attempted to gracefully close + the connection, but the other endpoint is in the TCP_INACTIVE state. +:bro:id:`connection_partial_close`: :bro:type:`event` Generated when a previously inactive endpoint attempts to close a TCP + connection via a normal FIN handshake or an abort RST sequence. +:bro:id:`connection_pending`: :bro:type:`event` Generated for each still-open TCP connection when Bro terminates. +:bro:id:`connection_rejected`: :bro:type:`event` Generated for a rejected TCP connection. +:bro:id:`connection_reset`: :bro:type:`event` Generated when an endpoint aborted a TCP connection. +:bro:id:`contents_file_write_failure`: :bro:type:`event` Generated when failing to write contents of a TCP stream to a file. +:bro:id:`new_connection_contents`: :bro:type:`event` Generated when reassembly starts for a TCP connection. +:bro:id:`partial_connection`: :bro:type:`event` Generated for a new active TCP connection if Bro did not see the initial + handshake. +:bro:id:`tcp_contents`: :bro:type:`event` Generated for each chunk of reassembled TCP payload. +:bro:id:`tcp_multiple_checksum_errors`: :bro:type:`event` Generated if a TCP flow crosses a checksum-error threshold, per + 'C'/'c' history reporting. +:bro:id:`tcp_multiple_retransmissions`: :bro:type:`event` Generated if a TCP flow crosses a retransmission threshold, per + 'T'/'t' history reporting. +:bro:id:`tcp_multiple_zero_windows`: :bro:type:`event` Generated if a TCP flow crosses a zero-window threshold, per + 'W'/'w' history reporting. +:bro:id:`tcp_option`: :bro:type:`event` Generated for each option found in a TCP header. +:bro:id:`tcp_packet`: :bro:type:`event` Generated for every TCP packet. +:bro:id:`tcp_rexmit`: :bro:type:`event` TODO. +========================================================= ============================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: connection_EOF + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) + + Generated at the end of reassembled TCP connections. The TCP reassembler + raised the event once for each endpoint of a connection when it finished + reassembling the corresponding side of the communication. + + + :c: The connection. + + + :is_orig: True if the event is raised for the originator side. + + .. bro:see:: connection_SYN_packet connection_attempt connection_established + connection_external connection_finished connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_SYN_packet + + :Type: :bro:type:`event` (c: :bro:type:`connection`, pkt: :bro:type:`SYN_packet`) + + Generated for a SYN packet. Bro raises this event for every SYN packet seen + by its TCP analyzer. + + + :c: The connection. + + + :pkt: Information extracted from the SYN packet. + + .. bro:see:: connection_EOF connection_attempt connection_established + connection_external connection_finished connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + + .. note:: + + This event has quite low-level semantics and can potentially be expensive + to generate. It should only be used if one really needs the specific + information passed into the handler via the ``pkt`` argument. If not, + handling one of the other ``connection_*`` events is typically the + better approach. + +.. bro:id:: connection_attempt + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for an unsuccessful connection attempt. This event is raised when + an originator unsuccessfully attempted to establish a connection. + "Unsuccessful" is defined as at least :bro:id:`tcp_attempt_delay` seconds + having elapsed since the originator first sent a connection establishment + packet to the destination without seeing a reply. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_established + connection_external connection_finished connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_established + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when seeing a SYN-ACK packet from the responder in a TCP + handshake. An associated SYN packet was not seen from the originator + side if its state is not set to :bro:see:`TCP_ESTABLISHED`. + The final ACK of the handshake in response to SYN-ACK may + or may not occur later, one way to tell is to check the *history* field of + :bro:type:`connection` to see if the originator sent an ACK, indicated by + 'A' in the history string. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_external connection_finished connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_finished + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for a TCP connection that finished normally. The event is raised + when a regular FIN handshake from both endpoints was observed. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_first_ACK + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_first_ACK + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for the first ACK packet seen for a TCP connection from + its *originator*. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_half_finished connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + + .. note:: + + This event has quite low-level semantics and should be used only rarely. + +.. bro:id:: connection_half_finished + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when one endpoint of a TCP connection attempted to gracefully close + the connection, but the other endpoint is in the TCP_INACTIVE state. This can + happen due to split routing, in which Bro only sees one side of a connection. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_partial_close connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_partial_close + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a previously inactive endpoint attempts to close a TCP + connection via a normal FIN handshake or an abort RST sequence. When the + endpoint sent one of these packets, Bro waits + :bro:id:`tcp_partial_close_delay` prior to generating the event, to give + the other endpoint a chance to close the connection normally. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_pending + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + +.. bro:id:: connection_pending + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for each still-open TCP connection when Bro terminates. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_rejected connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection bro_done + +.. bro:id:: connection_rejected + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for a rejected TCP connection. This event is raised when an + originator attempted to setup a TCP connection but the responder replied + with a RST packet denying it. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_reset connection_reused connection_state_remove + connection_status_update connection_timeout scheduled_analyzer_applied + new_connection new_connection_contents partial_connection + + .. note:: + + If the responder does not respond at all, :bro:id:`connection_attempt` is + raised instead. If the responder initially accepts the connection but + aborts it later, Bro first generates :bro:id:`connection_established` + and then :bro:id:`connection_reset`. + +.. bro:id:: connection_reset + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when an endpoint aborted a TCP connection. The event is raised + when one endpoint of an established TCP connection aborted by sending a RST + packet. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reused + connection_state_remove connection_status_update connection_timeout + scheduled_analyzer_applied new_connection new_connection_contents + partial_connection + +.. bro:id:: contents_file_write_failure + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, msg: :bro:type:`string`) + + Generated when failing to write contents of a TCP stream to a file. + + + :c: The connection whose contents are being recorded. + + + :is_orig: Which side of the connection encountered a failure to write. + + + :msg: A reason or description for the failure. + + .. bro:see:: set_contents_file get_contents_file + +.. bro:id:: new_connection_contents + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when reassembly starts for a TCP connection. This event is raised + at the moment when Bro's TCP analyzer enables stream reassembly for a + connection. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_reused + connection_state_remove connection_status_update connection_timeout + scheduled_analyzer_applied new_connection partial_connection + +.. bro:id:: partial_connection + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated for a new active TCP connection if Bro did not see the initial + handshake. This event is raised when Bro has observed traffic from each + endpoint, but the activity did not begin with the usual connection + establishment. + + + :c: The connection. + + .. bro:see:: connection_EOF connection_SYN_packet connection_attempt + connection_established connection_external connection_finished + connection_first_ACK connection_half_finished connection_partial_close + connection_pending connection_rejected connection_reset connection_reused + connection_state_remove connection_status_update connection_timeout + scheduled_analyzer_applied new_connection new_connection_contents + + +.. bro:id:: tcp_contents + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, seq: :bro:type:`count`, contents: :bro:type:`string`) + + Generated for each chunk of reassembled TCP payload. When content delivery is + enabled for a TCP connection (via :bro:id:`tcp_content_delivery_ports_orig`, + :bro:id:`tcp_content_delivery_ports_resp`, + :bro:id:`tcp_content_deliver_all_orig`, + :bro:id:`tcp_content_deliver_all_resp`), this event is raised for each chunk + of in-order payload reconstructed from the packet stream. Note that this + event is potentially expensive if many connections carry significant amounts + of data as then all that data needs to be passed on to the scripting layer. + + + :c: The connection the payload is part of. + + + :is_orig: True if the packet was sent by the connection's originator. + + + :seq: The sequence number corresponding to the first byte of the payload + chunk. + + + :contents: The raw payload, which will be non-empty. + + .. bro:see:: tcp_packet tcp_option tcp_rexmit + tcp_content_delivery_ports_orig tcp_content_delivery_ports_resp + tcp_content_deliver_all_resp tcp_content_deliver_all_orig + + .. note:: + + The payload received by this event is the same that is also passed into + application-layer protocol analyzers internally. Subsequent invocations of + this event for the same connection receive non-overlapping in-order chunks + of its TCP payload stream. It is however undefined what size each chunk + has; while Bro passes the data on as soon as possible, specifics depend on + network-level effects such as latency, acknowledgements, reordering, etc. + +.. bro:id:: tcp_multiple_checksum_errors + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, threshold: :bro:type:`count`) + + Generated if a TCP flow crosses a checksum-error threshold, per + 'C'/'c' history reporting. + + + :c: The connection record for the TCP connection. + + + :is_orig: True if the event is raised for the originator side. + + + :threshold: the threshold that was crossed + + .. bro:see:: udp_multiple_checksum_errors + tcp_multiple_zero_windows tcp_multiple_retransmissions + +.. bro:id:: tcp_multiple_retransmissions + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, threshold: :bro:type:`count`) + + Generated if a TCP flow crosses a retransmission threshold, per + 'T'/'t' history reporting. + + + :c: The connection record for the TCP connection. + + + :is_orig: True if the event is raised for the originator side. + + + :threshold: the threshold that was crossed + + .. bro:see:: tcp_multiple_checksum_errors tcp_multiple_zero_windows + +.. bro:id:: tcp_multiple_zero_windows + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, threshold: :bro:type:`count`) + + Generated if a TCP flow crosses a zero-window threshold, per + 'W'/'w' history reporting. + + + :c: The connection record for the TCP connection. + + + :is_orig: True if the event is raised for the originator side. + + + :threshold: the threshold that was crossed + + .. bro:see:: tcp_multiple_checksum_errors tcp_multiple_retransmissions + +.. bro:id:: tcp_option + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, opt: :bro:type:`count`, optlen: :bro:type:`count`) + + Generated for each option found in a TCP header. Like many of the ``tcp_*`` + events, this is a very low-level event and potentially expensive as it may + be raised very often. + + + :c: The connection the packet is part of. + + + :is_orig: True if the packet was sent by the connection's originator. + + + :opt: The numerical option number, as found in the TCP header. + + + :optlen: The length of the options value. + + .. bro:see:: tcp_packet tcp_contents tcp_rexmit + + .. note:: There is currently no way to get the actual option value, if any. + +.. bro:id:: tcp_packet + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, flags: :bro:type:`string`, seq: :bro:type:`count`, ack: :bro:type:`count`, len: :bro:type:`count`, payload: :bro:type:`string`) + + Generated for every TCP packet. This is a very low-level and expensive event + that should be avoided when at all possible. It's usually infeasible to + handle when processing even medium volumes of traffic in real-time. It's + slightly better than :bro:id:`new_packet` because it affects only TCP, but + not much. That said, if you work from a trace and want to do some + packet-level analysis, it may come in handy. + + + :c: The connection the packet is part of. + + + :is_orig: True if the packet was sent by the connection's originator. + + + :flags: A string with the packet's TCP flags. In the string, each character + corresponds to one set flag, as follows: ``S`` -> SYN; ``F`` -> FIN; + ``R`` -> RST; ``A`` -> ACK; ``P`` -> PUSH. + + + :seq: The packet's relative TCP sequence number. + + + :ack: If the ACK flag is set for the packet, the packet's relative ACK + number, else zero. + + + :len: The length of the TCP payload, as specified in the packet header. + + + :payload: The raw TCP payload. Note that this may be shorter than *len* if + the packet was not fully captured. + + .. bro:see:: new_packet packet_contents tcp_option tcp_contents tcp_rexmit + +.. bro:id:: tcp_rexmit + + :Type: :bro:type:`event` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`, seq: :bro:type:`count`, len: :bro:type:`count`, data_in_flight: :bro:type:`count`, window: :bro:type:`count`) + + TODO. + + diff --git a/doc/scripts/base/bif/plugins/Bro_TCP.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_TCP.functions.bif.bro.rst new file mode 100644 index 0000000000..0cdb517bb1 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_TCP.functions.bif.bro.rst @@ -0,0 +1,122 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_TCP.functions.bif.bro +========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +================================================= ====================================================================== +:bro:id:`get_contents_file`: :bro:type:`function` Returns the file handle of the contents file of a connection. +:bro:id:`get_orig_seq`: :bro:type:`function` Get the originator sequence number of a TCP connection. +:bro:id:`get_resp_seq`: :bro:type:`function` Get the responder sequence number of a TCP connection. +:bro:id:`set_contents_file`: :bro:type:`function` Associates a file handle with a connection for writing TCP byte stream + contents. +================================================= ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: get_contents_file + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, direction: :bro:type:`count`) : :bro:type:`file` + + Returns the file handle of the contents file of a connection. + + + :cid: The connection ID. + + + :direction: Controls what sides of the connection to record. See + :bro:id:`set_contents_file` for possible values. + + + :returns: The :bro:type:`file` handle for the contents file of the + connection identified by *cid*. If the connection exists + but there is no contents file for *direction*, then the function + generates an error and returns a file handle to ``stderr``. + + .. bro:see:: set_contents_file set_record_packets contents_file_write_failure + +.. bro:id:: get_orig_seq + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`) : :bro:type:`count` + + Get the originator sequence number of a TCP connection. Sequence numbers + are absolute (i.e., they reflect the values seen directly in packet headers; + they are not relative to the beginning of the connection). + + + :cid: The connection ID. + + + :returns: The highest sequence number sent by a connection's originator, or 0 + if *cid* does not point to an active TCP connection. + + .. bro:see:: get_resp_seq + +.. bro:id:: get_resp_seq + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`) : :bro:type:`count` + + Get the responder sequence number of a TCP connection. Sequence numbers + are absolute (i.e., they reflect the values seen directly in packet headers; + they are not relative to the beginning of the connection). + + + :cid: The connection ID. + + + :returns: The highest sequence number sent by a connection's responder, or 0 + if *cid* does not point to an active TCP connection. + + .. bro:see:: get_orig_seq + +.. bro:id:: set_contents_file + + :Type: :bro:type:`function` (cid: :bro:type:`conn_id`, direction: :bro:type:`count`, f: :bro:type:`file`) : :bro:type:`bool` + + Associates a file handle with a connection for writing TCP byte stream + contents. + + + :cid: The connection ID. + + + :direction: Controls what sides of the connection to record. The argument can + take one of the four values: + + - ``CONTENTS_NONE``: Stop recording the connection's content. + - ``CONTENTS_ORIG``: Record the data sent by the connection + originator (often the client). + - ``CONTENTS_RESP``: Record the data sent by the connection + responder (often the server). + - ``CONTENTS_BOTH``: Record the data sent in both directions. + Results in the two directions being intermixed in the file, + in the order the data was seen by Bro. + + + :f: The file handle of the file to write the contents to. + + + :returns: Returns false if *cid* does not point to an active connection, and + true otherwise. + + .. note:: + + The data recorded to the file reflects the byte stream, not the + contents of individual packets. Reordering and duplicates are + removed. If any data is missing, the recording stops at the + missing data; this can happen, e.g., due to an + :bro:id:`content_gap` event. + + .. bro:see:: get_contents_file set_record_packets contents_file_write_failure + + diff --git a/doc/scripts/base/bif/plugins/Bro_Teredo.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Teredo.events.bif.bro.rst new file mode 100644 index 0000000000..856cb8ccc7 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Teredo.events.bif.bro.rst @@ -0,0 +1,103 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Teredo.events.bif.bro +========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +===================================================== =============================================================== +:bro:id:`teredo_authentication`: :bro:type:`event` Generated for IPv6 packets encapsulated in a Teredo tunnel that + use the Teredo authentication encapsulation method. +:bro:id:`teredo_bubble`: :bro:type:`event` Generated for Teredo bubble packets. +:bro:id:`teredo_origin_indication`: :bro:type:`event` Generated for IPv6 packets encapsulated in a Teredo tunnel that + use the Teredo origin indication encapsulation method. +:bro:id:`teredo_packet`: :bro:type:`event` Generated for any IPv6 packet encapsulated in a Teredo tunnel. +===================================================== =============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: teredo_authentication + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner: :bro:type:`teredo_hdr`) + + Generated for IPv6 packets encapsulated in a Teredo tunnel that + use the Teredo authentication encapsulation method. + See :rfc:`4380` for more information about the Teredo protocol. + + + :outer: The Teredo tunnel connection. + + + :inner: The Teredo-encapsulated IPv6 packet header and transport header. + + .. bro:see:: teredo_packet teredo_origin_indication teredo_bubble + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + +.. bro:id:: teredo_bubble + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner: :bro:type:`teredo_hdr`) + + Generated for Teredo bubble packets. That is, IPv6 packets encapsulated + in a Teredo tunnel that have a Next Header value of :bro:id:`IPPROTO_NONE`. + See :rfc:`4380` for more information about the Teredo protocol. + + + :outer: The Teredo tunnel connection. + + + :inner: The Teredo-encapsulated IPv6 packet header and transport header. + + .. bro:see:: teredo_packet teredo_authentication teredo_origin_indication + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + +.. bro:id:: teredo_origin_indication + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner: :bro:type:`teredo_hdr`) + + Generated for IPv6 packets encapsulated in a Teredo tunnel that + use the Teredo origin indication encapsulation method. + See :rfc:`4380` for more information about the Teredo protocol. + + + :outer: The Teredo tunnel connection. + + + :inner: The Teredo-encapsulated IPv6 packet header and transport header. + + .. bro:see:: teredo_packet teredo_authentication teredo_bubble + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + +.. bro:id:: teredo_packet + + :Type: :bro:type:`event` (outer: :bro:type:`connection`, inner: :bro:type:`teredo_hdr`) + + Generated for any IPv6 packet encapsulated in a Teredo tunnel. + See :rfc:`4380` for more information about the Teredo protocol. + + + :outer: The Teredo tunnel connection. + + + :inner: The Teredo-encapsulated IPv6 packet header and transport header. + + .. bro:see:: teredo_authentication teredo_origin_indication teredo_bubble + + .. note:: Since this event may be raised on a per-packet basis, handling + it may become particularly expensive for real-time analysis. + + diff --git a/doc/scripts/base/bif/plugins/Bro_UDP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_UDP.events.bif.bro.rst new file mode 100644 index 0000000000..7fe3d697d4 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_UDP.events.bif.bro.rst @@ -0,0 +1,99 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_UDP.events.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================================= =============================================================== +:bro:id:`udp_contents`: :bro:type:`event` Generated for UDP packets to pass on their payload. +:bro:id:`udp_multiple_checksum_errors`: :bro:type:`event` Generated if a UDP flow crosses a checksum-error threshold, per + 'C'/'c' history reporting. +:bro:id:`udp_reply`: :bro:type:`event` Generated for each packet sent by a UDP flow's responder. +:bro:id:`udp_request`: :bro:type:`event` Generated for each packet sent by a UDP flow's originator. +========================================================= =============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: udp_contents + + :Type: :bro:type:`event` (u: :bro:type:`connection`, is_orig: :bro:type:`bool`, contents: :bro:type:`string`) + + Generated for UDP packets to pass on their payload. As the number of UDP + packets can be very large, this event is normally raised only for those on + ports configured in :bro:id:`udp_content_delivery_ports_orig` (for packets + sent by the flow's originator) or :bro:id:`udp_content_delivery_ports_resp` + (for packets sent by the flow's responder). However, delivery can be enabled + for all UDP request and reply packets by setting + :bro:id:`udp_content_deliver_all_orig` or + :bro:id:`udp_content_deliver_all_resp`, respectively. Note that this + event is also raised for all matching UDP packets, including empty ones. + + + :u: The connection record for the corresponding UDP flow. + + + :is_orig: True if the event is raised for the originator side. + + + :contents: TODO. + + .. bro:see:: udp_reply udp_request udp_session_done + udp_content_deliver_all_orig udp_content_deliver_all_resp + udp_content_delivery_ports_orig udp_content_delivery_ports_resp + +.. bro:id:: udp_multiple_checksum_errors + + :Type: :bro:type:`event` (u: :bro:type:`connection`, is_orig: :bro:type:`bool`, threshold: :bro:type:`count`) + + Generated if a UDP flow crosses a checksum-error threshold, per + 'C'/'c' history reporting. + + + :u: The connection record for the corresponding UDP flow. + + + :is_orig: True if the event is raised for the originator side. + + + :threshold: the threshold that was crossed + + .. bro:see:: udp_reply udp_request udp_session_done + tcp_multiple_checksum_errors + +.. bro:id:: udp_reply + + :Type: :bro:type:`event` (u: :bro:type:`connection`) + + Generated for each packet sent by a UDP flow's responder. This a potentially + expensive event due to the volume of UDP traffic and should be used with + care. + + + :u: The connection record for the corresponding UDP flow. + + .. bro:see:: udp_contents udp_request udp_session_done + +.. bro:id:: udp_request + + :Type: :bro:type:`event` (u: :bro:type:`connection`) + + Generated for each packet sent by a UDP flow's originator. This a potentially + expensive event due to the volume of UDP traffic and should be used with + care. + + + :u: The connection record for the corresponding UDP flow. + + .. bro:see:: udp_contents udp_reply udp_session_done + + diff --git a/doc/scripts/base/bif/plugins/Bro_Unified2.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Unified2.events.bif.bro.rst new file mode 100644 index 0000000000..e701e161c6 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Unified2.events.bif.bro.rst @@ -0,0 +1,52 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Unified2.events.bif.bro +============================================ +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +============================================ ======================================================== +:bro:id:`unified2_event`: :bro:type:`event` Abstract all of the various Unified2 event formats into + a single event. +:bro:id:`unified2_packet`: :bro:type:`event` The Unified2 packet format event. +============================================ ======================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: unified2_event + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ev: :bro:type:`Unified2::IDSEvent`) + + Abstract all of the various Unified2 event formats into + a single event. + + + :f: The file. + + + :ev: TODO. + + +.. bro:id:: unified2_packet + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, pkt: :bro:type:`Unified2::Packet`) + + The Unified2 packet format event. + + + :f: The file. + + + :pkt: TODO. + + + diff --git a/doc/scripts/base/bif/plugins/Bro_Unified2.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_Unified2.types.bif.bro.rst new file mode 100644 index 0000000000..f01c7415a8 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_Unified2.types.bif.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_Unified2.types.bif.bro +=========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_X509.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_X509.events.bif.bro.rst new file mode 100644 index 0000000000..a5e7e7880a --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_X509.events.bif.bro.rst @@ -0,0 +1,145 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_X509.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +======================================================================= ================================================================================ +:bro:id:`x509_certificate`: :bro:type:`event` Generated for encountered X509 certificates, e.g., in the clear SSL/TLS + connection handshake. +:bro:id:`x509_ext_basic_constraints`: :bro:type:`event` Generated for the X509 basic constraints extension seen in a certificate. +:bro:id:`x509_ext_subject_alternative_name`: :bro:type:`event` Generated for the X509 subject alternative name extension seen in a certificate. +:bro:id:`x509_extension`: :bro:type:`event` Generated for X509 extensions seen in a certificate. +:bro:id:`x509_ocsp_ext_signed_certificate_timestamp`: :bro:type:`event` Generated for the signed_certificate_timestamp X509 extension as defined in + :rfc:`6962`. +======================================================================= ================================================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: x509_certificate + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, cert_ref: :bro:type:`opaque` of x509, cert: :bro:type:`X509::Certificate`) + + Generated for encountered X509 certificates, e.g., in the clear SSL/TLS + connection handshake. + + See `Wikipedia `__ for more information + about the X.509 format. + + + :f: The file. + + + :cert_ref: An opaque pointer to the underlying OpenSSL data structure of the + certificate. + + + :cert: The parsed certificate information. + + .. bro:see:: x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse x509_verify + x509_get_certificate_string x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: x509_ext_basic_constraints + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ext: :bro:type:`X509::BasicConstraints`) + + Generated for the X509 basic constraints extension seen in a certificate. + This extension can be used to identify the subject of a certificate as a CA. + + + :f: The file. + + + :ext: The parsed basic constraints extension. + + .. bro:see:: x509_certificate x509_extension + x509_ext_subject_alternative_name x509_parse x509_verify + x509_get_certificate_string x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: x509_ext_subject_alternative_name + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ext: :bro:type:`X509::SubjectAlternativeName`) + + Generated for the X509 subject alternative name extension seen in a certificate. + This extension can be used to allow additional entities to be bound to the + subject of the certificate. Usually it is used to specify one or multiple DNS + names for which a certificate is valid. + + + :f: The file. + + + :ext: The parsed subject alternative name extension. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_parse x509_verify x509_ocsp_ext_signed_certificate_timestamp + x509_get_certificate_string + +.. bro:id:: x509_extension + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ext: :bro:type:`X509::Extension`) + + Generated for X509 extensions seen in a certificate. + + See `Wikipedia `__ for more information + about the X.509 format. + + + :f: The file. + + + :ext: The parsed extension. + + .. bro:see:: x509_certificate x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse x509_verify + x509_get_certificate_string x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: x509_ocsp_ext_signed_certificate_timestamp + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, version: :bro:type:`count`, logid: :bro:type:`string`, timestamp: :bro:type:`count`, hash_algorithm: :bro:type:`count`, signature_algorithm: :bro:type:`count`, signature: :bro:type:`string`) + + Generated for the signed_certificate_timestamp X509 extension as defined in + :rfc:`6962`. The extension is used to transmit signed proofs that are + used for Certificate Transparency. Raised when the extension is encountered + in an X.509 certificate or in an OCSP reply. + + + :f: The file. + + + :version: the version of the protocol to which the SCT conforms. Always + should be 0 (representing version 1) + + + :logid: 32 bit key id + + + :timestamp: the NTP Time when the entry was logged measured since + the epoch, ignoring leap seconds, in milliseconds. + + + :signature_and_hashalgorithm: signature and hash algorithm used for the + digitally_signed struct + + + :signature: signature part of the digitally_signed struct + + .. bro:see:: ssl_extension_signed_certificate_timestamp x509_extension x509_ext_basic_constraints + x509_parse x509_verify x509_ext_subject_alternative_name + x509_get_certificate_string ssl_extension_signed_certificate_timestamp + sct_verify ocsp_request ocsp_request_certificate ocsp_response_status + ocsp_response_bytes ocsp_response_certificate + x509_ocsp_ext_signed_certificate_timestamp + + diff --git a/doc/scripts/base/bif/plugins/Bro_X509.functions.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_X509.functions.bif.bro.rst new file mode 100644 index 0000000000..bbc96813ba --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_X509.functions.bif.bro.rst @@ -0,0 +1,212 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_X509.functions.bif.bro +=========================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +=========================================================== ============================================================================= +:bro:id:`sct_verify`: :bro:type:`function` Verifies a Signed Certificate Timestamp as used for Certificate Transparency. +:bro:id:`x509_get_certificate_string`: :bro:type:`function` Returns the string form of a certificate. +:bro:id:`x509_issuer_name_hash`: :bro:type:`function` Get the hash of the issuer's distinguished name. +:bro:id:`x509_ocsp_verify`: :bro:type:`function` Verifies an OCSP reply. +:bro:id:`x509_parse`: :bro:type:`function` Parses a certificate into an X509::Certificate structure. +:bro:id:`x509_spki_hash`: :bro:type:`function` Get the hash of the Subject Public Key Information of the certificate. +:bro:id:`x509_subject_name_hash`: :bro:type:`function` Get the hash of the subject's distinguished name. +:bro:id:`x509_verify`: :bro:type:`function` Verifies a certificate. +=========================================================== ============================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: sct_verify + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, logid: :bro:type:`string`, log_key: :bro:type:`string`, signature: :bro:type:`string`, timestamp: :bro:type:`count`, hash_algorithm: :bro:type:`count`, issuer_key_hash: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`bool` + + Verifies a Signed Certificate Timestamp as used for Certificate Transparency. + See RFC6962 for more details. + + + :cert: Certificate against which the SCT should be validated. + + + :logid: Log id of the SCT. + + + :log_key: Public key of the Log that issued the SCT proof. + + + :timestamp: Timestamp at which the proof was generated. + + + :hash_algorithm: Hash algorithm that was used for the SCT proof. + + + :issuer_key_hash: The SHA-256 hash of the certificate issuer's public key. + This only has to be provided if the SCT was encountered in an X.509 + certificate extension; in that case, it is necessary for validation. + + + :returns: T if the validation could be performed succesfully, F otherwhise. + + .. bro:see:: ssl_extension_signed_certificate_timestamp + x509_ocsp_ext_signed_certificate_timestamp + x509_verify + +.. bro:id:: x509_get_certificate_string + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, pem: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional`) : :bro:type:`string` + + Returns the string form of a certificate. + + + :cert: The X509 certificate opaque handle. + + + :pem: A boolean that specifies if the certificate is returned + in pem-form (true), or as the raw ASN1 encoded binary + (false). + + + :returns: X509 certificate as a string. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse x509_verify + +.. bro:id:: x509_issuer_name_hash + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, hash_alg: :bro:type:`count`) : :bro:type:`string` + + Get the hash of the issuer's distinguished name. + + + :cert: The X509 certificate opaque handle. + + + :hash_alg: the hash algorithm to use, according to the IANA mapping at + + :https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18 + + + :returns: The hash as a string. + + .. bro:see:: x509_subject_name_hash x509_spki_hash + x509_verify sct_verify + +.. bro:id:: x509_ocsp_verify + + :Type: :bro:type:`function` (certs: :bro:type:`x509_opaque_vector`, ocsp_reply: :bro:type:`string`, root_certs: :bro:type:`table_string_of_string`, verify_time: :bro:type:`time` :bro:attr:`&default` = ``0.0`` :bro:attr:`&optional`) : :bro:type:`X509::Result` + + Verifies an OCSP reply. + + + :certs: Specifies the certificate chain to use. Server certificate first. + + + :ocsp_reply: the ocsp reply to validate. + + + :root_certs: A list of root certificates to validate the certificate chain. + + + :verify_time: Time for the validity check of the certificates. + + + :returns: A record of type X509::Result containing the result code of the + verify operation. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse + x509_get_certificate_string x509_verify + +.. bro:id:: x509_parse + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509) : :bro:type:`X509::Certificate` + + Parses a certificate into an X509::Certificate structure. + + + :cert: The X509 certificate opaque handle. + + + :returns: A X509::Certificate structure. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_verify + x509_get_certificate_string + +.. bro:id:: x509_spki_hash + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, hash_alg: :bro:type:`count`) : :bro:type:`string` + + Get the hash of the Subject Public Key Information of the certificate. + + + :cert: The X509 certificate opaque handle. + + + :hash_alg: the hash algorithm to use, according to the IANA mapping at + + :https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18 + + + :returns: The hash as a string. + + .. bro:see:: x509_subject_name_hash x509_issuer_name_hash + x509_verify sct_verify + +.. bro:id:: x509_subject_name_hash + + :Type: :bro:type:`function` (cert: :bro:type:`opaque` of x509, hash_alg: :bro:type:`count`) : :bro:type:`string` + + Get the hash of the subject's distinguished name. + + + :cert: The X509 certificate opaque handle. + + + :hash_alg: the hash algorithm to use, according to the IANA mapping at + + :https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18 + + + :returns: The hash as a string. + + .. bro:see:: x509_issuer_name_hash x509_spki_hash + x509_verify sct_verify + +.. bro:id:: x509_verify + + :Type: :bro:type:`function` (certs: :bro:type:`x509_opaque_vector`, root_certs: :bro:type:`table_string_of_string`, verify_time: :bro:type:`time` :bro:attr:`&default` = ``0.0`` :bro:attr:`&optional`) : :bro:type:`X509::Result` + + Verifies a certificate. + + + :certs: Specifies a certificate chain that is being used to validate + the given certificate against the root store given in *root_certs*. + The host certificate has to be at index 0. + + + :root_certs: A list of root certificates to validate the certificate chain. + + + :verify_time: Time for the validity check of the certificates. + + + :returns: A record of type X509::Result containing the result code of the + verify operation. In case of success also returns the full + certificate chain. + + .. bro:see:: x509_certificate x509_extension x509_ext_basic_constraints + x509_ext_subject_alternative_name x509_parse + x509_get_certificate_string x509_ocsp_verify sct_verify + + diff --git a/doc/scripts/base/bif/plugins/Bro_X509.ocsp_events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_X509.ocsp_events.bif.bro.rst new file mode 100644 index 0000000000..7e8145f2d9 --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_X509.ocsp_events.bif.bro.rst @@ -0,0 +1,194 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_X509.ocsp_events.bif.bro +============================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +====================================================== =========================================================================================== +:bro:id:`ocsp_extension`: :bro:type:`event` This event is raised when an OCSP extension is encountered in an OCSP response. +:bro:id:`ocsp_request`: :bro:type:`event` Event that is raised when encountering an OCSP request, e.g. +:bro:id:`ocsp_request_certificate`: :bro:type:`event` Event that is raised when encountering an OCSP request for a certificate, + e.g. +:bro:id:`ocsp_response_bytes`: :bro:type:`event` This event is raised when encountering an OCSP response that contains response information. +:bro:id:`ocsp_response_certificate`: :bro:type:`event` This event is raised for each SingleResponse contained in an OCSP response. +:bro:id:`ocsp_response_status`: :bro:type:`event` This event is raised when encountering an OCSP reply, e.g. +====================================================== =========================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: ocsp_extension + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ext: :bro:type:`X509::Extension`, global_resp: :bro:type:`bool`) + + This event is raised when an OCSP extension is encountered in an OCSP response. + See :rfc:`6960` for more details on OCSP. + + + :f: The file. + + + :ext: The parsed extension (same format as X.509 extensions). + + + :global_resp: T if extension encountered in the global response (in ResponseData), + F when encountered in a SingleResponse. + + .. bro:see:: ocsp_request ocsp_request_certificate ocsp_response_status + ocsp_response_bytes ocsp_response_certificate + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_request + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, version: :bro:type:`count`) + + Event that is raised when encountering an OCSP request, e.g. in an HTTP + connection. See :rfc:`6960` for more details. + + This event is raised exactly once for each OCSP Request. + + + :f: The file. + + + :req: version: the version of the OCSP request. Typically 0 (Version 1). + + .. bro:see:: ocsp_request_certificate ocsp_response_status + ocsp_response_bytes ocsp_response_certificate ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_request_certificate + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, hashAlgorithm: :bro:type:`string`, issuerNameHash: :bro:type:`string`, issuerKeyHash: :bro:type:`string`, serialNumber: :bro:type:`string`) + + Event that is raised when encountering an OCSP request for a certificate, + e.g. in an HTTP connection. See :rfc:`6960` for more details. + + Note that a single OCSP request can contain requests for several certificates. + Thus this event can fire several times for one OCSP request, each time + requesting information for a different (or in theory even the same) certificate. + + + :f: The file. + + + :hashAlgorithm: The hash algorithm used for the issuerKeyHash. + + + :issuerKeyHash: Hash of the issuers public key. + + + :serialNumber: Serial number of the certificate for which the status is requested. + + .. bro:see:: ocsp_request ocsp_response_status + ocsp_response_bytes ocsp_response_certificate ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_response_bytes + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, resp_ref: :bro:type:`opaque` of ocsp_resp, status: :bro:type:`string`, version: :bro:type:`count`, responderId: :bro:type:`string`, producedAt: :bro:type:`time`, signatureAlgorithm: :bro:type:`string`, certs: :bro:type:`x509_opaque_vector`) + + This event is raised when encountering an OCSP response that contains response information. + An OCSP reply can be encountered, for example, in an HTTP connection or + a TLS extension. See :rfc:`6960` for more details on OCSP. + + + :f: The file. + + + :req_ref: An opaque pointer to the underlying OpenSSL data structure of the + OCSP response. + + + :status: The status of the OCSP response (e.g. succesful, malformedRequest, tryLater). + + + :version: Version of the OCSP response (typically - for version 1). + + + :responderId: The id of the OCSP responder; either a public key hash or a distinguished name. + + + :producedAt: Time at which the reply was produced. + + + :signatureAlgorithm: Algorithm used for the OCSP signature. + + + :certs: Optional list of certificates that are sent with the OCSP response; these typically + are needed to perform validation of the reply. + + .. bro:see:: ocsp_request ocsp_request_certificate ocsp_response_status + ocsp_response_certificate ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_response_certificate + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, hashAlgorithm: :bro:type:`string`, issuerNameHash: :bro:type:`string`, issuerKeyHash: :bro:type:`string`, serialNumber: :bro:type:`string`, certStatus: :bro:type:`string`, revokeTime: :bro:type:`time`, revokeReason: :bro:type:`string`, thisUpdate: :bro:type:`time`, nextUpdate: :bro:type:`time`) + + This event is raised for each SingleResponse contained in an OCSP response. + See :rfc:`6960` for more details on OCSP. + + + :f: The file. + + + :hashAlgorithm: The hash algorithm used for issuerNameHash and issuerKeyHash. + + + :issuerNameHash: Hash of the issuer's distinguished name. + + + :issuerKeyHash: Hash of the issuer's public key. + + + :serialNumber: Serial number of the affected certificate. + + + :certStatus: Status of the certificate. + + + :revokeTime: Time the certificate was revoked, 0 if not revoked. + + + :revokeTeason: Reason certificate was revoked; empty string if not revoked or not specified. + + + :thisUpdate: Time this response was generated. + + + :nextUpdate: Time next response will be ready; 0 if not supploed. + + .. bro:see:: ocsp_request ocsp_request_certificate ocsp_response_status + ocsp_response_bytes ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + +.. bro:id:: ocsp_response_status + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, status: :bro:type:`string`) + + This event is raised when encountering an OCSP reply, e.g. in an HTTP + connection or a TLS extension. See :rfc:`6960` for more details. + + This event is raised exactly once for each OCSP reply. + + + :f: The file. + + + :status: The status of the OCSP response (e.g. succesful, malformedRequest, tryLater). + + .. bro:see:: ocsp_request ocsp_request_certificate + ocsp_response_bytes ocsp_response_certificate ocsp_extension + x509_ocsp_ext_signed_certificate_timestamp + + diff --git a/doc/scripts/base/bif/plugins/Bro_X509.types.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_X509.types.bif.bro.rst new file mode 100644 index 0000000000..9516cb69ad --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_X509.types.bif.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_X509.types.bif.bro +======================================= +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/Bro_XMPP.events.bif.bro.rst b/doc/scripts/base/bif/plugins/Bro_XMPP.events.bif.bro.rst new file mode 100644 index 0000000000..aea554f0cb --- /dev/null +++ b/doc/scripts/base/bif/plugins/Bro_XMPP.events.bif.bro.rst @@ -0,0 +1,34 @@ +:tocdepth: 3 + +base/bif/plugins/Bro_XMPP.events.bif.bro +======================================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Events +###### +========================================== ================================================================== +:bro:id:`xmpp_starttls`: :bro:type:`event` Generated when a XMPP connection goes encrypted after a successful + StartTLS exchange between the client and the server. +========================================== ================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: xmpp_starttls + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Generated when a XMPP connection goes encrypted after a successful + StartTLS exchange between the client and the server. + + + :c: The connection. + + diff --git a/doc/scripts/base/bif/plugins/__load__.bro.rst b/doc/scripts/base/bif/plugins/__load__.bro.rst new file mode 100644 index 0000000000..5f1fcb7061 --- /dev/null +++ b/doc/scripts/base/bif/plugins/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/bif/plugins/__load__.bro +============================= + + +:Imports: :doc:`base/bif/plugins/Bro_ARP.events.bif.bro `, :doc:`base/bif/plugins/Bro_AsciiReader.ascii.bif.bro `, :doc:`base/bif/plugins/Bro_AsciiWriter.ascii.bif.bro `, :doc:`base/bif/plugins/Bro_BackDoor.events.bif.bro `, :doc:`base/bif/plugins/Bro_BenchmarkReader.benchmark.bif.bro `, :doc:`base/bif/plugins/Bro_BinaryReader.binary.bif.bro `, :doc:`base/bif/plugins/Bro_BitTorrent.events.bif.bro `, :doc:`base/bif/plugins/Bro_ConfigReader.config.bif.bro `, :doc:`base/bif/plugins/Bro_ConnSize.events.bif.bro `, :doc:`base/bif/plugins/Bro_ConnSize.functions.bif.bro `, :doc:`base/bif/plugins/Bro_DCE_RPC.consts.bif.bro `, :doc:`base/bif/plugins/Bro_DCE_RPC.events.bif.bro `, :doc:`base/bif/plugins/Bro_DCE_RPC.types.bif.bro `, :doc:`base/bif/plugins/Bro_DHCP.events.bif.bro `, :doc:`base/bif/plugins/Bro_DHCP.types.bif.bro `, :doc:`base/bif/plugins/Bro_DNP3.events.bif.bro `, :doc:`base/bif/plugins/Bro_DNS.events.bif.bro `, :doc:`base/bif/plugins/Bro_FTP.events.bif.bro `, :doc:`base/bif/plugins/Bro_FTP.functions.bif.bro `, :doc:`base/bif/plugins/Bro_File.events.bif.bro `, :doc:`base/bif/plugins/Bro_FileEntropy.events.bif.bro `, :doc:`base/bif/plugins/Bro_FileExtract.events.bif.bro `, :doc:`base/bif/plugins/Bro_FileExtract.functions.bif.bro `, :doc:`base/bif/plugins/Bro_FileHash.events.bif.bro `, :doc:`base/bif/plugins/Bro_Finger.events.bif.bro `, :doc:`base/bif/plugins/Bro_GSSAPI.events.bif.bro `, :doc:`base/bif/plugins/Bro_GTPv1.events.bif.bro `, :doc:`base/bif/plugins/Bro_Gnutella.events.bif.bro `, :doc:`base/bif/plugins/Bro_HTTP.events.bif.bro `, :doc:`base/bif/plugins/Bro_HTTP.functions.bif.bro `, :doc:`base/bif/plugins/Bro_ICMP.events.bif.bro `, :doc:`base/bif/plugins/Bro_IMAP.events.bif.bro `, :doc:`base/bif/plugins/Bro_IRC.events.bif.bro `, :doc:`base/bif/plugins/Bro_Ident.events.bif.bro `, :doc:`base/bif/plugins/Bro_InterConn.events.bif.bro `, :doc:`base/bif/plugins/Bro_KRB.events.bif.bro `, :doc:`base/bif/plugins/Bro_KRB.types.bif.bro `, :doc:`base/bif/plugins/Bro_Login.events.bif.bro `, :doc:`base/bif/plugins/Bro_Login.functions.bif.bro `, :doc:`base/bif/plugins/Bro_MIME.events.bif.bro `, :doc:`base/bif/plugins/Bro_Modbus.events.bif.bro `, :doc:`base/bif/plugins/Bro_MySQL.events.bif.bro `, :doc:`base/bif/plugins/Bro_NCP.consts.bif.bro `, :doc:`base/bif/plugins/Bro_NCP.events.bif.bro `, :doc:`base/bif/plugins/Bro_NTLM.events.bif.bro `, :doc:`base/bif/plugins/Bro_NTLM.types.bif.bro `, :doc:`base/bif/plugins/Bro_NTP.events.bif.bro `, :doc:`base/bif/plugins/Bro_NetBIOS.events.bif.bro `, :doc:`base/bif/plugins/Bro_NetBIOS.functions.bif.bro `, :doc:`base/bif/plugins/Bro_NoneWriter.none.bif.bro `, :doc:`base/bif/plugins/Bro_PE.events.bif.bro `, :doc:`base/bif/plugins/Bro_POP3.events.bif.bro `, :doc:`base/bif/plugins/Bro_RADIUS.events.bif.bro `, :doc:`base/bif/plugins/Bro_RDP.events.bif.bro `, :doc:`base/bif/plugins/Bro_RDP.types.bif.bro `, :doc:`base/bif/plugins/Bro_RFB.events.bif.bro `, :doc:`base/bif/plugins/Bro_RPC.events.bif.bro `, :doc:`base/bif/plugins/Bro_RawReader.raw.bif.bro `, :doc:`base/bif/plugins/Bro_SIP.events.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.consts.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.events.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_check_directory.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_close.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_create_directory.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_echo.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_logoff_andx.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_negotiate.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_nt_cancel.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_nt_create_andx.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_query_information.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_read_andx.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_session_setup_andx.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_transaction.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_transaction2.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_transaction2_secondary.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_transaction_secondary.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_tree_connect_andx.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_tree_disconnect.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_com_write_andx.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb1_events.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_com_close.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_com_create.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_com_negotiate.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_com_read.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_com_session_setup.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_com_set_info.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_com_tree_connect.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_com_tree_disconnect.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_com_write.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.smb2_events.bif.bro `, :doc:`base/bif/plugins/Bro_SMB.types.bif.bro `, :doc:`base/bif/plugins/Bro_SMTP.events.bif.bro `, :doc:`base/bif/plugins/Bro_SMTP.functions.bif.bro `, :doc:`base/bif/plugins/Bro_SNMP.events.bif.bro `, :doc:`base/bif/plugins/Bro_SNMP.types.bif.bro `, :doc:`base/bif/plugins/Bro_SOCKS.events.bif.bro `, :doc:`base/bif/plugins/Bro_SQLiteReader.sqlite.bif.bro `, :doc:`base/bif/plugins/Bro_SQLiteWriter.sqlite.bif.bro `, :doc:`base/bif/plugins/Bro_SSH.events.bif.bro `, :doc:`base/bif/plugins/Bro_SSH.types.bif.bro `, :doc:`base/bif/plugins/Bro_SSL.events.bif.bro `, :doc:`base/bif/plugins/Bro_SSL.functions.bif.bro `, :doc:`base/bif/plugins/Bro_SSL.types.bif.bro `, :doc:`base/bif/plugins/Bro_SteppingStone.events.bif.bro `, :doc:`base/bif/plugins/Bro_Syslog.events.bif.bro `, :doc:`base/bif/plugins/Bro_TCP.events.bif.bro `, :doc:`base/bif/plugins/Bro_TCP.functions.bif.bro `, :doc:`base/bif/plugins/Bro_Teredo.events.bif.bro `, :doc:`base/bif/plugins/Bro_UDP.events.bif.bro `, :doc:`base/bif/plugins/Bro_Unified2.events.bif.bro `, :doc:`base/bif/plugins/Bro_Unified2.types.bif.bro `, :doc:`base/bif/plugins/Bro_X509.events.bif.bro `, :doc:`base/bif/plugins/Bro_X509.functions.bif.bro `, :doc:`base/bif/plugins/Bro_X509.ocsp_events.bif.bro `, :doc:`base/bif/plugins/Bro_X509.types.bif.bro `, :doc:`base/bif/plugins/Bro_XMPP.events.bif.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/bif/plugins/index.rst b/doc/scripts/base/bif/plugins/index.rst new file mode 100644 index 0000000000..c2b0f0bd1f --- /dev/null +++ b/doc/scripts/base/bif/plugins/index.rst @@ -0,0 +1,358 @@ +:orphan: + +Package: base/bif/plugins +========================= + + +:doc:`/scripts/base/bif/plugins/Bro_SNMP.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_KRB.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/__load__.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ARP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_BackDoor.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_BitTorrent.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ConnSize.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ConnSize.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DCE_RPC.consts.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DCE_RPC.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DCE_RPC.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DHCP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DHCP.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DNP3.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_DNS.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_File.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Finger.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FTP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FTP.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Gnutella.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_GSSAPI.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_GTPv1.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_HTTP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_HTTP.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ICMP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Ident.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_IMAP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_InterConn.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_IRC.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_KRB.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Login.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Login.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_MIME.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Modbus.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_MySQL.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NCP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NCP.consts.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NetBIOS.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NetBIOS.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NTLM.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NTLM.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NTP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_POP3.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RADIUS.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RDP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RDP.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RFB.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RPC.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SIP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SNMP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_check_directory.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_close.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_create_directory.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_echo.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_logoff_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_negotiate.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_create_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_nt_cancel.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_query_information.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_read_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_session_setup_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction_secondary.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_transaction2_secondary.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_connect_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_tree_disconnect.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_com_write_andx.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb1_events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_close.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_create.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_negotiate.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_read.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_session_setup.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_set_info.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_connect.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_tree_disconnect.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_com_write.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.smb2_events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.consts.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMB.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMTP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SMTP.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SOCKS.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSH.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSH.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSL.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSL.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SSL.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SteppingStone.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Syslog.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_TCP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_TCP.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Teredo.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_UDP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_XMPP.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FileEntropy.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FileExtract.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_FileExtract.functions.bif.bro` + + Internal functions used by the extraction file analyzer. + +:doc:`/scripts/base/bif/plugins/Bro_FileHash.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_PE.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Unified2.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_Unified2.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_X509.events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_X509.types.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_X509.functions.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_X509.ocsp_events.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_AsciiReader.ascii.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_BenchmarkReader.benchmark.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_BinaryReader.binary.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_ConfigReader.config.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_RawReader.raw.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SQLiteReader.sqlite.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_AsciiWriter.ascii.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_NoneWriter.none.bif.bro` + + +:doc:`/scripts/base/bif/plugins/Bro_SQLiteWriter.sqlite.bif.bro` + + diff --git a/doc/scripts/base/bif/reporter.bif.bro.rst b/doc/scripts/base/bif/reporter.bif.bro.rst new file mode 100644 index 0000000000..152c0d52a7 --- /dev/null +++ b/doc/scripts/base/bif/reporter.bif.bro.rst @@ -0,0 +1,250 @@ +:tocdepth: 3 + +base/bif/reporter.bif.bro +========================= +.. bro:namespace:: GLOBAL +.. bro:namespace:: Reporter + +The reporter built-in functions allow for the scripting layer to +generate messages of varying severity. If no event handlers +exist for reporter messages, the messages are output to stderr. +If event handlers do exist, it's assumed they take care of determining +how/where to output the messages. + +See :doc:`/scripts/base/frameworks/reporter/main.bro` for a convenient +reporter message logging framework. + +:Namespaces: GLOBAL, Reporter + +Summary +~~~~~~~ +Functions +######### +====================================================================== ======================================================================== +:bro:id:`Reporter::conn_weird`: :bro:type:`function` Generates a "conn" weird. +:bro:id:`Reporter::error`: :bro:type:`function` Generates a non-fatal error indicative of a definite problem that should + be addressed. +:bro:id:`Reporter::fatal`: :bro:type:`function` Generates a fatal error on stderr and terminates program execution. +:bro:id:`Reporter::fatal_error_with_core`: :bro:type:`function` Generates a fatal error on stderr and terminates program execution + after dumping a core file +:bro:id:`Reporter::flow_weird`: :bro:type:`function` Generates a "flow" weird. +:bro:id:`Reporter::get_weird_sampling_duration`: :bro:type:`function` Gets the current weird sampling duration. +:bro:id:`Reporter::get_weird_sampling_rate`: :bro:type:`function` Gets the current weird sampling rate. +:bro:id:`Reporter::get_weird_sampling_threshold`: :bro:type:`function` Gets the current weird sampling threshold +:bro:id:`Reporter::get_weird_sampling_whitelist`: :bro:type:`function` Gets the weird sampling whitelist +:bro:id:`Reporter::info`: :bro:type:`function` Generates an informational message. +:bro:id:`Reporter::net_weird`: :bro:type:`function` Generates a "net" weird. +:bro:id:`Reporter::set_weird_sampling_duration`: :bro:type:`function` Sets the current weird sampling duration. +:bro:id:`Reporter::set_weird_sampling_rate`: :bro:type:`function` Sets the weird sampling rate. +:bro:id:`Reporter::set_weird_sampling_threshold`: :bro:type:`function` Sets the current weird sampling threshold +:bro:id:`Reporter::set_weird_sampling_whitelist`: :bro:type:`function` Sets the weird sampling whitelist +:bro:id:`Reporter::warning`: :bro:type:`function` Generates a message that warns of a potential problem. +====================================================================== ======================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: Reporter::conn_weird + + :Type: :bro:type:`function` (name: :bro:type:`string`, c: :bro:type:`connection`, addl: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`bool` + + Generates a "conn" weird. + + + :name: the name of the weird. + + + :c: the connection associated with the weird. + + + :addl: additional information to accompany the weird. + + + :returns: Always true. + +.. bro:id:: Reporter::error + + :Type: :bro:type:`function` (msg: :bro:type:`string`) : :bro:type:`bool` + + Generates a non-fatal error indicative of a definite problem that should + be addressed. Program execution does not terminate. + + + :msg: The error message to report. + + + :returns: Always true. + + .. bro:see:: reporter_error + +.. bro:id:: Reporter::fatal + + :Type: :bro:type:`function` (msg: :bro:type:`string`) : :bro:type:`bool` + + Generates a fatal error on stderr and terminates program execution. + + + :msg: The error message to report. + + + :returns: Always true. + +.. bro:id:: Reporter::fatal_error_with_core + + :Type: :bro:type:`function` (msg: :bro:type:`string`) : :bro:type:`bool` + + Generates a fatal error on stderr and terminates program execution + after dumping a core file + + + :msg: The error message to report. + + + :returns: Always true. + +.. bro:id:: Reporter::flow_weird + + :Type: :bro:type:`function` (name: :bro:type:`string`, orig: :bro:type:`addr`, resp: :bro:type:`addr`) : :bro:type:`bool` + + Generates a "flow" weird. + + + :name: the name of the weird. + + + :orig: the originator host associated with the weird. + + + :resp: the responder host associated with the weird. + + + :returns: Always true. + +.. bro:id:: Reporter::get_weird_sampling_duration + + :Type: :bro:type:`function` () : :bro:type:`interval` + + Gets the current weird sampling duration. + + + :returns: weird sampling duration. + +.. bro:id:: Reporter::get_weird_sampling_rate + + :Type: :bro:type:`function` () : :bro:type:`count` + + Gets the current weird sampling rate. + + + :returns: weird sampling rate. + +.. bro:id:: Reporter::get_weird_sampling_threshold + + :Type: :bro:type:`function` () : :bro:type:`count` + + Gets the current weird sampling threshold + + + :returns: current weird sampling threshold. + +.. bro:id:: Reporter::get_weird_sampling_whitelist + + :Type: :bro:type:`function` () : :bro:type:`string_set` + + Gets the weird sampling whitelist + + + :returns: Current weird sampling whitelist + +.. bro:id:: Reporter::info + + :Type: :bro:type:`function` (msg: :bro:type:`string`) : :bro:type:`bool` + + Generates an informational message. + + + :msg: The informational message to report. + + + :returns: Always true. + + .. bro:see:: reporter_info + +.. bro:id:: Reporter::net_weird + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`bool` + + Generates a "net" weird. + + + :name: the name of the weird. + + + :returns: Always true. + +.. bro:id:: Reporter::set_weird_sampling_duration + + :Type: :bro:type:`function` (weird_sampling_duration: :bro:type:`interval`) : :bro:type:`bool` + + Sets the current weird sampling duration. Please note that + this will not delete already running timers. + + + :weird_sampling_duration: New weird sampling duration. + + + :returns: always returns True + +.. bro:id:: Reporter::set_weird_sampling_rate + + :Type: :bro:type:`function` (weird_sampling_rate: :bro:type:`count`) : :bro:type:`bool` + + Sets the weird sampling rate. + + + :weird_sampling_rate: New weird sampling rate. + + + :returns: Always returns true. + +.. bro:id:: Reporter::set_weird_sampling_threshold + + :Type: :bro:type:`function` (weird_sampling_threshold: :bro:type:`count`) : :bro:type:`bool` + + Sets the current weird sampling threshold + + + :threshold: New weird sampling threshold. + + + :returns: Always returns true; + +.. bro:id:: Reporter::set_weird_sampling_whitelist + + :Type: :bro:type:`function` (weird_sampling_whitelist: :bro:type:`string_set`) : :bro:type:`bool` + + Sets the weird sampling whitelist + + + :whitelist: New weird sampling rate. + + + :returns: Always true. + +.. bro:id:: Reporter::warning + + :Type: :bro:type:`function` (msg: :bro:type:`string`) : :bro:type:`bool` + + Generates a message that warns of a potential problem. + + + :msg: The warning message to report. + + + :returns: Always true. + + .. bro:see:: reporter_warning + + diff --git a/doc/scripts/base/bif/stats.bif.bro.rst b/doc/scripts/base/bif/stats.bif.bro.rst new file mode 100644 index 0000000000..eb2859475e --- /dev/null +++ b/doc/scripts/base/bif/stats.bif.bro.rst @@ -0,0 +1,327 @@ +:tocdepth: 3 + +base/bif/stats.bif.bro +====================== +.. bro:namespace:: GLOBAL + + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +======================================================= ======================================================= +:bro:id:`get_broker_stats`: :bro:type:`function` Returns statistics about Broker communication. +:bro:id:`get_conn_stats`: :bro:type:`function` Returns Bro traffic statistics. +:bro:id:`get_dns_stats`: :bro:type:`function` Returns statistics about DNS lookup activity. +:bro:id:`get_event_stats`: :bro:type:`function` Returns statistics about the event engine. +:bro:id:`get_file_analysis_stats`: :bro:type:`function` Returns statistics about file analysis. +:bro:id:`get_gap_stats`: :bro:type:`function` Returns statistics about TCP gaps. +:bro:id:`get_matcher_stats`: :bro:type:`function` Returns statistics about the regular expression engine. +:bro:id:`get_net_stats`: :bro:type:`function` Returns packet capture statistics. +:bro:id:`get_proc_stats`: :bro:type:`function` Returns Bro process statistics. +:bro:id:`get_reassembler_stats`: :bro:type:`function` Returns statistics about reassembler usage. +:bro:id:`get_reporter_stats`: :bro:type:`function` Returns statistics about reporter messages and weirds. +:bro:id:`get_thread_stats`: :bro:type:`function` Returns statistics about thread usage. +:bro:id:`get_timer_stats`: :bro:type:`function` Returns statistics about timer usage. +======================================================= ======================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: get_broker_stats + + :Type: :bro:type:`function` () : :bro:type:`BrokerStats` + + Returns statistics about Broker communication. + + + :returns: A record with Broker statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_conn_stats + + :Type: :bro:type:`function` () : :bro:type:`ConnStats` + + Returns Bro traffic statistics. + + + :returns: A record with connection and packet statistics. + + .. bro:see:: get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_dns_stats + + :Type: :bro:type:`function` () : :bro:type:`DNSStats` + + Returns statistics about DNS lookup activity. + + + :returns: A record with DNS lookup statistics. + + .. bro:see:: get_conn_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_event_stats + + :Type: :bro:type:`function` () : :bro:type:`EventStats` + + Returns statistics about the event engine. + + + :returns: A record with event engine statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_file_analysis_stats + + :Type: :bro:type:`function` () : :bro:type:`FileAnalysisStats` + + Returns statistics about file analysis. + + + :returns: A record with file analysis statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_gap_stats + + :Type: :bro:type:`function` () : :bro:type:`GapStats` + + Returns statistics about TCP gaps. + + + :returns: A record with TCP gap statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_matcher_stats + + :Type: :bro:type:`function` () : :bro:type:`MatcherStats` + + Returns statistics about the regular expression engine. Statistics include + the number of distinct matchers, DFA states, DFA state transitions, memory + usage of DFA states, cache hits/misses, and average number of NFA states + across all matchers. + + + :returns: A record with matcher statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_net_stats + + :Type: :bro:type:`function` () : :bro:type:`NetStats` + + Returns packet capture statistics. Statistics include the number of + packets *(i)* received by Bro, *(ii)* dropped, and *(iii)* seen on the + link (not always available). + + + :returns: A record of packet statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_proc_stats + + :Type: :bro:type:`function` () : :bro:type:`ProcStats` + + Returns Bro process statistics. + + + :returns: A record with process statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_reassembler_stats + + :Type: :bro:type:`function` () : :bro:type:`ReassemblerStats` + + Returns statistics about reassembler usage. + + + :returns: A record with reassembler statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_thread_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_reporter_stats + + :Type: :bro:type:`function` () : :bro:type:`ReporterStats` + + Returns statistics about reporter messages and weirds. + + + :returns: A record with reporter statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_timer_stats + get_broker_stats + +.. bro:id:: get_thread_stats + + :Type: :bro:type:`function` () : :bro:type:`ThreadStats` + + Returns statistics about thread usage. + + + :returns: A record with thread usage statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_timer_stats + get_broker_stats + get_reporter_stats + +.. bro:id:: get_timer_stats + + :Type: :bro:type:`function` () : :bro:type:`TimerStats` + + Returns statistics about timer usage. + + + :returns: A record with timer usage statistics. + + .. bro:see:: get_conn_stats + get_dns_stats + get_event_stats + get_file_analysis_stats + get_gap_stats + get_matcher_stats + get_net_stats + get_proc_stats + get_reassembler_stats + get_thread_stats + get_broker_stats + get_reporter_stats + + diff --git a/doc/scripts/base/bif/store.bif.bro.rst b/doc/scripts/base/bif/store.bif.bro.rst new file mode 100644 index 0000000000..4764f34827 --- /dev/null +++ b/doc/scripts/base/bif/store.bif.bro.rst @@ -0,0 +1,150 @@ +:tocdepth: 3 + +base/bif/store.bif.bro +====================== +.. bro:namespace:: Broker +.. bro:namespace:: GLOBAL + +Functions to interface with broker's distributed data store. + +:Namespaces: Broker, GLOBAL + +Summary +~~~~~~~ +Functions +######### +============================================================== = +:bro:id:`Broker::__append`: :bro:type:`function` +:bro:id:`Broker::__clear`: :bro:type:`function` +:bro:id:`Broker::__close`: :bro:type:`function` +:bro:id:`Broker::__create_clone`: :bro:type:`function` +:bro:id:`Broker::__create_master`: :bro:type:`function` +:bro:id:`Broker::__decrement`: :bro:type:`function` +:bro:id:`Broker::__erase`: :bro:type:`function` +:bro:id:`Broker::__exists`: :bro:type:`function` +:bro:id:`Broker::__get`: :bro:type:`function` +:bro:id:`Broker::__get_index_from_value`: :bro:type:`function` +:bro:id:`Broker::__increment`: :bro:type:`function` +:bro:id:`Broker::__insert_into_set`: :bro:type:`function` +:bro:id:`Broker::__insert_into_table`: :bro:type:`function` +:bro:id:`Broker::__is_closed`: :bro:type:`function` +:bro:id:`Broker::__keys`: :bro:type:`function` +:bro:id:`Broker::__pop`: :bro:type:`function` +:bro:id:`Broker::__push`: :bro:type:`function` +:bro:id:`Broker::__put`: :bro:type:`function` +:bro:id:`Broker::__put_unique`: :bro:type:`function` +:bro:id:`Broker::__remove_from`: :bro:type:`function` +:bro:id:`Broker::__store_name`: :bro:type:`function` +============================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: Broker::__append + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, s: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__clear + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`bool` + + +.. bro:id:: Broker::__close + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`bool` + + +.. bro:id:: Broker::__create_clone + + :Type: :bro:type:`function` (id: :bro:type:`string`, resync_interval: :bro:type:`interval`, stale_interval: :bro:type:`interval`, mutation_buffer_interval: :bro:type:`interval`) : :bro:type:`opaque` of Broker::Store + + +.. bro:id:: Broker::__create_master + + :Type: :bro:type:`function` (id: :bro:type:`string`, b: :bro:type:`Broker::BackendType`, options: :bro:type:`Broker::BackendOptions` :bro:attr:`&default` = ``[sqlite=[path=], rocksdb=[path=]]`` :bro:attr:`&optional`) : :bro:type:`opaque` of Broker::Store + + +.. bro:id:: Broker::__decrement + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, a: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__erase + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`) : :bro:type:`bool` + + +.. bro:id:: Broker::__exists + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`) : :bro:type:`Broker::QueryResult` + + +.. bro:id:: Broker::__get + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`) : :bro:type:`Broker::QueryResult` + + +.. bro:id:: Broker::__get_index_from_value + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, i: :bro:type:`any`) : :bro:type:`Broker::QueryResult` + + +.. bro:id:: Broker::__increment + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, a: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__insert_into_set + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, i: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__insert_into_table + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, i: :bro:type:`any`, v: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__is_closed + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`bool` + + +.. bro:id:: Broker::__keys + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`Broker::QueryResult` + + +.. bro:id:: Broker::__pop + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__push + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, v: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__put + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, v: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__put_unique + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, v: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`Broker::QueryResult` + + +.. bro:id:: Broker::__remove_from + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, i: :bro:type:`any`, e: :bro:type:`interval`) : :bro:type:`bool` + + +.. bro:id:: Broker::__store_name + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`string` + + + diff --git a/doc/scripts/base/bif/strings.bif.bro.rst b/doc/scripts/base/bif/strings.bif.bro.rst new file mode 100644 index 0000000000..20c5371f44 --- /dev/null +++ b/doc/scripts/base/bif/strings.bif.bro.rst @@ -0,0 +1,815 @@ +:tocdepth: 3 + +base/bif/strings.bif.bro +======================== +.. bro:namespace:: GLOBAL + +Definitions of built-in functions related to string processing and +manipulation. + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +========================================================================== ============================================================================ +:bro:id:`cat_string_array`: :bro:type:`function` :bro:attr:`&deprecated` Concatenates all elements in an array of strings. +:bro:id:`cat_string_array_n`: :bro:type:`function` :bro:attr:`&deprecated` Concatenates a specific range of elements in an array of strings. +:bro:id:`clean`: :bro:type:`function` Replaces non-printable characters in a string with escaped sequences. +:bro:id:`edit`: :bro:type:`function` Returns an edited version of a string that applies a special + "backspace character" (usually ``\x08`` for backspace or ``\x7f`` for DEL). +:bro:id:`escape_string`: :bro:type:`function` Replaces non-printable characters in a string with escaped sequences. +:bro:id:`find_all`: :bro:type:`function` Finds all occurrences of a pattern in a string. +:bro:id:`find_last`: :bro:type:`function` Finds the last occurrence of a pattern in a string. +:bro:id:`gsub`: :bro:type:`function` Substitutes a given replacement string for all occurrences of a pattern + in a given string. +:bro:id:`hexdump`: :bro:type:`function` Returns a hex dump for given input data. +:bro:id:`is_ascii`: :bro:type:`function` Determines whether a given string contains only ASCII characters. +:bro:id:`join_string_array`: :bro:type:`function` :bro:attr:`&deprecated` Joins all values in the given array of strings with a separator placed + between each element. +:bro:id:`join_string_vec`: :bro:type:`function` Joins all values in the given vector of strings with a separator placed + between each element. +:bro:id:`levenshtein_distance`: :bro:type:`function` Calculates the Levenshtein distance between the two strings. +:bro:id:`reverse`: :bro:type:`function` Returns a reversed copy of the string +:bro:id:`sort_string_array`: :bro:type:`function` :bro:attr:`&deprecated` Sorts an array of strings. +:bro:id:`split`: :bro:type:`function` :bro:attr:`&deprecated` Splits a string into an array of strings according to a pattern. +:bro:id:`split1`: :bro:type:`function` :bro:attr:`&deprecated` Splits a string *once* into a two-element array of strings according to a + pattern. +:bro:id:`split_all`: :bro:type:`function` :bro:attr:`&deprecated` Splits a string into an array of strings according to a pattern. +:bro:id:`split_n`: :bro:type:`function` :bro:attr:`&deprecated` Splits a string a given number of times into an array of strings according + to a pattern. +:bro:id:`split_string`: :bro:type:`function` Splits a string into an array of strings according to a pattern. +:bro:id:`split_string1`: :bro:type:`function` Splits a string *once* into a two-element array of strings according to a + pattern. +:bro:id:`split_string_all`: :bro:type:`function` Splits a string into an array of strings according to a pattern. +:bro:id:`split_string_n`: :bro:type:`function` Splits a string a given number of times into an array of strings according + to a pattern. +:bro:id:`str_shell_escape`: :bro:type:`function` Takes a string and escapes characters that would allow execution of + commands at the shell level. +:bro:id:`str_smith_waterman`: :bro:type:`function` Uses the Smith-Waterman algorithm to find similar/overlapping substrings. +:bro:id:`str_split`: :bro:type:`function` Splits a string into substrings with the help of an index vector of cutting + points. +:bro:id:`strcmp`: :bro:type:`function` Lexicographically compares two strings. +:bro:id:`string_cat`: :bro:type:`function` Concatenates all arguments into a single string. +:bro:id:`string_fill`: :bro:type:`function` Generates a string of a given size and fills it with repetitions of a source + string. +:bro:id:`string_to_ascii_hex`: :bro:type:`function` Returns an ASCII hexadecimal representation of a string. +:bro:id:`strip`: :bro:type:`function` Strips whitespace at both ends of a string. +:bro:id:`strstr`: :bro:type:`function` Locates the first occurrence of one string in another. +:bro:id:`sub`: :bro:type:`function` Substitutes a given replacement string for the first occurrence of a pattern + in a given string. +:bro:id:`sub_bytes`: :bro:type:`function` Get a substring from a string, given a starting position and length. +:bro:id:`subst_string`: :bro:type:`function` Substitutes each (non-overlapping) appearance of a string in another. +:bro:id:`to_lower`: :bro:type:`function` Replaces all uppercase letters in a string with their lowercase counterpart. +:bro:id:`to_string_literal`: :bro:type:`function` Replaces non-printable characters in a string with escaped sequences. +:bro:id:`to_upper`: :bro:type:`function` Replaces all lowercase letters in a string with their uppercase counterpart. +========================================================================== ============================================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: cat_string_array + + :Type: :bro:type:`function` (a: :bro:type:`string_array`) : :bro:type:`string` + :Attributes: :bro:attr:`&deprecated` + + Concatenates all elements in an array of strings. + + + :a: The :bro:type:`string_array` (``table[count] of string``). + + + :returns: The concatenation of all elements in *a*. + + .. bro:see:: cat cat_sep string_cat cat_string_array_n + fmt + join_string_vec join_string_array + +.. bro:id:: cat_string_array_n + + :Type: :bro:type:`function` (a: :bro:type:`string_array`, start: :bro:type:`count`, end: :bro:type:`count`) : :bro:type:`string` + :Attributes: :bro:attr:`&deprecated` + + Concatenates a specific range of elements in an array of strings. + + + :a: The :bro:type:`string_array` (``table[count] of string``). + + + :start: The array index of the first element of the range. + + + :end: The array index of the last element of the range. + + + :returns: The concatenation of the range *[start, end]* in *a*. + + .. bro:see:: cat string_cat cat_string_array + fmt + join_string_vec join_string_array + +.. bro:id:: clean + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`string` + + Replaces non-printable characters in a string with escaped sequences. The + mappings are: + + - values not in *[32, 126]* to ``\xXX`` + + If the string does not yet have a trailing NUL, one is added internally. + + In contrast to :bro:id:`escape_string`, this encoding is *not* fully reversible.` + + + :str: The string to escape. + + + :returns: The escaped string. + + .. bro:see:: to_string_literal escape_string + +.. bro:id:: edit + + :Type: :bro:type:`function` (arg_s: :bro:type:`string`, arg_edit_char: :bro:type:`string`) : :bro:type:`string` + + Returns an edited version of a string that applies a special + "backspace character" (usually ``\x08`` for backspace or ``\x7f`` for DEL). + For example, ``edit("hello there", "e")`` returns ``"llo t"``. + + + :arg_s: The string to edit. + + + :arg_edit_char: A string of exactly one character that represents the + "backspace character". If it is longer than one character Bro + generates a run-time error and uses the first character in + the string. + + + :returns: An edited version of *arg_s* where *arg_edit_char* triggers the + deletion of the last character. + + .. bro:see:: clean + to_string_literal + escape_string + strip + +.. bro:id:: escape_string + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`string` + + Replaces non-printable characters in a string with escaped sequences. The + mappings are: + + - values not in *[32, 126]* to ``\xXX`` + - ``\`` to ``\\`` + + In contrast to :bro:id:`clean`, this encoding is fully reversible.` + + + :str: The string to escape. + + + :returns: The escaped string. + + .. bro:see:: clean to_string_literal + +.. bro:id:: find_all + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`) : :bro:type:`string_set` + + Finds all occurrences of a pattern in a string. + + + :str: The string to inspect. + + + :re: The pattern to look for in *str*. + + + :returns: The set of strings in *str* that match *re*, or the empty set. + + .. bro:see: find_last strstr + +.. bro:id:: find_last + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`) : :bro:type:`string` + + Finds the last occurrence of a pattern in a string. This function returns + the match that starts at the largest index in the string, which is not + necessarily the longest match. For example, a pattern of ``/.*/`` will + return the final character in the string. + + + :str: The string to inspect. + + + :re: The pattern to look for in *str*. + + + :returns: The last string in *str* that matches *re*, or the empty string. + + .. bro:see: find_all strstr + +.. bro:id:: gsub + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`, repl: :bro:type:`string`) : :bro:type:`string` + + Substitutes a given replacement string for all occurrences of a pattern + in a given string. + + + :str: The string to perform the substitution in. + + + :re: The pattern being replaced with *repl*. + + + :repl: The string that replaces *re*. + + + :returns: A copy of *str* with all occurrences of *re* replaced with *repl*. + + .. bro:see:: sub subst_string + +.. bro:id:: hexdump + + :Type: :bro:type:`function` (data_str: :bro:type:`string`) : :bro:type:`string` + + Returns a hex dump for given input data. The hex dump renders 16 bytes per + line, with hex on the left and ASCII (where printable) + on the right. + + + :data_str: The string to dump in hex format. + + + :returns: The hex dump of the given string. + + .. bro:see:: string_to_ascii_hex bytestring_to_hexstr + + .. note:: Based on Netdude's hex editor code. + + +.. bro:id:: is_ascii + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`bool` + + Determines whether a given string contains only ASCII characters. + + + :str: The string to examine. + + + :returns: False if any byte value of *str* is greater than 127, and true + otherwise. + + .. bro:see:: to_upper to_lower + +.. bro:id:: join_string_array + + :Type: :bro:type:`function` (sep: :bro:type:`string`, a: :bro:type:`string_array`) : :bro:type:`string` + :Attributes: :bro:attr:`&deprecated` + + Joins all values in the given array of strings with a separator placed + between each element. + + + :sep: The separator to place between each element. + + + :a: The :bro:type:`string_array` (``table[count] of string``). + + + :returns: The concatenation of all elements in *a*, with *sep* placed + between each element. + + .. bro:see:: cat cat_sep string_cat cat_string_array cat_string_array_n + fmt + join_string_vec + +.. bro:id:: join_string_vec + + :Type: :bro:type:`function` (vec: :bro:type:`string_vec`, sep: :bro:type:`string`) : :bro:type:`string` + + Joins all values in the given vector of strings with a separator placed + between each element. + + + :sep: The separator to place between each element. + + + :vec: The :bro:type:`string_vec` (``vector of string``). + + + :returns: The concatenation of all elements in *vec*, with *sep* placed + between each element. + + .. bro:see:: cat cat_sep string_cat cat_string_array cat_string_array_n + fmt + join_string_array + +.. bro:id:: levenshtein_distance + + :Type: :bro:type:`function` (s1: :bro:type:`string`, s2: :bro:type:`string`) : :bro:type:`count` + + Calculates the Levenshtein distance between the two strings. See `Wikipedia + `__ for more information. + + + :s1: The first string. + + + :s2: The second string. + + + :returns: The Levenshtein distance of two strings as a count. + + +.. bro:id:: reverse + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`string` + + Returns a reversed copy of the string + + + :str: The string to reverse. + + + :returns: A reversed copy of *str* + + +.. bro:id:: sort_string_array + + :Type: :bro:type:`function` (a: :bro:type:`string_array`) : :bro:type:`string_array` + :Attributes: :bro:attr:`&deprecated` + + Sorts an array of strings. + + + :a: The :bro:type:`string_array` (``table[count] of string``). + + + :returns: A sorted copy of *a*. + + .. bro:see:: sort + +.. bro:id:: split + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`) : :bro:type:`string_array` + :Attributes: :bro:attr:`&deprecated` + + Splits a string into an array of strings according to a pattern. + + + :str: The string to split. + + + :re: The pattern describing the element separator in *str*. + + + :returns: An array of strings where each element corresponds to a substring + in *str* separated by *re*. + + .. bro:see:: split1 split_all split_n str_split split_string1 split_string_all split_string_n str_split + + .. note:: The returned table starts at index 1. Note that conceptually the + return value is meant to be a vector and this might change in the + future. + + +.. bro:id:: split1 + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`) : :bro:type:`string_array` + :Attributes: :bro:attr:`&deprecated` + + Splits a string *once* into a two-element array of strings according to a + pattern. This function is the same as :bro:id:`split`, but *str* is only + split once (if possible) at the earliest position and an array of two strings + is returned. + + + :str: The string to split. + + + :re: The pattern describing the separator to split *str* in two pieces. + + + :returns: An array of strings with two elements in which the first represents + the substring in *str* up to the first occurence of *re*, and the + second everything after *re*. An array of one string is returned + when *s* cannot be split. + + .. bro:see:: split split_all split_n str_split split_string split_string_all split_string_n str_split + +.. bro:id:: split_all + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`) : :bro:type:`string_array` + :Attributes: :bro:attr:`&deprecated` + + Splits a string into an array of strings according to a pattern. This + function is the same as :bro:id:`split`, except that the separators are + returned as well. For example, ``split_all("a-b--cd", /(\-)+/)`` returns + ``{"a", "-", "b", "--", "cd"}``: odd-indexed elements do not match the + pattern and even-indexed ones do. + + + :str: The string to split. + + + :re: The pattern describing the element separator in *str*. + + + :returns: An array of strings where each two successive elements correspond + to a substring in *str* of the part not matching *re* (odd-indexed) + and the part that matches *re* (even-indexed). + + .. bro:see:: split split1 split_n str_split split_string split_string1 split_string_n str_split + +.. bro:id:: split_n + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`, incl_sep: :bro:type:`bool`, max_num_sep: :bro:type:`count`) : :bro:type:`string_array` + :Attributes: :bro:attr:`&deprecated` + + Splits a string a given number of times into an array of strings according + to a pattern. This function is similar to :bro:id:`split1` and + :bro:id:`split_all`, but with customizable behavior with respect to + including separators in the result and the number of times to split. + + + :str: The string to split. + + + :re: The pattern describing the element separator in *str*. + + + :incl_sep: A flag indicating whether to include the separator matches in the + result (as in :bro:id:`split_all`). + + + :max_num_sep: The number of times to split *str*. + + + :returns: An array of strings where, if *incl_sep* is true, each two + successive elements correspond to a substring in *str* of the part + not matching *re* (odd-indexed) and the part that matches *re* + (even-indexed). + + .. bro:see:: split split1 split_all str_split split_string split_string1 split_string_all str_split + +.. bro:id:: split_string + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`) : :bro:type:`string_vec` + + Splits a string into an array of strings according to a pattern. + + + :str: The string to split. + + + :re: The pattern describing the element separator in *str*. + + + :returns: An array of strings where each element corresponds to a substring + in *str* separated by *re*. + + .. bro:see:: split_string1 split_string_all split_string_n str_split + + +.. bro:id:: split_string1 + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`) : :bro:type:`string_vec` + + Splits a string *once* into a two-element array of strings according to a + pattern. This function is the same as :bro:id:`split_string`, but *str* is + only split once (if possible) at the earliest position and an array of two + strings is returned. + + + :str: The string to split. + + + :re: The pattern describing the separator to split *str* in two pieces. + + + :returns: An array of strings with two elements in which the first represents + the substring in *str* up to the first occurence of *re*, and the + second everything after *re*. An array of one string is returned + when *s* cannot be split. + + .. bro:see:: split_string split_string_all split_string_n str_split + +.. bro:id:: split_string_all + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`) : :bro:type:`string_vec` + + Splits a string into an array of strings according to a pattern. This + function is the same as :bro:id:`split_string`, except that the separators + are returned as well. For example, ``split_string_all("a-b--cd", /(\-)+/)`` + returns ``{"a", "-", "b", "--", "cd"}``: odd-indexed elements do match the + pattern and even-indexed ones do not. + + + :str: The string to split. + + + :re: The pattern describing the element separator in *str*. + + + :returns: An array of strings where each two successive elements correspond + to a substring in *str* of the part not matching *re* (even-indexed) + and the part that matches *re* (odd-indexed). + + .. bro:see:: split_string split_string1 split_string_n str_split + +.. bro:id:: split_string_n + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`, incl_sep: :bro:type:`bool`, max_num_sep: :bro:type:`count`) : :bro:type:`string_vec` + + Splits a string a given number of times into an array of strings according + to a pattern. This function is similar to :bro:id:`split_string1` and + :bro:id:`split_string_all`, but with customizable behavior with respect to + including separators in the result and the number of times to split. + + + :str: The string to split. + + + :re: The pattern describing the element separator in *str*. + + + :incl_sep: A flag indicating whether to include the separator matches in the + result (as in :bro:id:`split_string_all`). + + + :max_num_sep: The number of times to split *str*. + + + :returns: An array of strings where, if *incl_sep* is true, each two + successive elements correspond to a substring in *str* of the part + not matching *re* (even-indexed) and the part that matches *re* + (odd-indexed). + + .. bro:see:: split_string split_string1 split_string_all str_split + +.. bro:id:: str_shell_escape + + :Type: :bro:type:`function` (source: :bro:type:`string`) : :bro:type:`string` + + Takes a string and escapes characters that would allow execution of + commands at the shell level. Must be used before including strings in + :bro:id:`system` or similar calls. + + + :source: The string to escape. + + + :returns: A shell-escaped version of *source*. + + .. bro:see:: system + +.. bro:id:: str_smith_waterman + + :Type: :bro:type:`function` (s1: :bro:type:`string`, s2: :bro:type:`string`, params: :bro:type:`sw_params`) : :bro:type:`sw_substring_vec` + + Uses the Smith-Waterman algorithm to find similar/overlapping substrings. + See `Wikipedia `__. + + + :s1: The first string. + + + :s2: The second string. + + + :params: Parameters for the Smith-Waterman algorithm. + + + :returns: The result of the Smith-Waterman algorithm calculation. + +.. bro:id:: str_split + + :Type: :bro:type:`function` (s: :bro:type:`string`, idx: :bro:type:`index_vec`) : :bro:type:`string_vec` + + Splits a string into substrings with the help of an index vector of cutting + points. + + + :s: The string to split. + + + :idx: The index vector (``vector of count``) with the cutting points. + + + :returns: A vector of strings. + + .. bro:see:: split split1 split_all split_n + +.. bro:id:: strcmp + + :Type: :bro:type:`function` (s1: :bro:type:`string`, s2: :bro:type:`string`) : :bro:type:`int` + + Lexicographically compares two strings. + + + :s1: The first string. + + + :s2: The second string. + + + :returns: An integer greater than, equal to, or less than 0 according as + *s1* is greater than, equal to, or less than *s2*. + +.. bro:id:: string_cat + + :Type: :bro:type:`function` (...) : :bro:type:`string` + + Concatenates all arguments into a single string. The function takes a + variable number of arguments of type string and stitches them together. + + + :returns: The concatenation of all (string) arguments. + + .. bro:see:: cat cat_sep cat_string_array cat_string_array_n + fmt + join_string_vec join_string_array + +.. bro:id:: string_fill + + :Type: :bro:type:`function` (len: :bro:type:`int`, source: :bro:type:`string`) : :bro:type:`string` + + Generates a string of a given size and fills it with repetitions of a source + string. + + + :len: The length of the output string. + + + :source: The string to concatenate repeatedly until *len* has been reached. + + + :returns: A string of length *len* filled with *source*. + +.. bro:id:: string_to_ascii_hex + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`string` + + Returns an ASCII hexadecimal representation of a string. + + + :s: The string to convert to hex. + + + :returns: A copy of *s* where each byte is replaced with the corresponding + hex nibble. + +.. bro:id:: strip + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`string` + + Strips whitespace at both ends of a string. + + + :str: The string to strip the whitespace from. + + + :returns: A copy of *str* with leading and trailing whitespace removed. + + .. bro:see:: sub gsub + +.. bro:id:: strstr + + :Type: :bro:type:`function` (big: :bro:type:`string`, little: :bro:type:`string`) : :bro:type:`count` + + Locates the first occurrence of one string in another. + + + :big: The string to look in. + + + :little: The (smaller) string to find inside *big*. + + + :returns: The location of *little* in *big*, or 0 if *little* is not found in + *big*. + + .. bro:see:: find_all find_last + +.. bro:id:: sub + + :Type: :bro:type:`function` (str: :bro:type:`string`, re: :bro:type:`pattern`, repl: :bro:type:`string`) : :bro:type:`string` + + Substitutes a given replacement string for the first occurrence of a pattern + in a given string. + + + :str: The string to perform the substitution in. + + + :re: The pattern being replaced with *repl*. + + + :repl: The string that replaces *re*. + + + :returns: A copy of *str* with the first occurence of *re* replaced with + *repl*. + + .. bro:see:: gsub subst_string + +.. bro:id:: sub_bytes + + :Type: :bro:type:`function` (s: :bro:type:`string`, start: :bro:type:`count`, n: :bro:type:`int`) : :bro:type:`string` + + Get a substring from a string, given a starting position and length. + + + :s: The string to obtain a substring from. + + + :start: The starting position of the substring in *s*, where 1 is the first + character. As a special case, 0 also represents the first character. + + + :n: The number of characters to extract, beginning at *start*. + + + :returns: A substring of *s* of length *n* from position *start*. + +.. bro:id:: subst_string + + :Type: :bro:type:`function` (s: :bro:type:`string`, from: :bro:type:`string`, to: :bro:type:`string`) : :bro:type:`string` + + Substitutes each (non-overlapping) appearance of a string in another. + + + :s: The string in which to perform the substitution. + + + :from: The string to look for which is replaced with *to*. + + + :to: The string that replaces all occurrences of *from* in *s*. + + + :returns: A copy of *s* where each occurrence of *from* is replaced with *to*. + + .. bro:see:: sub gsub + +.. bro:id:: to_lower + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`string` + + Replaces all uppercase letters in a string with their lowercase counterpart. + + + :str: The string to convert to lowercase letters. + + + :returns: A copy of the given string with the uppercase letters (as indicated + by ``isascii`` and ``isupper``) folded to lowercase + (via ``tolower``). + + .. bro:see:: to_upper is_ascii + +.. bro:id:: to_string_literal + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`string` + + Replaces non-printable characters in a string with escaped sequences. The + mappings are: + + - values not in *[32, 126]* to ``\xXX`` + - ``\`` to ``\\`` + - ``'`` and ``""`` to ``\'`` and ``\"``, respectively. + + + :str: The string to escape. + + + :returns: The escaped string. + + .. bro:see:: clean escape_string + +.. bro:id:: to_upper + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`string` + + Replaces all lowercase letters in a string with their uppercase counterpart. + + + :str: The string to convert to uppercase letters. + + + :returns: A copy of the given string with the lowercase letters (as indicated + by ``isascii`` and ``islower``) folded to uppercase + (via ``toupper``). + + .. bro:see:: to_lower is_ascii + + diff --git a/doc/scripts/base/bif/top-k.bif.bro.rst b/doc/scripts/base/bif/top-k.bif.bro.rst new file mode 100644 index 0000000000..145bb050c0 --- /dev/null +++ b/doc/scripts/base/bif/top-k.bif.bro.rst @@ -0,0 +1,206 @@ +:tocdepth: 3 + +base/bif/top-k.bif.bro +====================== +.. bro:namespace:: GLOBAL + +Functions to probabilistically determine top-k elements. + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +================================================ ========================================================================== +:bro:id:`topk_add`: :bro:type:`function` Add a new observed object to the data structure. +:bro:id:`topk_count`: :bro:type:`function` Get an overestimated count of how often a value has been encountered. +:bro:id:`topk_epsilon`: :bro:type:`function` Get the maximal overestimation for count. +:bro:id:`topk_get_top`: :bro:type:`function` Get the first *k* elements of the top-k data structure. +:bro:id:`topk_init`: :bro:type:`function` Creates a top-k data structure which tracks *size* elements. +:bro:id:`topk_merge`: :bro:type:`function` Merge the second top-k data structure into the first. +:bro:id:`topk_merge_prune`: :bro:type:`function` Merge the second top-k data structure into the first and prunes the final + data structure back to the size given on initialization. +:bro:id:`topk_size`: :bro:type:`function` Get the number of elements this data structure is supposed to track (given + on init). +:bro:id:`topk_sum`: :bro:type:`function` Get the sum of all counts of all elements in the data structure. +================================================ ========================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: topk_add + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of topk, value: :bro:type:`any`) : :bro:type:`any` + + Add a new observed object to the data structure. + + .. note:: The first added object sets the type of data tracked by + the top-k data structure. All following values have to be of the same + type. + + + :handle: the TopK handle. + + + :value: observed value. + + .. bro:see:: topk_init topk_get_top topk_count topk_epsilon + topk_size topk_sum topk_merge topk_merge_prune + +.. bro:id:: topk_count + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of topk, value: :bro:type:`any`) : :bro:type:`count` + + Get an overestimated count of how often a value has been encountered. + + .. note:: The value has to be part of the currently tracked elements, + otherwise 0 will be returned and an error message will be added to + reporter. + + + :handle: the TopK handle. + + + :value: Value to look up count for. + + + :returns: Overestimated number for how often the element has been encountered. + + .. bro:see:: topk_init topk_add topk_get_top topk_epsilon + topk_size topk_sum topk_merge topk_merge_prune + +.. bro:id:: topk_epsilon + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of topk, value: :bro:type:`any`) : :bro:type:`count` + + Get the maximal overestimation for count. + + .. note:: Same restrictions as for :bro:id:`topk_count` apply. + + + :handle: the TopK handle. + + + :value: Value to look up epsilon for. + + + :returns: Number which represents the maximal overestimation for the count of + this element. + + .. bro:see:: topk_init topk_add topk_get_top topk_count + topk_size topk_sum topk_merge topk_merge_prune + +.. bro:id:: topk_get_top + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of topk, k: :bro:type:`count`) : :bro:type:`any_vec` + + Get the first *k* elements of the top-k data structure. + + + :handle: the TopK handle. + + + :k: number of elements to return. + + + :returns: vector of the first k elements. + + .. bro:see:: topk_init topk_add topk_count topk_epsilon + topk_size topk_sum topk_merge topk_merge_prune + +.. bro:id:: topk_init + + :Type: :bro:type:`function` (size: :bro:type:`count`) : :bro:type:`opaque` of topk + + Creates a top-k data structure which tracks *size* elements. + + + :size: number of elements to track. + + + :returns: Opaque pointer to the data structure. + + .. bro:see:: topk_add topk_get_top topk_count topk_epsilon + topk_size topk_sum topk_merge topk_merge_prune + +.. bro:id:: topk_merge + + :Type: :bro:type:`function` (handle1: :bro:type:`opaque` of topk, handle2: :bro:type:`opaque` of topk) : :bro:type:`any` + + Merge the second top-k data structure into the first. + + + :handle1: the first TopK handle. + + + :handle2: the second TopK handle. + + .. note:: This does not remove any elements, the resulting data structure + can be bigger than the maximum size given on initialization. + + .. bro:see:: topk_init topk_add topk_get_top topk_count topk_epsilon + topk_size topk_sum topk_merge_prune + +.. bro:id:: topk_merge_prune + + :Type: :bro:type:`function` (handle1: :bro:type:`opaque` of topk, handle2: :bro:type:`opaque` of topk) : :bro:type:`any` + + Merge the second top-k data structure into the first and prunes the final + data structure back to the size given on initialization. + + .. note:: Use with care and only when being aware of the restrictions this + entails. Do not call :bro:id:`topk_size` or :bro:id:`topk_add` afterwards, + results will probably not be what you expect. + + + :handle1: the TopK handle in which the second TopK structure is merged. + + + :handle2: the TopK handle in which is merged into the first TopK structure. + + .. bro:see:: topk_init topk_add topk_get_top topk_count topk_epsilon + topk_size topk_sum topk_merge + +.. bro:id:: topk_size + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of topk) : :bro:type:`count` + + Get the number of elements this data structure is supposed to track (given + on init). + + .. note:: Note that the actual number of elements in the data structure can + be lower or higher (due to non-pruned merges) than this. + + + :handle: the TopK handle. + + + :returns: size given during initialization. + + .. bro:see:: topk_init topk_add topk_get_top topk_count topk_epsilon + topk_sum topk_merge topk_merge_prune + +.. bro:id:: topk_sum + + :Type: :bro:type:`function` (handle: :bro:type:`opaque` of topk) : :bro:type:`count` + + Get the sum of all counts of all elements in the data structure. + + .. note:: This is equal to the number of all inserted objects if the data + structure never has been pruned. Do not use after + calling :bro:id:`topk_merge_prune` (will throw a warning message if used + afterwards). + + + :handle: the TopK handle. + + + :returns: sum of all counts. + + .. bro:see:: topk_init topk_add topk_get_top topk_count topk_epsilon + topk_size topk_merge topk_merge_prune + + diff --git a/doc/scripts/base/bif/types.bif.bro.rst b/doc/scripts/base/bif/types.bif.bro.rst new file mode 100644 index 0000000000..cc7ceba0a5 --- /dev/null +++ b/doc/scripts/base/bif/types.bif.bro.rst @@ -0,0 +1,347 @@ +:tocdepth: 3 + +base/bif/types.bif.bro +====================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: MOUNT3 +.. bro:namespace:: NFS3 +.. bro:namespace:: Reporter +.. bro:namespace:: Tunnel + +Declaration of various types that the Bro core uses internally. + +:Namespaces: GLOBAL, MOUNT3, NFS3, Reporter, Tunnel + +Summary +~~~~~~~ +Types +##### +=================================================== = +:bro:type:`MOUNT3::auth_flavor_t`: :bro:type:`enum` +:bro:type:`MOUNT3::proc_t`: :bro:type:`enum` +:bro:type:`MOUNT3::status_t`: :bro:type:`enum` +:bro:type:`NFS3::createmode_t`: :bro:type:`enum` +:bro:type:`NFS3::file_type_t`: :bro:type:`enum` +:bro:type:`NFS3::proc_t`: :bro:type:`enum` +:bro:type:`NFS3::stable_how_t`: :bro:type:`enum` +:bro:type:`NFS3::status_t`: :bro:type:`enum` +:bro:type:`NFS3::time_how_t`: :bro:type:`enum` +:bro:type:`Reporter::Level`: :bro:type:`enum` +:bro:type:`Tunnel::Type`: :bro:type:`enum` +:bro:type:`layer3_proto`: :bro:type:`enum` +:bro:type:`link_encap`: :bro:type:`enum` +:bro:type:`rpc_status`: :bro:type:`enum` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: MOUNT3::auth_flavor_t + + :Type: :bro:type:`enum` + + .. bro:enum:: MOUNT3::AUTH_NULL MOUNT3::auth_flavor_t + + .. bro:enum:: MOUNT3::AUTH_UNIX MOUNT3::auth_flavor_t + + .. bro:enum:: MOUNT3::AUTH_SHORT MOUNT3::auth_flavor_t + + .. bro:enum:: MOUNT3::AUTH_DES MOUNT3::auth_flavor_t + + +.. bro:type:: MOUNT3::proc_t + + :Type: :bro:type:`enum` + + .. bro:enum:: MOUNT3::PROC_NULL MOUNT3::proc_t + + .. bro:enum:: MOUNT3::PROC_MNT MOUNT3::proc_t + + .. bro:enum:: MOUNT3::PROC_DUMP MOUNT3::proc_t + + .. bro:enum:: MOUNT3::PROC_UMNT MOUNT3::proc_t + + .. bro:enum:: MOUNT3::PROC_UMNT_ALL MOUNT3::proc_t + + .. bro:enum:: MOUNT3::PROC_EXPORT MOUNT3::proc_t + + .. bro:enum:: MOUNT3::PROC_END_OF_PROCS MOUNT3::proc_t + + +.. bro:type:: MOUNT3::status_t + + :Type: :bro:type:`enum` + + .. bro:enum:: MOUNT3::MNT3_OK MOUNT3::status_t + + .. bro:enum:: MOUNT3::MNT3ERR_PERM MOUNT3::status_t + + .. bro:enum:: MOUNT3::MNT3ERR_NOENT MOUNT3::status_t + + .. bro:enum:: MOUNT3::MNT3ERR_IO MOUNT3::status_t + + .. bro:enum:: MOUNT3::MNT3ERR_ACCES MOUNT3::status_t + + .. bro:enum:: MOUNT3::MNT3ERR_NOTDIR MOUNT3::status_t + + .. bro:enum:: MOUNT3::MNT3ERR_INVAL MOUNT3::status_t + + .. bro:enum:: MOUNT3::MNT3ERR_NAMETOOLONG MOUNT3::status_t + + .. bro:enum:: MOUNT3::MNT3ERR_NOTSUPP MOUNT3::status_t + + .. bro:enum:: MOUNT3::MNT3ERR_SERVERFAULT MOUNT3::status_t + + .. bro:enum:: MOUNT3::MOUNT3ERR_UNKNOWN MOUNT3::status_t + + +.. bro:type:: NFS3::createmode_t + + :Type: :bro:type:`enum` + + .. bro:enum:: NFS3::UNCHECKED NFS3::createmode_t + + .. bro:enum:: NFS3::GUARDED NFS3::createmode_t + + .. bro:enum:: NFS3::EXCLUSIVE NFS3::createmode_t + + +.. bro:type:: NFS3::file_type_t + + :Type: :bro:type:`enum` + + .. bro:enum:: NFS3::FTYPE_REG NFS3::file_type_t + + .. bro:enum:: NFS3::FTYPE_DIR NFS3::file_type_t + + .. bro:enum:: NFS3::FTYPE_BLK NFS3::file_type_t + + .. bro:enum:: NFS3::FTYPE_CHR NFS3::file_type_t + + .. bro:enum:: NFS3::FTYPE_LNK NFS3::file_type_t + + .. bro:enum:: NFS3::FTYPE_SOCK NFS3::file_type_t + + .. bro:enum:: NFS3::FTYPE_FIFO NFS3::file_type_t + + +.. bro:type:: NFS3::proc_t + + :Type: :bro:type:`enum` + + .. bro:enum:: NFS3::PROC_NULL NFS3::proc_t + + .. bro:enum:: NFS3::PROC_GETATTR NFS3::proc_t + + .. bro:enum:: NFS3::PROC_SETATTR NFS3::proc_t + + .. bro:enum:: NFS3::PROC_LOOKUP NFS3::proc_t + + .. bro:enum:: NFS3::PROC_ACCESS NFS3::proc_t + + .. bro:enum:: NFS3::PROC_READLINK NFS3::proc_t + + .. bro:enum:: NFS3::PROC_READ NFS3::proc_t + + .. bro:enum:: NFS3::PROC_WRITE NFS3::proc_t + + .. bro:enum:: NFS3::PROC_CREATE NFS3::proc_t + + .. bro:enum:: NFS3::PROC_MKDIR NFS3::proc_t + + .. bro:enum:: NFS3::PROC_SYMLINK NFS3::proc_t + + .. bro:enum:: NFS3::PROC_MKNOD NFS3::proc_t + + .. bro:enum:: NFS3::PROC_REMOVE NFS3::proc_t + + .. bro:enum:: NFS3::PROC_RMDIR NFS3::proc_t + + .. bro:enum:: NFS3::PROC_RENAME NFS3::proc_t + + .. bro:enum:: NFS3::PROC_LINK NFS3::proc_t + + .. bro:enum:: NFS3::PROC_READDIR NFS3::proc_t + + .. bro:enum:: NFS3::PROC_READDIRPLUS NFS3::proc_t + + .. bro:enum:: NFS3::PROC_FSSTAT NFS3::proc_t + + .. bro:enum:: NFS3::PROC_FSINFO NFS3::proc_t + + .. bro:enum:: NFS3::PROC_PATHCONF NFS3::proc_t + + .. bro:enum:: NFS3::PROC_COMMIT NFS3::proc_t + + .. bro:enum:: NFS3::PROC_END_OF_PROCS NFS3::proc_t + + +.. bro:type:: NFS3::stable_how_t + + :Type: :bro:type:`enum` + + .. bro:enum:: NFS3::UNSTABLE NFS3::stable_how_t + + .. bro:enum:: NFS3::DATA_SYNC NFS3::stable_how_t + + .. bro:enum:: NFS3::FILE_SYNC NFS3::stable_how_t + + +.. bro:type:: NFS3::status_t + + :Type: :bro:type:`enum` + + .. bro:enum:: NFS3::NFS3ERR_OK NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_PERM NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_NOENT NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_IO NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_NXIO NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_ACCES NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_EXIST NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_XDEV NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_NODEV NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_NOTDIR NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_ISDIR NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_INVAL NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_FBIG NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_NOSPC NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_ROFS NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_MLINK NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_NAMETOOLONG NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_NOTEMPTY NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_DQUOT NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_STALE NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_REMOTE NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_BADHANDLE NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_NOT_SYNC NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_BAD_COOKIE NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_NOTSUPP NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_TOOSMALL NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_SERVERFAULT NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_BADTYPE NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_JUKEBOX NFS3::status_t + + .. bro:enum:: NFS3::NFS3ERR_UNKNOWN NFS3::status_t + + +.. bro:type:: NFS3::time_how_t + + :Type: :bro:type:`enum` + + .. bro:enum:: NFS3::DONT_CHANGE NFS3::time_how_t + + .. bro:enum:: NFS3::SET_TO_SERVER_TIME NFS3::time_how_t + + .. bro:enum:: NFS3::SET_TO_CLIENT_TIME NFS3::time_how_t + + +.. bro:type:: Reporter::Level + + :Type: :bro:type:`enum` + + .. bro:enum:: Reporter::INFO Reporter::Level + + .. bro:enum:: Reporter::WARNING Reporter::Level + + .. bro:enum:: Reporter::ERROR Reporter::Level + + +.. bro:type:: Tunnel::Type + + :Type: :bro:type:`enum` + + .. bro:enum:: Tunnel::NONE Tunnel::Type + + .. bro:enum:: Tunnel::IP Tunnel::Type + + .. bro:enum:: Tunnel::AYIYA Tunnel::Type + + .. bro:enum:: Tunnel::TEREDO Tunnel::Type + + .. bro:enum:: Tunnel::SOCKS Tunnel::Type + + .. bro:enum:: Tunnel::GTPv1 Tunnel::Type + + .. bro:enum:: Tunnel::HTTP Tunnel::Type + + .. bro:enum:: Tunnel::GRE Tunnel::Type + + +.. bro:type:: layer3_proto + + :Type: :bro:type:`enum` + + .. bro:enum:: L3_IPV4 layer3_proto + + .. bro:enum:: L3_IPV6 layer3_proto + + .. bro:enum:: L3_ARP layer3_proto + + .. bro:enum:: L3_UNKNOWN layer3_proto + + +.. bro:type:: link_encap + + :Type: :bro:type:`enum` + + .. bro:enum:: LINK_ETHERNET link_encap + + .. bro:enum:: LINK_UNKNOWN link_encap + + +.. bro:type:: rpc_status + + :Type: :bro:type:`enum` + + .. bro:enum:: RPC_SUCCESS rpc_status + + .. bro:enum:: RPC_PROG_UNAVAIL rpc_status + + .. bro:enum:: RPC_PROG_MISMATCH rpc_status + + .. bro:enum:: RPC_PROC_UNAVAIL rpc_status + + .. bro:enum:: RPC_GARBAGE_ARGS rpc_status + + .. bro:enum:: RPC_SYSTEM_ERR rpc_status + + .. bro:enum:: RPC_TIMEOUT rpc_status + + .. bro:enum:: RPC_VERS_MISMATCH rpc_status + + .. bro:enum:: RPC_AUTH_ERROR rpc_status + + .. bro:enum:: RPC_UNKNOWN_ERROR rpc_status + + + diff --git a/doc/scripts/base/files/extract/__load__.bro.rst b/doc/scripts/base/files/extract/__load__.bro.rst new file mode 100644 index 0000000000..890c889907 --- /dev/null +++ b/doc/scripts/base/files/extract/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/files/extract/__load__.bro +=============================== + + +:Imports: :doc:`base/files/extract/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/files/extract/index.rst b/doc/scripts/base/files/extract/index.rst new file mode 100644 index 0000000000..3d863e7ac9 --- /dev/null +++ b/doc/scripts/base/files/extract/index.rst @@ -0,0 +1,13 @@ +:orphan: + +Package: base/files/extract +=========================== + +Support for extracting files with the file analysis framework. + +:doc:`/scripts/base/files/extract/__load__.bro` + + +:doc:`/scripts/base/files/extract/main.bro` + + diff --git a/doc/scripts/base/files/extract/main.bro.rst b/doc/scripts/base/files/extract/main.bro.rst new file mode 100644 index 0000000000..d5ee563b8d --- /dev/null +++ b/doc/scripts/base/files/extract/main.bro.rst @@ -0,0 +1,84 @@ +:tocdepth: 3 + +base/files/extract/main.bro +=========================== +.. bro:namespace:: FileExtract + + +:Namespace: FileExtract +:Imports: :doc:`base/frameworks/files `, :doc:`base/utils/paths.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +========================================================================== ================================================================ +:bro:id:`FileExtract::default_limit`: :bro:type:`count` :bro:attr:`&redef` The default max size for extracted files (they won't exceed this + number of bytes). +========================================================================== ================================================================ + +Redefinable Options +################### +==================================================================== ======================================== +:bro:id:`FileExtract::prefix`: :bro:type:`string` :bro:attr:`&redef` The prefix where files are extracted to. +==================================================================== ======================================== + +Redefinitions +############# +====================================================================== = +:bro:type:`Files::AnalyzerArgs`: :bro:type:`record` :bro:attr:`&redef` +:bro:type:`Files::Info`: :bro:type:`record` :bro:attr:`&redef` +====================================================================== = + +Functions +######### +====================================================== ============================================= +:bro:id:`FileExtract::set_limit`: :bro:type:`function` Sets the maximum allowed extracted file size. +====================================================== ============================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: FileExtract::default_limit + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``104857600`` + + The default max size for extracted files (they won't exceed this + number of bytes). A value of zero means unlimited. + +Redefinable Options +################### +.. bro:id:: FileExtract::prefix + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"./extract_files/"`` + + The prefix where files are extracted to. + +Functions +######### +.. bro:id:: FileExtract::set_limit + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`, args: :bro:type:`Files::AnalyzerArgs`, n: :bro:type:`count`) : :bro:type:`bool` + + Sets the maximum allowed extracted file size. + + + :f: A file that's being extracted. + + + :args: Arguments that identify a file extraction analyzer. + + + :n: Allowed number of bytes to be extracted. + + + :returns: false if a file extraction analyzer wasn't active for + the file, else true. + + diff --git a/doc/scripts/base/files/hash/__load__.bro.rst b/doc/scripts/base/files/hash/__load__.bro.rst new file mode 100644 index 0000000000..f46fc22462 --- /dev/null +++ b/doc/scripts/base/files/hash/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/files/hash/__load__.bro +============================ + + +:Imports: :doc:`base/files/hash/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/files/hash/index.rst b/doc/scripts/base/files/hash/index.rst new file mode 100644 index 0000000000..3f8608261e --- /dev/null +++ b/doc/scripts/base/files/hash/index.rst @@ -0,0 +1,13 @@ +:orphan: + +Package: base/files/hash +======================== + +Support for file hashes with the file analysis framework. + +:doc:`/scripts/base/files/hash/__load__.bro` + + +:doc:`/scripts/base/files/hash/main.bro` + + diff --git a/doc/scripts/base/files/hash/main.bro.rst b/doc/scripts/base/files/hash/main.bro.rst new file mode 100644 index 0000000000..d08cd596d0 --- /dev/null +++ b/doc/scripts/base/files/hash/main.bro.rst @@ -0,0 +1,22 @@ +:tocdepth: 3 + +base/files/hash/main.bro +======================== +.. bro:namespace:: FileHash + + +:Namespace: FileHash +:Imports: :doc:`base/frameworks/files ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================================== = +:bro:type:`Files::Info`: :bro:type:`record` :bro:attr:`&redef` +============================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/files/pe/__load__.bro.rst b/doc/scripts/base/files/pe/__load__.bro.rst new file mode 100644 index 0000000000..2f51318dba --- /dev/null +++ b/doc/scripts/base/files/pe/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/files/pe/__load__.bro +========================== + + +:Imports: :doc:`base/files/pe/consts.bro `, :doc:`base/files/pe/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/files/pe/consts.bro.rst b/doc/scripts/base/files/pe/consts.bro.rst new file mode 100644 index 0000000000..4d2e46d970 --- /dev/null +++ b/doc/scripts/base/files/pe/consts.bro.rst @@ -0,0 +1,281 @@ +:tocdepth: 3 + +base/files/pe/consts.bro +======================== +.. bro:namespace:: PE + + +:Namespace: PE + +Summary +~~~~~~~ +Constants +######### +========================================================================================================================== = +:bro:id:`PE::directories`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`PE::dll_characteristics`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`PE::file_characteristics`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`PE::machine_types`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`PE::os_versions`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`PE::section_characteristics`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`PE::section_descs`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`PE::windows_subsystems`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +========================================================================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: PE::directories + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "Resource Table", + [9] = "TLS Table", + [6] = "Debug", + [11] = "Bound Import", + [14] = "CLR Runtime Header", + [4] = "Certificate Table", + [1] = "Import Table", + [8] = "Global Ptr", + [7] = "Architecture", + [15] = "Reserved", + [5] = "Base Relocation Table", + [10] = "Load Config Table", + [0] = "Export Table", + [3] = "Exception Table", + [12] = "IAT", + [13] = "Delay Import Descriptor" + } + + +.. bro:id:: PE::dll_characteristics + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [256] = "NX_COMPAT", + [512] = "NO_ISOLATION", + [128] = "FORCE_INTEGRITY", + [2048] = "NO_BIND", + [32768] = "TERMINAL_SERVER_AWARE", + [8192] = "WDM_DRIVER", + [1024] = "NO_SEH", + [64] = "DYNAMIC_BASE" + } + + +.. bro:id:: PE::file_characteristics + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "EXECUTABLE_IMAGE", + [4] = "LINE_NUMS_STRIPPED", + [256] = "32BIT_MACHINE", + [512] = "DEBUG_STRIPPED", + [1] = "RELOCS_STRIPPED", + [8] = "LOCAL_SYMS_STRIPPED", + [16384] = "UP_SYSTEM_ONLY", + [32] = "LARGE_ADDRESS_AWARE", + [128] = "BYTES_REVERSED_LO", + [2048] = "NET_RUN_FROM_SWAP", + [32768] = "BYTES_REVERSED_HI", + [8192] = "DLL", + [1024] = "REMOVABLE_RUN_FROM_SWAP", + [4096] = "SYSTEM", + [16] = "AGGRESSIVE_WS_TRIM" + } + + +.. bro:id:: PE::machine_types + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [496] = "POWERPC", + [870] = "MIPSFPU", + [497] = "POWERPCFP", + [450] = "THUMB", + [512] = "IA64", + [422] = "SH4", + [361] = "WCEMIPSV2", + [3772] = "EBC", + [34404] = "AMD64", + [452] = "ARMNT", + [358] = "R4000", + [448] = "ARM", + [467] = "AM33", + [43620] = "ARM64", + [36929] = "M32R", + [332] = "I386", + [418] = "SH3", + [0] = "UNKNOWN", + [1126] = "MIPSFPU16", + [424] = "SH5", + [419] = "SH3DSP", + [614] = "MIPS16" + } + + +.. bro:id:: PE::os_versions + + :Type: :bro:type:`table` [:bro:type:`count`, :bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [6, 0] = "Windows Vista or Server 2008", + [5, 0] = "Windows 2000", + [6, 1] = "Windows 7 or Server 2008 R2", + [6, 3] = "Windows 8.1 or Server 2012 R2", + [3, 50] = "Windows NT 3.5", + [2, 11] = "Windows 2.11", + [1, 4] = "Windows 1.04", + [1, 0] = "Windows 1.0", + [3, 10] = "Windows 3.1 or NT 3.1", + [2, 10] = "Windows 2.10", + [4, 90] = "Windows Me", + [3, 2] = "Windows 3.2", + [2, 0] = "Windows 2.0", + [4, 10] = "Windows 98", + [3, 51] = "Windows NT 3.51", + [1, 1] = "Windows 1.01", + [5, 1] = "Windows XP", + [10, 0] = "Windows 10", + [3, 0] = "Windows 3.0", + [6, 4] = "Windows 10 Technical Preview", + [6, 2] = "Windows 8 or Server 2012", + [3, 11] = "Windows for Workgroups 3.11", + [4, 0] = "Windows 95 or NT 4.0", + [1, 3] = "Windows 1.03", + [5, 2] = "Windows XP x64 or Server 2003" + } + + +.. bro:id:: PE::section_characteristics + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [10485760] = "ALIGN_512BYTES", + [14680064] = "ALIGN_8192BYTES", + [16777216] = "LNK_NRELOC_OVFL", + [7340032] = "ALIGN_64BYTES", + [256] = "LNK_OTHER", + [512] = "LNK_INFO", + [131072] = "MEM_16BIT", + [8388608] = "ALIGN_128BYTES", + [33554432] = "MEM_DISCARDABLE", + [8] = "TYPE_NO_PAD", + [12582912] = "ALIGN_2048BYTES", + [536870912] = "MEM_EXECUTE", + [67108864] = "MEM_NOT_CACHED", + [524288] = "MEM_PRELOAD", + [262144] = "MEM_LOCKED", + [32] = "CNT_CODE", + [128] = "CNT_UNINITIALIZED_DATA", + [1048576] = "ALIGN_1BYTES", + [4194304] = "ALIGN_8BYTES", + [2048] = "LNK_REMOVE", + [32768] = "GPREL", + [1073741824] = "MEM_READ", + [2097152] = "ALIGN_2BYTES", + [9437184] = "ALIGN_256BYTES", + [13631488] = "ALIGN_4096BYTES", + [134217728] = "MEM_NOT_PAGED", + [11534336] = "ALIGN_1024BYTES", + [2147483648] = "MEM_WRITE", + [64] = "CNT_INITIALIZED_DATA", + [5242880] = "ALIGN_16BYTES", + [4096] = "LNK_COMDAT", + [268435456] = "MEM_SHARED", + [3145728] = "ALIGN_4BYTES", + [6291456] = "ALIGN_32BYTES" + } + + +.. bro:id:: PE::section_descs + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [".debug$T"] = "Debug types", + [".bss"] = "Uninitialized data", + [".rdata"] = "Read-only initialized data", + [".debug$S"] = "Debug symbols", + [".idlsym"] = "Includes registered SEH to support IDL attributes", + [".tls$"] = "Thread-local storage", + [".sdata"] = "GP-relative initialized data", + [".xdata"] = "Exception information", + [".reloc"] = "Image relocations", + [".srdata"] = "GP-relative read-only data", + [".edata"] = "Export tables", + [".tls"] = "Thread-local storage", + [".pdata"] = "Exception information", + [".debug$F"] = "Generated FPO debug information", + [".drective"] = "Linker options", + [".sbss"] = "GP-relative uninitialized data", + [".idata"] = "Import tables", + [".sxdata"] = "Registered exception handler data", + [".text"] = "Executable code", + [".vsdata"] = "GP-relative initialized data", + [".debug$P"] = "Precompiled debug types", + [".rsrc"] = "Resource directory", + [".cormeta"] = "CLR metadata that indicates that the object file contains managed code", + [".data"] = "Initialized data" + } + + +.. bro:id:: PE::windows_subsystems + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "WINDOWS_GUI", + [9] = "WINDOWS_CE_GUI", + [11] = "EFI_BOOT_SERVICE_DRIVER", + [14] = "XBOX", + [1] = "NATIVE", + [7] = "POSIX_CUI", + [10] = "EFI_APPLICATION", + [0] = "UNKNOWN", + [3] = "WINDOWS_CUI", + [12] = "EFI_RUNTIME_DRIVER", + [13] = "EFI_ROM" + } + + + diff --git a/doc/scripts/base/files/pe/index.rst b/doc/scripts/base/files/pe/index.rst new file mode 100644 index 0000000000..ac3af159ec --- /dev/null +++ b/doc/scripts/base/files/pe/index.rst @@ -0,0 +1,16 @@ +:orphan: + +Package: base/files/pe +====================== + +Support for Portable Executable (PE) file analysis. + +:doc:`/scripts/base/files/pe/__load__.bro` + + +:doc:`/scripts/base/files/pe/consts.bro` + + +:doc:`/scripts/base/files/pe/main.bro` + + diff --git a/doc/scripts/base/files/pe/main.bro.rst b/doc/scripts/base/files/pe/main.bro.rst new file mode 100644 index 0000000000..b28709c0fa --- /dev/null +++ b/doc/scripts/base/files/pe/main.bro.rst @@ -0,0 +1,115 @@ +:tocdepth: 3 + +base/files/pe/main.bro +====================== +.. bro:namespace:: PE + + +:Namespace: PE +:Imports: :doc:`base/files/pe/consts.bro ` + +Summary +~~~~~~~ +Types +##### +======================================== = +:bro:type:`PE::Info`: :bro:type:`record` +======================================== = + +Redefinitions +############# +========================================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`fa_file`: :bro:type:`record` :bro:attr:`&redef` +========================================================== = + +Events +###### +======================================= =================================== +:bro:id:`PE::log_pe`: :bro:type:`event` Event for accessing logged records. +======================================= =================================== + +Hooks +##### +======================================== ==================================================== +:bro:id:`PE::set_file`: :bro:type:`hook` A hook that gets called when we first see a PE file. +======================================== ==================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: PE::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Current timestamp. + + id: :bro:type:`string` :bro:attr:`&log` + File id of this portable executable file. + + machine: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The target machine that the file was compiled for. + + compile_ts: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + The time that the file was created at. + + os: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The required operating system. + + subsystem: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The subsystem that is required to run this file. + + is_exe: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Is the file an executable, or just an object file? + + is_64bit: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Is the file a 64-bit executable? + + uses_aslr: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Does the file support Address Space Layout Randomization? + + uses_dep: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Does the file support Data Execution Prevention? + + uses_code_integrity: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Does the file enforce code integrity checks? + + uses_seh: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Does the file use structured exception handing? + + has_import_table: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Does the file have an import table? + + has_export_table: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Does the file have an export table? + + has_cert_table: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Does the file have an attribute certificate table? + + has_debug_data: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Does the file have a debug table? + + section_names: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The names of the sections, in order. + + +Events +###### +.. bro:id:: PE::log_pe + + :Type: :bro:type:`event` (rec: :bro:type:`PE::Info`) + + Event for accessing logged records. + +Hooks +##### +.. bro:id:: PE::set_file + + :Type: :bro:type:`hook` (f: :bro:type:`fa_file`) : :bro:type:`bool` + + A hook that gets called when we first see a PE file. + + diff --git a/doc/scripts/base/files/unified2/__load__.bro.rst b/doc/scripts/base/files/unified2/__load__.bro.rst new file mode 100644 index 0000000000..96a68b8510 --- /dev/null +++ b/doc/scripts/base/files/unified2/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/files/unified2/__load__.bro +================================ + + +:Imports: :doc:`base/files/unified2/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/files/unified2/index.rst b/doc/scripts/base/files/unified2/index.rst new file mode 100644 index 0000000000..067eb9578f --- /dev/null +++ b/doc/scripts/base/files/unified2/index.rst @@ -0,0 +1,13 @@ +:orphan: + +Package: base/files/unified2 +============================ + +Support for Unified2 files in the file analysis framework. + +:doc:`/scripts/base/files/unified2/__load__.bro` + + +:doc:`/scripts/base/files/unified2/main.bro` + + diff --git a/doc/scripts/base/files/unified2/main.bro.rst b/doc/scripts/base/files/unified2/main.bro.rst new file mode 100644 index 0000000000..6a39cded81 --- /dev/null +++ b/doc/scripts/base/files/unified2/main.bro.rst @@ -0,0 +1,166 @@ +:tocdepth: 3 + +base/files/unified2/main.bro +============================ +.. bro:namespace:: Unified2 + + +:Namespace: Unified2 +:Imports: :doc:`base/utils/dir.bro `, :doc:`base/utils/paths.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================================ ===================================================================== +:bro:id:`Unified2::classification_config`: :bro:type:`string` :bro:attr:`&redef` The classification.config file you would like to use for your alerts. +:bro:id:`Unified2::gen_msg`: :bro:type:`string` :bro:attr:`&redef` The gen-msg.map file you would like to use for your alerts. +:bro:id:`Unified2::sid_msg`: :bro:type:`string` :bro:attr:`&redef` The sid-msg.map file you would like to use for your alerts. +:bro:id:`Unified2::watch_dir`: :bro:type:`string` :bro:attr:`&redef` Directory to watch for Unified2 records. +:bro:id:`Unified2::watch_file`: :bro:type:`string` :bro:attr:`&redef` File to watch for Unified2 files. +================================================================================ ===================================================================== + +Types +##### +=================================================================== = +:bro:type:`Unified2::Info`: :bro:type:`record` :bro:attr:`&log` +:bro:type:`Unified2::PacketID`: :bro:type:`record` :bro:attr:`&log` +=================================================================== = + +Redefinitions +############# +========================================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`fa_file`: :bro:type:`record` :bro:attr:`&redef` +========================================================== = + +Events +###### +=================================================== =================================================== +:bro:id:`Unified2::alert`: :bro:type:`event` Reconstructed "alert" which combines related events + and packets. +:bro:id:`Unified2::log_unified2`: :bro:type:`event` The event for accessing logged records. +=================================================== =================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Unified2::classification_config + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + The classification.config file you would like to use for your alerts. + +.. bro:id:: Unified2::gen_msg + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + The gen-msg.map file you would like to use for your alerts. + +.. bro:id:: Unified2::sid_msg + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + The sid-msg.map file you would like to use for your alerts. + +.. bro:id:: Unified2::watch_dir + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Directory to watch for Unified2 records. + +.. bro:id:: Unified2::watch_file + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + File to watch for Unified2 files. + +Types +##### +.. bro:type:: Unified2::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp attached to the alert. + + id: :bro:type:`Unified2::PacketID` :bro:attr:`&log` + Addresses and ports for the connection. + + sensor_id: :bro:type:`count` :bro:attr:`&log` + Sensor that originated this event. + + signature_id: :bro:type:`count` :bro:attr:`&log` + Sig id for this generator. + + signature: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + A string representation of the *signature_id* field if a sid_msg.map file was loaded. + + generator_id: :bro:type:`count` :bro:attr:`&log` + Which generator generated the alert? + + generator: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + A string representation of the *generator_id* field if a gen_msg.map file was loaded. + + signature_revision: :bro:type:`count` :bro:attr:`&log` + Sig revision for this id. + + classification_id: :bro:type:`count` :bro:attr:`&log` + Event classification. + + classification: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Descriptive classification string. + + priority_id: :bro:type:`count` :bro:attr:`&log` + Event priority. + + event_id: :bro:type:`count` :bro:attr:`&log` + Event ID. + + packet: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Some of the packet data. + :Attributes: :bro:attr:`&log` + + +.. bro:type:: Unified2::PacketID + + :Type: :bro:type:`record` + + src_ip: :bro:type:`addr` :bro:attr:`&log` + + src_p: :bro:type:`port` :bro:attr:`&log` + + dst_ip: :bro:type:`addr` :bro:attr:`&log` + + dst_p: :bro:type:`port` :bro:attr:`&log` + :Attributes: :bro:attr:`&log` + + +Events +###### +.. bro:id:: Unified2::alert + + :Type: :bro:type:`event` (f: :bro:type:`fa_file`, ev: :bro:type:`Unified2::IDSEvent`, pkt: :bro:type:`Unified2::Packet`) + + Reconstructed "alert" which combines related events + and packets. + +.. bro:id:: Unified2::log_unified2 + + :Type: :bro:type:`event` (rec: :bro:type:`Unified2::Info`) + + The event for accessing logged records. + + diff --git a/doc/scripts/base/files/x509/__load__.bro.rst b/doc/scripts/base/files/x509/__load__.bro.rst new file mode 100644 index 0000000000..378db7be25 --- /dev/null +++ b/doc/scripts/base/files/x509/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/files/x509/__load__.bro +============================ + + +:Imports: :doc:`base/files/x509/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/files/x509/index.rst b/doc/scripts/base/files/x509/index.rst new file mode 100644 index 0000000000..fc7ddf93d1 --- /dev/null +++ b/doc/scripts/base/files/x509/index.rst @@ -0,0 +1,14 @@ +:orphan: + +Package: base/files/x509 +======================== + +Support for X509 certificates with the file analysis framework. +Also supports parsing OCSP requests and responses. + +:doc:`/scripts/base/files/x509/__load__.bro` + + +:doc:`/scripts/base/files/x509/main.bro` + + diff --git a/doc/scripts/base/files/x509/main.bro.rst b/doc/scripts/base/files/x509/main.bro.rst new file mode 100644 index 0000000000..69808d09ce --- /dev/null +++ b/doc/scripts/base/files/x509/main.bro.rst @@ -0,0 +1,78 @@ +:tocdepth: 3 + +base/files/x509/main.bro +======================== +.. bro:namespace:: X509 + + +:Namespace: X509 +:Imports: :doc:`base/files/hash `, :doc:`base/frameworks/files ` + +Summary +~~~~~~~ +Types +##### +========================================== =========================================================== +:bro:type:`X509::Info`: :bro:type:`record` The record type which contains the fields of the X.509 log. +========================================== =========================================================== + +Redefinitions +############# +============================================================== = +:bro:type:`Files::Info`: :bro:type:`record` :bro:attr:`&redef` +:bro:type:`Log::ID`: :bro:type:`enum` +============================================================== = + +Events +###### +=========================================== =================================== +:bro:id:`X509::log_x509`: :bro:type:`event` Event for accessing logged records. +=========================================== =================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: X509::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Current timestamp. + + id: :bro:type:`string` :bro:attr:`&log` + File id of this certificate. + + certificate: :bro:type:`X509::Certificate` :bro:attr:`&log` + Basic information about the certificate. + + handle: :bro:type:`opaque` of x509 + The opaque wrapping the certificate. Mainly used + for the verify operations. + + extensions: :bro:type:`vector` of :bro:type:`X509::Extension` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional` + All extensions that were encountered in the certificate. + + san: :bro:type:`X509::SubjectAlternativeName` :bro:attr:`&optional` :bro:attr:`&log` + Subject alternative name extension of the certificate. + + basic_constraints: :bro:type:`X509::BasicConstraints` :bro:attr:`&optional` :bro:attr:`&log` + Basic constraints extension of the certificate. + + logcert: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/log-hostcerts-only.bro` is loaded) + + Logging of certificate is suppressed if set to F + + The record type which contains the fields of the X.509 log. + +Events +###### +.. bro:id:: X509::log_x509 + + :Type: :bro:type:`event` (rec: :bro:type:`X509::Info`) + + Event for accessing logged records. + + diff --git a/doc/scripts/base/frameworks/analyzer/__load__.bro.rst b/doc/scripts/base/frameworks/analyzer/__load__.bro.rst new file mode 100644 index 0000000000..ddae0d2e39 --- /dev/null +++ b/doc/scripts/base/frameworks/analyzer/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/analyzer/__load__.bro +===================================== + + +:Imports: :doc:`base/frameworks/analyzer/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/analyzer/index.rst b/doc/scripts/base/frameworks/analyzer/index.rst new file mode 100644 index 0000000000..d75c2a473d --- /dev/null +++ b/doc/scripts/base/frameworks/analyzer/index.rst @@ -0,0 +1,26 @@ +:orphan: + +Package: base/frameworks/analyzer +================================= + +The analyzer framework allows to dynamically enable or disable Bro's +protocol analyzers, as well as to manage the well-known ports which +automatically activate a particular analyzer for new connections. + +:doc:`/scripts/base/frameworks/analyzer/__load__.bro` + + +:doc:`/scripts/base/frameworks/analyzer/main.bro` + + Framework for managing Bro's protocol analyzers. + + The analyzer framework allows to dynamically enable or disable analyzers, as + well as to manage the well-known ports which automatically activate a + particular analyzer for new connections. + + Protocol analyzers are identified by unique tags of type + :bro:type:`Analyzer::Tag`, such as :bro:enum:`Analyzer::ANALYZER_HTTP`. + These tags are defined internally by + the analyzers themselves, and documented in their analyzer-specific + description along with the events that they generate. + diff --git a/doc/scripts/base/frameworks/analyzer/main.bro.rst b/doc/scripts/base/frameworks/analyzer/main.bro.rst new file mode 100644 index 0000000000..acee45552f --- /dev/null +++ b/doc/scripts/base/frameworks/analyzer/main.bro.rst @@ -0,0 +1,246 @@ +:tocdepth: 3 + +base/frameworks/analyzer/main.bro +================================= +.. bro:namespace:: Analyzer + +Framework for managing Bro's protocol analyzers. + +The analyzer framework allows to dynamically enable or disable analyzers, as +well as to manage the well-known ports which automatically activate a +particular analyzer for new connections. + +Protocol analyzers are identified by unique tags of type +:bro:type:`Analyzer::Tag`, such as :bro:enum:`Analyzer::ANALYZER_HTTP`. +These tags are defined internally by +the analyzers themselves, and documented in their analyzer-specific +description along with the events that they generate. + +:Namespace: Analyzer +:Imports: :doc:`base/bif/analyzer.bif.bro `, :doc:`base/frameworks/packet-filter/utils.bro ` + +Summary +~~~~~~~ +State Variables +############### +========================================================================== =================================================================== +:bro:id:`Analyzer::disable_all`: :bro:type:`bool` :bro:attr:`&redef` If true, all available analyzers are initially disabled at startup. +:bro:id:`Analyzer::disabled_analyzers`: :bro:type:`set` :bro:attr:`&redef` A set of analyzers to disable by default at startup. +========================================================================== =================================================================== + +Functions +######### +============================================================== ======================================================================= +:bro:id:`Analyzer::all_registered_ports`: :bro:type:`function` Returns a table of all ports-to-analyzer mappings currently registered. +:bro:id:`Analyzer::analyzer_to_bpf`: :bro:type:`function` Automatically creates a BPF filter for the specified protocol based + on the data supplied for the protocol through the + :bro:see:`Analyzer::register_for_ports` function. +:bro:id:`Analyzer::disable_analyzer`: :bro:type:`function` Disables an analyzer. +:bro:id:`Analyzer::enable_analyzer`: :bro:type:`function` Enables an analyzer. +:bro:id:`Analyzer::get_bpf`: :bro:type:`function` Create a BPF filter which matches all of the ports defined + by the various protocol analysis scripts as "registered ports" + for the protocol. +:bro:id:`Analyzer::get_tag`: :bro:type:`function` Translates an analyzer's name to a tag enum value. +:bro:id:`Analyzer::name`: :bro:type:`function` Translates an analyzer type to a string with the analyzer's name. +:bro:id:`Analyzer::register_for_port`: :bro:type:`function` Registers an individual well-known port for an analyzer. +:bro:id:`Analyzer::register_for_ports`: :bro:type:`function` Registers a set of well-known ports for an analyzer. +:bro:id:`Analyzer::registered_ports`: :bro:type:`function` Returns a set of all well-known ports currently registered for a + specific analyzer. +:bro:id:`Analyzer::schedule_analyzer`: :bro:type:`function` Schedules an analyzer for a future connection originating from a + given IP address and port. +============================================================== ======================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +State Variables +############### +.. bro:id:: Analyzer::disable_all + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, all available analyzers are initially disabled at startup. + One can then selectively enable them with + :bro:id:`Analyzer::enable_analyzer`. + +.. bro:id:: Analyzer::disabled_analyzers + + :Type: :bro:type:`set` [:bro:type:`Analyzer::Tag`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + Analyzer::ANALYZER_BACKDOOR, + Analyzer::ANALYZER_INTERCONN, + Analyzer::ANALYZER_TCPSTATS, + Analyzer::ANALYZER_STEPPINGSTONE + } + + A set of analyzers to disable by default at startup. The default set + contains legacy analyzers that are no longer supported. + +Functions +######### +.. bro:id:: Analyzer::all_registered_ports + + :Type: :bro:type:`function` () : :bro:type:`table` [:bro:type:`Analyzer::Tag`] of :bro:type:`set` [:bro:type:`port`] + + Returns a table of all ports-to-analyzer mappings currently registered. + + + :returns: A table mapping each analyzer to the set of ports + registered for it. + +.. bro:id:: Analyzer::analyzer_to_bpf + + :Type: :bro:type:`function` (tag: :bro:type:`Analyzer::Tag`) : :bro:type:`string` + + Automatically creates a BPF filter for the specified protocol based + on the data supplied for the protocol through the + :bro:see:`Analyzer::register_for_ports` function. + + + :tag: The analyzer tag. + + + :returns: BPF filter string. + +.. bro:id:: Analyzer::disable_analyzer + + :Type: :bro:type:`function` (tag: :bro:type:`Analyzer::Tag`) : :bro:type:`bool` + + Disables an analyzer. Once disabled, the analyzer will not be used + further for analysis of future connections. + + + :tag: The tag of the analyzer to disable. + + + :returns: True if the analyzer was successfully disabled. + +.. bro:id:: Analyzer::enable_analyzer + + :Type: :bro:type:`function` (tag: :bro:type:`Analyzer::Tag`) : :bro:type:`bool` + + Enables an analyzer. Once enabled, the analyzer may be used for analysis + of future connections as decided by Bro's dynamic protocol detection. + + + :tag: The tag of the analyzer to enable. + + + :returns: True if the analyzer was successfully enabled. + +.. bro:id:: Analyzer::get_bpf + + :Type: :bro:type:`function` () : :bro:type:`string` + + Create a BPF filter which matches all of the ports defined + by the various protocol analysis scripts as "registered ports" + for the protocol. + +.. bro:id:: Analyzer::get_tag + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`Analyzer::Tag` + + Translates an analyzer's name to a tag enum value. + + + :name: The analyzer name. + + + :returns: The analyzer tag corresponding to the name. + +.. bro:id:: Analyzer::name + + :Type: :bro:type:`function` (atype: :bro:type:`Analyzer::Tag`) : :bro:type:`string` + + Translates an analyzer type to a string with the analyzer's name. + + + :tag: The analyzer tag. + + + :returns: The analyzer name corresponding to the tag. + +.. bro:id:: Analyzer::register_for_port + + :Type: :bro:type:`function` (tag: :bro:type:`Analyzer::Tag`, p: :bro:type:`port`) : :bro:type:`bool` + + Registers an individual well-known port for an analyzer. If a future + connection on this port is seen, the analyzer will be automatically + assigned to parsing it. The function *adds* to all ports already + registered, it doesn't replace them. + + + :tag: The tag of the analyzer. + + + :p: The well-known port to associate with the analyzer. + + + :returns: True if the port was successfully registered. + +.. bro:id:: Analyzer::register_for_ports + + :Type: :bro:type:`function` (tag: :bro:type:`Analyzer::Tag`, ports: :bro:type:`set` [:bro:type:`port`]) : :bro:type:`bool` + + Registers a set of well-known ports for an analyzer. If a future + connection on one of these ports is seen, the analyzer will be + automatically assigned to parsing it. The function *adds* to all ports + already registered, it doesn't replace them. + + + :tag: The tag of the analyzer. + + + :ports: The set of well-known ports to associate with the analyzer. + + + :returns: True if the ports were successfully registered. + +.. bro:id:: Analyzer::registered_ports + + :Type: :bro:type:`function` (tag: :bro:type:`Analyzer::Tag`) : :bro:type:`set` [:bro:type:`port`] + + Returns a set of all well-known ports currently registered for a + specific analyzer. + + + :tag: The tag of the analyzer. + + + :returns: The set of ports. + +.. bro:id:: Analyzer::schedule_analyzer + + :Type: :bro:type:`function` (orig: :bro:type:`addr`, resp: :bro:type:`addr`, resp_p: :bro:type:`port`, analyzer: :bro:type:`Analyzer::Tag`, tout: :bro:type:`interval`) : :bro:type:`bool` + + Schedules an analyzer for a future connection originating from a + given IP address and port. + + + :orig: The IP address originating a connection in the future. + 0.0.0.0 can be used as a wildcard to match any originator address. + + + :resp: The IP address responding to a connection from *orig*. + + + :resp_p: The destination port at *resp*. + + + :analyzer: The analyzer ID. + + + :tout: A timeout interval after which the scheduling request will be + discarded if the connection has not yet been seen. + + + :returns: True if successful. + + diff --git a/doc/scripts/base/frameworks/broker/__load__.bro.rst b/doc/scripts/base/frameworks/broker/__load__.bro.rst new file mode 100644 index 0000000000..83137cf8fd --- /dev/null +++ b/doc/scripts/base/frameworks/broker/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/broker/__load__.bro +=================================== + + +:Imports: :doc:`base/frameworks/broker/log.bro `, :doc:`base/frameworks/broker/main.bro `, :doc:`base/frameworks/broker/store.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/broker/index.rst b/doc/scripts/base/frameworks/broker/index.rst new file mode 100644 index 0000000000..34944cf854 --- /dev/null +++ b/doc/scripts/base/frameworks/broker/index.rst @@ -0,0 +1,22 @@ +:orphan: + +Package: base/frameworks/broker +=============================== + +The Broker communication framework facilitates connecting to remote Bro +instances to share state and transfer events. + +:doc:`/scripts/base/frameworks/broker/__load__.bro` + + +:doc:`/scripts/base/frameworks/broker/main.bro` + + The Broker-based communication API and its various options. + +:doc:`/scripts/base/frameworks/broker/store.bro` + + The Broker-based data store API and its various options. + +:doc:`/scripts/base/frameworks/broker/log.bro` + + diff --git a/doc/scripts/base/frameworks/broker/log.bro.rst b/doc/scripts/base/frameworks/broker/log.bro.rst new file mode 100644 index 0000000000..7fea9afa9d --- /dev/null +++ b/doc/scripts/base/frameworks/broker/log.bro.rst @@ -0,0 +1,67 @@ +:tocdepth: 3 + +base/frameworks/broker/log.bro +============================== +.. bro:namespace:: Broker + + +:Namespace: Broker +:Imports: :doc:`base/frameworks/broker/main.bro ` + +Summary +~~~~~~~ +Types +##### +============================================ ============================================================= +:bro:type:`Broker::Info`: :bro:type:`record` A record type containing the column fields of the Broker log. +:bro:type:`Broker::Type`: :bro:type:`enum` The type of a Broker activity being logged. +============================================ ============================================================= + +Redefinitions +############# +===================================== ===================================== +:bro:type:`Log::ID`: :bro:type:`enum` The Broker logging stream identifier. +===================================== ===================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Broker::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The network time at which a Broker event occurred. + + ty: :bro:type:`Broker::Type` :bro:attr:`&log` + The type of the Broker event. + + ev: :bro:type:`string` :bro:attr:`&log` + The event being logged. + + peer: :bro:type:`Broker::NetworkInfo` :bro:attr:`&log` :bro:attr:`&optional` + The peer (if any) with which a Broker event is + concerned. + + message: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + An optional message describing the Broker event in more detail + + A record type containing the column fields of the Broker log. + +.. bro:type:: Broker::Type + + :Type: :bro:type:`enum` + + .. bro:enum:: Broker::STATUS Broker::Type + + An informational status update. + + .. bro:enum:: Broker::ERROR Broker::Type + + An error situation. + + The type of a Broker activity being logged. + + diff --git a/doc/scripts/base/frameworks/broker/main.bro.rst b/doc/scripts/base/frameworks/broker/main.bro.rst new file mode 100644 index 0000000000..c47ae6d192 --- /dev/null +++ b/doc/scripts/base/frameworks/broker/main.bro.rst @@ -0,0 +1,696 @@ +:tocdepth: 3 + +base/frameworks/broker/main.bro +=============================== +.. bro:namespace:: Broker + +The Broker-based communication API and its various options. + +:Namespace: Broker +:Imports: :doc:`base/bif/comm.bif.bro `, :doc:`base/bif/messaging.bif.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================================= ====================================================================== +:bro:id:`Broker::aggressive_interval`: :bro:type:`count` :bro:attr:`&redef` Frequency of work-stealing polling attempts for Broker/CAF threads + in "aggressive" mode. +:bro:id:`Broker::aggressive_polls`: :bro:type:`count` :bro:attr:`&redef` Number of work-stealing polling attempts for Broker/CAF threads + in "aggressive" mode. +:bro:id:`Broker::congestion_queue_size`: :bro:type:`count` :bro:attr:`&redef` The number of buffered messages at the Broker/CAF layer after which + a subscriber considers themselves congested (i.e. +:bro:id:`Broker::default_connect_retry`: :bro:type:`interval` :bro:attr:`&redef` Default interval to retry connecting to a peer if it cannot be made to + work initially, or if it ever becomes disconnected. +:bro:id:`Broker::default_listen_address`: :bro:type:`string` :bro:attr:`&redef` Default address on which to listen. +:bro:id:`Broker::default_listen_retry`: :bro:type:`interval` :bro:attr:`&redef` Default interval to retry listening on a port if it's currently in + use already. +:bro:id:`Broker::default_log_topic_prefix`: :bro:type:`string` :bro:attr:`&redef` The default topic prefix where logs will be published. +:bro:id:`Broker::default_port`: :bro:type:`port` :bro:attr:`&redef` Default port for Broker communication. +:bro:id:`Broker::disable_ssl`: :bro:type:`bool` :bro:attr:`&redef` If true, do not use SSL for network connections. +:bro:id:`Broker::forward_messages`: :bro:type:`bool` :bro:attr:`&redef` Forward all received messages to subscribing peers. +:bro:id:`Broker::max_threads`: :bro:type:`count` :bro:attr:`&redef` Max number of threads to use for Broker/CAF functionality. +:bro:id:`Broker::moderate_interval`: :bro:type:`count` :bro:attr:`&redef` Frequency of work-stealing polling attempts for Broker/CAF threads + in "moderate" mode. +:bro:id:`Broker::moderate_polls`: :bro:type:`count` :bro:attr:`&redef` Number of work-stealing polling attempts for Broker/CAF threads + in "moderate" mode. +:bro:id:`Broker::moderate_sleep`: :bro:type:`interval` :bro:attr:`&redef` Interval of time for under-utilized Broker/CAF threads to sleep + when in "moderate" mode. +:bro:id:`Broker::relaxed_interval`: :bro:type:`count` :bro:attr:`&redef` Frequency of work-stealing polling attempts for Broker/CAF threads + in "relaxed" mode. +:bro:id:`Broker::relaxed_sleep`: :bro:type:`interval` :bro:attr:`&redef` Interval of time for under-utilized Broker/CAF threads to sleep + when in "relaxed" mode. +:bro:id:`Broker::ssl_cafile`: :bro:type:`string` :bro:attr:`&redef` Path to a file containing concatenated trusted certificates + in PEM format. +:bro:id:`Broker::ssl_capath`: :bro:type:`string` :bro:attr:`&redef` Path to an OpenSSL-style directory of trusted certificates. +:bro:id:`Broker::ssl_certificate`: :bro:type:`string` :bro:attr:`&redef` Path to a file containing a X.509 certificate for this + node in PEM format. +:bro:id:`Broker::ssl_keyfile`: :bro:type:`string` :bro:attr:`&redef` Path to the file containing the private key for this node's + certificate. +:bro:id:`Broker::ssl_passphrase`: :bro:type:`string` :bro:attr:`&redef` Passphrase to decrypt the private key specified by + :bro:see:`Broker::ssl_keyfile`. +================================================================================= ====================================================================== + +Types +##### +==================================================== ==================================================================== +:bro:type:`Broker::Data`: :bro:type:`record` Opaque communication data. +:bro:type:`Broker::DataVector`: :bro:type:`vector` Opaque communication data sequence. +:bro:type:`Broker::EndpointInfo`: :bro:type:`record` +:bro:type:`Broker::ErrorCode`: :bro:type:`enum` Enumerates the possible error types. +:bro:type:`Broker::Event`: :bro:type:`record` Opaque event communication data. +:bro:type:`Broker::NetworkInfo`: :bro:type:`record` +:bro:type:`Broker::PeerInfo`: :bro:type:`record` +:bro:type:`Broker::PeerInfos`: :bro:type:`vector` +:bro:type:`Broker::PeerStatus`: :bro:type:`enum` The possible states of a peer endpoint. +:bro:type:`Broker::TableItem`: :bro:type:`record` Opaque communication data used as a convenient way to wrap key-value + pairs that comprise table entries. +==================================================== ==================================================================== + +Functions +######### +==================================================================== ======================================================================= +:bro:id:`Broker::auto_publish`: :bro:type:`function` Automatically send an event to any interested peers whenever it is + locally dispatched. +:bro:id:`Broker::auto_unpublish`: :bro:type:`function` Stop automatically sending an event to peers upon local dispatch. +:bro:id:`Broker::default_log_topic`: :bro:type:`function` The default implementation for :bro:see:`Broker::log_topic`. +:bro:id:`Broker::flush_logs`: :bro:type:`function` Sends all pending log messages to remote peers. +:bro:id:`Broker::forward`: :bro:type:`function` Register a topic prefix subscription for events that should only be + forwarded to any subscribing peers and not raise any event handlers + on the receiving/forwarding node. +:bro:id:`Broker::listen`: :bro:type:`function` Listen for remote connections. +:bro:id:`Broker::log_topic`: :bro:type:`function` :bro:attr:`&redef` A function that will be called for each log entry to determine what + broker topic string will be used for sending it to peers. +:bro:id:`Broker::node_id`: :bro:type:`function` Get a unique identifier for the local broker endpoint. +:bro:id:`Broker::peer`: :bro:type:`function` Initiate a remote connection. +:bro:id:`Broker::peers`: :bro:type:`function` Get a list of all peer connections. +:bro:id:`Broker::publish_id`: :bro:type:`function` Publishes the value of an identifier to a given topic. +:bro:id:`Broker::subscribe`: :bro:type:`function` Register interest in all peer event messages that use a certain topic + prefix. +:bro:id:`Broker::unpeer`: :bro:type:`function` Remove a remote connection. +:bro:id:`Broker::unsubscribe`: :bro:type:`function` Unregister interest in all peer event messages that use a topic prefix. +==================================================================== ======================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Broker::aggressive_interval + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``4`` + + Frequency of work-stealing polling attempts for Broker/CAF threads + in "aggressive" mode. + +.. bro:id:: Broker::aggressive_polls + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``5`` + + Number of work-stealing polling attempts for Broker/CAF threads + in "aggressive" mode. + +.. bro:id:: Broker::congestion_queue_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``200`` + + The number of buffered messages at the Broker/CAF layer after which + a subscriber considers themselves congested (i.e. tune the congestion + control mechanisms). + +.. bro:id:: Broker::default_connect_retry + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``30.0 secs`` + + Default interval to retry connecting to a peer if it cannot be made to + work initially, or if it ever becomes disconnected. Use of the + BRO_DEFAULT_CONNECT_RETRY environment variable (set as number of + seconds) will override this option and also any values given to + :bro:see:`Broker::peer`. + +.. bro:id:: Broker::default_listen_address + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Default address on which to listen. + + .. bro:see:: Broker::listen + +.. bro:id:: Broker::default_listen_retry + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``30.0 secs`` + + Default interval to retry listening on a port if it's currently in + use already. Use of the BRO_DEFAULT_LISTEN_RETRY environment variable + (set as a number of seconds) will override this option and also + any values given to :bro:see:`Broker::listen`. + +.. bro:id:: Broker::default_log_topic_prefix + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/logs/"`` + + The default topic prefix where logs will be published. The log's stream + id is appended when writing to a particular stream. + +.. bro:id:: Broker::default_port + + :Type: :bro:type:`port` + :Attributes: :bro:attr:`&redef` + :Default: ``9999/tcp`` + + Default port for Broker communication. Where not specified + otherwise, this is the port to connect to and listen on. + +.. bro:id:: Broker::disable_ssl + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, do not use SSL for network connections. By default, SSL will + even be used if no certificates / CAs have been configured. In that case + (which is the default) the communication will be encrypted, but not + authenticated. + +.. bro:id:: Broker::forward_messages + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Forward all received messages to subscribing peers. + +.. bro:id:: Broker::max_threads + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``1`` + + Max number of threads to use for Broker/CAF functionality. The + BRO_BROKER_MAX_THREADS environment variable overrides this setting. + +.. bro:id:: Broker::moderate_interval + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``2`` + + Frequency of work-stealing polling attempts for Broker/CAF threads + in "moderate" mode. + +.. bro:id:: Broker::moderate_polls + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``5`` + + Number of work-stealing polling attempts for Broker/CAF threads + in "moderate" mode. + +.. bro:id:: Broker::moderate_sleep + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``16.0 msecs`` + + Interval of time for under-utilized Broker/CAF threads to sleep + when in "moderate" mode. + +.. bro:id:: Broker::relaxed_interval + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``1`` + + Frequency of work-stealing polling attempts for Broker/CAF threads + in "relaxed" mode. + +.. bro:id:: Broker::relaxed_sleep + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``64.0 msecs`` + + Interval of time for under-utilized Broker/CAF threads to sleep + when in "relaxed" mode. + +.. bro:id:: Broker::ssl_cafile + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Path to a file containing concatenated trusted certificates + in PEM format. If set, Bro will require valid certificates for + all peers. + +.. bro:id:: Broker::ssl_capath + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Path to an OpenSSL-style directory of trusted certificates. + If set, Bro will require valid certificates for + all peers. + +.. bro:id:: Broker::ssl_certificate + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Path to a file containing a X.509 certificate for this + node in PEM format. If set, Bro will require valid certificates for + all peers. + +.. bro:id:: Broker::ssl_keyfile + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Path to the file containing the private key for this node's + certificate. If set, Bro will require valid certificates for + all peers. + +.. bro:id:: Broker::ssl_passphrase + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Passphrase to decrypt the private key specified by + :bro:see:`Broker::ssl_keyfile`. If set, Bro will require valid + certificates for all peers. + +Types +##### +.. bro:type:: Broker::Data + + :Type: :bro:type:`record` + + data: :bro:type:`opaque` of Broker::Data :bro:attr:`&optional` + + Opaque communication data. + +.. bro:type:: Broker::DataVector + + :Type: :bro:type:`vector` of :bro:type:`Broker::Data` + + Opaque communication data sequence. + +.. bro:type:: Broker::EndpointInfo + + :Type: :bro:type:`record` + + id: :bro:type:`string` + A unique identifier of the node. + + network: :bro:type:`Broker::NetworkInfo` :bro:attr:`&optional` + Network-level information. + + +.. bro:type:: Broker::ErrorCode + + :Type: :bro:type:`enum` + + .. bro:enum:: Broker::UNSPECIFIED Broker::ErrorCode + + The unspecified default error code. + + .. bro:enum:: Broker::PEER_INCOMPATIBLE Broker::ErrorCode + + Version incompatibility. + + .. bro:enum:: Broker::PEER_INVALID Broker::ErrorCode + + Referenced peer does not exist. + + .. bro:enum:: Broker::PEER_UNAVAILABLE Broker::ErrorCode + + Remote peer not listening. + + .. bro:enum:: Broker::PEER_TIMEOUT Broker::ErrorCode + + A peering request timed out. + + .. bro:enum:: Broker::MASTER_EXISTS Broker::ErrorCode + + Master with given name already exists. + + .. bro:enum:: Broker::NO_SUCH_MASTER Broker::ErrorCode + + Master with given name does not exist. + + .. bro:enum:: Broker::NO_SUCH_KEY Broker::ErrorCode + + The given data store key does not exist. + + .. bro:enum:: Broker::REQUEST_TIMEOUT Broker::ErrorCode + + The store operation timed out. + + .. bro:enum:: Broker::TYPE_CLASH Broker::ErrorCode + + The operation expected a different type than provided. + + .. bro:enum:: Broker::INVALID_DATA Broker::ErrorCode + + The data value cannot be used to carry out the desired operation. + + .. bro:enum:: Broker::BACKEND_FAILURE Broker::ErrorCode + + The storage backend failed to execute the operation. + + .. bro:enum:: Broker::STALE_DATA Broker::ErrorCode + + The storage backend failed to execute the operation. + + .. bro:enum:: Broker::CAF_ERROR Broker::ErrorCode + + Catch-all for a CAF-level problem. + + Enumerates the possible error types. + +.. bro:type:: Broker::Event + + :Type: :bro:type:`record` + + name: :bro:type:`string` :bro:attr:`&optional` + The name of the event. Not set if invalid event or arguments. + + args: :bro:type:`Broker::DataVector` + The arguments to the event. + + Opaque event communication data. + +.. bro:type:: Broker::NetworkInfo + + :Type: :bro:type:`record` + + address: :bro:type:`string` :bro:attr:`&log` + The IP address or hostname where the endpoint listens. + + bound_port: :bro:type:`port` :bro:attr:`&log` + The port where the endpoint is bound to. + + +.. bro:type:: Broker::PeerInfo + + :Type: :bro:type:`record` + + peer: :bro:type:`Broker::EndpointInfo` + + status: :bro:type:`Broker::PeerStatus` + + +.. bro:type:: Broker::PeerInfos + + :Type: :bro:type:`vector` of :bro:type:`Broker::PeerInfo` + + +.. bro:type:: Broker::PeerStatus + + :Type: :bro:type:`enum` + + .. bro:enum:: Broker::INITIALIZING Broker::PeerStatus + + The peering process is initiated. + + .. bro:enum:: Broker::CONNECTING Broker::PeerStatus + + Connection establishment in process. + + .. bro:enum:: Broker::CONNECTED Broker::PeerStatus + + Connection established, peering pending. + + .. bro:enum:: Broker::PEERED Broker::PeerStatus + + Successfully peered. + + .. bro:enum:: Broker::DISCONNECTED Broker::PeerStatus + + Connection to remote peer lost. + + .. bro:enum:: Broker::RECONNECTING Broker::PeerStatus + + Reconnecting to peer after a lost connection. + + The possible states of a peer endpoint. + +.. bro:type:: Broker::TableItem + + :Type: :bro:type:`record` + + key: :bro:type:`Broker::Data` + + val: :bro:type:`Broker::Data` + + Opaque communication data used as a convenient way to wrap key-value + pairs that comprise table entries. + +Functions +######### +.. bro:id:: Broker::auto_publish + + :Type: :bro:type:`function` (topic: :bro:type:`string`, ev: :bro:type:`any`) : :bro:type:`bool` + + Automatically send an event to any interested peers whenever it is + locally dispatched. (For example, using "event my_event(...);" in a + script.) + + + :topic: a topic string associated with the event message. + Peers advertise interest by registering a subscription to some + prefix of this topic name. + + + :ev: a Bro event value. + + + :returns: true if automatic event sending is now enabled. + +.. bro:id:: Broker::auto_unpublish + + :Type: :bro:type:`function` (topic: :bro:type:`string`, ev: :bro:type:`any`) : :bro:type:`bool` + + Stop automatically sending an event to peers upon local dispatch. + + + :topic: a topic originally given to :bro:see:`Broker::auto_publish`. + + + :ev: an event originally given to :bro:see:`Broker::auto_publish`. + + + :returns: true if automatic events will not occur for the topic/event + pair. + +.. bro:id:: Broker::default_log_topic + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, path: :bro:type:`string`) : :bro:type:`string` + + The default implementation for :bro:see:`Broker::log_topic`. + +.. bro:id:: Broker::flush_logs + + :Type: :bro:type:`function` () : :bro:type:`count` + + Sends all pending log messages to remote peers. This normally + doesn't need to be used except for test cases that are time-sensitive. + +.. bro:id:: Broker::forward + + :Type: :bro:type:`function` (topic_prefix: :bro:type:`string`) : :bro:type:`bool` + + Register a topic prefix subscription for events that should only be + forwarded to any subscribing peers and not raise any event handlers + on the receiving/forwarding node. i.e. it's the same as + :bro:see:`Broker::subscribe` except matching events are not raised + on the receiver, just forwarded. Use :bro:see:`Broker::unsubscribe` + with the same argument to undo this operation. + + + :topic_prefix: a prefix to match against remote message topics. + e.g. an empty prefix matches everything and "a" matches + "alice" and "amy" but not "bob". + + + :returns: true if a new event forwarding/subscription is now registered. + +.. bro:id:: Broker::listen + + :Type: :bro:type:`function` (a: :bro:type:`string` :bro:attr:`&default` = :bro:see:`Broker::default_listen_address` :bro:attr:`&optional`, p: :bro:type:`port` :bro:attr:`&default` = :bro:see:`Broker::default_port` :bro:attr:`&optional`, retry: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Broker::default_listen_retry` :bro:attr:`&optional`) : :bro:type:`port` + + Listen for remote connections. + + + :a: an address string on which to accept connections, e.g. + "127.0.0.1". An empty string refers to INADDR_ANY. + + + :p: the TCP port to listen on. The value 0 means that the OS should choose + the next available free port. + + + :retry: If non-zero, retries listening in regular intervals if the port cannot be + acquired immediately. 0 disables retries. If the + BRO_DEFAULT_LISTEN_RETRY environment variable is set (as number + of seconds), it overrides any value given here. + + + :returns: the bound port or 0/? on failure. + + .. bro:see:: Broker::status + +.. bro:id:: Broker::log_topic + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, path: :bro:type:`string`) : :bro:type:`string` + :Attributes: :bro:attr:`&redef` + + A function that will be called for each log entry to determine what + broker topic string will be used for sending it to peers. The + default implementation will return a value based on + :bro:see:`Broker::default_log_topic_prefix`. + + + :id: the ID associated with the log stream entry that will be sent. + + + :path: the path to which the log stream entry will be output. + + + :returns: a string representing the broker topic to which the log + will be sent. + +.. bro:id:: Broker::node_id + + :Type: :bro:type:`function` () : :bro:type:`string` + + Get a unique identifier for the local broker endpoint. + + + :returns: a unique identifier for the local broker endpoint. + +.. bro:id:: Broker::peer + + :Type: :bro:type:`function` (a: :bro:type:`string`, p: :bro:type:`port` :bro:attr:`&default` = :bro:see:`Broker::default_port` :bro:attr:`&optional`, retry: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Broker::default_connect_retry` :bro:attr:`&optional`) : :bro:type:`bool` + + Initiate a remote connection. + + + :a: an address to connect to, e.g. "localhost" or "127.0.0.1". + + + :p: the TCP port on which the remote side is listening. + + + :retry: an interval at which to retry establishing the + connection with the remote peer if it cannot be made initially, or + if it ever becomes disconnected. If the + BRO_DEFAULT_CONNECT_RETRY environment variable is set (as number + of seconds), it overrides any value given here. + + + :returns: true if it's possible to try connecting with the peer and + it's a new peer. The actual connection may not be established + until a later point in time. + + .. bro:see:: Broker::status + +.. bro:id:: Broker::peers + + :Type: :bro:type:`function` () : :bro:type:`vector` of :bro:type:`Broker::PeerInfo` + + Get a list of all peer connections. + + + :returns: a list of all peer connections. + +.. bro:id:: Broker::publish_id + + :Type: :bro:type:`function` (topic: :bro:type:`string`, id: :bro:type:`string`) : :bro:type:`bool` + + Publishes the value of an identifier to a given topic. The subscribers + will update their local value for that identifier on receipt. + + + :topic: a topic associated with the message. + + + :id: the identifier to publish. + + + :returns: true if the message is sent. + +.. bro:id:: Broker::subscribe + + :Type: :bro:type:`function` (topic_prefix: :bro:type:`string`) : :bro:type:`bool` + + Register interest in all peer event messages that use a certain topic + prefix. Note that subscriptions may not be altered immediately after + calling (except during :bro:see:`bro_init`). + + + :topic_prefix: a prefix to match against remote message topics. + e.g. an empty prefix matches everything and "a" matches + "alice" and "amy" but not "bob". + + + :returns: true if it's a new event subscription and it is now registered. + +.. bro:id:: Broker::unpeer + + :Type: :bro:type:`function` (a: :bro:type:`string`, p: :bro:type:`port`) : :bro:type:`bool` + + Remove a remote connection. + + Note that this does not terminate the connection to the peer, it + just means that we won't exchange any further information with it + unless peering resumes later. + + + :a: the address used in previous successful call to :bro:see:`Broker::peer`. + + + :p: the port used in previous successful call to :bro:see:`Broker::peer`. + + + :returns: true if the arguments match a previously successful call to + :bro:see:`Broker::peer`. + + + :TODO: We do not have a function yet to terminate a connection. + +.. bro:id:: Broker::unsubscribe + + :Type: :bro:type:`function` (topic_prefix: :bro:type:`string`) : :bro:type:`bool` + + Unregister interest in all peer event messages that use a topic prefix. + Note that subscriptions may not be altered immediately after calling + (except during :bro:see:`bro_init`). + + + :topic_prefix: a prefix previously supplied to a successful call to + :bro:see:`Broker::subscribe` or :bro:see:`Broker::forward`. + + + :returns: true if interest in the topic prefix is no longer advertised. + + diff --git a/doc/scripts/base/frameworks/broker/store.bro.rst b/doc/scripts/base/frameworks/broker/store.bro.rst new file mode 100644 index 0000000000..aa61071c7b --- /dev/null +++ b/doc/scripts/base/frameworks/broker/store.bro.rst @@ -0,0 +1,1199 @@ +:tocdepth: 3 + +base/frameworks/broker/store.bro +================================ +.. bro:namespace:: Broker + +The Broker-based data store API and its various options. + +:Namespace: Broker +:Imports: :doc:`base/bif/data.bif.bro `, :doc:`base/bif/store.bif.bro `, :doc:`base/frameworks/broker/main.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================================================= ======================================================================= +:bro:id:`Broker::default_clone_mutation_buffer_interval`: :bro:type:`interval` :bro:attr:`&redef` The maximum amount of time that a disconnected clone will + buffer data store mutation commands. +:bro:id:`Broker::default_clone_resync_interval`: :bro:type:`interval` :bro:attr:`&redef` The default frequency at which clones will attempt to + reconnect/resynchronize with their master in the event that they become + disconnected. +:bro:id:`Broker::default_clone_stale_interval`: :bro:type:`interval` :bro:attr:`&redef` The duration after which a clone that is disconnected from its master + will begin to treat its local cache as stale. +================================================================================================= ======================================================================= + +Types +##### +====================================================== ===================================================== +:bro:type:`Broker::BackendOptions`: :bro:type:`record` Options to tune the particular storage backends. +:bro:type:`Broker::BackendType`: :bro:type:`enum` Enumerates the possible storage backends. +:bro:type:`Broker::QueryResult`: :bro:type:`record` The result of a data store query. +:bro:type:`Broker::QueryStatus`: :bro:type:`enum` Whether a data store query could be completed or not. +:bro:type:`Broker::RocksDBOptions`: :bro:type:`record` Options to tune the RocksDB storage backend. +:bro:type:`Broker::SQLiteOptions`: :bro:type:`record` Options to tune the SQLite storage backend. +====================================================== ===================================================== + +Functions +######### +============================================================= ============================================================================= +:bro:id:`Broker::append`: :bro:type:`function` Extends an existing string with another. +:bro:id:`Broker::clear`: :bro:type:`function` Deletes all of a store's content, it will be empty afterwards. +:bro:id:`Broker::close`: :bro:type:`function` Close a data store. +:bro:id:`Broker::create_clone`: :bro:type:`function` Create a clone of a master data store which may live with a remote peer. +:bro:id:`Broker::create_master`: :bro:type:`function` Create a master data store which contains key-value pairs. +:bro:id:`Broker::data`: :bro:type:`function` Convert any Bro value to communication data. +:bro:id:`Broker::data_type`: :bro:type:`function` Retrieve the type of data associated with communication data. +:bro:id:`Broker::decrement`: :bro:type:`function` Decrements an existing value by a given amount. +:bro:id:`Broker::erase`: :bro:type:`function` Remove a key-value pair from the store. +:bro:id:`Broker::exists`: :bro:type:`function` Check if a key exists in a data store. +:bro:id:`Broker::get`: :bro:type:`function` Lookup the value associated with a key in a data store. +:bro:id:`Broker::get_index_from_value`: :bro:type:`function` Retrieve a specific index from an existing container value. +:bro:id:`Broker::increment`: :bro:type:`function` Increments an existing value by a given amount. +:bro:id:`Broker::insert_into_set`: :bro:type:`function` Inserts an element into an existing set. +:bro:id:`Broker::insert_into_table`: :bro:type:`function` Inserts an element into an existing table. +:bro:id:`Broker::is_closed`: :bro:type:`function` Check if a store is closed or not. +:bro:id:`Broker::keys`: :bro:type:`function` Returns a set with all of a store's keys. +:bro:id:`Broker::pop`: :bro:type:`function` Removes the last element of an existing vector. +:bro:id:`Broker::push`: :bro:type:`function` Appends an element to an existing vector. +:bro:id:`Broker::put`: :bro:type:`function` Insert a key-value pair in to the store. +:bro:id:`Broker::put_unique`: :bro:type:`function` Insert a key-value pair in to the store, but only if the key does not + already exist. +:bro:id:`Broker::record_assign`: :bro:type:`function` Replace a field in a record at a particular position. +:bro:id:`Broker::record_create`: :bro:type:`function` Create communication data of type "record". +:bro:id:`Broker::record_iterator`: :bro:type:`function` Create an iterator for a record. +:bro:id:`Broker::record_iterator_last`: :bro:type:`function` Check if there are no more elements to iterate over. +:bro:id:`Broker::record_iterator_next`: :bro:type:`function` Advance an iterator. +:bro:id:`Broker::record_iterator_value`: :bro:type:`function` Retrieve the data at an iterator's current position. +:bro:id:`Broker::record_lookup`: :bro:type:`function` Lookup a field in a record at a particular position. +:bro:id:`Broker::record_size`: :bro:type:`function` Get the number of fields within a record. +:bro:id:`Broker::remove_from`: :bro:type:`function` Removes an element from an existing set or table. +:bro:id:`Broker::set_clear`: :bro:type:`function` Remove all elements within a set. +:bro:id:`Broker::set_contains`: :bro:type:`function` Check if a set contains a particular element. +:bro:id:`Broker::set_create`: :bro:type:`function` Create communication data of type "set". +:bro:id:`Broker::set_insert`: :bro:type:`function` Insert an element into a set. +:bro:id:`Broker::set_iterator`: :bro:type:`function` Create an iterator for a set. +:bro:id:`Broker::set_iterator_last`: :bro:type:`function` Check if there are no more elements to iterate over. +:bro:id:`Broker::set_iterator_next`: :bro:type:`function` Advance an iterator. +:bro:id:`Broker::set_iterator_value`: :bro:type:`function` Retrieve the data at an iterator's current position. +:bro:id:`Broker::set_remove`: :bro:type:`function` Remove an element from a set. +:bro:id:`Broker::set_size`: :bro:type:`function` Get the number of elements within a set. +:bro:id:`Broker::store_name`: :bro:type:`function` Get the name of a store. +:bro:id:`Broker::table_clear`: :bro:type:`function` Remove all elements within a table. +:bro:id:`Broker::table_contains`: :bro:type:`function` Check if a table contains a particular key. +:bro:id:`Broker::table_create`: :bro:type:`function` Create communication data of type "table". +:bro:id:`Broker::table_insert`: :bro:type:`function` Insert a key-value pair into a table. +:bro:id:`Broker::table_iterator`: :bro:type:`function` Create an iterator for a table. +:bro:id:`Broker::table_iterator_last`: :bro:type:`function` Check if there are no more elements to iterate over. +:bro:id:`Broker::table_iterator_next`: :bro:type:`function` Advance an iterator. +:bro:id:`Broker::table_iterator_value`: :bro:type:`function` Retrieve the data at an iterator's current position. +:bro:id:`Broker::table_lookup`: :bro:type:`function` Retrieve a value from a table. +:bro:id:`Broker::table_remove`: :bro:type:`function` Remove a key-value pair from a table. +:bro:id:`Broker::table_size`: :bro:type:`function` Get the number of elements within a table. +:bro:id:`Broker::vector_clear`: :bro:type:`function` Remove all elements within a vector. +:bro:id:`Broker::vector_create`: :bro:type:`function` Create communication data of type "vector". +:bro:id:`Broker::vector_insert`: :bro:type:`function` Insert an element into a vector at a particular position, possibly displacing + existing elements (insertion always grows the size of the vector by one). +:bro:id:`Broker::vector_iterator`: :bro:type:`function` Create an iterator for a vector. +:bro:id:`Broker::vector_iterator_last`: :bro:type:`function` Check if there are no more elements to iterate over. +:bro:id:`Broker::vector_iterator_next`: :bro:type:`function` Advance an iterator. +:bro:id:`Broker::vector_iterator_value`: :bro:type:`function` Retrieve the data at an iterator's current position. +:bro:id:`Broker::vector_lookup`: :bro:type:`function` Lookup an element in a vector at a particular position. +:bro:id:`Broker::vector_remove`: :bro:type:`function` Remove an element from a vector at a particular position. +:bro:id:`Broker::vector_replace`: :bro:type:`function` Replace an element in a vector at a particular position. +:bro:id:`Broker::vector_size`: :bro:type:`function` Get the number of elements within a vector. +============================================================= ============================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Broker::default_clone_mutation_buffer_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``2.0 mins`` + + The maximum amount of time that a disconnected clone will + buffer data store mutation commands. If the clone reconnects before + this time, it will replay all stored commands. Note that this doesn't + completely prevent the loss of store updates: all mutation messages + are fire-and-forget and not explicitly acknowledged by the master. + A negative/zero value indicates to never buffer commands. + +.. bro:id:: Broker::default_clone_resync_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 secs`` + + The default frequency at which clones will attempt to + reconnect/resynchronize with their master in the event that they become + disconnected. + +.. bro:id:: Broker::default_clone_stale_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 mins`` + + The duration after which a clone that is disconnected from its master + will begin to treat its local cache as stale. In the stale state, + queries to the cache will timeout. A negative value indicates that + the local cache is never treated as stale. + +Types +##### +.. bro:type:: Broker::BackendOptions + + :Type: :bro:type:`record` + + sqlite: :bro:type:`Broker::SQLiteOptions` :bro:attr:`&default` = ``[path=]`` :bro:attr:`&optional` + + rocksdb: :bro:type:`Broker::RocksDBOptions` :bro:attr:`&default` = ``[path=]`` :bro:attr:`&optional` + + Options to tune the particular storage backends. + +.. bro:type:: Broker::BackendType + + :Type: :bro:type:`enum` + + .. bro:enum:: Broker::MEMORY Broker::BackendType + + .. bro:enum:: Broker::SQLITE Broker::BackendType + + .. bro:enum:: Broker::ROCKSDB Broker::BackendType + + Enumerates the possible storage backends. + +.. bro:type:: Broker::QueryResult + + :Type: :bro:type:`record` + + status: :bro:type:`Broker::QueryStatus` + Whether the query completed or not. + + result: :bro:type:`Broker::Data` + The result of the query. Certain queries may use a particular + data type (e.g. querying store size always returns a count, but + a lookup may return various data types). + + The result of a data store query. + +.. bro:type:: Broker::QueryStatus + + :Type: :bro:type:`enum` + + .. bro:enum:: Broker::SUCCESS Broker::QueryStatus + + .. bro:enum:: Broker::FAILURE Broker::QueryStatus + + Whether a data store query could be completed or not. + +.. bro:type:: Broker::RocksDBOptions + + :Type: :bro:type:`record` + + path: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + File system path of the database. + If left empty, will be derived from the name of the store, + and use the '.rocksdb' file suffix. + + Options to tune the RocksDB storage backend. + +.. bro:type:: Broker::SQLiteOptions + + :Type: :bro:type:`record` + + path: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + File system path of the database. + If left empty, will be derived from the name of the store, + and use the '.sqlite' file suffix. + + Options to tune the SQLite storage backend. + +Functions +######### +.. bro:id:: Broker::append + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, s: :bro:type:`string`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`bool` + + Extends an existing string with another. + + + :h: the handle of the store to modify. + + + :k: the key whose associated value is to be modified. The key must + already exist. + + + :s: the string to append. + + + :e: the new expiration interval of the modified key. If null, the + current expiration time isn't changed. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::clear + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`bool` + + Deletes all of a store's content, it will be empty afterwards. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::close + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`bool` + + Close a data store. + + + :h: a data store handle. + + + :returns: true if store was valid and is now closed. The handle can no + longer be used for data store operations. + +.. bro:id:: Broker::create_clone + + :Type: :bro:type:`function` (name: :bro:type:`string`, resync_interval: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Broker::default_clone_resync_interval` :bro:attr:`&optional`, stale_interval: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Broker::default_clone_stale_interval` :bro:attr:`&optional`, mutation_buffer_interval: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Broker::default_clone_mutation_buffer_interval` :bro:attr:`&optional`) : :bro:type:`opaque` of Broker::Store + + Create a clone of a master data store which may live with a remote peer. + A clone automatically synchronizes to the master by + receiving modifications and applying them locally. Direct modifications + are not possible, they must be sent through the master store, which then + automatically broadcasts the changes out to clones. But queries may be + made directly against the local cloned copy, which may be resolved + quicker than reaching out to a remote master store. + + + :name: the unique name which identifies the master data store. + + + :resync_interval: the frequency at which a clone that is disconnected from + its master attempts to reconnect with it. + + + :stale_interval: the duration after which a clone that is disconnected + from its master will begin to treat its local cache as + stale. In this state, queries to the clone will timeout. + A negative value indicates that the local cache is never + treated as stale. + + + :mutation_buffer_interval: the amount of time to buffer data store update + messages once a clone detects its master is + unavailable. If the clone reconnects before + this time, it will replay all buffered + commands. Note that this doesn't completely + prevent the loss of store updates: all mutation + messages are fire-and-forget and not explicitly + acknowledged by the master. A negative/zero + value indicates that commands never buffer. + + + :returns: a handle to the data store. + +.. bro:id:: Broker::create_master + + :Type: :bro:type:`function` (name: :bro:type:`string`, b: :bro:type:`Broker::BackendType` :bro:attr:`&default` = ``Broker::MEMORY`` :bro:attr:`&optional`, options: :bro:type:`Broker::BackendOptions` :bro:attr:`&default` = ``[sqlite=[path=], rocksdb=[path=]]`` :bro:attr:`&optional`) : :bro:type:`opaque` of Broker::Store + + Create a master data store which contains key-value pairs. + + + :name: a unique name for the data store. + + + :b: the storage backend to use. + + + :options: tunes how some storage backends operate. + + + :returns: a handle to the data store. + +.. bro:id:: Broker::data + + :Type: :bro:type:`function` (d: :bro:type:`any`) : :bro:type:`Broker::Data` + + Convert any Bro value to communication data. + + .. note:: Normally you won't need to use this function as data + conversion happens implicitly when passing Bro values into Broker + functions. + + + :d: any Bro value to attempt to convert (not all types are supported). + + + :returns: the converted communication data. If the supplied Bro data + type does not support conversion to communication data, the + returned record's optional field will not be set. + +.. bro:id:: Broker::data_type + + :Type: :bro:type:`function` (d: :bro:type:`Broker::Data`) : :bro:type:`Broker::DataType` + + Retrieve the type of data associated with communication data. + + + :d: the communication data. + + + :returns: The data type associated with the communication data. + Note that broker represents records in the same way as + vectors, so there is no "record" type. + +.. bro:id:: Broker::decrement + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, a: :bro:type:`any` :bro:attr:`&default` = ``1`` :bro:attr:`&optional`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`bool` + + Decrements an existing value by a given amount. This is supported for all + numerical types, as well as for timestamps. + + + :h: the handle of the store to modify. + + + :k: the key whose associated value is to be modified. The key must + already exist. + + + :amount: the amount to decrement the value by. + + + :e: the new expiration interval of the modified key. If null, the current + expiration time isn't changed. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::erase + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`) : :bro:type:`bool` + + Remove a key-value pair from the store. + + + :h: the handle of the store to modify. + + + :k: the key to remove. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::exists + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`) : :bro:type:`Broker::QueryResult` + + Check if a key exists in a data store. + + + :h: the handle of the store to query. + + + :k: the key to lookup. + + + :returns: True if the key exists in the data store. + +.. bro:id:: Broker::get + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`) : :bro:type:`Broker::QueryResult` + + Lookup the value associated with a key in a data store. + + + :h: the handle of the store to query. + + + :k: the key to lookup. + + + :returns: the result of the query. + +.. bro:id:: Broker::get_index_from_value + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, i: :bro:type:`any`) : :bro:type:`Broker::QueryResult` + + Retrieve a specific index from an existing container value. This + is supported for values of types set, table, and vector. + + + :h: the handle of the store to query. + + + :k: the key of the container value to lookup. + + + :i: the index to retrieve from the container value. + + + :returns: For tables and vectors, the value at the given index, or + failure if the index doesn't exist. For sets, a boolean + indicating whether the index exists. Returns failure if the key + does not exist at all. + +.. bro:id:: Broker::increment + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, a: :bro:type:`any` :bro:attr:`&default` = ``1`` :bro:attr:`&optional`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`bool` + + Increments an existing value by a given amount. This is supported for all + numerical types, as well as for timestamps. + + + :h: the handle of the store to modify. + + + :k: the key whose associated value is to be modified. The key must + already exist. + + + :a: the amount to increment the value by. + + + :e: the new expiration interval of the modified key. If null, the + current expiration time isn't changed. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::insert_into_set + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, i: :bro:type:`any`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`bool` + + Inserts an element into an existing set. + + + :h: the handle of the store to modify. + + + :k: the key whose associated value is to be modified. The key must + already exist. + + + :i: the index to insert into the set. + + + :e: the new expiration interval of the modified key. If null, the + current expiration time isn't changed. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::insert_into_table + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, i: :bro:type:`any`, v: :bro:type:`any`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`bool` + + Inserts an element into an existing table. + + + :h: the handle of the store to modify. + + + :k: the key whose associated value is to be modified. The key must + already exist. + + + :i: the index to insert into the table + + + :v: the value to associate with the index. + + + :e: the new expiration interval of the modified key. If null, the + current expiration time isn't changed. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::is_closed + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`bool` + + Check if a store is closed or not. + + + :returns: true if the store is closed. + +.. bro:id:: Broker::keys + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`Broker::QueryResult` + + Returns a set with all of a store's keys. The results reflect a snapshot + in time that may diverge from reality soon afterwards. When acessing + any of the element, it may no longer actually be there. The function is + also expensive for large stores, as it copies the complete set. + + + :returns: a set with the keys. If you expect the keys to be of + non-uniform type, consider using + :bro:see:`Broker::set_iterator` to iterate over the result. + +.. bro:id:: Broker::pop + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`bool` + + Removes the last element of an existing vector. + + + :h: the handle of the store to modify. + + + :k: the key whose associated value is to be modified. The key must + already exist. + + + :e: the new expiration interval of the modified key. If null, the + current expiration time isn't changed. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::push + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, v: :bro:type:`any`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`bool` + + Appends an element to an existing vector. + + + :h: the handle of the store to modify. + + + :k: the key whose associated value is to be modified. The key must + already exist. + + + :b: the value to append to the vector. + + + :e: the new expiration interval of the modified key. If null, the + current expiration time isn't changed. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::put + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, v: :bro:type:`any`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`bool` + + Insert a key-value pair in to the store. + + + :h: the handle of the store to modify. + + + :k: the key to insert. + + + :v: the value to insert. + + + :e: the expiration interval of the key-value pair. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::put_unique + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, v: :bro:type:`any`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`Broker::QueryResult` + + Insert a key-value pair in to the store, but only if the key does not + already exist. + + + :h: the handle of the store to modify. + + + :k: the key to insert. + + + :v: the value to insert. + + + :e: the expiration interval of the key-value pair. + + + :returns: the result of the query which is a boolean data value that is + true if the insertion happened, or false if it was rejected + due to the key already existing. + +.. bro:id:: Broker::record_assign + + :Type: :bro:type:`function` (r: :bro:type:`Broker::Data`, idx: :bro:type:`count`, d: :bro:type:`any`) : :bro:type:`bool` + + Replace a field in a record at a particular position. + + + :r: the record to modify. + + + :d: the new field value to assign. + + + :idx: the index to replace. + + + :returns: false if the index was larger than any valid index, else true. + +.. bro:id:: Broker::record_create + + :Type: :bro:type:`function` (sz: :bro:type:`count`) : :bro:type:`Broker::Data` + + Create communication data of type "record". + + + :sz: the number of fields in the record. + + + :returns: record data, with all fields uninitialized. + +.. bro:id:: Broker::record_iterator + + :Type: :bro:type:`function` (r: :bro:type:`Broker::Data`) : :bro:type:`opaque` of Broker::RecordIterator + + Create an iterator for a record. Note that this makes a copy of the record + internally to ensure the iterator is always valid. + + + :r: the record to iterate over. + + + :returns: an iterator. + +.. bro:id:: Broker::record_iterator_last + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::RecordIterator) : :bro:type:`bool` + + Check if there are no more elements to iterate over. + + + :it: an iterator. + + + :returns: true if there are no more elements to iterator over, i.e. + the iterator is one-past-the-final-element. + +.. bro:id:: Broker::record_iterator_next + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::RecordIterator) : :bro:type:`bool` + + Advance an iterator. + + + :it: an iterator. + + + :returns: true if the iterator, after advancing, still references an element + in the collection. False if the iterator, after advancing, is + one-past-the-final-element. + +.. bro:id:: Broker::record_iterator_value + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::RecordIterator) : :bro:type:`Broker::Data` + + Retrieve the data at an iterator's current position. + + + :it: an iterator. + + + :returns: element in the collection that the iterator currently references. + +.. bro:id:: Broker::record_lookup + + :Type: :bro:type:`function` (r: :bro:type:`Broker::Data`, idx: :bro:type:`count`) : :bro:type:`Broker::Data` + + Lookup a field in a record at a particular position. + + + :r: the record to query. + + + :idx: the index to lookup. + + + :returns: the value at the index. The optional field of the returned record + may not be set if the field of the record has no value or if the + index was not valid. + +.. bro:id:: Broker::record_size + + :Type: :bro:type:`function` (r: :bro:type:`Broker::Data`) : :bro:type:`count` + + Get the number of fields within a record. + + + :r: the record to query. + + + :returns: the number of fields in the record. + +.. bro:id:: Broker::remove_from + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store, k: :bro:type:`any`, i: :bro:type:`any`, e: :bro:type:`interval` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional`) : :bro:type:`bool` + + Removes an element from an existing set or table. + + + :h: the handle of the store to modify. + + + :k: the key whose associated value is to be modified. The key must + already exist. + + + :i: the index to remove from the set or table. + + + :e: the new expiration interval of the modified key. If null, the + current expiration time isn't changed. + + + :returns: false if the store handle was not valid. + +.. bro:id:: Broker::set_clear + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`) : :bro:type:`bool` + + Remove all elements within a set. + + + :s: the set to clear. + + + :returns: always true. + +.. bro:id:: Broker::set_contains + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`bool` + + Check if a set contains a particular element. + + + :s: the set to query. + + + :key: the element to check for existence. + + + :returns: true if the key exists in the set. + +.. bro:id:: Broker::set_create + + :Type: :bro:type:`function` () : :bro:type:`Broker::Data` + + Create communication data of type "set". + +.. bro:id:: Broker::set_insert + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`bool` + + Insert an element into a set. + + + :s: the set to modify. + + + :key: the element to insert. + + + :returns: true if the key was inserted, or false if it already existed. + +.. bro:id:: Broker::set_iterator + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`) : :bro:type:`opaque` of Broker::SetIterator + + Create an iterator for a set. Note that this makes a copy of the set + internally to ensure the iterator is always valid. + + + :s: the set to iterate over. + + + :returns: an iterator. + +.. bro:id:: Broker::set_iterator_last + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::SetIterator) : :bro:type:`bool` + + Check if there are no more elements to iterate over. + + + :it: an iterator. + + + :returns: true if there are no more elements to iterator over, i.e. + the iterator is one-past-the-final-element. + +.. bro:id:: Broker::set_iterator_next + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::SetIterator) : :bro:type:`bool` + + Advance an iterator. + + + :it: an iterator. + + + :returns: true if the iterator, after advancing, still references an element + in the collection. False if the iterator, after advancing, is + one-past-the-final-element. + +.. bro:id:: Broker::set_iterator_value + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::SetIterator) : :bro:type:`Broker::Data` + + Retrieve the data at an iterator's current position. + + + :it: an iterator. + + + :returns: element in the collection that the iterator currently references. + +.. bro:id:: Broker::set_remove + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`bool` + + Remove an element from a set. + + + :s: the set to modify. + + + :key: the element to remove. + + + :returns: true if the element existed in the set and is now removed. + +.. bro:id:: Broker::set_size + + :Type: :bro:type:`function` (s: :bro:type:`Broker::Data`) : :bro:type:`count` + + Get the number of elements within a set. + + + :s: the set to query. + + + :returns: the number of elements in the set. + +.. bro:id:: Broker::store_name + + :Type: :bro:type:`function` (h: :bro:type:`opaque` of Broker::Store) : :bro:type:`string` + + Get the name of a store. + + + :returns: the name of the store. + +.. bro:id:: Broker::table_clear + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`) : :bro:type:`bool` + + Remove all elements within a table. + + + :t: the table to clear. + + + :returns: always true. + +.. bro:id:: Broker::table_contains + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`bool` + + Check if a table contains a particular key. + + + :t: the table to query. + + + :key: the key to check for existence. + + + :returns: true if the key exists in the table. + +.. bro:id:: Broker::table_create + + :Type: :bro:type:`function` () : :bro:type:`Broker::Data` + + Create communication data of type "table". + +.. bro:id:: Broker::table_insert + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`, key: :bro:type:`any`, val: :bro:type:`any`) : :bro:type:`Broker::Data` + + Insert a key-value pair into a table. + + + :t: the table to modify. + + + :key: the key at which to insert the value. + + + :val: the value to insert. + + + :returns: true if the key-value pair was inserted, or false if the key + already existed in the table. + +.. bro:id:: Broker::table_iterator + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`) : :bro:type:`opaque` of Broker::TableIterator + + Create an iterator for a table. Note that this makes a copy of the table + internally to ensure the iterator is always valid. + + + :t: the table to iterate over. + + + :returns: an iterator. + +.. bro:id:: Broker::table_iterator_last + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::TableIterator) : :bro:type:`bool` + + Check if there are no more elements to iterate over. + + + :it: an iterator. + + + :returns: true if there are no more elements to iterator over, i.e. + the iterator is one-past-the-final-element. + +.. bro:id:: Broker::table_iterator_next + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::TableIterator) : :bro:type:`bool` + + Advance an iterator. + + + :it: an iterator. + + + :returns: true if the iterator, after advancing, still references an element + in the collection. False if the iterator, after advancing, is + one-past-the-final-element. + +.. bro:id:: Broker::table_iterator_value + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::TableIterator) : :bro:type:`Broker::TableItem` + + Retrieve the data at an iterator's current position. + + + :it: an iterator. + + + :returns: element in the collection that the iterator currently references. + +.. bro:id:: Broker::table_lookup + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`Broker::Data` + + Retrieve a value from a table. + + + :t: the table to query. + + + :key: the key to lookup. + + + :returns: the value associated with the key. If the key did not exist, then + the optional field of the returned record is not set. + +.. bro:id:: Broker::table_remove + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`, key: :bro:type:`any`) : :bro:type:`Broker::Data` + + Remove a key-value pair from a table. + + + :t: the table to modify. + + + :key: the key to remove from the table. + + + :returns: the value associated with the key. If the key did not exist, then + the optional field of the returned record is not set. + +.. bro:id:: Broker::table_size + + :Type: :bro:type:`function` (t: :bro:type:`Broker::Data`) : :bro:type:`count` + + Get the number of elements within a table. + + + :t: the table to query. + + + :returns: the number of elements in the table. + +.. bro:id:: Broker::vector_clear + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`) : :bro:type:`bool` + + Remove all elements within a vector. + + + :v: the vector to clear. + + + :returns: always true. + +.. bro:id:: Broker::vector_create + + :Type: :bro:type:`function` () : :bro:type:`Broker::Data` + + Create communication data of type "vector". + +.. bro:id:: Broker::vector_insert + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`, idx: :bro:type:`count`, d: :bro:type:`any`) : :bro:type:`bool` + + Insert an element into a vector at a particular position, possibly displacing + existing elements (insertion always grows the size of the vector by one). + + + :v: the vector to modify. + + + :d: the element to insert. + + + :idx: the index at which to insert the data. If it is greater than the + current size of the vector, the element is inserted at the end. + + + :returns: always true. + +.. bro:id:: Broker::vector_iterator + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`) : :bro:type:`opaque` of Broker::VectorIterator + + Create an iterator for a vector. Note that this makes a copy of the vector + internally to ensure the iterator is always valid. + + + :v: the vector to iterate over. + + + :returns: an iterator. + +.. bro:id:: Broker::vector_iterator_last + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::VectorIterator) : :bro:type:`bool` + + Check if there are no more elements to iterate over. + + + :it: an iterator. + + + :returns: true if there are no more elements to iterator over, i.e. + the iterator is one-past-the-final-element. + +.. bro:id:: Broker::vector_iterator_next + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::VectorIterator) : :bro:type:`bool` + + Advance an iterator. + + + :it: an iterator. + + + :returns: true if the iterator, after advancing, still references an element + in the collection. False if the iterator, after advancing, is + one-past-the-final-element. + +.. bro:id:: Broker::vector_iterator_value + + :Type: :bro:type:`function` (it: :bro:type:`opaque` of Broker::VectorIterator) : :bro:type:`Broker::Data` + + Retrieve the data at an iterator's current position. + + + :it: an iterator. + + + :returns: element in the collection that the iterator currently references. + +.. bro:id:: Broker::vector_lookup + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`, idx: :bro:type:`count`) : :bro:type:`Broker::Data` + + Lookup an element in a vector at a particular position. + + + :v: the vector to query. + + + :idx: the index to lookup. + + + :returns: the value at the index. If the index was larger than any + valid index, the optional field of the returned record is not set. + +.. bro:id:: Broker::vector_remove + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`, idx: :bro:type:`count`) : :bro:type:`Broker::Data` + + Remove an element from a vector at a particular position. + + + :v: the vector to modify. + + + :idx: the index to remove. + + + :returns: the value that was just evicted. If the index was larger than any + valid index, the optional field of the returned record is not set. + +.. bro:id:: Broker::vector_replace + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`, idx: :bro:type:`count`, d: :bro:type:`any`) : :bro:type:`Broker::Data` + + Replace an element in a vector at a particular position. + + + :v: the vector to modify. + + + :d: the element to insert. + + + :idx: the index to replace. + + + :returns: the value that was just evicted. If the index was larger than any + valid index, the optional field of the returned record is not set. + +.. bro:id:: Broker::vector_size + + :Type: :bro:type:`function` (v: :bro:type:`Broker::Data`) : :bro:type:`count` + + Get the number of elements within a vector. + + + :v: the vector to query. + + + :returns: the number of elements in the vector. + + diff --git a/doc/scripts/base/frameworks/cluster/__load__.bro.rst b/doc/scripts/base/frameworks/cluster/__load__.bro.rst new file mode 100644 index 0000000000..f2b885cfec --- /dev/null +++ b/doc/scripts/base/frameworks/cluster/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/cluster/__load__.bro +==================================== + + +:Imports: :doc:`base/frameworks/cluster/main.bro `, :doc:`base/frameworks/cluster/pools.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/cluster/index.rst b/doc/scripts/base/frameworks/cluster/index.rst new file mode 100644 index 0000000000..07a4f50600 --- /dev/null +++ b/doc/scripts/base/frameworks/cluster/index.rst @@ -0,0 +1,26 @@ +:orphan: + +Package: base/frameworks/cluster +================================ + +The cluster framework provides for establishing and controlling a cluster +of Bro instances. + +:doc:`/scripts/base/frameworks/cluster/__load__.bro` + + +:doc:`/scripts/base/frameworks/cluster/main.bro` + + A framework for establishing and controlling a cluster of Bro instances. + In order to use the cluster framework, a script named + ``cluster-layout.bro`` must exist somewhere in Bro's script search path + which has a cluster definition of the :bro:id:`Cluster::nodes` variable. + The ``CLUSTER_NODE`` environment variable or :bro:id:`Cluster::node` + must also be sent and the cluster framework loaded as a package like + ``@load base/frameworks/cluster``. + +:doc:`/scripts/base/frameworks/cluster/pools.bro` + + Defines an interface for managing pools of cluster nodes. Pools are + a useful way to distribute work or data among nodes within a cluster. + diff --git a/doc/scripts/base/frameworks/cluster/main.bro.rst b/doc/scripts/base/frameworks/cluster/main.bro.rst new file mode 100644 index 0000000000..1d9e4f0297 --- /dev/null +++ b/doc/scripts/base/frameworks/cluster/main.bro.rst @@ -0,0 +1,529 @@ +:tocdepth: 3 + +base/frameworks/cluster/main.bro +================================ +.. bro:namespace:: Cluster + +A framework for establishing and controlling a cluster of Bro instances. +In order to use the cluster framework, a script named +``cluster-layout.bro`` must exist somewhere in Bro's script search path +which has a cluster definition of the :bro:id:`Cluster::nodes` variable. +The ``CLUSTER_NODE`` environment variable or :bro:id:`Cluster::node` +must also be sent and the cluster framework loaded as a package like +``@load base/frameworks/cluster``. + +:Namespace: Cluster +:Imports: :doc:`base/frameworks/broker `, :doc:`base/frameworks/control ` + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================================================= ============================================================================== +:bro:id:`Cluster::default_backend`: :bro:type:`Broker::BackendType` :bro:attr:`&redef` The type of data store backend that will be used for all data stores if + no other has already been specified by the user in :bro:see:`Cluster::stores`. +:bro:id:`Cluster::default_master_node`: :bro:type:`string` :bro:attr:`&redef` Name of the node on which master data stores will be created if no other + has already been specified by the user in :bro:see:`Cluster::stores`. +:bro:id:`Cluster::default_persistent_backend`: :bro:type:`Broker::BackendType` :bro:attr:`&redef` The type of persistent data store backend that will be used for all data + stores if no other has already been specified by the user in + :bro:see:`Cluster::stores`. +:bro:id:`Cluster::default_store_dir`: :bro:type:`string` :bro:attr:`&redef` Setting a default dir will, for persistent backends that have not + been given an explicit file path via :bro:see:`Cluster::stores`, + automatically create a path within this dir that is based on the name of + the data store. +:bro:id:`Cluster::enable_round_robin_logging`: :bro:type:`bool` :bro:attr:`&redef` Whether to distribute log messages among available logging nodes. +:bro:id:`Cluster::logger_topic`: :bro:type:`string` :bro:attr:`&redef` The topic name used for exchanging messages that are relevant to + logger nodes in a cluster. +:bro:id:`Cluster::manager_is_logger`: :bro:type:`bool` :bro:attr:`&redef` Indicates whether or not the manager will act as the logger and receive + logs. +:bro:id:`Cluster::manager_topic`: :bro:type:`string` :bro:attr:`&redef` The topic name used for exchanging messages that are relevant to + manager nodes in a cluster. +:bro:id:`Cluster::node`: :bro:type:`string` :bro:attr:`&redef` This is usually supplied on the command line for each instance + of the cluster that is started up. +:bro:id:`Cluster::node_topic_prefix`: :bro:type:`string` :bro:attr:`&redef` The topic prefix used for exchanging messages that are relevant to + a named node in a cluster. +:bro:id:`Cluster::nodeid_topic_prefix`: :bro:type:`string` :bro:attr:`&redef` The topic prefix used for exchanging messages that are relevant to + a unique node in a cluster. +:bro:id:`Cluster::nodes`: :bro:type:`table` :bro:attr:`&redef` The cluster layout definition. +:bro:id:`Cluster::proxy_topic`: :bro:type:`string` :bro:attr:`&redef` The topic name used for exchanging messages that are relevant to + proxy nodes in a cluster. +:bro:id:`Cluster::retry_interval`: :bro:type:`interval` :bro:attr:`&redef` Interval for retrying failed connections between cluster nodes. +:bro:id:`Cluster::time_machine_topic`: :bro:type:`string` :bro:attr:`&redef` The topic name used for exchanging messages that are relevant to + time machine nodes in a cluster. +:bro:id:`Cluster::worker_topic`: :bro:type:`string` :bro:attr:`&redef` The topic name used for exchanging messages that are relevant to + worker nodes in a cluster. +================================================================================================= ============================================================================== + +State Variables +############### +================================================================================================================================================================================================================================================================================================================================================================== ====================================================================== +:bro:id:`Cluster::stores`: :bro:type:`table` :bro:attr:`&default` = ``[name=, store=, master_node=, master=F, backend=Broker::MEMORY, options=[sqlite=[path=], rocksdb=[path=]], clone_resync_interval=10.0 secs, clone_stale_interval=5.0 mins, clone_mutation_buffer_interval=2.0 mins]`` :bro:attr:`&optional` :bro:attr:`&redef` A table of cluster-enabled data stores that have been created, indexed + by their name. +:bro:id:`Cluster::worker_count`: :bro:type:`count` This gives the value for the number of workers currently connected to, + and it's maintained internally by the cluster framework. +================================================================================================================================================================================================================================================================================================================================================================== ====================================================================== + +Types +##### +============================================================== ==================================================================== +:bro:type:`Cluster::Info`: :bro:type:`record` :bro:attr:`&log` The record type which contains the column fields of the cluster log. +:bro:type:`Cluster::Node`: :bro:type:`record` Record type to indicate a node in a cluster. +:bro:type:`Cluster::NodeType`: :bro:type:`enum` Types of nodes that are allowed to participate in the cluster + configuration. +:bro:type:`Cluster::StoreInfo`: :bro:type:`record` Information regarding a cluster-enabled data store. +============================================================== ==================================================================== + +Redefinitions +############# +===================================== ====================================== +:bro:type:`Log::ID`: :bro:type:`enum` The cluster logging stream identifier. +===================================== ====================================== + +Events +###### +=============================================== ======================================================================= +:bro:id:`Cluster::hello`: :bro:type:`event` When using broker-enabled cluster framework, nodes broadcast this event + to exchange their user-defined name along with a string that uniquely + identifies it for the duration of its lifetime. +:bro:id:`Cluster::node_down`: :bro:type:`event` When using broker-enabled cluster framework, this event will be emitted + locally whenever a connected cluster node becomes disconnected. +:bro:id:`Cluster::node_up`: :bro:type:`event` When using broker-enabled cluster framework, this event will be emitted + locally whenever a cluster node connects or reconnects. +=============================================== ======================================================================= + +Functions +######### +======================================================== =================================================================== +:bro:id:`Cluster::create_store`: :bro:type:`function` Sets up a cluster-enabled data store. +:bro:id:`Cluster::is_enabled`: :bro:type:`function` This function can be called at any time to determine if the cluster + framework is being enabled for this run. +:bro:id:`Cluster::local_node_type`: :bro:type:`function` This function can be called at any time to determine what type of + cluster node the current Bro instance is going to be acting as. +:bro:id:`Cluster::log`: :bro:type:`function` Write a message to the cluster logging stream. +:bro:id:`Cluster::node_topic`: :bro:type:`function` Retrieve the topic associated with a specific node in the cluster. +:bro:id:`Cluster::nodeid_topic`: :bro:type:`function` Retrieve the topic associated with a specific node in the cluster. +======================================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Cluster::default_backend + + :Type: :bro:type:`Broker::BackendType` + :Attributes: :bro:attr:`&redef` + :Default: ``Broker::MEMORY`` + + The type of data store backend that will be used for all data stores if + no other has already been specified by the user in :bro:see:`Cluster::stores`. + +.. bro:id:: Cluster::default_master_node + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Name of the node on which master data stores will be created if no other + has already been specified by the user in :bro:see:`Cluster::stores`. + An empty value means "use whatever name corresponds to the manager + node". + +.. bro:id:: Cluster::default_persistent_backend + + :Type: :bro:type:`Broker::BackendType` + :Attributes: :bro:attr:`&redef` + :Default: ``Broker::SQLITE`` + + The type of persistent data store backend that will be used for all data + stores if no other has already been specified by the user in + :bro:see:`Cluster::stores`. This will be used when script authors call + :bro:see:`Cluster::create_store` with the *persistent* argument set true. + +.. bro:id:: Cluster::default_store_dir + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Setting a default dir will, for persistent backends that have not + been given an explicit file path via :bro:see:`Cluster::stores`, + automatically create a path within this dir that is based on the name of + the data store. + +.. bro:id:: Cluster::enable_round_robin_logging + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Whether to distribute log messages among available logging nodes. + +.. bro:id:: Cluster::logger_topic + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/cluster/logger"`` + + The topic name used for exchanging messages that are relevant to + logger nodes in a cluster. Used with broker-enabled cluster communication. + +.. bro:id:: Cluster::manager_is_logger + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Indicates whether or not the manager will act as the logger and receive + logs. This value should be set in the cluster-layout.bro script (the + value should be true only if no logger is specified in Cluster::nodes). + Note that BroControl handles this automatically. + +.. bro:id:: Cluster::manager_topic + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/cluster/manager"`` + + The topic name used for exchanging messages that are relevant to + manager nodes in a cluster. Used with broker-enabled cluster communication. + +.. bro:id:: Cluster::node + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + This is usually supplied on the command line for each instance + of the cluster that is started up. + +.. bro:id:: Cluster::node_topic_prefix + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/cluster/node/"`` + + The topic prefix used for exchanging messages that are relevant to + a named node in a cluster. Used with broker-enabled cluster communication. + +.. bro:id:: Cluster::nodeid_topic_prefix + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/cluster/nodeid/"`` + + The topic prefix used for exchanging messages that are relevant to + a unique node in a cluster. Used with broker-enabled cluster communication. + +.. bro:id:: Cluster::nodes + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`Cluster::Node` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + The cluster layout definition. This should be placed into a filter + named cluster-layout.bro somewhere in the BROPATH. It will be + automatically loaded if the CLUSTER_NODE environment variable is set. + Note that BroControl handles all of this automatically. + The table is typically indexed by node names/labels (e.g. "manager" + or "worker-1"). + +.. bro:id:: Cluster::proxy_topic + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/cluster/proxy"`` + + The topic name used for exchanging messages that are relevant to + proxy nodes in a cluster. Used with broker-enabled cluster communication. + +.. bro:id:: Cluster::retry_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 min`` + + Interval for retrying failed connections between cluster nodes. + If set, the BRO_DEFAULT_CONNECT_RETRY (given in number of seconds) + overrides this option. + +.. bro:id:: Cluster::time_machine_topic + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/cluster/time_machine"`` + + The topic name used for exchanging messages that are relevant to + time machine nodes in a cluster. Used with broker-enabled cluster communication. + +.. bro:id:: Cluster::worker_topic + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/cluster/worker"`` + + The topic name used for exchanging messages that are relevant to + worker nodes in a cluster. Used with broker-enabled cluster communication. + +State Variables +############### +.. bro:id:: Cluster::stores + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`Cluster::StoreInfo` + :Attributes: :bro:attr:`&default` = ``[name=, store=, master_node=, master=F, backend=Broker::MEMORY, options=[sqlite=[path=], rocksdb=[path=]], clone_resync_interval=10.0 secs, clone_stale_interval=5.0 mins, clone_mutation_buffer_interval=2.0 mins]`` :bro:attr:`&optional` :bro:attr:`&redef` + :Default: ``{}`` + + A table of cluster-enabled data stores that have been created, indexed + by their name. This table will be populated automatically by + :bro:see:`Cluster::create_store`, but if you need to customize + the options related to a particular data store, you may redef this + table. Calls to :bro:see:`Cluster::create_store` will first check + the table for an entry of the same name and, if found, will use the + predefined options there when setting up the store. + +.. bro:id:: Cluster::worker_count + + :Type: :bro:type:`count` + :Default: ``0`` + + This gives the value for the number of workers currently connected to, + and it's maintained internally by the cluster framework. It's + primarily intended for use by managers to find out how many workers + should be responding to requests. + +Types +##### +.. bro:type:: Cluster::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The time at which a cluster message was generated. + + node: :bro:type:`string` :bro:attr:`&log` + The name of the node that is creating the log record. + + message: :bro:type:`string` :bro:attr:`&log` + A message indicating information about the cluster's operation. + :Attributes: :bro:attr:`&log` + + The record type which contains the column fields of the cluster log. + +.. bro:type:: Cluster::Node + + :Type: :bro:type:`record` + + node_type: :bro:type:`Cluster::NodeType` + Identifies the type of cluster node in this node's configuration. + + ip: :bro:type:`addr` + The IP address of the cluster node. + + zone_id: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + If the *ip* field is a non-global IPv6 address, this field + can specify a particular :rfc:`4007` ``zone_id``. + + p: :bro:type:`port` + The port that this node will listen on for peer connections. + + interface: :bro:type:`string` :bro:attr:`&optional` + Identifier for the interface a worker is sniffing. + + manager: :bro:type:`string` :bro:attr:`&optional` + Name of the manager node this node uses. For workers and proxies. + + time_machine: :bro:type:`string` :bro:attr:`&optional` + Name of a time machine node with which this node connects. + + id: :bro:type:`string` :bro:attr:`&optional` + A unique identifier assigned to the node by the broker framework. + This field is only set while a node is connected. + + lb_filter: :bro:type:`string` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/misc/load-balancing.bro` is loaded) + + A BPF filter for load balancing traffic sniffed on a single + interface across a number of processes. In normal uses, this + will be assigned dynamically by the manager and installed by + the workers. + + Record type to indicate a node in a cluster. + +.. bro:type:: Cluster::NodeType + + :Type: :bro:type:`enum` + + .. bro:enum:: Cluster::NONE Cluster::NodeType + + A dummy node type indicating the local node is not operating + within a cluster. + + .. bro:enum:: Cluster::CONTROL Cluster::NodeType + + A node type which is allowed to view/manipulate the configuration + of other nodes in the cluster. + + .. bro:enum:: Cluster::LOGGER Cluster::NodeType + + A node type responsible for log management. + + .. bro:enum:: Cluster::MANAGER Cluster::NodeType + + A node type responsible for policy management. + + .. bro:enum:: Cluster::PROXY Cluster::NodeType + + A node type for relaying worker node communication and synchronizing + worker node state. + + .. bro:enum:: Cluster::WORKER Cluster::NodeType + + The node type doing all the actual traffic analysis. + + .. bro:enum:: Cluster::TIME_MACHINE Cluster::NodeType + + A node acting as a traffic recorder using the + `Time Machine `_ + software. + + Types of nodes that are allowed to participate in the cluster + configuration. + +.. bro:type:: Cluster::StoreInfo + + :Type: :bro:type:`record` + + name: :bro:type:`string` :bro:attr:`&optional` + The name of the data store. + + store: :bro:type:`opaque` of Broker::Store :bro:attr:`&optional` + The store handle. + + master_node: :bro:type:`string` :bro:attr:`&default` = :bro:see:`Cluster::default_master_node` :bro:attr:`&optional` + The name of the cluster node on which the master version of the data + store resides. + + master: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Whether the data store is the master version or a clone. + + backend: :bro:type:`Broker::BackendType` :bro:attr:`&default` = :bro:see:`Cluster::default_backend` :bro:attr:`&optional` + The type of backend used for storing data. + + options: :bro:type:`Broker::BackendOptions` :bro:attr:`&default` = ``[sqlite=[path=], rocksdb=[path=]]`` :bro:attr:`&optional` + Parameters used for configuring the backend. + + clone_resync_interval: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Broker::default_clone_resync_interval` :bro:attr:`&optional` + A resync/reconnect interval to pass through to + :bro:see:`Broker::create_clone`. + + clone_stale_interval: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Broker::default_clone_stale_interval` :bro:attr:`&optional` + A staleness duration to pass through to + :bro:see:`Broker::create_clone`. + + clone_mutation_buffer_interval: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Broker::default_clone_mutation_buffer_interval` :bro:attr:`&optional` + A mutation buffer interval to pass through to + :bro:see:`Broker::create_clone`. + + Information regarding a cluster-enabled data store. + +Events +###### +.. bro:id:: Cluster::hello + + :Type: :bro:type:`event` (name: :bro:type:`string`, id: :bro:type:`string`) + + When using broker-enabled cluster framework, nodes broadcast this event + to exchange their user-defined name along with a string that uniquely + identifies it for the duration of its lifetime. This string may change + if the node dies and has to reconnect later. + +.. bro:id:: Cluster::node_down + + :Type: :bro:type:`event` (name: :bro:type:`string`, id: :bro:type:`string`) + + When using broker-enabled cluster framework, this event will be emitted + locally whenever a connected cluster node becomes disconnected. + +.. bro:id:: Cluster::node_up + + :Type: :bro:type:`event` (name: :bro:type:`string`, id: :bro:type:`string`) + + When using broker-enabled cluster framework, this event will be emitted + locally whenever a cluster node connects or reconnects. + +Functions +######### +.. bro:id:: Cluster::create_store + + :Type: :bro:type:`function` (name: :bro:type:`string`, persistent: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional`) : :bro:type:`Cluster::StoreInfo` + + Sets up a cluster-enabled data store. They will also still properly + function for uses that are not operating a cluster. + + + :name: the name of the data store to create. + + + :persistent: whether the data store must be persistent. + + + :returns: the store's information. For master stores, the store will be + ready to use immediately. For clones, the store field will not + be set until the node containing the master store has connected. + +.. bro:id:: Cluster::is_enabled + + :Type: :bro:type:`function` () : :bro:type:`bool` + + This function can be called at any time to determine if the cluster + framework is being enabled for this run. + + + :returns: True if :bro:id:`Cluster::node` has been set. + +.. bro:id:: Cluster::local_node_type + + :Type: :bro:type:`function` () : :bro:type:`Cluster::NodeType` + + This function can be called at any time to determine what type of + cluster node the current Bro instance is going to be acting as. + If :bro:id:`Cluster::is_enabled` returns false, then + :bro:enum:`Cluster::NONE` is returned. + + + :returns: The :bro:type:`Cluster::NodeType` the calling node acts as. + +.. bro:id:: Cluster::log + + :Type: :bro:type:`function` (msg: :bro:type:`string`) : :bro:type:`void` + + Write a message to the cluster logging stream. + +.. bro:id:: Cluster::node_topic + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`string` + + Retrieve the topic associated with a specific node in the cluster. + + + :name: the name of the cluster node (e.g. "manager"). + + + :returns: a topic string that may used to send a message exclusively to + a given cluster node. + +.. bro:id:: Cluster::nodeid_topic + + :Type: :bro:type:`function` (id: :bro:type:`string`) : :bro:type:`string` + + Retrieve the topic associated with a specific node in the cluster. + + + :id: the id of the cluster node (from :bro:see:`Broker::EndpointInfo` + or :bro:see:`Broker::node_id`. + + + :returns: a topic string that may used to send a message exclusively to + a given cluster node. + + diff --git a/doc/scripts/base/frameworks/cluster/pools.bro.rst b/doc/scripts/base/frameworks/cluster/pools.bro.rst new file mode 100644 index 0000000000..2e8471e651 --- /dev/null +++ b/doc/scripts/base/frameworks/cluster/pools.bro.rst @@ -0,0 +1,291 @@ +:tocdepth: 3 + +base/frameworks/cluster/pools.bro +================================= +.. bro:namespace:: Cluster + +Defines an interface for managing pools of cluster nodes. Pools are +a useful way to distribute work or data among nodes within a cluster. + +:Namespace: Cluster +:Imports: :doc:`base/frameworks/cluster/main.bro `, :doc:`base/utils/hash_hrw.bro ` + +Summary +~~~~~~~ +State Variables +############### +===================================================================================== ====================================================== +:bro:id:`Cluster::logger_pool`: :bro:type:`Cluster::Pool` A pool containing all the logger nodes of a cluster. +:bro:id:`Cluster::logger_pool_spec`: :bro:type:`Cluster::PoolSpec` :bro:attr:`&redef` The specification for :bro:see:`Cluster::logger_pool`. +:bro:id:`Cluster::proxy_pool`: :bro:type:`Cluster::Pool` A pool containing all the proxy nodes of a cluster. +:bro:id:`Cluster::proxy_pool_spec`: :bro:type:`Cluster::PoolSpec` :bro:attr:`&redef` The specification for :bro:see:`Cluster::proxy_pool`. +:bro:id:`Cluster::worker_pool`: :bro:type:`Cluster::Pool` A pool containing all the worker nodes of a cluster. +:bro:id:`Cluster::worker_pool_spec`: :bro:type:`Cluster::PoolSpec` :bro:attr:`&redef` The specification for :bro:see:`Cluster::worker_pool`. +===================================================================================== ====================================================== + +Types +##### +======================================================= =========================================================== +:bro:type:`Cluster::PoolNode`: :bro:type:`record` Store state of a cluster within the context of a work pool. +:bro:type:`Cluster::PoolNodeTable`: :bro:type:`table` +:bro:type:`Cluster::PoolSpec`: :bro:type:`record` A pool specification. +:bro:type:`Cluster::RoundRobinTable`: :bro:type:`table` +======================================================= =========================================================== + +Functions +######### +====================================================== ====================================================================== +:bro:id:`Cluster::hrw_topic`: :bro:type:`function` Retrieve the topic associated with the node mapped via Rendezvous hash + of an arbitrary key. +:bro:id:`Cluster::register_pool`: :bro:type:`function` Registers and initializes a pool. +:bro:id:`Cluster::rr_log_topic`: :bro:type:`function` Distributes log message topics among logger nodes via round-robin. +:bro:id:`Cluster::rr_topic`: :bro:type:`function` Retrieve the topic associated with the node in a round-robin fashion. +====================================================== ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +State Variables +############### +.. bro:id:: Cluster::logger_pool + + :Type: :bro:type:`Cluster::Pool` + :Default: + + :: + + { + spec=[topic="", node_type=Cluster::PROXY, max_nodes=, exclusive=F] + nodes={ + + } + node_list=[] + hrw_pool=[sites={ + + }] + rr_key_seq={ + + } + alive_count=0 + } + + A pool containing all the logger nodes of a cluster. + The pool's node membership/availability is automatically + maintained by the cluster framework. + +.. bro:id:: Cluster::logger_pool_spec + + :Type: :bro:type:`Cluster::PoolSpec` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + topic="bro/cluster/pool/logger" + node_type=Cluster::LOGGER + max_nodes= + exclusive=F + } + + The specification for :bro:see:`Cluster::logger_pool`. + +.. bro:id:: Cluster::proxy_pool + + :Type: :bro:type:`Cluster::Pool` + :Default: + + :: + + { + spec=[topic="", node_type=Cluster::PROXY, max_nodes=, exclusive=F] + nodes={ + + } + node_list=[] + hrw_pool=[sites={ + + }] + rr_key_seq={ + + } + alive_count=0 + } + + A pool containing all the proxy nodes of a cluster. + The pool's node membership/availability is automatically + maintained by the cluster framework. + +.. bro:id:: Cluster::proxy_pool_spec + + :Type: :bro:type:`Cluster::PoolSpec` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + topic="bro/cluster/pool/proxy" + node_type=Cluster::PROXY + max_nodes= + exclusive=F + } + + The specification for :bro:see:`Cluster::proxy_pool`. + +.. bro:id:: Cluster::worker_pool + + :Type: :bro:type:`Cluster::Pool` + :Default: + + :: + + { + spec=[topic="", node_type=Cluster::PROXY, max_nodes=, exclusive=F] + nodes={ + + } + node_list=[] + hrw_pool=[sites={ + + }] + rr_key_seq={ + + } + alive_count=0 + } + + A pool containing all the worker nodes of a cluster. + The pool's node membership/availability is automatically + maintained by the cluster framework. + +.. bro:id:: Cluster::worker_pool_spec + + :Type: :bro:type:`Cluster::PoolSpec` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + topic="bro/cluster/pool/worker" + node_type=Cluster::WORKER + max_nodes= + exclusive=F + } + + The specification for :bro:see:`Cluster::worker_pool`. + +Types +##### +.. bro:type:: Cluster::PoolNode + + :Type: :bro:type:`record` + + name: :bro:type:`string` + The node name (e.g. "manager"). + + alias: :bro:type:`string` + An alias of *name* used to prevent hashing collisions when creating + *site_id*. + + site_id: :bro:type:`count` + A 32-bit unique identifier for the pool node, derived from name/alias. + + alive: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Whether the node is currently alive and can receive work. + + Store state of a cluster within the context of a work pool. + +.. bro:type:: Cluster::PoolNodeTable + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`Cluster::PoolNode` + + +.. bro:type:: Cluster::PoolSpec + + :Type: :bro:type:`record` + + topic: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + A topic string that can be used to reach all nodes within a pool. + + node_type: :bro:type:`Cluster::NodeType` :bro:attr:`&default` = ``Cluster::PROXY`` :bro:attr:`&optional` + The type of nodes that are contained within the pool. + + max_nodes: :bro:type:`count` :bro:attr:`&optional` + The maximum number of nodes that may belong to the pool. + If not set, then all available nodes will be added to the pool, + else the cluster framework will automatically limit the pool + membership according to the threshhold. + + exclusive: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Whether the pool requires exclusive access to nodes. If true, + then *max_nodes* nodes will not be assigned to any other pool. + When using this flag, *max_nodes* must also be set. + + A pool specification. + +.. bro:type:: Cluster::RoundRobinTable + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`int` + + +Functions +######### +.. bro:id:: Cluster::hrw_topic + + :Type: :bro:type:`function` (pool: :bro:type:`Cluster::Pool`, key: :bro:type:`any`) : :bro:type:`string` + + Retrieve the topic associated with the node mapped via Rendezvous hash + of an arbitrary key. + + + :pool: the pool of nodes to consider. + + + :key: data used for input to the hashing function that will uniformly + distribute keys among available nodes. + + + :returns: a topic string associated with a cluster node that is alive + or an empty string if nothing is alive. + +.. bro:id:: Cluster::register_pool + + :Type: :bro:type:`function` (spec: :bro:type:`Cluster::PoolSpec`) : :bro:type:`Cluster::Pool` + + Registers and initializes a pool. + +.. bro:id:: Cluster::rr_log_topic + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, path: :bro:type:`string`) : :bro:type:`string` + + Distributes log message topics among logger nodes via round-robin. + This will be automatically assigned to :bro:see:`Broker::log_topic` + if :bro:see:`Cluster::enable_round_robin_logging` is enabled. + If no logger nodes are active, then this will return the value + of :bro:see:`Broker::default_log_topic`. + +.. bro:id:: Cluster::rr_topic + + :Type: :bro:type:`function` (pool: :bro:type:`Cluster::Pool`, key: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Retrieve the topic associated with the node in a round-robin fashion. + + + :pool: the pool of nodes to consider. + + + :key: an arbitrary string to identify the purpose for which you're + requesting the topic. e.g. consider using a name-spaced key + like "Intel::cluster_rr_key" if you need to guarantee that + a group of messages get distributed in a well-defined pattern + without other messages being interleaved within the round-robin. + Usually sharing the default key is fine for load-balancing + purposes. + + + :returns: a topic string associated with a cluster node that is alive, + or an empty string if nothing is alive. + + diff --git a/doc/scripts/base/frameworks/config/__load__.bro.rst b/doc/scripts/base/frameworks/config/__load__.bro.rst new file mode 100644 index 0000000000..e95e4e7378 --- /dev/null +++ b/doc/scripts/base/frameworks/config/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/config/__load__.bro +=================================== + + +:Imports: :doc:`base/frameworks/config/input.bro `, :doc:`base/frameworks/config/main.bro `, :doc:`base/frameworks/config/weird.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/config/index.rst b/doc/scripts/base/frameworks/config/index.rst new file mode 100644 index 0000000000..d9c5800ce2 --- /dev/null +++ b/doc/scripts/base/frameworks/config/index.rst @@ -0,0 +1,25 @@ +:orphan: + +Package: base/frameworks/config +=============================== + +The configuration framework provides a way to change the Bro configuration +in "option" values at run-time. + +:doc:`/scripts/base/frameworks/config/__load__.bro` + + +:doc:`/scripts/base/frameworks/config/main.bro` + + The configuration framework provides a way to change Bro options + (as specified by the "option" keyword) at runtime. It also logs runtime + changes to options to config.log. + +:doc:`/scripts/base/frameworks/config/input.bro` + + File input for the configuration framework using the input framework. + +:doc:`/scripts/base/frameworks/config/weird.bro` + + This script sets up the config framework change handlers for weirds. + diff --git a/doc/scripts/base/frameworks/config/input.bro.rst b/doc/scripts/base/frameworks/config/input.bro.rst new file mode 100644 index 0000000000..02ac08d6dc --- /dev/null +++ b/doc/scripts/base/frameworks/config/input.bro.rst @@ -0,0 +1,54 @@ +:tocdepth: 3 + +base/frameworks/config/input.bro +================================ +.. bro:namespace:: Config + +File input for the configuration framework using the input framework. + +:Namespace: Config +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/config/main.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================== =============================================== +:bro:id:`Config::config_files`: :bro:type:`set` :bro:attr:`&redef` Configuration files that will be read off disk. +================================================================== =============================================== + +Functions +######### +=================================================== =================================================================== +:bro:id:`Config::read_config`: :bro:type:`function` Read specified configuration file and apply values; updates to file + are not tracked. +=================================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Config::config_files + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Configuration files that will be read off disk. Files are reread + every time they are updated so updates should be atomic with "mv" + instead of writing the file in place. + + If the same configuration option is defined in several files with + different values, behavior is unspecified. + +Functions +######### +.. bro:id:: Config::read_config + + :Type: :bro:type:`function` (filename: :bro:type:`string`) : :bro:type:`void` + + Read specified configuration file and apply values; updates to file + are not tracked. + + diff --git a/doc/scripts/base/frameworks/config/main.bro.rst b/doc/scripts/base/frameworks/config/main.bro.rst new file mode 100644 index 0000000000..f5507f31c4 --- /dev/null +++ b/doc/scripts/base/frameworks/config/main.bro.rst @@ -0,0 +1,101 @@ +:tocdepth: 3 + +base/frameworks/config/main.bro +=============================== +.. bro:namespace:: Config + +The configuration framework provides a way to change Bro options +(as specified by the "option" keyword) at runtime. It also logs runtime +changes to options to config.log. + +:Namespace: Config +:Imports: :doc:`base/frameworks/cluster ` + +Summary +~~~~~~~ +Types +##### +============================================ ================================== +:bro:type:`Config::Info`: :bro:type:`record` Represents the data in config.log. +============================================ ================================== + +Redefinitions +############# +===================================== ===================================== +:bro:type:`Log::ID`: :bro:type:`enum` The config logging stream identifier. +===================================== ===================================== + +Events +###### +=============================================== ================================================================ +:bro:id:`Config::log_config`: :bro:type:`event` Event that can be handled to access the :bro:type:`Config::Info` + record as it is sent on to the logging framework. +=============================================== ================================================================ + +Functions +######### +================================================= ================================================================== +:bro:id:`Config::set_value`: :bro:type:`function` This function is the config framework layer around the lower-level + :bro:see:`Option::set` call. +================================================= ================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Config::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp at which the configuration change occured. + + id: :bro:type:`string` :bro:attr:`&log` + ID of the value that was changed. + + old_value: :bro:type:`string` :bro:attr:`&log` + Value before the change. + + new_value: :bro:type:`string` :bro:attr:`&log` + Value after the change. + + location: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Optional location that triggered the change. + + Represents the data in config.log. + +Events +###### +.. bro:id:: Config::log_config + + :Type: :bro:type:`event` (rec: :bro:type:`Config::Info`) + + Event that can be handled to access the :bro:type:`Config::Info` + record as it is sent on to the logging framework. + +Functions +######### +.. bro:id:: Config::set_value + + :Type: :bro:type:`function` (ID: :bro:type:`string`, val: :bro:type:`any`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` :bro:attr:`&optional`) : :bro:type:`bool` + + This function is the config framework layer around the lower-level + :bro:see:`Option::set` call. Config::set_value will set the configuration + value for all nodes in the cluster, no matter where it was called. Note + that :bro:see:`Option::set` does not distribute configuration changes + to other nodes. + + + :ID: The ID of the option to update. + + + :val: The new value of the option. + + + :location: Optional parameter detailing where this change originated from. + + + :returns: true on success, false when an error occurs. + + diff --git a/doc/scripts/base/frameworks/config/weird.bro.rst b/doc/scripts/base/frameworks/config/weird.bro.rst new file mode 100644 index 0000000000..94c2920c24 --- /dev/null +++ b/doc/scripts/base/frameworks/config/weird.bro.rst @@ -0,0 +1,17 @@ +:tocdepth: 3 + +base/frameworks/config/weird.bro +================================ +.. bro:namespace:: Config + +This script sets up the config framework change handlers for weirds. + +:Namespace: Config +:Imports: :doc:`base/frameworks/config/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/control/__load__.bro.rst b/doc/scripts/base/frameworks/control/__load__.bro.rst new file mode 100644 index 0000000000..c9a455334f --- /dev/null +++ b/doc/scripts/base/frameworks/control/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/control/__load__.bro +==================================== + + +:Imports: :doc:`base/frameworks/control/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/control/index.rst b/doc/scripts/base/frameworks/control/index.rst new file mode 100644 index 0000000000..1727aa1d77 --- /dev/null +++ b/doc/scripts/base/frameworks/control/index.rst @@ -0,0 +1,18 @@ +:orphan: + +Package: base/frameworks/control +================================ + +The control framework provides the foundation for providing "commands" +that can be taken remotely at runtime to modify a running Bro instance +or collect information from the running instance. + +:doc:`/scripts/base/frameworks/control/__load__.bro` + + +:doc:`/scripts/base/frameworks/control/main.bro` + + The control framework provides the foundation for providing "commands" + that can be taken remotely at runtime to modify a running Bro instance + or collect information from the running instance. + diff --git a/doc/scripts/base/frameworks/control/main.bro.rst b/doc/scripts/base/frameworks/control/main.bro.rst new file mode 100644 index 0000000000..898e713458 --- /dev/null +++ b/doc/scripts/base/frameworks/control/main.bro.rst @@ -0,0 +1,218 @@ +:tocdepth: 3 + +base/frameworks/control/main.bro +================================ +.. bro:namespace:: Control + +The control framework provides the foundation for providing "commands" +that can be taken remotely at runtime to modify a running Bro instance +or collect information from the running instance. + +:Namespace: Control + +Summary +~~~~~~~ +Redefinable Options +################### +========================================================================= ================================================================ +:bro:id:`Control::arg`: :bro:type:`string` :bro:attr:`&redef` This can be used by commands that take an argument. +:bro:id:`Control::cmd`: :bro:type:`string` :bro:attr:`&redef` The command that is being done. +:bro:id:`Control::commands`: :bro:type:`set` :bro:attr:`&redef` The commands that can currently be given on the command line for + remote control. +:bro:id:`Control::controllee_listen`: :bro:type:`bool` :bro:attr:`&redef` Whether the controllee should call :bro:see:`Broker::listen`. +:bro:id:`Control::host`: :bro:type:`addr` :bro:attr:`&redef` The address of the host that will be controlled. +:bro:id:`Control::host_port`: :bro:type:`port` :bro:attr:`&redef` The port of the host that will be controlled. +:bro:id:`Control::zone_id`: :bro:type:`string` :bro:attr:`&redef` If :bro:id:`Control::host` is a non-global IPv6 address and + requires a specific :rfc:`4007` ``zone_id``, it can be set here. +========================================================================= ================================================================ + +Constants +######### +=================================================== ================================================================= +:bro:id:`Control::ignore_ids`: :bro:type:`set` Variable IDs that are to be ignored by the update process. +:bro:id:`Control::topic_prefix`: :bro:type:`string` The topic prefix used for exchanging control messages via Broker. +=================================================== ================================================================= + +Events +###### +=================================================================== ==================================================================== +:bro:id:`Control::configuration_update`: :bro:type:`event` This event is a wrapper and alias for the + :bro:id:`Control::configuration_update_request` event. +:bro:id:`Control::configuration_update_request`: :bro:type:`event` Inform the remote Bro instance that it's configuration may have been + updated. +:bro:id:`Control::configuration_update_response`: :bro:type:`event` Message in response to a configuration update request. +:bro:id:`Control::id_value_request`: :bro:type:`event` Event for requesting the value of an ID (a variable). +:bro:id:`Control::id_value_response`: :bro:type:`event` Event for returning the value of an ID after an + :bro:id:`Control::id_value_request` event. +:bro:id:`Control::net_stats_request`: :bro:type:`event` Requests the current net_stats. +:bro:id:`Control::net_stats_response`: :bro:type:`event` Returns the current net_stats. +:bro:id:`Control::peer_status_request`: :bro:type:`event` Requests the current communication status. +:bro:id:`Control::peer_status_response`: :bro:type:`event` Returns the current communication status. +:bro:id:`Control::shutdown_request`: :bro:type:`event` Requests that the Bro instance begins shutting down. +:bro:id:`Control::shutdown_response`: :bro:type:`event` Message in response to a shutdown request. +=================================================================== ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Control::arg + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + This can be used by commands that take an argument. + +.. bro:id:: Control::cmd + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + The command that is being done. It's typically set on the + command line. + +.. bro:id:: Control::commands + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "shutdown", + "id_value", + "net_stats", + "peer_status", + "configuration_update" + } + + The commands that can currently be given on the command line for + remote control. + +.. bro:id:: Control::controllee_listen + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Whether the controllee should call :bro:see:`Broker::listen`. + In a cluster, this isn't needed since the setup process calls it. + +.. bro:id:: Control::host + + :Type: :bro:type:`addr` + :Attributes: :bro:attr:`&redef` + :Default: ``0.0.0.0`` + + The address of the host that will be controlled. + +.. bro:id:: Control::host_port + + :Type: :bro:type:`port` + :Attributes: :bro:attr:`&redef` + :Default: ``0/tcp`` + + The port of the host that will be controlled. + +.. bro:id:: Control::zone_id + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + If :bro:id:`Control::host` is a non-global IPv6 address and + requires a specific :rfc:`4007` ``zone_id``, it can be set here. + +Constants +######### +.. bro:id:: Control::ignore_ids + + :Type: :bro:type:`set` [:bro:type:`string`] + :Default: ``{}`` + + Variable IDs that are to be ignored by the update process. + +.. bro:id:: Control::topic_prefix + + :Type: :bro:type:`string` + :Default: ``"bro/control"`` + + The topic prefix used for exchanging control messages via Broker. + +Events +###### +.. bro:id:: Control::configuration_update + + :Type: :bro:type:`event` () + + This event is a wrapper and alias for the + :bro:id:`Control::configuration_update_request` event. + This event is also a primary hooking point for the control framework. + +.. bro:id:: Control::configuration_update_request + + :Type: :bro:type:`event` () + + Inform the remote Bro instance that it's configuration may have been + updated. + +.. bro:id:: Control::configuration_update_response + + :Type: :bro:type:`event` () + + Message in response to a configuration update request. + +.. bro:id:: Control::id_value_request + + :Type: :bro:type:`event` (id: :bro:type:`string`) + + Event for requesting the value of an ID (a variable). + +.. bro:id:: Control::id_value_response + + :Type: :bro:type:`event` (id: :bro:type:`string`, val: :bro:type:`string`) + + Event for returning the value of an ID after an + :bro:id:`Control::id_value_request` event. + +.. bro:id:: Control::net_stats_request + + :Type: :bro:type:`event` () + + Requests the current net_stats. + +.. bro:id:: Control::net_stats_response + + :Type: :bro:type:`event` (s: :bro:type:`string`) + + Returns the current net_stats. + +.. bro:id:: Control::peer_status_request + + :Type: :bro:type:`event` () + + Requests the current communication status. + +.. bro:id:: Control::peer_status_response + + :Type: :bro:type:`event` (s: :bro:type:`string`) + + Returns the current communication status. + +.. bro:id:: Control::shutdown_request + + :Type: :bro:type:`event` () + + Requests that the Bro instance begins shutting down. + +.. bro:id:: Control::shutdown_response + + :Type: :bro:type:`event` () + + Message in response to a shutdown request. + + diff --git a/doc/scripts/base/frameworks/dpd/__load__.bro.rst b/doc/scripts/base/frameworks/dpd/__load__.bro.rst new file mode 100644 index 0000000000..968ea08588 --- /dev/null +++ b/doc/scripts/base/frameworks/dpd/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/dpd/__load__.bro +================================ + + +:Imports: :doc:`base/frameworks/dpd/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/dpd/index.rst b/doc/scripts/base/frameworks/dpd/index.rst new file mode 100644 index 0000000000..c5757b999a --- /dev/null +++ b/doc/scripts/base/frameworks/dpd/index.rst @@ -0,0 +1,16 @@ +:orphan: + +Package: base/frameworks/dpd +============================ + +The DPD (dynamic protocol detection) activates port-independent protocol +detection and selectively disables analyzers if protocol violations occur. + +:doc:`/scripts/base/frameworks/dpd/__load__.bro` + + +:doc:`/scripts/base/frameworks/dpd/main.bro` + + Activates port-independent protocol detection and selectively disables + analyzers if protocol violations occur. + diff --git a/doc/scripts/base/frameworks/dpd/main.bro.rst b/doc/scripts/base/frameworks/dpd/main.bro.rst new file mode 100644 index 0000000000..2f6e6b6e60 --- /dev/null +++ b/doc/scripts/base/frameworks/dpd/main.bro.rst @@ -0,0 +1,99 @@ +:tocdepth: 3 + +base/frameworks/dpd/main.bro +============================ +.. bro:namespace:: DPD + +Activates port-independent protocol detection and selectively disables +analyzers if protocol violations occur. + +:Namespace: DPD + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================ =============================================================== +:bro:id:`DPD::ignore_violations`: :bro:type:`set` :bro:attr:`&redef` Analyzers which you don't want to throw +:bro:id:`DPD::ignore_violations_after`: :bro:type:`count` :bro:attr:`&redef` Ignore violations which go this many bytes into the connection. +============================================================================ =============================================================== + +Types +##### +========================================= ====================================================================== +:bro:type:`DPD::Info`: :bro:type:`record` The record type defining the columns to log in the DPD logging stream. +========================================= ====================================================================== + +Redefinitions +############# +========================================== ====================================== +:bro:type:`Log::ID`: :bro:type:`enum` Add the DPD logging stream identifier. +:bro:type:`connection`: :bro:type:`record` +========================================== ====================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: DPD::ignore_violations + + :Type: :bro:type:`set` [:bro:type:`Analyzer::Tag`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + Analyzer::ANALYZER_DCE_RPC, + Analyzer::ANALYZER_NTLM + } + + Analyzers which you don't want to throw + +.. bro:id:: DPD::ignore_violations_after + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``10240`` + + Ignore violations which go this many bytes into the connection. + Set to 0 to never ignore protocol violations. + +Types +##### +.. bro:type:: DPD::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when protocol analysis failed. + + uid: :bro:type:`string` :bro:attr:`&log` + Connection unique ID. + + id: :bro:type:`conn_id` :bro:attr:`&log` + Connection ID containing the 4-tuple which identifies endpoints. + + proto: :bro:type:`transport_proto` :bro:attr:`&log` + Transport protocol for the violation. + + analyzer: :bro:type:`string` :bro:attr:`&log` + The analyzer that generated the violation. + + failure_reason: :bro:type:`string` :bro:attr:`&log` + The textual reason for the analysis failure. + + disabled_aids: :bro:type:`set` [:bro:type:`count`] + Disabled analyzer IDs. This is only for internal tracking + so as to not attempt to disable analyzers multiple times. + + packet_segment: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/policy/frameworks/dpd/packet-segment-logging.bro` is loaded) + + A chunk of the payload that most likely resulted in the + protocol violation. + + The record type defining the columns to log in the DPD logging stream. + + diff --git a/doc/scripts/base/frameworks/files/__load__.bro.rst b/doc/scripts/base/frameworks/files/__load__.bro.rst new file mode 100644 index 0000000000..09da537eaf --- /dev/null +++ b/doc/scripts/base/frameworks/files/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/files/__load__.bro +================================== + + +:Imports: :doc:`base/frameworks/files/magic `, :doc:`base/frameworks/files/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/files/index.rst b/doc/scripts/base/frameworks/files/index.rst new file mode 100644 index 0000000000..35d068cc5c --- /dev/null +++ b/doc/scripts/base/frameworks/files/index.rst @@ -0,0 +1,20 @@ +:orphan: + +Package: base/frameworks/files +============================== + +The file analysis framework provides an interface for driving the analysis +of files, possibly independent of any network protocol over which they're +transported. + +:doc:`/scripts/base/frameworks/files/__load__.bro` + + +:doc:`/scripts/base/frameworks/files/main.bro` + + An interface for driving the analysis of files, possibly independent of + any network protocol over which they're transported. + +:doc:`/scripts/base/frameworks/files/magic/__load__.bro` + + diff --git a/doc/scripts/base/frameworks/files/magic/__load__.bro.rst b/doc/scripts/base/frameworks/files/magic/__load__.bro.rst new file mode 100644 index 0000000000..7418188817 --- /dev/null +++ b/doc/scripts/base/frameworks/files/magic/__load__.bro.rst @@ -0,0 +1,13 @@ +:tocdepth: 3 + +base/frameworks/files/magic/__load__.bro +======================================== + + + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/files/magic/index.rst b/doc/scripts/base/frameworks/files/magic/index.rst new file mode 100644 index 0000000000..40c5d69fd9 --- /dev/null +++ b/doc/scripts/base/frameworks/files/magic/index.rst @@ -0,0 +1,9 @@ +:orphan: + +Package: base/frameworks/files/magic +==================================== + + +:doc:`/scripts/base/frameworks/files/magic/__load__.bro` + + diff --git a/doc/scripts/base/frameworks/files/main.bro.rst b/doc/scripts/base/frameworks/files/main.bro.rst new file mode 100644 index 0000000000..bf0e78a912 --- /dev/null +++ b/doc/scripts/base/frameworks/files/main.bro.rst @@ -0,0 +1,580 @@ +:tocdepth: 3 + +base/frameworks/files/main.bro +============================== +.. bro:namespace:: Files + +An interface for driving the analysis of files, possibly independent of +any network protocol over which they're transported. + +:Namespace: Files +:Imports: :doc:`base/bif/file_analysis.bif.bro `, :doc:`base/frameworks/analyzer `, :doc:`base/frameworks/logging `, :doc:`base/utils/site.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +======================================================================== ======================================== +:bro:id:`Files::enable_reassembler`: :bro:type:`bool` :bro:attr:`&redef` The default setting for file reassembly. +======================================================================== ======================================== + +Redefinable Options +################### +======================================================================================== ================================================================ +:bro:id:`Files::analyze_by_mime_type_automatically`: :bro:type:`bool` :bro:attr:`&redef` Decide if you want to automatically attached analyzers to + files based on the detected mime type of the file. +:bro:id:`Files::disable`: :bro:type:`table` :bro:attr:`&redef` A table that can be used to disable file analysis completely for + any files transferred over given network protocol analyzers. +:bro:id:`Files::reassembly_buffer_size`: :bro:type:`count` :bro:attr:`&redef` The default per-file reassembly buffer size. +:bro:id:`Files::salt`: :bro:type:`string` :bro:attr:`&redef` The salt concatenated to unique file handle strings generated by + :bro:see:`get_file_handle` before hashing them in to a file id + (the *id* field of :bro:see:`fa_file`). +======================================================================================== ================================================================ + +Types +##### +====================================================================== ============================================================== +:bro:type:`Files::AnalyzerArgs`: :bro:type:`record` :bro:attr:`&redef` A structure which parameterizes a type of file analysis. +:bro:type:`Files::Info`: :bro:type:`record` :bro:attr:`&redef` Contains all metadata related to the analysis of a given file. +:bro:type:`Files::ProtoRegistration`: :bro:type:`record` +====================================================================== ============================================================== + +Redefinitions +############# +========================================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`fa_file`: :bro:type:`record` :bro:attr:`&redef` +========================================================== = + +Events +###### +============================================= ==================================================================== +:bro:id:`Files::log_files`: :bro:type:`event` Event that can be handled to access the Info record as it is sent on + to the logging framework. +============================================= ==================================================================== + +Functions +######### +===================================================================== ============================================================================= +:bro:id:`Files::add_analyzer`: :bro:type:`function` Adds an analyzer to the analysis of a given file. +:bro:id:`Files::all_registered_mime_types`: :bro:type:`function` Returns a table of all MIME-type-to-analyzer mappings currently registered. +:bro:id:`Files::analyzer_name`: :bro:type:`function` Translates a file analyzer enum value to a string with the + analyzer's name. +:bro:id:`Files::describe`: :bro:type:`function` Provides a text description regarding metadata of the file. +:bro:id:`Files::disable_reassembly`: :bro:type:`function` Disables the file reassembler on this file. +:bro:id:`Files::enable_reassembly`: :bro:type:`function` Allows the file reassembler to be used if it's necessary because the + file is transferred out of order. +:bro:id:`Files::file_exists`: :bro:type:`function` Lookup to see if a particular file id exists and is still valid. +:bro:id:`Files::lookup_file`: :bro:type:`function` Lookup an :bro:see:`fa_file` record with the file id. +:bro:id:`Files::register_analyzer_add_callback`: :bro:type:`function` Register a callback for file analyzers to use if they need to do some + manipulation when they are being added to a file before the core code + takes over. +:bro:id:`Files::register_for_mime_type`: :bro:type:`function` Registers a MIME type for an analyzer. +:bro:id:`Files::register_for_mime_types`: :bro:type:`function` Registers a set of MIME types for an analyzer. +:bro:id:`Files::register_protocol`: :bro:type:`function` Register callbacks for protocols that work with the Files framework. +:bro:id:`Files::registered_mime_types`: :bro:type:`function` Returns a set of all MIME types currently registered for a specific analyzer. +:bro:id:`Files::remove_analyzer`: :bro:type:`function` Removes an analyzer from the analysis of a given file. +:bro:id:`Files::set_reassembly_buffer_size`: :bro:type:`function` Set the maximum size the reassembly buffer is allowed to grow + for the given file. +:bro:id:`Files::set_timeout_interval`: :bro:type:`function` Sets the *timeout_interval* field of :bro:see:`fa_file`, which is + used to determine the length of inactivity that is allowed for a file + before internal state related to it is cleaned up. +:bro:id:`Files::stop`: :bro:type:`function` Stops/ignores any further analysis of a given file. +===================================================================== ============================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Files::enable_reassembler + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + The default setting for file reassembly. + +Redefinable Options +################### +.. bro:id:: Files::analyze_by_mime_type_automatically + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Decide if you want to automatically attached analyzers to + files based on the detected mime type of the file. + +.. bro:id:: Files::disable + + :Type: :bro:type:`table` [:bro:type:`Files::Tag`] of :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + A table that can be used to disable file analysis completely for + any files transferred over given network protocol analyzers. + +.. bro:id:: Files::reassembly_buffer_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``524288`` + + The default per-file reassembly buffer size. + +.. bro:id:: Files::salt + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"I recommend changing this."`` + + The salt concatenated to unique file handle strings generated by + :bro:see:`get_file_handle` before hashing them in to a file id + (the *id* field of :bro:see:`fa_file`). + Provided to help mitigate the possibility of manipulating parts of + network connections that factor in to the file handle in order to + generate two handles that would hash to the same file id. + +Types +##### +.. bro:type:: Files::AnalyzerArgs + + :Type: :bro:type:`record` + + chunk_event: :bro:type:`event` (f: :bro:type:`fa_file`, data: :bro:type:`string`, off: :bro:type:`count`) :bro:attr:`&optional` + An event which will be generated for all new file contents, + chunk-wise. Used when *tag* (in the + :bro:see:`Files::add_analyzer` function) is + :bro:see:`Files::ANALYZER_DATA_EVENT`. + + stream_event: :bro:type:`event` (f: :bro:type:`fa_file`, data: :bro:type:`string`) :bro:attr:`&optional` + An event which will be generated for all new file contents, + stream-wise. Used when *tag* is + :bro:see:`Files::ANALYZER_DATA_EVENT`. + + extract_filename: :bro:type:`string` :bro:attr:`&optional` + (present if :doc:`/scripts/base/files/extract/main.bro` is loaded) + + The local filename to which to write an extracted file. + This field is used in the core by the extraction plugin + to know where to write the file to. If not specified, then + a filename in the format "extract--" is + automatically assigned (using the *source* and *id* + fields of :bro:see:`fa_file`). + + extract_limit: :bro:type:`count` :bro:attr:`&default` = :bro:see:`FileExtract::default_limit` :bro:attr:`&optional` + (present if :doc:`/scripts/base/files/extract/main.bro` is loaded) + + The maximum allowed file size in bytes of *extract_filename*. + Once reached, a :bro:see:`file_extraction_limit` event is + raised and the analyzer will be removed unless + :bro:see:`FileExtract::set_limit` is called to increase the + limit. A value of zero means "no limit". + :Attributes: :bro:attr:`&redef` + + A structure which parameterizes a type of file analysis. + +.. bro:type:: Files::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The time when the file was first seen. + + fuid: :bro:type:`string` :bro:attr:`&log` + An identifier associated with a single file. + + tx_hosts: :bro:type:`set` [:bro:type:`addr`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` :bro:attr:`&log` + If this file was transferred over a network + connection this should show the host or hosts that + the data sourced from. + + rx_hosts: :bro:type:`set` [:bro:type:`addr`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` :bro:attr:`&log` + If this file was transferred over a network + connection this should show the host or hosts that + the data traveled to. + + conn_uids: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` :bro:attr:`&log` + Connection UIDs over which the file was transferred. + + source: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + An identification of the source of the file data. E.g. it + may be a network protocol over which it was transferred, or a + local file path which was read, or some other input source. + + depth: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` :bro:attr:`&log` + A value to represent the depth of this file in relation + to its source. In SMTP, it is the depth of the MIME + attachment on the message. In HTTP, it is the depth of the + request within the TCP connection. + + analyzers: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` :bro:attr:`&log` + A set of analysis types done during the file analysis. + + mime_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A mime type provided by the strongest file magic signature + match against the *bof_buffer* field of :bro:see:`fa_file`, + or in the cases where no buffering of the beginning of file + occurs, an initial guess of the mime type based on the first + data seen. + + filename: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A filename for the file if one is available from the source + for the file. These will frequently come from + "Content-Disposition" headers in network protocols. + + duration: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional` + The duration the file was analyzed for. + + local_orig: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + If the source of this file is a network connection, this field + indicates if the data originated from the local network or not as + determined by the configured :bro:see:`Site::local_nets`. + + is_orig: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + If the source of this file is a network connection, this field + indicates if the file is being sent by the originator of the + connection or the responder. + + seen_bytes: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Number of bytes provided to the file analysis engine for the file. + + total_bytes: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Total number of bytes that are supposed to comprise the full file. + + missing_bytes: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of bytes in the file stream that were completely missed + during the process of analysis e.g. due to dropped packets. + + overflow_bytes: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of bytes in the file stream that were not delivered to + stream file analyzers. This could be overlapping bytes or + bytes that couldn't be reassembled. + + timedout: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Whether the file analysis timed out at least once for the file. + + parent_fuid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Identifier associated with a container file from which this one was + extracted as part of the file analysis. + + md5: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/files/hash/main.bro` is loaded) + + An MD5 digest of the file contents. + + sha1: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/files/hash/main.bro` is loaded) + + A SHA1 digest of the file contents. + + sha256: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/files/hash/main.bro` is loaded) + + A SHA256 digest of the file contents. + + x509: :bro:type:`X509::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/files/x509/main.bro` is loaded) + + Information about X509 certificates. This is used to keep + certificate information until all events have been received. + + extracted: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/base/files/extract/main.bro` is loaded) + + Local filename of extracted file. + + extracted_cutoff: :bro:type:`bool` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/base/files/extract/main.bro` is loaded) + + Set to true if the file being extracted was cut off + so the whole file was not logged. + + extracted_size: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/base/files/extract/main.bro` is loaded) + + The number of bytes extracted to disk. + + entropy: :bro:type:`double` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/frameworks/files/entropy-test-all-files.bro` is loaded) + + The information density of the contents of the file, + expressed as a number of bits per character. + :Attributes: :bro:attr:`&redef` + + Contains all metadata related to the analysis of a given file. + For the most part, fields here are derived from ones of the same name + in :bro:see:`fa_file`. + +.. bro:type:: Files::ProtoRegistration + + :Type: :bro:type:`record` + + get_file_handle: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`string` + A callback to generate a file handle on demand when + one is needed by the core. + + describe: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`string` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + A callback to "describe" a file. In the case of an HTTP + transfer the most obvious description would be the URL. + It's like an extremely compressed version of the normal log. + + +Events +###### +.. bro:id:: Files::log_files + + :Type: :bro:type:`event` (rec: :bro:type:`Files::Info`) + + Event that can be handled to access the Info record as it is sent on + to the logging framework. + +Functions +######### +.. bro:id:: Files::add_analyzer + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`, tag: :bro:type:`Files::Tag`, args: :bro:type:`Files::AnalyzerArgs` :bro:attr:`&default` = ``[chunk_event=, stream_event=, extract_filename=, extract_limit=104857600]`` :bro:attr:`&optional`) : :bro:type:`bool` + + Adds an analyzer to the analysis of a given file. + + + :f: the file. + + + :tag: the analyzer type. + + + :args: any parameters the analyzer takes. + + + :returns: true if the analyzer will be added, or false if analysis + for the file isn't currently active or the *args* + were invalid for the analyzer type. + +.. bro:id:: Files::all_registered_mime_types + + :Type: :bro:type:`function` () : :bro:type:`table` [:bro:type:`Files::Tag`] of :bro:type:`set` [:bro:type:`string`] + + Returns a table of all MIME-type-to-analyzer mappings currently registered. + + + :returns: A table mapping each analyzer to the set of MIME types + registered for it. + +.. bro:id:: Files::analyzer_name + + :Type: :bro:type:`function` (tag: :bro:type:`Files::Tag`) : :bro:type:`string` + + Translates a file analyzer enum value to a string with the + analyzer's name. + + + :tag: The analyzer tag. + + + :returns: The analyzer name corresponding to the tag. + +.. bro:id:: Files::describe + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`string` + + Provides a text description regarding metadata of the file. + For example, with HTTP it would return a URL. + + + :f: The file to be described. + + + :returns: a text description regarding metadata of the file. + +.. bro:id:: Files::disable_reassembly + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`void` + + Disables the file reassembler on this file. If the file is not + transferred out of order this will have no effect. + + + :f: the file. + +.. bro:id:: Files::enable_reassembly + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`void` + + Allows the file reassembler to be used if it's necessary because the + file is transferred out of order. + + + :f: the file. + +.. bro:id:: Files::file_exists + + :Type: :bro:type:`function` (fuid: :bro:type:`string`) : :bro:type:`bool` + + Lookup to see if a particular file id exists and is still valid. + + + :fuid: the file id. + + + :returns: T if the file uid is known. + +.. bro:id:: Files::lookup_file + + :Type: :bro:type:`function` (fuid: :bro:type:`string`) : :bro:type:`fa_file` + + Lookup an :bro:see:`fa_file` record with the file id. + + + :fuid: the file id. + + + :returns: the associated :bro:see:`fa_file` record. + +.. bro:id:: Files::register_analyzer_add_callback + + :Type: :bro:type:`function` (tag: :bro:type:`Files::Tag`, callback: :bro:type:`function` (f: :bro:type:`fa_file`, args: :bro:type:`Files::AnalyzerArgs`) : :bro:type:`void`) : :bro:type:`void` + + Register a callback for file analyzers to use if they need to do some + manipulation when they are being added to a file before the core code + takes over. This is unlikely to be interesting for users and should + only be called by file analyzer authors but is *not required*. + + + :tag: Tag for the file analyzer. + + + :callback: Function to execute when the given file analyzer is being added. + +.. bro:id:: Files::register_for_mime_type + + :Type: :bro:type:`function` (tag: :bro:type:`Files::Tag`, mt: :bro:type:`string`) : :bro:type:`bool` + + Registers a MIME type for an analyzer. If a future file with this type is seen, + the analyzer will be automatically assigned to parsing it. The function *adds* + to all MIME types already registered, it doesn't replace them. + + + :tag: The tag of the analyzer. + + + :mt: The MIME type in the form "foo/bar" (case-insensitive). + + + :returns: True if the MIME type was successfully registered. + +.. bro:id:: Files::register_for_mime_types + + :Type: :bro:type:`function` (tag: :bro:type:`Files::Tag`, mime_types: :bro:type:`set` [:bro:type:`string`]) : :bro:type:`bool` + + Registers a set of MIME types for an analyzer. If a future connection on one of + these types is seen, the analyzer will be automatically assigned to parsing it. + The function *adds* to all MIME types already registered, it doesn't replace + them. + + + :tag: The tag of the analyzer. + + + :mts: The set of MIME types, each in the form "foo/bar" (case-insensitive). + + + :returns: True if the MIME types were successfully registered. + +.. bro:id:: Files::register_protocol + + :Type: :bro:type:`function` (tag: :bro:type:`Analyzer::Tag`, reg: :bro:type:`Files::ProtoRegistration`) : :bro:type:`bool` + + Register callbacks for protocols that work with the Files framework. + The callbacks must uniquely identify a file and each protocol can + only have a single callback registered for it. + + + :tag: Tag for the protocol analyzer having a callback being registered. + + + :reg: A :bro:see:`Files::ProtoRegistration` record. + + + :returns: true if the protocol being registered was not previously registered. + +.. bro:id:: Files::registered_mime_types + + :Type: :bro:type:`function` (tag: :bro:type:`Files::Tag`) : :bro:type:`set` [:bro:type:`string`] + + Returns a set of all MIME types currently registered for a specific analyzer. + + + :tag: The tag of the analyzer. + + + :returns: The set of MIME types. + +.. bro:id:: Files::remove_analyzer + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`, tag: :bro:type:`Files::Tag`, args: :bro:type:`Files::AnalyzerArgs` :bro:attr:`&default` = ``[chunk_event=, stream_event=, extract_filename=, extract_limit=104857600]`` :bro:attr:`&optional`) : :bro:type:`bool` + + Removes an analyzer from the analysis of a given file. + + + :f: the file. + + + :tag: the analyzer type. + + + :args: the analyzer (type and args) to remove. + + + :returns: true if the analyzer will be removed, or false if analysis + for the file isn't currently active. + +.. bro:id:: Files::set_reassembly_buffer_size + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`, max: :bro:type:`count`) : :bro:type:`void` + + Set the maximum size the reassembly buffer is allowed to grow + for the given file. + + + :f: the file. + + + :max: Maximum allowed size of the reassembly buffer. + +.. bro:id:: Files::set_timeout_interval + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`, t: :bro:type:`interval`) : :bro:type:`bool` + + Sets the *timeout_interval* field of :bro:see:`fa_file`, which is + used to determine the length of inactivity that is allowed for a file + before internal state related to it is cleaned up. When used within + a :bro:see:`file_timeout` handler, the analysis will delay timing out + again for the period specified by *t*. + + + :f: the file. + + + :t: the amount of time the file can remain inactive before discarding. + + + :returns: true if the timeout interval was set, or false if analysis + for the file isn't currently active. + +.. bro:id:: Files::stop + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`bool` + + Stops/ignores any further analysis of a given file. + + + :f: the file. + + + :returns: true if analysis for the given file will be ignored for the + rest of its contents, or false if analysis for the file + isn't currently active. + + diff --git a/doc/scripts/base/frameworks/input/__load__.bro.rst b/doc/scripts/base/frameworks/input/__load__.bro.rst new file mode 100644 index 0000000000..762196347c --- /dev/null +++ b/doc/scripts/base/frameworks/input/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/input/__load__.bro +================================== + + +:Imports: :doc:`base/frameworks/input/main.bro `, :doc:`base/frameworks/input/readers/ascii.bro `, :doc:`base/frameworks/input/readers/benchmark.bro `, :doc:`base/frameworks/input/readers/binary.bro `, :doc:`base/frameworks/input/readers/config.bro `, :doc:`base/frameworks/input/readers/raw.bro `, :doc:`base/frameworks/input/readers/sqlite.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/input/index.rst b/doc/scripts/base/frameworks/input/index.rst new file mode 100644 index 0000000000..60fc11d8a3 --- /dev/null +++ b/doc/scripts/base/frameworks/input/index.rst @@ -0,0 +1,50 @@ +:orphan: + +Package: base/frameworks/input +============================== + +The input framework provides a way to read previously stored data either as +an event stream or into a Bro table. + +:doc:`/scripts/base/frameworks/input/__load__.bro` + + +:doc:`/scripts/base/frameworks/input/main.bro` + + The input framework provides a way to read previously stored data either + as an event stream or into a Bro table. + +:doc:`/scripts/base/frameworks/input/readers/ascii.bro` + + Interface for the ascii input reader. + + The defaults are set to match Bro's ASCII output. + +:doc:`/scripts/base/frameworks/input/readers/raw.bro` + + Interface for the raw input reader. + +:doc:`/scripts/base/frameworks/input/readers/benchmark.bro` + + Interface for the benchmark input reader. + +:doc:`/scripts/base/frameworks/input/readers/binary.bro` + + Interface for the binary input reader. + +:doc:`/scripts/base/frameworks/input/readers/config.bro` + + Interface for the config input reader. + +:doc:`/scripts/base/frameworks/input/readers/sqlite.bro` + + Interface for the SQLite input reader. Redefinable options are available + to tweak the input format of the SQLite reader. + + See :doc:`/frameworks/logging-input-sqlite` for an introduction on how to + use the SQLite reader. + + When using the SQLite reader, you have to specify the SQL query that returns + the desired data by setting ``query`` in the ``config`` table. See the + introduction mentioned above for an example. + diff --git a/doc/scripts/base/frameworks/input/main.bro.rst b/doc/scripts/base/frameworks/input/main.bro.rst new file mode 100644 index 0000000000..2c320ca7fd --- /dev/null +++ b/doc/scripts/base/frameworks/input/main.bro.rst @@ -0,0 +1,418 @@ +:tocdepth: 3 + +base/frameworks/input/main.bro +============================== +.. bro:namespace:: Input + +The input framework provides a way to read previously stored data either +as an event stream or into a Bro table. + +:Namespace: Input +:Imports: :doc:`base/bif/input.bif.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================= ============================== +:bro:id:`Input::default_mode`: :bro:type:`Input::Mode` :bro:attr:`&redef` The default reader mode used. +:bro:id:`Input::default_reader`: :bro:type:`Input::Reader` :bro:attr:`&redef` The default input reader used. +============================================================================= ============================== + +Redefinable Options +################### +============================================================================== ========================================================= +:bro:id:`Input::accept_unsupported_types`: :bro:type:`bool` :bro:attr:`&redef` Flag that controls if the input framework accepts records + that contain types that are not supported (at the moment + file and function). +:bro:id:`Input::empty_field`: :bro:type:`string` :bro:attr:`&redef` String to use for empty fields. +:bro:id:`Input::separator`: :bro:type:`string` :bro:attr:`&redef` Separator between fields. +:bro:id:`Input::set_separator`: :bro:type:`string` :bro:attr:`&redef` Separator between set elements. +:bro:id:`Input::unset_field`: :bro:type:`string` :bro:attr:`&redef` String to use for an unset &optional field. +============================================================================== ========================================================= + +Types +##### +========================================================== =================================================================== +:bro:type:`Input::AnalysisDescription`: :bro:type:`record` A file analysis input stream type used to forward input data to the + file analysis framework. +:bro:type:`Input::Event`: :bro:type:`enum` +:bro:type:`Input::EventDescription`: :bro:type:`record` An event input stream type used to send input data to a Bro event. +:bro:type:`Input::Mode`: :bro:type:`enum` Type that defines the input stream read mode. +:bro:type:`Input::TableDescription`: :bro:type:`record` A table input stream type used to send data to a Bro table. +:bro:type:`Input::Reader`: :bro:type:`enum` +========================================================== =================================================================== + +Events +###### +=============================================== ==================================================================== +:bro:id:`Input::end_of_data`: :bro:type:`event` Event that is called when the end of a data source has been reached, + including after an update. +=============================================== ==================================================================== + +Functions +######### +=================================================== ============================================================ +:bro:id:`Input::add_analysis`: :bro:type:`function` Create a new file analysis input stream from a given source. +:bro:id:`Input::add_event`: :bro:type:`function` Create a new event input stream from a given source. +:bro:id:`Input::add_table`: :bro:type:`function` Create a new table input stream from a given source. +:bro:id:`Input::force_update`: :bro:type:`function` Forces the current input to be checked for changes. +:bro:id:`Input::remove`: :bro:type:`function` Remove an input stream. +=================================================== ============================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Input::default_mode + + :Type: :bro:type:`Input::Mode` + :Attributes: :bro:attr:`&redef` + :Default: ``Input::MANUAL`` + + The default reader mode used. Defaults to `MANUAL`. + +.. bro:id:: Input::default_reader + + :Type: :bro:type:`Input::Reader` + :Attributes: :bro:attr:`&redef` + :Default: ``Input::READER_ASCII`` + + The default input reader used. Defaults to `READER_ASCII`. + +Redefinable Options +################### +.. bro:id:: Input::accept_unsupported_types + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Flag that controls if the input framework accepts records + that contain types that are not supported (at the moment + file and function). If true, the input framework will + warn in these cases, but continue. If false, it will + abort. Defaults to false (abort). + +.. bro:id:: Input::empty_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"(empty)"`` + + String to use for empty fields. + Individual readers can use a different value. + +.. bro:id:: Input::separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"\x09"`` + + Separator between fields. + Please note that the separator has to be exactly one character long. + Individual readers can use a different value. + +.. bro:id:: Input::set_separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``","`` + + Separator between set elements. + Please note that the separator has to be exactly one character long. + Individual readers can use a different value. + +.. bro:id:: Input::unset_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"-"`` + + String to use for an unset &optional field. + Individual readers can use a different value. + +Types +##### +.. bro:type:: Input::AnalysisDescription + + :Type: :bro:type:`record` + + source: :bro:type:`string` + String that allows the reader to find the source. + For `READER_ASCII`, this is the filename. + + reader: :bro:type:`Input::Reader` :bro:attr:`&default` = ``Input::READER_BINARY`` :bro:attr:`&optional` + Reader to use for this stream. Compatible readers must be + able to accept a filter of a single string type (i.e. + they read a byte stream). + + mode: :bro:type:`Input::Mode` :bro:attr:`&default` = :bro:see:`Input::default_mode` :bro:attr:`&optional` + Read mode to use for this stream. + + name: :bro:type:`string` + Descriptive name that uniquely identifies the input source. + Can be used to remove a stream at a later time. + This will also be used for the unique *source* field of + :bro:see:`fa_file`. Most of the time, the best choice for this + field will be the same value as the *source* field. + + config: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + A key/value table that will be passed to the reader. + Interpretation of the values is left to the reader, but + usually they will be used for configuration purposes. + + A file analysis input stream type used to forward input data to the + file analysis framework. + +.. bro:type:: Input::Event + + :Type: :bro:type:`enum` + + .. bro:enum:: Input::EVENT_NEW Input::Event + + New data has been imported. + + .. bro:enum:: Input::EVENT_CHANGED Input::Event + + Existing data has been changed. + + .. bro:enum:: Input::EVENT_REMOVED Input::Event + + Previously existing data has been removed. + + +.. bro:type:: Input::EventDescription + + :Type: :bro:type:`record` + + source: :bro:type:`string` + String that allows the reader to find the source. + For `READER_ASCII`, this is the filename. + + reader: :bro:type:`Input::Reader` :bro:attr:`&default` = :bro:see:`Input::default_reader` :bro:attr:`&optional` + Reader to use for this stream. + + mode: :bro:type:`Input::Mode` :bro:attr:`&default` = :bro:see:`Input::default_mode` :bro:attr:`&optional` + Read mode to use for this stream. + + name: :bro:type:`string` + Descriptive name. Used to remove a stream at a later time. + + fields: :bro:type:`any` + Record type describing the fields to be retrieved from the input + source. + + want_record: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + If this is false, the event receives each value in *fields* as a + separate argument. + If this is set to true (default), the event receives all fields in + a single record value. + + ev: :bro:type:`any` + The event that is raised each time a new line is received from the + reader. The event will receive an Input::EventDescription record + as the first argument, an Input::Event enum as the second + argument, and the fields (as specified in *fields*) as the following + arguments (this will either be a single record value containing + all fields, or each field value as a separate argument). + + error_ev: :bro:type:`any` :bro:attr:`&optional` + Error event that is raised when an information, warning or error + is raised by the input stream. If the level is error, the stream will automatically + be closed. + The event receives the Input::EventDescription as the first argument, the + message as the second argument and the Reporter::Level as the third argument. + + The event is raised like it had been declared as follows: + error_ev: function(desc: EventDescription, message: string, level: Reporter::Level) &optional; + The actual declaration uses the ``any`` type because of deficiencies of the Bro type system. + + config: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + A key/value table that will be passed to the reader. + Interpretation of the values is left to the reader, but + usually they will be used for configuration purposes. + + An event input stream type used to send input data to a Bro event. + +.. bro:type:: Input::Mode + + :Type: :bro:type:`enum` + + .. bro:enum:: Input::MANUAL Input::Mode + + Do not automatically reread the file after it has been read. + + .. bro:enum:: Input::REREAD Input::Mode + + Reread the entire file each time a change is found. + + .. bro:enum:: Input::STREAM Input::Mode + + Read data from end of file each time new data is appended. + + Type that defines the input stream read mode. + +.. bro:type:: Input::TableDescription + + :Type: :bro:type:`record` + + source: :bro:type:`string` + String that allows the reader to find the source of the data. + For `READER_ASCII`, this is the filename. + + reader: :bro:type:`Input::Reader` :bro:attr:`&default` = :bro:see:`Input::default_reader` :bro:attr:`&optional` + Reader to use for this stream. + + mode: :bro:type:`Input::Mode` :bro:attr:`&default` = :bro:see:`Input::default_mode` :bro:attr:`&optional` + Read mode to use for this stream. + + name: :bro:type:`string` + Name of the input stream. This is used by some functions to + manipulate the stream. + + destination: :bro:type:`any` + Table which will receive the data read by the input framework. + + idx: :bro:type:`any` + Record that defines the values used as the index of the table. + + val: :bro:type:`any` :bro:attr:`&optional` + Record that defines the values used as the elements of the table. + If this is undefined, then *destination* must be a set. + + want_record: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Defines if the value of the table is a record (default), or a single + value. When this is set to false, then *val* can only contain one + element. + + ev: :bro:type:`any` :bro:attr:`&optional` + The event that is raised each time a value is added to, changed in, + or removed from the table. The event will receive an + Input::TableDescription as the first argument, an Input::Event + enum as the second argument, the *idx* record as the third argument + and the value (record) as the fourth argument. + + pred: :bro:type:`function` (typ: :bro:type:`Input::Event`, left: :bro:type:`any`, right: :bro:type:`any`) : :bro:type:`bool` :bro:attr:`&optional` + Predicate function that can decide if an insertion, update or removal + should really be executed. Parameters have same meaning as for the + event. + If true is returned, the update is performed. If false is returned, + it is skipped. + + error_ev: :bro:type:`any` :bro:attr:`&optional` + Error event that is raised when an information, warning or error + is raised by the input stream. If the level is error, the stream will automatically + be closed. + The event receives the Input::TableDescription as the first argument, the + message as the second argument and the Reporter::Level as the third argument. + + The event is raised like if it had been declared as follows: + error_ev: function(desc: TableDescription, message: string, level: Reporter::Level) &optional; + The actual declaration uses the ``any`` type because of deficiencies of the Bro type system. + + config: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + A key/value table that will be passed to the reader. + Interpretation of the values is left to the reader, but + usually they will be used for configuration purposes. + + A table input stream type used to send data to a Bro table. + +.. bro:type:: Input::Reader + + :Type: :bro:type:`enum` + + .. bro:enum:: Input::READER_ASCII Input::Reader + + .. bro:enum:: Input::READER_BENCHMARK Input::Reader + + .. bro:enum:: Input::READER_BINARY Input::Reader + + .. bro:enum:: Input::READER_CONFIG Input::Reader + + .. bro:enum:: Input::READER_RAW Input::Reader + + .. bro:enum:: Input::READER_SQLITE Input::Reader + + +Events +###### +.. bro:id:: Input::end_of_data + + :Type: :bro:type:`event` (name: :bro:type:`string`, source: :bro:type:`string`) + + Event that is called when the end of a data source has been reached, + including after an update. + + + :name: Name of the input stream. + + + :source: String that identifies the data source (such as the filename). + +Functions +######### +.. bro:id:: Input::add_analysis + + :Type: :bro:type:`function` (description: :bro:type:`Input::AnalysisDescription`) : :bro:type:`bool` + + Create a new file analysis input stream from a given source. Data read + from the source is automatically forwarded to the file analysis + framework. + + + :description: A record describing the source. + + + :returns: true on success. + +.. bro:id:: Input::add_event + + :Type: :bro:type:`function` (description: :bro:type:`Input::EventDescription`) : :bro:type:`bool` + + Create a new event input stream from a given source. + + + :description: `EventDescription` record describing the source. + + + :returns: true on success. + +.. bro:id:: Input::add_table + + :Type: :bro:type:`function` (description: :bro:type:`Input::TableDescription`) : :bro:type:`bool` + + Create a new table input stream from a given source. + + + :description: `TableDescription` record describing the source. + + + :returns: true on success. + +.. bro:id:: Input::force_update + + :Type: :bro:type:`function` (id: :bro:type:`string`) : :bro:type:`bool` + + Forces the current input to be checked for changes. + + + :id: string value identifying the stream. + + + :returns: true on success and false if the named stream was not found. + +.. bro:id:: Input::remove + + :Type: :bro:type:`function` (id: :bro:type:`string`) : :bro:type:`bool` + + Remove an input stream. + + + :id: string value identifying the stream to be removed. + + + :returns: true on success and false if the named stream was not found. + + diff --git a/doc/scripts/base/frameworks/input/readers/ascii.bro.rst b/doc/scripts/base/frameworks/input/readers/ascii.bro.rst new file mode 100644 index 0000000000..634c5a397f --- /dev/null +++ b/doc/scripts/base/frameworks/input/readers/ascii.bro.rst @@ -0,0 +1,104 @@ +:tocdepth: 3 + +base/frameworks/input/readers/ascii.bro +======================================= +.. bro:namespace:: InputAscii + +Interface for the ascii input reader. + +The defaults are set to match Bro's ASCII output. + +:Namespace: InputAscii + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================================ =========================================== +:bro:id:`InputAscii::empty_field`: :bro:type:`string` :bro:attr:`&redef` String to use for empty fields. +:bro:id:`InputAscii::fail_on_file_problem`: :bro:type:`bool` :bro:attr:`&redef` Fail on file read problems. +:bro:id:`InputAscii::fail_on_invalid_lines`: :bro:type:`bool` :bro:attr:`&redef` Fail on invalid lines. +:bro:id:`InputAscii::separator`: :bro:type:`string` :bro:attr:`&redef` Separator between fields. +:bro:id:`InputAscii::set_separator`: :bro:type:`string` :bro:attr:`&redef` Separator between set and vector elements. +:bro:id:`InputAscii::unset_field`: :bro:type:`string` :bro:attr:`&redef` String to use for an unset &optional field. +================================================================================ =========================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: InputAscii::empty_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"(empty)"`` + + String to use for empty fields. + +.. bro:id:: InputAscii::fail_on_file_problem + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Fail on file read problems. If set to true, the ascii + input reader will fail when encountering any problems + while reading a file different from invalid lines. + Examples of such problems are permission problems, or + missing files. + When set to false, these problems will be ignored. This + has an especially big effect for the REREAD mode, which will + seamlessly recover from read errors when a file is + only temporarily inaccessible. For MANUAL or STREAM files, + errors will most likely still be fatal since no automatic + re-reading of the file is attempted. + Individual readers can use a different value using + the $config table. + fail_on_file_problem = T was the default behavior + until Bro 2.6. + +.. bro:id:: InputAscii::fail_on_invalid_lines + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Fail on invalid lines. If set to false, the ascii + input reader will jump over invalid lines, reporting + warnings in reporter.log. If set to true, errors in + input lines will be handled as fatal errors for the + reader thread; reading will abort immediately and + an error will be logged to reporter.log. + Individual readers can use a different value using + the $config table. + fail_on_invalid_lines = T was the default behavior + until Bro 2.6. + +.. bro:id:: InputAscii::separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"\x09"`` + + Separator between fields. + Please note that the separator has to be exactly one character long. + +.. bro:id:: InputAscii::set_separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``","`` + + Separator between set and vector elements. + Please note that the separator has to be exactly one character long. + +.. bro:id:: InputAscii::unset_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"-"`` + + String to use for an unset &optional field. + + diff --git a/doc/scripts/base/frameworks/input/readers/benchmark.bro.rst b/doc/scripts/base/frameworks/input/readers/benchmark.bro.rst new file mode 100644 index 0000000000..85442bd09a --- /dev/null +++ b/doc/scripts/base/frameworks/input/readers/benchmark.bro.rst @@ -0,0 +1,77 @@ +:tocdepth: 3 + +base/frameworks/input/readers/benchmark.bro +=========================================== +.. bro:namespace:: InputBenchmark + +Interface for the benchmark input reader. + +:Namespace: InputBenchmark + +Summary +~~~~~~~ +Redefinable Options +################### +============================================================================ ========================================================= +:bro:id:`InputBenchmark::addfactor`: :bro:type:`count` :bro:attr:`&redef` Addition factor for each heartbeat. +:bro:id:`InputBenchmark::autospread`: :bro:type:`double` :bro:attr:`&redef` Spreading where usleep = 1000000 / autospread * num_lines +:bro:id:`InputBenchmark::factor`: :bro:type:`double` :bro:attr:`&redef` Multiplication factor for each second. +:bro:id:`InputBenchmark::spread`: :bro:type:`count` :bro:attr:`&redef` Spread factor between lines. +:bro:id:`InputBenchmark::stopspreadat`: :bro:type:`count` :bro:attr:`&redef` Stop spreading at x lines per heartbeat. +:bro:id:`InputBenchmark::timedspread`: :bro:type:`double` :bro:attr:`&redef` 1 -> enable timed spreading. +============================================================================ ========================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: InputBenchmark::addfactor + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + Addition factor for each heartbeat. + +.. bro:id:: InputBenchmark::autospread + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``0.0`` + + Spreading where usleep = 1000000 / autospread * num_lines + +.. bro:id:: InputBenchmark::factor + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0`` + + Multiplication factor for each second. + +.. bro:id:: InputBenchmark::spread + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + Spread factor between lines. + +.. bro:id:: InputBenchmark::stopspreadat + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + Stop spreading at x lines per heartbeat. + +.. bro:id:: InputBenchmark::timedspread + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``0.0`` + + 1 -> enable timed spreading. + + diff --git a/doc/scripts/base/frameworks/input/readers/binary.bro.rst b/doc/scripts/base/frameworks/input/readers/binary.bro.rst new file mode 100644 index 0000000000..b7743b9a8d --- /dev/null +++ b/doc/scripts/base/frameworks/input/readers/binary.bro.rst @@ -0,0 +1,32 @@ +:tocdepth: 3 + +base/frameworks/input/readers/binary.bro +======================================== +.. bro:namespace:: InputBinary + +Interface for the binary input reader. + +:Namespace: InputBinary + +Summary +~~~~~~~ +Redefinable Options +################### +======================================================================= ========================================================== +:bro:id:`InputBinary::chunk_size`: :bro:type:`count` :bro:attr:`&redef` Size of data chunks to read from the input file at a time. +======================================================================= ========================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: InputBinary::chunk_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``1024`` + + Size of data chunks to read from the input file at a time. + + diff --git a/doc/scripts/base/frameworks/input/readers/config.bro.rst b/doc/scripts/base/frameworks/input/readers/config.bro.rst new file mode 100644 index 0000000000..a0f5cba107 --- /dev/null +++ b/doc/scripts/base/frameworks/input/readers/config.bro.rst @@ -0,0 +1,95 @@ +:tocdepth: 3 + +base/frameworks/input/readers/config.bro +======================================== +.. bro:namespace:: InputConfig + +Interface for the config input reader. + +:Namespace: InputConfig + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================================ ========================================== +:bro:id:`InputConfig::empty_field`: :bro:type:`string` :bro:attr:`&redef` String to use for empty fields. +:bro:id:`InputConfig::fail_on_file_problem`: :bro:type:`bool` :bro:attr:`&redef` Fail on file read problems. +:bro:id:`InputConfig::set_separator`: :bro:type:`string` :bro:attr:`&redef` Separator between set and vector elements. +================================================================================ ========================================== + +Events +###### +=================================================== ============================================================== +:bro:id:`InputConfig::new_value`: :bro:type:`event` Event that is called when a config option is added or changes. +=================================================== ============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: InputConfig::empty_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + String to use for empty fields. + By default this is the empty string, meaning that an empty input field + will result in an empty set. + +.. bro:id:: InputConfig::fail_on_file_problem + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Fail on file read problems. If set to true, the config + input reader will fail when encountering any problems + while reading a file different from invalid lines. + Examples of such problems are permission problems, or + missing files. + When set to false, these problems will be ignored. This + has an especially big effect for the REREAD mode, which will + seamlessly recover from read errors when a file is + only temporarily inaccessible. For MANUAL or STREAM files, + errors will most likely still be fatal since no automatic + re-reading of the file is attempted. + Individual readers can use a different value using + the $config table. + +.. bro:id:: InputConfig::set_separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``","`` + + Separator between set and vector elements. + Please note that the separator has to be exactly one character long. + +Events +###### +.. bro:id:: InputConfig::new_value + + :Type: :bro:type:`event` (name: :bro:type:`string`, source: :bro:type:`string`, id: :bro:type:`string`, value: :bro:type:`any`) + + Event that is called when a config option is added or changes. + + Note - this does not track the reason for a change (new, changed), + and also does not track removals. If you need this, combine the event + with a table reader. + + + :name: Name of the input stream. + + + :source: Source of the input stream. + + + :id: ID of the configuration option being set. + + + :value: New value of the configuration option being set. + + diff --git a/doc/scripts/base/frameworks/input/readers/raw.bro.rst b/doc/scripts/base/frameworks/input/readers/raw.bro.rst new file mode 100644 index 0000000000..12bca85b29 --- /dev/null +++ b/doc/scripts/base/frameworks/input/readers/raw.bro.rst @@ -0,0 +1,58 @@ +:tocdepth: 3 + +base/frameworks/input/readers/raw.bro +===================================== +.. bro:namespace:: InputRaw + +Interface for the raw input reader. + +:Namespace: InputRaw + +Summary +~~~~~~~ +Redefinable Options +################### +=========================================================================== ================================ +:bro:id:`InputRaw::record_separator`: :bro:type:`string` :bro:attr:`&redef` Separator between input records. +=========================================================================== ================================ + +Events +###### +======================================================= ==================================================================== +:bro:id:`InputRaw::process_finished`: :bro:type:`event` Event that is called when a process created by the raw reader exits. +======================================================= ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: InputRaw::record_separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"\x0a"`` + + Separator between input records. + Please note that the separator has to be exactly one character long. + +Events +###### +.. bro:id:: InputRaw::process_finished + + :Type: :bro:type:`event` (name: :bro:type:`string`, source: :bro:type:`string`, exit_code: :bro:type:`count`, signal_exit: :bro:type:`bool`) + + Event that is called when a process created by the raw reader exits. + + + :name: name of the input stream. + + :source: source of the input stream. + + :exit_code: exit code of the program, or number of the signal that forced + the program to exit. + + :signal_exit: false when program exited normally, true when program was + forced to exit by a signal. + + diff --git a/doc/scripts/base/frameworks/input/readers/sqlite.bro.rst b/doc/scripts/base/frameworks/input/readers/sqlite.bro.rst new file mode 100644 index 0000000000..73e83aa82e --- /dev/null +++ b/doc/scripts/base/frameworks/input/readers/sqlite.bro.rst @@ -0,0 +1,59 @@ +:tocdepth: 3 + +base/frameworks/input/readers/sqlite.bro +======================================== +.. bro:namespace:: InputSQLite + +Interface for the SQLite input reader. Redefinable options are available +to tweak the input format of the SQLite reader. + +See :doc:`/frameworks/logging-input-sqlite` for an introduction on how to +use the SQLite reader. + +When using the SQLite reader, you have to specify the SQL query that returns +the desired data by setting ``query`` in the ``config`` table. See the +introduction mentioned above for an example. + +:Namespace: InputSQLite + +Summary +~~~~~~~ +Redefinable Options +################### +=========================================================================== =========================================== +:bro:id:`InputSQLite::empty_field`: :bro:type:`string` :bro:attr:`&redef` String to use for empty fields. +:bro:id:`InputSQLite::set_separator`: :bro:type:`string` :bro:attr:`&redef` Separator between set elements. +:bro:id:`InputSQLite::unset_field`: :bro:type:`string` :bro:attr:`&redef` String to use for an unset &optional field. +=========================================================================== =========================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: InputSQLite::empty_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"(empty)"`` + + String to use for empty fields. + +.. bro:id:: InputSQLite::set_separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``","`` + + Separator between set elements. + Please note that the separator has to be exactly one character long. + +.. bro:id:: InputSQLite::unset_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"-"`` + + String to use for an unset &optional field. + + diff --git a/doc/scripts/base/frameworks/intel/__load__.bro.rst b/doc/scripts/base/frameworks/intel/__load__.bro.rst new file mode 100644 index 0000000000..247d061e4e --- /dev/null +++ b/doc/scripts/base/frameworks/intel/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/intel/__load__.bro +================================== + + +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/intel/files.bro `, :doc:`base/frameworks/intel/input.bro `, :doc:`base/frameworks/intel/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/intel/files.bro.rst b/doc/scripts/base/frameworks/intel/files.bro.rst new file mode 100644 index 0000000000..1ede9fbbb7 --- /dev/null +++ b/doc/scripts/base/frameworks/intel/files.bro.rst @@ -0,0 +1,27 @@ +:tocdepth: 3 + +base/frameworks/intel/files.bro +=============================== +.. bro:namespace:: Intel + +File analysis framework integration for the intelligence framework. This +script manages file information in intelligence framework data structures. + +:Namespace: Intel +:Imports: :doc:`base/frameworks/intel/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=========================================== ============================================================= +:bro:type:`Intel::Info`: :bro:type:`record` Record used for the logging framework representing a positive + hit within the intelligence framework. +:bro:type:`Intel::Seen`: :bro:type:`record` Information about a piece of "seen" data. +:bro:type:`Intel::Type`: :bro:type:`enum` Enum type to represent various types of intelligence data. +=========================================== ============================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/intel/index.rst b/doc/scripts/base/frameworks/intel/index.rst new file mode 100644 index 0000000000..bbe5831fc7 --- /dev/null +++ b/doc/scripts/base/frameworks/intel/index.rst @@ -0,0 +1,29 @@ +:orphan: + +Package: base/frameworks/intel +============================== + +The intelligence framework provides a way to store and query intelligence +data (such as IP addresses or strings). Metadata can also be associated +with the intelligence. + +:doc:`/scripts/base/frameworks/intel/__load__.bro` + + +:doc:`/scripts/base/frameworks/intel/main.bro` + + The intelligence framework provides a way to store and query intelligence + data (e.g. IP addresses, URLs and hashes). The intelligence items can be + associated with metadata to allow informed decisions about matching and + handling. + +:doc:`/scripts/base/frameworks/intel/files.bro` + + File analysis framework integration for the intelligence framework. This + script manages file information in intelligence framework data structures. + +:doc:`/scripts/base/frameworks/intel/input.bro` + + Input handling for the intelligence framework. This script implements the + import of intelligence data from files using the input framework. + diff --git a/doc/scripts/base/frameworks/intel/input.bro.rst b/doc/scripts/base/frameworks/intel/input.bro.rst new file mode 100644 index 0000000000..8b7edfa15c --- /dev/null +++ b/doc/scripts/base/frameworks/intel/input.bro.rst @@ -0,0 +1,36 @@ +:tocdepth: 3 + +base/frameworks/intel/input.bro +=============================== +.. bro:namespace:: Intel + +Input handling for the intelligence framework. This script implements the +import of intelligence data from files using the input framework. + +:Namespace: Intel +:Imports: :doc:`base/frameworks/intel/main.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +=============================================================== ============================================== +:bro:id:`Intel::read_files`: :bro:type:`set` :bro:attr:`&redef` Intelligence files that will be read off disk. +=============================================================== ============================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Intel::read_files + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Intelligence files that will be read off disk. The files are + reread every time they are updated so updates must be atomic + with "mv" instead of writing the file in place. + + diff --git a/doc/scripts/base/frameworks/intel/main.bro.rst b/doc/scripts/base/frameworks/intel/main.bro.rst new file mode 100644 index 0000000000..07d05746bc --- /dev/null +++ b/doc/scripts/base/frameworks/intel/main.bro.rst @@ -0,0 +1,531 @@ +:tocdepth: 3 + +base/frameworks/intel/main.bro +============================== +.. bro:namespace:: Intel + +The intelligence framework provides a way to store and query intelligence +data (e.g. IP addresses, URLs and hashes). The intelligence items can be +associated with metadata to allow informed decisions about matching and +handling. + +:Namespace: Intel +:Imports: :doc:`base/frameworks/notice ` + +Summary +~~~~~~~ +Redefinable Options +################### +========================================================================= ============================================== +:bro:id:`Intel::item_expiration`: :bro:type:`interval` :bro:attr:`&redef` The expiration timeout for intelligence items. +========================================================================= ============================================== + +Types +##### +=============================================== ============================================================== +:bro:type:`Intel::Info`: :bro:type:`record` Record used for the logging framework representing a positive + hit within the intelligence framework. +:bro:type:`Intel::Item`: :bro:type:`record` Represents a piece of intelligence. +:bro:type:`Intel::MetaData`: :bro:type:`record` Data about an :bro:type:`Intel::Item`. +:bro:type:`Intel::Seen`: :bro:type:`record` Information about a piece of "seen" data. +:bro:type:`Intel::Type`: :bro:type:`enum` Enum type to represent various types of intelligence data. +:bro:type:`Intel::TypeSet`: :bro:type:`set` Set of intelligence data types. +:bro:type:`Intel::Where`: :bro:type:`enum` Enum to represent where data came from when it was discovered. +=============================================== ============================================================== + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +============================================= ================================================================== +:bro:id:`Intel::log_intel`: :bro:type:`event` +:bro:id:`Intel::match`: :bro:type:`event` Event to represent a match in the intelligence data from data that + was seen. +============================================= ================================================================== + +Hooks +##### +=============================================== =================================================================== +:bro:id:`Intel::extend_match`: :bro:type:`hook` This hook can be used to influence the logging of intelligence hits + (e.g. +:bro:id:`Intel::item_expired`: :bro:type:`hook` This hook can be used to handle expiration of intelligence items. +=============================================== =================================================================== + +Functions +######### +============================================= ================================================================== +:bro:id:`Intel::insert`: :bro:type:`function` Function to insert intelligence data. +:bro:id:`Intel::remove`: :bro:type:`function` Function to remove intelligence data. +:bro:id:`Intel::seen`: :bro:type:`function` Function to declare discovery of a piece of data in order to check + it against known intelligence for matches. +============================================= ================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Intel::item_expiration + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 mins`` + + The expiration timeout for intelligence items. Once an item expires, the + :bro:id:`Intel::item_expired` hook is called. Reinsertion of an item + resets the timeout. A negative value disables expiration of intelligence + items. + +Types +##### +.. bro:type:: Intel::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp when the data was discovered. + + uid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + If a connection was associated with this intelligence hit, + this is the uid for the connection + + id: :bro:type:`conn_id` :bro:attr:`&log` :bro:attr:`&optional` + If a connection was associated with this intelligence hit, + this is the conn_id for the connection. + + seen: :bro:type:`Intel::Seen` :bro:attr:`&log` + Where the data was seen. + + matched: :bro:type:`Intel::TypeSet` :bro:attr:`&log` + Which indicator types matched. + + sources: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + Sources which supplied data that resulted in this match. + + fuid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/intel/files.bro` is loaded) + + If a file was associated with this intelligence hit, + this is the uid for the file. + + file_mime_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/intel/files.bro` is loaded) + + A mime type if the intelligence hit is related to a file. + If the $f field is provided this will be automatically filled + out. + + file_desc: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/intel/files.bro` is loaded) + + Frequently files can be "described" to give a bit more context. + If the $f field is provided this field will be automatically + filled out. + + Record used for the logging framework representing a positive + hit within the intelligence framework. + +.. bro:type:: Intel::Item + + :Type: :bro:type:`record` + + indicator: :bro:type:`string` + The intelligence indicator. + + indicator_type: :bro:type:`Intel::Type` + The type of data that the indicator field represents. + + meta: :bro:type:`Intel::MetaData` + Metadata for the item. Typically represents more deeply + descriptive data for a piece of intelligence. + + Represents a piece of intelligence. + +.. bro:type:: Intel::MetaData + + :Type: :bro:type:`record` + + source: :bro:type:`string` + An arbitrary string value representing the data source. This + value is used as unique key to identify a metadata record in + the scope of a single intelligence item. + + desc: :bro:type:`string` :bro:attr:`&optional` + A freeform description for the data. + + url: :bro:type:`string` :bro:attr:`&optional` + A URL for more information about the data. + + do_notice: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/frameworks/intel/do_notice.bro` is loaded) + + A boolean value to allow the data itself to represent + if the indicator that this metadata is attached to + is notice worthy. + + if_in: :bro:type:`Intel::Where` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/frameworks/intel/do_notice.bro` is loaded) + + Restrictions on when notices are created to only create + them if the *do_notice* field is T and the notice was + seen in the indicated location. + + whitelist: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/frameworks/intel/whitelist.bro` is loaded) + + A boolean value to indicate whether the item is whitelisted. + + cif_impact: :bro:type:`string` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/integration/collective-intel/main.bro` is loaded) + + Maps to the Impact field in the Collective Intelligence Framework. + + cif_severity: :bro:type:`string` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/integration/collective-intel/main.bro` is loaded) + + Maps to the Severity field in the Collective Intelligence Framework. + + cif_confidence: :bro:type:`double` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/integration/collective-intel/main.bro` is loaded) + + Maps to the Confidence field in the Collective Intelligence Framework. + + Data about an :bro:type:`Intel::Item`. + +.. bro:type:: Intel::Seen + + :Type: :bro:type:`record` + + indicator: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The string if the data is about a string. + + indicator_type: :bro:type:`Intel::Type` :bro:attr:`&log` :bro:attr:`&optional` + The type of data that the indicator represents. + + host: :bro:type:`addr` :bro:attr:`&optional` + If the indicator type was :bro:enum:`Intel::ADDR`, then this + field will be present. + + where: :bro:type:`Intel::Where` :bro:attr:`&log` + Where the data was discovered. + + node: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + The name of the node where the match was discovered. + + conn: :bro:type:`connection` :bro:attr:`&optional` + If the data was discovered within a connection, the + connection record should go here to give context to the data. + + uid: :bro:type:`string` :bro:attr:`&optional` + If the data was discovered within a connection, the + connection uid should go here to give context to the data. + If the *conn* field is provided, this will be automatically + filled out. + + f: :bro:type:`fa_file` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/intel/files.bro` is loaded) + + If the data was discovered within a file, the file record + should go here to provide context to the data. + + fuid: :bro:type:`string` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/intel/files.bro` is loaded) + + If the data was discovered within a file, the file uid should + go here to provide context to the data. If the file record *f* + is provided, this will be automatically filled out. + + Information about a piece of "seen" data. + +.. bro:type:: Intel::Type + + :Type: :bro:type:`enum` + + .. bro:enum:: Intel::ADDR Intel::Type + + An IP address. + + .. bro:enum:: Intel::SUBNET Intel::Type + + A subnet in CIDR notation. + + .. bro:enum:: Intel::URL Intel::Type + + A complete URL without the prefix ``"http://"``. + + .. bro:enum:: Intel::SOFTWARE Intel::Type + + Software name. + + .. bro:enum:: Intel::EMAIL Intel::Type + + Email address. + + .. bro:enum:: Intel::DOMAIN Intel::Type + + DNS domain name. + + .. bro:enum:: Intel::USER_NAME Intel::Type + + A user name. + + .. bro:enum:: Intel::CERT_HASH Intel::Type + + Certificate SHA-1 hash. + + .. bro:enum:: Intel::PUBKEY_HASH Intel::Type + + Public key MD5 hash. (SSH server host keys are a good example.) + + .. bro:enum:: Intel::FILE_HASH Intel::Type + + (present if :doc:`/scripts/base/frameworks/intel/files.bro` is loaded) + + + File hash which is non-hash type specific. It's up to the + user to query for any relevant hash types. + + .. bro:enum:: Intel::FILE_NAME Intel::Type + + (present if :doc:`/scripts/base/frameworks/intel/files.bro` is loaded) + + + File name. Typically with protocols with definite + indications of a file name. + + Enum type to represent various types of intelligence data. + +.. bro:type:: Intel::TypeSet + + :Type: :bro:type:`set` [:bro:type:`Intel::Type`] + + Set of intelligence data types. + +.. bro:type:: Intel::Where + + :Type: :bro:type:`enum` + + .. bro:enum:: Intel::IN_ANYWHERE Intel::Where + + A catchall value to represent data of unknown provenance. + + .. bro:enum:: Conn::IN_ORIG Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: Conn::IN_RESP Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: Files::IN_HASH Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: Files::IN_NAME Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: DNS::IN_REQUEST Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: DNS::IN_RESPONSE Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: HTTP::IN_HOST_HEADER Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: HTTP::IN_REFERRER_HEADER Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: HTTP::IN_USER_AGENT_HEADER Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: HTTP::IN_X_FORWARDED_FOR_HEADER Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: HTTP::IN_URL Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_MAIL_FROM Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_RCPT_TO Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_FROM Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_TO Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_CC Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_RECEIVED_HEADER Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_REPLY_TO Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_X_ORIGINATING_IP_HEADER Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_MESSAGE Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SSH::IN_SERVER_HOST_KEY Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SSL::IN_SERVER_NAME Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SMTP::IN_HEADER Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: X509::IN_CERT Intel::Where + + (present if :doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` is loaded) + + + .. bro:enum:: SSH::SUCCESSFUL_LOGIN Intel::Where + + (present if :doc:`/scripts/policy/protocols/ssh/detect-bruteforcing.bro` is loaded) + + + An indicator of the login for the intel framework. + + Enum to represent where data came from when it was discovered. + The convention is to prefix the name with ``IN_``. + +Events +###### +.. bro:id:: Intel::log_intel + + :Type: :bro:type:`event` (rec: :bro:type:`Intel::Info`) + + +.. bro:id:: Intel::match + + :Type: :bro:type:`event` (s: :bro:type:`Intel::Seen`, items: :bro:type:`set` [:bro:type:`Intel::Item`]) + + Event to represent a match in the intelligence data from data that + was seen. On clusters there is no assurance as to when this event + will be generated so do not assume that arbitrary global state beyond + the given data will be available. + + This is the primary mechanism where a user may take actions based on + data provided by the intelligence framework. + +Hooks +##### +.. bro:id:: Intel::extend_match + + :Type: :bro:type:`hook` (info: :bro:type:`Intel::Info`, s: :bro:type:`Intel::Seen`, items: :bro:type:`set` [:bro:type:`Intel::Item`]) : :bro:type:`bool` + + This hook can be used to influence the logging of intelligence hits + (e.g. by adding data to the Info record). The default information is + added with a priority of 5. + + + :info: The Info record that will be logged. + + + :s: Information about the data seen. + + + :items: The intel items that match the seen data. + + In case the hook execution is terminated using break, the match will + not be logged. + +.. bro:id:: Intel::item_expired + + :Type: :bro:type:`hook` (indicator: :bro:type:`string`, indicator_type: :bro:type:`Intel::Type`, metas: :bro:type:`set` [:bro:type:`Intel::MetaData`]) : :bro:type:`bool` + + This hook can be used to handle expiration of intelligence items. + + + :indicator: The indicator of the expired item. + + + :indicator_type: The indicator type of the expired item. + + + :metas: The set of metadata describing the expired item. + + If all hook handlers are executed, the expiration timeout will be reset. + Otherwise, if one of the handlers terminates using break, the item will + be removed. + +Functions +######### +.. bro:id:: Intel::insert + + :Type: :bro:type:`function` (item: :bro:type:`Intel::Item`) : :bro:type:`void` + + Function to insert intelligence data. If the indicator is already + present, the associated metadata will be added to the indicator. If + the indicator already contains a metadata record from the same source, + the existing metadata record will be updated. + +.. bro:id:: Intel::remove + + :Type: :bro:type:`function` (item: :bro:type:`Intel::Item`, purge_indicator: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional`) : :bro:type:`void` + + Function to remove intelligence data. If purge_indicator is set, the + given metadata is ignored and the indicator is removed completely. + +.. bro:id:: Intel::seen + + :Type: :bro:type:`function` (s: :bro:type:`Intel::Seen`) : :bro:type:`void` + + Function to declare discovery of a piece of data in order to check + it against known intelligence for matches. + + diff --git a/doc/scripts/base/frameworks/logging/__load__.bro.rst b/doc/scripts/base/frameworks/logging/__load__.bro.rst new file mode 100644 index 0000000000..117c8ec25d --- /dev/null +++ b/doc/scripts/base/frameworks/logging/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/logging/__load__.bro +==================================== + + +:Imports: :doc:`base/frameworks/logging/main.bro `, :doc:`base/frameworks/logging/postprocessors `, :doc:`base/frameworks/logging/writers/ascii.bro `, :doc:`base/frameworks/logging/writers/none.bro `, :doc:`base/frameworks/logging/writers/sqlite.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/logging/index.rst b/doc/scripts/base/frameworks/logging/index.rst new file mode 100644 index 0000000000..92bd040baa --- /dev/null +++ b/doc/scripts/base/frameworks/logging/index.rst @@ -0,0 +1,87 @@ +:orphan: + +Package: base/frameworks/logging +================================ + +The logging framework provides a flexible key-value based logging interface. + +:doc:`/scripts/base/frameworks/logging/__load__.bro` + + +:doc:`/scripts/base/frameworks/logging/main.bro` + + The Bro logging interface. + + See :doc:`/frameworks/logging` for an introduction to Bro's + logging framework. + +:doc:`/scripts/base/frameworks/logging/postprocessors/__load__.bro` + + +:doc:`/scripts/base/frameworks/logging/postprocessors/scp.bro` + + This script defines a postprocessing function that can be applied + to a logging filter in order to automatically SCP (secure copy) + a log stream (or a subset of it) to a remote host at configurable + rotation time intervals. Generally, to use this functionality + you must handle the :bro:id:`bro_init` event and do the following + in your handler: + + 1) Create a new :bro:type:`Log::Filter` record that defines a name/path, + rotation interval, and set the ``postprocessor`` to + :bro:id:`Log::scp_postprocessor`. + 2) Add the filter to a logging stream using :bro:id:`Log::add_filter`. + 3) Add a table entry to :bro:id:`Log::scp_destinations` for the filter's + writer/path pair which defines a set of :bro:type:`Log::SCPDestination` + records. + +:doc:`/scripts/base/frameworks/logging/postprocessors/sftp.bro` + + This script defines a postprocessing function that can be applied + to a logging filter in order to automatically SFTP + a log stream (or a subset of it) to a remote host at configurable + rotation time intervals. Generally, to use this functionality + you must handle the :bro:id:`bro_init` event and do the following + in your handler: + + 1) Create a new :bro:type:`Log::Filter` record that defines a name/path, + rotation interval, and set the ``postprocessor`` to + :bro:id:`Log::sftp_postprocessor`. + 2) Add the filter to a logging stream using :bro:id:`Log::add_filter`. + 3) Add a table entry to :bro:id:`Log::sftp_destinations` for the filter's + writer/path pair which defines a set of :bro:type:`Log::SFTPDestination` + records. + +:doc:`/scripts/base/frameworks/logging/writers/ascii.bro` + + Interface for the ASCII log writer. Redefinable options are available + to tweak the output format of ASCII logs. + + The ASCII writer currently supports one writer-specific per-filter config + option: setting ``tsv`` to the string ``T`` turns the output into + "tab-separated-value" mode where only a single header row with the column + names is printed out as meta information, with no "# fields" prepended; no + other meta data gets included in that mode. Example filter using this:: + + local f: Log::Filter = [$name = "my-filter", + $writer = Log::WRITER_ASCII, + $config = table(["tsv"] = "T")]; + + +:doc:`/scripts/base/frameworks/logging/writers/sqlite.bro` + + Interface for the SQLite log writer. Redefinable options are available + to tweak the output format of the SQLite reader. + + See :doc:`/frameworks/logging-input-sqlite` for an introduction on how to + use the SQLite log writer. + + The SQL writer currently supports one writer-specific filter option via + ``config``: setting ``tablename`` sets the name of the table that is used + or created in the SQLite database. An example for this is given in the + introduction mentioned above. + +:doc:`/scripts/base/frameworks/logging/writers/none.bro` + + Interface for the None log writer. This writer is mainly for debugging. + diff --git a/doc/scripts/base/frameworks/logging/main.bro.rst b/doc/scripts/base/frameworks/logging/main.bro.rst new file mode 100644 index 0000000000..b88bcd6eb6 --- /dev/null +++ b/doc/scripts/base/frameworks/logging/main.bro.rst @@ -0,0 +1,1111 @@ +:tocdepth: 3 + +base/frameworks/logging/main.bro +================================ +.. bro:namespace:: Log + +The Bro logging interface. + +See :doc:`/frameworks/logging` for an introduction to Bro's +logging framework. + +:Namespace: Log +:Imports: :doc:`base/bif/logging.bif.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +======================================================================================== ===================================================================== +:bro:id:`Log::default_ext_prefix`: :bro:type:`string` :bro:attr:`&redef` A prefix for extension fields which can be optionally prefixed + on all log lines by setting the `ext_func` field in the + log filter. +:bro:id:`Log::default_field_name_map`: :bro:type:`table` :bro:attr:`&redef` Default field name mapping for renaming fields in a logging framework + filter. +:bro:id:`Log::default_mail_alarms_interval`: :bro:type:`interval` :bro:attr:`&redef` Default alarm summary mail interval. +:bro:id:`Log::default_rotation_date_format`: :bro:type:`string` :bro:attr:`&redef` Default naming format for timestamps embedded into filenames. +:bro:id:`Log::default_rotation_interval`: :bro:type:`interval` :bro:attr:`&redef` Default rotation interval to use for filters that do not specify + an interval. +:bro:id:`Log::default_rotation_postprocessor_cmd`: :bro:type:`string` :bro:attr:`&redef` Default shell command to run on rotated files. +:bro:id:`Log::default_rotation_postprocessors`: :bro:type:`table` :bro:attr:`&redef` Specifies the default postprocessor function per writer type. +:bro:id:`Log::default_scope_sep`: :bro:type:`string` :bro:attr:`&redef` Default separator for log field scopes when logs are unrolled and + flattened. +:bro:id:`Log::default_writer`: :bro:type:`Log::Writer` :bro:attr:`&redef` Default writer to use if a filter does not specify anything else. +:bro:id:`Log::empty_field`: :bro:type:`string` :bro:attr:`&redef` Default string to use for empty fields. +:bro:id:`Log::enable_local_logging`: :bro:type:`bool` :bro:attr:`&redef` If true, local logging is by default enabled for all filters. +:bro:id:`Log::enable_remote_logging`: :bro:type:`bool` :bro:attr:`&redef` If true, remote logging is by default enabled for all filters. +:bro:id:`Log::separator`: :bro:type:`string` :bro:attr:`&redef` Default separator to use between fields. +:bro:id:`Log::set_separator`: :bro:type:`string` :bro:attr:`&redef` Default separator to use between elements of a set. +:bro:id:`Log::unset_field`: :bro:type:`string` :bro:attr:`&redef` Default string to use for an unset &optional field. +======================================================================================== ===================================================================== + +Constants +######### +================================================= ========================================================================= +:bro:id:`Log::no_filter`: :bro:type:`Log::Filter` Sentinel value for indicating that a filter was not found when looked up. +================================================= ========================================================================= + +State Variables +############### +================================================ ======================================================== +:bro:id:`Log::active_streams`: :bro:type:`table` The streams which are currently active and not disabled. +================================================ ======================================================== + +Types +##### +================================================= ========================================================= +:bro:type:`Log::Filter`: :bro:type:`record` A filter type describes how to customize logging streams. +:bro:type:`Log::ID`: :bro:type:`enum` Type that defines an ID unique to each log stream. +:bro:type:`Log::RotationInfo`: :bro:type:`record` Information passed into rotation callback functions. +:bro:type:`Log::Stream`: :bro:type:`record` Type defining the content of a logging stream. +:bro:type:`Log::Writer`: :bro:type:`enum` +================================================= ========================================================= + +Functions +######### +========================================================================= ========================================================================= +:bro:id:`Log::add_default_filter`: :bro:type:`function` Adds a default :bro:type:`Log::Filter` record with ``name`` field + set as "default" to a given logging stream. +:bro:id:`Log::add_filter`: :bro:type:`function` Adds a custom filter to an existing logging stream. +:bro:id:`Log::create_stream`: :bro:type:`function` Creates a new logging stream with the default filter. +:bro:id:`Log::default_ext_func`: :bro:type:`function` :bro:attr:`&redef` Default log extension function in the case that you would like to + apply the same extensions to all logs. +:bro:id:`Log::default_path_func`: :bro:type:`function` :bro:attr:`&redef` Builds the default path values for log filters if not otherwise + specified by a filter. +:bro:id:`Log::disable_stream`: :bro:type:`function` Disables a currently enabled logging stream. +:bro:id:`Log::enable_stream`: :bro:type:`function` Enables a previously disabled logging stream. +:bro:id:`Log::flush`: :bro:type:`function` Flushes any currently buffered output for all the writers of a given + logging stream. +:bro:id:`Log::get_filter`: :bro:type:`function` Gets a filter associated with an existing logging stream. +:bro:id:`Log::get_filter_names`: :bro:type:`function` Gets the names of all filters associated with an existing + logging stream. +:bro:id:`Log::remove_default_filter`: :bro:type:`function` Removes the :bro:type:`Log::Filter` with ``name`` field equal to + "default". +:bro:id:`Log::remove_filter`: :bro:type:`function` Removes a filter from an existing logging stream. +:bro:id:`Log::remove_stream`: :bro:type:`function` Removes a logging stream completely, stopping all the threads. +:bro:id:`Log::run_rotation_postprocessor_cmd`: :bro:type:`function` Runs a command given by :bro:id:`Log::default_rotation_postprocessor_cmd` + on a rotated file. +:bro:id:`Log::set_buf`: :bro:type:`function` Sets the buffering status for all the writers of a given logging stream. +:bro:id:`Log::write`: :bro:type:`function` Writes a new log line/entry to a logging stream. +========================================================================= ========================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Log::default_ext_prefix + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"_"`` + + A prefix for extension fields which can be optionally prefixed + on all log lines by setting the `ext_func` field in the + log filter. + +.. bro:id:: Log::default_field_name_map + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Default field name mapping for renaming fields in a logging framework + filter. This is typically used to ease integration with external + data storage and analysis systems. + +.. bro:id:: Log::default_mail_alarms_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``0 secs`` + + Default alarm summary mail interval. Zero disables alarm summary + mails. + + Note that this is overridden by the BroControl MailAlarmsInterval + option. + +.. bro:id:: Log::default_rotation_date_format + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"%Y-%m-%d-%H-%M-%S"`` + + Default naming format for timestamps embedded into filenames. + Uses a ``strftime()`` style. + +.. bro:id:: Log::default_rotation_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``0 secs`` + + Default rotation interval to use for filters that do not specify + an interval. Zero disables rotation. + + Note that this is overridden by the BroControl LogRotationInterval + option. + +.. bro:id:: Log::default_rotation_postprocessor_cmd + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Default shell command to run on rotated files. Empty for none. + +.. bro:id:: Log::default_rotation_postprocessors + + :Type: :bro:type:`table` [:bro:type:`Log::Writer`] of :bro:type:`function` (info: :bro:type:`Log::RotationInfo`) : :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + [Log::WRITER_NONE] = LogNone::default_rotation_postprocessor_func + { + return (T); + }, + [Log::WRITER_ASCII] = LogAscii::default_rotation_postprocessor_func + { + LogAscii::gz = LogAscii::info$fname[-3, (coerce flattenLogAscii::info$fname to int)] == ".gz" ? ".gz" : ""; + LogAscii::bls = getenv("BRO_LOG_SUFFIX"); + if ("" == LogAscii::bls) + LogAscii::bls = "log"; + + LogAscii::dst = fmt("%s.%s.%s%s", LogAscii::info$path, strftime(Log::default_rotation_date_format, LogAscii::info$open), LogAscii::bls, LogAscii::gz); + system(fmt("/bin/mv %s %s", LogAscii::info$fname, LogAscii::dst)); + return (Log::run_rotation_postprocessor_cmd(LogAscii::info, LogAscii::dst)); + } + } + + Specifies the default postprocessor function per writer type. + Entries in this table are initialized by each writer type. + +.. bro:id:: Log::default_scope_sep + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"."`` + + Default separator for log field scopes when logs are unrolled and + flattened. This will be the string between field name components. + For example, setting this to "_" will cause the typical field + "id.orig_h" to turn into "id_orig_h". + +.. bro:id:: Log::default_writer + + :Type: :bro:type:`Log::Writer` + :Attributes: :bro:attr:`&redef` + :Default: ``Log::WRITER_ASCII`` + + Default writer to use if a filter does not specify anything else. + +.. bro:id:: Log::empty_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"(empty)"`` + + Default string to use for empty fields. This should be different + from *unset_field* to make the output unambiguous. + Individual writers can use a different value. + +.. bro:id:: Log::enable_local_logging + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, local logging is by default enabled for all filters. + +.. bro:id:: Log::enable_remote_logging + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, remote logging is by default enabled for all filters. + +.. bro:id:: Log::separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"\x09"`` + + Default separator to use between fields. + Individual writers can use a different value. + +.. bro:id:: Log::set_separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``","`` + + Default separator to use between elements of a set. + Individual writers can use a different value. + +.. bro:id:: Log::unset_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"-"`` + + Default string to use for an unset &optional field. + Individual writers can use a different value. + +Constants +######### +.. bro:id:: Log::no_filter + + :Type: :bro:type:`Log::Filter` + :Default: + + :: + + { + name="" + writer=Log::WRITER_ASCII + pred= + path= + path_func= + include= + exclude= + log_local=T + log_remote=T + field_name_map={ + + } + scope_sep="." + ext_prefix="_" + ext_func=anonymous-function + ; + interv=0 secs + postprocessor= + config={ + + } + } + + Sentinel value for indicating that a filter was not found when looked up. + +State Variables +############### +.. bro:id:: Log::active_streams + + :Type: :bro:type:`table` [:bro:type:`Log::ID`] of :bro:type:`Log::Stream` + :Default: ``{}`` + + The streams which are currently active and not disabled. + This table is not meant to be modified by users! Only use it for + examining which streams are active. + +Types +##### +.. bro:type:: Log::Filter + + :Type: :bro:type:`record` + + name: :bro:type:`string` + Descriptive name to reference this filter. + + writer: :bro:type:`Log::Writer` :bro:attr:`&default` = :bro:see:`Log::default_writer` :bro:attr:`&optional` + The logging writer implementation to use. + + pred: :bro:type:`function` (rec: :bro:type:`any`) : :bro:type:`bool` :bro:attr:`&optional` + Indicates whether a log entry should be recorded. + If not given, all entries are recorded. + + + :rec: An instance of the stream's ``columns`` type with its + fields set to the values to be logged. + + + :returns: True if the entry is to be recorded. + + path: :bro:type:`string` :bro:attr:`&optional` + Output path for recording entries matching this + filter. + + The specific interpretation of the string is up to the + logging writer, and may for example be the destination + file name. Generally, filenames are expected to be given + without any extensions; writers will add appropriate + extensions automatically. + + If this path is found to conflict with another filter's + for the same writer type, it is automatically corrected + by appending "-N", where N is the smallest integer greater + or equal to 2 that allows the corrected path name to not + conflict with another filter's. + + path_func: :bro:type:`function` (id: :bro:type:`Log::ID`, path: :bro:type:`string`, rec: :bro:type:`any`) : :bro:type:`string` :bro:attr:`&optional` + A function returning the output path for recording entries + matching this filter. This is similar to *path* yet allows + to compute the string dynamically. It is ok to return + different strings for separate calls, but be careful: it's + easy to flood the disk by returning a new string for each + connection. Upon adding a filter to a stream, if neither + ``path`` nor ``path_func`` is explicitly set by them, then + :bro:see:`Log::default_path_func` is used. + + + :id: The ID associated with the log stream. + + + :path: A suggested path value, which may be either the filter's + ``path`` if defined, else a previous result from the + function. If no ``path`` is defined for the filter, + then the first call to the function will contain an + empty string. + + + :rec: An instance of the stream's ``columns`` type with its + fields set to the values to be logged. + + + :returns: The path to be used for the filter, which will be + subject to the same automatic correction rules as + the *path* field of :bro:type:`Log::Filter` in the + case of conflicts with other filters trying to use + the same writer/path pair. + + include: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&optional` + Subset of column names to record. If not given, all + columns are recorded. + + exclude: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&optional` + Subset of column names to exclude from recording. If not + given, all columns are recorded. + + log_local: :bro:type:`bool` :bro:attr:`&default` = :bro:see:`Log::enable_local_logging` :bro:attr:`&optional` + If true, entries are recorded locally. + + log_remote: :bro:type:`bool` :bro:attr:`&default` = :bro:see:`Log::enable_remote_logging` :bro:attr:`&optional` + If true, entries are passed on to remote peers. + + field_name_map: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` :bro:attr:`&default` = :bro:see:`Log::default_field_name_map` :bro:attr:`&optional` + Field name map to rename fields before the fields are written + to the output. + + scope_sep: :bro:type:`string` :bro:attr:`&default` = :bro:see:`Log::default_scope_sep` :bro:attr:`&optional` + A string that is used for unrolling and flattening field names + for nested record types. + + ext_prefix: :bro:type:`string` :bro:attr:`&default` = :bro:see:`Log::default_ext_prefix` :bro:attr:`&optional` + Default prefix for all extension fields. It's typically + prudent to set this to something that Bro's logging + framework can't normally write out in a field name. + + ext_func: :bro:type:`function` (path: :bro:type:`string`) : :bro:type:`any` :bro:attr:`&default` = :bro:see:`Log::default_ext_func` :bro:attr:`&optional` + Function to collect a log extension value. If not specified, + no log extension will be provided for the log. + The return value from the function *must* be a record. + + interv: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Log::default_rotation_interval` :bro:attr:`&optional` + Rotation interval. Zero disables rotation. + + postprocessor: :bro:type:`function` (info: :bro:type:`Log::RotationInfo`) : :bro:type:`bool` :bro:attr:`&optional` + Callback function to trigger for rotated files. If not set, the + default comes out of :bro:id:`Log::default_rotation_postprocessors`. + + config: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + A key/value table that will be passed on to the writer. + Interpretation of the values is left to the writer, but + usually they will be used for configuration purposes. + + A filter type describes how to customize logging streams. + +.. bro:type:: Log::ID + + :Type: :bro:type:`enum` + + .. bro:enum:: Log::UNKNOWN Log::ID + + Dummy place-holder. + + .. bro:enum:: Broker::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/broker/log.bro` is loaded) + + + .. bro:enum:: Files::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/files/main.bro` is loaded) + + + Logging stream for file analysis. + + .. bro:enum:: Reporter::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/reporter/main.bro` is loaded) + + + .. bro:enum:: Cluster::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/cluster/main.bro` is loaded) + + + .. bro:enum:: Notice::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/notice/main.bro` is loaded) + + + This is the primary logging stream for notices. + + .. bro:enum:: Notice::ALARM_LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/notice/main.bro` is loaded) + + + This is the alarm stream. + + .. bro:enum:: Weird::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/notice/weird.bro` is loaded) + + + .. bro:enum:: NetControl::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/netcontrol/main.bro` is loaded) + + + .. bro:enum:: OpenFlow::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/openflow/plugins/log.bro` is loaded) + + + .. bro:enum:: NetControl::DROP Log::ID + + (present if :doc:`/scripts/base/frameworks/netcontrol/types.bro` is loaded) + + + Stop forwarding all packets matching the entity. + + No additional arguments. + + .. bro:enum:: NetControl::SHUNT Log::ID + + (present if :doc:`/scripts/base/frameworks/netcontrol/shunt.bro` is loaded) + + + .. bro:enum:: NetControl::CATCH_RELEASE Log::ID + + (present if :doc:`/scripts/base/frameworks/netcontrol/catch-and-release.bro` is loaded) + + + .. bro:enum:: DPD::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/dpd/main.bro` is loaded) + + + .. bro:enum:: Signatures::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/signatures/main.bro` is loaded) + + + .. bro:enum:: PacketFilter::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/packet-filter/main.bro` is loaded) + + + .. bro:enum:: Software::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/software/main.bro` is loaded) + + + .. bro:enum:: Intel::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/intel/main.bro` is loaded) + + + .. bro:enum:: Config::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/config/main.bro` is loaded) + + + .. bro:enum:: Tunnel::LOG Log::ID + + (present if :doc:`/scripts/base/frameworks/tunnels/main.bro` is loaded) + + + .. bro:enum:: Conn::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/conn/main.bro` is loaded) + + + .. bro:enum:: DCE_RPC::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/dce-rpc/main.bro` is loaded) + + + .. bro:enum:: DHCP::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/dhcp/main.bro` is loaded) + + + .. bro:enum:: DNP3::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/dnp3/main.bro` is loaded) + + + .. bro:enum:: DNS::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/dns/main.bro` is loaded) + + + .. bro:enum:: FTP::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/ftp/main.bro` is loaded) + + + .. bro:enum:: SSL::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/ssl/main.bro` is loaded) + + + .. bro:enum:: X509::LOG Log::ID + + (present if :doc:`/scripts/base/files/x509/main.bro` is loaded) + + + .. bro:enum:: HTTP::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/http/main.bro` is loaded) + + + .. bro:enum:: IRC::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/irc/main.bro` is loaded) + + + .. bro:enum:: KRB::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/krb/main.bro` is loaded) + + + .. bro:enum:: Modbus::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/modbus/main.bro` is loaded) + + + .. bro:enum:: mysql::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/mysql/main.bro` is loaded) + + + .. bro:enum:: NTLM::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/ntlm/main.bro` is loaded) + + + .. bro:enum:: RADIUS::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/radius/main.bro` is loaded) + + + .. bro:enum:: RDP::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/rdp/main.bro` is loaded) + + + .. bro:enum:: RFB::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/rfb/main.bro` is loaded) + + + .. bro:enum:: SIP::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/sip/main.bro` is loaded) + + + .. bro:enum:: SNMP::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/snmp/main.bro` is loaded) + + + .. bro:enum:: SMB::AUTH_LOG Log::ID + + (present if :doc:`/scripts/base/protocols/smb/main.bro` is loaded) + + + .. bro:enum:: SMB::MAPPING_LOG Log::ID + + (present if :doc:`/scripts/base/protocols/smb/main.bro` is loaded) + + + .. bro:enum:: SMB::FILES_LOG Log::ID + + (present if :doc:`/scripts/base/protocols/smb/main.bro` is loaded) + + + .. bro:enum:: SMTP::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/smtp/main.bro` is loaded) + + + .. bro:enum:: SOCKS::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/socks/main.bro` is loaded) + + + .. bro:enum:: SSH::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/ssh/main.bro` is loaded) + + + .. bro:enum:: Syslog::LOG Log::ID + + (present if :doc:`/scripts/base/protocols/syslog/main.bro` is loaded) + + + .. bro:enum:: PE::LOG Log::ID + + (present if :doc:`/scripts/base/files/pe/main.bro` is loaded) + + + .. bro:enum:: Unified2::LOG Log::ID + + (present if :doc:`/scripts/base/files/unified2/main.bro` is loaded) + + + .. bro:enum:: OCSP::LOG Log::ID + + (present if :doc:`/scripts/policy/files/x509/log-ocsp.bro` is loaded) + + + .. bro:enum:: Barnyard2::LOG Log::ID + + (present if :doc:`/scripts/policy/integration/barnyard2/main.bro` is loaded) + + + .. bro:enum:: CaptureLoss::LOG Log::ID + + (present if :doc:`/scripts/policy/misc/capture-loss.bro` is loaded) + + + .. bro:enum:: Traceroute::LOG Log::ID + + (present if :doc:`/scripts/policy/misc/detect-traceroute/main.bro` is loaded) + + + .. bro:enum:: LoadedScripts::LOG Log::ID + + (present if :doc:`/scripts/policy/misc/loaded-scripts.bro` is loaded) + + + .. bro:enum:: Stats::LOG Log::ID + + (present if :doc:`/scripts/policy/misc/stats.bro` is loaded) + + + .. bro:enum:: WeirdStats::LOG Log::ID + + (present if :doc:`/scripts/policy/misc/weird-stats.bro` is loaded) + + + .. bro:enum:: Known::HOSTS_LOG Log::ID + + (present if :doc:`/scripts/policy/protocols/conn/known-hosts.bro` is loaded) + + + .. bro:enum:: Known::SERVICES_LOG Log::ID + + (present if :doc:`/scripts/policy/protocols/conn/known-services.bro` is loaded) + + + .. bro:enum:: Known::MODBUS_LOG Log::ID + + (present if :doc:`/scripts/policy/protocols/modbus/known-masters-slaves.bro` is loaded) + + + .. bro:enum:: Modbus::REGISTER_CHANGE_LOG Log::ID + + (present if :doc:`/scripts/policy/protocols/modbus/track-memmap.bro` is loaded) + + + .. bro:enum:: SMB::CMD_LOG Log::ID + + (present if :doc:`/scripts/policy/protocols/smb/log-cmds.bro` is loaded) + + + .. bro:enum:: Known::CERTS_LOG Log::ID + + (present if :doc:`/scripts/policy/protocols/ssl/known-certs.bro` is loaded) + + + .. bro:enum:: BroxygenExample::LOG Log::ID + + (present if :doc:`/scripts/broxygen/example.bro` is loaded) + + + Type that defines an ID unique to each log stream. Scripts creating new + log streams need to redef this enum to add their own specific log ID. + The log ID implicitly determines the default name of the generated log + file. + +.. bro:type:: Log::RotationInfo + + :Type: :bro:type:`record` + + writer: :bro:type:`Log::Writer` + The log writer being used. + + fname: :bro:type:`string` + Full name of the rotated file. + + path: :bro:type:`string` + Original path value. + + open: :bro:type:`time` + Time when opened. + + close: :bro:type:`time` + Time when closed. + + terminating: :bro:type:`bool` + True if rotation occured due to Bro shutting down. + + Information passed into rotation callback functions. + +.. bro:type:: Log::Stream + + :Type: :bro:type:`record` + + columns: :bro:type:`any` + A record type defining the log's columns. + + ev: :bro:type:`any` :bro:attr:`&optional` + Event that will be raised once for each log entry. + The event receives a single same parameter, an instance of + type ``columns``. + + path: :bro:type:`string` :bro:attr:`&optional` + A path that will be inherited by any filters added to the + stream which do not already specify their own path. + + Type defining the content of a logging stream. + +.. bro:type:: Log::Writer + + :Type: :bro:type:`enum` + + .. bro:enum:: Log::WRITER_ASCII Log::Writer + + .. bro:enum:: Log::WRITER_NONE Log::Writer + + .. bro:enum:: Log::WRITER_SQLITE Log::Writer + + +Functions +######### +.. bro:id:: Log::add_default_filter + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + Adds a default :bro:type:`Log::Filter` record with ``name`` field + set as "default" to a given logging stream. + + + :id: The ID associated with a logging stream for which to add a default + filter. + + + :returns: The status of a call to :bro:id:`Log::add_filter` using a + default :bro:type:`Log::Filter` argument with ``name`` field + set to "default". + + .. bro:see:: Log::add_filter Log::remove_filter + Log::remove_default_filter + +.. bro:id:: Log::add_filter + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, filter: :bro:type:`Log::Filter`) : :bro:type:`bool` + + Adds a custom filter to an existing logging stream. If a filter + with a matching ``name`` field already exists for the stream, it + is removed when the new filter is successfully added. + + + :id: The ID associated with the logging stream to filter. + + + :filter: A record describing the desired logging parameters. + + + :returns: True if the filter was successfully added, false if + the filter was not added or the *filter* argument was not + the correct type. + + .. bro:see:: Log::remove_filter Log::add_default_filter + Log::remove_default_filter Log::get_filter Log::get_filter_names + +.. bro:id:: Log::create_stream + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, stream: :bro:type:`Log::Stream`) : :bro:type:`bool` + + Creates a new logging stream with the default filter. + + + :id: The ID enum to be associated with the new logging stream. + + + :stream: A record defining the content that the new stream will log. + + + :returns: True if a new logging stream was successfully created and + a default filter added to it. + + .. bro:see:: Log::add_default_filter Log::remove_default_filter + +.. bro:id:: Log::default_ext_func + + :Type: :bro:type:`function` (path: :bro:type:`string`) : :bro:type:`any` + :Attributes: :bro:attr:`&redef` + + Default log extension function in the case that you would like to + apply the same extensions to all logs. The function *must* return + a record with all of the fields to be included in the log. The + default function included here does not return a value, which indicates + that no extensions are added. + +.. bro:id:: Log::default_path_func + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, path: :bro:type:`string`, rec: :bro:type:`any`) : :bro:type:`string` + :Attributes: :bro:attr:`&redef` + + Builds the default path values for log filters if not otherwise + specified by a filter. The default implementation uses *id* + to derive a name. Upon adding a filter to a stream, if neither + ``path`` nor ``path_func`` is explicitly set by them, then + this function is used as the ``path_func``. + + + :id: The ID associated with the log stream. + + + :path: A suggested path value, which may be either the filter's + ``path`` if defined, else a previous result from the function. + If no ``path`` is defined for the filter, then the first call + to the function will contain an empty string. + + + :rec: An instance of the stream's ``columns`` type with its + fields set to the values to be logged. + + + :returns: The path to be used for the filter. + +.. bro:id:: Log::disable_stream + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + Disables a currently enabled logging stream. Disabled streams + will not be written to until they are enabled again. New streams + are enabled by default. + + + :id: The ID associated with the logging stream to disable. + + + :returns: True if the stream is now disabled or was already disabled. + + .. bro:see:: Log::enable_stream + +.. bro:id:: Log::enable_stream + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + Enables a previously disabled logging stream. Disabled streams + will not be written to until they are enabled again. New streams + are enabled by default. + + + :id: The ID associated with the logging stream to enable. + + + :returns: True if the stream is re-enabled or was not previously disabled. + + .. bro:see:: Log::disable_stream + +.. bro:id:: Log::flush + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + Flushes any currently buffered output for all the writers of a given + logging stream. + + + :id: The ID associated with a logging stream for which to flush buffered + data. + + + :returns: True if all writers of a log stream were signalled to flush + buffered data or if the logging stream is disabled, + false if the logging stream does not exist. + + .. bro:see:: Log::set_buf Log::enable_stream Log::disable_stream + +.. bro:id:: Log::get_filter + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, name: :bro:type:`string`) : :bro:type:`Log::Filter` + + Gets a filter associated with an existing logging stream. + + + :id: The ID associated with a logging stream from which to + obtain one of its filters. + + + :name: A string to match against the ``name`` field of a + :bro:type:`Log::Filter` for identification purposes. + + + :returns: A filter attached to the logging stream *id* matching + *name* or, if no matches are found returns the + :bro:id:`Log::no_filter` sentinel value. + + .. bro:see:: Log::add_filter Log::remove_filter Log::add_default_filter + Log::remove_default_filter Log::get_filter_names + +.. bro:id:: Log::get_filter_names + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`set` [:bro:type:`string`] + + Gets the names of all filters associated with an existing + logging stream. + + + :id: The ID of a logging stream from which to obtain the list + of filter names. + + + :returns: The set of filter names associated with the stream. + + ..bro:see:: Log::remove_filter Log::add_default_filter + Log::remove_default_filter Log::get_filter + +.. bro:id:: Log::remove_default_filter + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + Removes the :bro:type:`Log::Filter` with ``name`` field equal to + "default". + + + :id: The ID associated with a logging stream from which to remove the + default filter. + + + :returns: The status of a call to :bro:id:`Log::remove_filter` using + "default" as the argument. + + .. bro:see:: Log::add_filter Log::remove_filter Log::add_default_filter + +.. bro:id:: Log::remove_filter + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, name: :bro:type:`string`) : :bro:type:`bool` + + Removes a filter from an existing logging stream. + + + :id: The ID associated with the logging stream from which to + remove a filter. + + + :name: A string to match against the ``name`` field of a + :bro:type:`Log::Filter` for identification purposes. + + + :returns: True if the logging stream's filter was removed or + if no filter associated with *name* was found. + + .. bro:see:: Log::remove_filter Log::add_default_filter + Log::remove_default_filter Log::get_filter Log::get_filter_names + +.. bro:id:: Log::remove_stream + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`) : :bro:type:`bool` + + Removes a logging stream completely, stopping all the threads. + + + :id: The ID associated with the logging stream. + + + :returns: True if the stream was successfully removed. + + .. bro:see:: Log::create_stream + +.. bro:id:: Log::run_rotation_postprocessor_cmd + + :Type: :bro:type:`function` (info: :bro:type:`Log::RotationInfo`, npath: :bro:type:`string`) : :bro:type:`bool` + + Runs a command given by :bro:id:`Log::default_rotation_postprocessor_cmd` + on a rotated file. Meant to be called from postprocessor functions + that are added to :bro:id:`Log::default_rotation_postprocessors`. + + + :info: A record holding meta-information about the log being rotated. + + + :npath: The new path of the file (after already being rotated/processed + by writer-specific postprocessor as defined in + :bro:id:`Log::default_rotation_postprocessors`). + + + :returns: True when :bro:id:`Log::default_rotation_postprocessor_cmd` + is empty or the system command given by it has been invoked + to postprocess a rotated log file. + + .. bro:see:: Log::default_rotation_date_format + Log::default_rotation_postprocessor_cmd + Log::default_rotation_postprocessors + +.. bro:id:: Log::set_buf + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, buffered: :bro:type:`bool`) : :bro:type:`bool` + + Sets the buffering status for all the writers of a given logging stream. + A given writer implementation may or may not support buffering and if + it doesn't then toggling buffering with this function has no effect. + + + :id: The ID associated with a logging stream for which to + enable/disable buffering. + + + :buffered: Whether to enable or disable log buffering. + + + :returns: True if buffering status was set, false if the logging stream + does not exist. + + .. bro:see:: Log::flush + +.. bro:id:: Log::write + + :Type: :bro:type:`function` (id: :bro:type:`Log::ID`, columns: :bro:type:`any`) : :bro:type:`bool` + + Writes a new log line/entry to a logging stream. + + + :id: The ID associated with a logging stream to be written to. + + + :columns: A record value describing the values of each field/column + to write to the log stream. + + + :returns: True if the stream was found and no error occurred in writing + to it or if the stream was disabled and nothing was written. + False if the stream was not found, or the *columns* + argument did not match what the stream was initially defined + to handle, or one of the stream's filters has an invalid + ``path_func``. + + .. bro:see:: Log::enable_stream Log::disable_stream + + diff --git a/doc/scripts/base/frameworks/logging/postprocessors/__load__.bro.rst b/doc/scripts/base/frameworks/logging/postprocessors/__load__.bro.rst new file mode 100644 index 0000000000..b057ecada4 --- /dev/null +++ b/doc/scripts/base/frameworks/logging/postprocessors/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/logging/postprocessors/__load__.bro +=================================================== + + +:Imports: :doc:`base/frameworks/logging/postprocessors/scp.bro `, :doc:`base/frameworks/logging/postprocessors/sftp.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/logging/postprocessors/index.rst b/doc/scripts/base/frameworks/logging/postprocessors/index.rst new file mode 100644 index 0000000000..0415c5a7d7 --- /dev/null +++ b/doc/scripts/base/frameworks/logging/postprocessors/index.rst @@ -0,0 +1,44 @@ +:orphan: + +Package: base/frameworks/logging/postprocessors +=============================================== + +Support for postprocessors in the logging framework. + +:doc:`/scripts/base/frameworks/logging/postprocessors/__load__.bro` + + +:doc:`/scripts/base/frameworks/logging/postprocessors/scp.bro` + + This script defines a postprocessing function that can be applied + to a logging filter in order to automatically SCP (secure copy) + a log stream (or a subset of it) to a remote host at configurable + rotation time intervals. Generally, to use this functionality + you must handle the :bro:id:`bro_init` event and do the following + in your handler: + + 1) Create a new :bro:type:`Log::Filter` record that defines a name/path, + rotation interval, and set the ``postprocessor`` to + :bro:id:`Log::scp_postprocessor`. + 2) Add the filter to a logging stream using :bro:id:`Log::add_filter`. + 3) Add a table entry to :bro:id:`Log::scp_destinations` for the filter's + writer/path pair which defines a set of :bro:type:`Log::SCPDestination` + records. + +:doc:`/scripts/base/frameworks/logging/postprocessors/sftp.bro` + + This script defines a postprocessing function that can be applied + to a logging filter in order to automatically SFTP + a log stream (or a subset of it) to a remote host at configurable + rotation time intervals. Generally, to use this functionality + you must handle the :bro:id:`bro_init` event and do the following + in your handler: + + 1) Create a new :bro:type:`Log::Filter` record that defines a name/path, + rotation interval, and set the ``postprocessor`` to + :bro:id:`Log::sftp_postprocessor`. + 2) Add the filter to a logging stream using :bro:id:`Log::add_filter`. + 3) Add a table entry to :bro:id:`Log::sftp_destinations` for the filter's + writer/path pair which defines a set of :bro:type:`Log::SFTPDestination` + records. + diff --git a/doc/scripts/base/frameworks/logging/postprocessors/scp.bro.rst b/doc/scripts/base/frameworks/logging/postprocessors/scp.bro.rst new file mode 100644 index 0000000000..4db7573675 --- /dev/null +++ b/doc/scripts/base/frameworks/logging/postprocessors/scp.bro.rst @@ -0,0 +1,121 @@ +:tocdepth: 3 + +base/frameworks/logging/postprocessors/scp.bro +============================================== +.. bro:namespace:: Log + +This script defines a postprocessing function that can be applied +to a logging filter in order to automatically SCP (secure copy) +a log stream (or a subset of it) to a remote host at configurable +rotation time intervals. Generally, to use this functionality +you must handle the :bro:id:`bro_init` event and do the following +in your handler: + +1) Create a new :bro:type:`Log::Filter` record that defines a name/path, + rotation interval, and set the ``postprocessor`` to + :bro:id:`Log::scp_postprocessor`. +2) Add the filter to a logging stream using :bro:id:`Log::add_filter`. +3) Add a table entry to :bro:id:`Log::scp_destinations` for the filter's + writer/path pair which defines a set of :bro:type:`Log::SCPDestination` + records. + +:Namespace: Log + +Summary +~~~~~~~ +Redefinable Options +################### +============================================================================== ================================================================ +:bro:id:`Log::scp_rotation_date_format`: :bro:type:`string` :bro:attr:`&redef` Default naming format for timestamps embedded into log filenames + that use the SCP rotator. +============================================================================== ================================================================ + +State Variables +############### +================================================== ======================================================================= +:bro:id:`Log::scp_destinations`: :bro:type:`table` A table indexed by a particular log writer and filter path, that yields + a set of remote destinations. +================================================== ======================================================================= + +Types +##### +=================================================== ===================================================================== +:bro:type:`Log::SCPDestination`: :bro:type:`record` A container that describes the remote destination for the SCP command + argument as ``user@host:path``. +=================================================== ===================================================================== + +Functions +######### +====================================================== =========================================================== +:bro:id:`Log::scp_postprocessor`: :bro:type:`function` Secure-copies the rotated log to all the remote hosts + defined in :bro:id:`Log::scp_destinations` and then deletes + the local copy of the rotated log. +====================================================== =========================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Log::scp_rotation_date_format + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"%Y-%m-%d-%H-%M-%S"`` + + Default naming format for timestamps embedded into log filenames + that use the SCP rotator. + +State Variables +############### +.. bro:id:: Log::scp_destinations + + :Type: :bro:type:`table` [:bro:type:`Log::Writer`, :bro:type:`string`] of :bro:type:`set` [:bro:type:`Log::SCPDestination`] + :Default: ``{}`` + + A table indexed by a particular log writer and filter path, that yields + a set of remote destinations. The :bro:id:`Log::scp_postprocessor` + function queries this table upon log rotation and performs a secure + copy of the rotated log to each destination in the set. This + table can be modified at run-time. + +Types +##### +.. bro:type:: Log::SCPDestination + + :Type: :bro:type:`record` + + user: :bro:type:`string` + The remote user to log in as. A trust mechanism should be + pre-established. + + host: :bro:type:`string` + The remote host to which to transfer logs. + + path: :bro:type:`string` + The path/directory on the remote host to send logs. + + A container that describes the remote destination for the SCP command + argument as ``user@host:path``. + +Functions +######### +.. bro:id:: Log::scp_postprocessor + + :Type: :bro:type:`function` (info: :bro:type:`Log::RotationInfo`) : :bro:type:`bool` + + Secure-copies the rotated log to all the remote hosts + defined in :bro:id:`Log::scp_destinations` and then deletes + the local copy of the rotated log. It's not active when + reading from trace files. + + + :info: A record holding meta-information about the log file to be + postprocessed. + + + :returns: True if secure-copy system command was initiated or + if no destination was configured for the log as described + by *info*. + + diff --git a/doc/scripts/base/frameworks/logging/postprocessors/sftp.bro.rst b/doc/scripts/base/frameworks/logging/postprocessors/sftp.bro.rst new file mode 100644 index 0000000000..f53b4ae0ac --- /dev/null +++ b/doc/scripts/base/frameworks/logging/postprocessors/sftp.bro.rst @@ -0,0 +1,124 @@ +:tocdepth: 3 + +base/frameworks/logging/postprocessors/sftp.bro +=============================================== +.. bro:namespace:: Log + +This script defines a postprocessing function that can be applied +to a logging filter in order to automatically SFTP +a log stream (or a subset of it) to a remote host at configurable +rotation time intervals. Generally, to use this functionality +you must handle the :bro:id:`bro_init` event and do the following +in your handler: + +1) Create a new :bro:type:`Log::Filter` record that defines a name/path, + rotation interval, and set the ``postprocessor`` to + :bro:id:`Log::sftp_postprocessor`. +2) Add the filter to a logging stream using :bro:id:`Log::add_filter`. +3) Add a table entry to :bro:id:`Log::sftp_destinations` for the filter's + writer/path pair which defines a set of :bro:type:`Log::SFTPDestination` + records. + +:Namespace: Log + +Summary +~~~~~~~ +Redefinable Options +################### +=============================================================================== ================================================================ +:bro:id:`Log::sftp_rotation_date_format`: :bro:type:`string` :bro:attr:`&redef` Default naming format for timestamps embedded into log filenames + that use the SFTP rotator. +=============================================================================== ================================================================ + +State Variables +############### +=================================================== ======================================================================= +:bro:id:`Log::sftp_destinations`: :bro:type:`table` A table indexed by a particular log writer and filter path, that yields + a set of remote destinations. +=================================================== ======================================================================= + +Types +##### +==================================================== ======================================================================= +:bro:type:`Log::SFTPDestination`: :bro:type:`record` A container that describes the remote destination for the SFTP command, + comprised of the username, host, and path at which to upload the file. +==================================================== ======================================================================= + +Functions +######### +======================================================= ============================================================ +:bro:id:`Log::sftp_postprocessor`: :bro:type:`function` Securely transfers the rotated log to all the remote hosts + defined in :bro:id:`Log::sftp_destinations` and then deletes + the local copy of the rotated log. +======================================================= ============================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Log::sftp_rotation_date_format + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"%Y-%m-%d-%H-%M-%S"`` + + Default naming format for timestamps embedded into log filenames + that use the SFTP rotator. + +State Variables +############### +.. bro:id:: Log::sftp_destinations + + :Type: :bro:type:`table` [:bro:type:`Log::Writer`, :bro:type:`string`] of :bro:type:`set` [:bro:type:`Log::SFTPDestination`] + :Default: ``{}`` + + A table indexed by a particular log writer and filter path, that yields + a set of remote destinations. The :bro:id:`Log::sftp_postprocessor` + function queries this table upon log rotation and performs a secure + transfer of the rotated log to each destination in the set. This + table can be modified at run-time. + +Types +##### +.. bro:type:: Log::SFTPDestination + + :Type: :bro:type:`record` + + user: :bro:type:`string` + The remote user to log in as. A trust mechanism should be + pre-established. + + host: :bro:type:`string` + The remote host to which to transfer logs. + + host_port: :bro:type:`count` :bro:attr:`&default` = ``22`` :bro:attr:`&optional` + The port to connect to. Defaults to 22 + + path: :bro:type:`string` + The path/directory on the remote host to send logs. + + A container that describes the remote destination for the SFTP command, + comprised of the username, host, and path at which to upload the file. + +Functions +######### +.. bro:id:: Log::sftp_postprocessor + + :Type: :bro:type:`function` (info: :bro:type:`Log::RotationInfo`) : :bro:type:`bool` + + Securely transfers the rotated log to all the remote hosts + defined in :bro:id:`Log::sftp_destinations` and then deletes + the local copy of the rotated log. It's not active when + reading from trace files. + + + :info: A record holding meta-information about the log file to be + postprocessed. + + + :returns: True if sftp system command was initiated or + if no destination was configured for the log as described + by *info*. + + diff --git a/doc/scripts/base/frameworks/logging/writers/ascii.bro.rst b/doc/scripts/base/frameworks/logging/writers/ascii.bro.rst new file mode 100644 index 0000000000..70434d8d62 --- /dev/null +++ b/doc/scripts/base/frameworks/logging/writers/ascii.bro.rst @@ -0,0 +1,162 @@ +:tocdepth: 3 + +base/frameworks/logging/writers/ascii.bro +========================================= +.. bro:namespace:: LogAscii + +Interface for the ASCII log writer. Redefinable options are available +to tweak the output format of ASCII logs. + +The ASCII writer currently supports one writer-specific per-filter config +option: setting ``tsv`` to the string ``T`` turns the output into +"tab-separated-value" mode where only a single header row with the column +names is printed out as meta information, with no "# fields" prepended; no +other meta data gets included in that mode. Example filter using this:: + + local f: Log::Filter = [$name = "my-filter", + $writer = Log::WRITER_ASCII, + $config = table(["tsv"] = "T")]; + + +:Namespace: LogAscii + +Summary +~~~~~~~ +Redefinable Options +################### +========================================================================================= ===================================================================== +:bro:id:`LogAscii::empty_field`: :bro:type:`string` :bro:attr:`&redef` String to use for empty fields. +:bro:id:`LogAscii::gzip_level`: :bro:type:`count` :bro:attr:`&redef` Define the gzip level to compress the logs. +:bro:id:`LogAscii::include_meta`: :bro:type:`bool` :bro:attr:`&redef` If true, include lines with log meta information such as column names + with types, the values of ASCII logging options that are in use, and + the time when the file was opened and closed (the latter at the end). +:bro:id:`LogAscii::json_timestamps`: :bro:type:`JSON::TimestampFormat` :bro:attr:`&redef` Format of timestamps when writing out JSON. +:bro:id:`LogAscii::meta_prefix`: :bro:type:`string` :bro:attr:`&redef` Prefix for lines with meta information. +:bro:id:`LogAscii::output_to_stdout`: :bro:type:`bool` :bro:attr:`&redef` If true, output everything to stdout rather than + into files. +:bro:id:`LogAscii::separator`: :bro:type:`string` :bro:attr:`&redef` Separator between fields. +:bro:id:`LogAscii::set_separator`: :bro:type:`string` :bro:attr:`&redef` Separator between set elements. +:bro:id:`LogAscii::unset_field`: :bro:type:`string` :bro:attr:`&redef` String to use for an unset &optional field. +:bro:id:`LogAscii::use_json`: :bro:type:`bool` :bro:attr:`&redef` If true, the default will be to write logs in a JSON format. +========================================================================================= ===================================================================== + +Redefinitions +############# +==================================================================================== = +:bro:id:`Log::default_rotation_postprocessors`: :bro:type:`table` :bro:attr:`&redef` +==================================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: LogAscii::empty_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"(empty)"`` + + String to use for empty fields. This should be different from + *unset_field* to make the output unambiguous. + + This option is also available as a per-filter ``$config`` option. + +.. bro:id:: LogAscii::gzip_level + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + Define the gzip level to compress the logs. If 0, then no gzip + compression is performed. Enabling compression also changes + the log file name extension to include ".gz". + + This option is also available as a per-filter ``$config`` option. + +.. bro:id:: LogAscii::include_meta + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, include lines with log meta information such as column names + with types, the values of ASCII logging options that are in use, and + the time when the file was opened and closed (the latter at the end). + + If writing in JSON format, this is implicitly disabled. + +.. bro:id:: LogAscii::json_timestamps + + :Type: :bro:type:`JSON::TimestampFormat` + :Attributes: :bro:attr:`&redef` + :Default: ``JSON::TS_EPOCH`` + + Format of timestamps when writing out JSON. By default, the JSON + formatter will use double values for timestamps which represent the + number of seconds from the UNIX epoch. + + This option is also available as a per-filter ``$config`` option. + +.. bro:id:: LogAscii::meta_prefix + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"#"`` + + Prefix for lines with meta information. + + This option is also available as a per-filter ``$config`` option. + +.. bro:id:: LogAscii::output_to_stdout + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, output everything to stdout rather than + into files. This is primarily for debugging purposes. + + This option is also available as a per-filter ``$config`` option. + +.. bro:id:: LogAscii::separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"\x09"`` + + Separator between fields. + + This option is also available as a per-filter ``$config`` option. + +.. bro:id:: LogAscii::set_separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``","`` + + Separator between set elements. + + This option is also available as a per-filter ``$config`` option. + +.. bro:id:: LogAscii::unset_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"-"`` + + String to use for an unset &optional field. + + This option is also available as a per-filter ``$config`` option. + +.. bro:id:: LogAscii::use_json + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, the default will be to write logs in a JSON format. + + This option is also available as a per-filter ``$config`` option. + + diff --git a/doc/scripts/base/frameworks/logging/writers/none.bro.rst b/doc/scripts/base/frameworks/logging/writers/none.bro.rst new file mode 100644 index 0000000000..56482fa30a --- /dev/null +++ b/doc/scripts/base/frameworks/logging/writers/none.bro.rst @@ -0,0 +1,40 @@ +:tocdepth: 3 + +base/frameworks/logging/writers/none.bro +======================================== +.. bro:namespace:: LogNone + +Interface for the None log writer. This writer is mainly for debugging. + +:Namespace: LogNone + +Summary +~~~~~~~ +Redefinable Options +################### +============================================================= ============================================================ +:bro:id:`LogNone::debug`: :bro:type:`bool` :bro:attr:`&redef` If true, output debugging output that can be useful for unit + testing the logging framework. +============================================================= ============================================================ + +Redefinitions +############# +==================================================================================== = +:bro:id:`Log::default_rotation_postprocessors`: :bro:type:`table` :bro:attr:`&redef` +==================================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: LogNone::debug + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, output debugging output that can be useful for unit + testing the logging framework. + + diff --git a/doc/scripts/base/frameworks/logging/writers/sqlite.bro.rst b/doc/scripts/base/frameworks/logging/writers/sqlite.bro.rst new file mode 100644 index 0000000000..34da5826a8 --- /dev/null +++ b/doc/scripts/base/frameworks/logging/writers/sqlite.bro.rst @@ -0,0 +1,60 @@ +:tocdepth: 3 + +base/frameworks/logging/writers/sqlite.bro +========================================== +.. bro:namespace:: LogSQLite + +Interface for the SQLite log writer. Redefinable options are available +to tweak the output format of the SQLite reader. + +See :doc:`/frameworks/logging-input-sqlite` for an introduction on how to +use the SQLite log writer. + +The SQL writer currently supports one writer-specific filter option via +``config``: setting ``tablename`` sets the name of the table that is used +or created in the SQLite database. An example for this is given in the +introduction mentioned above. + +:Namespace: LogSQLite + +Summary +~~~~~~~ +Redefinable Options +################### +========================================================================= =========================================== +:bro:id:`LogSQLite::empty_field`: :bro:type:`string` :bro:attr:`&redef` String to use for empty fields. +:bro:id:`LogSQLite::set_separator`: :bro:type:`string` :bro:attr:`&redef` Separator between set elements. +:bro:id:`LogSQLite::unset_field`: :bro:type:`string` :bro:attr:`&redef` String to use for an unset &optional field. +========================================================================= =========================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: LogSQLite::empty_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"(empty)"`` + + String to use for empty fields. This should be different from + *unset_field* to make the output unambiguous. + +.. bro:id:: LogSQLite::set_separator + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``","`` + + Separator between set elements. + +.. bro:id:: LogSQLite::unset_field + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"-"`` + + String to use for an unset &optional field. + + diff --git a/doc/scripts/base/frameworks/netcontrol/__load__.bro.rst b/doc/scripts/base/frameworks/netcontrol/__load__.bro.rst new file mode 100644 index 0000000000..bb99a2bab0 --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/__load__.bro +======================================= + + +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/netcontrol/catch-and-release.bro `, :doc:`base/frameworks/netcontrol/drop.bro `, :doc:`base/frameworks/netcontrol/main.bro `, :doc:`base/frameworks/netcontrol/non-cluster.bro `, :doc:`base/frameworks/netcontrol/plugins `, :doc:`base/frameworks/netcontrol/shunt.bro `, :doc:`base/frameworks/netcontrol/types.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/netcontrol/catch-and-release.bro.rst b/doc/scripts/base/frameworks/netcontrol/catch-and-release.bro.rst new file mode 100644 index 0000000000..a9099fb91a --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/catch-and-release.bro.rst @@ -0,0 +1,343 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/catch-and-release.bro +================================================ +.. bro:namespace:: NetControl + +Implementation of catch-and-release functionality for NetControl. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/netcontrol/drop.bro `, :doc:`base/frameworks/netcontrol/main.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +==================================================================================================== ==================================================================================== +:bro:id:`NetControl::catch_release_warn_blocked_ip_encountered`: :bro:type:`bool` :bro:attr:`&redef` If true, catch and release warns if packets of an IP address are still seen after it + should have been blocked. +==================================================================================================== ==================================================================================== + +Redefinable Options +################### +==================================================================================== ===================================================================================== +:bro:id:`NetControl::catch_release_intervals`: :bro:type:`vector` :bro:attr:`&redef` Time intervals for which subsequent drops of the same IP take + effect. +:bro:id:`NetControl::watch_connections`: :bro:type:`bool` :bro:attr:`&redef` If true, catch_release_seen is called on the connection originator in new_connection, + connection_established, partial_connection, connection_attempt, connection_rejected, + connection_reset and connection_pending +==================================================================================== ===================================================================================== + +Types +##### +============================================================= ========================================================================= +:bro:type:`NetControl::BlockInfo`: :bro:type:`record` This record is used for storing information about current blocks that are + part of catch and release. +:bro:type:`NetControl::CatchReleaseActions`: :bro:type:`enum` The enum that contains the different kinds of messages that are logged by + catch and release. +:bro:type:`NetControl::CatchReleaseInfo`: :bro:type:`record` The record type that is used for representing and logging +============================================================= ========================================================================= + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +===================================================================== =================================================================================== +:bro:id:`NetControl::catch_release_add`: :bro:type:`event` +:bro:id:`NetControl::catch_release_block_delete`: :bro:type:`event` +:bro:id:`NetControl::catch_release_block_new`: :bro:type:`event` +:bro:id:`NetControl::catch_release_delete`: :bro:type:`event` +:bro:id:`NetControl::catch_release_encountered`: :bro:type:`event` +:bro:id:`NetControl::catch_release_forgotten`: :bro:type:`event` Event is raised when catch and release cases management of an IP address because no + activity was seen within the watch_until period. +:bro:id:`NetControl::log_netcontrol_catch_release`: :bro:type:`event` Event that can be handled to access the :bro:type:`NetControl::CatchReleaseInfo` + record as it is sent on to the logging framework. +===================================================================== =================================================================================== + +Functions +######### +========================================================================= ====================================================================================================== +:bro:id:`NetControl::catch_release_seen`: :bro:type:`function` This function can be called to notify the catch and release script that activity by + an IP address was seen. +:bro:id:`NetControl::drop_address_catch_release`: :bro:type:`function` Stops all packets involving an IP address from being forwarded. +:bro:id:`NetControl::get_catch_release_info`: :bro:type:`function` Get the :bro:see:`NetControl::BlockInfo` record for an address currently blocked by catch and release. +:bro:id:`NetControl::unblock_address_catch_release`: :bro:type:`function` Removes an address from being watched with catch and release. +========================================================================= ====================================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: NetControl::catch_release_warn_blocked_ip_encountered + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, catch and release warns if packets of an IP address are still seen after it + should have been blocked. + +Redefinable Options +################### +.. bro:id:: NetControl::catch_release_intervals + + :Type: :bro:type:`vector` of :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + [10.0 mins, 1.0 hr, 1.0 day, 7.0 days] + + Time intervals for which subsequent drops of the same IP take + effect. + +.. bro:id:: NetControl::watch_connections + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, catch_release_seen is called on the connection originator in new_connection, + connection_established, partial_connection, connection_attempt, connection_rejected, + connection_reset and connection_pending + +Types +##### +.. bro:type:: NetControl::BlockInfo + + :Type: :bro:type:`record` + + block_until: :bro:type:`time` :bro:attr:`&optional` + Absolute time indicating until when a block is inserted using NetControl. + + watch_until: :bro:type:`time` + Absolute time indicating until when an IP address is watched to reblock it. + + num_reblocked: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Number of times an IP address was reblocked. + + current_interval: :bro:type:`count` + Number indicating at which catch and release interval we currently are. + + current_block_id: :bro:type:`string` + ID of the inserted block, if any. + + location: :bro:type:`string` :bro:attr:`&optional` + User specified string. + + This record is used for storing information about current blocks that are + part of catch and release. + +.. bro:type:: NetControl::CatchReleaseActions + + :Type: :bro:type:`enum` + + .. bro:enum:: NetControl::INFO NetControl::CatchReleaseActions + + Log lines marked with info are purely informational; no action was taken. + + .. bro:enum:: NetControl::ADDED NetControl::CatchReleaseActions + + A rule for the specified IP address already existed in NetControl (outside + of catch-and-release). Catch and release did not add a new rule, but is now + watching the IP address and will add a new rule after the current rule expires. + + .. bro:enum:: NetControl::DROP NetControl::CatchReleaseActions + + (present if :doc:`/scripts/base/frameworks/netcontrol/types.bro` is loaded) + + + Stop forwarding all packets matching the entity. + + No additional arguments. + + .. bro:enum:: NetControl::DROPPED NetControl::CatchReleaseActions + + A drop was requested by catch and release. + An address was successfully blocked by catch and release. + + .. bro:enum:: NetControl::UNBLOCK NetControl::CatchReleaseActions + + An address was unblocked after the timeout expired. + + .. bro:enum:: NetControl::FORGOTTEN NetControl::CatchReleaseActions + + An address was forgotten because it did not reappear within the `watch_until` interval. + + .. bro:enum:: NetControl::SEEN_AGAIN NetControl::CatchReleaseActions + + A watched IP address was seen again; catch and release will re-block it. + + The enum that contains the different kinds of messages that are logged by + catch and release. + +.. bro:type:: NetControl::CatchReleaseInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The absolute time indicating when the action for this log-line occured. + + rule_id: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The rule id that this log line refers to. + + ip: :bro:type:`addr` :bro:attr:`&log` + The IP address that this line refers to. + + action: :bro:type:`NetControl::CatchReleaseActions` :bro:attr:`&log` + The action that was taken in this log-line. + + block_interval: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + The current block_interaval (for how long the address is blocked). + + watch_interval: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + The current watch_interval (for how long the address will be watched and re-block if it reappears). + + blocked_until: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + The absolute time until which the address is blocked. + + watched_until: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + The absolute time until which the address will be monitored. + + num_blocked: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Number of times that this address was blocked in the current cycle. + + location: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The user specified location string. + + message: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Additional informational string by the catch and release framework about this log-line. + + The record type that is used for representing and logging + +Events +###### +.. bro:id:: NetControl::catch_release_add + + :Type: :bro:type:`event` (a: :bro:type:`addr`, location: :bro:type:`string`) + + +.. bro:id:: NetControl::catch_release_block_delete + + :Type: :bro:type:`event` (a: :bro:type:`addr`) + + +.. bro:id:: NetControl::catch_release_block_new + + :Type: :bro:type:`event` (a: :bro:type:`addr`, b: :bro:type:`NetControl::BlockInfo`) + + +.. bro:id:: NetControl::catch_release_delete + + :Type: :bro:type:`event` (a: :bro:type:`addr`, reason: :bro:type:`string`) + + +.. bro:id:: NetControl::catch_release_encountered + + :Type: :bro:type:`event` (a: :bro:type:`addr`) + + +.. bro:id:: NetControl::catch_release_forgotten + + :Type: :bro:type:`event` (a: :bro:type:`addr`, bi: :bro:type:`NetControl::BlockInfo`) + + Event is raised when catch and release cases management of an IP address because no + activity was seen within the watch_until period. + + + :a: The address that is no longer being managed. + + + :bi: The :bro:see:`NetControl::BlockInfo` record containing information about the block. + +.. bro:id:: NetControl::log_netcontrol_catch_release + + :Type: :bro:type:`event` (rec: :bro:type:`NetControl::CatchReleaseInfo`) + + Event that can be handled to access the :bro:type:`NetControl::CatchReleaseInfo` + record as it is sent on to the logging framework. + +Functions +######### +.. bro:id:: NetControl::catch_release_seen + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`void` + + This function can be called to notify the catch and release script that activity by + an IP address was seen. If the respective IP address is currently monitored by catch and + release and not blocked, the block will be reinstated. See the documentation of watch_new_connection + which events the catch and release functionality usually monitors for activity. + + + :a: The address that was seen and should be re-dropped if it is being watched. + +.. bro:id:: NetControl::drop_address_catch_release + + :Type: :bro:type:`function` (a: :bro:type:`addr`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`NetControl::BlockInfo` + + Stops all packets involving an IP address from being forwarded. This function + uses catch-and-release functionality, where the IP address is only dropped for + a short amount of time that is incremented steadily when the IP is encountered + again. + + In cluster mode, this function works on workers as well as the manager. On managers, + the returned :bro:see:`NetControl::BlockInfo` record will not contain the block ID, + which will be assigned on the manager. + + + :a: The address to be dropped. + + + :t: How long to drop it, with 0 being indefinitely. + + + :location: An optional string describing where the drop was triggered. + + + :returns: The :bro:see:`NetControl::BlockInfo` record containing information about + the inserted block. + +.. bro:id:: NetControl::get_catch_release_info + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`NetControl::BlockInfo` + + Get the :bro:see:`NetControl::BlockInfo` record for an address currently blocked by catch and release. + If the address is unknown to catch and release, the watch_until time will be set to 0. + + In cluster mode, this function works on the manager and workers. On workers, the data will + lag slightly behind the manager; if you add a block, it will not be instantly available via + this function. + + + :a: The address to get information about. + + + :returns: The :bro:see:`NetControl::BlockInfo` record containing information about + the inserted block. + +.. bro:id:: NetControl::unblock_address_catch_release + + :Type: :bro:type:`function` (a: :bro:type:`addr`, reason: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`bool` + + Removes an address from being watched with catch and release. Returns true if the + address was found and removed; returns false if it was unknown to catch and release. + + If the address is currently blocked, and the block was inserted by catch and release, + the block is removed. + + + :a: The address to be unblocked. + + + :reason: A reason for the unblock. + + + :returns: True if the address was unblocked. + + diff --git a/doc/scripts/base/frameworks/netcontrol/drop.bro.rst b/doc/scripts/base/frameworks/netcontrol/drop.bro.rst new file mode 100644 index 0000000000..243c13c583 --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/drop.bro.rst @@ -0,0 +1,140 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/drop.bro +=================================== +.. bro:namespace:: NetControl + +Implementation of the drop functionality for NetControl. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/netcontrol/main.bro ` + +Summary +~~~~~~~ +Types +##### +==================================================== = +:bro:type:`NetControl::DropInfo`: :bro:type:`record` +==================================================== = + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +============================================================ ========================================================================= +:bro:id:`NetControl::log_netcontrol_drop`: :bro:type:`event` Event that can be handled to access the :bro:type:`NetControl::ShuntInfo` + record as it is sent on to the logging framework. +============================================================ ========================================================================= + +Hooks +##### +======================================================== ======================================================================= +:bro:id:`NetControl::drop_rule_policy`: :bro:type:`hook` Hook that allows the modification of rules passed to drop_* before they + are passed on. +======================================================== ======================================================================= + +Functions +######### +=========================================================== ====================================================================== +:bro:id:`NetControl::drop_address`: :bro:type:`function` Stops all packets involving an IP address from being forwarded. +:bro:id:`NetControl::drop_connection`: :bro:type:`function` Stops all packets involving a connection address from being forwarded. +=========================================================== ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: NetControl::DropInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time at which the recorded activity occurred. + + rule_id: :bro:type:`string` :bro:attr:`&log` + ID of the rule; unique during each Bro run. + + orig_h: :bro:type:`addr` :bro:attr:`&log` + The originator's IP address. + + orig_p: :bro:type:`port` :bro:attr:`&log` :bro:attr:`&optional` + The originator's port number. + + resp_h: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + The responder's IP address. + + resp_p: :bro:type:`port` :bro:attr:`&log` :bro:attr:`&optional` + The responder's port number. + + expire: :bro:type:`interval` :bro:attr:`&log` + Expiry time of the shunt. + + location: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Location where the underlying action was triggered. + + +Events +###### +.. bro:id:: NetControl::log_netcontrol_drop + + :Type: :bro:type:`event` (rec: :bro:type:`NetControl::DropInfo`) + + Event that can be handled to access the :bro:type:`NetControl::ShuntInfo` + record as it is sent on to the logging framework. + +Hooks +##### +.. bro:id:: NetControl::drop_rule_policy + + :Type: :bro:type:`hook` (r: :bro:type:`NetControl::Rule`) : :bro:type:`bool` + + Hook that allows the modification of rules passed to drop_* before they + are passed on. If one of the hooks uses break, the rule is ignored. + + + :r: The rule to be added. + +Functions +######### +.. bro:id:: NetControl::drop_address + + :Type: :bro:type:`function` (a: :bro:type:`addr`, t: :bro:type:`interval`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Stops all packets involving an IP address from being forwarded. + + + :a: The address to be dropped. + + + :t: How long to drop it, with 0 being indefinitely. + + + :location: An optional string describing where the drop was triggered. + + + :returns: The id of the inserted rule on success and zero on failure. + +.. bro:id:: NetControl::drop_connection + + :Type: :bro:type:`function` (c: :bro:type:`conn_id`, t: :bro:type:`interval`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Stops all packets involving a connection address from being forwarded. + + + :c: The connection to be dropped. + + + :t: How long to drop it, with 0 being indefinitely. + + + :location: An optional string describing where the drop was triggered. + + + :returns: The id of the inserted rule on success and zero on failure. + + diff --git a/doc/scripts/base/frameworks/netcontrol/index.rst b/doc/scripts/base/frameworks/netcontrol/index.rst new file mode 100644 index 0000000000..6dd838576c --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/index.rst @@ -0,0 +1,81 @@ +:orphan: + +Package: base/frameworks/netcontrol +=================================== + +The NetControl framework provides a way for Bro to interact with networking +hard- and software, e.g. for dropping and shunting IP addresses/connections, +etc. + +:doc:`/scripts/base/frameworks/netcontrol/__load__.bro` + + +:doc:`/scripts/base/frameworks/netcontrol/types.bro` + + This file defines the types that are used by the NetControl framework. + + The most important type defined in this file is :bro:see:`NetControl::Rule`, + which is used to describe all rules that can be expressed by the NetControl framework. + +:doc:`/scripts/base/frameworks/netcontrol/main.bro` + + Bro's NetControl framework. + + This plugin-based framework allows to control the traffic that Bro monitors + as well as, if having access to the forwarding path, the traffic the network + forwards. By default, the framework lets everything through, to both Bro + itself as well as on the network. Scripts can then add rules to impose + restrictions on entities, such as specific connections or IP addresses. + + This framework has two APIs: a high-level and low-level. The high-level API + provides convenience functions for a set of common operations. The + low-level API provides full flexibility. + +:doc:`/scripts/base/frameworks/netcontrol/plugin.bro` + + This file defines the plugin interface for NetControl. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/__load__.bro` + + +:doc:`/scripts/base/frameworks/netcontrol/plugins/debug.bro` + + Debugging plugin for the NetControl framework, providing insight into + executed operations. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/openflow.bro` + + OpenFlow plugin for the NetControl framework. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/packetfilter.bro` + + NetControl plugin for the process-level PacketFilter that comes with + Bro. Since the PacketFilter in Bro is quite limited in scope + and can only add/remove filters for addresses, this is quite + limited in scope at the moment. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/broker.bro` + + Broker plugin for the NetControl framework. Sends the raw data structures + used in NetControl on to Broker to allow for easy handling, e.g., of + command-line scripts. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/acld.bro` + + Acld plugin for the netcontrol framework. + +:doc:`/scripts/base/frameworks/netcontrol/drop.bro` + + Implementation of the drop functionality for NetControl. + +:doc:`/scripts/base/frameworks/netcontrol/shunt.bro` + + Implementation of the shunt functionality for NetControl. + +:doc:`/scripts/base/frameworks/netcontrol/catch-and-release.bro` + + Implementation of catch-and-release functionality for NetControl. + +:doc:`/scripts/base/frameworks/netcontrol/non-cluster.bro` + + diff --git a/doc/scripts/base/frameworks/netcontrol/main.bro.rst b/doc/scripts/base/frameworks/netcontrol/main.bro.rst new file mode 100644 index 0000000000..eb04bbe457 --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/main.bro.rst @@ -0,0 +1,544 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/main.bro +=================================== +.. bro:namespace:: NetControl + +Bro's NetControl framework. + +This plugin-based framework allows to control the traffic that Bro monitors +as well as, if having access to the forwarding path, the traffic the network +forwards. By default, the framework lets everything through, to both Bro +itself as well as on the network. Scripts can then add rules to impose +restrictions on entities, such as specific connections or IP addresses. + +This framework has two APIs: a high-level and low-level. The high-level API +provides convenience functions for a set of common operations. The +low-level API provides full flexibility. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/netcontrol/plugin.bro `, :doc:`base/frameworks/netcontrol/types.bro ` + +Summary +~~~~~~~ +Types +##### +====================================================== ================================================================= +:bro:type:`NetControl::Info`: :bro:type:`record` The record type defining the column fields of the NetControl log. +:bro:type:`NetControl::InfoCategory`: :bro:type:`enum` Type of an entry in the NetControl log. +:bro:type:`NetControl::InfoState`: :bro:type:`enum` State of an entry in the NetControl log. +====================================================== ================================================================= + +Redefinitions +############# +================================================ ========================================== +:bro:type:`Log::ID`: :bro:type:`enum` The framework's logging stream identifier. +:bro:type:`NetControl::Rule`: :bro:type:`record` +================================================ ========================================== + +Events +###### +======================================================= =========================================================================== +:bro:id:`NetControl::init`: :bro:type:`event` Event that is used to initialize plugins. +:bro:id:`NetControl::init_done`: :bro:type:`event` Event that is raised once all plugins activated in ``NetControl::init`` + have finished their initialization. +:bro:id:`NetControl::log_netcontrol`: :bro:type:`event` Event that can be handled to access the :bro:type:`NetControl::Info` + record as it is sent on to the logging framework. +:bro:id:`NetControl::rule_added`: :bro:type:`event` Confirms that a rule was put in place by a plugin. +:bro:id:`NetControl::rule_destroyed`: :bro:type:`event` This event is raised when a rule is deleted from the NetControl framework, + because it is no longer in use. +:bro:id:`NetControl::rule_error`: :bro:type:`event` Reports an error when operating on a rule. +:bro:id:`NetControl::rule_exists`: :bro:type:`event` Signals that a rule that was supposed to be put in place was already + existing at the specified plugin. +:bro:id:`NetControl::rule_new`: :bro:type:`event` This event is raised when a new rule is created by the NetControl framework + due to a call to add_rule. +:bro:id:`NetControl::rule_removed`: :bro:type:`event` Reports that a plugin reports a rule was removed due to a + remove_rule function call. +:bro:id:`NetControl::rule_timeout`: :bro:type:`event` Reports that a rule was removed from a plugin due to a timeout. +======================================================= =========================================================================== + +Hooks +##### +=================================================== ========================================================================= +:bro:id:`NetControl::rule_policy`: :bro:type:`hook` Hook that allows the modification of rules passed to add_rule before they + are passed on to the plugins. +=================================================== ========================================================================= + +Functions +######### +============================================================= ============================================================================================== +:bro:id:`NetControl::activate`: :bro:type:`function` Activates a plugin. +:bro:id:`NetControl::add_rule`: :bro:type:`function` Installs a rule. +:bro:id:`NetControl::clear`: :bro:type:`function` Flushes all state by calling :bro:see:`NetControl::remove_rule` on all currently active rules. +:bro:id:`NetControl::delete_rule`: :bro:type:`function` Deletes a rule without removing it from the backends to which it has been + added before. +:bro:id:`NetControl::find_rules_addr`: :bro:type:`function` Searches all rules affecting a certain IP address. +:bro:id:`NetControl::find_rules_subnet`: :bro:type:`function` Searches all rules affecting a certain subnet. +:bro:id:`NetControl::plugin_activated`: :bro:type:`function` Function called by plugins once they finished their activation. +:bro:id:`NetControl::quarantine_host`: :bro:type:`function` Quarantines a host. +:bro:id:`NetControl::redirect_flow`: :bro:type:`function` Redirects a uni-directional flow to another port. +:bro:id:`NetControl::remove_rule`: :bro:type:`function` Removes a rule. +:bro:id:`NetControl::whitelist_address`: :bro:type:`function` Allows all traffic involving a specific IP address to be forwarded. +:bro:id:`NetControl::whitelist_subnet`: :bro:type:`function` Allows all traffic involving a specific IP subnet to be forwarded. +============================================================= ============================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: NetControl::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time at which the recorded activity occurred. + + rule_id: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + ID of the rule; unique during each Bro run. + + category: :bro:type:`NetControl::InfoCategory` :bro:attr:`&log` :bro:attr:`&optional` + Type of the log entry. + + cmd: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The command the log entry is about. + + state: :bro:type:`NetControl::InfoState` :bro:attr:`&log` :bro:attr:`&optional` + State the log entry reflects. + + action: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + String describing an action the entry is about. + + target: :bro:type:`NetControl::TargetType` :bro:attr:`&log` :bro:attr:`&optional` + The target type of the action. + + entity_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Type of the entity the log entry is about. + + entity: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + String describing the entity the log entry is about. + + mod: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + String describing the optional modification of the entry (e.h. redirect) + + msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + String with an additional message. + + priority: :bro:type:`int` :bro:attr:`&log` :bro:attr:`&optional` + Number describing the priority of the log entry. + + expire: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + Expiry time of the log entry. + + location: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Location where the underlying action was triggered. + + plugin: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Plugin triggering the log entry. + + The record type defining the column fields of the NetControl log. + +.. bro:type:: NetControl::InfoCategory + + :Type: :bro:type:`enum` + + .. bro:enum:: NetControl::MESSAGE NetControl::InfoCategory + + A log entry reflecting a framework message. + + .. bro:enum:: NetControl::ERROR NetControl::InfoCategory + + A log entry reflecting a framework message. + + .. bro:enum:: NetControl::RULE NetControl::InfoCategory + + A log entry about a rule. + + Type of an entry in the NetControl log. + +.. bro:type:: NetControl::InfoState + + :Type: :bro:type:`enum` + + .. bro:enum:: NetControl::REQUESTED NetControl::InfoState + + The request to add/remove a rule was sent to the respective backend. + + .. bro:enum:: NetControl::SUCCEEDED NetControl::InfoState + + A rule was successfully added by a backend. + + .. bro:enum:: NetControl::EXISTS NetControl::InfoState + + A backend reported that a rule was already existing. + + .. bro:enum:: NetControl::FAILED NetControl::InfoState + + A rule addition failed. + + .. bro:enum:: NetControl::REMOVED NetControl::InfoState + + A rule was successfully removed by a backend. + + .. bro:enum:: NetControl::TIMEOUT NetControl::InfoState + + A rule timeout was triggered by the NetControl framework or a backend. + + State of an entry in the NetControl log. + +Events +###### +.. bro:id:: NetControl::init + + :Type: :bro:type:`event` () + + Event that is used to initialize plugins. Place all plugin initialization + related functionality in this event. + +.. bro:id:: NetControl::init_done + + :Type: :bro:type:`event` () + + Event that is raised once all plugins activated in ``NetControl::init`` + have finished their initialization. + +.. bro:id:: NetControl::log_netcontrol + + :Type: :bro:type:`event` (rec: :bro:type:`NetControl::Info`) + + Event that can be handled to access the :bro:type:`NetControl::Info` + record as it is sent on to the logging framework. + +.. bro:id:: NetControl::rule_added + + :Type: :bro:type:`event` (r: :bro:type:`NetControl::Rule`, p: :bro:type:`NetControl::PluginState`, msg: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) + + Confirms that a rule was put in place by a plugin. + + + :r: The rule now in place. + + + :p: The state for the plugin that put it into place. + + + :msg: An optional informational message by the plugin. + +.. bro:id:: NetControl::rule_destroyed + + :Type: :bro:type:`event` (r: :bro:type:`NetControl::Rule`) + + This event is raised when a rule is deleted from the NetControl framework, + because it is no longer in use. This can be caused by the fact that a rule + was removed by all plugins to which it was added, by the fact that it timed out + or due to rule errors. + + To get the cause of a rule remove, catch the rule_removed, rule_timeout and + rule_error events. + +.. bro:id:: NetControl::rule_error + + :Type: :bro:type:`event` (r: :bro:type:`NetControl::Rule`, p: :bro:type:`NetControl::PluginState`, msg: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) + + Reports an error when operating on a rule. + + + :r: The rule that encountered an error. + + + :p: The state for the plugin that reported the error. + + + :msg: An optional informational message by the plugin. + +.. bro:id:: NetControl::rule_exists + + :Type: :bro:type:`event` (r: :bro:type:`NetControl::Rule`, p: :bro:type:`NetControl::PluginState`, msg: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) + + Signals that a rule that was supposed to be put in place was already + existing at the specified plugin. Rules that already have been existing + continue to be tracked like normal, but no timeout calls will be sent + to the specified plugins. Removal of the rule from the hardware can + still be forced by manually issuing a remove_rule call. + + + :r: The rule that was already in place. + + + :p: The plugin that reported that the rule already was in place. + + + :msg: An optional informational message by the plugin. + +.. bro:id:: NetControl::rule_new + + :Type: :bro:type:`event` (r: :bro:type:`NetControl::Rule`) + + This event is raised when a new rule is created by the NetControl framework + due to a call to add_rule. From this moment, until the rule_destroyed event + is raised, the rule is tracked internally by the NetControl framework. + + Note that this event does not mean that a rule was successfully added by + any backend; it just means that the rule has been accepted and addition + to the specified backend is queued. To get information when rules are actually + installed by the hardware, use the rule_added, rule_exists, rule_removed, rule_timeout + and rule_error events. + +.. bro:id:: NetControl::rule_removed + + :Type: :bro:type:`event` (r: :bro:type:`NetControl::Rule`, p: :bro:type:`NetControl::PluginState`, msg: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) + + Reports that a plugin reports a rule was removed due to a + remove_rule function call. + + + :r: The rule now removed. + + + :p: The state for the plugin that had the rule in place and now + removed it. + + + :msg: An optional informational message by the plugin. + +.. bro:id:: NetControl::rule_timeout + + :Type: :bro:type:`event` (r: :bro:type:`NetControl::Rule`, i: :bro:type:`NetControl::FlowInfo`, p: :bro:type:`NetControl::PluginState`) + + Reports that a rule was removed from a plugin due to a timeout. + + + :r: The rule now removed. + + + :i: Additional flow information, if supported by the protocol. + + + :p: The state for the plugin that had the rule in place and now + removed it. + + + :msg: An optional informational message by the plugin. + +Hooks +##### +.. bro:id:: NetControl::rule_policy + + :Type: :bro:type:`hook` (r: :bro:type:`NetControl::Rule`) : :bro:type:`bool` + + Hook that allows the modification of rules passed to add_rule before they + are passed on to the plugins. If one of the hooks uses break, the rule is + ignored and not passed on to any plugin. + + + :r: The rule to be added. + +Functions +######### +.. bro:id:: NetControl::activate + + :Type: :bro:type:`function` (p: :bro:type:`NetControl::PluginState`, priority: :bro:type:`int`) : :bro:type:`void` + + Activates a plugin. + + + :p: The plugin to activate. + + + :priority: The higher the priority, the earlier this plugin will be checked + whether it supports an operation, relative to other plugins. + +.. bro:id:: NetControl::add_rule + + :Type: :bro:type:`function` (r: :bro:type:`NetControl::Rule`) : :bro:type:`string` + + Installs a rule. + + + :r: The rule to install. + + + :returns: If successful, returns an ID string unique to the rule that can + later be used to refer to it. If unsuccessful, returns an empty + string. The ID is also assigned to ``r$id``. Note that + "successful" means "a plugin knew how to handle the rule", it + doesn't necessarily mean that it was indeed successfully put in + place, because that might happen asynchronously and thus fail + only later. + +.. bro:id:: NetControl::clear + + :Type: :bro:type:`function` () : :bro:type:`void` + + Flushes all state by calling :bro:see:`NetControl::remove_rule` on all currently active rules. + +.. bro:id:: NetControl::delete_rule + + :Type: :bro:type:`function` (id: :bro:type:`string`, reason: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`bool` + + Deletes a rule without removing it from the backends to which it has been + added before. This means that no messages will be sent to the switches to which + the rule has been added; if it is not removed from them by a separate mechanism, + it will stay installed and not be removed later. + + + :id: The rule to delete, specified as the ID returned by :bro:see:`NetControl::add_rule`. + + + :reason: Optional string argument giving information on why the rule was deleted. + + + :returns: True if removal is successful, or sent to manager. + False if the rule could not be found. + +.. bro:id:: NetControl::find_rules_addr + + :Type: :bro:type:`function` (ip: :bro:type:`addr`) : :bro:type:`vector` of :bro:type:`NetControl::Rule` + + Searches all rules affecting a certain IP address. + + This function works on both the manager and workers of a cluster. Note that on + the worker, the internal rule variables (starting with _) will not reflect the + current state. + + + :ip: The ip address to search for. + + + :returns: vector of all rules affecting the IP address. + +.. bro:id:: NetControl::find_rules_subnet + + :Type: :bro:type:`function` (sn: :bro:type:`subnet`) : :bro:type:`vector` of :bro:type:`NetControl::Rule` + + Searches all rules affecting a certain subnet. + + A rule affects a subnet, if it covers the whole subnet. Note especially that + this function will not reveal all rules that are covered by a subnet. + + For example, a search for 192.168.17.0/8 will reveal a rule that exists for + 192.168.0.0/16, since this rule affects the subnet. However, it will not reveal + a more specific rule for 192.168.17.1/32, which does not directy affect the whole + subnet. + + This function works on both the manager and workers of a cluster. Note that on + the worker, the internal rule variables (starting with _) will not reflect the + current state. + + + :sn: The subnet to search for. + + + :returns: vector of all rules affecting the subnet. + +.. bro:id:: NetControl::plugin_activated + + :Type: :bro:type:`function` (p: :bro:type:`NetControl::PluginState`) : :bro:type:`void` + + Function called by plugins once they finished their activation. After all + plugins defined in bro_init finished to activate, rules will start to be sent + to the plugins. Rules that scripts try to set before the backends are ready + will be discarded. + +.. bro:id:: NetControl::quarantine_host + + :Type: :bro:type:`function` (infected: :bro:type:`addr`, dns: :bro:type:`addr`, quarantine: :bro:type:`addr`, t: :bro:type:`interval`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`vector` of :bro:type:`string` + + Quarantines a host. This requires a special quarantine server, which runs a HTTP server explaining + the quarantine and a DNS server which resolves all requests to the quarantine server. DNS queries + from the host to the network DNS server will be rewritten and will be sent to the quarantine server + instead. Only http communication infected to quarantinehost is allowed. All other network communication + is blocked. + + + :infected: the host to quarantine. + + + :dns: the network dns server. + + + :quarantine: the quarantine server running a dns and a web server. + + + :t: how long to leave the quarantine in place. + + + :returns: Vector of inserted rules on success, empty list on failure. + +.. bro:id:: NetControl::redirect_flow + + :Type: :bro:type:`function` (f: :bro:type:`flow_id`, out_port: :bro:type:`count`, t: :bro:type:`interval`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Redirects a uni-directional flow to another port. + + + :f: The flow to redirect. + + + :out_port: Port to redirect the flow to. + + + :t: How long to leave the redirect in place, with 0 being indefinitely. + + + :location: An optional string describing where the redirect was triggered. + + + :returns: The id of the inserted rule on success and zero on failure. + +.. bro:id:: NetControl::remove_rule + + :Type: :bro:type:`function` (id: :bro:type:`string`, reason: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`bool` + + Removes a rule. + + + :id: The rule to remove, specified as the ID returned by :bro:see:`NetControl::add_rule`. + + + :reason: Optional string argument giving information on why the rule was removed. + + + :returns: True if successful, the relevant plugin indicated that it knew + how to handle the removal. Note that again "success" means the + plugin accepted the removal. It might still fail to put it + into effect, as that might happen asynchronously and thus go + wrong at that point. + +.. bro:id:: NetControl::whitelist_address + + :Type: :bro:type:`function` (a: :bro:type:`addr`, t: :bro:type:`interval`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Allows all traffic involving a specific IP address to be forwarded. + + + :a: The address to be whitelisted. + + + :t: How long to whitelist it, with 0 being indefinitely. + + + :location: An optional string describing whitelist was triddered. + + + :returns: The id of the inserted rule on success and zero on failure. + +.. bro:id:: NetControl::whitelist_subnet + + :Type: :bro:type:`function` (s: :bro:type:`subnet`, t: :bro:type:`interval`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Allows all traffic involving a specific IP subnet to be forwarded. + + + :s: The subnet to be whitelisted. + + + :t: How long to whitelist it, with 0 being indefinitely. + + + :location: An optional string describing whitelist was triddered. + + + :returns: The id of the inserted rule on success and zero on failure. + + diff --git a/doc/scripts/base/frameworks/netcontrol/non-cluster.bro.rst b/doc/scripts/base/frameworks/netcontrol/non-cluster.bro.rst new file mode 100644 index 0000000000..a21644190e --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/non-cluster.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/non-cluster.bro +========================================== +.. bro:namespace:: NetControl + + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/netcontrol/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/netcontrol/plugin.bro.rst b/doc/scripts/base/frameworks/netcontrol/plugin.bro.rst new file mode 100644 index 0000000000..7bd3b8dbcb --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/plugin.bro.rst @@ -0,0 +1,137 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/plugin.bro +===================================== +.. bro:namespace:: NetControl + +This file defines the plugin interface for NetControl. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/netcontrol/types.bro ` + +Summary +~~~~~~~ +Types +##### +======================================================= ===================================================== +:bro:type:`NetControl::Plugin`: :bro:type:`record` Definition of a plugin. +:bro:type:`NetControl::PluginState`: :bro:type:`record` This record keeps the per instance state of a plugin. +======================================================= ===================================================== + +Redefinitions +############# +======================================================= ======================================================================== +:bro:type:`NetControl::PluginState`: :bro:type:`record` Table for a plugin to store instance-specific configuration information. +======================================================= ======================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: NetControl::Plugin + + :Type: :bro:type:`record` + + name: :bro:type:`function` (state: :bro:type:`NetControl::PluginState`) : :bro:type:`string` + Returns a descriptive name of the plugin instance, suitable for use in logging + messages. Note that this function is not optional. + + can_expire: :bro:type:`bool` + If true, plugin can expire rules itself. If false, the NetControl + framework will manage rule expiration. + + init: :bro:type:`function` (state: :bro:type:`NetControl::PluginState`) : :bro:type:`void` :bro:attr:`&optional` + One-time initialization function called when plugin gets registered, and + before any other methods are called. + + If this function is provided, NetControl assumes that the plugin has to + perform, potentially lengthy, initialization before the plugin will become + active. In this case, the plugin has to call ``NetControl::plugin_activated``, + once initialization finishes. + + done: :bro:type:`function` (state: :bro:type:`NetControl::PluginState`) : :bro:type:`void` :bro:attr:`&optional` + One-time finalization function called when a plugin is shutdown; no further + functions will be called afterwords. + + add_rule: :bro:type:`function` (state: :bro:type:`NetControl::PluginState`, r: :bro:type:`NetControl::Rule`) : :bro:type:`bool` :bro:attr:`&optional` + Implements the add_rule() operation. If the plugin accepts the rule, + it returns true, false otherwise. The rule will already have its + ``id`` field set, which the plugin may use for identification + purposes. + + remove_rule: :bro:type:`function` (state: :bro:type:`NetControl::PluginState`, r: :bro:type:`NetControl::Rule`, reason: :bro:type:`string`) : :bro:type:`bool` :bro:attr:`&optional` + Implements the remove_rule() operation. This will only be called for + rules that the plugin has previously accepted with add_rule(). The + ``id`` field will match that of the add_rule() call. Generally, + a plugin that accepts an add_rule() should also accept the + remove_rule(). + + Definition of a plugin. + + Generally a plugin needs to implement only what it can support. By + returning failure, it indicates that it can't support something and + the framework will then try another plugin, if available; or inform the + that the operation failed. If a function isn't implemented by a plugin, + that's considered an implicit failure to support the operation. + + If plugin accepts a rule operation, it *must* generate one of the reporting + events ``rule_{added,remove,error}`` to signal if it indeed worked out; + this is separate from accepting the operation because often a plugin + will only know later (i.e., asynchronously) if that was an error for + something it thought it could handle. + +.. bro:type:: NetControl::PluginState + + :Type: :bro:type:`record` + + config: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + Table for a plugin to store custom, instance-specific state. + + _id: :bro:type:`count` :bro:attr:`&optional` + Unique plugin identifier -- used for backlookup of plugins from Rules. Set internally. + + _priority: :bro:type:`int` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Set internally. + + _activated: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Set internally. Signifies if the plugin has returned that it has activated successfully. + + plugin: :bro:type:`NetControl::Plugin` :bro:attr:`&optional` + The plugin that the state belongs to. (Defined separately + because of cyclic type dependency.) + + of_controller: :bro:type:`OpenFlow::Controller` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/plugins/openflow.bro` is loaded) + + OpenFlow controller for NetControl OpenFlow plugin. + + of_config: :bro:type:`NetControl::OfConfig` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/plugins/openflow.bro` is loaded) + + OpenFlow configuration record that is passed on initialization. + + broker_config: :bro:type:`NetControl::BrokerConfig` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/plugins/broker.bro` is loaded) + + OpenFlow controller for NetControl Broker plugin. + + broker_id: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/plugins/broker.bro` is loaded) + + The ID of this broker instance - for the mapping to PluginStates. + + acld_config: :bro:type:`NetControl::AcldConfig` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/plugins/acld.bro` is loaded) + + + acld_id: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/plugins/acld.bro` is loaded) + + The ID of this acld instance - for the mapping to PluginStates. + + This record keeps the per instance state of a plugin. + + Individual plugins commonly extend this record to suit their needs. + + diff --git a/doc/scripts/base/frameworks/netcontrol/plugins/__load__.bro.rst b/doc/scripts/base/frameworks/netcontrol/plugins/__load__.bro.rst new file mode 100644 index 0000000000..1048d859d3 --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/plugins/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/plugins/__load__.bro +=============================================== + + +:Imports: :doc:`base/frameworks/netcontrol/plugins/acld.bro `, :doc:`base/frameworks/netcontrol/plugins/broker.bro `, :doc:`base/frameworks/netcontrol/plugins/debug.bro `, :doc:`base/frameworks/netcontrol/plugins/openflow.bro `, :doc:`base/frameworks/netcontrol/plugins/packetfilter.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/netcontrol/plugins/acld.bro.rst b/doc/scripts/base/frameworks/netcontrol/plugins/acld.bro.rst new file mode 100644 index 0000000000..f875583559 --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/plugins/acld.bro.rst @@ -0,0 +1,162 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/plugins/acld.bro +=========================================== +.. bro:namespace:: NetControl + +Acld plugin for the netcontrol framework. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/broker `, :doc:`base/frameworks/netcontrol/main.bro `, :doc:`base/frameworks/netcontrol/plugin.bro ` + +Summary +~~~~~~~ +Types +##### +====================================================== = +:bro:type:`NetControl::AclRule`: :bro:type:`record` +:bro:type:`NetControl::AcldConfig`: :bro:type:`record` +====================================================== = + +Redefinitions +############# +======================================================= = +:bro:type:`NetControl::PluginState`: :bro:type:`record` +======================================================= = + +Events +###### +========================================================== ======================================= +:bro:id:`NetControl::acld_add_rule`: :bro:type:`event` Events that are sent from us to Broker. +:bro:id:`NetControl::acld_remove_rule`: :bro:type:`event` +:bro:id:`NetControl::acld_rule_added`: :bro:type:`event` Events that are sent from Broker to us. +:bro:id:`NetControl::acld_rule_error`: :bro:type:`event` +:bro:id:`NetControl::acld_rule_exists`: :bro:type:`event` +:bro:id:`NetControl::acld_rule_removed`: :bro:type:`event` +========================================================== ======================================= + +Hooks +##### +======================================================== ============================================================== +:bro:id:`NetControl::acld_rule_policy`: :bro:type:`hook` Hook that is called after a rule is converted to an acld rule. +======================================================== ============================================================== + +Functions +######### +======================================================= ============================= +:bro:id:`NetControl::create_acld`: :bro:type:`function` Instantiates the acld plugin. +======================================================= ============================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: NetControl::AclRule + + :Type: :bro:type:`record` + + command: :bro:type:`string` + + cookie: :bro:type:`count` + + arg: :bro:type:`string` + + comment: :bro:type:`string` :bro:attr:`&optional` + + +.. bro:type:: NetControl::AcldConfig + + :Type: :bro:type:`record` + + acld_topic: :bro:type:`string` + The acld topic to send events to. + + acld_host: :bro:type:`addr` + Broker host to connect to. + + acld_port: :bro:type:`port` + Broker port to connect to. + + monitor: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Do we accept rules for the monitor path? Default false. + + forward: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Do we accept rules for the forward path? Default true. + + check_pred: :bro:type:`function` (p: :bro:type:`NetControl::PluginState`, r: :bro:type:`NetControl::Rule`) : :bro:type:`bool` :bro:attr:`&optional` + Predicate that is called on rule insertion or removal. + + + :p: Current plugin state. + + + :r: The rule to be inserted or removed. + + + :returns: T if the rule can be handled by the current backend, F otherwise. + + +Events +###### +.. bro:id:: NetControl::acld_add_rule + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, ar: :bro:type:`NetControl::AclRule`) + + Events that are sent from us to Broker. + +.. bro:id:: NetControl::acld_remove_rule + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, ar: :bro:type:`NetControl::AclRule`) + + +.. bro:id:: NetControl::acld_rule_added + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, msg: :bro:type:`string`) + + Events that are sent from Broker to us. + +.. bro:id:: NetControl::acld_rule_error + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, msg: :bro:type:`string`) + + +.. bro:id:: NetControl::acld_rule_exists + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, msg: :bro:type:`string`) + + +.. bro:id:: NetControl::acld_rule_removed + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, msg: :bro:type:`string`) + + +Hooks +##### +.. bro:id:: NetControl::acld_rule_policy + + :Type: :bro:type:`hook` (p: :bro:type:`NetControl::PluginState`, r: :bro:type:`NetControl::Rule`, ar: :bro:type:`NetControl::AclRule`) : :bro:type:`bool` + + Hook that is called after a rule is converted to an acld rule. + The hook may modify the rule before it is sent to acld. + Setting the acld command to F will cause the rule to be rejected + by the plugin. + + + :p: Current plugin state. + + + :r: The rule to be inserted or removed. + + + :ar: The acld rule to be inserted or removed. + +Functions +######### +.. bro:id:: NetControl::create_acld + + :Type: :bro:type:`function` (config: :bro:type:`NetControl::AcldConfig`) : :bro:type:`NetControl::PluginState` + + Instantiates the acld plugin. + + diff --git a/doc/scripts/base/frameworks/netcontrol/plugins/broker.bro.rst b/doc/scripts/base/frameworks/netcontrol/plugins/broker.bro.rst new file mode 100644 index 0000000000..2644ad868a --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/plugins/broker.bro.rst @@ -0,0 +1,129 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/plugins/broker.bro +============================================= +.. bro:namespace:: NetControl + +Broker plugin for the NetControl framework. Sends the raw data structures +used in NetControl on to Broker to allow for easy handling, e.g., of +command-line scripts. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/broker `, :doc:`base/frameworks/netcontrol/main.bro `, :doc:`base/frameworks/netcontrol/plugin.bro ` + +Summary +~~~~~~~ +Types +##### +======================================================== =============================================================================================== +:bro:type:`NetControl::BrokerConfig`: :bro:type:`record` This record specifies the configuration that is passed to :bro:see:`NetControl::create_broker`. +======================================================== =============================================================================================== + +Redefinitions +############# +======================================================= = +:bro:type:`NetControl::PluginState`: :bro:type:`record` +======================================================= = + +Events +###### +============================================================ = +:bro:id:`NetControl::broker_add_rule`: :bro:type:`event` +:bro:id:`NetControl::broker_remove_rule`: :bro:type:`event` +:bro:id:`NetControl::broker_rule_added`: :bro:type:`event` +:bro:id:`NetControl::broker_rule_error`: :bro:type:`event` +:bro:id:`NetControl::broker_rule_exists`: :bro:type:`event` +:bro:id:`NetControl::broker_rule_removed`: :bro:type:`event` +:bro:id:`NetControl::broker_rule_timeout`: :bro:type:`event` +============================================================ = + +Functions +######### +========================================================= =============================== +:bro:id:`NetControl::create_broker`: :bro:type:`function` Instantiates the broker plugin. +========================================================= =============================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: NetControl::BrokerConfig + + :Type: :bro:type:`record` + + topic: :bro:type:`string` :bro:attr:`&optional` + The broker topic to send events to. + + host: :bro:type:`addr` :bro:attr:`&optional` + Broker host to connect to. + + bport: :bro:type:`port` :bro:attr:`&optional` + Broker port to connect to. + + monitor: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Do we accept rules for the monitor path? Default true. + + forward: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Do we accept rules for the forward path? Default true. + + check_pred: :bro:type:`function` (p: :bro:type:`NetControl::PluginState`, r: :bro:type:`NetControl::Rule`) : :bro:type:`bool` :bro:attr:`&optional` + Predicate that is called on rule insertion or removal. + + + :p: Current plugin state. + + + :r: The rule to be inserted or removed. + + + :returns: T if the rule can be handled by the current backend, F otherwise. + + This record specifies the configuration that is passed to :bro:see:`NetControl::create_broker`. + +Events +###### +.. bro:id:: NetControl::broker_add_rule + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`) + + +.. bro:id:: NetControl::broker_remove_rule + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, reason: :bro:type:`string`) + + +.. bro:id:: NetControl::broker_rule_added + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, msg: :bro:type:`string`) + + +.. bro:id:: NetControl::broker_rule_error + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, msg: :bro:type:`string`) + + +.. bro:id:: NetControl::broker_rule_exists + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, msg: :bro:type:`string`) + + +.. bro:id:: NetControl::broker_rule_removed + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, msg: :bro:type:`string`) + + +.. bro:id:: NetControl::broker_rule_timeout + + :Type: :bro:type:`event` (id: :bro:type:`count`, r: :bro:type:`NetControl::Rule`, i: :bro:type:`NetControl::FlowInfo`) + + +Functions +######### +.. bro:id:: NetControl::create_broker + + :Type: :bro:type:`function` (config: :bro:type:`NetControl::BrokerConfig`, can_expire: :bro:type:`bool`) : :bro:type:`NetControl::PluginState` + + Instantiates the broker plugin. + + diff --git a/doc/scripts/base/frameworks/netcontrol/plugins/debug.bro.rst b/doc/scripts/base/frameworks/netcontrol/plugins/debug.bro.rst new file mode 100644 index 0000000000..dd1a301e93 --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/plugins/debug.bro.rst @@ -0,0 +1,37 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/plugins/debug.bro +============================================ +.. bro:namespace:: NetControl + +Debugging plugin for the NetControl framework, providing insight into +executed operations. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/netcontrol/main.bro `, :doc:`base/frameworks/netcontrol/plugin.bro ` + +Summary +~~~~~~~ +Functions +######### +======================================================== ========================================================= +:bro:id:`NetControl::create_debug`: :bro:type:`function` Instantiates a debug plugin for the NetControl framework. +======================================================== ========================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: NetControl::create_debug + + :Type: :bro:type:`function` (do_something: :bro:type:`bool`) : :bro:type:`NetControl::PluginState` + + Instantiates a debug plugin for the NetControl framework. The debug + plugin simply logs the operations it receives. + + + :do_something: If true, the plugin will claim it supports all operations; if + false, it will indicate it doesn't support any. + + diff --git a/doc/scripts/base/frameworks/netcontrol/plugins/index.rst b/doc/scripts/base/frameworks/netcontrol/plugins/index.rst new file mode 100644 index 0000000000..97f08e20c5 --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/plugins/index.rst @@ -0,0 +1,36 @@ +:orphan: + +Package: base/frameworks/netcontrol/plugins +=========================================== + +Plugins for the NetControl framework. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/__load__.bro` + + +:doc:`/scripts/base/frameworks/netcontrol/plugins/debug.bro` + + Debugging plugin for the NetControl framework, providing insight into + executed operations. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/openflow.bro` + + OpenFlow plugin for the NetControl framework. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/packetfilter.bro` + + NetControl plugin for the process-level PacketFilter that comes with + Bro. Since the PacketFilter in Bro is quite limited in scope + and can only add/remove filters for addresses, this is quite + limited in scope at the moment. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/broker.bro` + + Broker plugin for the NetControl framework. Sends the raw data structures + used in NetControl on to Broker to allow for easy handling, e.g., of + command-line scripts. + +:doc:`/scripts/base/frameworks/netcontrol/plugins/acld.bro` + + Acld plugin for the netcontrol framework. + diff --git a/doc/scripts/base/frameworks/netcontrol/plugins/openflow.bro.rst b/doc/scripts/base/frameworks/netcontrol/plugins/openflow.bro.rst new file mode 100644 index 0000000000..33d10a2ca9 --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/plugins/openflow.bro.rst @@ -0,0 +1,158 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/plugins/openflow.bro +=============================================== +.. bro:namespace:: NetControl + +OpenFlow plugin for the NetControl framework. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/netcontrol/main.bro `, :doc:`base/frameworks/netcontrol/plugin.bro `, :doc:`base/frameworks/openflow ` + +Summary +~~~~~~~ +Redefinable Options +################### +======================================================================================= =============================================================================== +:bro:id:`NetControl::openflow_flow_timeout`: :bro:type:`interval` :bro:attr:`&redef` The time interval after we consider a flow timed out. +:bro:id:`NetControl::openflow_message_timeout`: :bro:type:`interval` :bro:attr:`&redef` The time interval after which an openflow message is considered to be timed out + and we delete it from our internal tracking. +======================================================================================= =============================================================================== + +Types +##### +==================================================== ================================================================================================= +:bro:type:`NetControl::OfConfig`: :bro:type:`record` This record specifies the configuration that is passed to :bro:see:`NetControl::create_openflow`. +:bro:type:`NetControl::OfTable`: :bro:type:`record` +==================================================== ================================================================================================= + +Redefinitions +############# +======================================================= = +:bro:type:`NetControl::PluginState`: :bro:type:`record` +======================================================= = + +Functions +######### +=========================================================== ============================================================= +:bro:id:`NetControl::create_openflow`: :bro:type:`function` Instantiates an openflow plugin for the NetControl framework. +=========================================================== ============================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: NetControl::openflow_flow_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 day`` + + The time interval after we consider a flow timed out. This should be fairly high (or + even disabled) if you expect a lot of long flows. However, one also will have state + buildup for quite a while if keeping this around... + +.. bro:id:: NetControl::openflow_message_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``20.0 secs`` + + The time interval after which an openflow message is considered to be timed out + and we delete it from our internal tracking. + +Types +##### +.. bro:type:: NetControl::OfConfig + + :Type: :bro:type:`record` + + monitor: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Accept rules that target the monitor path. + + forward: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Accept rules that target the forward path. + + idle_timeout: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Default OpenFlow idle timeout. + + table_id: :bro:type:`count` :bro:attr:`&optional` + Default OpenFlow table ID. + + priority_offset: :bro:type:`int` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Add this to all rule priorities. Can be useful if you want the openflow priorities be offset from the netcontrol priorities without having to write a filter function. + + check_pred: :bro:type:`function` (p: :bro:type:`NetControl::PluginState`, r: :bro:type:`NetControl::Rule`) : :bro:type:`bool` :bro:attr:`&optional` + Predicate that is called on rule insertion or removal. + + + :p: Current plugin state. + + + :r: The rule to be inserted or removed. + + + :returns: T if the rule can be handled by the current backend, F otherwise. + + match_pred: :bro:type:`function` (p: :bro:type:`NetControl::PluginState`, e: :bro:type:`NetControl::Entity`, m: :bro:type:`vector` of :bro:type:`OpenFlow::ofp_match`) : :bro:type:`vector` of :bro:type:`OpenFlow::ofp_match` :bro:attr:`&optional` + This predicate is called each time an OpenFlow match record is created. + The predicate can modify the match structure before it is sent on to the + device. + + + :p: Current plugin state. + + + :r: The rule to be inserted or removed. + + + :m: The openflow match structures that were generated for this rules. + + + :returns: The modified OpenFlow match structures that will be used in place of the structures passed in m. + + flow_mod_pred: :bro:type:`function` (p: :bro:type:`NetControl::PluginState`, r: :bro:type:`NetControl::Rule`, m: :bro:type:`OpenFlow::ofp_flow_mod`) : :bro:type:`OpenFlow::ofp_flow_mod` :bro:attr:`&optional` + This predicate is called before a FlowMod message is sent to the OpenFlow + device. It can modify the FlowMod message before it is passed on. + + + :p: Current plugin state. + + + :r: The rule to be inserted or removed. + + + :m: The OpenFlow FlowMod message. + + + :returns: The modified FlowMod message that is used in lieu of m. + + This record specifies the configuration that is passed to :bro:see:`NetControl::create_openflow`. + +.. bro:type:: NetControl::OfTable + + :Type: :bro:type:`record` + + p: :bro:type:`NetControl::PluginState` + + r: :bro:type:`NetControl::Rule` + + c: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + + packet_count: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + + byte_count: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + + duration_sec: :bro:type:`double` :bro:attr:`&default` = ``0.0`` :bro:attr:`&optional` + + +Functions +######### +.. bro:id:: NetControl::create_openflow + + :Type: :bro:type:`function` (controller: :bro:type:`OpenFlow::Controller`, config: :bro:type:`NetControl::OfConfig` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional`) : :bro:type:`NetControl::PluginState` + + Instantiates an openflow plugin for the NetControl framework. + + diff --git a/doc/scripts/base/frameworks/netcontrol/plugins/packetfilter.bro.rst b/doc/scripts/base/frameworks/netcontrol/plugins/packetfilter.bro.rst new file mode 100644 index 0000000000..a7864ac936 --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/plugins/packetfilter.bro.rst @@ -0,0 +1,34 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/plugins/packetfilter.bro +=================================================== +.. bro:namespace:: NetControl + +NetControl plugin for the process-level PacketFilter that comes with +Bro. Since the PacketFilter in Bro is quite limited in scope +and can only add/remove filters for addresses, this is quite +limited in scope at the moment. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/netcontrol/plugin.bro ` + +Summary +~~~~~~~ +Functions +######### +=============================================================== ===================================== +:bro:id:`NetControl::create_packetfilter`: :bro:type:`function` Instantiates the packetfilter plugin. +=============================================================== ===================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: NetControl::create_packetfilter + + :Type: :bro:type:`function` () : :bro:type:`NetControl::PluginState` + + Instantiates the packetfilter plugin. + + diff --git a/doc/scripts/base/frameworks/netcontrol/shunt.bro.rst b/doc/scripts/base/frameworks/netcontrol/shunt.bro.rst new file mode 100644 index 0000000000..849161e9ea --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/shunt.bro.rst @@ -0,0 +1,93 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/shunt.bro +==================================== +.. bro:namespace:: NetControl + +Implementation of the shunt functionality for NetControl. + +:Namespace: NetControl +:Imports: :doc:`base/frameworks/netcontrol/main.bro ` + +Summary +~~~~~~~ +Types +##### +===================================================== = +:bro:type:`NetControl::ShuntInfo`: :bro:type:`record` +===================================================== = + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +============================================================= ========================================================================= +:bro:id:`NetControl::log_netcontrol_shunt`: :bro:type:`event` Event that can be handled to access the :bro:type:`NetControl::ShuntInfo` + record as it is sent on to the logging framework. +============================================================= ========================================================================= + +Functions +######### +====================================================== ========================================================= +:bro:id:`NetControl::shunt_flow`: :bro:type:`function` Stops forwarding a uni-directional flow's packets to Bro. +====================================================== ========================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: NetControl::ShuntInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time at which the recorded activity occurred. + + rule_id: :bro:type:`string` :bro:attr:`&log` + ID of the rule; unique during each Bro run. + + f: :bro:type:`flow_id` :bro:attr:`&log` + Flow ID of the shunted flow. + + expire: :bro:type:`interval` :bro:attr:`&log` + Expiry time of the shunt. + + location: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Location where the underlying action was triggered. + + +Events +###### +.. bro:id:: NetControl::log_netcontrol_shunt + + :Type: :bro:type:`event` (rec: :bro:type:`NetControl::ShuntInfo`) + + Event that can be handled to access the :bro:type:`NetControl::ShuntInfo` + record as it is sent on to the logging framework. + +Functions +######### +.. bro:id:: NetControl::shunt_flow + + :Type: :bro:type:`function` (f: :bro:type:`flow_id`, t: :bro:type:`interval`, location: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) : :bro:type:`string` + + Stops forwarding a uni-directional flow's packets to Bro. + + + :f: The flow to shunt. + + + :t: How long to leave the shunt in place, with 0 being indefinitely. + + + :location: An optional string describing where the shunt was triggered. + + + :returns: The id of the inserted rule on success and zero on failure. + + diff --git a/doc/scripts/base/frameworks/netcontrol/types.bro.rst b/doc/scripts/base/frameworks/netcontrol/types.bro.rst new file mode 100644 index 0000000000..1e3564798a --- /dev/null +++ b/doc/scripts/base/frameworks/netcontrol/types.bro.rst @@ -0,0 +1,296 @@ +:tocdepth: 3 + +base/frameworks/netcontrol/types.bro +==================================== +.. bro:namespace:: NetControl + +This file defines the types that are used by the NetControl framework. + +The most important type defined in this file is :bro:see:`NetControl::Rule`, +which is used to describe all rules that can be expressed by the NetControl framework. + +:Namespace: NetControl + +Summary +~~~~~~~ +Runtime Options +############### +========================================================================== ====================================================== +:bro:id:`NetControl::default_priority`: :bro:type:`int` :bro:attr:`&redef` The default priority that is used when creating rules. +========================================================================== ====================================================== + +Redefinable Options +################### +============================================================================ ==================================================================================== +:bro:id:`NetControl::whitelist_priority`: :bro:type:`int` :bro:attr:`&redef` The default priority that is used when using the high-level functions to + push whitelist entries to the backends (:bro:see:`NetControl::whitelist_address` and + :bro:see:`NetControl::whitelist_subnet`). +============================================================================ ==================================================================================== + +Types +##### +==================================================== ==================================================================================================== +:bro:type:`NetControl::Entity`: :bro:type:`record` Type defining the entity a rule is operating on. +:bro:type:`NetControl::EntityType`: :bro:type:`enum` Type defining the entity that a rule applies to. +:bro:type:`NetControl::Flow`: :bro:type:`record` Flow is used in :bro:type:`NetControl::Entity` together with :bro:enum:`NetControl::FLOW` to specify + a uni-directional flow that a rule applies to. +:bro:type:`NetControl::FlowInfo`: :bro:type:`record` Information of a flow that can be provided by switches when the flow times out. +:bro:type:`NetControl::FlowMod`: :bro:type:`record` Type for defining a flow modification action. +:bro:type:`NetControl::Rule`: :bro:type:`record` A rule for the framework to put in place. +:bro:type:`NetControl::RuleType`: :bro:type:`enum` Type of rules that the framework supports. +:bro:type:`NetControl::TargetType`: :bro:type:`enum` Type defining the target of a rule. +==================================================== ==================================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: NetControl::default_priority + + :Type: :bro:type:`int` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + The default priority that is used when creating rules. + +Redefinable Options +################### +.. bro:id:: NetControl::whitelist_priority + + :Type: :bro:type:`int` + :Attributes: :bro:attr:`&redef` + :Default: ``5`` + + The default priority that is used when using the high-level functions to + push whitelist entries to the backends (:bro:see:`NetControl::whitelist_address` and + :bro:see:`NetControl::whitelist_subnet`). + + Note that this priority is not automatically used when manually creating rules + that have a :bro:see:`NetControl::RuleType` of :bro:enum:`NetControl::WHITELIST`. + +Types +##### +.. bro:type:: NetControl::Entity + + :Type: :bro:type:`record` + + ty: :bro:type:`NetControl::EntityType` + Type of entity. + + conn: :bro:type:`conn_id` :bro:attr:`&optional` + Used with :bro:enum:`NetControl::CONNECTION`. + + flow: :bro:type:`NetControl::Flow` :bro:attr:`&optional` + Used with :bro:enum:`NetControl::FLOW`. + + ip: :bro:type:`subnet` :bro:attr:`&optional` + Used with :bro:enum:`NetControl::ADDRESS` to specifiy a CIDR subnet. + + mac: :bro:type:`string` :bro:attr:`&optional` + Used with :bro:enum:`NetControl::MAC`. + + Type defining the entity a rule is operating on. + +.. bro:type:: NetControl::EntityType + + :Type: :bro:type:`enum` + + .. bro:enum:: NetControl::ADDRESS NetControl::EntityType + + Activity involving a specific IP address. + + .. bro:enum:: NetControl::CONNECTION NetControl::EntityType + + Activity involving all of a bi-directional connection's activity. + + .. bro:enum:: NetControl::FLOW NetControl::EntityType + + Activity involving a uni-directional flow's activity. Can contain wildcards. + + .. bro:enum:: NetControl::MAC NetControl::EntityType + + Activity involving a MAC address. + + Type defining the entity that a rule applies to. + +.. bro:type:: NetControl::Flow + + :Type: :bro:type:`record` + + src_h: :bro:type:`subnet` :bro:attr:`&optional` + The source IP address/subnet. + + src_p: :bro:type:`port` :bro:attr:`&optional` + The source port number. + + dst_h: :bro:type:`subnet` :bro:attr:`&optional` + The destination IP address/subnet. + + dst_p: :bro:type:`port` :bro:attr:`&optional` + The destination port number. + + src_m: :bro:type:`string` :bro:attr:`&optional` + The source MAC address. + + dst_m: :bro:type:`string` :bro:attr:`&optional` + The destination MAC address. + + Flow is used in :bro:type:`NetControl::Entity` together with :bro:enum:`NetControl::FLOW` to specify + a uni-directional flow that a rule applies to. + + If optional fields are not set, they are interpreted as wildcarded. + +.. bro:type:: NetControl::FlowInfo + + :Type: :bro:type:`record` + + duration: :bro:type:`interval` :bro:attr:`&optional` + Total duration of the rule. + + packet_count: :bro:type:`count` :bro:attr:`&optional` + Number of packets exchanged over connections matched by the rule. + + byte_count: :bro:type:`count` :bro:attr:`&optional` + Total bytes exchanged over connections matched by the rule. + + Information of a flow that can be provided by switches when the flow times out. + Currently this is heavily influenced by the data that OpenFlow returns by default. + That being said - their design makes sense and this is probably the data one + can expect to be available. + +.. bro:type:: NetControl::FlowMod + + :Type: :bro:type:`record` + + src_h: :bro:type:`addr` :bro:attr:`&optional` + The source IP address. + + src_p: :bro:type:`count` :bro:attr:`&optional` + The source port number. + + dst_h: :bro:type:`addr` :bro:attr:`&optional` + The destination IP address. + + dst_p: :bro:type:`count` :bro:attr:`&optional` + The destination port number. + + src_m: :bro:type:`string` :bro:attr:`&optional` + The source MAC address. + + dst_m: :bro:type:`string` :bro:attr:`&optional` + The destination MAC address. + + redirect_port: :bro:type:`count` :bro:attr:`&optional` + + Type for defining a flow modification action. + +.. bro:type:: NetControl::Rule + + :Type: :bro:type:`record` + + ty: :bro:type:`NetControl::RuleType` + Type of rule. + + target: :bro:type:`NetControl::TargetType` + Where to apply rule. + + entity: :bro:type:`NetControl::Entity` + Entity to apply rule to. + + expire: :bro:type:`interval` :bro:attr:`&optional` + Timeout after which to expire the rule. + + priority: :bro:type:`int` :bro:attr:`&default` = :bro:see:`NetControl::default_priority` :bro:attr:`&optional` + Priority if multiple rules match an entity (larger value is higher priority). + + location: :bro:type:`string` :bro:attr:`&optional` + Optional string describing where/what installed the rule. + + out_port: :bro:type:`count` :bro:attr:`&optional` + Argument for :bro:enum:`NetControl::REDIRECT` rules. + + mod: :bro:type:`NetControl::FlowMod` :bro:attr:`&optional` + Argument for :bro:enum:`NetControl::MODIFY` rules. + + id: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + Internally determined unique ID for this rule. Will be set when added. + + cid: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Internally determined unique numeric ID for this rule. Set when added. + + _plugin_ids: :bro:type:`set` [:bro:type:`count`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/main.bro` is loaded) + + Internally set to the plugins handling the rule. + + _active_plugin_ids: :bro:type:`set` [:bro:type:`count`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/main.bro` is loaded) + + Internally set to the plugins on which the rule is currently active. + + _no_expire_plugins: :bro:type:`set` [:bro:type:`count`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/main.bro` is loaded) + + Internally set to plugins where the rule should not be removed upon timeout. + + _added: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/netcontrol/main.bro` is loaded) + + Track if the rule was added successfully by all responsible plugins. + + A rule for the framework to put in place. Of all rules currently in + place, the first match will be taken, sorted by priority. All + further rules will be ignored. + +.. bro:type:: NetControl::RuleType + + :Type: :bro:type:`enum` + + .. bro:enum:: NetControl::DROP NetControl::RuleType + + Stop forwarding all packets matching the entity. + + No additional arguments. + + .. bro:enum:: NetControl::MODIFY NetControl::RuleType + + Modify all packets matching entity. The packets + will be modified according to the `mod` entry of + the rule. + + + .. bro:enum:: NetControl::REDIRECT NetControl::RuleType + + Redirect all packets matching entity to a different switch port, + given in the `out_port` argument of the rule. + + + .. bro:enum:: NetControl::WHITELIST NetControl::RuleType + + Whitelists all packets of an entity, meaning no restrictions will be applied. + While whitelisting is the default if no rule matches, this type can be + used to override lower-priority rules that would otherwise take effect for the + entity. + + Type of rules that the framework supports. Each type lists the extra + :bro:type:`NetControl::Rule` fields it uses, if any. + + Plugins may extend this type to define their own. + +.. bro:type:: NetControl::TargetType + + :Type: :bro:type:`enum` + + .. bro:enum:: NetControl::FORWARD NetControl::TargetType + + .. bro:enum:: NetControl::MONITOR NetControl::TargetType + + Type defining the target of a rule. + + Rules can either be applied to the forward path, affecting all network traffic, or + on the monitor path, only affecting the traffic that is sent to Bro. The second + is mostly used for shunting, which allows Bro to tell the networking hardware that + it wants to no longer see traffic that it identified as benign. + + diff --git a/doc/scripts/base/frameworks/notice/__load__.bro.rst b/doc/scripts/base/frameworks/notice/__load__.bro.rst new file mode 100644 index 0000000000..5496c0b3ac --- /dev/null +++ b/doc/scripts/base/frameworks/notice/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/notice/__load__.bro +=================================== + + +:Imports: :doc:`base/frameworks/notice/actions/add-geodata.bro `, :doc:`base/frameworks/notice/actions/drop.bro `, :doc:`base/frameworks/notice/actions/email_admin.bro `, :doc:`base/frameworks/notice/actions/page.bro `, :doc:`base/frameworks/notice/actions/pp-alarms.bro `, :doc:`base/frameworks/notice/main.bro `, :doc:`base/frameworks/notice/weird.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/notice/actions/add-geodata.bro.rst b/doc/scripts/base/frameworks/notice/actions/add-geodata.bro.rst new file mode 100644 index 0000000000..b9fb0669a0 --- /dev/null +++ b/doc/scripts/base/frameworks/notice/actions/add-geodata.bro.rst @@ -0,0 +1,45 @@ +:tocdepth: 3 + +base/frameworks/notice/actions/add-geodata.bro +============================================== +.. bro:namespace:: Notice + +This script adds geographic location data to notices for the "remote" +host in a connection. It does make the assumption that one of the +addresses in a connection is "local" and one is "remote" which is +probably a safe assumption to make in most cases. If both addresses +are remote, it will use the $src address. + +:Namespace: Notice +:Imports: :doc:`base/frameworks/notice `, :doc:`base/frameworks/notice/main.bro `, :doc:`base/utils/site.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +=========================================================================== =============================================================== +:bro:id:`Notice::lookup_location_types`: :bro:type:`set` :bro:attr:`&redef` Notice types which should have the "remote" location looked up. +=========================================================================== =============================================================== + +Redefinitions +############# +============================================ = +:bro:type:`Notice::Action`: :bro:type:`enum` +:bro:type:`Notice::Info`: :bro:type:`record` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Notice::lookup_location_types + + :Type: :bro:type:`set` [:bro:type:`Notice::Type`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Notice types which should have the "remote" location looked up. + If GeoIP support is not built in, this does nothing. + + diff --git a/doc/scripts/base/frameworks/notice/actions/drop.bro.rst b/doc/scripts/base/frameworks/notice/actions/drop.bro.rst new file mode 100644 index 0000000000..90172813a4 --- /dev/null +++ b/doc/scripts/base/frameworks/notice/actions/drop.bro.rst @@ -0,0 +1,25 @@ +:tocdepth: 3 + +base/frameworks/notice/actions/drop.bro +======================================= +.. bro:namespace:: Notice + +This script extends the built in notice code to implement the IP address +dropping functionality. + +:Namespace: Notice +:Imports: :doc:`base/frameworks/netcontrol `, :doc:`base/frameworks/notice/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================ = +:bro:type:`Notice::Action`: :bro:type:`enum` +:bro:type:`Notice::Info`: :bro:type:`record` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/notice/actions/email_admin.bro.rst b/doc/scripts/base/frameworks/notice/actions/email_admin.bro.rst new file mode 100644 index 0000000000..eb7611a1a9 --- /dev/null +++ b/doc/scripts/base/frameworks/notice/actions/email_admin.bro.rst @@ -0,0 +1,26 @@ +:tocdepth: 3 + +base/frameworks/notice/actions/email_admin.bro +============================================== +.. bro:namespace:: Notice + +Adds a new notice action type which can be used to email notices +to the administrators of a particular address space as set by +:bro:id:`Site::local_admins` if the notice contains a source +or destination address that lies within their space. + +:Namespace: Notice +:Imports: :doc:`base/frameworks/notice/main.bro `, :doc:`base/utils/site.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================ = +:bro:type:`Notice::Action`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/notice/actions/page.bro.rst b/doc/scripts/base/frameworks/notice/actions/page.bro.rst new file mode 100644 index 0000000000..1d84c519d4 --- /dev/null +++ b/doc/scripts/base/frameworks/notice/actions/page.bro.rst @@ -0,0 +1,41 @@ +:tocdepth: 3 + +base/frameworks/notice/actions/page.bro +======================================= +.. bro:namespace:: Notice + +Allows configuration of a pager email address to which notices can be sent. + +:Namespace: Notice +:Imports: :doc:`base/frameworks/notice/main.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +======================================================================= ====================================================================== +:bro:id:`Notice::mail_page_dest`: :bro:type:`string` :bro:attr:`&redef` Email address to send notices with the :bro:enum:`Notice::ACTION_PAGE` + action. +======================================================================= ====================================================================== + +Redefinitions +############# +============================================ = +:bro:type:`Notice::Action`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Notice::mail_page_dest + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Email address to send notices with the :bro:enum:`Notice::ACTION_PAGE` + action. + + diff --git a/doc/scripts/base/frameworks/notice/actions/pp-alarms.bro.rst b/doc/scripts/base/frameworks/notice/actions/pp-alarms.bro.rst new file mode 100644 index 0000000000..e32b4246cd --- /dev/null +++ b/doc/scripts/base/frameworks/notice/actions/pp-alarms.bro.rst @@ -0,0 +1,92 @@ +:tocdepth: 3 + +base/frameworks/notice/actions/pp-alarms.bro +============================================ +.. bro:namespace:: Notice + +Notice extension that mails out a pretty-printed version of alarm.log +in regular intervals, formatted for better human readability. If activated, +that replaces the default summary mail having the raw log output. + +:Namespace: Notice +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/notice/main.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================================= ============================================== +:bro:id:`Notice::mail_dest_pretty_printed`: :bro:type:`string` :bro:attr:`&redef` Address to send the pretty-printed reports to. +:bro:id:`Notice::pretty_print_alarms`: :bro:type:`bool` :bro:attr:`&redef` Activate pretty-printed alarm summaries. +================================================================================= ============================================== + +State Variables +############### +============================================================================ ================================================================== +:bro:id:`Notice::flag_nets`: :bro:type:`set` :bro:attr:`&redef` If an address from one of these networks is reported, we mark + the entry with an additional quote symbol (i.e., ">"). +:bro:id:`Notice::force_email_summaries`: :bro:type:`bool` :bro:attr:`&redef` Force generating mail file, even if reading from traces or no mail + destination is defined. +============================================================================ ================================================================== + +Functions +######### +============================================================================= ===================================== +:bro:id:`Notice::pretty_print_alarm`: :bro:type:`function` :bro:attr:`&redef` Function that renders a single alarm. +============================================================================= ===================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Notice::mail_dest_pretty_printed + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Address to send the pretty-printed reports to. Default if not set is + :bro:id:`Notice::mail_dest`. + + Note that this is overridden by the BroControl MailAlarmsTo option. + +.. bro:id:: Notice::pretty_print_alarms + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Activate pretty-printed alarm summaries. + +State Variables +############### +.. bro:id:: Notice::flag_nets + + :Type: :bro:type:`set` [:bro:type:`subnet`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + If an address from one of these networks is reported, we mark + the entry with an additional quote symbol (i.e., ">"). Many MUAs + then highlight such lines differently. + +.. bro:id:: Notice::force_email_summaries + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Force generating mail file, even if reading from traces or no mail + destination is defined. This is mainly for testing. + +Functions +######### +.. bro:id:: Notice::pretty_print_alarm + + :Type: :bro:type:`function` (out: :bro:type:`file`, n: :bro:type:`Notice::Info`) : :bro:type:`void` + :Attributes: :bro:attr:`&redef` + + Function that renders a single alarm. Can be overridden. + + diff --git a/doc/scripts/base/frameworks/notice/index.rst b/doc/scripts/base/frameworks/notice/index.rst new file mode 100644 index 0000000000..2248ae0f2c --- /dev/null +++ b/doc/scripts/base/frameworks/notice/index.rst @@ -0,0 +1,62 @@ +:orphan: + +Package: base/frameworks/notice +=============================== + +The notice framework enables Bro to "notice" things which are odd or +potentially bad, leaving it to the local configuration to define which +of them are actionable. This decoupling of detection and reporting allows +Bro to be customized to the different needs that sites have. + +:doc:`/scripts/base/frameworks/notice/__load__.bro` + + +:doc:`/scripts/base/frameworks/notice/main.bro` + + This is the notice framework which enables Bro to "notice" things which + are odd or potentially bad. Decisions of the meaning of various notices + need to be done per site because Bro does not ship with assumptions about + what is bad activity for sites. More extensive documentation about using + the notice framework can be found in :doc:`/frameworks/notice`. + +:doc:`/scripts/base/frameworks/notice/weird.bro` + + This script provides a default set of actions to take for "weird activity" + events generated from Bro's event engine. Weird activity is defined as + unusual or exceptional activity that can indicate malformed connections, + traffic that doesn't conform to a particular protocol, malfunctioning + or misconfigured hardware, or even an attacker attempting to avoid/confuse + a sensor. Without context, it's hard to judge whether a particular + category of weird activity is interesting, but this script provides + a starting point for the user. + +:doc:`/scripts/base/frameworks/notice/actions/drop.bro` + + This script extends the built in notice code to implement the IP address + dropping functionality. + +:doc:`/scripts/base/frameworks/notice/actions/email_admin.bro` + + Adds a new notice action type which can be used to email notices + to the administrators of a particular address space as set by + :bro:id:`Site::local_admins` if the notice contains a source + or destination address that lies within their space. + +:doc:`/scripts/base/frameworks/notice/actions/page.bro` + + Allows configuration of a pager email address to which notices can be sent. + +:doc:`/scripts/base/frameworks/notice/actions/add-geodata.bro` + + This script adds geographic location data to notices for the "remote" + host in a connection. It does make the assumption that one of the + addresses in a connection is "local" and one is "remote" which is + probably a safe assumption to make in most cases. If both addresses + are remote, it will use the $src address. + +:doc:`/scripts/base/frameworks/notice/actions/pp-alarms.bro` + + Notice extension that mails out a pretty-printed version of alarm.log + in regular intervals, formatted for better human readability. If activated, + that replaces the default summary mail having the raw log output. + diff --git a/doc/scripts/base/frameworks/notice/main.bro.rst b/doc/scripts/base/frameworks/notice/main.bro.rst new file mode 100644 index 0000000000..d2a6daa43b --- /dev/null +++ b/doc/scripts/base/frameworks/notice/main.bro.rst @@ -0,0 +1,1063 @@ +:tocdepth: 3 + +base/frameworks/notice/main.bro +=============================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: Notice + +This is the notice framework which enables Bro to "notice" things which +are odd or potentially bad. Decisions of the meaning of various notices +need to be done per site because Bro does not ship with assumptions about +what is bad activity for sites. More extensive documentation about using +the notice framework can be found in :doc:`/frameworks/notice`. + +:Namespaces: GLOBAL, Notice +:Imports: :doc:`base/frameworks/cluster ` + +Summary +~~~~~~~ +Runtime Options +############### +======================================================================================= ===================================================================== +:bro:id:`Notice::alarmed_types`: :bro:type:`set` :bro:attr:`&redef` Alarmed notice types. +:bro:id:`Notice::default_suppression_interval`: :bro:type:`interval` :bro:attr:`&redef` The notice framework is able to do automatic notice suppression by + utilizing the *identifier* field in :bro:type:`Notice::Info` records. +:bro:id:`Notice::emailed_types`: :bro:type:`set` :bro:attr:`&redef` Emailed notice types. +:bro:id:`Notice::ignored_types`: :bro:type:`set` :bro:attr:`&redef` Ignored notice types. +:bro:id:`Notice::mail_from`: :bro:type:`string` :bro:attr:`&redef` Address that emails will be from. +:bro:id:`Notice::mail_subject_prefix`: :bro:type:`string` :bro:attr:`&redef` Text string prefixed to the subject of all emails sent out. +:bro:id:`Notice::not_suppressed_types`: :bro:type:`set` :bro:attr:`&redef` Types that should be suppressed for the default suppression interval. +:bro:id:`Notice::reply_to`: :bro:type:`string` :bro:attr:`&redef` Reply-to address used in outbound email. +:bro:id:`Notice::sendmail`: :bro:type:`string` :bro:attr:`&redef` Local system sendmail program. +======================================================================================= ===================================================================== + +Redefinable Options +################### +================================================================================== ==================================================================== +:bro:id:`Notice::mail_dest`: :bro:type:`string` :bro:attr:`&redef` Email address to send notices with the + :bro:enum:`Notice::ACTION_EMAIL` action or to send bulk alarm logs + on rotation with :bro:enum:`Notice::ACTION_ALARM`. +:bro:id:`Notice::max_email_delay`: :bro:type:`interval` :bro:attr:`&redef` The maximum amount of time a plugin can delay email from being sent. +:bro:id:`Notice::type_suppression_intervals`: :bro:type:`table` :bro:attr:`&redef` This table can be used as a shorthand way to modify suppression + intervals for entire notice types. +================================================================================== ==================================================================== + +Types +##### +================================================ ===================================================================== +:bro:type:`Notice::Action`: :bro:type:`enum` These are values representing actions that can be taken with notices. +:bro:type:`Notice::ActionSet`: :bro:type:`set` Type that represents a set of actions. +:bro:type:`Notice::FileInfo`: :bro:type:`record` Contains a portion of :bro:see:`fa_file` that's also contained in + :bro:see:`Notice::Info`. +:bro:type:`Notice::Info`: :bro:type:`record` The record type that is used for representing and logging notices. +:bro:type:`Notice::Type`: :bro:type:`enum` Scripts creating new notices need to redef this enum to add their + own specific notice types which would then get used when they call + the :bro:id:`NOTICE` function. +================================================ ===================================================================== + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +====================================================== ================================================================ +:bro:id:`Notice::begin_suppression`: :bro:type:`event` This event is generated when a notice begins to be suppressed. +:bro:id:`Notice::cluster_notice`: :bro:type:`event` This is the event used to transport notices on the cluster. +:bro:id:`Notice::log_notice`: :bro:type:`event` This event can be handled to access the :bro:type:`Notice::Info` + record as it is sent on to the logging framework. +:bro:id:`Notice::suppressed`: :bro:type:`event` This event is generated on each occurrence of an event being + suppressed. +====================================================== ================================================================ + +Hooks +##### +========================================== ========================================================== +:bro:id:`Notice::notice`: :bro:type:`hook` This is the event that is called as the entry point to the + notice framework by the global :bro:id:`NOTICE` function. +:bro:id:`Notice::policy`: :bro:type:`hook` The hook to modify notice handling. +========================================== ========================================================== + +Functions +######### +================================================================= ========================================================================= +:bro:id:`NOTICE`: :bro:type:`function` +:bro:id:`Notice::create_file_info`: :bro:type:`function` Creates a record containing a subset of a full :bro:see:`fa_file` record. +:bro:id:`Notice::email_headers`: :bro:type:`function` Constructs mail headers to which an email body can be appended for + sending with sendmail. +:bro:id:`Notice::email_notice_to`: :bro:type:`function` Call this function to send a notice in an email. +:bro:id:`Notice::internal_NOTICE`: :bro:type:`function` This is an internal wrapper for the global :bro:id:`NOTICE` + function; disregard. +:bro:id:`Notice::is_being_suppressed`: :bro:type:`function` A function to determine if an event is supposed to be suppressed. +:bro:id:`Notice::log_mailing_postprocessor`: :bro:type:`function` A log postprocessing function that implements emailing the contents + of a log upon rotation to any configured :bro:id:`Notice::mail_dest`. +:bro:id:`Notice::populate_file_info`: :bro:type:`function` Populates file-related fields in a notice info record. +:bro:id:`Notice::populate_file_info2`: :bro:type:`function` Populates file-related fields in a notice info record. +================================================================= ========================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Notice::alarmed_types + + :Type: :bro:type:`set` [:bro:type:`Notice::Type`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Alarmed notice types. + +.. bro:id:: Notice::default_suppression_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 hr`` + + The notice framework is able to do automatic notice suppression by + utilizing the *identifier* field in :bro:type:`Notice::Info` records. + Set this to "0secs" to completely disable automated notice + suppression. + +.. bro:id:: Notice::emailed_types + + :Type: :bro:type:`set` [:bro:type:`Notice::Type`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Emailed notice types. + +.. bro:id:: Notice::ignored_types + + :Type: :bro:type:`set` [:bro:type:`Notice::Type`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Ignored notice types. + +.. bro:id:: Notice::mail_from + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"Big Brother "`` + + Address that emails will be from. + + Note that this is overridden by the BroControl MailFrom option. + +.. bro:id:: Notice::mail_subject_prefix + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"[Bro]"`` + + Text string prefixed to the subject of all emails sent out. + + Note that this is overridden by the BroControl MailSubjectPrefix + option. + +.. bro:id:: Notice::not_suppressed_types + + :Type: :bro:type:`set` [:bro:type:`Notice::Type`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Types that should be suppressed for the default suppression interval. + +.. bro:id:: Notice::reply_to + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Reply-to address used in outbound email. + +.. bro:id:: Notice::sendmail + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"/usr/sbin/sendmail"`` + + Local system sendmail program. + + Note that this is overridden by the BroControl SendMail option. + +Redefinable Options +################### +.. bro:id:: Notice::mail_dest + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Email address to send notices with the + :bro:enum:`Notice::ACTION_EMAIL` action or to send bulk alarm logs + on rotation with :bro:enum:`Notice::ACTION_ALARM`. + + Note that this is overridden by the BroControl MailTo option. + +.. bro:id:: Notice::max_email_delay + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``15.0 secs`` + + The maximum amount of time a plugin can delay email from being sent. + +.. bro:id:: Notice::type_suppression_intervals + + :Type: :bro:type:`table` [:bro:type:`Notice::Type`] of :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + This table can be used as a shorthand way to modify suppression + intervals for entire notice types. + +Types +##### +.. bro:type:: Notice::Action + + :Type: :bro:type:`enum` + + .. bro:enum:: Notice::ACTION_NONE Notice::Action + + Indicates that there is no action to be taken. + + .. bro:enum:: Notice::ACTION_LOG Notice::Action + + Indicates that the notice should be sent to the notice + logging stream. + + .. bro:enum:: Notice::ACTION_EMAIL Notice::Action + + Indicates that the notice should be sent to the email + address(es) configured in the :bro:id:`Notice::mail_dest` + variable. + + .. bro:enum:: Notice::ACTION_ALARM Notice::Action + + Indicates that the notice should be alarmed. A readable + ASCII version of the alarm log is emailed in bulk to the + address(es) configured in :bro:id:`Notice::mail_dest`. + + .. bro:enum:: Notice::ACTION_DROP Notice::Action + + (present if :doc:`/scripts/base/frameworks/notice/actions/drop.bro` is loaded) + + + Drops the address via :bro:see:`NetControl::drop_address_catch_release`. + + .. bro:enum:: Notice::ACTION_EMAIL_ADMIN Notice::Action + + (present if :doc:`/scripts/base/frameworks/notice/actions/email_admin.bro` is loaded) + + + Indicate that the generated email should be addressed to the + appropriate email addresses as found by the + :bro:id:`Site::get_emails` function based on the relevant + address or addresses indicated in the notice. + + .. bro:enum:: Notice::ACTION_PAGE Notice::Action + + (present if :doc:`/scripts/base/frameworks/notice/actions/page.bro` is loaded) + + + Indicates that the notice should be sent to the pager email + address configured in the :bro:id:`Notice::mail_page_dest` + variable. + + .. bro:enum:: Notice::ACTION_ADD_GEODATA Notice::Action + + (present if :doc:`/scripts/base/frameworks/notice/actions/add-geodata.bro` is loaded) + + + Indicates that the notice should have geodata added for the + "remote" host. :bro:id:`Site::local_nets` must be defined + in order for this to work. + + These are values representing actions that can be taken with notices. + +.. bro:type:: Notice::ActionSet + + :Type: :bro:type:`set` [:bro:type:`Notice::Action`] + + Type that represents a set of actions. + +.. bro:type:: Notice::FileInfo + + :Type: :bro:type:`record` + + fuid: :bro:type:`string` + File UID. + + desc: :bro:type:`string` + File description from e.g. + :bro:see:`Files::describe`. + + mime: :bro:type:`string` :bro:attr:`&optional` + Strongest mime type match for file. + + cid: :bro:type:`conn_id` :bro:attr:`&optional` + Connection tuple over which file is sent. + + cuid: :bro:type:`string` :bro:attr:`&optional` + Connection UID over which file is sent. + + Contains a portion of :bro:see:`fa_file` that's also contained in + :bro:see:`Notice::Info`. + +.. bro:type:: Notice::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + An absolute time indicating when the notice occurred, + defaults to the current network time. + + uid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A connection UID which uniquely identifies the endpoints + concerned with the notice. + + id: :bro:type:`conn_id` :bro:attr:`&log` :bro:attr:`&optional` + A connection 4-tuple identifying the endpoints concerned + with the notice. + + conn: :bro:type:`connection` :bro:attr:`&optional` + A shorthand way of giving the uid and id to a notice. The + reference to the actual connection will be deleted after + applying the notice policy. + + iconn: :bro:type:`icmp_conn` :bro:attr:`&optional` + A shorthand way of giving the uid and id to a notice. The + reference to the actual connection will be deleted after + applying the notice policy. + + f: :bro:type:`fa_file` :bro:attr:`&optional` + A file record if the notice is related to a file. The + reference to the actual fa_file record will be deleted after + applying the notice policy. + + fuid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A file unique ID if this notice is related to a file. If + the *f* field is provided, this will be automatically filled + out. + + file_mime_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A mime type if the notice is related to a file. If the *f* + field is provided, this will be automatically filled out. + + file_desc: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Frequently files can be "described" to give a bit more + context. This field will typically be automatically filled + out from an fa_file record. For example, if a notice was + related to a file over HTTP, the URL of the request would + be shown. + + proto: :bro:type:`transport_proto` :bro:attr:`&log` :bro:attr:`&optional` + The transport protocol. Filled automatically when either + *conn*, *iconn* or *p* is specified. + + note: :bro:type:`Notice::Type` :bro:attr:`&log` + The :bro:type:`Notice::Type` of the notice. + + msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The human readable message for the notice. + + sub: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The human readable sub-message. + + src: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + Source address, if we don't have a :bro:type:`conn_id`. + + dst: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + Destination address. + + p: :bro:type:`port` :bro:attr:`&log` :bro:attr:`&optional` + Associated port, if we don't have a :bro:type:`conn_id`. + + n: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Associated count, or perhaps a status code. + + peer_name: :bro:type:`string` :bro:attr:`&optional` + Name of remote peer that raised this notice. + + peer_descr: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Textual description for the peer that raised this notice, + including name, host address and port. + + actions: :bro:type:`Notice::ActionSet` :bro:attr:`&log` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + The actions which have been applied to this notice. + + email_body_sections: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` + By adding chunks of text into this element, other scripts + can expand on notices that are being emailed. The normal + way to add text is to extend the vector by handling the + :bro:id:`Notice::notice` event and modifying the notice in + place. + + email_delay_tokens: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&optional` + Adding a string "token" to this set will cause the notice + framework's built-in emailing functionality to delay sending + the email until either the token has been removed or the + email has been delayed for :bro:id:`Notice::max_email_delay`. + + identifier: :bro:type:`string` :bro:attr:`&optional` + This field is to be provided when a notice is generated for + the purpose of deduplicating notices. The identifier string + should be unique for a single instance of the notice. This + field should be filled out in almost all cases when + generating notices to define when a notice is conceptually + a duplicate of a previous notice. + + For example, an SSL certificate that is going to expire soon + should always have the same identifier no matter the client + IP address that connected and resulted in the certificate + being exposed. In this case, the resp_h, resp_p, and hash + of the certificate would be used to create this value. The + hash of the cert is included because servers can return + multiple certificates on the same port. + + Another example might be a host downloading a file which + triggered a notice because the MD5 sum of the file it + downloaded was known by some set of intelligence. In that + case, the orig_h (client) and MD5 sum would be used in this + field to dedup because if the same file is downloaded over + and over again you really only want to know about it a + single time. This makes it possible to send those notices + to email without worrying so much about sending thousands + of emails. + + suppress_for: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&default` = :bro:see:`Notice::default_suppression_interval` :bro:attr:`&optional` + This field indicates the length of time that this + unique notice should be suppressed. + + dropped: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/notice/actions/drop.bro` is loaded) + + Indicate if the $src IP address was dropped and denied + network access. + + remote_location: :bro:type:`geo_location` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/notice/actions/add-geodata.bro` is loaded) + + If GeoIP support is built in, notices can have geographic + information attached to them. + + The record type that is used for representing and logging notices. + +.. bro:type:: Notice::Type + + :Type: :bro:type:`enum` + + .. bro:enum:: Notice::Tally Notice::Type + + Notice reporting a count of how often a notice occurred. + + .. bro:enum:: Weird::Activity Notice::Type + + (present if :doc:`/scripts/base/frameworks/notice/weird.bro` is loaded) + + + Generic unusual but notice-worthy weird activity. + + .. bro:enum:: Signatures::Sensitive_Signature Notice::Type + + (present if :doc:`/scripts/base/frameworks/signatures/main.bro` is loaded) + + + Generic notice type for notice-worthy signature matches. + + .. bro:enum:: Signatures::Multiple_Signatures Notice::Type + + (present if :doc:`/scripts/base/frameworks/signatures/main.bro` is loaded) + + + Host has triggered many signatures on the same host. The + number of signatures is defined by the + :bro:id:`Signatures::vert_scan_thresholds` variable. + + .. bro:enum:: Signatures::Multiple_Sig_Responders Notice::Type + + (present if :doc:`/scripts/base/frameworks/signatures/main.bro` is loaded) + + + Host has triggered the same signature on multiple hosts as + defined by the :bro:id:`Signatures::horiz_scan_thresholds` + variable. + + .. bro:enum:: Signatures::Count_Signature Notice::Type + + (present if :doc:`/scripts/base/frameworks/signatures/main.bro` is loaded) + + + The same signature has triggered multiple times for a host. + The number of times the signature has been triggered is + defined by the :bro:id:`Signatures::count_thresholds` + variable. To generate this notice, the + :bro:enum:`Signatures::SIG_COUNT_PER_RESP` action must be + set for the signature. + + .. bro:enum:: Signatures::Signature_Summary Notice::Type + + (present if :doc:`/scripts/base/frameworks/signatures/main.bro` is loaded) + + + Summarize the number of times a host triggered a signature. + The interval between summaries is defined by the + :bro:id:`Signatures::summary_interval` variable. + + .. bro:enum:: PacketFilter::Compile_Failure Notice::Type + + (present if :doc:`/scripts/base/frameworks/packet-filter/main.bro` is loaded) + + + This notice is generated if a packet filter cannot be compiled. + + .. bro:enum:: PacketFilter::Install_Failure Notice::Type + + (present if :doc:`/scripts/base/frameworks/packet-filter/main.bro` is loaded) + + + Generated if a packet filter fails to install. + + .. bro:enum:: PacketFilter::Too_Long_To_Compile_Filter Notice::Type + + (present if :doc:`/scripts/base/frameworks/packet-filter/main.bro` is loaded) + + + Generated when a notice takes too long to compile. + + .. bro:enum:: PacketFilter::Dropped_Packets Notice::Type + + (present if :doc:`/scripts/base/frameworks/packet-filter/netstats.bro` is loaded) + + + Indicates packets were dropped by the packet filter. + + .. bro:enum:: ProtocolDetector::Protocol_Found Notice::Type + + (present if :doc:`/scripts/policy/frameworks/dpd/detect-protocols.bro` is loaded) + + + .. bro:enum:: ProtocolDetector::Server_Found Notice::Type + + (present if :doc:`/scripts/policy/frameworks/dpd/detect-protocols.bro` is loaded) + + + .. bro:enum:: Intel::Notice Notice::Type + + (present if :doc:`/scripts/policy/frameworks/intel/do_notice.bro` is loaded) + + + This notice is generated when an intelligence + indicator is denoted to be notice-worthy. + + .. bro:enum:: TeamCymruMalwareHashRegistry::Match Notice::Type + + (present if :doc:`/scripts/policy/frameworks/files/detect-MHR.bro` is loaded) + + + The hash value of a file transferred over HTTP matched in the + malware hash registry. + + .. bro:enum:: PacketFilter::No_More_Conn_Shunts_Available Notice::Type + + (present if :doc:`/scripts/policy/frameworks/packet-filter/shunt.bro` is loaded) + + + Indicative that :bro:id:`PacketFilter::max_bpf_shunts` + connections are already being shunted with BPF filters and + no more are allowed. + + .. bro:enum:: PacketFilter::Cannot_BPF_Shunt_Conn Notice::Type + + (present if :doc:`/scripts/policy/frameworks/packet-filter/shunt.bro` is loaded) + + + Limitations in BPF make shunting some connections with BPF + impossible. This notice encompasses those various cases. + + .. bro:enum:: Software::Software_Version_Change Notice::Type + + (present if :doc:`/scripts/policy/frameworks/software/version-changes.bro` is loaded) + + + For certain software, a version changing may matter. In that + case, this notice will be generated. Software that matters + if the version changes can be configured with the + :bro:id:`Software::interesting_version_changes` variable. + + .. bro:enum:: Software::Vulnerable_Version Notice::Type + + (present if :doc:`/scripts/policy/frameworks/software/vulnerable.bro` is loaded) + + + Indicates that a vulnerable version of software was detected. + + .. bro:enum:: CaptureLoss::Too_Much_Loss Notice::Type + + (present if :doc:`/scripts/policy/misc/capture-loss.bro` is loaded) + + + Report if the detected capture loss exceeds the percentage + threshold. + + .. bro:enum:: Traceroute::Detected Notice::Type + + (present if :doc:`/scripts/policy/misc/detect-traceroute/main.bro` is loaded) + + + Indicates that a host was seen running traceroutes. For more + detail about specific traceroutes that we run, refer to the + traceroute.log. + + .. bro:enum:: Scan::Address_Scan Notice::Type + + (present if :doc:`/scripts/policy/misc/scan.bro` is loaded) + + + Address scans detect that a host appears to be scanning some + number of destinations on a single port. This notice is + generated when more than :bro:id:`Scan::addr_scan_threshold` + unique hosts are seen over the previous + :bro:id:`Scan::addr_scan_interval` time range. + + .. bro:enum:: Scan::Port_Scan Notice::Type + + (present if :doc:`/scripts/policy/misc/scan.bro` is loaded) + + + Port scans detect that an attacking host appears to be + scanning a single victim host on several ports. This notice + is generated when an attacking host attempts to connect to + :bro:id:`Scan::port_scan_threshold` + unique ports on a single host over the previous + :bro:id:`Scan::port_scan_interval` time range. + + .. bro:enum:: Conn::Retransmission_Inconsistency Notice::Type + + (present if :doc:`/scripts/policy/protocols/conn/weirds.bro` is loaded) + + + Possible evasion; usually just chud. + + .. bro:enum:: Conn::Content_Gap Notice::Type + + (present if :doc:`/scripts/policy/protocols/conn/weirds.bro` is loaded) + + + Data has sequence hole; perhaps due to filtering. + + .. bro:enum:: DNS::External_Name Notice::Type + + (present if :doc:`/scripts/policy/protocols/dns/detect-external-names.bro` is loaded) + + + Raised when a non-local name is found to be pointing at a + local host. The :bro:id:`Site::local_zones` variable + **must** be set appropriately for this detection. + + .. bro:enum:: FTP::Bruteforcing Notice::Type + + (present if :doc:`/scripts/policy/protocols/ftp/detect-bruteforcing.bro` is loaded) + + + Indicates a host bruteforcing FTP logins by watching for too + many rejected usernames or failed passwords. + + .. bro:enum:: FTP::Site_Exec_Success Notice::Type + + (present if :doc:`/scripts/policy/protocols/ftp/detect.bro` is loaded) + + + Indicates that a successful response to a "SITE EXEC" + command/arg pair was seen. + + .. bro:enum:: HTTP::SQL_Injection_Attacker Notice::Type + + (present if :doc:`/scripts/policy/protocols/http/detect-sqli.bro` is loaded) + + + Indicates that a host performing SQL injection attacks was + detected. + + .. bro:enum:: HTTP::SQL_Injection_Victim Notice::Type + + (present if :doc:`/scripts/policy/protocols/http/detect-sqli.bro` is loaded) + + + Indicates that a host was seen to have SQL injection attacks + against it. This is tracked by IP address as opposed to + hostname. + + .. bro:enum:: SMTP::Blocklist_Error_Message Notice::Type + + (present if :doc:`/scripts/policy/protocols/smtp/blocklists.bro` is loaded) + + + An SMTP server sent a reply mentioning an SMTP block list. + + .. bro:enum:: SMTP::Blocklist_Blocked_Host Notice::Type + + (present if :doc:`/scripts/policy/protocols/smtp/blocklists.bro` is loaded) + + + The originator's address is seen in the block list error message. + This is useful to detect local hosts sending SPAM with a high + positive rate. + + .. bro:enum:: SMTP::Suspicious_Origination Notice::Type + + (present if :doc:`/scripts/policy/protocols/smtp/detect-suspicious-orig.bro` is loaded) + + + .. bro:enum:: SSH::Password_Guessing Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssh/detect-bruteforcing.bro` is loaded) + + + Indicates that a host has been identified as crossing the + :bro:id:`SSH::password_guesses_limit` threshold with + failed logins. + + .. bro:enum:: SSH::Login_By_Password_Guesser Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssh/detect-bruteforcing.bro` is loaded) + + + Indicates that a host previously identified as a "password + guesser" has now had a successful login + attempt. This is not currently implemented. + + .. bro:enum:: SSH::Watched_Country_Login Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssh/geo-data.bro` is loaded) + + + If an SSH login is seen to or from a "watched" country based + on the :bro:id:`SSH::watched_countries` variable then this + notice will be generated. + + .. bro:enum:: SSH::Interesting_Hostname_Login Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssh/interesting-hostnames.bro` is loaded) + + + Generated if a login originates or responds with a host where + the reverse hostname lookup resolves to a name matched by the + :bro:id:`SSH::interesting_hostnames` regular expression. + + .. bro:enum:: SSL::Certificate_Expired Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/expiring-certs.bro` is loaded) + + + Indicates that a certificate's NotValidAfter date has lapsed + and the certificate is now invalid. + + .. bro:enum:: SSL::Certificate_Expires_Soon Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/expiring-certs.bro` is loaded) + + + Indicates that a certificate is going to expire within + :bro:id:`SSL::notify_when_cert_expiring_in`. + + .. bro:enum:: SSL::Certificate_Not_Valid_Yet Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/expiring-certs.bro` is loaded) + + + Indicates that a certificate's NotValidBefore date is future + dated. + + .. bro:enum:: Heartbleed::SSL_Heartbeat_Attack Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + Indicates that a host performed a heartbleed attack or scan. + + .. bro:enum:: Heartbleed::SSL_Heartbeat_Attack_Success Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + Indicates that a host performing a heartbleed attack was probably successful. + + .. bro:enum:: Heartbleed::SSL_Heartbeat_Odd_Length Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + Indicates we saw heartbeat requests with odd length. Probably an attack or scan. + + .. bro:enum:: Heartbleed::SSL_Heartbeat_Many_Requests Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + Indicates we saw many heartbeat requests without a reply. Might be an attack. + + .. bro:enum:: SSL::Invalid_Server_Cert Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/validate-certs.bro` is loaded) + + + This notice indicates that the result of validating the + certificate along with its full certificate chain was + invalid. + + .. bro:enum:: SSL::Invalid_Ocsp_Response Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/validate-ocsp.bro` is loaded) + + + This indicates that the OCSP response was not deemed + to be valid. + + .. bro:enum:: SSL::Weak_Key Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/weak-keys.bro` is loaded) + + + Indicates that a server is using a potentially unsafe key. + + .. bro:enum:: SSL::Old_Version Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/weak-keys.bro` is loaded) + + + Indicates that a server is using a potentially unsafe version + + .. bro:enum:: SSL::Weak_Cipher Notice::Type + + (present if :doc:`/scripts/policy/protocols/ssl/weak-keys.bro` is loaded) + + + Indicates that a server is using a potentially unsafe cipher + + .. bro:enum:: BroxygenExample::Broxygen_One Notice::Type + + (present if :doc:`/scripts/broxygen/example.bro` is loaded) + + + Any number of this type of comment + will document "Broxygen_One". + + .. bro:enum:: BroxygenExample::Broxygen_Two Notice::Type + + (present if :doc:`/scripts/broxygen/example.bro` is loaded) + + + Any number of this type of comment + will document "BROXYGEN_TWO". + + .. bro:enum:: BroxygenExample::Broxygen_Three Notice::Type + + (present if :doc:`/scripts/broxygen/example.bro` is loaded) + + + .. bro:enum:: BroxygenExample::Broxygen_Four Notice::Type + + (present if :doc:`/scripts/broxygen/example.bro` is loaded) + + + Omitting comments is fine, and so is mixing ``##`` and ``##<``, but + it's probably best to use only one style consistently. + + Scripts creating new notices need to redef this enum to add their + own specific notice types which would then get used when they call + the :bro:id:`NOTICE` function. The convention is to give a general + category along with the specific notice separating words with + underscores and using leading capitals on each word except for + abbreviations which are kept in all capitals. For example, + SSH::Password_Guessing is for hosts that have crossed a threshold of + failed SSH logins. + +Events +###### +.. bro:id:: Notice::begin_suppression + + :Type: :bro:type:`event` (ts: :bro:type:`time`, suppress_for: :bro:type:`interval`, note: :bro:type:`Notice::Type`, identifier: :bro:type:`string`) + + This event is generated when a notice begins to be suppressed. + + + :ts: time indicating then when the notice to be suppressed occured. + + + :suppress_for: length of time that this notice should be suppressed. + + + :note: The :bro:type:`Notice::Type` of the notice. + + + :identifier: The identifier string of the notice that should be suppressed. + +.. bro:id:: Notice::cluster_notice + + :Type: :bro:type:`event` (n: :bro:type:`Notice::Info`) + + This is the event used to transport notices on the cluster. + + + :n: The notice information to be sent to the cluster manager for + further processing. + +.. bro:id:: Notice::log_notice + + :Type: :bro:type:`event` (rec: :bro:type:`Notice::Info`) + + This event can be handled to access the :bro:type:`Notice::Info` + record as it is sent on to the logging framework. + + + :rec: The record containing notice data before it is logged. + +.. bro:id:: Notice::suppressed + + :Type: :bro:type:`event` (n: :bro:type:`Notice::Info`) + + This event is generated on each occurrence of an event being + suppressed. + + + :n: The record containing notice data regarding the notice type + being suppressed. + +Hooks +##### +.. bro:id:: Notice::notice + + :Type: :bro:type:`hook` (n: :bro:type:`Notice::Info`) : :bro:type:`bool` + + This is the event that is called as the entry point to the + notice framework by the global :bro:id:`NOTICE` function. By the + time this event is generated, default values have already been + filled out in the :bro:type:`Notice::Info` record and the notice + policy has also been applied. + + + :n: The record containing notice data. + +.. bro:id:: Notice::policy + + :Type: :bro:type:`hook` (n: :bro:type:`Notice::Info`) : :bro:type:`bool` + + The hook to modify notice handling. + +Functions +######### +.. bro:id:: NOTICE + + :Type: :bro:type:`function` (n: :bro:type:`Notice::Info`) : :bro:type:`void` + + +.. bro:id:: Notice::create_file_info + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`Notice::FileInfo` + + Creates a record containing a subset of a full :bro:see:`fa_file` record. + + + :f: record containing metadata about a file. + + + :returns: record containing a subset of fields copied from *f*. + +.. bro:id:: Notice::email_headers + + :Type: :bro:type:`function` (subject_desc: :bro:type:`string`, dest: :bro:type:`string`) : :bro:type:`string` + + Constructs mail headers to which an email body can be appended for + sending with sendmail. + + + :subject_desc: a subject string to use for the mail. + + + :dest: recipient string to use for the mail. + + + :returns: a string of mail headers to which an email body can be + appended. + +.. bro:id:: Notice::email_notice_to + + :Type: :bro:type:`function` (n: :bro:type:`Notice::Info`, dest: :bro:type:`string`, extend: :bro:type:`bool`) : :bro:type:`void` + + Call this function to send a notice in an email. It is already used + by default with the built in :bro:enum:`Notice::ACTION_EMAIL` and + :bro:enum:`Notice::ACTION_PAGE` actions. + + + :n: The record of notice data to email. + + + :dest: The intended recipient of the notice email. + + + :extend: Whether to extend the email using the + ``email_body_sections`` field of *n*. + +.. bro:id:: Notice::internal_NOTICE + + :Type: :bro:type:`function` (n: :bro:type:`Notice::Info`) : :bro:type:`void` + + This is an internal wrapper for the global :bro:id:`NOTICE` + function; disregard. + + + :n: The record of notice data. + +.. bro:id:: Notice::is_being_suppressed + + :Type: :bro:type:`function` (n: :bro:type:`Notice::Info`) : :bro:type:`bool` + + A function to determine if an event is supposed to be suppressed. + + + :n: The record containing the notice in question. + +.. bro:id:: Notice::log_mailing_postprocessor + + :Type: :bro:type:`function` (info: :bro:type:`Log::RotationInfo`) : :bro:type:`bool` + + A log postprocessing function that implements emailing the contents + of a log upon rotation to any configured :bro:id:`Notice::mail_dest`. + The rotated log is removed upon being sent. + + + :info: A record containing the rotated log file information. + + + :returns: True. + +.. bro:id:: Notice::populate_file_info + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`, n: :bro:type:`Notice::Info`) : :bro:type:`void` + + Populates file-related fields in a notice info record. + + + :f: record containing metadata about a file. + + + :n: a notice record that needs file-related fields populated. + +.. bro:id:: Notice::populate_file_info2 + + :Type: :bro:type:`function` (fi: :bro:type:`Notice::FileInfo`, n: :bro:type:`Notice::Info`) : :bro:type:`void` + + Populates file-related fields in a notice info record. + + + :fi: record containing metadata about a file. + + + :n: a notice record that needs file-related fields populated. + + diff --git a/doc/scripts/base/frameworks/notice/weird.bro.rst b/doc/scripts/base/frameworks/notice/weird.bro.rst new file mode 100644 index 0000000000..58a4da975b --- /dev/null +++ b/doc/scripts/base/frameworks/notice/weird.bro.rst @@ -0,0 +1,412 @@ +:tocdepth: 3 + +base/frameworks/notice/weird.bro +================================ +.. bro:namespace:: Weird + +This script provides a default set of actions to take for "weird activity" +events generated from Bro's event engine. Weird activity is defined as +unusual or exceptional activity that can indicate malformed connections, +traffic that doesn't conform to a particular protocol, malfunctioning +or misconfigured hardware, or even an attacker attempting to avoid/confuse +a sensor. Without context, it's hard to judge whether a particular +category of weird activity is interesting, but this script provides +a starting point for the user. + +:Namespace: Weird +:Imports: :doc:`base/frameworks/notice/main.bro `, :doc:`base/utils/conn-ids.bro `, :doc:`base/utils/site.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +================================================================================ ============================================================== +:bro:id:`Weird::ignore_hosts`: :bro:type:`set` :bro:attr:`&redef` To completely ignore a specific weird for a host, add the host + and weird name into this set. +:bro:id:`Weird::weird_do_not_ignore_repeats`: :bro:type:`set` :bro:attr:`&redef` Don't ignore repeats for weirds in this set. +================================================================================ ============================================================== + +Redefinable Options +################### +================================================================================================================================= ============================================================== +:bro:id:`Weird::actions`: :bro:type:`table` :bro:attr:`&default` = ``Weird::ACTION_LOG`` :bro:attr:`&optional` :bro:attr:`&redef` A table specifying default/recommended actions per weird type. +================================================================================================================================= ============================================================== + +State Variables +############### +============================================================================================================ ==================================================================== +:bro:id:`Weird::did_log`: :bro:type:`set` :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` A state set which tracks unique weirds solely by name to reduce + duplicate logging. +:bro:id:`Weird::did_notice`: :bro:type:`set` :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` A state set which tracks unique weirds solely by name to reduce + duplicate notices from being raised. +:bro:id:`Weird::weird_ignore`: :bro:type:`set` :bro:attr:`&create_expire` = ``10.0 mins`` :bro:attr:`&redef` This table is used to track identifier and name pairs that should be + temporarily ignored because the problem has already been reported. +============================================================================================================ ==================================================================== + +Types +##### +=========================================== ======================================================================= +:bro:type:`Weird::Action`: :bro:type:`enum` Types of actions that may be taken when handling weird activity events. +:bro:type:`Weird::Info`: :bro:type:`record` The record which is used for representing and logging weirds. +=========================================== ======================================================================= + +Redefinitions +############# +========================================== ==================================== +:bro:type:`Log::ID`: :bro:type:`enum` The weird logging stream identifier. +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== ==================================== + +Events +###### +============================================= ============================================================== +:bro:id:`Weird::log_weird`: :bro:type:`event` Handlers of this event are invoked once per write to the weird + logging stream before the data is actually written. +============================================= ============================================================== + +Functions +######### +============================================ = +:bro:id:`Weird::weird`: :bro:type:`function` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Weird::ignore_hosts + + :Type: :bro:type:`set` [:bro:type:`addr`, :bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + To completely ignore a specific weird for a host, add the host + and weird name into this set. + +.. bro:id:: Weird::weird_do_not_ignore_repeats + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "bad_ICMP_checksum", + "bad_TCP_checksum", + "bad_IP_checksum", + "bad_UDP_checksum" + } + + Don't ignore repeats for weirds in this set. For example, + it's handy keeping track of clustered checksum errors. + +Redefinable Options +################### +.. bro:id:: Weird::actions + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`Weird::Action` + :Attributes: :bro:attr:`&default` = ``Weird::ACTION_LOG`` :bro:attr:`&optional` :bro:attr:`&redef` + :Default: + + :: + + { + ["DNS_AAAA_neg_length"] = Weird::ACTION_LOG, + ["partial_ftp_request"] = Weird::ACTION_LOG, + ["repeated_SYN_reply_wo_ack"] = Weird::ACTION_LOG, + ["bad_UDP_checksum"] = Weird::ACTION_LOG_PER_ORIG, + ["line_terminated_with_single_LF"] = Weird::ACTION_LOG, + ["truncated_IP"] = Weird::ACTION_LOG, + ["DNS_truncated_len_lt_hdr_len"] = Weird::ACTION_LOG, + ["excessive_data_without_further_acks"] = Weird::ACTION_LOG, + ["pop3_malformed_auth_plain"] = Weird::ACTION_LOG, + ["excess_netbios_hdr_len"] = Weird::ACTION_LOG, + ["irc_invalid_whois_channel_line"] = Weird::ACTION_LOG, + ["bad_RPC"] = Weird::ACTION_LOG_PER_ORIG, + ["unknown_netbios_type"] = Weird::ACTION_LOG, + ["HTTP_chunked_transfer_for_multipart_message"] = Weird::ACTION_LOG, + ["RST_storm"] = Weird::ACTION_LOG, + ["bad_IP_checksum"] = Weird::ACTION_LOG_PER_ORIG, + ["excessively_small_fragment"] = Weird::ACTION_LOG_PER_ORIG, + ["bad_rsh_prolog"] = Weird::ACTION_LOG, + ["pop3_client_sending_server_commands"] = Weird::ACTION_LOG, + ["unexpected_multiple_HTTP_requests"] = Weird::ACTION_LOG, + ["irc_invalid_topic_reply"] = Weird::ACTION_LOG, + ["irc_invalid_squery_message_format"] = Weird::ACTION_LOG, + ["bad_SYN_ack"] = Weird::ACTION_LOG, + ["contentline_size_exceeded"] = Weird::ACTION_LOG, + ["above_hole_data_without_any_acks"] = Weird::ACTION_LOG, + ["bad_HTTP_reply"] = Weird::ACTION_LOG, + ["DNS_RR_length_mismatch"] = Weird::ACTION_LOG, + ["SMB_parsing_error"] = Weird::ACTION_LOG, + ["multiple_HTTP_request_elements"] = Weird::ACTION_LOG, + ["FIN_after_reset"] = Weird::ACTION_IGNORE, + ["SYN_after_partial"] = Weird::ACTION_NOTICE_PER_ORIG, + ["baroque_SYN"] = Weird::ACTION_LOG, + ["DNS_label_forward_compress_offset"] = Weird::ACTION_LOG_PER_ORIG, + ["connection_originator_SYN_ack"] = Weird::ACTION_LOG_PER_ORIG, + ["irc_invalid_dcc_message_format"] = Weird::ACTION_LOG, + ["unmatched_HTTP_reply"] = Weird::ACTION_LOG, + ["unpaired_RPC_response"] = Weird::ACTION_LOG, + ["SYN_inside_connection"] = Weird::ACTION_LOG, + ["irc_invalid_who_message_format"] = Weird::ACTION_LOG, + ["irc_invalid_reply_number"] = Weird::ACTION_LOG, + ["pop3_client_command_unknown"] = Weird::ACTION_LOG, + ["bad_ICMP_checksum"] = Weird::ACTION_LOG_PER_ORIG, + ["DNS_RR_unknown_type"] = Weird::ACTION_LOG, + ["excessively_large_fragment"] = Weird::ACTION_LOG, + ["DNS_label_len_gt_name_len"] = Weird::ACTION_LOG_PER_ORIG, + ["DNS_label_len_gt_pkt"] = Weird::ACTION_LOG_PER_ORIG, + ["partial_ident_request"] = Weird::ACTION_LOG, + ["excess_RPC"] = Weird::ACTION_LOG_PER_ORIG, + ["line_terminated_with_single_CR"] = Weird::ACTION_LOG, + ["unknown_HTTP_method"] = Weird::ACTION_LOG, + ["bad_ident_request"] = Weird::ACTION_LOG, + ["crud_trailing_HTTP_request"] = Weird::ACTION_LOG, + ["irc_invalid_whois_operator_line"] = Weird::ACTION_LOG, + ["unexpected_server_HTTP_data"] = Weird::ACTION_LOG, + ["irc_invalid_njoin_line"] = Weird::ACTION_LOG, + ["irc_invalid_mode_message_format"] = Weird::ACTION_LOG, + ["pop3_bad_base64_encoding"] = Weird::ACTION_LOG, + ["responder_RPC_call"] = Weird::ACTION_LOG_PER_ORIG, + ["fragment_size_inconsistency"] = Weird::ACTION_LOG_PER_ORIG, + ["successful_RPC_reply_to_invalid_request"] = Weird::ACTION_NOTICE_PER_ORIG, + ["irc_line_too_short"] = Weird::ACTION_LOG, + ["irc_invalid_kick_message_format"] = Weird::ACTION_LOG, + ["repeated_SYN_with_ack"] = Weird::ACTION_LOG, + ["partial_finger_request"] = Weird::ACTION_LOG, + ["irc_invalid_join_line"] = Weird::ACTION_LOG, + ["premature_connection_reuse"] = Weird::ACTION_LOG, + ["netbios_raw_session_msg"] = Weird::ACTION_LOG, + ["incompletely_captured_fragment"] = Weird::ACTION_LOG, + ["malformed_ssh_version"] = Weird::ACTION_LOG, + ["netbios_client_session_reply"] = Weird::ACTION_LOG, + ["bad_TCP_header_len"] = Weird::ACTION_LOG, + ["unescaped_%_in_URI"] = Weird::ACTION_LOG, + ["netbios_server_session_request"] = Weird::ACTION_LOG, + ["irc_too_many_invalid"] = Weird::ACTION_LOG, + ["irc_invalid_names_line"] = Weird::ACTION_LOG, + ["RPC_rexmit_inconsistency"] = Weird::ACTION_LOG, + ["smb_andx_command_failed_to_parse"] = Weird::ACTION_LOG, + ["irc_invalid_invite_message_format"] = Weird::ACTION_LOG, + ["spontaneous_FIN"] = Weird::ACTION_IGNORE, + ["DNS_truncated_quest_too_short"] = Weird::ACTION_LOG, + ["SSL_many_server_names"] = Weird::ACTION_LOG, + ["FIN_storm"] = Weird::ACTION_NOTICE_PER_ORIG, + ["data_before_established"] = Weird::ACTION_LOG, + ["SYN_after_reset"] = Weird::ACTION_LOG, + ["double_%_in_URI"] = Weird::ACTION_LOG, + ["DNS_truncated_ans_too_short"] = Weird::ACTION_LOG, + ["DNS_Conn_count_too_large"] = Weird::ACTION_LOG, + ["data_after_reset"] = Weird::ACTION_LOG, + ["RPC_underflow"] = Weird::ACTION_LOG, + ["unexpected_client_HTTP_data"] = Weird::ACTION_LOG, + ["originator_RPC_reply"] = Weird::ACTION_LOG_PER_ORIG, + ["DNS_label_too_long"] = Weird::ACTION_LOG_PER_ORIG, + ["SYN_with_data"] = Weird::ACTION_LOG_PER_ORIG, + ["RST_with_data"] = Weird::ACTION_LOG, + ["bad_HTTP_version"] = Weird::ACTION_LOG, + ["pending_data_when_closed"] = Weird::ACTION_LOG, + ["rlogin_text_after_rejected"] = Weird::ACTION_LOG, + ["FIN_advanced_last_seq"] = Weird::ACTION_LOG, + ["transaction_subcmd_missing"] = Weird::ACTION_LOG, + ["fragment_protocol_inconsistency"] = Weird::ACTION_LOG, + ["invalid_irc_global_users_reply"] = Weird::ACTION_LOG, + ["ident_request_addendum"] = Weird::ACTION_LOG, + ["window_recision"] = Weird::ACTION_LOG, + ["spontaneous_RST"] = Weird::ACTION_IGNORE, + ["truncated_header"] = Weird::ACTION_LOG, + ["UDP_datagram_length_mismatch"] = Weird::ACTION_LOG_PER_ORIG, + ["fragment_with_DF"] = Weird::ACTION_LOG, + ["SYN_after_close"] = Weird::ACTION_LOG, + ["SYN_seq_jump"] = Weird::ACTION_LOG, + ["irc_invalid_notice_message_format"] = Weird::ACTION_LOG, + ["irc_invalid_command"] = Weird::ACTION_LOG, + ["DNS_NAME_too_long"] = Weird::ACTION_LOG, + ["inflate_failed"] = Weird::ACTION_LOG, + ["base64_illegal_encoding"] = Weird::ACTION_LOG, + ["internally_truncated_header"] = Weird::ACTION_LOG, + ["pop3_server_sending_client_commands"] = Weird::ACTION_LOG, + ["irc_invalid_who_line"] = Weird::ACTION_LOG, + ["irc_invalid_privmsg_message_format"] = Weird::ACTION_LOG, + ["pop3_server_command_unknown"] = Weird::ACTION_LOG, + ["fragment_overlap"] = Weird::ACTION_LOG_PER_ORIG, + ["bad_rlogin_prolog"] = Weird::ACTION_LOG, + ["bad_ident_port"] = Weird::ACTION_LOG, + ["irc_invalid_line"] = Weird::ACTION_LOG, + ["HTTP_overlapping_messages"] = Weird::ACTION_LOG, + ["simultaneous_open"] = Weird::ACTION_LOG_PER_CONN, + ["unsolicited_SYN_response"] = Weird::ACTION_IGNORE, + ["DNS_RR_bad_length"] = Weird::ACTION_LOG, + ["TCP_christmas"] = Weird::ACTION_LOG, + ["inappropriate_FIN"] = Weird::ACTION_LOG, + ["irc_invalid_oper_message_format"] = Weird::ACTION_LOG, + ["no_smb_session_using_parsesambamsg"] = Weird::ACTION_LOG, + ["illegal_%_at_end_of_URI"] = Weird::ACTION_LOG, + ["active_connection_reuse"] = Weird::ACTION_LOG, + ["bad_TCP_checksum"] = Weird::ACTION_LOG_PER_ORIG, + ["fragment_inconsistency"] = Weird::ACTION_LOG_PER_ORIG, + ["malformed_ssh_identification"] = Weird::ACTION_LOG, + ["DNS_truncated_RR_rdlength_lt_len"] = Weird::ACTION_LOG, + ["possible_split_routing"] = Weird::ACTION_LOG, + ["irc_line_size_exceeded"] = Weird::ACTION_LOG, + ["bad_RPC_program"] = Weird::ACTION_LOG, + ["bad_ident_reply"] = Weird::ACTION_LOG, + ["HTTP_bad_chunk_size"] = Weird::ACTION_LOG, + ["unescaped_special_URI_char"] = Weird::ACTION_LOG, + ["HTTP_version_mismatch"] = Weird::ACTION_LOG, + ["irc_invalid_whois_message_format"] = Weird::ACTION_LOG, + ["rsh_text_after_rejected"] = Weird::ACTION_LOG, + ["partial_RPC"] = Weird::ACTION_LOG_PER_ORIG, + ["truncated_ARP"] = Weird::ACTION_LOG, + ["truncated_NTP"] = Weird::ACTION_LOG, + ["irc_invalid_whois_user_line"] = Weird::ACTION_LOG, + ["NUL_in_line"] = Weird::ACTION_LOG, + ["deficit_netbios_hdr_len"] = Weird::ACTION_LOG + } + + A table specifying default/recommended actions per weird type. + +State Variables +############### +.. bro:id:: Weird::did_log + + :Type: :bro:type:`set` [:bro:type:`string`, :bro:type:`string`] + :Attributes: :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` + :Default: ``{}`` + + A state set which tracks unique weirds solely by name to reduce + duplicate logging. This is deliberately not synchronized because it + could cause overload during storms. + +.. bro:id:: Weird::did_notice + + :Type: :bro:type:`set` [:bro:type:`string`, :bro:type:`string`] + :Attributes: :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` + :Default: ``{}`` + + A state set which tracks unique weirds solely by name to reduce + duplicate notices from being raised. + +.. bro:id:: Weird::weird_ignore + + :Type: :bro:type:`set` [:bro:type:`string`, :bro:type:`string`] + :Attributes: :bro:attr:`&create_expire` = ``10.0 mins`` :bro:attr:`&redef` + :Default: ``{}`` + + This table is used to track identifier and name pairs that should be + temporarily ignored because the problem has already been reported. + This helps reduce the volume of high volume weirds by only allowing + a unique weird every ``create_expire`` interval. + +Types +##### +.. bro:type:: Weird::Action + + :Type: :bro:type:`enum` + + .. bro:enum:: Weird::ACTION_UNSPECIFIED Weird::Action + + A dummy action indicating the user does not care what + internal decision is made regarding a given type of weird. + + .. bro:enum:: Weird::ACTION_IGNORE Weird::Action + + No action is to be taken. + + .. bro:enum:: Weird::ACTION_LOG Weird::Action + + Log the weird event every time it occurs. + + .. bro:enum:: Weird::ACTION_LOG_ONCE Weird::Action + + Log the weird event only once. + + .. bro:enum:: Weird::ACTION_LOG_PER_CONN Weird::Action + + Log the weird event once per connection. + + .. bro:enum:: Weird::ACTION_LOG_PER_ORIG Weird::Action + + Log the weird event once per originator host. + + .. bro:enum:: Weird::ACTION_NOTICE Weird::Action + + Always generate a notice associated with the weird event. + + .. bro:enum:: Weird::ACTION_NOTICE_ONCE Weird::Action + + Generate a notice associated with the weird event only once. + + .. bro:enum:: Weird::ACTION_NOTICE_PER_CONN Weird::Action + + Generate a notice for the weird event once per connection. + + .. bro:enum:: Weird::ACTION_NOTICE_PER_ORIG Weird::Action + + Generate a notice for the weird event once per originator host. + + Types of actions that may be taken when handling weird activity events. + +.. bro:type:: Weird::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The time when the weird occurred. + + uid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + If a connection is associated with this weird, this will be + the connection's unique ID. + + id: :bro:type:`conn_id` :bro:attr:`&log` :bro:attr:`&optional` + conn_id for the optional connection. + + conn: :bro:type:`connection` :bro:attr:`&optional` + A shorthand way of giving the uid and id to a weird. + + name: :bro:type:`string` :bro:attr:`&log` + The name of the weird that occurred. + + addl: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Additional information accompanying the weird if any. + + notice: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Indicate if this weird was also turned into a notice. + + peer: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` :bro:attr:`&default` = :bro:see:`peer_description` + The peer that originated this weird. This is helpful in + cluster deployments if a particular cluster node is having + trouble to help identify which node is having trouble. + + identifier: :bro:type:`string` :bro:attr:`&optional` + This field is to be provided when a weird is generated for + the purpose of deduplicating weirds. The identifier string + should be unique for a single instance of the weird. This field + is used to define when a weird is conceptually a duplicate of + a previous weird. + + The record which is used for representing and logging weirds. + +Events +###### +.. bro:id:: Weird::log_weird + + :Type: :bro:type:`event` (rec: :bro:type:`Weird::Info`) + + Handlers of this event are invoked once per write to the weird + logging stream before the data is actually written. + + + :rec: The weird columns about to be logged to the weird stream. + +Functions +######### +.. bro:id:: Weird::weird + + :Type: :bro:type:`function` (w: :bro:type:`Weird::Info`) : :bro:type:`void` + + + diff --git a/doc/scripts/base/frameworks/openflow/__load__.bro.rst b/doc/scripts/base/frameworks/openflow/__load__.bro.rst new file mode 100644 index 0000000000..9a355812a0 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/openflow/__load__.bro +===================================== + + +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/openflow/consts.bro `, :doc:`base/frameworks/openflow/main.bro `, :doc:`base/frameworks/openflow/non-cluster.bro `, :doc:`base/frameworks/openflow/plugins `, :doc:`base/frameworks/openflow/types.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/openflow/consts.bro.rst b/doc/scripts/base/frameworks/openflow/consts.bro.rst new file mode 100644 index 0000000000..30e0745a55 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/consts.bro.rst @@ -0,0 +1,564 @@ +:tocdepth: 3 + +base/frameworks/openflow/consts.bro +=================================== +.. bro:namespace:: OpenFlow + +Constants used by the OpenFlow framework. + +:Namespace: OpenFlow + +Summary +~~~~~~~ +Constants +######### +============================================================= ====================================================================== +:bro:id:`OpenFlow::ETH_APPLETALK`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_APPLETALK_ARP`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_ARP`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_EAP_OVER_LAN`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_ETHER_FLOW_CONTROL`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_IPX`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_IPX_OLD`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_IPv4`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_IPv6`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_JUMBO_FRAMES`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_MAC_SECURITY`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_MPLS_MULTICAST`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_MPLS_UNICAST`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_PPPOE_DISCOVERY`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_PPPOE_SESSION`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_PROVIDER_BRIDING`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_QINQ`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_RARP`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_VLAN`: :bro:type:`count` +:bro:id:`OpenFlow::ETH_WOL`: :bro:type:`count` +:bro:id:`OpenFlow::INVALID_COOKIE`: :bro:type:`count` Return value for a cookie from a flow + which is not added, modified or deleted + from the bro openflow framework. +:bro:id:`OpenFlow::IP_CBT`: :bro:type:`count` +:bro:id:`OpenFlow::IP_EGP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_ETHERIP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_FC`: :bro:type:`count` +:bro:id:`OpenFlow::IP_GGP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_GRE`: :bro:type:`count` +:bro:id:`OpenFlow::IP_HOPOPT`: :bro:type:`count` +:bro:id:`OpenFlow::IP_ICMP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_IGMP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_IGP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_IPIP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_IPv6`: :bro:type:`count` +:bro:id:`OpenFlow::IP_ISIS`: :bro:type:`count` +:bro:id:`OpenFlow::IP_L2TP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_MPLS`: :bro:type:`count` +:bro:id:`OpenFlow::IP_MTP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_OSPF`: :bro:type:`count` +:bro:id:`OpenFlow::IP_RDP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_RSVP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_ST`: :bro:type:`count` +:bro:id:`OpenFlow::IP_TCP`: :bro:type:`count` +:bro:id:`OpenFlow::IP_UDP`: :bro:type:`count` +:bro:id:`OpenFlow::OFPFF_CHECK_OVERLAP`: :bro:type:`count` Check for overlapping entries first. +:bro:id:`OpenFlow::OFPFF_EMERG`: :bro:type:`count` Remark this is for emergency. +:bro:id:`OpenFlow::OFPFF_SEND_FLOW_REM`: :bro:type:`count` Send flow removed message when flow + expires or is deleted. +:bro:id:`OpenFlow::OFPP_ALL`: :bro:type:`count` All physical ports except input port. +:bro:id:`OpenFlow::OFPP_ANY`: :bro:type:`count` Wildcard port used only for flow mod (delete) and flow stats requests. +:bro:id:`OpenFlow::OFPP_CONTROLLER`: :bro:type:`count` Send to controller. +:bro:id:`OpenFlow::OFPP_FLOOD`: :bro:type:`count` All physical ports except input port and + those disabled by STP. +:bro:id:`OpenFlow::OFPP_IN_PORT`: :bro:type:`count` Send the packet out the input port. +:bro:id:`OpenFlow::OFPP_LOCAL`: :bro:type:`count` Local openflow "port". +:bro:id:`OpenFlow::OFPP_NORMAL`: :bro:type:`count` Process with normal L2/L3 switching. +:bro:id:`OpenFlow::OFPP_TABLE`: :bro:type:`count` Perform actions in flow table. +:bro:id:`OpenFlow::OFPTT_ALL`: :bro:type:`count` +:bro:id:`OpenFlow::OFP_NO_BUFFER`: :bro:type:`count` +============================================================= ====================================================================== + +Types +##### +============================================================ ====================================== +:bro:type:`OpenFlow::ofp_action_type`: :bro:type:`enum` Openflow action_type definitions. +:bro:type:`OpenFlow::ofp_config_flags`: :bro:type:`enum` Openflow config flag definitions. +:bro:type:`OpenFlow::ofp_flow_mod_command`: :bro:type:`enum` Openflow flow_mod_command definitions. +============================================================ ====================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: OpenFlow::ETH_APPLETALK + + :Type: :bro:type:`count` + :Default: ``32923`` + + +.. bro:id:: OpenFlow::ETH_APPLETALK_ARP + + :Type: :bro:type:`count` + :Default: ``33011`` + + +.. bro:id:: OpenFlow::ETH_ARP + + :Type: :bro:type:`count` + :Default: ``2054`` + + +.. bro:id:: OpenFlow::ETH_EAP_OVER_LAN + + :Type: :bro:type:`count` + :Default: ``34958`` + + +.. bro:id:: OpenFlow::ETH_ETHER_FLOW_CONTROL + + :Type: :bro:type:`count` + :Default: ``34824`` + + +.. bro:id:: OpenFlow::ETH_IPX + + :Type: :bro:type:`count` + :Default: ``33080`` + + +.. bro:id:: OpenFlow::ETH_IPX_OLD + + :Type: :bro:type:`count` + :Default: ``33079`` + + +.. bro:id:: OpenFlow::ETH_IPv4 + + :Type: :bro:type:`count` + :Default: ``2048`` + + +.. bro:id:: OpenFlow::ETH_IPv6 + + :Type: :bro:type:`count` + :Default: ``34525`` + + +.. bro:id:: OpenFlow::ETH_JUMBO_FRAMES + + :Type: :bro:type:`count` + :Default: ``34928`` + + +.. bro:id:: OpenFlow::ETH_MAC_SECURITY + + :Type: :bro:type:`count` + :Default: ``35045`` + + +.. bro:id:: OpenFlow::ETH_MPLS_MULTICAST + + :Type: :bro:type:`count` + :Default: ``34888`` + + +.. bro:id:: OpenFlow::ETH_MPLS_UNICAST + + :Type: :bro:type:`count` + :Default: ``34887`` + + +.. bro:id:: OpenFlow::ETH_PPPOE_DISCOVERY + + :Type: :bro:type:`count` + :Default: ``34915`` + + +.. bro:id:: OpenFlow::ETH_PPPOE_SESSION + + :Type: :bro:type:`count` + :Default: ``34916`` + + +.. bro:id:: OpenFlow::ETH_PROVIDER_BRIDING + + :Type: :bro:type:`count` + :Default: ``34984`` + + +.. bro:id:: OpenFlow::ETH_QINQ + + :Type: :bro:type:`count` + :Default: ``37120`` + + +.. bro:id:: OpenFlow::ETH_RARP + + :Type: :bro:type:`count` + :Default: ``32821`` + + +.. bro:id:: OpenFlow::ETH_VLAN + + :Type: :bro:type:`count` + :Default: ``33024`` + + +.. bro:id:: OpenFlow::ETH_WOL + + :Type: :bro:type:`count` + :Default: ``2114`` + + +.. bro:id:: OpenFlow::INVALID_COOKIE + + :Type: :bro:type:`count` + :Default: ``18446744073709551615`` + + Return value for a cookie from a flow + which is not added, modified or deleted + from the bro openflow framework. + +.. bro:id:: OpenFlow::IP_CBT + + :Type: :bro:type:`count` + :Default: ``7`` + + +.. bro:id:: OpenFlow::IP_EGP + + :Type: :bro:type:`count` + :Default: ``8`` + + +.. bro:id:: OpenFlow::IP_ETHERIP + + :Type: :bro:type:`count` + :Default: ``97`` + + +.. bro:id:: OpenFlow::IP_FC + + :Type: :bro:type:`count` + :Default: ``133`` + + +.. bro:id:: OpenFlow::IP_GGP + + :Type: :bro:type:`count` + :Default: ``3`` + + +.. bro:id:: OpenFlow::IP_GRE + + :Type: :bro:type:`count` + :Default: ``47`` + + +.. bro:id:: OpenFlow::IP_HOPOPT + + :Type: :bro:type:`count` + :Default: ``0`` + + +.. bro:id:: OpenFlow::IP_ICMP + + :Type: :bro:type:`count` + :Default: ``1`` + + +.. bro:id:: OpenFlow::IP_IGMP + + :Type: :bro:type:`count` + :Default: ``2`` + + +.. bro:id:: OpenFlow::IP_IGP + + :Type: :bro:type:`count` + :Default: ``9`` + + +.. bro:id:: OpenFlow::IP_IPIP + + :Type: :bro:type:`count` + :Default: ``4`` + + +.. bro:id:: OpenFlow::IP_IPv6 + + :Type: :bro:type:`count` + :Default: ``41`` + + +.. bro:id:: OpenFlow::IP_ISIS + + :Type: :bro:type:`count` + :Default: ``124`` + + +.. bro:id:: OpenFlow::IP_L2TP + + :Type: :bro:type:`count` + :Default: ``115`` + + +.. bro:id:: OpenFlow::IP_MPLS + + :Type: :bro:type:`count` + :Default: ``137`` + + +.. bro:id:: OpenFlow::IP_MTP + + :Type: :bro:type:`count` + :Default: ``92`` + + +.. bro:id:: OpenFlow::IP_OSPF + + :Type: :bro:type:`count` + :Default: ``89`` + + +.. bro:id:: OpenFlow::IP_RDP + + :Type: :bro:type:`count` + :Default: ``27`` + + +.. bro:id:: OpenFlow::IP_RSVP + + :Type: :bro:type:`count` + :Default: ``46`` + + +.. bro:id:: OpenFlow::IP_ST + + :Type: :bro:type:`count` + :Default: ``5`` + + +.. bro:id:: OpenFlow::IP_TCP + + :Type: :bro:type:`count` + :Default: ``6`` + + +.. bro:id:: OpenFlow::IP_UDP + + :Type: :bro:type:`count` + :Default: ``17`` + + +.. bro:id:: OpenFlow::OFPFF_CHECK_OVERLAP + + :Type: :bro:type:`count` + :Default: ``2`` + + Check for overlapping entries first. + +.. bro:id:: OpenFlow::OFPFF_EMERG + + :Type: :bro:type:`count` + :Default: ``4`` + + Remark this is for emergency. + Flows added with this are only used + when the controller is disconnected. + +.. bro:id:: OpenFlow::OFPFF_SEND_FLOW_REM + + :Type: :bro:type:`count` + :Default: ``1`` + + Send flow removed message when flow + expires or is deleted. + +.. bro:id:: OpenFlow::OFPP_ALL + + :Type: :bro:type:`count` + :Default: ``4294967292`` + + All physical ports except input port. + +.. bro:id:: OpenFlow::OFPP_ANY + + :Type: :bro:type:`count` + :Default: ``4294967295`` + + Wildcard port used only for flow mod (delete) and flow stats requests. + +.. bro:id:: OpenFlow::OFPP_CONTROLLER + + :Type: :bro:type:`count` + :Default: ``4294967293`` + + Send to controller. + +.. bro:id:: OpenFlow::OFPP_FLOOD + + :Type: :bro:type:`count` + :Default: ``4294967291`` + + All physical ports except input port and + those disabled by STP. + +.. bro:id:: OpenFlow::OFPP_IN_PORT + + :Type: :bro:type:`count` + :Default: ``4294967288`` + + Send the packet out the input port. This + virual port must be explicitly used in + order to send back out of the input port. + +.. bro:id:: OpenFlow::OFPP_LOCAL + + :Type: :bro:type:`count` + :Default: ``4294967294`` + + Local openflow "port". + +.. bro:id:: OpenFlow::OFPP_NORMAL + + :Type: :bro:type:`count` + :Default: ``4294967290`` + + Process with normal L2/L3 switching. + +.. bro:id:: OpenFlow::OFPP_TABLE + + :Type: :bro:type:`count` + :Default: ``4294967289`` + + Perform actions in flow table. + NB: This can only be the destination port + for packet-out messages. + +.. bro:id:: OpenFlow::OFPTT_ALL + + :Type: :bro:type:`count` + :Default: ``255`` + + +.. bro:id:: OpenFlow::OFP_NO_BUFFER + + :Type: :bro:type:`count` + :Default: ``4294967295`` + + +Types +##### +.. bro:type:: OpenFlow::ofp_action_type + + :Type: :bro:type:`enum` + + .. bro:enum:: OpenFlow::OFPAT_OUTPUT OpenFlow::ofp_action_type + + Output to switch port. + + .. bro:enum:: OpenFlow::OFPAT_SET_VLAN_VID OpenFlow::ofp_action_type + + Set the 802.1q VLAN id. + + .. bro:enum:: OpenFlow::OFPAT_SET_VLAN_PCP OpenFlow::ofp_action_type + + Set the 802.1q priority. + + .. bro:enum:: OpenFlow::OFPAT_STRIP_VLAN OpenFlow::ofp_action_type + + Strip the 802.1q header. + + .. bro:enum:: OpenFlow::OFPAT_SET_DL_SRC OpenFlow::ofp_action_type + + Ethernet source address. + + .. bro:enum:: OpenFlow::OFPAT_SET_DL_DST OpenFlow::ofp_action_type + + Ethernet destination address. + + .. bro:enum:: OpenFlow::OFPAT_SET_NW_SRC OpenFlow::ofp_action_type + + IP source address. + + .. bro:enum:: OpenFlow::OFPAT_SET_NW_DST OpenFlow::ofp_action_type + + IP destination address. + + .. bro:enum:: OpenFlow::OFPAT_SET_NW_TOS OpenFlow::ofp_action_type + + IP ToS (DSCP field, 6 bits). + + .. bro:enum:: OpenFlow::OFPAT_SET_TP_SRC OpenFlow::ofp_action_type + + TCP/UDP source port. + + .. bro:enum:: OpenFlow::OFPAT_SET_TP_DST OpenFlow::ofp_action_type + + TCP/UDP destination port. + + .. bro:enum:: OpenFlow::OFPAT_ENQUEUE OpenFlow::ofp_action_type + + Output to queue. + + .. bro:enum:: OpenFlow::OFPAT_VENDOR OpenFlow::ofp_action_type + + Vendor specific. + + Openflow action_type definitions. + + The openflow action type defines + what actions openflow can take + to modify a packet + +.. bro:type:: OpenFlow::ofp_config_flags + + :Type: :bro:type:`enum` + + .. bro:enum:: OpenFlow::OFPC_FRAG_NORMAL OpenFlow::ofp_config_flags + + No special handling for fragments. + + .. bro:enum:: OpenFlow::OFPC_FRAG_DROP OpenFlow::ofp_config_flags + + Drop fragments. + + .. bro:enum:: OpenFlow::OFPC_FRAG_REASM OpenFlow::ofp_config_flags + + Reassemble (only if OFPC_IP_REASM set). + + .. bro:enum:: OpenFlow::OFPC_FRAG_MASK OpenFlow::ofp_config_flags + + Openflow config flag definitions. + + TODO: describe + +.. bro:type:: OpenFlow::ofp_flow_mod_command + + :Type: :bro:type:`enum` + + .. bro:enum:: OpenFlow::OFPFC_ADD OpenFlow::ofp_flow_mod_command + + New flow. + + .. bro:enum:: OpenFlow::OFPFC_MODIFY OpenFlow::ofp_flow_mod_command + + Modify all matching flows. + + .. bro:enum:: OpenFlow::OFPFC_MODIFY_STRICT OpenFlow::ofp_flow_mod_command + + Modify entry strictly matching wildcards. + + .. bro:enum:: OpenFlow::OFPFC_DELETE OpenFlow::ofp_flow_mod_command + + Delete all matching flows. + + .. bro:enum:: OpenFlow::OFPFC_DELETE_STRICT OpenFlow::ofp_flow_mod_command + + Strictly matching wildcards and priority. + + Openflow flow_mod_command definitions. + + The openflow flow_mod_command describes + of what kind an action is. + + diff --git a/doc/scripts/base/frameworks/openflow/index.rst b/doc/scripts/base/frameworks/openflow/index.rst new file mode 100644 index 0000000000..9cb64569b1 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/index.rst @@ -0,0 +1,50 @@ +:orphan: + +Package: base/frameworks/openflow +================================= + +The OpenFlow framework exposes the data structures and functions +necessary to interface to OpenFlow capable hardware. + +:doc:`/scripts/base/frameworks/openflow/__load__.bro` + + +:doc:`/scripts/base/frameworks/openflow/consts.bro` + + Constants used by the OpenFlow framework. + +:doc:`/scripts/base/frameworks/openflow/types.bro` + + Types used by the OpenFlow framework. + +:doc:`/scripts/base/frameworks/openflow/main.bro` + + Bro's OpenFlow control framework. + + This plugin-based framework allows to control OpenFlow capable + switches by implementing communication to an OpenFlow controller + via plugins. The framework has to be instantiated via the new function + in one of the plugins. This framework only offers very low-level + functionality; if you want to use OpenFlow capable switches, e.g., + for shunting, please look at the NetControl framework, which provides higher + level functions and can use the OpenFlow framework as a backend. + +:doc:`/scripts/base/frameworks/openflow/plugins/__load__.bro` + + +:doc:`/scripts/base/frameworks/openflow/plugins/ryu.bro` + + OpenFlow plugin for the Ryu controller. + +:doc:`/scripts/base/frameworks/openflow/plugins/log.bro` + + OpenFlow plugin that outputs flow-modification commands + to a Bro log file. + +:doc:`/scripts/base/frameworks/openflow/plugins/broker.bro` + + OpenFlow plugin for interfacing to controllers via Broker. + +:doc:`/scripts/base/frameworks/openflow/non-cluster.bro` + + diff --git a/doc/scripts/base/frameworks/openflow/main.bro.rst b/doc/scripts/base/frameworks/openflow/main.bro.rst new file mode 100644 index 0000000000..ccec23e908 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/main.bro.rst @@ -0,0 +1,265 @@ +:tocdepth: 3 + +base/frameworks/openflow/main.bro +================================= +.. bro:namespace:: OpenFlow + +Bro's OpenFlow control framework. + +This plugin-based framework allows to control OpenFlow capable +switches by implementing communication to an OpenFlow controller +via plugins. The framework has to be instantiated via the new function +in one of the plugins. This framework only offers very low-level +functionality; if you want to use OpenFlow capable switches, e.g., +for shunting, please look at the NetControl framework, which provides higher +level functions and can use the OpenFlow framework as a backend. + +:Namespace: OpenFlow +:Imports: :doc:`base/frameworks/openflow/consts.bro `, :doc:`base/frameworks/openflow/types.bro ` + +Summary +~~~~~~~ +Events +###### +=========================================================== ============================================================================================= +:bro:id:`OpenFlow::controller_activated`: :bro:type:`event` Event that is raised once a controller finishes initialization + and is completely activated. +:bro:id:`OpenFlow::flow_mod_failure`: :bro:type:`event` Reports an error while installing a flow Rule. +:bro:id:`OpenFlow::flow_mod_success`: :bro:type:`event` Event confirming successful modification of a flow rule. +:bro:id:`OpenFlow::flow_removed`: :bro:type:`event` Reports that a flow was removed by the switch because of either the hard or the idle timeout. +=========================================================== ============================================================================================= + +Functions +######### +=============================================================== ===================================================================== +:bro:id:`OpenFlow::controller_init_done`: :bro:type:`function` Function to signal that a controller finished activation and is + ready to use. +:bro:id:`OpenFlow::flow_clear`: :bro:type:`function` Clear the current flow table of the controller. +:bro:id:`OpenFlow::flow_mod`: :bro:type:`function` Global flow_mod function. +:bro:id:`OpenFlow::generate_cookie`: :bro:type:`function` Function to generate a new cookie using our group id. +:bro:id:`OpenFlow::get_cookie_gid`: :bro:type:`function` Function to get the group id out of a given cookie. +:bro:id:`OpenFlow::get_cookie_uid`: :bro:type:`function` Function to get the unique id out of a given cookie. +:bro:id:`OpenFlow::lookup_controller`: :bro:type:`function` Function to lookup a controller instance by name. +:bro:id:`OpenFlow::match_conn`: :bro:type:`function` Convert a conn_id record into an ofp_match record that can be used to + create match objects for OpenFlow. +:bro:id:`OpenFlow::register_controller`: :bro:type:`function` Function to register a controller instance. +:bro:id:`OpenFlow::unregister_controller`: :bro:type:`function` Function to unregister a controller instance. +=============================================================== ===================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: OpenFlow::controller_activated + + :Type: :bro:type:`event` (name: :bro:type:`string`, controller: :bro:type:`OpenFlow::Controller`) + + Event that is raised once a controller finishes initialization + and is completely activated. + + :name: Unique name of this controller instance. + + + :controller: The controller that finished activation. + +.. bro:id:: OpenFlow::flow_mod_failure + + :Type: :bro:type:`event` (name: :bro:type:`string`, match: :bro:type:`OpenFlow::ofp_match`, flow_mod: :bro:type:`OpenFlow::ofp_flow_mod`, msg: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) + + Reports an error while installing a flow Rule. + + + :name: The unique name of the OpenFlow controller from which this event originated. + + + :match: The ofp_match record which describes the flow to match. + + + :flow_mod: The openflow flow_mod record which describes the action to take. + + + :msg: Message to describe the event. + +.. bro:id:: OpenFlow::flow_mod_success + + :Type: :bro:type:`event` (name: :bro:type:`string`, match: :bro:type:`OpenFlow::ofp_match`, flow_mod: :bro:type:`OpenFlow::ofp_flow_mod`, msg: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional`) + + Event confirming successful modification of a flow rule. + + + :name: The unique name of the OpenFlow controller from which this event originated. + + + :match: The ofp_match record which describes the flow to match. + + + :flow_mod: The openflow flow_mod record which describes the action to take. + + + :msg: An optional informational message by the plugin. + +.. bro:id:: OpenFlow::flow_removed + + :Type: :bro:type:`event` (name: :bro:type:`string`, match: :bro:type:`OpenFlow::ofp_match`, cookie: :bro:type:`count`, priority: :bro:type:`count`, reason: :bro:type:`count`, duration_sec: :bro:type:`count`, idle_timeout: :bro:type:`count`, packet_count: :bro:type:`count`, byte_count: :bro:type:`count`) + + Reports that a flow was removed by the switch because of either the hard or the idle timeout. + This message is only generated by controllers that indicate that they support flow removal + in supports_flow_removed. + + + :name: The unique name of the OpenFlow controller from which this event originated. + + + :match: The ofp_match record which was used to create the flow. + + + :cookie: The cookie that was specified when creating the flow. + + + :priority: The priority that was specified when creating the flow. + + + :reason: The reason for flow removal (OFPRR_*). + + + :duration_sec: Duration of the flow in seconds. + + + :packet_count: Packet count of the flow. + + + :byte_count: Byte count of the flow. + +Functions +######### +.. bro:id:: OpenFlow::controller_init_done + + :Type: :bro:type:`function` (controller: :bro:type:`OpenFlow::Controller`) : :bro:type:`void` + + Function to signal that a controller finished activation and is + ready to use. Will throw the ``OpenFlow::controller_activated`` + event. + +.. bro:id:: OpenFlow::flow_clear + + :Type: :bro:type:`function` (controller: :bro:type:`OpenFlow::Controller`) : :bro:type:`bool` + + Clear the current flow table of the controller. + + + :controller: The controller which should execute the flow modification. + + + :returns: F on error or if the plugin does not support the operation, T when the operation was queued. + +.. bro:id:: OpenFlow::flow_mod + + :Type: :bro:type:`function` (controller: :bro:type:`OpenFlow::Controller`, match: :bro:type:`OpenFlow::ofp_match`, flow_mod: :bro:type:`OpenFlow::ofp_flow_mod`) : :bro:type:`bool` + + Global flow_mod function. + + + :controller: The controller which should execute the flow modification. + + + :match: The ofp_match record which describes the flow to match. + + + :flow_mod: The openflow flow_mod record which describes the action to take. + + + :returns: F on error or if the plugin does not support the operation, T when the operation was queued. + +.. bro:id:: OpenFlow::generate_cookie + + :Type: :bro:type:`function` (cookie: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional`) : :bro:type:`count` + + Function to generate a new cookie using our group id. + + + :cookie: The openflow match cookie. + + + :returns: The cookie group id. + +.. bro:id:: OpenFlow::get_cookie_gid + + :Type: :bro:type:`function` (cookie: :bro:type:`count`) : :bro:type:`count` + + Function to get the group id out of a given cookie. + + + :cookie: The openflow match cookie. + + + :returns: The cookie group id. + +.. bro:id:: OpenFlow::get_cookie_uid + + :Type: :bro:type:`function` (cookie: :bro:type:`count`) : :bro:type:`count` + + Function to get the unique id out of a given cookie. + + + :cookie: The openflow match cookie. + + + :returns: The cookie unique id. + +.. bro:id:: OpenFlow::lookup_controller + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`vector` of :bro:type:`OpenFlow::Controller` + + Function to lookup a controller instance by name. + + + :name: Unique name of the controller to look up. + + + :returns: One element vector with controller, if found. Empty vector otherwise. + +.. bro:id:: OpenFlow::match_conn + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`, reverse: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional`) : :bro:type:`OpenFlow::ofp_match` + + Convert a conn_id record into an ofp_match record that can be used to + create match objects for OpenFlow. + + + :id: The conn_id record that describes the record. + + + :reverse: Reverse the sources and destinations when creating the match record (default F). + + + :returns: ofp_match object for the conn_id record. + +.. bro:id:: OpenFlow::register_controller + + :Type: :bro:type:`function` (tpe: :bro:type:`OpenFlow::Plugin`, name: :bro:type:`string`, controller: :bro:type:`OpenFlow::Controller`) : :bro:type:`void` + + Function to register a controller instance. This function + is called automatically by the plugin _new functions. + + + :tpe: Type of this plugin. + + + :name: Unique name of this controller instance. + + + :controller: The controller to register. + +.. bro:id:: OpenFlow::unregister_controller + + :Type: :bro:type:`function` (controller: :bro:type:`OpenFlow::Controller`) : :bro:type:`void` + + Function to unregister a controller instance. This function + should be called when a specific controller should no longer + be used. + + + :controller: The controller to unregister. + + diff --git a/doc/scripts/base/frameworks/openflow/non-cluster.bro.rst b/doc/scripts/base/frameworks/openflow/non-cluster.bro.rst new file mode 100644 index 0000000000..d6afe2b188 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/non-cluster.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/frameworks/openflow/non-cluster.bro +======================================== +.. bro:namespace:: OpenFlow + + +:Namespace: OpenFlow +:Imports: :doc:`base/frameworks/openflow/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/openflow/plugins/__load__.bro.rst b/doc/scripts/base/frameworks/openflow/plugins/__load__.bro.rst new file mode 100644 index 0000000000..677e1f3008 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/plugins/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/openflow/plugins/__load__.bro +============================================= + + +:Imports: :doc:`base/frameworks/openflow/plugins/broker.bro `, :doc:`base/frameworks/openflow/plugins/log.bro `, :doc:`base/frameworks/openflow/plugins/ryu.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/openflow/plugins/broker.bro.rst b/doc/scripts/base/frameworks/openflow/plugins/broker.bro.rst new file mode 100644 index 0000000000..93b82f78c4 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/plugins/broker.bro.rst @@ -0,0 +1,72 @@ +:tocdepth: 3 + +base/frameworks/openflow/plugins/broker.bro +=========================================== +.. bro:namespace:: OpenFlow + +OpenFlow plugin for interfacing to controllers via Broker. + +:Namespace: OpenFlow +:Imports: :doc:`base/frameworks/broker `, :doc:`base/frameworks/openflow ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================================================ = +:bro:type:`OpenFlow::ControllerState`: :bro:type:`record` :bro:attr:`&redef` +:bro:type:`OpenFlow::Plugin`: :bro:type:`enum` +============================================================================ = + +Events +###### +======================================================== = +:bro:id:`OpenFlow::broker_flow_clear`: :bro:type:`event` +:bro:id:`OpenFlow::broker_flow_mod`: :bro:type:`event` +======================================================== = + +Functions +######### +==================================================== ============================== +:bro:id:`OpenFlow::broker_new`: :bro:type:`function` Broker controller constructor. +==================================================== ============================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Events +###### +.. bro:id:: OpenFlow::broker_flow_clear + + :Type: :bro:type:`event` (name: :bro:type:`string`, dpid: :bro:type:`count`) + + +.. bro:id:: OpenFlow::broker_flow_mod + + :Type: :bro:type:`event` (name: :bro:type:`string`, dpid: :bro:type:`count`, match: :bro:type:`OpenFlow::ofp_match`, flow_mod: :bro:type:`OpenFlow::ofp_flow_mod`) + + +Functions +######### +.. bro:id:: OpenFlow::broker_new + + :Type: :bro:type:`function` (name: :bro:type:`string`, host: :bro:type:`addr`, host_port: :bro:type:`port`, topic: :bro:type:`string`, dpid: :bro:type:`count`) : :bro:type:`OpenFlow::Controller` + + Broker controller constructor. + + + :host: Controller ip. + + + :host_port: Controller listen port. + + + :topic: Broker topic to send messages to. + + + :dpid: OpenFlow switch datapath id. + + + :returns: OpenFlow::Controller record. + + diff --git a/doc/scripts/base/frameworks/openflow/plugins/index.rst b/doc/scripts/base/frameworks/openflow/plugins/index.rst new file mode 100644 index 0000000000..b79dd7e776 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/plugins/index.rst @@ -0,0 +1,23 @@ +:orphan: + +Package: base/frameworks/openflow/plugins +========================================= + +Plugins for the OpenFlow framework. + +:doc:`/scripts/base/frameworks/openflow/plugins/__load__.bro` + + +:doc:`/scripts/base/frameworks/openflow/plugins/ryu.bro` + + OpenFlow plugin for the Ryu controller. + +:doc:`/scripts/base/frameworks/openflow/plugins/log.bro` + + OpenFlow plugin that outputs flow-modification commands + to a Bro log file. + +:doc:`/scripts/base/frameworks/openflow/plugins/broker.bro` + + OpenFlow plugin for interfacing to controllers via Broker. + diff --git a/doc/scripts/base/frameworks/openflow/plugins/log.bro.rst b/doc/scripts/base/frameworks/openflow/plugins/log.bro.rst new file mode 100644 index 0000000000..4ce67b0535 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/plugins/log.bro.rst @@ -0,0 +1,91 @@ +:tocdepth: 3 + +base/frameworks/openflow/plugins/log.bro +======================================== +.. bro:namespace:: OpenFlow + +OpenFlow plugin that outputs flow-modification commands +to a Bro log file. + +:Namespace: OpenFlow +:Imports: :doc:`base/frameworks/logging `, :doc:`base/frameworks/openflow ` + +Summary +~~~~~~~ +Types +##### +============================================== ================================================================= +:bro:type:`OpenFlow::Info`: :bro:type:`record` The record type which contains column fields of the OpenFlow log. +============================================== ================================================================= + +Redefinitions +############# +============================================================================ = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`OpenFlow::ControllerState`: :bro:type:`record` :bro:attr:`&redef` +:bro:type:`OpenFlow::Plugin`: :bro:type:`enum` +============================================================================ = + +Events +###### +=================================================== ================================================================== +:bro:id:`OpenFlow::log_openflow`: :bro:type:`event` Event that can be handled to access the :bro:type:`OpenFlow::Info` + record as it is sent on to the logging framework. +=================================================== ================================================================== + +Functions +######### +================================================= =========================== +:bro:id:`OpenFlow::log_new`: :bro:type:`function` Log controller constructor. +================================================= =========================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: OpenFlow::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Network time. + + dpid: :bro:type:`count` :bro:attr:`&log` + OpenFlow switch datapath id. + + match: :bro:type:`OpenFlow::ofp_match` :bro:attr:`&log` + OpenFlow match fields. + + flow_mod: :bro:type:`OpenFlow::ofp_flow_mod` :bro:attr:`&log` + OpenFlow modify flow entry message. + + The record type which contains column fields of the OpenFlow log. + +Events +###### +.. bro:id:: OpenFlow::log_openflow + + :Type: :bro:type:`event` (rec: :bro:type:`OpenFlow::Info`) + + Event that can be handled to access the :bro:type:`OpenFlow::Info` + record as it is sent on to the logging framework. + +Functions +######### +.. bro:id:: OpenFlow::log_new + + :Type: :bro:type:`function` (dpid: :bro:type:`count`, success_event: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional`) : :bro:type:`OpenFlow::Controller` + + Log controller constructor. + + + :dpid: OpenFlow switch datapath id. + + + :success_event: If true, flow_mod_success is raised for each logged line. + + + :returns: OpenFlow::Controller record. + + diff --git a/doc/scripts/base/frameworks/openflow/plugins/ryu.bro.rst b/doc/scripts/base/frameworks/openflow/plugins/ryu.bro.rst new file mode 100644 index 0000000000..64ee0c72f5 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/plugins/ryu.bro.rst @@ -0,0 +1,50 @@ +:tocdepth: 3 + +base/frameworks/openflow/plugins/ryu.bro +======================================== +.. bro:namespace:: OpenFlow + +OpenFlow plugin for the Ryu controller. + +:Namespace: OpenFlow +:Imports: :doc:`base/frameworks/openflow `, :doc:`base/utils/active-http.bro `, :doc:`base/utils/exec.bro `, :doc:`base/utils/json.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================================================ = +:bro:type:`OpenFlow::ControllerState`: :bro:type:`record` :bro:attr:`&redef` +:bro:type:`OpenFlow::Plugin`: :bro:type:`enum` +============================================================================ = + +Functions +######### +================================================= =========================== +:bro:id:`OpenFlow::ryu_new`: :bro:type:`function` Ryu controller constructor. +================================================= =========================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: OpenFlow::ryu_new + + :Type: :bro:type:`function` (host: :bro:type:`addr`, host_port: :bro:type:`count`, dpid: :bro:type:`count`) : :bro:type:`OpenFlow::Controller` + + Ryu controller constructor. + + + :host: Controller ip. + + + :host_port: Controller listen port. + + + :dpid: OpenFlow switch datapath id. + + + :returns: OpenFlow::Controller record. + + diff --git a/doc/scripts/base/frameworks/openflow/types.bro.rst b/doc/scripts/base/frameworks/openflow/types.bro.rst new file mode 100644 index 0000000000..db8a108bf8 --- /dev/null +++ b/doc/scripts/base/frameworks/openflow/types.bro.rst @@ -0,0 +1,264 @@ +:tocdepth: 3 + +base/frameworks/openflow/types.bro +================================== +.. bro:namespace:: OpenFlow + +Types used by the OpenFlow framework. + +:Namespace: OpenFlow +:Imports: :doc:`base/frameworks/openflow/consts.bro ` + +Summary +~~~~~~~ +Types +##### +============================================================================ =============================================================== +:bro:type:`OpenFlow::Controller`: :bro:type:`record` Controller record representing an openflow controller. +:bro:type:`OpenFlow::ControllerState`: :bro:type:`record` :bro:attr:`&redef` Controller related state. +:bro:type:`OpenFlow::Plugin`: :bro:type:`enum` Available openflow plugins. +:bro:type:`OpenFlow::ofp_flow_action`: :bro:type:`record` :bro:attr:`&log` The actions that can be taken in a flow. +:bro:type:`OpenFlow::ofp_flow_mod`: :bro:type:`record` :bro:attr:`&log` Openflow flow_mod definition, describing the action to perform. +:bro:type:`OpenFlow::ofp_match`: :bro:type:`record` :bro:attr:`&log` Openflow match definition. +============================================================================ =============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: OpenFlow::Controller + + :Type: :bro:type:`record` + + state: :bro:type:`OpenFlow::ControllerState` + Controller related state. + + supports_flow_removed: :bro:type:`bool` + Does the controller support the flow_removed event? + + describe: :bro:type:`function` (state: :bro:type:`OpenFlow::ControllerState`) : :bro:type:`string` + Function that describes the controller. Has to be implemented. + + init: :bro:type:`function` (state: :bro:type:`OpenFlow::ControllerState`) : :bro:type:`void` :bro:attr:`&optional` + One-time initialization function. If defined, controller_init_done has to be called once initialization finishes. + + destroy: :bro:type:`function` (state: :bro:type:`OpenFlow::ControllerState`) : :bro:type:`void` :bro:attr:`&optional` + One-time destruction function. + + flow_mod: :bro:type:`function` (state: :bro:type:`OpenFlow::ControllerState`, match: :bro:type:`OpenFlow::ofp_match`, flow_mod: :bro:type:`OpenFlow::ofp_flow_mod`) : :bro:type:`bool` :bro:attr:`&optional` + flow_mod function. + + flow_clear: :bro:type:`function` (state: :bro:type:`OpenFlow::ControllerState`) : :bro:type:`bool` :bro:attr:`&optional` + flow_clear function. + + Controller record representing an openflow controller. + +.. bro:type:: OpenFlow::ControllerState + + :Type: :bro:type:`record` + + _plugin: :bro:type:`OpenFlow::Plugin` :bro:attr:`&optional` + Internally set to the type of plugin used. + + _name: :bro:type:`string` :bro:attr:`&optional` + Internally set to the unique name of the controller. + + _activated: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Internally set to true once the controller is activated. + + ryu_host: :bro:type:`addr` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/ryu.bro` is loaded) + + Controller ip. + + ryu_port: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/ryu.bro` is loaded) + + Controller listen port. + + ryu_dpid: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/ryu.bro` is loaded) + + OpenFlow switch datapath id. + + ryu_debug: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/ryu.bro` is loaded) + + Enable debug mode - output JSON to stdout; do not perform actions. + + log_dpid: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/log.bro` is loaded) + + OpenFlow switch datapath id. + + log_success_event: :bro:type:`bool` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/log.bro` is loaded) + + Raise or do not raise success event. + + broker_host: :bro:type:`addr` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/broker.bro` is loaded) + + Controller ip. + + broker_port: :bro:type:`port` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/broker.bro` is loaded) + + Controller listen port. + + broker_dpid: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/broker.bro` is loaded) + + OpenFlow switch datapath id. + + broker_topic: :bro:type:`string` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/openflow/plugins/broker.bro` is loaded) + + Topic to send events for this controller to. + :Attributes: :bro:attr:`&redef` + + Controller related state. + Can be redefined by plugins to + add state. + +.. bro:type:: OpenFlow::Plugin + + :Type: :bro:type:`enum` + + .. bro:enum:: OpenFlow::INVALID OpenFlow::Plugin + + Internal placeholder plugin. + + .. bro:enum:: OpenFlow::RYU OpenFlow::Plugin + + (present if :doc:`/scripts/base/frameworks/openflow/plugins/ryu.bro` is loaded) + + + .. bro:enum:: OpenFlow::OFLOG OpenFlow::Plugin + + (present if :doc:`/scripts/base/frameworks/openflow/plugins/log.bro` is loaded) + + + .. bro:enum:: OpenFlow::BROKER OpenFlow::Plugin + + (present if :doc:`/scripts/base/frameworks/openflow/plugins/broker.bro` is loaded) + + + Available openflow plugins. + +.. bro:type:: OpenFlow::ofp_flow_action + + :Type: :bro:type:`record` + + out_ports: :bro:type:`vector` of :bro:type:`count` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional` :bro:attr:`&log` + Output ports to send data to. + + vlan_vid: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Set vlan vid to this value. + + vlan_pcp: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Set vlan priority to this value. + + vlan_strip: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` :bro:attr:`&log` + Strip vlan tag. + + dl_src: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Set ethernet source address. + + dl_dst: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Set ethernet destination address. + + nw_tos: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Set ip tos to this value. + + nw_src: :bro:type:`addr` :bro:attr:`&optional` :bro:attr:`&log` + Set source to this ip. + + nw_dst: :bro:type:`addr` :bro:attr:`&optional` :bro:attr:`&log` + Set destination to this ip. + + tp_src: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Set tcp/udp source port. + + tp_dst: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Set tcp/udp destination port. + :Attributes: :bro:attr:`&log` + + The actions that can be taken in a flow. + (Separate record to make ofp_flow_mod less crowded) + +.. bro:type:: OpenFlow::ofp_flow_mod + + :Type: :bro:type:`record` + + cookie: :bro:type:`count` :bro:attr:`&log` + Opaque controller-issued identifier. + + table_id: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Table to put the flow in. OFPTT_ALL can be used for delete, + to delete flows from all matching tables. + + command: :bro:type:`OpenFlow::ofp_flow_mod_command` :bro:attr:`&log` + One of OFPFC_*. + + idle_timeout: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` :bro:attr:`&log` + Idle time before discarding (seconds). + + hard_timeout: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` :bro:attr:`&log` + Max time before discarding (seconds). + + priority: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` :bro:attr:`&log` + Priority level of flow entry. + + out_port: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + For OFPFC_DELETE* commands, require matching entried to include + this as an output port/group. OFPP_ANY/OFPG_ANY means no restrictions. + + out_group: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + + flags: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` :bro:attr:`&log` + Bitmap of the OFPFF_* flags + + actions: :bro:type:`OpenFlow::ofp_flow_action` :bro:attr:`&default` = ``[out_ports=[], vlan_vid=, vlan_pcp=, vlan_strip=F, dl_src=, dl_dst=, nw_tos=, nw_src=, nw_dst=, tp_src=, tp_dst=]`` :bro:attr:`&optional` :bro:attr:`&log` + Actions to take on match + :Attributes: :bro:attr:`&log` + + Openflow flow_mod definition, describing the action to perform. + +.. bro:type:: OpenFlow::ofp_match + + :Type: :bro:type:`record` + + in_port: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + + dl_src: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + + dl_dst: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + + dl_vlan: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + + dl_vlan_pcp: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + + dl_type: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + + nw_tos: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + + nw_proto: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + + nw_src: :bro:type:`subnet` :bro:attr:`&optional` :bro:attr:`&log` + + nw_dst: :bro:type:`subnet` :bro:attr:`&optional` :bro:attr:`&log` + + tp_src: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + + tp_dst: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + :Attributes: :bro:attr:`&log` + + Openflow match definition. + + The openflow match record describes + which packets match to a specific + rule in a flow table. + + diff --git a/doc/scripts/base/frameworks/packet-filter/__load__.bro.rst b/doc/scripts/base/frameworks/packet-filter/__load__.bro.rst new file mode 100644 index 0000000000..1e87210874 --- /dev/null +++ b/doc/scripts/base/frameworks/packet-filter/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/packet-filter/__load__.bro +========================================== + + +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/packet-filter/main.bro `, :doc:`base/frameworks/packet-filter/netstats.bro `, :doc:`base/frameworks/packet-filter/utils.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/packet-filter/index.rst b/doc/scripts/base/frameworks/packet-filter/index.rst new file mode 100644 index 0000000000..66bb486e97 --- /dev/null +++ b/doc/scripts/base/frameworks/packet-filter/index.rst @@ -0,0 +1,27 @@ +:orphan: + +Package: base/frameworks/packet-filter +====================================== + +The packet filter framework supports how Bro sets its BPF capture filter. + +:doc:`/scripts/base/frameworks/packet-filter/utils.bro` + + +:doc:`/scripts/base/frameworks/packet-filter/__load__.bro` + + +:doc:`/scripts/base/frameworks/packet-filter/main.bro` + + This script supports how Bro sets its BPF capture filter. By default + Bro sets a capture filter that allows all traffic. If a filter + is set on the command line, that filter takes precedence over the default + open filter and all filters defined in Bro scripts with the + :bro:id:`capture_filters` and :bro:id:`restrict_filters` variables. + +:doc:`/scripts/base/frameworks/packet-filter/netstats.bro` + + This script reports on packet loss from the various packet sources. + When Bro is reading input from trace files, this script will not + report any packet loss statistics. + diff --git a/doc/scripts/base/frameworks/packet-filter/main.bro.rst b/doc/scripts/base/frameworks/packet-filter/main.bro.rst new file mode 100644 index 0000000000..500a0bcb1d --- /dev/null +++ b/doc/scripts/base/frameworks/packet-filter/main.bro.rst @@ -0,0 +1,223 @@ +:tocdepth: 3 + +base/frameworks/packet-filter/main.bro +====================================== +.. bro:namespace:: PacketFilter + +This script supports how Bro sets its BPF capture filter. By default +Bro sets a capture filter that allows all traffic. If a filter +is set on the command line, that filter takes precedence over the default +open filter and all filters defined in Bro scripts with the +:bro:id:`capture_filters` and :bro:id:`restrict_filters` variables. + +:Namespace: PacketFilter +:Imports: :doc:`base/frameworks/analyzer `, :doc:`base/frameworks/notice `, :doc:`base/frameworks/packet-filter/utils.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================================================= =============================================================================== +:bro:id:`PacketFilter::default_capture_filter`: :bro:type:`string` :bro:attr:`&redef` The BPF filter that is used by default to define what traffic should + be captured. +:bro:id:`PacketFilter::enable_auto_protocol_capture_filters`: :bro:type:`bool` :bro:attr:`&redef` Enables the old filtering approach of "only watch common ports for + analyzed protocols". +:bro:id:`PacketFilter::max_filter_compile_time`: :bro:type:`interval` :bro:attr:`&redef` The maximum amount of time that you'd like to allow for BPF filters to compile. +:bro:id:`PacketFilter::restricted_filter`: :bro:type:`string` :bro:attr:`&redef` Filter string which is unconditionally and'ed to the beginning of + every dynamically built filter. +:bro:id:`PacketFilter::unrestricted_filter`: :bro:type:`string` :bro:attr:`&redef` Filter string which is unconditionally or'ed to the beginning of + every dynamically built filter. +================================================================================================= =============================================================================== + +State Variables +############### +========================================================== =================================================================== +:bro:id:`PacketFilter::current_filter`: :bro:type:`string` This is where the default packet filter is stored and it should not + normally be modified by users. +========================================================== =================================================================== + +Types +##### +========================================================== ================================================================== +:bro:type:`PacketFilter::FilterPlugin`: :bro:type:`record` A data structure to represent filter generating plugins. +:bro:type:`PacketFilter::Info`: :bro:type:`record` The record type defining columns to be logged in the packet filter + logging stream. +========================================================== ================================================================== + +Redefinitions +############# +========================================== ================================================= +:bro:type:`Log::ID`: :bro:type:`enum` Add the packet filter logging stream. +:bro:type:`Notice::Type`: :bro:type:`enum` Add notice types related to packet filter errors. +:bro:type:`PcapFilterID`: :bro:type:`enum` +========================================== ================================================= + +Functions +######### +==================================================================== ====================================================================== +:bro:id:`PacketFilter::exclude`: :bro:type:`function` Install a BPF filter to exclude some traffic. +:bro:id:`PacketFilter::exclude_for`: :bro:type:`function` Install a temporary filter to traffic which should not be passed + through the BPF filter. +:bro:id:`PacketFilter::install`: :bro:type:`function` Call this function to build and install a new dynamically built + packet filter. +:bro:id:`PacketFilter::register_filter_plugin`: :bro:type:`function` API function to register a new plugin for dynamic restriction filters. +==================================================================== ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: PacketFilter::default_capture_filter + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"ip or not ip"`` + + The BPF filter that is used by default to define what traffic should + be captured. Filters defined in :bro:id:`restrict_filters` will + still be applied to reduce the captured traffic. + +.. bro:id:: PacketFilter::enable_auto_protocol_capture_filters + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Enables the old filtering approach of "only watch common ports for + analyzed protocols". + + Unless you know what you are doing, leave this set to F. + +.. bro:id:: PacketFilter::max_filter_compile_time + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``100.0 msecs`` + + The maximum amount of time that you'd like to allow for BPF filters to compile. + If this time is exceeded, compensation measures may be taken by the framework + to reduce the filter size. This threshold being crossed also results + in the :bro:see:`PacketFilter::Too_Long_To_Compile_Filter` notice. + +.. bro:id:: PacketFilter::restricted_filter + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Filter string which is unconditionally and'ed to the beginning of + every dynamically built filter. This is mostly used when a custom + filter is being used but MPLS or VLAN tags are on the traffic. + +.. bro:id:: PacketFilter::unrestricted_filter + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Filter string which is unconditionally or'ed to the beginning of + every dynamically built filter. + +State Variables +############### +.. bro:id:: PacketFilter::current_filter + + :Type: :bro:type:`string` + :Default: ``""`` + + This is where the default packet filter is stored and it should not + normally be modified by users. + +Types +##### +.. bro:type:: PacketFilter::FilterPlugin + + :Type: :bro:type:`record` + + func: :bro:type:`function` () : :bro:type:`void` + A function that is directly called when generating the complete filter. + + A data structure to represent filter generating plugins. + +.. bro:type:: PacketFilter::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The time at which the packet filter installation attempt was made. + + node: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + This is a string representation of the node that applied this + packet filter. It's mostly useful in the context of + dynamically changing filters on clusters. + + filter: :bro:type:`string` :bro:attr:`&log` + The packet filter that is being set. + + init: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Indicate if this is the filter set during initialization. + + success: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Indicate if the filter was applied successfully. + + The record type defining columns to be logged in the packet filter + logging stream. + +Functions +######### +.. bro:id:: PacketFilter::exclude + + :Type: :bro:type:`function` (filter_id: :bro:type:`string`, filter: :bro:type:`string`) : :bro:type:`bool` + + Install a BPF filter to exclude some traffic. The filter should + positively match what is to be excluded, it will be wrapped in + a "not". + + + :filter_id: An arbitrary string that can be used to identify + the filter. + + + :filter: A BPF expression of traffic that should be excluded. + + + :returns: A boolean value to indicate if the filter was successfully + installed or not. + +.. bro:id:: PacketFilter::exclude_for + + :Type: :bro:type:`function` (filter_id: :bro:type:`string`, filter: :bro:type:`string`, span: :bro:type:`interval`) : :bro:type:`bool` + + Install a temporary filter to traffic which should not be passed + through the BPF filter. The filter should match the traffic you + don't want to see (it will be wrapped in a "not" condition). + + + :filter_id: An arbitrary string that can be used to identify + the filter. + + + :filter: A BPF expression of traffic that should be excluded. + + + :length: The duration for which this filter should be put in place. + + + :returns: A boolean value to indicate if the filter was successfully + installed or not. + +.. bro:id:: PacketFilter::install + + :Type: :bro:type:`function` () : :bro:type:`bool` + + Call this function to build and install a new dynamically built + packet filter. + +.. bro:id:: PacketFilter::register_filter_plugin + + :Type: :bro:type:`function` (fp: :bro:type:`PacketFilter::FilterPlugin`) : :bro:type:`void` + + API function to register a new plugin for dynamic restriction filters. + + diff --git a/doc/scripts/base/frameworks/packet-filter/netstats.bro.rst b/doc/scripts/base/frameworks/packet-filter/netstats.bro.rst new file mode 100644 index 0000000000..ae8c50f94e --- /dev/null +++ b/doc/scripts/base/frameworks/packet-filter/netstats.bro.rst @@ -0,0 +1,40 @@ +:tocdepth: 3 + +base/frameworks/packet-filter/netstats.bro +========================================== +.. bro:namespace:: PacketFilter + +This script reports on packet loss from the various packet sources. +When Bro is reading input from trace files, this script will not +report any packet loss statistics. + +:Namespace: PacketFilter +:Imports: :doc:`base/frameworks/notice ` + +Summary +~~~~~~~ +Constants +######### +======================================================================= ============================================================== +:bro:id:`PacketFilter::stats_collection_interval`: :bro:type:`interval` This is the interval between individual statistics collection. +======================================================================= ============================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: PacketFilter::stats_collection_interval + + :Type: :bro:type:`interval` + :Default: ``5.0 mins`` + + This is the interval between individual statistics collection. + + diff --git a/doc/scripts/base/frameworks/packet-filter/utils.bro.rst b/doc/scripts/base/frameworks/packet-filter/utils.bro.rst new file mode 100644 index 0000000000..62aaabeff4 --- /dev/null +++ b/doc/scripts/base/frameworks/packet-filter/utils.bro.rst @@ -0,0 +1,73 @@ +:tocdepth: 3 + +base/frameworks/packet-filter/utils.bro +======================================= +.. bro:namespace:: PacketFilter + + +:Namespace: PacketFilter + +Summary +~~~~~~~ +Functions +######### +============================================================= ================================================================== +:bro:id:`PacketFilter::combine_filters`: :bro:type:`function` Combines two valid BPF filter strings with a string based operator + to form a new filter. +:bro:id:`PacketFilter::port_to_bpf`: :bro:type:`function` Takes a :bro:type:`port` and returns a BPF expression which will + match the port. +:bro:id:`PacketFilter::sampling_filter`: :bro:type:`function` Create a BPF filter to sample IPv4 and IPv6 traffic. +============================================================= ================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: PacketFilter::combine_filters + + :Type: :bro:type:`function` (lfilter: :bro:type:`string`, op: :bro:type:`string`, rfilter: :bro:type:`string`) : :bro:type:`string` + + Combines two valid BPF filter strings with a string based operator + to form a new filter. + + + :lfilter: Filter which will go on the left side. + + + :op: Operation being applied (typically "or" or "and"). + + + :rfilter: Filter which will go on the right side. + + + :returns: A new string representing the two filters combined with + the operator. Either filter being an empty string will + still result in a valid filter. + +.. bro:id:: PacketFilter::port_to_bpf + + :Type: :bro:type:`function` (p: :bro:type:`port`) : :bro:type:`string` + + Takes a :bro:type:`port` and returns a BPF expression which will + match the port. + + + :p: The port. + + + :returns: A valid BPF filter string for matching the port. + +.. bro:id:: PacketFilter::sampling_filter + + :Type: :bro:type:`function` (num_parts: :bro:type:`count`, this_part: :bro:type:`count`) : :bro:type:`string` + + Create a BPF filter to sample IPv4 and IPv6 traffic. + + + :num_parts: The number of parts the traffic should be split into. + + + :this_part: The part of the traffic this filter will accept (0-based). + + diff --git a/doc/scripts/base/frameworks/reporter/__load__.bro.rst b/doc/scripts/base/frameworks/reporter/__load__.bro.rst new file mode 100644 index 0000000000..fc84b7c88a --- /dev/null +++ b/doc/scripts/base/frameworks/reporter/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/reporter/__load__.bro +===================================== + + +:Imports: :doc:`base/frameworks/reporter/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/reporter/index.rst b/doc/scripts/base/frameworks/reporter/index.rst new file mode 100644 index 0000000000..adda66bd85 --- /dev/null +++ b/doc/scripts/base/frameworks/reporter/index.rst @@ -0,0 +1,26 @@ +:orphan: + +Package: base/frameworks/reporter +================================= + +This framework is intended to create an output and filtering path for +internally generated messages/warnings/errors. + +:doc:`/scripts/base/frameworks/reporter/__load__.bro` + + +:doc:`/scripts/base/frameworks/reporter/main.bro` + + This framework is intended to create an output and filtering path for + internal messages/warnings/errors. It should typically be loaded to + log such messages to a file in a standard way. For the options to + toggle whether messages are additionally written to STDERR, see + :bro:see:`Reporter::info_to_stderr`, + :bro:see:`Reporter::warnings_to_stderr`, and + :bro:see:`Reporter::errors_to_stderr`. + + Note that this framework deals with the handling of internally generated + reporter messages, for the interface + into actually creating reporter messages from the scripting layer, use + the built-in functions in :doc:`/scripts/base/bif/reporter.bif.bro`. + diff --git a/doc/scripts/base/frameworks/reporter/main.bro.rst b/doc/scripts/base/frameworks/reporter/main.bro.rst new file mode 100644 index 0000000000..e14a4feaec --- /dev/null +++ b/doc/scripts/base/frameworks/reporter/main.bro.rst @@ -0,0 +1,64 @@ +:tocdepth: 3 + +base/frameworks/reporter/main.bro +================================= +.. bro:namespace:: Reporter + +This framework is intended to create an output and filtering path for +internal messages/warnings/errors. It should typically be loaded to +log such messages to a file in a standard way. For the options to +toggle whether messages are additionally written to STDERR, see +:bro:see:`Reporter::info_to_stderr`, +:bro:see:`Reporter::warnings_to_stderr`, and +:bro:see:`Reporter::errors_to_stderr`. + +Note that this framework deals with the handling of internally generated +reporter messages, for the interface +into actually creating reporter messages from the scripting layer, use +the built-in functions in :doc:`/scripts/base/bif/reporter.bif.bro`. + +:Namespace: Reporter + +Summary +~~~~~~~ +Types +##### +============================================== ===================================================================== +:bro:type:`Reporter::Info`: :bro:type:`record` The record type which contains the column fields of the reporter log. +============================================== ===================================================================== + +Redefinitions +############# +===================================== ======================================= +:bro:type:`Log::ID`: :bro:type:`enum` The reporter logging stream identifier. +===================================== ======================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Reporter::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The network time at which the reporter event was generated. + + level: :bro:type:`Reporter::Level` :bro:attr:`&log` + The severity of the reporter message. Levels are INFO for informational + messages, not needing specific attention; WARNING for warning of a potential + problem, and ERROR for a non-fatal error that should be addressed, but doesn't + terminate program execution. + + message: :bro:type:`string` :bro:attr:`&log` + An info/warning/error message that could have either been + generated from the internal Bro core or at the scripting-layer. + + location: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + This is the location in a Bro script where the message originated. + Not all reporter messages will have locations in them though. + + The record type which contains the column fields of the reporter log. + + diff --git a/doc/scripts/base/frameworks/signatures/__load__.bro.rst b/doc/scripts/base/frameworks/signatures/__load__.bro.rst new file mode 100644 index 0000000000..af1d71dbbc --- /dev/null +++ b/doc/scripts/base/frameworks/signatures/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/signatures/__load__.bro +======================================= + + +:Imports: :doc:`base/frameworks/signatures/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/signatures/index.rst b/doc/scripts/base/frameworks/signatures/index.rst new file mode 100644 index 0000000000..f3efa19ea4 --- /dev/null +++ b/doc/scripts/base/frameworks/signatures/index.rst @@ -0,0 +1,19 @@ +:orphan: + +Package: base/frameworks/signatures +=================================== + +The signature framework provides for doing low-level pattern matching. While +signatures are not Bro's preferred detection tool, they sometimes come in +handy and are closer to what many people are familiar with from using +other NIDS. + +:doc:`/scripts/base/frameworks/signatures/__load__.bro` + + +:doc:`/scripts/base/frameworks/signatures/main.bro` + + Script level signature support. See the + :doc:`signature documentation ` for more + information about Bro's signature engine. + diff --git a/doc/scripts/base/frameworks/signatures/main.bro.rst b/doc/scripts/base/frameworks/signatures/main.bro.rst new file mode 100644 index 0000000000..225cc28bae --- /dev/null +++ b/doc/scripts/base/frameworks/signatures/main.bro.rst @@ -0,0 +1,272 @@ +:tocdepth: 3 + +base/frameworks/signatures/main.bro +=================================== +.. bro:namespace:: Signatures + +Script level signature support. See the +:doc:`signature documentation ` for more +information about Bro's signature engine. + +:Namespace: Signatures +:Imports: :doc:`base/frameworks/notice ` + +Summary +~~~~~~~ +Runtime Options +############### +=============================================================================== =================================================================== +:bro:id:`Signatures::ignored_ids`: :bro:type:`pattern` :bro:attr:`&redef` Signature IDs that should always be ignored. +:bro:id:`Signatures::summary_interval`: :bro:type:`interval` :bro:attr:`&redef` The interval between when :bro:enum:`Signatures::Signature_Summary` + notices are generated. +=============================================================================== =================================================================== + +Redefinable Options +################### +========================================================================================================================================== ==================================================================== +:bro:id:`Signatures::actions`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = ``Signatures::SIG_ALARM`` :bro:attr:`&optional` Actions for a signature. +:bro:id:`Signatures::count_thresholds`: :bro:type:`set` :bro:attr:`&redef` Generate a notice if a :bro:enum:`Signatures::SIG_COUNT_PER_RESP` + signature is triggered as often as given by one of these thresholds. +:bro:id:`Signatures::horiz_scan_thresholds`: :bro:type:`set` :bro:attr:`&redef` Generate a notice if, for a pair [orig, signature], the number of + different responders has reached one of the thresholds. +:bro:id:`Signatures::vert_scan_thresholds`: :bro:type:`set` :bro:attr:`&redef` Generate a notice if, for a pair [orig, resp], the number of + different signature matches has reached one of the thresholds. +========================================================================================================================================== ==================================================================== + +Types +##### +================================================ ====================================================================== +:bro:type:`Signatures::Action`: :bro:type:`enum` These are the default actions you can apply to signature matches. +:bro:type:`Signatures::Info`: :bro:type:`record` The record type which contains the column fields of the signature log. +================================================ ====================================================================== + +Redefinitions +############# +========================================== =========================================== +:bro:type:`Log::ID`: :bro:type:`enum` The signature logging stream identifier. +:bro:type:`Notice::Type`: :bro:type:`enum` Add various signature-related notice types. +========================================== =========================================== + +Events +###### +====================================================== ================================================================= +:bro:id:`Signatures::log_signature`: :bro:type:`event` This event can be handled to access/alter data about to be logged + to the signature logging stream. +====================================================== ================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Signatures::ignored_ids + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /(^?(^?(^webapp-)$?)$?)|(^?((^?(^?(traceroute-detector.*)$?)$?)|(^?(^?(NO_DEFAULT_MATCHES)$?)$?))$?)/ + + Signature IDs that should always be ignored. + +.. bro:id:: Signatures::summary_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 day`` + + The interval between when :bro:enum:`Signatures::Signature_Summary` + notices are generated. + +Redefinable Options +################### +.. bro:id:: Signatures::actions + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`Signatures::Action` + :Attributes: :bro:attr:`&redef` :bro:attr:`&default` = ``Signatures::SIG_ALARM`` :bro:attr:`&optional` + :Default: + + :: + + { + ["unspecified"] = Signatures::SIG_IGNORE + } + + Actions for a signature. + +.. bro:id:: Signatures::count_thresholds + + :Type: :bro:type:`set` [:bro:type:`count`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + 500, + 1000, + 1000000, + 5, + 100, + 50, + 10000, + 10 + } + + Generate a notice if a :bro:enum:`Signatures::SIG_COUNT_PER_RESP` + signature is triggered as often as given by one of these thresholds. + +.. bro:id:: Signatures::horiz_scan_thresholds + + :Type: :bro:type:`set` [:bro:type:`count`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + 500, + 1000, + 5, + 100, + 50, + 10 + } + + Generate a notice if, for a pair [orig, signature], the number of + different responders has reached one of the thresholds. + +.. bro:id:: Signatures::vert_scan_thresholds + + :Type: :bro:type:`set` [:bro:type:`count`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + 500, + 1000, + 5, + 100, + 50, + 10 + } + + Generate a notice if, for a pair [orig, resp], the number of + different signature matches has reached one of the thresholds. + +Types +##### +.. bro:type:: Signatures::Action + + :Type: :bro:type:`enum` + + .. bro:enum:: Signatures::SIG_IGNORE Signatures::Action + + Ignore this signature completely (even for scan detection). + Don't write to the signatures logging stream. + + .. bro:enum:: Signatures::SIG_QUIET Signatures::Action + + Process through the various aggregate techniques, but don't + report individually and don't write to the signatures logging + stream. + + .. bro:enum:: Signatures::SIG_LOG Signatures::Action + + Generate a notice. + + .. bro:enum:: Signatures::SIG_FILE_BUT_NO_SCAN Signatures::Action + + The same as :bro:enum:`Signatures::SIG_LOG`, but ignore for + aggregate/scan processing. + + .. bro:enum:: Signatures::SIG_ALARM Signatures::Action + + Generate a notice and set it to be alarmed upon. + + .. bro:enum:: Signatures::SIG_ALARM_PER_ORIG Signatures::Action + + Alarm once per originator. + + .. bro:enum:: Signatures::SIG_ALARM_ONCE Signatures::Action + + Alarm once and then never again. + + .. bro:enum:: Signatures::SIG_COUNT_PER_RESP Signatures::Action + + Count signatures per responder host and alarm with the + :bro:enum:`Signatures::Count_Signature` notice if a threshold + defined by :bro:id:`Signatures::count_thresholds` is reached. + + .. bro:enum:: Signatures::SIG_SUMMARY Signatures::Action + + Don't alarm, but generate per-orig summary. + + These are the default actions you can apply to signature matches. + All of them write the signature record to the logging stream unless + declared otherwise. + +.. bro:type:: Signatures::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The network time at which a signature matching type of event + to be logged has occurred. + + uid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A unique identifier of the connection which triggered the + signature match event. + + src_addr: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + The host which triggered the signature match event. + + src_port: :bro:type:`port` :bro:attr:`&log` :bro:attr:`&optional` + The host port on which the signature-matching activity + occurred. + + dst_addr: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + The destination host which was sent the payload that + triggered the signature match. + + dst_port: :bro:type:`port` :bro:attr:`&log` :bro:attr:`&optional` + The destination host port which was sent the payload that + triggered the signature match. + + note: :bro:type:`Notice::Type` :bro:attr:`&log` + Notice associated with signature event. + + sig_id: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The name of the signature that matched. + + event_msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A more descriptive message of the signature-matching event. + + sub_msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Extracted payload data or extra message. + + sig_count: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Number of sigs, usually from summary count. + + host_count: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Number of hosts, from a summary count. + + The record type which contains the column fields of the signature log. + +Events +###### +.. bro:id:: Signatures::log_signature + + :Type: :bro:type:`event` (rec: :bro:type:`Signatures::Info`) + + This event can be handled to access/alter data about to be logged + to the signature logging stream. + + + :rec: The record of signature data about to be logged. + + diff --git a/doc/scripts/base/frameworks/software/__load__.bro.rst b/doc/scripts/base/frameworks/software/__load__.bro.rst new file mode 100644 index 0000000000..be95016a45 --- /dev/null +++ b/doc/scripts/base/frameworks/software/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/software/__load__.bro +===================================== + + +:Imports: :doc:`base/frameworks/software/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/software/index.rst b/doc/scripts/base/frameworks/software/index.rst new file mode 100644 index 0000000000..01299efaf3 --- /dev/null +++ b/doc/scripts/base/frameworks/software/index.rst @@ -0,0 +1,21 @@ +:orphan: + +Package: base/frameworks/software +================================= + +The software framework provides infrastructure for maintaining a table +of software versions seen on the network. The version parsing itself +is carried out by external protocol-specific scripts that feed into +this framework. + +:doc:`/scripts/base/frameworks/software/__load__.bro` + + +:doc:`/scripts/base/frameworks/software/main.bro` + + This script provides the framework for software version detection and + parsing but doesn't actually do any detection on it's own. It relies on + other protocol specific scripts to parse out software from the protocols + that they analyze. The entry point for providing new software detections + to this framework is through the :bro:id:`Software::found` function. + diff --git a/doc/scripts/base/frameworks/software/main.bro.rst b/doc/scripts/base/frameworks/software/main.bro.rst new file mode 100644 index 0000000000..df17085173 --- /dev/null +++ b/doc/scripts/base/frameworks/software/main.bro.rst @@ -0,0 +1,359 @@ +:tocdepth: 3 + +base/frameworks/software/main.bro +================================= +.. bro:namespace:: Software + +This script provides the framework for software version detection and +parsing but doesn't actually do any detection on it's own. It relies on +other protocol specific scripts to parse out software from the protocols +that they analyze. The entry point for providing new software detections +to this framework is through the :bro:id:`Software::found` function. + +:Namespace: Software +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/utils/directions-and-hosts.bro `, :doc:`base/utils/numbers.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +======================================================================= ==================================================== +:bro:id:`Software::asset_tracking`: :bro:type:`Host` :bro:attr:`&redef` Hosts whose software should be detected and tracked. +======================================================================= ==================================================== + +State Variables +############### +======================================================================================================================== ========================================================== +:bro:id:`Software::alternate_names`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Sometimes software will expose itself on the network with + slight naming variations. +:bro:id:`Software::tracked`: :bro:type:`table` :bro:attr:`&create_expire` = ``1.0 day`` The set of software associated with an address. +======================================================================================================================== ========================================================== + +Types +##### +================================================================== ====================================================================== +:bro:type:`Software::Info`: :bro:type:`record` The record type that is used for representing and logging software. +:bro:type:`Software::SoftwareSet`: :bro:type:`table` Type to represent a collection of :bro:type:`Software::Info` records. +:bro:type:`Software::Type`: :bro:type:`enum` Scripts detecting new types of software need to redef this enum to add + their own specific software types which would then be used when they + create :bro:type:`Software::Info` records. +:bro:type:`Software::Version`: :bro:type:`record` :bro:attr:`&log` A structure to represent the numeric version of software. +================================================================== ====================================================================== + +Redefinitions +############# +===================================== ======================================= +:bro:type:`Log::ID`: :bro:type:`enum` The software logging stream identifier. +===================================== ======================================= + +Events +###### +===================================================== ====================================================================== +:bro:id:`Software::log_software`: :bro:type:`event` This event can be handled to access the :bro:type:`Software::Info` + record as it is sent on to the logging framework. +:bro:id:`Software::register`: :bro:type:`event` This event is raised when software is about to be registered for + tracking in :bro:see:`Software::tracked`. +:bro:id:`Software::version_change`: :bro:type:`event` This event can be handled to access software information whenever it's + version is found to have changed. +===================================================== ====================================================================== + +Functions +######### +====================================================== ================================================================== +:bro:id:`Software::cmp_versions`: :bro:type:`function` Compare two version records. +:bro:id:`Software::found`: :bro:type:`function` Other scripts should call this function when they detect software. +====================================================== ================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Software::asset_tracking + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``ALL_HOSTS`` + + Hosts whose software should be detected and tracked. + Choices are: LOCAL_HOSTS, REMOTE_HOSTS, ALL_HOSTS, NO_HOSTS. + +State Variables +############### +.. bro:id:: Software::alternate_names + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + ["Flash Player"] = "Flash" + } + + Sometimes software will expose itself on the network with + slight naming variations. This table provides a mechanism + for a piece of software to be renamed to a single name + even if it exposes itself with an alternate name. The + yielded string is the name that will be logged and generally + used for everything. + +.. bro:id:: Software::tracked + + :Type: :bro:type:`table` [:bro:type:`addr`] of :bro:type:`Software::SoftwareSet` + :Attributes: :bro:attr:`&create_expire` = ``1.0 day`` + :Default: ``{}`` + + The set of software associated with an address. Data expires from + this table after one day by default so that a detected piece of + software will be logged once each day. In a cluster, this table is + uniformly distributed among proxy nodes. + +Types +##### +.. bro:type:: Software::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + The time at which the software was detected. + + host: :bro:type:`addr` :bro:attr:`&log` + The IP address detected running the software. + + host_p: :bro:type:`port` :bro:attr:`&log` :bro:attr:`&optional` + The port on which the software is running. Only sensible for + server software. + + software_type: :bro:type:`Software::Type` :bro:attr:`&log` :bro:attr:`&default` = ``Software::UNKNOWN`` :bro:attr:`&optional` + The type of software detected (e.g. :bro:enum:`HTTP::SERVER`). + + name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Name of the software (e.g. Apache). + + version: :bro:type:`Software::Version` :bro:attr:`&log` :bro:attr:`&optional` + Version of the software. + + unparsed_version: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The full unparsed version string found because the version + parsing doesn't always work reliably in all cases and this + acts as a fallback in the logs. + + force_log: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + This can indicate that this software being detected should + definitely be sent onward to the logging framework. By + default, only software that is "interesting" due to a change + in version or it being currently unknown is sent to the + logging framework. This can be set to T to force the record + to be sent to the logging framework if some amount of this + tracking needs to happen in a specific way to the software. + + url: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/policy/protocols/http/detect-webapps.bro` is loaded) + + Most root URL where the software was discovered. + + The record type that is used for representing and logging software. + +.. bro:type:: Software::SoftwareSet + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`Software::Info` + + Type to represent a collection of :bro:type:`Software::Info` records. + It's indexed with the name of a piece of software such as "Firefox" + and it yields a :bro:type:`Software::Info` record with more + information about the software. + +.. bro:type:: Software::Type + + :Type: :bro:type:`enum` + + .. bro:enum:: Software::UNKNOWN Software::Type + + A placeholder type for when the type of software is not known. + + .. bro:enum:: OS::WINDOWS Software::Type + + (present if :doc:`/scripts/policy/frameworks/software/windows-version-detection.bro` is loaded) + + + Identifier for Windows operating system versions + + .. bro:enum:: DHCP::SERVER Software::Type + + (present if :doc:`/scripts/policy/protocols/dhcp/software.bro` is loaded) + + + Identifier for web servers in the software framework. + + .. bro:enum:: DHCP::CLIENT Software::Type + + (present if :doc:`/scripts/policy/protocols/dhcp/software.bro` is loaded) + + + Identifier for web browsers in the software framework. + + .. bro:enum:: FTP::CLIENT Software::Type + + (present if :doc:`/scripts/policy/protocols/ftp/software.bro` is loaded) + + + Identifier for FTP clients in the software framework. + + .. bro:enum:: FTP::SERVER Software::Type + + (present if :doc:`/scripts/policy/protocols/ftp/software.bro` is loaded) + + + Not currently implemented. + + .. bro:enum:: HTTP::WEB_APPLICATION Software::Type + + (present if :doc:`/scripts/policy/protocols/http/detect-webapps.bro` is loaded) + + + Identifier for web applications in the software framework. + + .. bro:enum:: HTTP::BROWSER_PLUGIN Software::Type + + (present if :doc:`/scripts/policy/protocols/http/software-browser-plugins.bro` is loaded) + + + Identifier for browser plugins in the software framework. + + .. bro:enum:: HTTP::SERVER Software::Type + + (present if :doc:`/scripts/policy/protocols/http/software.bro` is loaded) + + + Identifier for web servers in the software framework. + + .. bro:enum:: HTTP::APPSERVER Software::Type + + (present if :doc:`/scripts/policy/protocols/http/software.bro` is loaded) + + + Identifier for app servers in the software framework. + + .. bro:enum:: HTTP::BROWSER Software::Type + + (present if :doc:`/scripts/policy/protocols/http/software.bro` is loaded) + + + Identifier for web browsers in the software framework. + + .. bro:enum:: MySQL::SERVER Software::Type + + (present if :doc:`/scripts/policy/protocols/mysql/software.bro` is loaded) + + + Identifier for MySQL servers in the software framework. + + .. bro:enum:: SMTP::MAIL_CLIENT Software::Type + + (present if :doc:`/scripts/policy/protocols/smtp/software.bro` is loaded) + + + .. bro:enum:: SMTP::MAIL_SERVER Software::Type + + (present if :doc:`/scripts/policy/protocols/smtp/software.bro` is loaded) + + + .. bro:enum:: SMTP::WEBMAIL_SERVER Software::Type + + (present if :doc:`/scripts/policy/protocols/smtp/software.bro` is loaded) + + + .. bro:enum:: SSH::SERVER Software::Type + + (present if :doc:`/scripts/policy/protocols/ssh/software.bro` is loaded) + + + Identifier for SSH clients in the software framework. + + .. bro:enum:: SSH::CLIENT Software::Type + + (present if :doc:`/scripts/policy/protocols/ssh/software.bro` is loaded) + + + Identifier for SSH servers in the software framework. + + Scripts detecting new types of software need to redef this enum to add + their own specific software types which would then be used when they + create :bro:type:`Software::Info` records. + +.. bro:type:: Software::Version + + :Type: :bro:type:`record` + + major: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Major version number. + + minor: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Minor version number. + + minor2: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Minor subversion number. + + minor3: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Minor updates number. + + addl: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Additional version string (e.g. "beta42"). + :Attributes: :bro:attr:`&log` + + A structure to represent the numeric version of software. + +Events +###### +.. bro:id:: Software::log_software + + :Type: :bro:type:`event` (rec: :bro:type:`Software::Info`) + + This event can be handled to access the :bro:type:`Software::Info` + record as it is sent on to the logging framework. + +.. bro:id:: Software::register + + :Type: :bro:type:`event` (info: :bro:type:`Software::Info`) + + This event is raised when software is about to be registered for + tracking in :bro:see:`Software::tracked`. + +.. bro:id:: Software::version_change + + :Type: :bro:type:`event` (old: :bro:type:`Software::Info`, new: :bro:type:`Software::Info`) + + This event can be handled to access software information whenever it's + version is found to have changed. + +Functions +######### +.. bro:id:: Software::cmp_versions + + :Type: :bro:type:`function` (v1: :bro:type:`Software::Version`, v2: :bro:type:`Software::Version`) : :bro:type:`int` + + Compare two version records. + + + :returns: -1 for v1 < v2, 0 for v1 == v2, 1 for v1 > v2. + If the numerical version numbers match, the *addl* string + is compared lexicographically. + +.. bro:id:: Software::found + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`, info: :bro:type:`Software::Info`) : :bro:type:`bool` + + Other scripts should call this function when they detect software. + + + :id: The connection id where the software was discovered. + + + :info: A record representing the software discovered. + + + :returns: T if the software was logged, F otherwise. + + diff --git a/doc/scripts/base/frameworks/sumstats/__load__.bro.rst b/doc/scripts/base/frameworks/sumstats/__load__.bro.rst new file mode 100644 index 0000000000..5799857db5 --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/sumstats/__load__.bro +===================================== + + +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/sumstats/main.bro `, :doc:`base/frameworks/sumstats/non-cluster.bro `, :doc:`base/frameworks/sumstats/plugins ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/index.rst b/doc/scripts/base/frameworks/sumstats/index.rst new file mode 100644 index 0000000000..76e0d80e03 --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/index.rst @@ -0,0 +1,67 @@ +:orphan: + +Package: base/frameworks/sumstats +================================= + +The summary statistics framework provides a way to summarize large streams +of data into simple reduced measurements. + +:doc:`/scripts/base/frameworks/sumstats/__load__.bro` + + +:doc:`/scripts/base/frameworks/sumstats/main.bro` + + The summary statistics framework provides a way to + summarize large streams of data into simple reduced + measurements. + +:doc:`/scripts/base/frameworks/sumstats/plugins/__load__.bro` + + +:doc:`/scripts/base/frameworks/sumstats/plugins/average.bro` + + Calculate the average. + +:doc:`/scripts/base/frameworks/sumstats/plugins/hll_unique.bro` + + Calculate the number of unique values (using the HyperLogLog algorithm). + +:doc:`/scripts/base/frameworks/sumstats/plugins/last.bro` + + Keep the last X observations. + +:doc:`/scripts/base/frameworks/sumstats/plugins/max.bro` + + Find the maximum value. + +:doc:`/scripts/base/frameworks/sumstats/plugins/min.bro` + + Find the minimum value. + +:doc:`/scripts/base/frameworks/sumstats/plugins/sample.bro` + + Keep a random sample of values. + +:doc:`/scripts/base/frameworks/sumstats/plugins/std-dev.bro` + + Calculate the standard deviation. + +:doc:`/scripts/base/frameworks/sumstats/plugins/variance.bro` + + Calculate the variance. + +:doc:`/scripts/base/frameworks/sumstats/plugins/sum.bro` + + Calculate the sum. + +:doc:`/scripts/base/frameworks/sumstats/plugins/topk.bro` + + Keep the top-k (i.e., most frequently occurring) observations. + +:doc:`/scripts/base/frameworks/sumstats/plugins/unique.bro` + + Calculate the number of unique values. + +:doc:`/scripts/base/frameworks/sumstats/non-cluster.bro` + + diff --git a/doc/scripts/base/frameworks/sumstats/main.bro.rst b/doc/scripts/base/frameworks/sumstats/main.bro.rst new file mode 100644 index 0000000000..032a4af1bd --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/main.bro.rst @@ -0,0 +1,484 @@ +:tocdepth: 3 + +base/frameworks/sumstats/main.bro +================================= +.. bro:namespace:: SumStats + +The summary statistics framework provides a way to +summarize large streams of data into simple reduced +measurements. + +:Namespace: SumStats + +Summary +~~~~~~~ +Types +##### +===================================================== ======================================================================== +:bro:type:`SumStats::Calculation`: :bro:type:`enum` Type to represent the calculations that are available. +:bro:type:`SumStats::Key`: :bro:type:`record` Represents a thing which is having summarization + results collected for it. +:bro:type:`SumStats::Observation`: :bro:type:`record` Represents data being added for a single observation. +:bro:type:`SumStats::Reducer`: :bro:type:`record` Represents a reducer. +:bro:type:`SumStats::Result`: :bro:type:`table` Type to store a table of results for multiple reducers indexed by + observation stream identifier. +:bro:type:`SumStats::ResultTable`: :bro:type:`table` Type to store a table of sumstats results indexed by keys. +:bro:type:`SumStats::ResultVal`: :bro:type:`record` Result calculated for an observation stream fed into a reducer. +:bro:type:`SumStats::SumStat`: :bro:type:`record` Represents a SumStat, which consists of an aggregation of reducers along + with mechanisms to handle various situations like the epoch ending + or thresholds being crossed. +===================================================== ======================================================================== + +Redefinitions +############# +================================================= = +:bro:type:`SumStats::Reducer`: :bro:type:`record` +================================================= = + +Functions +######### +===================================================== ================================================================= +:bro:id:`SumStats::create`: :bro:type:`function` Create a summary statistic. +:bro:id:`SumStats::key2str`: :bro:type:`function` Helper function to represent a :bro:type:`SumStats::Key` value as + a simple string. +:bro:id:`SumStats::observe`: :bro:type:`function` Add data into an observation stream. +:bro:id:`SumStats::request_key`: :bro:type:`function` Dynamically request a sumstat key. +===================================================== ================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: SumStats::Calculation + + :Type: :bro:type:`enum` + + .. bro:enum:: SumStats::PLACEHOLDER SumStats::Calculation + + .. bro:enum:: SumStats::AVERAGE SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/average.bro` is loaded) + + + Calculate the average of the values. + + .. bro:enum:: SumStats::HLL_UNIQUE SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/hll_unique.bro` is loaded) + + + Calculate the number of unique values. + + .. bro:enum:: SumStats::LAST SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/last.bro` is loaded) + + + Keep last X observations in a queue. + + .. bro:enum:: SumStats::MAX SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/max.bro` is loaded) + + + Find the maximum value. + + .. bro:enum:: SumStats::MIN SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/min.bro` is loaded) + + + Find the minimum value. + + .. bro:enum:: SumStats::SAMPLE SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/sample.bro` is loaded) + + + Get uniquely distributed random samples from the observation + stream. + + .. bro:enum:: SumStats::VARIANCE SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/variance.bro` is loaded) + + + Calculate the variance of the values. + + .. bro:enum:: SumStats::STD_DEV SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/std-dev.bro` is loaded) + + + Calculate the standard deviation of the values. + + .. bro:enum:: SumStats::SUM SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/sum.bro` is loaded) + + + Calculate the sum of the values. For string values, + this will be the number of strings. + + .. bro:enum:: SumStats::TOPK SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/topk.bro` is loaded) + + + Keep a top-k list of values. + + .. bro:enum:: SumStats::UNIQUE SumStats::Calculation + + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/unique.bro` is loaded) + + + Calculate the number of unique values. + + Type to represent the calculations that are available. The calculations + are all defined as plugins. + +.. bro:type:: SumStats::Key + + :Type: :bro:type:`record` + + str: :bro:type:`string` :bro:attr:`&optional` + A non-address related summarization or a sub-key for + an address based summarization. An example might be + successful SSH connections by client IP address + where the client string would be the key value. + Another example might be number of HTTP requests to + a particular value in a Host header. This is an + example of a non-host based metric since multiple + IP addresses could respond for the same Host + header value. + + host: :bro:type:`addr` :bro:attr:`&optional` + Host is the value to which this metric applies. + + Represents a thing which is having summarization + results collected for it. + +.. bro:type:: SumStats::Observation + + :Type: :bro:type:`record` + + num: :bro:type:`count` :bro:attr:`&optional` + Count value. + + dbl: :bro:type:`double` :bro:attr:`&optional` + Double value. + + str: :bro:type:`string` :bro:attr:`&optional` + String value. + + Represents data being added for a single observation. + Only supply a single field at a time! + +.. bro:type:: SumStats::Reducer + + :Type: :bro:type:`record` + + stream: :bro:type:`string` + Observation stream identifier for the reducer + to attach to. + + apply: :bro:type:`set` [:bro:type:`SumStats::Calculation`] + The calculations to perform on the data points. + + pred: :bro:type:`function` (key: :bro:type:`SumStats::Key`, obs: :bro:type:`SumStats::Observation`) : :bro:type:`bool` :bro:attr:`&optional` + A predicate so that you can decide per key if you + would like to accept the data being inserted. + + normalize_key: :bro:type:`function` (key: :bro:type:`SumStats::Key`) : :bro:type:`SumStats::Key` :bro:attr:`&optional` + A function to normalize the key. This can be used to + aggregate or normalize the entire key. + + ssname: :bro:type:`string` :bro:attr:`&optional` + + calc_funcs: :bro:type:`vector` of :bro:type:`SumStats::Calculation` :bro:attr:`&optional` + + hll_error_margin: :bro:type:`double` :bro:attr:`&default` = ``0.01`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/hll_unique.bro` is loaded) + + The error margin for HLL. + + hll_confidence: :bro:type:`double` :bro:attr:`&default` = ``0.95`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/hll_unique.bro` is loaded) + + The confidence for HLL. + + num_last_elements: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/last.bro` is loaded) + + Number of elements to keep. + + num_samples: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/sample.bro` is loaded) + + The number of sample Observations to collect. + + topk_size: :bro:type:`count` :bro:attr:`&default` = ``500`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/topk.bro` is loaded) + + Number of elements to keep in the top-k list. + + unique_max: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/unique.bro` is loaded) + + Maximum number of unique values to store. + + Represents a reducer. + +.. bro:type:: SumStats::Result + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`SumStats::ResultVal` + + Type to store a table of results for multiple reducers indexed by + observation stream identifier. + +.. bro:type:: SumStats::ResultTable + + :Type: :bro:type:`table` [:bro:type:`SumStats::Key`] of :bro:type:`SumStats::Result` + + Type to store a table of sumstats results indexed by keys. + +.. bro:type:: SumStats::ResultVal + + :Type: :bro:type:`record` + + begin: :bro:type:`time` + The time when the first observation was added to + this result value. + + end: :bro:type:`time` + The time when the last observation was added to + this result value. + + num: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of observations received. + + average: :bro:type:`double` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/average.bro` is loaded) + + For numeric data, this is the average of all values. + + hll_unique: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/hll_unique.bro` is loaded) + + If cardinality is being tracked, the number of unique + items is tracked here. + + card: :bro:type:`opaque` of cardinality :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/hll_unique.bro` is loaded) + + + hll_error_margin: :bro:type:`double` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/hll_unique.bro` is loaded) + + + hll_confidence: :bro:type:`double` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/hll_unique.bro` is loaded) + + + last_elements: :bro:type:`Queue::Queue` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/last.bro` is loaded) + + This is the queue where elements are maintained. + Don't access this value directly, instead use the + :bro:see:`SumStats::get_last` function to get a vector of + the current element values. + + max: :bro:type:`double` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/max.bro` is loaded) + + For numeric data, this tracks the maximum value. + + min: :bro:type:`double` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/min.bro` is loaded) + + For numeric data, this tracks the minimum value. + + samples: :bro:type:`vector` of :bro:type:`SumStats::Observation` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/sample.bro` is loaded) + + This is the vector in which the samples are maintained. + + sample_elements: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/sample.bro` is loaded) + + Number of total observed elements. + + num_samples: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/sample.bro` is loaded) + + + variance: :bro:type:`double` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/variance.bro` is loaded) + + For numeric data, this is the variance. + + prev_avg: :bro:type:`double` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/variance.bro` is loaded) + + + var_s: :bro:type:`double` :bro:attr:`&default` = ``0.0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/variance.bro` is loaded) + + + std_dev: :bro:type:`double` :bro:attr:`&default` = ``0.0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/std-dev.bro` is loaded) + + For numeric data, this calculates the standard deviation. + + sum: :bro:type:`double` :bro:attr:`&default` = ``0.0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/sum.bro` is loaded) + + For numeric data, this tracks the sum of all values. + + topk: :bro:type:`opaque` of topk :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/topk.bro` is loaded) + + A handle which can be passed to some built-in functions to get + the top-k results. + + unique: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/unique.bro` is loaded) + + If cardinality is being tracked, the number of unique + values is tracked here. + + unique_max: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/unique.bro` is loaded) + + + unique_vals: :bro:type:`set` [:bro:type:`SumStats::Observation`] :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/sumstats/plugins/unique.bro` is loaded) + + + Result calculated for an observation stream fed into a reducer. + Most of the fields are added by plugins. + +.. bro:type:: SumStats::SumStat + + :Type: :bro:type:`record` + + name: :bro:type:`string` + An arbitrary name for the sumstat so that it can + be referred to later. + + epoch: :bro:type:`interval` + The interval at which this filter should be "broken" + and the *epoch_result* callback called. The + results are also reset at this time so any threshold + based detection needs to be set to a + value that should be expected to happen within + this epoch. + + reducers: :bro:type:`set` [:bro:type:`SumStats::Reducer`] + The reducers for the SumStat. + + threshold_val: :bro:type:`function` (key: :bro:type:`SumStats::Key`, result: :bro:type:`SumStats::Result`) : :bro:type:`double` :bro:attr:`&optional` + A function that will be called once for each observation in order + to calculate a value from the :bro:see:`SumStats::Result` structure + which will be used for thresholding. + This function is required if a *threshold* value or + a *threshold_series* is given. + + threshold: :bro:type:`double` :bro:attr:`&optional` + The threshold value for calling the *threshold_crossed* callback. + If you need more than one threshold value, then use + *threshold_series* instead. + + threshold_series: :bro:type:`vector` of :bro:type:`double` :bro:attr:`&optional` + A series of thresholds for calling the *threshold_crossed* + callback. These thresholds must be listed in ascending order, + because a threshold is not checked until the preceding one has + been crossed. + + threshold_crossed: :bro:type:`function` (key: :bro:type:`SumStats::Key`, result: :bro:type:`SumStats::Result`) : :bro:type:`void` :bro:attr:`&optional` + A callback that is called when a threshold is crossed. + A threshold is crossed when the value returned from *threshold_val* + is greater than or equal to the threshold value, but only the first + time this happens within an epoch. + + epoch_result: :bro:type:`function` (ts: :bro:type:`time`, key: :bro:type:`SumStats::Key`, result: :bro:type:`SumStats::Result`) : :bro:type:`void` :bro:attr:`&optional` + A callback that receives each of the results at the + end of the analysis epoch. The function will be + called once for each key. + + epoch_finished: :bro:type:`function` (ts: :bro:type:`time`) : :bro:type:`void` :bro:attr:`&optional` + A callback that will be called when a single collection + interval is completed. The *ts* value will be the time of + when the collection started. + + Represents a SumStat, which consists of an aggregation of reducers along + with mechanisms to handle various situations like the epoch ending + or thresholds being crossed. + + It's best to not access any global state outside + of the variables given to the callbacks because there + is no assurance provided as to where the callbacks + will be executed on clusters. + +Functions +######### +.. bro:id:: SumStats::create + + :Type: :bro:type:`function` (ss: :bro:type:`SumStats::SumStat`) : :bro:type:`void` + + Create a summary statistic. + + + :ss: The SumStat to create. + +.. bro:id:: SumStats::key2str + + :Type: :bro:type:`function` (key: :bro:type:`SumStats::Key`) : :bro:type:`string` + + Helper function to represent a :bro:type:`SumStats::Key` value as + a simple string. + + + :key: The metric key that is to be converted into a string. + + + :returns: A string representation of the metric key. + +.. bro:id:: SumStats::observe + + :Type: :bro:type:`function` (id: :bro:type:`string`, orig_key: :bro:type:`SumStats::Key`, obs: :bro:type:`SumStats::Observation`) : :bro:type:`void` + + Add data into an observation stream. This should be + called when a script has measured some point value. + + + :id: The observation stream identifier that the data + point represents. + + + :key: The key that the value is related to. + + + :obs: The data point to send into the stream. + +.. bro:id:: SumStats::request_key + + :Type: :bro:type:`function` (ss_name: :bro:type:`string`, key: :bro:type:`SumStats::Key`) : :bro:type:`SumStats::Result` + + Dynamically request a sumstat key. This function should be + used sparingly and not as a replacement for the callbacks + from the :bro:see:`SumStats::SumStat` record. The function is only + available for use within "when" statements as an asynchronous + function. + + + :ss_name: SumStat name. + + + :key: The SumStat key being requested. + + + :returns: The result for the requested sumstat key. + + diff --git a/doc/scripts/base/frameworks/sumstats/non-cluster.bro.rst b/doc/scripts/base/frameworks/sumstats/non-cluster.bro.rst new file mode 100644 index 0000000000..80aef47453 --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/non-cluster.bro.rst @@ -0,0 +1,16 @@ +:tocdepth: 3 + +base/frameworks/sumstats/non-cluster.bro +======================================== +.. bro:namespace:: SumStats + + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/__load__.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/__load__.bro.rst new file mode 100644 index 0000000000..14d4d88dce --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/__load__.bro +============================================= + + +:Imports: :doc:`base/frameworks/sumstats/plugins/average.bro `, :doc:`base/frameworks/sumstats/plugins/hll_unique.bro `, :doc:`base/frameworks/sumstats/plugins/last.bro `, :doc:`base/frameworks/sumstats/plugins/max.bro `, :doc:`base/frameworks/sumstats/plugins/min.bro `, :doc:`base/frameworks/sumstats/plugins/sample.bro `, :doc:`base/frameworks/sumstats/plugins/std-dev.bro `, :doc:`base/frameworks/sumstats/plugins/sum.bro `, :doc:`base/frameworks/sumstats/plugins/topk.bro `, :doc:`base/frameworks/sumstats/plugins/unique.bro `, :doc:`base/frameworks/sumstats/plugins/variance.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/average.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/average.bro.rst new file mode 100644 index 0000000000..f08868d92b --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/average.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/average.bro +============================================ +.. bro:namespace:: SumStats + +Calculate the average. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/hll_unique.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/hll_unique.bro.rst new file mode 100644 index 0000000000..1b2fae75ee --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/hll_unique.bro.rst @@ -0,0 +1,26 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/hll_unique.bro +=============================================== +.. bro:namespace:: SumStats + +Calculate the number of unique values (using the HyperLogLog algorithm). + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::Reducer`: :bro:type:`record` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/index.rst b/doc/scripts/base/frameworks/sumstats/plugins/index.rst new file mode 100644 index 0000000000..e3351d36f4 --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/index.rst @@ -0,0 +1,54 @@ +:orphan: + +Package: base/frameworks/sumstats/plugins +========================================= + +Plugins for the summary statistics framework. + +:doc:`/scripts/base/frameworks/sumstats/plugins/__load__.bro` + + +:doc:`/scripts/base/frameworks/sumstats/plugins/average.bro` + + Calculate the average. + +:doc:`/scripts/base/frameworks/sumstats/plugins/hll_unique.bro` + + Calculate the number of unique values (using the HyperLogLog algorithm). + +:doc:`/scripts/base/frameworks/sumstats/plugins/last.bro` + + Keep the last X observations. + +:doc:`/scripts/base/frameworks/sumstats/plugins/max.bro` + + Find the maximum value. + +:doc:`/scripts/base/frameworks/sumstats/plugins/min.bro` + + Find the minimum value. + +:doc:`/scripts/base/frameworks/sumstats/plugins/sample.bro` + + Keep a random sample of values. + +:doc:`/scripts/base/frameworks/sumstats/plugins/std-dev.bro` + + Calculate the standard deviation. + +:doc:`/scripts/base/frameworks/sumstats/plugins/variance.bro` + + Calculate the variance. + +:doc:`/scripts/base/frameworks/sumstats/plugins/sum.bro` + + Calculate the sum. + +:doc:`/scripts/base/frameworks/sumstats/plugins/topk.bro` + + Keep the top-k (i.e., most frequently occurring) observations. + +:doc:`/scripts/base/frameworks/sumstats/plugins/unique.bro` + + Calculate the number of unique values. + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/last.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/last.bro.rst new file mode 100644 index 0000000000..6f72cc348c --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/last.bro.rst @@ -0,0 +1,39 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/last.bro +========================================= +.. bro:namespace:: SumStats + +Keep the last X observations. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats `, :doc:`base/utils/queue.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::Reducer`: :bro:type:`record` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + +Functions +######### +================================================== ================================================ +:bro:id:`SumStats::get_last`: :bro:type:`function` Get a vector of element values from a ResultVal. +================================================== ================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: SumStats::get_last + + :Type: :bro:type:`function` (rv: :bro:type:`SumStats::ResultVal`) : :bro:type:`vector` of :bro:type:`SumStats::Observation` + + Get a vector of element values from a ResultVal. + + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/max.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/max.bro.rst new file mode 100644 index 0000000000..2ebcb1f982 --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/max.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/max.bro +======================================== +.. bro:namespace:: SumStats + +Find the maximum value. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/min.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/min.bro.rst new file mode 100644 index 0000000000..62025e61fc --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/min.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/min.bro +======================================== +.. bro:namespace:: SumStats + +Find the minimum value. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/sample.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/sample.bro.rst new file mode 100644 index 0000000000..b3006cc3f4 --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/sample.bro.rst @@ -0,0 +1,26 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/sample.bro +=========================================== +.. bro:namespace:: SumStats + +Keep a random sample of values. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::Reducer`: :bro:type:`record` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/std-dev.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/std-dev.bro.rst new file mode 100644 index 0000000000..bedb1ff6ec --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/std-dev.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/std-dev.bro +============================================ +.. bro:namespace:: SumStats + +Calculate the standard deviation. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats/main.bro `, :doc:`base/frameworks/sumstats/plugins/variance.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/sum.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/sum.bro.rst new file mode 100644 index 0000000000..c10fc83107 --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/sum.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/sum.bro +======================================== +.. bro:namespace:: SumStats + +Calculate the sum. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/topk.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/topk.bro.rst new file mode 100644 index 0000000000..df1d4e9550 --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/topk.bro.rst @@ -0,0 +1,25 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/topk.bro +========================================= +.. bro:namespace:: SumStats + +Keep the top-k (i.e., most frequently occurring) observations. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::Reducer`: :bro:type:`record` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/unique.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/unique.bro.rst new file mode 100644 index 0000000000..ed70a42aca --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/unique.bro.rst @@ -0,0 +1,26 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/unique.bro +=========================================== +.. bro:namespace:: SumStats + +Calculate the number of unique values. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::Reducer`: :bro:type:`record` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/sumstats/plugins/variance.bro.rst b/doc/scripts/base/frameworks/sumstats/plugins/variance.bro.rst new file mode 100644 index 0000000000..510882ce2d --- /dev/null +++ b/doc/scripts/base/frameworks/sumstats/plugins/variance.bro.rst @@ -0,0 +1,25 @@ +:tocdepth: 3 + +base/frameworks/sumstats/plugins/variance.bro +============================================= +.. bro:namespace:: SumStats + +Calculate the variance. + +:Namespace: SumStats +:Imports: :doc:`base/frameworks/sumstats/main.bro `, :doc:`base/frameworks/sumstats/plugins/average.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=================================================== = +:bro:type:`SumStats::Calculation`: :bro:type:`enum` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +:bro:type:`SumStats::ResultVal`: :bro:type:`record` +=================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/tunnels/__load__.bro.rst b/doc/scripts/base/frameworks/tunnels/__load__.bro.rst new file mode 100644 index 0000000000..ef9a8c3eeb --- /dev/null +++ b/doc/scripts/base/frameworks/tunnels/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/frameworks/tunnels/__load__.bro +==================================== + + +:Imports: :doc:`base/frameworks/tunnels/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/frameworks/tunnels/index.rst b/doc/scripts/base/frameworks/tunnels/index.rst new file mode 100644 index 0000000000..3a2012f070 --- /dev/null +++ b/doc/scripts/base/frameworks/tunnels/index.rst @@ -0,0 +1,20 @@ +:orphan: + +Package: base/frameworks/tunnels +================================ + +The tunnels framework handles the tracking/logging of tunnels (e.g. Teredo, +AYIYA, or IP-in-IP such as 6to4 where "IP" is either IPv4 or IPv6). + +:doc:`/scripts/base/frameworks/tunnels/__load__.bro` + + +:doc:`/scripts/base/frameworks/tunnels/main.bro` + + This script handles the tracking/logging of tunnels (e.g. Teredo, + AYIYA, or IP-in-IP such as 6to4 where "IP" is either IPv4 or IPv6). + + For any connection that occurs over a tunnel, information about its + encapsulating tunnels is also found in the *tunnel* field of + :bro:type:`connection`. + diff --git a/doc/scripts/base/frameworks/tunnels/main.bro.rst b/doc/scripts/base/frameworks/tunnels/main.bro.rst new file mode 100644 index 0000000000..80ee58e148 --- /dev/null +++ b/doc/scripts/base/frameworks/tunnels/main.bro.rst @@ -0,0 +1,184 @@ +:tocdepth: 3 + +base/frameworks/tunnels/main.bro +================================ +.. bro:namespace:: Tunnel + +This script handles the tracking/logging of tunnels (e.g. Teredo, +AYIYA, or IP-in-IP such as 6to4 where "IP" is either IPv4 or IPv6). + +For any connection that occurs over a tunnel, information about its +encapsulating tunnels is also found in the *tunnel* field of +:bro:type:`connection`. + +:Namespace: Tunnel + +Summary +~~~~~~~ +Redefinable Options +################### +============================================================================== =============================================================== +:bro:id:`Tunnel::expiration_interval`: :bro:type:`interval` :bro:attr:`&redef` The amount of time a tunnel is not used in establishment of new + connections before it is considered inactive/expired. +============================================================================== =============================================================== + +State Variables +############### +================================================================================================================================================================== ========================= +:bro:id:`Tunnel::active`: :bro:type:`table` :bro:attr:`&read_expire` = :bro:see:`Tunnel::expiration_interval` :bro:attr:`&expire_func` = :bro:see:`Tunnel::expire` Currently active tunnels. +================================================================================================================================================================== ========================= + +Types +##### +============================================ =============================================================== +:bro:type:`Tunnel::Action`: :bro:type:`enum` Types of interesting activity that can occur with a tunnel. +:bro:type:`Tunnel::Info`: :bro:type:`record` The record type which contains column fields of the tunnel log. +============================================ =============================================================== + +Redefinitions +############# +================================================================= ===================================== +:bro:type:`Log::ID`: :bro:type:`enum` The tunnel logging stream identifier. +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= ===================================== + +Functions +######### +==================================================== =============================================================== +:bro:id:`Tunnel::close`: :bro:type:`function` Removes a single tunnel from the :bro:id:`Tunnel::active` table + and logs the closing/expiration of the tunnel. +:bro:id:`Tunnel::expire`: :bro:type:`function` Logs a single tunnel "connection" with action + :bro:see:`Tunnel::EXPIRE` and removes it from the + :bro:id:`Tunnel::active` table. +:bro:id:`Tunnel::register`: :bro:type:`function` Logs a single tunnel "connection" with action + :bro:see:`Tunnel::DISCOVER` if it's not already in the + :bro:id:`Tunnel::active` table and adds it if not. +:bro:id:`Tunnel::register_all`: :bro:type:`function` Logs all tunnels in an encapsulation chain with action + :bro:see:`Tunnel::DISCOVER` that aren't already in the + :bro:id:`Tunnel::active` table and adds them if not. +==================================================== =============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Tunnel::expiration_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 hr`` + + The amount of time a tunnel is not used in establishment of new + connections before it is considered inactive/expired. + +State Variables +############### +.. bro:id:: Tunnel::active + + :Type: :bro:type:`table` [:bro:type:`conn_id`] of :bro:type:`Tunnel::Info` + :Attributes: :bro:attr:`&read_expire` = :bro:see:`Tunnel::expiration_interval` :bro:attr:`&expire_func` = :bro:see:`Tunnel::expire` + :Default: ``{}`` + + Currently active tunnels. That is, tunnels for which new, + encapsulated connections have been seen in the interval indicated by + :bro:see:`Tunnel::expiration_interval`. + +Types +##### +.. bro:type:: Tunnel::Action + + :Type: :bro:type:`enum` + + .. bro:enum:: Tunnel::DISCOVER Tunnel::Action + + A new tunnel (encapsulating "connection") has been seen. + + .. bro:enum:: Tunnel::CLOSE Tunnel::Action + + A tunnel connection has closed. + + .. bro:enum:: Tunnel::EXPIRE Tunnel::Action + + No new connections over a tunnel happened in the amount of + time indicated by :bro:see:`Tunnel::expiration_interval`. + + Types of interesting activity that can occur with a tunnel. + +.. bro:type:: Tunnel::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time at which some tunnel activity occurred. + + uid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The unique identifier for the tunnel, which may correspond + to a :bro:type:`connection`'s *uid* field for non-IP-in-IP tunnels. + This is optional because there could be numerous connections + for payload proxies like SOCKS but we should treat it as a + single tunnel. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The tunnel "connection" 4-tuple of endpoint addresses/ports. + For an IP tunnel, the ports will be 0. + + tunnel_type: :bro:type:`Tunnel::Type` :bro:attr:`&log` + The type of tunnel. + + action: :bro:type:`Tunnel::Action` :bro:attr:`&log` + The type of activity that occurred. + + The record type which contains column fields of the tunnel log. + +Functions +######### +.. bro:id:: Tunnel::close + + :Type: :bro:type:`function` (tunnel: :bro:type:`Tunnel::Info`, action: :bro:type:`Tunnel::Action`) : :bro:type:`void` + + Removes a single tunnel from the :bro:id:`Tunnel::active` table + and logs the closing/expiration of the tunnel. + + + :tunnel: The tunnel which has closed or expired. + + + :action: The specific reason for the tunnel ending. + +.. bro:id:: Tunnel::expire + + :Type: :bro:type:`function` (t: :bro:type:`table` [:bro:type:`conn_id`] of :bro:type:`Tunnel::Info`, idx: :bro:type:`conn_id`) : :bro:type:`interval` + + Logs a single tunnel "connection" with action + :bro:see:`Tunnel::EXPIRE` and removes it from the + :bro:id:`Tunnel::active` table. + + + :t: A table of tunnels. + + + :idx: The index of the tunnel table corresponding to the tunnel to expire. + + + :returns: 0secs, which when this function is used as an + :bro:attr:`&expire_func`, indicates to remove the element at + *idx* immediately. + +.. bro:id:: Tunnel::register + + :Type: :bro:type:`function` (ec: :bro:type:`Tunnel::EncapsulatingConn`) : :bro:type:`void` + + Logs a single tunnel "connection" with action + :bro:see:`Tunnel::DISCOVER` if it's not already in the + :bro:id:`Tunnel::active` table and adds it if not. + +.. bro:id:: Tunnel::register_all + + :Type: :bro:type:`function` (ecv: :bro:type:`EncapsulatingConnVector`) : :bro:type:`void` + + Logs all tunnels in an encapsulation chain with action + :bro:see:`Tunnel::DISCOVER` that aren't already in the + :bro:id:`Tunnel::active` table and adds them if not. + + diff --git a/doc/scripts/base/init-bare.bro.rst b/doc/scripts/base/init-bare.bro.rst new file mode 100644 index 0000000000..65cf4649ad --- /dev/null +++ b/doc/scripts/base/init-bare.bro.rst @@ -0,0 +1,9395 @@ +:tocdepth: 3 + +base/init-bare.bro +================== +.. bro:namespace:: Cluster +.. bro:namespace:: DCE_RPC +.. bro:namespace:: DHCP +.. bro:namespace:: GLOBAL +.. bro:namespace:: JSON +.. bro:namespace:: KRB +.. bro:namespace:: MOUNT3 +.. bro:namespace:: NCP +.. bro:namespace:: NFS3 +.. bro:namespace:: NTLM +.. bro:namespace:: PE +.. bro:namespace:: Pcap +.. bro:namespace:: RADIUS +.. bro:namespace:: RDP +.. bro:namespace:: Reporter +.. bro:namespace:: SMB +.. bro:namespace:: SMB1 +.. bro:namespace:: SMB2 +.. bro:namespace:: SNMP +.. bro:namespace:: SOCKS +.. bro:namespace:: SSH +.. bro:namespace:: SSL +.. bro:namespace:: Threading +.. bro:namespace:: Tunnel +.. bro:namespace:: Unified2 +.. bro:namespace:: Weird +.. bro:namespace:: X509 + + +:Namespaces: Cluster, DCE_RPC, DHCP, GLOBAL, JSON, KRB, MOUNT3, NCP, NFS3, NTLM, PE, Pcap, RADIUS, RDP, Reporter, SMB, SMB1, SMB2, SNMP, SOCKS, SSH, SSL, Threading, Tunnel, Unified2, Weird, X509 +:Imports: :doc:`base/bif/bro.bif.bro `, :doc:`base/bif/const.bif.bro `, :doc:`base/bif/event.bif.bro `, :doc:`base/bif/option.bif.bro `, :doc:`base/bif/plugins/Bro_KRB.types.bif.bro `, :doc:`base/bif/plugins/Bro_SNMP.types.bif.bro `, :doc:`base/bif/reporter.bif.bro `, :doc:`base/bif/stats.bif.bro `, :doc:`base/bif/strings.bif.bro `, :doc:`base/bif/types.bif.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +================================================================================ ====================================================================== +:bro:id:`Weird::sampling_duration`: :bro:type:`interval` :bro:attr:`&redef` How long a weird of a given type is allowed to keep state/counters in + memory. +:bro:id:`Weird::sampling_rate`: :bro:type:`count` :bro:attr:`&redef` The rate-limiting sampling rate. +:bro:id:`Weird::sampling_threshold`: :bro:type:`count` :bro:attr:`&redef` How many weirds of a given type to tolerate before sampling begins. +:bro:id:`Weird::sampling_whitelist`: :bro:type:`set` :bro:attr:`&redef` Prevents rate-limiting sampling of any weirds named in the table. +:bro:id:`default_file_bof_buffer_size`: :bro:type:`count` :bro:attr:`&redef` Default amount of bytes that file analysis will buffer in order to use + for mime type matching. +:bro:id:`default_file_timeout_interval`: :bro:type:`interval` :bro:attr:`&redef` Default amount of time a file can be inactive before the file analysis + gives up and discards any internal state related to the file. +================================================================================ ====================================================================== + +Redefinable Options +################### +======================================================================================= ================================================================================ +:bro:id:`DCE_RPC::max_cmd_reassembly`: :bro:type:`count` :bro:attr:`&redef` The maximum number of simultaneous fragmented commands that + the DCE_RPC analyzer will tolerate before the it will generate + a weird and skip further input. +:bro:id:`DCE_RPC::max_frag_data`: :bro:type:`count` :bro:attr:`&redef` The maximum number of fragmented bytes that the DCE_RPC analyzer + will tolerate on a command before the analyzer will generate a weird + and skip further input. +:bro:id:`KRB::keytab`: :bro:type:`string` :bro:attr:`&redef` Kerberos keytab file name. +:bro:id:`NCP::max_frame_size`: :bro:type:`count` :bro:attr:`&redef` The maximum number of bytes to allocate when parsing NCP frames. +:bro:id:`NFS3::return_data`: :bro:type:`bool` :bro:attr:`&redef` If true, :bro:see:`nfs_proc_read` and :bro:see:`nfs_proc_write` + events return the file data that has been read/written. +:bro:id:`NFS3::return_data_first_only`: :bro:type:`bool` :bro:attr:`&redef` If :bro:id:`NFS3::return_data` is true, whether to *only* return data + if the read or write offset is 0, i.e., only return data for the + beginning of the file. +:bro:id:`NFS3::return_data_max`: :bro:type:`count` :bro:attr:`&redef` If :bro:id:`NFS3::return_data` is true, how much data should be + returned at most. +:bro:id:`Pcap::bufsize`: :bro:type:`count` :bro:attr:`&redef` Number of Mbytes to provide as buffer space when capturing from live + interfaces. +:bro:id:`Pcap::snaplen`: :bro:type:`count` :bro:attr:`&redef` Number of bytes per packet to capture from live interfaces. +:bro:id:`Reporter::errors_to_stderr`: :bro:type:`bool` :bro:attr:`&redef` Tunable for sending reporter error messages to STDERR. +:bro:id:`Reporter::info_to_stderr`: :bro:type:`bool` :bro:attr:`&redef` Tunable for sending reporter info messages to STDERR. +:bro:id:`Reporter::warnings_to_stderr`: :bro:type:`bool` :bro:attr:`&redef` Tunable for sending reporter warning messages to STDERR. +:bro:id:`SMB::pipe_filenames`: :bro:type:`set` :bro:attr:`&redef` A set of file names used as named pipes over SMB. +:bro:id:`Threading::heartbeat_interval`: :bro:type:`interval` :bro:attr:`&redef` The heartbeat interval used by the threading framework. +:bro:id:`Tunnel::delay_gtp_confirmation`: :bro:type:`bool` :bro:attr:`&redef` With this set, the GTP analyzer waits until the most-recent upflow + and downflow packets are a valid GTPv1 encapsulation before + issuing :bro:see:`protocol_confirmation`. +:bro:id:`Tunnel::delay_teredo_confirmation`: :bro:type:`bool` :bro:attr:`&redef` With this set, the Teredo analyzer waits until it sees both sides + of a connection using a valid Teredo encapsulation before issuing + a :bro:see:`protocol_confirmation`. +:bro:id:`Tunnel::enable_ayiya`: :bro:type:`bool` :bro:attr:`&redef` Toggle whether to do IPv{4,6}-in-AYIYA decapsulation. +:bro:id:`Tunnel::enable_gre`: :bro:type:`bool` :bro:attr:`&redef` Toggle whether to do GRE decapsulation. +:bro:id:`Tunnel::enable_gtpv1`: :bro:type:`bool` :bro:attr:`&redef` Toggle whether to do GTPv1 decapsulation. +:bro:id:`Tunnel::enable_ip`: :bro:type:`bool` :bro:attr:`&redef` Toggle whether to do IPv{4,6}-in-IPv{4,6} decapsulation. +:bro:id:`Tunnel::enable_teredo`: :bro:type:`bool` :bro:attr:`&redef` Toggle whether to do IPv6-in-Teredo decapsulation. +:bro:id:`Tunnel::ip_tunnel_timeout`: :bro:type:`interval` :bro:attr:`&redef` How often to cleanup internal state for inactive IP tunnels + (includes GRE tunnels). +:bro:id:`Tunnel::max_depth`: :bro:type:`count` :bro:attr:`&redef` The maximum depth of a tunnel to decapsulate until giving up. +:bro:id:`backdoor_stat_backoff`: :bro:type:`double` :bro:attr:`&redef` Deprecated. +:bro:id:`backdoor_stat_period`: :bro:type:`interval` :bro:attr:`&redef` Deprecated. +:bro:id:`bits_per_uid`: :bro:type:`count` :bro:attr:`&redef` Number of bits in UIDs that are generated to identify connections and + files. +:bro:id:`check_for_unused_event_handlers`: :bro:type:`bool` :bro:attr:`&redef` If true, warns about unused event handlers at startup. +:bro:id:`chunked_io_buffer_soft_cap`: :bro:type:`count` :bro:attr:`&redef` The number of IO chunks allowed to be buffered between the child + and parent process of remote communication before Bro starts dropping + connections to remote peers in an attempt to catch up. +:bro:id:`cmd_line_bpf_filter`: :bro:type:`string` :bro:attr:`&redef` BPF filter the user has set via the -f command line options. +:bro:id:`detect_filtered_trace`: :bro:type:`bool` :bro:attr:`&redef` Whether to attempt to automatically detect SYN/FIN/RST-filtered trace + and not report missing segments for such connections. +:bro:id:`dns_resolver`: :bro:type:`addr` :bro:attr:`&redef` The address of the DNS resolver to use. +:bro:id:`dns_session_timeout`: :bro:type:`interval` :bro:attr:`&redef` Time to wait before timing out a DNS request. +:bro:id:`dpd_buffer_size`: :bro:type:`count` :bro:attr:`&redef` Size of per-connection buffer used for dynamic protocol detection. +:bro:id:`dpd_ignore_ports`: :bro:type:`bool` :bro:attr:`&redef` If true, don't consider any ports for deciding which protocol analyzer to + use. +:bro:id:`dpd_match_only_beginning`: :bro:type:`bool` :bro:attr:`&redef` If true, stops signature matching if :bro:see:`dpd_buffer_size` has been + reached. +:bro:id:`dpd_reassemble_first_packets`: :bro:type:`bool` :bro:attr:`&redef` Reassemble the beginning of all TCP connections before doing + signature matching. +:bro:id:`enable_syslog`: :bro:type:`bool` :bro:attr:`&redef` Deprecated. +:bro:id:`encap_hdr_size`: :bro:type:`count` :bro:attr:`&redef` If positive, indicates the encapsulation header size that should + be skipped. +:bro:id:`exit_only_after_terminate`: :bro:type:`bool` :bro:attr:`&redef` Flag to prevent Bro from exiting automatically when input is exhausted. +:bro:id:`expensive_profiling_multiple`: :bro:type:`count` :bro:attr:`&redef` Multiples of :bro:see:`profiling_interval` at which (more expensive) memory + profiling is done (0 disables). +:bro:id:`forward_remote_events`: :bro:type:`bool` :bro:attr:`&redef` If true, broadcast events received from one peer to all other peers. +:bro:id:`forward_remote_state_changes`: :bro:type:`bool` :bro:attr:`&redef` If true, broadcast state updates received from one peer to all other peers. +:bro:id:`frag_timeout`: :bro:type:`interval` :bro:attr:`&redef` How long to hold onto fragments for possible reassembly. +:bro:id:`global_hash_seed`: :bro:type:`string` :bro:attr:`&redef` Seed for hashes computed internally for probabilistic data structures. +:bro:id:`icmp_inactivity_timeout`: :bro:type:`interval` :bro:attr:`&redef` If an ICMP flow is inactive, time it out after this interval. +:bro:id:`ignore_checksums`: :bro:type:`bool` :bro:attr:`&redef` If true, don't verify checksums. +:bro:id:`ignore_keep_alive_rexmit`: :bro:type:`bool` :bro:attr:`&redef` Ignore certain TCP retransmissions for :bro:see:`conn_stats`. +:bro:id:`interconn_default_pkt_size`: :bro:type:`count` :bro:attr:`&redef` Deprecated. +:bro:id:`interconn_max_interarrival`: :bro:type:`interval` :bro:attr:`&redef` Deprecated. +:bro:id:`interconn_max_keystroke_pkt_size`: :bro:type:`count` :bro:attr:`&redef` Deprecated. +:bro:id:`interconn_min_interarrival`: :bro:type:`interval` :bro:attr:`&redef` Deprecated. +:bro:id:`interconn_stat_backoff`: :bro:type:`double` :bro:attr:`&redef` Deprecated. +:bro:id:`interconn_stat_period`: :bro:type:`interval` :bro:attr:`&redef` Deprecated. +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` Ports which the core considers being likely used by servers. +:bro:id:`log_encryption_key`: :bro:type:`string` :bro:attr:`&redef` Deprecated. +:bro:id:`log_max_size`: :bro:type:`double` :bro:attr:`&redef` Deprecated. +:bro:id:`log_rotate_base_time`: :bro:type:`string` :bro:attr:`&redef` Deprecated. +:bro:id:`log_rotate_interval`: :bro:type:`interval` :bro:attr:`&redef` Deprecated. +:bro:id:`max_files_in_cache`: :bro:type:`count` :bro:attr:`&redef` The maximum number of open files to keep cached at a given time. +:bro:id:`max_remote_events_processed`: :bro:type:`count` :bro:attr:`&redef` With a similar trade-off, this gives the number of remote events + to process in a batch before interleaving other activity. +:bro:id:`max_timer_expires`: :bro:type:`count` :bro:attr:`&redef` The maximum number of timers to expire after processing each new + packet. +:bro:id:`mmdb_dir`: :bro:type:`string` :bro:attr:`&redef` The directory containing MaxMind DB (.mmdb) files to use for GeoIP support. +:bro:id:`non_analyzed_lifetime`: :bro:type:`interval` :bro:attr:`&redef` If a connection belongs to an application that we don't analyze, + time it out after this interval. +:bro:id:`ntp_session_timeout`: :bro:type:`interval` :bro:attr:`&redef` Time to wait before timing out an NTP request. +:bro:id:`old_comm_usage_is_ok`: :bro:type:`bool` :bro:attr:`&redef` Whether usage of the old communication system is considered an error or + not. +:bro:id:`packet_filter_default`: :bro:type:`bool` :bro:attr:`&redef` Default mode for Bro's user-space dynamic packet filter. +:bro:id:`partial_connection_ok`: :bro:type:`bool` :bro:attr:`&redef` If true, instantiate connection state when a partial connection + (one missing its initial establishment negotiation) is seen. +:bro:id:`passive_fingerprint_file`: :bro:type:`string` :bro:attr:`&redef` ``p0f`` fingerprint file to use. +:bro:id:`peer_description`: :bro:type:`string` :bro:attr:`&redef` Description transmitted to remote communication peers for identification. +:bro:id:`pkt_profile_freq`: :bro:type:`double` :bro:attr:`&redef` Frequency associated with packet profiling. +:bro:id:`pkt_profile_mode`: :bro:type:`pkt_profile_modes` :bro:attr:`&redef` Output mode for packet profiling information. +:bro:id:`profiling_interval`: :bro:type:`interval` :bro:attr:`&redef` Update interval for profiling (0 disables). +:bro:id:`record_all_packets`: :bro:type:`bool` :bro:attr:`&redef` If a trace file is given with ``-w``, dump *all* packets seen by Bro into it. +:bro:id:`remote_check_sync_consistency`: :bro:type:`bool` :bro:attr:`&redef` Whether for :bro:attr:`&synchronized` state to send the old value as a + consistency check. +:bro:id:`remote_trace_sync_interval`: :bro:type:`interval` :bro:attr:`&redef` Synchronize trace processing at a regular basis in pseudo-realtime mode. +:bro:id:`remote_trace_sync_peers`: :bro:type:`count` :bro:attr:`&redef` Number of peers across which to synchronize trace processing in + pseudo-realtime mode. +:bro:id:`report_gaps_for_partial`: :bro:type:`bool` :bro:attr:`&redef` Whether we want :bro:see:`content_gap` for partial + connections. +:bro:id:`rpc_timeout`: :bro:type:`interval` :bro:attr:`&redef` Time to wait before timing out an RPC request. +:bro:id:`segment_profiling`: :bro:type:`bool` :bro:attr:`&redef` If true, then write segment profiling information (very high volume!) + in addition to profiling statistics. +:bro:id:`sig_max_group_size`: :bro:type:`count` :bro:attr:`&redef` Maximum size of regular expression groups for signature matching. +:bro:id:`skip_http_data`: :bro:type:`bool` :bro:attr:`&redef` Skip HTTP data for performance considerations. +:bro:id:`ssl_ca_certificate`: :bro:type:`string` :bro:attr:`&redef` The CA certificate file to authorize remote Bros/Broccolis. +:bro:id:`ssl_passphrase`: :bro:type:`string` :bro:attr:`&redef` The passphrase for our private key. +:bro:id:`ssl_private_key`: :bro:type:`string` :bro:attr:`&redef` File containing our private key and our certificate. +:bro:id:`state_dir`: :bro:type:`string` :bro:attr:`&redef` Specifies a directory for Bro to store its persistent state. +:bro:id:`state_write_delay`: :bro:type:`interval` :bro:attr:`&redef` Length of the delays inserted when storing state incrementally. +:bro:id:`stp_delta`: :bro:type:`interval` :bro:attr:`&redef` Internal to the stepping stone detector. +:bro:id:`stp_idle_min`: :bro:type:`interval` :bro:attr:`&redef` Internal to the stepping stone detector. +:bro:id:`suppress_local_output`: :bro:type:`bool` :bro:attr:`&redef` Deprecated. +:bro:id:`table_expire_delay`: :bro:type:`interval` :bro:attr:`&redef` When expiring table entries, wait this amount of time before checking the + next chunk of entries. +:bro:id:`table_expire_interval`: :bro:type:`interval` :bro:attr:`&redef` Check for expired table entries after this amount of time. +:bro:id:`table_incremental_step`: :bro:type:`count` :bro:attr:`&redef` When expiring/serializing table entries, don't work on more than this many + table entries at a time. +:bro:id:`tcp_SYN_ack_ok`: :bro:type:`bool` :bro:attr:`&redef` If true, instantiate connection state when a SYN/ACK is seen but not the + initial SYN (even if :bro:see:`partial_connection_ok` is false). +:bro:id:`tcp_SYN_timeout`: :bro:type:`interval` :bro:attr:`&redef` Check up on the result of an initial SYN after this much time. +:bro:id:`tcp_attempt_delay`: :bro:type:`interval` :bro:attr:`&redef` Wait this long upon seeing an initial SYN before timing out the + connection attempt. +:bro:id:`tcp_close_delay`: :bro:type:`interval` :bro:attr:`&redef` Upon seeing a normal connection close, flush state after this much time. +:bro:id:`tcp_connection_linger`: :bro:type:`interval` :bro:attr:`&redef` When checking a closed connection for further activity, consider it + inactive if there hasn't been any for this long. +:bro:id:`tcp_content_deliver_all_orig`: :bro:type:`bool` :bro:attr:`&redef` If true, all TCP originator-side traffic is reported via + :bro:see:`tcp_contents`. +:bro:id:`tcp_content_deliver_all_resp`: :bro:type:`bool` :bro:attr:`&redef` If true, all TCP responder-side traffic is reported via + :bro:see:`tcp_contents`. +:bro:id:`tcp_content_delivery_ports_orig`: :bro:type:`table` :bro:attr:`&redef` Defines destination TCP ports for which the contents of the originator stream + should be delivered via :bro:see:`tcp_contents`. +:bro:id:`tcp_content_delivery_ports_resp`: :bro:type:`table` :bro:attr:`&redef` Defines destination TCP ports for which the contents of the responder stream + should be delivered via :bro:see:`tcp_contents`. +:bro:id:`tcp_excessive_data_without_further_acks`: :bro:type:`count` :bro:attr:`&redef` If we've seen this much data without any of it being acked, we give up + on that connection to avoid memory exhaustion due to buffering all that + stuff. +:bro:id:`tcp_inactivity_timeout`: :bro:type:`interval` :bro:attr:`&redef` If a TCP connection is inactive, time it out after this interval. +:bro:id:`tcp_match_undelivered`: :bro:type:`bool` :bro:attr:`&redef` If true, pass any undelivered to the signature engine before flushing the state. +:bro:id:`tcp_max_above_hole_without_any_acks`: :bro:type:`count` :bro:attr:`&redef` If we're not seeing our peer's ACKs, the maximum volume of data above a + sequence hole that we'll tolerate before assuming that there's been a packet + drop and we should give up on tracking a connection. +:bro:id:`tcp_max_initial_window`: :bro:type:`count` :bro:attr:`&redef` Maximum amount of data that might plausibly be sent in an initial flight + (prior to receiving any acks). +:bro:id:`tcp_max_old_segments`: :bro:type:`count` :bro:attr:`&redef` Number of TCP segments to buffer beyond what's been acknowledged already + to detect retransmission inconsistencies. +:bro:id:`tcp_partial_close_delay`: :bro:type:`interval` :bro:attr:`&redef` Generate a :bro:id:`connection_partial_close` event this much time after one + half of a partial connection closes, assuming there has been no subsequent + activity. +:bro:id:`tcp_reassembler_ports_orig`: :bro:type:`set` :bro:attr:`&redef` For services without a handler, these sets define originator-side ports + that still trigger reassembly. +:bro:id:`tcp_reassembler_ports_resp`: :bro:type:`set` :bro:attr:`&redef` For services without a handler, these sets define responder-side ports + that still trigger reassembly. +:bro:id:`tcp_reset_delay`: :bro:type:`interval` :bro:attr:`&redef` Upon seeing a RST, flush state after this much time. +:bro:id:`tcp_session_timer`: :bro:type:`interval` :bro:attr:`&redef` After a connection has closed, wait this long for further activity + before checking whether to time out its state. +:bro:id:`tcp_storm_interarrival_thresh`: :bro:type:`interval` :bro:attr:`&redef` FINs/RSTs must come with this much time or less between them to be + considered a "storm". +:bro:id:`tcp_storm_thresh`: :bro:type:`count` :bro:attr:`&redef` Number of FINs/RSTs in a row that constitute a "storm". +:bro:id:`time_machine_profiling`: :bro:type:`bool` :bro:attr:`&redef` If true, output profiling for Time-Machine queries. +:bro:id:`timer_mgr_inactivity_timeout`: :bro:type:`interval` :bro:attr:`&redef` Per-incident timer managers are drained after this amount of inactivity. +:bro:id:`truncate_http_URI`: :bro:type:`int` :bro:attr:`&redef` Maximum length of HTTP URIs passed to events. +:bro:id:`udp_content_deliver_all_orig`: :bro:type:`bool` :bro:attr:`&redef` If true, all UDP originator-side traffic is reported via + :bro:see:`udp_contents`. +:bro:id:`udp_content_deliver_all_resp`: :bro:type:`bool` :bro:attr:`&redef` If true, all UDP responder-side traffic is reported via + :bro:see:`udp_contents`. +:bro:id:`udp_content_delivery_ports_orig`: :bro:type:`table` :bro:attr:`&redef` Defines UDP destination ports for which the contents of the originator stream + should be delivered via :bro:see:`udp_contents`. +:bro:id:`udp_content_delivery_ports_resp`: :bro:type:`table` :bro:attr:`&redef` Defines UDP destination ports for which the contents of the responder stream + should be delivered via :bro:see:`udp_contents`. +:bro:id:`udp_inactivity_timeout`: :bro:type:`interval` :bro:attr:`&redef` If a UDP flow is inactive, time it out after this interval. +:bro:id:`use_conn_size_analyzer`: :bro:type:`bool` :bro:attr:`&redef` Whether to use the ``ConnSize`` analyzer to count the number of packets and + IP-level bytes transferred by each endpoint. +:bro:id:`watchdog_interval`: :bro:type:`interval` :bro:attr:`&redef` Bro's watchdog interval. +======================================================================================= ================================================================================ + +Constants +######### +========================================================= ======================================================================= +:bro:id:`CONTENTS_BOTH`: :bro:type:`count` Record both originator and responder contents. +:bro:id:`CONTENTS_NONE`: :bro:type:`count` Turn off recording of contents. +:bro:id:`CONTENTS_ORIG`: :bro:type:`count` Record originator contents. +:bro:id:`CONTENTS_RESP`: :bro:type:`count` Record responder contents. +:bro:id:`DNS_ADDL`: :bro:type:`count` An additional record. +:bro:id:`DNS_ANS`: :bro:type:`count` An answer record. +:bro:id:`DNS_AUTH`: :bro:type:`count` An authoritative record. +:bro:id:`DNS_QUERY`: :bro:type:`count` A query. +:bro:id:`ENDIAN_BIG`: :bro:type:`count` Big endian. +:bro:id:`ENDIAN_CONFUSED`: :bro:type:`count` Tried to determine endian, but failed. +:bro:id:`ENDIAN_LITTLE`: :bro:type:`count` Little endian. +:bro:id:`ENDIAN_UNKNOWN`: :bro:type:`count` Endian not yet determined. +:bro:id:`ICMP_UNREACH_ADMIN_PROHIB`: :bro:type:`count` Administratively prohibited. +:bro:id:`ICMP_UNREACH_HOST`: :bro:type:`count` Host unreachable. +:bro:id:`ICMP_UNREACH_NEEDFRAG`: :bro:type:`count` Fragment needed. +:bro:id:`ICMP_UNREACH_NET`: :bro:type:`count` Network unreachable. +:bro:id:`ICMP_UNREACH_PORT`: :bro:type:`count` Port unreachable. +:bro:id:`ICMP_UNREACH_PROTOCOL`: :bro:type:`count` Protocol unreachable. +:bro:id:`IPPROTO_AH`: :bro:type:`count` IPv6 authentication header. +:bro:id:`IPPROTO_DSTOPTS`: :bro:type:`count` IPv6 destination options header. +:bro:id:`IPPROTO_ESP`: :bro:type:`count` IPv6 encapsulating security payload header. +:bro:id:`IPPROTO_FRAGMENT`: :bro:type:`count` IPv6 fragment header. +:bro:id:`IPPROTO_HOPOPTS`: :bro:type:`count` IPv6 hop-by-hop-options header. +:bro:id:`IPPROTO_ICMP`: :bro:type:`count` Control message protocol. +:bro:id:`IPPROTO_ICMPV6`: :bro:type:`count` ICMP for IPv6. +:bro:id:`IPPROTO_IGMP`: :bro:type:`count` Group management protocol. +:bro:id:`IPPROTO_IP`: :bro:type:`count` Dummy for IP. +:bro:id:`IPPROTO_IPIP`: :bro:type:`count` IP encapsulation in IP. +:bro:id:`IPPROTO_IPV6`: :bro:type:`count` IPv6 header. +:bro:id:`IPPROTO_MOBILITY`: :bro:type:`count` IPv6 mobility header. +:bro:id:`IPPROTO_NONE`: :bro:type:`count` IPv6 no next header. +:bro:id:`IPPROTO_RAW`: :bro:type:`count` Raw IP packet. +:bro:id:`IPPROTO_ROUTING`: :bro:type:`count` IPv6 routing header. +:bro:id:`IPPROTO_TCP`: :bro:type:`count` TCP. +:bro:id:`IPPROTO_UDP`: :bro:type:`count` User datagram protocol. +:bro:id:`LOGIN_STATE_AUTHENTICATE`: :bro:type:`count` +:bro:id:`LOGIN_STATE_CONFUSED`: :bro:type:`count` +:bro:id:`LOGIN_STATE_LOGGED_IN`: :bro:type:`count` +:bro:id:`LOGIN_STATE_SKIP`: :bro:type:`count` +:bro:id:`PEER_ID_NONE`: :bro:type:`count` Place-holder constant indicating "no peer". +:bro:id:`REMOTE_LOG_ERROR`: :bro:type:`count` Deprecated. +:bro:id:`REMOTE_LOG_INFO`: :bro:type:`count` Deprecated. +:bro:id:`REMOTE_SRC_CHILD`: :bro:type:`count` Message from the child process. +:bro:id:`REMOTE_SRC_PARENT`: :bro:type:`count` Message from the parent process. +:bro:id:`REMOTE_SRC_SCRIPT`: :bro:type:`count` Message from a policy script. +:bro:id:`RPC_status`: :bro:type:`table` Mapping of numerical RPC status codes to readable messages. +:bro:id:`SNMP::OBJ_COUNTER32_TAG`: :bro:type:`count` Unsigned 32-bit integer. +:bro:id:`SNMP::OBJ_COUNTER64_TAG`: :bro:type:`count` Unsigned 64-bit integer. +:bro:id:`SNMP::OBJ_ENDOFMIBVIEW_TAG`: :bro:type:`count` A NULL value. +:bro:id:`SNMP::OBJ_INTEGER_TAG`: :bro:type:`count` Signed 64-bit integer. +:bro:id:`SNMP::OBJ_IPADDRESS_TAG`: :bro:type:`count` An IP address. +:bro:id:`SNMP::OBJ_NOSUCHINSTANCE_TAG`: :bro:type:`count` A NULL value. +:bro:id:`SNMP::OBJ_NOSUCHOBJECT_TAG`: :bro:type:`count` A NULL value. +:bro:id:`SNMP::OBJ_OCTETSTRING_TAG`: :bro:type:`count` An octet string. +:bro:id:`SNMP::OBJ_OID_TAG`: :bro:type:`count` An Object Identifier. +:bro:id:`SNMP::OBJ_OPAQUE_TAG`: :bro:type:`count` An octet string. +:bro:id:`SNMP::OBJ_TIMETICKS_TAG`: :bro:type:`count` Unsigned 32-bit integer. +:bro:id:`SNMP::OBJ_UNSIGNED32_TAG`: :bro:type:`count` Unsigned 32-bit integer. +:bro:id:`SNMP::OBJ_UNSPECIFIED_TAG`: :bro:type:`count` A NULL value. +:bro:id:`TCP_CLOSED`: :bro:type:`count` Endpoint has closed connection. +:bro:id:`TCP_ESTABLISHED`: :bro:type:`count` Endpoint has finished initial handshake regularly. +:bro:id:`TCP_INACTIVE`: :bro:type:`count` Endpoint is still inactive. +:bro:id:`TCP_PARTIAL`: :bro:type:`count` Endpoint has sent data but no initial SYN. +:bro:id:`TCP_RESET`: :bro:type:`count` Endpoint has sent RST. +:bro:id:`TCP_SYN_ACK_SENT`: :bro:type:`count` Endpoint has sent SYN/ACK. +:bro:id:`TCP_SYN_SENT`: :bro:type:`count` Endpoint has sent SYN. +:bro:id:`TH_ACK`: :bro:type:`count` ACK. +:bro:id:`TH_FIN`: :bro:type:`count` FIN. +:bro:id:`TH_FLAGS`: :bro:type:`count` Mask combining all flags. +:bro:id:`TH_PUSH`: :bro:type:`count` PUSH. +:bro:id:`TH_RST`: :bro:type:`count` RST. +:bro:id:`TH_SYN`: :bro:type:`count` SYN. +:bro:id:`TH_URG`: :bro:type:`count` URG. +:bro:id:`UDP_ACTIVE`: :bro:type:`count` Endpoint has sent something. +:bro:id:`UDP_INACTIVE`: :bro:type:`count` Endpoint is still inactive. +:bro:id:`trace_output_file`: :bro:type:`string` Holds the filename of the trace file given with ``-w`` (empty if none). +========================================================= ======================================================================= + +State Variables +############### +====================================================================================================================== ============================================================================ +:bro:id:`capture_filters`: :bro:type:`table` :bro:attr:`&redef` Set of BPF capture filters to use for capturing, indexed by a user-definable + ID (which must be unique). +:bro:id:`direct_login_prompts`: :bro:type:`set` :bro:attr:`&redef` TODO. +:bro:id:`discarder_maxlen`: :bro:type:`count` :bro:attr:`&redef` Maximum length of payload passed to discarder functions. +:bro:id:`dns_max_queries`: :bro:type:`count` :bro:attr:`&redef` If a DNS request includes more than this many queries, assume it's non-DNS + traffic and do not process it. +:bro:id:`dns_skip_addl`: :bro:type:`set` :bro:attr:`&redef` For DNS servers in these sets, omit processing the ADDL records they include + in their replies. +:bro:id:`dns_skip_all_addl`: :bro:type:`bool` :bro:attr:`&redef` If true, all DNS ADDL records are skipped. +:bro:id:`dns_skip_all_auth`: :bro:type:`bool` :bro:attr:`&redef` If true, all DNS AUTH records are skipped. +:bro:id:`dns_skip_auth`: :bro:type:`set` :bro:attr:`&redef` For DNS servers in these sets, omit processing the AUTH records they include + in their replies. +:bro:id:`done_with_network`: :bro:type:`bool` +:bro:id:`generate_OS_version_event`: :bro:type:`set` :bro:attr:`&redef` Defines for which subnets we should do passive fingerprinting. +:bro:id:`http_entity_data_delivery_size`: :bro:type:`count` :bro:attr:`&redef` Maximum number of HTTP entity data delivered to events. +:bro:id:`interfaces`: :bro:type:`string` :bro:attr:`&add_func` = :bro:see:`add_interface` :bro:attr:`&redef` Network interfaces to listen on. +:bro:id:`irc_servers`: :bro:type:`set` :bro:attr:`&redef` Deprecated. +:bro:id:`load_sample_freq`: :bro:type:`count` :bro:attr:`&redef` Rate at which to generate :bro:see:`load_sample` events. +:bro:id:`login_failure_msgs`: :bro:type:`set` :bro:attr:`&redef` TODO. +:bro:id:`login_non_failure_msgs`: :bro:type:`set` :bro:attr:`&redef` TODO. +:bro:id:`login_prompts`: :bro:type:`set` :bro:attr:`&redef` TODO. +:bro:id:`login_success_msgs`: :bro:type:`set` :bro:attr:`&redef` TODO. +:bro:id:`login_timeouts`: :bro:type:`set` :bro:attr:`&redef` TODO. +:bro:id:`mime_segment_length`: :bro:type:`count` :bro:attr:`&redef` The length of MIME data segments delivered to handlers of + :bro:see:`mime_segment_data`. +:bro:id:`mime_segment_overlap_length`: :bro:type:`count` :bro:attr:`&redef` The number of bytes of overlap between successive segments passed to + :bro:see:`mime_segment_data`. +:bro:id:`pkt_profile_file`: :bro:type:`file` :bro:attr:`&redef` File where packet profiles are logged. +:bro:id:`profiling_file`: :bro:type:`file` :bro:attr:`&redef` Write profiling info into this file in regular intervals. +:bro:id:`restrict_filters`: :bro:type:`table` :bro:attr:`&redef` Set of BPF filters to restrict capturing, indexed by a user-definable ID + (which must be unique). +:bro:id:`secondary_filters`: :bro:type:`table` :bro:attr:`&redef` Definition of "secondary filters". +:bro:id:`signature_files`: :bro:type:`string` :bro:attr:`&add_func` = :bro:see:`add_signature_file` :bro:attr:`&redef` Signature files to read. +:bro:id:`skip_authentication`: :bro:type:`set` :bro:attr:`&redef` TODO. +:bro:id:`stp_skip_src`: :bro:type:`set` :bro:attr:`&redef` Internal to the stepping stone detector. +====================================================================================================================== ============================================================================ + +Types +##### +========================================================================== ============================================================================================== +:bro:type:`BrokerStats`: :bro:type:`record` Statistics about Broker communication. +:bro:type:`Cluster::Pool`: :bro:type:`record` A pool used for distributing data/work among a set of cluster nodes. +:bro:type:`ConnStats`: :bro:type:`record` +:bro:type:`DHCP::Addrs`: :bro:type:`vector` A list of addresses offered by a DHCP server. +:bro:type:`DHCP::ClientFQDN`: :bro:type:`record` DHCP Client FQDN Option information (Option 81) +:bro:type:`DHCP::ClientID`: :bro:type:`record` DHCP Client Identifier (Option 61) + .. +:bro:type:`DHCP::Msg`: :bro:type:`record` A DHCP message. +:bro:type:`DHCP::Options`: :bro:type:`record` +:bro:type:`DHCP::SubOpt`: :bro:type:`record` DHCP Relay Agent Information Option (Option 82) + .. +:bro:type:`DHCP::SubOpts`: :bro:type:`vector` +:bro:type:`DNSStats`: :bro:type:`record` Statistics related to Bro's active use of DNS. +:bro:type:`EncapsulatingConnVector`: :bro:type:`vector` A type alias for a vector of encapsulating "connections", i.e. +:bro:type:`EventStats`: :bro:type:`record` +:bro:type:`FileAnalysisStats`: :bro:type:`record` Statistics of file analysis. +:bro:type:`GapStats`: :bro:type:`record` Statistics about number of gaps in TCP connections. +:bro:type:`IPAddrAnonymization`: :bro:type:`enum` Deprecated. +:bro:type:`IPAddrAnonymizationClass`: :bro:type:`enum` Deprecated. +:bro:type:`JSON::TimestampFormat`: :bro:type:`enum` +:bro:type:`KRB::AP_Options`: :bro:type:`record` AP Options. +:bro:type:`KRB::Error_Msg`: :bro:type:`record` The data from the ERROR_MSG message. +:bro:type:`KRB::Host_Address`: :bro:type:`record` A Kerberos host address See :rfc:`4120`. +:bro:type:`KRB::Host_Address_Vector`: :bro:type:`vector` +:bro:type:`KRB::KDC_Options`: :bro:type:`record` KDC Options. +:bro:type:`KRB::KDC_Request`: :bro:type:`record` The data from the AS_REQ and TGS_REQ messages. +:bro:type:`KRB::KDC_Response`: :bro:type:`record` The data from the AS_REQ and TGS_REQ messages. +:bro:type:`KRB::SAFE_Msg`: :bro:type:`record` The data from the SAFE message. +:bro:type:`KRB::Ticket`: :bro:type:`record` A Kerberos ticket. +:bro:type:`KRB::Ticket_Vector`: :bro:type:`vector` +:bro:type:`KRB::Type_Value`: :bro:type:`record` Used in a few places in the Kerberos analyzer for elements + that have a type and a string value. +:bro:type:`KRB::Type_Value_Vector`: :bro:type:`vector` +:bro:type:`MOUNT3::dirmntargs_t`: :bro:type:`record` MOUNT *mnt* arguments. +:bro:type:`MOUNT3::info_t`: :bro:type:`record` Record summarizing the general results and status of MOUNT3 + request/reply pairs. +:bro:type:`MOUNT3::mnt_reply_t`: :bro:type:`record` MOUNT lookup reply. +:bro:type:`MatcherStats`: :bro:type:`record` Statistics of all regular expression matchers. +:bro:type:`ModbusCoils`: :bro:type:`vector` A vector of boolean values that indicate the setting + for a range of modbus coils. +:bro:type:`ModbusHeaders`: :bro:type:`record` +:bro:type:`ModbusRegisters`: :bro:type:`vector` A vector of count values that represent 16bit modbus + register values. +:bro:type:`NFS3::delobj_reply_t`: :bro:type:`record` NFS reply for *remove*, *rmdir*. +:bro:type:`NFS3::direntry_t`: :bro:type:`record` NFS *direntry*. +:bro:type:`NFS3::direntry_vec_t`: :bro:type:`vector` Vector of NFS *direntry*. +:bro:type:`NFS3::diropargs_t`: :bro:type:`record` NFS *readdir* arguments. +:bro:type:`NFS3::fattr_t`: :bro:type:`record` NFS file attributes. +:bro:type:`NFS3::fsstat_t`: :bro:type:`record` NFS *fsstat*. +:bro:type:`NFS3::info_t`: :bro:type:`record` Record summarizing the general results and status of NFSv3 + request/reply pairs. +:bro:type:`NFS3::link_reply_t`: :bro:type:`record` NFS *link* reply. +:bro:type:`NFS3::linkargs_t`: :bro:type:`record` NFS *link* arguments. +:bro:type:`NFS3::lookup_reply_t`: :bro:type:`record` NFS lookup reply. +:bro:type:`NFS3::newobj_reply_t`: :bro:type:`record` NFS reply for *create*, *mkdir*, and *symlink*. +:bro:type:`NFS3::read_reply_t`: :bro:type:`record` NFS *read* reply. +:bro:type:`NFS3::readargs_t`: :bro:type:`record` NFS *read* arguments. +:bro:type:`NFS3::readdir_reply_t`: :bro:type:`record` NFS *readdir* reply. +:bro:type:`NFS3::readdirargs_t`: :bro:type:`record` NFS *readdir* arguments. +:bro:type:`NFS3::readlink_reply_t`: :bro:type:`record` NFS *readline* reply. +:bro:type:`NFS3::renameobj_reply_t`: :bro:type:`record` NFS reply for *rename*. +:bro:type:`NFS3::renameopargs_t`: :bro:type:`record` NFS *rename* arguments. +:bro:type:`NFS3::sattr_reply_t`: :bro:type:`record` NFS *sattr* reply. +:bro:type:`NFS3::sattr_t`: :bro:type:`record` NFS file attributes. +:bro:type:`NFS3::sattrargs_t`: :bro:type:`record` NFS *sattr* arguments. +:bro:type:`NFS3::symlinkargs_t`: :bro:type:`record` NFS *symlink* arguments. +:bro:type:`NFS3::symlinkdata_t`: :bro:type:`record` NFS symlinkdata attributes. +:bro:type:`NFS3::wcc_attr_t`: :bro:type:`record` NFS *wcc* attributes. +:bro:type:`NFS3::write_reply_t`: :bro:type:`record` NFS *write* reply. +:bro:type:`NFS3::writeargs_t`: :bro:type:`record` NFS *write* arguments. +:bro:type:`NTLM::AVs`: :bro:type:`record` +:bro:type:`NTLM::Authenticate`: :bro:type:`record` +:bro:type:`NTLM::Challenge`: :bro:type:`record` +:bro:type:`NTLM::Negotiate`: :bro:type:`record` +:bro:type:`NTLM::NegotiateFlags`: :bro:type:`record` +:bro:type:`NTLM::Version`: :bro:type:`record` +:bro:type:`NetStats`: :bro:type:`record` Packet capture statistics. +:bro:type:`OS_version`: :bro:type:`record` Passive fingerprinting match. +:bro:type:`OS_version_inference`: :bro:type:`enum` Quality of passive fingerprinting matches. +:bro:type:`PE::DOSHeader`: :bro:type:`record` +:bro:type:`PE::FileHeader`: :bro:type:`record` +:bro:type:`PE::OptionalHeader`: :bro:type:`record` +:bro:type:`PE::SectionHeader`: :bro:type:`record` Record for Portable Executable (PE) section headers. +:bro:type:`PcapFilterID`: :bro:type:`enum` Enum type identifying dynamic BPF filters. +:bro:type:`ProcStats`: :bro:type:`record` Statistics about Bro's process. +:bro:type:`RADIUS::AttributeList`: :bro:type:`vector` +:bro:type:`RADIUS::Attributes`: :bro:type:`table` +:bro:type:`RADIUS::Message`: :bro:type:`record` +:bro:type:`RDP::ClientCoreData`: :bro:type:`record` +:bro:type:`RDP::EarlyCapabilityFlags`: :bro:type:`record` +:bro:type:`ReassemblerStats`: :bro:type:`record` Holds statistics for all types of reassembly. +:bro:type:`ReporterStats`: :bro:type:`record` Statistics about reporter messages and weirds. +:bro:type:`SMB1::Find_First2_Request_Args`: :bro:type:`record` +:bro:type:`SMB1::Find_First2_Response_Args`: :bro:type:`record` +:bro:type:`SMB1::Header`: :bro:type:`record` An SMB1 header. +:bro:type:`SMB1::NegotiateCapabilities`: :bro:type:`record` +:bro:type:`SMB1::NegotiateRawMode`: :bro:type:`record` +:bro:type:`SMB1::NegotiateResponse`: :bro:type:`record` +:bro:type:`SMB1::NegotiateResponseCore`: :bro:type:`record` +:bro:type:`SMB1::NegotiateResponseLANMAN`: :bro:type:`record` +:bro:type:`SMB1::NegotiateResponseNTLM`: :bro:type:`record` +:bro:type:`SMB1::NegotiateResponseSecurity`: :bro:type:`record` +:bro:type:`SMB1::SessionSetupAndXCapabilities`: :bro:type:`record` +:bro:type:`SMB1::SessionSetupAndXRequest`: :bro:type:`record` +:bro:type:`SMB1::SessionSetupAndXResponse`: :bro:type:`record` +:bro:type:`SMB1::Trans2_Args`: :bro:type:`record` +:bro:type:`SMB1::Trans2_Sec_Args`: :bro:type:`record` +:bro:type:`SMB1::Trans_Sec_Args`: :bro:type:`record` +:bro:type:`SMB2::CloseResponse`: :bro:type:`record` The response to an SMB2 *close* request, which is used by the client to close an instance + of a file that was opened previously. +:bro:type:`SMB2::CreateRequest`: :bro:type:`record` The request sent by the client to request either creation of or access to a file. +:bro:type:`SMB2::CreateResponse`: :bro:type:`record` The response to an SMB2 *create_request* request, which is sent by the client to request + either creation of or access to a file. +:bro:type:`SMB2::FileAttrs`: :bro:type:`record` A series of boolean flags describing basic and extended file attributes for SMB2. +:bro:type:`SMB2::GUID`: :bro:type:`record` An SMB2 globally unique identifier which identifies a file. +:bro:type:`SMB2::Header`: :bro:type:`record` An SMB2 header. +:bro:type:`SMB2::NegotiateResponse`: :bro:type:`record` The response to an SMB2 *negotiate* request, which is used by tghe client to notify the server + what dialects of the SMB2 protocol the client understands. +:bro:type:`SMB2::SessionSetupFlags`: :bro:type:`record` A flags field that indicates additional information about the session that's sent in the + *session_setup* response. +:bro:type:`SMB2::SessionSetupRequest`: :bro:type:`record` The request sent by the client to request a new authenticated session + within a new or existing SMB 2 Protocol transport connection to the server. +:bro:type:`SMB2::SessionSetupResponse`: :bro:type:`record` The response to an SMB2 *session_setup* request, which is sent by the client to request a + new authenticated session within a new or existing SMB 2 Protocol transport connection + to the server. +:bro:type:`SMB2::TreeConnectResponse`: :bro:type:`record` The response to an SMB2 *tree_connect* request, which is sent by the client to request + access to a particular share on the server. +:bro:type:`SMB::MACTimes`: :bro:type:`record` :bro:attr:`&log` MAC times for a file. +:bro:type:`SNMP::Binding`: :bro:type:`record` The ``VarBind`` data structure from either :rfc:`1157` or + :rfc:`3416`, which maps an Object Identifier to a value. +:bro:type:`SNMP::Bindings`: :bro:type:`vector` A ``VarBindList`` data structure from either :rfc:`1157` or :rfc:`3416`. +:bro:type:`SNMP::BulkPDU`: :bro:type:`record` A ``BulkPDU`` data structure from :rfc:`3416`. +:bro:type:`SNMP::Header`: :bro:type:`record` A generic SNMP header data structure that may include data from + any version of SNMP. +:bro:type:`SNMP::HeaderV1`: :bro:type:`record` The top-level message data structure of an SNMPv1 datagram, not + including the PDU data. +:bro:type:`SNMP::HeaderV2`: :bro:type:`record` The top-level message data structure of an SNMPv2 datagram, not + including the PDU data. +:bro:type:`SNMP::HeaderV3`: :bro:type:`record` The top-level message data structure of an SNMPv3 datagram, not + including the PDU data. +:bro:type:`SNMP::ObjectValue`: :bro:type:`record` A generic SNMP object value, that may include any of the + valid ``ObjectSyntax`` values from :rfc:`1155` or :rfc:`3416`. +:bro:type:`SNMP::PDU`: :bro:type:`record` A ``PDU`` data structure from either :rfc:`1157` or :rfc:`3416`. +:bro:type:`SNMP::ScopedPDU_Context`: :bro:type:`record` The ``ScopedPduData`` data structure of an SNMPv3 datagram, not + including the PDU data (i.e. +:bro:type:`SNMP::TrapPDU`: :bro:type:`record` A ``Trap-PDU`` data structure from :rfc:`1157`. +:bro:type:`SOCKS::Address`: :bro:type:`record` :bro:attr:`&log` This record is for a SOCKS client or server to provide either a + name or an address to represent a desired or established connection. +:bro:type:`SSH::Algorithm_Prefs`: :bro:type:`record` The client and server each have some preferences for the algorithms used + in each direction. +:bro:type:`SSH::Capabilities`: :bro:type:`record` This record lists the preferences of an SSH endpoint for + algorithm selection. +:bro:type:`SSL::SignatureAndHashAlgorithm`: :bro:type:`record` +:bro:type:`SYN_packet`: :bro:type:`record` Fields of a SYN packet. +:bro:type:`ThreadStats`: :bro:type:`record` Statistics about threads. +:bro:type:`TimerStats`: :bro:type:`record` Statistics of timers. +:bro:type:`Tunnel::EncapsulatingConn`: :bro:type:`record` :bro:attr:`&log` Records the identity of an encapsulating parent of a tunneled connection. +:bro:type:`Unified2::IDSEvent`: :bro:type:`record` +:bro:type:`Unified2::Packet`: :bro:type:`record` +:bro:type:`X509::BasicConstraints`: :bro:type:`record` :bro:attr:`&log` +:bro:type:`X509::Certificate`: :bro:type:`record` +:bro:type:`X509::Extension`: :bro:type:`record` +:bro:type:`X509::Result`: :bro:type:`record` Result of an X509 certificate chain verification +:bro:type:`X509::SubjectAlternativeName`: :bro:type:`record` +:bro:type:`addr_set`: :bro:type:`set` A set of addresses. +:bro:type:`addr_vec`: :bro:type:`vector` A vector of addresses. +:bro:type:`any_vec`: :bro:type:`vector` A vector of any, used by some builtin functions to store a list of varying + types. +:bro:type:`backdoor_endp_stats`: :bro:type:`record` Deprecated. +:bro:type:`bittorrent_benc_dir`: :bro:type:`table` A table of BitTorrent "benc" values. +:bro:type:`bittorrent_benc_value`: :bro:type:`record` BitTorrent "benc" value. +:bro:type:`bittorrent_peer`: :bro:type:`record` A BitTorrent peer. +:bro:type:`bittorrent_peer_set`: :bro:type:`set` A set of BitTorrent peers. +:bro:type:`bt_tracker_headers`: :bro:type:`table` Header table type used by BitTorrent analyzer. +:bro:type:`call_argument`: :bro:type:`record` Meta-information about a parameter to a function/event. +:bro:type:`call_argument_vector`: :bro:type:`vector` Vector type used to capture parameters of a function/event call. +:bro:type:`conn_id`: :bro:type:`record` :bro:attr:`&log` A connection's identifying 4-tuple of endpoints and ports. +:bro:type:`connection`: :bro:type:`record` A connection. +:bro:type:`count_set`: :bro:type:`set` A set of counts. +:bro:type:`dns_answer`: :bro:type:`record` The general part of a DNS reply. +:bro:type:`dns_dnskey_rr`: :bro:type:`record` A DNSSEC DNSKEY record. +:bro:type:`dns_ds_rr`: :bro:type:`record` A DNSSEC DS record. +:bro:type:`dns_edns_additional`: :bro:type:`record` An additional DNS EDNS record. +:bro:type:`dns_mapping`: :bro:type:`record` +:bro:type:`dns_msg`: :bro:type:`record` A DNS message. +:bro:type:`dns_nsec3_rr`: :bro:type:`record` A DNSSEC NSEC3 record. +:bro:type:`dns_rrsig_rr`: :bro:type:`record` A DNSSEC RRSIG record. +:bro:type:`dns_soa`: :bro:type:`record` A DNS SOA record. +:bro:type:`dns_tsig_additional`: :bro:type:`record` An additional DNS TSIG record. +:bro:type:`endpoint`: :bro:type:`record` Statistics about a :bro:type:`connection` endpoint. +:bro:type:`endpoint_stats`: :bro:type:`record` Statistics about what a TCP endpoint sent. +:bro:type:`entropy_test_result`: :bro:type:`record` Computed entropy values. +:bro:type:`event_peer`: :bro:type:`record` A communication peer. +:bro:type:`fa_file`: :bro:type:`record` :bro:attr:`&redef` A file that Bro is analyzing. +:bro:type:`fa_metadata`: :bro:type:`record` Metadata that's been inferred about a particular file. +:bro:type:`files_tag_set`: :bro:type:`set` A set of file analyzer tags. +:bro:type:`flow_id`: :bro:type:`record` :bro:attr:`&log` The identifying 4-tuple of a uni-directional flow. +:bro:type:`ftp_port`: :bro:type:`record` A parsed host/port combination describing server endpoint for an upcoming + data transfer. +:bro:type:`geo_location`: :bro:type:`record` :bro:attr:`&log` GeoIP location information. +:bro:type:`gtp_access_point_name`: :bro:type:`string` +:bro:type:`gtp_cause`: :bro:type:`count` +:bro:type:`gtp_charging_characteristics`: :bro:type:`count` +:bro:type:`gtp_charging_gateway_addr`: :bro:type:`addr` +:bro:type:`gtp_charging_id`: :bro:type:`count` +:bro:type:`gtp_create_pdp_ctx_request_elements`: :bro:type:`record` +:bro:type:`gtp_create_pdp_ctx_response_elements`: :bro:type:`record` +:bro:type:`gtp_delete_pdp_ctx_request_elements`: :bro:type:`record` +:bro:type:`gtp_delete_pdp_ctx_response_elements`: :bro:type:`record` +:bro:type:`gtp_end_user_addr`: :bro:type:`record` +:bro:type:`gtp_gsn_addr`: :bro:type:`record` +:bro:type:`gtp_imsi`: :bro:type:`count` +:bro:type:`gtp_msisdn`: :bro:type:`string` +:bro:type:`gtp_nsapi`: :bro:type:`count` +:bro:type:`gtp_omc_id`: :bro:type:`string` +:bro:type:`gtp_private_extension`: :bro:type:`record` +:bro:type:`gtp_proto_config_options`: :bro:type:`string` +:bro:type:`gtp_qos_profile`: :bro:type:`record` +:bro:type:`gtp_rai`: :bro:type:`record` +:bro:type:`gtp_recovery`: :bro:type:`count` +:bro:type:`gtp_reordering_required`: :bro:type:`bool` +:bro:type:`gtp_selection_mode`: :bro:type:`count` +:bro:type:`gtp_teardown_ind`: :bro:type:`bool` +:bro:type:`gtp_teid1`: :bro:type:`count` +:bro:type:`gtp_teid_control_plane`: :bro:type:`count` +:bro:type:`gtp_tft`: :bro:type:`string` +:bro:type:`gtp_trace_reference`: :bro:type:`count` +:bro:type:`gtp_trace_type`: :bro:type:`count` +:bro:type:`gtp_trigger_id`: :bro:type:`string` +:bro:type:`gtp_update_pdp_ctx_request_elements`: :bro:type:`record` +:bro:type:`gtp_update_pdp_ctx_response_elements`: :bro:type:`record` +:bro:type:`gtpv1_hdr`: :bro:type:`record` A GTPv1 (GPRS Tunneling Protocol) header. +:bro:type:`http_message_stat`: :bro:type:`record` HTTP message statistics. +:bro:type:`http_stats_rec`: :bro:type:`record` HTTP session statistics. +:bro:type:`icmp6_nd_option`: :bro:type:`record` Options extracted from ICMPv6 neighbor discovery messages as specified + by :rfc:`4861`. +:bro:type:`icmp6_nd_options`: :bro:type:`vector` A type alias for a vector of ICMPv6 neighbor discovery message options. +:bro:type:`icmp6_nd_prefix_info`: :bro:type:`record` Values extracted from a Prefix Information option in an ICMPv6 neighbor + discovery message as specified by :rfc:`4861`. +:bro:type:`icmp_conn`: :bro:type:`record` Specifics about an ICMP conversation. +:bro:type:`icmp_context`: :bro:type:`record` Packet context part of an ICMP message. +:bro:type:`icmp_hdr`: :bro:type:`record` Values extracted from an ICMP header. +:bro:type:`id_table`: :bro:type:`table` Table type used to map script-level identifiers to meta-information + describing them. +:bro:type:`index_vec`: :bro:type:`vector` A vector of counts, used by some builtin functions to store a list of indices. +:bro:type:`interconn_endp_stats`: :bro:type:`record` Deprecated. +:bro:type:`ip4_hdr`: :bro:type:`record` Values extracted from an IPv4 header. +:bro:type:`ip6_ah`: :bro:type:`record` Values extracted from an IPv6 Authentication extension header. +:bro:type:`ip6_dstopts`: :bro:type:`record` Values extracted from an IPv6 Destination options extension header. +:bro:type:`ip6_esp`: :bro:type:`record` Values extracted from an IPv6 ESP extension header. +:bro:type:`ip6_ext_hdr`: :bro:type:`record` A general container for a more specific IPv6 extension header. +:bro:type:`ip6_ext_hdr_chain`: :bro:type:`vector` A type alias for a vector of IPv6 extension headers. +:bro:type:`ip6_fragment`: :bro:type:`record` Values extracted from an IPv6 Fragment extension header. +:bro:type:`ip6_hdr`: :bro:type:`record` Values extracted from an IPv6 header. +:bro:type:`ip6_hopopts`: :bro:type:`record` Values extracted from an IPv6 Hop-by-Hop options extension header. +:bro:type:`ip6_mobility_back`: :bro:type:`record` Values extracted from an IPv6 Mobility Binding Acknowledgement message. +:bro:type:`ip6_mobility_be`: :bro:type:`record` Values extracted from an IPv6 Mobility Binding Error message. +:bro:type:`ip6_mobility_brr`: :bro:type:`record` Values extracted from an IPv6 Mobility Binding Refresh Request message. +:bro:type:`ip6_mobility_bu`: :bro:type:`record` Values extracted from an IPv6 Mobility Binding Update message. +:bro:type:`ip6_mobility_cot`: :bro:type:`record` Values extracted from an IPv6 Mobility Care-of Test message. +:bro:type:`ip6_mobility_coti`: :bro:type:`record` Values extracted from an IPv6 Mobility Care-of Test Init message. +:bro:type:`ip6_mobility_hdr`: :bro:type:`record` Values extracted from an IPv6 Mobility header. +:bro:type:`ip6_mobility_hot`: :bro:type:`record` Values extracted from an IPv6 Mobility Home Test message. +:bro:type:`ip6_mobility_hoti`: :bro:type:`record` Values extracted from an IPv6 Mobility Home Test Init message. +:bro:type:`ip6_mobility_msg`: :bro:type:`record` Values extracted from an IPv6 Mobility header's message data. +:bro:type:`ip6_option`: :bro:type:`record` Values extracted from an IPv6 extension header's (e.g. +:bro:type:`ip6_options`: :bro:type:`vector` A type alias for a vector of IPv6 options. +:bro:type:`ip6_routing`: :bro:type:`record` Values extracted from an IPv6 Routing extension header. +:bro:type:`irc_join_info`: :bro:type:`record` IRC join information. +:bro:type:`irc_join_list`: :bro:type:`set` Set of IRC join information. +:bro:type:`l2_hdr`: :bro:type:`record` Values extracted from the layer 2 header. +:bro:type:`load_sample_info`: :bro:type:`set` +:bro:type:`mime_header_list`: :bro:type:`table` A list of MIME headers. +:bro:type:`mime_header_rec`: :bro:type:`record` A MIME header key/value pair. +:bro:type:`mime_match`: :bro:type:`record` A structure indicating a MIME type and strength of a match against + file magic signatures. +:bro:type:`mime_matches`: :bro:type:`vector` A vector of file magic signature matches, ordered by strength of + the signature, strongest first. +:bro:type:`ntp_msg`: :bro:type:`record` An NTP message. +:bro:type:`packet`: :bro:type:`record` Deprecated. +:bro:type:`pcap_packet`: :bro:type:`record` Policy-level representation of a packet passed on by libpcap. +:bro:type:`peer_id`: :bro:type:`count` A locally unique ID identifying a communication peer. +:bro:type:`pkt_hdr`: :bro:type:`record` A packet header, consisting of an IP header and transport-layer header. +:bro:type:`pkt_profile_modes`: :bro:type:`enum` Output modes for packet profiling information. +:bro:type:`pm_callit_request`: :bro:type:`record` An RPC portmapper *callit* request. +:bro:type:`pm_mapping`: :bro:type:`record` An RPC portmapper mapping. +:bro:type:`pm_mappings`: :bro:type:`table` Table of RPC portmapper mappings. +:bro:type:`pm_port_request`: :bro:type:`record` An RPC portmapper request. +:bro:type:`raw_pkt_hdr`: :bro:type:`record` A raw packet header, consisting of L2 header and everything in + :bro:see:`pkt_hdr`. +:bro:type:`record_field`: :bro:type:`record` Meta-information about a record field. +:bro:type:`record_field_table`: :bro:type:`table` Table type used to map record field declarations to meta-information + describing them. +:bro:type:`rotate_info`: :bro:type:`record` Deprecated. +:bro:type:`script_id`: :bro:type:`record` Meta-information about a script-level identifier. +:bro:type:`signature_and_hashalgorithm_vec`: :bro:type:`vector` A vector of Signature and Hash Algorithms. +:bro:type:`signature_state`: :bro:type:`record` Description of a signature match. +:bro:type:`software`: :bro:type:`record` +:bro:type:`software_version`: :bro:type:`record` +:bro:type:`string_array`: :bro:type:`table` An ordered array of strings. +:bro:type:`string_set`: :bro:type:`set` A set of strings. +:bro:type:`string_vec`: :bro:type:`vector` A vector of strings. +:bro:type:`subnet_vec`: :bro:type:`vector` A vector of subnets. +:bro:type:`sw_align`: :bro:type:`record` Helper type for return value of Smith-Waterman algorithm. +:bro:type:`sw_align_vec`: :bro:type:`vector` Helper type for return value of Smith-Waterman algorithm. +:bro:type:`sw_params`: :bro:type:`record` Parameters for the Smith-Waterman algorithm. +:bro:type:`sw_substring`: :bro:type:`record` Helper type for return value of Smith-Waterman algorithm. +:bro:type:`sw_substring_vec`: :bro:type:`vector` Return type for Smith-Waterman algorithm. +:bro:type:`table_string_of_count`: :bro:type:`table` A table of counts indexed by strings. +:bro:type:`table_string_of_string`: :bro:type:`table` A table of strings indexed by strings. +:bro:type:`tcp_hdr`: :bro:type:`record` Values extracted from a TCP header. +:bro:type:`teredo_auth`: :bro:type:`record` A Teredo origin indication header. +:bro:type:`teredo_hdr`: :bro:type:`record` A Teredo packet header. +:bro:type:`teredo_origin`: :bro:type:`record` A Teredo authentication header. +:bro:type:`transport_proto`: :bro:type:`enum` A connection's transport-layer protocol. +:bro:type:`udp_hdr`: :bro:type:`record` Values extracted from a UDP header. +:bro:type:`var_sizes`: :bro:type:`table` Table type used to map variable names to their memory allocation. +:bro:type:`x509_opaque_vector`: :bro:type:`vector` A vector of x509 opaques. +========================================================================== ============================================================================================== + +Functions +######### +================================================================ ========================================================= +:bro:id:`add_interface`: :bro:type:`function` Internal function. +:bro:id:`add_signature_file`: :bro:type:`function` Internal function. +:bro:id:`discarder_check_icmp`: :bro:type:`function` Function for skipping packets based on their ICMP header. +:bro:id:`discarder_check_ip`: :bro:type:`function` Function for skipping packets based on their IP header. +:bro:id:`discarder_check_tcp`: :bro:type:`function` Function for skipping packets based on their TCP header. +:bro:id:`discarder_check_udp`: :bro:type:`function` Function for skipping packets based on their UDP header. +:bro:id:`log_file_name`: :bro:type:`function` :bro:attr:`&redef` Deprecated. +:bro:id:`max_count`: :bro:type:`function` Returns maximum of two ``count`` values. +:bro:id:`max_double`: :bro:type:`function` Returns maximum of two ``double`` values. +:bro:id:`max_interval`: :bro:type:`function` Returns maximum of two ``interval`` values. +:bro:id:`min_count`: :bro:type:`function` Returns minimum of two ``count`` values. +:bro:id:`min_double`: :bro:type:`function` Returns minimum of two ``double`` values. +:bro:id:`min_interval`: :bro:type:`function` Returns minimum of two ``interval`` values. +:bro:id:`open_log_file`: :bro:type:`function` :bro:attr:`&redef` Deprecated. +================================================================ ========================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Weird::sampling_duration + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 mins`` + + How long a weird of a given type is allowed to keep state/counters in + memory. For "net" weirds an expiration timer starts per weird name when + first initializing its counter. For "flow" weirds an expiration timer + starts once per src/dst IP pair for the first weird of any name. For + "conn" weirds, counters and expiration timers are kept for the duration + of the connection for each named weird and reset when necessary. E.g. + if a "conn" weird by the name of "foo" is seen more than + :bro:see:`Weird::sampling_threshold` times, then an expiration timer + begins for "foo" and upon triggering will reset the counter for "foo" + and unthrottle its rate-limiting until it once again exceeds the + threshold. + +.. bro:id:: Weird::sampling_rate + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``1000`` + + The rate-limiting sampling rate. One out of every of this number of + rate-limited weirds of a given type will be allowed to raise events + for further script-layer handling. Setting the sampling rate to 0 + will disable all output of rate-limited weirds. + +.. bro:id:: Weird::sampling_threshold + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``25`` + + How many weirds of a given type to tolerate before sampling begins. + I.e. this many consecutive weirds of a given type will be allowed to + raise events for script-layer handling before being rate-limited. + +.. bro:id:: Weird::sampling_whitelist + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Prevents rate-limiting sampling of any weirds named in the table. + +.. bro:id:: default_file_bof_buffer_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``4096`` + + Default amount of bytes that file analysis will buffer in order to use + for mime type matching. File analyzers attached at the time of mime type + matching or later, will receive a copy of this buffer. + +.. bro:id:: default_file_timeout_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``2.0 mins`` + + Default amount of time a file can be inactive before the file analysis + gives up and discards any internal state related to the file. + +Redefinable Options +################### +.. bro:id:: DCE_RPC::max_cmd_reassembly + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``20`` + + The maximum number of simultaneous fragmented commands that + the DCE_RPC analyzer will tolerate before the it will generate + a weird and skip further input. + +.. bro:id:: DCE_RPC::max_frag_data + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``30000`` + + The maximum number of fragmented bytes that the DCE_RPC analyzer + will tolerate on a command before the analyzer will generate a weird + and skip further input. + +.. bro:id:: KRB::keytab + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Kerberos keytab file name. Used to decrypt tickets encountered on the wire. + +.. bro:id:: NCP::max_frame_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``65536`` + + The maximum number of bytes to allocate when parsing NCP frames. + +.. bro:id:: NFS3::return_data + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, :bro:see:`nfs_proc_read` and :bro:see:`nfs_proc_write` + events return the file data that has been read/written. + + .. bro:see:: NFS3::return_data_max NFS3::return_data_first_only + +.. bro:id:: NFS3::return_data_first_only + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If :bro:id:`NFS3::return_data` is true, whether to *only* return data + if the read or write offset is 0, i.e., only return data for the + beginning of the file. + +.. bro:id:: NFS3::return_data_max + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``512`` + + If :bro:id:`NFS3::return_data` is true, how much data should be + returned at most. + +.. bro:id:: Pcap::bufsize + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``128`` + + Number of Mbytes to provide as buffer space when capturing from live + interfaces. + +.. bro:id:: Pcap::snaplen + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``9216`` + + Number of bytes per packet to capture from live interfaces. + +.. bro:id:: Reporter::errors_to_stderr + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Tunable for sending reporter error messages to STDERR. The option to + turn it off is presented here in case Bro is being run by some + external harness and shouldn't output anything to the console. + +.. bro:id:: Reporter::info_to_stderr + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Tunable for sending reporter info messages to STDERR. The option to + turn it off is presented here in case Bro is being run by some + external harness and shouldn't output anything to the console. + +.. bro:id:: Reporter::warnings_to_stderr + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Tunable for sending reporter warning messages to STDERR. The option + to turn it off is presented here in case Bro is being run by some + external harness and shouldn't output anything to the console. + +.. bro:id:: SMB::pipe_filenames + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "srvsvc", + "winreg", + "netdfs", + "MsFteWds", + "samr", + "spoolss", + "wkssvc", + "lsarpc" + } + + A set of file names used as named pipes over SMB. This + only comes into play as a heuristic to identify named + pipes when the drive mapping wasn't seen by Bro. + + .. bro:see:: smb_pipe_connect_heuristic + +.. bro:id:: Threading::heartbeat_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 sec`` + + The heartbeat interval used by the threading framework. + Changing this should usually not be necessary and will break + several tests. + +.. bro:id:: Tunnel::delay_gtp_confirmation + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + With this set, the GTP analyzer waits until the most-recent upflow + and downflow packets are a valid GTPv1 encapsulation before + issuing :bro:see:`protocol_confirmation`. If it's false, the + first occurrence of a packet with valid GTPv1 encapsulation causes + confirmation. Since the same inner connection can be carried + differing outer upflow/downflow connections, setting to false + may work better. + +.. bro:id:: Tunnel::delay_teredo_confirmation + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + With this set, the Teredo analyzer waits until it sees both sides + of a connection using a valid Teredo encapsulation before issuing + a :bro:see:`protocol_confirmation`. If it's false, the first + occurrence of a packet with valid Teredo encapsulation causes a + confirmation. + +.. bro:id:: Tunnel::enable_ayiya + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Toggle whether to do IPv{4,6}-in-AYIYA decapsulation. + +.. bro:id:: Tunnel::enable_gre + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Toggle whether to do GRE decapsulation. + +.. bro:id:: Tunnel::enable_gtpv1 + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Toggle whether to do GTPv1 decapsulation. + +.. bro:id:: Tunnel::enable_ip + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Toggle whether to do IPv{4,6}-in-IPv{4,6} decapsulation. + +.. bro:id:: Tunnel::enable_teredo + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Toggle whether to do IPv6-in-Teredo decapsulation. + +.. bro:id:: Tunnel::ip_tunnel_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 day`` + + How often to cleanup internal state for inactive IP tunnels + (includes GRE tunnels). + +.. bro:id:: Tunnel::max_depth + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``2`` + + The maximum depth of a tunnel to decapsulate until giving up. + Setting this to zero will disable all types of tunnel decapsulation. + +.. bro:id:: backdoor_stat_backoff + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + + Deprecated. + +.. bro:id:: backdoor_stat_period + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + + Deprecated. + +.. bro:id:: bits_per_uid + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``96`` + + Number of bits in UIDs that are generated to identify connections and + files. The larger the value, the more confidence in UID uniqueness. + The maximum is currently 128 bits. + +.. bro:id:: check_for_unused_event_handlers + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, warns about unused event handlers at startup. + +.. bro:id:: chunked_io_buffer_soft_cap + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``800000`` + + The number of IO chunks allowed to be buffered between the child + and parent process of remote communication before Bro starts dropping + connections to remote peers in an attempt to catch up. + +.. bro:id:: cmd_line_bpf_filter + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + BPF filter the user has set via the -f command line options. Empty if none. + +.. bro:id:: detect_filtered_trace + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Whether to attempt to automatically detect SYN/FIN/RST-filtered trace + and not report missing segments for such connections. + If this is enabled, then missing data at the end of connections may not + be reported via :bro:see:`content_gap`. + +.. bro:id:: dns_resolver + + :Type: :bro:type:`addr` + :Attributes: :bro:attr:`&redef` + :Default: ``::`` + + The address of the DNS resolver to use. If not changed from the + unspecified address, ``[::]``, the first nameserver from /etc/resolv.conf + gets used (IPv6 is currently only supported if set via this option, not + when parsed from the file). + +.. bro:id:: dns_session_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 secs`` + + Time to wait before timing out a DNS request. + +.. bro:id:: dpd_buffer_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``1024`` + + Size of per-connection buffer used for dynamic protocol detection. For each + connection, Bro buffers this initial amount of payload in memory so that + complete protocol analysis can start even after the initial packets have + already passed through (i.e., when a DPD signature matches only later). + However, once the buffer is full, data is deleted and lost to analyzers that + are activated afterwards. Then only analyzers that can deal with partial + connections will be able to analyze the session. + + .. bro:see:: dpd_reassemble_first_packets dpd_match_only_beginning + dpd_ignore_ports + +.. bro:id:: dpd_ignore_ports + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, don't consider any ports for deciding which protocol analyzer to + use. + + .. bro:see:: dpd_reassemble_first_packets dpd_buffer_size + dpd_match_only_beginning + +.. bro:id:: dpd_match_only_beginning + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, stops signature matching if :bro:see:`dpd_buffer_size` has been + reached. + + .. bro:see:: dpd_reassemble_first_packets dpd_buffer_size + dpd_ignore_ports + + .. note:: Despite the name, this option affects *all* signature matching, not + only signatures used for dynamic protocol detection. + +.. bro:id:: dpd_reassemble_first_packets + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Reassemble the beginning of all TCP connections before doing + signature matching. Enabling this provides more accurate matching at the + expense of CPU cycles. + + .. bro:see:: dpd_buffer_size + dpd_match_only_beginning dpd_ignore_ports + + .. note:: Despite the name, this option affects *all* signature matching, not + only signatures used for dynamic protocol detection. + +.. bro:id:: enable_syslog + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Deprecated. No longer functional. + +.. bro:id:: encap_hdr_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + If positive, indicates the encapsulation header size that should + be skipped. This applies to all packets. + +.. bro:id:: exit_only_after_terminate + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Flag to prevent Bro from exiting automatically when input is exhausted. + Normally Bro terminates when all packet sources have gone dry + and communication isn't enabled. If this flag is set, Bro's main loop will + instead keep idling until :bro:see:`terminate` is explicitly called. + + This is mainly for testing purposes when termination behaviour needs to be + controlled for reproducing results. + +.. bro:id:: expensive_profiling_multiple + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``20`` + + Multiples of :bro:see:`profiling_interval` at which (more expensive) memory + profiling is done (0 disables). + + .. bro:see:: profiling_interval profiling_file segment_profiling + +.. bro:id:: forward_remote_events + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, broadcast events received from one peer to all other peers. + + .. bro:see:: forward_remote_state_changes + + .. note:: This option is only temporary and will disappear once we get a + more sophisticated script-level communication framework. + +.. bro:id:: forward_remote_state_changes + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, broadcast state updates received from one peer to all other peers. + + .. bro:see:: forward_remote_events + + .. note:: This option is only temporary and will disappear once we get a + more sophisticated script-level communication framework. + +.. bro:id:: frag_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 mins`` + + How long to hold onto fragments for possible reassembly. A value of 0.0 + means "forever", which resists evasion, but can lead to state accrual. + +.. bro:id:: global_hash_seed + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Seed for hashes computed internally for probabilistic data structures. Using + the same value here will make the hashes compatible between independent Bro + instances. If left unset, Bro will use a temporary local seed. + +.. bro:id:: icmp_inactivity_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 min`` + + If an ICMP flow is inactive, time it out after this interval. If 0 secs, then + don't time it out. + + .. bro:see:: tcp_inactivity_timeout udp_inactivity_timeout set_inactivity_timeout + +.. bro:id:: ignore_checksums + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, don't verify checksums. Useful for running on altered trace + files, and for saving a few cycles, but at the risk of analyzing invalid + data. Note that the ``-C`` command-line option overrides the setting of this + variable. + +.. bro:id:: ignore_keep_alive_rexmit + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Ignore certain TCP retransmissions for :bro:see:`conn_stats`. Some + connections (e.g., SSH) retransmit the acknowledged last byte to keep the + connection alive. If *ignore_keep_alive_rexmit* is set to true, such + retransmissions will be excluded in the rexmit counter in + :bro:see:`conn_stats`. + + .. bro:see:: conn_stats + +.. bro:id:: interconn_default_pkt_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + + Deprecated. + +.. bro:id:: interconn_max_interarrival + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + + Deprecated. + +.. bro:id:: interconn_max_keystroke_pkt_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + + Deprecated. + +.. bro:id:: interconn_min_interarrival + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + + Deprecated. + +.. bro:id:: interconn_stat_backoff + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + + Deprecated. + +.. bro:id:: interconn_stat_period + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + + Deprecated. + +.. bro:id:: likely_server_ports + + :Type: :bro:type:`set` [:bro:type:`port`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + 443/tcp, + 995/tcp, + 6668/tcp, + 5222/tcp, + 631/tcp, + 8000/tcp, + 161/udp, + 6666/tcp, + 502/tcp, + 1080/tcp, + 443/udp, + 162/udp, + 993/tcp, + 139/tcp, + 5072/udp, + 2811/tcp, + 81/tcp, + 6667/tcp, + 990/tcp, + 563/tcp, + 20000/tcp, + 5223/tcp, + 143/tcp, + 137/udp, + 636/tcp, + 587/tcp, + 25/tcp, + 135/tcp, + 20000/udp, + 53/udp, + 5355/udp, + 585/tcp, + 80/tcp, + 88/udp, + 3389/tcp, + 6669/tcp, + 5269/tcp, + 8080/tcp, + 614/tcp, + 53/tcp, + 67/udp, + 445/tcp, + 8888/tcp, + 2152/udp, + 3544/udp, + 22/tcp, + 514/udp, + 21/tcp, + 989/tcp, + 88/tcp, + 3128/tcp, + 1812/udp, + 992/tcp, + 2123/udp, + 5353/udp, + 5060/udp + } + + Ports which the core considers being likely used by servers. For ports in + this set, it may heuristically decide to flip the direction of the + connection if it misses the initial handshake. + +.. bro:id:: log_encryption_key + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + Deprecated. + +.. bro:id:: log_max_size + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``0.0`` + + Deprecated. + +.. bro:id:: log_rotate_base_time + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"0:00"`` + + Deprecated. + +.. bro:id:: log_rotate_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``0 secs`` + + Deprecated. + +.. bro:id:: max_files_in_cache + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + The maximum number of open files to keep cached at a given time. + If set to zero, this is automatically determined by inspecting + the current/maximum limit on open files for the process. + +.. bro:id:: max_remote_events_processed + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``10`` + + With a similar trade-off, this gives the number of remote events + to process in a batch before interleaving other activity. + +.. bro:id:: max_timer_expires + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``300`` + + The maximum number of timers to expire after processing each new + packet. The value trades off spreading out the timer expiration load + with possibly having to hold state longer. A value of 0 means + "process all expired timers with each new packet". + +.. bro:id:: mmdb_dir + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + The directory containing MaxMind DB (.mmdb) files to use for GeoIP support. + +.. bro:id:: non_analyzed_lifetime + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``0 secs`` + + If a connection belongs to an application that we don't analyze, + time it out after this interval. If 0 secs, then don't time it out (but + :bro:see:`tcp_inactivity_timeout`, :bro:see:`udp_inactivity_timeout`, and + :bro:see:`icmp_inactivity_timeout` still apply). + +.. bro:id:: ntp_session_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 mins`` + + Time to wait before timing out an NTP request. + +.. bro:id:: old_comm_usage_is_ok + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Whether usage of the old communication system is considered an error or + not. The default Bro configuration no longer works with the non-Broker + communication system unless you have manually taken action to initialize + and set up the old comm. system. Deprecation warnings are still emitted + when setting this flag, but they will not result in a fatal error. + +.. bro:id:: packet_filter_default + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Default mode for Bro's user-space dynamic packet filter. If true, packets + that aren't explicitly allowed through, are dropped from any further + processing. + + .. note:: This is not the BPF packet filter but an additional dynamic filter + that Bro optionally applies just before normal processing starts. + + .. bro:see:: install_dst_addr_filter install_dst_net_filter + install_src_addr_filter install_src_net_filter uninstall_dst_addr_filter + uninstall_dst_net_filter uninstall_src_addr_filter uninstall_src_net_filter + +.. bro:id:: partial_connection_ok + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, instantiate connection state when a partial connection + (one missing its initial establishment negotiation) is seen. + +.. bro:id:: passive_fingerprint_file + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"base/misc/p0f.fp"`` + + ``p0f`` fingerprint file to use. Will be searched relative to ``BROPATH``. + +.. bro:id:: peer_description + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro"`` + + Description transmitted to remote communication peers for identification. + +.. bro:id:: pkt_profile_freq + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``0.0`` + + Frequency associated with packet profiling. + + .. bro:see:: pkt_profile_modes pkt_profile_mode pkt_profile_file + +.. bro:id:: pkt_profile_mode + + :Type: :bro:type:`pkt_profile_modes` + :Attributes: :bro:attr:`&redef` + :Default: ``PKT_PROFILE_MODE_NONE`` + + Output mode for packet profiling information. + + .. bro:see:: pkt_profile_modes pkt_profile_freq pkt_profile_file + +.. bro:id:: profiling_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``15.0 secs`` + + Update interval for profiling (0 disables). The easiest way to activate + profiling is loading :doc:`/scripts/policy/misc/profiling.bro`. + + .. bro:see:: profiling_file expensive_profiling_multiple segment_profiling + +.. bro:id:: record_all_packets + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If a trace file is given with ``-w``, dump *all* packets seen by Bro into it. + By default, Bro applies (very few) heuristics to reduce the volume. A side + effect of setting this to true is that we can write the packets out before we + actually process them, which can be helpful for debugging in case the + analysis triggers a crash. + + .. bro:see:: trace_output_file + +.. bro:id:: remote_check_sync_consistency + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Whether for :bro:attr:`&synchronized` state to send the old value as a + consistency check. + +.. bro:id:: remote_trace_sync_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``0 secs`` + + Synchronize trace processing at a regular basis in pseudo-realtime mode. + + .. bro:see:: remote_trace_sync_peers + +.. bro:id:: remote_trace_sync_peers + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + Number of peers across which to synchronize trace processing in + pseudo-realtime mode. + + .. bro:see:: remote_trace_sync_interval + +.. bro:id:: report_gaps_for_partial + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Whether we want :bro:see:`content_gap` for partial + connections. A connection is partial if it is missing a full handshake. Note + that gap reports for partial connections might not be reliable. + + .. bro:see:: content_gap partial_connection + +.. bro:id:: rpc_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``24.0 secs`` + + Time to wait before timing out an RPC request. + +.. bro:id:: segment_profiling + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, then write segment profiling information (very high volume!) + in addition to profiling statistics. + + .. bro:see:: profiling_interval expensive_profiling_multiple profiling_file + +.. bro:id:: sig_max_group_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``50`` + + Maximum size of regular expression groups for signature matching. + +.. bro:id:: skip_http_data + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Skip HTTP data for performance considerations. The skipped + portion will not go through TCP reassembly. + + .. bro:see:: http_entity_data skip_http_entity_data http_entity_data_delivery_size + +.. bro:id:: ssl_ca_certificate + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + The CA certificate file to authorize remote Bros/Broccolis. + + .. bro:see:: ssl_private_key ssl_passphrase + +.. bro:id:: ssl_passphrase + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + The passphrase for our private key. Keeping this undefined + causes Bro to prompt for the passphrase. + + .. bro:see:: ssl_private_key ssl_ca_certificate + +.. bro:id:: ssl_private_key + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + File containing our private key and our certificate. + + .. bro:see:: ssl_ca_certificate ssl_passphrase + +.. bro:id:: state_dir + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``".state"`` + + Specifies a directory for Bro to store its persistent state. All globals can + be declared persistent via the :bro:attr:`&persistent` attribute. + +.. bro:id:: state_write_delay + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 msecs`` + + Length of the delays inserted when storing state incrementally. To avoid + dropping packets when serializing larger volumes of persistent state to + disk, Bro interleaves the operation with continued packet processing. + +.. bro:id:: stp_delta + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + + Internal to the stepping stone detector. + +.. bro:id:: stp_idle_min + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + + Internal to the stepping stone detector. + +.. bro:id:: suppress_local_output + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Deprecated. + +.. bro:id:: table_expire_delay + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 msecs`` + + When expiring table entries, wait this amount of time before checking the + next chunk of entries. + + .. bro:see:: table_expire_interval table_incremental_step + +.. bro:id:: table_expire_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 secs`` + + Check for expired table entries after this amount of time. + + .. bro:see:: table_incremental_step table_expire_delay + +.. bro:id:: table_incremental_step + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``5000`` + + When expiring/serializing table entries, don't work on more than this many + table entries at a time. + + .. bro:see:: table_expire_interval table_expire_delay + +.. bro:id:: tcp_SYN_ack_ok + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, instantiate connection state when a SYN/ACK is seen but not the + initial SYN (even if :bro:see:`partial_connection_ok` is false). + +.. bro:id:: tcp_SYN_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 secs`` + + Check up on the result of an initial SYN after this much time. + +.. bro:id:: tcp_attempt_delay + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 secs`` + + Wait this long upon seeing an initial SYN before timing out the + connection attempt. + +.. bro:id:: tcp_close_delay + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 secs`` + + Upon seeing a normal connection close, flush state after this much time. + +.. bro:id:: tcp_connection_linger + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 secs`` + + When checking a closed connection for further activity, consider it + inactive if there hasn't been any for this long. Complain if the + connection is reused before this much time has elapsed. + +.. bro:id:: tcp_content_deliver_all_orig + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, all TCP originator-side traffic is reported via + :bro:see:`tcp_contents`. + + .. bro:see:: tcp_content_delivery_ports_orig tcp_content_delivery_ports_resp + tcp_content_deliver_all_resp udp_content_delivery_ports_orig + udp_content_delivery_ports_resp udp_content_deliver_all_orig + udp_content_deliver_all_resp tcp_contents + +.. bro:id:: tcp_content_deliver_all_resp + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, all TCP responder-side traffic is reported via + :bro:see:`tcp_contents`. + + .. bro:see:: tcp_content_delivery_ports_orig + tcp_content_delivery_ports_resp + tcp_content_deliver_all_orig udp_content_delivery_ports_orig + udp_content_delivery_ports_resp udp_content_deliver_all_orig + udp_content_deliver_all_resp tcp_contents + +.. bro:id:: tcp_content_delivery_ports_orig + + :Type: :bro:type:`table` [:bro:type:`port`] of :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Defines destination TCP ports for which the contents of the originator stream + should be delivered via :bro:see:`tcp_contents`. + + .. bro:see:: tcp_content_delivery_ports_resp tcp_content_deliver_all_orig + tcp_content_deliver_all_resp udp_content_delivery_ports_orig + udp_content_delivery_ports_resp udp_content_deliver_all_orig + udp_content_deliver_all_resp tcp_contents + +.. bro:id:: tcp_content_delivery_ports_resp + + :Type: :bro:type:`table` [:bro:type:`port`] of :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Defines destination TCP ports for which the contents of the responder stream + should be delivered via :bro:see:`tcp_contents`. + + .. bro:see:: tcp_content_delivery_ports_orig tcp_content_deliver_all_orig + tcp_content_deliver_all_resp udp_content_delivery_ports_orig + udp_content_delivery_ports_resp udp_content_deliver_all_orig + udp_content_deliver_all_resp tcp_contents + +.. bro:id:: tcp_excessive_data_without_further_acks + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``10485760`` + + If we've seen this much data without any of it being acked, we give up + on that connection to avoid memory exhaustion due to buffering all that + stuff. If set to zero, then we don't ever give up. Ideally, Bro would + track the current window on a connection and use it to infer that data + has in fact gone too far, but for now we just make this quite beefy. + + .. bro:see:: tcp_max_initial_window tcp_max_above_hole_without_any_acks + +.. bro:id:: tcp_inactivity_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 mins`` + + If a TCP connection is inactive, time it out after this interval. If 0 secs, + then don't time it out. + + .. bro:see:: udp_inactivity_timeout icmp_inactivity_timeout set_inactivity_timeout + +.. bro:id:: tcp_match_undelivered + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, pass any undelivered to the signature engine before flushing the state. + If a connection state is removed, there may still be some data waiting in the + reassembler. + +.. bro:id:: tcp_max_above_hole_without_any_acks + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``16384`` + + If we're not seeing our peer's ACKs, the maximum volume of data above a + sequence hole that we'll tolerate before assuming that there's been a packet + drop and we should give up on tracking a connection. If set to zero, then we + don't ever give up. + + .. bro:see:: tcp_max_initial_window tcp_excessive_data_without_further_acks + +.. bro:id:: tcp_max_initial_window + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``16384`` + + Maximum amount of data that might plausibly be sent in an initial flight + (prior to receiving any acks). Used to determine whether we must not be + seeing our peer's ACKs. Set to zero to turn off this determination. + + .. bro:see:: tcp_max_above_hole_without_any_acks tcp_excessive_data_without_further_acks + +.. bro:id:: tcp_max_old_segments + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + Number of TCP segments to buffer beyond what's been acknowledged already + to detect retransmission inconsistencies. Zero disables any additonal + buffering. + +.. bro:id:: tcp_partial_close_delay + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``3.0 secs`` + + Generate a :bro:id:`connection_partial_close` event this much time after one + half of a partial connection closes, assuming there has been no subsequent + activity. + +.. bro:id:: tcp_reassembler_ports_orig + + :Type: :bro:type:`set` [:bro:type:`port`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + For services without a handler, these sets define originator-side ports + that still trigger reassembly. + + .. bro:see:: tcp_reassembler_ports_resp + +.. bro:id:: tcp_reassembler_ports_resp + + :Type: :bro:type:`set` [:bro:type:`port`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + For services without a handler, these sets define responder-side ports + that still trigger reassembly. + + .. bro:see:: tcp_reassembler_ports_orig + +.. bro:id:: tcp_reset_delay + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 secs`` + + Upon seeing a RST, flush state after this much time. + +.. bro:id:: tcp_session_timer + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``6.0 secs`` + + After a connection has closed, wait this long for further activity + before checking whether to time out its state. + +.. bro:id:: tcp_storm_interarrival_thresh + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 sec`` + + FINs/RSTs must come with this much time or less between them to be + considered a "storm". + + .. bro:see:: tcp_storm_thresh + +.. bro:id:: tcp_storm_thresh + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``1000`` + + Number of FINs/RSTs in a row that constitute a "storm". Storms are reported + as ``weird`` via the notice framework, and they must also come within + intervals of at most :bro:see:`tcp_storm_interarrival_thresh`. + + .. bro:see:: tcp_storm_interarrival_thresh + +.. bro:id:: time_machine_profiling + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, output profiling for Time-Machine queries. + +.. bro:id:: timer_mgr_inactivity_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 min`` + + Per-incident timer managers are drained after this amount of inactivity. + +.. bro:id:: truncate_http_URI + + :Type: :bro:type:`int` + :Attributes: :bro:attr:`&redef` + :Default: ``-1`` + + Maximum length of HTTP URIs passed to events. Longer ones will be truncated + to prevent over-long URIs (usually sent by worms) from slowing down event + processing. A value of -1 means "do not truncate". + + .. bro:see:: http_request + +.. bro:id:: udp_content_deliver_all_orig + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, all UDP originator-side traffic is reported via + :bro:see:`udp_contents`. + + .. bro:see:: tcp_content_delivery_ports_orig + tcp_content_delivery_ports_resp tcp_content_deliver_all_resp + tcp_content_delivery_ports_orig udp_content_delivery_ports_orig + udp_content_delivery_ports_resp udp_content_deliver_all_resp + udp_contents + +.. bro:id:: udp_content_deliver_all_resp + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, all UDP responder-side traffic is reported via + :bro:see:`udp_contents`. + + .. bro:see:: tcp_content_delivery_ports_orig + tcp_content_delivery_ports_resp tcp_content_deliver_all_resp + tcp_content_delivery_ports_orig udp_content_delivery_ports_orig + udp_content_delivery_ports_resp udp_content_deliver_all_orig + udp_contents + +.. bro:id:: udp_content_delivery_ports_orig + + :Type: :bro:type:`table` [:bro:type:`port`] of :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Defines UDP destination ports for which the contents of the originator stream + should be delivered via :bro:see:`udp_contents`. + + .. bro:see:: tcp_content_delivery_ports_orig + tcp_content_delivery_ports_resp + tcp_content_deliver_all_orig tcp_content_deliver_all_resp + udp_content_delivery_ports_resp udp_content_deliver_all_orig + udp_content_deliver_all_resp udp_contents + +.. bro:id:: udp_content_delivery_ports_resp + + :Type: :bro:type:`table` [:bro:type:`port`] of :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Defines UDP destination ports for which the contents of the responder stream + should be delivered via :bro:see:`udp_contents`. + + .. bro:see:: tcp_content_delivery_ports_orig + tcp_content_delivery_ports_resp tcp_content_deliver_all_orig + tcp_content_deliver_all_resp udp_content_delivery_ports_orig + udp_content_deliver_all_orig udp_content_deliver_all_resp udp_contents + +.. bro:id:: udp_inactivity_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 min`` + + If a UDP flow is inactive, time it out after this interval. If 0 secs, then + don't time it out. + + .. bro:see:: tcp_inactivity_timeout icmp_inactivity_timeout set_inactivity_timeout + +.. bro:id:: use_conn_size_analyzer + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Whether to use the ``ConnSize`` analyzer to count the number of packets and + IP-level bytes transferred by each endpoint. If true, these values are + returned in the connection's :bro:see:`endpoint` record value. + +.. bro:id:: watchdog_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 secs`` + + Bro's watchdog interval. + +Constants +######### +.. bro:id:: CONTENTS_BOTH + + :Type: :bro:type:`count` + :Default: ``3`` + + Record both originator and responder contents. + +.. bro:id:: CONTENTS_NONE + + :Type: :bro:type:`count` + :Default: ``0`` + + Turn off recording of contents. + +.. bro:id:: CONTENTS_ORIG + + :Type: :bro:type:`count` + :Default: ``1`` + + Record originator contents. + +.. bro:id:: CONTENTS_RESP + + :Type: :bro:type:`count` + :Default: ``2`` + + Record responder contents. + +.. bro:id:: DNS_ADDL + + :Type: :bro:type:`count` + :Default: ``3`` + + An additional record. + +.. bro:id:: DNS_ANS + + :Type: :bro:type:`count` + :Default: ``1`` + + An answer record. + +.. bro:id:: DNS_AUTH + + :Type: :bro:type:`count` + :Default: ``2`` + + An authoritative record. + +.. bro:id:: DNS_QUERY + + :Type: :bro:type:`count` + :Default: ``0`` + + A query. This shouldn't occur, just for completeness. + +.. bro:id:: ENDIAN_BIG + + :Type: :bro:type:`count` + :Default: ``2`` + + Big endian. + +.. bro:id:: ENDIAN_CONFUSED + + :Type: :bro:type:`count` + :Default: ``3`` + + Tried to determine endian, but failed. + +.. bro:id:: ENDIAN_LITTLE + + :Type: :bro:type:`count` + :Default: ``1`` + + Little endian. + +.. bro:id:: ENDIAN_UNKNOWN + + :Type: :bro:type:`count` + :Default: ``0`` + + Endian not yet determined. + +.. bro:id:: ICMP_UNREACH_ADMIN_PROHIB + + :Type: :bro:type:`count` + :Default: ``13`` + + Administratively prohibited. + +.. bro:id:: ICMP_UNREACH_HOST + + :Type: :bro:type:`count` + :Default: ``1`` + + Host unreachable. + +.. bro:id:: ICMP_UNREACH_NEEDFRAG + + :Type: :bro:type:`count` + :Default: ``4`` + + Fragment needed. + +.. bro:id:: ICMP_UNREACH_NET + + :Type: :bro:type:`count` + :Default: ``0`` + + Network unreachable. + +.. bro:id:: ICMP_UNREACH_PORT + + :Type: :bro:type:`count` + :Default: ``3`` + + Port unreachable. + +.. bro:id:: ICMP_UNREACH_PROTOCOL + + :Type: :bro:type:`count` + :Default: ``2`` + + Protocol unreachable. + +.. bro:id:: IPPROTO_AH + + :Type: :bro:type:`count` + :Default: ``51`` + + IPv6 authentication header. + +.. bro:id:: IPPROTO_DSTOPTS + + :Type: :bro:type:`count` + :Default: ``60`` + + IPv6 destination options header. + +.. bro:id:: IPPROTO_ESP + + :Type: :bro:type:`count` + :Default: ``50`` + + IPv6 encapsulating security payload header. + +.. bro:id:: IPPROTO_FRAGMENT + + :Type: :bro:type:`count` + :Default: ``44`` + + IPv6 fragment header. + +.. bro:id:: IPPROTO_HOPOPTS + + :Type: :bro:type:`count` + :Default: ``0`` + + IPv6 hop-by-hop-options header. + +.. bro:id:: IPPROTO_ICMP + + :Type: :bro:type:`count` + :Default: ``1`` + + Control message protocol. + +.. bro:id:: IPPROTO_ICMPV6 + + :Type: :bro:type:`count` + :Default: ``58`` + + ICMP for IPv6. + +.. bro:id:: IPPROTO_IGMP + + :Type: :bro:type:`count` + :Default: ``2`` + + Group management protocol. + +.. bro:id:: IPPROTO_IP + + :Type: :bro:type:`count` + :Default: ``0`` + + Dummy for IP. + +.. bro:id:: IPPROTO_IPIP + + :Type: :bro:type:`count` + :Default: ``4`` + + IP encapsulation in IP. + +.. bro:id:: IPPROTO_IPV6 + + :Type: :bro:type:`count` + :Default: ``41`` + + IPv6 header. + +.. bro:id:: IPPROTO_MOBILITY + + :Type: :bro:type:`count` + :Default: ``135`` + + IPv6 mobility header. + +.. bro:id:: IPPROTO_NONE + + :Type: :bro:type:`count` + :Default: ``59`` + + IPv6 no next header. + +.. bro:id:: IPPROTO_RAW + + :Type: :bro:type:`count` + :Default: ``255`` + + Raw IP packet. + +.. bro:id:: IPPROTO_ROUTING + + :Type: :bro:type:`count` + :Default: ``43`` + + IPv6 routing header. + +.. bro:id:: IPPROTO_TCP + + :Type: :bro:type:`count` + :Default: ``6`` + + TCP. + +.. bro:id:: IPPROTO_UDP + + :Type: :bro:type:`count` + :Default: ``17`` + + User datagram protocol. + +.. bro:id:: LOGIN_STATE_AUTHENTICATE + + :Type: :bro:type:`count` + :Default: ``0`` + + +.. bro:id:: LOGIN_STATE_CONFUSED + + :Type: :bro:type:`count` + :Default: ``3`` + + +.. bro:id:: LOGIN_STATE_LOGGED_IN + + :Type: :bro:type:`count` + :Default: ``1`` + + +.. bro:id:: LOGIN_STATE_SKIP + + :Type: :bro:type:`count` + :Default: ``2`` + + +.. bro:id:: PEER_ID_NONE + + :Type: :bro:type:`count` + :Default: ``0`` + + Place-holder constant indicating "no peer". + +.. bro:id:: REMOTE_LOG_ERROR + + :Type: :bro:type:`count` + :Default: ``2`` + + Deprecated. + +.. bro:id:: REMOTE_LOG_INFO + + :Type: :bro:type:`count` + :Default: ``1`` + + Deprecated. + +.. bro:id:: REMOTE_SRC_CHILD + + :Type: :bro:type:`count` + :Default: ``1`` + + Message from the child process. + +.. bro:id:: REMOTE_SRC_PARENT + + :Type: :bro:type:`count` + :Default: ``2`` + + Message from the parent process. + +.. bro:id:: REMOTE_SRC_SCRIPT + + :Type: :bro:type:`count` + :Default: ``3`` + + Message from a policy script. + +.. bro:id:: RPC_status + + :Type: :bro:type:`table` [:bro:type:`rpc_status`] of :bro:type:`string` + :Default: + + :: + + { + [RPC_PROG_MISMATCH] = "mismatch", + [RPC_UNKNOWN_ERROR] = "unknown", + [RPC_TIMEOUT] = "timeout", + [RPC_GARBAGE_ARGS] = "garbage args", + [RPC_PROG_UNAVAIL] = "prog unavail", + [RPC_AUTH_ERROR] = "auth error", + [RPC_SYSTEM_ERR] = "system err", + [RPC_SUCCESS] = "ok", + [RPC_PROC_UNAVAIL] = "proc unavail" + } + + Mapping of numerical RPC status codes to readable messages. + + .. bro:see:: pm_attempt_callit pm_attempt_dump pm_attempt_getport + pm_attempt_null pm_attempt_set pm_attempt_unset rpc_dialogue rpc_reply + +.. bro:id:: SNMP::OBJ_COUNTER32_TAG + + :Type: :bro:type:`count` + :Default: ``65`` + + Unsigned 32-bit integer. + +.. bro:id:: SNMP::OBJ_COUNTER64_TAG + + :Type: :bro:type:`count` + :Default: ``70`` + + Unsigned 64-bit integer. + +.. bro:id:: SNMP::OBJ_ENDOFMIBVIEW_TAG + + :Type: :bro:type:`count` + :Default: ``130`` + + A NULL value. + +.. bro:id:: SNMP::OBJ_INTEGER_TAG + + :Type: :bro:type:`count` + :Default: ``2`` + + Signed 64-bit integer. + +.. bro:id:: SNMP::OBJ_IPADDRESS_TAG + + :Type: :bro:type:`count` + :Default: ``64`` + + An IP address. + +.. bro:id:: SNMP::OBJ_NOSUCHINSTANCE_TAG + + :Type: :bro:type:`count` + :Default: ``129`` + + A NULL value. + +.. bro:id:: SNMP::OBJ_NOSUCHOBJECT_TAG + + :Type: :bro:type:`count` + :Default: ``128`` + + A NULL value. + +.. bro:id:: SNMP::OBJ_OCTETSTRING_TAG + + :Type: :bro:type:`count` + :Default: ``4`` + + An octet string. + +.. bro:id:: SNMP::OBJ_OID_TAG + + :Type: :bro:type:`count` + :Default: ``6`` + + An Object Identifier. + +.. bro:id:: SNMP::OBJ_OPAQUE_TAG + + :Type: :bro:type:`count` + :Default: ``68`` + + An octet string. + +.. bro:id:: SNMP::OBJ_TIMETICKS_TAG + + :Type: :bro:type:`count` + :Default: ``67`` + + Unsigned 32-bit integer. + +.. bro:id:: SNMP::OBJ_UNSIGNED32_TAG + + :Type: :bro:type:`count` + :Default: ``66`` + + Unsigned 32-bit integer. + +.. bro:id:: SNMP::OBJ_UNSPECIFIED_TAG + + :Type: :bro:type:`count` + :Default: ``5`` + + A NULL value. + +.. bro:id:: TCP_CLOSED + + :Type: :bro:type:`count` + :Default: ``5`` + + Endpoint has closed connection. + +.. bro:id:: TCP_ESTABLISHED + + :Type: :bro:type:`count` + :Default: ``4`` + + Endpoint has finished initial handshake regularly. + +.. bro:id:: TCP_INACTIVE + + :Type: :bro:type:`count` + :Default: ``0`` + + Endpoint is still inactive. + +.. bro:id:: TCP_PARTIAL + + :Type: :bro:type:`count` + :Default: ``3`` + + Endpoint has sent data but no initial SYN. + +.. bro:id:: TCP_RESET + + :Type: :bro:type:`count` + :Default: ``6`` + + Endpoint has sent RST. + +.. bro:id:: TCP_SYN_ACK_SENT + + :Type: :bro:type:`count` + :Default: ``2`` + + Endpoint has sent SYN/ACK. + +.. bro:id:: TCP_SYN_SENT + + :Type: :bro:type:`count` + :Default: ``1`` + + Endpoint has sent SYN. + +.. bro:id:: TH_ACK + + :Type: :bro:type:`count` + :Default: ``16`` + + ACK. + +.. bro:id:: TH_FIN + + :Type: :bro:type:`count` + :Default: ``1`` + + FIN. + +.. bro:id:: TH_FLAGS + + :Type: :bro:type:`count` + :Default: ``63`` + + Mask combining all flags. + +.. bro:id:: TH_PUSH + + :Type: :bro:type:`count` + :Default: ``8`` + + PUSH. + +.. bro:id:: TH_RST + + :Type: :bro:type:`count` + :Default: ``4`` + + RST. + +.. bro:id:: TH_SYN + + :Type: :bro:type:`count` + :Default: ``2`` + + SYN. + +.. bro:id:: TH_URG + + :Type: :bro:type:`count` + :Default: ``32`` + + URG. + +.. bro:id:: UDP_ACTIVE + + :Type: :bro:type:`count` + :Default: ``1`` + + Endpoint has sent something. + +.. bro:id:: UDP_INACTIVE + + :Type: :bro:type:`count` + :Default: ``0`` + + Endpoint is still inactive. + +.. bro:id:: trace_output_file + + :Type: :bro:type:`string` + :Default: ``""`` + + Holds the filename of the trace file given with ``-w`` (empty if none). + + .. bro:see:: record_all_packets + +State Variables +############### +.. bro:id:: capture_filters + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Set of BPF capture filters to use for capturing, indexed by a user-definable + ID (which must be unique). If Bro is *not* configured with + :bro:id:`PacketFilter::enable_auto_protocol_capture_filters`, + all packets matching at least one of the filters in this table (and all in + :bro:id:`restrict_filters`) will be analyzed. + + .. bro:see:: PacketFilter PacketFilter::enable_auto_protocol_capture_filters + PacketFilter::unrestricted_filter restrict_filters + +.. bro:id:: direct_login_prompts + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + TODO. + +.. bro:id:: discarder_maxlen + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``128`` + + Maximum length of payload passed to discarder functions. + + .. bro:see:: discarder_check_tcp discarder_check_udp discarder_check_icmp + discarder_check_ip + +.. bro:id:: dns_max_queries + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``25`` + + If a DNS request includes more than this many queries, assume it's non-DNS + traffic and do not process it. Set to 0 to turn off this functionality. + +.. bro:id:: dns_skip_addl + + :Type: :bro:type:`set` [:bro:type:`addr`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + For DNS servers in these sets, omit processing the ADDL records they include + in their replies. + + .. bro:see:: dns_skip_all_addl dns_skip_auth + +.. bro:id:: dns_skip_all_addl + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, all DNS ADDL records are skipped. + + .. bro:see:: dns_skip_all_auth dns_skip_addl + +.. bro:id:: dns_skip_all_auth + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, all DNS AUTH records are skipped. + + .. bro:see:: dns_skip_all_addl dns_skip_auth + +.. bro:id:: dns_skip_auth + + :Type: :bro:type:`set` [:bro:type:`addr`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + For DNS servers in these sets, omit processing the AUTH records they include + in their replies. + + .. bro:see:: dns_skip_all_auth dns_skip_addl + +.. bro:id:: done_with_network + + :Type: :bro:type:`bool` + :Default: ``F`` + + +.. bro:id:: generate_OS_version_event + + :Type: :bro:type:`set` [:bro:type:`subnet`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Defines for which subnets we should do passive fingerprinting. + + .. bro:see:: OS_version_found + +.. bro:id:: http_entity_data_delivery_size + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``1500`` + + Maximum number of HTTP entity data delivered to events. + + .. bro:see:: http_entity_data skip_http_entity_data skip_http_data + +.. bro:id:: interfaces + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&add_func` = :bro:see:`add_interface` :bro:attr:`&redef` + :Default: ``""`` + + Network interfaces to listen on. Use ``redef interfaces += "eth0"`` to + extend. + +.. bro:id:: irc_servers + + :Type: :bro:type:`set` [:bro:type:`addr`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Deprecated. + + .. todo:: Remove. It's still declared internally but doesn't seem used anywhere + else. + +.. bro:id:: load_sample_freq + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``20`` + + Rate at which to generate :bro:see:`load_sample` events. As all + events, the event is only generated if you've also defined a + :bro:see:`load_sample` handler. Units are inverse number of packets; e.g., + a value of 20 means "roughly one in every 20 packets". + + .. bro:see:: load_sample + +.. bro:id:: login_failure_msgs + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + TODO. + +.. bro:id:: login_non_failure_msgs + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + TODO. + +.. bro:id:: login_prompts + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + TODO. + +.. bro:id:: login_success_msgs + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + TODO. + +.. bro:id:: login_timeouts + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + TODO. + +.. bro:id:: mime_segment_length + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``1024`` + + The length of MIME data segments delivered to handlers of + :bro:see:`mime_segment_data`. + + .. bro:see:: mime_segment_data mime_segment_overlap_length + +.. bro:id:: mime_segment_overlap_length + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + The number of bytes of overlap between successive segments passed to + :bro:see:`mime_segment_data`. + +.. bro:id:: pkt_profile_file + + :Type: :bro:type:`file` + :Attributes: :bro:attr:`&redef` + + File where packet profiles are logged. + + .. bro:see:: pkt_profile_modes pkt_profile_freq pkt_profile_mode + +.. bro:id:: profiling_file + + :Type: :bro:type:`file` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + file "prof.log" of string + + Write profiling info into this file in regular intervals. The easiest way to + activate profiling is loading :doc:`/scripts/policy/misc/profiling.bro`. + + .. bro:see:: profiling_interval expensive_profiling_multiple segment_profiling + +.. bro:id:: restrict_filters + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Set of BPF filters to restrict capturing, indexed by a user-definable ID + (which must be unique). + + .. bro:see:: PacketFilter PacketFilter::enable_auto_protocol_capture_filters + PacketFilter::unrestricted_filter capture_filters + +.. bro:id:: secondary_filters + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`event` (filter: :bro:type:`string`, pkt: :bro:type:`pkt_hdr`) + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Definition of "secondary filters". A secondary filter is a BPF filter given + as index in this table. For each such filter, the corresponding event is + raised for all matching packets. + +.. bro:id:: signature_files + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&add_func` = :bro:see:`add_signature_file` :bro:attr:`&redef` + :Default: ``""`` + + Signature files to read. Use ``redef signature_files += "foo.sig"`` to + extend. Signature files added this way will be searched relative to + ``BROPATH``. Using the ``@load-sigs`` directive instead is preferred + since that can search paths relative to the current script. + +.. bro:id:: skip_authentication + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + TODO. + +.. bro:id:: stp_skip_src + + :Type: :bro:type:`set` [:bro:type:`addr`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Internal to the stepping stone detector. + +Types +##### +.. bro:type:: BrokerStats + + :Type: :bro:type:`record` + + num_peers: :bro:type:`count` + + num_stores: :bro:type:`count` + Number of active data stores. + + num_pending_queries: :bro:type:`count` + Number of pending data store queries. + + num_events_incoming: :bro:type:`count` + Number of total log messages received. + + num_events_outgoing: :bro:type:`count` + Number of total log messages sent. + + num_logs_incoming: :bro:type:`count` + Number of total log records received. + + num_logs_outgoing: :bro:type:`count` + Number of total log records sent. + + num_ids_incoming: :bro:type:`count` + Number of total identifiers received. + + num_ids_outgoing: :bro:type:`count` + Number of total identifiers sent. + + Statistics about Broker communication. + + .. bro:see:: get_broker_stats + +.. bro:type:: Cluster::Pool + + :Type: :bro:type:`record` + + spec: :bro:type:`Cluster::PoolSpec` :bro:attr:`&default` = ``[topic=, node_type=Cluster::PROXY, max_nodes=, exclusive=F]`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/cluster/pools.bro` is loaded) + + The specification of the pool that was used when registering it. + + nodes: :bro:type:`Cluster::PoolNodeTable` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/cluster/pools.bro` is loaded) + + Nodes in the pool, indexed by their name (e.g. "manager"). + + node_list: :bro:type:`vector` of :bro:type:`Cluster::PoolNode` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/cluster/pools.bro` is loaded) + + A list of nodes in the pool in a deterministic order. + + hrw_pool: :bro:type:`HashHRW::Pool` :bro:attr:`&default` = ``[sites={ }]`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/cluster/pools.bro` is loaded) + + The Rendezvous hashing structure. + + rr_key_seq: :bro:type:`Cluster::RoundRobinTable` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/cluster/pools.bro` is loaded) + + Round-Robin table indexed by arbitrary key and storing the next + index of *node_list* that will be eligible to receive work (if it's + alive at the time of next request). + + alive_count: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/cluster/pools.bro` is loaded) + + Number of pool nodes that are currently alive. + + A pool used for distributing data/work among a set of cluster nodes. + +.. bro:type:: ConnStats + + :Type: :bro:type:`record` + + total_conns: :bro:type:`count` + + + current_conns: :bro:type:`count` + + + current_conns_extern: :bro:type:`count` + + + sess_current_conns: :bro:type:`count` + + + num_packets: :bro:type:`count` + + num_fragments: :bro:type:`count` + + max_fragments: :bro:type:`count` + + num_tcp_conns: :bro:type:`count` + Current number of TCP connections in memory. + + max_tcp_conns: :bro:type:`count` + Maximum number of concurrent TCP connections so far. + + cumulative_tcp_conns: :bro:type:`count` + Total number of TCP connections so far. + + num_udp_conns: :bro:type:`count` + Current number of UDP flows in memory. + + max_udp_conns: :bro:type:`count` + Maximum number of concurrent UDP flows so far. + + cumulative_udp_conns: :bro:type:`count` + Total number of UDP flows so far. + + num_icmp_conns: :bro:type:`count` + Current number of ICMP flows in memory. + + max_icmp_conns: :bro:type:`count` + Maximum number of concurrent ICMP flows so far. + + cumulative_icmp_conns: :bro:type:`count` + Total number of ICMP flows so far. + + killed_by_inactivity: :bro:type:`count` + + +.. bro:type:: DHCP::Addrs + + :Type: :bro:type:`vector` of :bro:type:`addr` + + A list of addresses offered by a DHCP server. Could be routers, + DNS servers, or other. + + .. bro:see:: dhcp_message + +.. bro:type:: DHCP::ClientFQDN + + :Type: :bro:type:`record` + + flags: :bro:type:`count` + An unparsed bitfield of flags (refer to RFC 4702). + + rcode1: :bro:type:`count` + This field is deprecated in the standard. + + rcode2: :bro:type:`count` + This field is deprecated in the standard. + + domain_name: :bro:type:`string` + The Domain Name part of the option carries all or part of the FQDN + of a DHCP client. + + DHCP Client FQDN Option information (Option 81) + +.. bro:type:: DHCP::ClientID + + :Type: :bro:type:`record` + + hwtype: :bro:type:`count` + + hwaddr: :bro:type:`string` + + DHCP Client Identifier (Option 61) + .. bro:see:: dhcp_message + +.. bro:type:: DHCP::Msg + + :Type: :bro:type:`record` + + op: :bro:type:`count` + Message OP code. 1 = BOOTREQUEST, 2 = BOOTREPLY + + m_type: :bro:type:`count` + The type of DHCP message. + + xid: :bro:type:`count` + Transaction ID of a DHCP session. + + secs: :bro:type:`interval` + Number of seconds since client began address acquisition + or renewal process + + flags: :bro:type:`count` + + ciaddr: :bro:type:`addr` + Original IP address of the client. + + yiaddr: :bro:type:`addr` + IP address assigned to the client. + + siaddr: :bro:type:`addr` + IP address of the server. + + giaddr: :bro:type:`addr` + IP address of the relaying gateway. + + chaddr: :bro:type:`string` + Client hardware address. + + sname: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + Server host name. + + file_n: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + Boot file name. + + A DHCP message. + .. bro:see:: dhcp_message + +.. bro:type:: DHCP::Options + + :Type: :bro:type:`record` + + options: :bro:type:`index_vec` :bro:attr:`&optional` + The ordered list of all DHCP option numbers. + + subnet_mask: :bro:type:`addr` :bro:attr:`&optional` + Subnet Mask Value (option 1) + + routers: :bro:type:`DHCP::Addrs` :bro:attr:`&optional` + Router addresses (option 3) + + dns_servers: :bro:type:`DHCP::Addrs` :bro:attr:`&optional` + DNS Server addresses (option 6) + + host_name: :bro:type:`string` :bro:attr:`&optional` + The Hostname of the client (option 12) + + domain_name: :bro:type:`string` :bro:attr:`&optional` + The DNS domain name of the client (option 15) + + forwarding: :bro:type:`bool` :bro:attr:`&optional` + Enable/Disable IP Forwarding (option 19) + + broadcast: :bro:type:`addr` :bro:attr:`&optional` + Broadcast Address (option 28) + + vendor: :bro:type:`string` :bro:attr:`&optional` + Vendor specific data. This can frequently + be unparsed binary data. (option 43) + + nbns: :bro:type:`DHCP::Addrs` :bro:attr:`&optional` + NETBIOS name server list (option 44) + + addr_request: :bro:type:`addr` :bro:attr:`&optional` + Address requested by the client (option 50) + + lease: :bro:type:`interval` :bro:attr:`&optional` + Lease time offered by the server. (option 51) + + serv_addr: :bro:type:`addr` :bro:attr:`&optional` + Server address to allow clients to distinguish + between lease offers. (option 54) + + param_list: :bro:type:`index_vec` :bro:attr:`&optional` + DHCP Parameter Request list (option 55) + + message: :bro:type:`string` :bro:attr:`&optional` + Textual error message (option 56) + + max_msg_size: :bro:type:`count` :bro:attr:`&optional` + Maximum Message Size (option 57) + + renewal_time: :bro:type:`interval` :bro:attr:`&optional` + This option specifies the time interval from address + assignment until the client transitions to the + RENEWING state. (option 58) + + rebinding_time: :bro:type:`interval` :bro:attr:`&optional` + This option specifies the time interval from address + assignment until the client transitions to the + REBINDING state. (option 59) + + vendor_class: :bro:type:`string` :bro:attr:`&optional` + This option is used by DHCP clients to optionally + identify the vendor type and configuration of a DHCP + client. (option 60) + + client_id: :bro:type:`DHCP::ClientID` :bro:attr:`&optional` + DHCP Client Identifier (Option 61) + + user_class: :bro:type:`string` :bro:attr:`&optional` + User Class opaque value (Option 77) + + client_fqdn: :bro:type:`DHCP::ClientFQDN` :bro:attr:`&optional` + DHCP Client FQDN (Option 81) + + sub_opt: :bro:type:`DHCP::SubOpts` :bro:attr:`&optional` + DHCP Relay Agent Information Option (Option 82) + + auto_config: :bro:type:`bool` :bro:attr:`&optional` + Auto Config option to let host know if it's allowed to + auto assign an IP address. (Option 116) + + auto_proxy_config: :bro:type:`string` :bro:attr:`&optional` + URL to find a proxy.pac for auto proxy config (Option 252) + + +.. bro:type:: DHCP::SubOpt + + :Type: :bro:type:`record` + + code: :bro:type:`count` + + value: :bro:type:`string` + + DHCP Relay Agent Information Option (Option 82) + .. bro:see:: dhcp_message + +.. bro:type:: DHCP::SubOpts + + :Type: :bro:type:`vector` of :bro:type:`DHCP::SubOpt` + + +.. bro:type:: DNSStats + + :Type: :bro:type:`record` + + requests: :bro:type:`count` + Number of DNS requests made + + successful: :bro:type:`count` + Number of successful DNS replies. + + failed: :bro:type:`count` + Number of DNS reply failures. + + pending: :bro:type:`count` + Current pending queries. + + cached_hosts: :bro:type:`count` + Number of cached hosts. + + cached_addresses: :bro:type:`count` + Number of cached addresses. + + Statistics related to Bro's active use of DNS. These numbers are + about Bro performing DNS queries on it's own, not traffic + being seen. + + .. bro:see:: get_dns_stats + +.. bro:type:: EncapsulatingConnVector + + :Type: :bro:type:`vector` of :bro:type:`Tunnel::EncapsulatingConn` + + A type alias for a vector of encapsulating "connections", i.e. for when + there are tunnels within tunnels. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: EventStats + + :Type: :bro:type:`record` + + queued: :bro:type:`count` + Total number of events queued so far. + + dispatched: :bro:type:`count` + Total number of events dispatched so far. + + +.. bro:type:: FileAnalysisStats + + :Type: :bro:type:`record` + + current: :bro:type:`count` + Current number of files being analyzed. + + max: :bro:type:`count` + Maximum number of concurrent files so far. + + cumulative: :bro:type:`count` + Cumulative number of files analyzed. + + Statistics of file analysis. + + .. bro:see:: get_file_analysis_stats + +.. bro:type:: GapStats + + :Type: :bro:type:`record` + + ack_events: :bro:type:`count` + How many ack events *could* have had gaps. + + ack_bytes: :bro:type:`count` + How many bytes those covered. + + gap_events: :bro:type:`count` + How many *did* have gaps. + + gap_bytes: :bro:type:`count` + How many bytes were missing in the gaps. + + Statistics about number of gaps in TCP connections. + + .. bro:see:: get_gap_stats + +.. bro:type:: IPAddrAnonymization + + :Type: :bro:type:`enum` + + .. bro:enum:: KEEP_ORIG_ADDR IPAddrAnonymization + + .. bro:enum:: SEQUENTIALLY_NUMBERED IPAddrAnonymization + + .. bro:enum:: RANDOM_MD5 IPAddrAnonymization + + .. bro:enum:: PREFIX_PRESERVING_A50 IPAddrAnonymization + + .. bro:enum:: PREFIX_PRESERVING_MD5 IPAddrAnonymization + + Deprecated. + + .. bro:see:: anonymize_addr + +.. bro:type:: IPAddrAnonymizationClass + + :Type: :bro:type:`enum` + + .. bro:enum:: ORIG_ADDR IPAddrAnonymizationClass + + .. bro:enum:: RESP_ADDR IPAddrAnonymizationClass + + .. bro:enum:: OTHER_ADDR IPAddrAnonymizationClass + + Deprecated. + + .. bro:see:: anonymize_addr + +.. bro:type:: JSON::TimestampFormat + + :Type: :bro:type:`enum` + + .. bro:enum:: JSON::TS_EPOCH JSON::TimestampFormat + + Timestamps will be formatted as UNIX epoch doubles. This is + the format that Bro typically writes out timestamps. + + .. bro:enum:: JSON::TS_MILLIS JSON::TimestampFormat + + Timestamps will be formatted as unsigned integers that + represent the number of milliseconds since the UNIX + epoch. + + .. bro:enum:: JSON::TS_ISO8601 JSON::TimestampFormat + + Timestamps will be formatted in the ISO8601 DateTime format. + Subseconds are also included which isn't actually part of the + standard but most consumers that parse ISO8601 seem to be able + to cope with that. + + +.. bro:type:: KRB::AP_Options + + :Type: :bro:type:`record` + + use_session_key: :bro:type:`bool` + Indicates that user-to-user-authentication is in use + + mutual_required: :bro:type:`bool` + Mutual authentication is required + + AP Options. See :rfc:`4120` + +.. bro:type:: KRB::Error_Msg + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + msg_type: :bro:type:`count` + The message type (30 for ERROR_MSG) + + client_time: :bro:type:`time` :bro:attr:`&optional` + Current time on the client + + server_time: :bro:type:`time` + Current time on the server + + error_code: :bro:type:`count` + The specific error code + + client_realm: :bro:type:`string` :bro:attr:`&optional` + Realm of the ticket + + client_name: :bro:type:`string` :bro:attr:`&optional` + Name on the ticket + + service_realm: :bro:type:`string` + Realm of the service + + service_name: :bro:type:`string` + Name of the service + + error_text: :bro:type:`string` :bro:attr:`&optional` + Additional text to explain the error + + pa_data: :bro:type:`vector` of :bro:type:`KRB::Type_Value` :bro:attr:`&optional` + Optional pre-authentication data + + The data from the ERROR_MSG message. See :rfc:`4120`. + +.. bro:type:: KRB::Host_Address + + :Type: :bro:type:`record` + + ip: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + IPv4 or IPv6 address + + netbios: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + NetBIOS address + + unknown: :bro:type:`KRB::Type_Value` :bro:attr:`&optional` + Some other type that we don't support yet + + A Kerberos host address See :rfc:`4120`. + +.. bro:type:: KRB::Host_Address_Vector + + :Type: :bro:type:`vector` of :bro:type:`KRB::Host_Address` + + +.. bro:type:: KRB::KDC_Options + + :Type: :bro:type:`record` + + forwardable: :bro:type:`bool` + The ticket to be issued should have its forwardable flag set. + + forwarded: :bro:type:`bool` + A (TGT) request for forwarding. + + proxiable: :bro:type:`bool` + The ticket to be issued should have its proxiable flag set. + + proxy: :bro:type:`bool` + A request for a proxy. + + allow_postdate: :bro:type:`bool` + The ticket to be issued should have its may-postdate flag set. + + postdated: :bro:type:`bool` + A request for a postdated ticket. + + renewable: :bro:type:`bool` + The ticket to be issued should have its renewable flag set. + + opt_hardware_auth: :bro:type:`bool` + Reserved for opt_hardware_auth + + disable_transited_check: :bro:type:`bool` + Request that the KDC not check the transited field of a TGT against + the policy of the local realm before it will issue derivative tickets + based on the TGT. + + renewable_ok: :bro:type:`bool` + If a ticket with the requested lifetime cannot be issued, a renewable + ticket is acceptable + + enc_tkt_in_skey: :bro:type:`bool` + The ticket for the end server is to be encrypted in the session key + from the additional TGT provided + + renew: :bro:type:`bool` + The request is for a renewal + + validate: :bro:type:`bool` + The request is to validate a postdated ticket. + + KDC Options. See :rfc:`4120` + +.. bro:type:: KRB::KDC_Request + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + msg_type: :bro:type:`count` + The message type (10 for AS_REQ, 12 for TGS_REQ) + + pa_data: :bro:type:`vector` of :bro:type:`KRB::Type_Value` :bro:attr:`&optional` + Optional pre-authentication data + + kdc_options: :bro:type:`KRB::KDC_Options` + Options specified in the request + + client_name: :bro:type:`string` :bro:attr:`&optional` + Name on the ticket + + service_realm: :bro:type:`string` + Realm of the service + + service_name: :bro:type:`string` :bro:attr:`&optional` + Name of the service + + from: :bro:type:`time` :bro:attr:`&optional` + Time the ticket is good from + + till: :bro:type:`time` + Time the ticket is good till + + rtime: :bro:type:`time` :bro:attr:`&optional` + The requested renew-till time + + nonce: :bro:type:`count` + A random nonce generated by the client + + encryption_types: :bro:type:`vector` of :bro:type:`count` + The desired encryption algorithms, in order of preference + + host_addrs: :bro:type:`vector` of :bro:type:`KRB::Host_Address` :bro:attr:`&optional` + Any additional addresses the ticket should be valid for + + additional_tickets: :bro:type:`vector` of :bro:type:`KRB::Ticket` :bro:attr:`&optional` + Additional tickets may be included for certain transactions + + The data from the AS_REQ and TGS_REQ messages. See :rfc:`4120`. + +.. bro:type:: KRB::KDC_Response + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + msg_type: :bro:type:`count` + The message type (11 for AS_REP, 13 for TGS_REP) + + pa_data: :bro:type:`vector` of :bro:type:`KRB::Type_Value` :bro:attr:`&optional` + Optional pre-authentication data + + client_realm: :bro:type:`string` :bro:attr:`&optional` + Realm on the ticket + + client_name: :bro:type:`string` + Name on the service + + ticket: :bro:type:`KRB::Ticket` + The ticket that was issued + + The data from the AS_REQ and TGS_REQ messages. See :rfc:`4120`. + +.. bro:type:: KRB::SAFE_Msg + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + msg_type: :bro:type:`count` + The message type (20 for SAFE_MSG) + + data: :bro:type:`string` + The application-specific data that is being passed + from the sender to the reciever + + timestamp: :bro:type:`time` :bro:attr:`&optional` + Current time from the sender of the message + + seq: :bro:type:`count` :bro:attr:`&optional` + Sequence number used to detect replays + + sender: :bro:type:`KRB::Host_Address` :bro:attr:`&optional` + Sender address + + recipient: :bro:type:`KRB::Host_Address` :bro:attr:`&optional` + Recipient address + + The data from the SAFE message. See :rfc:`4120`. + +.. bro:type:: KRB::Ticket + + :Type: :bro:type:`record` + + pvno: :bro:type:`count` + Protocol version number (5 for KRB5) + + realm: :bro:type:`string` + Realm + + service_name: :bro:type:`string` + Name of the service + + cipher: :bro:type:`count` + Cipher the ticket was encrypted with + + ciphertext: :bro:type:`string` :bro:attr:`&optional` + Cipher text of the ticket + + authenticationinfo: :bro:type:`string` :bro:attr:`&optional` + Authentication info + + A Kerberos ticket. See :rfc:`4120`. + +.. bro:type:: KRB::Ticket_Vector + + :Type: :bro:type:`vector` of :bro:type:`KRB::Ticket` + + +.. bro:type:: KRB::Type_Value + + :Type: :bro:type:`record` + + data_type: :bro:type:`count` + The data type + + val: :bro:type:`string` + The data value + + Used in a few places in the Kerberos analyzer for elements + that have a type and a string value. + +.. bro:type:: KRB::Type_Value_Vector + + :Type: :bro:type:`vector` of :bro:type:`KRB::Type_Value` + + +.. bro:type:: MOUNT3::dirmntargs_t + + :Type: :bro:type:`record` + + dirname: :bro:type:`string` + Name of directory to mount + + MOUNT *mnt* arguments. + + .. bro:see:: mount_proc_mnt + +.. bro:type:: MOUNT3::info_t + + :Type: :bro:type:`record` + + rpc_stat: :bro:type:`rpc_status` + The RPC status. + + mnt_stat: :bro:type:`MOUNT3::status_t` + The MOUNT status. + + req_start: :bro:type:`time` + The start time of the request. + + req_dur: :bro:type:`interval` + The duration of the request. + + req_len: :bro:type:`count` + The length in bytes of the request. + + rep_start: :bro:type:`time` + The start time of the reply. + + rep_dur: :bro:type:`interval` + The duration of the reply. + + rep_len: :bro:type:`count` + The length in bytes of the reply. + + rpc_uid: :bro:type:`count` + The user id of the reply. + + rpc_gid: :bro:type:`count` + The group id of the reply. + + rpc_stamp: :bro:type:`count` + The stamp of the reply. + + rpc_machine_name: :bro:type:`string` + The machine name of the reply. + + rpc_auxgids: :bro:type:`index_vec` + The auxiliary ids of the reply. + + Record summarizing the general results and status of MOUNT3 + request/reply pairs. + + Note that when *rpc_stat* or *mount_stat* indicates not successful, + the reply record passed to the corresponding event will be empty and + contain uninitialized fields, so don't use it. Also note that time + +.. bro:type:: MOUNT3::mnt_reply_t + + :Type: :bro:type:`record` + + dirfh: :bro:type:`string` :bro:attr:`&optional` + Dir handle + + auth_flavors: :bro:type:`vector` of :bro:type:`MOUNT3::auth_flavor_t` :bro:attr:`&optional` + Returned authentication flavors + + MOUNT lookup reply. If the mount failed, *dir_attr* may be set. If the + mount succeeded, *fh* is always set. + + .. bro:see:: mount_proc_mnt + +.. bro:type:: MatcherStats + + :Type: :bro:type:`record` + + matchers: :bro:type:`count` + Number of distinct RE matchers. + + nfa_states: :bro:type:`count` + Number of NFA states across all matchers. + + dfa_states: :bro:type:`count` + Number of DFA states across all matchers. + + computed: :bro:type:`count` + Number of computed DFA state transitions. + + mem: :bro:type:`count` + Number of bytes used by DFA states. + + hits: :bro:type:`count` + Number of cache hits. + + misses: :bro:type:`count` + Number of cache misses. + + Statistics of all regular expression matchers. + + .. bro:see:: get_matcher_stats + +.. bro:type:: ModbusCoils + + :Type: :bro:type:`vector` of :bro:type:`bool` + + A vector of boolean values that indicate the setting + for a range of modbus coils. + +.. bro:type:: ModbusHeaders + + :Type: :bro:type:`record` + + tid: :bro:type:`count` + Transaction identifier + + pid: :bro:type:`count` + Protocol identifier + + uid: :bro:type:`count` + Unit identifier (previously 'slave address') + + function_code: :bro:type:`count` + MODBUS function code + + +.. bro:type:: ModbusRegisters + + :Type: :bro:type:`vector` of :bro:type:`count` + + A vector of count values that represent 16bit modbus + register values. + +.. bro:type:: NFS3::delobj_reply_t + + :Type: :bro:type:`record` + + dir_pre_attr: :bro:type:`NFS3::wcc_attr_t` :bro:attr:`&optional` + Optional attributes associated w/ dir. + + dir_post_attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Optional attributes associated w/ dir. + + NFS reply for *remove*, *rmdir*. Corresponds to *wcc_data* in the spec. + + .. bro:see:: nfs_proc_remove nfs_proc_rmdir + +.. bro:type:: NFS3::direntry_t + + :Type: :bro:type:`record` + + fileid: :bro:type:`count` + E.g., inode number. + + fname: :bro:type:`string` + Filename. + + cookie: :bro:type:`count` + Cookie value. + + attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + *readdirplus*: the *fh* attributes for the entry. + + fh: :bro:type:`string` :bro:attr:`&optional` + *readdirplus*: the *fh* for the entry + + NFS *direntry*. *fh* and *attr* are used for *readdirplus*. However, + even for *readdirplus* they may not be filled out. + + .. bro:see:: NFS3::direntry_vec_t NFS3::readdir_reply_t + +.. bro:type:: NFS3::direntry_vec_t + + :Type: :bro:type:`vector` of :bro:type:`NFS3::direntry_t` + + Vector of NFS *direntry*. + + .. bro:see:: NFS3::readdir_reply_t + +.. bro:type:: NFS3::diropargs_t + + :Type: :bro:type:`record` + + dirfh: :bro:type:`string` + The file handle of the directory. + + fname: :bro:type:`string` + The name of the file we are interested in. + + NFS *readdir* arguments. + + .. bro:see:: nfs_proc_readdir + +.. bro:type:: NFS3::fattr_t + + :Type: :bro:type:`record` + + ftype: :bro:type:`NFS3::file_type_t` + File type. + + mode: :bro:type:`count` + Mode + + nlink: :bro:type:`count` + Number of links. + + uid: :bro:type:`count` + User ID. + + gid: :bro:type:`count` + Group ID. + + size: :bro:type:`count` + Size. + + used: :bro:type:`count` + TODO. + + rdev1: :bro:type:`count` + TODO. + + rdev2: :bro:type:`count` + TODO. + + fsid: :bro:type:`count` + TODO. + + fileid: :bro:type:`count` + TODO. + + atime: :bro:type:`time` + Time of last access. + + mtime: :bro:type:`time` + Time of last modification. + + ctime: :bro:type:`time` + Time of creation. + + NFS file attributes. Field names are based on RFC 1813. + + .. bro:see:: nfs_proc_getattr + +.. bro:type:: NFS3::fsstat_t + + :Type: :bro:type:`record` + + attrs: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Attributes. + + tbytes: :bro:type:`double` + TODO. + + fbytes: :bro:type:`double` + TODO. + + abytes: :bro:type:`double` + TODO. + + tfiles: :bro:type:`double` + TODO. + + ffiles: :bro:type:`double` + TODO. + + afiles: :bro:type:`double` + TODO. + + invarsec: :bro:type:`interval` + TODO. + + NFS *fsstat*. + +.. bro:type:: NFS3::info_t + + :Type: :bro:type:`record` + + rpc_stat: :bro:type:`rpc_status` + The RPC status. + + nfs_stat: :bro:type:`NFS3::status_t` + The NFS status. + + req_start: :bro:type:`time` + The start time of the request. + + req_dur: :bro:type:`interval` + The duration of the request. + + req_len: :bro:type:`count` + The length in bytes of the request. + + rep_start: :bro:type:`time` + The start time of the reply. + + rep_dur: :bro:type:`interval` + The duration of the reply. + + rep_len: :bro:type:`count` + The length in bytes of the reply. + + rpc_uid: :bro:type:`count` + The user id of the reply. + + rpc_gid: :bro:type:`count` + The group id of the reply. + + rpc_stamp: :bro:type:`count` + The stamp of the reply. + + rpc_machine_name: :bro:type:`string` + The machine name of the reply. + + rpc_auxgids: :bro:type:`index_vec` + The auxiliary ids of the reply. + + Record summarizing the general results and status of NFSv3 + request/reply pairs. + + Note that when *rpc_stat* or *nfs_stat* indicates not successful, + the reply record passed to the corresponding event will be empty and + contain uninitialized fields, so don't use it. Also note that time + and duration values might not be fully accurate. For TCP, we record + times when the corresponding chunk of data is delivered to the + analyzer. Depending on the reassembler, this might be well after the + first packet of the request was received. + + .. bro:see:: nfs_proc_create nfs_proc_getattr nfs_proc_lookup + nfs_proc_mkdir nfs_proc_not_implemented nfs_proc_null + nfs_proc_read nfs_proc_readdir nfs_proc_readlink nfs_proc_remove + nfs_proc_rmdir nfs_proc_write nfs_reply_status + +.. bro:type:: NFS3::link_reply_t + + :Type: :bro:type:`record` + + post_attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Optional post-operation attributes of the file system object identified by file + + preattr: :bro:type:`NFS3::wcc_attr_t` :bro:attr:`&optional` + Optional attributes associated w/ file. + + postattr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Optional attributes associated w/ file. + + NFS *link* reply. + + .. bro:see:: nfs_proc_link + +.. bro:type:: NFS3::linkargs_t + + :Type: :bro:type:`record` + + fh: :bro:type:`string` + The file handle for the existing file system object. + + link: :bro:type:`NFS3::diropargs_t` + The location of the link to be created. + + NFS *link* arguments. + + .. bro:see:: nfs_proc_link + +.. bro:type:: NFS3::lookup_reply_t + + :Type: :bro:type:`record` + + fh: :bro:type:`string` :bro:attr:`&optional` + File handle of object looked up. + + obj_attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Optional attributes associated w/ file + + dir_attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Optional attributes associated w/ dir. + + NFS lookup reply. If the lookup failed, *dir_attr* may be set. If the + lookup succeeded, *fh* is always set and *obj_attr* and *dir_attr* + may be set. + + .. bro:see:: nfs_proc_lookup + +.. bro:type:: NFS3::newobj_reply_t + + :Type: :bro:type:`record` + + fh: :bro:type:`string` :bro:attr:`&optional` + File handle of object created. + + obj_attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Optional attributes associated w/ new object. + + dir_pre_attr: :bro:type:`NFS3::wcc_attr_t` :bro:attr:`&optional` + Optional attributes associated w/ dir. + + dir_post_attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Optional attributes associated w/ dir. + + NFS reply for *create*, *mkdir*, and *symlink*. If the proc + failed, *dir_\*_attr* may be set. If the proc succeeded, *fh* and the + *attr*'s may be set. Note: no guarantee that *fh* is set after + success. + + .. bro:see:: nfs_proc_create nfs_proc_mkdir + +.. bro:type:: NFS3::read_reply_t + + :Type: :bro:type:`record` + + attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Attributes. + + size: :bro:type:`count` :bro:attr:`&optional` + Number of bytes read. + + eof: :bro:type:`bool` :bro:attr:`&optional` + Sid the read end at EOF. + + data: :bro:type:`string` :bro:attr:`&optional` + The actual data; not yet implemented. + + NFS *read* reply. If the lookup fails, *attr* may be set. If the + lookup succeeds, *attr* may be set and all other fields are set. + +.. bro:type:: NFS3::readargs_t + + :Type: :bro:type:`record` + + fh: :bro:type:`string` + File handle to read from. + + offset: :bro:type:`count` + Offset in file. + + size: :bro:type:`count` + Number of bytes to read. + + NFS *read* arguments. + + .. bro:see:: nfs_proc_read + +.. bro:type:: NFS3::readdir_reply_t + + :Type: :bro:type:`record` + + isplus: :bro:type:`bool` + True if the reply for a *readdirplus* request. + + dir_attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Directory attributes. + + cookieverf: :bro:type:`count` :bro:attr:`&optional` + TODO. + + entries: :bro:type:`NFS3::direntry_vec_t` :bro:attr:`&optional` + Returned directory entries. + + eof: :bro:type:`bool` + If true, no more entries in directory. + + NFS *readdir* reply. Used for *readdir* and *readdirplus*. If an is + returned, *dir_attr* might be set. On success, *dir_attr* may be set, + all others must be set. + +.. bro:type:: NFS3::readdirargs_t + + :Type: :bro:type:`record` + + isplus: :bro:type:`bool` + Is this a readdirplus request? + + dirfh: :bro:type:`string` + The directory filehandle. + + cookie: :bro:type:`count` + Cookie / pos in dir; 0 for first call. + + cookieverf: :bro:type:`count` + The cookie verifier. + + dircount: :bro:type:`count` + "count" field for readdir; maxcount otherwise (in bytes). + + maxcount: :bro:type:`count` :bro:attr:`&optional` + Only used for readdirplus. in bytes. + + NFS *readdir* arguments. Used for both *readdir* and *readdirplus*. + + .. bro:see:: nfs_proc_readdir + +.. bro:type:: NFS3::readlink_reply_t + + :Type: :bro:type:`record` + + attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Attributes. + + nfspath: :bro:type:`string` :bro:attr:`&optional` + Contents of the symlink; in general a pathname as text. + + NFS *readline* reply. If the request fails, *attr* may be set. If the + request succeeds, *attr* may be set and all other fields are set. + + .. bro:see:: nfs_proc_readlink + +.. bro:type:: NFS3::renameobj_reply_t + + :Type: :bro:type:`record` + + src_dir_pre_attr: :bro:type:`NFS3::wcc_attr_t` + + src_dir_post_attr: :bro:type:`NFS3::fattr_t` + + dst_dir_pre_attr: :bro:type:`NFS3::wcc_attr_t` + + dst_dir_post_attr: :bro:type:`NFS3::fattr_t` + + NFS reply for *rename*. Corresponds to *wcc_data* in the spec. + + .. bro:see:: nfs_proc_rename + +.. bro:type:: NFS3::renameopargs_t + + :Type: :bro:type:`record` + + src_dirfh: :bro:type:`string` + + src_fname: :bro:type:`string` + + dst_dirfh: :bro:type:`string` + + dst_fname: :bro:type:`string` + + NFS *rename* arguments. + + .. bro:see:: nfs_proc_rename + +.. bro:type:: NFS3::sattr_reply_t + + :Type: :bro:type:`record` + + dir_pre_attr: :bro:type:`NFS3::wcc_attr_t` :bro:attr:`&optional` + Optional attributes associated w/ dir. + + dir_post_attr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Optional attributes associated w/ dir. + + NFS *sattr* reply. If the request fails, *pre|post* attr may be set. + If the request succeeds, *pre|post* attr are set. + + +.. bro:type:: NFS3::sattr_t + + :Type: :bro:type:`record` + + mode: :bro:type:`count` :bro:attr:`&optional` + Mode + + uid: :bro:type:`count` :bro:attr:`&optional` + User ID. + + gid: :bro:type:`count` :bro:attr:`&optional` + Group ID. + + size: :bro:type:`count` :bro:attr:`&optional` + Size. + + atime: :bro:type:`NFS3::time_how_t` :bro:attr:`&optional` + Time of last access. + + mtime: :bro:type:`NFS3::time_how_t` :bro:attr:`&optional` + Time of last modification. + + NFS file attributes. Field names are based on RFC 1813. + + .. bro:see:: nfs_proc_sattr + +.. bro:type:: NFS3::sattrargs_t + + :Type: :bro:type:`record` + + fh: :bro:type:`string` + The file handle for the existing file system object. + + new_attributes: :bro:type:`NFS3::sattr_t` + The new attributes for the file. + + NFS *sattr* arguments. + + .. bro:see:: nfs_proc_sattr + +.. bro:type:: NFS3::symlinkargs_t + + :Type: :bro:type:`record` + + link: :bro:type:`NFS3::diropargs_t` + The location of the link to be created. + + symlinkdata: :bro:type:`NFS3::symlinkdata_t` + The symbolic link to be created. + + NFS *symlink* arguments. + + .. bro:see:: nfs_proc_symlink + +.. bro:type:: NFS3::symlinkdata_t + + :Type: :bro:type:`record` + + symlink_attributes: :bro:type:`NFS3::sattr_t` + The initial attributes for the symbolic link + + nfspath: :bro:type:`string` :bro:attr:`&optional` + The string containing the symbolic link data. + + NFS symlinkdata attributes. Field names are based on RFC 1813 + + .. bro:see:: nfs_proc_symlink + +.. bro:type:: NFS3::wcc_attr_t + + :Type: :bro:type:`record` + + size: :bro:type:`count` + The size. + + atime: :bro:type:`time` + Access time. + + mtime: :bro:type:`time` + Modification time. + + NFS *wcc* attributes. + + .. bro:see:: NFS3::write_reply_t + +.. bro:type:: NFS3::write_reply_t + + :Type: :bro:type:`record` + + preattr: :bro:type:`NFS3::wcc_attr_t` :bro:attr:`&optional` + Pre operation attributes. + + postattr: :bro:type:`NFS3::fattr_t` :bro:attr:`&optional` + Post operation attributes. + + size: :bro:type:`count` :bro:attr:`&optional` + Size. + + commited: :bro:type:`NFS3::stable_how_t` :bro:attr:`&optional` + TODO. + + verf: :bro:type:`count` :bro:attr:`&optional` + Write verifier cookie. + + NFS *write* reply. If the request fails, *pre|post* attr may be set. + If the request succeeds, *pre|post* attr may be set and all other + fields are set. + + .. bro:see:: nfs_proc_write + +.. bro:type:: NFS3::writeargs_t + + :Type: :bro:type:`record` + + fh: :bro:type:`string` + File handle to write to. + + offset: :bro:type:`count` + Offset in file. + + size: :bro:type:`count` + Number of bytes to write. + + stable: :bro:type:`NFS3::stable_how_t` + How and when data is commited. + + data: :bro:type:`string` :bro:attr:`&optional` + The actual data; not implemented yet. + + NFS *write* arguments. + + .. bro:see:: nfs_proc_write + +.. bro:type:: NTLM::AVs + + :Type: :bro:type:`record` + + nb_computer_name: :bro:type:`string` + The server's NetBIOS computer name + + nb_domain_name: :bro:type:`string` + The server's NetBIOS domain name + + dns_computer_name: :bro:type:`string` :bro:attr:`&optional` + The FQDN of the computer + + dns_domain_name: :bro:type:`string` :bro:attr:`&optional` + The FQDN of the domain + + dns_tree_name: :bro:type:`string` :bro:attr:`&optional` + The FQDN of the forest + + constrained_auth: :bro:type:`bool` :bro:attr:`&optional` + Indicates to the client that the account + authentication is constrained + + timestamp: :bro:type:`time` :bro:attr:`&optional` + The associated timestamp, if present + + single_host_id: :bro:type:`count` :bro:attr:`&optional` + Indicates that the client is providing + a machine ID created at computer startup to + identify the calling machine + + target_name: :bro:type:`string` :bro:attr:`&optional` + The SPN of the target server + + +.. bro:type:: NTLM::Authenticate + + :Type: :bro:type:`record` + + flags: :bro:type:`NTLM::NegotiateFlags` + The negotiate flags + + domain_name: :bro:type:`string` :bro:attr:`&optional` + The domain or computer name hosting the account + + user_name: :bro:type:`string` :bro:attr:`&optional` + The name of the user to be authenticated. + + workstation: :bro:type:`string` :bro:attr:`&optional` + The name of the computer to which the user was logged on. + + session_key: :bro:type:`string` :bro:attr:`&optional` + The session key + + version: :bro:type:`NTLM::Version` :bro:attr:`&optional` + The Windows version information, if supplied + + +.. bro:type:: NTLM::Challenge + + :Type: :bro:type:`record` + + flags: :bro:type:`NTLM::NegotiateFlags` + The negotiate flags + + target_name: :bro:type:`string` :bro:attr:`&optional` + The server authentication realm. If the server is + domain-joined, the name of the domain. Otherwise + the server name. See flags.target_type_domain + and flags.target_type_server + + version: :bro:type:`NTLM::Version` :bro:attr:`&optional` + The Windows version information, if supplied + + target_info: :bro:type:`NTLM::AVs` :bro:attr:`&optional` + Attribute-value pairs specified by the server + + +.. bro:type:: NTLM::Negotiate + + :Type: :bro:type:`record` + + flags: :bro:type:`NTLM::NegotiateFlags` + The negotiate flags + + domain_name: :bro:type:`string` :bro:attr:`&optional` + The domain name of the client, if known + + workstation: :bro:type:`string` :bro:attr:`&optional` + The machine name of the client, if known + + version: :bro:type:`NTLM::Version` :bro:attr:`&optional` + The Windows version information, if supplied + + +.. bro:type:: NTLM::NegotiateFlags + + :Type: :bro:type:`record` + + negotiate_56: :bro:type:`bool` + If set, requires 56-bit encryption + + negotiate_key_exch: :bro:type:`bool` + If set, requests an explicit key exchange + + negotiate_128: :bro:type:`bool` + If set, requests 128-bit session key negotiation + + negotiate_version: :bro:type:`bool` + If set, requests the protocol version number + + negotiate_target_info: :bro:type:`bool` + If set, indicates that the TargetInfo fields in the + CHALLENGE_MESSAGE are populated + + request_non_nt_session_key: :bro:type:`bool` + If set, requests the usage of the LMOWF function + + negotiate_identify: :bro:type:`bool` + If set, requests and identify level token + + negotiate_extended_sessionsecurity: :bro:type:`bool` + If set, requests usage of NTLM v2 session security + Note: NTML v2 session security is actually NTLM v1 + + target_type_server: :bro:type:`bool` + If set, TargetName must be a server name + + target_type_domain: :bro:type:`bool` + If set, TargetName must be a domain name + + negotiate_always_sign: :bro:type:`bool` + If set, requests the presence of a signature block + on all messages + + negotiate_oem_workstation_supplied: :bro:type:`bool` + If set, the workstation name is provided + + negotiate_oem_domain_supplied: :bro:type:`bool` + If set, the domain name is provided + + negotiate_anonymous_connection: :bro:type:`bool` + If set, the connection should be anonymous + + negotiate_ntlm: :bro:type:`bool` + If set, requests usage of NTLM v1 + + negotiate_lm_key: :bro:type:`bool` + If set, requests LAN Manager session key computation + + negotiate_datagram: :bro:type:`bool` + If set, requests connectionless authentication + + negotiate_seal: :bro:type:`bool` + If set, requests session key negotiation for message + confidentiality + + negotiate_sign: :bro:type:`bool` + If set, requests session key negotiation for message + signatures + + request_target: :bro:type:`bool` + If set, the TargetName field is present + + negotiate_oem: :bro:type:`bool` + If set, requests OEM character set encoding + + negotiate_unicode: :bro:type:`bool` + If set, requests Unicode character set encoding + + +.. bro:type:: NTLM::Version + + :Type: :bro:type:`record` + + major: :bro:type:`count` + The major version of the Windows operating system in use + + minor: :bro:type:`count` + The minor version of the Windows operating system in use + + build: :bro:type:`count` + The build number of the Windows operating system in use + + ntlmssp: :bro:type:`count` + The current revision of NTLMSSP in use + + +.. bro:type:: NetStats + + :Type: :bro:type:`record` + + pkts_recvd: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Packets received by Bro. + + pkts_dropped: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Packets reported dropped by the system. + + pkts_link: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Packets seen on the link. Note that this may differ + from *pkts_recvd* because of a potential capture_filter. See + :doc:`/scripts/base/frameworks/packet-filter/main.bro`. Depending on the + packet capture system, this value may not be available and will then + be always set to zero. + + bytes_recvd: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Bytes received by Bro. + + Packet capture statistics. All counts are cumulative. + + .. bro:see:: get_net_stats + +.. bro:type:: OS_version + + :Type: :bro:type:`record` + + genre: :bro:type:`string` + Linux, Windows, AIX, ... + + detail: :bro:type:`string` + Kernel version or such. + + dist: :bro:type:`count` + How far is the host away from the sensor (TTL)?. + + match_type: :bro:type:`OS_version_inference` + Quality of the match. + + Passive fingerprinting match. + + .. bro:see:: OS_version_found + +.. bro:type:: OS_version_inference + + :Type: :bro:type:`enum` + + .. bro:enum:: direct_inference OS_version_inference + + TODO. + + .. bro:enum:: generic_inference OS_version_inference + + TODO. + + .. bro:enum:: fuzzy_inference OS_version_inference + + TODO. + + Quality of passive fingerprinting matches. + + .. bro:see:: OS_version + +.. bro:type:: PE::DOSHeader + + :Type: :bro:type:`record` + + signature: :bro:type:`string` + The magic number of a portable executable file ("MZ"). + + used_bytes_in_last_page: :bro:type:`count` + The number of bytes in the last page that are used. + + file_in_pages: :bro:type:`count` + The number of pages in the file that are part of the PE file itself. + + num_reloc_items: :bro:type:`count` + Number of relocation entries stored after the header. + + header_in_paragraphs: :bro:type:`count` + Number of paragraphs in the header. + + min_extra_paragraphs: :bro:type:`count` + Number of paragraps of additional memory that the program will need. + + max_extra_paragraphs: :bro:type:`count` + Maximum number of paragraphs of additional memory. + + init_relative_ss: :bro:type:`count` + Relative value of the stack segment. + + init_sp: :bro:type:`count` + Initial value of the SP register. + + checksum: :bro:type:`count` + Checksum. The 16-bit sum of all words in the file should be 0. Normally not set. + + init_ip: :bro:type:`count` + Initial value of the IP register. + + init_relative_cs: :bro:type:`count` + Initial value of the CS register (relative to the initial segment). + + addr_of_reloc_table: :bro:type:`count` + Offset of the first relocation table. + + overlay_num: :bro:type:`count` + Overlays allow you to append data to the end of the file. If this is the main program, + this will be 0. + + oem_id: :bro:type:`count` + OEM identifier. + + oem_info: :bro:type:`count` + Additional OEM info, specific to oem_id. + + addr_of_new_exe_header: :bro:type:`count` + Address of the new EXE header. + + +.. bro:type:: PE::FileHeader + + :Type: :bro:type:`record` + + machine: :bro:type:`count` + The target machine that the file was compiled for. + + ts: :bro:type:`time` + The time that the file was created at. + + sym_table_ptr: :bro:type:`count` + Pointer to the symbol table. + + num_syms: :bro:type:`count` + Number of symbols. + + optional_header_size: :bro:type:`count` + The size of the optional header. + + characteristics: :bro:type:`set` [:bro:type:`count`] + Bit flags that determine if this file is executable, non-relocatable, and/or a DLL. + + +.. bro:type:: PE::OptionalHeader + + :Type: :bro:type:`record` + + magic: :bro:type:`count` + PE32 or PE32+ indicator. + + major_linker_version: :bro:type:`count` + The major version of the linker used to create the PE. + + minor_linker_version: :bro:type:`count` + The minor version of the linker used to create the PE. + + size_of_code: :bro:type:`count` + Size of the .text section. + + size_of_init_data: :bro:type:`count` + Size of the .data section. + + size_of_uninit_data: :bro:type:`count` + Size of the .bss section. + + addr_of_entry_point: :bro:type:`count` + The relative virtual address (RVA) of the entry point. + + base_of_code: :bro:type:`count` + The relative virtual address (RVA) of the .text section. + + base_of_data: :bro:type:`count` :bro:attr:`&optional` + The relative virtual address (RVA) of the .data section. + + image_base: :bro:type:`count` + Preferred memory location for the image to be based at. + + section_alignment: :bro:type:`count` + The alignment (in bytes) of sections when they're loaded in memory. + + file_alignment: :bro:type:`count` + The alignment (in bytes) of the raw data of sections. + + os_version_major: :bro:type:`count` + The major version of the required OS. + + os_version_minor: :bro:type:`count` + The minor version of the required OS. + + major_image_version: :bro:type:`count` + The major version of this image. + + minor_image_version: :bro:type:`count` + The minor version of this image. + + major_subsys_version: :bro:type:`count` + The major version of the subsystem required to run this file. + + minor_subsys_version: :bro:type:`count` + The minor version of the subsystem required to run this file. + + size_of_image: :bro:type:`count` + The size (in bytes) of the iamge as the image is loaded in memory. + + size_of_headers: :bro:type:`count` + The size (in bytes) of the headers, rounded up to file_alignment. + + checksum: :bro:type:`count` + The image file checksum. + + subsystem: :bro:type:`count` + The subsystem that's required to run this image. + + dll_characteristics: :bro:type:`set` [:bro:type:`count`] + Bit flags that determine how to execute or load this file. + + table_sizes: :bro:type:`vector` of :bro:type:`count` + A vector with the sizes of various tables and strings that are + defined in the optional header data directories. Examples include + the import table, the resource table, and debug information. + + +.. bro:type:: PE::SectionHeader + + :Type: :bro:type:`record` + + name: :bro:type:`string` + The name of the section + + virtual_size: :bro:type:`count` + The total size of the section when loaded into memory. + + virtual_addr: :bro:type:`count` + The relative virtual address (RVA) of the section. + + size_of_raw_data: :bro:type:`count` + The size of the initialized data for the section, as it is + in the file on disk. + + ptr_to_raw_data: :bro:type:`count` + The virtual address of the initialized dat for the section, + as it is in the file on disk. + + ptr_to_relocs: :bro:type:`count` + The file pointer to the beginning of relocation entries for + the section. + + ptr_to_line_nums: :bro:type:`count` + The file pointer to the beginning of line-number entries for + the section. + + num_of_relocs: :bro:type:`count` + The number of relocation entries for the section. + + num_of_line_nums: :bro:type:`count` + The number of line-number entrie for the section. + + characteristics: :bro:type:`set` [:bro:type:`count`] + Bit-flags that describe the characteristics of the section. + + Record for Portable Executable (PE) section headers. + +.. bro:type:: PcapFilterID + + :Type: :bro:type:`enum` + + .. bro:enum:: None PcapFilterID + + .. bro:enum:: PacketFilter::DefaultPcapFilter PcapFilterID + + (present if :doc:`/scripts/base/frameworks/packet-filter/main.bro` is loaded) + + + .. bro:enum:: PacketFilter::FilterTester PcapFilterID + + (present if :doc:`/scripts/base/frameworks/packet-filter/main.bro` is loaded) + + + Enum type identifying dynamic BPF filters. These are used by + :bro:see:`Pcap::precompile_pcap_filter` and :bro:see:`Pcap::precompile_pcap_filter`. + +.. bro:type:: ProcStats + + :Type: :bro:type:`record` + + debug: :bro:type:`bool` + True if compiled with --enable-debug. + + start_time: :bro:type:`time` + Start time of process. + + real_time: :bro:type:`interval` + Elapsed real time since Bro started running. + + user_time: :bro:type:`interval` + User CPU seconds. + + system_time: :bro:type:`interval` + System CPU seconds. + + mem: :bro:type:`count` + Maximum memory consumed, in KB. + + minor_faults: :bro:type:`count` + Page faults not requiring actual I/O. + + major_faults: :bro:type:`count` + Page faults requiring actual I/O. + + num_swap: :bro:type:`count` + Times swapped out. + + blocking_input: :bro:type:`count` + Blocking input operations. + + blocking_output: :bro:type:`count` + Blocking output operations. + + num_context: :bro:type:`count` + Number of involuntary context switches. + + Statistics about Bro's process. + + .. bro:see:: get_proc_stats + + .. note:: All process-level values refer to Bro's main process only, not to + the child process it spawns for doing communication. + +.. bro:type:: RADIUS::AttributeList + + :Type: :bro:type:`vector` of :bro:type:`string` + + +.. bro:type:: RADIUS::Attributes + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`RADIUS::AttributeList` + + +.. bro:type:: RADIUS::Message + + :Type: :bro:type:`record` + + code: :bro:type:`count` + The type of message (Access-Request, Access-Accept, etc.). + + trans_id: :bro:type:`count` + The transaction ID. + + authenticator: :bro:type:`string` + The "authenticator" string. + + attributes: :bro:type:`RADIUS::Attributes` :bro:attr:`&optional` + Any attributes. + + +.. bro:type:: RDP::ClientCoreData + + :Type: :bro:type:`record` + + version_major: :bro:type:`count` + + version_minor: :bro:type:`count` + + desktop_width: :bro:type:`count` + + desktop_height: :bro:type:`count` + + color_depth: :bro:type:`count` + + sas_sequence: :bro:type:`count` + + keyboard_layout: :bro:type:`count` + + client_build: :bro:type:`count` + + client_name: :bro:type:`string` + + keyboard_type: :bro:type:`count` + + keyboard_sub: :bro:type:`count` + + keyboard_function_key: :bro:type:`count` + + ime_file_name: :bro:type:`string` + + post_beta2_color_depth: :bro:type:`count` :bro:attr:`&optional` + + client_product_id: :bro:type:`string` :bro:attr:`&optional` + + serial_number: :bro:type:`count` :bro:attr:`&optional` + + high_color_depth: :bro:type:`count` :bro:attr:`&optional` + + supported_color_depths: :bro:type:`count` :bro:attr:`&optional` + + ec_flags: :bro:type:`RDP::EarlyCapabilityFlags` :bro:attr:`&optional` + + dig_product_id: :bro:type:`string` :bro:attr:`&optional` + + +.. bro:type:: RDP::EarlyCapabilityFlags + + :Type: :bro:type:`record` + + support_err_info_pdu: :bro:type:`bool` + + want_32bpp_session: :bro:type:`bool` + + support_statusinfo_pdu: :bro:type:`bool` + + strong_asymmetric_keys: :bro:type:`bool` + + support_monitor_layout_pdu: :bro:type:`bool` + + support_netchar_autodetect: :bro:type:`bool` + + support_dynvc_gfx_protocol: :bro:type:`bool` + + support_dynamic_time_zone: :bro:type:`bool` + + support_heartbeat_pdu: :bro:type:`bool` + + +.. bro:type:: ReassemblerStats + + :Type: :bro:type:`record` + + file_size: :bro:type:`count` + Byte size of File reassembly tracking. + + frag_size: :bro:type:`count` + Byte size of Fragment reassembly tracking. + + tcp_size: :bro:type:`count` + Byte size of TCP reassembly tracking. + + unknown_size: :bro:type:`count` + Byte size of reassembly tracking for unknown purposes. + + Holds statistics for all types of reassembly. + + .. bro:see:: get_reassembler_stats + +.. bro:type:: ReporterStats + + :Type: :bro:type:`record` + + weirds: :bro:type:`count` + Number of total weirds encountered, before any rate-limiting. + + weirds_by_type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`count` + Number of times each individual weird is encountered, before any + rate-limiting is applied. + + Statistics about reporter messages and weirds. + + .. bro:see:: get_reporter_stats + +.. bro:type:: SMB1::Find_First2_Request_Args + + :Type: :bro:type:`record` + + search_attrs: :bro:type:`count` + File attributes to apply as a constraint to the search + + search_count: :bro:type:`count` + Max search results + + flags: :bro:type:`count` + Misc. flags for how the server should manage the transaction + once results are returned + + info_level: :bro:type:`count` + How detailed the information returned in the results should be + + search_storage_type: :bro:type:`count` + Specify whether to search for directories or files + + file_name: :bro:type:`string` + The string to serch for (note: may contain wildcards) + + +.. bro:type:: SMB1::Find_First2_Response_Args + + :Type: :bro:type:`record` + + sid: :bro:type:`count` + The server generated search identifier + + search_count: :bro:type:`count` + Number of results returned by the search + + end_of_search: :bro:type:`bool` + Whether or not the search can be continued using + the TRANS2_FIND_NEXT2 transaction + + ext_attr_error: :bro:type:`string` :bro:attr:`&optional` + An extended attribute name that couldn't be retrieved + + +.. bro:type:: SMB1::Header + + :Type: :bro:type:`record` + + command: :bro:type:`count` + The command number + + status: :bro:type:`count` + The status code + + flags: :bro:type:`count` + Flag set 1 + + flags2: :bro:type:`count` + Flag set 2 + + tid: :bro:type:`count` + Tree ID + + pid: :bro:type:`count` + Process ID + + uid: :bro:type:`count` + User ID + + mid: :bro:type:`count` + Multiplex ID + + An SMB1 header. + + .. bro:see:: smb1_message smb1_empty_response smb1_error + smb1_check_directory_request smb1_check_directory_response + smb1_close_request smb1_create_directory_request + smb1_create_directory_response smb1_echo_request + smb1_echo_response smb1_negotiate_request + smb1_negotiate_response smb1_nt_cancel_request + smb1_nt_create_andx_request smb1_nt_create_andx_response + smb1_query_information_request smb1_read_andx_request + smb1_read_andx_response smb1_session_setup_andx_request + smb1_session_setup_andx_response smb1_transaction_request + smb1_transaction2_request smb1_trans2_find_first2_request + smb1_trans2_query_path_info_request + smb1_trans2_get_dfs_referral_request + smb1_tree_connect_andx_request smb1_tree_connect_andx_response + smb1_tree_disconnect smb1_write_andx_request + smb1_write_andx_response + +.. bro:type:: SMB1::NegotiateCapabilities + + :Type: :bro:type:`record` + + raw_mode: :bro:type:`bool` + The server supports SMB_COM_READ_RAW and SMB_COM_WRITE_RAW + + mpx_mode: :bro:type:`bool` + The server supports SMB_COM_READ_MPX and SMB_COM_WRITE_MPX + + unicode: :bro:type:`bool` + The server supports unicode strings + + large_files: :bro:type:`bool` + The server supports large files with 64 bit offsets + + nt_smbs: :bro:type:`bool` + The server supports the SMBs particilar to the NT LM 0.12 dialect. Implies nt_find. + + rpc_remote_apis: :bro:type:`bool` + The server supports remote admin API requests via DCE-RPC + + status32: :bro:type:`bool` + The server can respond with 32 bit status codes in Status.Status + + level_2_oplocks: :bro:type:`bool` + The server supports level 2 oplocks + + lock_and_read: :bro:type:`bool` + The server supports SMB_COM_LOCK_AND_READ + + nt_find: :bro:type:`bool` + Reserved + + dfs: :bro:type:`bool` + The server is DFS aware + + infolevel_passthru: :bro:type:`bool` + The server supports NT information level requests passing through + + large_readx: :bro:type:`bool` + The server supports large SMB_COM_READ_ANDX (up to 64k) + + large_writex: :bro:type:`bool` + The server supports large SMB_COM_WRITE_ANDX (up to 64k) + + unix: :bro:type:`bool` + The server supports CIFS Extensions for UNIX + + bulk_transfer: :bro:type:`bool` + The server supports SMB_BULK_READ, SMB_BULK_WRITE + Note: No known implementations support this + + compressed_data: :bro:type:`bool` + The server supports compressed data transfer. Requires bulk_transfer. + Note: No known implementations support this + + extended_security: :bro:type:`bool` + The server supports extended security exchanges + + +.. bro:type:: SMB1::NegotiateRawMode + + :Type: :bro:type:`record` + + read_raw: :bro:type:`bool` + Read raw supported + + write_raw: :bro:type:`bool` + Write raw supported + + +.. bro:type:: SMB1::NegotiateResponse + + :Type: :bro:type:`record` + + core: :bro:type:`SMB1::NegotiateResponseCore` :bro:attr:`&optional` + If the server does not understand any of the dialect strings, or if + PC NETWORK PROGRAM 1.0 is the chosen dialect. + + lanman: :bro:type:`SMB1::NegotiateResponseLANMAN` :bro:attr:`&optional` + If the chosen dialect is greater than core up to and including + LANMAN 2.1. + + ntlm: :bro:type:`SMB1::NegotiateResponseNTLM` :bro:attr:`&optional` + If the chosen dialect is NT LM 0.12. + + +.. bro:type:: SMB1::NegotiateResponseCore + + :Type: :bro:type:`record` + + dialect_index: :bro:type:`count` + Index of selected dialect + + +.. bro:type:: SMB1::NegotiateResponseLANMAN + + :Type: :bro:type:`record` + + word_count: :bro:type:`count` + Count of parameter words (should be 13) + + dialect_index: :bro:type:`count` + Index of selected dialect + + security_mode: :bro:type:`SMB1::NegotiateResponseSecurity` + Security mode + + max_buffer_size: :bro:type:`count` + Max transmit buffer size (>= 1024) + + max_mpx_count: :bro:type:`count` + Max pending multiplexed requests + + max_number_vcs: :bro:type:`count` + Max number of virtual circuits (VCs - transport-layer connections) + between client and server + + raw_mode: :bro:type:`SMB1::NegotiateRawMode` + Raw mode + + session_key: :bro:type:`count` + Unique token identifying this session + + server_time: :bro:type:`time` + Current date and time at server + + encryption_key: :bro:type:`string` + The challenge encryption key + + primary_domain: :bro:type:`string` + The server's primary domain + + +.. bro:type:: SMB1::NegotiateResponseNTLM + + :Type: :bro:type:`record` + + word_count: :bro:type:`count` + Count of parameter words (should be 17) + + dialect_index: :bro:type:`count` + Index of selected dialect + + security_mode: :bro:type:`SMB1::NegotiateResponseSecurity` + Security mode + + max_buffer_size: :bro:type:`count` + Max transmit buffer size + + max_mpx_count: :bro:type:`count` + Max pending multiplexed requests + + max_number_vcs: :bro:type:`count` + Max number of virtual circuits (VCs - transport-layer connections) + between client and server + + max_raw_size: :bro:type:`count` + Max raw buffer size + + session_key: :bro:type:`count` + Unique token identifying this session + + capabilities: :bro:type:`SMB1::NegotiateCapabilities` + Server capabilities + + server_time: :bro:type:`time` + Current date and time at server + + encryption_key: :bro:type:`string` :bro:attr:`&optional` + The challenge encryption key. + Present only for non-extended security (i.e. capabilities$extended_security = F) + + domain_name: :bro:type:`string` :bro:attr:`&optional` + The name of the domain. + Present only for non-extended security (i.e. capabilities$extended_security = F) + + guid: :bro:type:`string` :bro:attr:`&optional` + A globally unique identifier assigned to the server. + Present only for extended security (i.e. capabilities$extended_security = T) + + security_blob: :bro:type:`string` + Opaque security blob associated with the security package if capabilities$extended_security = T + Otherwise, the challenge for challenge/response authentication. + + +.. bro:type:: SMB1::NegotiateResponseSecurity + + :Type: :bro:type:`record` + + user_level: :bro:type:`bool` + This indicates whether the server, as a whole, is operating under + Share Level or User Level security. + + challenge_response: :bro:type:`bool` + This indicates whether or not the server supports Challenge/Response + authentication. If the bit is false, then plaintext passwords must + be used. + + signatures_enabled: :bro:type:`bool` :bro:attr:`&optional` + This indicates if the server is capable of performing MAC message + signing. Note: Requires NT LM 0.12 or later. + + signatures_required: :bro:type:`bool` :bro:attr:`&optional` + This indicates if the server is requiring the use of a MAC in each + packet. If false, message signing is optional. Note: Requires NT LM 0.12 + or later. + + +.. bro:type:: SMB1::SessionSetupAndXCapabilities + + :Type: :bro:type:`record` + + unicode: :bro:type:`bool` + The client can use unicode strings + + large_files: :bro:type:`bool` + The client can deal with files having 64 bit offsets + + nt_smbs: :bro:type:`bool` + The client understands the SMBs introduced with NT LM 0.12 + Implies nt_find + + status32: :bro:type:`bool` + The client can receive 32 bit errors encoded in Status.Status + + level_2_oplocks: :bro:type:`bool` + The client understands Level II oplocks + + nt_find: :bro:type:`bool` + Reserved. Implied by nt_smbs. + + +.. bro:type:: SMB1::SessionSetupAndXRequest + + :Type: :bro:type:`record` + + word_count: :bro:type:`count` + Count of parameter words + - 10 for pre NT LM 0.12 + - 12 for NT LM 0.12 with extended security + - 13 for NT LM 0.12 without extended security + + max_buffer_size: :bro:type:`count` + Client maximum buffer size + + max_mpx_count: :bro:type:`count` + Actual maximum multiplexed pending request + + vc_number: :bro:type:`count` + Virtual circuit number. First VC == 0 + + session_key: :bro:type:`count` + Session key (valid iff vc_number > 0) + + native_os: :bro:type:`string` + Client's native operating system + + native_lanman: :bro:type:`string` + Client's native LAN Manager type + + account_name: :bro:type:`string` :bro:attr:`&optional` + Account name + Note: not set for NT LM 0.12 with extended security + + account_password: :bro:type:`string` :bro:attr:`&optional` + If challenge/response auth is not being used, this is the password. + Otherwise, it's the response to the server's challenge. + Note: Only set for pre NT LM 0.12 + + primary_domain: :bro:type:`string` :bro:attr:`&optional` + Client's primary domain, if known + Note: not set for NT LM 0.12 with extended security + + case_insensitive_password: :bro:type:`string` :bro:attr:`&optional` + Case insensitive password + Note: only set for NT LM 0.12 without extended security + + case_sensitive_password: :bro:type:`string` :bro:attr:`&optional` + Case sensitive password + Note: only set for NT LM 0.12 without extended security + + security_blob: :bro:type:`string` :bro:attr:`&optional` + Security blob + Note: only set for NT LM 0.12 with extended security + + capabilities: :bro:type:`SMB1::SessionSetupAndXCapabilities` :bro:attr:`&optional` + Client capabilities + Note: only set for NT LM 0.12 + + +.. bro:type:: SMB1::SessionSetupAndXResponse + + :Type: :bro:type:`record` + + word_count: :bro:type:`count` + Count of parameter words (should be 3 for pre NT LM 0.12 and 4 for NT LM 0.12) + + is_guest: :bro:type:`bool` :bro:attr:`&optional` + Were we logged in as a guest user? + + native_os: :bro:type:`string` :bro:attr:`&optional` + Server's native operating system + + native_lanman: :bro:type:`string` :bro:attr:`&optional` + Server's native LAN Manager type + + primary_domain: :bro:type:`string` :bro:attr:`&optional` + Server's primary domain + + security_blob: :bro:type:`string` :bro:attr:`&optional` + Security blob if NTLM + + +.. bro:type:: SMB1::Trans2_Args + + :Type: :bro:type:`record` + + total_param_count: :bro:type:`count` + Total parameter count + + total_data_count: :bro:type:`count` + Total data count + + max_param_count: :bro:type:`count` + Max parameter count + + max_data_count: :bro:type:`count` + Max data count + + max_setup_count: :bro:type:`count` + Max setup count + + flags: :bro:type:`count` + Flags + + trans_timeout: :bro:type:`count` + Timeout + + param_count: :bro:type:`count` + Parameter count + + param_offset: :bro:type:`count` + Parameter offset + + data_count: :bro:type:`count` + Data count + + data_offset: :bro:type:`count` + Data offset + + setup_count: :bro:type:`count` + Setup count + + +.. bro:type:: SMB1::Trans2_Sec_Args + + :Type: :bro:type:`record` + + total_param_count: :bro:type:`count` + Total parameter count + + total_data_count: :bro:type:`count` + Total data count + + param_count: :bro:type:`count` + Parameter count + + param_offset: :bro:type:`count` + Parameter offset + + param_displacement: :bro:type:`count` + Parameter displacement + + data_count: :bro:type:`count` + Data count + + data_offset: :bro:type:`count` + Data offset + + data_displacement: :bro:type:`count` + Data displacement + + FID: :bro:type:`count` + File ID + + +.. bro:type:: SMB1::Trans_Sec_Args + + :Type: :bro:type:`record` + + total_param_count: :bro:type:`count` + Total parameter count + + total_data_count: :bro:type:`count` + Total data count + + param_count: :bro:type:`count` + Parameter count + + param_offset: :bro:type:`count` + Parameter offset + + param_displacement: :bro:type:`count` + Parameter displacement + + data_count: :bro:type:`count` + Data count + + data_offset: :bro:type:`count` + Data offset + + data_displacement: :bro:type:`count` + Data displacement + + +.. bro:type:: SMB2::CloseResponse + + :Type: :bro:type:`record` + + alloc_size: :bro:type:`count` + The size, in bytes of the data that is allocated to the file. + + eof: :bro:type:`count` + The size, in bytes, of the file. + + times: :bro:type:`SMB::MACTimes` + The creation, last access, last write, and change times. + + attrs: :bro:type:`SMB2::FileAttrs` + The attributes of the file. + + The response to an SMB2 *close* request, which is used by the client to close an instance + of a file that was opened previously. + + For more information, see MS-SMB2:2.2.16 + + .. bro:see:: smb2_close_response + +.. bro:type:: SMB2::CreateRequest + + :Type: :bro:type:`record` + + filename: :bro:type:`string` + Name of the file + + disposition: :bro:type:`count` + Defines the action the server MUST take if the file that is specified already exists. + + create_options: :bro:type:`count` + Specifies the options to be applied when creating or opening the file. + + The request sent by the client to request either creation of or access to a file. + + For more information, see MS-SMB2:2.2.13 + + .. bro:see:: smb2_create_request + +.. bro:type:: SMB2::CreateResponse + + :Type: :bro:type:`record` + + file_id: :bro:type:`SMB2::GUID` + The SMB2 GUID for the file. + + size: :bro:type:`count` + Size of the file. + + times: :bro:type:`SMB::MACTimes` + Timestamps associated with the file in question. + + attrs: :bro:type:`SMB2::FileAttrs` + File attributes. + + create_action: :bro:type:`count` + The action taken in establishing the open. + + The response to an SMB2 *create_request* request, which is sent by the client to request + either creation of or access to a file. + + For more information, see MS-SMB2:2.2.14 + + .. bro:see:: smb2_create_response + +.. bro:type:: SMB2::FileAttrs + + :Type: :bro:type:`record` + + read_only: :bro:type:`bool` + The file is read only. Applications can read the file but cannot + write to it or delete it. + + hidden: :bro:type:`bool` + The file is hidden. It is not to be included in an ordinary directory listing. + + system: :bro:type:`bool` + The file is part of or is used exclusively by the operating system. + + directory: :bro:type:`bool` + The file is a directory. + + archive: :bro:type:`bool` + The file has not been archived since it was last modified. Applications use + this attribute to mark files for backup or removal. + + normal: :bro:type:`bool` + The file has no other attributes set. This attribute is valid only if used alone. + + temporary: :bro:type:`bool` + The file is temporary. This is a hint to the cache manager that it does not need + to flush the file to backing storage. + + sparse_file: :bro:type:`bool` + A file that is a sparse file. + + reparse_point: :bro:type:`bool` + A file or directory that has an associated reparse point. + + compressed: :bro:type:`bool` + The file or directory is compressed. For a file, this means that all of the data + in the file is compressed. For a directory, this means that compression is the + default for newly created files and subdirectories. + + offline: :bro:type:`bool` + The data in this file is not available immediately. This attribute indicates that + the file data is physically moved to offline storage. This attribute is used by + Remote Storage, which is hierarchical storage management software. + + not_content_indexed: :bro:type:`bool` + A file or directory that is not indexed by the content indexing service. + + encrypted: :bro:type:`bool` + A file or directory that is encrypted. For a file, all data streams in the file + are encrypted. For a directory, encryption is the default for newly created files + and subdirectories. + + integrity_stream: :bro:type:`bool` + A file or directory that is configured with integrity support. For a file, all + data streams in the file have integrity support. For a directory, integrity support + is the default for newly created files and subdirectories, unless the caller + specifies otherwise. + + no_scrub_data: :bro:type:`bool` + A file or directory that is configured to be excluded from the data integrity scan. + + A series of boolean flags describing basic and extended file attributes for SMB2. + + For more information, see MS-CIFS:2.2.1.2.3 and MS-FSCC:2.6 + + .. bro:see:: smb2_create_response + +.. bro:type:: SMB2::GUID + + :Type: :bro:type:`record` + + persistent: :bro:type:`count` + A file handle that remains persistent when reconnected after a disconnect + + volatile: :bro:type:`count` + A file handle that can be changed when reconnected after a disconnect + + An SMB2 globally unique identifier which identifies a file. + + For more information, see MS-SMB2:2.2.14.1 + + .. bro:see:: smb2_close_request smb2_create_response smb2_read_request + smb2_file_rename smb2_file_delete smb2_write_request + +.. bro:type:: SMB2::Header + + :Type: :bro:type:`record` + + credit_charge: :bro:type:`count` + The number of credits that this request consumes + + status: :bro:type:`count` + In a request, this is an indication to the server about the client's channel + change. In a response, this is the status field + + command: :bro:type:`count` + The command code of the packet + + credits: :bro:type:`count` + The number of credits the client is requesting, or the number of credits + granted to the client in a response. + + flags: :bro:type:`count` + A flags field, which indicates how to process the operation (e.g. asynchronously) + + message_id: :bro:type:`count` + A value that uniquely identifies the message request/response pair across all + messages that are sent on the same transport protocol connection + + process_id: :bro:type:`count` + A value that uniquely identifies the process that generated the event. + + tree_id: :bro:type:`count` + A value that uniquely identifies the tree connect for the command. + + session_id: :bro:type:`count` + A value that uniquely identifies the established session for the command. + + signature: :bro:type:`string` + The 16-byte signature of the message, if SMB2_FLAGS_SIGNED is set in the ``flags`` + field. + + An SMB2 header. + + For more information, see MS-SMB2:2.2.1.1 and MS-SMB2:2.2.1.2 + + .. bro:see:: smb2_message smb2_close_request smb2_close_response + smb2_create_request smb2_create_response smb2_negotiate_request + smb2_negotiate_response smb2_read_request + smb2_session_setup_request smb2_session_setup_response + smb2_file_rename smb2_file_delete + smb2_tree_connect_request smb2_tree_connect_response + smb2_write_request + +.. bro:type:: SMB2::NegotiateResponse + + :Type: :bro:type:`record` + + dialect_revision: :bro:type:`count` + The preferred common SMB2 Protocol dialect number from the array that was sent in the SMB2 + NEGOTIATE Request. + + security_mode: :bro:type:`count` + The security mode field specifies whether SMB signing is enabled, required at the server, or both. + + server_guid: :bro:type:`string` + A globally unique identifier that is generate by the server to uniquely identify the server. + + system_time: :bro:type:`time` + The system time of the SMB2 server when the SMB2 NEGOTIATE Request was processed. + + server_start_time: :bro:type:`time` + The SMB2 server start time. + + The response to an SMB2 *negotiate* request, which is used by tghe client to notify the server + what dialects of the SMB2 protocol the client understands. + + For more information, see MS-SMB2:2.2.4 + + .. bro:see:: smb2_negotiate_response + +.. bro:type:: SMB2::SessionSetupFlags + + :Type: :bro:type:`record` + + guest: :bro:type:`bool` + If set, the client has been authenticated as a guest user. + + anonymous: :bro:type:`bool` + If set, the client has been authenticated as an anonymous user. + + encrypt: :bro:type:`bool` + If set, the server requires encryption of messages on this session. + + A flags field that indicates additional information about the session that's sent in the + *session_setup* response. + + For more information, see MS-SMB2:2.2.6 + + .. bro:see:: smb2_session_setup_response + +.. bro:type:: SMB2::SessionSetupRequest + + :Type: :bro:type:`record` + + security_mode: :bro:type:`count` + The security mode field specifies whether SMB signing is enabled or required at the client. + + The request sent by the client to request a new authenticated session + within a new or existing SMB 2 Protocol transport connection to the server. + + For more information, see MS-SMB2:2.2.5 + + .. bro:see:: smb2_session_setup_request + +.. bro:type:: SMB2::SessionSetupResponse + + :Type: :bro:type:`record` + + flags: :bro:type:`SMB2::SessionSetupFlags` + Additional information about the session + + The response to an SMB2 *session_setup* request, which is sent by the client to request a + new authenticated session within a new or existing SMB 2 Protocol transport connection + to the server. + + For more information, see MS-SMB2:2.2.6 + + .. bro:see:: smb2_session_setup_response + +.. bro:type:: SMB2::TreeConnectResponse + + :Type: :bro:type:`record` + + share_type: :bro:type:`count` + The type of share being accessed. Physical disk, named pipe, or printer. + + The response to an SMB2 *tree_connect* request, which is sent by the client to request + access to a particular share on the server. + + For more information, see MS-SMB2:2.2.9 + + .. bro:see:: smb2_tree_connect_response + +.. bro:type:: SMB::MACTimes + + :Type: :bro:type:`record` + + modified: :bro:type:`time` :bro:attr:`&log` + The time when data was last written to the file. + + accessed: :bro:type:`time` :bro:attr:`&log` + The time when the file was last accessed. + + created: :bro:type:`time` :bro:attr:`&log` + The time the file was created. + + changed: :bro:type:`time` :bro:attr:`&log` + The time when the file was last modified. + :Attributes: :bro:attr:`&log` + + MAC times for a file. + + For more information, see MS-SMB2:2.2.16 + + .. bro:see:: smb1_nt_create_andx_response smb2_create_response + +.. bro:type:: SNMP::Binding + + :Type: :bro:type:`record` + + oid: :bro:type:`string` + + value: :bro:type:`SNMP::ObjectValue` + + The ``VarBind`` data structure from either :rfc:`1157` or + :rfc:`3416`, which maps an Object Identifier to a value. + +.. bro:type:: SNMP::Bindings + + :Type: :bro:type:`vector` of :bro:type:`SNMP::Binding` + + A ``VarBindList`` data structure from either :rfc:`1157` or :rfc:`3416`. + A sequences of :bro:see:`SNMP::Binding`, which maps an OIDs to values. + +.. bro:type:: SNMP::BulkPDU + + :Type: :bro:type:`record` + + request_id: :bro:type:`int` + + non_repeaters: :bro:type:`count` + + max_repititions: :bro:type:`count` + + bindings: :bro:type:`SNMP::Bindings` + + A ``BulkPDU`` data structure from :rfc:`3416`. + +.. bro:type:: SNMP::Header + + :Type: :bro:type:`record` + + version: :bro:type:`count` + + v1: :bro:type:`SNMP::HeaderV1` :bro:attr:`&optional` + Set when ``version`` is 0. + + v2: :bro:type:`SNMP::HeaderV2` :bro:attr:`&optional` + Set when ``version`` is 1. + + v3: :bro:type:`SNMP::HeaderV3` :bro:attr:`&optional` + Set when ``version`` is 3. + + A generic SNMP header data structure that may include data from + any version of SNMP. The value of the ``version`` field + determines what header field is initialized. + +.. bro:type:: SNMP::HeaderV1 + + :Type: :bro:type:`record` + + community: :bro:type:`string` + + The top-level message data structure of an SNMPv1 datagram, not + including the PDU data. See :rfc:`1157`. + +.. bro:type:: SNMP::HeaderV2 + + :Type: :bro:type:`record` + + community: :bro:type:`string` + + The top-level message data structure of an SNMPv2 datagram, not + including the PDU data. See :rfc:`1901`. + +.. bro:type:: SNMP::HeaderV3 + + :Type: :bro:type:`record` + + id: :bro:type:`count` + + max_size: :bro:type:`count` + + flags: :bro:type:`count` + + auth_flag: :bro:type:`bool` + + priv_flag: :bro:type:`bool` + + reportable_flag: :bro:type:`bool` + + security_model: :bro:type:`count` + + security_params: :bro:type:`string` + + pdu_context: :bro:type:`SNMP::ScopedPDU_Context` :bro:attr:`&optional` + + The top-level message data structure of an SNMPv3 datagram, not + including the PDU data. See :rfc:`3412`. + +.. bro:type:: SNMP::ObjectValue + + :Type: :bro:type:`record` + + tag: :bro:type:`count` + + oid: :bro:type:`string` :bro:attr:`&optional` + + signed: :bro:type:`int` :bro:attr:`&optional` + + unsigned: :bro:type:`count` :bro:attr:`&optional` + + address: :bro:type:`addr` :bro:attr:`&optional` + + octets: :bro:type:`string` :bro:attr:`&optional` + + A generic SNMP object value, that may include any of the + valid ``ObjectSyntax`` values from :rfc:`1155` or :rfc:`3416`. + The value is decoded whenever possible and assigned to + the appropriate field, which can be determined from the value + of the ``tag`` field. For tags that can't be mapped to an + appropriate type, the ``octets`` field holds the BER encoded + ASN.1 content if there is any (though, ``octets`` is may also + be used for other tags such as OCTET STRINGS or Opaque). Null + values will only have their corresponding tag value set. + +.. bro:type:: SNMP::PDU + + :Type: :bro:type:`record` + + request_id: :bro:type:`int` + + error_status: :bro:type:`int` + + error_index: :bro:type:`int` + + bindings: :bro:type:`SNMP::Bindings` + + A ``PDU`` data structure from either :rfc:`1157` or :rfc:`3416`. + +.. bro:type:: SNMP::ScopedPDU_Context + + :Type: :bro:type:`record` + + engine_id: :bro:type:`string` + + name: :bro:type:`string` + + The ``ScopedPduData`` data structure of an SNMPv3 datagram, not + including the PDU data (i.e. just the "context" fields). + See :rfc:`3412`. + +.. bro:type:: SNMP::TrapPDU + + :Type: :bro:type:`record` + + enterprise: :bro:type:`string` + + agent: :bro:type:`addr` + + generic_trap: :bro:type:`int` + + specific_trap: :bro:type:`int` + + time_stamp: :bro:type:`count` + + bindings: :bro:type:`SNMP::Bindings` + + A ``Trap-PDU`` data structure from :rfc:`1157`. + +.. bro:type:: SOCKS::Address + + :Type: :bro:type:`record` + + host: :bro:type:`addr` :bro:attr:`&optional` :bro:attr:`&log` + + name: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + :Attributes: :bro:attr:`&log` + + This record is for a SOCKS client or server to provide either a + name or an address to represent a desired or established connection. + +.. bro:type:: SSH::Algorithm_Prefs + + :Type: :bro:type:`record` + + client_to_server: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` + The algorithm preferences for client to server communication + + server_to_client: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` + The algorithm preferences for server to client communication + + The client and server each have some preferences for the algorithms used + in each direction. + +.. bro:type:: SSH::Capabilities + + :Type: :bro:type:`record` + + kex_algorithms: :bro:type:`string_vec` + Key exchange algorithms + + server_host_key_algorithms: :bro:type:`string_vec` + The algorithms supported for the server host key + + encryption_algorithms: :bro:type:`SSH::Algorithm_Prefs` + Symmetric encryption algorithm preferences + + mac_algorithms: :bro:type:`SSH::Algorithm_Prefs` + Symmetric MAC algorithm preferences + + compression_algorithms: :bro:type:`SSH::Algorithm_Prefs` + Compression algorithm preferences + + languages: :bro:type:`SSH::Algorithm_Prefs` :bro:attr:`&optional` + Language preferences + + is_server: :bro:type:`bool` + Are these the capabilities of the server? + + This record lists the preferences of an SSH endpoint for + algorithm selection. During the initial :abbr:`SSH (Secure Shell)` + key exchange, each endpoint lists the algorithms + that it supports, in order of preference. See + :rfc:`4253#section-7.1` for details. + +.. bro:type:: SSL::SignatureAndHashAlgorithm + + :Type: :bro:type:`record` + + HashAlgorithm: :bro:type:`count` + Hash algorithm number + + SignatureAlgorithm: :bro:type:`count` + Signature algorithm number + + +.. bro:type:: SYN_packet + + :Type: :bro:type:`record` + + is_orig: :bro:type:`bool` + True if the packet was sent the connection's originator. + + DF: :bro:type:`bool` + True if the *don't fragment* is set in the IP header. + + ttl: :bro:type:`count` + The IP header's time-to-live. + + size: :bro:type:`count` + The size of the packet's payload as specified in the IP header. + + win_size: :bro:type:`count` + The window size from the TCP header. + + win_scale: :bro:type:`int` + The window scale option if present, or -1 if not. + + MSS: :bro:type:`count` + The maximum segment size if present, or 0 if not. + + SACK_OK: :bro:type:`bool` + True if the *SACK* option is present. + + Fields of a SYN packet. + + .. bro:see:: connection_SYN_packet + +.. bro:type:: ThreadStats + + :Type: :bro:type:`record` + + num_threads: :bro:type:`count` + + Statistics about threads. + + .. bro:see:: get_thread_stats + +.. bro:type:: TimerStats + + :Type: :bro:type:`record` + + current: :bro:type:`count` + Current number of pending timers. + + max: :bro:type:`count` + Maximum number of concurrent timers pending so far. + + cumulative: :bro:type:`count` + Cumulative number of timers scheduled. + + Statistics of timers. + + .. bro:see:: get_timer_stats + +.. bro:type:: Tunnel::EncapsulatingConn + + :Type: :bro:type:`record` + + cid: :bro:type:`conn_id` :bro:attr:`&log` + The 4-tuple of the encapsulating "connection". In case of an + IP-in-IP tunnel the ports will be set to 0. The direction + (i.e., orig and resp) are set according to the first tunneled + packet seen and not according to the side that established + the tunnel. + + tunnel_type: :bro:type:`Tunnel::Type` :bro:attr:`&log` + The type of tunnel. + + uid: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + A globally unique identifier that, for non-IP-in-IP tunnels, + cross-references the *uid* field of :bro:type:`connection`. + :Attributes: :bro:attr:`&log` + + Records the identity of an encapsulating parent of a tunneled connection. + +.. bro:type:: Unified2::IDSEvent + + :Type: :bro:type:`record` + + sensor_id: :bro:type:`count` + + event_id: :bro:type:`count` + + ts: :bro:type:`time` + + signature_id: :bro:type:`count` + + generator_id: :bro:type:`count` + + signature_revision: :bro:type:`count` + + classification_id: :bro:type:`count` + + priority_id: :bro:type:`count` + + src_ip: :bro:type:`addr` + + dst_ip: :bro:type:`addr` + + src_p: :bro:type:`port` + + dst_p: :bro:type:`port` + + impact_flag: :bro:type:`count` + + impact: :bro:type:`count` + + blocked: :bro:type:`count` + + mpls_label: :bro:type:`count` :bro:attr:`&optional` + Not available in "legacy" IDS events. + + vlan_id: :bro:type:`count` :bro:attr:`&optional` + Not available in "legacy" IDS events. + + packet_action: :bro:type:`count` :bro:attr:`&optional` + Only available in "legacy" IDS events. + + +.. bro:type:: Unified2::Packet + + :Type: :bro:type:`record` + + sensor_id: :bro:type:`count` + + event_id: :bro:type:`count` + + event_second: :bro:type:`count` + + packet_ts: :bro:type:`time` + + link_type: :bro:type:`count` + + data: :bro:type:`string` + + +.. bro:type:: X509::BasicConstraints + + :Type: :bro:type:`record` + + ca: :bro:type:`bool` :bro:attr:`&log` + CA flag set? + + path_len: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Maximum path length + :Attributes: :bro:attr:`&log` + + +.. bro:type:: X509::Certificate + + :Type: :bro:type:`record` + + version: :bro:type:`count` :bro:attr:`&log` + Version number. + + serial: :bro:type:`string` :bro:attr:`&log` + Serial number. + + subject: :bro:type:`string` :bro:attr:`&log` + Subject. + + issuer: :bro:type:`string` :bro:attr:`&log` + Issuer. + + cn: :bro:type:`string` :bro:attr:`&optional` + Last (most specific) common name. + + not_valid_before: :bro:type:`time` :bro:attr:`&log` + Timestamp before when certificate is not valid. + + not_valid_after: :bro:type:`time` :bro:attr:`&log` + Timestamp after when certificate is not valid. + + key_alg: :bro:type:`string` :bro:attr:`&log` + Name of the key algorithm + + sig_alg: :bro:type:`string` :bro:attr:`&log` + Name of the signature algorithm + + key_type: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Key type, if key parseable by openssl (either rsa, dsa or ec) + + key_length: :bro:type:`count` :bro:attr:`&optional` :bro:attr:`&log` + Key length in bits + + exponent: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Exponent, if RSA-certificate + + curve: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + Curve, if EC-certificate + + +.. bro:type:: X509::Extension + + :Type: :bro:type:`record` + + name: :bro:type:`string` + Long name of extension. oid if name not known + + short_name: :bro:type:`string` :bro:attr:`&optional` + Short name of extension if known + + oid: :bro:type:`string` + Oid of extension + + critical: :bro:type:`bool` + True if extension is critical + + value: :bro:type:`string` + Extension content parsed to string for known extensions. Raw data otherwise. + + +.. bro:type:: X509::Result + + :Type: :bro:type:`record` + + result: :bro:type:`int` + OpenSSL result code + + result_string: :bro:type:`string` + Result as string + + chain_certs: :bro:type:`vector` of :bro:type:`opaque` of x509 :bro:attr:`&optional` + References to the final certificate chain, if verification successful. End-host certificate is first. + + Result of an X509 certificate chain verification + +.. bro:type:: X509::SubjectAlternativeName + + :Type: :bro:type:`record` + + dns: :bro:type:`string_vec` :bro:attr:`&optional` :bro:attr:`&log` + List of DNS entries in SAN + + uri: :bro:type:`string_vec` :bro:attr:`&optional` :bro:attr:`&log` + List of URI entries in SAN + + email: :bro:type:`string_vec` :bro:attr:`&optional` :bro:attr:`&log` + List of email entries in SAN + + ip: :bro:type:`addr_vec` :bro:attr:`&optional` :bro:attr:`&log` + List of IP entries in SAN + + other_fields: :bro:type:`bool` + True if the certificate contained other, not recognized or parsed name fields + + +.. bro:type:: addr_set + + :Type: :bro:type:`set` [:bro:type:`addr`] + + A set of addresses. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: addr_vec + + :Type: :bro:type:`vector` of :bro:type:`addr` + + A vector of addresses. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: any_vec + + :Type: :bro:type:`vector` of :bro:type:`any` + + A vector of any, used by some builtin functions to store a list of varying + types. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: backdoor_endp_stats + + :Type: :bro:type:`record` + + is_partial: :bro:type:`bool` + + num_pkts: :bro:type:`count` + + num_8k0_pkts: :bro:type:`count` + + num_8k4_pkts: :bro:type:`count` + + num_lines: :bro:type:`count` + + num_normal_lines: :bro:type:`count` + + num_bytes: :bro:type:`count` + + num_7bit_ascii: :bro:type:`count` + + Deprecated. + +.. bro:type:: bittorrent_benc_dir + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`bittorrent_benc_value` + + A table of BitTorrent "benc" values. + + .. bro:see:: bt_tracker_response + +.. bro:type:: bittorrent_benc_value + + :Type: :bro:type:`record` + + i: :bro:type:`int` :bro:attr:`&optional` + TODO. + + s: :bro:type:`string` :bro:attr:`&optional` + TODO. + + d: :bro:type:`string` :bro:attr:`&optional` + TODO. + + l: :bro:type:`string` :bro:attr:`&optional` + TODO. + + BitTorrent "benc" value. Note that "benc" = Bencode ("Bee-Encode"), per + http://en.wikipedia.org/wiki/Bencode. + + .. bro:see:: bittorrent_benc_dir + +.. bro:type:: bittorrent_peer + + :Type: :bro:type:`record` + + h: :bro:type:`addr` + The peer's address. + + p: :bro:type:`port` + The peer's port. + + A BitTorrent peer. + + .. bro:see:: bittorrent_peer_set + +.. bro:type:: bittorrent_peer_set + + :Type: :bro:type:`set` [:bro:type:`bittorrent_peer`] + + A set of BitTorrent peers. + + .. bro:see:: bt_tracker_response + +.. bro:type:: bt_tracker_headers + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + + Header table type used by BitTorrent analyzer. + + .. bro:see:: bt_tracker_request bt_tracker_response + bt_tracker_response_not_ok + +.. bro:type:: call_argument + + :Type: :bro:type:`record` + + name: :bro:type:`string` + The name of the parameter. + + type_name: :bro:type:`string` + The name of the parameters's type. + + default_val: :bro:type:`any` :bro:attr:`&optional` + The value of the :bro:attr:`&default` attribute if defined. + + value: :bro:type:`any` :bro:attr:`&optional` + The value of the parameter as passed into a given call instance. + Might be unset in the case a :bro:attr:`&default` attribute is + defined. + + Meta-information about a parameter to a function/event. + + .. bro:see:: call_argument_vector new_event + +.. bro:type:: call_argument_vector + + :Type: :bro:type:`vector` of :bro:type:`call_argument` + + Vector type used to capture parameters of a function/event call. + + .. bro:see:: call_argument new_event + +.. bro:type:: conn_id + + :Type: :bro:type:`record` + + orig_h: :bro:type:`addr` :bro:attr:`&log` + The originator's IP address. + + orig_p: :bro:type:`port` :bro:attr:`&log` + The originator's port number. + + resp_h: :bro:type:`addr` :bro:attr:`&log` + The responder's IP address. + + resp_p: :bro:type:`port` :bro:attr:`&log` + The responder's port number. + :Attributes: :bro:attr:`&log` + + A connection's identifying 4-tuple of endpoints and ports. + + .. note:: It's actually a 5-tuple: the transport-layer protocol is stored as + part of the port values, `orig_p` and `resp_p`, and can be extracted from + them with :bro:id:`get_port_transport_proto`. + +.. bro:type:: connection + + :Type: :bro:type:`record` + + id: :bro:type:`conn_id` + The connection's identifying 4-tuple. + + orig: :bro:type:`endpoint` + Statistics about originator side. + + resp: :bro:type:`endpoint` + Statistics about responder side. + + start_time: :bro:type:`time` + The timestamp of the connection's first packet. + + duration: :bro:type:`interval` + The duration of the conversation. Roughly speaking, this is the + interval between first and last data packet (low-level TCP details + may adjust it somewhat in ambiguous cases). + + service: :bro:type:`set` [:bro:type:`string`] + The set of services the connection is using as determined by Bro's + dynamic protocol detection. Each entry is the label of an analyzer + that confirmed that it could parse the connection payload. While + typically, there will be at most one entry for each connection, in + principle it is possible that more than one protocol analyzer is able + to parse the same data. If so, all will be recorded. Also note that + the recorded services are independent of any transport-level protocols. + + history: :bro:type:`string` + State history of connections. See *history* in :bro:see:`Conn::Info`. + + uid: :bro:type:`string` + A globally unique connection identifier. For each connection, Bro + creates an ID that is very likely unique across independent Bro runs. + These IDs can thus be used to tag and locate information associated + with that connection. + + tunnel: :bro:type:`EncapsulatingConnVector` :bro:attr:`&optional` + If the connection is tunneled, this field contains information about + the encapsulating "connection(s)" with the outermost one starting + at index zero. It's also always the first such encapsulation seen + for the connection unless the :bro:id:`tunnel_changed` event is + handled and reassigns this field to the new encapsulation. + + vlan: :bro:type:`int` :bro:attr:`&optional` + The outer VLAN, if applicable for this connection. + + inner_vlan: :bro:type:`int` :bro:attr:`&optional` + The inner VLAN, if applicable for this connection. + + dpd: :bro:type:`DPD::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/dpd/main.bro` is loaded) + + + conn: :bro:type:`Conn::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/conn/main.bro` is loaded) + + + extract_orig: :bro:type:`bool` :bro:attr:`&default` = :bro:see:`Conn::default_extract` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/conn/contents.bro` is loaded) + + + extract_resp: :bro:type:`bool` :bro:attr:`&default` = :bro:see:`Conn::default_extract` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/conn/contents.bro` is loaded) + + + thresholds: :bro:type:`ConnThreshold::Thresholds` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/conn/thresholds.bro` is loaded) + + + dce_rpc: :bro:type:`DCE_RPC::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/dce-rpc/main.bro` is loaded) + + + dce_rpc_state: :bro:type:`DCE_RPC::State` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/dce-rpc/main.bro` is loaded) + + + dce_rpc_backing: :bro:type:`table` [:bro:type:`count`] of :bro:type:`DCE_RPC::BackingState` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/dce-rpc/main.bro` is loaded) + + + dhcp: :bro:type:`DHCP::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/dhcp/main.bro` is loaded) + + + dnp3: :bro:type:`DNP3::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/dnp3/main.bro` is loaded) + + + dns: :bro:type:`DNS::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/dns/main.bro` is loaded) + + + dns_state: :bro:type:`DNS::State` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/dns/main.bro` is loaded) + + + ftp: :bro:type:`FTP::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ftp/main.bro` is loaded) + + + ftp_data_reuse: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ftp/main.bro` is loaded) + + + ssl: :bro:type:`SSL::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssl/main.bro` is loaded) + + + http: :bro:type:`HTTP::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/main.bro` is loaded) + + + http_state: :bro:type:`HTTP::State` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/main.bro` is loaded) + + + irc: :bro:type:`IRC::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/irc/main.bro` is loaded) + + IRC session information. + + krb: :bro:type:`KRB::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/krb/main.bro` is loaded) + + + modbus: :bro:type:`Modbus::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/modbus/main.bro` is loaded) + + + mysql: :bro:type:`MySQL::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/mysql/main.bro` is loaded) + + + ntlm: :bro:type:`NTLM::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ntlm/main.bro` is loaded) + + + radius: :bro:type:`RADIUS::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/radius/main.bro` is loaded) + + + rdp: :bro:type:`RDP::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/rdp/main.bro` is loaded) + + + rfb: :bro:type:`RFB::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/rfb/main.bro` is loaded) + + + sip: :bro:type:`SIP::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/sip/main.bro` is loaded) + + + sip_state: :bro:type:`SIP::State` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/sip/main.bro` is loaded) + + + snmp: :bro:type:`SNMP::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/snmp/main.bro` is loaded) + + + smb_state: :bro:type:`SMB::State` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/smb/main.bro` is loaded) + + + smtp: :bro:type:`SMTP::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/smtp/main.bro` is loaded) + + + smtp_state: :bro:type:`SMTP::State` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/smtp/main.bro` is loaded) + + + socks: :bro:type:`SOCKS::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/socks/main.bro` is loaded) + + + ssh: :bro:type:`SSH::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssh/main.bro` is loaded) + + + syslog: :bro:type:`Syslog::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/syslog/main.bro` is loaded) + + + known_services_done: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/conn/known-services.bro` is loaded) + + + A connection. This is Bro's basic connection type describing IP- and + transport-layer information about the conversation. Note that Bro uses a + liberal interpretation of "connection" and associates instances of this type + also with UDP and ICMP flows. + +.. bro:type:: count_set + + :Type: :bro:type:`set` [:bro:type:`count`] + + A set of counts. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: dns_answer + + :Type: :bro:type:`record` + + answer_type: :bro:type:`count` + Answer type. One of :bro:see:`DNS_QUERY`, :bro:see:`DNS_ANS`, + :bro:see:`DNS_AUTH` and :bro:see:`DNS_ADDL`. + + query: :bro:type:`string` + Query. + + qtype: :bro:type:`count` + Query type. + + qclass: :bro:type:`count` + Query class. + + TTL: :bro:type:`interval` + Time-to-live. + + The general part of a DNS reply. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_HINFO_reply + dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply dns_SRV_reply + dns_TXT_reply dns_WKS_reply + +.. bro:type:: dns_dnskey_rr + + :Type: :bro:type:`record` + + query: :bro:type:`string` + Query. + + answer_type: :bro:type:`count` + Ans type. + + flags: :bro:type:`count` + flags filed. + + protocol: :bro:type:`count` + Protocol, should be always 3 for DNSSEC. + + algorithm: :bro:type:`count` + Algorithm for Public Key. + + public_key: :bro:type:`string` + Public Key + + is_query: :bro:type:`count` + The RR is a query/Response. + + A DNSSEC DNSKEY record. + + .. bro:see:: dns_DNSKEY + +.. bro:type:: dns_ds_rr + + :Type: :bro:type:`record` + + query: :bro:type:`string` + Query. + + answer_type: :bro:type:`count` + Ans type. + + key_tag: :bro:type:`count` + flags filed. + + algorithm: :bro:type:`count` + Algorithm for Public Key. + + digest_type: :bro:type:`count` + Digest Type. + + digest_val: :bro:type:`string` + Digest Value. + + is_query: :bro:type:`count` + The RR is a query/Response. + + A DNSSEC DS record. + + .. bro:see:: dns_DS + +.. bro:type:: dns_edns_additional + + :Type: :bro:type:`record` + + query: :bro:type:`string` + Query. + + qtype: :bro:type:`count` + Query type. + + t: :bro:type:`count` + TODO. + + payload_size: :bro:type:`count` + TODO. + + extended_rcode: :bro:type:`count` + Extended return code. + + version: :bro:type:`count` + Version. + + z_field: :bro:type:`count` + TODO. + + TTL: :bro:type:`interval` + Time-to-live. + + is_query: :bro:type:`count` + TODO. + + An additional DNS EDNS record. + + .. bro:see:: dns_EDNS_addl + +.. bro:type:: dns_mapping + + :Type: :bro:type:`record` + + creation_time: :bro:type:`time` + The time when the mapping was created, which corresponds to when + the DNS query was sent out. + + req_host: :bro:type:`string` + If the mapping is the result of a name lookup, the queried host name; + otherwise empty. + + req_addr: :bro:type:`addr` + If the mapping is the result of a pointer lookup, the queried + address; otherwise null. + + valid: :bro:type:`bool` + True if the lookup returned success. Only then are the result fields + valid. + + hostname: :bro:type:`string` + If the mapping is the result of a pointer lookup, the resolved + hostname; otherwise empty. + + addrs: :bro:type:`addr_set` + If the mapping is the result of an address lookup, the resolved + address(es); otherwise empty. + + +.. bro:type:: dns_msg + + :Type: :bro:type:`record` + + id: :bro:type:`count` + Transaction ID. + + opcode: :bro:type:`count` + Operation code. + + rcode: :bro:type:`count` + Return code. + + QR: :bro:type:`bool` + Query response flag. + + AA: :bro:type:`bool` + Authoritative answer flag. + + TC: :bro:type:`bool` + Truncated packet flag. + + RD: :bro:type:`bool` + Recursion desired flag. + + RA: :bro:type:`bool` + Recursion available flag. + + Z: :bro:type:`count` + TODO. + + num_queries: :bro:type:`count` + Number of query records. + + num_answers: :bro:type:`count` + Number of answer records. + + num_auth: :bro:type:`count` + Number of authoritative records. + + num_addl: :bro:type:`count` + Number of additional records. + + A DNS message. + + .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl + dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply + dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end + dns_message dns_query_reply dns_rejected dns_request + +.. bro:type:: dns_nsec3_rr + + :Type: :bro:type:`record` + + query: :bro:type:`string` + Query. + + answer_type: :bro:type:`count` + Ans type. + + nsec_flags: :bro:type:`count` + flags field. + + nsec_hash_algo: :bro:type:`count` + Hash algorithm. + + nsec_iter: :bro:type:`count` + Iterations. + + nsec_salt_len: :bro:type:`count` + Salt length. + + nsec_salt: :bro:type:`string` + Salt value + + nsec_hlen: :bro:type:`count` + Hash length. + + nsec_hash: :bro:type:`string` + Hash value. + + bitmaps: :bro:type:`string_vec` + Type Bit Maps. + + is_query: :bro:type:`count` + The RR is a query/Response. + + A DNSSEC NSEC3 record. + + .. bro:see:: dns_NSEC3 + +.. bro:type:: dns_rrsig_rr + + :Type: :bro:type:`record` + + query: :bro:type:`string` + Query. + + answer_type: :bro:type:`count` + Ans type. + + type_covered: :bro:type:`count` + qtype covered by RRSIG RR. + + algorithm: :bro:type:`count` + Algorithm. + + labels: :bro:type:`count` + Labels in the owner's name. + + orig_ttl: :bro:type:`interval` + Original TTL. + + sig_exp: :bro:type:`time` + Time when signed RR expires. + + sig_incep: :bro:type:`time` + Time when signed. + + key_tag: :bro:type:`count` + Key tag value. + + signer_name: :bro:type:`string` + Signature. + + signature: :bro:type:`string` + Hash of the RRDATA. + + is_query: :bro:type:`count` + The RR is a query/Response. + + A DNSSEC RRSIG record. + + .. bro:see:: dns_RRSIG + +.. bro:type:: dns_soa + + :Type: :bro:type:`record` + + mname: :bro:type:`string` + Primary source of data for zone. + + rname: :bro:type:`string` + Mailbox for responsible person. + + serial: :bro:type:`count` + Version number of zone. + + refresh: :bro:type:`interval` + Seconds before refreshing. + + retry: :bro:type:`interval` + How long before retrying failed refresh. + + expire: :bro:type:`interval` + When zone no longer authoritative. + + minimum: :bro:type:`interval` + Minimum TTL to use when exporting. + + A DNS SOA record. + + .. bro:see:: dns_SOA_reply + +.. bro:type:: dns_tsig_additional + + :Type: :bro:type:`record` + + query: :bro:type:`string` + Query. + + qtype: :bro:type:`count` + Query type. + + alg_name: :bro:type:`string` + Algorithm name. + + sig: :bro:type:`string` + Signature. + + time_signed: :bro:type:`time` + Time when signed. + + fudge: :bro:type:`time` + TODO. + + orig_id: :bro:type:`count` + TODO. + + rr_error: :bro:type:`count` + TODO. + + is_query: :bro:type:`count` + TODO. + + An additional DNS TSIG record. + + .. bro:see:: dns_TSIG_addl + +.. bro:type:: endpoint + + :Type: :bro:type:`record` + + size: :bro:type:`count` + Logical size of data sent (for TCP: derived from sequence numbers). + + state: :bro:type:`count` + Endpoint state. For a TCP connection, one of the constants: + :bro:see:`TCP_INACTIVE` :bro:see:`TCP_SYN_SENT` + :bro:see:`TCP_SYN_ACK_SENT` :bro:see:`TCP_PARTIAL` + :bro:see:`TCP_ESTABLISHED` :bro:see:`TCP_CLOSED` :bro:see:`TCP_RESET`. + For UDP, one of :bro:see:`UDP_ACTIVE` and :bro:see:`UDP_INACTIVE`. + + num_pkts: :bro:type:`count` :bro:attr:`&optional` + Number of packets sent. Only set if :bro:id:`use_conn_size_analyzer` + is true. + + num_bytes_ip: :bro:type:`count` :bro:attr:`&optional` + Number of IP-level bytes sent. Only set if + :bro:id:`use_conn_size_analyzer` is true. + + flow_label: :bro:type:`count` + The current IPv6 flow label that the connection endpoint is using. + Always 0 if the connection is over IPv4. + + l2_addr: :bro:type:`string` :bro:attr:`&optional` + The link-layer address seen in the first packet (if available). + + Statistics about a :bro:type:`connection` endpoint. + + .. bro:see:: connection + +.. bro:type:: endpoint_stats + + :Type: :bro:type:`record` + + num_pkts: :bro:type:`count` + Number of packets. + + num_rxmit: :bro:type:`count` + Number of retransmissions. + + num_rxmit_bytes: :bro:type:`count` + Number of retransmitted bytes. + + num_in_order: :bro:type:`count` + Number of in-order packets. + + num_OO: :bro:type:`count` + Number of out-of-order packets. + + num_repl: :bro:type:`count` + Number of replicated packets (last packet was sent again). + + endian_type: :bro:type:`count` + Endian type used by the endpoint, if it could be determined from + the sequence numbers used. This is one of :bro:see:`ENDIAN_UNKNOWN`, + :bro:see:`ENDIAN_BIG`, :bro:see:`ENDIAN_LITTLE`, and + :bro:see:`ENDIAN_CONFUSED`. + + Statistics about what a TCP endpoint sent. + + .. bro:see:: conn_stats + +.. bro:type:: entropy_test_result + + :Type: :bro:type:`record` + + entropy: :bro:type:`double` + Information density. + + chi_square: :bro:type:`double` + Chi-Square value. + + mean: :bro:type:`double` + Arithmetic Mean. + + monte_carlo_pi: :bro:type:`double` + Monte-carlo value for pi. + + serial_correlation: :bro:type:`double` + Serial correlation coefficient. + + Computed entropy values. The record captures a number of measures that are + computed in parallel. See `A Pseudorandom Number Sequence Test Program + `_ for more information, Bro uses the same + code. + + .. bro:see:: entropy_test_add entropy_test_finish entropy_test_init find_entropy + +.. bro:type:: event_peer + + :Type: :bro:type:`record` + + id: :bro:type:`peer_id` + Locally unique ID of peer (returned by :bro:id:`connect`). + + host: :bro:type:`addr` + The IP address of the peer. + + p: :bro:type:`port` + Either the port we connected to at the peer; or our port the peer + connected to if the session is remotely initiated. + + is_local: :bro:type:`bool` + True if this record describes the local process. + + descr: :bro:type:`string` + The peer's :bro:see:`peer_description`. + + class: :bro:type:`string` :bro:attr:`&optional` + The self-assigned *class* of the peer. + + A communication peer. + + .. bro:see:: complete_handshake disconnect finished_send_state + get_event_peer get_local_event_peer remote_capture_filter + remote_connection_closed remote_connection_error + remote_connection_established remote_connection_handshake_done + remote_event_registered remote_log_peer remote_pong + request_remote_events request_remote_logs request_remote_sync + send_capture_filter send_current_packet send_id send_ping send_state + set_accept_state set_compression_level + + .. todo::The type's name is too narrow these days, should rename. + +.. bro:type:: fa_file + + :Type: :bro:type:`record` + + id: :bro:type:`string` + An identifier associated with a single file. + + parent_id: :bro:type:`string` :bro:attr:`&optional` + Identifier associated with a container file from which this one was + extracted as part of the file analysis. + + source: :bro:type:`string` + An identification of the source of the file data. E.g. it may be + a network protocol over which it was transferred, or a local file + path which was read, or some other input source. + Examples are: "HTTP", "SMTP", "IRC_DATA", or the file path. + + is_orig: :bro:type:`bool` :bro:attr:`&optional` + If the source of this file is a network connection, this field + may be set to indicate the directionality. + + conns: :bro:type:`table` [:bro:type:`conn_id`] of :bro:type:`connection` :bro:attr:`&optional` + The set of connections over which the file was transferred. + + last_active: :bro:type:`time` + The time at which the last activity for the file was seen. + + seen_bytes: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Number of bytes provided to the file analysis engine for the file. + + total_bytes: :bro:type:`count` :bro:attr:`&optional` + Total number of bytes that are supposed to comprise the full file. + + missing_bytes: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of bytes in the file stream that were completely missed + during the process of analysis e.g. due to dropped packets. + + overflow_bytes: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of bytes in the file stream that were not delivered to + stream file analyzers. Generally, this consists of bytes that + couldn't be reassembled, either because reassembly simply isn't + enabled, or due to size limitations of the reassembly buffer. + + timeout_interval: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`default_file_timeout_interval` :bro:attr:`&optional` + The amount of time between receiving new data for this file that + the analysis engine will wait before giving up on it. + + bof_buffer_size: :bro:type:`count` :bro:attr:`&default` = :bro:see:`default_file_bof_buffer_size` :bro:attr:`&optional` + The number of bytes at the beginning of a file to save for later + inspection in the *bof_buffer* field. + + bof_buffer: :bro:type:`string` :bro:attr:`&optional` + The content of the beginning of a file up to *bof_buffer_size* bytes. + This is also the buffer that's used for file/mime type detection. + + info: :bro:type:`Files::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/frameworks/files/main.bro` is loaded) + + + ftp: :bro:type:`FTP::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ftp/files.bro` is loaded) + + + http: :bro:type:`HTTP::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + + irc: :bro:type:`IRC::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/irc/files.bro` is loaded) + + + pe: :bro:type:`PE::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/files/pe/main.bro` is loaded) + + + u2_events: :bro:type:`table` [:bro:type:`count`] of :bro:type:`Unified2::IDSEvent` :bro:attr:`&optional` :bro:attr:`&create_expire` = ``5.0 secs`` :bro:attr:`&expire_func` = :bro:type:`function` + (present if :doc:`/scripts/base/files/unified2/main.bro` is loaded) + + Recently received IDS events. This is primarily used + for tying together Unified2 events and packets. + + logcert: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/log-hostcerts-only.bro` is loaded) + + :Attributes: :bro:attr:`&redef` + + A file that Bro is analyzing. This is Bro's type for describing the basic + internal metadata collected about a "file", which is essentially just a + byte stream that is e.g. pulled from a network connection or possibly + some other input source. + +.. bro:type:: fa_metadata + + :Type: :bro:type:`record` + + mime_type: :bro:type:`string` :bro:attr:`&optional` + The strongest matching MIME type if one was discovered. + + mime_types: :bro:type:`mime_matches` :bro:attr:`&optional` + All matching MIME types if any were discovered. + + inferred: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Specifies whether the MIME type was inferred using signatures, + or provided directly by the protocol the file appeared in. + + Metadata that's been inferred about a particular file. + +.. bro:type:: files_tag_set + + :Type: :bro:type:`set` [:bro:type:`Files::Tag`] + + A set of file analyzer tags. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: flow_id + + :Type: :bro:type:`record` + + src_h: :bro:type:`addr` :bro:attr:`&log` + The source IP address. + + src_p: :bro:type:`port` :bro:attr:`&log` + The source port number. + + dst_h: :bro:type:`addr` :bro:attr:`&log` + The destination IP address. + + dst_p: :bro:type:`port` :bro:attr:`&log` + The desintation port number. + :Attributes: :bro:attr:`&log` + + The identifying 4-tuple of a uni-directional flow. + + .. note:: It's actually a 5-tuple: the transport-layer protocol is stored as + part of the port values, `src_p` and `dst_p`, and can be extracted from + them with :bro:id:`get_port_transport_proto`. + +.. bro:type:: ftp_port + + :Type: :bro:type:`record` + + h: :bro:type:`addr` + The host's address. + + p: :bro:type:`port` + The host's port. + + valid: :bro:type:`bool` + True if format was right. Only then are *h* and *p* valid. + + A parsed host/port combination describing server endpoint for an upcoming + data transfer. + + .. bro:see:: fmt_ftp_port parse_eftp_port parse_ftp_epsv parse_ftp_pasv + parse_ftp_port + +.. bro:type:: geo_location + + :Type: :bro:type:`record` + + country_code: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + The country code. + + region: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + The region. + + city: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + The city. + + latitude: :bro:type:`double` :bro:attr:`&optional` :bro:attr:`&log` + Latitude. + + longitude: :bro:type:`double` :bro:attr:`&optional` :bro:attr:`&log` + Longitude. + :Attributes: :bro:attr:`&log` + + GeoIP location information. + + .. bro:see:: lookup_location + +.. bro:type:: gtp_access_point_name + + :Type: :bro:type:`string` + + +.. bro:type:: gtp_cause + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_charging_characteristics + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_charging_gateway_addr + + :Type: :bro:type:`addr` + + +.. bro:type:: gtp_charging_id + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_create_pdp_ctx_request_elements + + :Type: :bro:type:`record` + + imsi: :bro:type:`gtp_imsi` :bro:attr:`&optional` + + rai: :bro:type:`gtp_rai` :bro:attr:`&optional` + + recovery: :bro:type:`gtp_recovery` :bro:attr:`&optional` + + select_mode: :bro:type:`gtp_selection_mode` :bro:attr:`&optional` + + data1: :bro:type:`gtp_teid1` + + cp: :bro:type:`gtp_teid_control_plane` :bro:attr:`&optional` + + nsapi: :bro:type:`gtp_nsapi` + + linked_nsapi: :bro:type:`gtp_nsapi` :bro:attr:`&optional` + + charge_character: :bro:type:`gtp_charging_characteristics` :bro:attr:`&optional` + + trace_ref: :bro:type:`gtp_trace_reference` :bro:attr:`&optional` + + trace_type: :bro:type:`gtp_trace_type` :bro:attr:`&optional` + + end_user_addr: :bro:type:`gtp_end_user_addr` :bro:attr:`&optional` + + ap_name: :bro:type:`gtp_access_point_name` :bro:attr:`&optional` + + opts: :bro:type:`gtp_proto_config_options` :bro:attr:`&optional` + + signal_addr: :bro:type:`gtp_gsn_addr` + + user_addr: :bro:type:`gtp_gsn_addr` + + msisdn: :bro:type:`gtp_msisdn` :bro:attr:`&optional` + + qos_prof: :bro:type:`gtp_qos_profile` + + tft: :bro:type:`gtp_tft` :bro:attr:`&optional` + + trigger_id: :bro:type:`gtp_trigger_id` :bro:attr:`&optional` + + omc_id: :bro:type:`gtp_omc_id` :bro:attr:`&optional` + + ext: :bro:type:`gtp_private_extension` :bro:attr:`&optional` + + +.. bro:type:: gtp_create_pdp_ctx_response_elements + + :Type: :bro:type:`record` + + cause: :bro:type:`gtp_cause` + + reorder_req: :bro:type:`gtp_reordering_required` :bro:attr:`&optional` + + recovery: :bro:type:`gtp_recovery` :bro:attr:`&optional` + + data1: :bro:type:`gtp_teid1` :bro:attr:`&optional` + + cp: :bro:type:`gtp_teid_control_plane` :bro:attr:`&optional` + + charging_id: :bro:type:`gtp_charging_id` :bro:attr:`&optional` + + end_user_addr: :bro:type:`gtp_end_user_addr` :bro:attr:`&optional` + + opts: :bro:type:`gtp_proto_config_options` :bro:attr:`&optional` + + cp_addr: :bro:type:`gtp_gsn_addr` :bro:attr:`&optional` + + user_addr: :bro:type:`gtp_gsn_addr` :bro:attr:`&optional` + + qos_prof: :bro:type:`gtp_qos_profile` :bro:attr:`&optional` + + charge_gateway: :bro:type:`gtp_charging_gateway_addr` :bro:attr:`&optional` + + ext: :bro:type:`gtp_private_extension` :bro:attr:`&optional` + + +.. bro:type:: gtp_delete_pdp_ctx_request_elements + + :Type: :bro:type:`record` + + teardown_ind: :bro:type:`gtp_teardown_ind` :bro:attr:`&optional` + + nsapi: :bro:type:`gtp_nsapi` + + ext: :bro:type:`gtp_private_extension` :bro:attr:`&optional` + + +.. bro:type:: gtp_delete_pdp_ctx_response_elements + + :Type: :bro:type:`record` + + cause: :bro:type:`gtp_cause` + + ext: :bro:type:`gtp_private_extension` :bro:attr:`&optional` + + +.. bro:type:: gtp_end_user_addr + + :Type: :bro:type:`record` + + pdp_type_org: :bro:type:`count` + + pdp_type_num: :bro:type:`count` + + pdp_ip: :bro:type:`addr` :bro:attr:`&optional` + Set if the End User Address information element is IPv4/IPv6. + + pdp_other_addr: :bro:type:`string` :bro:attr:`&optional` + Set if the End User Address information element isn't IPv4/IPv6. + + +.. bro:type:: gtp_gsn_addr + + :Type: :bro:type:`record` + + ip: :bro:type:`addr` :bro:attr:`&optional` + If the GSN Address information element has length 4 or 16, then this + field is set to be the informational element's value interpreted as + an IPv4 or IPv6 address, respectively. + + other: :bro:type:`string` :bro:attr:`&optional` + This field is set if it's not an IPv4 or IPv6 address. + + +.. bro:type:: gtp_imsi + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_msisdn + + :Type: :bro:type:`string` + + +.. bro:type:: gtp_nsapi + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_omc_id + + :Type: :bro:type:`string` + + +.. bro:type:: gtp_private_extension + + :Type: :bro:type:`record` + + id: :bro:type:`count` + + value: :bro:type:`string` + + +.. bro:type:: gtp_proto_config_options + + :Type: :bro:type:`string` + + +.. bro:type:: gtp_qos_profile + + :Type: :bro:type:`record` + + priority: :bro:type:`count` + + data: :bro:type:`string` + + +.. bro:type:: gtp_rai + + :Type: :bro:type:`record` + + mcc: :bro:type:`count` + + mnc: :bro:type:`count` + + lac: :bro:type:`count` + + rac: :bro:type:`count` + + +.. bro:type:: gtp_recovery + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_reordering_required + + :Type: :bro:type:`bool` + + +.. bro:type:: gtp_selection_mode + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_teardown_ind + + :Type: :bro:type:`bool` + + +.. bro:type:: gtp_teid1 + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_teid_control_plane + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_tft + + :Type: :bro:type:`string` + + +.. bro:type:: gtp_trace_reference + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_trace_type + + :Type: :bro:type:`count` + + +.. bro:type:: gtp_trigger_id + + :Type: :bro:type:`string` + + +.. bro:type:: gtp_update_pdp_ctx_request_elements + + :Type: :bro:type:`record` + + imsi: :bro:type:`gtp_imsi` :bro:attr:`&optional` + + rai: :bro:type:`gtp_rai` :bro:attr:`&optional` + + recovery: :bro:type:`gtp_recovery` :bro:attr:`&optional` + + data1: :bro:type:`gtp_teid1` + + cp: :bro:type:`gtp_teid_control_plane` :bro:attr:`&optional` + + nsapi: :bro:type:`gtp_nsapi` + + trace_ref: :bro:type:`gtp_trace_reference` :bro:attr:`&optional` + + trace_type: :bro:type:`gtp_trace_type` :bro:attr:`&optional` + + cp_addr: :bro:type:`gtp_gsn_addr` + + user_addr: :bro:type:`gtp_gsn_addr` + + qos_prof: :bro:type:`gtp_qos_profile` + + tft: :bro:type:`gtp_tft` :bro:attr:`&optional` + + trigger_id: :bro:type:`gtp_trigger_id` :bro:attr:`&optional` + + omc_id: :bro:type:`gtp_omc_id` :bro:attr:`&optional` + + ext: :bro:type:`gtp_private_extension` :bro:attr:`&optional` + + end_user_addr: :bro:type:`gtp_end_user_addr` :bro:attr:`&optional` + + +.. bro:type:: gtp_update_pdp_ctx_response_elements + + :Type: :bro:type:`record` + + cause: :bro:type:`gtp_cause` + + recovery: :bro:type:`gtp_recovery` :bro:attr:`&optional` + + data1: :bro:type:`gtp_teid1` :bro:attr:`&optional` + + cp: :bro:type:`gtp_teid_control_plane` :bro:attr:`&optional` + + charging_id: :bro:type:`gtp_charging_id` :bro:attr:`&optional` + + cp_addr: :bro:type:`gtp_gsn_addr` :bro:attr:`&optional` + + user_addr: :bro:type:`gtp_gsn_addr` :bro:attr:`&optional` + + qos_prof: :bro:type:`gtp_qos_profile` :bro:attr:`&optional` + + charge_gateway: :bro:type:`gtp_charging_gateway_addr` :bro:attr:`&optional` + + ext: :bro:type:`gtp_private_extension` :bro:attr:`&optional` + + +.. bro:type:: gtpv1_hdr + + :Type: :bro:type:`record` + + version: :bro:type:`count` + The 3-bit version field, which for GTPv1 should be 1. + + pt_flag: :bro:type:`bool` + Protocol Type value differentiates GTP (value 1) from GTP' (value 0). + + rsv: :bro:type:`bool` + Reserved field, should be 0. + + e_flag: :bro:type:`bool` + Extension Header flag. When 0, the *next_type* field may or may not + be present, but shouldn't be meaningful. When 1, *next_type* is + present and meaningful. + + s_flag: :bro:type:`bool` + Sequence Number flag. When 0, the *seq* field may or may not + be present, but shouldn't be meaningful. When 1, *seq* is + present and meaningful. + + pn_flag: :bro:type:`bool` + N-PDU flag. When 0, the *n_pdu* field may or may not + be present, but shouldn't be meaningful. When 1, *n_pdu* is + present and meaningful. + + msg_type: :bro:type:`count` + Message Type. A value of 255 indicates user-plane data is encapsulated. + + length: :bro:type:`count` + Length of the GTP packet payload (the rest of the packet following + the mandatory 8-byte GTP header). + + teid: :bro:type:`count` + Tunnel Endpoint Identifier. Unambiguously identifies a tunnel + endpoint in receiving GTP-U or GTP-C protocol entity. + + seq: :bro:type:`count` :bro:attr:`&optional` + Sequence Number. Set if any *e_flag*, *s_flag*, or *pn_flag* field + is set. + + n_pdu: :bro:type:`count` :bro:attr:`&optional` + N-PDU Number. Set if any *e_flag*, *s_flag*, or *pn_flag* field is set. + + next_type: :bro:type:`count` :bro:attr:`&optional` + Next Extension Header Type. Set if any *e_flag*, *s_flag*, or + *pn_flag* field is set. + + A GTPv1 (GPRS Tunneling Protocol) header. + +.. bro:type:: http_message_stat + + :Type: :bro:type:`record` + + start: :bro:type:`time` + When the request/reply line was complete. + + interrupted: :bro:type:`bool` + Whether the message was interrupted. + + finish_msg: :bro:type:`string` + Reason phrase if interrupted. + + body_length: :bro:type:`count` + Length of body processed (before finished/interrupted). + + content_gap_length: :bro:type:`count` + Total length of gaps within *body_length*. + + header_length: :bro:type:`count` + Length of headers (including the req/reply line, but not CR/LF's). + + HTTP message statistics. + + .. bro:see:: http_message_done + +.. bro:type:: http_stats_rec + + :Type: :bro:type:`record` + + num_requests: :bro:type:`count` + Number of requests. + + num_replies: :bro:type:`count` + Number of replies. + + request_version: :bro:type:`double` + HTTP version of the requests. + + reply_version: :bro:type:`double` + HTTP Version of the replies. + + HTTP session statistics. + + .. bro:see:: http_stats + +.. bro:type:: icmp6_nd_option + + :Type: :bro:type:`record` + + otype: :bro:type:`count` + 8-bit identifier of the type of option. + + len: :bro:type:`count` + 8-bit integer representing the length of the option (including the + type and length fields) in units of 8 octets. + + link_address: :bro:type:`string` :bro:attr:`&optional` + Source Link-Layer Address (Type 1) or Target Link-Layer Address (Type 2). + Byte ordering of this is dependent on the actual link-layer. + + prefix: :bro:type:`icmp6_nd_prefix_info` :bro:attr:`&optional` + Prefix Information (Type 3). + + redirect: :bro:type:`icmp_context` :bro:attr:`&optional` + Redirected header (Type 4). This field contains the context of the + original, redirected packet. + + mtu: :bro:type:`count` :bro:attr:`&optional` + Recommended MTU for the link (Type 5). + + payload: :bro:type:`string` :bro:attr:`&optional` + The raw data of the option (everything after type & length fields), + useful for unknown option types or when the full option payload is + truncated in the captured packet. In those cases, option fields + won't be pre-extracted into the fields above. + + Options extracted from ICMPv6 neighbor discovery messages as specified + by :rfc:`4861`. + + .. bro:see:: icmp_router_solicitation icmp_router_advertisement + icmp_neighbor_advertisement icmp_neighbor_solicitation icmp_redirect + icmp6_nd_options + +.. bro:type:: icmp6_nd_options + + :Type: :bro:type:`vector` of :bro:type:`icmp6_nd_option` + + A type alias for a vector of ICMPv6 neighbor discovery message options. + +.. bro:type:: icmp6_nd_prefix_info + + :Type: :bro:type:`record` + + prefix_len: :bro:type:`count` + Number of leading bits of the *prefix* that are valid. + + L_flag: :bro:type:`bool` + Flag indicating the prefix can be used for on-link determination. + + A_flag: :bro:type:`bool` + Autonomous address-configuration flag. + + valid_lifetime: :bro:type:`interval` + Length of time in seconds that the prefix is valid for purpose of + on-link determination (0xffffffff represents infinity). + + preferred_lifetime: :bro:type:`interval` + Length of time in seconds that the addresses generated from the + prefix via stateless address autoconfiguration remain preferred + (0xffffffff represents infinity). + + prefix: :bro:type:`addr` + An IP address or prefix of an IP address. Use the *prefix_len* field + to convert this into a :bro:type:`subnet`. + + Values extracted from a Prefix Information option in an ICMPv6 neighbor + discovery message as specified by :rfc:`4861`. + + .. bro:see:: icmp6_nd_option + +.. bro:type:: icmp_conn + + :Type: :bro:type:`record` + + orig_h: :bro:type:`addr` + The originator's IP address. + + resp_h: :bro:type:`addr` + The responder's IP address. + + itype: :bro:type:`count` + The ICMP type of the packet that triggered the instantiation of the record. + + icode: :bro:type:`count` + The ICMP code of the packet that triggered the instantiation of the record. + + len: :bro:type:`count` + The length of the ICMP payload of the packet that triggered the instantiation of the record. + + hlim: :bro:type:`count` + The encapsulating IP header's Hop Limit value. + + v6: :bro:type:`bool` + True if it's an ICMPv6 packet. + + Specifics about an ICMP conversation. ICMP events typically pass this in + addition to :bro:type:`conn_id`. + + .. bro:see:: icmp_echo_reply icmp_echo_request icmp_redirect icmp_sent + icmp_time_exceeded icmp_unreachable + +.. bro:type:: icmp_context + + :Type: :bro:type:`record` + + id: :bro:type:`conn_id` + The packet's 4-tuple. + + len: :bro:type:`count` + The length of the IP packet (headers + payload). + + proto: :bro:type:`count` + The packet's transport-layer protocol. + + frag_offset: :bro:type:`count` + The packet's fragmentation offset. + + bad_hdr_len: :bro:type:`bool` + True if the packet's IP header is not fully included in the context + or if there is not enough of the transport header to determine source + and destination ports. If that is the case, the appropriate fields + of this record will be set to null values. + + bad_checksum: :bro:type:`bool` + True if the packet's IP checksum is not correct. + + MF: :bro:type:`bool` + True if the packet's *more fragments* flag is set. + + DF: :bro:type:`bool` + True if the packet's *don't fragment* flag is set. + + Packet context part of an ICMP message. The fields of this record reflect the + packet that is described by the context. + + .. bro:see:: icmp_time_exceeded icmp_unreachable + +.. bro:type:: icmp_hdr + + :Type: :bro:type:`record` + + icmp_type: :bro:type:`count` + type of message + + Values extracted from an ICMP header. + + .. bro:see:: pkt_hdr discarder_check_icmp + +.. bro:type:: id_table + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`script_id` + + Table type used to map script-level identifiers to meta-information + describing them. + + .. bro:see:: global_ids script_id + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: index_vec + + :Type: :bro:type:`vector` of :bro:type:`count` + + A vector of counts, used by some builtin functions to store a list of indices. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: interconn_endp_stats + + :Type: :bro:type:`record` + + num_pkts: :bro:type:`count` + + num_keystrokes_two_in_row: :bro:type:`count` + + num_normal_interarrivals: :bro:type:`count` + + num_8k0_pkts: :bro:type:`count` + + num_8k4_pkts: :bro:type:`count` + + is_partial: :bro:type:`bool` + + num_bytes: :bro:type:`count` + + num_7bit_ascii: :bro:type:`count` + + num_lines: :bro:type:`count` + + num_normal_lines: :bro:type:`count` + + Deprecated. + +.. bro:type:: ip4_hdr + + :Type: :bro:type:`record` + + hl: :bro:type:`count` + Header length in bytes. + + tos: :bro:type:`count` + Type of service. + + len: :bro:type:`count` + Total length. + + id: :bro:type:`count` + Identification. + + ttl: :bro:type:`count` + Time to live. + + p: :bro:type:`count` + Protocol. + + src: :bro:type:`addr` + Source address. + + dst: :bro:type:`addr` + Destination address. + + Values extracted from an IPv4 header. + + .. bro:see:: pkt_hdr ip6_hdr discarder_check_ip + +.. bro:type:: ip6_ah + + :Type: :bro:type:`record` + + nxt: :bro:type:`count` + Protocol number of the next header (RFC 1700 et seq., IANA assigned + number), e.g. :bro:id:`IPPROTO_ICMP`. + + len: :bro:type:`count` + Length of header in 4-octet units, excluding first two units. + + rsv: :bro:type:`count` + Reserved field. + + spi: :bro:type:`count` + Security Parameter Index. + + seq: :bro:type:`count` :bro:attr:`&optional` + Sequence number, unset in the case that *len* field is zero. + + data: :bro:type:`string` :bro:attr:`&optional` + Authentication data, unset in the case that *len* field is zero. + + Values extracted from an IPv6 Authentication extension header. + + .. bro:see:: pkt_hdr ip4_hdr ip6_hdr ip6_ext_hdr + +.. bro:type:: ip6_dstopts + + :Type: :bro:type:`record` + + nxt: :bro:type:`count` + Protocol number of the next header (RFC 1700 et seq., IANA assigned + number), e.g. :bro:id:`IPPROTO_ICMP`. + + len: :bro:type:`count` + Length of header in 8-octet units, excluding first unit. + + options: :bro:type:`ip6_options` + The TLV encoded options; + + Values extracted from an IPv6 Destination options extension header. + + .. bro:see:: pkt_hdr ip4_hdr ip6_hdr ip6_ext_hdr ip6_option + +.. bro:type:: ip6_esp + + :Type: :bro:type:`record` + + spi: :bro:type:`count` + Security Parameters Index. + + seq: :bro:type:`count` + Sequence number. + + Values extracted from an IPv6 ESP extension header. + + .. bro:see:: pkt_hdr ip4_hdr ip6_hdr ip6_ext_hdr + +.. bro:type:: ip6_ext_hdr + + :Type: :bro:type:`record` + + id: :bro:type:`count` + The RFC 1700 et seq. IANA assigned number identifying the type of + the extension header. + + hopopts: :bro:type:`ip6_hopopts` :bro:attr:`&optional` + Hop-by-hop option extension header. + + dstopts: :bro:type:`ip6_dstopts` :bro:attr:`&optional` + Destination option extension header. + + routing: :bro:type:`ip6_routing` :bro:attr:`&optional` + Routing extension header. + + fragment: :bro:type:`ip6_fragment` :bro:attr:`&optional` + Fragment header. + + ah: :bro:type:`ip6_ah` :bro:attr:`&optional` + Authentication extension header. + + esp: :bro:type:`ip6_esp` :bro:attr:`&optional` + Encapsulating security payload header. + + mobility: :bro:type:`ip6_mobility_hdr` :bro:attr:`&optional` + Mobility header. + + A general container for a more specific IPv6 extension header. + + .. bro:see:: pkt_hdr ip4_hdr ip6_hopopts ip6_dstopts ip6_routing ip6_fragment + ip6_ah ip6_esp + +.. bro:type:: ip6_ext_hdr_chain + + :Type: :bro:type:`vector` of :bro:type:`ip6_ext_hdr` + + A type alias for a vector of IPv6 extension headers. + +.. bro:type:: ip6_fragment + + :Type: :bro:type:`record` + + nxt: :bro:type:`count` + Protocol number of the next header (RFC 1700 et seq., IANA assigned + number), e.g. :bro:id:`IPPROTO_ICMP`. + + rsv1: :bro:type:`count` + 8-bit reserved field. + + offset: :bro:type:`count` + Fragmentation offset. + + rsv2: :bro:type:`count` + 2-bit reserved field. + + more: :bro:type:`bool` + More fragments. + + id: :bro:type:`count` + Fragment identification. + + Values extracted from an IPv6 Fragment extension header. + + .. bro:see:: pkt_hdr ip4_hdr ip6_hdr ip6_ext_hdr + +.. bro:type:: ip6_hdr + + :Type: :bro:type:`record` + + class: :bro:type:`count` + Traffic class. + + flow: :bro:type:`count` + Flow label. + + len: :bro:type:`count` + Payload length. + + nxt: :bro:type:`count` + Protocol number of the next header + (RFC 1700 et seq., IANA assigned number) + e.g. :bro:id:`IPPROTO_ICMP`. + + hlim: :bro:type:`count` + Hop limit. + + src: :bro:type:`addr` + Source address. + + dst: :bro:type:`addr` + Destination address. + + exts: :bro:type:`ip6_ext_hdr_chain` + Extension header chain. + + Values extracted from an IPv6 header. + + .. bro:see:: pkt_hdr ip4_hdr ip6_ext_hdr ip6_hopopts ip6_dstopts + ip6_routing ip6_fragment ip6_ah ip6_esp + +.. bro:type:: ip6_hopopts + + :Type: :bro:type:`record` + + nxt: :bro:type:`count` + Protocol number of the next header (RFC 1700 et seq., IANA assigned + number), e.g. :bro:id:`IPPROTO_ICMP`. + + len: :bro:type:`count` + Length of header in 8-octet units, excluding first unit. + + options: :bro:type:`ip6_options` + The TLV encoded options; + + Values extracted from an IPv6 Hop-by-Hop options extension header. + + .. bro:see:: pkt_hdr ip4_hdr ip6_hdr ip6_ext_hdr ip6_option + +.. bro:type:: ip6_mobility_back + + :Type: :bro:type:`record` + + status: :bro:type:`count` + Status. + + k: :bro:type:`bool` + Key Management Mobility Capability. + + seq: :bro:type:`count` + Sequence number. + + life: :bro:type:`count` + Lifetime. + + options: :bro:type:`vector` of :bro:type:`ip6_option` + Mobility Options. + + Values extracted from an IPv6 Mobility Binding Acknowledgement message. + + .. bro:see:: ip6_mobility_hdr ip6_hdr ip6_ext_hdr ip6_mobility_msg + +.. bro:type:: ip6_mobility_be + + :Type: :bro:type:`record` + + status: :bro:type:`count` + Status. + + hoa: :bro:type:`addr` + Home Address. + + options: :bro:type:`vector` of :bro:type:`ip6_option` + Mobility Options. + + Values extracted from an IPv6 Mobility Binding Error message. + + .. bro:see:: ip6_mobility_hdr ip6_hdr ip6_ext_hdr ip6_mobility_msg + +.. bro:type:: ip6_mobility_brr + + :Type: :bro:type:`record` + + rsv: :bro:type:`count` + Reserved. + + options: :bro:type:`vector` of :bro:type:`ip6_option` + Mobility Options. + + Values extracted from an IPv6 Mobility Binding Refresh Request message. + + .. bro:see:: ip6_mobility_hdr ip6_hdr ip6_ext_hdr ip6_mobility_msg + +.. bro:type:: ip6_mobility_bu + + :Type: :bro:type:`record` + + seq: :bro:type:`count` + Sequence number. + + a: :bro:type:`bool` + Acknowledge bit. + + h: :bro:type:`bool` + Home Registration bit. + + l: :bro:type:`bool` + Link-Local Address Compatibility bit. + + k: :bro:type:`bool` + Key Management Mobility Capability bit. + + life: :bro:type:`count` + Lifetime. + + options: :bro:type:`vector` of :bro:type:`ip6_option` + Mobility Options. + + Values extracted from an IPv6 Mobility Binding Update message. + + .. bro:see:: ip6_mobility_hdr ip6_hdr ip6_ext_hdr ip6_mobility_msg + +.. bro:type:: ip6_mobility_cot + + :Type: :bro:type:`record` + + nonce_idx: :bro:type:`count` + Care-of Nonce Index. + + cookie: :bro:type:`count` + Care-of Init Cookie. + + token: :bro:type:`count` + Care-of Keygen Token. + + options: :bro:type:`vector` of :bro:type:`ip6_option` + Mobility Options. + + Values extracted from an IPv6 Mobility Care-of Test message. + + .. bro:see:: ip6_mobility_hdr ip6_hdr ip6_ext_hdr ip6_mobility_msg + +.. bro:type:: ip6_mobility_coti + + :Type: :bro:type:`record` + + rsv: :bro:type:`count` + Reserved. + + cookie: :bro:type:`count` + Care-of Init Cookie. + + options: :bro:type:`vector` of :bro:type:`ip6_option` + Mobility Options. + + Values extracted from an IPv6 Mobility Care-of Test Init message. + + .. bro:see:: ip6_mobility_hdr ip6_hdr ip6_ext_hdr ip6_mobility_msg + +.. bro:type:: ip6_mobility_hdr + + :Type: :bro:type:`record` + + nxt: :bro:type:`count` + Protocol number of the next header (RFC 1700 et seq., IANA assigned + number), e.g. :bro:id:`IPPROTO_ICMP`. + + len: :bro:type:`count` + Length of header in 8-octet units, excluding first unit. + + mh_type: :bro:type:`count` + Mobility header type used to identify header's the message. + + rsv: :bro:type:`count` + Reserved field. + + chksum: :bro:type:`count` + Mobility header checksum. + + msg: :bro:type:`ip6_mobility_msg` + Mobility header message + + Values extracted from an IPv6 Mobility header. + + .. bro:see:: pkt_hdr ip4_hdr ip6_hdr ip6_ext_hdr + +.. bro:type:: ip6_mobility_hot + + :Type: :bro:type:`record` + + nonce_idx: :bro:type:`count` + Home Nonce Index. + + cookie: :bro:type:`count` + Home Init Cookie. + + token: :bro:type:`count` + Home Keygen Token. + + options: :bro:type:`vector` of :bro:type:`ip6_option` + Mobility Options. + + Values extracted from an IPv6 Mobility Home Test message. + + .. bro:see:: ip6_mobility_hdr ip6_hdr ip6_ext_hdr ip6_mobility_msg + +.. bro:type:: ip6_mobility_hoti + + :Type: :bro:type:`record` + + rsv: :bro:type:`count` + Reserved. + + cookie: :bro:type:`count` + Home Init Cookie. + + options: :bro:type:`vector` of :bro:type:`ip6_option` + Mobility Options. + + Values extracted from an IPv6 Mobility Home Test Init message. + + .. bro:see:: ip6_mobility_hdr ip6_hdr ip6_ext_hdr ip6_mobility_msg + +.. bro:type:: ip6_mobility_msg + + :Type: :bro:type:`record` + + id: :bro:type:`count` + The type of message from the header's MH Type field. + + brr: :bro:type:`ip6_mobility_brr` :bro:attr:`&optional` + Binding Refresh Request. + + hoti: :bro:type:`ip6_mobility_hoti` :bro:attr:`&optional` + Home Test Init. + + coti: :bro:type:`ip6_mobility_coti` :bro:attr:`&optional` + Care-of Test Init. + + hot: :bro:type:`ip6_mobility_hot` :bro:attr:`&optional` + Home Test. + + cot: :bro:type:`ip6_mobility_cot` :bro:attr:`&optional` + Care-of Test. + + bu: :bro:type:`ip6_mobility_bu` :bro:attr:`&optional` + Binding Update. + + back: :bro:type:`ip6_mobility_back` :bro:attr:`&optional` + Binding Acknowledgement. + + be: :bro:type:`ip6_mobility_be` :bro:attr:`&optional` + Binding Error. + + Values extracted from an IPv6 Mobility header's message data. + + .. bro:see:: ip6_mobility_hdr ip6_hdr ip6_ext_hdr + +.. bro:type:: ip6_option + + :Type: :bro:type:`record` + + otype: :bro:type:`count` + Option type. + + len: :bro:type:`count` + Option data length. + + data: :bro:type:`string` + Option data. + + Values extracted from an IPv6 extension header's (e.g. hop-by-hop or + destination option headers) option field. + + .. bro:see:: ip6_hdr ip6_ext_hdr ip6_hopopts ip6_dstopts + +.. bro:type:: ip6_options + + :Type: :bro:type:`vector` of :bro:type:`ip6_option` + + A type alias for a vector of IPv6 options. + +.. bro:type:: ip6_routing + + :Type: :bro:type:`record` + + nxt: :bro:type:`count` + Protocol number of the next header (RFC 1700 et seq., IANA assigned + number), e.g. :bro:id:`IPPROTO_ICMP`. + + len: :bro:type:`count` + Length of header in 8-octet units, excluding first unit. + + rtype: :bro:type:`count` + Routing type. + + segleft: :bro:type:`count` + Segments left. + + data: :bro:type:`string` + Type-specific data. + + Values extracted from an IPv6 Routing extension header. + + .. bro:see:: pkt_hdr ip4_hdr ip6_hdr ip6_ext_hdr + +.. bro:type:: irc_join_info + + :Type: :bro:type:`record` + + nick: :bro:type:`string` + + channel: :bro:type:`string` + + password: :bro:type:`string` + + usermode: :bro:type:`string` + + IRC join information. + + .. bro:see:: irc_join_list + +.. bro:type:: irc_join_list + + :Type: :bro:type:`set` [:bro:type:`irc_join_info`] + + Set of IRC join information. + + .. bro:see:: irc_join_message + +.. bro:type:: l2_hdr + + :Type: :bro:type:`record` + + encap: :bro:type:`link_encap` + L2 link encapsulation. + + len: :bro:type:`count` + Total frame length on wire. + + cap_len: :bro:type:`count` + Captured length. + + src: :bro:type:`string` :bro:attr:`&optional` + L2 source (if Ethernet). + + dst: :bro:type:`string` :bro:attr:`&optional` + L2 destination (if Ethernet). + + vlan: :bro:type:`count` :bro:attr:`&optional` + Outermost VLAN tag if any (and Ethernet). + + inner_vlan: :bro:type:`count` :bro:attr:`&optional` + Innermost VLAN tag if any (and Ethernet). + + eth_type: :bro:type:`count` :bro:attr:`&optional` + Innermost Ethertype (if Ethernet). + + proto: :bro:type:`layer3_proto` + L3 protocol. + + Values extracted from the layer 2 header. + + .. bro:see:: pkt_hdr + +.. bro:type:: load_sample_info + + :Type: :bro:type:`set` [:bro:type:`string`] + + +.. bro:type:: mime_header_list + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`mime_header_rec` + + A list of MIME headers. + + .. bro:see:: mime_header_rec http_all_headers mime_all_headers + +.. bro:type:: mime_header_rec + + :Type: :bro:type:`record` + + name: :bro:type:`string` + The header name. + + value: :bro:type:`string` + The header value. + + A MIME header key/value pair. + + .. bro:see:: mime_header_list http_all_headers mime_all_headers mime_one_header + +.. bro:type:: mime_match + + :Type: :bro:type:`record` + + strength: :bro:type:`int` + How strongly the signature matched. Used for + prioritization when multiple file magic signatures + match. + + mime: :bro:type:`string` + The MIME type of the file magic signature match. + + A structure indicating a MIME type and strength of a match against + file magic signatures. + + :bro:see:`file_magic` + +.. bro:type:: mime_matches + + :Type: :bro:type:`vector` of :bro:type:`mime_match` + + A vector of file magic signature matches, ordered by strength of + the signature, strongest first. + + :bro:see:`file_magic` + +.. bro:type:: ntp_msg + + :Type: :bro:type:`record` + + id: :bro:type:`count` + Message ID. + + code: :bro:type:`count` + Message code. + + stratum: :bro:type:`count` + Stratum. + + poll: :bro:type:`count` + Poll. + + precision: :bro:type:`int` + Precision. + + distance: :bro:type:`interval` + Distance. + + dispersion: :bro:type:`interval` + Dispersion. + + ref_t: :bro:type:`time` + Reference time. + + originate_t: :bro:type:`time` + Originating time. + + receive_t: :bro:type:`time` + Receive time. + + xmit_t: :bro:type:`time` + Send time. + + An NTP message. + + .. bro:see:: ntp_message + +.. bro:type:: packet + + :Type: :bro:type:`record` + + conn: :bro:type:`connection` + + is_orig: :bro:type:`bool` + + seq: :bro:type:`count` + seq=k => it is the kth *packet* of the connection + + timestamp: :bro:type:`time` + + Deprecated. + + .. todo:: Remove. It's still declared internally but doesn't seem used anywhere + else. + +.. bro:type:: pcap_packet + + :Type: :bro:type:`record` + + ts_sec: :bro:type:`count` + The non-fractional part of the packet's timestamp (i.e., full seconds since the epoch). + + ts_usec: :bro:type:`count` + The fractional part of the packet's timestamp. + + caplen: :bro:type:`count` + The number of bytes captured (<= *len*). + + len: :bro:type:`count` + The length of the packet in bytes, including link-level header. + + data: :bro:type:`string` + The payload of the packet, including link-level header. + + link_type: :bro:type:`link_encap` + Layer 2 link encapsulation type. + + Policy-level representation of a packet passed on by libpcap. The data + includes the complete packet as returned by libpcap, including the link-layer + header. + + .. bro:see:: dump_packet get_current_packet + +.. bro:type:: peer_id + + :Type: :bro:type:`count` + + A locally unique ID identifying a communication peer. The ID is returned by + :bro:id:`connect`. + + .. bro:see:: connect + +.. bro:type:: pkt_hdr + + :Type: :bro:type:`record` + + ip: :bro:type:`ip4_hdr` :bro:attr:`&optional` + The IPv4 header if an IPv4 packet. + + ip6: :bro:type:`ip6_hdr` :bro:attr:`&optional` + The IPv6 header if an IPv6 packet. + + tcp: :bro:type:`tcp_hdr` :bro:attr:`&optional` + The TCP header if a TCP packet. + + udp: :bro:type:`udp_hdr` :bro:attr:`&optional` + The UDP header if a UDP packet. + + icmp: :bro:type:`icmp_hdr` :bro:attr:`&optional` + The ICMP header if an ICMP packet. + + A packet header, consisting of an IP header and transport-layer header. + + .. bro:see:: new_packet + +.. bro:type:: pkt_profile_modes + + :Type: :bro:type:`enum` + + .. bro:enum:: PKT_PROFILE_MODE_NONE pkt_profile_modes + + No output. + + .. bro:enum:: PKT_PROFILE_MODE_SECS pkt_profile_modes + + Output every :bro:see:`pkt_profile_freq` seconds. + + .. bro:enum:: PKT_PROFILE_MODE_PKTS pkt_profile_modes + + Output every :bro:see:`pkt_profile_freq` packets. + + .. bro:enum:: PKT_PROFILE_MODE_BYTES pkt_profile_modes + + Output every :bro:see:`pkt_profile_freq` bytes. + + Output modes for packet profiling information. + + .. bro:see:: pkt_profile_mode pkt_profile_freq pkt_profile_file + +.. bro:type:: pm_callit_request + + :Type: :bro:type:`record` + + program: :bro:type:`count` + The RPC program. + + version: :bro:type:`count` + The program version. + + proc: :bro:type:`count` + The procedure being called. + + arg_size: :bro:type:`count` + The size of the argument. + + An RPC portmapper *callit* request. + + .. bro:see:: pm_attempt_callit pm_request_callit + +.. bro:type:: pm_mapping + + :Type: :bro:type:`record` + + program: :bro:type:`count` + The RPC program. + + version: :bro:type:`count` + The program version. + + p: :bro:type:`port` + The port. + + An RPC portmapper mapping. + + .. bro:see:: pm_mappings + +.. bro:type:: pm_mappings + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`pm_mapping` + + Table of RPC portmapper mappings. + + .. bro:see:: pm_request_dump + +.. bro:type:: pm_port_request + + :Type: :bro:type:`record` + + program: :bro:type:`count` + The RPC program. + + version: :bro:type:`count` + The program version. + + is_tcp: :bro:type:`bool` + True if using TCP. + + An RPC portmapper request. + + .. bro:see:: pm_attempt_getport pm_request_getport + +.. bro:type:: raw_pkt_hdr + + :Type: :bro:type:`record` + + l2: :bro:type:`l2_hdr` + The layer 2 header. + + ip: :bro:type:`ip4_hdr` :bro:attr:`&optional` + The IPv4 header if an IPv4 packet. + + ip6: :bro:type:`ip6_hdr` :bro:attr:`&optional` + The IPv6 header if an IPv6 packet. + + tcp: :bro:type:`tcp_hdr` :bro:attr:`&optional` + The TCP header if a TCP packet. + + udp: :bro:type:`udp_hdr` :bro:attr:`&optional` + The UDP header if a UDP packet. + + icmp: :bro:type:`icmp_hdr` :bro:attr:`&optional` + The ICMP header if an ICMP packet. + + A raw packet header, consisting of L2 header and everything in + :bro:see:`pkt_hdr`. . + + .. bro:see:: raw_packet pkt_hdr + +.. bro:type:: record_field + + :Type: :bro:type:`record` + + type_name: :bro:type:`string` + The name of the field's type. + + log: :bro:type:`bool` + True if the field is declared with :bro:attr:`&log` attribute. + + value: :bro:type:`any` :bro:attr:`&optional` + The current value of the field in the record instance passed into + :bro:see:`record_fields` (if it has one). + + default_val: :bro:type:`any` :bro:attr:`&optional` + The value of the :bro:attr:`&default` attribute if defined. + + Meta-information about a record field. + + .. bro:see:: record_fields record_field_table + +.. bro:type:: record_field_table + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`record_field` + + Table type used to map record field declarations to meta-information + describing them. + + .. bro:see:: record_fields record_field + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: rotate_info + + :Type: :bro:type:`record` + + old_name: :bro:type:`string` + Original filename. + + new_name: :bro:type:`string` + File name after rotation. + + open: :bro:type:`time` + Time when opened. + + close: :bro:type:`time` + Time when closed. + + Deprecated. + + .. bro:see:: rotate_file rotate_file_by_name rotate_interval + +.. bro:type:: script_id + + :Type: :bro:type:`record` + + type_name: :bro:type:`string` + The name of the identifier's type. + + exported: :bro:type:`bool` + True if the identifier is exported. + + constant: :bro:type:`bool` + True if the identifier is a constant. + + enum_constant: :bro:type:`bool` + True if the identifier is an enum value. + + option_value: :bro:type:`bool` + True if the identifier is an option. + + redefinable: :bro:type:`bool` + True if the identifier is declared with the :bro:attr:`&redef` attribute. + + value: :bro:type:`any` :bro:attr:`&optional` + The current value of the identifier. + + Meta-information about a script-level identifier. + + .. bro:see:: global_ids id_table + +.. bro:type:: signature_and_hashalgorithm_vec + + :Type: :bro:type:`vector` of :bro:type:`SSL::SignatureAndHashAlgorithm` + + A vector of Signature and Hash Algorithms. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: signature_state + + :Type: :bro:type:`record` + + sig_id: :bro:type:`string` + ID of the matching signature. + + conn: :bro:type:`connection` + Matching connection. + + is_orig: :bro:type:`bool` + True if matching endpoint is originator. + + payload_size: :bro:type:`count` + Payload size of the first matching packet of current endpoint. + + Description of a signature match. + + .. bro:see:: signature_match + +.. bro:type:: software + + :Type: :bro:type:`record` + + name: :bro:type:`string` + + version: :bro:type:`software_version` + + +.. bro:type:: software_version + + :Type: :bro:type:`record` + + major: :bro:type:`int` + + minor: :bro:type:`int` + + minor2: :bro:type:`int` + + addl: :bro:type:`string` + + +.. bro:type:: string_array + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + + An ordered array of strings. The entries are indexed by successive numbers. + Note that it depends on the usage whether the first index is zero or one. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: string_set + + :Type: :bro:type:`set` [:bro:type:`string`] + + A set of strings. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: string_vec + + :Type: :bro:type:`vector` of :bro:type:`string` + + A vector of strings. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: subnet_vec + + :Type: :bro:type:`vector` of :bro:type:`subnet` + + A vector of subnets. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: sw_align + + :Type: :bro:type:`record` + + str: :bro:type:`string` + String a substring is part of. + + index: :bro:type:`count` + Offset substring is located. + + Helper type for return value of Smith-Waterman algorithm. + + .. bro:see:: str_smith_waterman sw_substring_vec sw_substring sw_align_vec sw_params + +.. bro:type:: sw_align_vec + + :Type: :bro:type:`vector` of :bro:type:`sw_align` + + Helper type for return value of Smith-Waterman algorithm. + + .. bro:see:: str_smith_waterman sw_substring_vec sw_substring sw_align sw_params + +.. bro:type:: sw_params + + :Type: :bro:type:`record` + + min_strlen: :bro:type:`count` :bro:attr:`&default` = ``3`` :bro:attr:`&optional` + Minimum size of a substring, minimum "granularity". + + sw_variant: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Smith-Waterman flavor to use. + + Parameters for the Smith-Waterman algorithm. + + .. bro:see:: str_smith_waterman + +.. bro:type:: sw_substring + + :Type: :bro:type:`record` + + str: :bro:type:`string` + A substring. + + aligns: :bro:type:`sw_align_vec` + All strings of which it's a substring. + + new: :bro:type:`bool` + True if start of new alignment. + + Helper type for return value of Smith-Waterman algorithm. + + .. bro:see:: str_smith_waterman sw_substring_vec sw_align_vec sw_align sw_params + + +.. bro:type:: sw_substring_vec + + :Type: :bro:type:`vector` of :bro:type:`sw_substring` + + Return type for Smith-Waterman algorithm. + + .. bro:see:: str_smith_waterman sw_substring sw_align_vec sw_align sw_params + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: table_string_of_count + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`count` + + A table of counts indexed by strings. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: table_string_of_string + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + + A table of strings indexed by strings. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: tcp_hdr + + :Type: :bro:type:`record` + + sport: :bro:type:`port` + source port. + + dport: :bro:type:`port` + destination port + + seq: :bro:type:`count` + sequence number + + ack: :bro:type:`count` + acknowledgement number + + hl: :bro:type:`count` + header length (in bytes) + + dl: :bro:type:`count` + data length (xxx: not in original tcphdr!) + + flags: :bro:type:`count` + flags + + win: :bro:type:`count` + window + + Values extracted from a TCP header. + + .. bro:see:: pkt_hdr discarder_check_tcp + +.. bro:type:: teredo_auth + + :Type: :bro:type:`record` + + id: :bro:type:`string` + Teredo client identifier. + + value: :bro:type:`string` + HMAC-SHA1 over shared secret key between client and + server, nonce, confirmation byte, origin indication + (if present), and the IPv6 packet. + + nonce: :bro:type:`count` + Nonce chosen by Teredo client to be repeated by + Teredo server. + + confirm: :bro:type:`count` + Confirmation byte to be set to 0 by Teredo client + and non-zero by server if client needs new key. + + A Teredo origin indication header. See :rfc:`4380` for more information + about the Teredo protocol. + + .. bro:see:: teredo_bubble teredo_origin_indication teredo_authentication + teredo_hdr + +.. bro:type:: teredo_hdr + + :Type: :bro:type:`record` + + auth: :bro:type:`teredo_auth` :bro:attr:`&optional` + Teredo authentication header. + + origin: :bro:type:`teredo_origin` :bro:attr:`&optional` + Teredo origin indication header. + + hdr: :bro:type:`pkt_hdr` + IPv6 and transport protocol headers. + + A Teredo packet header. See :rfc:`4380` for more information about the + Teredo protocol. + + .. bro:see:: teredo_bubble teredo_origin_indication teredo_authentication + +.. bro:type:: teredo_origin + + :Type: :bro:type:`record` + + p: :bro:type:`port` + Unobfuscated UDP port of Teredo client. + + a: :bro:type:`addr` + Unobfuscated IPv4 address of Teredo client. + + A Teredo authentication header. See :rfc:`4380` for more information + about the Teredo protocol. + + .. bro:see:: teredo_bubble teredo_origin_indication teredo_authentication + teredo_hdr + +.. bro:type:: transport_proto + + :Type: :bro:type:`enum` + + .. bro:enum:: unknown_transport transport_proto + + An unknown transport-layer protocol. + + .. bro:enum:: tcp transport_proto + + TCP. + + .. bro:enum:: udp transport_proto + + UDP. + + .. bro:enum:: icmp transport_proto + + ICMP. + + A connection's transport-layer protocol. Note that Bro uses the term + "connection" broadly, using flow semantics for ICMP and UDP. + +.. bro:type:: udp_hdr + + :Type: :bro:type:`record` + + sport: :bro:type:`port` + source port + + dport: :bro:type:`port` + destination port + + ulen: :bro:type:`count` + udp length + + Values extracted from a UDP header. + + .. bro:see:: pkt_hdr discarder_check_udp + +.. bro:type:: var_sizes + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`count` + + Table type used to map variable names to their memory allocation. + + .. bro:see:: global_sizes + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +.. bro:type:: x509_opaque_vector + + :Type: :bro:type:`vector` of :bro:type:`opaque` of x509 + + A vector of x509 opaques. + + .. todo:: We need this type definition only for declaring builtin functions + via ``bifcl``. We should extend ``bifcl`` to understand composite types + directly and then remove this alias. + +Functions +######### +.. bro:id:: add_interface + + :Type: :bro:type:`function` (iold: :bro:type:`string`, inew: :bro:type:`string`) : :bro:type:`string` + + Internal function. + +.. bro:id:: add_signature_file + + :Type: :bro:type:`function` (sold: :bro:type:`string`, snew: :bro:type:`string`) : :bro:type:`string` + + Internal function. + +.. bro:id:: discarder_check_icmp + + :Type: :bro:type:`function` (p: :bro:type:`pkt_hdr`) : :bro:type:`bool` + + Function for skipping packets based on their ICMP header. If defined, this + function will be called for all ICMP packets before Bro performs any further + analysis. If the function signals to discard a packet, no further processing + will be performed on it. + + + :p: The IP and ICMP headers of the considered packet. + + + :returns: True if the packet should not be analyzed any further. + + .. bro:see:: discarder_check_ip discarder_check_tcp discarder_check_udp + discarder_maxlen + + .. note:: This is very low-level functionality and potentially expensive. + Avoid using it. + +.. bro:id:: discarder_check_ip + + :Type: :bro:type:`function` (p: :bro:type:`pkt_hdr`) : :bro:type:`bool` + + Function for skipping packets based on their IP header. If defined, this + function will be called for all IP packets before Bro performs any further + analysis. If the function signals to discard a packet, no further processing + will be performed on it. + + + :p: The IP header of the considered packet. + + + :returns: True if the packet should not be analyzed any further. + + .. bro:see:: discarder_check_tcp discarder_check_udp discarder_check_icmp + discarder_maxlen + + .. note:: This is very low-level functionality and potentially expensive. + Avoid using it. + +.. bro:id:: discarder_check_tcp + + :Type: :bro:type:`function` (p: :bro:type:`pkt_hdr`, d: :bro:type:`string`) : :bro:type:`bool` + + Function for skipping packets based on their TCP header. If defined, this + function will be called for all TCP packets before Bro performs any further + analysis. If the function signals to discard a packet, no further processing + will be performed on it. + + + :p: The IP and TCP headers of the considered packet. + + + :d: Up to :bro:see:`discarder_maxlen` bytes of the TCP payload. + + + :returns: True if the packet should not be analyzed any further. + + .. bro:see:: discarder_check_ip discarder_check_udp discarder_check_icmp + discarder_maxlen + + .. note:: This is very low-level functionality and potentially expensive. + Avoid using it. + +.. bro:id:: discarder_check_udp + + :Type: :bro:type:`function` (p: :bro:type:`pkt_hdr`, d: :bro:type:`string`) : :bro:type:`bool` + + Function for skipping packets based on their UDP header. If defined, this + function will be called for all UDP packets before Bro performs any further + analysis. If the function signals to discard a packet, no further processing + will be performed on it. + + + :p: The IP and UDP headers of the considered packet. + + + :d: Up to :bro:see:`discarder_maxlen` bytes of the UDP payload. + + + :returns: True if the packet should not be analyzed any further. + + .. bro:see:: discarder_check_ip discarder_check_tcp discarder_check_icmp + discarder_maxlen + + .. note:: This is very low-level functionality and potentially expensive. + Avoid using it. + +.. bro:id:: log_file_name + + :Type: :bro:type:`function` (tag: :bro:type:`string`) : :bro:type:`string` + :Attributes: :bro:attr:`&redef` + + Deprecated. This is superseded by the new logging framework. + +.. bro:id:: max_count + + :Type: :bro:type:`function` (a: :bro:type:`count`, b: :bro:type:`count`) : :bro:type:`count` + + Returns maximum of two ``count`` values. + + + :a: First value. + + :b: Second value. + + + :returns: The maximum of *a* and *b*. + +.. bro:id:: max_double + + :Type: :bro:type:`function` (a: :bro:type:`double`, b: :bro:type:`double`) : :bro:type:`double` + + Returns maximum of two ``double`` values. + + + :a: First value. + + :b: Second value. + + + :returns: The maximum of *a* and *b*. + +.. bro:id:: max_interval + + :Type: :bro:type:`function` (a: :bro:type:`interval`, b: :bro:type:`interval`) : :bro:type:`interval` + + Returns maximum of two ``interval`` values. + + + :a: First value. + + :b: Second value. + + + :returns: The maximum of *a* and *b*. + +.. bro:id:: min_count + + :Type: :bro:type:`function` (a: :bro:type:`count`, b: :bro:type:`count`) : :bro:type:`count` + + Returns minimum of two ``count`` values. + + + :a: First value. + + :b: Second value. + + + :returns: The minimum of *a* and *b*. + +.. bro:id:: min_double + + :Type: :bro:type:`function` (a: :bro:type:`double`, b: :bro:type:`double`) : :bro:type:`double` + + Returns minimum of two ``double`` values. + + + :a: First value. + + :b: Second value. + + + :returns: The minimum of *a* and *b*. + +.. bro:id:: min_interval + + :Type: :bro:type:`function` (a: :bro:type:`interval`, b: :bro:type:`interval`) : :bro:type:`interval` + + Returns minimum of two ``interval`` values. + + + :a: First value. + + :b: Second value. + + + :returns: The minimum of *a* and *b*. + +.. bro:id:: open_log_file + + :Type: :bro:type:`function` (tag: :bro:type:`string`) : :bro:type:`file` + :Attributes: :bro:attr:`&redef` + + Deprecated. This is superseded by the new logging framework. + + diff --git a/doc/scripts/base/init-default.bro.rst b/doc/scripts/base/init-default.bro.rst new file mode 100644 index 0000000000..73bc690031 --- /dev/null +++ b/doc/scripts/base/init-default.bro.rst @@ -0,0 +1,19 @@ +:tocdepth: 3 + +base/init-default.bro +===================== + +This script loads everything in the base/ script directory. If you want +to run Bro without all of these scripts loaded by default, you can use +the ``-b`` (``--bare-mode``) command line argument. You can also copy the +"@load" lines from this script to your own script to load only the scripts +that you actually want. + +:Imports: :doc:`base/files/extract `, :doc:`base/files/hash `, :doc:`base/files/pe `, :doc:`base/files/unified2 `, :doc:`base/files/x509 `, :doc:`base/frameworks/analyzer `, :doc:`base/frameworks/cluster `, :doc:`base/frameworks/config `, :doc:`base/frameworks/control `, :doc:`base/frameworks/dpd `, :doc:`base/frameworks/intel `, :doc:`base/frameworks/netcontrol `, :doc:`base/frameworks/notice `, :doc:`base/frameworks/openflow `, :doc:`base/frameworks/packet-filter `, :doc:`base/frameworks/reporter `, :doc:`base/frameworks/signatures `, :doc:`base/frameworks/software `, :doc:`base/frameworks/sumstats `, :doc:`base/frameworks/tunnels `, :doc:`base/misc/find-checksum-offloading.bro `, :doc:`base/misc/find-filtered-trace.bro `, :doc:`base/misc/version.bro `, :doc:`base/protocols/conn `, :doc:`base/protocols/dce-rpc `, :doc:`base/protocols/dhcp `, :doc:`base/protocols/dnp3 `, :doc:`base/protocols/dns `, :doc:`base/protocols/ftp `, :doc:`base/protocols/http `, :doc:`base/protocols/imap `, :doc:`base/protocols/irc `, :doc:`base/protocols/krb `, :doc:`base/protocols/modbus `, :doc:`base/protocols/mysql `, :doc:`base/protocols/ntlm `, :doc:`base/protocols/pop3 `, :doc:`base/protocols/radius `, :doc:`base/protocols/rdp `, :doc:`base/protocols/rfb `, :doc:`base/protocols/sip `, :doc:`base/protocols/smb `, :doc:`base/protocols/smtp `, :doc:`base/protocols/snmp `, :doc:`base/protocols/socks `, :doc:`base/protocols/ssh `, :doc:`base/protocols/ssl `, :doc:`base/protocols/syslog `, :doc:`base/protocols/tunnels `, :doc:`base/protocols/xmpp `, :doc:`base/utils/active-http.bro `, :doc:`base/utils/addrs.bro `, :doc:`base/utils/conn-ids.bro `, :doc:`base/utils/dir.bro `, :doc:`base/utils/directions-and-hosts.bro `, :doc:`base/utils/email.bro `, :doc:`base/utils/exec.bro `, :doc:`base/utils/files.bro `, :doc:`base/utils/geoip-distance.bro `, :doc:`base/utils/hash_hrw.bro `, :doc:`base/utils/numbers.bro `, :doc:`base/utils/paths.bro `, :doc:`base/utils/patterns.bro `, :doc:`base/utils/queue.bro `, :doc:`base/utils/site.bro `, :doc:`base/utils/strings.bro `, :doc:`base/utils/thresholds.bro `, :doc:`base/utils/time.bro `, :doc:`base/utils/urls.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/init-frameworks-and-bifs.bro.rst b/doc/scripts/base/init-frameworks-and-bifs.bro.rst new file mode 100644 index 0000000000..3a1fa5b673 --- /dev/null +++ b/doc/scripts/base/init-frameworks-and-bifs.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/init-frameworks-and-bifs.bro +================================= + + +:Imports: :doc:`base/bif `, :doc:`base/bif/plugins `, :doc:`base/frameworks/analyzer `, :doc:`base/frameworks/broker `, :doc:`base/frameworks/files `, :doc:`base/frameworks/input `, :doc:`base/frameworks/logging ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/misc/find-checksum-offloading.bro.rst b/doc/scripts/base/misc/find-checksum-offloading.bro.rst new file mode 100644 index 0000000000..c297bfa567 --- /dev/null +++ b/doc/scripts/base/misc/find-checksum-offloading.bro.rst @@ -0,0 +1,38 @@ +:tocdepth: 3 + +base/misc/find-checksum-offloading.bro +====================================== +.. bro:namespace:: ChecksumOffloading + +Discover cases where the local interface is sniffed and outbound packets +have checksum offloading. Load this script to receive a notice if it's +likely that checksum offload effects are being seen on a live interface or +in a packet trace file. + +:Namespace: ChecksumOffloading +:Imports: :doc:`base/frameworks/notice ` + +Summary +~~~~~~~ +Redefinable Options +################### +===================================================================================== ========================================================= +:bro:id:`ChecksumOffloading::check_interval`: :bro:type:`interval` :bro:attr:`&redef` The interval which is used for checking packet statistics + to see if checksum offloading is affecting analysis. +===================================================================================== ========================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: ChecksumOffloading::check_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 secs`` + + The interval which is used for checking packet statistics + to see if checksum offloading is affecting analysis. + + diff --git a/doc/scripts/base/misc/find-filtered-trace.bro.rst b/doc/scripts/base/misc/find-filtered-trace.bro.rst new file mode 100644 index 0000000000..393c7ebe2f --- /dev/null +++ b/doc/scripts/base/misc/find-filtered-trace.bro.rst @@ -0,0 +1,37 @@ +:tocdepth: 3 + +base/misc/find-filtered-trace.bro +================================= +.. bro:namespace:: FilteredTraceDetection + +Discovers trace files that contain TCP traffic consisting only of +control packets (e.g. it's been filtered to contain only SYN/FIN/RST +packets and no content). On finding such a trace, a warning is +emitted that suggests toggling the :bro:see:`detect_filtered_trace` +option may be desired if the user does not want Bro to report +missing TCP segments. + +:Namespace: FilteredTraceDetection + +Summary +~~~~~~~ +State Variables +############### +============================================================================= ================================================================= +:bro:id:`FilteredTraceDetection::enable`: :bro:type:`bool` :bro:attr:`&redef` Flag to enable filtered trace file detection and warning message. +============================================================================= ================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +State Variables +############### +.. bro:id:: FilteredTraceDetection::enable + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Flag to enable filtered trace file detection and warning message. + + diff --git a/doc/scripts/base/misc/version.bro.rst b/doc/scripts/base/misc/version.bro.rst new file mode 100644 index 0000000000..d0c7149873 --- /dev/null +++ b/doc/scripts/base/misc/version.bro.rst @@ -0,0 +1,119 @@ +:tocdepth: 3 + +base/misc/version.bro +===================== +.. bro:namespace:: Version + +Provide information about the currently running Bro version. +The most convenient way to access this are the Version::number +and Version::info constants. + +:Namespace: Version +:Imports: :doc:`base/frameworks/reporter `, :doc:`base/utils/strings.bro ` + +Summary +~~~~~~~ +Constants +######### +================================================================ =================================================================================== +:bro:id:`Version::info`: :bro:type:`Version::VersionDescription` `VersionDescription` record pertaining to the currently running version of Bro. +:bro:id:`Version::number`: :bro:type:`count` version number of the currently running version of Bro as a numeric representation. +================================================================ =================================================================================== + +Types +##### +=========================================================== ======================================= +:bro:type:`Version::VersionDescription`: :bro:type:`record` A type exactly describing a Bro version +=========================================================== ======================================= + +Functions +######### +================================================= =================================================================================== +:bro:id:`Version::at_least`: :bro:type:`function` Test if the current running version of Bro is greater or equal to the given version + string. +:bro:id:`Version::parse`: :bro:type:`function` Parse a given version string. +================================================= =================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: Version::info + + :Type: :bro:type:`Version::VersionDescription` + + `VersionDescription` record pertaining to the currently running version of Bro. + +.. bro:id:: Version::number + + :Type: :bro:type:`count` + + version number of the currently running version of Bro as a numeric representation. + The format of the number is ABBCC with A being the major version, + bb being the minor version (2 digits) and CC being the patchlevel (2 digits). + As an example, Bro 2.4.1 results in the number 20401 + +Types +##### +.. bro:type:: Version::VersionDescription + + :Type: :bro:type:`record` + + version_number: :bro:type:`count` + Number representing the version which can be used for easy comparison. + The format of the number is ABBCC with A being the major version, + bb being the minor version (2 digits) and CC being the patchlevel (2 digits). + As an example, Bro 2.4.1 results in the number 20401. + + major: :bro:type:`count` + Major version number (e.g. 2 for 2.5) + + minor: :bro:type:`count` + Minor version number (e.g. 5 for 2.5) + + patch: :bro:type:`count` + Patch version number (e.g. 0 for 2.5 or 1 for 2.4.1) + + commit: :bro:type:`count` + Commit number for development versions, e.g. 12 for 2.4-12. 0 for non-development versions + + beta: :bro:type:`bool` + If set to true, the version is a beta build of Bro + + debug: :bro:type:`bool` + If set to true, the version is a debug build + + version_string: :bro:type:`string` + String representation of this version + + A type exactly describing a Bro version + +Functions +######### +.. bro:id:: Version::at_least + + :Type: :bro:type:`function` (version_string: :bro:type:`string`) : :bro:type:`bool` + + Test if the current running version of Bro is greater or equal to the given version + string. + + + :version_string: Version to check against the current running version. + + + :returns: True if running version greater or equal to the given version. + +.. bro:id:: Version::parse + + :Type: :bro:type:`function` (version_string: :bro:type:`string`) : :bro:type:`Version::VersionDescription` + + Parse a given version string. + + + :version_string: Bro version string. + + + :returns: `VersionDescription` record. + + diff --git a/doc/scripts/base/protocols/conn/__load__.bro.rst b/doc/scripts/base/protocols/conn/__load__.bro.rst new file mode 100644 index 0000000000..5a9f53ca0f --- /dev/null +++ b/doc/scripts/base/protocols/conn/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/conn/__load__.bro +================================ + + +:Imports: :doc:`base/protocols/conn/contents.bro `, :doc:`base/protocols/conn/inactivity.bro `, :doc:`base/protocols/conn/main.bro `, :doc:`base/protocols/conn/polling.bro `, :doc:`base/protocols/conn/thresholds.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/conn/contents.bro.rst b/doc/scripts/base/protocols/conn/contents.bro.rst new file mode 100644 index 0000000000..b4cf981671 --- /dev/null +++ b/doc/scripts/base/protocols/conn/contents.bro.rst @@ -0,0 +1,63 @@ +:tocdepth: 3 + +base/protocols/conn/contents.bro +================================ +.. bro:namespace:: Conn + +This script can be used to extract either the originator's data or the +responders data or both. By default nothing is extracted, and in order +to actually extract data the ``c$extract_orig`` and/or the +``c$extract_resp`` variable must be set to ``T``. One way to achieve this +would be to handle the :bro:id:`connection_established` event elsewhere +and set the ``extract_orig`` and ``extract_resp`` options there. +However, there may be trouble with the timing due to event queue delay. + +.. note:: + + This script does not work well in a cluster context unless it has a + remotely mounted disk to write the content files to. + +:Namespace: Conn +:Imports: :doc:`base/utils/files.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +======================================================================== ================================================================== +:bro:id:`Conn::default_extract`: :bro:type:`bool` :bro:attr:`&redef` If this variable is set to ``T``, then all contents of all + connections will be extracted. +:bro:id:`Conn::extraction_prefix`: :bro:type:`string` :bro:attr:`&redef` The prefix given to files containing extracted connections as they + are opened on disk. +======================================================================== ================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`connection`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Conn::default_extract + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If this variable is set to ``T``, then all contents of all + connections will be extracted. + +.. bro:id:: Conn::extraction_prefix + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"contents"`` + + The prefix given to files containing extracted connections as they + are opened on disk. + + diff --git a/doc/scripts/base/protocols/conn/inactivity.bro.rst b/doc/scripts/base/protocols/conn/inactivity.bro.rst new file mode 100644 index 0000000000..92bbe4a8b1 --- /dev/null +++ b/doc/scripts/base/protocols/conn/inactivity.bro.rst @@ -0,0 +1,60 @@ +:tocdepth: 3 + +base/protocols/conn/inactivity.bro +================================== +.. bro:namespace:: Conn + +Adjust the inactivity timeouts for interactive services which could +very possibly have long delays between packets. + +:Namespace: Conn + +Summary +~~~~~~~ +Runtime Options +############### +================================================================================== ================================================================== +:bro:id:`Conn::analyzer_inactivity_timeouts`: :bro:type:`table` :bro:attr:`&redef` Define inactivity timeouts by the service detected being used over + the connection. +:bro:id:`Conn::port_inactivity_timeouts`: :bro:type:`table` :bro:attr:`&redef` Define inactivity timeouts based on common protocol ports. +================================================================================== ================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Conn::analyzer_inactivity_timeouts + + :Type: :bro:type:`table` [:bro:type:`Analyzer::Tag`] of :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + [Analyzer::ANALYZER_FTP] = 1.0 hr, + [Analyzer::ANALYZER_SSH] = 1.0 hr + } + + Define inactivity timeouts by the service detected being used over + the connection. + +.. bro:id:: Conn::port_inactivity_timeouts + + :Type: :bro:type:`table` [:bro:type:`port`] of :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + [22/tcp] = 1.0 hr, + [513/tcp] = 1.0 hr, + [21/tcp] = 1.0 hr, + [23/tcp] = 1.0 hr + } + + Define inactivity timeouts based on common protocol ports. + + diff --git a/doc/scripts/base/protocols/conn/index.rst b/doc/scripts/base/protocols/conn/index.rst new file mode 100644 index 0000000000..558b53d8f0 --- /dev/null +++ b/doc/scripts/base/protocols/conn/index.rst @@ -0,0 +1,51 @@ +:orphan: + +Package: base/protocols/conn +============================ + +Support for connection (TCP, UDP, or ICMP) analysis. + +:doc:`/scripts/base/protocols/conn/__load__.bro` + + +:doc:`/scripts/base/protocols/conn/main.bro` + + This script manages the tracking/logging of general information regarding + TCP, UDP, and ICMP traffic. For UDP and ICMP, "connections" are to + be interpreted using flow semantics (sequence of packets from a source + host/port to a destination host/port). Further, ICMP "ports" are to + be interpreted as the source port meaning the ICMP message type and + the destination port being the ICMP message code. + +:doc:`/scripts/base/protocols/conn/contents.bro` + + This script can be used to extract either the originator's data or the + responders data or both. By default nothing is extracted, and in order + to actually extract data the ``c$extract_orig`` and/or the + ``c$extract_resp`` variable must be set to ``T``. One way to achieve this + would be to handle the :bro:id:`connection_established` event elsewhere + and set the ``extract_orig`` and ``extract_resp`` options there. + However, there may be trouble with the timing due to event queue delay. + + .. note:: + + This script does not work well in a cluster context unless it has a + remotely mounted disk to write the content files to. + +:doc:`/scripts/base/protocols/conn/inactivity.bro` + + Adjust the inactivity timeouts for interactive services which could + very possibly have long delays between packets. + +:doc:`/scripts/base/protocols/conn/polling.bro` + + Implements a generic way to poll connections looking for certain features + (e.g. monitor bytes transferred). The specific feature of a connection + to look for, the polling interval, and the code to execute if the feature + is found are all controlled by user-defined callback functions. + +:doc:`/scripts/base/protocols/conn/thresholds.bro` + + Implements a generic API to throw events when a connection crosses a + fixed threshold of bytes or packets. + diff --git a/doc/scripts/base/protocols/conn/main.bro.rst b/doc/scripts/base/protocols/conn/main.bro.rst new file mode 100644 index 0000000000..2fb23b64b0 --- /dev/null +++ b/doc/scripts/base/protocols/conn/main.bro.rst @@ -0,0 +1,201 @@ +:tocdepth: 3 + +base/protocols/conn/main.bro +============================ +.. bro:namespace:: Conn + +This script manages the tracking/logging of general information regarding +TCP, UDP, and ICMP traffic. For UDP and ICMP, "connections" are to +be interpreted using flow semantics (sequence of packets from a source +host/port to a destination host/port). Further, ICMP "ports" are to +be interpreted as the source port meaning the ICMP message type and +the destination port being the ICMP message code. + +:Namespace: Conn +:Imports: :doc:`base/utils/site.bro ` + +Summary +~~~~~~~ +Types +##### +========================================== =================================================================== +:bro:type:`Conn::Info`: :bro:type:`record` The record type which contains column fields of the connection log. +========================================== =================================================================== + +Redefinitions +############# +========================================== ========================================= +:bro:type:`Log::ID`: :bro:type:`enum` The connection logging stream identifier. +:bro:type:`connection`: :bro:type:`record` +========================================== ========================================= + +Events +###### +=========================================== ============================================================== +:bro:id:`Conn::log_conn`: :bro:type:`event` Event that can be handled to access the :bro:type:`Conn::Info` + record as it is sent on to the logging framework. +=========================================== ============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Conn::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + This is the time of the first packet. + + uid: :bro:type:`string` :bro:attr:`&log` + A unique identifier of the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + proto: :bro:type:`transport_proto` :bro:attr:`&log` + The transport layer protocol of the connection. + + service: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + An identification of an application protocol being sent over + the connection. + + duration: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + How long the connection lasted. For 3-way or 4-way connection + tear-downs, this will not include the final ACK. + + orig_bytes: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + The number of payload bytes the originator sent. For TCP + this is taken from sequence numbers and might be inaccurate + (e.g., due to large connections). + + resp_bytes: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + The number of payload bytes the responder sent. See + *orig_bytes*. + + conn_state: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + ========== =============================================== + conn_state Meaning + ========== =============================================== + S0 Connection attempt seen, no reply. + S1 Connection established, not terminated. + SF Normal establishment and termination. Note that this is the same symbol as for state S1. You can tell the two apart because for S1 there will not be any byte counts in the summary, while for SF there will be. + REJ Connection attempt rejected. + S2 Connection established and close attempt by originator seen (but no reply from responder). + S3 Connection established and close attempt by responder seen (but no reply from originator). + RSTO Connection established, originator aborted (sent a RST). + RSTR Responder sent a RST. + RSTOS0 Originator sent a SYN followed by a RST, we never saw a SYN-ACK from the responder. + RSTRH Responder sent a SYN ACK followed by a RST, we never saw a SYN from the (purported) originator. + SH Originator sent a SYN followed by a FIN, we never saw a SYN ACK from the responder (hence the connection was "half" open). + SHR Responder sent a SYN ACK followed by a FIN, we never saw a SYN from the originator. + OTH No SYN seen, just midstream traffic (a "partial connection" that was not later closed). + ========== =============================================== + + local_orig: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + If the connection is originated locally, this value will be T. + If it was originated remotely it will be F. In the case that + the :bro:id:`Site::local_nets` variable is undefined, this + field will be left empty at all times. + + local_resp: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + If the connection is responded to locally, this value will be T. + If it was responded to remotely it will be F. In the case that + the :bro:id:`Site::local_nets` variable is undefined, this + field will be left empty at all times. + + missed_bytes: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Indicates the number of bytes missed in content gaps, which + is representative of packet loss. A value other than zero + will normally cause protocol analysis to fail but some + analysis may have been completed prior to the packet loss. + + history: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Records the state history of connections as a string of + letters. The meaning of those letters is: + + ====== ==================================================== + Letter Meaning + ====== ==================================================== + s a SYN w/o the ACK bit set + h a SYN+ACK ("handshake") + a a pure ACK + d packet with payload ("data") + f packet with FIN bit set + r packet with RST bit set + c packet with a bad checksum (applies to UDP too) + t packet with retransmitted payload + w packet with a zero window advertisement + i inconsistent packet (e.g. FIN+RST bits set) + q multi-flag packet (SYN+FIN or SYN+RST bits set) + ^ connection direction was flipped by Bro's heuristic + ====== ==================================================== + + If the event comes from the originator, the letter is in + upper-case; if it comes from the responder, it's in + lower-case. The 'a', 'd', 'i' and 'q' flags are + recorded a maximum of one time in either direction regardless + of how many are actually seen. 'f', 'h', 'r' and + 's' can be recorded multiple times for either direction + if the associated sequence number differs from the + last-seen packet of the same flag type. + 'c', 't' and 'w' are recorded in a logarithmic fashion: + the second instance represents that the event was seen + (at least) 10 times; the third instance, 100 times; etc. + + orig_pkts: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Number of packets that the originator sent. + Only set if :bro:id:`use_conn_size_analyzer` = T. + + orig_ip_bytes: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Number of IP level bytes that the originator sent (as seen on + the wire, taken from the IP total_length header field). + Only set if :bro:id:`use_conn_size_analyzer` = T. + + resp_pkts: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Number of packets that the responder sent. + Only set if :bro:id:`use_conn_size_analyzer` = T. + + resp_ip_bytes: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Number of IP level bytes that the responder sent (as seen on + the wire, taken from the IP total_length header field). + Only set if :bro:id:`use_conn_size_analyzer` = T. + + tunnel_parents: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` :bro:attr:`&optional` + If this connection was over a tunnel, indicate the + *uid* values for any encapsulating parent connections + used over the lifetime of this inner connection. + + orig_l2_addr: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/conn/mac-logging.bro` is loaded) + + Link-layer address of the originator, if available. + + resp_l2_addr: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/conn/mac-logging.bro` is loaded) + + Link-layer address of the responder, if available. + + vlan: :bro:type:`int` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/conn/vlan-logging.bro` is loaded) + + The outer VLAN for this connection, if applicable. + + inner_vlan: :bro:type:`int` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/conn/vlan-logging.bro` is loaded) + + The inner VLAN for this connection, if applicable. + + The record type which contains column fields of the connection log. + +Events +###### +.. bro:id:: Conn::log_conn + + :Type: :bro:type:`event` (rec: :bro:type:`Conn::Info`) + + Event that can be handled to access the :bro:type:`Conn::Info` + record as it is sent on to the logging framework. + + diff --git a/doc/scripts/base/protocols/conn/polling.bro.rst b/doc/scripts/base/protocols/conn/polling.bro.rst new file mode 100644 index 0000000000..6a9551857c --- /dev/null +++ b/doc/scripts/base/protocols/conn/polling.bro.rst @@ -0,0 +1,51 @@ +:tocdepth: 3 + +base/protocols/conn/polling.bro +=============================== +.. bro:namespace:: ConnPolling + +Implements a generic way to poll connections looking for certain features +(e.g. monitor bytes transferred). The specific feature of a connection +to look for, the polling interval, and the code to execute if the feature +is found are all controlled by user-defined callback functions. + +:Namespace: ConnPolling + +Summary +~~~~~~~ +Functions +######### +================================================== ===================================== +:bro:id:`ConnPolling::watch`: :bro:type:`function` Starts monitoring a given connection. +================================================== ===================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: ConnPolling::watch + + :Type: :bro:type:`function` (c: :bro:type:`connection`, callback: :bro:type:`function` (c: :bro:type:`connection`, cnt: :bro:type:`count`) : :bro:type:`interval`, cnt: :bro:type:`count`, i: :bro:type:`interval`) : :bro:type:`void` + + Starts monitoring a given connection. + + + :c: The connection to watch. + + + :callback: A callback function that takes as arguments the monitored + *connection*, and counter *cnt* that increments each time + the callback is called. It returns an interval indicating + how long in the future to schedule an event which will call + the callback. A negative return interval causes polling + to stop. + + + :cnt: The initial value of a counter which gets passed to *callback*. + + + :i: The initial interval at which to schedule the next callback. + May be ``0secs`` to poll right away. + + diff --git a/doc/scripts/base/protocols/conn/thresholds.bro.rst b/doc/scripts/base/protocols/conn/thresholds.bro.rst new file mode 100644 index 0000000000..b090026893 --- /dev/null +++ b/doc/scripts/base/protocols/conn/thresholds.bro.rst @@ -0,0 +1,172 @@ +:tocdepth: 3 + +base/protocols/conn/thresholds.bro +================================== +.. bro:namespace:: ConnThreshold + +Implements a generic API to throw events when a connection crosses a +fixed threshold of bytes or packets. + +:Namespace: ConnThreshold + +Summary +~~~~~~~ +Types +##### +========================================================= = +:bro:type:`ConnThreshold::Thresholds`: :bro:type:`record` +========================================================= = + +Redefinitions +############# +========================================== = +:bro:type:`connection`: :bro:type:`record` +========================================== = + +Events +###### +===================================================================== ============================================================ +:bro:id:`ConnThreshold::bytes_threshold_crossed`: :bro:type:`event` Generated for a connection that crossed a set byte threshold +:bro:id:`ConnThreshold::packets_threshold_crossed`: :bro:type:`event` Generated for a connection that crossed a set byte threshold +===================================================================== ============================================================ + +Functions +######### +======================================================================= =================================================================================================== +:bro:id:`ConnThreshold::delete_bytes_threshold`: :bro:type:`function` Deletes a byte threshold for connection sizes. +:bro:id:`ConnThreshold::delete_packets_threshold`: :bro:type:`function` Deletes a packet threshold for connection sizes. +:bro:id:`ConnThreshold::set_bytes_threshold`: :bro:type:`function` Sets a byte threshold for connection sizes, adding it to potentially already existing thresholds. +:bro:id:`ConnThreshold::set_packets_threshold`: :bro:type:`function` Sets a packet threshold for connection sizes, adding it to potentially already existing thresholds. +======================================================================= =================================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: ConnThreshold::Thresholds + + :Type: :bro:type:`record` + + orig_byte: :bro:type:`set` [:bro:type:`count`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + current originator byte thresholds we watch for + + resp_byte: :bro:type:`set` [:bro:type:`count`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + current responder byte thresholds we watch for + + orig_packet: :bro:type:`set` [:bro:type:`count`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + corrent originator packet thresholds we watch for + + resp_packet: :bro:type:`set` [:bro:type:`count`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + corrent responder packet thresholds we watch for + + +Events +###### +.. bro:id:: ConnThreshold::bytes_threshold_crossed + + :Type: :bro:type:`event` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) + + Generated for a connection that crossed a set byte threshold + + + :c: the connection + + + :threshold: the threshold that was set + + + :is_orig: True if the threshold was crossed by the originator of the connection + +.. bro:id:: ConnThreshold::packets_threshold_crossed + + :Type: :bro:type:`event` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) + + Generated for a connection that crossed a set byte threshold + + + :c: the connection + + + :threshold: the threshold that was set + + + :is_orig: True if the threshold was crossed by the originator of the connection + +Functions +######### +.. bro:id:: ConnThreshold::delete_bytes_threshold + + :Type: :bro:type:`function` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) : :bro:type:`bool` + + Deletes a byte threshold for connection sizes. + + + :cid: The connection id. + + + :threshold: Threshold in bytes to remove. + + + :is_orig: If true, threshold is removed for packets from originator, otherwhise for packets from responder. + + + :returns: T on success, F on failure. + +.. bro:id:: ConnThreshold::delete_packets_threshold + + :Type: :bro:type:`function` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) : :bro:type:`bool` + + Deletes a packet threshold for connection sizes. + + + :cid: The connection id. + + + :threshold: Threshold in packets. + + + :is_orig: If true, threshold is removed for packets from originator, otherwise for packets from responder. + + + :returns: T on success, F on failure. + +.. bro:id:: ConnThreshold::set_bytes_threshold + + :Type: :bro:type:`function` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) : :bro:type:`bool` + + Sets a byte threshold for connection sizes, adding it to potentially already existing thresholds. + conn_bytes_threshold_crossed will be raised for each set threshold. + + + :cid: The connection id. + + + :threshold: Threshold in bytes. + + + :is_orig: If true, threshold is set for bytes from originator, otherwise for bytes from responder. + + + :returns: T on success, F on failure. + +.. bro:id:: ConnThreshold::set_packets_threshold + + :Type: :bro:type:`function` (c: :bro:type:`connection`, threshold: :bro:type:`count`, is_orig: :bro:type:`bool`) : :bro:type:`bool` + + Sets a packet threshold for connection sizes, adding it to potentially already existing thresholds. + conn_packets_threshold_crossed will be raised for each set threshold. + + + :cid: The connection id. + + + :threshold: Threshold in packets. + + + :is_orig: If true, threshold is set for packets from originator, otherwise for packets from responder. + + + :returns: T on success, F on failure. + + diff --git a/doc/scripts/base/protocols/dce-rpc/__load__.bro.rst b/doc/scripts/base/protocols/dce-rpc/__load__.bro.rst new file mode 100644 index 0000000000..1dcf03e6e6 --- /dev/null +++ b/doc/scripts/base/protocols/dce-rpc/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/dce-rpc/__load__.bro +=================================== + + +:Imports: :doc:`base/protocols/dce-rpc/consts.bro `, :doc:`base/protocols/dce-rpc/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/dce-rpc/consts.bro.rst b/doc/scripts/base/protocols/dce-rpc/consts.bro.rst new file mode 100644 index 0000000000..1306fa876d --- /dev/null +++ b/doc/scripts/base/protocols/dce-rpc/consts.bro.rst @@ -0,0 +1,1433 @@ +:tocdepth: 3 + +base/protocols/dce-rpc/consts.bro +================================= +.. bro:namespace:: DCE_RPC + + +:Namespace: DCE_RPC + +Summary +~~~~~~~ +Redefinable Options +################### +============================================================================================================================================ ================================================== +:bro:id:`DCE_RPC::operations`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`DCE_RPC::pipe_name_to_common_uuid`: :bro:type:`table` :bro:attr:`&redef` This table is to map pipe names to the most common + service used over that pipe. +:bro:id:`DCE_RPC::uuid_endpoint_map`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +============================================================================================================================================ ================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: DCE_RPC::operations + + :Type: :bro:type:`table` [:bro:type:`string`, :bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa", 8] = "ept_map_auth_async", + ["12345678-1234-abcd-ef00-0123456789ab", 91] = "RpcGetSpoolFileInfo", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 77] = "LlsrReplicationCertDbAddW", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 10] = "DsRolerAbortDownlevelServerUpgrade", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 88] = "LlsrLocalServiceInfoGetA", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d6", 3] = "RpcSrvRequestParams", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 8] = "LlsrProductAddW", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 6] = "RpcSrvFallbackRefreshParams", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 37] = "NetrShareDelStart", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 38] = "RpcServerNWLogonSetAdmin", + ["12345678-1234-abcd-ef00-0123456789ab", 92] = "RpcCommitSpoolData", + ["000001a0-0000-0000-c000-000000000046", 1] = "AddRefIRemoteISCMActivator", + ["12345678-1234-abcd-ef00-01234567cffb", 42] = "NetrServerTrustPasswordsGet", + ["12345778-1234-abcd-ef00-0123456789ac", 20] = "SamrQueryInformationGroup", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 18] = "NetrDfsFlushFtTable", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 10] = "RpcWinStationConnect", + ["12345778-1234-abcd-ef00-0123456789ab", 11] = "LsarEnumerateAccounts", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 13] = "R_WinsGetNameAndAdd", + ["12345778-1234-abcd-ef00-0123456789ab", 10] = "LsarCreateAccount", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 2] = "FrsRpcStartPromotionParent", + ["c386ca3e-9061-4a72-821e-498d83be188f", 12] = "AudioSessionGetState", + ["12345678-1234-abcd-ef00-01234567cffb", 40] = "DsrEnumerateDomainTrusts", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 15] = "NetrShareEnum", + ["00000143-0000-0000-c000-000000000046", 3] = "RemQueryInterface", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 25] = "LlsrUserProductEnumA", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 16] = "NetrDfsGetDcAddress", + ["12345678-1234-abcd-ef00-0123456789ab", 44] = "RpcDeletePrinterConnection", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 12] = "KeyrEnroll_V2", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 12] = "PNP_GetDepth", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 55] = "RpcWinStationQueryLogonCredentials", + ["12345678-1234-abcd-ef00-0123456789ab", 46] = "RpcAddMonitor", + ["12345678-1234-abcd-ef00-01234567cffb", 37] = "DsrAddressToSiteNamesExW", + ["12345678-1234-abcd-ef00-0123456789ab", 79] = "RpcEnumPrinterDataEx", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 63] = "LlsrReplicationServiceAddW", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 21] = "PNP_GetInterfaceDeviceAlias", + ["12345778-1234-abcd-ef00-0123456789ab", 41] = "LsarDeleteTrustedDomain", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 19] = "LlsrUserInfoGetA", + ["12345778-1234-abcd-ef00-0123456789ac", 18] = "SamrLookupIdsInDomain", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 17] = "RpcWinStationShadow", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 47] = "PNP_AddResDes", + ["12345678-1234-abcd-ef00-0123456789ab", 87] = "RpcEnumPerMachineConnections", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 44] = "PNP_GetFirstLogConf", + ["d95afe70-a6d5-4259-822e-2c84da1ddb0d", 1] = "WsdrAbortShutdown", + ["99fcfec4-5260-101b-bbcb-00aa0021347a", 0] = "ResolveOxid", + ["c386ca3e-9061-4a72-821e-498d83be188f", 4] = "AudioServerCreateStream", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 12] = "CreateClassEnum", + ["367abb81-9844-35f1-ad32-98f038001003", 43] = "ScSendTSMessage", + ["12345778-1234-abcd-ef00-0123456789ab", 83] = "LsarSetAuditPolicy", + ["12345778-1234-abcd-ef00-0123456789ab", 50] = "LsarEnumerateTrustedDomainsEx", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 8] = "PNP_GetRelatedDeviceInstance", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 1] = "EcDoDisconnect", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 66] = "RpcConnectCallback", + ["c386ca3e-9061-4a72-821e-498d83be188f", 66] = "AudioVolumeStepDown", + ["367abb81-9844-35f1-ad32-98f038001003", 25] = "EnumDependentServicesA", + ["12345678-1234-abcd-ef00-0123456789ab", 42] = "RpcDeletePrinterIC", + ["12345678-1234-abcd-ef00-0123456789ab", 50] = "RpcDeletePrintProvidor", + ["17fdd703-1827-4e34-79d4-24a55c53bb37", 2] = "NetrMessageNameGetInfo", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 9] = "NspiGetProps", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 12] = "R_WinsWorkerThdUpd", + ["86d35949-83c9-4044-b424-db363231fd0c", 7] = "SchRpcEnumTasks", + ["f50aac00-c7f3-428e-a022-a6b71bfb9d43", 5] = "SSCatDBRebuildDatabase", + ["12345678-1234-abcd-ef00-01234567cffb", 8] = "NetrDatabaseSync", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 27] = "NetrServerTransportDel", + ["6bffd098-a112-3610-9833-46c3f87e345a", 1] = "NetrWkstaSetInfo", + ["12345778-1234-abcd-ef00-0123456789ac", 41] = "SamrGetDisplayEnumerationIndex", + ["12345678-1234-abcd-ef00-0123456789ab", 20] = "RpcEndPagePrinter", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 17] = "LlsrUserEnumA", + ["c386ca3e-9061-4a72-821e-498d83be188f", 30] = "AudioServerGetMixFormat", + ["83da7c00-e84f-11d2-9807-00c04f8ec850", 7] = "SfcSrv_InstallProtectedFiles", + ["367abb81-9844-35f1-ad32-98f038001003", 40] = "QueryServiceStatusEx", + ["12345678-1234-abcd-ef00-01234567cffb", 15] = "NetrServerAuthenticate2", + ["367abb81-9844-35f1-ad32-98f038001003", 22] = "ScSetServiceBitsA", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 7] = "EcRGetDCName", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 32] = "PNP_DisableDevInst", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 20] = "RpcWinStationGenerateLicense", + ["c386ca3e-9061-4a72-821e-498d83be188f", 26] = "AudioSessionGetChannelVolume", + ["12345778-1234-abcd-ef00-0123456789ac", 33] = "SamrGetMembersInAlias", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 24] = "ElfrReportEventAndSourceW", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 24] = "NetrServerStatisticsGet", + ["12345778-1234-abcd-ef00-0123456789ac", 63] = "SamrUnicodeChangePasswordUser3", + ["12345778-1234-abcd-ef00-0123456789ab", 30] = "LsarQuerySecret", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 1] = "DnssrvQuery", + ["2f5f3220-c126-1076-b549-074d078619da", 12] = "NDdeSetTrustedShareW", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 45] = "PNP_GetNextLogConf", + ["86d35949-83c9-4044-b424-db363231fd0c", 5] = "SchRpcGetSecurity", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 10] = "nsi_profile_elt_inq_next", + ["12345778-1234-abcd-ef00-0123456789ac", 6] = "SamrEnumerateDomainsInSamServer", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 87] = "LlsrLocalServiceInfoGetW", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 80] = "LlsrCapabilityGet", + ["c386ca3e-9061-4a72-821e-498d83be188f", 15] = "AudioSessionIsSystemSoundsSession", + ["12345778-1234-abcd-ef00-0123456789ab", 73] = "LsarQueryForestTrustInformation", + ["83da7c00-e84f-11d2-9807-00c04f8ec850", 5] = "SfcSrv_SetCacheSize", + ["12345678-1234-abcd-ef00-0123456789ab", 15] = "RpcEnumPrintProcessors", + ["12345678-1234-abcd-ef00-0123456789ab", 8] = "RpcGetPrinter", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 8] = "gfxLogoff", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 3] = "OpenNamespace", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 63] = "PNP_GetBlockedDriverInfo", + ["12345678-1234-abcd-ef00-01234567cffb", 18] = "NetrLogonControl2Ex", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 16] = "NetrShareGetInfo", + ["12345778-1234-abcd-ef00-0123456789ab", 37] = "LsarAddAccountRights", + ["338cd001-2244-31f1-aaaa-900038001003", 6] = "BaseRegCreateKey", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 3] = "NetrDfsSetInfo", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 9] = "PNP_EnumerateSubKeys", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 16] = "RpcSrvGetClassId", + ["12345778-1234-abcd-ef00-0123456789ac", 0] = "SamrConnect", + ["c386ca3e-9061-4a72-821e-498d83be188f", 58] = "AudioVolumeAddMasterVolumeNotification", + ["12345778-1234-abcd-ef00-0123456789ab", 71] = "LsarGenAuditEvent", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 56] = "PNP_QueryArbitratorFreeData", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 26] = "LlsrUserProductDeleteW", + ["12345778-1234-abcd-ef00-0123456789ac", 21] = "SamrSetInformationGroup", + ["367abb81-9844-35f1-ad32-98f038001003", 42] = "EnumServicesStatusExW", + ["12345778-1234-abcd-ef00-0123456789ac", 61] = "SamrConnect3", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 55] = "LlsrServiceInfoGetA", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 14] = "EcDoAsyncConnectEx", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 4] = "FrsBackupComplete", + ["12345678-1234-abcd-ef00-01234567cffb", 27] = "DsrGetDcNameEx", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 37] = "LlsrMappingUserAddA", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 0] = "nsi_group_delete", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 51] = "LlsrLocalProductInfoGetA", + ["99fcfec4-5260-101b-bbcb-00aa0021347a", 2] = "ComplexPing", + ["12345678-1234-abcd-ef00-0123456789ab", 23] = "RpcEndDocPrinter", + ["12345678-1234-abcd-ef00-0123456789ab", 60] = "RpcReplyClosePrinter", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 44] = "RpcWinStationGetProcessSid", + ["12345778-1234-abcd-ef00-0123456789ac", 5] = "SamrLookupDomainInSamServer", + ["c386ca3e-9061-4a72-821e-498d83be188f", 8] = "AudioServerIsFormatSupported", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 5] = "QueryObjectSink", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 8] = "RpcAsyncSetPrinter", + ["12345778-1234-abcd-ef00-0123456789ab", 92] = "CredReadByTokenHandle", + ["338cd001-2244-31f1-aaaa-900038001003", 13] = "BaseRegLoadKey", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 12] = "DRSCrackNames", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 18] = "RpcAsyncSetPrinterData", + ["12345778-1234-abcd-ef00-0123456789ac", 39] = "SamrGetGroupsForUser", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 15] = "DRSRemoveDsDomain", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 34] = "RpcAsyncSendRecvBidiData", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 31] = "NetprPathCanonicalize", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c3", 1] = "nsi_binding_unexport", + ["12345778-1234-abcd-ef00-0123456789ab", 90] = "LsarSetAuditSecurity", + ["00000143-0000-0000-c000-000000000046", 5] = "RemRelease", + ["12345778-1234-abcd-ef00-0123456789ab", 22] = "LsarSetQuotasForAccount", + ["12345778-1234-abcd-ef00-0123456789ac", 65] = "SamrRidToSid", + ["12345778-1234-abcd-ef00-0123456789ab", 0] = "LsarClose", + ["338cd001-2244-31f1-aaaa-900038001003", 30] = "BaseInitiateSystemShutdownEx", + ["12345778-1234-abcd-ef00-0123456789ab", 58] = "LsarLookupNames2", + ["12345778-1234-abcd-ef00-0123456789ac", 8] = "SamrQueryInformationDomain", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 57] = "NetrShareDelEx", + ["6bffd098-a112-3610-9833-46c3f87e345a", 31] = "NetrWorkstationResetDfsCache", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 31] = "PNP_SetDeviceProblem", + ["12345678-1234-abcd-ef00-0123456789ab", 40] = "RpcCreatePrinterIC", + ["12345678-1234-abcd-ef00-01234567cffb", 30] = "NetrServerPasswordSet2", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 14] = "PNP_SetDeviceRegProp", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 6] = "NetrCharDevQPurge", + ["12345778-1234-abcd-ef00-0123456789ab", 54] = "LsarSetDomainInformationPolicy", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 15] = "nsi_entry_expand_name", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8", 8] = "RpcLicensingDeactivateCurrentPolicy", + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa", 7] = "ept_map_auth", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 35] = "NetprNameCompare", + ["378e52b0-c0a9-11cf-822d-00aa0051e40f", 1] = "SASetNSAccountInformation", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 24] = "RpcSrvDeRegisterConnectionStateNotification", + ["86d35949-83c9-4044-b424-db363231fd0c", 9] = "SchRpcGetInstanceInfo", + ["367abb81-9844-35f1-ad32-98f038001003", 16] = "OpenServiceW", + ["338cd001-2244-31f1-aaaa-900038001003", 27] = "OpenCurrentConfig", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 24] = "ExecMethod", + ["68b58241-c259-4f03-a2e5-a2651dcbc930", 1] = "KSrGetTemplates", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 53] = "RpcAsyncDeletePrintProcessor", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 11] = "RpcSrvRegisterParams", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 9] = "RpcWinStationNameFromLogonId", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 19] = "RpcAsyncSetPrinterDataEx", + ["12345678-1234-abcd-ef00-0123456789ab", 2] = "RpcSetJob", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 25] = "ExecMethodAsync", + ["afa8bd80-7d8a-11c9-bef4-08002b102989", 2] = "is_server_listening", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 8] = "R_WinsDelDbRecs", + ["6bffd098-a112-3610-9833-012892020162", 3] = "BrowserrResetNetlogonState", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 1] = "LlsrClose", + ["12345678-1234-abcd-ef00-01234567cffb", 29] = "NetrLogonGetDomainInfo", + ["367abb81-9844-35f1-ad32-98f038001003", 24] = "CreateServiceA", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 7] = "RpcWinStationSendMessage", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 10] = "KeyrEnumerateAvailableCertTypes", + ["12345678-1234-abcd-ef00-0123456789ab", 59] = "RpcRouterReplyPrinter", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 57] = "PNP_QueryArbitratorFreeSize", + ["378e52b0-c0a9-11cf-822d-00aa0051e40f", 0] = "SASetAccountInformation", + ["12345678-1234-abcd-ef00-0123456789ab", 43] = "RpcAddPrinterConnection", + ["12345678-1234-abcd-ef00-0123456789ab", 16] = "RpcGetPrintProcessorDirectory", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 14] = "NetrDfsManagerInitialize", + ["6bffd098-a112-3610-9833-46c3f87e345a", 11] = "NetrUseEnum", + ["12345778-1234-abcd-ef00-0123456789ac", 11] = "SamrEnumerateGroupsInDomain", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 26] = "RpcWinStationSetPoolCount", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 29] = "PNP_DeviceInstanceAction", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 53] = "RpcWinStationGetLanAdapterName", + ["c386ca3e-9061-4a72-821e-498d83be188f", 53] = "AudioVolumeSetChannelVolumeLevelScalar", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 6] = "DnssrvQuery2", + ["6bffd098-a112-3610-9833-012892020162", 6] = "BrowserrResetStatistics", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 22] = "RpcSrvRequestCachedParams", + ["12345778-1234-abcd-ef00-0123456789ab", 15] = "LsarLookupSids", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 6] = "NetrDfsRename", + ["6bffd098-a112-3610-9833-46c3f87e345a", 15] = "NetrLogonDomainNameDel", + ["12345678-1234-abcd-ef00-0123456789ab", 0] = "RpcEnumPrinters", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 9] = "DnssrvUpdateRecord2", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 12] = "NetrDfsAddStdRoot", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 0] = "RpcWinStationOpenServer", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 1] = "RpcAsyncAddPrinter", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 13] = "EcUnknown0xD", + ["367abb81-9844-35f1-ad32-98f038001003", 32] = "GetServiceDisplayNameA", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 37] = "RpcAsyncDeletePrinterIC", + ["c386ca3e-9061-4a72-821e-498d83be188f", 16] = "AudioSessionGetDisplayName", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 76] = "LlsrCertificateClaimAddW", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c3", 0] = "nsi_binding_export", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 22] = "LlsrUserDeleteW", + ["894de0c0-0d55-11d3-a322-00c04fa321a1", 0] = "BaseInitiateShutdown", + ["83da7c00-e84f-11d2-9807-00c04f8ec850", 6] = "SfcSrv_SetDisable", + ["12345678-1234-abcd-ef00-01234567cffb", 39] = "NetrLogonSamLogonEx", + ["338cd001-2244-31f1-aaaa-900038001003", 23] = "BaseRegUnLoadKey", + ["12345678-1234-abcd-ef00-0123456789ab", 30] = "RpcAddForm", + ["c386ca3e-9061-4a72-821e-498d83be188f", 5] = "AudioServerDestroyStream", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 35] = "RpcAsyncCreatePrinterIC", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 65] = "LlsrProductSecurityGetW", + ["c386ca3e-9061-4a72-821e-498d83be188f", 57] = "AudioSessionGetDisplayName", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 67] = "RpcAsyncDeletePrinterDriverPackage", + ["f50aac00-c7f3-428e-a022-a6b71bfb9d43", 0] = "SSCatDBAddCatalog", + ["367abb81-9844-35f1-ad32-98f038001003", 52] = "ScSendPnPMessage", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 64] = "RpcAsyncGetCorePrinterDrivers", + ["12345678-1234-abcd-ef00-0123456789ab", 100] = "RpcUploadPrinterDriverPackage", + ["12345778-1234-abcd-ef00-0123456789ab", 25] = "LsarOpenTrustedDomain", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 73] = "RpcWinStationAutoReconnect", + ["12345678-1234-abcd-ef00-0123456789ab", 3] = "RpcGetJob", + ["12345778-1234-abcd-ef00-0123456789ab", 67] = "CredrProfileLoaded", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 39] = "RpcAsyncAddPrinterDriver", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 30] = "NetprPathType", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 10] = "LlsrProductUserEnumW", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 33] = "LlsrMappingInfoSetA", + ["12345778-1234-abcd-ef00-0123456789ab", 93] = "CredrRestoreCredentials", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 44] = "RpcAsyncAddPrintProcessor", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 2] = "RpcIcaServerPing", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 38] = "LlsrMappingUserDeleteW", + ["338cd001-2244-31f1-aaaa-900038001003", 16] = "BaseRegQueryInfoKey", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 52] = "LlsrLocalProductInfoSetW", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 71] = "LlsrCertificateClaimEnumA", + ["2f5f3220-c126-1076-b549-074d078619da", 18] = "NDdeSpecialCommand", + ["367abb81-9844-35f1-ad32-98f038001003", 28] = "OpenServiceA", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 53] = "NetrServerTransportDelEx", + ["c386ca3e-9061-4a72-821e-498d83be188f", 32] = "PolicyConfigSetDeviceFormat", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 29] = "LlsrMappingEnumA", + ["c386ca3e-9061-4a72-821e-498d83be188f", 31] = "PolicyConfigGetDeviceFormat", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 71] = "PNP_DriverStoreDeleteDriverPackage", + ["338cd001-2244-31f1-aaaa-900038001003", 8] = "BaseRegDeleteValue", + ["12345678-1234-abcd-ef00-01234567cffb", 3] = "NetrLogonSamLogoff", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 3] = "nsi_group_mbr_inq_begin", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 79] = "LlsrReplicationUserAddExW", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 86] = "LlsrLocalServiceInfoSetA", + ["12345678-1234-abcd-ef00-0123456789ab", 27] = "RpcSetPrinterData", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 8] = "DnssrvEnumRecords2", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 17] = "RpcSrvSetClientId", + ["12345778-1234-abcd-ef00-0123456789ab", 62] = "CredrEnumerate", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 69] = "LlsrProductLicensesGetA", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 18] = "LlsrUserInfoGetW", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 14] = "R_WinsGetBrowserNames_Old", + ["12345678-1234-abcd-ef00-0123456789ab", 67] = "RpcRouterRefreshPrinterChangeNotification", + ["12345678-1234-abcd-ef00-0123456789ab", 6] = "RpcDeletePrinter", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 61] = "RpcWinStationIsHelpAssistantSession", + ["12345778-1234-abcd-ef00-0123456789ab", 44] = "LsarOpenPolicy2", + ["367abb81-9844-35f1-ad32-98f038001003", 3] = "LockServiceDatabase", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 38] = "NetrShareDelCommit", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 46] = "PNP_GetLogConfPriority", + ["12345678-1234-abcd-ef00-0123456789ab", 56] = "RpcFindClosePrinterChangeNotification", + ["367abb81-9844-35f1-ad32-98f038001003", 54] = "ScOpenServiceStatusHandle", + ["338cd001-2244-31f1-aaaa-900038001003", 26] = "BaseRegGetVersion", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 12] = "ElfrClearELFA", + ["6bffd098-a112-3610-9833-46c3f87e345a", 24] = "NetrRenameMachineInDomain2", + ["12345778-1234-abcd-ef00-0123456789ab", 5] = "LsarChangePassword", + ["12345678-1234-abcd-ef00-01234567cffb", 10] = "NetrAccountSync", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 18] = "CreateInstanceEnum", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 42] = "LlsrMappingDeleteW", + ["f50aac00-c7f3-428e-a022-a6b71bfb9d43", 3] = "SSCatDBRegisterForChangeNotification", + ["12b81e99-f207-4a4c-85d3-77b42f76fd14", 0] = "SeclCreateProcessWithLogonW", + ["2f5f3220-c126-1076-b549-074d078619da", 4] = "NDdeGetShareSecurityW", + ["12345678-1234-abcd-ef00-01234567cffb", 36] = "NetrEnumerateTrustedDomainsEx", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 19] = "NetrDfsAdd2", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 3] = "R_WinsDoStaticInit", + ["338cd001-2244-31f1-aaaa-900038001003", 3] = "OpenPerformanceData", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 52] = "RpcServerQueryInetConnectorInformation", + ["12345678-1234-abcd-ef00-01234567cffb", 13] = "NetrGetAnyDCName", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 8] = "DsRolerServerSaveStateForUpgrade", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 9] = "ElfrOpenBELW", + ["338cd001-2244-31f1-aaaa-900038001003", 34] = "BaseRegQueryMultipleValues2", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 58] = "PNP_RunDetection", + ["367abb81-9844-35f1-ad32-98f038001003", 11] = "ChangeServiceConfigW", + ["12345778-1234-abcd-ef00-0123456789ac", 1] = "SamrCloseHandle", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 41] = "PNP_GetHwProfInfo", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 40] = "PNP_HwProfFlags", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 12] = "NetrSessionEnum", + ["000001a0-0000-0000-c000-000000000046", 3] = "RemoteGetClassObject", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 28] = "RpcWinStationCallback", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 5] = "LlsrLicenseAddA", + ["17fdd703-1827-4e34-79d4-24a55c53bb37", 3] = "NetrMessageNameDel", + ["12345678-1234-abcd-ef00-0123456789ab", 22] = "RpcReadPrinter", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 18] = "DRSExecuteKCC", + ["12345778-1234-abcd-ef00-0123456789ab", 87] = "LsarEnumerateAuditSubCategories", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 33] = "RpcAsyncXcvData", + ["c386ca3e-9061-4a72-821e-498d83be188f", 21] = "AudioSessionSetVolume", + ["367abb81-9844-35f1-ad32-98f038001003", 44] = "CreateServiceWOW64A", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 2] = "ElfrCloseEL", + ["12345678-1234-abcd-ef00-01234567cffb", 24] = "NetrLogonComputeServerDigest", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 40] = "RpcWinStationNtsdDebug", + ["12345678-1234-abcd-ef00-01234567cffb", 35] = "NetrLogonGetTimeServiceParentDomain", + ["c386ca3e-9061-4a72-821e-498d83be188f", 27] = "AudioSessionSetAllVolumes", + ["12345778-1234-abcd-ef00-0123456789ab", 94] = "CredrBackupCredentials", + ["6bffd098-a112-3610-9833-46c3f87e345a", 29] = "NetrSetPrimaryComputerName", + ["367abb81-9844-35f1-ad32-98f038001003", 48] = "GetNotifyResult", + ["83da7c00-e84f-11d2-9807-00c04f8ec850", 0] = "SfcSrv_GetNextProtectedFile", + ["68b58241-c259-4f03-a2e5-a2651dcbc930", 0] = "KSrSubmitRequest", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 70] = "LlsrProductLicensesGetW", + ["12345778-1234-abcd-ef00-0123456789ab", 14] = "LsarLookupNames", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 1] = "ElfrBackupELFW", + ["12345778-1234-abcd-ef00-0123456789ac", 54] = "SamrOemChangePasswordUser2", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 2] = "LlsrLicenseEnumW", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 44] = "LlsrServerEnumW", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 9] = "KeyrImportCert", + ["91ae6020-9e3c-11cf-8d7c-00aa00c091be", 0] = "CertServerRequest", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 45] = "NetrDfsDeleteLocalPartition", + ["c386ca3e-9061-4a72-821e-498d83be188f", 45] = "AudioVolumeConnect", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 21] = "RpcWinStationInstallLicense", + ["c386ca3e-9061-4a72-821e-498d83be188f", 43] = "AudioSessionManagerDeleteAudioSessionClientNotification", + ["12345678-1234-abcd-ef00-0123456789ab", 47] = "RpcDeleteMonitor", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 70] = "PNP_DriverStoreAddDriverPackage", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8", 5] = "RpcLicensingGetAvailablePolicyIds", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 9] = "FrsBackupComplete", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 39] = "PNP_RequestEjectPC", + ["6bffd098-a112-3610-9833-46c3f87e345a", 19] = "NetrRenameMachineInDomain", + ["12345678-1234-abcd-ef00-01234567cffb", 20] = "DsrGetDcName", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 18] = "RpcWinStationShadowTargetSetup", + ["1ff70682-0a51-30e8-076d-740be8cee98b", 3] = "NetrJobGetInfo", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 11] = "ElfrReportEventW", + ["12345678-1234-abcd-ef00-0123456789ab", 39] = "RpcDeletePort", + ["12345778-1234-abcd-ef00-0123456789ac", 29] = "SamrSetInformationAlias", + ["86d35949-83c9-4044-b424-db363231fd0c", 6] = "SchRpcEnumFolder", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 43] = "RpcAsyncDeletePrinterDriverEx", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 9] = "LlsrProductAddA", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 28] = "LlsrMappingEnumW", + ["12345778-1234-abcd-ef00-0123456789ab", 12] = "LsarCreateTrustedDomain", + ["12345778-1234-abcd-ef00-0123456789ac", 3] = "SamrQuerySecurityObject", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 14] = "LlsrProductLicenseEnumW", + ["12345778-1234-abcd-ef00-0123456789ab", 66] = "CredrGetTargetInfo", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 29] = "RpcWinStationGetApplicationInfo", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 24] = "RpcAsyncSetForm", + ["c386ca3e-9061-4a72-821e-498d83be188f", 22] = "AudioSessionGetMute", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 0] = "R_WinsRecordAction", + ["6bffd098-a112-3610-9833-012892020162", 7] = "NetrBrowserStatisticsClear", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 0] = "ElfrClearELFW", + ["12345778-1234-abcd-ef00-0123456789ab", 45] = "LsarGetUserName", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 30] = "PNP_GetDeviceStatus", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8", 6] = "RpcLicensingGetPolicy", + ["12345778-1234-abcd-ef00-0123456789ab", 19] = "LsarAddPrivilegesToAccount", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 41] = "NetrServerTransportAddEx", + ["12345778-1234-abcd-ef00-0123456789ab", 51] = "LsarCreateTrustedDomainEx", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 1] = "KeyrEnumerateProviders", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 10] = "FrsRpcVerifyPromotionParentEx", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 41] = "RpcWinStationBreakPoint", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 15] = "PNP_GetClassInstance", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 50] = "PNP_GetResDesData", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 10] = "PNP_GetDeviceList", + ["12345778-1234-abcd-ef00-0123456789ac", 37] = "SamrSetInformationUser", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 19] = "RpcSrvNotifyMediaReconnected", + ["338cd001-2244-31f1-aaaa-900038001003", 29] = "BaseRegQueryMultipleValues", + ["86d35949-83c9-4044-b424-db363231fd0c", 4] = "SchRpcSetSecurity", + ["12345778-1234-abcd-ef00-0123456789ab", 39] = "LsarQueryTrustedDomainInfo", + ["12345678-1234-abcd-ef00-01234567cffb", 1] = "NetrLogonUasLogoff", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 75] = "RpcWinStationOpenSessionDirectory", + ["afa8bd80-7d8a-11c9-bef4-08002b102989", 1] = "inq_stats", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 26] = "PNP_GetClassRegProp", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 19] = "PNP_GetClassName", + ["6bffd098-a112-3610-9833-46c3f87e345a", 9] = "NetrUseGetInfo", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 7] = "DRSReplicaModify", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 33] = "RpcWinStationNotifyLogoff", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 58] = "RpcWinStationUpdateSettings", + ["12345778-1234-abcd-ef00-0123456789ab", 49] = "LsarSetTrustedDomainInfoByName", + ["00000143-0000-0000-c000-000000000046", 1] = "AddRef", + ["6bffd098-a112-3610-9833-012892020162", 11] = "BrowserrServerEnumEx", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 84] = "LlsrLocalServiceAddW", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 6] = "FrsBackupComplete", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 32] = "NetprPathCompare", + ["12345678-1234-abcd-ef00-0123456789ab", 65] = "RpcRemoteFindFirstPrinterChangeNotificationEx", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 69] = "PNP_ApplyPowerSettings", + ["12345778-1234-abcd-ef00-0123456789ab", 85] = "LsarEnumerateAuditPolicy", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 6] = "NspiResortRestriction", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 5] = "DRSReplicaAdd", + ["afa8bd80-7d8a-11c9-bef4-08002b102989", 4] = "inq_princ_name", + ["12345678-1234-abcd-ef00-0123456789ab", 36] = "RpcEnumMonitors", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 1] = "FrsRpcVerifyPromotionParent", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 32] = "RpcWinStationNotifyLogon", + ["12345678-1234-abcd-ef00-0123456789ab", 1] = "RpcOpenPrinter", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 67] = "LlsrProductSecuritySetW", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 10] = "RpcSrvPersistentRequestParams", + ["f309ad18-d86a-11d0-a075-00c04fb68820", 4] = "RequestChallenge", + ["c386ca3e-9061-4a72-821e-498d83be188f", 29] = "AudioServerDisconnect", + ["c386ca3e-9061-4a72-821e-498d83be188f", 34] = "PolicyConfigSetProcessingPeriod", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 13] = "LlsrProductServerEnumA", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 6] = "nsi_profile_delete", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 2] = "PNP_GetVersion", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 68] = "RpcWinStationSessionInitialized", + ["12345678-1234-abcd-ef00-0123456789ab", 95] = "RpcSendRecvBidiData", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 27] = "RpcAsyncEnumPrinterData", + ["c386ca3e-9061-4a72-821e-498d83be188f", 18] = "AudioSessionGetSessionClass", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 16] = "PNP_CreateKey", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 12] = "LlsrProductServerEnumW", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 33] = "PNP_UninstallDevInst", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 72] = "RpcAsyncDeleteJobNamedProperty", + ["338cd001-2244-31f1-aaaa-900038001003", 9] = "BaseRegEnumKey", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 43] = "PNP_FreeLogConf", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 19] = "NetrShareDelSticky", + ["367abb81-9844-35f1-ad32-98f038001003", 23] = "ChangeServiceConfigA", + ["12345778-1234-abcd-ef00-0123456789ac", 24] = "SamrRemoveMemberFromGroup", + ["2f5f3220-c126-1076-b549-074d078619da", 6] = "NDdeSetShareSecurityW", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 1] = "R_WinsStatus", + ["6bffd098-a112-3610-9833-012892020162", 10] = "BrowserrQueryEmulatedDomains", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 34] = "RpcWinStationEnumerateProcesses", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 11] = "RpcAsyncStartPagePrinter", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 69] = "RpcAsyncResetPrinter", + ["367abb81-9844-35f1-ad32-98f038001003", 0] = "CloseServiceHandle", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 14] = "nsi_entry_object_inq_done", + ["12345778-1234-abcd-ef00-0123456789ac", 55] = "SamrUnicodeChangePasswordUser2", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 46] = "RpcAsyncGetPrintProcessorDirectory", + ["c386ca3e-9061-4a72-821e-498d83be188f", 49] = "AudioVolumeSetMasterVolumeLevelScalar", + ["338cd001-2244-31f1-aaaa-900038001003", 33] = "OpenPerformanceNlsText", + ["367abb81-9844-35f1-ad32-98f038001003", 7] = "SetServiceStatus", + ["c386ca3e-9061-4a72-821e-498d83be188f", 52] = "AudioVolumeSetChannelVolumeLevel", + ["57674cd0-5200-11ce-a897-08002b2e9c6d", 1] = "LlsrLicenseFree", + ["17fdd703-1827-4e34-79d4-24a55c53bb37", 1] = "NetrMessageNameEnum", + ["12345678-1234-abcd-ef00-01234567cffb", 44] = "NetrGetForestTrustInformation", + ["12345678-1234-abcd-ef00-0123456789ab", 25] = "RpcScheduleJob", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 11] = "winmmSessionConnectState", + ["12345778-1234-abcd-ef00-0123456789ab", 88] = "LsarLookupAuditCategoryName", + ["12345678-1234-abcd-ef00-0123456789ab", 75] = "RpcClusterSplClose", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 18] = "ElfrReportEventA", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 2] = "EcDoRpc", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 16] = "ElfrOpenBELA", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 0] = "DsRolerGetPrimaryDomainInformation", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 18] = "PNP_GetClassCount", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 21] = "LlsrUserInfoSetA", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 17] = "NetrShareSetInfo", + ["83da7c00-e84f-11d2-9807-00c04f8ec850", 1] = "SfcSrv_IsFileProtected", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 71] = "RpcAsyncSetJobNamedProperty", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 4] = "PNP_InitDetection", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 63] = "RpcWinStationUpdateClientCachedCredentials", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 4] = "DsRolerDemoteDc", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 0] = "DnssrvOperation", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 23] = "NetrServerDiskEnum", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 49] = "LlsrLocalProductEnumA", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 31] = "LlsrMappingInfoGetA", + ["3dde7c30-165d-11d1-ab8f-00805f14db40", 0] = "bkrp_BackupKey", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 4] = "EcRRegisterPushNotification", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 61] = "RpcAsyncGetRemoteNotifications", + ["57674cd0-5200-11ce-a897-08002b2e9c6d", 0] = "LlsrLicenseRequestW", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 83] = "LlsrLocalServiceAddA", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 10] = "DRSInterDomainMove", + ["c386ca3e-9061-4a72-821e-498d83be188f", 59] = "AudioVolumeDeleteMasterVolumeNotification", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 1] = "NetrCharDevGetInfo", + ["0a74ef1c-41a4-4e06-83ae-dc74fb1cdd53", 1] = "ItSrvUnregisterIdleTask", + ["000001a0-0000-0000-c000-000000000046", 2] = "ReleaseIRemoteISCMActivator", + ["12345678-1234-abcd-ef00-01234567cffb", 41] = "DsrDeregisterDnsHostRecords", + ["12345778-1234-abcd-ef00-0123456789ab", 33] = "LsarLookupPrivilegeDisplayName", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 36] = "RpcAsyncPlayGdiScriptOnPrinterIC", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 39] = "RpcServerNWLogonQueryAdmin", + ["c386ca3e-9061-4a72-821e-498d83be188f", 55] = "AudioVolumeGetChannelVolumeLevelScalar", + ["12345678-1234-abcd-ef00-0123456789ab", 96] = "RpcAddDriverCatalog", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 4] = "CancelAsyncCall", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 63] = "RpcAsyncUploadPrinterDriverPackage", + ["12345678-1234-abcd-ef00-0123456789ab", 97] = "RpcAddPrinterConnection2", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 11] = "PNP_GetDeviceListSize", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 65] = "RpcAsyncCorePrinterDriverInstalled", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 25] = "PNP_UnregisterDeviceClassAssociation", + ["c386ca3e-9061-4a72-821e-498d83be188f", 3] = "AudioServerGetAudioSession", + ["12345778-1234-abcd-ef00-0123456789ac", 27] = "SamrOpenAlias", + ["d3fbb514-0e3b-11cb-8fad-08002b1d29c3", 0] = "nsi_binding_lookup_begin", + ["12345678-1234-abcd-ef00-0123456789ab", 9] = "RpcAddPrinterDriver", + ["367abb81-9844-35f1-ad32-98f038001003", 41] = "EnumServicesStatusExA", + ["2f5f3220-c126-1076-b549-074d078619da", 5] = "NDdeSetShareSecurityA", + ["6bffd098-a112-3610-9833-46c3f87e345a", 22] = "NetrJoinDomain2", + ["12345778-1234-abcd-ef00-0123456789ac", 59] = "SamrSetBootKeyInformation", + ["12345778-1234-abcd-ef00-0123456789ac", 45] = "SamrRemoveMemberFromForeignDomain", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 9] = "NetrDfsManagerSendSiteInfo", + ["367abb81-9844-35f1-ad32-98f038001003", 45] = "CreateServiceWOW64W", + ["12345678-1234-abcd-ef00-01234567cffb", 21] = "NetrLogonGetCapabilities", + ["12345778-1234-abcd-ef00-0123456789ab", 81] = "LsarAdtReportSecurityEvent", + ["12345678-1234-abcd-ef00-0123456789ab", 71] = "RpcSetPort", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 13] = "RpcWinStationDisconnect", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 23] = "LlsrUserDeleteA", + ["12345778-1234-abcd-ef00-0123456789ac", 7] = "SamrOpenDomain", + ["c386ca3e-9061-4a72-821e-498d83be188f", 25] = "AudioSessionSetChannelVolume", + ["338cd001-2244-31f1-aaaa-900038001003", 28] = "OpenDynData", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 17] = "ElfrReadELA", + ["367abb81-9844-35f1-ad32-98f038001003", 2] = "DeleteService", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 55] = "PNP_SetHwProf", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 2] = "nsi_group_mbr_remove", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 22] = "RpcWinStationEnumerateLicenses", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 72] = "PNP_RegisterServiceNotification", + ["12345678-1234-abcd-ef00-0123456789ab", 32] = "RpcGetForm", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 42] = "PNP_AddEmptyLogConf", + ["6bffd098-a112-3610-9833-46c3f87e345a", 4] = "NetrWkstaUserSetInfo", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 3] = "LlsrLicenseEnumA", + ["86d35949-83c9-4044-b424-db363231fd0c", 17] = "SchRpcGetTaskInfo", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 3] = "EcGetMoreRpc", + ["12345678-1234-abcd-ef00-0123456789ab", 82] = "RpcDeletePrinterKey", + ["000001a0-0000-0000-c000-000000000046", 4] = "RemoteCreateInstance", + ["12345778-1234-abcd-ef00-0123456789ab", 1] = "LsarDelete", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 32] = "RpcAsyncDeletePrinterKey", + ["12345778-1234-abcd-ef00-0123456789ab", 76] = "LsarLookupSids3", + ["12345778-1234-abcd-ef00-0123456789ac", 69] = "SamrPerformGenericOperation", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 11] = "R_WinsResetCounters", + ["12345778-1234-abcd-ef00-0123456789ac", 36] = "SamrQueryInformationUser", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 2] = "DsRolerDcAsDc", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 48] = "LlsrLocalProductEnumW", + ["12345778-1234-abcd-ef00-0123456789ab", 61] = "CredrRead", + ["f50aac00-c7f3-428e-a022-a6b71bfb9d43", 4] = "KeyrCloseKeyService", + ["12345778-1234-abcd-ef00-0123456789ab", 8] = "LsarSetInformationPolicy", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 39] = "LlsrMappingUserDeleteA", + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa", 2] = "ept_lookup", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 21] = "ElfrWriteClusterEvents", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 74] = "PNP_DeleteServiceDevices", + ["12345678-1234-abcd-ef00-01234567cffb", 45] = "NetrLogonSameLogonWithFlags", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 19] = "ElfrRegisterClusterSvc", + ["86d35949-83c9-4044-b424-db363231fd0c", 12] = "SchRpcRun", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 1] = "DRSUnbind", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 41] = "RpcAsyncGetPrinterDriverDirectory", + ["c386ca3e-9061-4a72-821e-498d83be188f", 36] = "PolicyConfigSetShareMode", + ["12345678-1234-abcd-ef00-01234567cffb", 48] = "DsrUpdateReadOnlyServerDnsRecords", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 16] = "R_WinsSetFlags", + ["12345778-1234-abcd-ef00-0123456789ab", 26] = "LsarQueryInfoTrustedDomain", + ["12345778-1234-abcd-ef00-0123456789ab", 53] = "LsarQueryDomainInformationPolicy", + ["12345678-1234-abcd-ef00-01234567cffb", 7] = "NetrDatabaseDeltas", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 51] = "RpcServerSetInternetConnectorStatus", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 21] = "RpcSrvSetMSFTVendorSpecificOptions", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 57] = "RpcWinStationUnRegisterConsoleNotification", + ["367abb81-9844-35f1-ad32-98f038001003", 4] = "QueryServiceObjectSecurity", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 26] = "RpcAsyncGetPrinterDriver", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 81] = "LlsrLocalServiceEnumW", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 4] = "DRSUpdateRefs", + ["12345678-1234-abcd-ef00-0123456789ab", 81] = "RpcDeletePrinterDataEx", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 17] = "PNP_DeleteRegistryKey", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 6] = "LlsrProductEnumW", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 3] = "PNP_GetGlobalState", + ["1ff70682-0a51-30e8-076d-740be8cee98b", 2] = "NetrJobEnum", + ["12345778-1234-abcd-ef00-0123456789ab", 77] = "LsarLookupNames4", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 51] = "NetrDfsFixLocalVolume", + ["12345778-1234-abcd-ef00-0123456789ac", 68] = "SamrQueryLocalizableAccountsInDomain", + ["12345678-1234-abcd-ef00-01234567cffb", 26] = "NetrServerAuthenticate3", + ["d3fbb514-0e3b-11cb-8fad-08002b1d29c3", 1] = "nsi_binding_lookup_done", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 71] = "RpcWinStationRegisterNotificationEvent", + ["12345678-1234-abcd-ef00-0123456789ab", 68] = "RpcSetAllocFailCount", + ["6bffd098-a112-3610-9833-012892020162", 8] = "NetrBrowserStatisticsGet", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 49] = "NetrDfsDeleteExitPoint", + ["12345678-1234-abcd-ef00-0123456789ab", 70] = "RpcAddPrinterEx", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 52] = "PNP_ModifyResDes", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 40] = "NetrpSetFileSecurity", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 22] = "NetrDfsSetInfo2", + ["12345778-1234-abcd-ef00-0123456789ab", 79] = "LsarAdtRegisterSecurityEventSource", + ["12345678-1234-abcd-ef00-0123456789ab", 94] = "RpcFlushPrinter", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 68] = "PNP_InstallDevInst", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 16] = "DRSDomainControllerInfo", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 17] = "DeleteClassAsync", + ["367abb81-9844-35f1-ad32-98f038001003", 38] = "QueryServiceConfig2A", + ["367abb81-9844-35f1-ad32-98f038001003", 46] = "ScQueryServiceTagInfo", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 15] = "RpcSrvSetClassId", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 58] = "RpcSyncRegisterForRemoteNotifications", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 5] = "RpcAsyncAddJob", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 4] = "LlsrLicenseAddW", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 16] = "RpcWinStationWaitSystemEvent", + ["12345778-1234-abcd-ef00-0123456789ac", 9] = "SamrSetInformationDomain", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 9] = "winmmRegisterSessionNotificationEvent", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 23] = "PNP_GetInterfaceDeviceListSize", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 14] = "PutInstance", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 29] = "RpcAsyncEnumPrinterKey", + ["12345678-1234-abcd-ef00-0123456789ab", 99] = "RpcInstallPrinterDriverFromPackage", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 74] = "RpcAsyncLogJobInfoForBranchOffice", + ["367abb81-9844-35f1-ad32-98f038001003", 14] = "EnumServicesStatusW", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 15] = "LlsrProductLicenseEnumA", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 11] = "DeleteClassAsync", + ["4d9f4ab8-7d1c-11cf-861e-0020af6e7c57", 0] = "RemoteActivation", + ["12345678-1234-abcd-ef00-0123456789ab", 12] = "RpcGetPrinterDriverDirectory", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 46] = "NetrDfsSetLocalVolumeState", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 9] = "PutClassAsync", + ["6bffd098-a112-3610-9833-46c3f87e345a", 23] = "NetrUnjoinDomain2", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 8] = "NspiGetPropList", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 0] = "RpcAsyncOpenPrinter", + ["2f5f3220-c126-1076-b549-074d078619da", 15] = "NDdeTrustedShareEnumA", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 60] = "PNP_UnregisterNotification", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 45] = "LlsrServerEnumA", + ["6bffd098-a112-3610-9833-46c3f87e345a", 5] = "NetrWkstaTransportEnum", + ["338cd001-2244-31f1-aaaa-900038001003", 11] = "BaseRegFlushKey", + ["12345678-1234-abcd-ef00-01234567cffb", 47] = "unused", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 56] = "NetrServerAliasDel", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 60] = "RpcWinStationCloseServerEx", + ["12345778-1234-abcd-ef00-0123456789ac", 17] = "SamrLookupNamesInDomain", + ["1ff70682-0a51-30e8-076d-740be8cee98b", 1] = "NetrJobDel", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 5] = "FrsBackupComplete", + ["367abb81-9844-35f1-ad32-98f038001003", 9] = "NotifyBootConfigStatus", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 53] = "PNP_DetectResourceConflict", + ["6bffd098-a112-3610-9833-012892020162", 5] = "BrowserrQueryStatistics", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 20] = "ExecQuery", + ["c386ca3e-9061-4a72-821e-498d83be188f", 51] = "AudioVolumeGetMasterVolumeLevelScalar", + ["6bffd098-a112-3610-9833-46c3f87e345a", 14] = "NetrLogonDomainNameAdd", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 74] = "RpcWinStationCheckAccess", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 3] = "RpcAsyncGetJob", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 35] = "RpcWinStationAnnoyancePopup", + ["6bffd098-a112-3610-9833-46c3f87e345a", 26] = "NetrGetJoinableOUs2", + ["f309ad18-d86a-11d0-a075-00c04fb68820", 6] = "NTLMLogin", + ["c386ca3e-9061-4a72-821e-498d83be188f", 64] = "AudioVolumeGetStepInfo", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 35] = "PNP_RegisterDriver", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 4] = "ElfrNumberOfRecords", + ["12345678-1234-abcd-ef00-0123456789ab", 33] = "RpcSetForm", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 4] = "RpcWinStationRename", + ["afa8bd80-7d8a-11c9-bef4-08002b102989", 0] = "inq_if_ids", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 3] = "KeyrEnumerateProvContainers", + ["c386ca3e-9061-4a72-821e-498d83be188f", 42] = "AudioSessionManagerAddAudioSessionClientNotification", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 64] = "LlsrReplicationUserAddW", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 4] = "NetrCharDevQGetInfo", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 46] = "RpcWinStationReInitializeSecurity", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 52] = "NetrDfsManagerReportSiteInfo", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 5] = "PNP_ReportLogOn", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 49] = "PNP_GetNextResDes", + ["2f5f3220-c126-1076-b549-074d078619da", 16] = "NDdeTrustedShareEnumW", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 24] = "RpcWinStationRemoveLicense", + ["338cd001-2244-31f1-aaaa-900038001003", 18] = "BaseRegReplaceKey", + ["367abb81-9844-35f1-ad32-98f038001003", 20] = "GetServiceDisplayNameW", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 8] = "KeyrExportCert", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 2] = "RpcSrvRenewLeaseByBroadcast", + ["6bffd098-a112-3610-9833-012892020162", 1] = "BrowserrDebugCall", + ["12345778-1234-abcd-ef00-0123456789ab", 40] = "LsarSetTrustedDomainInfo", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 14] = "ElfrOpenELA", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 0] = "LlsrConnect", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 7] = "GetObjectAsync", + ["12345778-1234-abcd-ef00-0123456789ab", 24] = "LsarSetSystemAccessAccount", + ["12345678-1234-abcd-ef00-0123456789ab", 84] = "RpcDeletePrinterDriverEx", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 62] = "RpcWinStationGetMachinePolicy", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 7] = "DnssrvComplexOperation2", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 54] = "RpcAsyncEnumPrintProcessorDatatypes", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 5] = "NspiGetMatches", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 17] = "nsi_mgmt_entry_delete", + ["367abb81-9844-35f1-ad32-98f038001003", 18] = "QueryServiceLockStatusW", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 16] = "RpcAsyncGetPrinterData", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 13] = "KeyrQueryRequestStatus", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 6] = "GetObject", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 59] = "PNP_RegisterNotification", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 62] = "PNP_GetVersionInternal", + ["12345778-1234-abcd-ef00-0123456789ab", 18] = "LsarEnumeratePrivilegesAccount", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 15] = "PutInstanceAsync", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 20] = "RpcAsyncClosePrinter", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 6] = "EcDummyRpc", + ["12345678-1234-abcd-ef00-01234567cffb", 38] = "DsrGetDcSiteCoverageW", + ["12345778-1234-abcd-ef00-0123456789ab", 59] = "LsarCreateTrustedDomainEx2", + ["12345678-1234-abcd-ef00-01234567cffb", 34] = "DsrGetDcNameEx2", + ["6bffd098-a112-3610-9833-46c3f87e345a", 28] = "NetrRemoveAlternateComputerName", + ["c386ca3e-9061-4a72-821e-498d83be188f", 50] = "AudioVolumeGetMasterVolumeLevel", + ["12345778-1234-abcd-ef00-0123456789ab", 7] = "LsarQueryInformationPolicy", + ["12345778-1234-abcd-ef00-0123456789ac", 30] = "SamrDeleteAlias", + ["12345778-1234-abcd-ef00-0123456789ab", 91] = "LsarQueryAuditSecurity", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 68] = "LlsrProductSecuritySetA", + ["c386ca3e-9061-4a72-821e-498d83be188f", 39] = "AudioSessionManagerGetAudioSession", + ["12345778-1234-abcd-ef00-0123456789ac", 22] = "SamrAddMemberToGroup", + ["12345778-1234-abcd-ef00-0123456789ac", 4] = "SamrShutdownSamServer", + ["367abb81-9844-35f1-ad32-98f038001003", 17] = "QueryServiceConfigW", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 0] = "RpcSrvEnableDhcp", + ["338cd001-2244-31f1-aaaa-900038001003", 22] = "BaseRegSetValue", + ["6bffd098-a112-3610-9833-46c3f87e345a", 0] = "NetrWkstaGetInfo", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 55] = "NetrServerAliasEnum", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 4] = "NspiSeekEntries", + ["12345678-1234-abcd-ef00-0123456789ab", 83] = "RpcSeekPrinter", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 64] = "PNP_GetServerSideDeviceInstallFlags", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 25] = "RpcWinStationQueryLicense", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 6] = "ElfrChangeNotify", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 27] = "PNP_SetClassRegProp", + ["367abb81-9844-35f1-ad32-98f038001003", 1] = "ControlService", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 12] = "RpcSrvDeRegisterParams", + ["6bffd098-a112-3610-9833-46c3f87e345a", 21] = "NetrGetJoinableOUs", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 36] = "PNP_QueryRemove", + ["12345778-1234-abcd-ef00-0123456789ab", 23] = "LsarGetSystemAccessAccount", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 24] = "LlsrUserProductEnumW", + ["6bffd098-a112-3610-9833-46c3f87e345a", 20] = "NetrGetJoinInformation", + ["12345778-1234-abcd-ef00-0123456789ac", 48] = "SamrQueryDisplayInformation2", + ["12345778-1234-abcd-ef00-0123456789ac", 43] = "SamrTestPrivateFunctionsUser", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 25] = "NetrServerTransportAdd", + ["12345778-1234-abcd-ef00-0123456789ab", 70] = "LsarRegisterAuditEvent", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 57] = "RpcAsyncEnumPerMachineConnections", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 47] = "LlsrServerProductEnumA", + ["83da7c00-e84f-11d2-9807-00c04f8ec850", 3] = "SfcSrv_InitiateScan", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 55] = "RpcAsyncAddPerMachineConnection", + ["12345678-1234-abcd-ef00-0123456789ab", 24] = "RpcAddJob", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 20] = "LlsrUserInfoSetW", + ["99fcfec4-5260-101b-bbcb-00aa0021347a", 5] = "ServerAlive2", + ["338cd001-2244-31f1-aaaa-900038001003", 32] = "OpenPerformanceText", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 45] = "RpcAsyncEnumPrintProcessors", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 5] = "DsRolerGetDcOperationProgress", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8", 4] = "RpcLicensingSetPolicy", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 20] = "PNP_DeleteClassKey", + ["12345778-1234-abcd-ef00-0123456789ab", 20] = "LsarRemovePrivilegesFromAccount", + ["12345778-1234-abcd-ef00-0123456789ab", 34] = "LsarDeleteObject", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 5] = "R_WinsGetDbRecs", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 13] = "nsi_entry_object_inq_next", + ["2f5f3220-c126-1076-b549-074d078619da", 7] = "NDdeShareEnumA", + ["338cd001-2244-31f1-aaaa-900038001003", 19] = "BaseRegRestoreKey", + ["12345678-1234-abcd-ef00-01234567cffb", 46] = "NetrServerGetTrustInfo", + ["12345678-1234-abcd-ef00-0123456789ab", 41] = "RpcPlayGdiScriptOnPrinterIC", + ["12345678-1234-abcd-ef00-0123456789ab", 78] = "RpcGetPrinterDataEx", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 4] = "KeyrCloseKeyService", + ["338cd001-2244-31f1-aaaa-900038001003", 15] = "BaseRegOpenKey", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 11] = "KeyrEnumerateCAs", + ["367abb81-9844-35f1-ad32-98f038001003", 47] = "NotifyServiceStatusChange", + ["12345678-1234-abcd-ef00-0123456789ab", 61] = "RpcAddPortEx", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 67] = "RpcWinStationNotifyDisconnectPipe", + ["12345778-1234-abcd-ef00-0123456789ac", 57] = "SamrConnect2", + ["c386ca3e-9061-4a72-821e-498d83be188f", 14] = "AudioSessionGetLastInactivation", + ["367abb81-9844-35f1-ad32-98f038001003", 33] = "GetServiceKeyNameA", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 20] = "nsi_mgmt_inq_exp_age", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 62] = "RpcAsyncInstallPrinterDriverFromPackage", + ["12345778-1234-abcd-ef00-0123456789ab", 78] = "LsarOpenPolicySce", + ["12345678-1234-abcd-ef00-0123456789ab", 72] = "RpcEnumPrinterData", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 73] = "LlsrCertificateClaimAddCheckA", + ["c386ca3e-9061-4a72-821e-498d83be188f", 60] = "AudioMeterGetAverageRMS", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 34] = "NetprNameCanonicalize", + ["12345678-1234-abcd-ef00-01234567cffb", 28] = "DsrGetSiteName", + ["c386ca3e-9061-4a72-821e-498d83be188f", 11] = "AudioSessionGetProcessId", + ["c386ca3e-9061-4a72-821e-498d83be188f", 23] = "AudioSessionSetMute", + ["12345678-1234-abcd-ef00-0123456789ab", 52] = "RpcResetPrinter", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 56] = "RpcAsyncDeletePerMachineConnection", + ["2f5f3220-c126-1076-b549-074d078619da", 13] = "NDdeGetTrustedShareA", + ["367abb81-9844-35f1-ad32-98f038001003", 34] = "ScGetCurrentGroupStateW", + ["12345678-1234-abcd-ef00-01234567cffb", 23] = "NetrLogonGetTrustRid", + ["12b81e99-f207-4a4c-85d3-77b42f76fd14", 1] = "SeclCreateProcessWithLogonExW", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 3] = "RpcSrvReleaseLease", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 1] = "NspiUnbind", + ["894de0c0-0d55-11d3-a322-00c04fa321a1", 2] = "BaseInitiateShutdownEx", + ["12345678-1234-abcd-ef00-0123456789ab", 13] = "RpcDeletePrinterDriver", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 15] = "RpcWinStationShutdownSystem", + ["12345778-1234-abcd-ef00-0123456789ab", 9] = "LsarClearAuditLog", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 7] = "ElfrOpenELW", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 21] = "ExecQueryAsync", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d6", 2] = "RpcSrvReleasePrefix", + ["c386ca3e-9061-4a72-821e-498d83be188f", 33] = "AudioServerGetDevicePeriod", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 37] = "PNP_RequestDeviceEject", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 5] = "NetrCharDevQSetInfo", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 74] = "LlsrCertificateClaimAddCheckW", + ["12345678-1234-abcd-ef00-0123456789ab", 101] = "RpcGetCorePrinterDrivers", + ["12345678-1234-abcd-ef00-0123456789ab", 17] = "RpcStartDocPrinter", + ["338cd001-2244-31f1-aaaa-900038001003", 0] = "OpenClassesRoot", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 0] = "FrsRpcSendCommPkt", + ["6bffd098-a112-3610-9833-46c3f87e345a", 18] = "NetrValidateName", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 28] = "PNP_CreateDevInst", + ["99fcfec4-5260-101b-bbcb-00aa0021347a", 3] = "ServerAlive", + ["12345778-1234-abcd-ef00-0123456789ac", 49] = "SamrGetDisplayEnumerationIndex2", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 9] = "DRSGetMemberships", + ["12345678-1234-abcd-ef00-0123456789ab", 49] = "RpcAddPrintProvidor", + ["12345778-1234-abcd-ef00-0123456789ac", 19] = "SamrOpenGroup", + ["6bffd098-a112-3610-9833-46c3f87e345a", 10] = "NetrUseDel", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 14] = "winmmGetPnpInfo", + ["12345678-1234-abcd-ef00-0123456789ab", 38] = "RpcConfigurePort", + ["367abb81-9844-35f1-ad32-98f038001003", 50] = "ControlServiceExA", + ["99fcfec4-5260-101b-bbcb-00aa0021347a", 4] = "ResolveOxid2", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 5] = "RpcWinStationQueryInformation", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 9] = "DsRolerUpgradeDownlevelServer", + ["12345778-1234-abcd-ef00-0123456789ab", 43] = "LsarRetrievePrivateData", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 9] = "RpcSrvRequestParams", + ["12345778-1234-abcd-ef00-0123456789ac", 67] = "SamrValidatePassword", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 47] = "NetrDfsSetServerInfo", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 39] = "NetrpGetFileSecurity", + ["c386ca3e-9061-4a72-821e-498d83be188f", 44] = "AudioSessionManagerAddAudioSessionClientNotification", + ["c386ca3e-9061-4a72-821e-498d83be188f", 2] = "AudioServerInitialize", + ["338cd001-2244-31f1-aaaa-900038001003", 7] = "BaseRegDeleteKey", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 1] = "NetrDfsAdd", + ["12345678-1234-abcd-ef00-0123456789ab", 77] = "RpcSetPrinterDataEx", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 7] = "R_WinsBackup", + ["338cd001-2244-31f1-aaaa-900038001003", 14] = "BaseRegNotifyChangeKeyValue", + ["12345778-1234-abcd-ef00-0123456789ac", 52] = "SamrAddMultipleMembersToAlias", + ["12345678-1234-abcd-ef00-0123456789ab", 7] = "RpcSetPrinter", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8", 1] = "RpcLicensingCloseServer", + ["12345778-1234-abcd-ef00-0123456789ab", 35] = "LsarEnumerateAccountsWithUserRight", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 10] = "DeleteClass", + ["12345678-1234-abcd-ef00-0123456789ab", 90] = "RpcSplOpenPrinter", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 21] = "NetrDfsEnumEx", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 51] = "PNP_GetResDesDataSize", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 2] = "RpcAsyncSetJob", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 28] = "RpcAsyncEnumPrinterDataEx", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 34] = "PNP_AddID", + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa", 5] = "ept_inq_object", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 28] = "NetrRemoteTOD", + ["12345678-1234-abcd-ef00-0123456789ab", 98] = "RpcDeletePrinterConnection2", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 43] = "RpcWinStationGetAllProcesses", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 3] = "DnssrvEnumRecords", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 19] = "CreateInstanceEnumAsync", + ["12345678-1234-abcd-ef00-0123456789ab", 34] = "RpcEnumForms", + ["338cd001-2244-31f1-aaaa-900038001003", 35] = "BaseRegDeleteKeyEx", + ["6bffd098-a112-3610-9833-012892020162", 0] = "BrowserrServerEnum", + ["378e52b0-c0a9-11cf-822d-00aa0051e40f", 2] = "SAGetNSAccountInformation", + ["12345778-1234-abcd-ef00-0123456789ab", 68] = "LsarLookupNames3", + ["12345778-1234-abcd-ef00-0123456789ac", 46] = "SamrQueryInformationDomain2", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 14] = "RpcSrvQueryLeaseInfo", + ["12345778-1234-abcd-ef00-0123456789ab", 57] = "LsarLookupSids2", + ["12345678-1234-abcd-ef00-0123456789ab", 93] = "RpcCloseSpoolFileHandle", + ["12345678-1234-abcd-ef00-0123456789ab", 11] = "RpcGetPrinterDriver", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 7] = "gfxLogon", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 2] = "NspiUpdateStat", + ["12345778-1234-abcd-ef00-0123456789ac", 34] = "SamrOpenUser", + ["367abb81-9844-35f1-ad32-98f038001003", 26] = "EnumServicesStatusA", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 13] = "RpcAsyncEndPagePrinter", + ["12345678-1234-abcd-ef00-01234567cffb", 31] = "NetrServerPasswordGet", + ["6bffd098-a112-3610-9833-46c3f87e345a", 2] = "NetrWkstaUserEnum", + ["12345778-1234-abcd-ef00-0123456789ab", 31] = "LsarLookupPrivilegeValue", + ["86d35949-83c9-4044-b424-db363231fd0c", 1] = "SchRpcRegisterTask", + ["894de0c0-0d55-11d3-a322-00c04fa321a1", 1] = "BaseAbortShutdown", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 51] = "RpcAsyncAddMonitor", + ["12345678-1234-abcd-ef00-0123456789ab", 89] = "RpcAddPrinterDriverEx", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 1] = "nsi_group_mbr_add", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 10] = "ElfrReadELW", + ["00000143-0000-0000-c000-000000000046", 0] = "QueryInterface", + ["12345778-1234-abcd-ef00-0123456789ac", 32] = "SamrRemoveMemberFromAlias", + ["12345778-1234-abcd-ef00-0123456789ac", 56] = "SamrGetDomainPasswordInformation", + ["12345778-1234-abcd-ef00-0123456789ab", 55] = "LsarOpenTrustedDomainByName", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 89] = "LlsrCloseEx", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 21] = "RpcAsyncAddForm", + ["c386ca3e-9061-4a72-821e-498d83be188f", 20] = "AudioSessionGetVolume", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 53] = "LlsrLocalProductInfoSetA", + ["83da7c00-e84f-11d2-9807-00c04f8ec850", 2] = "SfcSrv_FileException", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 3] = "FrsNOP", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 7] = "NspiDNToEph", + ["c386ca3e-9061-4a72-821e-498d83be188f", 38] = "AudioSessionManagerDestroy", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 8] = "RpcLogonIdFromWinStationName", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 18] = "RpcSrvGetClientId", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 14] = "RpcAsyncEndDocPrinter", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 27] = "RpcWinStationQueryUpdateRequired", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 73] = "RpcAsyncEnumJobNamedProperties", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 7] = "PNP_GetRootDeviceInstance", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 49] = "RpcAsyncAddPort", + ["12345678-1234-abcd-ef00-0123456789ab", 55] = "RpcFindNextPrinterChangeNotification", + ["12345778-1234-abcd-ef00-0123456789ab", 32] = "LsarLookupPrivilegeName", + ["86d35949-83c9-4044-b424-db363231fd0c", 3] = "SchRpcCreateFolder", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 11] = "DRSGetNT4ChangeLog", + ["12345678-1234-abcd-ef00-01234567cffb", 9] = "NetrAccountDeltas", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 1] = "DsRolerDnsNameToFlatName", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 56] = "LlsrServiceInfoSetW", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 14] = "DRSRemoveDsServer", + ["afa8bd80-7d8a-11c9-bef4-08002b102989", 3] = "stop_server_listening", + ["12345678-1234-abcd-ef00-01234567cffb", 14] = "NetrLogonControl2", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 5] = "nsi_group_mbr_inq_done", + ["12345778-1234-abcd-ef00-0123456789ac", 26] = "SamrSetMemberAttributesOfGroup", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 0] = "KeyrOpenKeyService", + ["12345778-1234-abcd-ef00-0123456789ab", 63] = "CredrWriteDomainCredentials", + ["12345778-1234-abcd-ef00-0123456789ac", 31] = "SamrAddMemberToAlias", + ["68b58241-c259-4f03-a2e5-a2651dcbc930", 2] = "KSrGetCAs", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 50] = "LlsrLocalProductInfoGetW", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 20] = "DRSAddSidHistory", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 4] = "R_WinsDoScavenging", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 18] = "nsi_mgmt_entry_create", + ["12345778-1234-abcd-ef00-0123456789ac", 40] = "SamrQueryDisplayInformation", + ["367abb81-9844-35f1-ad32-98f038001003", 21] = "GetServiceKeyNameW", + ["338cd001-2244-31f1-aaaa-900038001003", 31] = "BaseRegSaveKeyEx", + ["12345678-1234-abcd-ef00-01234567cffb", 33] = "DsrAddressToSiteNamesW", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 65] = "PNP_GetObjectPropKeys", + ["6bffd098-a112-3610-9833-012892020162", 9] = "BrowserrSetNetlogonState", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 31] = "RpcAsyncDeletePrinterDataEx", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 7] = "nsi_profile_elt_add", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 4] = "NetrDfsGetInfo", + ["d3fbb514-0e3b-11cb-8fad-08002b1d29c3", 3] = "nsi_mgmt_handle_set_exp_age", + ["12345678-1234-abcd-ef00-01234567cffb", 6] = "NetrServerPasswordSet", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 48] = "NetrDfsCreateExitPoint", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8", 7] = "RpcLicensingGetPolicyInformation", + ["12345678-1234-abcd-ef00-0123456789ab", 51] = "RpcEnumPrintProcessorDatatypes", + ["c386ca3e-9061-4a72-821e-498d83be188f", 10] = "AudioVolumeGetMasterVolumeLevelScalar", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 30] = "RpcWinStationReadRegistry", + ["12345678-1234-abcd-ef00-0123456789ab", 14] = "RpcAddPrintProcessor", + ["c386ca3e-9061-4a72-821e-498d83be188f", 17] = "AudioSessionSetDisplayName", + ["12345778-1234-abcd-ef00-0123456789ac", 23] = "SamrDeleteGroup", + ["12345778-1234-abcd-ef00-0123456789ab", 64] = "CredrReadDomainCredentials", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 13] = "NetrSessionDel", + ["c386ca3e-9061-4a72-821e-498d83be188f", 24] = "AudioSessionGetChannelCount", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 66] = "RpcAsyncGetPrinterDriverPackagePath", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 29] = "NetrServerSetServiceBits", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 22] = "PNP_GetInterfaceDeviceList", + ["2f5f3220-c126-1076-b549-074d078619da", 0] = "NDdeShareAddW", + ["c386ca3e-9061-4a72-821e-498d83be188f", 37] = "GetAudioSessionManager", + ["6bffd098-a112-3610-9833-012892020162", 4] = "BrowserrDebugTrace", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 54] = "RpcWinStationUpdateUserConfig", + ["12345678-1234-abcd-ef00-0123456789ab", 10] = "RpcEnumPrinterDrivers", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 23] = "RpcSrvRegisterConnectionStateNotification", + ["12345778-1234-abcd-ef00-0123456789ab", 89] = "LsarLookupAuditSubCategoryName", + ["12345778-1234-abcd-ef00-0123456789ac", 47] = "SamrQueryInformationUser2", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 13] = "ElfrBackupELFA", + ["12345678-1234-abcd-ef00-0123456789ab", 37] = "RpcAddPort", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 65] = "RpcWinStationCheckLoopBack", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 5] = "DnssrvOperation2", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 10] = "winmmUnregisterSessionNotification", + ["367abb81-9844-35f1-ad32-98f038001003", 35] = "EnumServiceGroupW", + ["12345778-1234-abcd-ef00-0123456789ab", 72] = "LsarUnregisterAuditEvent", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 38] = "RpcAsyncEnumPrinters", + ["12345778-1234-abcd-ef00-0123456789ac", 64] = "SamrConnect5", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 3] = "NspiQueryRows", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 6] = "DRSReplicaDel", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 48] = "RpcAsyncEnumMonitors", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 50] = "RpcAsyncSetPort", + ["338cd001-2244-31f1-aaaa-900038001003", 12] = "BaseRegGetKeySecurity", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 9] = "R_WinsPullRange", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 7] = "FrsBackupComplete", + ["c386ca3e-9061-4a72-821e-498d83be188f", 13] = "AudioSessionGetLastActivation", + ["367abb81-9844-35f1-ad32-98f038001003", 29] = "QueryServiceConfigA", + ["86d35949-83c9-4044-b424-db363231fd0c", 14] = "SchRpcRename", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 58] = "LlsrReplConnect", + ["12345778-1234-abcd-ef00-0123456789ab", 3] = "LsarQuerySecurityObject", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 12] = "RpcAsyncWritePrinter", + ["c386ca3e-9061-4a72-821e-498d83be188f", 47] = "AudioVolumeGetChannelCount", + ["12345778-1234-abcd-ef00-0123456789ab", 38] = "LsarRemoveAccountRights", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 30] = "RpcAsyncDeletePrinterData", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 10] = "R_WinsSetPriorityClass", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 41] = "LlsrMappingAddA", + ["12345778-1234-abcd-ef00-0123456789ac", 15] = "SamrEnumerateAliasesInDomain", + ["c386ca3e-9061-4a72-821e-498d83be188f", 46] = "AudioVolumeDisconnect", + ["338cd001-2244-31f1-aaaa-900038001003", 20] = "BaseRegSaveKey", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 23] = "RpcWinStationActivateLicense", + ["2f5f3220-c126-1076-b549-074d078619da", 8] = "NDdeShareEnumW", + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa", 3] = "ept_map", + ["12345678-1234-abcd-ef00-0123456789ab", 18] = "RpcStartPagePrinter", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 4] = "RpcAsyncEnumJobs", + ["12345778-1234-abcd-ef00-0123456789ab", 47] = "LsarSetInformationPolicy2", + ["12345678-1234-abcd-ef00-01234567cffb", 0] = "NetrLogonUasLogon", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 13] = "DRSWriteSPN", + ["12345778-1234-abcd-ef00-0123456789ab", 48] = "LsarQueryTrustedDomainInfoByName", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d6", 1] = "RpcSrvRenewPrefix", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 7] = "NetrCharDevQPurgeSelf", + ["0a74ef1c-41a4-4e06-83ae-dc74fb1cdd53", 0] = "ItSrvRegisterIdleTask", + ["6bffd098-a112-3610-9833-46c3f87e345a", 12] = "NetrMessageBufferSend", + ["12345678-1234-abcd-ef00-0123456789ab", 88] = "RpcXcvData", + ["12345678-1234-abcd-ef00-01234567cffb", 17] = "NetrDatabaseRedo", + ["12345778-1234-abcd-ef00-0123456789ab", 82] = "CredrFindBestCredential", + ["338cd001-2244-31f1-aaaa-900038001003", 2] = "OpenLocalMachine", + ["12345778-1234-abcd-ef00-0123456789ab", 27] = "LsarSetInformationTrustedDomain", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 11] = "NetrFileClose", + ["86d35949-83c9-4044-b424-db363231fd0c", 16] = "SchRpcGetLastRunInfo", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 7] = "RpcSrvStaticRefreshParams", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 72] = "RpcWinStationUnRegisterNotificationEvent", + ["12345678-1234-abcd-ef00-0123456789ab", 26] = "RpcGetPrinterData", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 10] = "NetrFileGetInfo", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 70] = "RpcAsyncGetJobNamedPropertyValue", + ["c386ca3e-9061-4a72-821e-498d83be188f", 19] = "AudioSessionSetSessionClass", + ["6bffd098-a112-3610-9833-46c3f87e345a", 25] = "NetrValidateName2", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 3] = "RpcWinStationEnumerate", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 9] = "nsi_profile_elt_inq_begin", + ["12345678-1234-abcd-ef00-0123456789ab", 31] = "RpcDeleteForm", + ["12345678-1234-abcd-ef00-01234567cffb", 16] = "NetrDatabaseSync2", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 19] = "R_WinsDoScavengingNew", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 44] = "NetrDfsCreateLocalPartition", + ["c386ca3e-9061-4a72-821e-498d83be188f", 35] = "PolicyConfigGetShareMode", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 70] = "RpcWinStationGetAllProcesses_NT6", + ["12345778-1234-abcd-ef00-0123456789ac", 66] = "SamrSetDSRMPassword", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 30] = "LlsrMappingInfoGetW", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 2] = "NetrCharDevControl", + ["12345778-1234-abcd-ef00-0123456789ab", 2] = "LsarEnumeratePrivileges", + ["1ff70682-0a51-30e8-076d-740be8cee98b", 0] = "NetrJobAdd", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 3] = "NetrCharDevQEnum", + ["12345678-1234-abcd-ef00-0123456789ab", 58] = "RpcReplyOpenPrinter", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 3] = "gfxRemoveGfx", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 23] = "RpcAsyncGetForm", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 24] = "DRSQuerySitesByCost", + ["12345778-1234-abcd-ef00-0123456789ac", 38] = "SamrChangePasswordUser", + ["338cd001-2244-31f1-aaaa-900038001003", 17] = "BaseRegQueryValue", + ["367abb81-9844-35f1-ad32-98f038001003", 8] = "UnlockServiceDatabase", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 54] = "LlsrServiceInfoGetW", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 2] = "NetrDfsRemove", + ["d95afe70-a6d5-4259-822e-2c84da1ddb0d", 0] = "WsdrInitiateShutdown", + ["c386ca3e-9061-4a72-821e-498d83be188f", 54] = "AudioVolumeGetChannelVolumeLevel", + ["f309ad18-d86a-11d0-a075-00c04fb68820", 5] = "WBEMLogin", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 12] = "EcUnknown0xC", + ["12345778-1234-abcd-ef00-0123456789ac", 12] = "SamrCreateUserInDomain", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 6] = "RpcWinStationSetInformation", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 13] = "RpcSrvEnumInterfaces", + ["338cd001-2244-31f1-aaaa-900038001003", 5] = "BaseRegCloseKey", + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa", 0] = "ept_insert", + ["12345778-1234-abcd-ef00-0123456789ab", 80] = "LsarAdtUnregisterSecurityEventSource", + ["12345678-1234-abcd-ef00-0123456789ab", 53] = "RpcGetPrinterDriver2", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 73] = "PNP_SetActiveService", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 8] = "NetrConnectionEnum", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 18] = "NetrShareDel", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 42] = "RpcWinStationCheckForApplicationName", + ["12345778-1234-abcd-ef00-0123456789ab", 28] = "LsarOpenSecret", + ["12345678-1234-abcd-ef00-01234567cffb", 12] = "NetrLogonControl", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 0] = "NetrCharDevEnum", + ["c386ca3e-9061-4a72-821e-498d83be188f", 56] = "AudioVolumeSetMute", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 9] = "NetrFileEnum", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 8] = "ElfrRegisterEventSourceW", + ["12345778-1234-abcd-ef00-0123456789ab", 17] = "LsarOpenAccount", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 20] = "NetrDfsRemove2", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 6] = "DsRolerGetDcOperationResults", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 15] = "ElfrRegisterEventSourceA", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 32] = "LlsrMappingInfoSetW", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 47] = "RpcWinStationBroadcastSystemMessage", + ["12345778-1234-abcd-ef00-0123456789ac", 16] = "SamrGetAliasMembership", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 2] = "DnssrvComplexOperation", + ["6bffd098-a112-3610-9833-46c3f87e345a", 8] = "NetrUseAdd", + ["12345678-1234-abcd-ef00-01234567cffb", 4] = "NetrServerReqChallenge", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 61] = "LlsrReplicationServerAddW", + ["2f5f3220-c126-1076-b549-074d078619da", 2] = "NDdeShareDelW", + ["338cd001-2244-31f1-aaaa-900038001003", 25] = "BaseAbortSystemShutdown", + ["c386ca3e-9061-4a72-821e-498d83be188f", 0] = "AudioServerConnect", + ["0a74ef1c-41a4-4e06-83ae-dc74fb1cdd53", 3] = "ItSrvSetDetectionParameters", + ["f5cc5a18-4264-101a-8c59-08002b2f8426", 0] = "NspiBind", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 43] = "NetrDfsGetVersion", + ["367abb81-9844-35f1-ad32-98f038001003", 19] = "StartServiceW", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 6] = "gfxOpenGfx", + ["6bffd098-a112-3610-9833-46c3f87e345a", 17] = "NetrUnjoinDomain", + ["12345778-1234-abcd-ef00-0123456789ab", 56] = "LsarTestCall", + ["12345778-1234-abcd-ef00-0123456789ac", 10] = "SamrCreateGroupInDomain", + ["367abb81-9844-35f1-ad32-98f038001003", 53] = "ScValidatePnPService", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 37] = "RpcWinStationTerminateProcess", + ["c386ca3e-9061-4a72-821e-498d83be188f", 48] = "AudioVolumeSetMasterVolumeLevel", + ["12345678-1234-abcd-ef00-0123456789ab", 102] = "RpcCorePrinterDriverInstalled", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 10] = "EcDoConnectEx", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 20] = "RpcSrvGetOriginalSubnetMask", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 36] = "LlsrMappingUserAddW", + ["c386ca3e-9061-4a72-821e-498d83be188f", 65] = "AudioVolumeStepUp", + ["12345678-1234-abcd-ef00-0123456789ab", 48] = "RpcDeletePrintProcessor", + ["367abb81-9844-35f1-ad32-98f038001003", 37] = "ChangeServiceConfig2W", + ["367abb81-9844-35f1-ad32-98f038001003", 30] = "QueryServiceLockStatusA", + ["12345778-1234-abcd-ef00-0123456789ac", 51] = "SamrQueryDisplayInformation3", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 6] = "KeyrSetDefaultProvider", + ["86d35949-83c9-4044-b424-db363231fd0c", 13] = "SchRpcDelete", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 13] = "PNP_GetDeviceRegProp", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 38] = "PNP_IsDockStationPresent", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 11] = "RpcWinStationVirtualOpen", + ["12345778-1234-abcd-ef00-0123456789ac", 28] = "SamrQueryInformationAlias", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 17] = "NetrDfsSetDcAddress", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 11] = "nsi_profile_elt_inq_done", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 0] = "PNP_Disconnect", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 9] = "RpcAsyncGetPrinter", + ["12345678-1234-abcd-ef00-0123456789ab", 80] = "RpcEnumPrinterKey", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 5] = "NetrDfsEnum", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 5] = "gfxModifyGx", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 50] = "NetrDfsModifyPrefix", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 13] = "NetrDfsRemoveStdRoot", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 15] = "RpcAsyncAbortPrinter", + ["86d35949-83c9-4044-b424-db363231fd0c", 11] = "SchRpcStop", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 48] = "RpcWinStationSendWindowMessage", + ["000001a0-0000-0000-c000-000000000046", 0] = "QueryInterfaceIRemoteSCMActivator", + ["c386ca3e-9061-4a72-821e-498d83be188f", 61] = "AudioMeterGetChannelsRMS", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 4] = "nsi_group_mbr_inq_next", + ["99fcfec4-5260-101b-bbcb-00aa0021347a", 1] = "SimplePing", + ["d3fbb514-0e3b-11cb-8fad-08002b1d29c3", 2] = "nsi_binding_lookup_next", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 52] = "RpcAsyncDeleteMonitor", + ["12345778-1234-abcd-ef00-0123456789ac", 25] = "SamrGetMembersInGroup", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 69] = "RpcRemoteAssistancePrepareSystemRestore", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 54] = "PNP_QueryResConfList", + ["f50aac00-c7f3-428e-a022-a6b71bfb9d43", 2] = "SSCatDBEnumCatalogs", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 2] = "KeyrEnumerateProviderTypes", + ["12345778-1234-abcd-ef00-0123456789ac", 14] = "SamrCreateAliasInDomain", + ["12345678-1234-abcd-ef00-01234567cffb", 19] = "NetrEnumerateTrustedDomains", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 12] = "wdmDriverOpenDrvRegKey", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 72] = "LlsrCertificateClaimEnumW", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 75] = "LlsrCertificateClaimAddA", + ["338cd001-2244-31f1-aaaa-900038001003", 24] = "BaseInitiateSystemShutdown", + ["338cd001-2244-31f1-aaaa-900038001003", 21] = "BaseRegSetKeySecurity", + ["12345678-1234-abcd-ef00-0123456789ab", 28] = "RpcWaitForPrinterChange", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 68] = "RpcAsyncReadPrinter", + ["12345678-1234-abcd-ef00-0123456789ab", 54] = "RpcClientFindFirstPrinterChangeNotification", + ["12345678-1234-abcd-ef00-0123456789ab", 104] = "RpcReportJobProcessingProgress", + ["0d72a7d4-6148-11d1-b4aa-00c04fb66ea0", 0] = "SSCertProtectFunction", + ["12345778-1234-abcd-ef00-0123456789ab", 84] = "LsarQueryAuditPolicy", + ["12345778-1234-abcd-ef00-0123456789ac", 2] = "SamrSetSecurityObject", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 1] = "RpcSrvRenewLease", + ["c386ca3e-9061-4a72-821e-498d83be188f", 7] = "AudioServerGetMixFormat", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 16] = "DeleteClass", + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa", 6] = "ept_mgmt_delete", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 0] = "EcDoConnect", + ["c386ca3e-9061-4a72-821e-498d83be188f", 63] = "AudioMeterGetChannelsPeakValues", + ["12345678-1234-abcd-ef00-0123456789ab", 45] = "RpcPrinterMessageBox", + ["6bffd098-a112-3610-9833-46c3f87e345a", 6] = "NetrWkstaTransportAdd", + ["00000143-0000-0000-c000-000000000046", 4] = "RemAddRef", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 0] = "DRSBind", + ["5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc", 0] = "NetrSendMessage", + ["12345678-1234-abcd-ef00-0123456789ab", 4] = "RpcEnumJobs", + ["86d35949-83c9-4044-b424-db363231fd0c", 10] = "SchRpcStopInstance", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 20] = "NetrShareCheck", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 48] = "PNP_FreeResDes", + ["12345678-1234-abcd-ef00-0123456789ab", 103] = "RpcGetPrinterDriverPackagePath", + ["367abb81-9844-35f1-ad32-98f038001003", 31] = "StartServiceA", + ["367abb81-9844-35f1-ad32-98f038001003", 36] = "ChangeServiceConfig2A", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 8] = "EcRNetGetDCName", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 1] = "RpcWinStationCloseServer", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 47] = "RpcAsyncEnumPorts", + ["6bffd098-a112-3610-9833-012892020162", 2] = "BrowserrQueryOtherDomains", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 59] = "RpcSyncUnRegisterForRemoteNotifications", + ["367abb81-9844-35f1-ad32-98f038001003", 49] = "CloseNotifyHandle", + ["12345678-1234-abcd-ef00-0123456789ab", 29] = "RpcClosePrinter", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 19] = "RpcWinStationShadowTarget", + ["12345678-1234-abcd-ef00-0123456789ab", 62] = "RpcRemoteFindFirstPrinterChangeNotification", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 25] = "RpcSrvGetNotificationStatus", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 78] = "LlsrReplicationProductSecurityAddW", + ["12345678-1234-abcd-ef00-0123456789ab", 66] = "RpcRouterReplyPrinterEx", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 61] = "PNP_GetCustomDevProp", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 16] = "nsi_mgmt_binding_unexport", + ["6bffd098-a112-3610-9833-46c3f87e345a", 30] = "NetrEnumerateComputerNames", + ["12345778-1234-abcd-ef00-0123456789ac", 62] = "SamrConnect4", + ["12345678-1234-abcd-ef00-0123456789ab", 5] = "RpcAddPrinter", + ["86d35949-83c9-4044-b424-db363231fd0c", 2] = "SchRpcRetrieveTask", + ["367abb81-9844-35f1-ad32-98f038001003", 27] = "OpenSCManagerA", + ["12345778-1234-abcd-ef00-0123456789ab", 13] = "LsarEnumerateTrustedDomains", + ["2f5f3220-c126-1076-b549-074d078619da", 14] = "NDdeGetTrustedShareW", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 21] = "NetrServerGetInfo", + ["12345678-1234-abcd-ef00-01234567cffb", 11] = "NetrGetDCName", + ["12345678-1234-abcd-ef00-0123456789ab", 57] = "RpcRouterFindFirstPrinterChangeNotificationOld", + ["2f5f3220-c126-1076-b549-074d078619da", 10] = "NDdeShareSetInfoW", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 2] = "R_WinsTrigger", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 12] = "RpcWinStationBeepOpen", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 5] = "ElfrOldestRecord", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 22] = "RpcAsyncDeleteForm", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 20] = "ElfrDeregisterClusterSvc", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 11] = "NetrDfsRemoveFtRoot", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 17] = "DRSAddEntry", + ["f5cc59b4-4264-101a-8c59-08002b2f8426", 8] = "FrsBackupComplete", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 60] = "LlsrReplicationRequestW", + ["17fdd703-1827-4e34-79d4-24a55c53bb37", 0] = "NetrMessageNameAdd", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 3] = "DsRolerDcAsReplica", + ["c386ca3e-9061-4a72-821e-498d83be188f", 40] = "AudioSessionManagerGetCurrentSession", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 46] = "LlsrServerProductEnumW", + ["12345678-1234-abcd-ef00-0123456789ab", 63] = "RpcSpoolerInit", + ["367abb81-9844-35f1-ad32-98f038001003", 6] = "QueryServiceStatus", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 21] = "DRSGetMemberships2", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 4] = "gfxAddGfx", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 2] = "gfxCreateGfxList", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d6", 0] = "RpcSrvRequestPrefix", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 6] = "PNP_ValidateDeviceInstance", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 7] = "RpcAsyncDeletePrinter", + ["12345778-1234-abcd-ef00-0123456789ab", 16] = "LsarCreateSecret", + ["367abb81-9844-35f1-ad32-98f038001003", 5] = "SetServiceObjectSecurity", + ["12345778-1234-abcd-ef00-0123456789ab", 6] = "LsarOpenPolicy", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8", 0] = "RpcLicensingOpenServer", + ["12345778-1234-abcd-ef00-0123456789ab", 86] = "LsarEnumerateAuditCategories", + ["c386ca3e-9061-4a72-821e-498d83be188f", 9] = "AudioServerGetDevicePeriod", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 62] = "LlsrReplicationServerServiceAddW", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 15] = "NetrDfsAddStdRootForced", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 64] = "RpcWinStationFUSCanRemoteUserDisconnect", + ["12345678-1234-abcd-ef00-0123456789ab", 76] = "RpcClusterSplIsAlive", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 7] = "LlsrProductEnumA", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 9] = "EcDoRpcExt", + ["367abb81-9844-35f1-ad32-98f038001003", 12] = "CreateServiceW", + ["12345778-1234-abcd-ef00-0123456789ab", 29] = "LsarSetSecret", + ["6bffd098-a112-3610-9833-46c3f87e345a", 3] = "NetrWkstaUserGetInfo", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 1] = "PNP_Connect", + ["12345678-1234-abcd-ef00-01234567cffb", 43] = "DsrGetForestTrustInformation", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 36] = "RpcWinStationEnumerateProcesses", + ["12345778-1234-abcd-ef00-0123456789ac", 42] = "SamrTestPrivateFunctionsDomain", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 19] = "DRSGetReplInfo", + ["12345778-1234-abcd-ef00-0123456789ac", 44] = "SamrGetUserDomainPasswordInformation", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 8] = "DRSVerifyNames", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 59] = "LlsrReplClose", + ["12345778-1234-abcd-ef00-0123456789ab", 75] = "CredrRename", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 67] = "PNP_SetObjectProp", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 42] = "NetrServerSetServiceBitsEx", + ["c386ca3e-9061-4a72-821e-498d83be188f", 1] = "AudioServerDisconnect", + ["12345778-1234-abcd-ef00-0123456789ab", 65] = "CredrDelete", + ["86d35949-83c9-4044-b424-db363231fd0c", 0] = "SchRpcHighestVersion", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 42] = "RpcAsyncDeletePrinterDriver", + ["12345778-1234-abcd-ef00-0123456789ab", 36] = "LsarEnumerateAccountRights", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 23] = "ElfrFlushEL", + ["12345678-1234-abcd-ef00-01234567cffb", 32] = "NetrLogonSendToSam", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 22] = "NetrServerSetInfo", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8", 2] = "RpcLicensingLoadPolicy", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 22] = "ExecNotificationQuery", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 43] = "LlsrMappingDeleteA", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 21] = "nsi_mgmt_inq_set_age", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 56] = "RpcWinStationRegisterConsoleNotification", + ["12345778-1234-abcd-ef00-0123456789ac", 58] = "SamrSetInformationUser2", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 8] = "RpcSrvRemoveDnsRegistrations", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 59] = "RpcWinStationShadowStop", + ["12345778-1234-abcd-ef00-0123456789ac", 60] = "SamrGetBootKeyInformation", + ["2f5f3220-c126-1076-b549-074d078619da", 3] = "NDdeGetShareSecurityA", + ["12345778-1234-abcd-ef00-0123456789ac", 13] = "SamrEnumerateUsersInDomain", + ["f309ad18-d86a-11d0-a075-00c04fb68820", 3] = "EstablishPosition", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 5] = "EcRUnregisterPushNotification", + ["12345678-1234-abcd-ef00-0123456789ab", 85] = "RpcAddPerMachineConnection", + ["378e52b0-c0a9-11cf-822d-00aa0051e40f", 3] = "SAGetAccountInformation", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 7] = "NetrDfsMove", + ["367abb81-9844-35f1-ad32-98f038001003", 51] = "ControlServiceExW", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 33] = "NetprNameValidate", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 3] = "ElfrDeregisterEventSource", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 49] = "RpcWinStationNotifyNewSession", + ["6bffd098-a112-3610-9833-46c3f87e345a", 27] = "NetrAddAlternateComputerName", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 36] = "NetrShareEnumSticky", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 57] = "LlsrServiceInfoSetA", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 19] = "nsi_mgmt_entry_inq_if_ids", + ["12345678-1234-abcd-ef00-01234567cffb", 49] = "NetrChainSetClientAttributes", + ["12345678-1234-abcd-ef00-0123456789ab", 69] = "RpcSplOpenPrinter", + ["12345678-1234-abcd-ef00-01234567cffb", 5] = "NetrServerAuthenticate", + ["12345678-1234-abcd-ef00-0123456789ab", 21] = "RpcAbortPrinter", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 8] = "NetrDfsManagerGetConfigInfo", + ["82273fdc-e32a-18c3-3f78-827929dc23ea", 22] = "ElfrGetLogInformation", + ["12345778-1234-abcd-ef00-0123456789ab", 52] = "LsarCloseTrustedDomainEx", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 85] = "LlsrLocalServiceInfoSetW", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 27] = "LlsrUserProductDeleteA", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 17] = "R_WinsGetDbRecsByName", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 66] = "LlsrProductSecurityGetA", + ["367abb81-9844-35f1-ad32-98f038001003", 10] = "ScSetServiceBitsW", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 13] = "CreateClassEnumAsync", + ["338cd001-2244-31f1-aaaa-900038001003", 10] = "BaseRegEnumValue", + ["12345778-1234-abcd-ef00-0123456789ab", 4] = "LsarSetSecurityObject", + ["00000143-0000-0000-c000-000000000046", 2] = "Release", + ["12345678-1234-abcd-ef00-0123456789ab", 19] = "RpcWritePrinter", + ["12345678-1234-abcd-ef00-01234567cffb", 22] = "NetrLogonSetServiceBits", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076", 4] = "DnssrvUpdateRecord", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 14] = "RpcWinStationReset", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 22] = "DRSReplicaVerifyObjects", + ["12345678-1234-abcd-ef00-01234567cffb", 25] = "NetrLogonComputeClientDigest", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 25] = "RpcAsyncEnumForms", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 24] = "PNP_RegisterDeviceClassAssociation", + ["a4f1db00-ca47-1067-b31f-00dd010662da", 11] = "EcDoRpcExt2", + ["367abb81-9844-35f1-ad32-98f038001003", 15] = "OpenSCManagerW", + ["00000143-0000-0000-c000-000000000046", 6] = "RemQueryInterface2", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 12] = "nsi_entry_object_inq_begin", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8", 3] = "RpcLicensingUnloadPolicy", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 4] = "RpcSrvSetFallbackParams", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 3] = "DRSGetNCChanges", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 5] = "RpcSrvGetFallbackParams", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 40] = "RpcAsyncEnumPrinterDrivers", + ["6bffd098-a112-3610-9833-46c3f87e345a", 13] = "NetrWorkstationStatisticsGet", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 82] = "LlsrLocalServiceEnumA", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 34] = "LlsrMappingUserEnumW", + ["12345778-1234-abcd-ef00-0123456789ab", 60] = "CredrWrite", + ["86d35949-83c9-4044-b424-db363231fd0c", 8] = "SchRpcEnumInstances", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 17] = "RpcAsyncGetPrinterDataEx", + ["367abb81-9844-35f1-ad32-98f038001003", 39] = "QueryServiceConfig2W", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 35] = "LlsrMappingUserEnumA", + ["6bffd098-a112-3610-9833-46c3f87e345a", 7] = "NetrWkstaTransportDel", + ["12345778-1234-abcd-ef00-0123456789ac", 50] = "SamrCreateUser2InDomain", + ["12345778-1234-abcd-ef00-0123456789ab", 21] = "LsarGetQuotasForAccount", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 26] = "NetrServerTransportEnum", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 31] = "RpcWinStationWaitForConnect", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 50] = "RpcServerGetInternetConnectorStatus", + ["6bffd098-a112-3610-9833-46c3f87e345a", 16] = "NetrJoinDomain", + ["12345678-1234-abcd-ef00-0123456789ab", 73] = "RpcDeletePrinterData", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 7] = "KeyrEnroll", + ["338cd001-2244-31f1-aaaa-900038001003", 1] = "OpenCurrentUser", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 6] = "RpcAsyncScheduleJob", + ["c386ca3e-9061-4a72-821e-498d83be188f", 28] = "AudioSessionGetAllVolumes", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed", 45] = "RpcWinStationGetTermSrvCountersValue", + ["12345678-1234-abcd-ef00-0123456789ab", 74] = "RpcClusterSplOpen", + ["86d35949-83c9-4044-b424-db363231fd0c", 15] = "SchRpcScheduledRuntimes", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 60] = "RpcSyncRefreshRemoteNotifications", + ["2f5f3220-c126-1076-b549-074d078619da", 11] = "NDdeSetTrustedShareA", + ["12345778-1234-abcd-ef00-0123456789ab", 42] = "LsarStorePrivateData", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 23] = "DRSGetObjectExistence", + ["f50aac00-c7f3-428e-a022-a6b71bfb9d43", 1] = "SSCatDBDeleteCatalog", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 15] = "R_WinsDeleteWins", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4", 8] = "nsi_profile_elt_remove", + ["2f5f3220-c126-1076-b549-074d078619da", 1] = "NDdeShareDelA", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 13] = "winmmAdvisePreferredDeviceChange", + ["83da7c00-e84f-11d2-9807-00c04f8ec850", 4] = "SfcSrv_PurgeCache", + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa", 1] = "ept_delete", + ["12345778-1234-abcd-ef00-0123456789ac", 35] = "SamrDeleteUser", + ["12345778-1234-abcd-ef00-0123456789ab", 46] = "LsarQueryInformationPolicy2", + ["c386ca3e-9061-4a72-821e-498d83be188f", 62] = "AudioMeterGetPeakValue", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5", 26] = "RpcSrvGetDhcpServicedConnections", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5", 7] = "DsRolerCancel", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 1] = "gfxCreateGfxFactoriesList", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b", 66] = "PNP_GetObjectProp", + ["12345778-1234-abcd-ef00-0123456789ac", 53] = "SamrRemoveMultipleMembersFromAlias", + ["12345678-1234-abcd-ef00-0123456789ab", 64] = "RpcResetPrinterEx", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 16] = "LlsrUserEnumW", + ["12345778-1234-abcd-ef00-0123456789ab", 69] = "CredrGetSessionTypes", + ["0a74ef1c-41a4-4e06-83ae-dc74fb1cdd53", 2] = "ItSrvProcessIdleTasks", + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa", 4] = "ept_lookup_handle_free", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188", 14] = "NetrShareAdd", + ["c386ca3e-9061-4a72-821e-498d83be188f", 41] = "AudioSessionManagerGetExistingSession", + ["12345678-1234-abcd-ef00-0123456789ab", 86] = "RpcDeletePerMachineConnection", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b", 5] = "KeyrGetDefaultProvider", + ["76f03f96-cdfd-44fc-a22c-64950a001209", 10] = "RpcAsyncStartDocPrinter", + ["338cd001-2244-31f1-aaaa-900038001003", 4] = "OpenUsers", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5", 0] = "gfxCreateZoneFactoriesList", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 8] = "PutClass", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 40] = "LlsrMappingAddW", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 10] = "NetrDfsAddFtRoot", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2", 2] = "DRSReplicaSync", + ["9556dc99-828c-11cf-a37e-00aa003240c7", 23] = "ExecNotificationQueryAsync", + ["12345678-1234-abcd-ef00-0123456789ab", 35] = "RpcEnumPorts", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 18] = "R_WinsStatusWHdl", + ["367abb81-9844-35f1-ad32-98f038001003", 13] = "EnumDependentServicesW", + ["12345778-1234-abcd-ef00-0123456789ab", 74] = "LsarSetForestTrustInformation", + ["2f5f3220-c126-1076-b549-074d078619da", 9] = "NDdeShareGetInfoW", + ["4fc742e0-4a10-11cf-8273-00aa004ae673", 0] = "NetrDfsManagerGetVersion", + ["45f52c28-7f9f-101a-b52b-08002b2efabe", 6] = "R_WinsTerm", + ["12345678-1234-abcd-ef00-01234567cffb", 2] = "NetrLogonSamLogon", + ["c386ca3e-9061-4a72-821e-498d83be188f", 6] = "AudioServerGetStreamLatency", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d", 11] = "LlsrProductUserEnumA" + } + + +.. bro:id:: DCE_RPC::pipe_name_to_common_uuid + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + ["srvsvc"] = "4b324fc8-1670-01d3-1278-5a47bf6ee188", + ["winreg"] = "338cd001-2244-31f1-aaaa-900038001003", + ["spoolss"] = "12345678-1234-abcd-ef00-0123456789ab" + } + + This table is to map pipe names to the most common + service used over that pipe. It helps in cases + where the pipe binding wasn't seen. + +.. bro:id:: DCE_RPC::uuid_endpoint_map + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + ["82273fdc-e32a-18c3-3f78-827929dc23ea"] = "eventlog", + ["51c82175-844e-4750-b0d8-ec255555bc06"] = "KMS", + ["17fdd703-1827-4e34-79d4-24a55c53bb37"] = "msgsvc", + ["dc12a681-737f-11cf-884d-00aa004b2e24"] = "IWbemClassObject interface", + ["338cd001-2244-31f1-aaaa-900038001003"] = "winreg", + ["68b58241-c259-4f03-a2e5-a2651dcbc930"] = "IKeySvc2", + ["c49e32c6-bc8b-11d2-85d4-00105a1f8304"] = "IWbemBackupRestoreEx interface", + ["2f59a331-bf7d-48cb-9ec5-7c090d76e8b8"] = "lcrpc", + ["44aca674-e8fc-11d0-a07c-00c04fb68820"] = "IWbemContext interface", + ["0b6edbfa-4a24-4fc6-8a23-942b1eca65d1"] = "IRPCAsyncNotify", + ["7c857801-7381-11cf-884d-00aa004b2e24"] = "IWbemObjectSink interface", + ["45f52c28-7f9f-101a-b52b-08002b2efabe"] = "winspipe", + ["8d9f4e40-a03d-11ce-8f69-08003e30051b"] = "pnp", + ["423ec01e-2e35-11d2-b604-00104b703efd"] = "IWbemWCOSmartEnum interface", + ["e3514235-4b06-11d1-ab04-00c04fc2dcd2"] = "drsuapi", + ["6bffd098-a112-3610-9833-46c3f87e345a"] = "wkssvc", + ["1ff70682-0a51-30e8-076d-740be8cee98b"] = "atsvc", + ["d95afe70-a6d5-4259-822e-2c84da1ddb0d"] = "WindowsShutdown", + ["12b81e99-f207-4a4c-85d3-77b42f76fd14"] = "ISeclogon", + ["342cfd40-3c6c-11ce-a893-08002b2e9c6d"] = "llsrpc", + ["99fcfec4-5260-101b-bbcb-00aa0021347a"] = "IObjectExporter", + ["44aca675-e8fc-11d0-a07c-00c04fb68820"] = "IWbemCallResult interface", + ["12345778-1234-abcd-ef00-0123456789ab"] = "lsarpc", + ["5ca4a760-ebb1-11cf-8611-00a0245420ed"] = "winstation_rpc", + ["76f03f96-cdfd-44fc-a22c-64950a001209"] = "IRemoteWinspool", + ["3d267954-eeb7-11d1-b94e-00c04fa3080d"] = "HydraLsPipe", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c4"] = "NsiM", + ["6bffd098-a112-3610-9833-012892020162"] = "browser", + ["f50aac00-c7f3-428e-a022-a6b71bfb9d43"] = "ICatDBSvc", + ["541679AB-2E5F-11d3-B34E-00104BCC4B4A"] = "IWbemLoginHelper interface", + ["f5cc5a18-4264-101a-8c59-08002b2f8426"] = "nspi", + ["2f5f3220-c126-1076-b549-074d078619da"] = "nddeapi", + ["3919286a-b10c-11d0-9ba8-00c04fd92ef5"] = "dssetup", + ["f309ad18-d86a-11d0-a075-00c04fb68820"] = "IWbemLevel1Login", + ["12345778-1234-abcd-ef00-0123456789ac"] = "samr", + ["e1af8308-5d1f-11c9-91a4-08002b14a0fa"] = "epmapper", + ["378e52b0-c0a9-11cf-822d-00aa0051e40f"] = "sasec", + ["afa8bd80-7d8a-11c9-bef4-08002b102989"] = "mgmt", + ["12345678-1234-abcd-ef00-0123456789ab"] = "spoolss", + ["a4f1db00-ca47-1067-b31f-00dd010662da"] = "exchange_mapi", + ["894de0c0-0d55-11d3-a322-00c04fa321a1"] = "InitShutdown", + ["ae33069b-a2a8-46ee-a235-ddfd339be281"] = "IRPCRemoteObject", + ["f5cc59b4-4264-101a-8c59-08002b2f8426"] = "FrsRpc", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d6"] = "dhcpcsvc6", + ["d4781cd6-e5d3-44df-ad94-930efe48a887"] = "IWbemLoginClientID", + ["3dde7c30-165d-11d1-ab8f-00805f14db40"] = "BackupKey", + ["d6d70ef0-0e3b-11cb-acc3-08002b1d29c3"] = "NsiS", + ["00000143-0000-0000-c000-000000000046"] = "IRemUnknown2", + ["906b0ce0-c70b-1067-b317-00dd010662da"] = "IXnRemote", + ["4590f812-1d3a-11d0-891f-00aa004b2e24"] = "IWbemClassObject unmarshaler", + ["9a653086-174f-11d2-b5f9-00104b703efd"] = "IWbemClassObject interface", + ["674b6698-ee92-11d0-ad71-00c04fd8fdff"] = "IWbemContext unmarshaler", + ["3faf4738-3a21-4307-b46c-fdda9bb8c0d5"] = "AudioSrv", + ["3c4728c5-f0ab-448b-bda1-6ce01eb0a6d5"] = "RpcSrvDHCPC", + ["4d9f4ab8-7d1c-11cf-861e-0020af6e7c57"] = "IActivation", + ["83da7c00-e84f-11d2-9807-00c04f8ec850"] = "sfcapi", + ["c49e32c7-bc8b-11d2-85d4-00105a1f8304"] = "IWbemBackupRestore interface", + ["5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc"] = "msgsvcsend", + ["57674cd0-5200-11ce-a897-08002b2e9c6d"] = "lls_license", + ["000001a0-0000-0000-c000-000000000046"] = "IRemoteSCMActivator", + ["1c1c45ee-4395-11d2-b60b-00104b703efd"] = "IWbemFetchSmartEnum interface", + ["4fc742e0-4a10-11cf-8273-00aa004ae673"] = "netdfs", + ["027947e1-d731-11ce-a357-000000000001"] = "IEnumWbemClassObject interface", + ["367abb81-9844-35f1-ad32-98f038001003"] = "svcctl", + ["c8cb7687-e6d3-11d2-a958-00c04f682e16"] = "DAV RPC SERVICE", + ["1544f5e0-613c-11d1-93df-00c04fd7bd09"] = "exchange_rfr", + ["0d72a7d4-6148-11d1-b4aa-00c04fb66ea0"] = "ICertProtect", + ["2c9273e0-1dc3-11d3-b364-00105a1f8177"] = "IWbemRefreshingServices interface", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188"] = "srvsvc", + ["50abc2a4-574d-40b3-9d66-ee4fd5fba076"] = "dnsserver", + ["f1e9c5b2-f59b-11d2-b362-00105a1f8177"] = "IWbemRemoteRefresher interface", + ["9556dc99-828c-11cf-a37e-00aa003240c7"] = "IWbemServices", + ["12345678-1234-abcd-ef00-01234567cffb"] = "netlogon", + ["8d0ffe72-d252-11d0-bf8f-00c04fd9126b"] = "IKeySvc", + ["86d35949-83c9-4044-b424-db363231fd0c"] = "ITaskSchedulerService", + ["91ae6020-9e3c-11cf-8d7c-00aa00c091be"] = "ICertPassage", + ["0a74ef1c-41a4-4e06-83ae-dc74fb1cdd53"] = "idletask", + ["c386ca3e-9061-4a72-821e-498d83be188f"] = "AudioRpc", + ["5261574a-4572-206e-b268-6b199213b4e4"] = "AsyncEMSMDB", + ["a359dec5-e813-4834-8a2a-ba7f1d777d76"] = "IWbemBackupRestoreEx interface", + ["d3fbb514-0e3b-11cb-8fad-08002b1d29c3"] = "NsiC" + } + + + diff --git a/doc/scripts/base/protocols/dce-rpc/index.rst b/doc/scripts/base/protocols/dce-rpc/index.rst new file mode 100644 index 0000000000..183214aed2 --- /dev/null +++ b/doc/scripts/base/protocols/dce-rpc/index.rst @@ -0,0 +1,17 @@ +:orphan: + +Package: base/protocols/dce-rpc +=============================== + +Support for DCE/RPC (Distributed Computing Environment/Remote Procedure +Calls) protocol analysis. + +:doc:`/scripts/base/protocols/dce-rpc/__load__.bro` + + +:doc:`/scripts/base/protocols/dce-rpc/consts.bro` + + +:doc:`/scripts/base/protocols/dce-rpc/main.bro` + + diff --git a/doc/scripts/base/protocols/dce-rpc/main.bro.rst b/doc/scripts/base/protocols/dce-rpc/main.bro.rst new file mode 100644 index 0000000000..f617540441 --- /dev/null +++ b/doc/scripts/base/protocols/dce-rpc/main.bro.rst @@ -0,0 +1,123 @@ +:tocdepth: 3 + +base/protocols/dce-rpc/main.bro +=============================== +.. bro:namespace:: DCE_RPC + + +:Namespace: DCE_RPC +:Imports: :doc:`base/frameworks/dpd `, :doc:`base/protocols/dce-rpc/consts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +=========================================================================== =============================================================== +:bro:id:`DCE_RPC::ignored_operations`: :bro:type:`table` :bro:attr:`&redef` These are DCE-RPC operations that are ignored, typically due to + the operations being noisy and low value on most networks. +=========================================================================== =============================================================== + +Types +##### +===================================================== = +:bro:type:`DCE_RPC::BackingState`: :bro:type:`record` +:bro:type:`DCE_RPC::Info`: :bro:type:`record` +:bro:type:`DCE_RPC::State`: :bro:type:`record` +===================================================== = + +Redefinitions +############# +==================================================================== = +:bro:id:`DPD::ignore_violations`: :bro:type:`set` :bro:attr:`&redef` +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +==================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: DCE_RPC::ignored_operations + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + ["winreg"] = { + "BaseRegOpenKey", + "BaseRegEnumKey", + "OpenClassesRoot", + "BaseRegCloseKey", + "OpenLocalMachine", + "BaseRegQueryValue", + "BaseRegDeleteKeyEx", + "BaseRegGetVersion" + }, + ["spoolss"] = { + "RpcSplOpenPrinter", + "RpcClosePrinter" + }, + ["wkssvc"] = { + "NetrWkstaGetInfo" + } + } + + These are DCE-RPC operations that are ignored, typically due to + the operations being noisy and low value on most networks. + +Types +##### +.. bro:type:: DCE_RPC::BackingState + + :Type: :bro:type:`record` + + info: :bro:type:`DCE_RPC::Info` + + state: :bro:type:`DCE_RPC::State` + + +.. bro:type:: DCE_RPC::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the event happened. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + rtt: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + Round trip time from the request to the response. + If either the request or response wasn't seen, + this will be null. + + named_pipe: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Remote pipe name. + + endpoint: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Endpoint name looked up from the uuid. + + operation: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Operation seen in the call. + + +.. bro:type:: DCE_RPC::State + + :Type: :bro:type:`record` + + uuid: :bro:type:`string` :bro:attr:`&optional` + + named_pipe: :bro:type:`string` :bro:attr:`&optional` + + ctx_to_uuid: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` :bro:attr:`&optional` + + + diff --git a/doc/scripts/base/protocols/dhcp/__load__.bro.rst b/doc/scripts/base/protocols/dhcp/__load__.bro.rst new file mode 100644 index 0000000000..4df602660b --- /dev/null +++ b/doc/scripts/base/protocols/dhcp/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/dhcp/__load__.bro +================================ + + +:Imports: :doc:`base/protocols/dhcp/consts.bro `, :doc:`base/protocols/dhcp/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/dhcp/consts.bro.rst b/doc/scripts/base/protocols/dhcp/consts.bro.rst new file mode 100644 index 0000000000..4c55dd4811 --- /dev/null +++ b/doc/scripts/base/protocols/dhcp/consts.bro.rst @@ -0,0 +1,227 @@ +:tocdepth: 3 + +base/protocols/dhcp/consts.bro +============================== +.. bro:namespace:: DHCP + +Types, errors, and fields for analyzing DHCP data. A helper file +for DHCP analysis scripts. + +:Namespace: DHCP + +Summary +~~~~~~~ +Constants +######### +================================================================================================================== =================================== +:bro:id:`DHCP::message_types`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Types of DHCP messages. +:bro:id:`DHCP::option_types`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Option types mapped to their names. +================================================================================================================== =================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: DHCP::message_types + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "OFFER", + [9] = "FORCERENEW", + [17] = "LEASEQUERYSTATUS", + [6] = "NAK", + [11] = "LEASEUNASSIGNED", + [14] = "BULKLEASEQUERY", + [4] = "DECLINE", + [1] = "DISCOVER", + [8] = "INFORM", + [7] = "RELEASE", + [15] = "LEASEQUERYDONE", + [5] = "ACK", + [10] = "LEASEQUERY", + [3] = "REQUEST", + [12] = "LEASEUNKNOWN", + [13] = "LEASEACTIVE", + [18] = "TLS", + [16] = "ACTIVELEASEQUERY" + } + + Types of DHCP messages. See :rfc:`1533`, :rfc:`3203`, + :rfc:`4388`, :rfc:`6926`, and :rfc:`7724`. + +.. bro:id:: DHCP::option_types + + :Type: :bro:type:`table` [:bro:type:`int`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [124] = "V-I Vendor Class", + [7] = "Log Server", + [22] = "Max DG Assembly", + [211] = "Reboot Time", + [213] = "OPTION_V4_ACCESS_DOMAIN", + [51] = "Address Time", + [3] = "Router", + [75] = "StreetTalk-Server", + [156] = "dhcp-state", + [4] = "Time Server", + [48] = "X Window Font", + [26] = "MTU Interface", + [10] = "Impress Server", + [11] = "RLP Server", + [90] = "Authentication", + [125] = "V-I Vendor-Specific Information", + [212] = "OPTION_6RD", + [123] = "GeoConf Option", + [175] = "Etherboot (Tentatively Assigned - 2005-06-23)", + [45] = "NETBIOS Dist Srv", + [39] = "Keepalive Data", + [62] = "NetWare/IP Domain", + [132] = "IEEE 802.1Q VLAN ID", + [35] = "ARP Timeout", + [93] = "Client System", + [129] = "PXE - undefined (vendor specific)", + [34] = "Trailers", + [97] = "UUID/GUID", + [153] = "start-time-of-state", + [1] = "Subnet Mask", + [30] = "Mask Supplier", + [65] = "NIS-Server-Addr", + [42] = "NTP Servers", + [142] = "OPTION-IPv4_Address-ANDSF", + [76] = "STDA-Server", + [137] = "OPTION_V4_LOST", + [209] = "Configuration File", + [56] = "DHCP Message", + [46] = "NETBIOS Node Type", + [100] = "PCode", + [146] = "RDNSS Selection", + [220] = "Subnet Allocation Option", + [151] = "status-code", + [67] = "Bootfile-Name", + [81] = "Client FQDN", + [144] = "GeoLoc", + [70] = "POP3-Server", + [2] = "Time Offset", + [15] = "Domain Name", + [210] = "Path Prefix", + [119] = "Domain Search", + [83] = "iSNS", + [36] = "Ethernet", + [79] = "Service Scope", + [32] = "Router Request", + [23] = "Default IP TTL", + [221] = "Virtual Subnet Selection (VSS) Option", + [120] = "SIP Servers DHCP Option", + [40] = "NIS Domain", + [16] = "Swap Server", + [80] = "Rapid Commit", + [159] = "OPTION_V4_PORTPARAMS", + [94] = "Client NDI", + [8] = "Quotes Server", + [131] = "PXE - undefined (vendor specific)", + [78] = "Directory Agent", + [134] = "Diffserv Code Point (DSCP) for VoIP signalling and media streams", + [141] = "SIP UA Configuration Service Domains", + [69] = "SMTP-Server", + [59] = "Rebinding Time", + [154] = "query-start-time", + [55] = "Parameter List", + [155] = "query-end-time", + [77] = "User-Class", + [49] = "X Window Manager", + [50] = "Address Request", + [113] = "Netinfo Tag", + [9] = "LPR Server", + [0] = "Pad", + [66] = "Server-Name", + [138] = "OPTION_CAPWAP_AC_V4", + [139] = "OPTION-IPv4_Address-MoS", + [20] = "SrcRte On/Off", + [18] = "Extension File", + [37] = "Default TCP TTL", + [89] = "BCMCS Controller IPv4 address option", + [98] = "User-Auth", + [122] = "CCC", + [158] = "OPTION_V4_PCP_SERVER", + [255] = "End", + [63] = "NetWare/IP Option", + [53] = "DHCP Msg Type", + [128] = "PXE - undefined (vendor specific)", + [60] = "Class Id", + [136] = "OPTION_PANA_AGENT", + [72] = "WWW-Server", + [116] = "Auto-Config", + [130] = "PXE - undefined (vendor specific)", + [85] = "NDS Servers", + [73] = "Finger-Server", + [88] = "BCMCS Controller Domain Name list", + [208] = "PXELINUX Magic", + [19] = "Forward On/Off", + [112] = "Netinfo Address", + [54] = "DHCP Server Id", + [68] = "Home-Agent-Addrs", + [5] = "Name Server", + [114] = "URL", + [44] = "NETBIOS Name Srv", + [13] = "Boot File Size", + [47] = "NETBIOS Scope", + [58] = "Renewal Time", + [29] = "Mask Discovery", + [12] = "Hostname", + [17] = "Root Path", + [135] = "HTTP Proxy for phone-specific applications", + [61] = "Client Id", + [99] = "GEOCONF_CIVIC", + [25] = "MTU Plateau", + [121] = "Classless Static Route Option", + [71] = "NNTP-Server", + [117] = "Name Service Search", + [118] = "Subnet Selection Option", + [176] = "IP Telephone (Tentatively Assigned - 2005-06-23)", + [38] = "Keepalive Time", + [57] = "DHCP Max Msg Size", + [252] = "auto-proxy-config", + [52] = "Overload", + [150] = "TFTP server address", + [140] = "OPTION-IPv4_FQDN-MoS", + [43] = "Vendor Specific", + [41] = "NIS Servers", + [101] = "TCode", + [87] = "NDS Context", + [74] = "IRC-Server", + [6] = "Domain Server", + [177] = "PacketCable and CableHome (replaced by 122)", + [91] = "client-last-transaction-time option", + [82] = "Relay Agent Information", + [161] = "OPTION_MUD_URL_V4 (TEMPORARY - registered 2016-11-17)", + [64] = "NIS-Domain-Name", + [95] = "LDAP", + [133] = "IEEE 802.1D/p Layer 2 Priority", + [14] = "Merit Dump File", + [27] = "MTU Subnet", + [31] = "Router Discovery", + [24] = "MTU Timeout", + [152] = "base-time", + [160] = "DHCP Captive-Portal", + [145] = "FORCERENEW_NONCE_CAPABLE", + [28] = "Broadcast Address", + [33] = "Static Route", + [92] = "associated-ip option", + [21] = "Policy Filter", + [157] = "data-source", + [86] = "NDS Tree Name" + } + + Option types mapped to their names. + + diff --git a/doc/scripts/base/protocols/dhcp/index.rst b/doc/scripts/base/protocols/dhcp/index.rst new file mode 100644 index 0000000000..4c24f69138 --- /dev/null +++ b/doc/scripts/base/protocols/dhcp/index.rst @@ -0,0 +1,23 @@ +:orphan: + +Package: base/protocols/dhcp +============================ + +Support for Dynamic Host Configuration Protocol (DHCP) analysis. + +:doc:`/scripts/base/protocols/dhcp/__load__.bro` + + +:doc:`/scripts/base/protocols/dhcp/consts.bro` + + Types, errors, and fields for analyzing DHCP data. A helper file + for DHCP analysis scripts. + +:doc:`/scripts/base/protocols/dhcp/main.bro` + + Analyze DHCP traffic and provide a log that is organized around + the idea of a DHCP "conversation" defined by messages exchanged within + a relatively short period of time using the same transaction ID. + The log will have information from clients and servers to give a more + complete picture of what happened. + diff --git a/doc/scripts/base/protocols/dhcp/main.bro.rst b/doc/scripts/base/protocols/dhcp/main.bro.rst new file mode 100644 index 0000000000..cc446ba035 --- /dev/null +++ b/doc/scripts/base/protocols/dhcp/main.bro.rst @@ -0,0 +1,257 @@ +:tocdepth: 3 + +base/protocols/dhcp/main.bro +============================ +.. bro:namespace:: DHCP + +Analyze DHCP traffic and provide a log that is organized around +the idea of a DHCP "conversation" defined by messages exchanged within +a relatively short period of time using the same transaction ID. +The log will have information from clients and servers to give a more +complete picture of what happened. + +:Namespace: DHCP +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/protocols/dhcp/consts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================ =============================================================== +:bro:id:`DHCP::max_txid_watch_time`: :bro:type:`interval` :bro:attr:`&redef` The maximum amount of time that a transation ID will be watched + for to try and tie messages together into a single DHCP + transaction narrative. +============================================================================ =============================================================== + +State Variables +############### +================================================ ======================================================== +:bro:id:`DHCP::log_info`: :bro:type:`DHCP::Info` This is a global variable that is only to be used in the + :bro::see::`DHCP::aggregate_msgs` event. +================================================ ======================================================== + +Types +##### +========================================== ================================================================= +:bro:type:`DHCP::Info`: :bro:type:`record` The record type which contains the column fields of the DHCP log. +========================================== ================================================================= + +Redefinitions +############# +================================================================= = +:bro:type:`DHCP::Info`: :bro:type:`record` +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +================================================= ================================================================ +:bro:id:`DHCP::aggregate_msgs`: :bro:type:`event` This event is used internally to distribute data around clusters + since DHCP doesn't follow the normal "connection" model used by + most protocols. +:bro:id:`DHCP::log_dhcp`: :bro:type:`event` Event that can be handled to access the DHCP + record as it is sent on to the logging framework. +================================================= ================================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: DHCP::max_txid_watch_time + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``30.0 secs`` + + The maximum amount of time that a transation ID will be watched + for to try and tie messages together into a single DHCP + transaction narrative. + +State Variables +############### +.. bro:id:: DHCP::log_info + + :Type: :bro:type:`DHCP::Info` + :Default: + + :: + + { + ts= + uids={ + + } + client_addr= + server_addr= + client_port= + server_port= + mac= + host_name= + client_fqdn= + domain= + requested_addr= + assigned_addr= + lease_time= + client_message= + server_message= + msg_types=[] + duration=0 secs + last_message_ts= + msg_orig= + client_software= + server_software= + circuit_id= + agent_remote_id= + subscriber_id= + } + + This is a global variable that is only to be used in the + :bro::see::`DHCP::aggregate_msgs` event. It can be used to avoid + looking up the info record for a transaction ID in every event handler + for :bro:see::`DHCP::aggregate_msgs`. + +Types +##### +.. bro:type:: DHCP::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The earliest time at which a DHCP message over the + associated connection is observed. + + uids: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` + A series of unique identifiers of the connections over which + DHCP is occurring. This behavior with multiple connections is + unique to DHCP because of the way it uses broadcast packets + on local networks. + + client_addr: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + IP address of the client. If a transaction + is only a client sending INFORM messages then + there is no lease information exchanged so this + is helpful to know who sent the messages. + Getting an address in this field does require + that the client sources at least one DHCP message + using a non-broadcast address. + + server_addr: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + IP address of the server involved in actually + handing out the lease. There could be other + servers replying with OFFER messages which won't + be represented here. Getting an address in this + field also requires that the server handing out + the lease also sources packets from a non-broadcast + IP address. + + client_port: :bro:type:`port` :bro:attr:`&optional` + Client port number seen at time of server handing out IP (expected + as 68/udp). + + server_port: :bro:type:`port` :bro:attr:`&optional` + Server port number seen at time of server handing out IP (expected + as 67/udp). + + mac: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Client's hardware address. + + host_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Name given by client in Hostname option 12. + + client_fqdn: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + FQDN given by client in Client FQDN option 81. + + domain: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Domain given by the server in option 15. + + requested_addr: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + IP address requested by the client. + + assigned_addr: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + IP address assigned by the server. + + lease_time: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + IP address lease interval. + + client_message: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Message typically accompanied with a DHCP_DECLINE + so the client can tell the server why it rejected + an address. + + server_message: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Message typically accompanied with a DHCP_NAK to let + the client know why it rejected the request. + + msg_types: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional` + The DHCP message types seen by this DHCP transaction + + duration: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional` + Duration of the DHCP "session" representing the + time from the first message to the last. + + last_message_ts: :bro:type:`time` :bro:attr:`&optional` + + msg_orig: :bro:type:`vector` of :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/dhcp/msg-orig.bro` is loaded) + + The address that originated each message from the + `msg_types` field. + + client_software: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/dhcp/software.bro` is loaded) + + Software reported by the client in the `vendor_class` option. + + server_software: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/dhcp/software.bro` is loaded) + + Software reported by the server in the `vendor_class` option. + + circuit_id: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/dhcp/sub-opts.bro` is loaded) + + Added by DHCP relay agents which terminate switched or + permanent circuits. It encodes an agent-local identifier + of the circuit from which a DHCP client-to-server packet was + received. Typically it should represent a router or switch + interface number. + + agent_remote_id: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/dhcp/sub-opts.bro` is loaded) + + A globally unique identifier added by relay agents to identify + the remote host end of the circuit. + + subscriber_id: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/dhcp/sub-opts.bro` is loaded) + + The subscriber ID is a value independent of the physical + network configuration so that a customer's DHCP configuration + can be given to them correctly no matter where they are + physically connected. + + The record type which contains the column fields of the DHCP log. + +Events +###### +.. bro:id:: DHCP::aggregate_msgs + + :Type: :bro:type:`event` (ts: :bro:type:`time`, id: :bro:type:`conn_id`, uid: :bro:type:`string`, is_orig: :bro:type:`bool`, msg: :bro:type:`DHCP::Msg`, options: :bro:type:`DHCP::Options`) + + This event is used internally to distribute data around clusters + since DHCP doesn't follow the normal "connection" model used by + most protocols. It can also be handled to extend the DHCP log. + + :bro:see::`DHCP::log_info`. + +.. bro:id:: DHCP::log_dhcp + + :Type: :bro:type:`event` (rec: :bro:type:`DHCP::Info`) + + Event that can be handled to access the DHCP + record as it is sent on to the logging framework. + + diff --git a/doc/scripts/base/protocols/dnp3/__load__.bro.rst b/doc/scripts/base/protocols/dnp3/__load__.bro.rst new file mode 100644 index 0000000000..3211aa6582 --- /dev/null +++ b/doc/scripts/base/protocols/dnp3/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/dnp3/__load__.bro +================================ + + +:Imports: :doc:`base/protocols/dnp3/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/dnp3/consts.bro.rst b/doc/scripts/base/protocols/dnp3/consts.bro.rst new file mode 100644 index 0000000000..fc22f6fc30 --- /dev/null +++ b/doc/scripts/base/protocols/dnp3/consts.bro.rst @@ -0,0 +1,73 @@ +:tocdepth: 3 + +base/protocols/dnp3/consts.bro +============================== +.. bro:namespace:: DNP3 + + +:Namespace: DNP3 + +Summary +~~~~~~~ +Redefinable Options +################### +====================================================================================================================================== ======================================= +:bro:id:`DNP3::function_codes`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` :bro:attr:`&redef` Standard defined Modbus function codes. +====================================================================================================================================== ======================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: DNP3::function_codes + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` :bro:attr:`&redef` + :Default: + + :: + + { + [2] = "WRITE", + [9] = "FREEZE_CLEAR", + [17] = "START_APPL", + [27] = "DELETE_FILE", + [6] = "DIRECT_OPERATE_NR", + [11] = "FREEZE_AT_TIME", + [14] = "WARM_RESTART", + [4] = "OPERATE", + [22] = "ASSIGN_CLASS", + [24] = "RECORD_CURRENT_TIME", + [30] = "ABORT_FILE", + [1] = "READ", + [8] = "IMMED_FREEZE_NR", + [7] = "IMMED_FREEZE", + [15] = "INITIALIZE_DATA", + [131] = "AUTHENTICATE_RESP", + [23] = "DELAY_MEASURE", + [33] = "AUTHENTICATE_REQ_NR", + [29] = "AUTHENTICATE_FILE", + [130] = "UNSOLICITED_RESPONSE", + [5] = "DIRECT_OPERATE", + [25] = "OPEN_FILE", + [32] = "AUTHENTICATE_REQ", + [19] = "SAVE_CONFIG", + [28] = "GET_FILE_INFO", + [31] = "ACTIVATE_CONFIG", + [10] = "FREEZE_CLEAR_NR", + [129] = "RESPONSE", + [0] = "CONFIRM", + [3] = "SELECT", + [12] = "FREEZE_AT_TIME_NR", + [13] = "COLD_RESTART", + [18] = "STOP_APPL", + [21] = "DISABLE_UNSOLICITED", + [16] = "INITIALIZE_APPL", + [20] = "ENABLE_UNSOLICITED", + [26] = "CLOSE_FILE" + } + + Standard defined Modbus function codes. + + diff --git a/doc/scripts/base/protocols/dnp3/index.rst b/doc/scripts/base/protocols/dnp3/index.rst new file mode 100644 index 0000000000..4b144643fd --- /dev/null +++ b/doc/scripts/base/protocols/dnp3/index.rst @@ -0,0 +1,17 @@ +:orphan: + +Package: base/protocols/dnp3 +============================ + +Support for Distributed Network Protocol (DNP3) analysis. + +:doc:`/scripts/base/protocols/dnp3/__load__.bro` + + +:doc:`/scripts/base/protocols/dnp3/main.bro` + + A very basic DNP3 analysis script that just logs requests and replies. + +:doc:`/scripts/base/protocols/dnp3/consts.bro` + + diff --git a/doc/scripts/base/protocols/dnp3/main.bro.rst b/doc/scripts/base/protocols/dnp3/main.bro.rst new file mode 100644 index 0000000000..76da1d05fb --- /dev/null +++ b/doc/scripts/base/protocols/dnp3/main.bro.rst @@ -0,0 +1,72 @@ +:tocdepth: 3 + +base/protocols/dnp3/main.bro +============================ +.. bro:namespace:: DNP3 + +A very basic DNP3 analysis script that just logs requests and replies. + +:Namespace: DNP3 +:Imports: :doc:`base/protocols/dnp3/consts.bro ` + +Summary +~~~~~~~ +Types +##### +========================================== = +:bro:type:`DNP3::Info`: :bro:type:`record` +========================================== = + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +=========================================== ==================================================================== +:bro:id:`DNP3::log_dnp3`: :bro:type:`event` Event that can be handled to access the DNP3 record as it is sent on + to the logging framework. +=========================================== ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: DNP3::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time of the request. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique identifier for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + Identifier for the connection. + + fc_request: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The name of the function message in the request. + + fc_reply: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The name of the function message in the reply. + + iin: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + The response's "internal indication number". + + +Events +###### +.. bro:id:: DNP3::log_dnp3 + + :Type: :bro:type:`event` (rec: :bro:type:`DNP3::Info`) + + Event that can be handled to access the DNP3 record as it is sent on + to the logging framework. + + diff --git a/doc/scripts/base/protocols/dns/__load__.bro.rst b/doc/scripts/base/protocols/dns/__load__.bro.rst new file mode 100644 index 0000000000..982c1933d0 --- /dev/null +++ b/doc/scripts/base/protocols/dns/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/dns/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/dns/consts.bro `, :doc:`base/protocols/dns/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/dns/consts.bro.rst b/doc/scripts/base/protocols/dns/consts.bro.rst new file mode 100644 index 0000000000..d588098624 --- /dev/null +++ b/doc/scripts/base/protocols/dns/consts.bro.rst @@ -0,0 +1,264 @@ +:tocdepth: 3 + +base/protocols/dns/consts.bro +============================= +.. bro:namespace:: DNS + +Types, errors, and fields for analyzing DNS data. A helper file +for DNS analysis scripts. + +:Namespace: DNS + +Summary +~~~~~~~ +Constants +######### +=============================================================================================================== ====================================================================== +:bro:id:`DNS::ANY`: :bro:type:`count` A QTYPE value describing a request for all records. +:bro:id:`DNS::EDNS`: :bro:type:`count` An OPT RR TYPE value described by EDNS. +:bro:id:`DNS::PTR`: :bro:type:`count` RR TYPE value for a domain name pointer. +:bro:id:`DNS::algorithms`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Possible values of the algorithms used in DNSKEY, DS and RRSIG records +:bro:id:`DNS::base_errors`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Errors used for non-TSIG/EDNS types. +:bro:id:`DNS::classes`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Possible values of the CLASS field in resource records or QCLASS + field in query messages. +:bro:id:`DNS::digests`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Possible digest types used in DNSSEC. +:bro:id:`DNS::edns_zfield`: :bro:type:`table` :bro:attr:`&default` = ``"?"`` :bro:attr:`&optional` This deciphers EDNS Z field values. +:bro:id:`DNS::query_types`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping of DNS query type codes to human readable string + representation. +=============================================================================================================== ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: DNS::ANY + + :Type: :bro:type:`count` + :Default: ``255`` + + A QTYPE value describing a request for all records. + +.. bro:id:: DNS::EDNS + + :Type: :bro:type:`count` + :Default: ``41`` + + An OPT RR TYPE value described by EDNS. + +.. bro:id:: DNS::PTR + + :Type: :bro:type:`count` + :Default: ``12`` + + RR TYPE value for a domain name pointer. + +.. bro:id:: DNS::algorithms + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "Diffie_Hellman", + [6] = "DSA_NSEC3_SHA1", + [14] = "ECDSA_curveP384withSHA384", + [4] = "Elliptic_Curve", + [1] = "RSA_MD5", + [8] = "RSA_SHA256", + [7] = "RSA_SHA1_NSEC3_SHA1", + [15] = "Ed25519", + [252] = "Indirect", + [254] = "PrivateOID", + [255] = "reserved255", + [5] = "RSA_SHA1", + [10] = "RSA_SHA512", + [253] = "PrivateDNS", + [0] = "reserved0", + [3] = "DSA_SHA1", + [12] = "GOST_R_34_10_2001", + [13] = "ECDSA_curveP256withSHA256", + [16] = "Ed448" + } + + Possible values of the algorithms used in DNSKEY, DS and RRSIG records + +.. bro:id:: DNS::base_errors + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "SERVFAIL", + [9] = "NOTAUTH", + [17] = "BADKEY", + [6] = "YXDOMAIN", + [11] = "unassigned-11", + [14] = "unassigned-14", + [4] = "NOTIMP", + [22] = "BADTRUNC", + [1] = "FORMERR", + [8] = "NXRRSet", + [3842] = "BADSIG", + [7] = "YXRRSET", + [15] = "unassigned-15", + [5] = "REFUSED", + [19] = "BADMODE", + [10] = "NOTZONE", + [0] = "NOERROR", + [3] = "NXDOMAIN", + [12] = "unassigned-12", + [13] = "unassigned-13", + [18] = "BADTIME", + [21] = "BADALG", + [16] = "BADVERS", + [20] = "BADNAME" + } + + Errors used for non-TSIG/EDNS types. + +.. bro:id:: DNS::classes + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "C_CSNET", + [4] = "C_HESOD", + [1] = "C_INTERNET", + [254] = "C_NONE", + [255] = "C_ANY", + [3] = "C_CHAOS" + } + + Possible values of the CLASS field in resource records or QCLASS + field in query messages. + +.. bro:id:: DNS::digests + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "SHA256", + [4] = "SHA384", + [1] = "SHA1", + [0] = "reserved0", + [3] = "GOST_R_34_11_94" + } + + Possible digest types used in DNSSEC. + +.. bro:id:: DNS::edns_zfield + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = ``"?"`` :bro:attr:`&optional` + :Default: + + :: + + { + [32768] = "DNS_SEC_OK", + [0] = "NOVALUE" + } + + This deciphers EDNS Z field values. + +.. bro:id:: DNS::query_types + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [19] = "X25", + [10] = "NULL", + [3] = "MD", + [254] = "MAILA", + [43] = "DS", + [50] = "NSEC3", + [99] = "SPF", + [47] = "NSEC", + [251] = "IXFR", + [32768] = "TA", + [27] = "GPOS", + [6] = "SOA", + [20] = "ISDN", + [51] = "NSEC3PARAM", + [25] = "KEY", + [37] = "CERT", + [31] = "NIMLOC", + [28] = "AAAA", + [9] = "MR", + [32769] = "DLV", + [11] = "WKS", + [40] = "SINK", + [41] = "OPT", + [59] = "CDS", + [252] = "AXFR", + [46] = "RRSIG", + [5] = "CNAME", + [49] = "DHCID", + [103] = "UNSPEC", + [253] = "MAILB", + [45] = "IPSECKEY", + [8] = "MG", + [17] = "RP", + [48] = "DNSKEY", + [257] = "CAA", + [33] = "SRV", + [100] = "UINFO", + [24] = "SIG", + [23] = "NSAP-PTR", + [26] = "PX", + [101] = "UID", + [39] = "DNAME", + [16] = "TXT", + [34] = "ATMA", + [38] = "A6", + [18] = "AFSDB", + [35] = "NAPTR", + [42] = "APL", + [7] = "MB", + [15] = "MX", + [249] = "TKEY", + [36] = "KX", + [4] = "MF", + [44] = "SSHFP", + [52] = "TLSA", + [1] = "A", + [22] = "NSAP", + [250] = "TSIG", + [14] = "MINFO", + [102] = "GID", + [255] = "*", + [256] = "URI", + [21] = "RT", + [29] = "LOC", + [13] = "HINFO", + [30] = "EID", + [55] = "HIP", + [2] = "NS", + [32] = "NB", + [60] = "CDNSKEY", + [12] = "PTR", + [61] = "OPENPGPKEY" + } + + Mapping of DNS query type codes to human readable string + representation. + + diff --git a/doc/scripts/base/protocols/dns/index.rst b/doc/scripts/base/protocols/dns/index.rst new file mode 100644 index 0000000000..c9cb091b9d --- /dev/null +++ b/doc/scripts/base/protocols/dns/index.rst @@ -0,0 +1,20 @@ +:orphan: + +Package: base/protocols/dns +=========================== + +Support for Domain Name System (DNS) protocol analysis. + +:doc:`/scripts/base/protocols/dns/__load__.bro` + + +:doc:`/scripts/base/protocols/dns/consts.bro` + + Types, errors, and fields for analyzing DNS data. A helper file + for DNS analysis scripts. + +:doc:`/scripts/base/protocols/dns/main.bro` + + Base DNS analysis script which tracks and logs DNS queries along with + their responses. + diff --git a/doc/scripts/base/protocols/dns/main.bro.rst b/doc/scripts/base/protocols/dns/main.bro.rst new file mode 100644 index 0000000000..9953b2e433 --- /dev/null +++ b/doc/scripts/base/protocols/dns/main.bro.rst @@ -0,0 +1,268 @@ +:tocdepth: 3 + +base/protocols/dns/main.bro +=========================== +.. bro:namespace:: DNS + +Base DNS analysis script which tracks and logs DNS queries along with +their responses. + +:Namespace: DNS +:Imports: :doc:`base/protocols/dns/consts.bro `, :doc:`base/utils/queue.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +========================================================================== ======================================================================= +:bro:id:`DNS::max_pending_msgs`: :bro:type:`count` :bro:attr:`&redef` Give up trying to match pending DNS queries or replies for a given + query/transaction ID once this number of unmatched queries or replies + is reached (this shouldn't happen unless either the DNS server/resolver + is broken, Bro is not seeing all the DNS traffic, or an AXFR query + response is ongoing). +:bro:id:`DNS::max_pending_query_ids`: :bro:type:`count` :bro:attr:`&redef` Give up trying to match pending DNS queries or replies across all + query/transaction IDs once there is at least one unmatched query or + reply across this number of different query IDs. +========================================================================== ======================================================================= + +Types +##### +=================================================== ================================================================ +:bro:type:`DNS::Info`: :bro:type:`record` The record type which contains the column fields of the DNS log. +:bro:type:`DNS::PendingMessages`: :bro:type:`table` Yields a queue of :bro:see:`DNS::Info` objects for a given + DNS message query/transaction ID. +:bro:type:`DNS::State`: :bro:type:`record` A record type which tracks the status of DNS queries for a given + :bro:type:`connection`. +=================================================== ================================================================ + +Redefinitions +############# +================================================================= ================================== +:bro:type:`Log::ID`: :bro:type:`enum` The DNS logging stream identifier. +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= ================================== + +Events +###### +========================================= ================================================================ +:bro:id:`DNS::log_dns`: :bro:type:`event` An event that can be handled to access the :bro:type:`DNS::Info` + record as it is sent to the logging framework. +========================================= ================================================================ + +Hooks +##### +============================================ ================================================================= +:bro:id:`DNS::do_reply`: :bro:type:`hook` This is called by the specific dns_*_reply events with a "reply" + which may not represent the full data available from the resource + record, but it's generally considered a summarization of the + responses. +:bro:id:`DNS::set_session`: :bro:type:`hook` A hook that is called whenever a session is being set. +============================================ ================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: DNS::max_pending_msgs + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``50`` + + Give up trying to match pending DNS queries or replies for a given + query/transaction ID once this number of unmatched queries or replies + is reached (this shouldn't happen unless either the DNS server/resolver + is broken, Bro is not seeing all the DNS traffic, or an AXFR query + response is ongoing). + +.. bro:id:: DNS::max_pending_query_ids + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``50`` + + Give up trying to match pending DNS queries or replies across all + query/transaction IDs once there is at least one unmatched query or + reply across this number of different query IDs. + +Types +##### +.. bro:type:: DNS::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The earliest time at which a DNS protocol message over the + associated connection is observed. + + uid: :bro:type:`string` :bro:attr:`&log` + A unique identifier of the connection over which DNS messages + are being transferred. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + proto: :bro:type:`transport_proto` :bro:attr:`&log` + The transport layer protocol of the connection. + + trans_id: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + A 16-bit identifier assigned by the program that generated + the DNS query. Also used in responses to match up replies to + outstanding queries. + + rtt: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + Round trip time for the query and response. This indicates + the delay between when the request was seen until the + answer started. + + query: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The domain name that is the subject of the DNS query. + + qclass: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + The QCLASS value specifying the class of the query. + + qclass_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A descriptive name for the class of the query. + + qtype: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + A QTYPE value specifying the type of the query. + + qtype_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A descriptive name for the type of the query. + + rcode: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + The response code value in DNS response messages. + + rcode_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A descriptive name for the response code value. + + AA: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + The Authoritative Answer bit for response messages specifies + that the responding name server is an authority for the + domain name in the question section. + + TC: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + The Truncation bit specifies that the message was truncated. + + RD: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + The Recursion Desired bit in a request message indicates that + the client wants recursive service for this query. + + RA: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + The Recursion Available bit in a response message indicates + that the name server supports recursive queries. + + Z: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + A reserved field that is usually zero in + queries and responses. + + answers: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The set of resource descriptions in the query answer. + + TTLs: :bro:type:`vector` of :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + The caching intervals of the associated RRs described by the + *answers* field. + + rejected: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + The DNS query was rejected by the server. + + total_answers: :bro:type:`count` :bro:attr:`&optional` + The total number of resource records in a reply message's + answer section. + + total_replies: :bro:type:`count` :bro:attr:`&optional` + The total number of resource records in a reply message's + answer, authority, and additional sections. + + saw_query: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Whether the full DNS query has been seen. + + saw_reply: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Whether the full DNS reply has been seen. + + auth: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/dns/auth-addl.bro` is loaded) + + Authoritative responses for the query. + + addl: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/dns/auth-addl.bro` is loaded) + + Additional responses for the query. + + The record type which contains the column fields of the DNS log. + +.. bro:type:: DNS::PendingMessages + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`Queue::Queue` + + Yields a queue of :bro:see:`DNS::Info` objects for a given + DNS message query/transaction ID. + +.. bro:type:: DNS::State + + :Type: :bro:type:`record` + + pending_queries: :bro:type:`DNS::PendingMessages` + Indexed by query id, returns Info record corresponding to + queries that haven't been matched with a response yet. + + pending_replies: :bro:type:`DNS::PendingMessages` + Indexed by query id, returns Info record corresponding to + replies that haven't been matched with a query yet. + + A record type which tracks the status of DNS queries for a given + :bro:type:`connection`. + +Events +###### +.. bro:id:: DNS::log_dns + + :Type: :bro:type:`event` (rec: :bro:type:`DNS::Info`) + + An event that can be handled to access the :bro:type:`DNS::Info` + record as it is sent to the logging framework. + +Hooks +##### +.. bro:id:: DNS::do_reply + + :Type: :bro:type:`hook` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, ans: :bro:type:`dns_answer`, reply: :bro:type:`string`) : :bro:type:`bool` + + This is called by the specific dns_*_reply events with a "reply" + which may not represent the full data available from the resource + record, but it's generally considered a summarization of the + responses. + + + :c: The connection record for which to fill in DNS reply data. + + + :msg: The DNS message header information for the response. + + + :ans: The general information of a RR response. + + + :reply: The specific response information according to RR type/class. + +.. bro:id:: DNS::set_session + + :Type: :bro:type:`hook` (c: :bro:type:`connection`, msg: :bro:type:`dns_msg`, is_query: :bro:type:`bool`) : :bro:type:`bool` + + A hook that is called whenever a session is being set. + This can be used if additional initialization logic needs to happen + when creating a new session value. + + + :c: The connection involved in the new session. + + + :msg: The DNS message header information. + + + :is_query: Indicator for if this is being called for a query or a response. + + diff --git a/doc/scripts/base/protocols/ftp/__load__.bro.rst b/doc/scripts/base/protocols/ftp/__load__.bro.rst new file mode 100644 index 0000000000..7ddf6d2e96 --- /dev/null +++ b/doc/scripts/base/protocols/ftp/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/ftp/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/ftp/files.bro `, :doc:`base/protocols/ftp/gridftp.bro `, :doc:`base/protocols/ftp/info.bro `, :doc:`base/protocols/ftp/main.bro `, :doc:`base/protocols/ftp/utils-commands.bro `, :doc:`base/protocols/ftp/utils.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/ftp/files.bro.rst b/doc/scripts/base/protocols/ftp/files.bro.rst new file mode 100644 index 0000000000..25e62044be --- /dev/null +++ b/doc/scripts/base/protocols/ftp/files.bro.rst @@ -0,0 +1,44 @@ +:tocdepth: 3 + +base/protocols/ftp/files.bro +============================ +.. bro:namespace:: FTP + + +:Namespace: FTP +:Imports: :doc:`base/frameworks/files `, :doc:`base/protocols/ftp/info.bro `, :doc:`base/protocols/ftp/main.bro `, :doc:`base/protocols/ftp/utils.bro `, :doc:`base/utils/conn-ids.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================================== = +:bro:type:`FTP::Info`: :bro:type:`record` +:bro:type:`fa_file`: :bro:type:`record` :bro:attr:`&redef` +========================================================== = + +Functions +######### +==================================================== ===================================== +:bro:id:`FTP::describe_file`: :bro:type:`function` Describe the file being transferred. +:bro:id:`FTP::get_file_handle`: :bro:type:`function` Default file handle provider for FTP. +==================================================== ===================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: FTP::describe_file + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`string` + + Describe the file being transferred. + +.. bro:id:: FTP::get_file_handle + + :Type: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`string` + + Default file handle provider for FTP. + + diff --git a/doc/scripts/base/protocols/ftp/gridftp.bro.rst b/doc/scripts/base/protocols/ftp/gridftp.bro.rst new file mode 100644 index 0000000000..a72ef842ab --- /dev/null +++ b/doc/scripts/base/protocols/ftp/gridftp.bro.rst @@ -0,0 +1,129 @@ +:tocdepth: 3 + +base/protocols/ftp/gridftp.bro +============================== +.. bro:namespace:: GridFTP + +A detection script for GridFTP data and control channels. + +GridFTP control channels are identified by FTP control channels +that successfully negotiate the GSSAPI method of an AUTH request +and for which the exchange involved an encoded TLS/SSL handshake, +indicating the GSI mechanism for GSSAPI was used. This analysis +is all supported internally, this script simply adds the "gridftp" +label to the *service* field of the control channel's +:bro:type:`connection` record. + +GridFTP data channels are identified by a heuristic that relies on +the fact that default settings for GridFTP clients typically +mutually authenticate the data channel with TLS/SSL and negotiate a +NULL bulk cipher (no encryption). Connections with those attributes +are marked as GridFTP if the data transfer within the first two minutes +is big enough to indicate a GripFTP data channel that would be +undesirable to analyze further (e.g. stop TCP reassembly). A side +effect is that true connection sizes are not logged, but at the benefit +of saving CPU cycles that would otherwise go to analyzing the large +(and likely benign) connections. + +:Namespace: GridFTP +:Imports: :doc:`base/frameworks/notice `, :doc:`base/protocols/conn `, :doc:`base/protocols/ftp/info.bro `, :doc:`base/protocols/ftp/main.bro `, :doc:`base/protocols/ssl ` + +Summary +~~~~~~~ +Runtime Options +############### +======================================================================= =================================================================== +:bro:id:`GridFTP::max_time`: :bro:type:`interval` :bro:attr:`&redef` Time during which we check whether a connection's size exceeds the + :bro:see:`GridFTP::size_threshold`. +:bro:id:`GridFTP::size_threshold`: :bro:type:`count` :bro:attr:`&redef` Number of bytes transferred before guessing a connection is a + GridFTP data channel. +:bro:id:`GridFTP::skip_data`: :bro:type:`bool` :bro:attr:`&redef` Whether to skip further processing of the GridFTP data channel once + detected, which may help performance. +======================================================================= =================================================================== + +Redefinitions +############# +========================================= = +:bro:type:`FTP::Info`: :bro:type:`record` +========================================= = + +Events +###### +=========================================================== =============================================== +:bro:id:`GridFTP::data_channel_detected`: :bro:type:`event` Raised when a GridFTP data channel is detected. +=========================================================== =============================================== + +Functions +######### +========================================================================================= ================================================================= +:bro:id:`GridFTP::data_channel_initial_criteria`: :bro:type:`function` :bro:attr:`&redef` The initial criteria used to determine whether to start polling + the connection for the :bro:see:`GridFTP::size_threshold` to have + been exceeded. +========================================================================================= ================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: GridFTP::max_time + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``2.0 mins`` + + Time during which we check whether a connection's size exceeds the + :bro:see:`GridFTP::size_threshold`. + +.. bro:id:: GridFTP::size_threshold + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``1073741824`` + + Number of bytes transferred before guessing a connection is a + GridFTP data channel. + +.. bro:id:: GridFTP::skip_data + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Whether to skip further processing of the GridFTP data channel once + detected, which may help performance. + +Events +###### +.. bro:id:: GridFTP::data_channel_detected + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + Raised when a GridFTP data channel is detected. + + + :c: The connection pertaining to the GridFTP data channel. + +Functions +######### +.. bro:id:: GridFTP::data_channel_initial_criteria + + :Type: :bro:type:`function` (c: :bro:type:`connection`) : :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + + The initial criteria used to determine whether to start polling + the connection for the :bro:see:`GridFTP::size_threshold` to have + been exceeded. This is called in a :bro:see:`ssl_established` event + handler and by default looks for both a client and server certificate + and for a NULL bulk cipher. One way in which this function could be + redefined is to make it also consider client/server certificate + issuer subjects. + + + :c: The connection which may possibly be a GridFTP data channel. + + + :returns: true if the connection should be further polled for an + exceeded :bro:see:`GridFTP::size_threshold`, else false. + + diff --git a/doc/scripts/base/protocols/ftp/index.rst b/doc/scripts/base/protocols/ftp/index.rst new file mode 100644 index 0000000000..96547e453f --- /dev/null +++ b/doc/scripts/base/protocols/ftp/index.rst @@ -0,0 +1,54 @@ +:orphan: + +Package: base/protocols/ftp +=========================== + +Support for File Transfer Protocol (FTP) analysis. + +:doc:`/scripts/base/protocols/ftp/__load__.bro` + + +:doc:`/scripts/base/protocols/ftp/utils-commands.bro` + + +:doc:`/scripts/base/protocols/ftp/info.bro` + + Defines data structures for tracking and logging FTP sessions. + +:doc:`/scripts/base/protocols/ftp/main.bro` + + The logging this script does is primarily focused on logging FTP commands + along with metadata. For example, if files are transferred, the argument + will take on the full path that the client is at along with the requested + file name. + +:doc:`/scripts/base/protocols/ftp/utils.bro` + + Utilities specific for FTP processing. + +:doc:`/scripts/base/protocols/ftp/files.bro` + + +:doc:`/scripts/base/protocols/ftp/gridftp.bro` + + A detection script for GridFTP data and control channels. + + GridFTP control channels are identified by FTP control channels + that successfully negotiate the GSSAPI method of an AUTH request + and for which the exchange involved an encoded TLS/SSL handshake, + indicating the GSI mechanism for GSSAPI was used. This analysis + is all supported internally, this script simply adds the "gridftp" + label to the *service* field of the control channel's + :bro:type:`connection` record. + + GridFTP data channels are identified by a heuristic that relies on + the fact that default settings for GridFTP clients typically + mutually authenticate the data channel with TLS/SSL and negotiate a + NULL bulk cipher (no encryption). Connections with those attributes + are marked as GridFTP if the data transfer within the first two minutes + is big enough to indicate a GripFTP data channel that would be + undesirable to analyze further (e.g. stop TCP reassembly). A side + effect is that true connection sizes are not logged, but at the benefit + of saving CPU cycles that would otherwise go to analyzing the large + (and likely benign) connections. + diff --git a/doc/scripts/base/protocols/ftp/info.bro.rst b/doc/scripts/base/protocols/ftp/info.bro.rst new file mode 100644 index 0000000000..d6869c6c8c --- /dev/null +++ b/doc/scripts/base/protocols/ftp/info.bro.rst @@ -0,0 +1,132 @@ +:tocdepth: 3 + +base/protocols/ftp/info.bro +=========================== +.. bro:namespace:: FTP + +Defines data structures for tracking and logging FTP sessions. + +:Namespace: FTP +:Imports: :doc:`base/protocols/ftp/utils-commands.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================ ========================================================== +:bro:id:`FTP::default_capture_password`: :bro:type:`bool` :bro:attr:`&redef` This setting changes if passwords used in FTP sessions are + captured or not. +============================================================================ ========================================================== + +Types +##### +======================================================== ============================================== +:bro:type:`FTP::ExpectedDataChannel`: :bro:type:`record` The expected endpoints of an FTP data channel. +:bro:type:`FTP::Info`: :bro:type:`record` +======================================================== ============================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: FTP::default_capture_password + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + This setting changes if passwords used in FTP sessions are + captured or not. + +Types +##### +.. bro:type:: FTP::ExpectedDataChannel + + :Type: :bro:type:`record` + + passive: :bro:type:`bool` :bro:attr:`&log` + Whether PASV mode is toggled for control channel. + + orig_h: :bro:type:`addr` :bro:attr:`&log` + The host that will be initiating the data connection. + + resp_h: :bro:type:`addr` :bro:attr:`&log` + The host that will be accepting the data connection. + + resp_p: :bro:type:`port` :bro:attr:`&log` + The port at which the acceptor is listening for the data + connection. + + The expected endpoints of an FTP data channel. + +.. bro:type:: FTP::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time when the command was sent. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + user: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + User name for the current FTP session. + + password: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Password for the current FTP session if captured. + + command: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Command given by the client. + + arg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Argument for the command if one is given. + + mime_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Sniffed mime type of file. + + file_size: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Size of the file if the command indicates a file transfer. + + reply_code: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Reply code from the server in response to the command. + + reply_msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Reply message from the server in response to the command. + + data_channel: :bro:type:`FTP::ExpectedDataChannel` :bro:attr:`&log` :bro:attr:`&optional` + Expected FTP data channel. + + cwd: :bro:type:`string` :bro:attr:`&default` = ``"."`` :bro:attr:`&optional` + Current working directory that this session is in. By making + the default value '.', we can indicate that unless something + more concrete is discovered that the existing but unknown + directory is ok to use. + + cmdarg: :bro:type:`FTP::CmdArg` :bro:attr:`&optional` + Command that is currently waiting for a response. + + pending_commands: :bro:type:`FTP::PendingCmds` + Queue for commands that have been sent but not yet responded + to are tracked here. + + passive: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Indicates if the session is in active or passive mode. + + capture_password: :bro:type:`bool` :bro:attr:`&default` = :bro:see:`FTP::default_capture_password` :bro:attr:`&optional` + Determines if the password will be captured for this request. + + fuid: :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/base/protocols/ftp/files.bro` is loaded) + + File unique ID. + + last_auth_requested: :bro:type:`string` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ftp/gridftp.bro` is loaded) + + + + diff --git a/doc/scripts/base/protocols/ftp/main.bro.rst b/doc/scripts/base/protocols/ftp/main.bro.rst new file mode 100644 index 0000000000..1ccbf521e4 --- /dev/null +++ b/doc/scripts/base/protocols/ftp/main.bro.rst @@ -0,0 +1,128 @@ +:tocdepth: 3 + +base/protocols/ftp/main.bro +=========================== +.. bro:namespace:: FTP + +The logging this script does is primarily focused on logging FTP commands +along with metadata. For example, if files are transferred, the argument +will take on the full path that the client is at along with the requested +file name. + +:Namespace: FTP +:Imports: :doc:`base/protocols/ftp/info.bro `, :doc:`base/protocols/ftp/utils-commands.bro `, :doc:`base/protocols/ftp/utils.bro `, :doc:`base/utils/addrs.bro `, :doc:`base/utils/numbers.bro `, :doc:`base/utils/paths.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +================================================================== ====================================================================== +:bro:id:`FTP::guest_ids`: :bro:type:`set` :bro:attr:`&redef` User IDs that can be considered "anonymous". +:bro:id:`FTP::logged_commands`: :bro:type:`set` :bro:attr:`&redef` List of commands that should have their command/response pairs logged. +================================================================== ====================================================================== + +Types +##### +============================================== =============================================== +:bro:type:`FTP::ReplyCode`: :bro:type:`record` This record is to hold a parsed FTP reply code. +============================================== =============================================== + +Redefinitions +############# +================================================================= =========================================== +:bro:type:`Log::ID`: :bro:type:`enum` The FTP protocol logging stream identifier. +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= =========================================== + +Events +###### +========================================= ============================================================= +:bro:id:`FTP::log_ftp`: :bro:type:`event` Event that can be handled to access the :bro:type:`FTP::Info` + record as it is sent on to the logging framework. +========================================= ============================================================= + +Functions +######### +========================================================= ===================================================================== +:bro:id:`FTP::parse_ftp_reply_code`: :bro:type:`function` Parse FTP reply codes into the three constituent single digit values. +========================================================= ===================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: FTP::guest_ids + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "ftpuser", + "ftp", + "guest", + "anonymous" + } + + User IDs that can be considered "anonymous". + +.. bro:id:: FTP::logged_commands + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "RETR", + "EPSV", + "EPRT", + "DELE", + "PORT", + "PASV", + "STOR", + "APPE", + "STOU", + "ACCT" + } + + List of commands that should have their command/response pairs logged. + +Types +##### +.. bro:type:: FTP::ReplyCode + + :Type: :bro:type:`record` + + x: :bro:type:`count` + + y: :bro:type:`count` + + z: :bro:type:`count` + + This record is to hold a parsed FTP reply code. For example, for the + 201 status code, the digits would be parsed as: x->2, y->0, z->1. + +Events +###### +.. bro:id:: FTP::log_ftp + + :Type: :bro:type:`event` (rec: :bro:type:`FTP::Info`) + + Event that can be handled to access the :bro:type:`FTP::Info` + record as it is sent on to the logging framework. + +Functions +######### +.. bro:id:: FTP::parse_ftp_reply_code + + :Type: :bro:type:`function` (code: :bro:type:`count`) : :bro:type:`FTP::ReplyCode` + + Parse FTP reply codes into the three constituent single digit values. + + diff --git a/doc/scripts/base/protocols/ftp/utils-commands.bro.rst b/doc/scripts/base/protocols/ftp/utils-commands.bro.rst new file mode 100644 index 0000000000..ebc5fd4cc4 --- /dev/null +++ b/doc/scripts/base/protocols/ftp/utils-commands.bro.rst @@ -0,0 +1,397 @@ +:tocdepth: 3 + +base/protocols/ftp/utils-commands.bro +===================================== +.. bro:namespace:: FTP + + +:Namespace: FTP + +Summary +~~~~~~~ +Runtime Options +############### +================================================================= =========================================================== +:bro:id:`FTP::cmd_reply_code`: :bro:type:`set` :bro:attr:`&redef` Possible response codes for a wide variety of FTP commands. +================================================================= =========================================================== + +Types +##### +=============================================== ==================================================================== +:bro:type:`FTP::CmdArg`: :bro:type:`record` +:bro:type:`FTP::PendingCmds`: :bro:type:`table` Structure for tracking pending commands in the event that the client + sends a large number of commands before the server has a chance to + reply. +=============================================== ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: FTP::cmd_reply_code + + :Type: :bro:type:`set` [:bro:type:`string`, :bro:type:`count`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + ["STRU", 501] , + ["SITE", 501] , + ["LIST", 530] , + ["PASS", 230] , + ["", 421] , + ["STOR", 500] , + ["PASS", 202] , + ["ACCT", 500] , + ["RETR", 125] , + ["PWD", 550] , + ["NLST", 550] , + ["HELP", 502] , + ["LIST", 451] , + ["CWD", 530] , + ["HELP", 211] , + ["STOU", 551] , + ["STOU", 452] , + ["SYST", 215] , + ["NLST", 530] , + ["RNFR", 350] , + ["STOU", 451] , + ["MLST", 150] , + ["EPRT", 522] , + ["ABOR", 500] , + ["REST", 502] , + ["TYPE", 200] , + ["RETR", 110] , + ["RNTO", 530] , + ["APPE", 250] , + ["RETR", 451] , + ["NLST", 226] , + ["NLST", 502] , + ["APPE", 552] , + ["HELP", 501] , + ["STOR", 250] , + ["STOU", 500] , + ["STOR", 451] , + ["STOU", 553] , + ["APPE", 150] , + ["MKD", 502] , + ["RETR", 226] , + ["PWD", 257] , + ["MLST", 226] , + ["STRU", 421] , + ["MLSD", 550] , + ["STRU", 200] , + ["MLST", 500] , + ["APPE", 451] , + ["STOR", 452] , + ["SMNT", 501] , + ["ACCT", 230] , + ["DELE", 500] , + ["SYST", 502] , + ["ALLO", 504] , + ["STAT", 530] , + ["APPE", 532] , + ["CDUP", 501] , + ["SMNT", 421] , + ["APPE", 226] , + ["REST", 530] , + ["LIST", 150] , + ["SYST", 500] , + ["SYST", 530] , + ["RNFR", 500] , + ["STAT", 500] , + ["STRU", 504] , + ["STOR", 532] , + ["REST", 200] , + ["MODE", 530] , + ["DELE", 450] , + ["CWD", 502] , + ["REIN", 220] , + ["RNTO", 553] , + ["STOU", 421] , + ["RETR", 501] , + ["LIST", 500] , + ["RNFR", 421] , + ["MODE", 421] , + ["FEAT", 502] , + ["MACB", 200] , + ["RETR", 550] , + ["MODE", 504] , + ["APPE", 425] , + ["ALLO", 202] , + ["OPTS", 501] , + ["STOU", 226] , + ["STAT", 421] , + ["REIN", 502] , + ["STRU", 530] , + ["MLSD", 501] , + ["CWD", 421] , + ["NOOP", 500] , + ["MLSD", 250] , + ["PASS", 530] , + ["RNTO", 532] , + ["ALLO", 421] , + ["USER", 331] , + ["MKD", 530] , + ["STAT", 212] , + ["REIN", 120] , + ["RNTO", 503] , + ["STAT", 450] , + ["APPE", 500] , + ["APPE", 530] , + ["SITE", 214] , + ["FEAT", 211] , + ["STOU", 450] , + ["STOR", 425] , + ["RMD", 502] , + ["ABOR", 502] , + ["STOU", 426] , + ["STAT", 501] , + ["STOR", 552] , + ["RMD", 501] , + ["STOU", 110] , + ["MLST", 250] , + ["RNTO", 502] , + ["STOR", 150] , + ["ALLO", 200] , + ["MDTM", 501] , + ["PWD", 502] , + ["RNTO", 501] , + ["RETR", 450] , + ["MDTM", 213] , + ["RNTO", 250] , + ["DELE", 550] , + ["MKD", 421] , + ["RNTO", 421] , + ["APPE", 452] , + ["PORT", 200] , + ["STOU", 501] , + ["RNFR", 502] , + ["NLST", 425] , + ["REIN", 421] , + ["STOU", 532] , + ["RETR", 425] , + ["STAT", 502] , + ["HELP", 214] , + ["ABOR", 421] , + ["MKD", 501] , + ["CDUP", 200] , + ["STAT", 211] , + ["ALLO", 530] , + ["APPE", 553] , + ["CDUP", 250] , + ["PASS", 421] , + ["", 120] , + ["EPSV", 501] , + ["TYPE", 504] , + ["HELP", 500] , + ["STOU", 550] , + ["SIZE", 550] , + ["DELE", 502] , + ["RNFR", 501] , + ["STAT", 213] , + ["USER", 421] , + ["CDUP", 500] , + ["PASV", 530] , + ["LIST", 550] , + ["REIN", 500] , + ["NOOP", 421] , + ["EPSV", 229] , + ["", 0] , + ["SYST", 421] , + ["APPE", 426] , + ["ACCT", 421] , + ["RMD", 550] , + ["MLSD", 226] , + ["USER", 230] , + ["PASS", 500] , + ["NLST", 125] , + ["NLST", 450] , + ["RMD", 530] , + ["STOR", 553] , + ["ACCT", 503] , + ["STOU", 425] , + ["MODE", 200] , + ["RMD", 250] , + ["PORT", 530] , + ["APPE", 501] , + ["HELP", 421] , + ["LPRT", 501] , + ["STOU", 250] , + ["STOU", 150] , + ["RMD", 421] , + ["HELP", 200] , + ["CLNT", 500] , + ["LIST", 125] , + ["CWD", 501] , + ["RNFR", 550] , + ["MLST", 550] , + ["CDUP", 502] , + ["SITE", 530] , + ["RETR", 421] , + ["RNTO", 500] , + ["RETR", 250] , + ["SITE", 202] , + ["STOR", 530] , + ["SMNT", 502] , + ["TYPE", 500] , + ["LIST", 426] , + ["APPE", 125] , + ["MDTM", 500] , + ["", 0] , + ["LIST", 250] , + ["DELE", 250] , + ["MKD", 257] , + ["PASS", 332] , + ["PWD", 500] , + ["LIST", 226] , + ["FEAT", 500] , + ["NLST", 500] , + ["NLST", 501] , + ["EPRT", 500] , + ["DELE", 530] , + ["LIST", 502] , + ["APPE", 421] , + ["USER", 332] , + ["EPRT", 501] , + ["PORT", 500] , + ["SMNT", 250] , + ["STOU", 552] , + ["APPE", 550] , + ["STRU", 500] , + ["MLSD", 150] , + ["OPTS", 200] , + ["MODE", 501] , + ["NLST", 250] , + ["SIZE", 501] , + ["ACCT", 202] , + ["MKD", 500] , + ["SITE", 200] , + ["QUIT", 500] , + ["STOR", 426] , + ["LIST", 421] , + ["RETR", 150] , + ["MODE", 502] , + ["RMD", 500] , + ["NLST", 421] , + ["", 220] , + ["PORT", 421] , + ["CWD", 250] , + ["RNFR", 450] , + ["STOR", 125] , + ["CLNT", 200] , + ["PASS", 501] , + ["PASV", 421] , + ["REST", 501] , + ["RNFR", 530] , + ["SMNT", 500] , + ["SMNT", 530] , + ["SITE", 502] , + ["APPE", 502] , + ["REST", 421] , + ["USER", 530] , + ["STOR", 550] , + ["MLST", 501] , + ["STOR", 551] , + ["OPTS", 451] , + ["SYST", 501] , + ["LPRT", 521] , + ["PORT", 501] , + ["NOOP", 200] , + ["APPE", 450] , + ["DELE", 501] , + ["ABOR", 225] , + ["PASV", 500] , + ["NLST", 150] , + ["CDUP", 530] , + ["PWD", 421] , + ["TYPE", 421] , + ["ABOR", 501] , + ["RETR", 500] , + ["ACCT", 530] , + ["STOR", 501] , + ["STOR", 226] , + ["RETR", 426] , + ["QUIT", 221] , + ["CDUP", 550] , + ["STOR", 450] , + ["NLST", 451] , + ["SITE", 500] , + ["SIZE", 213] , + ["STOR", 421] , + ["MACB", 550] , + ["PASV", 501] , + ["CWD", 500] , + ["ALLO", 501] , + ["PASV", 502] , + ["CDUP", 421] , + ["DELE", 421] , + ["SIZE", 500] , + ["PASV", 227] , + ["PWD", 501] , + ["REST", 350] , + ["NLST", 426] , + ["STOU", 530] , + ["USER", 501] , + ["USER", 500] , + ["PASS", 503] , + ["REST", 500] , + ["MLSD", 500] , + ["MACB", 500] , + ["SMNT", 550] , + ["RETR", 530] , + ["STOU", 125] , + ["TYPE", 501] , + ["CWD", 550] , + ["MKD", 550] , + ["STOR", 110] , + ["SMNT", 202] , + ["MDTM", 550] , + ["ABOR", 226] , + ["EPRT", 200] , + ["MODE", 500] , + ["ACCT", 501] , + ["EPSV", 500] , + ["QUIT", 0] , + ["ALLO", 500] , + ["LIST", 501] , + ["TYPE", 530] , + ["APPE", 551] , + ["LIST", 425] , + ["LPRT", 500] , + ["LIST", 450] + } + + Possible response codes for a wide variety of FTP commands. + +Types +##### +.. bro:type:: FTP::CmdArg + + :Type: :bro:type:`record` + + ts: :bro:type:`time` + Time when the command was sent. + + cmd: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + Command. + + arg: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + Argument for the command if one was given. + + seq: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Counter to track how many commands have been executed. + + +.. bro:type:: FTP::PendingCmds + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`FTP::CmdArg` + + Structure for tracking pending commands in the event that the client + sends a large number of commands before the server has a chance to + reply. + + diff --git a/doc/scripts/base/protocols/ftp/utils.bro.rst b/doc/scripts/base/protocols/ftp/utils.bro.rst new file mode 100644 index 0000000000..eb3f8ea311 --- /dev/null +++ b/doc/scripts/base/protocols/ftp/utils.bro.rst @@ -0,0 +1,57 @@ +:tocdepth: 3 + +base/protocols/ftp/utils.bro +============================ +.. bro:namespace:: FTP + +Utilities specific for FTP processing. + +:Namespace: FTP +:Imports: :doc:`base/protocols/ftp/info.bro `, :doc:`base/utils/addrs.bro `, :doc:`base/utils/paths.bro ` + +Summary +~~~~~~~ +Functions +######### +================================================== =========================================================== +:bro:id:`FTP::build_url`: :bro:type:`function` Creates a URL from an :bro:type:`FTP::Info` record. +:bro:id:`FTP::build_url_ftp`: :bro:type:`function` Creates a URL from an :bro:type:`FTP::Info` record. +:bro:id:`FTP::describe`: :bro:type:`function` Create an extremely shortened representation of a log line. +================================================== =========================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: FTP::build_url + + :Type: :bro:type:`function` (rec: :bro:type:`FTP::Info`) : :bro:type:`string` + + Creates a URL from an :bro:type:`FTP::Info` record. + + + :rec: An :bro:type:`FTP::Info` record. + + + :returns: A URL, not prefixed by ``"ftp://"``. + +.. bro:id:: FTP::build_url_ftp + + :Type: :bro:type:`function` (rec: :bro:type:`FTP::Info`) : :bro:type:`string` + + Creates a URL from an :bro:type:`FTP::Info` record. + + + :rec: An :bro:type:`FTP::Info` record. + + + :returns: A URL prefixed with ``"ftp://"``. + +.. bro:id:: FTP::describe + + :Type: :bro:type:`function` (rec: :bro:type:`FTP::Info`) : :bro:type:`string` + + Create an extremely shortened representation of a log line. + + diff --git a/doc/scripts/base/protocols/http/__load__.bro.rst b/doc/scripts/base/protocols/http/__load__.bro.rst new file mode 100644 index 0000000000..b7802138aa --- /dev/null +++ b/doc/scripts/base/protocols/http/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/http/__load__.bro +================================ + + +:Imports: :doc:`base/protocols/http/entities.bro `, :doc:`base/protocols/http/files.bro `, :doc:`base/protocols/http/main.bro `, :doc:`base/protocols/http/utils.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/http/entities.bro.rst b/doc/scripts/base/protocols/http/entities.bro.rst new file mode 100644 index 0000000000..7ad97a266b --- /dev/null +++ b/doc/scripts/base/protocols/http/entities.bro.rst @@ -0,0 +1,40 @@ +:tocdepth: 3 + +base/protocols/http/entities.bro +================================ +.. bro:namespace:: HTTP + +Analysis and logging for MIME entities found in HTTP sessions. + +:Namespace: HTTP +:Imports: :doc:`base/frameworks/files `, :doc:`base/protocols/http/main.bro `, :doc:`base/utils/files.bro `, :doc:`base/utils/strings.bro ` + +Summary +~~~~~~~ +Types +##### +============================================ = +:bro:type:`HTTP::Entity`: :bro:type:`record` +============================================ = + +Redefinitions +############# +========================================================== = +:bro:type:`HTTP::Info`: :bro:type:`record` +:bro:type:`fa_file`: :bro:type:`record` :bro:attr:`&redef` +========================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: HTTP::Entity + + :Type: :bro:type:`record` + + filename: :bro:type:`string` :bro:attr:`&optional` + Filename for the entity if discovered from a header. + + + diff --git a/doc/scripts/base/protocols/http/files.bro.rst b/doc/scripts/base/protocols/http/files.bro.rst new file mode 100644 index 0000000000..1398a6358a --- /dev/null +++ b/doc/scripts/base/protocols/http/files.bro.rst @@ -0,0 +1,37 @@ +:tocdepth: 3 + +base/protocols/http/files.bro +============================= +.. bro:namespace:: HTTP + + +:Namespace: HTTP +:Imports: :doc:`base/frameworks/files `, :doc:`base/protocols/http/entities.bro `, :doc:`base/protocols/http/main.bro `, :doc:`base/protocols/http/utils.bro `, :doc:`base/utils/conn-ids.bro ` + +Summary +~~~~~~~ +Functions +######### +===================================================== ====================================== +:bro:id:`HTTP::describe_file`: :bro:type:`function` Default file describer for HTTP. +:bro:id:`HTTP::get_file_handle`: :bro:type:`function` Default file handle provider for HTTP. +===================================================== ====================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: HTTP::describe_file + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`string` + + Default file describer for HTTP. + +.. bro:id:: HTTP::get_file_handle + + :Type: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`string` + + Default file handle provider for HTTP. + + diff --git a/doc/scripts/base/protocols/http/index.rst b/doc/scripts/base/protocols/http/index.rst new file mode 100644 index 0000000000..659f45d8ca --- /dev/null +++ b/doc/scripts/base/protocols/http/index.rst @@ -0,0 +1,27 @@ +:orphan: + +Package: base/protocols/http +============================ + +Support for Hypertext Transfer Protocol (HTTP) analysis. + +:doc:`/scripts/base/protocols/http/__load__.bro` + + +:doc:`/scripts/base/protocols/http/main.bro` + + Implements base functionality for HTTP analysis. The logging model is + to log request/response pairs and all relevant metadata together in + a single record. + +:doc:`/scripts/base/protocols/http/entities.bro` + + Analysis and logging for MIME entities found in HTTP sessions. + +:doc:`/scripts/base/protocols/http/utils.bro` + + Utilities specific for HTTP processing. + +:doc:`/scripts/base/protocols/http/files.bro` + + diff --git a/doc/scripts/base/protocols/http/main.bro.rst b/doc/scripts/base/protocols/http/main.bro.rst new file mode 100644 index 0000000000..7955ed4b36 --- /dev/null +++ b/doc/scripts/base/protocols/http/main.bro.rst @@ -0,0 +1,342 @@ +:tocdepth: 3 + +base/protocols/http/main.bro +============================ +.. bro:namespace:: HTTP + +Implements base functionality for HTTP analysis. The logging model is +to log request/response pairs and all relevant metadata together in +a single record. + +:Namespace: HTTP +:Imports: :doc:`base/frameworks/tunnels `, :doc:`base/utils/files.bro `, :doc:`base/utils/numbers.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================= ==================================================================== +:bro:id:`HTTP::default_capture_password`: :bro:type:`bool` :bro:attr:`&redef` This setting changes if passwords used in Basic-Auth are captured or + not. +:bro:id:`HTTP::http_methods`: :bro:type:`set` :bro:attr:`&redef` A list of HTTP methods. +:bro:id:`HTTP::proxy_headers`: :bro:type:`set` :bro:attr:`&redef` A list of HTTP headers typically used to indicate proxied requests. +============================================================================= ==================================================================== + +Types +##### +=========================================== =================================================================== +:bro:type:`HTTP::Info`: :bro:type:`record` The record type which contains the fields of the HTTP log. +:bro:type:`HTTP::State`: :bro:type:`record` Structure to maintain state for an HTTP connection with multiple + requests and responses. +:bro:type:`HTTP::Tags`: :bro:type:`enum` Indicate a type of attack or compromise in the record to be logged. +=========================================== =================================================================== + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +=========================================== ==================================================================== +:bro:id:`HTTP::log_http`: :bro:type:`event` Event that can be handled to access the HTTP record as it is sent on + to the logging framework. +=========================================== ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: HTTP::default_capture_password + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + This setting changes if passwords used in Basic-Auth are captured or + not. + +.. bro:id:: HTTP::http_methods + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "MKCOL", + "MOVE", + "LOCK", + "SUBSCRIBE", + "REPORT", + "PROPPATCH", + "UNLOCK", + "OPTIONS", + "CONNECT", + "DELETE", + "TRACE", + "SEARCH", + "HEAD", + "COPY", + "BMOVE", + "GET", + "PUT", + "POST", + "PROPFIND", + "POLL" + } + + A list of HTTP methods. Other methods will generate a weird. Note + that the HTTP analyzer will only accept methods consisting solely + of letters ``[A-Za-z]``. + +.. bro:id:: HTTP::proxy_headers + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "X-FORWARDED-FOR", + "CLIENT-IP", + "XROXY-CONNECTION", + "X-FORWARDED-FROM", + "FORWARDED", + "PROXY-CONNECTION", + "VIA" + } + + A list of HTTP headers typically used to indicate proxied requests. + +Types +##### +.. bro:type:: HTTP::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the request happened. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + trans_depth: :bro:type:`count` :bro:attr:`&log` + Represents the pipelined depth into the connection of this + request/response transaction. + + method: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Verb used in the HTTP request (GET, POST, HEAD, etc.). + + host: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Value of the HOST header. + + uri: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + URI used in the request. + + referrer: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Value of the "referer" header. The comment is deliberately + misspelled like the standard declares, but the name used here + is "referrer" spelled correctly. + + version: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Value of the version portion of the request. + + user_agent: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Value of the User-Agent header from the client. + + request_body_len: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Actual uncompressed content size of the data transferred from + the client. + + response_body_len: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Actual uncompressed content size of the data transferred from + the server. + + status_code: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Status code returned by the server. + + status_msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Status message returned by the server. + + info_code: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Last seen 1xx informational reply code returned by the server. + + info_msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Last seen 1xx informational reply message returned by the server. + + tags: :bro:type:`set` [:bro:type:`HTTP::Tags`] :bro:attr:`&log` + A set of indicators of various attributes discovered and + related to a particular request/response pair. + + username: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Username if basic-auth is performed for the request. + + password: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Password if basic-auth is performed for the request. + + capture_password: :bro:type:`bool` :bro:attr:`&default` = :bro:see:`HTTP::default_capture_password` :bro:attr:`&optional` + Determines if the password will be captured for this request. + + proxied: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` :bro:attr:`&optional` + All of the headers that may indicate if the request was proxied. + + range_request: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Indicates if this request can assume 206 partial content in + response. + + orig_fuids: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + An ordered vector of file unique IDs. + + orig_filenames: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + An ordered vector of filenames from the client. + + orig_mime_types: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + An ordered vector of mime types. + + resp_fuids: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + An ordered vector of file unique IDs. + + resp_filenames: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + An ordered vector of filenames from the server. + + resp_mime_types: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + An ordered vector of mime types. + + current_entity: :bro:type:`HTTP::Entity` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + The current entity. + + orig_mime_depth: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + Current number of MIME entities in the HTTP request message + body. + + resp_mime_depth: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/http/entities.bro` is loaded) + + Current number of MIME entities in the HTTP response message + body. + + client_header_names: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/http/header-names.bro` is loaded) + + The vector of HTTP header names sent by the client. No + header values are included here, just the header names. + + server_header_names: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/http/header-names.bro` is loaded) + + The vector of HTTP header names sent by the server. No + header values are included here, just the header names. + + omniture: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/http/software-browser-plugins.bro` is loaded) + + Indicates if the server is an omniture advertising server. + + flash_version: :bro:type:`string` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/http/software-browser-plugins.bro` is loaded) + + The unparsed Flash version, if detected. + + cookie_vars: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/policy/protocols/http/var-extraction-cookies.bro` is loaded) + + Variable names extracted from all cookies. + + uri_vars: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/policy/protocols/http/var-extraction-uri.bro` is loaded) + + Variable names from the URI. + + The record type which contains the fields of the HTTP log. + +.. bro:type:: HTTP::State + + :Type: :bro:type:`record` + + pending: :bro:type:`table` [:bro:type:`count`] of :bro:type:`HTTP::Info` + Pending requests. + + current_request: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Current request in the pending queue. + + current_response: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Current response in the pending queue. + + trans_depth: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Track the current deepest transaction. + This is meant to cope with missing requests + and responses. + + Structure to maintain state for an HTTP connection with multiple + requests and responses. + +.. bro:type:: HTTP::Tags + + :Type: :bro:type:`enum` + + .. bro:enum:: HTTP::EMPTY HTTP::Tags + + Placeholder. + + .. bro:enum:: HTTP::URI_SQLI HTTP::Tags + + (present if :doc:`/scripts/policy/protocols/http/detect-sqli.bro` is loaded) + + + Indicator of a URI based SQL injection attack. + + .. bro:enum:: HTTP::POST_SQLI HTTP::Tags + + (present if :doc:`/scripts/policy/protocols/http/detect-sqli.bro` is loaded) + + + Indicator of client body based SQL injection attack. This is + typically the body content of a POST request. Not implemented + yet. + + .. bro:enum:: HTTP::COOKIE_SQLI HTTP::Tags + + (present if :doc:`/scripts/policy/protocols/http/detect-sqli.bro` is loaded) + + + Indicator of a cookie based SQL injection attack. Not + implemented yet. + + Indicate a type of attack or compromise in the record to be logged. + +Events +###### +.. bro:id:: HTTP::log_http + + :Type: :bro:type:`event` (rec: :bro:type:`HTTP::Info`) + + Event that can be handled to access the HTTP record as it is sent on + to the logging framework. + + diff --git a/doc/scripts/base/protocols/http/utils.bro.rst b/doc/scripts/base/protocols/http/utils.bro.rst new file mode 100644 index 0000000000..b00329463c --- /dev/null +++ b/doc/scripts/base/protocols/http/utils.bro.rst @@ -0,0 +1,78 @@ +:tocdepth: 3 + +base/protocols/http/utils.bro +============================= +.. bro:namespace:: HTTP + +Utilities specific for HTTP processing. + +:Namespace: HTTP +:Imports: :doc:`base/protocols/http/main.bro `, :doc:`base/utils/addrs.bro ` + +Summary +~~~~~~~ +Functions +######### +==================================================== ==================================================================== +:bro:id:`HTTP::build_url`: :bro:type:`function` Creates a URL from an :bro:type:`HTTP::Info` record. +:bro:id:`HTTP::build_url_http`: :bro:type:`function` Creates a URL from an :bro:type:`HTTP::Info` record. +:bro:id:`HTTP::describe`: :bro:type:`function` Create an extremely shortened representation of a log line. +:bro:id:`HTTP::extract_keys`: :bro:type:`function` Given a string containing a series of key-value pairs separated + by "=", this function can be used to parse out all of the key names. +==================================================== ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: HTTP::build_url + + :Type: :bro:type:`function` (rec: :bro:type:`HTTP::Info`) : :bro:type:`string` + + Creates a URL from an :bro:type:`HTTP::Info` record. This should + handle edge cases such as proxied requests appropriately. + + + :rec: An :bro:type:`HTTP::Info` record. + + + :returns: A URL, not prefixed by ``"http://"``. + +.. bro:id:: HTTP::build_url_http + + :Type: :bro:type:`function` (rec: :bro:type:`HTTP::Info`) : :bro:type:`string` + + Creates a URL from an :bro:type:`HTTP::Info` record. This should + handle edge cases such as proxied requests appropriately. + + + :rec: An :bro:type:`HTTP::Info` record. + + + :returns: A URL prefixed with ``"http://"``. + +.. bro:id:: HTTP::describe + + :Type: :bro:type:`function` (rec: :bro:type:`HTTP::Info`) : :bro:type:`string` + + Create an extremely shortened representation of a log line. + +.. bro:id:: HTTP::extract_keys + + :Type: :bro:type:`function` (data: :bro:type:`string`, kv_splitter: :bro:type:`pattern`) : :bro:type:`string_vec` + + Given a string containing a series of key-value pairs separated + by "=", this function can be used to parse out all of the key names. + + + :data: The raw data, such as a URL or cookie value. + + + :kv_splitter: A regular expression representing the separator between + key-value pairs. + + + :returns: A vector of strings containing the keys. + + diff --git a/doc/scripts/base/protocols/imap/__load__.bro.rst b/doc/scripts/base/protocols/imap/__load__.bro.rst new file mode 100644 index 0000000000..15d5316954 --- /dev/null +++ b/doc/scripts/base/protocols/imap/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/imap/__load__.bro +================================ + + +:Imports: :doc:`base/protocols/imap/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/imap/index.rst b/doc/scripts/base/protocols/imap/index.rst new file mode 100644 index 0000000000..ffd67678df --- /dev/null +++ b/doc/scripts/base/protocols/imap/index.rst @@ -0,0 +1,17 @@ +:orphan: + +Package: base/protocols/imap +============================ + +Support for the Internet Message Access Protocol (IMAP). + +Note that currently the IMAP analyzer only supports analyzing IMAP sessions +until they do or do not switch to TLS using StartTLS. Hence, we do not get +mails from IMAP sessions, only X509 certificates. + +:doc:`/scripts/base/protocols/imap/__load__.bro` + + +:doc:`/scripts/base/protocols/imap/main.bro` + + diff --git a/doc/scripts/base/protocols/imap/main.bro.rst b/doc/scripts/base/protocols/imap/main.bro.rst new file mode 100644 index 0000000000..144e6231ef --- /dev/null +++ b/doc/scripts/base/protocols/imap/main.bro.rst @@ -0,0 +1,21 @@ +:tocdepth: 3 + +base/protocols/imap/main.bro +============================ +.. bro:namespace:: IMAP + + +:Namespace: IMAP + +Summary +~~~~~~~ +Redefinitions +############# +================================================================= = +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/irc/__load__.bro.rst b/doc/scripts/base/protocols/irc/__load__.bro.rst new file mode 100644 index 0000000000..cb73ec61b5 --- /dev/null +++ b/doc/scripts/base/protocols/irc/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/irc/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/irc/dcc-send.bro `, :doc:`base/protocols/irc/files.bro `, :doc:`base/protocols/irc/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/irc/dcc-send.bro.rst b/doc/scripts/base/protocols/irc/dcc-send.bro.rst new file mode 100644 index 0000000000..15d55f1cd9 --- /dev/null +++ b/doc/scripts/base/protocols/irc/dcc-send.bro.rst @@ -0,0 +1,29 @@ +:tocdepth: 3 + +base/protocols/irc/dcc-send.bro +=============================== +.. bro:namespace:: IRC + +File extraction and introspection for DCC transfers over IRC. + +There is a major problem with this script in the cluster context because +we might see A send B a message that a DCC connection is to be expected, +but that connection will actually be between B and C which could be +analyzed on a different worker. + + +:Namespace: IRC +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/protocols/irc/main.bro `, :doc:`base/utils/files.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================= = +:bro:type:`IRC::Info`: :bro:type:`record` +========================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/irc/files.bro.rst b/doc/scripts/base/protocols/irc/files.bro.rst new file mode 100644 index 0000000000..9e98d6b3b3 --- /dev/null +++ b/doc/scripts/base/protocols/irc/files.bro.rst @@ -0,0 +1,37 @@ +:tocdepth: 3 + +base/protocols/irc/files.bro +============================ +.. bro:namespace:: IRC + + +:Namespace: IRC +:Imports: :doc:`base/frameworks/files `, :doc:`base/protocols/irc/dcc-send.bro `, :doc:`base/utils/conn-ids.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================================== = +:bro:type:`IRC::Info`: :bro:type:`record` +:bro:type:`fa_file`: :bro:type:`record` :bro:attr:`&redef` +========================================================== = + +Functions +######### +==================================================== ===================================== +:bro:id:`IRC::get_file_handle`: :bro:type:`function` Default file handle provider for IRC. +==================================================== ===================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: IRC::get_file_handle + + :Type: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`string` + + Default file handle provider for IRC. + + diff --git a/doc/scripts/base/protocols/irc/index.rst b/doc/scripts/base/protocols/irc/index.rst new file mode 100644 index 0000000000..3701e28f4c --- /dev/null +++ b/doc/scripts/base/protocols/irc/index.rst @@ -0,0 +1,29 @@ +:orphan: + +Package: base/protocols/irc +=========================== + +Support for Internet Relay Chat (IRC) protocol analysis. + +:doc:`/scripts/base/protocols/irc/__load__.bro` + + +:doc:`/scripts/base/protocols/irc/main.bro` + + Implements the core IRC analysis support. The logging model is to log + IRC commands along with the associated response and some additional + metadata about the connection if it's available. + +:doc:`/scripts/base/protocols/irc/dcc-send.bro` + + File extraction and introspection for DCC transfers over IRC. + + There is a major problem with this script in the cluster context because + we might see A send B a message that a DCC connection is to be expected, + but that connection will actually be between B and C which could be + analyzed on a different worker. + + +:doc:`/scripts/base/protocols/irc/files.bro` + + diff --git a/doc/scripts/base/protocols/irc/main.bro.rst b/doc/scripts/base/protocols/irc/main.bro.rst new file mode 100644 index 0000000000..0c46371216 --- /dev/null +++ b/doc/scripts/base/protocols/irc/main.bro.rst @@ -0,0 +1,99 @@ +:tocdepth: 3 + +base/protocols/irc/main.bro +=========================== +.. bro:namespace:: IRC + +Implements the core IRC analysis support. The logging model is to log +IRC commands along with the associated response and some additional +metadata about the connection if it's available. + +:Namespace: IRC + +Summary +~~~~~~~ +Types +##### +========================================= = +:bro:type:`IRC::Info`: :bro:type:`record` +========================================= = + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +========================================= ==================================================================== +:bro:id:`IRC::irc_log`: :bro:type:`event` Event that can be handled to access the IRC record as it is sent on + to the logging framework. +========================================= ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: IRC::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp when the command was seen. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + nick: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Nickname given for the connection. + + user: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Username given for the connection. + + command: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Command given by the client. + + value: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Value for the command given by the client. + + addl: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Any additional data for the command. + + dcc_file_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/irc/dcc-send.bro` is loaded) + + DCC filename requested. + + dcc_file_size: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/irc/dcc-send.bro` is loaded) + + Size of the DCC transfer as indicated by the sender. + + dcc_mime_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/irc/dcc-send.bro` is loaded) + + Sniffed mime type of the file. + + fuid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/irc/files.bro` is loaded) + + File unique ID. + + +Events +###### +.. bro:id:: IRC::irc_log + + :Type: :bro:type:`event` (rec: :bro:type:`IRC::Info`) + + Event that can be handled to access the IRC record as it is sent on + to the logging framework. + + diff --git a/doc/scripts/base/protocols/krb/__load__.bro.rst b/doc/scripts/base/protocols/krb/__load__.bro.rst new file mode 100644 index 0000000000..d1af1e5e01 --- /dev/null +++ b/doc/scripts/base/protocols/krb/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/krb/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/krb/files.bro `, :doc:`base/protocols/krb/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/krb/consts.bro.rst b/doc/scripts/base/protocols/krb/consts.bro.rst new file mode 100644 index 0000000000..a777df6723 --- /dev/null +++ b/doc/scripts/base/protocols/krb/consts.bro.rst @@ -0,0 +1,134 @@ +:tocdepth: 3 + +base/protocols/krb/consts.bro +============================= +.. bro:namespace:: KRB + + +:Namespace: KRB + +Summary +~~~~~~~ +Constants +######### +============================================= = +:bro:id:`KRB::cipher_name`: :bro:type:`table` +:bro:id:`KRB::error_msg`: :bro:type:`table` +============================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: KRB::cipher_name + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Default: + + :: + + { + [2] = "des-cbc-md4", + [9] = "dsaWithSHA1-CmsOID", + [17] = "aes128-cts-hmac-sha1-96", + [11] = "sha1WithRSAEncryption-CmsOID", + [14] = "rsaES-OAEP-ENV-OID", + [24] = "rc4-hmac-exp", + [1] = "des-cbc-crc", + [7] = "des3-cbc-sha1", + [15] = "des-ede3-cbc-Env-OID", + [23] = "rc4-hmac", + [5] = "des3-cbc-md5", + [25] = "camellia128-cts-cmac", + [10] = "md5WithRSAEncryption-CmsOID", + [65] = "subkey-keymaterial", + [3] = "des-cbc-md5", + [12] = "rc2CBC-EnvOID", + [13] = "rsaEncryption-EnvOID", + [18] = "aes256-cts-hmac-sha1-96", + [16] = "des3-cbc-sha1-kd", + [26] = "camellia256-cts-cmac" + } + + +.. bro:id:: KRB::error_msg + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Default: + + :: + + { + [19] = "KDC_ERR_SERVICE_REVOKED", + [10] = "KDC_ERR_CANNOT_POSTDATE", + [3] = "KDC_ERR_BAD_PVNO", + [50] = "KRB_AP_ERR_INAPP_CKSUM", + [69] = "KRB_AP_ERR_USER_TO_USER_REQUIRED", + [47] = "KRB_AP_ERR_BADDIRECTION", + [27] = "KDC_ERR_MUST_USE_USER2USER", + [67] = "KRB_AP_ERR_NO_TGT", + [70] = "KDC_ERR_CANT_VERIFY_CERTIFICATE", + [6] = "KDC_ERR_C_PRINCIPAL_UNKNOWN", + [66] = "KDC_ERR_CERTIFICATE_MISMATCH", + [20] = "KDC_ERR_TGT_REVOKED", + [51] = "KRB_AP_PATH_NOT_ACCEPTED", + [25] = "KDC_ERR_PREAUTH_REQUIRED", + [37] = "KRB_AP_ERR_SKEW", + [31] = "KRB_AP_ERR_BAD_INTEGRITY", + [63] = "KDC_ERROR_KDC_NOT_TRUSTED", + [28] = "KDC_ERR_PATH_NOT_ACCEPTED", + [68] = "KDC_ERR_WRONG_REALM", + [9] = "KDC_ERR_NULL_KEY", + [11] = "KDC_ERR_NEVER_VALID", + [40] = "KRB_AP_ERR_MSG_TYPE", + [41] = "KRB_AP_ERR_MODIFIED", + [46] = "KRB_AP_ERR_MUT_FAIL", + [5] = "KDC_ERR_S_OLD_MAST_KVNO", + [49] = "KRB_AP_ERR_BADSEQ", + [45] = "KRB_AP_ERR_NOKEY", + [8] = "KDC_ERR_PRINCIPAL_NOT_UNIQUE", + [17] = "KDC_ERR_TRTYPE_NOSUPP", + [48] = "KRB_AP_ERR_METHOD", + [33] = "KRB_AP_ERR_TKT_NYV", + [24] = "KDC_ERR_PREAUTH_FAILED", + [23] = "KDC_ERR_KEY_EXPIRED", + [26] = "KDC_ERR_SERVER_NOMATCH", + [0] = "KDC_ERR_NONE", + [39] = "KRB_AP_ERR_BADVERSION", + [16] = "KDC_ERR_PADATA_TYPE_NOSUPP", + [34] = "KRB_AP_ERR_REPEAT", + [38] = "KRB_AP_ERR_BADADDR", + [18] = "KDC_ERR_CLIENT_REVOKED", + [35] = "KRB_AP_ERR_NOT_US", + [42] = "KRB_AP_ERR_BADORDER", + [71] = "KDC_ERR_INVALID_CERTIFICATE", + [74] = "KDC_ERR_REVOCATION_STATUS_UNAVAILABLE", + [7] = "KDC_ERR_S_PRINCIPAL_UNKNOWN", + [15] = "KDC_ERR_SUMTYPE_NOSUPP", + [36] = "KRB_AP_ERR_BADMATCH", + [62] = "KDC_ERROR_CLIENT_NOT_TRUSTED", + [4] = "KDC_ERR_C_OLD_MAST_KVNO", + [44] = "KRB_AP_ERR_BADKEYVER", + [52] = "KRB_ERR_RESPONSE_TOO_BIG", + [1] = "KDC_ERR_NAME_EXP", + [64] = "KDC_ERROR_INVALID_SIG", + [22] = "KDC_ERR_SERVICE_NOTYET", + [72] = "KDC_ERR_REVOKED_CERTIFICATE", + [14] = "KDC_ERR_ETYPE_NOSUPP", + [73] = "KDC_ERR_REVOCATION_STATUS_UNKNOWN", + [76] = "KDC_ERR_KDC_NAME_MISMATCH", + [21] = "KDC_ERR_CLIENT_NOTYET", + [29] = "KDC_ERR_SVC_UNAVAILABLE", + [13] = "KDC_ERR_BADOPTION", + [75] = "KDC_ERR_CLIENT_NAME_MISMATCH", + [2] = "KDC_ERR_SERVICE_EXP", + [32] = "KRB_AP_ERR_TKT_EXPIRED", + [60] = "KRB_ERR_GENERIC", + [12] = "KDC_ERR_POLICY", + [61] = "KRB_ERR_FIELD_TOOLONG", + [65] = "KDC_ERR_KEY_TOO_WEAK" + } + + + diff --git a/doc/scripts/base/protocols/krb/files.bro.rst b/doc/scripts/base/protocols/krb/files.bro.rst new file mode 100644 index 0000000000..1690d7963a --- /dev/null +++ b/doc/scripts/base/protocols/krb/files.bro.rst @@ -0,0 +1,43 @@ +:tocdepth: 3 + +base/protocols/krb/files.bro +============================ +.. bro:namespace:: KRB + + +:Namespace: KRB +:Imports: :doc:`base/files/x509 `, :doc:`base/frameworks/files `, :doc:`base/protocols/krb/main.bro `, :doc:`base/utils/conn-ids.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================= = +:bro:type:`KRB::Info`: :bro:type:`record` +========================================= = + +Functions +######### +==================================================== ===================================== +:bro:id:`KRB::describe_file`: :bro:type:`function` Default file describer for KRB. +:bro:id:`KRB::get_file_handle`: :bro:type:`function` Default file handle provider for KRB. +==================================================== ===================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: KRB::describe_file + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`string` + + Default file describer for KRB. + +.. bro:id:: KRB::get_file_handle + + :Type: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`string` + + Default file handle provider for KRB. + + diff --git a/doc/scripts/base/protocols/krb/index.rst b/doc/scripts/base/protocols/krb/index.rst new file mode 100644 index 0000000000..e855cb1868 --- /dev/null +++ b/doc/scripts/base/protocols/krb/index.rst @@ -0,0 +1,21 @@ +:orphan: + +Package: base/protocols/krb +=========================== + +Support for Kerberos protocol analysis. + +:doc:`/scripts/base/protocols/krb/__load__.bro` + + +:doc:`/scripts/base/protocols/krb/main.bro` + + Implements base functionality for KRB analysis. Generates the kerberos.log + file. + +:doc:`/scripts/base/protocols/krb/consts.bro` + + +:doc:`/scripts/base/protocols/krb/files.bro` + + diff --git a/doc/scripts/base/protocols/krb/main.bro.rst b/doc/scripts/base/protocols/krb/main.bro.rst new file mode 100644 index 0000000000..68d8cbdb73 --- /dev/null +++ b/doc/scripts/base/protocols/krb/main.bro.rst @@ -0,0 +1,164 @@ +:tocdepth: 3 + +base/protocols/krb/main.bro +=========================== +.. bro:namespace:: KRB + +Implements base functionality for KRB analysis. Generates the kerberos.log +file. + +:Namespace: KRB +:Imports: :doc:`base/protocols/krb/consts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +================================================================= ======================================================= +:bro:id:`KRB::ignored_errors`: :bro:type:`set` :bro:attr:`&redef` The server response error texts which are *not* logged. +================================================================= ======================================================= + +Types +##### +========================================= = +:bro:type:`KRB::Info`: :bro:type:`record` +========================================= = + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +========================================= =================================================================== +:bro:id:`KRB::log_krb`: :bro:type:`event` Event that can be handled to access the KRB record as it is sent on + to the logging framework. +========================================= =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: KRB::ignored_errors + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "Need to use PA-ENC-TIMESTAMP/PA-PK-AS-REQ", + "NEEDED_PREAUTH" + } + + The server response error texts which are *not* logged. + +Types +##### +.. bro:type:: KRB::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the event happened. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + request_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Request type - Authentication Service ("AS") or + Ticket Granting Service ("TGS") + + client: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Client + + service: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Service + + success: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Request result + + error_code: :bro:type:`count` :bro:attr:`&optional` + Error code + + error_msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Error message + + from: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + Ticket valid from + + till: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + Ticket valid till + + cipher: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Ticket encryption type + + forwardable: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Forwardable ticket requested + + renewable: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Renewable ticket requested + + logged: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + We've already logged this + + client_cert: :bro:type:`Files::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/krb/files.bro` is loaded) + + Client certificate + + client_cert_subject: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/krb/files.bro` is loaded) + + Subject of client certificate, if any + + client_cert_fuid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/krb/files.bro` is loaded) + + File unique ID of client cert, if any + + server_cert: :bro:type:`Files::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/krb/files.bro` is loaded) + + Server certificate + + server_cert_subject: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/krb/files.bro` is loaded) + + Subject of server certificate, if any + + server_cert_fuid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/krb/files.bro` is loaded) + + File unique ID of server cert, if any + + auth_ticket: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/krb/ticket-logging.bro` is loaded) + + Hash of ticket used to authorize request/transaction + + new_ticket: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/krb/ticket-logging.bro` is loaded) + + Hash of ticket returned by the KDC + + +Events +###### +.. bro:id:: KRB::log_krb + + :Type: :bro:type:`event` (rec: :bro:type:`KRB::Info`) + + Event that can be handled to access the KRB record as it is sent on + to the logging framework. + + diff --git a/doc/scripts/base/protocols/modbus/__load__.bro.rst b/doc/scripts/base/protocols/modbus/__load__.bro.rst new file mode 100644 index 0000000000..14153e5e4d --- /dev/null +++ b/doc/scripts/base/protocols/modbus/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/modbus/__load__.bro +================================== + + +:Imports: :doc:`base/protocols/modbus/consts.bro `, :doc:`base/protocols/modbus/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/modbus/consts.bro.rst b/doc/scripts/base/protocols/modbus/consts.bro.rst new file mode 100644 index 0000000000..5ddb64ec39 --- /dev/null +++ b/doc/scripts/base/protocols/modbus/consts.bro.rst @@ -0,0 +1,101 @@ +:tocdepth: 3 + +base/protocols/modbus/consts.bro +================================ +.. bro:namespace:: Modbus + + +:Namespace: Modbus + +Summary +~~~~~~~ +Redefinable Options +################### +========================================================================================================================================= ======================================= +:bro:id:`Modbus::exception_codes`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` :bro:attr:`&redef` +:bro:id:`Modbus::function_codes`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` :bro:attr:`&redef` Standard defined Modbus function codes. +========================================================================================================================================= ======================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Modbus::exception_codes + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` :bro:attr:`&redef` + :Default: + + :: + + { + [2] = "ILLEGAL_DATA_ADDRESS", + [6] = "SLAVE_DEVICE_BUSY", + [11] = "GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND", + [4] = "SLAVE_DEVICE_FAILURE", + [1] = "ILLEGAL_FUNCTION", + [8] = "MEMORY_PARITY_ERROR", + [5] = "ACKNOWLEDGE", + [10] = "GATEWAY_PATH_UNAVAILABLE", + [3] = "ILLEGAL_DATA_VALUE" + } + + +.. bro:id:: Modbus::function_codes + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` :bro:attr:`&redef` + :Default: + + :: + + { + [2] = "READ_DISCRETE_INPUTS", + [17] = "REPORT_SLAVE_ID", + [9] = "PROGRAM_484", + [126] = "PROGRAM_584_984_2", + [143] = "WRITE_MULTIPLE_COILS_EXCEPTION", + [152] = "READ_FIFO_QUEUE_EXCEPTION", + [6] = "WRITE_SINGLE_REGISTER", + [11] = "GET_COMM_EVENT_COUNTER", + [14] = "POLL_584_984", + [4] = "READ_INPUT_REGISTERS", + [22] = "MASK_WRITE_REGISTER", + [24] = "READ_FIFO_QUEUE", + [144] = "WRITE_MULTIPLE_REGISTERS_EXCEPTION", + [1] = "READ_COILS", + [8] = "DIAGNOSTICS", + [7] = "READ_EXCEPTION_STATUS", + [15] = "WRITE_MULTIPLE_COILS", + [131] = "READ_HOLDING_REGISTERS_EXCEPTION", + [23] = "READ_WRITE_MULTIPLE_REGISTERS", + [43] = "ENCAP_INTERFACE_TRANSPORT", + [127] = "REPORT_LOCAL_ADDRESS", + [133] = "WRITE_SINGLE_COIL_EXCEPTION", + [134] = "WRITE_SINGLE_REGISTER_EXCEPTION", + [130] = "READ_DISCRETE_INPUTS_EXCEPTION", + [149] = "WRITE_FILE_RECORD_EXCEPTION", + [5] = "WRITE_SINGLE_COIL", + [19] = "RESET_COMM_LINK_884_U84", + [125] = "FIRMWARE_REPLACEMENT", + [132] = "READ_INPUT_REGISTERS_EXCEPTION", + [10] = "POLL_484", + [129] = "READ_COILS_EXCEPTION", + [150] = "MASK_WRITE_REGISTER_EXCEPTION", + [3] = "READ_HOLDING_REGISTERS", + [12] = "GET_COMM_EVENT_LOG", + [21] = "WRITE_FILE_RECORD", + [13] = "PROGRAM_584_984", + [18] = "PROGRAM_884_U84", + [148] = "READ_FILE_RECORD_EXCEPTION", + [151] = "READ_WRITE_MULTIPLE_REGISTERS_EXCEPTION", + [16] = "WRITE_MULTIPLE_REGISTERS", + [20] = "READ_FILE_RECORD", + [40] = "PROGRAM_CONCEPT", + [135] = "READ_EXCEPTION_STATUS_EXCEPTION" + } + + Standard defined Modbus function codes. + + diff --git a/doc/scripts/base/protocols/modbus/index.rst b/doc/scripts/base/protocols/modbus/index.rst new file mode 100644 index 0000000000..863b6fe8b2 --- /dev/null +++ b/doc/scripts/base/protocols/modbus/index.rst @@ -0,0 +1,17 @@ +:orphan: + +Package: base/protocols/modbus +============================== + +Support for Modbus protocol analysis. + +:doc:`/scripts/base/protocols/modbus/__load__.bro` + + +:doc:`/scripts/base/protocols/modbus/consts.bro` + + +:doc:`/scripts/base/protocols/modbus/main.bro` + + Base Modbus analysis script. + diff --git a/doc/scripts/base/protocols/modbus/main.bro.rst b/doc/scripts/base/protocols/modbus/main.bro.rst new file mode 100644 index 0000000000..abe3033f83 --- /dev/null +++ b/doc/scripts/base/protocols/modbus/main.bro.rst @@ -0,0 +1,73 @@ +:tocdepth: 3 + +base/protocols/modbus/main.bro +============================== +.. bro:namespace:: Modbus + +Base Modbus analysis script. + +:Namespace: Modbus +:Imports: :doc:`base/protocols/modbus/consts.bro ` + +Summary +~~~~~~~ +Types +##### +============================================ = +:bro:type:`Modbus::Info`: :bro:type:`record` +============================================ = + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +=============================================== =================================================================== +:bro:id:`Modbus::log_modbus`: :bro:type:`event` Event that can be handled to access the Modbus record as it is sent + on to the logging framework. +=============================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Modbus::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time of the request. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique identifier for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + Identifier for the connection. + + func: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The name of the function message that was sent. + + exception: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The exception if the response was a failure. + + track_address: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/modbus/track-memmap.bro` is loaded) + + + +Events +###### +.. bro:id:: Modbus::log_modbus + + :Type: :bro:type:`event` (rec: :bro:type:`Modbus::Info`) + + Event that can be handled to access the Modbus record as it is sent + on to the logging framework. + + diff --git a/doc/scripts/base/protocols/mysql/__load__.bro.rst b/doc/scripts/base/protocols/mysql/__load__.bro.rst new file mode 100644 index 0000000000..5c1c30fe4b --- /dev/null +++ b/doc/scripts/base/protocols/mysql/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/mysql/__load__.bro +================================= + + +:Imports: :doc:`base/protocols/mysql/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/mysql/consts.bro.rst b/doc/scripts/base/protocols/mysql/consts.bro.rst new file mode 100644 index 0000000000..e0651065ae --- /dev/null +++ b/doc/scripts/base/protocols/mysql/consts.bro.rst @@ -0,0 +1,67 @@ +:tocdepth: 3 + +base/protocols/mysql/consts.bro +=============================== +.. bro:namespace:: MySQL + + +:Namespace: MySQL + +Summary +~~~~~~~ +Constants +######### +============================================================================================================== = +:bro:id:`MySQL::commands`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +============================================================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: MySQL::commands + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "init_db", + [9] = "statistics", + [17] = "change_user", + [27] = "set_option", + [6] = "drop_db", + [11] = "connect", + [14] = "ping", + [4] = "field_list", + [22] = "stmt_prepare", + [24] = "stmt_send_long_data", + [30] = "binlog_dump_gtid", + [1] = "quit", + [8] = "shutdown", + [7] = "refresh", + [15] = "time", + [23] = "stmt_execute", + [29] = "daemon", + [5] = "create_db", + [25] = "stmt_close", + [19] = "table_dump", + [28] = "stmt_fetch", + [31] = "reset_connection", + [10] = "process_info", + [0] = "sleep", + [3] = "query", + [12] = "process_kill", + [13] = "debug", + [18] = "binlog_dump", + [21] = "register_slave", + [16] = "delayed_insert", + [20] = "connect_out", + [26] = "stmt_reset" + } + + + diff --git a/doc/scripts/base/protocols/mysql/index.rst b/doc/scripts/base/protocols/mysql/index.rst new file mode 100644 index 0000000000..bd98ca70cf --- /dev/null +++ b/doc/scripts/base/protocols/mysql/index.rst @@ -0,0 +1,17 @@ +:orphan: + +Package: base/protocols/mysql +============================= + +Support for MySQL protocol analysis. + +:doc:`/scripts/base/protocols/mysql/__load__.bro` + + +:doc:`/scripts/base/protocols/mysql/main.bro` + + Implements base functionality for MySQL analysis. Generates the mysql.log file. + +:doc:`/scripts/base/protocols/mysql/consts.bro` + + diff --git a/doc/scripts/base/protocols/mysql/main.bro.rst b/doc/scripts/base/protocols/mysql/main.bro.rst new file mode 100644 index 0000000000..9814973e50 --- /dev/null +++ b/doc/scripts/base/protocols/mysql/main.bro.rst @@ -0,0 +1,77 @@ +:tocdepth: 3 + +base/protocols/mysql/main.bro +============================= +.. bro:namespace:: MySQL + +Implements base functionality for MySQL analysis. Generates the mysql.log file. + +:Namespace: MySQL +:Imports: :doc:`base/protocols/mysql/consts.bro ` + +Summary +~~~~~~~ +Types +##### +=========================================== = +:bro:type:`MySQL::Info`: :bro:type:`record` +=========================================== = + +Redefinitions +############# +========================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +========================================== = + +Events +###### +============================================= ===================================================================== +:bro:id:`MySQL::log_mysql`: :bro:type:`event` Event that can be handled to access the MySQL record as it is sent on + to the logging framework. +============================================= ===================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: MySQL::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the event happened. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + cmd: :bro:type:`string` :bro:attr:`&log` + The command that was issued + + arg: :bro:type:`string` :bro:attr:`&log` + The argument issued to the command + + success: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Did the server tell us that the command succeeded? + + rows: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + The number of affected rows, if any + + response: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Server message, if any + + +Events +###### +.. bro:id:: MySQL::log_mysql + + :Type: :bro:type:`event` (rec: :bro:type:`MySQL::Info`) + + Event that can be handled to access the MySQL record as it is sent on + to the logging framework. + + diff --git a/doc/scripts/base/protocols/ntlm/__load__.bro.rst b/doc/scripts/base/protocols/ntlm/__load__.bro.rst new file mode 100644 index 0000000000..c3bcb50a61 --- /dev/null +++ b/doc/scripts/base/protocols/ntlm/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/ntlm/__load__.bro +================================ + + +:Imports: :doc:`base/protocols/ntlm/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/ntlm/index.rst b/doc/scripts/base/protocols/ntlm/index.rst new file mode 100644 index 0000000000..e2901098c5 --- /dev/null +++ b/doc/scripts/base/protocols/ntlm/index.rst @@ -0,0 +1,13 @@ +:orphan: + +Package: base/protocols/ntlm +============================ + +Support for NT LAN Manager (NTLM) protocol analysis. + +:doc:`/scripts/base/protocols/ntlm/__load__.bro` + + +:doc:`/scripts/base/protocols/ntlm/main.bro` + + diff --git a/doc/scripts/base/protocols/ntlm/main.bro.rst b/doc/scripts/base/protocols/ntlm/main.bro.rst new file mode 100644 index 0000000000..27ed5fcb97 --- /dev/null +++ b/doc/scripts/base/protocols/ntlm/main.bro.rst @@ -0,0 +1,71 @@ +:tocdepth: 3 + +base/protocols/ntlm/main.bro +============================ +.. bro:namespace:: NTLM + + +:Namespace: NTLM +:Imports: :doc:`base/frameworks/dpd ` + +Summary +~~~~~~~ +Types +##### +========================================== = +:bro:type:`NTLM::Info`: :bro:type:`record` +========================================== = + +Redefinitions +############# +==================================================================== = +:bro:id:`DPD::ignore_violations`: :bro:type:`set` :bro:attr:`&redef` +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +==================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: NTLM::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the event happened. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + username: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Username given by the client. + + hostname: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Hostname given by the client. + + domainname: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Domainname given by the client. + + server_nb_computer_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + NetBIOS name given by the server in a CHALLENGE. + + server_dns_computer_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + DNS name given by the server in a CHALLENGE. + + server_tree_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Tree name given by the server in a CHALLENGE. + + success: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Indicate whether or not the authentication was successful. + + done: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Internally used field to indicate if the login attempt + has already been logged. + + + diff --git a/doc/scripts/base/protocols/pop3/__load__.bro.rst b/doc/scripts/base/protocols/pop3/__load__.bro.rst new file mode 100644 index 0000000000..de399fe4b9 --- /dev/null +++ b/doc/scripts/base/protocols/pop3/__load__.bro.rst @@ -0,0 +1,13 @@ +:tocdepth: 3 + +base/protocols/pop3/__load__.bro +================================ + + + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/pop3/index.rst b/doc/scripts/base/protocols/pop3/index.rst new file mode 100644 index 0000000000..9fff4381b9 --- /dev/null +++ b/doc/scripts/base/protocols/pop3/index.rst @@ -0,0 +1,10 @@ +:orphan: + +Package: base/protocols/pop3 +============================ + +Support for POP3 (Post Office Protocol) protocol analysis. + +:doc:`/scripts/base/protocols/pop3/__load__.bro` + + diff --git a/doc/scripts/base/protocols/radius/__load__.bro.rst b/doc/scripts/base/protocols/radius/__load__.bro.rst new file mode 100644 index 0000000000..001fc39e45 --- /dev/null +++ b/doc/scripts/base/protocols/radius/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/radius/__load__.bro +================================== + + +:Imports: :doc:`base/protocols/radius/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/radius/consts.bro.rst b/doc/scripts/base/protocols/radius/consts.bro.rst new file mode 100644 index 0000000000..c035ab6eb5 --- /dev/null +++ b/doc/scripts/base/protocols/radius/consts.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +base/protocols/radius/consts.bro +================================ +.. bro:namespace:: RADIUS + + +:Namespace: RADIUS + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/radius/index.rst b/doc/scripts/base/protocols/radius/index.rst new file mode 100644 index 0000000000..a7553fc5b2 --- /dev/null +++ b/doc/scripts/base/protocols/radius/index.rst @@ -0,0 +1,17 @@ +:orphan: + +Package: base/protocols/radius +============================== + +Support for RADIUS protocol analysis. + +:doc:`/scripts/base/protocols/radius/__load__.bro` + + +:doc:`/scripts/base/protocols/radius/main.bro` + + Implements base functionality for RADIUS analysis. Generates the radius.log file. + +:doc:`/scripts/base/protocols/radius/consts.bro` + + diff --git a/doc/scripts/base/protocols/radius/main.bro.rst b/doc/scripts/base/protocols/radius/main.bro.rst new file mode 100644 index 0000000000..19dc01bf78 --- /dev/null +++ b/doc/scripts/base/protocols/radius/main.bro.rst @@ -0,0 +1,98 @@ +:tocdepth: 3 + +base/protocols/radius/main.bro +============================== +.. bro:namespace:: RADIUS + +Implements base functionality for RADIUS analysis. Generates the radius.log file. + +:Namespace: RADIUS +:Imports: :doc:`base/protocols/radius/consts.bro `, :doc:`base/utils/addrs.bro ` + +Summary +~~~~~~~ +Types +##### +============================================ = +:bro:type:`RADIUS::Info`: :bro:type:`record` +============================================ = + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +=============================================== ====================================================================== +:bro:id:`RADIUS::log_radius`: :bro:type:`event` Event that can be handled to access the RADIUS record as it is sent on + to the logging framework. +=============================================== ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: RADIUS::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the event happened. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + username: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The username, if present. + + mac: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + MAC address, if present. + + framed_addr: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + The address given to the network access server, if + present. This is only a hint from the RADIUS server + and the network access server is not required to honor + the address. + + remote_ip: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + Remote IP address, if present. This is collected + from the Tunnel-Client-Endpoint attribute. + + connect_info: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Connect info, if present. + + reply_msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Reply message from the server challenge. This is + frequently shown to the user authenticating. + + result: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Successful or failed authentication. + + ttl: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + The duration between the first request and + either the "Access-Accept" message or an error. + If the field is empty, it means that either + the request or response was not seen. + + logged: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Whether this has already been logged and can be ignored. + + +Events +###### +.. bro:id:: RADIUS::log_radius + + :Type: :bro:type:`event` (rec: :bro:type:`RADIUS::Info`) + + Event that can be handled to access the RADIUS record as it is sent on + to the logging framework. + + diff --git a/doc/scripts/base/protocols/rdp/__load__.bro.rst b/doc/scripts/base/protocols/rdp/__load__.bro.rst new file mode 100644 index 0000000000..f548bdce42 --- /dev/null +++ b/doc/scripts/base/protocols/rdp/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/rdp/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/rdp/consts.bro `, :doc:`base/protocols/rdp/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/rdp/consts.bro.rst b/doc/scripts/base/protocols/rdp/consts.bro.rst new file mode 100644 index 0000000000..de7d4d08d7 --- /dev/null +++ b/doc/scripts/base/protocols/rdp/consts.bro.rst @@ -0,0 +1,440 @@ +:tocdepth: 3 + +base/protocols/rdp/consts.bro +============================= +.. bro:namespace:: RDP + + +:Namespace: RDP + +Summary +~~~~~~~ +Constants +######### +====================================================================================================================== = +:bro:id:`RDP::builds`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`RDP::cert_types`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`RDP::color_depths`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`RDP::encryption_levels`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`RDP::encryption_methods`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`RDP::failure_codes`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`RDP::high_color_depths`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`RDP::languages`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`RDP::results`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`RDP::security_protocols`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +====================================================================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: RDP::builds + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [6000] = "RDP 6.0", + [6001] = "RDP 6.1", + [7600] = "RDP 7.0", + [6002] = "RDP 6.2", + [25189] = "RDP 8.0 (Mac)", + [7601] = "RDP 7.1", + [9600] = "RDP 8.1", + [25282] = "RDP 8.0 (Mac)", + [2195] = "RDP 5.0", + [3790] = "RDP 5.2", + [419] = "RDP 4.0", + [2221] = "RDP 5.0", + [2600] = "RDP 5.1", + [9200] = "RDP 8.0" + } + + +.. bro:id:: RDP::cert_types + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "X.509", + [1] = "RSA" + } + + +.. bro:id:: RDP::color_depths + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "16bit", + [4] = "15bit", + [1] = "24bit", + [8] = "32bit" + } + + +.. bro:id:: RDP::encryption_levels + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "Client compatible", + [4] = "FIPS", + [1] = "Low", + [0] = "None", + [3] = "High" + } + + +.. bro:id:: RDP::encryption_methods + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "128bit", + [1] = "40bit", + [8] = "56bit", + [10] = "FIPS", + [0] = "None" + } + + +.. bro:id:: RDP::failure_codes + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "SSL_NOT_ALLOWED_BY_SERVER", + [6] = "SSL_WITH_USER_AUTH_REQUIRED_BY_SERVER", + [4] = "INCONSISTENT_FLAGS", + [1] = "SSL_REQUIRED_BY_SERVER", + [5] = "HYBRID_REQUIRED_BY_SERVER", + [3] = "SSL_CERT_NOT_ON_SERVER" + } + + +.. bro:id:: RDP::high_color_depths + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [4] = "4bit", + [24] = "24bit", + [8] = "8bit", + [15] = "15bit", + [16] = "16bit" + } + + +.. bro:id:: RDP::languages + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [1129] = "Ibibio - Nigeria", + [1025] = "Arabic - Saudi Arabia", + [3073] = "Arabic - Egypt", + [1084] = "Scottish Gaelic", + [5121] = "Arabic - Algeria", + [17417] = "English - Malaysia", + [1069] = "Basque", + [1093] = "Bengali (India)", + [7177] = "English - South Africa", + [1159] = "Kinyarwanda", + [2092] = "Azeri (Cyrillic)", + [1119] = "Tamazight (Arabic)", + [12297] = "English - Zimbabwe", + [1121] = "Nepali", + [1083] = "Sami (Lappish)", + [1113] = "Sindhi - India", + [4122] = "Croatian (Bosnia/Herzegovina)", + [1153] = "Maori - New Zealand", + [21514] = "Spanish - United States", + [1026] = "Bulgarian", + [1041] = "Japanese", + [2155] = "Quecha - Ecuador", + [1070] = "Sorbian", + [1105] = "Tibetan - People's Republic of China", + [1116] = "Cherokee - United States", + [1046] = "Portuguese - Brazil", + [2073] = "Russian - Moldava", + [2080] = "Urdu - India", + [1146] = "Mapudungun", + [1060] = "Slovenian", + [14346] = "Spanish - Uruguay", + [1056] = "Urdu", + [1045] = "Polish", + [4106] = "Spanish - Guatemala", + [5146] = "Bosnian (Bosnia/Herzegovina)", + [1156] = "Alsatian", + [2070] = "Portuguese - Portugal", + [1051] = "Slovak", + [1111] = "Konkani", + [6153] = "English - Ireland", + [1101] = "Assamese", + [10241] = "Arabic - Syria", + [1095] = "Gujarati", + [1133] = "Bashkir", + [1107] = "Khmer", + [1088] = "Kyrgyz (Cyrillic)", + [1137] = "Kanuri - Nigeria", + [11273] = "English - Trinidad", + [4105] = "English - Canada", + [7169] = "Arabic - Tunisia", + [1100] = "Malayalam", + [1160] = "Wolof", + [3079] = "German - Austria", + [1029] = "Czech", + [1042] = "Korean", + [1062] = "Latvian", + [1034] = "Spanish - Spain (Traditional Sort)", + [1055] = "Turkish", + [1059] = "Belarusian", + [1164] = "Dari", + [13313] = "Arabic - Kuwait", + [6145] = "Arabic - Morocco", + [1142] = "Latin", + [11274] = "Spanish - Argentina", + [1110] = "Galician", + [1036] = "French - France", + [1053] = "Swedish", + [58380] = "French - North Africa", + [1104] = "Mongolian (Cyrillic)", + [2074] = "Serbian (Latin)", + [13322] = "Spanish - Chile", + [22538] = "Spanish - Latin America", + [1128] = "Hausa - Nigeria", + [1061] = "Estonian", + [7178] = "Spanish - Dominican Republic", + [2143] = "Tamazight (Latin)", + [16385] = "Arabic - Qatar", + [1067] = "Armenian - Armenia", + [1065] = "Farsi", + [2060] = "French - Belgium", + [1068] = "Azeri (Latin)", + [1091] = "Uzbek (Latin)", + [1066] = "Vietnamese", + [1132] = "Sepedi", + [6154] = "Spanish - Panama", + [1058] = "Ukrainian", + [13321] = "English - Philippines", + [2064] = "Italian - Switzerland", + [1141] = "Hawaiian - United States", + [1038] = "Hungarian", + [12298] = "Spanish - Ecuador", + [3179] = "Quecha - Peru\x09CB", + [10250] = "Spanish - Peru", + [1124] = "Filipino", + [1094] = "Punjabi", + [1115] = "Sinhalese - Sri Lanka", + [9226] = "Spanish - Colombia", + [1090] = "Turkmen", + [2057] = "English - United Kingdom", + [1122] = "French - West Indies", + [1117] = "Inuktitut", + [16393] = "English - India", + [4100] = "Chinese - Singapore", + [1043] = "Dutch - Netherlands", + [15361] = "Arabic - Bahrain", + [2052] = "Chinese - People's Republic of China", + [3081] = "English - Australia", + [2072] = "Romanian - Moldava", + [11276] = "French - Cameroon", + [14337] = "Arabic - U.A.E.", + [1052] = "Albanian - Albania", + [1063] = "Lithuanian", + [1086] = "Malay - Malaysia", + [1047] = "Rhaeto-Romanic", + [16394] = "Spanish - Bolivia", + [1028] = "Chinese - Taiwan", + [1035] = "Finnish", + [1037] = "Hebrew", + [1032] = "Greek", + [1031] = "German - Germany", + [2110] = "Malay - Brunei Darussalam", + [1150] = "Breton", + [1082] = "Maltese", + [2068] = "Norwegian (Nynorsk)", + [1138] = "Oromo", + [1145] = "Papiamentu", + [1099] = "Kannada", + [2145] = "Nepali - India", + [2137] = "Sindhi - Pakistan", + [18442] = "Spanish - Honduras", + [1054] = "Thai", + [1040] = "Italian - Italy", + [12289] = "Arabic - Lebanon", + [1123] = "Pashto", + [1074] = "Tswana", + [1073] = "Tsonga", + [1071] = "FYRO Macedonian", + [1080] = "Faroese", + [8204] = "French - Reunion", + [18441] = "English - Singapore", + [1092] = "Tatar", + [9225] = "English - Caribbean", + [11265] = "Arabic - Jordan", + [1143] = "Somali", + [1114] = "Syriac", + [1157] = "Yakut", + [1127] = "Fulfulde - Nigeria", + [2049] = "Arabic - Iraq", + [14345] = "English - Indonesia", + [2058] = "Spanish - Mexico", + [1279] = "HID (Human Interface Device)", + [1057] = "Indonesian", + [13324] = "French - Mali", + [1072] = "Sutu", + [1064] = "Tajik", + [1079] = "Georgian", + [1136] = "Igbo - Nigeria", + [1108] = "Lao", + [1154] = "Occitan", + [19466] = "Spanish - Nicaragua", + [2163] = "Tigrigna - Eritrea", + [9228] = "French - Democratic Rep. of Congo", + [3076] = "Chinese - Hong Kong SAR", + [1076] = "Xhosa", + [1144] = "Yi", + [1077] = "Zulu", + [14348] = "French - Morocco", + [1140] = "Guarani - Paraguay", + [1109] = "Burmese", + [1078] = "Afrikaans - South Africa", + [5132] = "French - Luxembourg", + [5129] = "English - New Zealand", + [2129] = "Tibetan - Bhutan", + [15369] = "English - Hong Kong SAR", + [17418] = "Spanish - El Salvador", + [1027] = "Catalan", + [2144] = "Kashmiri", + [1096] = "Oriya", + [1049] = "Russian", + [2077] = "Swedish - Finland", + [2055] = "German - Switzerland", + [9217] = "Arabic - Yemen", + [1112] = "Manipuri", + [2128] = "Mongolian (Mongolian)", + [2108] = "Irish", + [12300] = "French - Cote d'Ivoire", + [1087] = "Kazakh", + [1098] = "Telugu", + [4108] = "French - Switzerland", + [8202] = "Spanish - Venezuela", + [10249] = "English - Belize", + [1033] = "English - United States", + [1120] = "Kashmiri (Arabic)", + [2115] = "Uzbek (Cyrillic)", + [1135] = "Greenlandic", + [20490] = "Spanish - Puerto Rico", + [1085] = "Yiddish", + [1126] = "Edo", + [5127] = "German - Liechtenstein", + [1102] = "Marathi", + [1103] = "Sanskrit", + [2067] = "Dutch - Belgium", + [1048] = "Romanian", + [5130] = "Spanish - Costa Rica", + [8201] = "English - Jamaica", + [1158] = "K'iche", + [15370] = "Spanish - Paraguay", + [1050] = "Croatian", + [3084] = "French - Canada", + [8193] = "Arabic - Oman", + [1081] = "Hindi", + [1039] = "Icelandic", + [1148] = "Mohawk", + [1030] = "Danish", + [1044] = "Norwegian (Bokmal)", + [1139] = "Tigrigna - Ethiopia", + [15372] = "French - Haiti", + [3098] = "Serbian (Cyrillic)", + [1075] = "Venda", + [1118] = "Amharic - Ethiopia", + [4097] = "Arabic - Libya", + [1125] = "Divehi", + [1134] = "Luxembourgish", + [2118] = "Punjabi (Pakistan)", + [1089] = "Swahili", + [1097] = "Tamil", + [1131] = "Quecha - Bolivia", + [1106] = "Welsh", + [1155] = "Corsican", + [4103] = "German - Luxembourg", + [5124] = "Chinese - Macao SAR", + [3082] = "Spanish - Spain (Modern Sort)", + [10252] = "French - Senegal", + [1152] = "Uighur - China", + [6156] = "French - Monaco", + [7180] = "French - West Indies", + [1130] = "Yoruba", + [2117] = "Bengali (Bangladesh)" + } + + +.. bro:id:: RDP::results + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "Resources not available", + [4] = "Locked conference", + [1] = "User rejected", + [0] = "Success", + [3] = "Rejected for symmetry breaking" + } + + +.. bro:id:: RDP::security_protocols + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "HYBRID", + [1] = "SSL", + [8] = "HYBRID_EX", + [0] = "RDP" + } + + + diff --git a/doc/scripts/base/protocols/rdp/index.rst b/doc/scripts/base/protocols/rdp/index.rst new file mode 100644 index 0000000000..06ee402e37 --- /dev/null +++ b/doc/scripts/base/protocols/rdp/index.rst @@ -0,0 +1,17 @@ +:orphan: + +Package: base/protocols/rdp +=========================== + +Support for Remote Desktop Protocol (RDP) analysis. + +:doc:`/scripts/base/protocols/rdp/__load__.bro` + + +:doc:`/scripts/base/protocols/rdp/consts.bro` + + +:doc:`/scripts/base/protocols/rdp/main.bro` + + Implements base functionality for RDP analysis. Generates the rdp.log file. + diff --git a/doc/scripts/base/protocols/rdp/main.bro.rst b/doc/scripts/base/protocols/rdp/main.bro.rst new file mode 100644 index 0000000000..401f3b3832 --- /dev/null +++ b/doc/scripts/base/protocols/rdp/main.bro.rst @@ -0,0 +1,159 @@ +:tocdepth: 3 + +base/protocols/rdp/main.bro +=========================== +.. bro:namespace:: RDP + +Implements base functionality for RDP analysis. Generates the rdp.log file. + +:Namespace: RDP +:Imports: :doc:`base/protocols/rdp/consts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +==================================================================================== =================================================================== +:bro:id:`RDP::disable_analyzer_after_detection`: :bro:type:`bool` :bro:attr:`&redef` If true, detach the RDP analyzer from the connection to prevent + continuing to process encrypted traffic. +:bro:id:`RDP::rdp_check_interval`: :bro:type:`interval` :bro:attr:`&redef` The amount of time to monitor an RDP session from when it is first + identified. +==================================================================================== =================================================================== + +Types +##### +========================================= = +:bro:type:`RDP::Info`: :bro:type:`record` +========================================= = + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`RDP::Info`: :bro:type:`record` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +========================================= =================================================================== +:bro:id:`RDP::log_rdp`: :bro:type:`event` Event that can be handled to access the rdp record as it is sent on + to the logging framework. +========================================= =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: RDP::disable_analyzer_after_detection + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, detach the RDP analyzer from the connection to prevent + continuing to process encrypted traffic. + +.. bro:id:: RDP::rdp_check_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 secs`` + + The amount of time to monitor an RDP session from when it is first + identified. When this interval is reached, the session is logged. + +Types +##### +.. bro:type:: RDP::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the event happened. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + cookie: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Cookie value used by the client machine. + This is typically a username. + + result: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Status result for the connection. It's a mix between + RDP negotation failure messages and GCC server create + response messages. + + security_protocol: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Security protocol chosen by the server. + + keyboard_layout: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Keyboard layout (language) of the client machine. + + client_build: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + RDP client version used by the client machine. + + client_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Name of the client machine. + + client_dig_product_id: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Product ID of the client machine. + + desktop_width: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Desktop width of the client machine. + + desktop_height: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Desktop height of the client machine. + + requested_color_depth: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The color depth requested by the client in + the high_color_depth field. + + cert_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + If the connection is being encrypted with native + RDP encryption, this is the type of cert + being used. + + cert_count: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of certs seen. X.509 can transfer an + entire certificate chain. + + cert_permanent: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Indicates if the provided certificate or certificate + chain is permanent or temporary. + + encryption_level: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Encryption level of the connection. + + encryption_method: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Encryption method of the connection. + + analyzer_id: :bro:type:`count` :bro:attr:`&optional` + The analyzer ID used for the analyzer instance attached + to each connection. It is not used for logging since it's a + meaningless arbitrary number. + + done: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Track status of logging RDP connections. + + ssl: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/rdp/indicate_ssl.bro` is loaded) + + Flag the connection if it was seen over SSL. + + +Events +###### +.. bro:id:: RDP::log_rdp + + :Type: :bro:type:`event` (rec: :bro:type:`RDP::Info`) + + Event that can be handled to access the rdp record as it is sent on + to the logging framework. + + diff --git a/doc/scripts/base/protocols/rfb/__load__.bro.rst b/doc/scripts/base/protocols/rfb/__load__.bro.rst new file mode 100644 index 0000000000..f1ac5d3fab --- /dev/null +++ b/doc/scripts/base/protocols/rfb/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/rfb/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/rfb/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/rfb/index.rst b/doc/scripts/base/protocols/rfb/index.rst new file mode 100644 index 0000000000..8469752406 --- /dev/null +++ b/doc/scripts/base/protocols/rfb/index.rst @@ -0,0 +1,13 @@ +:orphan: + +Package: base/protocols/rfb +=========================== + +Support for Remote FrameBuffer analysis. This includes all VNC servers. + +:doc:`/scripts/base/protocols/rfb/__load__.bro` + + +:doc:`/scripts/base/protocols/rfb/main.bro` + + diff --git a/doc/scripts/base/protocols/rfb/main.bro.rst b/doc/scripts/base/protocols/rfb/main.bro.rst new file mode 100644 index 0000000000..1fe0696dca --- /dev/null +++ b/doc/scripts/base/protocols/rfb/main.bro.rst @@ -0,0 +1,92 @@ +:tocdepth: 3 + +base/protocols/rfb/main.bro +=========================== +.. bro:namespace:: RFB + + +:Namespace: RFB + +Summary +~~~~~~~ +Types +##### +========================================= ========================================================= +:bro:type:`RFB::Info`: :bro:type:`record` The record type which contains the fields of the RFB log. +========================================= ========================================================= + +Redefinitions +############# +========================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +========================================== = + +Events +###### +========================================= = +:bro:id:`RFB::log_rfb`: :bro:type:`event` +========================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: RFB::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the event happened. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + client_major_version: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Major version of the client. + + client_minor_version: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Minor version of the client. + + server_major_version: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Major version of the server. + + server_minor_version: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Minor version of the server. + + authentication_method: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Identifier of authentication method used. + + auth: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Whether or not authentication was successful. + + share_flag: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Whether the client has an exclusive or a shared session. + + desktop_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Name of the screen that is being shared. + + width: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Width of the screen that is being shared. + + height: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Height of the screen that is being shared. + + done: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Internally used value to determine if this connection + has already been logged. + + The record type which contains the fields of the RFB log. + +Events +###### +.. bro:id:: RFB::log_rfb + + :Type: :bro:type:`event` (rec: :bro:type:`RFB::Info`) + + + diff --git a/doc/scripts/base/protocols/sip/__load__.bro.rst b/doc/scripts/base/protocols/sip/__load__.bro.rst new file mode 100644 index 0000000000..0fafa2cf75 --- /dev/null +++ b/doc/scripts/base/protocols/sip/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/sip/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/sip/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/sip/index.rst b/doc/scripts/base/protocols/sip/index.rst new file mode 100644 index 0000000000..d56137f8ac --- /dev/null +++ b/doc/scripts/base/protocols/sip/index.rst @@ -0,0 +1,16 @@ +:orphan: + +Package: base/protocols/sip +=========================== + +Support for Session Initiation Protocol (SIP) analysis. + +:doc:`/scripts/base/protocols/sip/__load__.bro` + + +:doc:`/scripts/base/protocols/sip/main.bro` + + Implements base functionality for SIP analysis. The logging model is + to log request/response pairs and all relevant metadata together in + a single record. + diff --git a/doc/scripts/base/protocols/sip/main.bro.rst b/doc/scripts/base/protocols/sip/main.bro.rst new file mode 100644 index 0000000000..666026bc4c --- /dev/null +++ b/doc/scripts/base/protocols/sip/main.bro.rst @@ -0,0 +1,180 @@ +:tocdepth: 3 + +base/protocols/sip/main.bro +=========================== +.. bro:namespace:: SIP + +Implements base functionality for SIP analysis. The logging model is +to log request/response pairs and all relevant metadata together in +a single record. + +:Namespace: SIP +:Imports: :doc:`base/utils/files.bro `, :doc:`base/utils/numbers.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================== ====================== +:bro:id:`SIP::sip_methods`: :bro:type:`set` :bro:attr:`&redef` A list of SIP methods. +============================================================== ====================== + +Types +##### +========================================== ========================================================= +:bro:type:`SIP::Info`: :bro:type:`record` The record type which contains the fields of the SIP log. +:bro:type:`SIP::State`: :bro:type:`record` +========================================== ========================================================= + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +========================================= =================================================================== +:bro:id:`SIP::log_sip`: :bro:type:`event` Event that can be handled to access the SIP record as it is sent on + to the logging framework. +========================================= =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SIP::sip_methods + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "NOTIFY", + "ACK", + "SUBSCRIBE", + "CANCEL", + "OPTIONS", + "REGISTER", + "INVITE", + "BYE" + } + + A list of SIP methods. Other methods will generate a weird. Note + that the SIP analyzer will only accept methods consisting solely + of letters ``[A-Za-z]``. + +Types +##### +.. bro:type:: SIP::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the request happened. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + trans_depth: :bro:type:`count` :bro:attr:`&log` + Represents the pipelined depth into the connection of this + request/response transaction. + + method: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Verb used in the SIP request (INVITE, REGISTER etc.). + + uri: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + URI used in the request. + + date: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Date: header from the client + + request_from: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the request From: header + Note: The tag= value that's usually appended to the sender + is stripped off and not logged. + + request_to: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the To: header + + response_from: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the response From: header + Note: The ``tag=`` value that's usually appended to the sender + is stripped off and not logged. + + response_to: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the response To: header + + reply_to: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Reply-To: header + + call_id: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Call-ID: header from the client + + seq: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the CSeq: header from the client + + subject: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Subject: header from the client + + request_path: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The client message transmission path, as extracted from the headers. + + response_path: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The server message transmission path, as extracted from the headers. + + user_agent: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the User-Agent: header from the client + + status_code: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Status code returned by the server. + + status_msg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Status message returned by the server. + + warning: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Warning: header + + request_body_len: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Content-Length: header from the client + + response_body_len: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Content-Length: header from the server + + content_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Content-Type: header from the server + + The record type which contains the fields of the SIP log. + +.. bro:type:: SIP::State + + :Type: :bro:type:`record` + + pending: :bro:type:`table` [:bro:type:`count`] of :bro:type:`SIP::Info` + Pending requests. + + current_request: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Current request in the pending queue. + + current_response: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Current response in the pending queue. + + +Events +###### +.. bro:id:: SIP::log_sip + + :Type: :bro:type:`event` (rec: :bro:type:`SIP::Info`) + + Event that can be handled to access the SIP record as it is sent on + to the logging framework. + + diff --git a/doc/scripts/base/protocols/smb/__load__.bro.rst b/doc/scripts/base/protocols/smb/__load__.bro.rst new file mode 100644 index 0000000000..eb60e76e3d --- /dev/null +++ b/doc/scripts/base/protocols/smb/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/smb/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/smb/const-dos-error.bro `, :doc:`base/protocols/smb/const-nt-status.bro `, :doc:`base/protocols/smb/consts.bro `, :doc:`base/protocols/smb/files.bro `, :doc:`base/protocols/smb/main.bro `, :doc:`base/protocols/smb/smb1-main.bro `, :doc:`base/protocols/smb/smb2-main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/smb/const-dos-error.bro.rst b/doc/scripts/base/protocols/smb/const-dos-error.bro.rst new file mode 100644 index 0000000000..4d6cf06fa0 --- /dev/null +++ b/doc/scripts/base/protocols/smb/const-dos-error.bro.rst @@ -0,0 +1,22 @@ +:tocdepth: 3 + +base/protocols/smb/const-dos-error.bro +====================================== +.. bro:namespace:: SMB + + +:Namespace: SMB +:Imports: :doc:`base/protocols/smb/consts.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=============================================================================================================================== = +:bro:id:`SMB::statuses`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +=============================================================================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/smb/const-nt-status.bro.rst b/doc/scripts/base/protocols/smb/const-nt-status.bro.rst new file mode 100644 index 0000000000..9174b11c6a --- /dev/null +++ b/doc/scripts/base/protocols/smb/const-nt-status.bro.rst @@ -0,0 +1,22 @@ +:tocdepth: 3 + +base/protocols/smb/const-nt-status.bro +====================================== +.. bro:namespace:: SMB + + +:Namespace: SMB +:Imports: :doc:`base/protocols/smb/consts.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +=============================================================================================================================== = +:bro:id:`SMB::statuses`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +=============================================================================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/smb/consts.bro.rst b/doc/scripts/base/protocols/smb/consts.bro.rst new file mode 100644 index 0000000000..dfc001b242 --- /dev/null +++ b/doc/scripts/base/protocols/smb/consts.bro.rst @@ -0,0 +1,2388 @@ +:tocdepth: 3 + +base/protocols/smb/consts.bro +============================= +.. bro:namespace:: SMB +.. bro:namespace:: SMB1 +.. bro:namespace:: SMB2 + + +:Namespaces: SMB, SMB1, SMB2 + +Summary +~~~~~~~ +Redefinable Options +################### +=================================================================================================================================== ============================================ +:bro:id:`SMB::rpc_sub_cmds`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` The subcommands for RPC endpoints. +:bro:id:`SMB::rpc_uuids`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` The UUIDs used by the various RPC endpoints. +:bro:id:`SMB::srv_cmds`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Server service sub commands. +:bro:id:`SMB::statuses`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`SMB::wksta_cmds`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Workstation service sub commands. +=================================================================================================================================== ============================================ + +Constants +######### +======================================================================================================================== = +:bro:id:`SMB1::commands`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`SMB1::trans2_sub_commands`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`SMB1::trans_sub_commands`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`SMB2::commands`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`SMB2::dialects`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`SMB2::share_types`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +======================================================================================================================== = + +Types +##### +================================================= = +:bro:type:`SMB::StatusCode`: :bro:type:`record` +:bro:type:`SMB::rpc_cmd_table`: :bro:type:`table` +================================================= = + +Redefinitions +############# +================================================================= ================================================ +:bro:id:`SMB::pipe_filenames`: :bro:type:`set` :bro:attr:`&redef` Heuristic detection of named pipes when the pipe + mapping isn't seen. +================================================================= ================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: SMB::rpc_sub_cmds + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`SMB::rpc_cmd_table` + :Attributes: :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + ["6bffd098-a112-3610-9833-46c3f87e345a"] = { + [2] = "NetrWkstaUserEnum", + [9] = "NetrUseGetInfo", + [27] = "NetrAddAlternateComputerName", + [6] = "NetrWkstaTransportAdd", + [11] = "NetrUseEnum", + [22] = "NetrJoinDomain2", + [24] = "NetrRenameMachineInDomain2", + [30] = "NetrEnumerateComputerNames", + [1] = "NetrWkstaSetInfo", + [8] = "NetrUseAdd", + [7] = "NetrWkstaTransportDel", + [23] = "NetrUnjoinDomain2", + [29] = "NetrSetPrimaryComputerName", + [5] = "NetrWkstaTransportEnum", + [25] = "NetrValidateName2", + [28] = "NetrRemoveAlternateComputerName", + [10] = "NetrUseDel", + [0] = "NetrWkstaGetInfo", + [13] = "NetrWorkstationStatisticsGet", + [20] = "NetrGetJoinInformation", + [26] = "NetrGetJoinableOUs2" + }, + ["4b324fc8-1670-01d3-1278-5a47bf6ee188"] = { + [9] = "NetrFileEnum", + [17] = "NetrShareSetInfo", + [27] = "NetrServerTransportDel", + [52] = "NetrDfsManagerReportSiteInfo", + [11] = "NetrFileClose", + [14] = "NetrShareAdd", + [45] = "NetrDfsDeleteLocalPartition", + [22] = "NetrServerSetInfo", + [24] = "NetrServerStatisticsGet", + [30] = "NetprPathType", + [44] = "NetrDfsCreateLocalPartition", + [46] = "NetrDfsSetLocalVolumeState", + [8] = "NetrConnectionEnum", + [57] = "NetrShareDelEx", + [15] = "NetrShareEnum", + [23] = "NetrServerDiskEnum", + [33] = "NetprNameValidate", + [41] = "NetrServerTransportAddEx", + [43] = "NetrDfsGetVersion", + [51] = "NetrDfsFixLocalVolume", + [25] = "NetrServerTransportAdd", + [32] = "NetprPathCompare", + [34] = "NetprNameCanonicalize", + [37] = "NetrShareDelStart", + [53] = "NetrServerTransportDelEx", + [19] = "NetrShareDelSticky", + [28] = "NetrRemoteTOD", + [38] = "NetrShareDelCommit", + [50] = "NetrDfsModifyPrefix", + [54] = "NetrServerAliasAdd", + [31] = "NetprPathCanonicalize", + [55] = "NetrServerAliasEnum", + [10] = "NetrFileGetInfo", + [36] = "NetrShareEnumSticky", + [35] = "NetprNameCompare", + [39] = "NetrGetFileSecurity", + [56] = "NetrServerAliasDel", + [12] = "NetrSessionEnum", + [13] = "NetrSessionDel", + [18] = "NetrShareDel", + [21] = "NetrServerGetInfo", + [49] = "NetrDfsDeleteExitPoint", + [16] = "NetrShareGetInfo", + [20] = "NetrShareCheck", + [26] = "NetrServerTransportEnum", + [40] = "NetrSetFileSecurity", + [48] = "NetrDfsCreateExitPoint" + } + } + + The subcommands for RPC endpoints. + +.. bro:id:: SMB::rpc_uuids + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + ["6bffd098-a112-3610-9833-46c3f87e345a"] = "Workstation Service", + ["4b324fc8-1670-01d3-1278-5a47bf6ee188"] = "Server Service" + } + + The UUIDs used by the various RPC endpoints. + +.. bro:id:: SMB::srv_cmds + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [9] = "NetrFileEnum", + [17] = "NetrShareSetInfo", + [27] = "NetrServerTransportDel", + [52] = "NetrDfsManagerReportSiteInfo", + [11] = "NetrFileClose", + [14] = "NetrShareAdd", + [45] = "NetrDfsDeleteLocalPartition", + [22] = "NetrServerSetInfo", + [24] = "NetrServerStatisticsGet", + [30] = "NetprPathType", + [44] = "NetrDfsCreateLocalPartition", + [46] = "NetrDfsSetLocalVolumeState", + [8] = "NetrConnectionEnum", + [57] = "NetrShareDelEx", + [15] = "NetrShareEnum", + [23] = "NetrServerDiskEnum", + [33] = "NetprNameValidate", + [41] = "NetrServerTransportAddEx", + [43] = "NetrDfsGetVersion", + [51] = "NetrDfsFixLocalVolume", + [25] = "NetrServerTransportAdd", + [32] = "NetprPathCompare", + [34] = "NetprNameCanonicalize", + [37] = "NetrShareDelStart", + [53] = "NetrServerTransportDelEx", + [19] = "NetrShareDelSticky", + [28] = "NetrRemoteTOD", + [38] = "NetrShareDelCommit", + [50] = "NetrDfsModifyPrefix", + [54] = "NetrServerAliasAdd", + [31] = "NetprPathCanonicalize", + [55] = "NetrServerAliasEnum", + [10] = "NetrFileGetInfo", + [36] = "NetrShareEnumSticky", + [35] = "NetprNameCompare", + [39] = "NetrGetFileSecurity", + [56] = "NetrServerAliasDel", + [12] = "NetrSessionEnum", + [13] = "NetrSessionDel", + [18] = "NetrShareDel", + [21] = "NetrServerGetInfo", + [49] = "NetrDfsDeleteExitPoint", + [16] = "NetrShareGetInfo", + [20] = "NetrShareCheck", + [26] = "NetrServerTransportEnum", + [40] = "NetrSetFileSecurity", + [48] = "NetrDfsCreateExitPoint" + } + + Server service sub commands. + +.. bro:id:: SMB::statuses + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`SMB::StatusCode` + :Attributes: :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [3221225837] = [id="FT_ORPHANING", desc="{FT Orphaning} A disk that is part of a fault-tolerant volume can no longer be accessed."], + [3221225778] = [id="LOGON_SERVER_CONFLICT", desc="The Netlogon service cannot start because another Netlogon service running in the domain conflicts with the specified role."], + [3221356610] = [id="RPC_NT_NO_CONTEXT_AVAILABLE", desc="No security context is available to allow impersonation."], + [3223192384] = [id="GRAPHICS_TARGET_NOT_IN_TOPOLOGY", desc="The specified target is not part of the specified VidPN's topology."], + [3221225855] = [id="LM_CROSS_ENCRYPTION_REQUIRED", desc="An attempt was made to change a user password in the security account manager without providing the necessary LM cross-encrypted password."], + [3221225730] = [id="FILE_CORRUPT_ERROR", desc="{Corrupt File} The file or directory %hs is corrupt and unreadable. Run the Chkdsk utility."], + [3222863892] = [id="TRANSACTION_NOT_REQUESTED", desc="The caller has called a response API, but the response is not expected because the transaction manager did not issue the corresponding request to the caller."], + [3222863928] = [id="CANT_CROSS_RM_BOUNDARY", desc="The operation would involve a single file with two transactional resource managers and is, therefore, not allowed."], + [3221225882] = [id="NOLOGON_SERVER_TRUST_ACCOUNT", desc="The account used is a server trust account. Use your global user account or local user account to access this server."], + [2148728835] = [id="CLUSTER_NETWORK_ALREADY_ONLINE", desc="The cluster network is already online."], + [3222601745] = [id="SXS_MULTIPLE_DEACTIVATION", desc="The activation context being deactivated has already been deactivated."], + [3222863923] = [id="ENLISTMENT_NOT_SUPERIOR", desc="The request was rejected because the enlistment in question is not a superior enlistment."], + [3221225754] = [id="INVALID_LDT_DESCRIPTOR", desc="Indicates that the user supplied an invalid descriptor when trying to set up LDT descriptors."], + [1075380277] = [id="RM_ALREADY_STARTED", desc="The transactional resource manager has already been started."], + [3223192380] = [id="GRAPHICS_INVALID_STRIDE", desc="The specified stride is invalid."], + [3222929436] = [id="LOG_TAIL_INVALID", desc="A new or existing archive tail or the base of the active log is invalid."], + [3221226022] = [id="NOT_TINY_STREAM", desc="The stream is not a tiny stream."], + [3221225742] = [id="IMAGE_ALREADY_LOADED", desc="Indicates that the specified image is already loaded."], + [3221356644] = [id="RPC_NT_PROXY_ACCESS_DENIED", desc="Access to the HTTP proxy is denied."], + [65537] = [id="DBG_EXCEPTION_HANDLED", desc="Debugger handled the exception."], + [2147483653] = [id="BUFFER_OVERFLOW", desc="{Buffer Overflow} The data was too large to fit into the specified buffer."], + [1073807368] = [id="DBG_CONTROL_BREAK", desc="Debugger received a control break."], + [3221226098] = [id="NO_MATCH", desc="There was no match for the specified key in the index."], + [3222863958] = [id="COMPRESSION_NOT_ALLOWED_IN_TRANSACTION", desc="The compression operation could not be completed because a transaction is active on the file."], + [3221226067] = [id="LPC_REPLY_LOST", desc="The server received the messages but did not send a reply."], + [3221227264] = [id="PORT_CLOSED", desc="The ALPC port is closed."], + [3223192353] = [id="GRAPHICS_INVALID_MONITOR_SOURCEMODESET", desc="The specified monitor source mode set is invalid."], + [3221226354] = [id="ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY", desc="Access to %1 has been restricted by your Administrator by policy rule %2."], + [1073741836] = [id="SERIAL_COUNTER_TIMEOUT", desc="{Serial IOCTL Timeout} A serial I/O operation completed because the time-out period expired. (The IOCTL_SERIAL_XOFF_COUNTER had not reached zero.)"], + [3221225871] = [id="EVENTLOG_CANT_START", desc="No Eventlog log file could be opened. The Eventlog service did not start."], + [3221225798] = [id="PAGEFILE_CREATE_FAILED", desc="{Unable to Create Paging File} The creation of the paging file %hs failed (%lx). The requested size was %ld."], + [4194305] = [id="netnamedel", desc="The specified network name is no longer available."], + [3223192859] = [id="GRAPHICS_OPM_SESSION_TYPE_CHANGE_IN_PROGRESS", desc="OPM functions cannot be called when a session is changing its type. Three types of sessions currently exist: console, disconnected, and remote (RDP or ICA)."], + [3221226114] = [id="RANGE_LIST_CONFLICT", desc="The range could not be added to the range list because of a conflict."], + [3223453698] = [id="FWP_CONDITION_NOT_FOUND", desc="The filter condition does not exist."], + [3221226036] = [id="ACCOUNT_LOCKED_OUT", desc="The user account has been automatically locked because too many invalid logon attempts or password change attempts have been requested."], + [3221226247] = [id="CSS_KEY_NOT_PRESENT", desc="Copy protection error-The specified sector does not contain a valid key."], + [3221225662] = [id="BAD_NETWORK_PATH", desc="The network path cannot be located."], + [3223453724] = [id="FWP_NULL_POINTER", desc="A required pointer is null."], + [3221226222] = [id="UNFINISHED_CONTEXT_DELETED", desc="A security context was deleted before the context was completed. This is considered a logon failure."], + [3223191826] = [id="GRAPHICS_ALLOCATION_CLOSED", desc="The allocation being referenced has been closed permanently."], + [3221225707] = [id="UNEXPECTED_MM_MAP_ERROR", desc="If an MM error that is not defined in the standard FsRtl filter is returned, it is converted to one of the following errors, which are guaranteed to be in the filter. In this case, information is lost; however, the filter correctly handles the exception."], + [3221225491] = [id="NO_MEDIA_IN_DEVICE", desc="{No Disk} There is no disk in the drive. Insert a disk into drive %hs."], + [3223126017] = [id="MONITOR_NO_DESCRIPTOR", desc="A monitor descriptor could not be obtained."], + [3223126021] = [id="MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED", desc="WMI data-block registration failed for one of the MSMonitorClass WMI subclasses."], + [3222863879] = [id="TRANSACTION_NOT_JOINED", desc="The resource manager attempted to prepare a transaction that it has not successfully joined."], + [3221226340] = [id="ACCESS_DISABLED_BY_POLICY_OTHER", desc="Access to %1 has been restricted by your Administrator by policy rule %2."], + [196608001] = [id="unknownprintmonitor", desc="The specified print monitor is unknown."], + [3223191556] = [id="GRAPHICS_INVALID_DRIVER_MODEL", desc="The driver stack does not match the expected driver model."], + [3221225848] = [id="NO_MEDIA", desc="{No Media} There is no media in the drive. Insert media into drive %hs."], + [871] = [id="WAIT_FOR_OPLOCK", desc="An operation is blocked and waiting for an oplock."], + [3221226203] = [id="DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER", desc="A local group cannot have another cross-domain local group as a member."], + [3222929451] = [id="LOG_STATE_INVALID", desc="The log service is not in the correct state to perform a requested action."], + [2147483693] = [id="STOPPED_ON_SYMLINK", desc="The create operation stopped after reaching a symbolic link."], + [3221225989] = [id="INSUFF_SERVER_RESOURCES", desc="Insufficient server resources exist to complete the request."], + [3221226332] = [id="NETWORK_SESSION_EXPIRED", desc="The client session has expired; so the client must re-authenticate to continue accessing the remote resources."], + [3221227526] = [id="VOLUME_DIRTY", desc="The operation could not be completed because the volume is dirty. Please run the Chkdsk utility and try again. "], + [3221226040] = [id="ADDRESS_ALREADY_ASSOCIATED", desc="The transport endpoint already has an address associated with it."], + [3223192399] = [id="GRAPHICS_INVALID_COPYPROTECTION_TYPE", desc="The specified VidPN present path copy protection type is invalid."], + [3221227265] = [id="MESSAGE_LOST", desc="The ALPC message requested is no longer available."], + [3223192862] = [id="GRAPHICS_OPM_DRIVER_INTERNAL_ERROR", desc="The function failed because an unexpected error occurred inside a display driver."], + [2147483667] = [id="INVALID_EA_NAME", desc="{Illegal EA} The specified extended attribute (EA) name contains at least one illegal character."], + [3221226184] = [id="COMMITMENT_MINIMUM", desc="{Virtual Memory Minimum Too Low} Your system is low on virtual memory. Windows is increasing the size of your virtual memory paging file. During this process, memory requests for some applications may be denied. For more information, see Help."], + [3225026581] = [id="VIRTDISK_NOT_VIRTUAL_DISK", desc="The specified disk is not a virtual disk."], + [3221226578] = [id="SYSTEM_DEVICE_NOT_FOUND", desc="The requested system device cannot be found."], + [3221225650] = [id="PIPE_CONNECTED", desc="The specified named pipe is in the connected state."], + [3222863932] = [id="ROLLBACK_TIMER_EXPIRED", desc="A rollback could not be scheduled because a previously scheduled rollback has already executed or been queued for execution."], + [3221226035] = [id="DOMAIN_CONTROLLER_NOT_FOUND", desc="A domain controller for this domain was not found."], + [3221225504] = [id="INVALID_FILE_FOR_SECTION", desc="{Bad File} The attributes of the specified mapping file for a section of memory cannot be read."], + [139132929] = [id="buftoosmall", desc="The API return buffer is too small."], + [3222863905] = [id="OBJECT_NO_LONGER_EXISTS", desc="The object (file, stream, or link) that corresponds to the handle has been deleted by a transaction savepoint rollback."], + [1073741835] = [id="FT_WRITE_RECOVERY", desc="{Redundant Write} To satisfy a write request, the Windows NT fault-tolerant file system successfully wrote a redundant copy of the information. This was done because the file system encountered a failure on a member of the fault-tolerant volume but was unable to reassign the failing area of the device."], + [279] = [id="BUFFER_ALL_ZEROS", desc="The specified buffer contains all zeros."], + [3224764422] = [id="IPSEC_INTEGRITY_CHECK_FAILED", desc="The IPsec integrity check failed."], + [3221225510] = [id="INVALID_DISPOSITION", desc="An invalid exception disposition was returned by an exception handler."], + [3221225863] = [id="BACKUP_CONTROLLER", desc="This operation is only allowed for the primary domain controller of the domain."], + [3221356585] = [id="RPC_NT_DUPLICATE_ENDPOINT", desc="The endpoint is a duplicate."], + [3221227290] = [id="PORT_ALREADY_HAS_COMPLETION_LIST", desc="The specified port already has a completion list."], + [3221226521] = [id="DS_SRC_SID_EXISTS_IN_FOREST", desc="The source object's SID already exists in destination forest."], + [3221225685] = [id="FILE_RENAMED", desc="The specified file has been renamed and thus cannot be modified."], + [140378113] = [id="unknownipc", desc="The requested API is not supported on the remote server."], + [3221356629] = [id="RPC_NT_NOT_RPC_ERROR", desc="The error specified is not a valid Windows RPC error code."], + [3221356632] = [id="RPC_NT_NOT_CANCELLED", desc="The thread was not canceled."], + [3223191825] = [id="GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION", desc="A locked allocation cannot be used in the current command buffer."], + [3224797187] = [id="IPSEC_DOSP_STATE_LOOKUP_FAILED", desc="IPsec Dos Protection failed to lookup state."], + [3221226057] = [id="IMAGE_MP_UP_MISMATCH", desc="{UP/MP Image Mismatch} The image %hs has been modified for use on a uniprocessor system, but you are running it on a multiprocessor machine. Reinstall the image file."], + [3221225691] = [id="CANT_TERMINATE_SELF", desc="Indicates that a thread attempted to terminate itself by default (called NtTerminateThread with NULL) and it was the last thread in the current process."], + [1638403] = [id="seek", desc="The drive cannot locate a specific area or track on the disk."], + [3221225891] = [id="IMAGE_SUBSYSTEM_NOT_PRESENT", desc="The subsystem needed to support the image type is not present."], + [1073741854] = [id="WX86_SINGLE_STEP", desc="An exception status code that is used by the Win32 x86 emulation subsystem."], + [3222470666] = [id="CLUSTER_INVALID_REQUEST", desc="The cluster request is not valid for this object."], + [3221225587] = [id="NONE_MAPPED", desc="None of the information to be translated has been translated."], + [3221225573] = [id="GROUP_EXISTS", desc="The specified group already exists."], + [3224797190] = [id="IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES", desc="IPsec Dos Protection failed to create per internal IP ratelimit queue because there is already maximum number of queues allowed by policy."], + [3221225874] = [id="NETLOGON_NOT_STARTED", desc="An attempt was made to logon, but the NetLogon service was not started."], + [3221226375] = [id="SMARTCARD_IO_ERROR", desc="A communication error with the smart card has been detected."], + [2147483685] = [id="ALREADY_DISCONNECTED", desc="The specified connection has already been disconnected."], + [3221225833] = [id="DISK_RECALIBRATE_FAILED", desc="{Hard Disk Error} While accessing the hard disk, a recalibrate operation failed, even after retries."], + [2149122089] = [id="NO_TXF_METADATA", desc="There is no transaction metadata on the file."], + [11993089] = [id="rename", desc="Cannot create a file when that file already exists."], + [3221226755] = [id="CALLBACK_BYPASS", desc="A callback has requested to bypass native code."], + [3221225780] = [id="SYNCHRONIZATION_REQUIRED", desc="The SAM database on a Windows Server is significantly out of synchronization with the copy on the domain controller. A complete synchronization is required."], + [3223388188] = [id="FVE_AUTH_INVALID_CONFIG", desc="The Boot Configuration Data (BCD) settings are not supported or have changed because BitLocker was enabled."], + [3221356604] = [id="RPC_NT_INTERFACE_NOT_FOUND", desc="The interface was not found."], + [2147483652] = [id="SINGLE_STEP", desc="{EXCEPTION} Single Step A single step or trace operation has just been completed."], + [3223388176] = [id="FVE_FAILED_SECTOR_SIZE", desc="The volume encryption algorithm cannot be used on this sector size."], + [3221225785] = [id="ENTRYPOINT_NOT_FOUND", desc="{Entry Point Not Found} The procedure entry point %hs could not be located in the dynamic link library %hs."], + [3223192397] = [id="GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON", desc="The specified VidPN topology recommendation reason is invalid."], + [3221225807] = [id="UNRECOGNIZED_VOLUME", desc="The volume does not contain a recognized file system. Be sure that all required file system drivers are loaded and that the volume is not corrupt."], + [3221225585] = [id="PASSWORD_EXPIRED", desc="The user account password has expired."], + [3221227287] = [id="NO_UNICODE_TRANSLATION", desc="No mapping for the Unicode character exists in the target multi-byte code page."], + [3221226213] = [id="DS_LOCAL_MEMBER_OF_LOCAL_ONLY", desc="A local group can only be a member of other local groups in the same domain."], + [261] = [id="MORE_ENTRIES", desc="Returned by enumeration APIs to indicate more information is available to successive calls."], + [3222470664] = [id="CLUSTER_NETINTERFACE_EXISTS", desc="The cluster network interface already exists."], + [3221356579] = [id="RPC_NT_INVALID_BOUND", desc="The array bounds are invalid."], + [3221225649] = [id="PIPE_CLOSING", desc="The specified named pipe is in the closing state."], + [3222536217] = [id="ACPI_INVALID_TABLE", desc="An attempt was made to use an incorrect table."], + [3221225481] = [id="BAD_INITIAL_STACK", desc="An invalid initial stack was specified in a call to NtCreateThread."], + [1376259] = [id="notready", desc="The device is not ready."], + [3223192835] = [id="GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS", desc="The specified encrypted parameters are invalid."], + [3221225718] = [id="INVALID_PARAMETER_8", desc="An invalid parameter was passed to a service or function as the eighth argument."], + [3221266568] = [id="DS_OID_NOT_FOUND", desc="The specified OID cannot be found."], + [3221226033] = [id="MARSHALL_OVERFLOW", desc="The user/kernel marshaling buffer has overflowed."], + [3221226244] = [id="MFT_TOO_FRAGMENTED", desc="The master file table on the volume is too fragmented to complete this operation."], + [3221226021] = [id="NOT_FOUND", desc="The object was not found."], + [3223192355] = [id="GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN", desc="The miniport does not have a recommendation regarding the request to provide a functional VidPN given the current display adapter configuration."], + [3223060512] = [id="FLT_NO_WAITER_FOR_REPLY", desc="No waiter is present for the filter's reply to this message."], + [3223192854] = [id="GRAPHICS_OPM_HDCP_SRM_NEVER_SET", desc="DxgkDdiOPMGetInformation() cannot return the version of the SRM being used because the application never successfully passed an SRM to the protected output."], + [3222863940] = [id="CANNOT_EXECUTE_FILE_IN_TRANSACTION", desc="This file is open for modification in an unresolved transaction and may be opened for execute only by a transacted reader."], + [3221225986] = [id="NO_USER_SESSION_KEY", desc="There is no user session key for the specified logon session."], + [3221225642] = [id="INSTRUCTION_MISALIGNMENT", desc="An attempt was made to execute an instruction at an unaligned address and the host system does not support unaligned instruction references."], + [3221226197] = [id="DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN", desc="In a mixed domain, no nesting of a global group if the group is security enabled."], + [3221226003] = [id="TRANSACTION_RESPONDED", desc="The transport had previously responded to a transaction request."], + [3221225579] = [id="ILL_FORMED_PASSWORD", desc="When trying to update a password, this return status indicates that the value provided for the new password contains values that are not allowed in passwords."], + [262145] = [id="nofids", desc="The system cannot open the file."], + [3221880872] = [id="CTX_CONSOLE_CONNECT", desc="Reconnecting a disconnected session to the console is not supported."], + [3223060488] = [id="FLT_FILTER_NOT_READY", desc="The filter is not ready for attachment to volumes because it has not finished initializing (FltStartFiltering has not been called)."], + [3223193063] = [id="GRAPHICS_INTERNAL_ERROR", desc="An internal error caused an operation to fail."], + [3221225843] = [id="INVALID_BLOCK_LENGTH", desc="When accessing a new tape of a multi-volume partition, the current blocksize is incorrect."], + [3223192337] = [id="GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE", desc="The specified video present target mode is invalid."], + [3221226072] = [id="NO_CALLBACK_ACTIVE", desc="A callback return system service cannot be executed when no callback is active."], + [146800642] = [id="badClient", desc="The user is not allowed to log on from this workstation."], + [3221226056] = [id="LOGIN_WKSTA_RESTRICTION", desc="The account is not authorized to log on from this station."], + [3223192324] = [id="GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE", desc="The specified video present source is invalid."], + [3221226274] = [id="NO_KERB_KEY", desc="The target server does not have acceptable Kerberos credentials."], + [3221225883] = [id="DOMAIN_TRUST_INCONSISTENT", desc="The name or SID of the specified domain is inconsistent with the trust information for that domain."], + [3221225644] = [id="PIPE_NOT_AVAILABLE", desc="An instance of a named pipe cannot be found in the listening state."], + [3223519243] = [id="NDIS_MULTICAST_NOT_FOUND", desc="At attempt was made to remove a multicast address that was never added."], + [3221422172] = [id="RPC_NT_INVALID_PIPE_OBJECT", desc="The RPC pipe object is invalid or corrupt."], + [3221225870] = [id="EVENTLOG_FILE_CORRUPT", desc="The Eventlog log file is corrupt."], + [3221225697] = [id="DOMAIN_LIMIT_EXCEEDED", desc="An attempt was made to exceed the limit on the number of domains per server for this release."], + [3222863891] = [id="TRANSACTION_REQUEST_NOT_VALID", desc="The requested operation is not valid on the transaction object in its current state."], + [3221356546] = [id="RPC_NT_WRONG_KIND_OF_BINDING", desc="The binding handle is not the correct type."], + [3221225671] = [id="NO_SPOOL_SPACE", desc="Space to store the file that is waiting to be printed is not available on the server."], + [3221225633] = [id="WORKING_SET_QUOTA", desc="The working set is not big enough to allow the requested pages to be locked."], + [3221226117] = [id="ILLEGAL_ELEMENT_ADDRESS", desc="The specified medium changer element does not exist."], + [3223388174] = [id="FVE_CONV_WRITE_ERROR", desc="A write operation failed while converting the volume."], + [3221226241] = [id="WMI_GUID_DISCONNECTED", desc="The WMI GUID is no longer available."], + [3221225515] = [id="PARITY_ERROR", desc="A device parity error on an I/O operation."], + [3221225710] = [id="LOGON_SESSION_EXISTS", desc="An attempt has been made to start a new session manager or LSA logon session by using an ID that is already in use."], + [3221225758] = [id="MAPPED_FILE_SIZE_ZERO", desc="An attempt was made to map a file of size zero with the maximum size specified as zero."], + [3223192347] = [id="GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET", desc="The specified monitor frequency range set is invalid."], + [3221226201] = [id="DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER", desc="A universal group cannot have a local group as a member."], + [3221880851] = [id="CTX_LICENSE_NOT_AVAILABLE", desc="The system has reached its licensed logon limit. Try again later."], + [3221225775] = [id="INVALID_IMAGE_NOT_MZ", desc="The specified image file did not have the correct format: it did not have an initial MZ."], + [3223519254] = [id="NDIS_BUFFER_TOO_SHORT", desc="The length of the submitted buffer for this operation is too small."], + [3221225993] = [id="TOO_MANY_ADDRESSES", desc="The transport address could not be opened because all the available addresses are in use."], + [2148728834] = [id="CLUSTER_NODE_ALREADY_DOWN", desc="The cluster node is already down."], + [1073741863] = [id="CARDBUS_NOT_SUPPORTED", desc="The device has detected a CardBus card in its slot."], + [3221225773] = [id="COMMITMENT_LIMIT", desc="{Out of Virtual Memory} Your system is low on virtual memory. To ensure that Windows runs correctly, increase the size of your virtual memory paging file. For more information, see Help."], + [3223519248] = [id="NDIS_INVALID_DEVICE_REQUEST", desc="The specified request is not a valid operation for the target device."], + [3221487669] = [id="PNP_BAD_MPS_TABLE", desc="A device is missing in the system BIOS MPS table. This device will not be used. Contact your system vendor for a system BIOS update."], + [3221226339] = [id="ACCESS_DISABLED_BY_POLICY_PUBLISHER", desc="Access to %1 has been restricted by your Administrator by software publisher policy."], + [3222995178] = [id="VIDEO_HUNG_DISPLAY_DRIVER_THREAD", desc="{Display Driver Stopped Responding} The %hs display driver has stopped working normally. Save your work and reboot the system to restore full display functionality. The next time you reboot the computer, a dialog box will allow you to upload data about this failure to Microsoft."], + [3221226323] = [id="PORT_NOT_SET", desc="An attempt to remove a processes DebugPort was made, but a port was not already associated with the process."], + [3221226219] = [id="SYSTEM_SHUTDOWN", desc="The system is in the process of shutting down."], + [3221226508] = [id="REVOCATION_OFFLINE_KDC", desc="The revocation status of the domain controller certificate used for smart card authentication could not be determined. There is additional information in the system event log. Contact your system administrator."], + [1073741830] = [id="LOCAL_USER_SESSION_KEY", desc="{Local Session Key} A user session key was requested for a local remote procedure call (RPC) connection. The session key that is returned is a constant value and not unique to this connection."], + [3221227266] = [id="INVALID_MESSAGE", desc="The ALPC message supplied is invalid."], + [3221225702] = [id="GENERIC_NOT_MAPPED", desc="Indicates generic access types were contained in an access mask which should already be mapped to non-generic access types."], + [3221226334] = [id="ALL_SIDS_FILTERED", desc="The SID filtering operation removed all SIDs."], + [3221226156] = [id="DS_CANT_ON_NON_LEAF", desc="The directory service can perform the requested operation only on a leaf object."], + [3221226355] = [id="FAILED_STACK_SWITCH", desc="The system was not able to allocate enough memory to perform a stack switch."], + [3221225598] = [id="RANGE_NOT_LOCKED", desc="The range specified in NtUnlockFile was not locked."], + [3221226112] = [id="REPARSE_POINT_NOT_RESOLVED", desc="The NTFS symbolic link could not be resolved even though the initial file name is valid."], + [3221225864] = [id="LOG_FILE_FULL", desc="The log file space is insufficient to support this operation."], + [3221227296] = [id="CALLBACK_RETURNED_PRI_BACK", desc="A threadpool worker thread entered a callback, which left with background priorities set."], + [3221225601] = [id="SERVER_NOT_DISABLED", desc="The GUID allocation server is enabled at the moment."], + [3221225479] = [id="PAGEFILE_QUOTA", desc="The page file quota for the process has been exhausted."], + [3221225624] = [id="FILE_INVALID", desc="The volume for a file has been externally altered such that the opened file is no longer valid."], + [1075511532] = [id="VIDEO_DRIVER_DEBUG_REPORT_REQUEST", desc="{Display Driver Recovered From Failure} The %hs display driver has detected a failure and recovered from it. Some graphical operations may have failed. The next time you restart the machine, a dialog box appears, giving you an opportunity to upload data about this failure to Microsoft."], + [3222601737] = [id="SXS_VERSION_CONFLICT", desc="A component version required by the application conflicts with another component version that is already active."], + [3222863895] = [id="TRANSACTION_INVALID_MARSHALL_BUFFER", desc="The buffer passed in to NtPushTransaction or NtPullTransaction is not in a valid format."], + [3223453756] = [id="FWP_DUPLICATE_AUTH_METHOD", desc="A policy cannot contain the same auth method more than once."], + [1073741840] = [id="RECEIVE_EXPEDITED", desc="{Expedited Data Received} The network transport returned data to its client that was marked as expedited by the remote system."], + [3221356545] = [id="RPC_NT_INVALID_STRING_BINDING", desc="The string binding is invalid."], + [3221226539] = [id="IMPLEMENTATION_LIMIT", desc="An operation attempted to exceed an implementation-defined limit."], + [3222863894] = [id="TRANSACTION_ALREADY_COMMITTED", desc="It is too late to perform the requested operation, because the transaction has already been committed."], + [3221880833] = [id="CTX_WINSTATION_NAME_INVALID", desc="Session name %1 is invalid."], + [3221356557] = [id="RPC_NT_TYPE_ALREADY_REGISTERED", desc="The type UUID has already been registered."], + [3221226497] = [id="PER_USER_TRUST_QUOTA_EXCEEDED", desc="The delegated trust creation quota of the current user has been exceeded."], + [3223193058] = [id="GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP", desc="The function failed because the specified GDI display device was not attached to the Windows desktop."], + [1073742704] = [id="DS_SHUTTING_DOWN", desc="The directory service is shutting down."], + [1572867] = [id="badreq", desc="The program issued a command but the command length is incorrect."], + [3224764419] = [id="IPSEC_WRONG_SA", desc="The packet was received on an IPsec SA that does not match the packet characteristics."], + [3221356592] = [id="RPC_NT_UNKNOWN_AUTHN_SERVICE", desc="The authentication service is unknown."], + [3221226143] = [id="NO_TRACKING_SERVICE", desc="The tracking (workstation) service is not running."], + [3223192410] = [id="GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION", desc="The miniport requested that augmentation be canceled for the specified source of the specified VidPN's topology."], + [3276802] = [id="qtoobig", desc="The queued item too big."], + [3223192963] = [id="GRAPHICS_I2C_ERROR_RECEIVING_DATA", desc="An error occurred while receiving data from the device on the I2C bus."], + [3221226076] = [id="PWD_HISTORY_CONFLICT", desc="You have attempted to change your password to one that you have used in the past. The policy of your user account does not allow this. Select a password that you have not previously used."], + [3221225698] = [id="OPLOCK_NOT_GRANTED", desc="An error status returned when the opportunistic lock (oplock) request is denied."], + [3221225645] = [id="INVALID_PIPE_STATE", desc="The named pipe is not in the connected or closing state."], + [3223527425] = [id="NDIS_DOT11_MEDIA_IN_USE", desc="The wireless LAN interface is busy and cannot perform the requested operation."], + [3221225473] = [id="UNSUCCESSFUL", desc="{Operation Failed} The requested operation was unsuccessful."], + [3223060498] = [id="FLT_INSTANCE_NAME_COLLISION", desc="An instance already exists with this name on the volume specified."], + [3221225622] = [id="PRIVILEGED_INSTRUCTION", desc="{EXCEPTION} Privileged instruction."], + [3221226051] = [id="USER_MAPPED_FILE", desc="The requested operation cannot be performed on a file with a user mapped section open."], + [3221880846] = [id="CTX_MODEM_RESPONSE_BUSY", desc="A busy signal was detected at a remote site on callback."], + [3221225533] = [id="DATA_LATE_ERROR", desc="{Data Late} A data late error occurred."], + [118226945] = [id="invaliddatatype", desc="The specified datatype is invalid."], + [3221225625] = [id="ALLOTTED_SPACE_EXCEEDED", desc="When a block of memory is allotted for future updates, such as the memory allocated to hold discretionary access control and primary group information, successive updates may exceed the amount of memory originally allotted. Because a quota may already have been charged to several processes that have handles to the object, it is not reasonable to alter the size of the allocated memory. Instead, a request that requires more memory than has been allotted must fail and the STATUS_ALLOTTED_SPACE_EXCEEDED error returned."], + [3224764425] = [id="IPSEC_THROTTLE_DROP", desc="IPsec dropped a packet due to DOS throttle."], + [3221225531] = [id="OBJECT_PATH_SYNTAX_BAD", desc="The object path component was not a directory object."], + [3221225589] = [id="LUIDS_EXHAUSTED", desc="Indicates there are no more LUIDs to allocate."], + [3221226514] = [id="DELAY_LOAD_FAILED", desc="An attempt to delay-load a .dll or get a function address in a delay-loaded .dll failed."], + [3221226119] = [id="REINITIALIZATION_NEEDED", desc="The device requires re-initialization due to hardware errors."], + [3223388162] = [id="FVE_BAD_INFORMATION", desc="The control block for the encrypted volume is not valid."], + [3221226012] = [id="NO_BROWSER_SERVERS_FOUND", desc="{Unable to Retrieve Browser Server List} The list of servers for this workgroup is not currently available."], + [3221225733] = [id="LOGON_SESSION_COLLISION", desc="An internal LSA error has occurred. An authentication package has requested the creation of a logon session but the ID of an already existing logon session has been specified."], + [1073741849] = [id="WAS_LOCKED", desc="{Page Locked} One of the pages to lock was already locked."], + [3221225832] = [id="FLOPPY_BAD_REGISTERS", desc="{Floppy Disk Error} While accessing a floppy-disk, the controller returned inconsistent results via its registers."], + [3221266448] = [id="IPSEC_QUEUE_OVERFLOW", desc="The IPsec queue overflowed."], + [3221225820] = [id="NOT_REGISTRY_FILE", desc="The system has attempted to load or restore a file into the registry, and the specified file is not in the format of a registry file."], + [3221225520] = [id="INVALID_PARAMETER_MIX", desc="An invalid combination of parameters was specified."], + [2147483672] = [id="RXACT_COMMIT_NECESSARY", desc="This warning level status indicates that the transaction state already exists for the registry subtree, but that a transaction commit was previously aborted. The commit has NOT been completed but has not been rolled back either; therefore, it may still be committed, if needed."], + [3221225985] = [id="NETWORK_OPEN_RESTRICTION", desc="A remote open failed because the network open restrictions were not satisfied."], + [3224764420] = [id="IPSEC_REPLAY_CHECK_FAILED", desc="The packet sequence number replay check failed."], + [3223519234] = [id="NDIS_CLOSING", desc="The binding to the network interface is being closed."], + [3221226134] = [id="WMI_INSTANCE_NOT_FOUND", desc="The instance name passed was not recognized as valid by a WMI data provider."], + [1073807365] = [id="DBG_CONTROL_C", desc="Debugger obtained control of C."], + [3221226231] = [id="TOO_MANY_PRINCIPALS", desc="The KDC reply contained more than one principal name."], + [3221226243] = [id="WMI_ALREADY_ENABLED", desc="Collection or events for the WMI GUID is already enabled."], + [15204353] = [id="pipeclosing", desc="The pipe is being closed."], + [3221225544] = [id="PORT_ALREADY_SET", desc="An attempt was made to set the DebugPort or ExceptionPort of a process, but a port already exists in the process, or an attempt was made to set the CompletionPort of a file but a port was already set in the file, or an attempt was made to set the associated completion port of an ALPC port but it is already set."], + [3221225852] = [id="KEY_DELETED", desc="An illegal operation was attempted on a registry key that has been marked for deletion."], + [3221226123] = [id="DECRYPTION_FAILED", desc="The file decryption attempt failed."], + [3221226373] = [id="SMARTCARD_NO_CERTIFICATE", desc="The requested certificate does not exist on the smart card."], + [117637121] = [id="driveralreadyinstalled", desc="The specified printer driver is already installed."], + [3221356626] = [id="RPC_NT_COMM_FAILURE", desc="A communications failure occurred during an RPC."], + [3221225534] = [id="DATA_ERROR", desc="{Data Error} An error occurred in reading or writing data."], + [257] = [id="ALERTED", desc="The delay completed because the thread was alerted."], + [3221226204] = [id="DS_HAVE_PRIMARY_MEMBERS", desc="Cannot change to a security-disabled group because primary members are in this group."], + [3223192321] = [id="GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED", desc="The specified VidPN topology is valid but is not supported by this model of the display adapter."], + [3222929417] = [id="LOG_BLOCK_VERSION", desc="The log service encountered an invalid log block version."], + [3221225503] = [id="INVALID_VIEW_SIZE", desc="{Invalid Mapping} An attempt was made to create a view for a section that is bigger than the section."], + [3221225709] = [id="NOT_LOGON_PROCESS", desc="The requested action is restricted for use by logon processes only. The calling process has not registered as a logon process."], + [3221226088] = [id="EVALUATION_EXPIRATION", desc="{Windows Evaluation Notification} The evaluation period for this installation of Windows has expired. This system will shutdown in 1 hour. To restore access to this installation of Windows, upgrade this installation by using a licensed distribution of this product."], + [3223192624] = [id="GRAPHICS_NOT_A_LINKED_ADAPTER", desc="The display adapter is not linked to any other adapters."], + [3222929423] = [id="LOG_METADATA_INCONSISTENT", desc="The log service encountered a metadata file with inconsistent data."], + [3221226320] = [id="HOST_DOWN", desc="The transport determined that the remote system is down."], + [3223388198] = [id="FVE_NO_FEATURE_LICENSE", desc="This feature of BitLocker Drive Encryption is not included with this version of Windows."], + [3221356617] = [id="RPC_NT_CALL_IN_PROGRESS", desc="An RPC is already in progress for this thread."], + [3221225583] = [id="INVALID_LOGON_HOURS", desc="The user account has time restrictions and may not be logged onto at this time."], + [3221227280] = [id="CALLBACK_RETURNED_WHILE_IMPERSONATING", desc="A thread pool worker thread is impersonating a client, after a callback to 0x%p(0x%p). This is unexpected, indicating that the callback is missing a call to revert the impersonation."], + [3221225995] = [id="ADDRESS_CLOSED", desc="The transport address is now closed."], + [3221226188] = [id="ONLY_IF_CONNECTED", desc="This operation is supported only when you are connected to the server."], + [2148728833] = [id="CLUSTER_NODE_ALREADY_UP", desc="The cluster node is already up."], + [3221226101] = [id="NOT_A_REPARSE_POINT", desc="The NTFS file or directory is not a reparse point."], + [3221225684] = [id="NOT_SAME_DEVICE", desc="{Incorrect Volume} The destination file of a rename request is located on a different device than the source of the rename request."], + [4294901762] = [id="nosupport", desc="Function not supported."], + [3222470677] = [id="CLUSTER_NO_SECURITY_CONTEXT", desc="No cluster security context is available."], + [3221226754] = [id="THREAD_ALREADY_IN_TASK", desc="The specified thread is already joining a task."], + [2149646338] = [id="FVE_TRANSIENT_STATE", desc="BitLocker encryption keys were ignored because the volume was in a transient state."], + [3221225757] = [id="RXACT_COMMIT_FAILURE", desc="Indicates an error has occurred during a registry transaction commit. The database has been left in an unknown, but probably inconsistent, state. The state of the registry transaction is left as COMMITTING."], + [3223060500] = [id="FLT_VOLUME_NOT_FOUND", desc="The system could not find the volume specified."], + [3222863941] = [id="TRANSACTIONS_NOT_FROZEN", desc="The request to thaw frozen transactions was ignored because transactions were not previously frozen."], + [3222863910] = [id="CANT_CREATE_MORE_STREAM_MINIVERSIONS", desc="It is not possible to create any more miniversions for this stream."], + [3224895580] = [id="VOLMGR_RAID5_NOT_SUPPORTED", desc="The system does not support RAID-5 volumes."], + [3223519419] = [id="NDIS_NOT_SUPPORTED", desc="The network interface does not support this request."], + [3221356562] = [id="RPC_NT_UNKNOWN_IF", desc="The interface is unknown."], + [3221880839] = [id="CTX_NO_OUTBUF", desc="No free output buffers are available."], + [3223453716] = [id="FWP_INCOMPATIBLE_LAYER", desc="The operation is not supported by the specified layer."], + [3221226185] = [id="REG_NAT_CONSUMPTION", desc="{EXCEPTION} Register NaT consumption faults. A NaT value is consumed on a non-speculative instruction."], + [3223192339] = [id="GRAPHICS_PATH_ALREADY_IN_TOPOLOGY", desc="The specified video present path is already in the VidPN's topology."], + [3221225761] = [id="CANNOT_DELETE", desc="An attempt has been made to remove a file or directory that cannot be deleted."], + [3221225736] = [id="CONNECTION_IN_USE", desc="The user attempted to force close the files on a redirected drive, but there were opened directories on the drive, and the user did not specify a sufficient level of force."], + [3221225808] = [id="SERIAL_NO_DEVICE_INITED", desc="No serial device was successfully initialized. The serial driver will unload."], + [3221225521] = [id="INVALID_QUOTA_LOWER", desc="An attempt was made to lower a quota limit below the current usage."], + [3224895579] = [id="VOLMGR_MIRROR_NOT_SUPPORTED", desc="The system does not support mirrored volumes."], + [3223388177] = [id="FVE_FAILED_AUTHENTICATION", desc="BitLocker recovery authentication failed."], + [3222601760] = [id="ADVANCED_INSTALLER_FAILED", desc="An advanced installer failed during setup or servicing."], + [3221225604] = [id="INVALID_ID_AUTHORITY", desc="The value provided was an invalid value for an identifier authority."], + [1073741832] = [id="SERIAL_MORE_WRITES", desc="{Serial IOCTL Complete} A serial I/O operation was completed by another write to a serial port. (The IOCTL_SERIAL_XOFF_COUNTER reached zero.)"], + [3223192352] = [id="GRAPHICS_STALE_MODESET", desc="The specified mode set is stale. Reacquire the new mode set."], + [295] = [id="INTERRUPT_VECTOR_ALREADY_CONNECTED", desc="The specified interrupt vector was already connected."], + [3221226369] = [id="SMARTCARD_CARD_BLOCKED", desc="The smart card is blocked."], + [3222863908] = [id="MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION", desc="A miniversion may be opened only in the context of the transaction that created it."], + [3222601736] = [id="SXS_KEY_NOT_FOUND", desc="The requested lookup key was not found in any active activation context."], + [3221225628] = [id="DEVICE_DATA_ERROR", desc="There are bad blocks (sectors) on the hard disk."], + [3222470670] = [id="CLUSTER_NODE_NOT_MEMBER", desc="The cluster node is not a member of the cluster."], + [3223192961] = [id="GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST", desc="No device on the I2C bus has the specified address."], + [2147483659] = [id="NO_INHERITANCE", desc="{Non-Inheritable ACL} An access control list (ACL) contains no components that can be inherited."], + [3221225635] = [id="DEVICE_NOT_READY", desc="{Drive Not Ready} The drive is not ready for use; its door may be open. Check drive %hs and make sure that a disk is inserted and that the drive door is closed."], + [3223453738] = [id="FWP_DUPLICATE_CONDITION", desc="A filter cannot contain multiple conditions operating on a single field."], + [3221226093] = [id="DFS_UNAVAILABLE", desc="DFS is unavailable on the contacted server."], + [3221225629] = [id="DEVICE_NOT_CONNECTED", desc="There is bad cabling, non-termination, or the controller is not able to obtain access to the hard disk."], + [3221226025] = [id="FAIL_CHECK", desc="A consistency check failed."], + [3221225793] = [id="INVALID_ADDRESS", desc="The address handle that was given to the transport was invalid."], + [3221226226] = [id="WRONG_CREDENTIAL_HANDLE", desc="The supplied credential handle does not match the credential that is associated with the security context."], + [3222863896] = [id="CURRENT_TRANSACTION_NOT_VALID", desc="The current transaction context associated with the thread is not a valid handle to a transaction object."], + [3221227294] = [id="CALLBACK_RETURNED_LDR_LOCK", desc="A threadpool worker thread entered a callback, which left the loader lock held."], + [3221226010] = [id="SYSTEM_PROCESS_TERMINATED", desc="{Fatal System Error} The %hs system process terminated unexpectedly with a status of 0x%08x (0x%08x 0x%08x). The system has been shut down."], + [3221226147] = [id="DS_ATTRIBUTE_TYPE_UNDEFINED", desc="The attribute type specified to the directory service is not defined."], + [3221226516] = [id="VDM_DISALLOWED", desc="%hs is a 16-bit application. You do not have permissions to execute 16-bit applications. Check your permissions with your system administrator."], + [3221225860] = [id="INVALID_DEVICE_STATE", desc="The device is not in a valid state to perform this request."], + [1073741828] = [id="RXACT_STATE_CREATED", desc="This informational level status indicates that a specified registry subtree transaction state did not yet exist and had to be created."], + [3221225994] = [id="ADDRESS_ALREADY_EXISTS", desc="The transport address could not be opened because it already exists."], + [3222929429] = [id="LOG_POLICY_NOT_INSTALLED", desc="The log policy in question was not installed at the time of the request."], + [3221226189] = [id="DS_SENSITIVE_GROUP_VIOLATION", desc="Only an administrator can modify the membership list of an administrative group."], + [3221225996] = [id="CONNECTION_DISCONNECTED", desc="The transport connection is now disconnected."], + [3221225575] = [id="MEMBER_IN_GROUP", desc="The specified user account is already in the specified group account. Also used to indicate a group cannot be deleted because it contains a member."], + [1073741825] = [id="THREAD_WAS_SUSPENDED", desc="{Thread Suspended} A thread termination occurred while the thread was suspended. The thread resumed, and termination proceeded."], + [3223060494] = [id="FLT_CBDQ_DISABLED", desc="The callback data queue has been disabled."], + [3221225548] = [id="BAD_WORKING_SET_LIMIT", desc="An attempt was made to set the working set limit to an invalid value (for example, the minimum greater than maximum)."], + [3221226230] = [id="STRONG_CRYPTO_NOT_SUPPORTED", desc="The other end of the security negotiation requires strong crypto but it is not supported on the local machine."], + [3223519252] = [id="NDIS_INVALID_LENGTH", desc="The length of the buffer submitted for this operation is not valid."], + [3221226002] = [id="TRANSACTION_NO_MATCH", desc="The transport did not find a transaction that matches the specific token."], + [3223192407] = [id="GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN", desc="The specified monitor-capability origin is invalid."], + [3223126018] = [id="MONITOR_UNKNOWN_DESCRIPTOR_FORMAT", desc="This release does not support the format of the obtained monitor descriptor."], + [3223191811] = [id="GRAPHICS_TOO_MANY_REFERENCES", desc="An object being referenced has already reached the maximum reference count and cannot be referenced further."], + [1073741844] = [id="CHECKING_FILE_SYSTEM", desc="Checking file system on %wZ."], + [3221267106] = [id="OFFLOAD_WRITE_FLT_NOT_SUPPORTED", desc="A file system filter on the server has not opted in for Offload Write support."], + [4390913] = [id="nosuchshare", desc="The network name cannot be found."], + [3221225578] = [id="WRONG_PASSWORD", desc="When trying to update a password, this return status indicates that the value provided as the current password is not correct."], + [917505] = [id="res", desc="reserved"], + [3221226532] = [id="INCOMPATIBLE_DRIVER_BLOCKED", desc="%2 has been blocked from loading due to incompatibility with this system. Contact your software vendor for a compatible version of the driver."], + [3221880889] = [id="TS_INCOMPATIBLE_SESSIONS", desc="The target session is incompatible with the current session."], + [3221226026] = [id="DUPLICATE_OBJECTID", desc="The attempt to insert the ID in the index failed because the ID is already in the index."], + [3221225614] = [id="FLOAT_DIVIDE_BY_ZERO", desc="{EXCEPTION} Floating-point division by zero."], + [196673537] = [id="printerdriverinuse", desc="The specified printer driver is currently in use."], + [3223192832] = [id="GRAPHICS_OPM_NOT_SUPPORTED", desc="The driver does not support OPM."], + [3221225721] = [id="INVALID_PARAMETER_11", desc="An invalid parameter was passed to a service or function as the eleventh argument."], + [3223191554] = [id="GRAPHICS_INVALID_DISPLAY_ADAPTER", desc="The specified display adapter handle is invalid."], + [3221356624] = [id="RPC_NT_CALL_CANCELLED", desc="The RPC was canceled."], + [3221225678] = [id="TOO_MANY_SESSIONS", desc="The network BIOS session limit was exceeded."], + [3223193060] = [id="GRAPHICS_INVALID_POINTER", desc="The function failed because an invalid pointer parameter was passed to it. A pointer parameter is invalid if it is null, is not correctly aligned, or points to an invalid address or to a kernel mode address."], + [3222536212] = [id="ACPI_NOT_INITIALIZED", desc="The ACPI subsystem has not been initialized."], + [3223192365] = [id="GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET", desc="The specified descriptor is already in the specified monitor descriptor set."], + [3223453719] = [id="FWP_BUILTIN_OBJECT", desc="The object is built-in and cannot be deleted."], + [3221225845] = [id="UNABLE_TO_LOCK_MEDIA", desc="An attempt to lock the eject media mechanism failed."], + [3221225777] = [id="INVALID_IMAGE_WIN_16", desc="The specified image file did not have the correct format: it appears to be a 16-bit Windows image."], + [16384002] = [id="usempx", desc="Temporarily unable to support Raw, use Mpx mode."], + [3221226064] = [id="INSUFFICIENT_LOGON_INFO", desc="There is insufficient account information to log you on."], + [2147483679] = [id="BEGINNING_OF_MEDIA", desc="The beginning of a tape or partition has been detected."], + [3223192336] = [id="GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE", desc="The specified video present source mode is invalid."], + [3223192392] = [id="GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED", desc="The specified gamma ramp is not supported on the respective VidPN present path."], + [3221225674] = [id="NETWORK_ACCESS_DENIED", desc="Network access is denied."], + [3223060493] = [id="FLT_DUPLICATE_ENTRY", desc="A duplicate handler definition has been provided for an operation."], + [3223192845] = [id="GRAPHICS_PVP_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE", desc="This function failed because the GDI device passed to it did not have any monitors associated with it."], + [1073741852] = [id="WX86_UNSIMULATE", desc="An exception status code that is used by the Win32 x86 emulation subsystem."], + [3221225538] = [id="INVALID_PORT_HANDLE", desc="The type of port handle is invalid for the operation that is requested."], + [3221225791] = [id="LINK_TIMEOUT", desc="{Virtual Circuit Closed} The network transport on your computer has closed a network connection because it had to wait too long for a response from the remote computer."], + [3221226538] = [id="REQUEST_OUT_OF_SEQUENCE", desc="The requested operation is out of order with respect to other operations."], + [3221226042] = [id="CONNECTION_INVALID", desc="An operation was attempted on a nonexistent transport connection."], + [3222601747] = [id="SXS_PROCESS_TERMINATION_REQUESTED", desc="A component used by the isolation facility has requested that the process be terminated."], + [3221225787] = [id="LOCAL_DISCONNECT", desc="{Virtual Circuit Closed} The network transport on your computer has closed a network connection. There may or may not be I/O requests outstanding."], + [3221226030] = [id="FOUND_OUT_OF_SCOPE", desc="The attempt to find the object found an object on the volume that matches by ID; however, it is out of the scope of the handle that is used for the operation."], + [3223191816] = [id="GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED", desc="The current allocation cannot be unswizzled by an aperture."], + [65538] = [id="DBG_CONTINUE", desc="The debugger continued."], + [3221226519] = [id="INVALID_CRUNTIME_PARAMETER", desc="An invalid parameter was passed to a C runtime function."], + [277] = [id="CACHE_PAGE_LOCKED", desc="The cached page was locked during operation."], + [3221226209] = [id="DS_CANT_START", desc="The directory service cannot start."], + [3223388182] = [id="FVE_TPM_DISABLED", desc="The TPM is disabled."], + [3223453745] = [id="FWP_INCOMPATIBLE_DH_GROUP", desc="The Diffie-Hellman group is not compatible with the policy type."], + [3221225569] = [id="PRIVILEGE_NOT_HELD", desc="A required privilege is not held by the client."], + [3221226512] = [id="PARAMETER_QUOTA_EXCEEDED", desc="Data present in one of the parameters is more than the function can operate on."], + [3221226083] = [id="DRIVER_ENTRYPOINT_NOT_FOUND", desc="{Driver Entry Point Not Found} The %hs device driver could not locate the entry point %hs in driver %hs."], + [3221225738] = [id="PROCESS_IS_TERMINATING", desc="An attempt was made to duplicate an object handle into or out of an exiting process."], + [3223192863] = [id="GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS", desc="The DxgkDdiOPMGetCOPPCompatibleInformation, DxgkDdiOPMGetInformation, or DxgkDdiOPMConfigureProtectedOutput function failed. This error is returned only if a protected output has COPP semantics. "], + [1179649] = [id="nofiles", desc="There are no more files."], + [3221226116] = [id="DESTINATION_ELEMENT_FULL", desc="The specified medium changer destination element already contains media."], + [3221225567] = [id="NO_SUCH_LOGON_SESSION", desc="A specified logon session does not exist. It may already have been terminated."], + [3221225656] = [id="PROFILING_NOT_STOPPED", desc="Profiling is not stopped."], + [3223388171] = [id="FVE_VOLUME_NOT_BOUND", desc="The volume is not bound to the system."], + [3221946373] = [id="MUI_INVALID_ULTIMATEFALLBACK_NAME", desc="The RC manifest has and invalid ultimate fallback name."], + [3223192359] = [id="GRAPHICS_PATH_NOT_IN_TOPOLOGY", desc="The specified present path is not in the VidPN's topology."], + [3222470674] = [id="CLUSTER_NODE_UP", desc="The cluster node is up."], + [2147483692] = [id="DLL_MIGHT_BE_INCOMPATIBLE", desc="The application is loading executable code from the module %hs. This is secure but may be incompatible with previous releases of the operating system. An alternative, %hs, is available. Should the application use the secure module %hs?"], + [1073741862] = [id="ARBITRATION_UNHANDLED", desc="The arbiter has deferred arbitration of these resources to its parent."], + [3224764424] = [id="IPSEC_AUTH_FIREWALL_DROP", desc="IPsec dropped an incoming ESP packet in authenticated firewall mode. This drop is benign."], + [2147483690] = [id="REGISTRY_HIVE_RECOVERED", desc="{Registry Hive Recovered} The registry hive (file): %hs was corrupted and it has been recovered. Some data might have been lost."], + [3221880855] = [id="CTX_WINSTATION_BUSY", desc="The requested operation cannot be completed because the terminal connection is currently processing a connect, disconnect, reset, or delete operation."], + [3221225868] = [id="TRUSTED_DOMAIN_FAILURE", desc="The logon request failed because the trust relationship between the primary domain and the trusted domain failed."], + [3221226078] = [id="PLUGPLAY_NO_DEVICE", desc="You have attempted to load a legacy device driver while its device instance had been disabled."], + [3221225632] = [id="MEMORY_NOT_ALLOCATED", desc="An attempt was made to free virtual memory that is not allocated."], + [1075708985] = [id="GRAPHICS_POLLING_TOO_FREQUENTLY", desc="The display adapter is being polled for children too frequently at the same polling level."], + [3222929437] = [id="LOG_FULL", desc="The log space is exhausted."], + [3222929447] = [id="LOG_CONTAINER_READ_FAILED", desc="The log service encountered an error when attempting to read from a log container."], + [197197825] = [id="printerhasjobsqueued", desc="The requested operation is not allowed when there are jobs queued to the printer."], + [3223519247] = [id="NDIS_INVALID_PACKET", desc="An attempt was made to send an invalid packet on a network interface."], + [3223527426] = [id="NDIS_DOT11_POWER_STATE_INVALID", desc="The wireless LAN interface is power down and does not support the requested operation."], + [3223192373] = [id="GRAPHICS_NO_VIDPNMGR", desc="The particular display adapter does not have an associated VidPN manager."], + [3221225795] = [id="MISSING_SYSTEMFILE", desc="{Missing System File} The required system file %hs is bad or missing."], + [3221225772] = [id="PAGEFILE_QUOTA_EXCEEDED", desc="The page file quota was exceeded."], + [3221225888] = [id="SECURITY_STREAM_IS_INCONSISTENT", desc="The security stream for the given volume is in an inconsistent state. Please run CHKDSK on the volume."], + [3222929410] = [id="LOG_SECTOR_PARITY_INVALID", desc="The log service encountered a log sector with invalid block parity."], + [3221226150] = [id="DS_UNAVAILABLE", desc="The directory service is unavailable."], + [3221225735] = [id="FILES_OPEN", desc="The user attempted to force close the files on a redirected drive, but there were opened files on the drive, and the user did not specify a sufficient level of force."], + [3221226009] = [id="DEBUG_ATTACH_FAILED", desc="{Unexpected Failure in DebugActiveProcess} An unexpected failure occurred while processing a DebugActiveProcess API request. You may choose OK to terminate the process, or Cancel to ignore the error."], + [3221225570] = [id="INVALID_ACCOUNT_NAME", desc="The name provided is not a properly formed account name."], + [3221225677] = [id="TOO_MANY_NAMES", desc="The name limit for the network adapter card of the local computer was exceeded."], + [3221226115] = [id="SOURCE_ELEMENT_EMPTY", desc="The specified medium changer source element contains no media."], + [4587522] = [id="badpid", desc="reserved"], + [3221226534] = [id="COMPRESSION_DISABLED", desc="Compression is disabled for this volume."], + [3221266449] = [id="ND_QUEUE_OVERFLOW", desc="The neighbor discovery queue overflowed."], + [3221225726] = [id="NO_SUCH_PACKAGE", desc="A specified authentication package is unknown."], + [3221226380] = [id="PKINIT_CLIENT_FAILURE", desc="The smart card certificate used for authentication was not trusted. Contact your system administrator."], + [3221880886] = [id="CTX_SHADOW_NOT_RUNNING", desc="Remote control could not be terminated because the specified session is not currently being remotely controlled."], + [3221225886] = [id="INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING", desc="Short name settings may not be changed on this volume due to the global registry setting."], + [1048577] = [id="remcd", desc="The directory cannot be removed."], + [3221226163] = [id="CANT_ENABLE_DENY_ONLY", desc="A group marked "use for deny only" cannot be enabled."], + [3221225784] = [id="ORDINAL_NOT_FOUND", desc="{Ordinal Not Found} The ordinal %ld could not be located in the dynamic link library %hs."], + [263] = [id="SOME_NOT_MAPPED", desc="Some of the information to be translated has not been translated."], + [3221226089] = [id="ILLEGAL_DLL_RELOCATION", desc="{Illegal System DLL Relocation} The system DLL %hs was relocated in memory. The application will not run properly. The relocation occurred because the DLL %hs occupied an address range that is reserved for Windows system DLLs. The vendor supplying the DLL should be contacted for a new DLL."], + [3223192398] = [id="GRAPHICS_INVALID_PATH_CONTENT_TYPE", desc="The specified VidPN present path content type is invalid."], + [3223388200] = [id="FVE_CONV_RECOVERY_FAILED", desc="Bitlocker Drive Encryption failed to recover from aborted conversion. This could be due to either all conversion logs being corrupted or the media being write-protected."], + [2147483662] = [id="DEVICE_PAPER_EMPTY", desc="{Out of Paper} The printer is out of paper."], + [281] = [id="RESOURCE_REQUIREMENTS_CHANGED", desc="The device has succeeded a query-stop and its resource requirements have changed."], + [3221226592] = [id="NO_RANGES_PROCESSED", desc="No ranges for the specified operation were able to be processed."], + [3221226325] = [id="DS_VERSION_CHECK_FAILURE", desc="This version of Windows is not compatible with the behavior version of the directory forest, domain, or domain controller."], + [3221225499] = [id="UNABLE_TO_DELETE_SECTION", desc="The specified section cannot be deleted."], + [3221225714] = [id="INVALID_PARAMETER_4", desc="An invalid parameter was passed to a service or function as the fourth argument."], + [3221225814] = [id="TOO_MANY_SECRETS", desc="The maximum number of secrets that may be stored in a single system was exceeded. The length and number of secrets is limited to satisfy U.S. State Department export restrictions."], + [3221226186] = [id="TRANSPORT_FULL", desc="The transport element of the medium changer contains media, which is causing the operation to fail."], + [3223060484] = [id="FLT_DISALLOW_FAST_IO", desc="This is an internal error code used by the filter manager to determine if a fast I/O operation should be forced down the input/output request packet (IRP) path. Minifilters should never return this value."], + [3221225565] = [id="CANT_DISABLE_MANDATORY", desc="A mandatory group may not be disabled."], + [3221226086] = [id="QUOTA_LIST_INCONSISTENT", desc="The specified quota list is internally inconsistent with its descriptor."], + [3221225616] = [id="FLOAT_INVALID_OPERATION", desc="{EXCEPTION} Floating-point invalid operation."], + [3223192354] = [id="GRAPHICS_INVALID_MONITOR_SOURCE_MODE", desc="The specified monitor source mode is invalid."], + [1441795] = [id="badcmd", desc="The device does not recognize the command."], + [3221266432] = [id="INVALID_SIGNATURE", desc="The cryptographic signature is invalid."], + [3221227784] = [id="BAD_MCFG_TABLE", desc="The resources required for this device conflict with the MCFG table."], + [146931714] = [id="passwordExpired", desc="The password of this user has expired."], + [3221225577] = [id="LAST_ADMIN", desc="Indicates the requested operation would disable or delete the last remaining administration account. This is not allowed to prevent creating a situation in which the system cannot be administrated."], + [3221226351] = [id="INVALID_IMPORT_OF_NON_DLL", desc="A dynamic link library (DLL) referenced a module that was neither a DLL nor the process's executable image."], + [3222536203] = [id="ACPI_INCORRECT_ARGUMENT_COUNT", desc="An incorrect number of arguments was specified."], + [1073741857] = [id="WX86_EXCEPTION_LASTCHANCE", desc="An exception status code that is used by the Win32 x86 emulation subsystem."], + [3223191558] = [id="GRAPHICS_PRESENT_OCCLUDED", desc="Nothing to present due to desktop occlusion."], + [3221226382] = [id="DRIVER_FAILED_PRIOR_UNLOAD", desc="The driver could not be loaded because a previous version of the driver is still in memory."], + [3223192322] = [id="GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED", desc="The specified VidPN topology is valid but is not currently supported by the display adapter due to allocation of its resources."], + [3222863935] = [id="TRANSACTIONAL_OPEN_NOT_ALLOWED", desc="This object is not allowed to be opened in a transaction."], + [3221226122] = [id="ENCRYPTION_FAILED", desc="The file encryption attempt failed."], + [1073807367] = [id="DBG_RIPEXCEPTION", desc="Debugger received a RIP exception."], + [3223060499] = [id="FLT_FILTER_NOT_FOUND", desc="The system could not find the filter specified."], + [3221226068] = [id="IP_ADDRESS_CONFLICT1", desc="There is an IP address conflict with another system on the network."], + [3222470658] = [id="CLUSTER_NODE_EXISTS", desc="The cluster node already exists."], + [3221226194] = [id="PNP_REBOOT_REQUIRED", desc="The device will not start without a reboot."], + [3221225486] = [id="NO_SUCH_DEVICE", desc="A device that does not exist was specified."], + [3221225796] = [id="UNHANDLED_EXCEPTION", desc="{Application Error} The exception %s (0x%08lx) occurred in the application at location 0x%08lx."], + [3222601729] = [id="SXS_SECTION_NOT_FOUND", desc="The requested section is not present in the activation context."], + [3223193057] = [id="GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME", desc="This function cannot find an actual GDI display device that corresponds to the specified GDI display device name."], + [3222536195] = [id="ACPI_ASSERT_FAILED", desc="An inconsistent state has occurred."], + [2147483688] = [id="PLUGPLAY_QUERY_VETOED", desc="The Plug and Play query operation was not successful."], + [3222601750] = [id="SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE", desc="The value of an attribute in an identity is not within the legal range."], + [3223388193] = [id="FVE_REBOOT_REQUIRED", desc="No action was taken because a system restart is required."], + [3221226140] = [id="VOLUME_NOT_UPGRADED", desc="The volume must be upgraded to enable this feature."], + [3223453731] = [id="FWP_NULL_DISPLAY_NAME", desc="The displayData.name field cannot be null."], + [3223519241] = [id="NDIS_MULTICAST_FULL", desc="The multicast list on the network interface is full."], + [3223192358] = [id="GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES", desc="The number of video present targets must be greater than or equal to the number of video present sources."], + [3221226087] = [id="FILE_IS_OFFLINE", desc="The specified file has been relocated to offline storage."], + [3222601733] = [id="SXS_MANIFEST_FORMAT_ERROR", desc="The manifest file does not begin with the required tag and format information."], + [3221225889] = [id="INVALID_LOCK_RANGE", desc="A requested file lock operation cannot be processed due to an invalid byte range."], + [3221226144] = [id="SERVER_SID_MISMATCH", desc="The server process is running under a SID that is different from the SID that is required by client."], + [3223192629] = [id="GRAPHICS_CHAINLINKS_NOT_POWERED_ON", desc="An attempt was made to turn on a lead link display adapter when the chain links were turned off."], + [3221225875] = [id="ACCOUNT_EXPIRED", desc="The user account has expired."], + [197066753] = [id="invalidprintmonitor", desc="The specified print monitor does not have the required functions."], + [196935681] = [id="printprocessoralreadyinstalled", desc="The specified print processor has already been installed."], + [3221225884] = [id="FS_DRIVER_REQUIRED", desc="A volume has been accessed for which a file system driver is required that has not yet been loaded."], + [3221226546] = [id="BEYOND_VDL", desc="The operation was attempted beyond the valid data length of the file."], + [3223192361] = [id="GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET", desc="The display adapter must have at least one video present target."], + [3221225767] = [id="MEMBERS_PRIMARY_GROUP", desc="Indicates a member cannot be removed from a group because the group is currently the member's primary group."], + [3221225782] = [id="OPEN_FAILED", desc="The NtCreateFile API failed. This error should never be returned to an application; it is a place holder for the Windows LAN Manager Redirector to use in its internal error-mapping routines."], + [196870145] = [id="noaddjob", desc="An AddJob call was not issued."], + [1073741843] = [id="EVENT_PENDING", desc="{TDI Event Pending} The TDI indication has entered the pending state."], + [3221226251] = [id="CSS_RESETS_EXHAUSTED", desc="Copy protection error-The region setting of the drive may be permanent."], + [3221226070] = [id="REGISTRY_QUOTA_LIMIT", desc="{Low On Registry Space} The system has reached the maximum size that is allowed for the system part of the registry. Additional storage requests will be ignored."], + [3221225731] = [id="NOT_A_DIRECTORY", desc="A requested opened file is not a directory."], + [3223388170] = [id="FVE_BAD_DATA", desc="The data supplied is malformed."], + [3222863962] = [id="OPERATION_NOT_SUPPORTED_IN_TRANSACTION", desc="This operation cannot be performed in a transaction."], + [3222470675] = [id="CLUSTER_NODE_PAUSED", desc="The cluster node is paused."], + [3221225609] = [id="RESOURCE_DATA_NOT_FOUND", desc="Indicates the specified image file did not contain a resource section."], + [3223453718] = [id="FWP_LIFETIME_MISMATCH", desc="The call tried to associate two objects with incompatible lifetimes."], + [3221227284] = [id="CERTIFICATE_MAPPING_NOT_UNIQUE", desc="The client certificate account mapping is not unique."], + [2147483684] = [id="SERVER_HAS_OPEN_HANDLES", desc="The server is in use and cannot be unloaded."], + [3221225665] = [id="TOO_MANY_COMMANDS", desc="The network BIOS command limit has been reached."], + [3221225766] = [id="SPECIAL_USER", desc="The operation requested may not be performed on the specified user because it is a built-in special user."], + [3221226335] = [id="NOT_SAFE_MODE_DRIVER", desc="The driver was not loaded because the system is starting in safe mode."], + [3221225751] = [id="NO_LDT", desc="Indicates that an attempt was made to change the size of the LDT for a process that has no LDT."], + [3223192357] = [id="GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION", desc="The system failed to determine a mode that is supported by both the display adapter and the monitor connected to it."], + [5767170] = [id="timeout", desc="Operation timed out."], + [3223453710] = [id="FWP_TXN_IN_PROGRESS", desc="The call is not allowed from within an explicit transaction."], + [3221225528] = [id="DEVICE_ALREADY_ATTACHED", desc="An attempt was made to attach to a device that was already attached to another device."], + [3222470667] = [id="CLUSTER_INVALID_NETWORK_PROVIDER", desc="The cluster network provider is not valid."], + [3221946369] = [id="MUI_FILE_NOT_FOUND", desc="The resource loader failed to find an MUI file."], + [2147483661] = [id="PARTIAL_COPY", desc="Because of protection conflicts, not all the requested bytes could be copied."], + [3221227010] = [id="FAIL_FAST_EXCEPTION", desc="A fail fast exception occurred. Exception handlers will not be invoked and the process will be terminated immediately."], + [3221226597] = [id="INVALID_TOKEN", desc="The token representing the data is invalid or expired."], + [3223453742] = [id="FWP_CONTEXT_INCOMPATIBLE_WITH_LAYER", desc="The raw context or the provider context is not compatible with the layer."], + [3222601757] = [id="SXS_IDENTITIES_DIFFERENT", desc="The component identities are different."], + [3221226235] = [id="KDC_INVALID_REQUEST", desc="An invalid request was sent to the KDC."], + [3221226232] = [id="NO_PA_DATA", desc="Expected to find PA data for a hint of what etype to use, but it was not found."], + [3222863936] = [id="TRANSACTED_MAPPING_UNSUPPORTED_REMOTE", desc="Memory mapping (creating a mapped section) a remote file under a transaction is not supported."], + [3221227271] = [id="LPC_REQUESTS_NOT_ALLOWED", desc="The ALPC port does not accept new request messages."], + [3221226199] = [id="DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER", desc="A global group cannot have a local group as a member."], + [3221880883] = [id="CTX_CLIENT_LICENSE_NOT_SET", desc="Your request to connect to this terminal server has been rejected. Your terminal server client license number has not been entered for this copy of the terminal client. Contact your system administrator for help in entering a valid, unique license number for this terminal server client. Click OK to continue."], + [1073741824] = [id="OBJECT_NAME_EXISTS", desc="{Object Exists} An attempt was made to create an object but the object name already exists."], + [3221226224] = [id="OBJECTID_NOT_FOUND", desc="An object ID was not found in the file."], + [3221226577] = [id="AMBIGUOUS_SYSTEM_DEVICE", desc="The requested system device cannot be identified due to multiple indistinguishable devices potentially matching the identification criteria."], + [3221225774] = [id="INVALID_IMAGE_LE_FORMAT", desc="The specified image file did not have the correct format: it appears to be LE format."], + [272] = [id="PAGE_FAULT_TRANSITION", desc="The page fault was a transition fault."], + [3223192370] = [id="GRAPHICS_TARGET_ID_MUST_BE_UNIQUE", desc="The ID of the specified video present target is being used by another target in the set."], + [3223191563] = [id="GRAPHICS_PRESENT_REDIRECTION_DISABLED", desc="Present redirection is disabled (desktop windowing management subsystem is off)."], + [3221356615] = [id="RPC_NT_FP_UNDERFLOW", desc="A floating point underflow occurred at the RPC server."], + [1073741870] = [id="MESSAGE_RETRIEVED", desc="The ALPC message being canceled has already been retrieved from the queue on the other side."], + [3221356601] = [id="RPC_NT_INVALID_VERS_OPTION", desc="The version option is invalid."], + [3221226164] = [id="FLOAT_MULTIPLE_FAULTS", desc="{EXCEPTION} Multiple floating-point faults."], + [3221226073] = [id="LICENSE_QUOTA_EXCEEDED", desc="The service being accessed is licensed for a particular number of connections. No more connections can be made to the service at this time because the service has already accepted the maximum number of connections."], + [3222470668] = [id="CLUSTER_NODE_DOWN", desc="The cluster node is down."], + [524289] = [id="nomem", desc="Not enough storage is available to process this command."], + [3221225890] = [id="INVALID_ACE_CONDITION", desc="The specified access control entry (ACE) contains an invalid condition."], + [3223192858] = [id="GRAPHICS_OPM_PROTECTED_OUTPUT_NO_LONGER_EXISTS", desc="The operating system asynchronously destroyed this OPM-protected output because the operating system state changed. This error typically occurs because the monitor PDO associated with this protected output was removed or stopped, the protected output's session became a nonconsole session, or the protected output's desktop became inactive."], + [3221226128] = [id="NO_USER_KEYS", desc="There are no EFS keys defined for the user."], + [3221225856] = [id="KEY_HAS_CHILDREN", desc="An attempt was made to create a symbolic link in a registry key that already has subkeys or values."], + [3223126019] = [id="MONITOR_INVALID_DESCRIPTOR_CHECKSUM", desc="The checksum of the obtained monitor descriptor is invalid."], + [3221225623] = [id="TOO_MANY_PAGING_FILES", desc="An attempt was made to install more paging files than the system supports."], + [3221227286] = [id="INVALID_IDN_NORMALIZATION", desc="Indicates that the specified string is not valid for IDN normalization."], + [3222863945] = [id="SPARSE_NOT_ALLOWED_IN_TRANSACTION", desc="The sparse operation could not be completed because a transaction is active on the file."], + [3221225490] = [id="WRONG_VOLUME", desc="{Wrong Volume} The wrong volume is in the drive. Insert volume %hs into drive %hs."], + [3221356600] = [id="RPC_NT_INCOMPLETE_NAME", desc="The entry name is incomplete."], + [3221356605] = [id="RPC_NT_ENTRY_ALREADY_EXISTS", desc="The entry already exists."], + [3221225582] = [id="ACCOUNT_RESTRICTION", desc="Indicates a referenced user name and authentication information are valid, but some user account restriction has prevented successful authentication (such as time-of-day restrictions)."], + [3221226151] = [id="DS_NO_RIDS_ALLOCATED", desc="The directory service was unable to allocate a relative identifier."], + [3221226211] = [id="SAM_INIT_FAILURE", desc="The Security Accounts Manager initialization failed because of the following error: %hs Error Status: 0x%x. Click OK to shut down this system and restart in Safe Mode. Check the event log for more detailed information."], + [3221225769] = [id="TOO_MANY_THREADS", desc="Indicates a process has too many threads to perform the requested action. For example, assignment of a primary token may only be performed when a process has zero or one threads."], + [3221225506] = [id="ACCESS_DENIED", desc="{Access Denied} A process has requested access to an object but has not been granted those access rights."], + [2147483680] = [id="MEDIA_CHECK", desc="{Media Changed} The media may have changed."], + [3221227288] = [id="ALREADY_REGISTERED", desc="The provided callback is already registered."], + [192] = [id="USER_APC", desc="A user-mode APC was delivered before the given Interval expired."], + [3223060504] = [id="FLT_NAME_CACHE_MISS", desc="The name requested was not found in the Filter Manager name cache and could not be retrieved from the file system."], + [3224764423] = [id="IPSEC_CLEAR_TEXT_DROP", desc="IPsec dropped a clear text packet."], + [3221227268] = [id="RECURSIVE_DISPATCH", desc="Invalid recursive dispatch attempt."], + [3221880879] = [id="CTX_WD_NOT_FOUND", desc="The terminal connection driver %1 was not found in the system path."], + [3221226225] = [id="NO_IP_ADDRESSES", desc="Unable to accomplish the requested task because the local machine does not have any IP addresses."], + [3221225867] = [id="NO_TRUST_SAM_ACCOUNT", desc="The SAM database on the Windows Server does not have a computer account for this workstation trust relationship."], + [3211266] = [id="qfull", desc="The print queue is full."], + [3223191828] = [id="GRAPHICS_INVALID_ALLOCATION_HANDLE", desc="An invalid allocation handle is being referenced."], + [3221880868] = [id="CTX_NOT_CONSOLE", desc="The requested operation can be performed only on the system console. This is most often the result of a driver or system DLL requiring direct console access."], + [3221225518] = [id="INVALID_PORT_ATTRIBUTES", desc="Invalid object attributes specified to NtCreatePort or invalid port attributes specified to NtConnectPort."], + [3221267105] = [id="OFFLOAD_READ_FLT_NOT_SUPPORTED", desc="A file system filter on the server has not opted in for Offload Read support."], + [3223388161] = [id="FVE_NOT_ENCRYPTED", desc="The volume is fully decrypted and no key is available."], + [3221225799] = [id="NO_PAGEFILE", desc="{No Paging File Specified} No paging file was specified in the system configuration."], + [3222863947] = [id="FLOATED_SECTION", desc="I/O was attempted on a section object that has been floated as a result of a transaction ending. There is no valid data."], + [2149122097] = [id="CANT_RECOVER_WITH_HANDLE_OPEN", desc="The file cannot be recovered because there is a handle still open on it."], + [16515074] = [id="contmpx", desc="Continue in MPX mode."], + [5373954] = [id="msgoff", desc="Not receiving messages."], + [3223519276] = [id="NDIS_UNSUPPORTED_REVISION", desc="The revision number specified in the structure is not supported."], + [3221356591] = [id="RPC_NT_BINDING_HAS_NO_AUTH", desc="The binding does not contain any authentication information."], + [3221880842] = [id="CTX_RESPONSE_ERROR", desc="The modem did not accept the command sent to it. Verify that the configured modem name matches the attached modem."], + [3225026580] = [id="VIRTDISK_PROVIDER_NOT_FOUND", desc="A virtual disk support provider for the specified file was not found."], + [3223192378] = [id="GRAPHICS_INVALID_PRIMARYSURFACE_SIZE", desc="The specified primary surface size is invalid."], + [3221226227] = [id="CRYPTO_SYSTEM_INVALID", desc="The crypto system or checksum function is invalid because a required function is unavailable."], + [3223060492] = [id="FLT_MUST_BE_NONPAGED_POOL", desc="A nonpaged pool must be used for this type of context."], + [3222929428] = [id="LOG_POLICY_ALREADY_INSTALLED", desc="The log policy could not be installed because a policy of the same type is already present."], + [3221225591] = [id="INVALID_ACL", desc="Indicates the ACL structure is not valid."], + [3222863954] = [id="TRANSACTIONMANAGER_NOT_ONLINE", desc="The specified resource manager was unable to create an enlistment because its associated transaction manager is not online."], + [3221226099] = [id="NO_MORE_MATCHES", desc="There are no more matches for the current index enumeration."], + [3222536207] = [id="ACPI_INVALID_DATA", desc="Invalid data for the target was specified."], + [262146] = [id="access", desc="The client does not have the necessary access rights to perform the requested function."], + [117964801] = [id="invalidjobpriority", desc="The specified priority is invalid."], + [3223453733] = [id="FWP_INVALID_WEIGHT", desc="The filter weight is not valid."], + [2147483663] = [id="DEVICE_POWERED_OFF", desc="{Device Power Is Off} The printer power has been turned off."], + [3221226142] = [id="REMOTE_STORAGE_MEDIA_ERROR", desc="The remote storage service encountered a media error."], + [3221226328] = [id="DS_AG_CANT_HAVE_UNIVERSAL_MEMBER", desc="An account group cannot have a universal group as a member."], + [3221226326] = [id="AUDITING_DISABLED", desc="The specified event is currently not being audited."], + [3221226183] = [id="WMI_SET_FAILURE", desc="The WMI data item or data block could not be changed."], + [3221946372] = [id="MUI_INVALID_LOCALE_NAME", desc="The RC manifest has an invalid culture name."], + [3223388192] = [id="FVE_OLD_METADATA_COPY", desc="The backup copy of the metadata is out of date."], + [3223192348] = [id="GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE", desc="The specified monitor frequency range is invalid."], + [3223192836] = [id="GRAPHICS_OPM_PARAMETER_ARRAY_TOO_SMALL", desc="An array passed to a function cannot hold all of the data that the function wants to put in it."], + [262] = [id="NOT_ALL_ASSIGNED", desc="Indicates not all privileges or groups that are referenced are assigned to the caller. This allows, for example, all privileges to be disabled without having to know exactly which privileges are assigned."], + [3223191814] = [id="GRAPHICS_ALLOCATION_INVALID", desc="The allocation is invalid."], + [118292481] = [id="invalidenvironment", desc="The Environment specified is invalid."], + [3223192864] = [id="GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED", desc="The DxgkDdiOPMGetCOPPCompatibleInformation and DxgkDdiOPMConfigureProtectedOutput functions return this error if the display driver does not support the DXGKMDT_OPM_GET_ACP_AND_CGMSA_SIGNALING and DXGKMDT_OPM_SET_ACP_AND_CGMSA_SIGNALING GUIDs."], + [3221227522] = [id="DISK_QUOTA_EXCEEDED", desc="An operation failed because the storage quota was exceeded."], + [3221226510] = [id="KDC_CERT_EXPIRED", desc="The domain controller certificate used for smart card logon has expired. Contact your system administrator with the contents of your system event log."], + [3221266688] = [id="HASH_NOT_SUPPORTED", desc="Hash generation for the specified version and hash type is not enabled on server."], + [3222929445] = [id="LOG_CLIENT_NOT_REGISTERED", desc="A log client has not been registered on the stream."], + [3221356581] = [id="RPC_NT_INVALID_NAME_SYNTAX", desc="The name syntax is invalid."], + [3223453954] = [id="FWP_INJECT_HANDLE_STALE", desc="The injection handle is stale."], + [3223192405] = [id="GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT", desc="The specified primary surface has a different private-format attribute than the current primary surface."], + [3221226097] = [id="VALIDATE_CONTINUE", desc="The validation process needs to continue on to the next step."], + [3221225537] = [id="PORT_CONNECTION_REFUSED", desc="The NtConnectPort request is refused."], + [3221880888] = [id="CTX_SECURITY_LAYER_ERROR", desc="The terminal server security layer detected an error in the protocol stream and has disconnected the client."], + [3222863930] = [id="INDOUBT_TRANSACTIONS_EXIST", desc="The operation would leave a transactional resource manager in an inconsistent state and is therefore not allowed."], + [3221225593] = [id="INVALID_SECURITY_DESCR", desc="Indicates the SECURITY_DESCRIPTOR structure is not valid."], + [3221225554] = [id="NO_EAS_ON_FILE", desc="The file for which EAs were requested has no EAs."], + [3223453711] = [id="FWP_TXN_ABORTED", desc="The explicit transaction has been forcibly canceled."], + [3221225617] = [id="FLOAT_OVERFLOW", desc="{EXCEPTION} Floating-point overflow."], + [3221225636] = [id="INVALID_GROUP_ATTRIBUTES", desc="The specified attributes are invalid or are incompatible with the attributes for the group as a whole."], + [3221225657] = [id="COULD_NOT_INTERPRET", desc="The passed ACL did not contain the minimum required information."], + [196804609] = [id="nostartdoc", desc="A StartDocPrinter call was not issued."], + [3222929431] = [id="LOG_POLICY_CONFLICT", desc="A policy on the log in question prevented the operation from completing."], + [3221356627] = [id="RPC_NT_UNSUPPORTED_AUTHN_LEVEL", desc="The requested authentication level is not supported."], + [3221266565] = [id="WRONG_COMPARTMENT", desc="This indicates that the caller made the connection request in the wrong routing compartment."], + [3221356613] = [id="RPC_NT_ADDRESS_ERROR", desc="An addressing error occurred in the RPC server."], + [3221226045] = [id="HOST_UNREACHABLE", desc="The remote system is not reachable by the transport."], + [1966083] = [id="read", desc="The system cannot read from the specified device."], + [3221225887] = [id="SHORT_NAMES_NOT_ENABLED_ON_VOLUME", desc="Short names are not enabled on this volume."], + [3221225876] = [id="POSSIBLE_DEADLOCK", desc="{EXCEPTION} Possible deadlock condition."], + [3221225512] = [id="BAD_STACK", desc="An invalid or unaligned stack was encountered during an unwind operation."], + [196739073] = [id="spoolfilenotfound", desc="The spool file was not found."], + [3222929432] = [id="LOG_PINNED_ARCHIVE_TAIL", desc="The log space cannot be reclaimed because the log is pinned by the archive tail."], + [3223519266] = [id="NDIS_INVALID_ADDRESS", desc="The network address used in the request is invalid."], + [3223126024] = [id="MONITOR_NO_MORE_DESCRIPTOR_DATA", desc="There is no monitor descriptor data at the specified (offset or size) region."], + [3221880856] = [id="CTX_BAD_VIDEO_MODE", desc="An attempt has been made to connect to a session whose video mode is not supported by the current client."], + [3223191555] = [id="GRAPHICS_ADAPTER_WAS_RESET", desc="The specified display adapter and all of its state have been reset."], + [291] = [id="PROCESS_NOT_IN_JOB", desc="The specified process is not part of a job."], + [1075708753] = [id="GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED", desc="The specified content transformation is not pinned on the specified VidPN present path."], + [3221226223] = [id="NO_TGT_REPLY", desc="The client is trying to negotiate a context and the server requires user-to-user but did not send a TGT reply."], + [1075708702] = [id="GRAPHICS_NO_PREFERRED_MODE", desc="The specified mode set does not specify a preference for one of its modes."], + [3221225592] = [id="INVALID_SID", desc="Indicates the SID structure is not valid."], + [3221225536] = [id="SECTION_TOO_BIG", desc="{Section Too Large} The specified section is too big to map the file."], + [3221880841] = [id="CTX_INVALID_MODEMNAME", desc="The modem (%1) was not found in the MODEM.INF file."], + [3222601762] = [id="SXS_MANIFEST_TOO_BIG", desc="The size of the manifest exceeds the maximum allowed."], + [3222863934] = [id="EFS_NOT_ALLOWED_IN_TRANSACTION", desc="The encryption operation could not be completed because a transaction is active."], + [3222601742] = [id="SXS_PROCESS_DEFAULT_ALREADY_SET", desc="An attempt to set the process default activation context failed because the process default activation context was already set."], + [3221226126] = [id="NO_EFS", desc="The required encryption driver is not loaded for this system."], + [3223191829] = [id="GRAPHICS_WRONG_ALLOCATION_DEVICE", desc="The allocation being referenced does not belong to the current device."], + [274] = [id="PAGE_FAULT_COPY_ON_WRITE", desc="The page fault was a demand zero fault."], + [3221226075] = [id="PWD_TOO_RECENT", desc="The policy of your user account does not allow you to change passwords too frequently. This is done to prevent users from changing back to a familiar, but potentially discovered, password. If you feel your password has been compromised, contact your administrator immediately to have a new one assigned."], + [3221225675] = [id="BAD_DEVICE_TYPE", desc="{Incorrect Network Resource Type} The specified device type (LPT, for example) conflicts with the actual device type on the remote resource."], + [3223192968] = [id="GRAPHICS_MCA_INTERNAL_ERROR", desc="An internal error caused an operation to fail."], + [1073741855] = [id="WX86_BREAKPOINT", desc="An exception status code that is used by the Win32 x86 emulation subsystem."], + [2147483682] = [id="NO_DATA_DETECTED", desc="During a tape access, the end of the data written is reached."], + [3223453740] = [id="FWP_ACTION_INCOMPATIBLE_WITH_LAYER", desc="The action type is not compatible with the layer."], + [1900547] = [id="write", desc="The system cannot write to the specified device."], + [3221356552] = [id="RPC_NT_INVALID_NET_ADDR", desc="The network address is invalid."], + [3221226079] = [id="UNSUPPORTED_COMPRESSION", desc="The specified compression format is unsupported."], + [3223453714] = [id="FWP_TIMEOUT", desc="The call timed out while waiting to acquire the transaction lock."], + [3221356577] = [id="RPC_NT_UNSUPPORTED_TYPE", desc="The type UUID is not supported."], + [3221226240] = [id="NOT_SUPPORTED_ON_SBS", desc="This operation is not supported on a computer running Windows Server 2003 for Small Business Server."], + [3221227778] = [id="CHECKOUT_REQUIRED", desc="The file must be checked out before saving changes."], + [3222536210] = [id="ACPI_ACQUIRE_GLOBAL_LOCK", desc="The global system lock could not be acquired."], + [3221225557] = [id="LOCK_NOT_GRANTED", desc="A requested file lock cannot be granted due to other existing locks."], + [3221227293] = [id="CALLBACK_RETURNED_TRANSACTION", desc="A threadpool worker thread entered a callback, which left transaction state."], + [2148728837] = [id="CLUSTER_NODE_ALREADY_MEMBER", desc="The cluster node is already a member of the cluster."], + [3221225498] = [id="UNABLE_TO_FREE_VM", desc="The virtual memory cannot be freed."], + [3221226129] = [id="FILE_NOT_ENCRYPTED", desc="The specified file is not encrypted."], + [3223519274] = [id="NDIS_PAUSED", desc="The offload operation on the network interface has been paused."], + [275] = [id="PAGE_FAULT_GUARD_PAGE", desc="The page fault was a demand zero fault."], + [3223192966] = [id="GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE", desc="A function call failed because a monitor returned an invalid timing status byte when the operating system used the DDC/CI get timing report and timing message command to get a timing report from a monitor."], + [3221225500] = [id="INVALID_SYSTEM_SERVICE", desc="An invalid system service was specified in a system service call."], + [3223192400] = [id="GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS", desc="Only one unassigned mode set can exist at any one time for a particular VidPN source or target."], + [3221226096] = [id="WX86_FLOAT_STACK_CHECK", desc="Win32 x86 emulation subsystem floating-point stack check."], + [3222929424] = [id="LOG_RESERVATION_INVALID", desc="The log service encountered an attempt to erroneously allocate or dispose reservation space."], + [3221880866] = [id="CTX_GRAPHICS_INVALID", desc="The application attempted to enable DOS graphics mode. DOS graphics mode is not supported."], + [3223126023] = [id="MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK", desc="The provided monitor descriptor block is either corrupted or does not contain the monitor's user-friendly name."], + [3221266562] = [id="LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR", desc="{Delayed Write Failed} Windows was unable to save all the data for the file %hs; the data has been lost. This error may be caused if the device has been removed or the media is write-protected."], + [3222929413] = [id="LOG_INVALID_RANGE", desc="The log service encountered an attempt to access data outside the active log range."], + [3224764417] = [id="IPSEC_BAD_SPI", desc="The SPI in the packet does not match a valid IPsec SA."], + [3223192635] = [id="GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED", desc="An operation is being attempted that requires the display adapter to be in a quiescent state."], + [3221225527] = [id="PORT_DISCONNECTED", desc="An attempt was made to send a message to a disconnected communication port."], + [2149318657] = [id="FLT_BUFFER_TOO_SMALL", desc="{Buffer too small} The buffer is too small to contain the entry. No information has been written to the buffer."], + [3221226370] = [id="SMARTCARD_CARD_NOT_AUTHENTICATED", desc="No PIN was presented to the smart card."], + [3221225580] = [id="PASSWORD_RESTRICTION", desc="When trying to update a password, this status indicates that some password update rule has been violated. For example, the password may not meet length criteria."], + [260] = [id="REPARSE", desc="A reparse should be performed by the Object Manager because the name of the file resulted in a symbolic link."], + [3221356594] = [id="RPC_NT_INVALID_AUTH_IDENTITY", desc="The security context is invalid."], + [3223191809] = [id="GRAPHICS_CANT_LOCK_MEMORY", desc="Could not probe and lock the underlying memory of an allocation."], + [3223453709] = [id="FWP_NO_TXN_IN_PROGRESS", desc="The call must be made from within an explicit transaction."], + [3223192346] = [id="GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY", desc="The miniport has no recommendation for augmenting the specified VidPN's topology."], + [3221225670] = [id="PRINT_QUEUE_FULL", desc="The print queue is full."], + [327682] = [id="invnid", desc="The TID specified was invalid."], + [3222536214] = [id="ACPI_MUTEX_NOT_OWNED", desc="The mutex is not currently owned."], + [3221356588] = [id="RPC_NT_STRING_TOO_LONG", desc="The string is too long."], + [3223453744] = [id="FWP_INCOMPATIBLE_AUTH_METHOD", desc="The authentication method is not compatible with the policy type."], + [3221225723] = [id="REDIRECTOR_NOT_STARTED", desc="An attempt was made to access a network file, but the network software was not yet started."], + [3222601746] = [id="SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY", desc="The activation context of the system default assembly could not be generated."], + [1073741860] = [id="NO_YIELD_PERFORMED", desc="A yield execution was performed and no thread was available to run."], + [3222470673] = [id="CLUSTER_NO_NET_ADAPTERS", desc="No network adapters are available."], + [3221226504] = [id="USER2USER_REQUIRED", desc="Kerberos sub-protocol User2User is required."], + [3222601763] = [id="SXS_SETTING_NOT_REGISTERED", desc="The setting is not registered."], + [3223388168] = [id="FVE_NO_LICENSE", desc="BitLocker Drive Encryption is not included with this version of Windows."], + [3221225682] = [id="NET_WRITE_FAULT", desc="A network data fault occurred."], + [3221225830] = [id="FLOPPY_WRONG_CYLINDER", desc="{Floppy Disk Error} While accessing a floppy disk, the track address from the sector ID field was found to be different from the track address that is maintained by the controller."], + [3221227282] = [id="PROCESS_IS_PROTECTED", desc="Either the target process, or the target thread's containing process, is a protected process."], + [2162691] = [id="lock", desc="The process cannot access the file because another process has locked a portion of the file."], + [3221226353] = [id="NO_SECRETS", desc="The local account store does not contain secret material for the specified account."], + [3221227279] = [id="THREADPOOL_RELEASED_DURING_OPERATION", desc="The thread pool 0x%p was released while a thread was posting a callback to 0x%p(0x%p) to it."], + [3221227295] = [id="CALLBACK_RETURNED_LANG", desc="A threadpool worker thread entered a callback, which left with preferred languages set."], + [3221226337] = [id="ACCESS_DISABLED_BY_POLICY_DEFAULT", desc="Access to %1 has been restricted by your Administrator by the default software restriction policy level."], + [3223453702] = [id="FWP_PROVIDER_CONTEXT_NOT_FOUND", desc="The provider context does not exist."], + [3223192389] = [id="GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION", desc="The specified VidPN's present path content geometry transformation is invalid."], + [3221422081] = [id="RPC_NT_NO_MORE_ENTRIES", desc="The list of RPC servers available for auto-handle binding has been exhausted."], + [3221227278] = [id="THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED", desc="After a callback to 0x%p(0x%p), a completion call to FreeLibrary(%p) failed with status 0x%08x."], + [3221225599] = [id="DISK_FULL", desc="An operation failed because the disk was full."], + [3221225539] = [id="SHARING_VIOLATION", desc="A file cannot be opened because the share access flags are incompatible."], + [3221225720] = [id="INVALID_PARAMETER_10", desc="An invalid parameter was passed to a service or function as the tenth argument."], + [3221880887] = [id="CTX_LOGON_DISABLED", desc="Your interactive logon privilege has been disabled. Contact your system administrator."], + [1075118093] = [id="SXS_RELEASE_ACTIVATION_CONTEXT", desc="A kernel mode component is releasing a reference on an activation context."], + [3222601739] = [id="SXS_THREAD_QUERIES_DISABLED", desc="Lack of system resources has required isolated activation to be disabled for the current thread of execution."], + [3221225872] = [id="TRUST_FAILURE", desc="The network logon failed. This may be because the validation authority cannot be reached."], + [3221226131] = [id="FILE_ENCRYPTED", desc="The specified file is encrypted and the user does not have the ability to decrypt it."], + [3222929450] = [id="LOG_CONTAINER_STATE_INVALID", desc="The log service encountered an invalid container state when attempting a requested action."], + [3223519257] = [id="NDIS_UNSUPPORTED_MEDIA", desc="The network interface does not support this media type."], + [3222863963] = [id="TRANSACTION_INTEGRITY_VIOLATED", desc="The kernel transaction manager had to abort or forget the transaction because it blocked forward progress."], + [3223192332] = [id="GRAPHICS_INVALID_TOTAL_REGION", desc="The specified video signal total region is invalid."], + [3221225638] = [id="CANT_OPEN_ANONYMOUS", desc="An attempt was made to open an anonymous-level token. Anonymous tokens may not be opened."], + [3221226248] = [id="CSS_KEY_NOT_ESTABLISHED", desc="Copy protection error-DVD session key not established."], + [3222601764] = [id="SXS_TRANSACTION_CLOSURE_INCOMPLETE", desc="One or more required transaction members are not present."], + [3223192971] = [id="GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM", desc="This error occurred because the value in a DDC/CI message's checksum field did not match the message's computed checksum value. This error implies that the data was corrupted while it was being transmitted from a monitor to a computer."], + [3221226377] = [id="SMARTCARD_CERT_REVOKED", desc="The smart card certificate used for authentication has been revoked. Contact your system administrator. There may be additional information in the event log."], + [3223192865] = [id="GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST", desc="The DxgkDdiOPMConfigureProtectedOutput function returns this error code if the passed-in sequence number is not the expected sequence number or the passed-in OMAC value is invalid."], + [3222470657] = [id="CLUSTER_INVALID_NODE", desc="The cluster node is not valid."], + [3221226137] = [id="SHARED_POLICY", desc="The policy object is shared and can only be modified at the root."], + [3221225627] = [id="DFS_EXIT_PATH_FOUND", desc="An attempt has been made to open a DFS exit path control file."], + [3222929438] = [id="LOG_MULTIPLEXED", desc="The log is multiplexed; no direct writes to the physical log are allowed."], + [3221356586] = [id="RPC_NT_UNKNOWN_AUTHN_TYPE", desc="The authentication type is unknown."], + [3223453751] = [id="FWP_CALLOUT_NOTIFICATION_FAILED", desc="The notification function for a callout returned an error."], + [299] = [id="FILE_LOCKED_WITH_WRITERS", desc="The file was locked and at least one user of the file can write."], + [3221226091] = [id="DLL_INIT_FAILED_LOGOFF", desc="{DLL Initialization Failed} The application failed to initialize because the window station is shutting down."], + [3223519237] = [id="NDIS_BAD_CHARACTERISTICS", desc="An invalid characteristics table was used."], + [3222470679] = [id="CLUSTER_POISONED", desc="The cluster node has been poisoned."], + [3221225546] = [id="SUSPEND_COUNT_EXCEEDED", desc="An attempt was made to suspend a thread whose suspend count was at its maximum."], + [3221227291] = [id="CALLBACK_RETURNED_THREAD_PRIORITY", desc="A threadpool worker thread entered a callback at thread base priority 0x%x and exited at priority 0x%x."], + [191] = [id="ABANDONED_WAIT_63", desc="The caller attempted to wait for a mutex that has been abandoned."], + [3223453713] = [id="FWP_INCOMPATIBLE_TXN", desc="The call is not allowed from within a read-only transaction."], + [3221356590] = [id="RPC_NT_PROCNUM_OUT_OF_RANGE", desc="The procedure number is out of range."], + [3221225690] = [id="CANT_ACCESS_DOMAIN_INFO", desc="Configuration information could not be read from the domain controller, either because the machine is unavailable or access has been denied."], + [3221225550] = [id="SECTION_PROTECTION", desc="A view to a section specifies a protection that is incompatible with the protection of the initial view."], + [3221880870] = [id="CTX_CLIENT_QUERY_TIMEOUT", desc="The client failed to respond to the server connect message."], + [3222929453] = [id="LOG_METADATA_FLUSH_FAILED", desc="The log metadata flush failed."], + [3221225991] = [id="INVALID_ADDRESS_COMPONENT", desc="The transport rejected the specified network address as invalid."], + [3] = [id="WAIT_3", desc="The caller specified WaitAny for WaitType and one of the dispatcher objects in the Object array has been set to the signaled state."], + [3221226023] = [id="RECOVERY_FAILURE", desc="A transaction recovery failed."], + [3221225669] = [id="BAD_REMOTE_ADAPTER", desc="The remote adapter is not compatible."], + [3224797188] = [id="IPSEC_DOSP_MAX_ENTRIES", desc="IPsec Dos Protection failed to create state because there are already maximum number of entries allowed by policy."], + [3221226192] = [id="DS_CANT_MOD_PRIMARYGROUPID", desc="Cannot change the primary group ID of a domain controller account."], + [3221422175] = [id="RPC_NT_PIPE_CLOSED", desc="The RPC pipe object has already been closed."], + [3223192369] = [id="GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE", desc="The ID of the specified video present source is being used by another source in the set."], + [3221226180] = [id="CORRUPT_SYSTEM_FILE", desc="The system file %1 has become corrupt and has been replaced."], + [3223519260] = [id="NDIS_ERROR_READING_FILE", desc="An error occurred while NDIS tried to map the file."], + [3221225988] = [id="RESOURCE_LANG_NOT_FOUND", desc="Indicates the specified resource language ID cannot be found in the image file."], + [3221356549] = [id="RPC_NT_INVALID_RPC_PROTSEQ", desc="The RPC protocol sequence is invalid."], + [1073741834] = [id="FT_READ_RECOVERY_FROM_BACKUP", desc="{Redundant Read} To satisfy a read request, the Windows NT fault-tolerant file system successfully read the requested data from a redundant copy. This was done because the file system encountered a failure on a member of the fault-tolerant volume but was unable to reassign the failing area of the device."], + [3221226157] = [id="DS_CANT_ON_RDN", desc="The directory service cannot perform the requested operation on the Relatively Defined Name (RDN) attribute of an object."], + [3221225655] = [id="PROFILING_NOT_STARTED", desc="Profiling is not started."], + [1075708748] = [id="GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET", desc="The specified dataset (for example, mode set, frequency range set, descriptor set, or topology) does not contain any more elements."], + [3221356593] = [id="RPC_NT_UNKNOWN_AUTHN_LEVEL", desc="The authentication level is unknown."], + [3221422174] = [id="RPC_NT_WRONG_PIPE_VERSION", desc="Unsupported RPC pipe version."], + [3223453721] = [id="FWP_NOTIFICATION_DROPPED", desc="A notification could not be delivered because a message queue has reached maximum capacity."], + [259] = [id="PENDING", desc="The operation that was requested is pending completion."], + [3223453746] = [id="FWP_EM_NOT_SUPPORTED", desc="An IKE policy cannot contain an Extended Mode policy."], + [3221226041] = [id="ADDRESS_NOT_ASSOCIATED", desc="An address has not yet been associated with the transport endpoint."], + [3221225556] = [id="FILE_LOCK_CONFLICT", desc="A requested read/write cannot be granted due to a conflicting file lock."], + [3221225561] = [id="REVISION_MISMATCH", desc="Indicates that two revision levels are incompatible."], + [3221356556] = [id="RPC_NT_ALREADY_REGISTERED", desc="The object UUID has already been registered."], + [3222601753] = [id="SXS_IDENTITY_PARSE_ERROR", desc="The identity string is malformed. This may be due to a trailing comma, more than two unnamed attributes, a missing attribute name, or a missing attribute value."], + [3222470676] = [id="CLUSTER_NODE_NOT_PAUSED", desc="The cluster node is not paused."], + [3223453748] = [id="FWP_PROVIDER_CONTEXT_MISMATCH", desc="The provider context is of the wrong type."], + [3221226250] = [id="CSS_REGION_MISMATCH", desc="Copy protection error-The region of the specified DVD does not correspond to the region setting of the drive."], + [3221226135] = [id="WMI_ITEMID_NOT_FOUND", desc="The data item ID passed was not recognized as valid by a WMI data provider."], + [3223192967] = [id="GRAPHICS_DDCCI_INVALID_CAPABILITIES_STRING", desc="A monitor returned a DDC/CI capabilities string that did not comply with the ACCESS.bus 3.0, DDC/CI 1.1, or MCCS 2 Revision 1 specification."], + [3221264536] = [id="WOW_ASSERTION", desc="WOW Assertion Error."], + [1073741873] = [id="SYSTEM_POWERSTATE_COMPLEX_TRANSITION", desc="The system power state is transitioning from %2 to %3 but could enter %4."], + [3223192330] = [id="GRAPHICS_INVALID_FREQUENCY", desc="The specified video signal frequency is invalid."], + [3221225825] = [id="ILLEGAL_CHARACTER", desc="An illegal character was encountered. For a multibyte character set, this includes a lead byte without a succeeding trail byte. For the Unicode character set this includes the characters 0xFFFF and 0xFFFE."], + [3221225497] = [id="NOT_MAPPED_VIEW", desc="The address range to unmap is not a mapped view."], + [3221225847] = [id="EOM_OVERFLOW", desc="The physical end of tape was detected."], + [3223060495] = [id="FLT_DO_NOT_ATTACH", desc="Do not attach the filter to the volume at this time."], + [2228227] = [id="wrongdisk", desc="The wrong diskette is in the drive."], + [2147483664] = [id="DEVICE_OFF_LINE", desc="{Device Offline} The printer has been taken offline."], + [3223453732] = [id="FWP_INVALID_ACTION_TYPE", desc="The action type is not one of the allowed action types for a filter."], + [3221225474] = [id="NOT_IMPLEMENTED", desc="{Not Implemented} The requested operation is not implemented."], + [4653058] = [id="setattrmode", desc="The attribute mode specified is invalid."], + [3223192367] = [id="GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE", desc="The specified video present target subset type is invalid."], + [3223192833] = [id="GRAPHICS_COPP_NOT_SUPPORTED", desc="The driver does not support COPP."], + [3221225817] = [id="FULLSCREEN_MODE", desc="The requested operation cannot be performed in full-screen mode."], + [3221225509] = [id="NONCONTINUABLE_EXCEPTION", desc="{EXCEPTION} Cannot Continue Windows cannot continue from this exception."], + [3221225829] = [id="FLOPPY_ID_MARK_NOT_FOUND", desc="{Floppy Disk Error} While accessing a floppy disk, an ID address mark was not found."], + [3221226599] = [id="FILE_NOT_AVAILABLE", desc="The file is temporarily unavailable."], + [3221226229] = [id="MUST_BE_KDC", desc="The local machine must be a Kerberos KDC (domain controller) and it is not."], + [3225026582] = [id="VHD_PARENT_VHD_ACCESS_DENIED", desc="The chain of virtual hard disks is inaccessible. The process has not been granted access rights to the parent virtual hard disk for the differencing disk."], + [3223388190] = [id="FVE_DRY_RUN_FAILED", desc="The BitLocker encryption key could not be obtained."], + [1245187] = [id="nowrite", desc="The media is write protected."], + [3221226345] = [id="INVALID_DEVICE_OBJECT_PARAMETER", desc="The device object parameter is either not a valid device object or is not attached to the volume that is specified by the file name."], + [3221225673] = [id="NETWORK_NAME_DELETED", desc="The network name was deleted."], + [3221266564] = [id="XMLDSIG_ERROR", desc="An error was encountered while processing an XML digital signature."], + [3223192842] = [id="GRAPHICS_OPM_INVALID_POINTER", desc="The function failed because an invalid pointer parameter was passed to it. A pointer parameter is invalid if it is null, is not correctly aligned, or it points to an invalid address or a kernel mode address."], + [3222863909] = [id="CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT", desc="It is not possible to open a miniversion with modify access."], + [3221226562] = [id="CS_ENCRYPTION_UNSUPPORTED_SERVER", desc="Client Side Encryption is not supported by the remote server even though it claims to support it."], + [3221226218] = [id="CANNOT_MAKE", desc="The directory or file cannot be created."], + [3221226130] = [id="NOT_EXPORT_FORMAT", desc="The specified file is not in the defined EFS export format."], + [197132289] = [id="printmonitorinuse", desc="The specified print monitor is currently in use."], + [3221225571] = [id="USER_EXISTS", desc="The specified account already exists."], + [3221487671] = [id="PNP_IRQ_TRANSLATION_FAILED", desc="An IRQ translator failed to translate resources."], + [3221225768] = [id="FILE_CLOSED", desc="An I/O request other than close and several other special case operations was attempted using a file object that had already been closed."], + [2147483674] = [id="NO_MORE_ENTRIES", desc="{No More Entries} No more entries are available from an enumeration operation."], + [3221226159] = [id="DS_CROSS_DOM_MOVE_FAILED", desc="An error occurred while performing a cross domain move operation."], + [1073741831] = [id="BAD_CURRENT_DIRECTORY", desc="{Invalid Current Directory} The process cannot switch to the startup current directory %hs. Select OK to set the current directory to %hs, or select CANCEL to exit."], + [3222929419] = [id="LOG_READ_MODE_INVALID", desc="The log service encountered an attempt to read the log with an invalid read mode."], + [3221356570] = [id="RPC_NT_NO_CALL_ACTIVE", desc="No RPCs are active on this thread."], + [1073741865] = [id="MP_PROCESSOR_MISMATCH", desc="The CPUs in this multiprocessor system are not all the same revision level. To use all processors, the operating system restricts itself to the features of the least capable processor in the system. If problems occur with this system, contact the CPU manufacturer to see if this mix of processors is supported."], + [3221227269] = [id="LPC_RECEIVE_BUFFER_EXPECTED", desc="No receive buffer has been supplied in a synchronous request."], + [3221225489] = [id="END_OF_FILE", desc="The end-of-file marker has been reached. There is no valid data in the file beyond this marker."], + [2149253355] = [id="VIDEO_HUNG_DISPLAY_DRIVER_THREAD_RECOVERED", desc="{Display Driver Stopped Responding and recovered} The %hs display driver has stopped working normally. The recovery had been performed."], + [3221225660] = [id="REMOTE_NOT_LISTENING", desc="This remote computer is not listening."], + [3221225603] = [id="GUIDS_EXHAUSTED", desc="The GUIDs could not be allocated because the Authority Agent was exhausted."], + [2147483666] = [id="NO_MORE_EAS", desc="{No More EAs} No more extended attributes (EAs) were found for the file."], + [3222863942] = [id="TRANSACTION_FREEZE_IN_PROGRESS", desc="Transactions cannot be frozen because a freeze is already in progress."], + [3223192630] = [id="GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE", desc="The adapter link was found in an inconsistent state. Not all adapters are in an expected PNP/power state."], + [3221226179] = [id="MUTUAL_AUTHENTICATION_FAILED", desc="Mutual Authentication failed. The server password is out of date at the domain controller."], + [3221225505] = [id="ALREADY_COMMITTED", desc="{Already Committed} The specified address range is already committed."], + [3223388167] = [id="FVE_FS_MOUNTED", desc="This operation cannot be performed while a file system is mounted on the volume."], + [3221356563] = [id="RPC_NT_NO_BINDINGS", desc="There are no bindings."], + [1073741851] = [id="ALREADY_WIN32", desc="A Win32 process already exists."], + [3221226499] = [id="USER_DELETE_TRUST_QUOTA_EXCEEDED", desc="The delegated trust deletion quota of the current user has been exceeded."], + [3221226205] = [id="WMI_NOT_SUPPORTED", desc="The WMI operation is not supported by the data block or method."], + [2] = [id="WAIT_2", desc="The caller specified WaitAny for WaitType and one of the dispatcher objects in the Object array has been set to the signaled state."], + [3222863890] = [id="TRANSACTION_SUPERIOR_EXISTS", desc="The transaction object already has a superior enlistment, and the caller attempted an operation that would have created a new superior. Only a single superior enlistment is allowed."], + [3221226272] = [id="PKINIT_FAILURE", desc="The Kerberos protocol encountered an error while validating the KDC certificate during smart card logon. There is more information in the system event log."], + [3222601766] = [id="GENERIC_COMMAND_FAILED", desc="A generic command executable returned a result that indicates failure."], + [3222601744] = [id="SXS_INVALID_DEACTIVATION", desc="The activation context being deactivated is not active for the current thread of execution."], + [3223453701] = [id="FWP_PROVIDER_NOT_FOUND", desc="The provider does not exist."], + [3221225827] = [id="UNDEFINED_CHARACTER", desc="The Unicode character is not defined in the Unicode character set that is installed on the system."], + [3221227011] = [id="IMAGE_CERT_REVOKED", desc="Windows cannot verify the digital signature for this file. The signing certificate for this file has been revoked."], + [3221226596] = [id="DEVICE_UNREACHABLE", desc="Data cannot be moved because the source device cannot communicate with the destination device."], + [3221226034] = [id="INVALID_VARIANT", desc="The supplied variant structure contains invalid data."], + [3221226378] = [id="ISSUING_CA_UNTRUSTED", desc="An untrusted certificate authority was detected while processing the smart card certificate that is used for authentication. Contact your system administrator."], + [3221225879] = [id="EVENTLOG_FILE_CHANGED", desc="The log file has changed between reads."], + [3223453739] = [id="FWP_DUPLICATE_KEYMOD", desc="A policy cannot contain the same keying module more than once."], + [3221225652] = [id="INVALID_READ_MODE", desc="The specified named pipe is not in message mode."], + [3221226347] = [id="DRIVER_BLOCKED_CRITICAL", desc="Driver %2 has been blocked from loading."], + [3221226509] = [id="ISSUING_CA_UNTRUSTED_KDC", desc="An untrusted certificate authority was detected while processing the domain controller certificate used for authentication. There is additional information in the system event log. Contact your system administrator."], + [1075708986] = [id="GRAPHICS_START_DEFERRED", desc="Starting the adapter has been temporarily deferred."], + [3221226154] = [id="DS_RIDMGR_INIT_ERROR", desc="The directory service was unable to initialize the subsystem that allocates relative identifiers."], + [2147484296] = [id="DEVICE_REQUIRES_CLEANING", desc="The device has indicated that cleaning is necessary."], + [1073873071] = [id="RPC_NT_SEND_INCOMPLETE", desc="Some data remains to be sent in the request buffer."], + [3221266689] = [id="HASH_NOT_PRESENT", desc="The hash requests is not present or not up to date with the current file contents."], + [3221225699] = [id="INVALID_OPLOCK_PROTOCOL", desc="An error status returned when an invalid opportunistic lock (oplock) acknowledgment is received by a file system."], + [3223388191] = [id="FVE_BAD_METADATA_POINTER", desc="The metadata disk region pointer is incorrect."], + [3222863884] = [id="REMOTE_FILE_VERSION_MISMATCH", desc="The remote server sent mismatching version number or Fid for a file opened with transactions."], + [2031619] = [id="general", desc="A device attached to the system is not functioning."], + [297] = [id="PROCESS_CLONED", desc="The current process is a cloned process."], + [3221225803] = [id="PIPE_BROKEN", desc="The pipe operation has failed because the other end of the pipe has been closed."], + [3221225651] = [id="PIPE_LISTENING", desc="The specified named pipe is in the listening state."], + [3221225694] = [id="INVALID_DOMAIN_ROLE", desc="This operation is only allowed for the primary domain controller of the domain."], + [289] = [id="DS_MEMBERSHIP_EVALUATED_LOCALLY", desc="The directory service evaluated group memberships locally, because it was unable to contact a global catalog server."], + [16646146] = [id="badPassword", desc="reserved"], + [3222863939] = [id="TRANSACTION_REQUIRED_PROMOTION", desc="Promotion was required to allow the resource manager to enlist, but the transaction was set to disallow it."], + [3221226190] = [id="PNP_RESTART_ENUMERATION", desc="A device was removed so enumeration must be restarted."], + [1073741856] = [id="WX86_EXCEPTION_CONTINUE", desc="An exception status code that is used by the Win32 x86 emulation subsystem."], + [3221226331] = [id="BAD_BINDINGS", desc="The client's supplied SSPI channel bindings were incorrect."], + [3223192360] = [id="GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE", desc="The display adapter must have at least one video present source."], + [3221225596] = [id="NO_TOKEN", desc="An attempt was made to reference a token that does not exist. This is typically done by referencing the token that is associated with a thread when the thread is not impersonating a client."], + [3222863882] = [id="TRANSACTIONS_UNSUPPORTED_REMOTE", desc="The remote server or share does not support transacted file operations."], + [3221880838] = [id="CTX_CLOSE_PENDING", desc="A close operation is pending on the terminal connection."], + [3223192625] = [id="GRAPHICS_LEADLINK_NOT_ENUMERATED", desc="The lead adapter in a linked configuration was not enumerated yet."], + [3221226566] = [id="INVALID_LABEL", desc="Indicates a particular Security ID may not be assigned as the label of an object."], + [3223192382] = [id="GRAPHICS_INVALID_COLORBASIS", desc="The specified color basis is invalid."], + [3221225846] = [id="UNABLE_TO_UNLOAD_MEDIA", desc="An attempt to unload media failed."], + [3221227276] = [id="THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED", desc="After a callback to 0x%p(0x%p), a completion call to ReleaseSemaphore(0x%p, %d) failed with status 0x%08x."], + [3222863929] = [id="TXF_DIR_NOT_EMPTY", desc="The $Txf directory must be empty for this operation to succeed."], + [3221225542] = [id="MUTANT_NOT_OWNED", desc="An attempt to release a mutant object was made by a thread that was not the owner of the mutant object."], + [2149122114] = [id="TRANSACTION_SCOPE_CALLBACKS_NOT_SET", desc="A transaction scope could not be entered because the scope handler has not been initialized."], + [3221226008] = [id="CANNOT_LOAD_REGISTRY_FILE", desc="{Registry File Failure} The registry cannot load the hive (file): %hs or its log or alternate. It is corrupt, absent, or not writable."], + [3221356628] = [id="RPC_NT_NO_PRINC_NAME", desc="No principal name was registered."], + [3221225576] = [id="MEMBER_NOT_IN_GROUP", desc="The specified user account is not a member of the specified group account."], + [3221226104] = [id="IO_REPARSE_DATA_INVALID", desc="The user data passed for the NTFS reparse point is invalid."], + [3221356547] = [id="RPC_NT_INVALID_BINDING", desc="The binding handle is invalid."], + [3221225724] = [id="REDIRECTOR_STARTED", desc="An attempt was made to start the redirector, but the redirector has already been started."], + [3221225822] = [id="DOMAIN_CTRLR_CONFIG_ERROR", desc="A Windows Server has an incorrect configuration."], + [3221225696] = [id="DOMAIN_EXISTS", desc="The specified domain already exists."], + [3221226044] = [id="NETWORK_UNREACHABLE", desc="The remote network is not reachable by the transport."], + [1073741838] = [id="IMAGE_MACHINE_TYPE_MISMATCH", desc="{Machine Type Mismatch} The image file %hs is valid but is for a machine type other than the current machine. Select OK to continue, or CANCEL to fail the DLL load."], + [3221227277] = [id="THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED", desc="After a callback to 0x%p(0x%p), a completion call to ReleaseMutex(%p) failed with status 0x%08x."], + [3223192834] = [id="GRAPHICS_UAB_NOT_SUPPORTED", desc="The driver does not support UAB."], + [3223192331] = [id="GRAPHICS_INVALID_ACTIVE_REGION", desc="The specified video signal active region is invalid."], + [3221226374] = [id="SMARTCARD_NO_KEYSET", desc="The requested keyset does not exist."], + [3221226177] = [id="DS_ADMIN_LIMIT_EXCEEDED", desc="A directory service resource limit has been exceeded."], + [3221226095] = [id="WX86_INTERNAL_ERROR", desc="An internal error occurred in the Win32 x86 emulation subsystem."], + [63] = [id="WAIT_63", desc="The caller specified WaitAny for WaitType and one of the dispatcher objects in the Object array has been set to the signaled state."], + [3221225508] = [id="OBJECT_TYPE_MISMATCH", desc="{Wrong Type} There is a mismatch between the type of object that is required by the requested operation and the type of object that is specified in the request."], + [3221225517] = [id="NOT_COMMITTED", desc="An attempt was made to change the attributes on memory that has not been committed."], + [3223523346] = [id="NDIS_OFFLOAD_CONNECTION_REJECTED", desc="The TCP connection is not offloadable by the Chimney offload target."], + [3223453730] = [id="FWP_ZERO_LENGTH_ARRAY", desc="An array that must contain at least one element has a zero length."], + [3221226502] = [id="DS_GROUP_CONVERSION_ERROR", desc="The group cannot be converted due to attribute restrictions on the requested group type."], + [3222536200] = [id="ACPI_INVALID_ARGTYPE", desc="An argument with an incorrect type was specified."], + [3223388160] = [id="FVE_LOCKED_VOLUME", desc="The volume must be unlocked before it can be used."], + [1073741861] = [id="TIMER_RESUME_IGNORED", desc="The resume flag to a timer API was ignored."], + [3222536194] = [id="ACPI_STACK_OVERFLOW", desc="The AML interpreter stack has overflowed."], + [3221225493] = [id="NONEXISTENT_SECTOR", desc="{Sector Not Found} The specified sector does not exist."], + [3221225759] = [id="TOO_MANY_OPENED_FILES", desc="Too many files are opened on a remote server. This error should only be returned by the Windows redirector on a remote drive."], + [3221226221] = [id="DS_SAM_INIT_FAILURE_CONSOLE", desc="Security Accounts Manager initialization failed because of the following error: %hs Error Status: 0x%x. Click OK to shut down the system. You can use the recovery console to diagnose the system further."], + [3221422171] = [id="RPC_NT_WRONG_STUB_VERSION", desc="Incompatible version of the RPC stub."], + [3221226049] = [id="CONNECTION_ABORTED", desc="The transport connection was aborted by the local system."], + [1073741867] = [id="RESUME_HIBERNATION", desc="The system was resumed from hibernation."], + [5439490] = [id="noroom", desc="No room to buffer message."], + [3222863922] = [id="RM_DISCONNECTED", desc="The transaction outcome is unavailable because the resource manager responsible for it is disconnected."], + [2147484297] = [id="DEVICE_DOOR_OPEN", desc="The device has indicated that its door is open. Further operations require it closed and secured."], + [3222863906] = [id="STREAM_MINIVERSION_NOT_FOUND", desc="The specified file miniversion was not found for this transacted file open."], + [3221226014] = [id="DRIVER_CANCEL_TIMEOUT", desc="{Cancel Timeout} The driver %hs failed to complete a canceled I/O request in the allotted time."], + [3221225789] = [id="REMOTE_RESOURCES", desc="{Insufficient Resources on Remote Computer} The remote computer has insufficient resources to complete the network request. For example, the remote computer may not have enough available memory to carry out the request at this time."], + [3221356619] = [id="RPC_NT_GROUP_MEMBER_NOT_FOUND", desc="The group member was not found."], + [3221225634] = [id="MEDIA_WRITE_PROTECTED", desc="{Write Protect Error} The disk cannot be written to because it is write-protected. Remove the write protection from the volume %hs in drive %hs."], + [3221227779] = [id="BAD_FILE_TYPE", desc="The file type being saved or retrieved has been blocked."], + [4653057] = [id="nomoreconn", desc="nomoreconn."], + [3221226210] = [id="DS_INIT_FAILURE", desc="The directory service could not start because of the following error: %hs Error Status: 0x%x. Click OK to shut down this system and restart in Directory Services Restore Mode. Check the event log for more detailed information."], + [3221226118] = [id="MAGAZINE_NOT_PRESENT", desc="The specified element is contained in a magazine that is no longer present."], + [3222536197] = [id="ACPI_INVALID_ARGUMENT", desc="A required argument was not specified."], + [3221226239] = [id="SERVER_SHUTDOWN_IN_PROGRESS", desc="The server machine is shutting down."], + [3221226054] = [id="CONNECTION_COUNT_LIMIT", desc="A connection to the server could not be made because the limit on the number of concurrent connections for this account has been reached."], + [3222601735] = [id="SXS_ACTIVATION_CONTEXT_DISABLED", desc="The application attempted to activate a disabled activation context."], + [17498113] = [id="baddirectory", desc="The directory name is invalid."], + [3223192381] = [id="GRAPHICS_INVALID_PIXELFORMAT", desc="The specified pixel format is invalid."], + [3223060496] = [id="FLT_DO_NOT_DETACH", desc="Do not detach the filter from the volume at this time."], + [3221226066] = [id="BAD_SERVICE_ENTRYPOINT", desc="{Invalid Service Callback Entrypoint} The %hs service is not written correctly. The stack pointer has been left in an inconsistent state. The callback entry point should be declared as WINAPI or STDCALL. Selecting OK will cause the service to continue operation. However, the service process may operate incorrectly."], + [117768193] = [id="unknownprinterdriver", desc="The printer driver is unknown."], + [3221225640] = [id="BAD_TOKEN_TYPE", desc="The type of a token object is inappropriate for its attempted use."], + [3221226084] = [id="RESOURCE_NOT_OWNED", desc="{Application Error} The application attempted to release a resource it did not own. Click OK to terminate the application."], + [3221226195] = [id="POWER_STATE_INVALID", desc="The power state of the current device cannot support this request."], + [3221226145] = [id="DS_NO_ATTRIBUTE_OR_VALUE", desc="The specified directory service attribute or value does not exist."], + [3221422177] = [id="RPC_NT_PIPE_EMPTY", desc="No more data is available from the RPC pipe."], + [3223388179] = [id="FVE_KEYFILE_NOT_FOUND", desc="The BitLocker startup key or recovery password could not be read from external media."], + [3222601738] = [id="SXS_WRONG_SECTION_TYPE", desc="The type requested activation context section does not match the query API used."], + [3221227285] = [id="SYMLINK_CLASS_DISABLED", desc="The symbolic link cannot be followed because its type is disabled."], + [3221226004] = [id="TRANSACTION_INVALID_ID", desc="The transport does not recognize the specified transaction request ID."], + [3222929452] = [id="LOG_PINNED", desc="The log space cannot be reclaimed because the log is pinned."], + [3221225711] = [id="INVALID_PARAMETER_1", desc="An invalid parameter was passed to a service or function as the first argument."], + [4390914] = [id="filespecs", desc="The specified FID and pathname combination is invalid."], + [3221227281] = [id="APC_RETURNED_WHILE_IMPERSONATING", desc="A thread pool worker thread is impersonating a client, after executing an APC. This is unexpected, indicating that the APC is missing a call to revert the impersonation."], + [1073741845] = [id="FATAL_APP_EXIT", desc="{Fatal Application Exit} %hs"], + [3223192383] = [id="GRAPHICS_INVALID_PIXELVALUEACCESSMODE", desc="The specified pixel value access mode is invalid."], + [1073807361] = [id="DBG_REPLY_LATER", desc="Debugger will reply later."], + [3223192962] = [id="GRAPHICS_I2C_ERROR_TRANSMITTING_DATA", desc="An error occurred while transmitting data to the device on the I2C bus."], + [3222601755] = [id="SXS_FILE_HASH_MISMATCH", desc="A component's file does not match the verification information present in the component manifest."], + [5701633] = [id="invalidparam", desc="The parameter is incorrect."], + [3223192372] = [id="GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER", desc="The newly arrived monitor could not be associated with a display adapter."], + [3221422091] = [id="RPC_NT_BYTE_COUNT_TOO_SMALL", desc="The byte count is too small."], + [3221226018] = [id="LOST_WRITEBEHIND_DATA", desc="{Delayed Write Failed} Windows was unable to save all the data for the file %hs. The data has been lost. This error may be caused by a failure of your computer hardware or network connection. Try to save this file elsewhere."], + [3221227275] = [id="THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED", desc="After a callback to 0x%p(0x%p), a completion call to Set event(0x%p) failed with status 0x%08x."], + [3221226146] = [id="DS_INVALID_ATTRIBUTE_SYNTAX", desc="The attribute syntax specified to the directory service is invalid."], + [3222929426] = [id="LOG_CONTAINER_LIMIT_EXCEEDED", desc="The log service has reached the maximum allowable containers allocated to a log file."], + [3221356595] = [id="RPC_NT_UNKNOWN_AUTHZ_SERVICE", desc="The authorization service is unknown."], + [3222601758] = [id="SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT", desc="The assembly is not a deployment."], + [3222929448] = [id="LOG_CONTAINER_WRITE_FAILED", desc="The log service encountered an error when attempting to write to a log container."], + [5242881] = [id="filexists", desc="The file exists."], + [3222929430] = [id="LOG_POLICY_INVALID", desc="The installed set of policies on the log is invalid."], + [3221266451] = [id="PROTOCOL_NOT_SUPPORTED", desc="The protocol is not installed on the local machine."], + [3221225514] = [id="NOT_LOCKED", desc="An attempt was made to unlock a page of memory that was not locked."], + [1073741827] = [id="IMAGE_NOT_AT_BASE", desc="{Image Relocated} An image file could not be mapped at the address that is specified in the image file. Local fixes must be performed on this image."], + [3223388184] = [id="FVE_TPM_INVALID_PCR", desc="The system boot information changed or the TPM locked out access to BitLocker encryption keys until the computer is restarted."], + [3222929441] = [id="LOG_ARCHIVE_IN_PROGRESS", desc="Log archival is in progress."], + [2097153] = [id="badshare", desc="The process cannot access the file because it is being used by another process."], + [3222863912] = [id="HANDLE_NO_LONGER_VALID", desc="The handle has been invalidated by a transaction. The most likely cause is the presence of memory mapping on a file or an open handle when the transaction ended or rolled back to savepoint."], + [3223453697] = [id="FWP_CALLOUT_NOT_FOUND", desc="The callout does not exist."], + [3222863949] = [id="CANNOT_ABORT_TRANSACTIONS", desc="The transactional resource manager had too many transactions outstanding that could not be aborted. The transactional resource manager has been shut down."], + [3222601740] = [id="SXS_ASSEMBLY_MISSING", desc="The referenced assembly could not be found."], + [18481153] = [id="easnotsupported", desc="The mounted file system does not support extended attributes."], + [3221226047] = [id="PORT_UNREACHABLE", desc="No service is operating at the destination port of the transport on the remote system."], + [3221225811] = [id="MEMBER_IN_ALIAS", desc="The specified account name is already a member of the group."], + [3221225806] = [id="NO_EVENT_PAIR", desc="An event pair synchronization operation was performed using the thread-specific client/server event pair object, but no event pair object was associated with the thread."], + [3221225802] = [id="ILLEGAL_FLOAT_CONTEXT", desc="{EXCEPTION} A real-mode application issued a floating-point instruction and floating-point hardware is not present."], + [3221225704] = [id="INVALID_USER_BUFFER", desc="An access to a user buffer failed at an expected point in time. This code is defined because the caller does not want to accept STATUS_ACCESS_VIOLATION in its filter."], + [3223453726] = [id="FWP_INVALID_FLAGS", desc="The flags field contains an invalid value."], + [3223191824] = [id="GRAPHICS_INVALID_ALLOCATION_USAGE", desc="The allocation cannot be used from its current segment location for the specified operation."], + [2147483687] = [id="CLEANER_CARTRIDGE_INSTALLED", desc="A cleaner cartridge is present in the tape library."], + [3223453723] = [id="FWP_INCOMPATIBLE_SA_STATE", desc="The call is not allowed for the current security association state."], + [3221225547] = [id="THREAD_IS_TERMINATING", desc="An attempt was made to suspend a thread that has begun termination."], + [3221880844] = [id="CTX_MODEM_RESPONSE_NO_CARRIER", desc="Carrier detection has failed or the carrier has been dropped due to disconnection."], + [3225026585] = [id="VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT", desc="The chain of virtual hard disks is inaccessible. There was an error opening a virtual hard disk further up the chain."], + [196610] = [id="badtype", desc="reserved"], + [3223192371] = [id="GRAPHICS_NO_AVAILABLE_VIDPN_TARGET", desc="The specified VidPN source cannot be used because there is no available VidPN target to connect it to."], + [3221225524] = [id="OBJECT_NAME_NOT_FOUND", desc="The object name is not found."], + [3222929439] = [id="LOG_DEDICATED", desc="The operation failed because the log is dedicated."], + [3221356616] = [id="RPC_NT_FP_OVERFLOW", desc="A floating point overflow occurred at the RPC server."], + [3221225998] = [id="TOO_MANY_NODES", desc="The transport cannot dynamically acquire any more nodes."], + [3221225494] = [id="MORE_PROCESSING_REQUIRED", desc="{Still Busy} The specified I/O request packet (IRP) cannot be disposed of because the I/O operation is not complete."], + [3221356551] = [id="RPC_NT_INVALID_ENDPOINT_FORMAT", desc="The endpoint format is invalid."], + [1073741872] = [id="ALPC_CHECK_COMPLETION_LIST", desc="The receive operation was successful. Check the ALPC completion list for the received message."], + [3221225835] = [id="DISK_RESET_FAILED", desc="{Hard Disk Error} While accessing the hard disk, a disk controller reset was needed, but even that failed."], + [3221225485] = [id="INVALID_PARAMETER", desc="An invalid parameter was passed to a service or function."], + [3221946375] = [id="RESOURCE_ENUM_USER_STOP", desc="The user stopped resource enumeration."], + [3223192411] = [id="GRAPHICS_INVALID_CLIENT_TYPE", desc="The specified client type was not recognized."], + [1835011] = [id="nopaper", desc="The printer is out of paper."], + [3221226529] = [id="VERIFIER_STOP", desc="Application verifier has found an error in the current process."], + [3221226043] = [id="CONNECTION_ACTIVE", desc="An invalid operation was attempted on an active transport connection."], + [3221225480] = [id="INVALID_HANDLE", desc="An invalid HANDLE was specified."], + [3221225653] = [id="IO_TIMEOUT", desc="{Device Timeout} The specified I/O operation on %hs was not completed before the time-out period expired."], + [3221225611] = [id="RESOURCE_NAME_NOT_FOUND", desc="Indicates the specified resource name cannot be found in the image file."], + [3223192849] = [id="GRAPHICS_PVP_HFS_FAILED", desc="The function call failed because the display adapter's hardware functionality scan (HFS) failed to validate the graphics hardware."], + [3223453725] = [id="FWP_INVALID_ENUMERATOR", desc="An enumerator is not valid."], + [2031617] = [id="general", desc="A device attached to the system is not functioning."], + [3221226531] = [id="CALLBACK_POP_STACK", desc="A user mode unwind is in progress."], + [3221226507] = [id="CROSSREALM_DELEGATION_FAILURE", desc="An attempt was made by this server to make a Kerberos constrained delegation request for a target that is outside the server realm. This action is not supported and the resulting error indicates a misconfiguration on the allowed-to-delegate-to list for this server. Contact your administrator."], + [3221225519] = [id="PORT_MESSAGE_TOO_LONG", desc="The length of the message that was passed to NtRequestPort or NtRequestWaitReplyPort is longer than the maximum message that is allowed by the port."], + [3222470660] = [id="CLUSTER_NODE_NOT_FOUND", desc="The cluster node was not found."], + [3221226028] = [id="CONVERT_TO_LARGE", desc="Internal OFS status codes indicating how an allocation operation is handled. Either it is retried after the containing oNode is moved or the extent stream is converted to a large stream."], + [9502721] = [id="notempty", desc="The directory is not empty."], + [3221226322] = [id="EFS_ALG_BLOB_TOO_BIG", desc="The encryption algorithm that is used on the source file needs a bigger key buffer than the one that is used on the destination file."], + [15269889] = [id="notconnected", desc="No process is on the other end of the pipe."], + [3221226207] = [id="SAM_NEED_BOOTKEY_PASSWORD", desc="The Security Accounts Manager needs to get the boot password."], + [3221226350] = [id="SYSTEM_HIVE_TOO_LARGE", desc="System hive size has exceeded its limit."], + [1073807363] = [id="DBG_TERMINATE_THREAD", desc="Debugger terminated the thread."], + [2147483649] = [id="GUARD_PAGE_VIOLATION", desc="{EXCEPTION} Guard Page Exception A page of memory that marks the end of a data structure, such as a stack or an array, has been accessed."], + [3221225859] = [id="DRIVER_INTERNAL_ERROR", desc="An error was detected between two drivers or within an I/O driver."], + [3221226080] = [id="INVALID_HW_PROFILE", desc="The specified hardware profile configuration is invalid."], + [3221225804] = [id="REGISTRY_CORRUPT", desc="{The Registry Is Corrupt} The structure of one of the files that contains registry data is corrupt; the image of the file in memory is corrupt; or the file could not be recovered because the alternate copy or log was absent or corrupt."], + [3221226039] = [id="GRACEFUL_DISCONNECT", desc="The transport connection was gracefully closed."], + [3223453741] = [id="FWP_ACTION_INCOMPATIBLE_WITH_SUBLAYER", desc="The action type is not compatible with the sublayer."], + [3221356569] = [id="RPC_NT_INVALID_NETWORK_OPTIONS", desc="The network options are invalid."], + [3223192364] = [id="GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET", desc="The specified descriptor is not in the specified monitor descriptor set."], + [2147483658] = [id="HANDLES_CLOSED", desc="{Handles Closed} Handles to objects have been automatically closed because of the requested operation."], + [3221356578] = [id="RPC_NT_INVALID_TAG", desc="The tag is invalid."], + [3221226181] = [id="DATATYPE_MISALIGNMENT_ERROR", desc="{EXCEPTION} Alignment Error A data type misalignment error was detected in a load or store instruction."], + [3221880852] = [id="CTX_LICENSE_EXPIRED", desc="The system license has expired. Your logon request is denied."], + [3223192393] = [id="GRAPHICS_MULTISAMPLING_NOT_SUPPORTED", desc="Multisampling is not supported on the respective VidPN present path."], + [117833729] = [id="unknownprintprocessor", desc="The print processor is unknown."], + [3221225713] = [id="INVALID_PARAMETER_3", desc="An invalid parameter was passed to a service or function as the third argument."], + [3221225600] = [id="SERVER_DISABLED", desc="The GUID allocation server is disabled at the moment."], + [3221225797] = [id="APP_INIT_FAILURE", desc="{Application Error} The application failed to initialize properly (0x%lx). Click OK to terminate the application."], + [3221356620] = [id="EPT_NT_CANT_CREATE", desc="The endpoint mapper database entry could not be created."], + [3223192972] = [id="GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE", desc="This function failed because an invalid monitor handle was passed to it."], + [3223519242] = [id="NDIS_MULTICAST_EXISTS", desc="An attempt was made to add a duplicate multicast address to the list."], + [3222536208] = [id="ACPI_INVALID_REGION", desc="An invalid region for the target was specified."], + [3223192320] = [id="GRAPHICS_INVALID_VIDPN_TOPOLOGY", desc="The specified VidPN topology is invalid."], + [3221226333] = [id="APPHELP_BLOCK", desc="The AppHelp dialog box canceled; thus preventing the application from starting."], + [3221225581] = [id="LOGON_FAILURE", desc="The attempted logon is invalid. This is either due to a bad username or authentication information."], + [3221225712] = [id="INVALID_PARAMETER_2", desc="An invalid parameter was passed to a service or function as the second argument."], + [3221225850] = [id="NO_SUCH_MEMBER", desc="A member could not be added to or removed from the local group because the member does not exist."], + [3221226237] = [id="KDC_UNKNOWN_ETYPE", desc="The encryption type requested is not supported by the KDC."], + [3221225701] = [id="INTERNAL_ERROR", desc="An internal error occurred."], + [3221225484] = [id="TIMER_NOT_CANCELED", desc="An attempt was made to cancel or set a timer that has an associated APC and the specified thread is not the thread that originally set the timer with an associated APC routine."], + [3222536213] = [id="ACPI_INVALID_MUTEX_LEVEL", desc="An incorrect mutex was specified."], + [3221225990] = [id="INVALID_BUFFER_SIZE", desc="The size of the buffer is invalid for the specified operation."], + [3221225853] = [id="NO_LOG_SPACE", desc="The system could not allocate the required space in a registry log."], + [3222536224] = [id="ACPI_REG_HANDLER_FAILED", desc="The registration of an ACPI event failed."], + [3223191557] = [id="GRAPHICS_PRESENT_MODE_CHANGED", desc="Present happened but ended up into the changed desktop mode."], + [3223519244] = [id="NDIS_REQUEST_ABORTED", desc="The network interface aborted the request."], + [3221226196] = [id="DS_INVALID_GROUP_TYPE", desc="The specified group type is invalid."], + [3221225647] = [id="ILLEGAL_FUNCTION", desc="The specified handle is not open to the server end of the named pipe."], + [3221227782] = [id="VIRUS_INFECTED", desc="The operation did not complete successfully because the file contains a virus."], + [3221225752] = [id="INVALID_LDT_SIZE", desc="Indicates that an attempt was made to grow an LDT by setting its size, or that the size was not an even number of selectors."], + [3221226037] = [id="HANDLE_NOT_CLOSABLE", desc="NtClose was called on a handle that was protected from close via NtSetInformationObject."], + [3223519245] = [id="NDIS_RESET_IN_PROGRESS", desc="The network interface cannot process the request because it is being reset."], + [3221226020] = [id="PASSWORD_MUST_CHANGE", desc="The user password must be changed before logging on the first time."], + [3223519236] = [id="NDIS_BAD_VERSION", desc="An invalid version was specified."], + [16449538] = [id="usestd", desc="Temporarily unable to support Raw, use standard read/write."], + [3221226234] = [id="SMARTCARD_LOGON_REQUIRED", desc="Smart card logon is required and was not used."], + [3221356573] = [id="RPC_NT_PROTOCOL_ERROR", desc="An RPC protocol error occurred."], + [3222601730] = [id="SXS_CANT_GEN_ACTCTX", desc="0xC0150003
      STATUS_SXS_INVALID_ACTCTXDATA_FORMAT"], + [3221226372] = [id="SMARTCARD_NO_KEY_CONTAINER", desc="The requested key container does not exist on the smart card."], + [3221226038] = [id="CONNECTION_REFUSED", desc="The transport-connection attempt was refused by the remote system."], + [3223192342] = [id="GRAPHICS_INVALID_VIDEOPRESENTTARGETSET", desc="The specified video present target set is invalid."], + [3223519255] = [id="NDIS_INVALID_OID", desc="The network interface does not support this object identifier."], + [3221225615] = [id="FLOAT_INEXACT_RESULT", desc="{EXCEPTION} Floating-point inexact result."], + [3221226153] = [id="DS_INCORRECT_ROLE_OWNER", desc="The requested operation could not be performed because the directory service is not the master for that type of operation."], + [3221226015] = [id="REPLY_MESSAGE_MISMATCH", desc="{Reply Message Mismatch} An attempt was made to reply to an LPC message, but the thread specified by the client ID in the message was not waiting on that message."], + [3221422176] = [id="RPC_NT_PIPE_DISCIPLINE_ERROR", desc="The RPC call completed before all pipes were processed."], + [1075445772] = [id="LOG_NO_RESTART", desc="The log service encountered a log stream with no restart area."], + [3223192326] = [id="GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED", desc="The specified VidPN modality is not supported (for example, at least two of the pinned modes are not co-functional)."], + [3223453706] = [id="FWP_IN_USE", desc="The object is referenced by other objects and cannot be deleted."], + [118030337] = [id="invalidprintername", desc="The printer name is invalid."], + [3221225646] = [id="PIPE_BUSY", desc="The specified pipe is set to complete operations and there are current I/O operations queued so that it cannot be changed to queue operations."], + [3221226011] = [id="DATA_NOT_ACCEPTED", desc="{Data Not Accepted} The TDI client could not handle the data received during an indication."], + [3221226031] = [id="ALLOCATE_BUCKET", desc="The bucket array must be grown. Retry the transaction after doing so."], + [3221225715] = [id="INVALID_PARAMETER_5", desc="An invalid parameter was passed to a service or function as the fifth argument."], + [3223192374] = [id="GRAPHICS_NO_ACTIVE_VIDPN", desc="The VidPN manager of the particular display adapter does not have an active VidPN."], + [3223388169] = [id="FVE_ACTION_NOT_ALLOWED", desc="The requested action was denied by the FVE control engine."], + [3223453700] = [id="FWP_LAYER_NOT_FOUND", desc="The layer does not exist."], + [1114113] = [id="diffdevice", desc="The system cannot move the file to a different disk drive."], + [3223388166] = [id="FVE_FS_NOT_EXTENDED", desc="The file system does not extend to the end of the volume."], + [3221226498] = [id="ALL_USER_TRUST_QUOTA_EXCEEDED", desc="The total delegated trust creation quota has been exceeded."], + [3221422085] = [id="RPC_NT_SS_CONTEXT_MISMATCH", desc="The context handle does not match any known context handles."], + [3221226065] = [id="BAD_DLL_ENTRYPOINT", desc="{Invalid DLL Entrypoint} The dynamic link library %hs is not written correctly. The stack pointer has been left in an inconsistent state. The entry point should be declared as WINAPI or STDCALL. Select YES to fail the DLL load. Select NO to continue execution. Selecting NO may cause the application to operate incorrectly."], + [3221227270] = [id="LPC_INVALID_CONNECTION_USAGE", desc="The connection port is used in an invalid context."], + [1073741866] = [id="HIBERNATED", desc="The system was put into hibernation."], + [3221226046] = [id="PROTOCOL_UNREACHABLE", desc="The remote system does not support the transport protocol."], + [3221487670] = [id="PNP_TRANSLATION_FAILED", desc="A translator failed to translate resources."], + [3221880881] = [id="CTX_SHADOW_DISABLED", desc="The requested session is not configured to allow remote control."], + [3221946374] = [id="MUI_FILE_NOT_LOADED", desc="The resource loader cache does not have a loaded MUI entry."], + [3221226113] = [id="DIRECTORY_IS_A_REPARSE_POINT", desc="The NTFS directory is a reparse point."], + [3222863956] = [id="TRANSACTION_NOT_ROOT", desc="The call to create a superior enlistment on this transaction object could not be completed because the transaction object specified for the enlistment is a subordinate branch of the transaction. Only the root of the transaction can be enlisted as a superior."], + [3223192329] = [id="GRAPHICS_INVALID_VIDPN_TARGETMODESET", desc="The specified VidPN target mode set is invalid."], + [3223388164] = [id="FVE_FAILED_WRONG_FS", desc="The partition cannot be encrypted because the file system is not supported."], + [3223453705] = [id="FWP_ALREADY_EXISTS", desc="An object with that GUID or LUID already exists."], + [3221225760] = [id="CANCELLED", desc="The I/O request was canceled."], + [3221356567] = [id="RPC_NT_SERVER_UNAVAILABLE", desc="The RPC server is unavailable."], + [3221946371] = [id="MUI_INVALID_RC_CONFIG", desc="The RC manifest is corrupted with garbage data, is an unsupported version, or is missing a required item."], + [3222929434] = [id="LOG_RECORDS_RESERVED_INVALID", desc="The number of reserved log records or the adjustment of the number of reserved log records is invalid."], + [3223388199] = [id="FVE_POLICY_USER_DISABLE_RDV_NOT_ALLOWED", desc="Group policy does not permit turning off BitLocker Drive Encryption on roaming data volumes."], + [3221225488] = [id="INVALID_DEVICE_REQUEST", desc="The specified request is not a valid operation for the target device."], + [3221356587] = [id="RPC_NT_MAX_CALLS_TOO_SMALL", desc="The maximum number of calls is too small."], + [3221225739] = [id="INVALID_LOGON_TYPE", desc="Indicates an invalid value has been provided for the LogonType requested."], + [3221225844] = [id="DEVICE_NOT_PARTITIONED", desc="The tape partition information could not be found when loading a tape."], + [3222863878] = [id="RM_METADATA_CORRUPT", desc="The metadata of the resource manager has been corrupted. The resource manager will not function."], + [3222863926] = [id="FILE_IDENTITY_NOT_PERSISTENT", desc="The file cannot be opened in a transaction because its identity depends on the outcome of an unresolved transaction."], + [2359299] = [id="sharebufexc", desc="A sharing buffer has been exceeded."], + [3221226149] = [id="DS_BUSY", desc="The directory service is busy."], + [3222863876] = [id="TM_INITIALIZATION_FAILED", desc="The transaction manager was unable to be successfully initialized. Transacted operations are not supported."], + [3222929435] = [id="LOG_SPACE_RESERVED_INVALID", desc="The reserved log space or the adjustment of the log space is invalid."], + [3223388175] = [id="FVE_OVERLAPPED_UPDATE", desc="The control block for the encrypted volume was updated by another thread. Try again."], + [3221225729] = [id="DIRECTORY_NOT_EMPTY", desc="Indicates that the directory trying to be deleted is not empty."], + [3221226169] = [id="NOINTERFACE", desc="The requested interface is not supported."], + [3221422089] = [id="RPC_NT_NULL_REF_POINTER", desc="A null reference pointer was passed to the stub."], + [3223519249] = [id="NDIS_ADAPTER_NOT_READY", desc="The network interface is not ready to complete this operation."], + [0] = [id="SUCCESS", desc="The operation completed successfully."], + [3221225873] = [id="MUTANT_LIMIT_EXCEEDED", desc="An attempt was made to acquire a mutant such that its maximum count would have been exceeded."], + [3223519240] = [id="NDIS_DEVICE_FAILED", desc="The network interface has encountered an internal unrecoverable failure."], + [2149122057] = [id="COULD_NOT_RESIZE_LOG", desc="The log could not be set to the requested size."], + [3221422087] = [id="RPC_NT_SS_HANDLES_MISMATCH", desc="The binding handles passed to an RPC do not match."], + [3221226048] = [id="REQUEST_ABORTED", desc="The request was aborted."], + [3221226217] = [id="CURRENT_DOMAIN_NOT_ALLOWED", desc="This operation cannot be performed on the current domain."], + [3223388181] = [id="FVE_KEYFILE_NO_VMK", desc="The BitLocker encryption key could not be obtained from the startup key or the recovery password."], + [3224764421] = [id="IPSEC_INVALID_PACKET", desc="The IPsec header and/or trailer in the packet is invalid."], + [1073741833] = [id="REGISTRY_RECOVERED", desc="{Registry Recovery} One of the files that contains the system registry data had to be recovered by using a log or alternate copy. The recovery was successful."], + [3221356603] = [id="RPC_NT_NOT_ALL_OBJS_UNEXPORTED", desc="There is nothing to unexport."], + [3223388163] = [id="FVE_TOO_SMALL", desc="Not enough free space remains on the volume to allow encryption."], + [3223453708] = [id="FWP_WRONG_SESSION", desc="The call was made from the wrong session and cannot be completed."], + [16973825] = [id="nomoreitems", desc="No more data is available."], + [146735106] = [id="accountExpired", desc="This user account has expired."], + [1073741874] = [id="ACCESS_AUDIT_BY_POLICY", desc="Access to %1 is monitored by policy rule %2."], + [3221225502] = [id="INVALID_LOCK_SEQUENCE", desc="{Invalid Lock Sequence} An attempt was made to execute an invalid lock sequence."], + [3223523347] = [id="NDIS_OFFLOAD_PATH_REJECTED", desc="The IP Path object is not in an offloadable state."], + [3221225495] = [id="NO_MEMORY", desc="{Not Enough Quota} Not enough virtual memory or paging file quota is available to complete the specified operation."], + [3221226541] = [id="NO_SECURITY_CONTEXT", desc="The required security context does not exist."], + [3221226165] = [id="FLOAT_MULTIPLE_TRAPS", desc="{EXCEPTION} Multiple floating-point traps."], + [3224797185] = [id="IPSEC_DOSP_RECEIVED_MULTICAST", desc="IPsec Dos Protection received an IPsec specific multicast packet which is not allowed."], + [3221226013] = [id="VDM_HARD_ERROR", desc="NTVDM encountered a hard error."], + [3221225703] = [id="BAD_DESCRIPTOR_FORMAT", desc="Indicates a security descriptor is not in the necessary format (absolute or self-relative)."], + [3221226246] = [id="CSS_AUTHENTICATION_FAILURE", desc="Copy protection error-DVD CSS Authentication failed."], + [3222929440] = [id="LOG_ARCHIVE_NOT_IN_PROGRESS", desc="The operation requires an archive context."], + [3223192385] = [id="GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT", desc="Failed to acquire the display mode management interface."], + [3221225543] = [id="SEMAPHORE_LIMIT_EXCEEDED", desc="An attempt was made to release a semaphore such that its maximum count would have been exceeded."], + [3221225755] = [id="INVALID_IMAGE_NE_FORMAT", desc="The specified image file did not have the correct format. It appears to be NE format."], + [3221356572] = [id="RPC_NT_CALL_FAILED_DNE", desc="The RPC failed and did not execute."], + [2147483675] = [id="FILEMARK_DETECTED", desc="{Filemark Found} A filemark was detected."], + [3223060501] = [id="FLT_INSTANCE_NOT_FOUND", desc="The system could not find the instance specified."], + [3223191808] = [id="GRAPHICS_NO_VIDEO_MEMORY", desc="Not enough video memory is available to complete the operation."], + [3223192345] = [id="GRAPHICS_INVALID_VIDPN_PRESENT_PATH", desc="The specified VidPN present path is invalid."], + [3223527428] = [id="NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL", desc="The list of low power protocol offloads is full."], + [5701634] = [id="rmuns", desc="Too many remote usernames."], + [3221422086] = [id="RPC_NT_SS_CONTEXT_DAMAGED", desc="The context handle changed during a call."], + [3222601732] = [id="SXS_ASSEMBLY_NOT_FOUND", desc="The referenced assembly is not installed on the system."], + [3223453720] = [id="FWP_TOO_MANY_BOOTTIME_FILTERS", desc="The maximum number of boot-time filters has been reached."], + [3221226127] = [id="WRONG_EFS", desc="The file was encrypted with a different encryption driver than is currently loaded."], + [3222929454] = [id="LOG_INCONSISTENT_SECURITY", desc="Security on the log and its containers is inconsistent."], + [2147483660] = [id="GUID_SUBSTITUTION_MADE", desc="{GUID Substitution} During the translation of a globally unique identifier (GUID) to a Windows security ID (SID), no administratively defined GUID prefix was found. A substitute prefix was used, which will not compromise system security. However, this may provide a more restrictive access than intended."], + [3221880847] = [id="CTX_MODEM_RESPONSE_VOICE", desc="A voice was detected at a remote site on callback."], + [3276801] = [id="unsup", desc="The network request is not supported."], + [3221226102] = [id="IO_REPARSE_TAG_INVALID", desc="The Windows I/O reparse tag passed for the NTFS reparse point is invalid."], + [3221225741] = [id="CANNOT_IMPERSONATE", desc="Indicates that an attempt has been made to impersonate via a named pipe that has not yet been read from."], + [1073741841] = [id="RECEIVE_PARTIAL_EXPEDITED", desc="{Partial Expedited Data Received} The network transport returned partial data to its client and this data was marked as expedited by the remote system. The remaining data will be sent later."], + [3221226349] = [id="DRIVER_DATABASE_ERROR", desc="There was error [%2] processing the driver database."], + [1073741850] = [id="LOG_HARD_ERROR", desc="Application popup: %1 : %2"], + [3221422082] = [id="RPC_NT_SS_CHAR_TRANS_OPEN_FAIL", desc="The file designated by DCERPCCHARTRANS cannot be opened."], + [3222863931] = [id="TM_VOLATILE", desc="The operation could not be completed because the transaction manager does not have a log."], + [327681] = [id="noaccess", desc="Access is denied."], + [3221226167] = [id="JOURNAL_DELETE_IN_PROGRESS", desc="The volume change journal is being deleted."], + [1073741859] = [id="IMAGE_MACHINE_TYPE_MISMATCH_EXE", desc="{Machine Type Mismatch} The image file %hs is valid but is for a machine type other than the current machine."], + [3221225756] = [id="RXACT_INVALID_STATE", desc="Indicates that the transaction state of a registry subtree is incompatible with the requested operation. For example, a request has been made to start a new transaction with one already in progress, or a request has been made to apply a transaction when one is not currently in progress."], + [3222863927] = [id="CANT_BREAK_TRANSACTIONAL_DEPENDENCY", desc="The operation cannot be performed because another transaction is depending on this property not changing."], + [3223519239] = [id="NDIS_OPEN_FAILED", desc="Failed to open the network interface."], + [3221226348] = [id="DRIVER_BLOCKED", desc="Driver %2 has been blocked from loading."], + [3221225631] = [id="FREE_VM_NOT_AT_BASE", desc="Virtual memory cannot be freed because the base address is not the base of the region and a region size of zero was specified."], + [3223388173] = [id="FVE_CONV_READ_ERROR", desc="A read operation failed while converting the volume."], + [7995393] = [id="insufficientbuffer", desc="The data area passed to a system call is too small."], + [3221356621] = [id="RPC_NT_INVALID_OBJECT", desc="The object UUID is the nil UUID."], + [3222863920] = [id="LOG_CORRUPTION_DETECTED", desc="The log data is corrupt."], + [3221225555] = [id="EA_CORRUPT_ERROR", desc="The EA is corrupt and cannot be read."], + [3221356580] = [id="RPC_NT_NO_ENTRY_NAME", desc="The binding does not contain an entry name."], + [3221356602] = [id="RPC_NT_NO_MORE_MEMBERS", desc="There are no more members."], + [3221225668] = [id="UNEXPECTED_NETWORK_ERROR", desc="An unexpected network error occurred."], + [1074397188] = [id="CTX_CDM_CONNECT", desc="The Client Drive Mapping Service has connected on Terminal Connection."], + [3221225588] = [id="TOO_MANY_LUIDS_REQUESTED", desc="The number of LUIDs requested may not be allocated with a single allocation."], + [3222929433] = [id="LOG_RECORD_NONEXISTENT", desc="The log record is not a record in the log file."], + [3223519253] = [id="NDIS_INVALID_DATA", desc="The data used for this operation is not valid."], + [3221227273] = [id="HARDWARE_MEMORY_ERROR", desc="The hardware has reported an uncorrectable memory error."], + [3221225892] = [id="NOTIFICATION_GUID_ALREADY_DEFINED", desc="The specified file already has a notification GUID associated with it."], + [3222601734] = [id="SXS_MANIFEST_PARSE_ERROR", desc="The manifest file contains one or more syntax errors."], + [2293763] = [id="FCBunavail", desc="No FCBs are available to process the request."], + [3223388172] = [id="FVE_NOT_DATA_VOLUME", desc="The volume specified is not a data volume."], + [2147483668] = [id="EA_LIST_INCONSISTENT", desc="{Inconsistent EA List} The extended attribute (EA) list is inconsistent."], + [3223060482] = [id="FLT_CONTEXT_ALREADY_DEFINED", desc="A context is already defined for this object."], + [3223192576] = [id="GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED", desc="The specified display adapter child device already has an external device connected to it."], + [3221225762] = [id="INVALID_COMPUTER_NAME", desc="Indicates a name that was specified as a remote computer name is syntactically invalid."], + [3221226329] = [id="INVALID_IMAGE_WIN_32", desc="The specified image file did not have the correct format; it appears to be a 32-bit Windows image."], + [3223453704] = [id="FWP_NOT_FOUND", desc="The object does not exist."], + [3221226533] = [id="HIVE_UNLOADED", desc="Illegal operation attempted on a registry key which has already been unloaded."], + [3222601751] = [id="SXS_INVALID_IDENTITY_ATTRIBUTE_NAME", desc="The name of an attribute in an identity is not within the legal range."], + [3223519275] = [id="NDIS_INTERFACE_NOT_FOUND", desc="The network interface was not found."], + [3221225700] = [id="INTERNAL_DB_CORRUPTION", desc="This error indicates that the requested operation cannot be completed due to a catastrophic media failure or an on-disk data structure corruption."], + [3221226074] = [id="PWD_TOO_SHORT", desc="The password provided is too short to meet the policy of your user account. Choose a longer password."], + [3223192969] = [id="GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND", desc="An operation failed because a DDC/CI message had an invalid value in its command field."], + [1075708747] = [id="GRAPHICS_DATASET_IS_EMPTY", desc="The specified dataset (for example, mode set, frequency range set, descriptor set, or topology) is empty."], + [3221226505] = [id="STACK_BUFFER_OVERRUN", desc="The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application."], + [3221225597] = [id="BAD_INHERITANCE_ACL", desc="Indicates that an attempt to build either an inherited ACL or ACE was not successful. This can be caused by a number of things. One of the more probable causes is the replacement of a CreatorId with a SID that did not fit into the ACE or ACL."], + [3221487672] = [id="PNP_INVALID_ID", desc="Driver %2 returned an invalid ID for a child device (%3)."], + [1073807362] = [id="DBG_UNABLE_TO_PROVIDE_HANDLE", desc="Debugger cannot provide a handle."], + [3223192376] = [id="GRAPHICS_MONITOR_NOT_CONNECTED", desc="No monitor is connected on the specified video present target."], + [3221225823] = [id="FT_MISSING_MEMBER", desc="An attempt was made to explicitly access the secondary copy of information via a device control to the fault tolerance driver and the secondary copy is not present in the system."], + [265] = [id="VOLUME_MOUNTED", desc="A new volume has been mounted by a file system."], + [3223453955] = [id="FWP_CANNOT_PEND", desc="The classify cannot be pended."], + [3221356575] = [id="RPC_NT_UNSUPPORTED_TRANS_SYN", desc="The RPC server does not support the transfer syntax."], + [3222929446] = [id="LOG_FULL_HANDLER_IN_PROGRESS", desc="A request has already been made to handle the log full condition."], + [3221225672] = [id="PRINT_CANCELLED", desc="The requested print file has been canceled."], + [1073741853] = [id="WX86_CONTINUE", desc="An exception status code that is used by the Win32 x86 emulation subsystem."], + [3221225574] = [id="NO_SUCH_GROUP", desc="The specified group does not exist."], + [3223192408] = [id="GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT", desc="The specified monitor-frequency range constraint is invalid."], + [7143425] = [id="brokenpipe", desc="The pipe has been ended."], + [3221225608] = [id="NOT_MAPPED_DATA", desc="Specified section to flush does not map a data file."], + [3221225790] = [id="LINK_FAILED", desc="{Virtual Circuit Closed} An existing connection (virtual circuit) has been broken at the remote computer. There is probably something wrong with the network software protocol or the network hardware on the remote computer."], + [3221225788] = [id="REMOTE_DISCONNECT", desc="{Virtual Circuit Closed} The network transport on a remote computer has closed a network connection. There may or may not be I/O requests outstanding."], + [3221226193] = [id="SYSTEM_IMAGE_BAD_SIGNATURE", desc="{Fatal System Error} The system image %s is not properly signed. The file has been replaced with the signed file. The system has been shut down."], + [3221225881] = [id="NOLOGON_WORKSTATION_TRUST_ACCOUNT", desc="The account used is a computer account. Use your global user account or local user account to access this server."], + [268] = [id="NOTIFY_ENUM_DIR", desc="Indicates that a notify change request is being completed and that the information is not being returned in the caller's buffer. The caller now needs to enumerate the files to find the changes."], + [3221225686] = [id="VIRTUAL_CIRCUIT_CLOSED", desc="{Network Request Timeout} The session with a remote server has been disconnected because the time-out interval for a request has expired."], + [3223191552] = [id="GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER", desc="Exclusive mode ownership is needed to create an unmanaged primary allocation."], + [3223192860] = [id="GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS", desc="The DxgkDdiOPMGetCOPPCompatibleInformation, DxgkDdiOPMGetInformation, or DxgkDdiOPMConfigureProtectedOutput function failed. This error is returned only if a protected output has OPM semantics. "], + [3223192960] = [id="GRAPHICS_I2C_NOT_SUPPORTED", desc="The monitor connected to the specified video output does not have an I2C bus."], + [1075708679] = [id="GRAPHICS_MODE_NOT_PINNED", desc="No mode is pinned on the specified VidPN source/target."], + [3221226506] = [id="NO_S4U_PROT_SUPPORT", desc="The Kerberos subsystem encountered an error. A service for user protocol request was made against a domain controller which does not support service for user."], + [3221227780] = [id="FILE_TOO_LARGE", desc="The file size exceeds the limit allowed and cannot be saved."], + [3221226105] = [id="IO_REPARSE_TAG_NOT_HANDLED", desc="The layered file system driver for this I/O tag did not handle it when needed."], + [3221880882] = [id="RDP_PROTOCOL_ERROR", desc="The RDP protocol component %2 detected an error in the protocol stream and has disconnected the client."], + [3224797186] = [id="IPSEC_DOSP_INVALID_PACKET", desc="IPsec Dos Protection received an incorrectly formatted packet."], + [3221225779] = [id="TIME_DIFFERENCE_AT_DC", desc="The time at the primary domain controller is different from the time at the backup domain controller or member server by too large an amount."], + [3222863944] = [id="NO_SAVEPOINT_WITH_OPEN_FILES", desc="The savepoint operation failed because files are open on the transaction, which is not permitted."], + [3223192388] = [id="GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL", desc="The specified VidPN's present path importance ordinal is invalid."], + [3221226563] = [id="CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE", desc="File is encrypted and should be opened in Client Side Encryption mode."], + [1073742484] = [id="WAKE_SYSTEM", desc="The system has awoken."], + [3221266561] = [id="LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR", desc="{Delayed Write Failed} Windows was unable to save all the data for the file %hs; the data has been lost. This error was returned by the server on which the file exists. Try to save this file elsewhere."], + [3221225626] = [id="INSUFFICIENT_RESOURCES", desc="Insufficient system resources exist to complete the API."], + [3221225842] = [id="PARTITION_FAILURE", desc="The tape could not be partitioned."], + [3221226321] = [id="UNSUPPORTED_PREAUTH", desc="An unsupported pre-authentication mechanism was presented to the Kerberos package."], + [3221226053] = [id="TIMER_RESOLUTION_NOT_SET", desc="The timer resolution was not previously set by the current process."], + [3223192328] = [id="GRAPHICS_INVALID_VIDPN_SOURCEMODESET", desc="The specified VidPN source mode set is invalid."], + [3221226238] = [id="SHUTDOWN_IN_PROGRESS", desc="A system shutdown is in progress."], + [276] = [id="PAGE_FAULT_PAGING_FILE", desc="The page fault was satisfied by reading from a secondary storage device."], + [3221225513] = [id="INVALID_UNWIND_TARGET", desc="An invalid unwind target was encountered during an unwind operation."], + [3221356589] = [id="RPC_NT_PROTSEQ_NOT_FOUND", desc="The RPC protocol sequence was not found."], + [3223192409] = [id="GRAPHICS_MAX_NUM_PATHS_REACHED", desc="The maximum supported number of present paths has been reached."], + [3221225607] = [id="SECTION_NOT_EXTENDED", desc="A mapped section could not be extended."], + [1075708983] = [id="GRAPHICS_LEADLINK_START_DEFERRED", desc="Starting the lead adapter in a linked configuration has been temporarily deferred."], + [3221225819] = [id="LOGON_TYPE_NOT_GRANTED", desc="A user has requested a type of logon (for example, interactive or network) that has not been granted. An administrator has control over who may logon interactively and through the network."], + [3221356571] = [id="RPC_NT_CALL_FAILED", desc="The RPC failed."], + [3221227274] = [id="THREADPOOL_HANDLE_EXCEPTION", desc="Status 0x%08x was returned, waiting on handle 0x%x for wait 0x%p, in waiter 0x%p."], + [3221225813] = [id="LOGON_NOT_GRANTED", desc="A requested type of logon (for example, interactive, network, and service) is not granted by the local security policy of the target system. Ask the system administrator to grant the necessary form of logon."], + [3221225654] = [id="FILE_FORCED_CLOSED", desc="The specified file has been closed by another process."], + [3223126022] = [id="MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK", desc="The provided monitor descriptor block is either corrupted or does not contain the monitor's detailed serial number."], + [3221225568] = [id="NO_SUCH_PRIVILEGE", desc="A specified privilege does not exist."], + [3223192848] = [id="GRAPHICS_OPM_THEATER_MODE_ENABLED", desc="DxgkDdiOpmCreateProtectedOutput() could not create a protected output because the video present target is in theater mode."], + [3221225496] = [id="CONFLICTING_ADDRESSES", desc="{Conflicting Address Range} The specified address range conflicts with the address space."], + [3221225865] = [id="TOO_LATE", desc="A write operation was attempted to a volume after it was dismounted."], + [3221225999] = [id="TRANSACTION_ABORTED", desc="The transport aborted a pending transaction."], + [3223192391] = [id="GRAPHICS_INVALID_GAMMA_RAMP", desc="The specified gamma ramp is invalid."], + [3223519256] = [id="NDIS_ADAPTER_REMOVED", desc="The network interface has been removed."], + [3223519258] = [id="NDIS_GROUP_ADDRESS_IN_USE", desc="An attempt was made to remove a token ring group address that is in use by other components."], + [3221356609] = [id="RPC_NT_CANNOT_SUPPORT", desc="The requested operation is not supported."], + [3222536216] = [id="ACPI_RS_ACCESS", desc="An error occurred during an access to region space."], + [3223192837] = [id="GRAPHICS_OPM_NO_PROTECTED_OUTPUTS_EXIST", desc="The GDI display device passed to this function does not have any active protected outputs."], + [3221225661] = [id="DUPLICATE_NAME", desc="A duplicate name exists on the network."], + [3222470661] = [id="CLUSTER_LOCAL_NODE_NOT_FOUND", desc="The cluster local node information was not found."], + [3223192839] = [id="GRAPHICS_PVP_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP", desc="This function failed because the GDI display device passed to it was not attached to the Windows desktop."], + [3221225705] = [id="UNEXPECTED_IO_ERROR", desc="If an I/O error that is not defined in the standard FsRtl filter is returned, it is converted to the following error, which is guaranteed to be in the filter. In this case, information is lost; however, the filter correctly handles the exception."], + [3222863953] = [id="TRANSACTIONMANAGER_NOT_FOUND", desc="The specified transaction manager was unable to be opened because it was not found."], + [3223191813] = [id="GRAPHICS_TRY_AGAIN_NOW", desc="A problem could not be solved due to an existing condition. Try again now."], + [3223453712] = [id="FWP_SESSION_ABORTED", desc="The session has been canceled."], + [1073807369] = [id="DBG_COMMAND_EXCEPTION", desc="Debugger command communication exception."], + [3221225880] = [id="NOLOGON_INTERDOMAIN_TRUST_ACCOUNT", desc="The account used is an interdomain trust account. Use your global user account or local user account to access this server."], + [3221226052] = [id="AUDIT_FAILED", desc="{Audit Failed} An attempt to generate a security audit failed."], + [3223193056] = [id="GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED", desc="This function can be used only if a program is running in the local console session. It cannot be used if a program is running on a remote desktop session or on a terminal server session."], + [393218] = [id="invnetname", desc="The network name cannot be found."], + [3221225826] = [id="UNMAPPABLE_CHARACTER", desc="No mapping for the Unicode character exists in the target multibyte code page."], + [3221422083] = [id="RPC_NT_SS_CHAR_TRANS_SHORT_FILE", desc="The file containing the character translation table has fewer than 512 bytes."], + [3221226085] = [id="TOO_MANY_LINKS", desc="An attempt was made to create more links on a file than the file system supports."], + [3223192851] = [id="GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP", desc="The protected output cannot enable the HDCP system because it does not support it."], + [3221226500] = [id="DS_NAME_NOT_UNIQUE", desc="The requested name already exists as a unique identifier."], + [3222929425] = [id="LOG_CANT_DELETE", desc="The log service cannot delete the log file or the file system container."], + [3223192840] = [id="GRAPHICS_PVP_MIRRORING_DEVICES_NOT_SUPPORTED", desc="The PVP does not support mirroring display devices because they do not have any protected outputs."], + [3221225641] = [id="BAD_MASTER_BOOT_RECORD", desc="The type of a token object is inappropriate for its attempted use."], + [3221225728] = [id="VARIABLE_NOT_FOUND", desc="Indicates the specified environment variable name was not found in the specified environment block."], + [3221225545] = [id="SECTION_NOT_IMAGE", desc="An attempt was made to query image information on a section that does not map an image."], + [1074397189] = [id="CTX_CDM_DISCONNECT", desc="The Client Drive Mapping Service has disconnected on Terminal Connection."], + [3221266450] = [id="HOPLIMIT_EXCEEDED", desc="An Internet Control Message Protocol (ICMP) hop limit exceeded error was received."], + [3221487673] = [id="IO_REISSUE_AS_CACHED", desc="Reissue the given operation as a cached I/O operation"], + [3222601754] = [id="SXS_COMPONENT_STORE_CORRUPT", desc="The component store has become corrupted."], + [3223192368] = [id="GRAPHICS_RESOURCES_NOT_RELATED", desc="Two or more of the specified resources are not related to each other, as defined by the interface semantics."], + [3221267107] = [id="OFFLOAD_READ_FILE_NOT_SUPPORTED", desc="Offload read operations cannot be performed on:"], + [2149122113] = [id="TXF_METADATA_ALREADY_PRESENT", desc="Transaction metadata is already present on this file and cannot be superseded."], + [3221356612] = [id="RPC_NT_ZERO_DIVIDE", desc="The RPC server attempted to divide an integer by zero."], + [3222863873] = [id="TRANSACTIONAL_CONFLICT", desc="The function attempted to use a name that is reserved for use by another transaction."], + [4456450] = [id="badlink", desc="reserved"], + [273] = [id="PAGE_FAULT_DEMAND_ZERO", desc="The page fault was a demand zero fault."], + [2149646337] = [id="FVE_PARTIAL_METADATA", desc="Volume metadata read or write is incomplete."], + [3221226518] = [id="INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE", desc="The Desktop heap encountered an error while allocating session memory. There is more information in the system event log."], + [3221226160] = [id="DS_GC_NOT_AVAILABLE", desc="Unable to contact the global catalog server."], + [458753] = [id="badmcb", desc="The storage control blocks were destroyed."], + [3221226136] = [id="WMI_TRY_AGAIN", desc="The WMI request could not be completed and should be retried."], + [1073741876] = [id="BIZRULES_NOT_ENABLED", desc="Business rule scripts are disabled for the calling application."], + [3221880871] = [id="CTX_CONSOLE_DISCONNECT", desc="Disconnecting the console session is not supported."], + [3221226212] = [id="DS_GC_REQUIRED", desc="The requested operation can be performed only on a global catalog server."], + [3221225818] = [id="TOO_MANY_CONTEXT_IDS", desc="During a logon attempt, the user's security context accumulated too many security IDs. This is a very unusual situation. Remove the user from some global or local groups to reduce the number of security IDs to incorporate into the security context."], + [3221356555] = [id="RPC_NT_OBJECT_NOT_FOUND", desc="The object UUID was not found."], + [3223388195] = [id="FVE_RAW_BLOCKED", desc="BitLocker Drive Encryption cannot enter RAW access mode for this volume."], + [298] = [id="FILE_LOCKED_WITH_ONLY_READERS", desc="The file was locked and all users of the file can only read."], + [3221225861] = [id="IO_DEVICE_ERROR", desc="The I/O device reported an I/O error."], + [3221356631] = [id="RPC_NT_SEC_PKG_ERROR", desc="A security package-specific error occurred."], + [3223192344] = [id="GRAPHICS_TARGET_ALREADY_IN_SET", desc="The specified video present target is already in the video present target set."], + [1073741846] = [id="PREDEFINED_HANDLE", desc="The specified registry key is referenced by a predefined handle."], + [288] = [id="TRANSLATION_COMPLETE", desc="The translator has translated these resources into the global space and no additional translations should be performed."], + [3221356618] = [id="RPC_NT_NO_MORE_BINDINGS", desc="There are no more bindings."], + [3223192340] = [id="GRAPHICS_MODE_ALREADY_IN_MODESET", desc="The specified mode is already in the mode set."], + [2147483681] = [id="SETMARK_DETECTED", desc="A tape access reached a set mark."], + [3221226161] = [id="DIRECTORY_SERVICE_REQUIRED", desc="The requested operation requires a directory service, and none was available."], + [3221226752] = [id="INVALID_TASK_NAME", desc="The specified task name is invalid."], + [3221225613] = [id="FLOAT_DENORMAL_OPERAND", desc="{EXCEPTION} Floating-point denormal operand."], + [3221226753] = [id="INVALID_TASK_INDEX", desc="The specified task index is invalid."], + [3221225812] = [id="ALIAS_EXISTS", desc="The specified local group already exists."], + [3221226208] = [id="SAM_NEED_BOOTKEY_FLOPPY", desc="The Security Accounts Manager needs to get the boot key from the floppy disk."], + [3221225477] = [id="ACCESS_VIOLATION", desc="The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s."], + [3221226215] = [id="DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED", desc="Your computer could not be joined to the domain. You have exceeded the maximum number of computer accounts you are allowed to create in this domain. Contact your system administrator to have this limit reset or increased."], + [3222863952] = [id="ENLISTMENT_NOT_FOUND", desc="The specified enlistment was unable to be opened because it was not found."], + [67108866] = [id="_NOTIFY_ENUM_DIR", desc="Too many files have changed since the last time an NT_TRANSACT_NOTIFY_CHANGE was issued."], + [3221225586] = [id="ACCOUNT_DISABLED", desc="The referenced account is currently disabled and may not be logged on to."], + [3221225487] = [id="NO_SUCH_FILE", desc="{File Not Found} The file %hs does not exist."], + [3221227785] = [id="CANNOT_BREAK_OPLOCK", desc="The operation did not complete successfully because it would cause an oplock to be broken. The caller has requested that existing oplocks not be broken."], + [5308418] = [id="paused", desc="The message server is paused."], + [3221226006] = [id="NOT_SERVER_SESSION", desc="The transport can only process the specified request on the server side of a session."], + [3221226535] = [id="FILE_SYSTEM_LIMITATION", desc="The requested operation could not be completed due to a file system limitation."], + [3221225851] = [id="INVALID_MEMBER", desc="A new member could not be added to a local group because the member has the wrong account type."], + [266] = [id="RXACT_COMMITTED", desc="This success level status indicates that the transaction state already exists for the registry subtree but that a transaction commit was previously aborted. The commit has now been completed."], + [3221226166] = [id="DEVICE_REMOVED", desc="The device has been removed."], + [3221226565] = [id="CS_ENCRYPTION_FILE_NOT_CSE", desc="The SMB client requested a CSE FSCTL on a non-CSE file."], + [1] = [id="WAIT_1", desc="The caller specified WaitAny for WaitType and one of the dispatcher objects in the Object array has been set to the signaled state."], + [3221880880] = [id="CTX_SHADOW_INVALID", desc="The requested session cannot be controlled remotely. You cannot control your own session, a session that is trying to control your session, a session that has no user logged on, or other sessions from the console."], + [3223453749] = [id="FWP_INVALID_PARAMETER", desc="The parameter is incorrect."], + [3221225680] = [id="REQUEST_NOT_ACCEPTED", desc="No more connections can be made to this remote computer at this time because the computer has already accepted the maximum number of connections."], + [1073741829] = [id="SEGMENT_NOTIFICATION", desc="{Segment Load} A virtual DOS machine (VDM) is loading, unloading, or moving an MS-DOS or Win16 program segment image. An exception is raised so that a debugger can load, unload, or track symbols and breakpoints within these 16-bit segments."], + [3221880845] = [id="CTX_MODEM_RESPONSE_NO_DIALTONE", desc="A dial tone was not detected within the required time. Verify that the phone cable is properly attached and functional."], + [3222601756] = [id="SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT", desc="The identities of the manifests are identical, but their contents are different."], + [3223388187] = [id="FVE_AUTH_INVALID_APPLICATION", desc="A boot application hash does not match the hash computed when BitLocker was turned on."], + [3221226344] = [id="MOUNT_POINT_NOT_RESOLVED", desc="The create operation failed because the name contained at least one mount point that resolves to a volume to which the specified device object is not attached."], + [3221226214] = [id="DS_NO_FPO_IN_UNIVERSAL_GROUPS", desc="Foreign security principals cannot be members of universal groups."], + [3221946370] = [id="MUI_INVALID_FILE", desc="The resource loader failed to load an MUI file because the file failed to pass validation."], + [15335425] = [id="moredata", desc="More data is available."], + [3221226540] = [id="ELEVATION_REQUIRED", desc="The requested operation requires elevation."], + [3223191810] = [id="GRAPHICS_ALLOCATION_BUSY", desc="The allocation is currently busy."], + [2147483665] = [id="DEVICE_BUSY", desc="{Device Busy} The device is currently busy."], + [3221266560] = [id="LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED", desc="{Delayed Write Failed} Windows was unable to save all the data for the file %hs; the data has been lost. This error may be caused by network connectivity issues. Try to save this file elsewhere."], + [3222470663] = [id="CLUSTER_NETWORK_NOT_FOUND", desc="The cluster network was not found."], + [3223453737] = [id="FWP_RESERVED", desc="A reserved field is nonzero."], + [3221225987] = [id="USER_SESSION_DELETED", desc="The remote user session has been deleted."], + [3221226595] = [id="DEVICE_FEATURE_NOT_SUPPORTED", desc="The storage device does not support Offload Write."], + [3221226138] = [id="POLICY_OBJECT_NOT_FOUND", desc="The policy object does not exist when it should."], + [3221225676] = [id="BAD_NETWORK_NAME", desc="{Network Name Not Found} The specified share name cannot be found on the remote server."], + [3221356568] = [id="RPC_NT_SERVER_TOO_BUSY", desc="The RPC server is too busy to complete this operation."], + [3221225501] = [id="ILLEGAL_INSTRUCTION", desc="{EXCEPTION} Illegal Instruction An attempt was made to execute an illegal instruction."], + [3221226178] = [id="DRIVER_FAILED_SLEEP", desc="{System Standby Failed} The driver %hs does not support standby mode. Updating this driver may allow the system to go to standby mode."], + [3221225763] = [id="FILE_DELETED", desc="An I/O request other than close was performed on a file after it was deleted, which can only happen to a request that did not complete before the last handle was closed via NtClose."], + [3221226155] = [id="DS_OBJ_CLASS_VIOLATION", desc="The requested operation did not satisfy one or more constraints that are associated with the class of the object."], + [3222536204] = [id="ACPI_ADDRESS_NOT_MAPPED", desc="An address failed to translate."], + [3223192362] = [id="GRAPHICS_INVALID_MONITORDESCRIPTORSET", desc="The specified monitor descriptor set is invalid."], + [3223519238] = [id="NDIS_ADAPTER_NOT_FOUND", desc="Failed to find the network interface or the network interface is not ready."], + [3221225734] = [id="NAME_TOO_LONG", desc="A specified name string is too long for its intended use."], + [3221880875] = [id="CTX_WINSTATION_ACCESS_DENIED", desc="A process has requested access to a session, but has not been granted those access rights."], + [3223191812] = [id="GRAPHICS_TRY_AGAIN_LATER", desc="A problem could not be solved due to an existing condition. Try again later."], + [3223453717] = [id="FWP_KM_CLIENTS_ONLY", desc="The call is allowed for kernel-mode callers only."], + [3221225719] = [id="INVALID_PARAMETER_9", desc="An invalid parameter was passed to a service or function as the ninth argument."], + [3221225564] = [id="NO_IMPERSONATION_TOKEN", desc="An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client."], + [3221226528] = [id="ASSERTION_FAILURE", desc="There has been an assertion failure."], + [3221225540] = [id="QUOTA_EXCEEDED", desc="Insufficient quota exists to complete the operation."], + [3221880843] = [id="CTX_MODEM_RESPONSE_TIMEOUT", desc="The modem did not respond to the command sent to it. Verify that the modem cable is properly attached and the modem is turned on."], + [3222863950] = [id="TRANSACTION_NOT_FOUND", desc="The specified transaction was unable to be opened because it was not found."], + [3223192412] = [id="GRAPHICS_CLIENTVIDPN_NOT_SET", desc="The client VidPN is not set on this adapter (for example, no user mode-initiated mode changes have taken place on this adapter)."], + [3221227297] = [id="CALLBACK_RETURNED_THREAD_AFFINITY", desc="A threadpool worker thread entered a callback at thread affinity %p and exited at affinity %p."], + [3221356614] = [id="RPC_NT_FP_DIV_ZERO", desc="A floating point operation at the RPC server caused a divide by zero."], + [4325377] = [id="noipc", desc="The network resource type is not correct."], + [3407874] = [id="invpfid", desc="The print file FID is invalid."], + [140967937] = [id="nosuchprintjob", desc="The print job does not exist."], + [3221226220] = [id="DS_INIT_FAILURE_CONSOLE", desc="Directory Services could not start because of the following error: %hs Error Status: 0x%x. Click OK to shut down the system. You can use the recovery console to diagnose the system further."], + [269] = [id="NO_QUOTAS_FOR_ACCOUNT", desc="{No Quotas} No system quota limits are specifically set for this account."], + [3221227289] = [id="CONTEXT_MISMATCH", desc="The provided context did not match the target."], + [3222536206] = [id="ACPI_HANDLER_COLLISION", desc="A handler for the target already exists."], + [3223388194] = [id="FVE_RAW_ACCESS", desc="No action was taken because BitLocker Drive Encryption is in RAW access mode."], + [2147483670] = [id="VERIFY_REQUIRED", desc="{Verifying Disk} The media has changed and a verify operation is in progress; therefore, no reads or writes may be performed to the device, except those that are used in the verify operation."], + [3221356550] = [id="RPC_NT_INVALID_STRING_UUID", desc="The string UUID is invalid."], + [3222601765] = [id="SMI_PRIMITIVE_INSTALLER_FAILED", desc="The SMI primitive installer failed during setup or servicing."], + [3223060503] = [id="FLT_INVALID_CONTEXT_REGISTRATION", desc="An invalid parameter was specified during context registration."], + [3221226071] = [id="PATH_NOT_COVERED", desc="The contacted server does not support the indicated part of the DFS namespace."], + [3221226273] = [id="SMARTCARD_SUBSYSTEM_FAILURE", desc="The Kerberos protocol encountered an error while attempting to use the smart card subsystem."], + [3222536201] = [id="ACPI_INVALID_OBJTYPE", desc="An object with an incorrect type was specified."], + [3222863883] = [id="LOG_RESIZE_INVALID_SIZE", desc="The requested log size for the file system resource manager is invalid."], + [3221225621] = [id="INTEGER_OVERFLOW", desc="{EXCEPTION} Integer overflow."], + [3407873] = [id="dupname", desc="A duplicate name exists on the network."], + [1769475] = [id="badsector", desc="The drive cannot find the sector requested."], + [196609] = [id="badpath", desc="The system cannot find the path specified."], + [3221225620] = [id="INTEGER_DIVIDE_BY_ZERO", desc="{EXCEPTION} Integer division by zero."], + [3221226561] = [id="CS_ENCRYPTION_INVALID_SERVER_RESPONSE", desc="The remote server sent an invalid response for a file being opened with Client Side Encryption."], + [3223060485] = [id="FLT_INVALID_NAME_REQUEST", desc="An invalid name request was made. The name requested cannot be retrieved at this time."], + [3221225523] = [id="OBJECT_NAME_INVALID", desc="The object name is invalid."], + [3221225637] = [id="BAD_IMPERSONATION_LEVEL", desc="A specified impersonation level is invalid. Also used to indicate that a required impersonation level was not provided."], + [3221880835] = [id="CTX_PD_NOT_FOUND", desc="The protocol driver %1 was not found in the system path."], + [3223192846] = [id="GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH", desc="A certificate could not be returned because the certificate buffer passed to the function was too small."], + [5963778] = [id="baduid", desc="The Uid is not known as a valid user identifier on this session."], + [1073741858] = [id="WX86_EXCEPTION_CHAIN", desc="An exception status code that is used by the Win32 x86 emulation subsystem."], + [3221225810] = [id="MEMBER_NOT_IN_ALIAS", desc="The specified account name is not a member of the group."], + [3221225559] = [id="CTL_FILE_NOT_SUPPORTED", desc="An attempt was made to set the control attribute on a file. This attribute is not supported in the destination file system."], + [3221225560] = [id="UNKNOWN_REVISION", desc="Indicates a revision number that was encountered or specified is not one that is known by the service. It may be a more recent revision than the service is aware of."], + [3223192632] = [id="GRAPHICS_NOT_POST_DEVICE_DRIVER", desc="The driver trying to start is not the same as the driver for the posted display adapter."], + [3223192850] = [id="GRAPHICS_OPM_INVALID_SRM", desc="The HDCP SRM passed to this function did not comply with section 5 of the HDCP 1.1 specification."], + [3221225511] = [id="UNWIND", desc="Unwind exception code."], + [3221227272] = [id="RESOURCE_IN_USE", desc="The resource requested is already in use."], + [3221225737] = [id="MESSAGE_NOT_FOUND", desc="RtlFindMessage could not locate the requested message ID in the message table resource."], + [2147483691] = [id="DLL_MIGHT_BE_INSECURE", desc="The application is attempting to run executable code from the module %hs. This may be insecure. An alternative, %hs, is available. Should the application use the secure module %hs?"], + [3221880853] = [id="CTX_WINSTATION_NOT_FOUND", desc="The specified session cannot be found."], + [3222863960] = [id="TRANSACTION_RECORD_TOO_LONG", desc="The specified operation could not be performed because the record to be logged was too long. This can occur because either there are too many enlistments on this transaction or the combined RecoveryInformation being logged on behalf of those enlistments is too long."], + [3221225610] = [id="RESOURCE_TYPE_NOT_FOUND", desc="Indicates the specified resource type cannot be found in the image file."], + [3223060497] = [id="FLT_INSTANCE_ALTITUDE_COLLISION", desc="An instance already exists at this altitude on the volume specified."], + [3223519261] = [id="NDIS_ALREADY_MAPPED", desc="An attempt was made to map a file that is already mapped."], + [3221225666] = [id="ADAPTER_HARDWARE_ERROR", desc="An I/O adapter hardware error has occurred."], + [3221226027] = [id="OBJECTID_EXISTS", desc="The attempt to set the object ID failed because the object already has an ID."], + [3221225992] = [id="INVALID_ADDRESS_WILDCARD", desc="The transport rejected the specified network address due to invalid use of a wildcard."], + [3222863875] = [id="TRANSACTION_NOT_ACTIVE", desc="The requested operation was made in the context of a transaction that is no longer active."], + [8060929] = [id="invalidname", desc="The filename, directory name, or volume label syntax is incorrect."], + [3221226576] = [id="DRIVER_PROCESS_TERMINATED", desc="The process hosting the driver for this device has terminated."], + [1073741875] = [id="ABANDON_HIBERFILE", desc="A valid hibernation file has been invalidated and should be abandoned."], + [3221291009] = [id="DBG_NO_STATE_CHANGE", desc="The debugger did not perform a state change."], + [3221226579] = [id="RESTART_BOOT_APPLICATION", desc="This boot application must be restarted."], + [3221226342] = [id="DEVICE_ENUMERATION_ERROR", desc="The device encountered an error while applying power or reading the device configuration. This may be caused by a failure of your hardware or by a poor connection."], + [3221225475] = [id="INVALID_INFO_CLASS", desc="{Invalid Parameter} The specified information class is not a valid information class for the specified object."], + [3223192861] = [id="GRAPHICS_OPM_INVALID_INFORMATION_REQUEST", desc="The DxgkDdiOPMGetInformation and DxgkDdiOPMGetCOPPCompatibleInformation functions return this error code if the passed-in sequence number is not the expected sequence number or the passed-in OMAC value is invalid."], + [3224797189] = [id="IPSEC_DOSP_KEYMOD_NOT_ALLOWED", desc="IPsec Dos Protection received an IPsec negotiation packet for a keying module which is not allowed by policy."], + [160890881] = [id="invgroup", desc="invgroup"], + [3221225605] = [id="AGENTS_EXHAUSTED", desc="No more authority agent values are available for the particular identifier authority value."], + [3222601767] = [id="SXS_FILE_HASH_MISSING", desc="A component is missing file verification information in its manifest."], + [3223388208] = [id="FVE_VOLUME_TOO_SMALL", desc="The drive is too small to be protected using BitLocker Drive Encryption."], + [5832706] = [id="noresource", desc="No resources currently available for request."], + [3221356625] = [id="RPC_NT_BINDING_INCOMPLETE", desc="The binding handle does not contain all the required information."], + [3223192404] = [id="GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS", desc="All available importance ordinals are being used in the specified topology."], + [8126465] = [id="unknownlevel", desc="The system call level is not correct."], + [1073741871] = [id="SYSTEM_POWERSTATE_TRANSITION", desc="The system power state is transitioning from %2 to %3."], + [3221880884] = [id="CTX_CLIENT_LICENSE_IN_USE", desc="Your request to connect to this terminal server has been rejected. Your terminal server client license number is currently being used by another user. Contact your system administrator to obtain a new copy of the terminal server client with a valid, unique license number. Click OK to continue."], + [3222863874] = [id="INVALID_TRANSACTION", desc="The transaction handle associated with this operation is invalid."], + [3221266566] = [id="AUTHIP_FAILURE", desc="This indicates that there was an AuthIP failure when attempting to connect to the remote host."], + [3221225824] = [id="ILL_FORMED_SERVICE_ENTRY", desc="A configuration registry node that represents a driver service entry was ill-formed and did not contain the required value entries."], + [3221225805] = [id="REGISTRY_IO_FAILED", desc="An I/O operation initiated by the Registry failed and cannot be recovered. The registry could not read in, write out, or flush one of the files that contain the system's image of the registry."], + [3223193061] = [id="GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE", desc="This function failed because the GDI device passed to it did not have a monitor associated with it."], + [1073741839] = [id="RECEIVE_PARTIAL", desc="{Partial Data Received} The network transport returned partial data to its client. The remaining data will be sent later."], + [3222536205] = [id="ACPI_INVALID_EVENTTYPE", desc="An incorrect event type was specified."], + [3221225618] = [id="FLOAT_STACK_CHECK", desc="{EXCEPTION} Floating-point stack check."], + [3221226001] = [id="TRANSACTION_NO_RELEASE", desc="The transport did not receive a release for a pending response."], + [3221226524] = [id="INVALID_USER_PRINCIPAL_NAME", desc="The User Principal Name (UPN) is invalid."], + [4521986] = [id="badpermits", desc="The access permissions specified for a file or directory are not a valid combination."], + [786433] = [id="badaccess", desc="The access code is invalid."], + [3221226090] = [id="LICENSE_VIOLATION", desc="{License Violation} The system has detected tampering with your registered product type. This is a violation of your software license. Tampering with the product type is not permitted."], + [3223192375] = [id="GRAPHICS_STALE_VIDPN_TOPOLOGY", desc="The specified VidPN topology is stale; obtain the new topology."], + [3221226542] = [id="PKU2U_CERT_FAILURE", desc="The PKU2U protocol encountered an error while attempting to utilize the associated certificates."], + [3221225809] = [id="NO_SUCH_ALIAS", desc="The specified local group does not exist."], + [3222470665] = [id="CLUSTER_NETINTERFACE_NOT_FOUND", desc="The cluster network interface was not found."], + [3222863880] = [id="DIRECTORY_NOT_RM", desc="The specified directory does not contain a file system resource manager."], + [3222929409] = [id="LOG_SECTOR_INVALID", desc="The log service found an invalid log sector."], + [3221266567] = [id="DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS", desc="OID mapped groups cannot have members."], + [3223193059] = [id="GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED", desc="This function does not support GDI mirroring display devices because GDI mirroring display devices do not have any physical monitors associated with them."], + [3221225590] = [id="INVALID_SUB_AUTHORITY", desc="Indicates the sub-authority value is invalid for the particular use."], + [3221225659] = [id="NOT_SUPPORTED", desc="The request is not supported."], + [3221225572] = [id="NO_SUCH_USER", desc="The specified account does not exist."], + [1075708183] = [id="GRAPHICS_DRIVER_MISMATCH", desc="The kernel driver detected a version mismatch between it and the user mode driver."], + [3222470672] = [id="CLUSTER_INVALID_NETWORK", desc="The cluster network is not valid."], + [3222601752] = [id="SXS_IDENTITY_DUPLICATE_ATTRIBUTE", desc="An identity contains two definitions for the same attribute."], + [3222863887] = [id="CRM_PROTOCOL_ALREADY_EXISTS", desc="The resource manager tried to register a protocol that already exists."], + [3223388186] = [id="FVE_PIN_INVALID", desc="The BitLocker encryption key could not be obtained from the TPM and PIN."], + [3221880854] = [id="CTX_WINSTATION_NAME_COLLISION", desc="The specified session name is already in use."], + [3223192838] = [id="GRAPHICS_PVP_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME", desc="The PVP cannot find an actual GDI display device that corresponds to the passed-in GDI display device name."], + [3223192965] = [id="GRAPHICS_DDCCI_INVALID_DATA", desc="The data received from the monitor is invalid."], + [3221225476] = [id="INFO_LENGTH_MISMATCH", desc="The specified information record length does not match the length that is required for the specified information class."], + [3221226081] = [id="INVALID_PLUGPLAY_DEVICE_PATH", desc="The specified Plug and Play registry device path is invalid."], + [3222601759] = [id="SXS_FILE_NOT_PART_OF_ASSEMBLY", desc="The file is not a part of the assembly."], + [3222863957] = [id="TRANSACTION_OBJECT_EXPIRED", desc="Because the associated transaction manager or resource manager has been closed, the handle is no longer valid."], + [3223191817] = [id="GRAPHICS_CANT_EVICT_PINNED_ALLOCATION", desc="The request failed because a pinned allocation cannot be evicted."], + [3223192363] = [id="GRAPHICS_INVALID_MONITORDESCRIPTOR", desc="The specified monitor descriptor is invalid."], + [589825] = [id="badmem", desc="The storage control block address is invalid."], + [2147483650] = [id="DATATYPE_MISALIGNMENT", desc="{EXCEPTION} Alignment Fault A data type misalignment was detected in a load or store instruction."], + [3221226327] = [id="PRENT4_MACHINE_ACCOUNT", desc="The machine account was created prior to Windows NT 4.0. The account needs to be recreated."], + [3223192856] = [id="GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE", desc="DxgkDdiOPMConfigureProtectedOutput() cannot enable HDCP because other physical outputs are using the display adapter's HDCP hardware."], + [3223388201] = [id="FVE_VIRTUALIZED_SPACE_TOO_BIG", desc="The requested virtualization size is too big."], + [293] = [id="VOLSNAP_HIBERNATE_READY", desc="{Volume Shadow Copy Service} The system is now ready for hibernation."], + [3223060505] = [id="FLT_NO_DEVICE_OBJECT", desc="The requested device object does not exist for the given volume."], + [3223192343] = [id="GRAPHICS_SOURCE_ALREADY_IN_SET", desc="The specified video present source is already in the video present source set."], + [3221226513] = [id="HIBERNATION_FAILURE", desc="The system has failed to hibernate (The error code is %hs). Hibernation will be disabled until the system is restarted."], + [3222536193] = [id="ACPI_INVALID_OPCODE", desc="An attempt was made to run an invalid AML opcode."], + [2147483676] = [id="MEDIA_CHANGED", desc="{Media Changed} The media may have changed."], + [3222536198] = [id="ACPI_FATAL", desc="A fatal error has occurred."], + [3222929416] = [id="LOG_RESTART_INVALID", desc="The log service encountered an invalid log restart area."], + [3221225815] = [id="SECRET_TOO_LONG", desc="The length of a secret exceeds the maximum allowable length. The length and number of secrets is limited to satisfy U.S. State Department export restrictions."], + [3221226202] = [id="DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER", desc="A global group cannot have a cross-domain member."], + [3221880840] = [id="CTX_MODEM_INF_NOT_FOUND", desc="The MODEM.INF file was not found."], + [3223060483] = [id="FLT_INVALID_ASYNCHRONOUS_REQUEST", desc="Asynchronous requests are not valid for this operation."], + [3221226511] = [id="KDC_CERT_REVOKED", desc="The domain controller certificate used for smart card logon has been revoked. Contact your system administrator with the contents of your system event log."], + [3221225507] = [id="BUFFER_TOO_SMALL", desc="{Buffer Too Small} The buffer is too small to contain the entry. No information has been written to the buffer."], + [3223191560] = [id="GRAPHICS_CANNOTCOLORCONVERT", desc="Not able to present with color conversion."], + [3224764418] = [id="IPSEC_SA_LIFETIME_EXPIRED", desc="The packet was received on an IPsec SA whose lifetime has expired."], + [3221226007] = [id="NOT_CLIENT_SESSION", desc="The transport can only process the specified request on the client side of a session."], + [3223192403] = [id="GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED", desc="The topology changes are not allowed for the specified VidPN."], + [655361] = [id="badenv", desc="The environment is incorrect."], + [3221225740] = [id="NO_GUID_TRANSLATION", desc="Indicates that an attempt was made to assign protection to a file system file or directory and one of the SIDs in the security descriptor could not be translated into a GUID that could be stored by the file system. This causes the protection attempt to fail, which may cause a file creation attempt to fail."], + [3221356561] = [id="RPC_NT_UNKNOWN_MGR_TYPE", desc="The manager type is unknown."], + [3223060481] = [id="FLT_NO_HANDLER_DEFINED", desc="A handler was not defined by the filter for this operation."], + [3223192338] = [id="GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET", desc="The pinned mode must remain in the set on the VidPN's co-functional modality enumeration."], + [3223192577] = [id="GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED", desc="The display adapter child device does not support reporting a descriptor."], + [3221226547] = [id="ENCOUNTERED_WRITE_IN_PROGRESS", desc="The attempted write operation encountered a write already in progress for some portion of the range."], + [3221227781] = [id="FORMS_AUTH_REQUIRED", desc="Access Denied. Before opening files in this location, you must first browse to the e.g. site and select the option to log on automatically."], + [2147483689] = [id="UNWIND_CONSOLIDATE", desc="A frame consolidation has been executed."], + [3222601743] = [id="SXS_EARLY_DEACTIVATION", desc="The activation context being deactivated is not the most recently activated one."], + [3223527424] = [id="NDIS_DOT11_AUTO_CONFIG_ENABLED", desc="The wireless LAN interface is in auto-configuration mode and does not support the requested parameter change operation."], + [3221225639] = [id="BAD_VALIDATION_CLASS", desc="The validation information class requested was invalid."], + [3221225878] = [id="REMOTE_SESSION_LIMIT", desc="An attempt was made to establish a session to a network server, but there are already too many sessions established to that server."], + [3221422173] = [id="RPC_NT_INVALID_PIPE_OPERATION", desc="An invalid operation was attempted on an RPC pipe object."], + [3221880874] = [id="CTX_SHADOW_DENIED", desc="The request to control another session remotely was denied."], + [3223453734] = [id="FWP_MATCH_TYPE_MISMATCH", desc="A filter condition contains a match type that is not compatible with the operands."], + [3223519263] = [id="NDIS_MEDIA_DISCONNECTED", desc="The I/O operation failed because the network media is disconnected or the wireless access point is out of range."], + [3221225776] = [id="INVALID_IMAGE_PROTECT", desc="The specified image file did not have the correct format: it did not have a proper e_lfarlc in the MZ header."], + [3221225877] = [id="NETWORK_CREDENTIAL_CONFLICT", desc="Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared resource and try again."], + [3222601748] = [id="SXS_CORRUPT_ACTIVATION_STACK", desc="The activation context activation stack for the running thread of execution is corrupt."], + [3222863948] = [id="CANNOT_ACCEPT_TRANSACTED_WORK", desc="The transactional resource manager cannot currently accept transacted work due to a transient condition, such as low resources."], + [3223192366] = [id="GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE", desc="The ID of the specified monitor descriptor is being used by another descriptor in the set."], + [3223192843] = [id="GRAPHICS_OPM_INTERNAL_ERROR", desc="An internal error caused an operation to fail."], + [1075708975] = [id="GRAPHICS_UNKNOWN_CHILD_STATUS", desc="The child device presence was not reliably detected."], + [3221225828] = [id="FLOPPY_VOLUME", desc="The paging file cannot be created on a floppy disk."], + [3223519278] = [id="NDIS_INVALID_PORT_STATE", desc="The current state of the specified port on this network interface does not support the requested operation."], + [3221291010] = [id="DBG_APP_NOT_IDLE", desc="The debugger found that the application is not idle."], + [4259842] = [id="srverror", desc="The server encountered an internal error."], + [3221226069] = [id="IP_ADDRESS_CONFLICT2", desc="There is an IP address conflict with another system on the network."], + [3221225997] = [id="CONNECTION_RESET", desc="The transport connection has been reset."], + [514] = [id="RESOURCEMANAGER_READ_ONLY", desc="The specified ResourceManager made no changes or updates to the resource under this transaction."], + [3221225834] = [id="DISK_OPERATION_FAILED", desc="{Hard Disk Error} While accessing the hard disk, a disk operation failed even after retries."], + [3221226029] = [id="RETRY", desc="The request needs to be retried."], + [3221226338] = [id="ACCESS_DISABLED_BY_POLICY_PATH", desc="Access to %1 has been restricted by your Administrator by location with policy rule %2 placed on path %3."], + [3222863907] = [id="STREAM_MINIVERSION_NOT_VALID", desc="The specified file miniversion was found but has been invalidated. The most likely cause is a transaction savepoint rollback."], + [3221226233] = [id="PKINIT_NAME_MISMATCH", desc="The client certificate does not contain a valid UPN, or does not match the client name in the logon request. Contact your administrator."], + [3222929455] = [id="LOG_APPENDED_FLUSH_FAILED", desc="Records were appended to the log or reservation changes were made, but the log could not be flushed."], + [3224797184] = [id="IPSEC_DOSP_BLOCK", desc="IPsec Dos Protection matched an explicit block rule."], + [3221226376] = [id="DOWNGRADE_DETECTED", desc="The system detected a possible attempt to compromise security. Ensure that you can contact the server that authenticated you."], + [3222863951] = [id="RESOURCEMANAGER_NOT_FOUND", desc="The specified resource manager was unable to be opened because it was not found."], + [3221225619] = [id="FLOAT_UNDERFLOW", desc="{EXCEPTION} Floating-point underflow."], + [3221225552] = [id="EA_TOO_LARGE", desc="An EA operation failed because the EA set is too large."], + [3223388183] = [id="FVE_TPM_SRK_AUTH_NOT_ZERO", desc="The authorization data for the SRK of the TPM is not zero."], + [117899265] = [id="invalidseparatorfile", desc="The specified separator file is invalid."], + [3221226200] = [id="DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER", desc="A global group cannot have a universal group as a member."], + [3222863933] = [id="TXF_ATTRIBUTE_CORRUPT", desc="The transactional metadata attribute on the file or directory %hs is corrupt and unreadable."], + [3223388180] = [id="FVE_KEYFILE_INVALID", desc="The BitLocker startup key or recovery password file is corrupt or invalid."], + [86900737] = [id="logonfailure", desc="Logon failure: unknown user name or bad password."], + [3221226501] = [id="DS_DUPLICATE_ID_FOUND", desc="The requested object has a non-unique identifier and cannot be retrieved."], + [3221226324] = [id="DEBUGGER_INACTIVE", desc="An attempt to do an operation on a debug port failed because the port is in the process of being deleted."], + [3221226523] = [id="DS_FLAT_NAME_EXISTS_IN_FOREST", desc="The flat name of the trusted domain already exists in the forest."], + [3223192628] = [id="GRAPHICS_CHAINLINKS_NOT_STARTED", desc="An attempt was made to start a lead link display adapter when the chain links had not yet started."], + [131073] = [id="badfile", desc="The system cannot find the file specified."], + [146866178] = [id="badLogonTime", desc="The user is not allowed to log on at this time."], + [290] = [id="NOTHING_TO_TERMINATE", desc="A process being terminated has no threads to terminate."], + [3223060490] = [id="FLT_INTERNAL_ERROR", desc="The Filter Manager had an internal error from which it cannot recover; therefore, the operation has failed. This is usually the result of a filter returning an invalid value from a pre-operation callback."], + [3223453736] = [id="FWP_OUT_OF_BOUNDS", desc="An integer value is outside the allowed range."], + [3223453952] = [id="FWP_TCPIP_NOT_READY", desc="The TCP/IP stack is not ready."], + [3221226133] = [id="WMI_GUID_NOT_FOUND", desc="The GUID passed was not recognized as valid by a WMI data provider."], + [3223192394] = [id="GRAPHICS_MODE_NOT_IN_MODESET", desc="The specified mode is not in the specified mode set."], + [3223192855] = [id="GRAPHICS_OPM_RESOLUTION_TOO_HIGH", desc="DxgkDdiOPMConfigureProtectedOutput() cannot enable the specified output protection technology because the output's screen resolution is too high."], + [458754] = [id="invdevice", desc="The device specified is invalid."], + [3221225786] = [id="CONTROL_C_EXIT", desc="{Application Exit by CTRL+C} The application terminated as a result of a CTRL+C."], + [3223453699] = [id="FWP_FILTER_NOT_FOUND", desc="The filter does not exist."], + [3223453727] = [id="FWP_INVALID_NET_MASK", desc="A network mask is not valid."], + [1073741848] = [id="SERVICE_NOTIFICATION", desc="%hs"], + [3221225764] = [id="SPECIAL_ACCOUNT", desc="Indicates an operation that is incompatible with built-in accounts has been attempted on a built-in (special) SAM account. For example, built-in accounts cannot be deleted."], + [3223126020] = [id="MONITOR_INVALID_STANDARD_TIMING_BLOCK", desc="The monitor descriptor contains an invalid standard timing block."], + [3223192356] = [id="GRAPHICS_MODE_ID_MUST_BE_UNIQUE", desc="The ID of the specified mode is being used by another mode in the set."], + [2147483651] = [id="BREAKPOINT", desc="{EXCEPTION} Breakpoint A breakpoint has been reached."], + [3221225482] = [id="BAD_INITIAL_PC", desc="An invalid initial start address was specified in a call to NtCreateThread."], + [3223519279] = [id="NDIS_LOW_POWER_STATE", desc="The miniport adapter is in a lower power state."], + [3225026583] = [id="VHD_CHILD_PARENT_SIZE_MISMATCH", desc="The chain of virtual hard disks is corrupted. There is a mismatch in the virtual sizes of the parent virtual hard disk and differencing disk."], + [292] = [id="PROCESS_IN_JOB", desc="The specified process is part of a job."], + [3222929456] = [id="LOG_PINNED_RESERVATION", desc="The log is pinned due to reservation consuming most of the log space. Free some reserved records to make space available."], + [3221225558] = [id="DELETE_PENDING", desc="A non-close operation has been requested of a file object that has a delete pending."], + [1073807366] = [id="DBG_PRINTEXCEPTION_C", desc="Debugger printed an exception on control C."], + [3221225549] = [id="INCOMPATIBLE_FILE_MAP", desc="A section was created to map a file that is not compatible with an already existing section that maps the same file."], + [3222536199] = [id="ACPI_INVALID_SUPERNAME", desc="An invalid SuperName was specified."], + [393217] = [id="badfid", desc="The handle is invalid."], + [7208961] = [id="cannotopen", desc="The system cannot open the device or file specified."], + [2147483678] = [id="END_OF_MEDIA", desc="{End of Media} The end of the media was encountered."], + [3221225525] = [id="OBJECT_NAME_COLLISION", desc="The object name already exists."], + [3221225706] = [id="UNEXPECTED_MM_CREATE_ERR", desc="If an MM error that is not defined in the standard FsRtl filter is returned, it is converted to one of the following errors, which are guaranteed to be in the filter. In this case, information is lost; however, the filter correctly handles the exception."], + [3222536209] = [id="ACPI_INVALID_ACCESS_SIZE", desc="An attempt was made to access a field outside the defined range."], + [3223193064] = [id="GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS", desc="The function failed because the current session is changing its type. This function cannot be called when the current session is changing its type. Three types of sessions currently exist: console, disconnected, and remote (RDP or ICA)."], + [3221226249] = [id="CSS_SCRAMBLED_SECTOR", desc="Copy protection error-The read failed because the sector is encrypted."], + [3221225562] = [id="INVALID_OWNER", desc="Indicates a particular security ID may not be assigned as the owner of an object."], + [3221356598] = [id="EPT_NT_NOT_REGISTERED", desc="No more endpoints are available from the endpoint mapper."], + [2147483677] = [id="BUS_RESET", desc="{I/O Bus Reset} An I/O bus reset was detected."], + [3222929443] = [id="LOG_NOT_ENOUGH_CONTAINERS", desc="The log must have at least two containers before it can be read from or written to."], + [851969] = [id="baddata", desc="The data is invalid."], + [3221225530] = [id="OBJECT_PATH_NOT_FOUND", desc="{Path Not Found} The path %hs does not exist."], + [3222470662] = [id="CLUSTER_NETWORK_EXISTS", desc="The cluster network already exists."], + [3221226341] = [id="FAILED_DRIVER_ENTRY", desc="The driver was not loaded because it failed its initialization call."], + [3221225648] = [id="PIPE_DISCONNECTED", desc="The specified named pipe is in the disconnected state."], + [3221226236] = [id="KDC_UNABLE_TO_REFER", desc="The KDC was unable to generate a referral for the service requested."], + [3222863877] = [id="RM_NOT_ACTIVE", desc="Transaction support within the specified file system resource manager was not started or was shut down due to an error."], + [3223192377] = [id="GRAPHICS_SOURCE_NOT_IN_TOPOLOGY", desc="The specified source is not part of the specified VidPN's topology."], + [3221356584] = [id="RPC_NT_UUID_NO_ADDRESS", desc="No network address is available to construct a UUID."], + [3221227524] = [id="CONTENT_BLOCKED", desc="An operation failed because the content was blocked."], + [3222929422] = [id="LOG_METADATA_INVALID", desc="The log service encountered a metadata file that could not be created by the log file system."], + [3223191827] = [id="GRAPHICS_INVALID_ALLOCATION_INSTANCE", desc="An invalid allocation instance is being referenced."], + [3221227267] = [id="REQUEST_CANCELED", desc="The ALPC message has been canceled."], + [3222863955] = [id="TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION", desc="The specified transaction manager was unable to create the objects contained in its log file in the Ob namespace. Therefore, the transaction manager was unable to recover."], + [3223192064] = [id="GRAPHICS_GPU_EXCEPTION_ON_DEVICE", desc="A GPU exception was detected on the given device. The device cannot be scheduled."], + [3221225800] = [id="INVALID_LEVEL", desc="{Incorrect System Call Level} An invalid level was passed into the specified system call."], + [3221226032] = [id="PROPSET_NOT_FOUND", desc="The specified property set does not exist on the object."], + [3223191559] = [id="GRAPHICS_PRESENT_DENIED", desc="Not able to present due to denial of desktop access."], + [3221226092] = [id="DRIVER_UNABLE_TO_LOAD", desc="{Unable to Load Device Driver} %hs device driver could not be loaded. Error Status was 0x%x."], + [3221225689] = [id="PIPE_EMPTY", desc="Used to indicate that a read operation was done on an empty pipe."], + [3221356566] = [id="RPC_NT_OUT_OF_RESOURCES", desc="Insufficient resources are available to complete this operation."], + [3221356596] = [id="EPT_NT_INVALID_ENTRY", desc="The entry is invalid."], + [3222929442] = [id="LOG_EPHEMERAL", desc="The operation requires a nonephemeral log, but the log is ephemeral."], + [3223060506] = [id="FLT_VOLUME_ALREADY_MOUNTED", desc="The specified volume is already mounted."], + [3223192964] = [id="GRAPHICS_DDCCI_VCP_NOT_SUPPORTED", desc="The monitor does not support the specified VCP code."], + [3221226520] = [id="NTLM_BLOCKED", desc="The authentication failed because NTLM was blocked."], + [3222929418] = [id="LOG_BLOCK_INVALID", desc="The log service encountered an invalid log block."], + [4194306] = [id="smbcmd", desc="The server did not recognize the command received."], + [264] = [id="OPLOCK_BREAK_IN_PROGRESS", desc="An open/create operation completed while an opportunistic lock (oplock) break is underway."], + [197001217] = [id="printmonitoralreadyinstalled", desc="The specified print monitor has already been installed."], + [3221226346] = [id="MCA_OCCURED", desc="A machine check error has occurred. Check the system event log for additional information."], + [3221226548] = [id="PTE_CHANGED", desc="The page fault mappings changed in the middle of processing a fault so the operation must be retried."], + [3221226549] = [id="PURGE_FAILED", desc="The attempt to purge this file from memory failed to purge some or all the data from memory."], + [296] = [id="INTERRUPT_STILL_CONNECTED", desc="The specified interrupt vector is still connected."], + [3221225658] = [id="FILE_IS_A_DIRECTORY", desc="The file that was specified as a target is a directory, and the caller specified that it could be anything but a directory."], + [3221422170] = [id="RPC_NT_WRONG_ES_VERSION", desc="Incompatible version of the serializing package."], + [1075707914] = [id="GRAPHICS_PARTIAL_DATA_POPULATED", desc="The specified buffer is not big enough to contain the entire requested dataset. Partial data is populated up to the size of the buffer."], + [3221225667] = [id="INVALID_NETWORK_RESPONSE", desc="The network responded incorrectly."], + [3221225765] = [id="SPECIAL_GROUP", desc="The operation requested may not be performed on the specified group because it is a built-in special group."], + [3222536215] = [id="ACPI_MUTEX_NOT_OWNER", desc="An attempt was made to access the mutex by a process that was not the owner."], + [3223388189] = [id="FVE_DEBUGGER_ENABLED", desc="Boot debugging is enabled. Run Windows Boot Configuration Data Store Editor (bcdedit.exe) to turn it off."], + [15073281] = [id="badpipe", desc="The pipe state is invalid."], + [3221225541] = [id="INVALID_PAGE_PROTECTION", desc="The specified page protection was not valid."], + [3222863897] = [id="LOG_GROWTH_FAILED", desc="An attempt to create space in the transactional resource manager's log failed. The failure status has been recorded in the event log."], + [3223453722] = [id="FWP_TRAFFIC_MISMATCH", desc="The traffic parameters do not match those for the security association context."], + [3221225553] = [id="NONEXISTENT_EA_ENTRY", desc="An EA operation failed because the name or EA index is invalid."], + [3221225522] = [id="DISK_CORRUPT_ERROR", desc="{Corrupt Disk} The file system structure on the disk is corrupt and unusable. Run the Chkdsk utility on the volume %hs."], + [3222863959] = [id="TRANSACTION_RESPONSE_NOT_ENLISTED", desc="The specified operation could not be performed on this superior enlistment because the enlistment was not created with the corresponding completion response in the NotificationMask."], + [3222929411] = [id="LOG_SECTOR_REMAPPED", desc="The log service encountered a remapped log sector."], + [3223192386] = [id="GRAPHICS_VIDPN_SOURCE_IN_USE", desc="The specified VidPN source is already owned by a DMM client and cannot be used until that client releases it."], + [3221226206] = [id="INSUFFICIENT_POWER", desc="There is not enough power to complete the requested operation."], + [3223192323] = [id="GRAPHICS_INVALID_VIDPN", desc="The specified VidPN handle is invalid."], + [3223192844] = [id="GRAPHICS_OPM_INVALID_HANDLE", desc="The function failed because the caller passed in an invalid OPM user-mode handle."], + [3221226024] = [id="STACK_OVERFLOW_READ", desc="The request must be handled by the stack overflow code."], + [3221356611] = [id="RPC_NT_INTERNAL_ERROR", desc="An internal error occurred in the RPC."], + [3221880848] = [id="CTX_TD_ERROR", desc="Transport driver error."], + [3222536225] = [id="ACPI_POWER_REQUEST_FAILED", desc="An ACPI power object failed to transition state."], + [3223060487] = [id="FLT_NOT_INITIALIZED", desc="The Filter Manager was not initialized when a filter tried to register. Make sure that the Filter Manager is loaded as a driver."], + [3223388185] = [id="FVE_TPM_NO_VMK", desc="The BitLocker encryption key could not be obtained from the TPM."], + [3223453728] = [id="FWP_INVALID_RANGE", desc="An FWP_RANGE is not valid."], + [3221225693] = [id="INVALID_DOMAIN_STATE", desc="Indicates the domain was in the wrong state to perform the desired operation."], + [3221225612] = [id="ARRAY_BOUNDS_EXCEEDED", desc="{EXCEPTION} Array bounds exceeded."], + [15138817] = [id="pipebusy", desc="All pipe instances are busy."], + [3221225483] = [id="INVALID_CID", desc="An invalid client ID was specified."], + [3221226522] = [id="DS_DOMAIN_NAME_EXISTS_IN_FOREST", desc="The domain name of the trusted domain already exists in the forest."], + [3223192852] = [id="GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP", desc="The protected output cannot enable analog copy protection because it does not support it."], + [3223453953] = [id="FWP_INJECT_HANDLE_CLOSING", desc="The injection handle is being closed by another thread."], + [1507331] = [id="data", desc="Data error (cyclic redundancy check)."], + [3221226162] = [id="REPARSE_ATTRIBUTE_CONFLICT", desc="The reparse attribute cannot be set because it is incompatible with an existing attribute."], + [3221225854] = [id="TOO_MANY_SIDS", desc="Too many SIDs have been specified."], + [3221227520] = [id="DISK_REPAIR_DISABLED", desc="The attempted operation required self healing to be enabled."], + [3221226198] = [id="DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN", desc="In a mixed domain, cannot nest local groups with other local groups, if the group is security enabled."], + [3221226148] = [id="DS_ATTRIBUTE_OR_VALUE_EXISTS", desc="The specified directory service attribute or value already exists."], + [1703939] = [id="badmedia", desc="The specified disk or diskette cannot be accessed."], + [1076035585] = [id="NDIS_INDICATION_REQUIRED", desc="The request will be completed later by an NDIS status indication."], + [983041] = [id="baddrive", desc="The system cannot find the drive specified."], + [3221226016] = [id="MAPPED_ALIGNMENT", desc="{Mapped View Alignment Incorrect} An attempt was made to map a view of a file, but either the specified base address or the offset into the file were not aligned on the proper allocation granularity."], + [3221226503] = [id="VOLSNAP_PREPARE_HIBERNATE", desc="{Volume Shadow Copy Service} Wait while the Volume Shadow Copy Service prepares volume %hs for hibernation."], + [3223060508] = [id="FLT_CONTEXT_ALREADY_LINKED", desc="The specified context is already attached to another object."], + [3225026584] = [id="VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED", desc="The chain of virtual hard disks is corrupted. A differencing disk is indicated in its own parent chain."], + [258] = [id="TIMEOUT", desc="The given Timeout interval expired."], + [3223519277] = [id="NDIS_INVALID_PORT", desc="The specified port does not exist on this network interface."], + [3223192626] = [id="GRAPHICS_CHAINLINKS_NOT_ENUMERATED", desc="Some chain adapters in a linked configuration have not yet been enumerated."], + [3221226082] = [id="DRIVER_ORDINAL_NOT_FOUND", desc="{Driver Entry Point Not Found} The %hs device driver could not locate the ordinal %ld in driver %hs."], + [3221225716] = [id="INVALID_PARAMETER_6", desc="An invalid parameter was passed to a service or function as the sixth argument."], + [3221422088] = [id="RPC_NT_SS_CANNOT_GET_CALL_HANDLE", desc="The stub is unable to get the call handle."], + [3223519262] = [id="NDIS_RESOURCE_CONFLICT", desc="An attempt to allocate a hardware resource failed because the resource is used by another component."], + [3221226381] = [id="SMARTCARD_CERT_EXPIRED", desc="The smart card certificate used for authentication has expired. Contact your system administrator."], + [3221356565] = [id="RPC_NT_CANT_CREATE_ENDPOINT", desc="The endpoint cannot be created."], + [3221227521] = [id="DS_DOMAIN_RENAME_IN_PROGRESS", desc="The directory service cannot perform the requested operation because a domain rename operation is in progress."], + [3221226005] = [id="TRANSACTION_INVALID_TYPE", desc="The transport does not recognize the specified transaction request type."], + [3221225857] = [id="CHILD_MUST_BE_VOLATILE", desc="An attempt was made to create a stable subkey under a volatile parent key."], + [3221226228] = [id="MAX_REFERRALS_EXCEEDED", desc="The number of maximum ticket referrals has been exceeded."], + [3222863946] = [id="TM_IDENTITY_MISMATCH", desc="The call to create a transaction manager object failed because the Tm Identity that is stored in the log file does not match the Tm Identity that was passed in as an argument."], + [3223192387] = [id="GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN", desc="The specified VidPN is active and cannot be accessed."], + [3223193062] = [id="GRAPHICS_PARAMETER_ARRAY_TOO_SMALL", desc="An array passed to the function cannot hold all of the data that the function must copy into the array."], + [3223453703] = [id="FWP_SUBLAYER_NOT_FOUND", desc="The sublayer does not exist."], + [3221225792] = [id="INVALID_CONNECTION", desc="The connection handle that was given to the transport was invalid."], + [3221225816] = [id="INTERNAL_DB_ERROR", desc="The local security authority (LSA) database contains an internal inconsistency."], + [1073741847] = [id="WAS_UNLOCKED", desc="{Page Unlocked} The page protection of a locked page was changed to 'No Access' and the page was unlocked from memory and from the process."], + [1073741826] = [id="WORKING_SET_LIMIT_RANGE", desc="{Working Set Range Error} An attempt was made to set the working set minimum or maximum to values that are outside the allowable range."], + [3223060491] = [id="FLT_DELETING_OBJECT", desc="The object specified for this action is in the process of being deleted; therefore, the action requested cannot be completed at this time."], + [3221226139] = [id="POLICY_ONLY_IN_DS", desc="The requested policy information only lives in the Ds."], + [1073872982] = [id="RPC_NT_UUID_LOCAL_ONLY", desc="A UUID that is valid only on this computer has been allocated."], + [3221225529] = [id="OBJECT_PATH_INVALID", desc="The object path component was not a directory object."], + [3222863969] = [id="TRANSACTION_NOT_ENLISTED", desc="The specified operation could not be performed because the resource manager is not enlisted in the transaction."], + [2148728836] = [id="CLUSTER_NETWORK_ALREADY_OFFLINE", desc="The cluster network is already offline."], + [3221226245] = [id="COPY_PROTECTION_FAILURE", desc="Copy protection failure."], + [3222470671] = [id="CLUSTER_JOIN_NOT_IN_PROGRESS", desc="A cluster join operation is not in progress."], + [3221226103] = [id="IO_REPARSE_TAG_MISMATCH", desc="The Windows I/O reparse tag does not match the one that is in the NTFS reparse point."], + [3222929412] = [id="LOG_BLOCK_INCOMPLETE", desc="The log service encountered a partial or incomplete log block."], + [3223192853] = [id="GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA", desc="The protected output cannot enable the CGMS-A protection technology because it does not support it."], + [3221225836] = [id="SHARED_IRQ_BUSY", desc="An attempt was made to open a device that was sharing an interrupt request (IRQ) with other devices. At least one other device that uses that IRQ was already opened. Two concurrent opens of devices that share an IRQ and only work via interrupts is not supported for the particular bus type that the devices use."], + [3223191553] = [id="GRAPHICS_INSUFFICIENT_DMA_BUFFER", desc="The driver needs more DMA buffer space to complete the requested operation."], + [3223191564] = [id="GRAPHICS_PRESENT_UNOCCLUDED", desc="Previous exclusive VidPn source owner has released its ownership"], + [1073741868] = [id="FIRMWARE_UPDATED", desc="0x4000002D
      STATUS_DRIVERS_LEAKING_LOCKED_PAGES"], + [3223126025] = [id="MONITOR_INVALID_DETAILED_TIMING_BLOCK", desc="The monitor descriptor contains an invalid detailed timing block."], + [3221226580] = [id="INSUFFICIENT_NVRAM_RESOURCES", desc="Insufficient NVRAM resources exist to complete the API. A reboot might be required."], + [3221226017] = [id="IMAGE_CHECKSUM_MISMATCH", desc="{Bad Image Checksum} The image %hs is possibly corrupt. The header checksum does not match the computed checksum."], + [3223453753] = [id="FWP_INCOMPATIBLE_CIPHER_CONFIG", desc="The IPsec cipher configuration is not compatible with the cipher type."], + [117702657] = [id="unknownprinterport", desc="The specified port is unknown."], + [3221225794] = [id="DLL_INIT_FAILED", desc="{DLL Initialization Failed} Initialization of the dynamic link library %hs failed. The process is terminating abnormally."], + [3221226560] = [id="CRED_REQUIRES_CONFIRMATION", desc="The requested credential requires confirmation."], + [3221225801] = [id="WRONG_PASSWORD_CORE", desc="{Incorrect Password to LAN Manager Server} You specified an incorrect password to a LAN Manager 2.x or MS-NET server."], + [3221356642] = [id="RPC_NT_INVALID_ASYNC_HANDLE", desc="Invalid asynchronous RPC handle."], + [3223192627] = [id="GRAPHICS_ADAPTER_CHAIN_NOT_READY", desc="The chain of linked adapters is not ready to start because of an unknown failure."], + [3223453707] = [id="FWP_DYNAMIC_SESSION_IN_PROGRESS", desc="The call is not allowed from within a dynamic session."], + [3221225858] = [id="DEVICE_CONFIGURATION_ERROR", desc="The I/O device is configured incorrectly or the configuration parameters to the driver are incorrect."], + [2147483671] = [id="EXTRANEOUS_INFORMATION", desc="{Too Much Information} The specified access control list (ACL) contained more information than was expected."], + [2147483654] = [id="NO_MORE_FILES", desc="{No More Files} No more files were found which match the file specification."], + [3221422084] = [id="RPC_NT_SS_IN_NULL_CONTEXT", desc="A null context handle is passed as an [in] parameter."], + [3221226242] = [id="WMI_ALREADY_DISABLED", desc="Collection or events for the WMI GUID is already disabled."], + [3222601761] = [id="XML_ENCODING_MISMATCH", desc="The character encoding in the XML declaration did not match the encoding used in the document."], + [3223060507] = [id="FLT_ALREADY_ENLISTED", desc="The specified transaction context is already enlisted in a transaction."], + [2555907] = [id="diskfull", desc="The disk is full."], + [280] = [id="REPARSE_OBJECT", desc="A reparse should be performed by the Object Manager because the name of the file resulted in a symbolic link."], + [3221880878] = [id="CTX_INVALID_WD", desc="The terminal connection driver %1 is invalid."], + [3221225681] = [id="REDIRECTOR_PAUSED", desc="Print or disk redirection is temporarily paused."], + [267] = [id="NOTIFY_CLEANUP", desc="Indicates that a notify change request has been completed due to closing the handle that made the notify change request."], + [3221356564] = [id="RPC_NT_NO_PROTSEQS", desc="There are no protocol sequences."], + [3222863968] = [id="EXPIRED_HANDLE", desc="The handle is no longer properly associated with its transaction. It may have been opened in a transactional resource manager that was subsequently forced to restart. Please close the handle and open a new one."], + [3223192351] = [id="GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET", desc="The specified frequency range is already in the specified monitor frequency range set."], + [3221225725] = [id="STACK_OVERFLOW", desc="A new guard page for the stack cannot be created."], + [3221225838] = [id="BIOS_FAILED_TO_CONNECT_INTERRUPT", desc="The basic input/output system (BIOS) failed to connect a system interrupt to the device or bus for which the device is connected."], + [3221227783] = [id="VIRUS_DELETED", desc="This file contains a virus and cannot be opened. Due to the nature of this virus, the file has been removed from this location."], + [1073741837] = [id="NULL_LM_PASSWORD", desc="{Password Too Complex} The Windows password is too complex to be converted to a LAN Manager password. The LAN Manager password that returned is a NULL string."], + [3222470678] = [id="CLUSTER_NETWORK_NOT_INTERNAL", desc="The cluster network is not configured for internal cluster communication."], + [3223453715] = [id="FWP_NET_EVENTS_DISABLED", desc="The collection of network diagnostic events is disabled."], + [3221225584] = [id="INVALID_WORKSTATION", desc="The user account is restricted so that it may not be used to log on from the source workstation."], + [3221225679] = [id="SHARING_PAUSED", desc="File sharing has been temporarily paused."], + [3221225516] = [id="UNABLE_TO_DECOMMIT_VM", desc="An attempt was made to decommit uncommitted virtual memory."], + [3221225594] = [id="PROCEDURE_NOT_FOUND", desc="Indicates the specified procedure address cannot be found in the DLL."], + [3221225692] = [id="INVALID_SERVER_STATE", desc="Indicates the Sam Server was in the wrong state to perform the desired operation."], + [3221226182] = [id="WMI_READ_ONLY", desc="The WMI data item or data block is read-only."], + [3221225683] = [id="PROFILING_AT_LIMIT", desc="The number of active profiling objects is at the maximum and no more may be started."], + [3221225771] = [id="TOKEN_ALREADY_IN_USE", desc="An attempt was made to establish a token for use as a primary token but the token is already in use. A token can only be the primary token of one process at a time."], + [3221226379] = [id="REVOCATION_OFFLINE_C", desc="The revocation status of the smart card certificate that is used for authentication could not be determined. Contact your system administrator."], + [3221226141] = [id="REMOTE_STORAGE_NOT_ACTIVE", desc="The remote storage service is not operational at this time."], + [3221225862] = [id="DEVICE_PROTOCOL_ERROR", desc="A protocol error was detected between the driver and the device."], + [3221356559] = [id="RPC_NT_NO_PROTSEQS_REGISTERED", desc="No protocol sequences have been registered."], + [3221422092] = [id="RPC_NT_BAD_STUB_DATA", desc="The stub received bad data."], + [3221226158] = [id="DS_CANT_MOD_OBJ_CLASS", desc="The directory service detected an attempt to modify the object class of an object."], + [3221225643] = [id="INSTANCE_NOT_AVAILABLE", desc="The maximum named pipe instance count has been reached."], + [3223388178] = [id="FVE_NOT_OS_VOLUME", desc="The volume specified is not the boot operating system volume."], + [3223453735] = [id="FWP_TYPE_MISMATCH", desc="An FWP_VALUE or FWPM_CONDITION_VALUE is of the wrong type."], + [3223519259] = [id="NDIS_FILE_NOT_FOUND", desc="An attempt was made to map a file that cannot be found."], + [3221356558] = [id="RPC_NT_ALREADY_LISTENING", desc="The RPC server is already listening."], + [3221226000] = [id="TRANSACTION_TIMED_OUT", desc="The transport timed out a request that is waiting for a response."], + [3223453729] = [id="FWP_INVALID_INTERVAL", desc="The time interval is not valid."], + [3221225664] = [id="DEVICE_DOES_NOT_EXIST", desc="This device does not exist."], + [1073741864] = [id="WX86_CREATEWX86TIB", desc="An exception status code that is used by the Win32 x86 emulation subsystem."], + [3221226152] = [id="DS_NO_MORE_RIDS", desc="The directory service has exhausted the pool of relative identifiers."], + [1835009] = [id="FLT_IO_COMPLETE", desc="The IO was completed by a filter."], + [3222929444] = [id="LOG_CLIENT_ALREADY_REGISTERED", desc="A log client has already registered on the stream."], + [3223192379] = [id="GRAPHICS_INVALID_VISIBLEREGION_SIZE", desc="The specified visible region size is invalid."], + [3221225869] = [id="TRUSTED_RELATIONSHIP_FAILURE", desc="The logon request failed because the trust relationship between this workstation and the primary domain failed."], + [3221356560] = [id="RPC_NT_NOT_LISTENING", desc="The RPC server is not listening."], + [3221422169] = [id="RPC_NT_INVALID_ES_ACTION", desc="Invalid operation on the encoding/decoding handle."], + [3221225602] = [id="TOO_MANY_GUIDS_REQUESTED", desc="Too many GUIDs were requested from the allocation server at once."], + [3221225566] = [id="NO_LOGON_SERVERS", desc="No logon servers are currently available to service the logon request."], + [3221225478] = [id="IN_PAGE_ERROR", desc="The instruction at 0x%08lx referenced memory at 0x%08lx. The required data was not placed into memory because of an I/O error status of 0x%08lx."], + [3221225687] = [id="NO_SECURITY_ON_OBJECT", desc="Indicates an attempt was made to operate on the security of an object that does not have security associated with it."], + [3221266563] = [id="XML_PARSE_ERROR", desc="Windows was unable to parse the requested XML data."], + [3223388165] = [id="FVE_FAILED_BAD_FS", desc="The file system is inconsistent. Run the Check Disk utility."], + [3222929427] = [id="LOG_START_OF_LOG", desc="The log service has attempted to read or write backward past the start of the log."], + [3221226019] = [id="CLIENT_SERVER_PARAMETERS_INVALID", desc="The parameters passed to the server in the client/server shared memory window were invalid. Too much data may have been put in the shared memory window."], + [3221225885] = [id="IMAGE_ALREADY_LOADED_AS_DLL", desc="Indicates that the specified image is already loaded as a DLL."], + [2147483655] = [id="WAKE_SYSTEM_DEBUGGER", desc="{Kernel Debugger Awakened} The system debugger was awakened by an interrupt."], + [3221356553] = [id="RPC_NT_NO_ENDPOINT_FOUND", desc="No endpoint was found."], + [3221225770] = [id="THREAD_NOT_IN_PROCESS", desc="An attempt was made to operate on a thread within a specific process, but the specified thread is not in the specified process."], + [3221226187] = [id="DS_SAM_INIT_FAILURE", desc="Security Accounts Manager initialization failed because of the following error: %hs Error Status: 0x%x. Click OK to shut down this system and restart in Directory Services Restore Mode. Check the event log for more detailed information."], + [3221225606] = [id="INVALID_VOLUME_LABEL", desc="An invalid volume label has been specified."], + [294] = [id="FSFILTER_OP_COMPLETED_SUCCESSFULLY", desc="A file system or file system filter driver has successfully completed an FsFilter operation."], + [3222536211] = [id="ACPI_ALREADY_INITIALIZED", desc="An attempt was made to reinitialize the ACPI subsystem."], + [1441794] = [id="unknownsmb", desc="The device does not recognize the command."], + [2097155] = [id="badshare", desc="The process cannot access the file because it is being used by another process."], + [3223453743] = [id="FWP_CONTEXT_INCOMPATIBLE_WITH_CALLOUT", desc="The raw context or the provider context is not compatible with the callout."], + [3221356548] = [id="RPC_NT_PROTSEQ_NOT_SUPPORTED", desc="The RPC protocol sequence is not supported."], + [2147483683] = [id="REDIRECTOR_HAS_OPEN_HANDLES", desc="The redirector is in use and cannot be unloaded."], + [3223527427] = [id="NDIS_PM_WOL_PATTERN_LIST_FULL", desc="The list of wake on LAN patterns is full."], + [3221225535] = [id="CRC_ERROR", desc="{Bad CRC} A cyclic redundancy check (CRC) checksum error occurred."], + [3221356623] = [id="RPC_NT_NO_INTERFACES", desc="No interfaces have been registered."], + [3223192390] = [id="GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED", desc="The specified content geometry transformation is not supported on the respective VidPN present path."], + [3221225722] = [id="INVALID_PARAMETER_12", desc="An invalid parameter was passed to a service or function as the twelfth argument."], + [3221356606] = [id="RPC_NT_ENTRY_NOT_FOUND", desc="The entry was not found."], + [5898242] = [id="toomanyuids", desc="Too many Uids active on this session."], + [3221225821] = [id="NT_CROSS_ENCRYPTION_REQUIRED", desc="An attempt was made to change a user password in the security account manager without providing the necessary Windows cross-encrypted password."], + [3221227292] = [id="INVALID_THREAD", desc="An invalid thread, handle %p, is specified for this operation. Possibly, a threadpool worker thread was specified."], + [3221356599] = [id="RPC_NT_NOTHING_TO_EXPORT", desc="No interfaces have been exported."], + [3222929415] = [id="LOG_READ_CONTEXT_INVALID", desc="The log service encountered an attempt to read from a marshaling area with an invalid read context."], + [3223060486] = [id="FLT_NOT_SAFE_TO_POST_OPERATION", desc="Posting this operation to a worker thread for further processing is not safe at this time because it could lead to a system deadlock."], + [3221225781] = [id="DLL_NOT_FOUND", desc="{Unable To Locate Component} This application has failed to start because %hs was not found. Reinstalling the application may fix this problem."], + [3223060489] = [id="FLT_POST_OPERATION_CLEANUP", desc="The filter must clean up any operation-specific context at this time because it is being removed from the system before the operation is completed by the lower drivers."], + [3221225551] = [id="EAS_NOT_SUPPORTED", desc="An operation involving EAs failed because the file system does not support EAs."], + [3221225532] = [id="DATA_OVERRUN", desc="{Data Overrun} A data overrun error occurred."], + [270] = [id="PRIMARY_TRANSPORT_CONNECT_FAILED", desc="{Connect Failure on Primary Transport} An attempt was made to connect to the remote server %hs on the primary transport, but the connection failed. The computer WAS able to connect on a secondary transport."], + [3221225753] = [id="INVALID_LDT_OFFSET", desc="Indicates that the starting value for the LDT information was not an integral multiple of the selector size."], + [3221226168] = [id="JOURNAL_NOT_ACTIVE", desc="The volume change journal is not active."], + [2147483669] = [id="INVALID_EA_FLAG", desc="{Invalid EA Flag} An invalid extended attribute (EA) flag was set."], + [3222929414] = [id="LOG_BLOCKS_EXHAUSTED", desc="The log service user-log marshaling buffers are exhausted."], + [3223192325] = [id="GRAPHICS_INVALID_VIDEO_PRESENT_TARGET", desc="The specified video present target is invalid."], + [3223192349] = [id="GRAPHICS_FREQUENCYRANGE_NOT_IN_SET", desc="The specified frequency range is not in the specified monitor frequency range set."], + [3223192970] = [id="GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH", desc="This error occurred because a DDC/CI message had an invalid value in its length field."], + [3223453752] = [id="FWP_INCOMPATIBLE_AUTH_CONFIG", desc="The IPsec authentication configuration is not compatible with the authentication type."], + [3221225831] = [id="FLOPPY_UNKNOWN_ERROR", desc="{Floppy Disk Error} The floppy disk controller reported an error that is not recognized by the floppy disk driver."], + [3223126026] = [id="MONITOR_INVALID_MANUFACTURE_DATE", desc="Monitor descriptor contains invalid manufacture date."], + [2162689] = [id="lock", desc="The process cannot access the file because another process has locked a portion of the file."], + [3222863889] = [id="CRM_PROTOCOL_NOT_FOUND", desc="The requested propagation protocol was not registered as a CRM."], + [3221226537] = [id="NOT_CAPABLE", desc="The implementation is not capable of performing the request."], + [3222863943] = [id="NOT_SNAPSHOT_VOLUME", desc="The target volume is not a snapshot volume. This operation is valid only on a volume mounted as a snapshot."], + [3223523343] = [id="NDIS_OFFLOAD_POLICY", desc="The TCP connection is not offloadable because of a local policy setting."], + [3223192973] = [id="GRAPHICS_MONITOR_NO_LONGER_EXISTS", desc="The operating system asynchronously destroyed the monitor that corresponds to this handle because the operating system's state changed. This error typically occurs because the monitor PDO associated with this handle was removed or stopped, or a display mode change occurred. A display mode change occurs when Windows sends a WM_DISPLAYCHANGE message to applications."], + [3221225688] = [id="CANT_WAIT", desc="Used to indicate that an operation cannot continue without blocking for I/O."], + [3221226564] = [id="CS_ENCRYPTION_NEW_ENCRYPTED_FILE", desc="A new encrypted file is being created and a $EFS needs to be provided."], + [3221266433] = [id="HMAC_NOT_SUPPORTED", desc="The cryptographic provider does not support HMAC."], + [3222470669] = [id="CLUSTER_NODE_UNREACHABLE", desc="The cluster node is not reachable."], + [3223192341] = [id="GRAPHICS_INVALID_VIDEOPRESENTSOURCESET", desc="The specified video present source set is invalid."], + [2147485699] = [id="DATA_LOST_REPAIR", desc="0x80010001
      DBG_EXCEPTION_NOT_HANDLED"], + [3222536202] = [id="ACPI_INVALID_TARGETTYPE", desc="A target with an incorrect type was specified."], + [3221226330] = [id="INVALID_IMAGE_WIN_64", desc="The specified image file did not have the correct format; it appears to be a 64-bit Windows image."], + [3221225732] = [id="BAD_LOGON_SESSION_STATE", desc="The logon session is not in a state that is consistent with the requested operation."], + [3221226191] = [id="JOURNAL_ENTRY_DELETED", desc="The journal entry has been deleted from the journal."], + [3222929449] = [id="LOG_CONTAINER_OPEN_FAILED", desc="The log service encountered an error when attempting to open a log container."], + [3223453747] = [id="FWP_NEVER_MATCH", desc="The enumeration template or subscription will never match any objects."], + [3223453750] = [id="FWP_TOO_MANY_SUBLAYERS", desc="The maximum number of sublayers has been reached."], + [3221226356] = [id="HEAP_CORRUPTION", desc="A heap has been corrupted."], + [278] = [id="CRASH_DUMP", desc="The crash dump exists in a paging file."], + [3221225663] = [id="NETWORK_BUSY", desc="The network is busy."], + [3221226371] = [id="SMARTCARD_NO_CARD", desc="No smart card is available."], + [1073741842] = [id="EVENT_DONE", desc="{TDI Event Done} The TDI indication has completed successfully."], + [3221226050] = [id="BAD_COMPRESSION_BUFFER", desc="The specified buffer contains ill-formed data."], + [3223191815] = [id="GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE", desc="No more unswizzling apertures are currently available."], + [3221227283] = [id="MCA_EXCEPTION", desc="A thread is getting dispatched with MCA EXCEPTION because of MCA."], + [128] = [id="ABANDONED", desc="The caller attempted to wait for a mutex that has been abandoned."], + [3221880850] = [id="CTX_LICENSE_CLIENT_INVALID", desc="The client you are using is not licensed to use this system. Your logon request is denied."], + [3221225866] = [id="NO_TRUST_LSA_SECRET", desc="The workstation does not have a trust secret for the primary domain in the local LSA database."], + [3221356554] = [id="RPC_NT_INVALID_TIMEOUT", desc="The time-out value is invalid."], + [1075380276] = [id="RECOVERY_NOT_NEEDED", desc="The transactional resource manager is already consistent. Recovery is not needed."], + [3222470659] = [id="CLUSTER_JOIN_IN_PROGRESS", desc="A node is in the process of joining the cluster."], + [3223192402] = [id="GRAPHICS_INVALID_SCANLINE_ORDERING", desc="The specified scan line ordering type is invalid."], + [3221226536] = [id="INVALID_IMAGE_HASH", desc="The hash for image %hs cannot be found in the system catalogs. The image is likely corrupt or the victim of tampering."], + [3221226383] = [id="SMARTCARD_SILENT_CONTEXT", desc="The smart card provider could not perform the action because the context was acquired as silent."], + [3223060502] = [id="FLT_CONTEXT_ALLOCATION_NOT_FOUND", desc="No registered context allocation definition was found for the given request."], + [118095873] = [id="printeralreadyexists", desc="The printer already exists."], + [3221226125] = [id="NO_RECOVERY_POLICY", desc="There is no encryption recovery policy configured for this system."], + [3222536196] = [id="ACPI_INVALID_INDEX", desc="An attempt was made to access an array outside its bounds."], + [131074] = [id="badpw", desc="Bad password."], + [3221356597] = [id="EPT_NT_CANT_PERFORM_OP", desc="The operation cannot be performed."], + [3222863961] = [id="NO_LINK_TRACKING_IN_TRANSACTION", desc="The link-tracking operation could not be completed because a transaction is active."], + [10354689] = [id="notlocked", desc="The segment is already unlocked."], + [3221226515] = [id="AUTHENTICATION_FIREWALL_FAILED", desc="Logon Failure: The machine you are logging onto is protected by an authentication firewall. The specified account is not allowed to authenticate to the machine."], + [3221227525] = [id="BAD_CLUSTERS", desc="The operation could not be completed due to bad clusters on disk."], + [3221225695] = [id="NO_SUCH_DOMAIN", desc="The specified domain did not exist."], + [3221225492] = [id="UNRECOGNIZED_MEDIA", desc="{Unknown Disk Format} The disk in drive %hs is not formatted properly. Check the disk, and reformat it, if needed."], + [3221226055] = [id="LOGIN_TIME_RESTRICTION", desc="Attempting to log on during an unauthorized time of day for this account."], + [3221225717] = [id="INVALID_PARAMETER_7", desc="An invalid parameter was passed to a service or function as the seventh argument."], + [3221227777] = [id="FILE_CHECKED_OUT", desc="This file is checked out or locked for editing by another user."], + [3222863888] = [id="TRANSACTION_PROPAGATION_FAILED", desc="The attempt to propagate the transaction failed."], + [1073807364] = [id="DBG_TERMINATE_PROCESS", desc="Debugger terminated the process."], + [3221225563] = [id="INVALID_PRIMARY_GROUP", desc="Indicates a particular security ID may not be assigned as the primary group of an object."], + [2147483686] = [id="LONGJUMP", desc="A long jump has been executed."], + [3221226368] = [id="SMARTCARD_WRONG_PIN", desc="An incorrect PIN was presented to the smart card."], + [3221226124] = [id="RANGE_NOT_FOUND", desc="The specified range could not be found in the range list."], + [3221356608] = [id="RPC_NT_INVALID_NAF_ID", desc="The network address family is invalid."], + [3221356643] = [id="RPC_NT_INVALID_ASYNC_CALL", desc="Invalid asynchronous RPC call handle for this operation."], + [3221356582] = [id="RPC_NT_UNSUPPORTED_NAME_SYNTAX", desc="The name syntax is not supported."], + [3221880834] = [id="CTX_INVALID_PD", desc="The protocol driver %1 is invalid."], + [3222929421] = [id="LOG_METADATA_CORRUPT", desc="The log service encountered a corrupted metadata file."], + [3223191830] = [id="GRAPHICS_ALLOCATION_CONTENT_LOST", desc="The specified allocation lost its content."], + [3223192847] = [id="GRAPHICS_OPM_SPANNING_MODE_ENABLED", desc="DxgkDdiOpmCreateProtectedOutput() could not create a protected output because the video present yarget is in spanning mode."], + [3221226094] = [id="VOLUME_DISMOUNTED", desc="An operation was attempted to a volume after it was dismounted."], + [3221225708] = [id="UNEXPECTED_MM_EXTEND_ERR", desc="If an MM error that is not defined in the standard FsRtl filter is returned, it is converted to one of the following errors, which are guaranteed to be in the filter. In this case, information is lost; however, the filter correctly handles the exception."], + [3221225727] = [id="BAD_FUNCTION_TABLE", desc="A malformed function table was encountered during an unwind operation."], + [3221422090] = [id="RPC_NT_ENUM_VALUE_OUT_OF_RANGE", desc="The enumeration value is out of range."], + [3221267108] = [id="OFFLOAD_WRITE_FILE_NOT_SUPPORTED", desc="Offload write operations cannot be performed on:"], + [3222863893] = [id="TRANSACTION_ALREADY_ABORTED", desc="It is too late to perform the requested operation, because the transaction has already been aborted."], + [3223192406] = [id="GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM", desc="The specified mode-pruning algorithm is invalid."], + [1310723] = [id="badunit", desc="The system cannot find the device specified."], + [3221225783] = [id="IO_PRIVILEGE_FAILED", desc="{Privilege Failed} The I/O permissions for the process could not be changed."], + [3221225595] = [id="INVALID_IMAGE_FORMAT", desc="{Bad Image} %hs is either not designed to run on Windows or it contains an error. Try installing the program again using the original installation media or contact your system administrator or the software vendor for support."], + [3221356607] = [id="RPC_NT_NAME_SERVICE_UNAVAILABLE", desc="The name service is unavailable."], + [3221880885] = [id="CTX_SHADOW_ENDED_BY_MODE_CHANGE", desc="The remote control of the console was terminated because the display mode was changed. Changing the display mode in a remote control session is not supported."], + [3222601749] = [id="SXS_CORRUPTION", desc="The application isolation metadata for this process or thread has become corrupt."], + [118161409] = [id="invalidprintercommand", desc="The printer command is invalid."], + [3221226517] = [id="HUNG_DISPLAY_DRIVER_THREAD", desc="{Display Driver Stopped Responding} The %hs display driver has stopped working normally. Save your work and reboot the system to restore full display functionality. The next time you reboot the machine a dialog will be displayed giving you a chance to report this failure to Microsoft."] + } + + +.. bro:id:: SMB::wksta_cmds + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "NetrWkstaUserEnum", + [9] = "NetrUseGetInfo", + [27] = "NetrAddAlternateComputerName", + [6] = "NetrWkstaTransportAdd", + [11] = "NetrUseEnum", + [22] = "NetrJoinDomain2", + [24] = "NetrRenameMachineInDomain2", + [30] = "NetrEnumerateComputerNames", + [1] = "NetrWkstaSetInfo", + [8] = "NetrUseAdd", + [7] = "NetrWkstaTransportDel", + [23] = "NetrUnjoinDomain2", + [29] = "NetrSetPrimaryComputerName", + [5] = "NetrWkstaTransportEnum", + [25] = "NetrValidateName2", + [28] = "NetrRemoveAlternateComputerName", + [10] = "NetrUseDel", + [0] = "NetrWkstaGetInfo", + [13] = "NetrWorkstationStatisticsGet", + [20] = "NetrGetJoinInformation", + [26] = "NetrGetJoinableOUs2" + } + + Workstation service sub commands. + +Constants +######### +.. bro:id:: SMB1::commands + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [130] = "FIND", + [195] = "GET_PRINT_QUEUE", + [19] = "LOCK_AND_READ", + [10] = "READ", + [3] = "CREATE", + [43] = "ECHO", + [50] = "TRANSACTION2", + [112] = "TREE_CONNECT", + [47] = "WRITE_ANDX", + [27] = "READ_MPX", + [216] = "READ_BULK", + [217] = "WRITE_BULK", + [6] = "DELETE", + [20] = "WRITE_AND_UNLOCK", + [51] = "TRANSACTION2_SECONDARY", + [37] = "TRANSACTION", + [31] = "WRITE_MPX_SECONDARY", + [161] = "NT_TRANSACT_SECONDARY", + [28] = "READ_MPX_SECONDARY", + [9] = "SET_INFORMATION", + [11] = "WRITE", + [128] = "QUERY_INFORMATION_DISK", + [115] = "SESSION_SETUP_ANDX", + [40] = "IOCTL_SECONDARY", + [41] = "COPY", + [46] = "READ_ANDX", + [5] = "FLUSH", + [49] = "CLOSE_AND_TREE_DISC", + [218] = "WRITE_BULK_DATA", + [45] = "OPEN_ANDX", + [8] = "QUERY_INFORMATION", + [17] = "PROCESS_EXIT", + [53] = "FIND_NOTIFY_CLOSE", + [129] = "SEARCH", + [48] = "NEW_FILE_SIZE", + [33] = "QUERY_SERVER", + [26] = "READ_RAW", + [165] = "NT_RENAME", + [0] = "CREATE_DIRECTORY", + [39] = "IOCTL", + [16] = "CHECK_DIRECTORY", + [34] = "SET_INFORMATION2", + [38] = "TRANSACTION_SECONDARY", + [18] = "SEEK", + [131] = "FIND_UNIQUE", + [35] = "QUERY_INFORMATION2", + [42] = "MOVE", + [7] = "RENAME", + [117] = "TREE_CONNECT_ANDX", + [15] = "CREATE_NEW", + [192] = "OPEN_PRINT_FILE", + [114] = "NEGOTIATE", + [36] = "LOCKING_ANDX", + [164] = "NT_CANCEL", + [4] = "CLOSE", + [44] = "WRITE_AND_CLOSE", + [52] = "FIND_CLOSE2", + [1] = "DELETE_DIRECTORY", + [160] = "NT_TRANSACT", + [14] = "CREATE_TEMPORARY", + [113] = "TREE_DISCONNECT", + [132] = "FIND_CLOSE", + [162] = "NT_CREATE_ANDX", + [194] = "CLOSE_PRINT_FILE", + [29] = "WRITE_RAW", + [13] = "UNLOCK_BYTE_RANGE", + [30] = "WRITE_MPX", + [116] = "LOGOFF_ANDX", + [2] = "OPEN", + [32] = "WRITE_COMPLETE", + [12] = "LOCK_BYTE_RANGE", + [193] = "WRITE_PRINT_FILE" + } + + +.. bro:id:: SMB1::trans2_sub_commands + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "FIND_NEXT2", + [9] = "FSCTL", + [17] = "REPORT_DFS_INCONSISTENCY", + [6] = "SET_PATH_INFORMATION", + [11] = "FIND_NOTIFY_FIRST", + [14] = "SESSION_SETUP", + [4] = "SET_FS_INFORMATION", + [1] = "FIND_FIRST2", + [8] = "SET_FILE_INFORMATION", + [7] = "QUERY_FILE_INFORMATION", + [5] = "QUERY_PATH_INFORMATION", + [10] = "IOCTL", + [0] = "OPEN2", + [3] = "QUERY_FS_INFORMATION", + [12] = "FIND_NOTIFY_NEXT", + [13] = "CREATE_DIRECTORY", + [16] = "GET_DFS_REFERRAL" + } + + +.. bro:id:: SMB1::trans_sub_commands + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [17] = "RAW_READ_NMPIPE", + [1] = "SET_NMPIPE_STATE", + [83] = "WAIT_NMPIPE", + [84] = "CALL_NMPIPE", + [33] = "QUERY_NMPIPE_STATE", + [34] = "QUERY_NMPIPE_INFO", + [38] = "TRANSACT_NMPIPE", + [54] = "READ_NMPIPE", + [55] = "WRITE_NMPIPE", + [35] = "PEEK_NMPIPE", + [49] = "RAW_WRITE_NMPIPE" + } + + +.. bro:id:: SMB2::commands + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "LOGOFF", + [9] = "WRITE", + [17] = "SET_INFO", + [6] = "CLOSE", + [11] = "IOCTL", + [14] = "QUERY_DIRECTORY", + [4] = "TREE_DISCONNECT", + [1] = "SESSION_SETUP", + [8] = "READ", + [7] = "FLUSH", + [15] = "CHANGE_NOTIFY", + [5] = "CREATE", + [10] = "LOCK", + [0] = "NEGOTIATE_PROTOCOL", + [3] = "TREE_CONNECT", + [12] = "CANCEL", + [13] = "ECHO", + [18] = "OPLOCK_BREAK", + [16] = "QUERY_INFO" + } + + +.. bro:id:: SMB2::dialects + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [770] = "3.0.2", + [514] = "2.0.2", + [785] = "3.1.1", + [528] = "2.1", + [768] = "3.0", + [767] = "2.1+" + } + + +.. bro:id:: SMB2::share_types + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "PIPE", + [1] = "DISK", + [3] = "PRINT" + } + + +Types +##### +.. bro:type:: SMB::StatusCode + + :Type: :bro:type:`record` + + id: :bro:type:`string` + + desc: :bro:type:`string` + + +.. bro:type:: SMB::rpc_cmd_table + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + + + diff --git a/doc/scripts/base/protocols/smb/files.bro.rst b/doc/scripts/base/protocols/smb/files.bro.rst new file mode 100644 index 0000000000..39be8facbe --- /dev/null +++ b/doc/scripts/base/protocols/smb/files.bro.rst @@ -0,0 +1,37 @@ +:tocdepth: 3 + +base/protocols/smb/files.bro +============================ +.. bro:namespace:: SMB + + +:Namespace: SMB +:Imports: :doc:`base/frameworks/files `, :doc:`base/protocols/smb/main.bro ` + +Summary +~~~~~~~ +Functions +######### +==================================================== ===================================== +:bro:id:`SMB::describe_file`: :bro:type:`function` Default file describer for SMB. +:bro:id:`SMB::get_file_handle`: :bro:type:`function` Default file handle provider for SMB. +==================================================== ===================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: SMB::describe_file + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`string` + + Default file describer for SMB. + +.. bro:id:: SMB::get_file_handle + + :Type: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`string` + + Default file handle provider for SMB. + + diff --git a/doc/scripts/base/protocols/smb/index.rst b/doc/scripts/base/protocols/smb/index.rst new file mode 100644 index 0000000000..6fd649e2f3 --- /dev/null +++ b/doc/scripts/base/protocols/smb/index.rst @@ -0,0 +1,31 @@ +:orphan: + +Package: base/protocols/smb +=========================== + +Support for SMB protocol analysis. + +:doc:`/scripts/base/protocols/smb/__load__.bro` + + +:doc:`/scripts/base/protocols/smb/consts.bro` + + +:doc:`/scripts/base/protocols/smb/const-dos-error.bro` + + +:doc:`/scripts/base/protocols/smb/const-nt-status.bro` + + +:doc:`/scripts/base/protocols/smb/main.bro` + + +:doc:`/scripts/base/protocols/smb/smb1-main.bro` + + +:doc:`/scripts/base/protocols/smb/smb2-main.bro` + + +:doc:`/scripts/base/protocols/smb/files.bro` + + diff --git a/doc/scripts/base/protocols/smb/main.bro.rst b/doc/scripts/base/protocols/smb/main.bro.rst new file mode 100644 index 0000000000..bb43f64f1a --- /dev/null +++ b/doc/scripts/base/protocols/smb/main.bro.rst @@ -0,0 +1,289 @@ +:tocdepth: 3 + +base/protocols/smb/main.bro +=========================== +.. bro:namespace:: SMB + + +:Namespace: SMB +:Imports: :doc:`base/protocols/smb/const-dos-error.bro `, :doc:`base/protocols/smb/const-nt-status.bro `, :doc:`base/protocols/smb/consts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +====================================================================== ================================== +:bro:id:`SMB::logged_file_actions`: :bro:type:`set` :bro:attr:`&redef` The file actions which are logged. +====================================================================== ================================== + +Types +##### +============================================= ======================================================= +:bro:type:`SMB::Action`: :bro:type:`enum` Abstracted actions for SMB file actions. +:bro:type:`SMB::CmdInfo`: :bro:type:`record` This record is for the smb_cmd.log +:bro:type:`SMB::FileInfo`: :bro:type:`record` This record is for the smb_files.log +:bro:type:`SMB::State`: :bro:type:`record` This record stores the SMB state of in-flight commands, + the file and tree map of the connection. +:bro:type:`SMB::TreeInfo`: :bro:type:`record` This record is for the smb_mapping.log +============================================= ======================================================= + +Redefinitions +############# +================================================================= ============================================================ +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`SMB::FileInfo`: :bro:type:`record` +:bro:type:`connection`: :bro:type:`record` Everything below here is used internally in the SMB scripts. +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= ============================================================ + +Functions +######### +======================================================================== ==================================== +:bro:id:`SMB::set_current_file`: :bro:type:`function` :bro:attr:`&redef` This is an internally used function. +:bro:id:`SMB::write_file_log`: :bro:type:`function` :bro:attr:`&redef` This is an internally used function. +======================================================================== ==================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SMB::logged_file_actions + + :Type: :bro:type:`set` [:bro:type:`SMB::Action`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + SMB::FILE_OPEN, + SMB::PRINT_CLOSE, + SMB::FILE_DELETE, + SMB::FILE_RENAME, + SMB::PRINT_OPEN + } + + The file actions which are logged. + +Types +##### +.. bro:type:: SMB::Action + + :Type: :bro:type:`enum` + + .. bro:enum:: SMB::FILE_READ SMB::Action + + .. bro:enum:: SMB::FILE_WRITE SMB::Action + + .. bro:enum:: SMB::FILE_OPEN SMB::Action + + .. bro:enum:: SMB::FILE_CLOSE SMB::Action + + .. bro:enum:: SMB::FILE_DELETE SMB::Action + + .. bro:enum:: SMB::FILE_RENAME SMB::Action + + .. bro:enum:: SMB::FILE_SET_ATTRIBUTE SMB::Action + + .. bro:enum:: SMB::PIPE_READ SMB::Action + + .. bro:enum:: SMB::PIPE_WRITE SMB::Action + + .. bro:enum:: SMB::PIPE_OPEN SMB::Action + + .. bro:enum:: SMB::PIPE_CLOSE SMB::Action + + .. bro:enum:: SMB::PRINT_READ SMB::Action + + .. bro:enum:: SMB::PRINT_WRITE SMB::Action + + .. bro:enum:: SMB::PRINT_OPEN SMB::Action + + .. bro:enum:: SMB::PRINT_CLOSE SMB::Action + + Abstracted actions for SMB file actions. + +.. bro:type:: SMB::CmdInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp of the command request. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID of the connection the request was sent over. + + id: :bro:type:`conn_id` :bro:attr:`&log` + ID of the connection the request was sent over. + + command: :bro:type:`string` :bro:attr:`&log` + The command sent by the client. + + sub_command: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The subcommand sent by the client, if present. + + argument: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Command argument sent by the client, if any. + + status: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Server reply to the client's command. + + rtt: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + Round trip time from the request to the response. + + version: :bro:type:`string` :bro:attr:`&log` + Version of SMB for the command. + + username: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Authenticated username, if available. + + tree: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + If this is related to a tree, this is the tree + that was used for the current command. + + tree_service: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The type of tree (disk share, printer share, named pipe, etc.). + + referenced_file: :bro:type:`SMB::FileInfo` :bro:attr:`&log` :bro:attr:`&optional` + If the command referenced a file, store it here. + + referenced_tree: :bro:type:`SMB::TreeInfo` :bro:attr:`&optional` + If the command referenced a tree, store it here. + + smb1_offered_dialects: :bro:type:`string_vec` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/smb/smb1-main.bro` is loaded) + + Dialects offered by the client. + + smb2_offered_dialects: :bro:type:`index_vec` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/smb/smb2-main.bro` is loaded) + + Dialects offered by the client. + + This record is for the smb_cmd.log + +.. bro:type:: SMB::FileInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time when the file was first discovered. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID of the connection the file was sent over. + + id: :bro:type:`conn_id` :bro:attr:`&log` + ID of the connection the file was sent over. + + fuid: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Unique ID of the file. + + action: :bro:type:`SMB::Action` :bro:attr:`&log` :bro:attr:`&optional` + Action this log record represents. + + path: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Path pulled from the tree this file was transferred to or from. + + name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Filename if one was seen. + + size: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Total size of the file. + + prev_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + If the rename action was seen, this will be + the file's previous name. + + times: :bro:type:`SMB::MACTimes` :bro:attr:`&log` :bro:attr:`&optional` + Last time this file was modified. + + fid: :bro:type:`count` :bro:attr:`&optional` + ID referencing this file. + + uuid: :bro:type:`string` :bro:attr:`&optional` + UUID referencing this file if DCE/RPC. + + This record is for the smb_files.log + +.. bro:type:: SMB::State + + :Type: :bro:type:`record` + + current_cmd: :bro:type:`SMB::CmdInfo` :bro:attr:`&optional` + A reference to the current command. + + current_file: :bro:type:`SMB::FileInfo` :bro:attr:`&optional` + A reference to the current file. + + current_tree: :bro:type:`SMB::TreeInfo` :bro:attr:`&optional` + A reference to the current tree. + + pending_cmds: :bro:type:`table` [:bro:type:`count`] of :bro:type:`SMB::CmdInfo` :bro:attr:`&optional` + Indexed on MID to map responses to requests. + + fid_map: :bro:type:`table` [:bro:type:`count`] of :bro:type:`SMB::FileInfo` :bro:attr:`&optional` + File map to retrieve file information based on the file ID. + + tid_map: :bro:type:`table` [:bro:type:`count`] of :bro:type:`SMB::TreeInfo` :bro:attr:`&optional` + Tree map to retrieve tree information based on the tree ID. + + uid_map: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` :bro:attr:`&optional` + User map to retrieve user name based on the user ID. + + pipe_map: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` :bro:attr:`&optional` + Pipe map to retrieve UUID based on the file ID of a pipe. + + recent_files: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` :bro:attr:`&read_expire` = ``3.0 mins`` + A set of recent files to avoid logging the same + files over and over in the smb files log. + This only applies to files seen in a single connection. + + This record stores the SMB state of in-flight commands, + the file and tree map of the connection. + +.. bro:type:: SMB::TreeInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + Time when the tree was mapped. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID of the connection the tree was mapped over. + + id: :bro:type:`conn_id` :bro:attr:`&log` + ID of the connection the tree was mapped over. + + path: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Name of the tree path. + + service: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The type of resource of the tree (disk share, printer share, named pipe, etc.). + + native_file_system: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + File system of the tree. + + share_type: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&default` = ``"DISK"`` :bro:attr:`&optional` + If this is SMB2, a share type will be included. For SMB1, + the type of share will be deduced and included as well. + + This record is for the smb_mapping.log + +Functions +######### +.. bro:id:: SMB::set_current_file + + :Type: :bro:type:`function` (smb_state: :bro:type:`SMB::State`, file_id: :bro:type:`count`) : :bro:type:`void` + :Attributes: :bro:attr:`&redef` + + This is an internally used function. + +.. bro:id:: SMB::write_file_log + + :Type: :bro:type:`function` (state: :bro:type:`SMB::State`) : :bro:type:`void` + :Attributes: :bro:attr:`&redef` + + This is an internally used function. + + diff --git a/doc/scripts/base/protocols/smb/smb1-main.bro.rst b/doc/scripts/base/protocols/smb/smb1-main.bro.rst new file mode 100644 index 0000000000..8cc3e36d8e --- /dev/null +++ b/doc/scripts/base/protocols/smb/smb1-main.bro.rst @@ -0,0 +1,22 @@ +:tocdepth: 3 + +base/protocols/smb/smb1-main.bro +================================ +.. bro:namespace:: SMB1 + + +:Namespace: SMB1 +:Imports: :doc:`base/protocols/smb/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================ = +:bro:type:`SMB::CmdInfo`: :bro:type:`record` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/smb/smb2-main.bro.rst b/doc/scripts/base/protocols/smb/smb2-main.bro.rst new file mode 100644 index 0000000000..49550fa9c1 --- /dev/null +++ b/doc/scripts/base/protocols/smb/smb2-main.bro.rst @@ -0,0 +1,22 @@ +:tocdepth: 3 + +base/protocols/smb/smb2-main.bro +================================ +.. bro:namespace:: SMB2 + + +:Namespace: SMB2 +:Imports: :doc:`base/protocols/smb/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================ = +:bro:type:`SMB::CmdInfo`: :bro:type:`record` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/smtp/__load__.bro.rst b/doc/scripts/base/protocols/smtp/__load__.bro.rst new file mode 100644 index 0000000000..1158aba570 --- /dev/null +++ b/doc/scripts/base/protocols/smtp/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/smtp/__load__.bro +================================ + + +:Imports: :doc:`base/protocols/smtp/entities.bro `, :doc:`base/protocols/smtp/files.bro `, :doc:`base/protocols/smtp/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/smtp/entities.bro.rst b/doc/scripts/base/protocols/smtp/entities.bro.rst new file mode 100644 index 0000000000..c51ff6f75f --- /dev/null +++ b/doc/scripts/base/protocols/smtp/entities.bro.rst @@ -0,0 +1,45 @@ +:tocdepth: 3 + +base/protocols/smtp/entities.bro +================================ +.. bro:namespace:: SMTP + +Analysis and logging for MIME entities found in SMTP sessions. + +:Namespace: SMTP +:Imports: :doc:`base/frameworks/files `, :doc:`base/protocols/smtp/main.bro `, :doc:`base/utils/files.bro `, :doc:`base/utils/strings.bro ` + +Summary +~~~~~~~ +Types +##### +============================================ = +:bro:type:`SMTP::Entity`: :bro:type:`record` +============================================ = + +Redefinitions +############# +=========================================== = +:bro:type:`SMTP::Info`: :bro:type:`record` +:bro:type:`SMTP::State`: :bro:type:`record` +=========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: SMTP::Entity + + :Type: :bro:type:`record` + + filename: :bro:type:`string` :bro:attr:`&optional` + Filename for the entity if discovered from a header. + + excerpt: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/smtp/entities-excerpt.bro` is loaded) + + The entity body excerpt. + + + diff --git a/doc/scripts/base/protocols/smtp/files.bro.rst b/doc/scripts/base/protocols/smtp/files.bro.rst new file mode 100644 index 0000000000..b003995b6c --- /dev/null +++ b/doc/scripts/base/protocols/smtp/files.bro.rst @@ -0,0 +1,43 @@ +:tocdepth: 3 + +base/protocols/smtp/files.bro +============================= +.. bro:namespace:: SMTP + + +:Namespace: SMTP +:Imports: :doc:`base/frameworks/files `, :doc:`base/protocols/smtp/entities.bro `, :doc:`base/protocols/smtp/main.bro `, :doc:`base/utils/conn-ids.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`SMTP::Info`: :bro:type:`record` +========================================== = + +Functions +######### +===================================================== ====================================== +:bro:id:`SMTP::describe_file`: :bro:type:`function` Default file describer for SMTP. +:bro:id:`SMTP::get_file_handle`: :bro:type:`function` Default file handle provider for SMTP. +===================================================== ====================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: SMTP::describe_file + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`string` + + Default file describer for SMTP. + +.. bro:id:: SMTP::get_file_handle + + :Type: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`string` + + Default file handle provider for SMTP. + + diff --git a/doc/scripts/base/protocols/smtp/index.rst b/doc/scripts/base/protocols/smtp/index.rst new file mode 100644 index 0000000000..0258b95edf --- /dev/null +++ b/doc/scripts/base/protocols/smtp/index.rst @@ -0,0 +1,20 @@ +:orphan: + +Package: base/protocols/smtp +============================ + +Support for Simple Mail Transfer Protocol (SMTP) analysis. + +:doc:`/scripts/base/protocols/smtp/__load__.bro` + + +:doc:`/scripts/base/protocols/smtp/main.bro` + + +:doc:`/scripts/base/protocols/smtp/entities.bro` + + Analysis and logging for MIME entities found in SMTP sessions. + +:doc:`/scripts/base/protocols/smtp/files.bro` + + diff --git a/doc/scripts/base/protocols/smtp/main.bro.rst b/doc/scripts/base/protocols/smtp/main.bro.rst new file mode 100644 index 0000000000..a326c8eb84 --- /dev/null +++ b/doc/scripts/base/protocols/smtp/main.bro.rst @@ -0,0 +1,196 @@ +:tocdepth: 3 + +base/protocols/smtp/main.bro +============================ +.. bro:namespace:: SMTP + + +:Namespace: SMTP +:Imports: :doc:`base/utils/addrs.bro `, :doc:`base/utils/directions-and-hosts.bro `, :doc:`base/utils/email.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +====================================================================== =================================================== +:bro:id:`SMTP::mail_path_capture`: :bro:type:`Host` :bro:attr:`&redef` Direction to capture the full "Received from" path. +====================================================================== =================================================== + +Types +##### +=========================================== = +:bro:type:`SMTP::Info`: :bro:type:`record` +:bro:type:`SMTP::State`: :bro:type:`record` +=========================================== = + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +=========================================== = +:bro:id:`SMTP::log_smtp`: :bro:type:`event` +=========================================== = + +Functions +######### +============================================== =========================================================== +:bro:id:`SMTP::describe`: :bro:type:`function` Create an extremely shortened representation of a log line. +============================================== =========================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SMTP::mail_path_capture + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``ALL_HOSTS`` + + Direction to capture the full "Received from" path. + REMOTE_HOSTS - only capture the path until an internal host is found. + LOCAL_HOSTS - only capture the path until the external host is discovered. + ALL_HOSTS - always capture the entire path. + NO_HOSTS - never capture the path. + +Types +##### +.. bro:type:: SMTP::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time when the message was first seen. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + trans_depth: :bro:type:`count` :bro:attr:`&log` + A count to represent the depth of this message transaction in + a single connection where multiple messages were transferred. + + helo: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Helo header. + + mailfrom: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Email addresses found in the From header. + + rcptto: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` :bro:attr:`&optional` + Email addresses found in the Rcpt header. + + date: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Date header. + + from: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the From header. + + to: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` :bro:attr:`&optional` + Contents of the To header. + + cc: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` :bro:attr:`&optional` + Contents of the CC header. + + reply_to: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the ReplyTo header. + + msg_id: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the MsgID header. + + in_reply_to: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the In-Reply-To header. + + subject: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the Subject header. + + x_originating_ip: :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the X-Originating-IP header. + + first_received: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the first Received header. + + second_received: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Contents of the second Received header. + + last_reply: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The last message that the server sent to the client. + + path: :bro:type:`vector` of :bro:type:`addr` :bro:attr:`&log` :bro:attr:`&optional` + The message transmission path, as extracted from the headers. + + user_agent: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Value of the User-Agent header from the client. + + tls: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Indicates that the connection has switched to using TLS. + + process_received_from: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional` + Indicates if the "Received: from" headers should still be + processed. + + has_client_activity: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Indicates if client activity has been seen, but not yet logged. + + entity: :bro:type:`SMTP::Entity` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/smtp/entities.bro` is loaded) + + The current entity being seen. + + fuids: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&log` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/smtp/files.bro` is loaded) + + An ordered vector of file unique IDs seen attached to + the message. + + is_webmail: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/smtp/software.bro` is loaded) + + Boolean indicator of if the message was sent through a + webmail interface. + + +.. bro:type:: SMTP::State + + :Type: :bro:type:`record` + + helo: :bro:type:`string` :bro:attr:`&optional` + + messages_transferred: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Count the number of individual messages transmitted during + this SMTP session. Note, this is not the number of + recipients, but the number of message bodies transferred. + + pending_messages: :bro:type:`set` [:bro:type:`SMTP::Info`] :bro:attr:`&optional` + + mime_depth: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/smtp/entities.bro` is loaded) + + Track the number of MIME encoded files transferred + during a session. + + +Events +###### +.. bro:id:: SMTP::log_smtp + + :Type: :bro:type:`event` (rec: :bro:type:`SMTP::Info`) + + +Functions +######### +.. bro:id:: SMTP::describe + + :Type: :bro:type:`function` (rec: :bro:type:`SMTP::Info`) : :bro:type:`string` + + Create an extremely shortened representation of a log line. + + diff --git a/doc/scripts/base/protocols/snmp/__load__.bro.rst b/doc/scripts/base/protocols/snmp/__load__.bro.rst new file mode 100644 index 0000000000..75f838cf44 --- /dev/null +++ b/doc/scripts/base/protocols/snmp/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/snmp/__load__.bro +================================ + + +:Imports: :doc:`base/protocols/snmp/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/snmp/index.rst b/doc/scripts/base/protocols/snmp/index.rst new file mode 100644 index 0000000000..a8536d6b7d --- /dev/null +++ b/doc/scripts/base/protocols/snmp/index.rst @@ -0,0 +1,14 @@ +:orphan: + +Package: base/protocols/snmp +============================ + +Support for Simple Network Management Protocol (SNMP) analysis. + +:doc:`/scripts/base/protocols/snmp/__load__.bro` + + +:doc:`/scripts/base/protocols/snmp/main.bro` + + Enables analysis and logging of SNMP datagrams. + diff --git a/doc/scripts/base/protocols/snmp/main.bro.rst b/doc/scripts/base/protocols/snmp/main.bro.rst new file mode 100644 index 0000000000..b3a3a7565a --- /dev/null +++ b/doc/scripts/base/protocols/snmp/main.bro.rst @@ -0,0 +1,123 @@ +:tocdepth: 3 + +base/protocols/snmp/main.bro +============================ +.. bro:namespace:: SNMP + +Enables analysis and logging of SNMP datagrams. + +:Namespace: SNMP + +Summary +~~~~~~~ +Redefinable Options +################### +============================================================================================================================ ======================================================== +:bro:id:`SNMP::version_map`: :bro:type:`table` :bro:attr:`&redef` :bro:attr:`&default` = ``"unknown"`` :bro:attr:`&optional` Maps an SNMP version integer to a human readable string. +============================================================================================================================ ======================================================== + +Types +##### +========================================== ===================================== +:bro:type:`SNMP::Info`: :bro:type:`record` Information tracked per SNMP session. +========================================== ===================================== + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +=========================================== ==================================================================== +:bro:id:`SNMP::log_snmp`: :bro:type:`event` Event that can be handled to access the SNMP record as it is sent on + to the logging framework. +=========================================== ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: SNMP::version_map + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` :bro:attr:`&default` = ``"unknown"`` :bro:attr:`&optional` + :Default: + + :: + + { + [1] = "2c", + [0] = "1", + [3] = "3" + } + + Maps an SNMP version integer to a human readable string. + +Types +##### +.. bro:type:: SNMP::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp of first packet belonging to the SNMP session. + + uid: :bro:type:`string` :bro:attr:`&log` + The unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 5-tuple of addresses/ports (ports inherently + include transport protocol information) + + duration: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&default` = ``0 secs`` :bro:attr:`&optional` + The amount of time between the first packet beloning to + the SNMP session and the latest one seen. + + version: :bro:type:`string` :bro:attr:`&log` + The version of SNMP being used. + + community: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The community string of the first SNMP packet associated with + the session. This is used as part of SNMP's (v1 and v2c) + administrative/security framework. See :rfc:`1157` or :rfc:`1901`. + + get_requests: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of variable bindings in GetRequest/GetNextRequest PDUs + seen for the session. + + get_bulk_requests: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of variable bindings in GetBulkRequest PDUs seen for + the session. + + get_responses: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of variable bindings in GetResponse/Response PDUs seen + for the session. + + set_requests: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of variable bindings in SetRequest PDUs seen for + the session. + + display_string: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + A system description of the SNMP responder endpoint. + + up_since: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + The time at which the SNMP responder endpoint claims it's been + up since. + + Information tracked per SNMP session. + +Events +###### +.. bro:id:: SNMP::log_snmp + + :Type: :bro:type:`event` (rec: :bro:type:`SNMP::Info`) + + Event that can be handled to access the SNMP record as it is sent on + to the logging framework. + + diff --git a/doc/scripts/base/protocols/socks/__load__.bro.rst b/doc/scripts/base/protocols/socks/__load__.bro.rst new file mode 100644 index 0000000000..ae09d8c0eb --- /dev/null +++ b/doc/scripts/base/protocols/socks/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/socks/__load__.bro +================================= + + +:Imports: :doc:`base/protocols/socks/consts.bro `, :doc:`base/protocols/socks/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/socks/consts.bro.rst b/doc/scripts/base/protocols/socks/consts.bro.rst new file mode 100644 index 0000000000..282d698693 --- /dev/null +++ b/doc/scripts/base/protocols/socks/consts.bro.rst @@ -0,0 +1,102 @@ +:tocdepth: 3 + +base/protocols/socks/consts.bro +=============================== +.. bro:namespace:: SOCKS + + +:Namespace: SOCKS + +Summary +~~~~~~~ +Constants +######### +=============================================================================================================================== = +:bro:id:`SOCKS::v4_status`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`SOCKS::v5_authentication_methods`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +:bro:id:`SOCKS::v5_status`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` +=============================================================================================================================== = + +Types +##### +================================================ = +:bro:type:`SOCKS::RequestType`: :bro:type:`enum` +================================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: SOCKS::v4_status + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [91] = "general SOCKS server failure", + [93] = "request failed because client's identd could not confirm the user ID string in the request", + [92] = "request failed because client is not running identd", + [90] = "succeeded" + } + + +.. bro:id:: SOCKS::v5_authentication_methods + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "Username/Password", + [6] = "Secure Sockets Layer", + [1] = "GSSAPI", + [8] = "Multi-Authentication Framework", + [7] = "NDS Authentication", + [255] = "No Acceptable Methods", + [5] = "Challenge-Response Authentication Method", + [0] = "No Authentication Required", + [3] = "Challenge-Handshake Authentication Protocol" + } + + +.. bro:id:: SOCKS::v5_status + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "connection not allowed by ruleset", + [6] = "TTL expired", + [4] = "Host unreachable", + [1] = "general SOCKS server failure", + [8] = "Address type not supported", + [7] = "Command not supported", + [5] = "Connection refused", + [0] = "succeeded", + [3] = "Network unreachable" + } + + +Types +##### +.. bro:type:: SOCKS::RequestType + + :Type: :bro:type:`enum` + + .. bro:enum:: SOCKS::CONNECTION SOCKS::RequestType + + .. bro:enum:: SOCKS::PORT SOCKS::RequestType + + .. bro:enum:: SOCKS::UDP_ASSOCIATE SOCKS::RequestType + + + diff --git a/doc/scripts/base/protocols/socks/index.rst b/doc/scripts/base/protocols/socks/index.rst new file mode 100644 index 0000000000..2620e3383c --- /dev/null +++ b/doc/scripts/base/protocols/socks/index.rst @@ -0,0 +1,16 @@ +:orphan: + +Package: base/protocols/socks +============================= + +Support for Socket Secure (SOCKS) protocol analysis. + +:doc:`/scripts/base/protocols/socks/__load__.bro` + + +:doc:`/scripts/base/protocols/socks/consts.bro` + + +:doc:`/scripts/base/protocols/socks/main.bro` + + diff --git a/doc/scripts/base/protocols/socks/main.bro.rst b/doc/scripts/base/protocols/socks/main.bro.rst new file mode 100644 index 0000000000..06ebfec557 --- /dev/null +++ b/doc/scripts/base/protocols/socks/main.bro.rst @@ -0,0 +1,108 @@ +:tocdepth: 3 + +base/protocols/socks/main.bro +============================= +.. bro:namespace:: SOCKS + + +:Namespace: SOCKS +:Imports: :doc:`base/frameworks/tunnels `, :doc:`base/protocols/socks/consts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================== ====================================== +:bro:id:`SOCKS::default_capture_password`: :bro:type:`bool` :bro:attr:`&redef` Whether passwords are captured or not. +============================================================================== ====================================== + +Types +##### +=========================================== =========================================================== +:bro:type:`SOCKS::Info`: :bro:type:`record` The record type which contains the fields of the SOCKS log. +=========================================== =========================================================== + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +============================================= ================================================= +:bro:id:`SOCKS::log_socks`: :bro:type:`event` Event that can be handled to access the SOCKS + record as it is sent on to the logging framework. +============================================= ================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SOCKS::default_capture_password + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + Whether passwords are captured or not. + +Types +##### +.. bro:type:: SOCKS::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time when the proxy connection was first detected. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the tunnel - may correspond to connection uid + or be non-existent. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + version: :bro:type:`count` :bro:attr:`&log` + Protocol version of SOCKS. + + user: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Username used to request a login to the proxy. + + password: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Password used to request a login to the proxy. + + status: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Server status for the attempt at using the proxy. + + request: :bro:type:`SOCKS::Address` :bro:attr:`&log` :bro:attr:`&optional` + Client requested SOCKS address. Could be an address, a name + or both. + + request_p: :bro:type:`port` :bro:attr:`&log` :bro:attr:`&optional` + Client requested port. + + bound: :bro:type:`SOCKS::Address` :bro:attr:`&log` :bro:attr:`&optional` + Server bound address. Could be an address, a name or both. + + bound_p: :bro:type:`port` :bro:attr:`&log` :bro:attr:`&optional` + Server bound port. + + capture_password: :bro:type:`bool` :bro:attr:`&default` = :bro:see:`SOCKS::default_capture_password` :bro:attr:`&optional` + Determines if the password will be captured for this request. + + The record type which contains the fields of the SOCKS log. + +Events +###### +.. bro:id:: SOCKS::log_socks + + :Type: :bro:type:`event` (rec: :bro:type:`SOCKS::Info`) + + Event that can be handled to access the SOCKS + record as it is sent on to the logging framework. + + diff --git a/doc/scripts/base/protocols/ssh/__load__.bro.rst b/doc/scripts/base/protocols/ssh/__load__.bro.rst new file mode 100644 index 0000000000..46a06d9f51 --- /dev/null +++ b/doc/scripts/base/protocols/ssh/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/ssh/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/ssh/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/ssh/index.rst b/doc/scripts/base/protocols/ssh/index.rst new file mode 100644 index 0000000000..a180f27009 --- /dev/null +++ b/doc/scripts/base/protocols/ssh/index.rst @@ -0,0 +1,14 @@ +:orphan: + +Package: base/protocols/ssh +=========================== + +Support for SSH protocol analysis. + +:doc:`/scripts/base/protocols/ssh/__load__.bro` + + +:doc:`/scripts/base/protocols/ssh/main.bro` + + Implements base functionality for SSH analysis. Generates the ssh.log file. + diff --git a/doc/scripts/base/protocols/ssh/main.bro.rst b/doc/scripts/base/protocols/ssh/main.bro.rst new file mode 100644 index 0000000000..ee7a75514b --- /dev/null +++ b/doc/scripts/base/protocols/ssh/main.bro.rst @@ -0,0 +1,228 @@ +:tocdepth: 3 + +base/protocols/ssh/main.bro +=========================== +.. bro:namespace:: GLOBAL +.. bro:namespace:: SSH + +Implements base functionality for SSH analysis. Generates the ssh.log file. + +:Namespaces: GLOBAL, SSH +:Imports: :doc:`base/utils/directions-and-hosts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +==================================================================================== ==================================================================== +:bro:id:`SSH::compression_algorithms`: :bro:type:`set` :bro:attr:`&redef` The set of compression algorithms. +:bro:id:`SSH::disable_analyzer_after_detection`: :bro:type:`bool` :bro:attr:`&redef` If true, after detection detach the SSH analyzer from the connection + to prevent continuing to process encrypted traffic. +==================================================================================== ==================================================================== + +Types +##### +========================================= ========================================================= +:bro:type:`SSH::Info`: :bro:type:`record` The record type which contains the fields of the SSH log. +========================================= ========================================================= + +Redefinitions +############# +================================================================= =========================================== +:bro:type:`Log::ID`: :bro:type:`enum` The SSH protocol logging stream identifier. +:bro:type:`SSH::Info`: :bro:type:`record` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= =========================================== + +Events +###### +================================================ =================================================================== +:bro:id:`SSH::log_ssh`: :bro:type:`event` Event that can be handled to access the SSH record as it is sent on + to the logging framework. +:bro:id:`ssh_auth_failed`: :bro:type:`event` This event is generated when an :abbr:`SSH (Secure Shell)` + connection was determined to have had a failed authentication. +:bro:id:`ssh_auth_result`: :bro:type:`event` This event is generated when a determination has been made about + the final authentication result of an :abbr:`SSH (Secure Shell)` + connection. +:bro:id:`ssh_server_host_key`: :bro:type:`event` Event that can be handled when the analyzer sees an SSH server host + key. +================================================ =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SSH::compression_algorithms + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "zlib", + "zlib@openssh.com" + } + + The set of compression algorithms. We can't accurately determine + authentication success or failure when compression is enabled. + +.. bro:id:: SSH::disable_analyzer_after_detection + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, after detection detach the SSH analyzer from the connection + to prevent continuing to process encrypted traffic. Helps with performance + (especially with large file transfers). + +Types +##### +.. bro:type:: SSH::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time when the SSH connection began. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + version: :bro:type:`count` :bro:attr:`&log` + SSH major version (1 or 2) + + auth_success: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + Authentication result (T=success, F=failure, unset=unknown) + + auth_attempts: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The number of authentication attemps we observed. There's always + at least one, since some servers might support no authentication at all. + It's important to note that not all of these are failures, since + some servers require two-factor auth (e.g. password AND pubkey) + + direction: :bro:type:`Direction` :bro:attr:`&log` :bro:attr:`&optional` + Direction of the connection. If the client was a local host + logging into an external host, this would be OUTBOUND. INBOUND + would be set for the opposite situation. + + client: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The client's version string + + server: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The server's version string + + cipher_alg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The encryption algorithm in use + + mac_alg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The signing (MAC) algorithm in use + + compression_alg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The compression algorithm in use + + kex_alg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The key exchange algorithm in use + + host_key_alg: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The server host key's algorithm + + host_key: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + The server's key fingerprint + + logged: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + + capabilities: :bro:type:`SSH::Capabilities` :bro:attr:`&optional` + + analyzer_id: :bro:type:`count` :bro:attr:`&optional` + Analzyer ID + + remote_location: :bro:type:`geo_location` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssh/geo-data.bro` is loaded) + + Add geographic data related to the "remote" host of the + connection. + + The record type which contains the fields of the SSH log. + +Events +###### +.. bro:id:: SSH::log_ssh + + :Type: :bro:type:`event` (rec: :bro:type:`SSH::Info`) + + Event that can be handled to access the SSH record as it is sent on + to the logging framework. + +.. bro:id:: ssh_auth_failed + + :Type: :bro:type:`event` (c: :bro:type:`connection`) + + This event is generated when an :abbr:`SSH (Secure Shell)` + connection was determined to have had a failed authentication. This + determination is based on packet size analysis, and errs on the + side of caution - that is, if there's any doubt about the + authentication failure, this event is *not* raised. + + This event is only raised once per connection. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_result ssh_auth_attempted + ssh_capabilities ssh2_server_host_key ssh1_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh_auth_result + + :Type: :bro:type:`event` (c: :bro:type:`connection`, result: :bro:type:`bool`, auth_attempts: :bro:type:`count`) + + This event is generated when a determination has been made about + the final authentication result of an :abbr:`SSH (Secure Shell)` + connection. This determination is based on packet size analysis, + and errs on the side of caution - that is, if there's any doubt + about the result of the authentication, this event is *not* raised. + + This event is only raised once per connection. + + + :c: The connection over which the :abbr:`SSH (Secure Shell)` + connection took place. + + + :result: True if the authentication was successful, false if not. + + + :auth_attempts: The number of authentication attempts that were + observed. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_attempted + ssh_capabilities ssh2_server_host_key ssh1_server_host_key + ssh_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + +.. bro:id:: ssh_server_host_key + + :Type: :bro:type:`event` (c: :bro:type:`connection`, hash: :bro:type:`string`) + + Event that can be handled when the analyzer sees an SSH server host + key. This abstracts :bro:id:`ssh1_server_host_key` and + :bro:id:`ssh2_server_host_key`. + + .. bro:see:: ssh_server_version ssh_client_version + ssh_auth_successful ssh_auth_failed ssh_auth_result + ssh_auth_attempted ssh_capabilities ssh2_server_host_key + ssh1_server_host_key ssh_encrypted_packet ssh2_dh_server_params + ssh2_gss_error ssh2_ecc_key + + diff --git a/doc/scripts/base/protocols/ssl/__load__.bro.rst b/doc/scripts/base/protocols/ssl/__load__.bro.rst new file mode 100644 index 0000000000..a62edd8b34 --- /dev/null +++ b/doc/scripts/base/protocols/ssl/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/ssl/__load__.bro +=============================== + + +:Imports: :doc:`base/protocols/ssl/consts.bro `, :doc:`base/protocols/ssl/ct-list.bro `, :doc:`base/protocols/ssl/files.bro `, :doc:`base/protocols/ssl/main.bro `, :doc:`base/protocols/ssl/mozilla-ca-list.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/ssl/consts.bro.rst b/doc/scripts/base/protocols/ssl/consts.bro.rst new file mode 100644 index 0000000000..72442972e4 --- /dev/null +++ b/doc/scripts/base/protocols/ssl/consts.bro.rst @@ -0,0 +1,3549 @@ +:tocdepth: 3 + +base/protocols/ssl/consts.bro +============================= +.. bro:namespace:: SSL + + +:Namespace: SSL + +Summary +~~~~~~~ +Constants +######### +======================================================================================================================== ===================================================================================== +:bro:id:`SSL::ALERT`: :bro:type:`count` +:bro:id:`SSL::APPLICATION_DATA`: :bro:type:`count` +:bro:id:`SSL::CERTIFICATE`: :bro:type:`count` +:bro:id:`SSL::CERTIFICATE_REQUEST`: :bro:type:`count` +:bro:id:`SSL::CERTIFICATE_STATUS`: :bro:type:`count` +:bro:id:`SSL::CERTIFICATE_URL`: :bro:type:`count` +:bro:id:`SSL::CERTIFICATE_VERIFY`: :bro:type:`count` +:bro:id:`SSL::CHANGE_CIPHER_SPEC`: :bro:type:`count` +:bro:id:`SSL::CLIENT_HELLO`: :bro:type:`count` +:bro:id:`SSL::CLIENT_KEY_EXCHANGE`: :bro:type:`count` +:bro:id:`SSL::DTLSv10`: :bro:type:`count` +:bro:id:`SSL::DTLSv12`: :bro:type:`count` +:bro:id:`SSL::ENCRYPTED_EXTENSIONS`: :bro:type:`count` +:bro:id:`SSL::FINISHED`: :bro:type:`count` +:bro:id:`SSL::HANDSHAKE`: :bro:type:`count` +:bro:id:`SSL::HEARTBEAT`: :bro:type:`count` +:bro:id:`SSL::HELLO_REQUEST`: :bro:type:`count` +:bro:id:`SSL::HELLO_RETRY_REQUEST`: :bro:type:`count` +:bro:id:`SSL::HELLO_VERIFY_REQUEST`: :bro:type:`count` +:bro:id:`SSL::KEY_UPDATE`: :bro:type:`count` +:bro:id:`SSL::SERVER_HELLO`: :bro:type:`count` +:bro:id:`SSL::SERVER_HELLO_DONE`: :bro:type:`count` +:bro:id:`SSL::SERVER_KEY_EXCHANGE`: :bro:type:`count` +:bro:id:`SSL::SESSION_TICKET`: :bro:type:`count` +:bro:id:`SSL::SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::SSL_FORTEZZA_KEA_WITH_NULL_SHA`: :bro:type:`count` +:bro:id:`SSL::SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA_2`: :bro:type:`count` +:bro:id:`SSL::SSL_RSA_FIPS_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::SSL_RSA_FIPS_WITH_DES_CBC_SHA_2`: :bro:type:`count` +:bro:id:`SSL::SSL_RSA_WITH_3DES_EDE_CBC_MD5`: :bro:type:`count` +:bro:id:`SSL::SSL_RSA_WITH_DES_CBC_MD5`: :bro:type:`count` +:bro:id:`SSL::SSL_RSA_WITH_IDEA_CBC_MD5`: :bro:type:`count` +:bro:id:`SSL::SSL_RSA_WITH_RC2_CBC_MD5`: :bro:type:`count` +:bro:id:`SSL::SSLv2`: :bro:type:`count` +:bro:id:`SSL::SSLv20_CK_DES_192_EDE3_CBC_WITH_MD5`: :bro:type:`count` +:bro:id:`SSL::SSLv20_CK_DES_64_CBC_WITH_MD5`: :bro:type:`count` +:bro:id:`SSL::SSLv20_CK_IDEA_128_CBC_WITH_MD5`: :bro:type:`count` +:bro:id:`SSL::SSLv20_CK_RC2_128_CBC_EXPORT40_WITH_MD5`: :bro:type:`count` +:bro:id:`SSL::SSLv20_CK_RC2_128_CBC_WITH_MD5`: :bro:type:`count` +:bro:id:`SSL::SSLv20_CK_RC4_128_EXPORT40_WITH_MD5`: :bro:type:`count` +:bro:id:`SSL::SSLv20_CK_RC4_128_WITH_MD5`: :bro:type:`count` +:bro:id:`SSL::SSLv3`: :bro:type:`count` +:bro:id:`SSL::SUPPLEMENTAL_DATA`: :bro:type:`count` +:bro:id:`SSL::TLS_AES_128_CCM_8_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_AES_128_CCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_CECPQ1_ECDSA_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_CECPQ1_ECDSA_WITH_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_CECPQ1_RSA_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_CECPQ1_RSA_WITH_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_AES_128_CBC_RMD`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_AES_256_CBC_RMD`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_AES_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_DSS_WITH_SEED_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_AES_128_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_AES_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_AES_256_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_NULL_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_NULL_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_PSK_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_128_CBC_RMD`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_128_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_128_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_256_CBC_RMD`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_256_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_256_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DHE_RSA_WITH_SEED_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_EXPORT_WITH_DES40_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_EXPORT_WITH_RC4_40_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_AES_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_RC4_128_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_ANON_WITH_SEED_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_AES_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_DSS_WITH_SEED_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_AES_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_DH_RSA_WITH_SEED_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_128_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_256_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256_OLD`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_NULL_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_ECDSA_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_NULL_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_NULL_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_NULL_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_PSK_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_NULL_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDHE_RSA_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ANON_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ANON_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ANON_WITH_NULL_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ANON_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_NULL_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_ECDSA_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_NULL_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_ECDH_RSA_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_EMPTY_RENEGOTIATION_INFO_SCSV`: :bro:type:`count` +:bro:id:`SSL::TLS_FALLBACK_SCSV`: :bro:type:`count` +:bro:id:`SSL::TLS_GOSTR341001_WITH_28147_CNT_IMIT`: :bro:type:`count` +:bro:id:`SSL::TLS_GOSTR341001_WITH_NULL_GOSTR3411`: :bro:type:`count` +:bro:id:`SSL::TLS_GOSTR341094_WITH_28147_CNT_IMIT`: :bro:type:`count` +:bro:id:`SSL::TLS_GOSTR341094_WITH_NULL_GOSTR3411`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_EXPORT_WITH_RC4_40_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_EXPORT_WITH_RC4_40_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_WITH_3DES_EDE_CBC_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_WITH_DES_CBC_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_WITH_IDEA_CBC_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_WITH_IDEA_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_WITH_RC4_128_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_KRB5_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_NULL_WITH_NULL_NULL`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_DHE_WITH_AES_128_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_DHE_WITH_AES_256_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_128_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_128_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_256_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_256_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_NULL_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_NULL_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_PSK_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_EXPORT1024_WITH_RC4_56_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_EXPORT1024_WITH_RC4_56_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_EXPORT_WITH_DES40_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_EXPORT_WITH_RC4_40_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_AES_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_NULL_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_NULL_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_PSK_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_3DES_EDE_CBC_RMD`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_128_CBC_RMD`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_128_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_128_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_256_CBC_RMD`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_256_CCM`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_256_CCM_8`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_AES_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_ARIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_ARIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_ARIA_256_CBC_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_ARIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_CAMELLIA_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_CAMELLIA_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_DES_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_IDEA_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_NULL_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_NULL_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_NULL_SHA256`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_RC4_128_MD5`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_RC4_128_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_RSA_WITH_SEED_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_SRP_SHA_WITH_AES_128_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLS_SRP_SHA_WITH_AES_256_CBC_SHA`: :bro:type:`count` +:bro:id:`SSL::TLSv10`: :bro:type:`count` +:bro:id:`SSL::TLSv11`: :bro:type:`count` +:bro:id:`SSL::TLSv12`: :bro:type:`count` +:bro:id:`SSL::TLSv13`: :bro:type:`count` +:bro:id:`SSL::V2_CLIENT_HELLO`: :bro:type:`count` +:bro:id:`SSL::V2_CLIENT_MASTER_KEY`: :bro:type:`count` +:bro:id:`SSL::V2_ERROR`: :bro:type:`count` +:bro:id:`SSL::V2_SERVER_HELLO`: :bro:type:`count` +:bro:id:`SSL::alert_descriptions`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between numeric codes and human readable strings for alert + descriptions. +:bro:id:`SSL::alert_levels`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between numeric codes and human readable strings for alert + levels. +:bro:id:`SSL::cipher_desc`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` This is a table of all known cipher specs. +:bro:id:`SSL::ec_curves`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between numeric codes and human readable string for SSL/TLS elliptic curves. +:bro:id:`SSL::ec_point_formats`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between numeric codes and human readable string for SSL/TLS EC point formats. +:bro:id:`SSL::extensions`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between numeric codes and human readable strings for SSL/TLS + extensions. +:bro:id:`SSL::hash_algorithms`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between numeric codes and human readable strings for hash + algorithms. +:bro:id:`SSL::signature_algorithms`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between numeric codes and human readable strings for signature + algorithms. +:bro:id:`SSL::version_strings`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between the constants and string values for SSL/TLS versions. +======================================================================================================================== ===================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: SSL::ALERT + + :Type: :bro:type:`count` + :Default: ``21`` + + +.. bro:id:: SSL::APPLICATION_DATA + + :Type: :bro:type:`count` + :Default: ``23`` + + +.. bro:id:: SSL::CERTIFICATE + + :Type: :bro:type:`count` + :Default: ``11`` + + +.. bro:id:: SSL::CERTIFICATE_REQUEST + + :Type: :bro:type:`count` + :Default: ``13`` + + +.. bro:id:: SSL::CERTIFICATE_STATUS + + :Type: :bro:type:`count` + :Default: ``22`` + + +.. bro:id:: SSL::CERTIFICATE_URL + + :Type: :bro:type:`count` + :Default: ``21`` + + +.. bro:id:: SSL::CERTIFICATE_VERIFY + + :Type: :bro:type:`count` + :Default: ``15`` + + +.. bro:id:: SSL::CHANGE_CIPHER_SPEC + + :Type: :bro:type:`count` + :Default: ``20`` + + +.. bro:id:: SSL::CLIENT_HELLO + + :Type: :bro:type:`count` + :Default: ``1`` + + +.. bro:id:: SSL::CLIENT_KEY_EXCHANGE + + :Type: :bro:type:`count` + :Default: ``16`` + + +.. bro:id:: SSL::DTLSv10 + + :Type: :bro:type:`count` + :Default: ``65279`` + + +.. bro:id:: SSL::DTLSv12 + + :Type: :bro:type:`count` + :Default: ``65277`` + + +.. bro:id:: SSL::ENCRYPTED_EXTENSIONS + + :Type: :bro:type:`count` + :Default: ``8`` + + +.. bro:id:: SSL::FINISHED + + :Type: :bro:type:`count` + :Default: ``20`` + + +.. bro:id:: SSL::HANDSHAKE + + :Type: :bro:type:`count` + :Default: ``22`` + + +.. bro:id:: SSL::HEARTBEAT + + :Type: :bro:type:`count` + :Default: ``24`` + + +.. bro:id:: SSL::HELLO_REQUEST + + :Type: :bro:type:`count` + :Default: ``0`` + + +.. bro:id:: SSL::HELLO_RETRY_REQUEST + + :Type: :bro:type:`count` + :Default: ``6`` + + +.. bro:id:: SSL::HELLO_VERIFY_REQUEST + + :Type: :bro:type:`count` + :Default: ``3`` + + +.. bro:id:: SSL::KEY_UPDATE + + :Type: :bro:type:`count` + :Default: ``24`` + + +.. bro:id:: SSL::SERVER_HELLO + + :Type: :bro:type:`count` + :Default: ``2`` + + +.. bro:id:: SSL::SERVER_HELLO_DONE + + :Type: :bro:type:`count` + :Default: ``14`` + + +.. bro:id:: SSL::SERVER_KEY_EXCHANGE + + :Type: :bro:type:`count` + :Default: ``12`` + + +.. bro:id:: SSL::SESSION_TICKET + + :Type: :bro:type:`count` + :Default: ``4`` + + +.. bro:id:: SSL::SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``29`` + + +.. bro:id:: SSL::SSL_FORTEZZA_KEA_WITH_NULL_SHA + + :Type: :bro:type:`count` + :Default: ``28`` + + +.. bro:id:: SSL::SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``65279`` + + +.. bro:id:: SSL::SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA_2 + + :Type: :bro:type:`count` + :Default: ``65504`` + + +.. bro:id:: SSL::SSL_RSA_FIPS_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``65278`` + + +.. bro:id:: SSL::SSL_RSA_FIPS_WITH_DES_CBC_SHA_2 + + :Type: :bro:type:`count` + :Default: ``65505`` + + +.. bro:id:: SSL::SSL_RSA_WITH_3DES_EDE_CBC_MD5 + + :Type: :bro:type:`count` + :Default: ``65411`` + + +.. bro:id:: SSL::SSL_RSA_WITH_DES_CBC_MD5 + + :Type: :bro:type:`count` + :Default: ``65410`` + + +.. bro:id:: SSL::SSL_RSA_WITH_IDEA_CBC_MD5 + + :Type: :bro:type:`count` + :Default: ``65409`` + + +.. bro:id:: SSL::SSL_RSA_WITH_RC2_CBC_MD5 + + :Type: :bro:type:`count` + :Default: ``65408`` + + +.. bro:id:: SSL::SSLv2 + + :Type: :bro:type:`count` + :Default: ``2`` + + +.. bro:id:: SSL::SSLv20_CK_DES_192_EDE3_CBC_WITH_MD5 + + :Type: :bro:type:`count` + :Default: ``458944`` + + +.. bro:id:: SSL::SSLv20_CK_DES_64_CBC_WITH_MD5 + + :Type: :bro:type:`count` + :Default: ``393280`` + + +.. bro:id:: SSL::SSLv20_CK_IDEA_128_CBC_WITH_MD5 + + :Type: :bro:type:`count` + :Default: ``327808`` + + +.. bro:id:: SSL::SSLv20_CK_RC2_128_CBC_EXPORT40_WITH_MD5 + + :Type: :bro:type:`count` + :Default: ``262272`` + + +.. bro:id:: SSL::SSLv20_CK_RC2_128_CBC_WITH_MD5 + + :Type: :bro:type:`count` + :Default: ``196736`` + + +.. bro:id:: SSL::SSLv20_CK_RC4_128_EXPORT40_WITH_MD5 + + :Type: :bro:type:`count` + :Default: ``131200`` + + +.. bro:id:: SSL::SSLv20_CK_RC4_128_WITH_MD5 + + :Type: :bro:type:`count` + :Default: ``65664`` + + +.. bro:id:: SSL::SSLv3 + + :Type: :bro:type:`count` + :Default: ``768`` + + +.. bro:id:: SSL::SUPPLEMENTAL_DATA + + :Type: :bro:type:`count` + :Default: ``23`` + + +.. bro:id:: SSL::TLS_AES_128_CCM_8_SHA256 + + :Type: :bro:type:`count` + :Default: ``4869`` + + +.. bro:id:: SSL::TLS_AES_128_CCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``4868`` + + +.. bro:id:: SSL::TLS_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``4865`` + + +.. bro:id:: SSL::TLS_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``4866`` + + +.. bro:id:: SSL::TLS_CECPQ1_ECDSA_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``5818`` + + +.. bro:id:: SSL::TLS_CECPQ1_ECDSA_WITH_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``5816`` + + +.. bro:id:: SSL::TLS_CECPQ1_RSA_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``5817`` + + +.. bro:id:: SSL::TLS_CECPQ1_RSA_WITH_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``5815`` + + +.. bro:id:: SSL::TLS_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``4867`` + + +.. bro:id:: SSL::TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``99`` + + +.. bro:id:: SSL::TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA + + :Type: :bro:type:`count` + :Default: ``101`` + + +.. bro:id:: SSL::TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``17`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD + + :Type: :bro:type:`count` + :Default: ``114`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``19`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_AES_128_CBC_RMD + + :Type: :bro:type:`count` + :Default: ``115`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``50`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``64`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``162`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_AES_256_CBC_RMD + + :Type: :bro:type:`count` + :Default: ``116`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``56`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``106`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``163`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49218`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49238`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49219`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49239`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``68`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``189`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49280`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``135`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``195`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49281`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``18`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``102`` + + +.. bro:id:: SSL::TLS_DHE_DSS_WITH_SEED_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``153`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``143`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``144`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``178`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_AES_128_CCM + + :Type: :bro:type:`count` + :Default: ``49318`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``170`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``145`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``179`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_AES_256_CCM + + :Type: :bro:type:`count` + :Default: ``49319`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``171`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49254`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49260`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49255`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49261`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49302`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49296`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49303`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49297`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``52397`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_NULL_SHA256 + + :Type: :bro:type:`count` + :Default: ``180`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_NULL_SHA384 + + :Type: :bro:type:`count` + :Default: ``181`` + + +.. bro:id:: SSL::TLS_DHE_PSK_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``142`` + + +.. bro:id:: SSL::TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``20`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD + + :Type: :bro:type:`count` + :Default: ``119`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``22`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_128_CBC_RMD + + :Type: :bro:type:`count` + :Default: ``120`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``51`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``103`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_128_CCM + + :Type: :bro:type:`count` + :Default: ``49310`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_128_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49314`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``158`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_256_CBC_RMD + + :Type: :bro:type:`count` + :Default: ``121`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``57`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``107`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_256_CCM + + :Type: :bro:type:`count` + :Default: ``49311`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_256_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49315`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``159`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49220`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49234`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49221`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49235`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``69`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``190`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49276`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``136`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``196`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49277`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``52394`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD + + :Type: :bro:type:`count` + :Default: ``52245`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``21`` + + +.. bro:id:: SSL::TLS_DHE_RSA_WITH_SEED_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``154`` + + +.. bro:id:: SSL::TLS_DH_ANON_EXPORT_WITH_DES40_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``25`` + + +.. bro:id:: SSL::TLS_DH_ANON_EXPORT_WITH_RC4_40_MD5 + + :Type: :bro:type:`count` + :Default: ``23`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``27`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``52`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``108`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``166`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``58`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_AES_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``109`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``167`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49222`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49242`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49223`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49243`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``70`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``191`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49284`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``137`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``197`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49285`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``26`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_RC4_128_MD5 + + :Type: :bro:type:`count` + :Default: ``24`` + + +.. bro:id:: SSL::TLS_DH_ANON_WITH_SEED_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``155`` + + +.. bro:id:: SSL::TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``11`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``13`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``48`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``62`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``164`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``54`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_AES_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``104`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``165`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49214`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49240`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49215`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49241`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``66`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``187`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49282`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``133`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``193`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49283`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``12`` + + +.. bro:id:: SSL::TLS_DH_DSS_WITH_SEED_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``151`` + + +.. bro:id:: SSL::TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``14`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``16`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``63`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``160`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``55`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_AES_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``105`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``161`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49216`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49236`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49217`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49237`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``67`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``188`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49278`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``134`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``194`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49279`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``15`` + + +.. bro:id:: SSL::TLS_DH_RSA_WITH_SEED_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``152`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49160`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49161`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49187`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_128_CCM + + :Type: :bro:type:`count` + :Default: ``49324`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49326`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49195`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49162`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49188`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_256_CCM + + :Type: :bro:type:`count` + :Default: ``49325`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49327`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49196`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49224`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49244`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49225`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49245`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49266`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49286`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49267`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49287`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``52393`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256_OLD + + :Type: :bro:type:`count` + :Default: ``52244`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_NULL_SHA + + :Type: :bro:type:`count` + :Default: ``49158`` + + +.. bro:id:: SSL::TLS_ECDHE_ECDSA_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``49159`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49204`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49205`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49207`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256 + + :Type: :bro:type:`count` + :Default: ``53251`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``53252`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``53249`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49206`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49208`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``53250`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49264`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49265`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49306`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49307`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``52396`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_NULL_SHA + + :Type: :bro:type:`count` + :Default: ``49209`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_NULL_SHA256 + + :Type: :bro:type:`count` + :Default: ``49210`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_NULL_SHA384 + + :Type: :bro:type:`count` + :Default: ``49211`` + + +.. bro:id:: SSL::TLS_ECDHE_PSK_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``49203`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49170`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49171`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49191`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49199`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49172`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49192`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49200`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49228`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49248`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49229`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49249`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49270`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49290`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49271`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49291`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``52392`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD + + :Type: :bro:type:`count` + :Default: ``52243`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_NULL_SHA + + :Type: :bro:type:`count` + :Default: ``49168`` + + +.. bro:id:: SSL::TLS_ECDHE_RSA_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``49169`` + + +.. bro:id:: SSL::TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49175`` + + +.. bro:id:: SSL::TLS_ECDH_ANON_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49176`` + + +.. bro:id:: SSL::TLS_ECDH_ANON_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49177`` + + +.. bro:id:: SSL::TLS_ECDH_ANON_WITH_NULL_SHA + + :Type: :bro:type:`count` + :Default: ``49173`` + + +.. bro:id:: SSL::TLS_ECDH_ANON_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``49174`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49155`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49156`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49189`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49197`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49157`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49190`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49198`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49226`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49246`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49227`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49247`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49268`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49288`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49269`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49289`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_NULL_SHA + + :Type: :bro:type:`count` + :Default: ``49153`` + + +.. bro:id:: SSL::TLS_ECDH_ECDSA_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``49154`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49165`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49166`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49193`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49201`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49167`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49194`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49202`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49230`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49250`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49231`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49251`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49272`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49292`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49273`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49293`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_NULL_SHA + + :Type: :bro:type:`count` + :Default: ``49163`` + + +.. bro:id:: SSL::TLS_ECDH_RSA_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``49164`` + + +.. bro:id:: SSL::TLS_EMPTY_RENEGOTIATION_INFO_SCSV + + :Type: :bro:type:`count` + :Default: ``255`` + + +.. bro:id:: SSL::TLS_FALLBACK_SCSV + + :Type: :bro:type:`count` + :Default: ``22016`` + + +.. bro:id:: SSL::TLS_GOSTR341001_WITH_28147_CNT_IMIT + + :Type: :bro:type:`count` + :Default: ``129`` + + +.. bro:id:: SSL::TLS_GOSTR341001_WITH_NULL_GOSTR3411 + + :Type: :bro:type:`count` + :Default: ``131`` + + +.. bro:id:: SSL::TLS_GOSTR341094_WITH_28147_CNT_IMIT + + :Type: :bro:type:`count` + :Default: ``128`` + + +.. bro:id:: SSL::TLS_GOSTR341094_WITH_NULL_GOSTR3411 + + :Type: :bro:type:`count` + :Default: ``130`` + + +.. bro:id:: SSL::TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 + + :Type: :bro:type:`count` + :Default: ``41`` + + +.. bro:id:: SSL::TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA + + :Type: :bro:type:`count` + :Default: ``38`` + + +.. bro:id:: SSL::TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5 + + :Type: :bro:type:`count` + :Default: ``42`` + + +.. bro:id:: SSL::TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA + + :Type: :bro:type:`count` + :Default: ``39`` + + +.. bro:id:: SSL::TLS_KRB5_EXPORT_WITH_RC4_40_MD5 + + :Type: :bro:type:`count` + :Default: ``43`` + + +.. bro:id:: SSL::TLS_KRB5_EXPORT_WITH_RC4_40_SHA + + :Type: :bro:type:`count` + :Default: ``40`` + + +.. bro:id:: SSL::TLS_KRB5_WITH_3DES_EDE_CBC_MD5 + + :Type: :bro:type:`count` + :Default: ``35`` + + +.. bro:id:: SSL::TLS_KRB5_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``31`` + + +.. bro:id:: SSL::TLS_KRB5_WITH_DES_CBC_MD5 + + :Type: :bro:type:`count` + :Default: ``34`` + + +.. bro:id:: SSL::TLS_KRB5_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``30`` + + +.. bro:id:: SSL::TLS_KRB5_WITH_IDEA_CBC_MD5 + + :Type: :bro:type:`count` + :Default: ``37`` + + +.. bro:id:: SSL::TLS_KRB5_WITH_IDEA_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``33`` + + +.. bro:id:: SSL::TLS_KRB5_WITH_RC4_128_MD5 + + :Type: :bro:type:`count` + :Default: ``36`` + + +.. bro:id:: SSL::TLS_KRB5_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``32`` + + +.. bro:id:: SSL::TLS_NULL_WITH_NULL_NULL + + :Type: :bro:type:`count` + :Default: ``0`` + + +.. bro:id:: SSL::TLS_PSK_DHE_WITH_AES_128_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49322`` + + +.. bro:id:: SSL::TLS_PSK_DHE_WITH_AES_256_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49323`` + + +.. bro:id:: SSL::TLS_PSK_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``139`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``140`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``174`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_128_CCM + + :Type: :bro:type:`count` + :Default: ``49316`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_128_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49320`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``168`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``141`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``175`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_256_CCM + + :Type: :bro:type:`count` + :Default: ``49317`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_256_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49321`` + + +.. bro:id:: SSL::TLS_PSK_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``169`` + + +.. bro:id:: SSL::TLS_PSK_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49252`` + + +.. bro:id:: SSL::TLS_PSK_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49258`` + + +.. bro:id:: SSL::TLS_PSK_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49253`` + + +.. bro:id:: SSL::TLS_PSK_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49259`` + + +.. bro:id:: SSL::TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49300`` + + +.. bro:id:: SSL::TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49294`` + + +.. bro:id:: SSL::TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49301`` + + +.. bro:id:: SSL::TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49295`` + + +.. bro:id:: SSL::TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``52395`` + + +.. bro:id:: SSL::TLS_PSK_WITH_NULL_SHA256 + + :Type: :bro:type:`count` + :Default: ``176`` + + +.. bro:id:: SSL::TLS_PSK_WITH_NULL_SHA384 + + :Type: :bro:type:`count` + :Default: ``177`` + + +.. bro:id:: SSL::TLS_PSK_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``138`` + + +.. bro:id:: SSL::TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``98`` + + +.. bro:id:: SSL::TLS_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 + + :Type: :bro:type:`count` + :Default: ``97`` + + +.. bro:id:: SSL::TLS_RSA_EXPORT1024_WITH_RC4_56_MD5 + + :Type: :bro:type:`count` + :Default: ``96`` + + +.. bro:id:: SSL::TLS_RSA_EXPORT1024_WITH_RC4_56_SHA + + :Type: :bro:type:`count` + :Default: ``100`` + + +.. bro:id:: SSL::TLS_RSA_EXPORT_WITH_DES40_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``8`` + + +.. bro:id:: SSL::TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 + + :Type: :bro:type:`count` + :Default: ``6`` + + +.. bro:id:: SSL::TLS_RSA_EXPORT_WITH_RC4_40_MD5 + + :Type: :bro:type:`count` + :Default: ``3`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``147`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``148`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``182`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``172`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``149`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``183`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``173`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49256`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49262`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49257`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49263`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49304`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49298`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49305`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49299`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 + + :Type: :bro:type:`count` + :Default: ``52398`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_NULL_SHA256 + + :Type: :bro:type:`count` + :Default: ``184`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_NULL_SHA384 + + :Type: :bro:type:`count` + :Default: ``185`` + + +.. bro:id:: SSL::TLS_RSA_PSK_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``146`` + + +.. bro:id:: SSL::TLS_RSA_WITH_3DES_EDE_CBC_RMD + + :Type: :bro:type:`count` + :Default: ``124`` + + +.. bro:id:: SSL::TLS_RSA_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``10`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_128_CBC_RMD + + :Type: :bro:type:`count` + :Default: ``125`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``47`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``60`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_128_CCM + + :Type: :bro:type:`count` + :Default: ``49308`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_128_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49312`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``156`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_256_CBC_RMD + + :Type: :bro:type:`count` + :Default: ``126`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``53`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``61`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_256_CCM + + :Type: :bro:type:`count` + :Default: ``49309`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_256_CCM_8 + + :Type: :bro:type:`count` + :Default: ``49313`` + + +.. bro:id:: SSL::TLS_RSA_WITH_AES_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``157`` + + +.. bro:id:: SSL::TLS_RSA_WITH_ARIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``49212`` + + +.. bro:id:: SSL::TLS_RSA_WITH_ARIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49232`` + + +.. bro:id:: SSL::TLS_RSA_WITH_ARIA_256_CBC_SHA384 + + :Type: :bro:type:`count` + :Default: ``49213`` + + +.. bro:id:: SSL::TLS_RSA_WITH_ARIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49233`` + + +.. bro:id:: SSL::TLS_RSA_WITH_CAMELLIA_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``65`` + + +.. bro:id:: SSL::TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``186`` + + +.. bro:id:: SSL::TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 + + :Type: :bro:type:`count` + :Default: ``49274`` + + +.. bro:id:: SSL::TLS_RSA_WITH_CAMELLIA_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``132`` + + +.. bro:id:: SSL::TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 + + :Type: :bro:type:`count` + :Default: ``192`` + + +.. bro:id:: SSL::TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 + + :Type: :bro:type:`count` + :Default: ``49275`` + + +.. bro:id:: SSL::TLS_RSA_WITH_DES_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``9`` + + +.. bro:id:: SSL::TLS_RSA_WITH_IDEA_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``7`` + + +.. bro:id:: SSL::TLS_RSA_WITH_NULL_MD5 + + :Type: :bro:type:`count` + :Default: ``1`` + + +.. bro:id:: SSL::TLS_RSA_WITH_NULL_SHA + + :Type: :bro:type:`count` + :Default: ``2`` + + +.. bro:id:: SSL::TLS_RSA_WITH_NULL_SHA256 + + :Type: :bro:type:`count` + :Default: ``59`` + + +.. bro:id:: SSL::TLS_RSA_WITH_RC4_128_MD5 + + :Type: :bro:type:`count` + :Default: ``4`` + + +.. bro:id:: SSL::TLS_RSA_WITH_RC4_128_SHA + + :Type: :bro:type:`count` + :Default: ``5`` + + +.. bro:id:: SSL::TLS_RSA_WITH_SEED_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``150`` + + +.. bro:id:: SSL::TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49180`` + + +.. bro:id:: SSL::TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49183`` + + +.. bro:id:: SSL::TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49186`` + + +.. bro:id:: SSL::TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49179`` + + +.. bro:id:: SSL::TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49182`` + + +.. bro:id:: SSL::TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49185`` + + +.. bro:id:: SSL::TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49178`` + + +.. bro:id:: SSL::TLS_SRP_SHA_WITH_AES_128_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49181`` + + +.. bro:id:: SSL::TLS_SRP_SHA_WITH_AES_256_CBC_SHA + + :Type: :bro:type:`count` + :Default: ``49184`` + + +.. bro:id:: SSL::TLSv10 + + :Type: :bro:type:`count` + :Default: ``769`` + + +.. bro:id:: SSL::TLSv11 + + :Type: :bro:type:`count` + :Default: ``770`` + + +.. bro:id:: SSL::TLSv12 + + :Type: :bro:type:`count` + :Default: ``771`` + + +.. bro:id:: SSL::TLSv13 + + :Type: :bro:type:`count` + :Default: ``772`` + + +.. bro:id:: SSL::V2_CLIENT_HELLO + + :Type: :bro:type:`count` + :Default: ``301`` + + +.. bro:id:: SSL::V2_CLIENT_MASTER_KEY + + :Type: :bro:type:`count` + :Default: ``302`` + + +.. bro:id:: SSL::V2_ERROR + + :Type: :bro:type:`count` + :Default: ``300`` + + +.. bro:id:: SSL::V2_SERVER_HELLO + + :Type: :bro:type:`count` + :Default: ``304`` + + +.. bro:id:: SSL::alert_descriptions + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [45] = "certificate_expired", + [22] = "record_overflow", + [30] = "decompression_failure", + [44] = "certificate_revoked", + [46] = "certificate_unknown", + [86] = "inappropriate_fallback", + [111] = "certificate_unobtainable", + [114] = "bad_certificate_hash_value", + [113] = "bad_certificate_status_response", + [41] = "no_certificate", + [43] = "unsupported_certificate", + [51] = "decrypt_error", + [80] = "internal_error", + [100] = "no_renegotiation", + [50] = "decode_error", + [70] = "protocol_version", + [120] = "no_application_protocol", + [10] = "unexpected_message", + [60] = "export_restriction", + [110] = "unsupported_extension", + [42] = "bad_certificate", + [0] = "close_notify", + [47] = "illegal_parameter", + [115] = "unknown_psk_identity", + [21] = "decryption_failed", + [49] = "access_denied", + [90] = "user_canceled", + [20] = "bad_record_mac", + [40] = "handshake_failure", + [48] = "unknown_ca", + [71] = "insufficient_security", + [112] = "unrecognized_name" + } + + Mapping between numeric codes and human readable strings for alert + descriptions. + +.. bro:id:: SSL::alert_levels + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "fatal", + [1] = "warning" + } + + Mapping between numeric codes and human readable strings for alert + levels. + +.. bro:id:: SSL::cipher_desc + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [4868] = "TLS_AES_128_CCM_SHA256", + [49296] = "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256", + [52394] = "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", + [181] = "TLS_DHE_PSK_WITH_NULL_SHA384", + [180] = "TLS_DHE_PSK_WITH_NULL_SHA256", + [176] = "TLS_PSK_WITH_NULL_SHA256", + [49240] = "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256", + [49310] = "TLS_DHE_RSA_WITH_AES_128_CCM", + [170] = "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", + [49300] = "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256", + [26] = "TLS_DH_ANON_WITH_DES_CBC_SHA", + [27] = "TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA", + [49239] = "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384", + [124] = "TLS_RSA_WITH_3DES_EDE_CBC_RMD", + [49155] = "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", + [49308] = "TLS_RSA_WITH_AES_128_CCM", + [4869] = "TLS_AES_128_CCM_8_SHA256", + [52398] = "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256", + [148] = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA", + [189] = "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256", + [49192] = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", + [102] = "TLS_DHE_DSS_WITH_RC4_128_SHA", + [166] = "TLS_DH_ANON_WITH_AES_128_GCM_SHA256", + [49261] = "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384", + [69] = "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", + [9] = "TLS_RSA_WITH_DES_CBC_SHA", + [64] = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", + [49182] = "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", + [133] = "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA", + [49293] = "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384", + [65409] = "SSL_RSA_WITH_IDEA_CBC_MD5", + [10] = "TLS_RSA_WITH_3DES_EDE_CBC_SHA", + [1] = "TLS_RSA_WITH_NULL_MD5", + [36] = "TLS_KRB5_WITH_RC4_128_MD5", + [132] = "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", + [49183] = "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", + [98] = "TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA", + [149] = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA", + [23] = "TLS_DH_ANON_EXPORT_WITH_RC4_40_MD5", + [99] = "TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA", + [49185] = "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", + [48] = "TLS_DH_DSS_WITH_AES_128_CBC_SHA", + [327808] = "SSLv20_CK_IDEA_128_CBC_WITH_MD5", + [143] = "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", + [33] = "TLS_KRB5_WITH_IDEA_CBC_SHA", + [49241] = "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384", + [49277] = "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", + [49292] = "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256", + [255] = "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", + [49165] = "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", + [49228] = "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256", + [169] = "TLS_PSK_WITH_AES_256_GCM_SHA384", + [49236] = "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256", + [49279] = "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384", + [49304] = "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256", + [49202] = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", + [49215] = "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384", + [49305] = "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384", + [49178] = "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", + [49179] = "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", + [49253] = "TLS_PSK_WITH_ARIA_256_CBC_SHA384", + [49189] = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", + [68] = "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA", + [49260] = "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256", + [101] = "TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA", + [65505] = "SSL_RSA_FIPS_WITH_DES_CBC_SHA_2", + [49186] = "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", + [49273] = "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384", + [49198] = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", + [49299] = "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384", + [49301] = "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384", + [49163] = "TLS_ECDH_RSA_WITH_NULL_SHA", + [116] = "TLS_DHE_DSS_WITH_AES_256_CBC_RMD", + [49175] = "TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA", + [49325] = "TLS_ECDHE_ECDSA_WITH_AES_256_CCM", + [49211] = "TLS_ECDHE_PSK_WITH_NULL_SHA384", + [134] = "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA", + [49320] = "TLS_PSK_WITH_AES_128_CCM_8", + [49255] = "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384", + [52] = "TLS_DH_ANON_WITH_AES_128_CBC_SHA", + [4] = "TLS_RSA_WITH_RC4_128_MD5", + [17] = "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", + [25] = "TLS_DH_ANON_EXPORT_WITH_DES40_CBC_SHA", + [49158] = "TLS_ECDHE_ECDSA_WITH_NULL_SHA", + [5817] = "TLS_CECPQ1_RSA_WITH_AES_256_GCM_SHA384", + [458944] = "SSLv20_CK_DES_192_EDE3_CBC_WITH_MD5", + [49156] = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", + [41] = "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", + [190] = "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", + [49259] = "TLS_PSK_WITH_ARIA_256_GCM_SHA384", + [65408] = "SSL_RSA_WITH_RC2_CBC_MD5", + [49208] = "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", + [49199] = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + [49212] = "TLS_RSA_WITH_ARIA_128_CBC_SHA256", + [37] = "TLS_KRB5_WITH_IDEA_CBC_MD5", + [5] = "TLS_RSA_WITH_RC4_128_SHA", + [49285] = "TLS_DH_ANON_WITH_CAMELLIA_256_GCM_SHA384", + [103] = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", + [49223] = "TLS_DH_ANON_WITH_ARIA_256_CBC_SHA384", + [185] = "TLS_RSA_PSK_WITH_NULL_SHA384", + [49276] = "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", + [49281] = "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384", + [126] = "TLS_RSA_WITH_AES_256_CBC_RMD", + [49161] = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + [32] = "TLS_KRB5_WITH_RC4_128_SHA", + [29] = "SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA", + [49247] = "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384", + [52392] = "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", + [70] = "TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA", + [65504] = "SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA_2", + [109] = "TLS_DH_ANON_WITH_AES_256_CBC_SHA256", + [130] = "TLS_GOSTR341094_WITH_NULL_GOSTR3411", + [52243] = "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD", + [178] = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", + [49324] = "TLS_ECDHE_ECDSA_WITH_AES_128_CCM", + [22] = "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", + [62] = "TLS_DH_DSS_WITH_AES_128_CBC_SHA256", + [49224] = "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256", + [49200] = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + [179] = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", + [49238] = "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256", + [49286] = "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", + [49159] = "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + [49284] = "TLS_DH_ANON_WITH_CAMELLIA_128_GCM_SHA256", + [49213] = "TLS_RSA_WITH_ARIA_256_CBC_SHA384", + [152] = "TLS_DH_RSA_WITH_SEED_CBC_SHA", + [194] = "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256", + [128] = "TLS_GOSTR341094_WITH_28147_CNT_IMIT", + [49275] = "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384", + [39] = "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA", + [61] = "TLS_RSA_WITH_AES_256_CBC_SHA256", + [38] = "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", + [49243] = "TLS_DH_ANON_WITH_ARIA_256_GCM_SHA384", + [65664] = "SSLv20_CK_RC4_128_WITH_MD5", + [3] = "TLS_RSA_EXPORT_WITH_RC4_40_MD5", + [107] = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", + [49246] = "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256", + [49217] = "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384", + [66] = "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA", + [49257] = "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384", + [49258] = "TLS_PSK_WITH_ARIA_128_GCM_SHA256", + [49154] = "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", + [51] = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", + [49194] = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", + [192] = "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256", + [49171] = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", + [49302] = "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", + [49177] = "TLS_ECDH_ANON_WITH_AES_256_CBC_SHA", + [121] = "TLS_DHE_RSA_WITH_AES_256_CBC_RMD", + [14] = "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", + [49242] = "TLS_DH_ANON_WITH_ARIA_128_GCM_SHA256", + [49168] = "TLS_ECDHE_RSA_WITH_NULL_SHA", + [49153] = "TLS_ECDH_ECDSA_WITH_NULL_SHA", + [138] = "TLS_PSK_WITH_RC4_128_SHA", + [49157] = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", + [49221] = "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384", + [49263] = "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384", + [165] = "TLS_DH_DSS_WITH_AES_256_GCM_SHA384", + [173] = "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384", + [49230] = "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256", + [49314] = "TLS_DHE_RSA_WITH_AES_128_CCM_8", + [172] = "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256", + [53] = "TLS_RSA_WITH_AES_256_CBC_SHA", + [49265] = "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384", + [49282] = "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256", + [52245] = "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD", + [139] = "TLS_PSK_WITH_3DES_EDE_CBC_SHA", + [49216] = "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256", + [140] = "TLS_PSK_WITH_AES_128_CBC_SHA", + [49272] = "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256", + [53250] = "TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384", + [49287] = "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", + [49290] = "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", + [53251] = "TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256", + [67] = "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA", + [49254] = "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256", + [52397] = "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256", + [49226] = "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256", + [49313] = "TLS_RSA_WITH_AES_256_CCM_8", + [34] = "TLS_KRB5_WITH_DES_CBC_MD5", + [154] = "TLS_DHE_RSA_WITH_SEED_CBC_SHA", + [5818] = "TLS_CECPQ1_ECDSA_WITH_AES_256_GCM_SHA384", + [49294] = "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256", + [49315] = "TLS_DHE_RSA_WITH_AES_256_CCM_8", + [129] = "TLS_GOSTR341001_WITH_28147_CNT_IMIT", + [55] = "TLS_DH_RSA_WITH_AES_256_CBC_SHA", + [49214] = "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256", + [49220] = "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256", + [159] = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", + [49166] = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", + [49244] = "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256", + [35] = "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", + [151] = "TLS_DH_DSS_WITH_SEED_CBC_SHA", + [49181] = "TLS_SRP_SHA_WITH_AES_128_CBC_SHA", + [58] = "TLS_DH_ANON_WITH_AES_256_CBC_SHA", + [193] = "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256", + [49291] = "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", + [49309] = "TLS_RSA_WITH_AES_256_CCM", + [191] = "TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA256", + [31] = "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", + [65410] = "SSL_RSA_WITH_DES_CBC_MD5", + [131200] = "SSLv20_CK_RC4_128_EXPORT40_WITH_MD5", + [49266] = "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", + [49323] = "TLS_PSK_DHE_WITH_AES_256_CCM_8", + [168] = "TLS_PSK_WITH_AES_128_GCM_SHA256", + [7] = "TLS_RSA_WITH_IDEA_CBC_SHA", + [13] = "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA", + [150] = "TLS_RSA_WITH_SEED_CBC_SHA", + [50] = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", + [162] = "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", + [49229] = "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384", + [49187] = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + [53249] = "TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256", + [65278] = "SSL_RSA_FIPS_WITH_DES_CBC_SHA", + [2] = "TLS_RSA_WITH_NULL_SHA", + [104] = "TLS_DH_DSS_WITH_AES_256_CBC_SHA256", + [60] = "TLS_RSA_WITH_AES_128_CBC_SHA256", + [49209] = "TLS_ECDHE_PSK_WITH_NULL_SHA", + [49218] = "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256", + [18] = "TLS_DHE_DSS_WITH_DES_CBC_SHA", + [43] = "TLS_KRB5_EXPORT_WITH_RC4_40_MD5", + [52244] = "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256_OLD", + [49191] = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + [49210] = "TLS_ECDHE_PSK_WITH_NULL_SHA256", + [49234] = "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256", + [49] = "TLS_DH_RSA_WITH_AES_128_CBC_SHA", + [49278] = "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256", + [24] = "TLS_DH_ANON_WITH_RC4_128_MD5", + [196] = "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", + [49233] = "TLS_RSA_WITH_ARIA_256_GCM_SHA384", + [49237] = "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384", + [49250] = "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256", + [167] = "TLS_DH_ANON_WITH_AES_256_GCM_SHA384", + [184] = "TLS_RSA_PSK_WITH_NULL_SHA256", + [49303] = "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", + [49195] = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", + [63] = "TLS_DH_RSA_WITH_AES_128_CBC_SHA256", + [108] = "TLS_DH_ANON_WITH_AES_128_CBC_SHA256", + [52395] = "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256", + [4865] = "TLS_AES_128_GCM_SHA256", + [5815] = "TLS_CECPQ1_RSA_WITH_CHACHA20_POLY1305_SHA256", + [12] = "TLS_DH_DSS_WITH_DES_CBC_SHA", + [49169] = "TLS_ECDHE_RSA_WITH_RC4_128_SHA", + [106] = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", + [49184] = "TLS_SRP_SHA_WITH_AES_256_CBC_SHA", + [56] = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", + [49251] = "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384", + [196736] = "SSLv20_CK_RC2_128_CBC_WITH_MD5", + [65] = "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", + [5816] = "TLS_CECPQ1_ECDSA_WITH_CHACHA20_POLY1305_SHA256", + [49207] = "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", + [195] = "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256", + [141] = "TLS_PSK_WITH_AES_256_CBC_SHA", + [49317] = "TLS_PSK_WITH_AES_256_CCM", + [53252] = "TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256", + [96] = "TLS_RSA_EXPORT1024_WITH_RC4_56_MD5", + [49271] = "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384", + [171] = "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", + [49245] = "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384", + [49256] = "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256", + [49262] = "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256", + [49316] = "TLS_PSK_WITH_AES_128_CCM", + [174] = "TLS_PSK_WITH_AES_128_CBC_SHA256", + [49270] = "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", + [136] = "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", + [65411] = "SSL_RSA_WITH_3DES_EDE_CBC_MD5", + [49201] = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", + [144] = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA", + [163] = "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", + [49298] = "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256", + [49311] = "TLS_DHE_RSA_WITH_AES_256_CCM", + [42] = "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5", + [49225] = "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384", + [120] = "TLS_DHE_RSA_WITH_AES_128_CBC_RMD", + [262272] = "SSLv20_CK_RC2_128_CBC_EXPORT40_WITH_MD5", + [100] = "TLS_RSA_EXPORT1024_WITH_RC4_56_SHA", + [15] = "TLS_DH_RSA_WITH_DES_CBC_SHA", + [49188] = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", + [187] = "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256", + [49206] = "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", + [135] = "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA", + [21] = "TLS_DHE_RSA_WITH_DES_CBC_SHA", + [16] = "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA", + [49264] = "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256", + [49321] = "TLS_PSK_WITH_AES_256_CCM_8", + [52393] = "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", + [49204] = "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", + [49167] = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", + [49231] = "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384", + [49295] = "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384", + [11] = "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", + [54] = "TLS_DH_DSS_WITH_AES_256_CBC_SHA", + [47] = "TLS_RSA_WITH_AES_128_CBC_SHA", + [49248] = "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256", + [49269] = "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", + [49297] = "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384", + [49174] = "TLS_ECDH_ANON_WITH_RC4_128_SHA", + [155] = "TLS_DH_ANON_WITH_SEED_CBC_SHA", + [49190] = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", + [49274] = "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256", + [49160] = "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", + [142] = "TLS_DHE_PSK_WITH_RC4_128_SHA", + [137] = "TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA", + [49227] = "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384", + [49196] = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", + [49172] = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", + [59] = "TLS_RSA_WITH_NULL_SHA256", + [49235] = "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384", + [6] = "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5", + [175] = "TLS_PSK_WITH_AES_256_CBC_SHA384", + [49252] = "TLS_PSK_WITH_ARIA_128_CBC_SHA256", + [65279] = "SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", + [4867] = "TLS_CHACHA20_POLY1305_SHA256", + [49180] = "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", + [158] = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", + [115] = "TLS_DHE_DSS_WITH_AES_128_CBC_RMD", + [114] = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD", + [49322] = "TLS_PSK_DHE_WITH_AES_128_CCM_8", + [8] = "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA", + [182] = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256", + [57] = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", + [49280] = "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256", + [49326] = "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8", + [49193] = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", + [147] = "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA", + [40] = "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", + [183] = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384", + [160] = "TLS_DH_RSA_WITH_AES_128_GCM_SHA256", + [157] = "TLS_RSA_WITH_AES_256_GCM_SHA384", + [49267] = "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", + [30] = "TLS_KRB5_WITH_DES_CBC_SHA", + [49176] = "TLS_ECDH_ANON_WITH_AES_128_CBC_SHA", + [119] = "TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD", + [145] = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA", + [49205] = "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", + [52396] = "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256", + [188] = "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256", + [28] = "SSL_FORTEZZA_KEA_WITH_NULL_SHA", + [49173] = "TLS_ECDH_ANON_WITH_NULL_SHA", + [0] = "TLS_NULL_WITH_NULL_NULL", + [49306] = "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", + [164] = "TLS_DH_DSS_WITH_AES_128_GCM_SHA256", + [49203] = "TLS_ECDHE_PSK_WITH_RC4_128_SHA", + [49283] = "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384", + [393280] = "SSLv20_CK_DES_64_CBC_WITH_MD5", + [161] = "TLS_DH_RSA_WITH_AES_256_GCM_SHA384", + [186] = "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256", + [49289] = "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", + [131] = "TLS_GOSTR341001_WITH_NULL_GOSTR3411", + [49162] = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", + [49312] = "TLS_RSA_WITH_AES_128_CCM_8", + [49197] = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", + [20] = "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", + [177] = "TLS_PSK_WITH_NULL_SHA384", + [49164] = "TLS_ECDH_RSA_WITH_RC4_128_SHA", + [49319] = "TLS_DHE_PSK_WITH_AES_256_CCM", + [105] = "TLS_DH_RSA_WITH_AES_256_CBC_SHA256", + [153] = "TLS_DHE_DSS_WITH_SEED_CBC_SHA", + [49318] = "TLS_DHE_PSK_WITH_AES_128_CCM", + [49170] = "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", + [146] = "TLS_RSA_PSK_WITH_RC4_128_SHA", + [49249] = "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384", + [125] = "TLS_RSA_WITH_AES_128_CBC_RMD", + [49307] = "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", + [49327] = "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8", + [49219] = "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384", + [49222] = "TLS_DH_ANON_WITH_ARIA_128_CBC_SHA256", + [19] = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", + [49232] = "TLS_RSA_WITH_ARIA_128_GCM_SHA256", + [22016] = "TLS_FALLBACK_SCSV", + [49268] = "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", + [97] = "TLS_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5", + [197] = "TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA256", + [156] = "TLS_RSA_WITH_AES_128_GCM_SHA256", + [4866] = "TLS_AES_256_GCM_SHA384", + [49288] = "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256" + } + + This is a table of all known cipher specs. It can be used for + detecting unknown ciphers and for converting the cipher spec + constants into a human readable format. + +.. bro:id:: SSL::ec_curves + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "sect163r1", + [9] = "sect283k1", + [17] = "secp160r2", + [27] = "brainpoolP384r1", + [6] = "sect233k1", + [11] = "sect409k1", + [14] = "sect571r1", + [258] = "ffdhe4096", + [4] = "sect193r1", + [22] = "secp256k1", + [24] = "secp384r1", + [30] = "x448", + [256] = "ffdhe2048", + [1] = "sect163k1", + [8] = "sect239k1", + [7] = "sect233r1", + [15] = "secp160k1", + [257] = "ffdhe3072", + [23] = "secp256r1", + [29] = "x25519", + [5] = "sect193r2", + [25] = "secp521r1", + [19] = "secp192r1", + [28] = "brainpoolP512r1", + [260] = "ffdhe8192", + [10] = "sect283r1", + [259] = "ffdhe6144", + [65281] = "arbitrary_explicit_prime_curves", + [3] = "sect163r2", + [12] = "sect409r1", + [13] = "sect571k1", + [18] = "secp192k1", + [21] = "secp224r1", + [16] = "secp160r1", + [20] = "secp224k1", + [26] = "brainpoolP256r1", + [65282] = "arbitrary_explicit_char2_curves" + } + + Mapping between numeric codes and human readable string for SSL/TLS elliptic curves. + +.. bro:id:: SSL::ec_point_formats + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "ansiX962_compressed_char2", + [1] = "ansiX962_compressed_prime", + [0] = "uncompressed" + } + + Mapping between numeric codes and human readable string for SSL/TLS EC point formats. + +.. bro:id:: SSL::extensions + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "client_certificate_url", + [9] = "cert_type", + [17] = "status_request_v2", + [13172] = "next_protocol_negotiation", + [6] = "user_mapping", + [11] = "ec_point_formats", + [14] = "use_srtp", + [45] = "psk_key_exchange_modes", + [30032] = "channel_id_new", + [4] = "truncated_hmac", + [22] = "encrypt_then_mac", + [24] = "token_binding", + [44] = "cookie", + [46] = "TicketEarlyDataInfo", + [1] = "max_fragment_length", + [8] = "server_authz", + [35655] = "padding", + [7] = "client_authz", + [15] = "heartbeat", + [23] = "extended_master_secret", + [41] = "pre_shared_key", + [43] = "supported_versions", + [5] = "status_request", + [25] = "cached_info", + [13175] = "origin_bound_certificates", + [19] = "client_certificate_type", + [10] = "supported_groups", + [35] = "SessionTicket TLS", + [42] = "early_data", + [65281] = "renegotiation_info", + [0] = "server_name", + [47] = "certificate_authorities", + [13180] = "encrypted_client_certificates", + [3] = "trusted_ca_keys", + [12] = "srp", + [13] = "signature_algorithms", + [18] = "signed_certificate_timestamp", + [21] = "padding", + [30031] = "channel_id", + [16] = "application_layer_protocol_negotiation", + [20] = "server_certificate_type", + [40] = "key_share", + [48] = "oid_filters" + } + + Mapping between numeric codes and human readable strings for SSL/TLS + extensions. + +.. bro:id:: SSL::hash_algorithms + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "sha1", + [6] = "sha512", + [4] = "sha256", + [1] = "md5", + [5] = "sha384", + [0] = "none", + [3] = "sha224" + } + + Mapping between numeric codes and human readable strings for hash + algorithms. + +.. bro:id:: SSL::signature_algorithms + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "dsa", + [1] = "rsa", + [0] = "anonymous", + [3] = "ecdsa" + } + + Mapping between numeric codes and human readable strings for signature + algorithms. + +.. bro:id:: SSL::version_strings + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "SSLv2", + [65279] = "DTLSv10", + [770] = "TLSv11", + [769] = "TLSv10", + [772] = "TLSv13", + [65277] = "DTLSv12", + [771] = "TLSv12", + [768] = "SSLv3" + } + + Mapping between the constants and string values for SSL/TLS versions. + + diff --git a/doc/scripts/base/protocols/ssl/ct-list.bro.rst b/doc/scripts/base/protocols/ssl/ct-list.bro.rst new file mode 100644 index 0000000000..6d9c784040 --- /dev/null +++ b/doc/scripts/base/protocols/ssl/ct-list.bro.rst @@ -0,0 +1,22 @@ +:tocdepth: 3 + +base/protocols/ssl/ct-list.bro +============================== +.. bro:namespace:: SSL + + +:Namespace: SSL +:Imports: :doc:`base/protocols/ssl ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================================ = +:bro:id:`SSL::ct_logs`: :bro:type:`table` :bro:attr:`&redef` +============================================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/ssl/files.bro.rst b/doc/scripts/base/protocols/ssl/files.bro.rst new file mode 100644 index 0000000000..f78a115983 --- /dev/null +++ b/doc/scripts/base/protocols/ssl/files.bro.rst @@ -0,0 +1,43 @@ +:tocdepth: 3 + +base/protocols/ssl/files.bro +============================ +.. bro:namespace:: SSL + + +:Namespace: SSL +:Imports: :doc:`base/files/x509 `, :doc:`base/frameworks/files `, :doc:`base/protocols/ssl/main.bro `, :doc:`base/utils/conn-ids.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================= = +:bro:type:`SSL::Info`: :bro:type:`record` +========================================= = + +Functions +######### +==================================================== ===================================== +:bro:id:`SSL::describe_file`: :bro:type:`function` Default file describer for SSL. +:bro:id:`SSL::get_file_handle`: :bro:type:`function` Default file handle provider for SSL. +==================================================== ===================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: SSL::describe_file + + :Type: :bro:type:`function` (f: :bro:type:`fa_file`) : :bro:type:`string` + + Default file describer for SSL. + +.. bro:id:: SSL::get_file_handle + + :Type: :bro:type:`function` (c: :bro:type:`connection`, is_orig: :bro:type:`bool`) : :bro:type:`string` + + Default file handle provider for SSL. + + diff --git a/doc/scripts/base/protocols/ssl/index.rst b/doc/scripts/base/protocols/ssl/index.rst new file mode 100644 index 0000000000..0f3f26e61d --- /dev/null +++ b/doc/scripts/base/protocols/ssl/index.rst @@ -0,0 +1,27 @@ +:orphan: + +Package: base/protocols/ssl +=========================== + +Support for Secure Sockets Layer (SSL)/Transport Layer Security(TLS) protocol analysis. + +:doc:`/scripts/base/protocols/ssl/__load__.bro` + + +:doc:`/scripts/base/protocols/ssl/consts.bro` + + +:doc:`/scripts/base/protocols/ssl/main.bro` + + Base SSL analysis script. This script logs information about the SSL/TLS + handshaking and encryption establishment process. + +:doc:`/scripts/base/protocols/ssl/mozilla-ca-list.bro` + + +:doc:`/scripts/base/protocols/ssl/ct-list.bro` + + +:doc:`/scripts/base/protocols/ssl/files.bro` + + diff --git a/doc/scripts/base/protocols/ssl/main.bro.rst b/doc/scripts/base/protocols/ssl/main.bro.rst new file mode 100644 index 0000000000..92795be6ed --- /dev/null +++ b/doc/scripts/base/protocols/ssl/main.bro.rst @@ -0,0 +1,596 @@ +:tocdepth: 3 + +base/protocols/ssl/main.bro +=========================== +.. bro:namespace:: SSL + +Base SSL analysis script. This script logs information about the SSL/TLS +handshaking and encryption establishment process. + +:Namespace: SSL +:Imports: :doc:`base/frameworks/notice/weird.bro `, :doc:`base/protocols/ssl/consts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +==================================================================================== =============================================================== +:bro:id:`SSL::ct_logs`: :bro:type:`table` :bro:attr:`&redef` The Certificate Transparency log bundle. +:bro:id:`SSL::disable_analyzer_after_detection`: :bro:type:`bool` :bro:attr:`&redef` If true, detach the SSL analyzer from the connection to prevent + continuing to process encrypted traffic. +==================================================================================== =============================================================== + +Redefinable Options +################### +=============================================================== =========================== +:bro:id:`SSL::root_certs`: :bro:type:`table` :bro:attr:`&redef` The default root CA bundle. +=============================================================== =========================== + +Types +##### +=========================================== ============================================================ +:bro:type:`SSL::CTInfo`: :bro:type:`record` The record type which contains the field for the Certificate + Transparency log bundle. +:bro:type:`SSL::Info`: :bro:type:`record` The record type which contains the fields of the SSL log. +=========================================== ============================================================ + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`SSL::Info`: :bro:type:`record` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + +Events +###### +========================================= ================================================= +:bro:id:`SSL::log_ssl`: :bro:type:`event` Event that can be handled to access the SSL + record as it is sent on to the logging framework. +========================================= ================================================= + +Hooks +##### +============================================== = +:bro:id:`SSL::ssl_finishing`: :bro:type:`hook` +============================================== = + +Functions +######### +================================================ ==================================================================== +:bro:id:`SSL::delay_log`: :bro:type:`function` Delays an SSL record for a specific token: the record will not be + logged as long as the token exists or until 15 seconds elapses. +:bro:id:`SSL::undelay_log`: :bro:type:`function` Undelays an SSL record for a previously inserted token, allowing the + record to be logged. +================================================ ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SSL::ct_logs + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`SSL::CTInfo` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + ["\x0bv\x0e\x9a\x8b\x9ah/\x88\x98[\x15\xe9GP\x1aVDk\xba\x880x\8B\x99C\x86E\x0c\x00"] = [description="Google 'Solera2019' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04%L\x06\x8au\xd4YSZ\x06"\xb6V_\xebw#$\xc4\xa6\x96$t|v?r\x0f\x90%dKDm\xfb\xc01\x04<\xa3\xb0\xd0\xc9uf\xed5\xfex\x00=\xc0\xbd\x95\xb6\xde\x83\xa6\x83\x04/J\xbf\xaf", maximum_merge_delay=86400, url="ct.googleapis.com/logs/solera2019/"], + ["\xdbv\xfd\xad\xace\xe7\xd0\x95\x08\x88n!Y\xbd\x8b\x905/_\xea\xd3\xe3\xdc^"\xeb5\x0a\xcc{\x98"] = [description="Comodo 'Dodo' CT log", operator="Comodo CA Limited", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04,\xf5\xc21\xf5cCj\x16J\x0a\xde\xc2\xee\x1f!n\x12~\x1d\xe5r\x8ft\x0b\x02\x99\xd3\xadi\xbc\x025y\xf9a\xe9\xcf\x00\x08Ot\xa4\xa34\x9a\xe0C\x1c#~\x8fA\xd5\xee\xc7\x1c\xa3\x82\x8a@\xfa\xaa\xe0", maximum_merge_delay=86400, url="dodo.ct.comodo.com/"], + ["\xac;\x9a\xed\x7f\xa9gGW\x15\x9em}WVr\xf9\xd9\x81\x00\x94\x1e\x9b\xde\xff\xec\xa11;ux-"] = [description="Venafi log", operator="Venafi", key="0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xa2ZH\x1f\x17R\x955\xcb\xa3[:\x1fS\x82v\x94\xa3\xff\x80\xf2\x1c7<\xc0\xb1\xbd\xc1Y\x8b\xab-e\x93\xd7\xf3\xe0\x04\xd5\x9ao\xbf\xd6#v6O#\x99\xcbT(\xad\x8c\x15KeYvAJ\x9c\xa6\xf7\xb3;~\xb1\xa5I\xa4\x17Ql\x80\xdc*\x90PK\x88$\xe9\xa5\x122\x93\x04H\x90\x02\xfa_\x0e0\x87\x8eUv\x05\xee*L\xce\xa3ji\x09n%\xad\x82v\x0f\x84\x92\xfa8\xd6\x86N$\x8f\x9b\xb0r\xcb\x9e\xe2k?\xe1m\xc9%u#\x88\xa1\x18X\x06#3x\xda\x00\xd08\x91g\xd2\xa6}'\x97gZ\xc1\xf3/\x17\xe6\xea\xd2[\xe8\x81\xcd\xfd\x92h\xe7\xf3\x06\xf0\xe9r\x84\xee\x01\xa5\xb1\xd83\xda\xce\x83\xa5\xdb\xc7\xcf\xd6\x16~\x90u\x18\xbf\x16\xdc2;m\x8d\xab\x82\x17\x1f\x89 \x8d\x1d\x9a\xe6M#\x08\xdfxo\xc6\x05\xbf_\xae\x94\x97\xdb_d\xd4\xee\x16\x8b\xa3\x84lq+\xf1\xab\x7f]\x0d2\xee\x04\xe2\x90\xecA\x9f\xfb9\xc1\x02\x03\x01\x00\x01", maximum_merge_delay=86400, url="ctlog.api.venafi.com/"], + [")y\xbe\xf0\x9e99!\xf0Vs\x9fc\xa5w\xe5\xbeW}\x9c`\x0a\xf8\xf9M]&\%]\xc7\x84"] = [description="Google 'Argon2022' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04x\x83\xdc\xe9\xf1\xa6\xb8\x18:\x00\x99/\xff>\xcd\x15\xc9&\x1e\xf7\xff:\xa9\xa3r\x16I\xeb\x09\xb6\xa8\xdd\xb4\xd2G\x91\x0e\x0d\xf9\xd9\xd5\xa9\x8b\xb0\x87\x9d%y\xd4\x1aP`\x08\xf5\x09\x069&\xe4@\xc2\xba\xc3\xc2", maximum_merge_delay=86400, url="ct.googleapis.com/logs/argon2022/"], + ["\xc9\xcf\x89\x0a!\x10\x9cfl\xc1z>\xd0e\xc90\xd0\xe0\x13Z\x9f\xeb\xa8Z\xf1B\x10\xb8\x07$!\xaa"] = [description="GDCA CT log #1", operator="Wang Shengnan", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xad\x0f0\xad\x9ey\xa48\x89&T\x86\xabAr\x90o\xfb\xca\x17\xa6\xac\xee\xc6\x9f}\x02\x05\xecA\xa8\xc7A\x9d2I\xad\xb09\xbd:\x87>|\xeehl`\xd1G*\x93\xae\xe1@\xf4\x0b\xc85<\x1d\x0fe\xd3", maximum_merge_delay=86400, url="ct.gdca.com.cn/"], + ["R\xebK"^\xc8\x96\x97HPg_#\xe4;\xc1\xd0!\xe3!L\xe5.\xcd_\xa8| <\xdf\xca\x03"] = [description="Google 'Solera2018' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x12\xe1j\x9f\x972\xd6p\x02\x01\x19V!H\xde%\xa4C*]&q\xff`\xbcVW\xa4\xf8G\xb3,\xa4\x8b5\xefP\xb1y\x19\x93F~\xe7\x16#%\x1cp\x14_\x99\x82YM:\xd7\xab\x0d&V\xdb;\x84", maximum_merge_delay=86400, url="ct.googleapis.com/logs/solera2018/"], + ["\xa5w\xac\x9c\xeduH\xdd\x8f\x02[g\xa2A\x08\x9d\xf8n\x0fGn\xc2\x03\xc2\xec\xbe\xdb\x18_(&8"] = [description="CNNIC CT log", operator="CNNIC", key="0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xbf\xb5\x08a\x9a)2\x04\xd3%c\xe9\xd8\x85\xe1\x86\xe0\x1f\xd6^\x9a\xf73;\x80\x1b\xe7\xb6>_-\xa1f\xf6\x95J\x84\xa6!Vy\xe8\xf7\x85\xee]\xe3|\x12\xc0\xe0\x89"\x09">\xba\x16\x95\x06\xbd\xa8\xb9\xb1\xa9\xb2z\xd6a.\x87\x11\xb9x@\x89u\xdb\x0c\xdc\x90\xe0\xa4y\xd6\xd5^n\xd1*\xdb4\xf4\x99?e\x89;F\xc2),\x15\x07\x1c\xc9K\x1aT\xf8l\x1e\xaf`'b\x0ae\xd5\x9a\xb9P6\x16nq\xf6\x1f\x01\xf7\x12\xa7\xfc\xbf\xf6!\xa3)\x90\x86-w\xde\xbbL\xd4\xcf\xfd\xd2\xcf\x82,M\xd4\xf2\xc2-\xac\xa9\xbe\xea\xc3\x19%C\xb2\xe5\x9al\x0d\xc5\x1c\xa5\x8b\xf7?0\xaf\xb9\x01\x91\xb7i\x12\x12\xe5\x83a\xfe4\x00\xbe\xf6q\x8a\xc7\xebP\x92\xe8Y\xfe\x15\x91\xeb\x96\x97\xf8#T?-\x8e\x07\xdf\xee\xda\xb3O\xc8<\x9do\xdf<,CW\xa1G\x0c\x91\x04\xf4uM\xda\x89\x81\xa4\x14\x064\xb9\x98\xc3\xda\xf1\xfd\xed36\xd3\x16-5\x02\x03\x01\x00\x01", maximum_merge_delay=86400, url="ctserver.cnnic.cn/"], + ["}>\xf2\xf8\x8f\xff\x88Uh$\xc2\xc0\xca\x9eR\x89y+\xc5\x0ex\x09\x7f.j\x97h\x99~"\xf0\xd7"] = [description="Google 'Xenon2021' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04G\xedL"{\xbcC\x7fA\xc06yF\x9fS\xc1xp\x9by-\xbe\x02s\xa6O\xeb\xed\xd0\xe0\x1aN\xd9i\xc3&\xdeX\xdfr\x82/?Q;\xd9?#\xbf"\xd3\xd5\xbb\xddj\x9c\xa5j6\L~\x96\xe6", maximum_merge_delay=86400, url="ct.googleapis.com/logs/xenon2021/"], + ["\x87u\xbf\xe7Y|\xf8\x8cC\x99_\xbd\xf3n\xffV\x8dGV6\xffJ\xb5`\xc1\xb4\xea\xff^\xa0\x83\x0f"] = [description="DigiCert Log Server 2", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xcc]9/f\xb8L\x7f\xc1.\x03\xa14\xa3\xe8\x8a\x86\x02\xaeJ\x11\xc6\xf7&j7\x9b\xf08\xf8]\x09\x8dc\xe81k\x86f\xcfy\xb3%<\x1e\xdfx\xb4\xa8\xc5i\xfa\xb7\xf0\x82ybC\xf6\xcc\xfe\x81f\x84", maximum_merge_delay=86400, url="ct2.digicert-ct.com/log/"], + ["\x15\x97\x04\x88\xd7\xb9\x97\xa0[\xebRQ*\xde\xe8\xd2\xe8\xb4\xa3\x16Rd\x12\x1a\x9f\xab\xfb\xd5\xf8Z\xd9?"] = [description="Symantec 'Sirius' log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xa3\x02d\x84"\xbb%\xec\x0d\xe3\xbc\xc2\xc9\x89}\xddE\xd0\xee\xe6\x15\x85\x8f\xd9\xe7\x17\x1b\x13\x80\xea\xed\xb2\x857\xadj\xc5\xd8%\x9d\xfa\xf4\xb4\xf3n\x16(%7\xea\xa37d\xb2\xc7\x0b\xfdQ\xe5\xc1\x05\xf4\x0e\xb5", maximum_merge_delay=86400, url="sirius.ws.symantec.com/"], + ["\xfeDa\x08\xb1\xd0\x1a\xb7\x8ab\xcc\xfe\xabj\xb2\xb2\xba\xbf\xf3\xab\xda\xd8\x0aM\x8b0\xdf-\x00\x08\x83\x0c"] = [description="DigiCert Nessie2019 Log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04_\xed'\xb9\xd0\x8a"g{@+^\x96\x13+\x0dm\x0e^x\xb9DMt\xb6(\x82\x95\x97\xac\x9a\xbc\x14\x93h\x87,*\x13\x1cuU\xfb(9\x0f\x89\xff\xaf\x10\x91W$a\x8aC\xe9T3\x8b0\xbcIh", maximum_merge_delay=86400, url="nessie2019.ct.digicert.com/log/"], + ["ta\xb4\xa0\x9c\xfb=A\xd7QYW[.vI\xa4E\xa8\xd2w\x09\xb0\xccVJd\x82\xb7\xebA\xa3"] = [description="Izenpe log", operator="Izenpe", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04'd9\x0c-\xdcP\x18\xf8!\x00\xa2\x0e\xed,\xea>u\xba\x9f\x93d\x09\x00\x11\xc4\x11\x17\xab\\xcf\x0ft\xac\xb5\x97\x90\x93\x00[\xb8\xeb\xf7'=\xd9\xb2\x0a\x81_/\x0du8\x947\x99\x1e\xf6\x07v\xe0\xee\xbe", maximum_merge_delay=86400, url="ct.izenpe.com/"], + ["\xb1\x0c\xd5Y\xa6\xd6xF\x81\x1f}\xf9\xa5\x152s\x9a\xc4\x8dp;\xea\x03#\xda]8u[\xc0\xadN"] = [description="Google 'Xenon2018' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xd6\xcc\x89\xbf\x04\x1d\xae\xfd\x1a\xf1\xd36T\x09\xca\xfd)\x87$\xdc?\xf8\B\xf8)\xdc\x15\xc9\xd71}\xa34\x7fW\xb3\xb49\xe8X\x95\xde\xd6\x86\xe4m\x82\xa2C,\x8b8irn\xf1_;\x91\xdc\x81\xe6j", maximum_merge_delay=86400, url="ct.googleapis.com/logs/xenon2018/"], + ["\x03\x01\x9d\xf3\xfd\x85\xa6\x9a\x8e\xbd\x1f\xac\xc6\xda\x9b\xa7>F\x97t\xfew\xf5y\xfcZ\x08\xb82\x8c\x1dk"] = [description="Venafi Gen2 CT log", operator="Venafi", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x8e''z\xb6U\x09t\xeblK\x94\x84e\xbc\xe4\x15\xf1\xeaZ\xd8|\x0e7\xce\xba?l\x09\xda\xe7)\x96\xd3EPo\xde\x1e\xb4\x1c\xd2\x83\x88\xff)/\xce\xa9\xff\xdf4\xdeu\x0f\xc0\xcc\x18\x0d\x94.\xfc7\x01", maximum_merge_delay=86400, url="ctlog-gen2.api.venafi.com/"], + ["\xdd\xeb\x1d+z\x0dO\xa6 \x8b\x81\xad\x81hp~.\x8e\x9d\x01\xd5\\x88\x8d=\x11\xc4\xcd\xb6\xec\xbe\xcc"] = [description="Symantec log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x96\xea\xac\x1cF\x0c\x1bU\xdc\x0d\xfc\xb5\x94'FWBp:i\x18\xe2\xbf;\xc4\xdb\xab\xa0\xf4\xb6l\xc0S?MB\x103\xf0X\x97\x8fk\xber\xf4*\xec\x1cB\xaa\x03/\x1a~(5v\x99\x08=!\x14\x86", maximum_merge_delay=86400, url="ct.ws.symantec.com/"], + ["\x92J0\xf9\x093o\xf45\xd6\x99:\x10\xacu\xa2\xc6Ar\x8e\x7f\xc2\xd6Y\xaea\x88\xff\xad@\xce\x01"] = [description="GDCA CT log #2", operator="GDCA", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04[J\xc7\x01\xb7tT\xba@\x9cCu\x94?\xac\xef\xb3qV\xb8\xd3\xe2{\xae\xa1\xb1>S\xaa\x973\xa1\x82\xbb_]\x1c\x0b\xfa\x85\x0d\xbc\xf7\xe5\xa0\xe0"\xf0\xa0\x89\xd9\x0a\x7f_&\x94\xd3$\xe3\x99.\xe4\x15\x8d", maximum_merge_delay=86400, url="ctlog.gdca.com.cn/"], + ["D\x94e.\xb0\xee\xce\xaf\xc4@\x07\xd8\xa8\xfe(\xc0\xda\xe6\x82\xbe\xd8\xcb1\xb5?\xd33\x96\xb5\xb6\x81\xa8"] = [description="Cloudflare 'Nimbus2021' Log", operator="Cloudflare", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xc6\x9a'\xee*l\xa9\xe8HyM[\x9a\x9a \xf51h\xe0\xf9<\xfb\xda\x0d\xf0\xe6\x07\x97T6$eW\x9eEE\x9e\xeb\xaf>\x04\xa8\xd8J~\xea\xf2\xdf|\xd2\xdc\x98F\xf1:\xe73\xd3{\x05\x89\xe9\x9a\xb6", maximum_merge_delay=86400, url="ct.cloudflare.com/logs/nimbus2021/"], + [")j\xfa-V\x8b\xca\x0d.\xa8D\x95j\xe9r\x1f\xc3_\xa3U\xec\xda\x99i:\xaf\xd4X\xa7\x1a\xef\xdd"] = [description="Let's Encrypt 'Clicky' log", operator="Let's Encrypt", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x1f\x1a\x15\x83w\x00ub\xb9\x9f\xf6\x06\x05\xed\x95\x89\x83A\x81\x97\xe7\xe0\xd43\xfev\xba;\xc9I\xc2\xcd\xf1\xcf\xfe\x12p\xd7\xbe\xa8"_\xb2\xa4g\x02{q\xae\x1d\xac\xa8\xe9\xd1\x08\xd5\xce\xef3z\xc3_\x00\xdc", maximum_merge_delay=86400, url="clicky.ct.letsencrypt.org/"], + ["\xbb\xd9\xdf\xbc\x1f\x8aq\xb5\x93\x94#\x97\xaa\x92{G8W\x95\x0a\xabR\xe8\x1a\x90\x96d6\x8e\x1e\xd1\x85"] = [description="Google 'Skydiver' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x12l\x86\x0e\xf6\x17\xb1\x12l7%\xd2\xad\x87=\x0e1\xec!\xad\xb1\xcd\xbe\x14G\xb6qV\x85z\x9a\xb7=\x89\x90{\xc62:\xf8\xda\xce\x8b\x01\xfe?\xfcq\x91\x19\x8e\x14n\x89z]\xb4\xab~\xe1N\x1e|\xac", maximum_merge_delay=86400, url="ct.googleapis.com/skydiver/"], + ["U\x81\xd4\xc2\x16\x906\x01J\xea\x0b\x9bW\xd9\xb8\xa5"] = [description="Symantec 'Vega' log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xea\x95\x9e\x02\xff\xee\xf13mK\x87\xbc\xcd\xfd\x19\x17b\xff\x94\xd3\xd0Y\x07?\x02-\x1c\x90\xfe\xc8G0;\xf1\xdd\x0d\xb8\x11\x0c]\x1d\x86\xdd\xab\xd3+Ff\xfbne\xb7;\xfdYh\xac\xdf\xa6\xf8\xce\xd2\x18M", maximum_merge_delay=86400, url="vega.ws.symantec.com/"], + ["oSv\xac1\xf01\x19\xd8\x99\x00\xa4Q\x15\xffw\x15\x1c\x11\xd9\x02\xc1\x00)\x06\x8d\xb2\x08\x9a7\xd9\x13"] = [description="Comodo 'Mammoth' CT log", operator="Comodo CA Limited", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xef\xe4}t.\x15\x15\xb6\xe9\xbb#\x8b\xfb,\xb5\xe1\xc7\x80\x98G\xfb@ih\xfcI\xadaN\x83G<\x1a\xb7\x8d\xdf\xff{0\xb4\xba\xff/\xcb\xa0\x14\xe3\xad\xd5\x85?DY\x8c\x8c`\x8b\xd7\xb8\xb1\xbf\xae\x8cg", maximum_merge_delay=86400, url="mammoth.ct.comodo.com/"], + ["\x89AD\x9cpt.\x06\xb9\xfc\x9c\xe7\xb1\x16\xba\x00$\xaa6\xd5\x9a\xf4O\x02\x04@O\x00\xf7\xea\x85f"] = [description="Izenpe 'Argi' log", operator="Izenpe", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xd7\xc8\x0e#>\x9e\x02<\x9a\xb8\x07J*\x05\xffJK\x88\xd4\x8aM9\xce\xf7\xc5\xf2\xb67\xe9\xa3\xed\xe4\xf5E\x09\x0eg\x14\xfdS$\xd5:\x94\xf2\xea\xb5\x13\xd9\x1d\x8b\\xa7\xc3\xf3k\xd8?-;erX\xd6", maximum_merge_delay=86400, url="ct.izenpe.eus/"], + ["\x1f\xbc6\xe0\x02\xed\xe9\x7f@\x19\x9e\x86\xb3W;\x8aB\x17\xd8\x01\x87tj\xd0\xda\x03\xa0`T\xd2\x0d\xf4"] = [description="Cloudflare 'Nimbus2017' Log", operator="Cloudflare", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xd7\x9c\xa9\x07\x8d"A\xee\x93\xa0RA\xda\xf4\x80\xf0%\xbc\xeb\xfa\xf3<\xd2~\x91\xd8?,\xdaQ\xbd\xc8\xee*r\xe3\xff\x18V\xe4:"\x0f"<\xc6\xd50\xb3\x9bh.\xabV\xc2A_\xd6dW\x14\xb1Z\xaf", maximum_merge_delay=86400, url="ct.cloudflare.com/logs/nimbus2017/"], + ["\xee\xc0\x95\xee\x8drd\x0f\x92\xe3\xc3\xb9\x1b\xc7\x12\xa3ij\x09{Kj\x1a\x148\xe6G\xb2\xcb\xed\xc5\xf9"] = [description="DigiCert Nessie2021 Log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xf6\x8e\xc0\x8b\x0a\xdb\x18\x12\x17\xe8\xb9\xdc\xe3\xb2:9\xf2\xccu\x99\xd1\xcc\xaa\x0f\xe6\xed;\xdapb\xea\xfaH8J(\x92\xd4\xe2\xd6\x03p\x95\x13\xf3\x18-\xb2Hg\xees\K\x0d\xe6\x80\xff\x04\x85\x1a\x0aX\x16", maximum_merge_delay=86400, url="nessie2021.ct.digicert.com/log/"], + ["h\xf6\x98\xf8\x1fd\x82\xbe:\x8c\xee\xb9(\x1dL\xfcqQ]g\x93\xd4D\xd1\x0ag\xac\xbbOO\xfb\xc4"] = [description="Google 'Aviator' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xd7\xf4\xcci\xb2\xe4\x0e\x90\xa3\x8a\xeaZp\x09O\xef\x13b\xd0\x8dI`\xff\x1b@P\x07\x0cmq\x86\xda%I\x8de\xe1\x08\x0dG4k\xbd'\xbc\x96!>4\xf5\x87v1\xb1\x7f\x1d\xc9\x85;\x0d\xf7\x1f?\xe9", maximum_merge_delay=86400, url="ct.googleapis.com/aviator/"], + ["\x9eO\xf7=\xc3\xce"\x0bi!|\x89\x9eF\x80v\xab\xf8\xd7\x866\xd5\xcc\xfc\x85\xa3\x1aub\x8b\xa8\x8b"] = [description="WoSign CT log #1", operator="WoSign", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xd7\xec/+uO7\xbc\xa3C\xba\x8bef<}j\xe5\x0c*\xa6\xc2\xe5&\xfe\x0c}N|\xf0:\xbc\xe2\xd3"\xdc\x01\xd0\x1fnC\x9c\n\x83\xad\x9c\x15\xf6\xc4\x8d`\xb5\x1d\xbb\xa3bi~\xeb\xa7\xaa\x01\x9b", maximum_merge_delay=86400, url="ct.wosign.com/"], + ["\x08A\x14\x98\x00qS,\x16\x19\x04`\xbc\xfcG\xfd\xc2e:\xfa),r\xb3\x7f\xf8c\xae)\xcc\xc9\xf0"] = [description="Google 'Xenon2019' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xfd|\x83\xc2\xac\xd7/\xd8\xb6\x198\xccbJ\x9a\x13(\x91/@\xf2\xf6\xc1\xea\xfc\x14\xdelWl\x85\xbb\xc2iu\xc4\x87\xa9\xa3P\xad\x18\xcb\xe0,\x0d\xc282\x9c\xc5\xd6^\xcau\xe7v0>s\x8b\x8d\xb4\x80", maximum_merge_delay=86400, url="ct.googleapis.com/logs/xenon2019/"], + ["q~\xa7B\x09u\xbe\x84\xa2r5S\xf1w|&\xddQ\xafN\x10!D\x09M\x90\x19\xb4b\xfbfh"] = [description="GDCA Log 1", operator="GDCA", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xcdQ\xff\xa9\xef\xab\x82\xbf\xcc\xa3\xea0CM\x08\xe9\xa7\xa0\x0d(\xc7\xb6\xd8*@\x19\xa0\xfa\x10]Mu\xcb\x80\x94\xff\xfb\xc2\xddJ\x08\xdfc\xff%8\x1b_\x8a\xf9\xdd'4%L\xd4=-\xed\S\xac\x175", maximum_merge_delay=86400, url="log.gdca.com.cn/"], + [""EE\x07YU$V\x96?\xa1/\xf1\xf7m\x86\xe0#&c\xad\xc0K\x7f]\xc6\x83\n\xe2\x0f\x02"] = [description="DigiCert Yeti2022 Log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x9f\xf8\xd8\x1d\xde\xfb[Q\xb5\xfb]\xf5\xb5\xdef\x11\xb0\x9d_\xfdo\xfc\xa8\x98[\x98O-\xc3\x91:\xfb\xfe\xc4\x0f\x0d\xc3`C\x8c\x1e\xf2\xf9\x11\xb2\xba\xd0\xf6\xbc\xa5\xd2\xb6\x9f\xf9\\x87\xa2}\xfc\xd4}\xd6\x13&", maximum_merge_delay=86400, url="yeti2022.ct.digicert.com/log/"], + ["\xc6R\xa0\xecH\xce\xb3\xfc\xab\x17\x09\x92\xc4:\x87A3\x09\xe8\x00e\xa2bR@\x1b\xa36*\x17\xc5e"] = [description="DigiCert Nessie2020 Log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xe2\x11\xc8\xc8\xc5H\xad\x1fhJ\x18\x1b@\xc6\x04\x93\xc5\x97\xd6Y\xa4|R\x81\xe3\x8f\x06\x9f\xdd\xcan\xc6g\x9f\x09c\x0cv:1\x0a\x84\x9dg\xca\x1a\x03\x0e\xabH!\xdd\x02\xb8\xf1\xceY\x07u\x0aH\x81Y\xe2", maximum_merge_delay=86400, url="nessie2020.ct.digicert.com/log/"], + ["\x07\xb7\\x1b\xe5}h\xff\xf1\xb0\xc6\x1d#\x15\xc7\xba\xe6W|W\x94\xb7j\xee\xbca:\x1ai\xd3\xa2\x1c"] = [description="Google 'Xenon2020' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04eN\xf9V\xa8\xf2\xcd$\xe0\x15\x92\x80\x9dh5A\xe6\x1f\x14R\x11e3\x0a\xee\xad\xe4Yfl\x98xPv\xb0X\x9ctY\xdc\xe08\x91G\x94\xc7BM\xfb\x15\xfeu(-\xd6\xbb\xaaR\x18e\xee3\xaf\x9b", maximum_merge_delay=86400, url="ct.googleapis.com/logs/xenon2020/"], + ["\\xdcC\x92\xfe\xe6\xabED\xb1^\x9a\xd4V\xe6\x107\xfb\xd5\xfaG\xdc\xa1s\x94\xb2^\xe6\xf6\xc7\x0e\xca"] = [description="DigiCert Yeti2021 Log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xe8\x9e\x04m\xcaH\x02]~\x02D\x91\xb1\xb8hc\x9a\x11N=\xd5\xa0W\xda\x7fP\xe5BG\xe2\xed\x16\xde\xfcw#}[k\xc0\xdf#h/\xad@1\xa3\x17\xe7j\xbc\xa8V$\x04:C\xa7\xaf\xea\xafL{", maximum_merge_delay=86400, url="yeti2021.ct.digicert.com/log/"], + ["\xa4\xb9\x09\x90\xb4\x18X\x14\x87\xbb\x13\xa2\xccgp\x0a<5\x98\x04\xf9\x1b\xdf\xb8\xe3w\xcd\x0e\xc8\x0d\xdc\x10"] = [description="Google 'Pilot' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04}\xa8K\x12)\x80\xa3=\xad\xd3Zw\xb8\xcc\xe2\x88\xb3\xa5\xfd\xf1\xd3\x0c\xcd\x18\x0c\xe8AF\xe8\x81\x01\x1b\x15\xe1K\xf1\x1bb\xdd6\x0a\x08\x18\xba\xed\x0b5\x84\xd0\x9e@<-\x9e\x9b\x82e\xbd\x1f\x04\x10AL\xa0", maximum_merge_delay=86400, url="ct.googleapis.com/pilot/"], + ["t~\xda\x831\xad3\x10\x91!\x9c\xce%OBp\xc2\xbf\xfd^B \x08\xc675y\xe6\x10{\xccV"] = [description="Cloudflare 'Nimbus2019' Log", operator="Cloudflare", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x91\x91\xf3\xd6\xfek\xf1\xafK\x99t\x8cz\x06\x19\x02\x0e\x14[\xe5 \xe7\xa1\xad5\xf2S\x0c\xd1Y\xba\xe6\xc4%\x88\x16\x7f\x81\\x0b\x90\xfefF0\xb6\xd5\xd3\x0d*8:F\xa7\x1b\xd6\xf7\x00\x8e,\xc0\x846\xf2", maximum_merge_delay=86400, url="ct.cloudflare.com/logs/nimbus2019/"], + ["\x1f\xc7,\xe5\xa1\xb7\x99\xf4\x00\xc3Y\xbf\xf9l\xa3\x915H\xe8dB a\x09R\xe9\xba\x17t\xf7\xba\xc7"] = [description="Google 'Solera2020' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x88\xa7\xd6\xb6\xea\x16\x08\xf3\x04\xcd"\xb2J3#^\x9a7\xf1c\x9df\xbe\x98\xabE\x98kbP:\xfdnT\xccd\xa8|\xb0\x7f\xd1\xb3\xd6A\x9eD\xba\xbfG=\xedU[\xd7\x82\xa6\xf8\x8d\x0dT\xa8\xa5J\x9f", maximum_merge_delay=86400, url="ct.googleapis.com/logs/solera2020/"], + ["S{i\xa3VC5\xa9\xc0I\x04\xe3\x95\x93\xb2\xc2\x98\xeb\x8dzn\x83\x0265\xc6'$\x8c\xd6\xb4@"] = [description="Nordu 'flimsy' log", operator="NORDUnet", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xe2\xa5\xaa\xe9\xa7\xe1\x05H\xb49\xd7\x16Q\x88r$\xb3WNA\xaaC\xd3\xccK\x99j\xa0($Whuf\xfaM\x8c\x11\xf6\xbb\xc5\x1b\x81\xc3\x90\xc2\xa0\xe8\xeb\xac\xfa\x05d\x09\x1a\x89h\xcd\x96&4q6\x91", maximum_merge_delay=86400, url="flimsy.ct.nordu.net:8080/"], + ["\xa4P\x12i\x05Z\x15T^b\x11\xab7\xbc\x10?b\xaeUv\xa4^K\x17\x14E>\x1b"\x10j%"] = [description="Google 'Argon2018' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xd2\x00U\x05\xad\xd5G\xb4\x19\xbb\xcd\x95\xfb)\xd7X=x$\xcd\xceF\x9d\xfb2\xd4qN`\x02%^Y>\xd7\xd4\x03\xb8mChh~\xe8\xa0e\x0b>nqY\x927\xbe\xa9\xe8\xf1\xa3+\xe4\xd9\x0dUh", maximum_merge_delay=86400, url="ct.googleapis.com/logs/argon2018/"], + ["4\xbbj\xd6\xc3\xdf\x9c\x03\xee\xa8\xa4\x99\xffx\x91Hl\x9d^\\xac\x92\xd0\x1f{\xfd\x1b\xce\x19\xdbH\xef"] = [description="StartCom log", operator="StartCom", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04H\xf3Y\xf3\xf6\x05\x18\xd3\xdb\xb2\xedF~\xcf\xc8\x11\xb5W\xb1\xa8\xd6L\xe6\x9f\xb7J\x1a\x14\x86C\xa9H\xb0\xcbZ?\xe5"] = [description="DigiCert Nessie2018 Log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04V\xaaKke\xbeG=W\x0d\x93\xc1#"\x89;\xe2\x8a\x14\xe6\x19N?L\xa4\x95\xa7e\xe1T\xab79j+\xce\x89a\x15\x86\xcf\x06\xcb`%\x1fx\xabX\xf1c!\x93\xd92\xcd\xc3\xbf\xb3>\xd0\xb6\xcf\xc9", maximum_merge_delay=86400, url="nessie2018.ct.digicert.com/log/"], + ["\xa8\x99\xd8x\x0c\x92\x90\xaa\xf4b\xf3\x18\x80\xcc\xfb\xd5$Q\xe9p\xd0\xfb\xf5\x91\xefu\xb0\xd9\x9bdV\x81"] = [description="Google 'Submariner' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x049\xf8\x9f b\xd4WUh\xa2\xefI-\xf09-\x9a\xdeD\xb4\x940\xe0\x9ez'<\xabp\xf0\xd1\xfaQ\x90c\x16WA\xad\xabm\x1f\x80t0y\x02^-Y\x84\x07$#\xf6\x9f5\xb8\x85\xb8BE\xa4O", maximum_merge_delay=86400, url="ct.googleapis.com/submariner/"], + ["\xa7\xceJNb\x07\xe0\xad\xde\xe5\xfd\xaaK\x1f\x86v\x87g\xb5\xd0\x02\xa5]G1\x0e~g\x0a\x95\xea\xb2"] = [description="Symantec Deneb", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x96\x82\x1e\xa3\xcd:\x80\x84\x1e\x97\xb8\xb7\x07\x19\xaev\x1a\x0e\xf8Uv\x9d\x123N\x91\x88\xe4\xd0HP\\xc1\x9fjr\xd6\x01\xf5\x14\xd6\xd08n\xe12\xbcg\x0d7\xe8\xba"\x10\xd1r\x86y(\x96\xf9\x17\x1e\x98", maximum_merge_delay=86400, url="deneb.ws.symantec.com/"], + ["\xe2iK\xae&\xe8\xe9@\x09\xe8\x86\x1b\xb6;\x83\xd4>\xe7\xfet\x88\xfb\xa4\x8f(\x93\x01\x9d\xdd\xf1\xdb\xfe"] = [description="DigiCert Yeti2019 Log", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x91\x97\x7f\xa3\x0f\x17\xf8T\x95X\x05R\x7f\xccs\x90Z!p\xfaa\xff\x1e\xa9KRG\x87\xb85\xc2p\x99\xe7/\xfc\x1eN\xa3\xcc\x9cl\xea\xdd\xd80\x05\xb3\xd8#\xdd\xe1Y\x02w\x1c\x0a{\x11\xa1p\C\xf4", maximum_merge_delay=86400, url="yeti2019.ct.digicert.com/log/"], + ["2\xdcY\xc2\xd4\xc4\x19h\xd5n\x14\xbca\xac\x8f\x0eE\xdb9\xfa\xf3\xc1U\xaaBR\xf5\x00\x1f\xa0\xc6#"] = [description="SHECA CT log 2", operator="SHECA", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xb1\x8e\x1d\x8a\xaa:\xac\xce\x86\xcbSv\xe8\xa8\x9dY\xbe\x17\x88\x03\x07\xf2'\xe0\x82\xbe\xb1\xfcg;F\xee\xd3\xf1\x8d\xd6w\xe8\xa3\xb4\xdb\x09\\xa0\x09C\xfc_\xd0h4#$\x08\xc2O\xd8\xd2\xb6\x9d\xed\xd5\x8c\xdb", maximum_merge_delay=86400, url="ct.sheca.com/"], + ["\xf6\\x94/\xd1w0"\x14T\x18\x080\x94V\x8e\xe3M\x13\x193\xbf\xdf\x0c/ \x0b\xccN\xf1d\xe3"] = [description="Google 'Argon2021' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04M\xe0fd\xea\xf3d\xaa8\xc5\x89-\xc7\xd8\x08\xd9\xc8Dq\xed\xdc\xc3\xfb[\xaf\x9cd\xa1\x09f\x84\x1d|h\xa7\xec\xc4?\x8c\x9c\x82\xe0\x18\xd9t\x14\xe9\xb4y\x81\xa2\x94Ub\xf3\x9c\x0bD\x83\xa1+\xc9q+", maximum_merge_delay=86400, url="ct.googleapis.com/logs/argon2021/"], + ["F\xa5U\xebu\xfa\x91 0\xb5\xa2\x89i\xf4\xf3}\x11,At\xbe\xfdI\xb8\x85\xab\xf2\xfcp\xfemG"] = [description="Google 'Xenon2022' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xf9d\xbd\x15,@bP\x95\x138<\xc7!\xb0:\xb9\x8f\xa2z\x15\xd7\x89\xd6\x8e1\x13\x00\x87Y\xbc\xbb\xee\x90\xfc\xc8X\x13\x0a\xbf\xabC6T#\xa4\x81\xcd\xadG\x14\xb7X\xa0D\xfaj\xa0\xa0\xd7\xc3c\x1e+", maximum_merge_delay=86400, url="ct.googleapis.com/logs/xenon2022/"], + [")qm,\xe5\xb9\xaa\xbb6\xf7\x84q\x83\xc7]\x9dO7\xb6\x1f\xbfd"] = [description="Cloudflare 'Nimbus2018' Log", operator="Cloudflare", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x02\xc5iZ\xfa\xc7\xdc\xa7\xb4U\x16\x8c\x83\xd6P\xa1\x08\xdb\xe6\x0f\xf1\x87\\xf7\x0c6\xba"\xecX\xe4<\x8f\xb2N\x9b\xae[\xebP\xd5\xd9\xce\x82 \xd07/\x16 '\xdaGz\xc6k\xb89\xb99\\x0f\xe7F", maximum_merge_delay=86400, url="ct.cloudflare.com/logs/nimbus2018/"], + ["\xb2\x1e\x05\xcc\x8b\xa2\xcd\x8a N\x87f\xf9+\xb9\x8a% gk\xda\xfap\xe7\xb2IS-\xef\x8b\x90^"] = [description="Google 'Argon2020' log", operator="Google", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xe9LdX\xfbvcQ2\x18c\xd5\xb2\xbb\xed\xea\xff^;$n/5R\x8b\xb45\x9a\xad\x9c\x15\xa8i \xeaP\x18\xcc", maximum_merge_delay=86400, url="ct.googleapis.com/logs/argon2020/"], + ["\xcfU\xe2\x89#I|4\x0dR\x06\xd0SS\xae\xb2X4\xb5/\x1f\x8d\xc9Rh\x09\xf2\x12\xef\xdd|\xa6"] = [description="SHECA CT log 1", operator="SHECA", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x11\xa9`+\xb4qEf\xe0.\xde\xd5\x87;\xd5\xfe\xf0\x927\xf4h\xc6\x92\xdd?\x1a\xe2\xbc\x0c"\xd6\x99c)n2(\x14\xc0v,\x80\xa8"Q\x91\xd6\xeb\xa6\xd8\xf1\xec\xf0\x07~\xb0\xfcvpvr|\x91\xe9", maximum_merge_delay=86400, url="ctlog.sheca.com/"], + ["\xb0\xb7\x84\xbc\x81\xc0\xdd\xc4uD\xe8\x83\xf0Y\x85\xbb\x90w\xd14\xd8\xab\x88\xb2\xb2\xe53\x98\x0b\x8eP\x8b"] = [description="Up In The Air 'Behind the Sofa' log", operator="Up In The Air Consulting", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04Y9\xb2\xa6\x94\xc62\xb9\xfeci\x1e0;\xa3[\xd5\xb0C\xc9P\x1e\x95\xa5-\xa7LJI\x8e\x8b\x8f\xb7\xf8\xcc\xe2[\x97r\xd5\xea?\xb1!H\xe8Dk\x7f\xea\xef"\xff\xdf\xf4_;mw\x04\xb1\xaf\x90\x8f", maximum_merge_delay=86400, url="ct.filippo.io/behindthesofa/"], + ["c\xd0\x00`&\xdd\xe1\x0b\xb0`\x1fE$F\x96^\xe2\xb6\xea,\xd4\xfb\xc9Z\xc8f\xa5P\xaf\x90u\xb7"] = [description="WoSign log 2", operator="WoSign", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xa5\x8c\xe85.\x8e\xe5ju\xad\K1a)\x9d0W\x8e\x02\x13_\xe9\xca\xbbR\xa8C\x05`\xbf\x0dsWw\xb2\x05\xd8g\xf6\xf03\xc9\xf9D\xde\xb6Ss\xaa\x0cU\xc2\x83\x0aK\xce^\x1a\xc7\x17\x1d\xb3\xcd", maximum_merge_delay=86400, url="ctlog2.wosign.com/"], + ["\x1d\x02K\x8e\xb1I\x8b4M\xfd\x87\xea>\xfc\x09\x96\xf7Po#]\x1dIpa\xa4wV\x19PEo\xcb\x083\x0d\xd5\x19B\x08\x1aHB\x10\xf1h\xc3\xc3A\x13\xcb\x0d\x1e\xdb\x02\xb7$zQ\x96n\xbc\x08\xeai\xafm\xef\x92\x98\x8eU\xf3e\xe5\xe8\x9c\xbe\x1aG`0}z\x80\xadV\x83z\x93\xc3\xae\x93+j(\x8a\xa6_c\x19\x0c\xbe|{!cA8\xb7\xf7\xe8vsk\x85\xcc\xbcr+\xc1R\xd0[]1N\x9d*\xf3M\x9bd\x14\x99&\xc6q\xf8{\xf8D\xd5\xe3# \xf3\x0a\xd7\x8bQ>r\x80\xd2xx5-J\xe7@\x99\x11\x954\xd4/\x7f\xf9_57\x02\x03\x01\x00\x01", maximum_merge_delay=86400, url="www.certificatetransparency.cn/ct/"], + ["V\x14\x06\x9a/\xd7\xc2\xec\xd3\xf5\xe1\xbdD\xb2>\xc7Fv\xb9\xbc\x99\x11\\xc0\xef\x94\x98U\xd6\x89\xd0\xdd"] = [description="DigiCert Log Server", operator="DigiCert", key="0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\x02F\xc5\xbe\x1b\xbb\x82@\x16\xe8\xc1\xd2\xac\x19i\x13Y\xf8\xf8p\x85F@\xb98\xb0#\x82\xa8dL\x7f\xbf\xbb4\x9fJ_(\x8a\xcf\x19\xc4\x00\xf66\x06\x93e\xedL\xf5\xa9!bZ\xd8\x91\xeb8$@\xac\xe8", maximum_merge_delay=86400, url="ct1.digicert-ct.com/log/"] + } + + The Certificate Transparency log bundle. By default, the ct-list.bro + script sets this to the current list of known logs. Entries + are indexed by (binary) log-id. + +.. bro:id:: SSL::disable_analyzer_after_detection + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + If true, detach the SSL analyzer from the connection to prevent + continuing to process encrypted traffic. Helps with performance + (especially with large file transfers). + +Redefinable Options +################### +.. bro:id:: SSL::root_certs + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + ["OU=AC RAIZ FNMT-RCM,O=FNMT-RCM,C=ES"] = "0\x82\x05\x830\x82\x03k\xa0\x03\x02\x01\x02\x02\x0f]\x93\x8d0g6\xc8\x06\x1d\x1a\xc7T\x84i\x070\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000;1\x0b0\x09\x06\x03U\x04\x06\x13\x02ES1\x110\x0f\x06\x03U\x04\x0a\x0c\x08FNMT-RCM1\x190\x17\x06\x03U\x04\x0b\x0c\x10AC RAIZ FNMT-RCM0\x1e\x17\x0d081029155956Z\x17\x0d300101000000Z0;1\x0b0\x09\x06\x03U\x04\x06\x13\x02ES1\x110\x0f\x06\x03U\x04\x0a\x0c\x08FNMT-RCM1\x190\x17\x06\x03U\x04\x0b\x0c\x10AC RAIZ FNMT-RCM0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xbaq\x80zL\x86n\x7f\xc8\x13m\xc0\xc6}\x1c\x00\x97\x8f,\x0c#\xbb\x10\x9a@\xa9\x1a\xb7\x87\x88\xf8\x9bVj\xfb\xe6{\x8e\x8b\x92\x8e\xa7%]Y\x11\xdb6.\xb7Q\x17\x1f\xa9\x08\x1f\x04\x17$X\xaa7J\x18\xdf\xe59\xd4W\xfd\xd7\xc1,\x91\x01\x91\xe2"\xd4\x03\xc0X\xfcwG\xec\x8f>tC\xba\xac4\x8dM8vg\x8e\xb0\xc8o03Xq\\xb4\xf5kn\xd4\x01P\xb8\x13~lJ\xa3I\xd1 \x19\xee\xbc\xc0)\x18e\xa7\xde\xfe\xef\xdd\x0a\x90!\xe7\x1ag\x92B\x10\x98_O0\xbc>\x1cE\xb4\x10\xd7h@\x14\xc0@\xfa\xe7w\x17z\xe6\x0b\x8fe[<\xd9\x9aR\xdb\xb5\xbd\x9eF\xcf=\xeb\x91\x05\x02\xc0\x96\xb2vLM\x10\x96;\x92\xfa\x9c\x7f\x0f\x99\xdf\xbe#5E\x1e\x02\\xfe\xb5\xa8\x9b\x99%\xda^\xf3"\xc39\xf5\xe4*.\xd3\xc6\x1f\xc4l\xaa\xc5\x1cj\x01\x05J/\xd2\xc5\xc1\xa84&]f\xa5\xd2\x02!\xf9\x18\xb7\x06\xf5N\x99o\xa8\xabLQ\xe8\xcfP\x18\xc5w\xc89\x09,I\x922\x99\xa8\xbb\x17\x17y\xb0Z\xc5\xe6\xa3\xc4YeG5\x83^\xa9\xe85\x0b\x99\xbb\xe4\xcd \xc6\x9bJ\x069\xb5h\xfc"\xba\xeeU\x8c+N\xea\xf3\xb1\xe3\xfc\xb6\x99\x9a\xd5B\xfaqM\x08\xcf\x87\x1ejq}\xf9\xd3\xb4\xe9\xa5q\x81{\xc2NG\x96\xa5\xf6v\x85\xa3(\x8f\xe9\x80n\x81S\xa5m_\xb8H\xf9\xc2\xf96\xa6.I\xff\xb8\x96\xc2\x8c\x07\xb3\x9b\x88X\xfc\xeb\x1b\x1c\xde-p\xe2\x97\x920\xa1\x89\xe3\xbcU\xa8'\xd6K\xed\x90\xad\x8b\xfac%Y-\xa85\xdd\xca\x973\xbc\xe5\xcd\xc7\x9d\xd1\xec\xef^\x0eJ\x90\x06&c\xad\xb9\xd95-\x07\xbave,\xacW\x8f}\xf4\x07\x94\xd7\x81\x02\x96]\xa3\x07I\xd5z\xd0W\xf9\x1b\xe7SFu\xaa\xb0yB\xcbhq\x08\xe9`\xbd9i\xce\xf4\xaf\xc3V@\xc7\xadR\xa2\x09\xe4o\x86G\x8a\x1f\xeb(']\x83 \xaf\x04\xc9lV\x9a\x8bF\xf5\x02\x03\x01\x00\x01\xa3\x81\x830\x81\x800\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xf7}\xc5\xfd\xc4\xe8\x9a\x1bwd\xa7\xf5\x1d\xa0\xcc\xbf\x87`\x9am0>\x06\x03U\x1d \x0470503\x06\x04U\x1d \x000+0)\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16\x1dhttp://www.cert.fnmt.es/dpcs/0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00\x07\x90J\xdf\xf3#N\xf0\xc3\x9cQe\x9b\x9c"\xa2\x8a\x0c\x85\xf3s)kM\xfe\x01\xe2\xa9\x0cc\x01\xbf\x04g\xa5\x9d\x98_\xfd\x01\x13\xfa\xec\x9ab\xe9\x86\xfe\xb6b\xd2nL\x94\xfb\xc0uE|e\x0c\xf8\xb27\xcf\xac\x0f\xcf\x8do\xf9\x19\xf7\x8f\xec\x1e\xf2p\x9e\xf0\xca\xb8\xef\xb7\xffv7v[\xf6n\x88\xf3\xafb2"\x93\x0d:j\x8e\x14f\x0c-StWe\x1e\xd5\xb2\xdd#\x81;\xa5f#'g\x09\x8f\xe1w\xaaC\xcdeQ\x08\xedQX\xfe\xe69\xf9\xcbG\x84\xa4\x15\xf1v\xbb\xa4\xee\xa4;\xc4_\xef\xb23\x96\x11\x18\xb7\xc9e\xbe\x18\xe1\xa3\xa4\xdc\xfa\x18\xf9\xd3\xbc\x13\x9b9z4\xba\xd3A\xfb\xfa2\x8a*\xb7+\x86\x0bi\x838\xbe\xcd\x8a.\x0bp\xad\x8d&\x92\xee\x1e\xf5\x01+\x0a\xd9\xd6\x97\x9bn\xe0\xa8\x19\x1c:!\x8b\x0c\x1e@\xad\x03\xe7\xddf~\xf5\xb9 \x0d\x03\xe8\x96\xf9\x82E\xd49\xe0\xa0\x00]\xd7\x98\xe6}\x9egs\xc3\x9a*\xf7\xab\x8b\xa1:\x14\xef4\xbcR\x0e\x89\x98\x9a\x04@\x84\x1d~Ei\x93W\xce\xeb\xce\xf8P|O\x1cn\x04C\x9b\xf9\xd6;#\x18\xe9\xea\x8e\xd1MF\x8d\xf1;\xe4j\xca\xba\xfb#\xb7\x9b\xfa\x99\x01)ZXZ-\xe3\xf9\xd4m\x0e&\xad\xc1n4\xbc2\xf8\x0c\x05\xfae\xa3\xdb;7\x83"\xe9\xd6\xdcr3\xfd]\xf2 \xbdv<#\xda(\xf7\xf9\x1b\xebYd\xd5\xdc_r~ \xfc\xcd\x89\xb5\x90gMbz?N\xad\x1d\xc39\xfez\xf4(\x16\xdfA\xf6H\x80\x05\xd7\x0fQy\xac\x10\xab\xd4\xec\x03f\xe6j\xb0\xba1\x92B@j\xbe:\xd3r\xe1j7U\xbc\xac\x1d\x95\xb7ia\xf2C\x91t\xe6\xa0\xd3\x0a$F\xa1\x08\xaf\xd6\xdaE\x19\x96\xd4S\x1d[\x84y\xf0\xc0\xf7G\xef\x8b\x8f\xc5\x06\xae\x9dLb\x9d\xffF\x04\xf8\xd3\xc9\xb6\x10%@u\xfe\x16\xaa\xc9J`\x86/\xba\xef0w\xe4T\xe2\xb8\x84\x99X\x80\xaa\x13\x8bQ:OH\xf6\x8b\xb6\xb3", + ["CN=Starfield Root Certificate Authority - G2,O=Starfield Technologies, Inc.,L=Scottsdale,ST=Arizona,C=US"] = "0\x82\x03\xdd0\x82\x02\xc5\xa0\x03\x02\x01\x02\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\x8f1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x100\x0e\x06\x03U\x04\x08\x13\x07Arizona1\x130\x11\x06\x03U\x04\x07\x13\x0aScottsdale1%0#\x06\x03U\x04\x0a\x13\x1cStarfield Technologies, Inc.1200\x06\x03U\x04\x03\x13)Starfield Root Certificate Authority - G20\x1e\x17\x0d090901000000Z\x17\x0d371231235959Z0\x81\x8f1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x100\x0e\x06\x03U\x04\x08\x13\x07Arizona1\x130\x11\x06\x03U\x04\x07\x13\x0aScottsdale1%0#\x06\x03U\x04\x0a\x13\x1cStarfield Technologies, Inc.1200\x06\x03U\x04\x03\x13)Starfield Root Certificate Authority - G20\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xbd\xed\xc1\x03\xfc\xf6\x8f\xfc\x02\xb1o[\x9fH\xd9\x9dy\xe2\xa2\xb7\x03aV\x18\xc3G\xb6\xd7\xca=5.\x89C\xf7\xa1i\x9b\xde\x8a\x1a\xfd\x13 \x9c\xb4Iw2)V\xfd\xb9\xec\x8c\xdd"\xfar\xdc'a\x97\xee\xf6Z\x84\xecn\x19\xb9\x89,\xdc\x84[\xd5t\xfbk_\xc5\x89\xa5\x10R\x89FU\xf4\xb8u\x1c\xe6\x7f\xe4T\xaeK\xf8UrW\x02\x19\xf8\x17qY\xeb\x1e(\x07t\xc5\x9dH\xbel\xb4\xf4\xa4\xb0\xf3d7y\x92\xc0\xecF^\x7f\xe1mSLb\xaf\xcd\x1f\x0bc\xbb:\x9d\xfb\xfcy\x00\x98at\xcf&\x82@c\xf3\xb2rj\x19\x0d\x99\xca\xd4\x0eu\xcc7\xfb\x8b\x89\xc1Y\xf1b\x7f_\xb3_e0\xf8\xa7\xb7MvZ\x1ev^4\xc0\xe8\x96V\x99\x8a\xb3\xf0\x7f\xa4\xcd\xbd\xdc21|\x91\xcf\xe0_\x11\xf8k\xaaI\\xd1\x99\x94\xd1\xa2\xe3c[\x09v\xb5Vb\xe1Kt\x1d\x96\xd4&\xd4\x08\x04Y\xd0\x98\x0e\x0e\xe6\xde\xfc\xc3\xec\x1f\x90\xf1\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14|\x0c2\x1f\xa7\xd90\x7f\xc4}h\xa3b\xa8\xa1\xce\xab\x07['0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x11Y\xfa%O\x03o\x94\x99;\x9a\x1f\x82\x859\xd4v\x05\x94^\xe1(\x93mb]\x09\xc2\xa0\xa8\xd4\xb0u8\xf14j\x9d\xe4\x9f\x8a\x86&Q\xe6,\xd1\xc6-n\x95 J\x92\x01\xec\xb8\x8ag{1\xe2g.\x8c\x95\x03&.C\x9dJ1\xf6\x0e\xb5\x0c\xbb\xb7\xe27\x7f"\xba\x00\xa3\x0e{R\xfbk\xbb;\xc4\xd3yQN\xcd\x90\xf4g\x07\x19\xc88\x81u\x96s\xfah\x8f\xb1\xcb\xce\x1f\xc5\xec\xfa\x9c~\xcf~\xb1\xf1\x07-\xb6\xfc\xbf\xca\xa4\xbf\xd0\x97\x05J\xbc\xea\x18(\x02\x90\xbdTx\x09!q\xd3\xd1}\x1d\xd9\x16\xb0\xa9a=\xd0\x0a\x00"\xfc\xc7{\xcb\x09dE\x0b;@\x81\xf7}|2\xf5\x98\xcaX\x8e}*\xee\x90Ysd\xf96t^%\xa1\xf5f\x05.\x7f9\x15\xa9*\xfbP\x8b\x8e\x85i\xf4", + ["CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R2"] = "0\x82\x03\xba0\x82\x02\xa2\xa0\x03\x02\x01\x02\x02\x0b\x04\x00\x00\x00\x00\x01\x0f\x86&\xe6\x0d0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000L1 0\x1e\x06\x03U\x04\x0b\x13\x17GlobalSign Root CA - R21\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0\x1e\x17\x0d061215080000Z\x17\x0d211215080000Z0L1 0\x1e\x06\x03U\x04\x0b\x13\x17GlobalSign Root CA - R21\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xa6\xcf$\x0e\xbe.o(\x99EB\xc4\xab>!T\x9b\x0b\xd3\x7f\x84p\xfa\x12\xb3\xcb\xbf\x87_\xc6\x7f\x86\xd3\xb20\\xd6\xfd\xad\xf1{\xdc\xe5\xf8`\x96\x09\x92\x10\xf5\xd0S\xde\xfb{~s\x88\xacR\x88{J\xa6\xcaI\xa6^\xa8\xa7\x8cZ\x11\xbcz\x82\xeb\xbe\x8c\xe9\xb3\xac\x96%\x07\x97J\x99*\x07/\xb4\x1ew\xbf\x8a\x0f\xb5\x02|\x1b\x96\xb8\xc5\xb9:,\xbc\xd6\x12\xb9\xebY}\xe2\xd0\x06\x86_^Ij\xb59^\x884\xec\xbcx\x0c\x08\x98\x84l\xa8\xcdK\xb4\xa0}\x0cyM\xf0\xb8-\xcb!\xca\xd5l[}\xe1\xa0)\x84\xa1\xf9\xd3\x94I\xcb$b\x91 \xbc\xdd\x0b\xd5\xd9\xcc\xf9\xea'\x0a+s\x91\xc6\x9d\x1b\xac\xc8\xcb\xe8\xe0\xa0\xf4/\x90\x8bM\xfb\xb06\x1b\xf6\x19z\x85\xe0m\xf2a\x13\x88\\x9f\xe0\x93\x0aQ\x97\x8aZ\xce\xaf\xab\xd5\xf7\xaa\x09\xaa`\xbd\xdc\xd9_\xdfr\xa9`\x13^\x00\x01\xc9J\xfa?\xa4\xea\x07\x03!\x02\x8e\x82\xca\x03\xc2\x9b\x8f\x02\x03\x01\x00\x01\xa3\x81\x9c0\x81\x990\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x9b\xe2\x07Wg\x1c\x1e\xc0j\x06\xdeY\xb4\x9a-\xdf\xdc\x19\x86.06\x06\x03U\x1d\x1f\x04/0-0+\xa0)\xa0'\x86%http://crl.globalsign.net/root-r2.crl0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\x9b\xe2\x07Wg\x1c\x1e\xc0j\x06\xdeY\xb4\x9a-\xdf\xdc\x19\x86.0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x99\x81S\x87\x1ch\x97\x86\x91\xec\xe0J\xb8D\x0b\xab\x81\xac'O\xd6\xc1\xb8\x1cCx\xb3\x0c\x9a\xfc\xea,\xa1[A\xf5\xdf\xe5dC-\xe9\xd59\xab\xd2\xa2\xdf\xb7\x8b\xd0\xc0\x80\x19\x1cE\xc0-\x8c\xe8\xf8-\xa4tVI\xc5\x05\xb5O\x15\xdenDx9\x87\xa8~\xbb\xf3y\x18\x91\xbb\xf4o\x9d\xc1\xf0\x8c5\x8c]\x01\xfb\xc3m\xb9\xefDmyF1~\x0a\xfe\xa9\x82\xc1\xff\xef\xabn \xc4P\xc9_\x9dM\x9b\x17\x8c\x0c\xe5\x01\xc9\xa0AjsS\xfa\xa5P\xb4n%\x0f\xfbL\x18\xf4\xfdR\xd9\x8ei\xb1\xe8\x11\x0f\xde\x88\xd8\xfb\x1dI\xf7\xaa\xde\x95\xcf x\xc2`\x12\xdb%@\x8cj\xfc~B8@d\x12\xf7\x9e\x81\xe1\x93.", + ["CN=VeriSign Class 3 Public Primary Certification Authority - G5,OU=(c) 2006 VeriSign, Inc. - For authorized use only,OU=VeriSign Trust Network,O=VeriSign, Inc.,C=US"] = "0\x82\x04\xd30\x82\x03\xbb\xa0\x03\x02\x01\x02\x02\x10\x18\xda\xd1\x9e&}\xe8\xbbJ!X\xcd\xcck;J0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\xca1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x170\x15\x06\x03U\x04\x0a\x13\x0eVeriSign, Inc.1\x1f0\x1d\x06\x03U\x04\x0b\x13\x16VeriSign Trust Network1:08\x06\x03U\x04\x0b\x131(c) 2006 VeriSign, Inc. - For authorized use only1E0C\x06\x03U\x04\x03\x13mn<\x0dn\xd8\xe6\x06\x91@\x18\xb9\xf8\xc1\xed\xdf\xdbA\xaa\xe0\x96 \xc9\xcdd\x158\x81\xc9\x94\xee\xa2\x84)\x0b\x13o\x8e\xdb\x0c\xdd%\x02\xdb\xa4\x8b\x19D\xd2Az\x05iJXO`\xca~\x82j\x0b\x02\xaa%\x179\xb5\xdb\x7f\xe7\x84e*\x95\x8a\xbd\x86\xde^\x81\x16\x83-\x10\xcc\xde\xfd\xa8\x82*m(\x1f\x0d\x0b\xc4\xe5\xe7\x1a&\x19\xe1\xf4\x11o\x10\xb5\x95\xfc\xe7B\x052\xdb\xce\x9dQ^(\xb6\x9e\x85\xd3[\xef\xa5}E@r\x8e\xb7\x0ek\x0e\x06\xfb35Hq\xb8\x9d'\x8b\xc4e_\x0d\x86v\x9cDz\xf6\x95\\xf6]2\x083\xa4T\xb6\x18?h\\xf2BJ\x858T\x83_\xd1\xe8,\xf2\xac\x11\xd6\xa8\xedcj", + ["C=DE,O=Atos,CN=Atos TrustedRoot 2011"] = "0\x82\x03w0\x82\x02_\xa0\x03\x02\x01\x02\x02\x08\3\xcbb,_\xb320\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000<1\x1e0\x1c\x06\x03U\x04\x03\x0c\x15Atos TrustedRoot 20111\x0d0\x0b\x06\x03U\x04\x0a\x0c\x04Atos1\x0b0\x09\x06\x03U\x04\x06\x13\x02DE0\x1e\x17\x0d110707145830Z\x17\x0d301231235959Z0<1\x1e0\x1c\x06\x03U\x04\x03\x0c\x15Atos TrustedRoot 20111\x0d0\x0b\x06\x03U\x04\x0a\x0c\x04Atos1\x0b0\x09\x06\x03U\x04\x06\x13\x02DE0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\x95\x85;\x97o*;.;\xcf\xa6\xf3)5\xbe\xcf\x18\xac>\xaa\xd9\xf8M\xa0>\x1aG\xb9\xbc\x9a\xdf\xf2\xfe\xcc>G\xe8z\x96\xc2$\x8e5\xf4\xa9\x0c\xfc\x82\xfdm\xc1rb'\xbd\xeak\xeb\xe7\x8a\xccT>\x90P\xcf\x80\xd4\x95\xfb\xe8\xb5\x82\xd4\x14\xc5\xb6\xa9U%W\xdb\xb1P\xf6\xb0`dYzi\xcf\x03\xb7o\x0d\xbe\xca>otr\xea\xaa0*sb\xbeI\x91a\xc8\x11\xfe\x0e\x03*\xf7j \xdc\x02\x15\x0d^\x15j\xfc\xe3\x82\xc1\xb5\xc5\x9dd\x09l\xa3Y\x98\x07'\xc7\x1b\x96+atqlC\xf1\xf75\x89\x10\xe0\x9e\xecU\xa17"\xa2\x87\x04\x05,G}\xb4\x1c\xb9b)f(\xca\xb7\xe1\x93\xf5\xa4\x94\x03\x99\xb9p\x85\xb5\xe6H\xea\x8dP\xfc\xd9\xde\xcco\x07\x0e\xdd\x0br\x9d\x800\x16\x07\x95?(\x0e\xfd\xc5uOS\xd6t\x9a\xb4$.\x8e\x02\x91\xcfv\xc5\x9b\x1eUt\x9cx!\xb1\xf0-\xf1\x0b\x9f\xc2\xd5\x96\x18\x1f\xf0T"z\x8c\x07\x02\x03\x01\x00\x01\xa3}0{0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xa7\xa5\x06\xb1,\xa6\x09`\xee\xd1\x97\xe9p\xae\xbc;\x19l\xdb!0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xa7\xa5\x06\xb1,\xa6\x09`\xee\xd1\x97\xe9p\xae\xbc;\x19l\xdb!0\x18\x06\x03U\x1d \x04\x110\x0f0\x0d\x06\x0b+\x06\x01\x04\x01\xb0-\x03\x04\x01\x010\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00&w4\xdb\x94H\x86*A\x9d,>\x06\x90`\xc4\x8c\xac\x0bT\xb8\x1f\xb9{\xd3\x079\xe4\xfa>{\xb2=N\xed\x9f#\xbd\x97\xf3k\\xef\xee\xfd@\xa6\xdf\xa1\x93\xa1\x0a\x86\xac\xef \xd0y\x01\xbdx\xf7\x19\xd8$14\x04\x01\xa6\xba\x15\x9a\xc3'\xdc\xd8O\x0f\xcc\x18c\xff\x99\x0f\x0e\x91ku\x16\xe1!\xfc\xd8&\xc7G\xb7\xa6\xcfXrq~\xba\xe1M\x95G;\xc9\xafm\xa1\xb4\xc1\xec\x89\xf6\xb4\x0f8\xb5\xe2d\xdc%\xcf\xa6\xdb\xeb\x9a\\x99\xa1\xc5\x08\xde\xfd\xe6\xda\xd5\xd6ZE\x0c\xc4\xb7\xc2\xb5\x14\xef\xb4\x11\xff\x0e\x15\xb5\xf5\xf5\xdb\xc6\xbd\xebZ\xa7\xf0V"\xa9\xa7\x19\xd9\x0b}\xb17AB\xb0\xba`\x1d\xf2\xfe\x09\x11\xb0\xf0\x87{\xa7\x9d", + ["CN=EC-ACC,OU=Jerarquia Entitats de Certificacio Catalanes,OU=Vegeu https://www.catcert.net/verarrel (c)03,OU=Serveis Publics de Certificacio,O=Agencia Catalana de Certificacio (NIF Q-0801176-I),C=ES"] = "0\x82\x05V0\x82\x04>\xa0\x03\x02\x01\x02\x02\x10\xee+=\xeb\xd4!\xde\x14\xa8b\xac\x04\xf3\xdd\xc4\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\xf31\x0b0\x09\x06\x03U\x04\x06\x13\x02ES1;09\x06\x03U\x04\x0a\x132Agencia Catalana de Certificacio (NIF Q-0801176-I)1(0&\x06\x03U\x04\x0b\x13\x1fServeis Publics de Certificacio1503\x06\x03U\x04\x0b\x13,Vegeu https://www.catcert.net/verarrel (c)031503\x06\x03U\x04\x0b\x13,Jerarquia Entitats de Certificacio Catalanes1\x0f0\x0d\x06\x03U\x04\x03\x13\x06EC-ACC0\x1e\x17\x0d030107230000Z\x17\x0d310107225959Z0\x81\xf31\x0b0\x09\x06\x03U\x04\x06\x13\x02ES1;09\x06\x03U\x04\x0a\x132Agencia Catalana de Certificacio (NIF Q-0801176-I)1(0&\x06\x03U\x04\x0b\x13\x1fServeis Publics de Certificacio1503\x06\x03U\x04\x0b\x13,Vegeu https://www.catcert.net/verarrel (c)031503\x06\x03U\x04\x0b\x13,Jerarquia Entitats de Certificacio Catalanes1\x0f0\x0d\x06\x03U\x04\x03\x13\x06EC-ACC0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xb3"\xc7O\xe2\x97B\x95\x88G\x83@\xf6\x1d\x17\xf3\x83s$\x1eQ\xf3\x98\x8a\xc3\x92\xb8\xff@\x90\x05p\x87`\xc9\x00\xa9\xb5\x94e\x19"\x15\x17\xc2ClfD\x9a\x0d\x04>9o\xa5Kz\xaac\xb7\x8aD\x9d\xd9c\x91\x84f\xe0(\x0f\xbaB\xe3n\x8e\xf7\x14'\x93i\xee\x91\x0e\xa3_\x0e\xb1\xebf\xa2rO\x12\x13\x86ez>\xdbO\x07\xf4\xa7\x09`\xda:B\x99\xc7\xb2\x7f\xb3\x16\x95\x1c\xc7\xf94\xb5\x94\x85\xd5\x99^\xa0H\xa0~\xe7\x17e\xb8\xa2u\xb8\x1e\xf3\xe5B}\xaf\xed\xf3\x8aHd]\x82\x14\x93\xd8\xc0\xe4\xff\xb3Pr\xf2v\xf6\xb3]BPy\xd0\x94>k\x0c\x00\xbe\xd8k\x0eN*\xec>\xd2\xcc\x82\xa2\x18e3\x13w\x9e\x9a]\x1a\x13\xd8\xc3\xdb=\xc8\x97z\xeep\xed\xa7\xe6|\xdbq\xcf-\x94b\xdfm\xd6\xf58\xbe?\xa5\x85\x0a\x19\xb8\xa8\xd8\x09uBp\xc4\xea\xef\xcb\x0e\xc84\xa8\x12"\x98\x0c\xb8\x13\x94\xb6K\xec\xf0\xd0\x90\xe7'\x02\x03\x01\x00\x01\xa3\x81\xe30\x81\xe00\x1d\x06\x03U\x1d\x11\x04\x160\x14\x81\x12ec_acc@catcert.net0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xa0\xc3\x8bD\xaa7\xa5E\xbf\x97\x80Z\xd1\xf1x\xa2\x9b\xe9]\x8d0\x7f\x06\x03U\x1d \x04x0v0t\x06\x0b+\x06\x01\x04\x01\xf5x\x01\x03\x01\x0a0e0,\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16 https://www.catcert.net/verarrel05\x06\x08+\x06\x01\x05\x05\x07\x02\x020)\x1a'Vegeu https://www.catcert.net/verarrel 0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xa0H[\x82\x01\xf6MH\xb89U5\x9c\x80zS\x99\xd5Z\xff\xb1q;\xcc9\x09\x94^\xd6\xda\xef\xbe\x01[]\xd3\x1e\xd8\xfd}O\xcd\xa0A\xe04\x93\xbf\xcb\xe2\x86\x9c7\x92\x90V\x1c\xdc\xeb)\x05\xe5\xc4\x9e\xc75\xdf\x8a\x0c\xcd\xc5!C\xe9\xaa\x88\xe55\xc0\x19BcZ\x02^\xa4H\x18:\x85o\xdc\x9d\xbc?\x9d\x9c\xc1\x87\xb8za\x08\xe9w\x0b\x7fp\xabz\xdd\xd9\x97,d\x1e\x85\xbf\xbct\x96\xa1\xc3z\x12\xec\x0c\x1an\x83\x0c<\xe8rF\x9f\xfbH\xd5^\x97\xe6\xb1\xa1\xf8\xe4\xefF%\x94\x9c\x89\xdbi8\xbe\xec\\x0eV\xc7eQ\xe5P\x88\x88\xbfB\xd5+=\xe5\xf9\xba\x9e.\xb3\xca\xf4s\x92\x02\x0b\xbeLf\xeb \xfe\xb9\xcb\xb5\x99\x7f\xe6\xb6\x13\xfa\xcaKM\xd9\xeeSF\x06;\xc6N\xad\x93Z\x81~l*Kj\x05E\x8c\xf2!\xa41\x90\x87le\x9c\x9d\xa5`\x95:R\x7f\xf5\xd1\xab\x08n\xf3\xee[\xf9\x88=~\xb8on\x03\xe4B", + ["CN=Deutsche Telekom Root CA 2,OU=T-TeleSec Trust Center,O=Deutsche Telekom AG,C=DE"] = "0\x82\x03\x9f0\x82\x02\x87\xa0\x03\x02\x01\x02\x02\x01&0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000q1\x0b0\x09\x06\x03U\x04\x06\x13\x02DE1\x1c0\x1a\x06\x03U\x04\x0a\x13\x13Deutsche Telekom AG1\x1f0\x1d\x06\x03U\x04\x0b\x13\x16T-TeleSec Trust Center1#0!\x06\x03U\x04\x03\x13\x1aDeutsche Telekom Root CA 20\x1e\x17\x0d990709121100Z\x17\x0d190709235900Z0q1\x0b0\x09\x06\x03U\x04\x06\x13\x02DE1\x1c0\x1a\x06\x03U\x04\x0a\x13\x13Deutsche Telekom AG1\x1f0\x1d\x06\x03U\x04\x0b\x13\x16T-TeleSec Trust Center1#0!\x06\x03U\x04\x03\x13\x1aDeutsche Telekom Root CA 20\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xab\x0b\xa35\xe0\x8b)\x14\xb1\x14\x85\xaf<\x10\xe49o5]J\xae\xdd\xeaa\x8d\x95I\xf4od\xa3\x1a`f\xa4\xa9@"\x84\xd9\xd4\xa5\xe5x\x93\x0eh\x01\xad\xb9M\:\xce\xd3\xb8\xa8B@\xdf\xcf\xa3\xba\x82Yj\x92\x1b\xac\x1c\x9a\xda\x08+%'\xf9i#G\xf1\xe0\xeb,z\x9b\xf5\x13\x02\xd0~4|\xc2\x9e<\x00Y\xab\xf5\xda\x0c\xf52<+\xacP\xda\xd6\xc3\xde\x83\x94\xca\xa8\x0c\x992\x0e\x08HV[j\xfb\xda\xe1XX\x01I_rA<\x15\x06\x01\x8e]\xad\xaa\xb8\x93\xb4\xcd\x9e\xeb\xa7\xe8j-R4\xdb:\xef\uQ\xda\xdb\xf31\xf9\xeeq\x982\xc4T\x15D\x0c\xf9\x9bU\xed\xad\xdf\x18\x08\xa0\xa3\x86\x8aI\xeeS\x05\x8f\x19L\xd5\xdeXy\x9b\xd2j\x1cB\xab\xc5\xd5\xa7\xcfh\x0f\x96\xe4\xe1a\x98va\xc8\x91|\xd6>\x00\xe2\x91P\x87\xe1\x9d\x0a\xe6\xad\x97\xd2\x1d\xc6:}\xcb\xbc\xda\x034\xd5\x8e[\x01\xf5j\x07\xb7\x16\xb6nJ\x7f\x02\x03\x01\x00\x01\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x141\xc3y\x1b\xba\xf5S\xd7\x17\xe0\x89z-\x17l\x0a\xb3+\x9d30\x0f\x06\x03U\x1d\x13\x04\x080\x06\x01\x01\xff\x02\x01\x050\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x94dY\xad9d\xe7)\xeb\x13\xfeZ\xc3\x8b\x13W\xc8\x04$\xf0tw\xc0`\xe3g\xfb\xe9\x89\xa6\x83\xbf\x96\x82|n\xd4\xc3=\xef\x9e\x80n\xbb)\xb4\x98z\xb1;T\xeb9\x17G~\x1a\x8e\x0b\xfc\x1f1Y1\x04\xb2\xce\x17\xf3,\xc7b6U\xe2"\xd8\x89U\xb4\x98H\xaad\xfa\xd6\x1c6\xd8DxZZ#:W\x97\xf5z0O\xae\x9fjLK+\x8e\xa0\x03\xe3>\xe0\xa9\xd4\xd2{\xd2\xb3\xa8\xe2r<\xad\x9e\xff\x80Y\xe4\x9bE\xb4\xf6;\xb0\xcd9\x19\x982\xe5\xea!a\x90\xe41!\x8e4\xb1\xf7/5J\x85\x10\xda\xe7\x8a7!\xbeYc\xe0\xf2\x85\x881S\xd4T\x14\x85py\xf4.\x06w'u/\x1f\xb8\x8a\xf9\xfe\xc5\xba\xd86\xe4\x83\xec\xe7e\xb7\xbfcZ\xf3F\xaf\x81\x947\xd4A\x8c\xd6#\xd6\x1e\xcf\xf5h\x1bDc\xa2Z\xba\xa75Y\xa1\xe5p\x05\x9b\x0e#W\x99\x94\x0am\xba9c(\x86\x92\xf3\x18\x84\xd8\xfb\xd1\xcf\x05VdW", + ["CN=QuoVadis Root CA 2 G3,O=QuoVadis Limited,C=BM"] = "0\x82\x05`0\x82\x03H\xa0\x03\x02\x01\x02\x02\x14DW4$[\x81\x89\x9b5\xf2\xce\xb8+;[\xa7&\xf0u(0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000H1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1e0\x1c\x06\x03U\x04\x03\x13\x15QuoVadis Root CA 2 G30\x1e\x17\x0d120112185932Z\x17\x0d420112185932Z0H1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1e0\x1c\x06\x03U\x04\x03\x13\x15QuoVadis Root CA 2 G30\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xa1\xae%\xb2\x01\x18\xdcW\x88?F\xeb\xf9\xaf\xe2\xeb#q\xe2\x9a\xd1af!_\xaa\xaf'Q\xe5n\x1b\x16\xd4-}P\xb0Sw\xbdx:`\xe2d\x02\x9b|\x86\x9b\xd6\x1a\x8e\xad\xff\x1f\x15\x7f\xd5\x95\x1e\x12\xcb\xe6\x14\x84\x04\xc1\xdf6\xb3\x16\x9f\x8a\xe3\xc9\xdb\x984\xce\xd83\x17(F\xfc\xa7\xc9\xf0\xd2\xb4\xd5M\x09rI\xf9\xf2\x87\xe3\xa9\xda}\xa1}k\xb2:%\xa9mRD\xac\xf8\xben\xfb\xdc\xa6s\x91\x90a\xa6\x03\x14 \xf2\xe7\x87\xa3\x88\xad\xad\xa0\x8c\xff\xa6\x0b%R%\xe7\x16\x01\xd5\xcb\xb85\x81\x0c\xa3;\xf0\xe1\xe1\xfcZ]\xce\x80qm\xf8I\xab>;\xba\xb8\xd7\x80\x01\xfb\xa5\xeb[\xb3\xc5^`*1\xa0\xaf7\xe8 :\x9f\xa82,\x0c\xcc\x09\x1d\xd3\x9e\x8e]\xbcL\x98\xee\xc5\x1ah{\xecS\xa6\xe9\x145\xa3\xdf\xcd\x80\x9f\x0cH\xfb\x1c\xf4\xf1\xbfJ\xb8\xfa\xd5\x8cqJ\xc7\x1f\xad\xfeA\x9a\xb3\x83]\xf2\x84V\xef\xa5WC\xce)\xad\x8c\xabU\xbf\xc4\xfb[\x01\xdd#!\xa1X\x00\x8e\xc3\xd0j\x13\xed\x13\xe3\x12+\x80\xdcg\xe6\x95\xb2\xcd\x1e"n*\xf8A\xd4\xf2\xca\x14\x07\x8d\x8aU\x12\xc6i\xf5\xb8\x86h/S^\xb0\xd2\xaa!\xc1\x98\xe60\xe3gU\xc7\x9bn\xac\x19\xa8U\xa6E\x06\xd0#:\xdb\xebe]*\x11\x11\xf0;O\xcam\xf44\xc4q\xe4\xff\x00Z\xf6\\xae#`\x85s\xf1\xe4\x10\xb1%\xae\xd5\x92\xbb\x13\xc1\x0c\xe09\xda\xb49W\xb5\xab5\xaar!;\x835\xe71\xdfz!n\xb82\x08}\x1d2\x91\x15Jbr\xcf\xe3w\xa1\xbc\xd5\x11\x1bv\x01g\x08\xe0A\x0b\xc3\xeb\x15n\xf8\xa4\x19\xd9\xa2\xab\xaf\xe2'RV+\x02\x8a,\x14$\xf9\xbfB\x02\xbf&\xc8\xc6\x8f\xe0n8}S-\xe5\xed\x98\xb3\x95ch\x7f\xf95\xf4\xdf\x88\xc5`5\x92\xc0|i\x1ca\x95\x16\xd0\xeb\xde\x0b\xaf>\x04\x10EeXP8\xafH\xf2Y\xb6\x16\xf2<\x0d\x90\x02\xc6p.\x01\xad<\x15\xd7\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xed\xe7ovZ\xbf`\xecI[\xc6\xa5w\xbbr\x16q\x9b\xc4=0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00\x91\xdf\x80?C\x09~q\xc2\xf7\xeb\xb3\x88\x8f\xe1Q\xb2\xbc=u\xf9(]\xc8\xbc\x99\x9b{]\xaa\xe5\xca\xe1\x0a\xf7\xe8\xb2\xd3\x9f\xddg1~\xba\x01\xaa\xc7jA;\x90\xd4\x08\\xb2`j\x90\xf0\xc8\xce\x03b\xf9\x8b\xed\xfbn*\xdc\x06M<)\x0f\x89\x16\x8aXLH\x0f\xe8\x84a\xeaa.6\xbb5\x0e'\x96\xfdf4;ars\xf1\x16\G\x06TI\x00zX\x12\xb0\x0a\xef\x85\xfd\xb1\xb83uj\x93\x1c\x12\xe6`^o\x1d\x7f\xc9\x1f#\xcb\x84a\x9f\x1e\x82D\xf9_\xadbU$\x9aR\x98\xedQ\xe7\xa1~\x97:\xe6/\x1f\x11\xdaS\x80,\x85\x9e\xab5\x10\xdb"_j\xc5^\x97S\xf22\x02\x090\xa3X\xf0\x0d\x01\xd5r\xc6\xb1|i{\xc3\xf56E\xccan^L\x94\xc5^\xae\xe8\x0e^\x8b\xbf\xf7\xcd\xe0\xed\xa1\x0e\x1b3\xeeT\x18\xfe\x0f\xbe\xef~\x84kC\xe3p\x98\xdb]u\xb2\x0dY\x07\x85\x15#9\xd6\xf1\xdf\xa9&\x0f\xd6H\xc7\xb3\xa6"\xf537Z\x95G\x9f{\xba\x18\x15o\xff\xd6\x14d\x83I\xd2\x0ag!\xdb\x0f5c`("\xe3\xb1\x95\x83\xcd\x85\xa6\xdd/\x0f\xe7gRn\xbb/\x85|\xf5Js\xe7\xc5>\xc0\xbd!\x12\x05?\xfc\xb7\x03I\x02[\xc8%\xe6\xe2T8\xf5y\x87\x8c\x1dS\xb2N\x85{\x068\xc7,\xf8\xf8\xb0r\x8d%\xe5wR\xf4\x03\x1cH\xa6P_\x88 0n\xf2\x82C\xab=\x97\x84\xe7S\xfb!\xc1O\x0f"\x9a\x86\xb8Y*\xf6G=\x19\x88-\xe8\x85\xe1\x9e\xec\x85\x08j\xb1l4\xc9\x1d\xecH+;x\xedf\xc4\x8eyi\x83\xde\x7f\x8c", + ["CN=NetLock Arany (Class Gold) FC591tanC3BAsC3ADtvC3A1ny,OU=TanC3BAsC3ADtvC3A1nykiadC3B3k (Certification Services),O=NetLock Kft.,L=Budapest,C=HU"] = "0\x82\x04\x150\x82\x02\xfd\xa0\x03\x02\x01\x02\x02\x06IA,\xe4\x00\x100\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\xa71\x0b0\x09\x06\x03U\x04\x06\x13\x02HU1\x110\x0f\x06\x03U\x04\x07\x0c\x08Budapest1\x150\x13\x06\x03U\x04\x0a\x0c\x0cNetLock Kft.1705\x06\x03U\x04\x0b\x0c.Tan\xc3\xbas\xc3\xadtv\xc3\xa1nykiad\xc3\xb3k (Certification Services)1503\x06\x03U\x04\x03\x0c,NetLock Arany (Class Gold) F\xc5\x91tan\xc3\xbas\xc3\xadtv\xc3\xa1ny0\x1e\x17\x0d081211150821Z\x17\x0d281206150821Z0\x81\xa71\x0b0\x09\x06\x03U\x04\x06\x13\x02HU1\x110\x0f\x06\x03U\x04\x07\x0c\x08Budapest1\x150\x13\x06\x03U\x04\x0a\x0c\x0cNetLock Kft.1705\x06\x03U\x04\x0b\x0c.Tan\xc3\xbas\xc3\xadtv\xc3\xa1nykiad\xc3\xb3k (Certification Services)1503\x06\x03U\x04\x03\x0c,NetLock Arany (Class Gold) F\xc5\x91tan\xc3\xbas\xc3\xadtv\xc3\xa1ny0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xc4$^s\xbeKm\x14\xc3\xa1\xf4\xe3\x97\x90n\xd20E\x1e<\xeeg\xd9d\xe0\x1a\x8a\x7f\xca0\xca\x83\xe3 \xc1\xe3\xf4:\xd3\x94_\x1a|[m\xbf0O\x84'\xf6\x9f\x1fI\xbc\xc6\x99\x0a\x90\xf2\x0f\xf5\x7fC\x847cQ\x8bz\xa5p\xfczX\xcd\x8e\x9b\xed\xc3Fl\x84p]\xda\xf3\x01\x90#\xfcN0\xa9~\xe1'c\xe7\xedd<\xa0\xb8\xc93c\xfe\x16\x90\xff\xb0\xb8\xfd\xd7\xa8\xc0\xc0\x94C\x0b\xb6\xd5Y\xa6\x9eV\xd0$\x1fpy\xaf\xdb9T\x0deu\xd9\x15A\x94\x01\xaf^\xec\xf6\x8d\xf1\xff\xadd\xfe \x9a\xd7\\xeb\xfe\xa6\x1f\x08d\xa3\x8bvU\xad\x1e;(`.\x87%\xe8\xaa\xaf\x1f\xc6dF \xb7p\x7f<\xdeH\xdb\x96S\xb79w\xe4\x1a\xe2\xc7\x16\x84v\x97[/\xbb\x19\x15\x85\xf8i\x85\xf5\x99\xa7\xa9\xf24\xa7\xa9\xb6\xa6\x03\xfco\x86=T|v\x04\x9bk\xf9@]\x004\xc7.\x99u\x9d\xe5\x88\x03\xaaM\xf8\x03\xd2Bv\xc0\x1b\x02\x03\x00\xa8\x8b\xa3E0C0\x12\x06\x03U\x1d\x13\x01\x01\xff\x04\x080\x06\x01\x01\xff\x02\x01\x040\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xcc\xfag\x93\xf0\xb6\xb8\xd0\xa5\xc0\x1e\xf3S\xfd\x8cS\xdf\x83\xd7\x960\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\xab\x7f\xee\x1c\x16\xa9\x9c\xc1\x1b\xc3\x8c3\xd9\xd8/\x18\xfe(\x0f\xb3\xa7\x83\xd6\xc3nD\xc0a5\x96\x16\xfeY\x9c\x8bvm\xd7\xf1\xa2K\x0d+\xff\x0br\xda\x9e`\xd0\x8e\x905\xc6xU\x87 \xa1\xcf\xe5m\x0a\xc8I|1\x983l"\xe9\x87\xd02Z\xa2\xba\x13\x82\x11\xed9\x17\x9d\x99:r\xa1\xe6\xfa\xa4\xd9\xd5\x171u\xae\x85}"\xae?\x01F\x86\xf6(y\xc8\xb1\xda\xe4W\x17\xc4~\x1c\x0e\xb0\xb4\x92\xa6V\xb3\xbd\xb2\x97\xed\xaa\xa7\xf0\xb7\xc5\xa8?\x95\x16\xd0\xff\xa1\x96\xeb\x08_\x18wO\x02\x03\x01\x00\x01\xa3c0a0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14E\xeb\xa2\xaf\xf4\x92\xcb\x821-Q\x8b\xa7\xa7!\x9d\xf3m\xc8\x0f0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14E\xeb\xa2\xaf\xf4\x92\xcb\x821-Q\x8b\xa7\xa7!\x9d\xf3m\xc8\x0f0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xa2\x0e\xbc\xdf\xe2\xed\xf0\xe3rszd\x94\xbf\xf7rf\xd82\xe4Bub\xae\x87\xeb\xf2\xd5\xd9\xdeV\xb3\x9f\xcc\xce\x14(\xb9\x0d\x97`\\x12LX\xe4\xd3=\x83IEX\x975i\x1a\xa8G\xeaV\xc6y\xab\x12\xd8g\x81\x84\xdf\x7f\x09<\x94\xe6\xb8&, \xbd=\xb3(\x89\xf7_\xff"\xe2\x97\x84\x1f\xe9e\xef\x87\xe0\xdf\xc1gI\xb3]\xeb\xb2\x09*\xeb&\xedx\xbe}?+\xf3\xb7&5m_\x89\x01\xb6I[\x9f\x01\x05\x9b\xab=%\xc1\xcc\xb6\x7f\xc2\xf1o\x86\xc6\xfadh\xeb\x81-\x94\xebB\xb7\xfa\x8c\x1e\xddb\xf1\xbePg\xb7l\xbd\xf3\xf1\x1fk\x0c6\x07\x16\x7f7|\xa9[mz\xf1\x12F`\x83\xd7'\x04\xbeK\xce\x97\xbe\xc3g*h\x11\xdf\x80\xe7\x0c3f\xbf\x13\x0d\x14n\xf3\x7f\x1fc\x10\x1e\xfa\x8d\x1b%ml\x8f\xa5\xb7a\x01\xb1\xd2\xa3&\xa1\x10q\x9d\xad\xe2\xc3\xf9\xc3\x99Q\xb7+\x07\x08\xce.\xe6P\xb2\xa7\xfa\x0aE/\xa2\xf0\xf2", + ["CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R4"] = "0\x82\x01\xe10\x82\x01\x87\xa0\x03\x02\x01\x02\x02\x11*8\xa4\x1c\x96\x0a\x04\xdeB\xb2(\xa5\x0b\xe84\x98\x020\x0a\x06\x08*\x86H\xce=\x04\x03\x020P1$0"\x06\x03U\x04\x0b\x13\x1bGlobalSign ECC Root CA - R41\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0\x1e\x17\x0d121113000000Z\x17\x0d380119031407Z0P1$0"\x06\x03U\x04\x0b\x13\x1bGlobalSign ECC Root CA - R41\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04\xb8\xc6y\xd3\x8fl%\x0e\x9f.9\x19\x1c\x03\xa4\xae\x9a\xe59\x07\x09\x16\xcac\xb1\xb9\x86\xf8\x8aW\xc1W\xceB\xfas\xa1\xf7eB\xff\x1e\xc1\x00\xb2ns\x0e\xff\xc7!\xe5\x18\xa4\xaa\xd9q?\xa8\xd4\xb9\xce\x8c\x1d\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14T\xb0{\xadE\xb8\xe2@\x7f\xfb\x0an\xfb\xbe3\xc9<\xa3\x84\xd50\x0a\x06\x08*\x86H\xce=\x04\x03\x02\x03H\x000E\x02!\x00\xdc\x92\xa1\xa0\x13\xa6\xcf\x03\xb0\xe6\xc4!\x97\x90\xfa\x14W-\x03\xec\xee<\xd3n\xca\xa8lv\xbc\xa2\xde\xbb\x02 '\xa8\x85'5\x9bV\xc6\xa3\xf2G\xd2\xb7n\x1b\x02\x00\x17\xaag\xa6\x15\x91\xde\xfa\x94\xec{\x0b\xf8\x9f\x84", + ["CN=AffirmTrust Networking,O=AffirmTrust,C=US"] = "0\x82\x03L0\x82\x024\xa0\x03\x02\x01\x02\x02\x08|O\x049\x1c\xd4\x99-0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000D1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x140\x12\x06\x03U\x04\x0a\x0c\x0bAffirmTrust1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16AffirmTrust Networking0\x1e\x17\x0d100129140824Z\x17\x0d301231140824Z0D1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x140\x12\x06\x03U\x04\x0a\x0c\x0bAffirmTrust1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16AffirmTrust Networking0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xb4\x84\xcc3\x17.k\x94lkaR\xa0\xeb\xa3\xcfy\x94L\xe5\x94\x80\x99\xcbUdDe\x8fgd\xe2\x06\xe3\7I\xf6/\x9b\x84\x84\x1e-\xf2`\x9d0N\xcc\x84\x85\xe2,\xcf\x1e\x9e\xfe6\xab3w5D\xd85\x96\x1a=6\xe8z\x0e\xd8\xd5G\xa1ji\x8b\xd9\xfc\xbb:\xaeyZ\xd5\xf4\xd6q\xbb\x9a\x90#k\x9a\xb7\x88t\x87\x0c\x1e_\xb9\x9e-\xfa\xabS+\xdc\xbbv>\x93L\x08\x08\x8c\x1e\xa2#\x1c\xd4j\xad"\xba\x99\x01.me\xcb\xbe$fU$K@D\xb1\x1b\xd7\xe1\xc2\x85\xc0\xde\x10?=\xed\xb8\xfc\xf1\xf1#S\xdc\xbfe\x97o\xd9\xf9@q\x8d}\xbd\x95\xd4\xce\xbe\xa0^'#\xde\xfd\xa6\xd0&\x0e\x00)\xebj\x9d\xed\x0e\xf9t\x98@\xd3?\x03\x80\x06\x82@\xe8\xb1\xe2\xa7Q\xa7\x1d\x83&k\xab\xde\xfa\x17\x91+\xd8\xc6\xac\x1e\xb1\x9e\x19\x01\xd5\x97\xa6\xea\x0d\xb7\xc4U\x1f'|\xd2\x08\xd5v\x1f)\x15\x87@9\xdd8E\x11u\xd0\x9a\xa74\xe0\xbf\xcd\xc8R\x1d\xb9G~\x0d\xb8\xbb\xc6\x0c\xf6sW\x16Z~C\x91\x1fU:\xc6mD\x04\xaa\x9c\xa9\x9c\xa7L\x89\x17\x83\xae\xa3\x04^R\x80\x8b\x1e\x12%\x11\x19\xd7\x0c}}1DA\xea\xdb\xaf\xb0\x1c\xef\x81\xd0,\xc5\x9a!\x9b=\xedB;P&\xf2\xec\xceqa\x06b!TN\x7f\xc1\x9d>\x7f \x8c\x80\xcb*\xd8\x97b\xc8\x833\x91}\xb0\xa2Z\x0fW\xe8;\xcc\xf2%\xb2\xd4|/\xecM\xc6\xa1:\x15z\xe7\xb6]5\xf5\xf6HJ6Ef\xd4\xba\x98X\xc1\x02\x03\x01\x00\x01\xa3c0a0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14D\x9eH\xf5\xccmH\xd4\xa0K\x7f\xfeY$/\x83\x97\x99\x9a\x860\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14D\x9eH\xf5\xccmH\xd4\xa0K\x7f\xfeY$/\x83\x97\x99\x9a\x860\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x05>5\\x15p\x9b\xc9\xc7saor+\xd4\xc2\x8f\xf2C]\x02\xce\xc4\x94\xb9\x94\x11\x83g]\xe2gluv\xbf\xbb\x0c\xaa6\xc6\xadG\x93c\xdc\x1e~\xd6\xde.\xfe\xe9\x1928\x03\x7f\x14\xf6\x00s,Y\xb1!\x06\xe1\xfb\xac\x18\x95\x0c\xa3\xff\x99\x96\xf7+'\x9b\xd5$\xcc\x1d\xdd\xc1:\xe0\x98D\xb0\xc4\xe4>w\xb1s\xa9d,\xf6\x1c\x01|?]E\x85\xc0\x85\xe7%\x8f\x95\xdc\x17\xf3<\x9f\x1an\xb0\xca\xe3\x1d*\xe9Lc\xfa$ab\xd6\xda~\xb6\x1cl\xf5\x02\x1d\xd4*\xddU\x90\xeb*\x11G<.^t\xb2\x82"\xa5}S\x1fE\xec'\x91}\xe7"\x16\xe8\xc0h6\xd8\xc6\xf1O\x80D2\xf9\xe1\xd1\xd1\x1d\xaa\xde\xa8\xab\x9c\x04\xaf\xad \x0ed\x98M\xa5k\xc0HX\x96iM\xdc\x07\x8cQ\x93\xa2\xdf\x9f\x0f=\x8b`\xb4\x82\x8d\xaa\x08NbE\xe0\xf9\x0b\xd2\xe0\xe0<[\xde\q'%\xc2\xe6\x03\x81\x8b\x10S\xe3\xc7U\xa2\xb4\x9f\xd7\xe6", + ["CN=Staat der Nederlanden Root CA - G2,O=Staat der Nederlanden,C=NL"] = "0\x82\x05\xca0\x82\x03\xb2\xa0\x03\x02\x01\x02\x02\x04\x00\x98\x96\x8c0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000Z1\x0b0\x09\x06\x03U\x04\x06\x13\x02NL1\x1e0\x1c\x06\x03U\x04\x0a\x0c\x15Staat der Nederlanden1+0)\x06\x03U\x04\x03\x0c"Staat der Nederlanden Root CA - G20\x1e\x17\x0d080326111817Z\x17\x0d200325110310Z0Z1\x0b0\x09\x06\x03U\x04\x06\x13\x02NL1\x1e0\x1c\x06\x03U\x04\x0a\x0c\x15Staat der Nederlanden1+0)\x06\x03U\x04\x03\x0c"Staat der Nederlanden Root CA - G20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xc5Y\xe7ou\xaa>K\x9c\xb5\xb8\xac\x9e\x0b\xe4\xf9\xd9\xca\xab]\x8f\xb59\x10\x82\xd7\xafQ\xe0;\xe1\x00Hj\xcf\xda\xe1\x06C\x11\x99\xaa\x14%\x12\xad"\xe8\x00mC\xc4\xa9\xb8\xe5\x1f\x89Kg\xbdaH\xef\xfd\xd2\xe0`\x88\xe5\xb9\x18`(\xc3w+\xad\xb07\xaa7\xdedY*FW\xe4K\xb9\xf87|\xd56\xe7\x80\xc1\xb6\xf3\xd4g\x9b\x96\xe8\xce\xd7\xc6\x0aS\xd0kI\x96\xf3\xa3\x0b\x05wH\xf7%\xe5p\xac0\x14 %\xe3\x7fuZ\xe5H\xf8N{\x03\x07\x04\xfa\x82a\x87n\xf0;\xc4\xa4\xc7\xd0\xf5t>\xa5]\x1a\x08\xf2\x9b%\xd2\xf6\xac\x04&>U:b(\xa5{\xb20\xaf\xf87\xc2\xd1\xba\xd68\xfd\xf4\xefI07\x99&!H\x85\x01\xa9\xe5\x16\xe7\xdc\x90U\xdf\x0f\xe88\xcd\x997!O]\xf5"oj\xc5\x12\x16`\x17U\xf2ef\xa6\xa70\x918\xc18\x1d\x86\x04\x84\xba\x1a%x^\x9d\xaf\xccP`\xd6\x13\x87R\xedc\x1fme}\xc2\x15\x18t\xca\xe1~d)\x8cr\xd8\x16\x13}\x0bIJ\xf1(\x1b tk\xc5=\xdd\xb0\xaaH\x09=.\x82\x94\xcd\x1ae\xd9+\x88\x9a\x99\xbc\x18~\x9f\xee}f|>\xbd\x94\xb8\x81\xce\xcd\x980x\xc1og\xd0\xbe_\xe0h\xed\xde\xe2\xb1\xc9,Yx\x92\xaa\xdf+`c\xf2\xe5^\xb9\xe3\xca\xfa\x7fP\x86>\xa24\x18\x0c\x09h(\x11\x1c\xe4\xe1\xb9\>G\xba2?\x18\xcc[\x84\xf5\xf3kt\xc4rt\xe1\xe3\x8b\xa0J\xbd\x8df/\xea\xad5\xda \xd3\x88\x82a\xf0\x12"\xb6\xbc\xd0\xd5\xa4\xec\xafT\x88%$<\xa7m\xb1r)?>W\xa6\x7fU\xafn&\xc6\xfe\xe7\xcc@\QD\x81\x0ax\xdeJ\xceU\xbf\x1d\xd5\xd9\xb7V\xef\xf0v\xff\x0by\xb5\xaf\xbd\xfb\xa9i\x91F\x97h\x80\x146\x1d\xb3\x7f\xbb)\x986\xa5 \xfa\x82`b3\xa4\xec\xd6\xba\x07\xa7n\xc5\xcf\x14\xa6\xe7\xd6\x924\xd8\x81\xf5\xfc\x1d]\xaa\\x1e\xf6\xa3M;\xb8\xf79\x02\x03\x01\x00\x01\xa3\x81\x970\x81\x940\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0R\x06\x03U\x1d \x04K0I0G\x06\x04U\x1d \x000?0=\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x161http://www.pkioverheid.nl/policies/root-policy-G20\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x91h2\x87\x15\x1d\x89\xe2\xb5\xf1\xac6(4\x8d\x0b|b\x88\xeb0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00\xa8AJg*\x92\x81\x82Pn\xe1\xd7\xd8\xb39;\xf3\x02\x15\x09PQ\xef-\xbd${\x88\x86;\xf9\xb4\xbc\x92\x09\x96\xb9\xf6\xc0\xab#`\x06y\x8c\x11NQ\xd2y\x803\xfb\x9dH\xbe\xecAC\x81\x1f~G@\x1c\xe5z\x08\xca\xaa\x8bu\xad\x14\xc4\xc2\xe8f<\x82\x07\xa7\xe6'\x82[\x18\xe6\x0fn\xd9P>\x8aB\x18)\xc6\xb4V\xfcV\x10\xa0\x05\x17\xbd\x0c#\x7f\xf4\x93\xed\x9c\x1aQ\xbe\xddEA\xbf\x91$\xb4\x1f\x8c\xe9_\xcf{!\x99\x9f\x95\x9f9:F\x1cl\xf9\xcd{\x9c\x90\xcd(\xa9\xc7\xa9U\xbb\xacb4b5\x13K\x14:U\x83\xb9\x86\x8d\x92\xa6\xc6\xf4\x07%T\xcc\x16W\x12J\x82x\xc8\x14\xd9\x17\x82&-] \x1fy\xae\xfe\xd4p\x16\x16\x95\x83\xd859\xffR]u\x1c\x16\xc5\x13U\xcfG\xccueRJ\xde\xf0\xb0\xa7\xe4\x0a\x96\x0b\xfb\xad\xc2\xe2%\x84\xb2\xdd\xe4\xbd~Yl\x9b\xf0\xf0\xd8\xe7\xca\xf2\xe9\x978~\x89\xbe\xcc\xfb9\x17a?r\xdb:\x91\xd8e\x01\x19\x1d\xadP\xa4W\x0a|K\xbc\x9cqs*EQ\x19\x85\xcc\x8e\xfdG\xa7t\x95\x1d\xa8\xd1\xafN\x17\xb1i&\xc2\xaaxW[\xc5M\xa7\xe5\x9e\x05\x17\x94\xca\xb2_\xa0I\x18\x8d4\xe9&lH\x1e\xaah\x92\x05\xe1\x82sZ\x9b\xdc\x07[\x08m}\x9d\xd7\x8d!\xd9\xfc\x14 \xaa\xc2E\xdf?\xe7\x00\xb2Q\xe4\xc2\xf8\x05\xb9y\x1a\x8c4\xf3\x9e[\xe47[kJ\xdf,W\x8a@Z6\xba\xdduD\x087Bp\x0c\xfe\xdc^!\xa0\xa3\x8a\xc0\x90\x9ch\xdaP\xe6E\x10Gx\xb6N\xd2e\xc9\xc37\xdf\xe1Bc\xb0W7E-{\x8a\x9c\xbf\x05\xeaeU3\xf79\x10\xc5(*!z\x1b\x8a\xc4$\xf9?\x15\xc8\x9a\x15 \xf5Ub\x96\xedm\x93P\xbc\xe4\xaax\xad\xd9\xcb\x0ae\x87\xa6f\xc1\xc4\x81\xa3w:X\x1e\x0b\xee\x83\x8b\x9d\x1e\xd2R\xa4\xcc\x1do\xb0\x98m\x941\xb5\xf8q\x0a\xdc\xb9\xfc}2`\xe6\xeb\xaf\x8a\x01", + ["CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies, Inc.,L=Scottsdale,ST=Arizona,C=US"] = "0\x82\x03\xef0\x82\x02\xd7\xa0\x03\x02\x01\x02\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\x981\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x100\x0e\x06\x03U\x04\x08\x13\x07Arizona1\x130\x11\x06\x03U\x04\x07\x13\x0aScottsdale1%0#\x06\x03U\x04\x0a\x13\x1cStarfield Technologies, Inc.1;09\x06\x03U\x04\x03\x132Starfield Services Root Certificate Authority - G20\x1e\x17\x0d090901000000Z\x17\x0d371231235959Z0\x81\x981\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x100\x0e\x06\x03U\x04\x08\x13\x07Arizona1\x130\x11\x06\x03U\x04\x07\x13\x0aScottsdale1%0#\x06\x03U\x04\x0a\x13\x1cStarfield Technologies, Inc.1;09\x06\x03U\x04\x03\x132Starfield Services Root Certificate Authority - G20\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xd5\x0c:\xc4*\xf9N\xe2\xf5\xbe\x19\x97_\x8e\x88S\xb1\x1f?\xcb\xcf\x9f \x13m):\xc8\x0f}<\xf7kv8c\xd96`\xa8\x9b^\\x00\x80\xb2/Y\x7f\xf6\x87\xf9%C\x86\xe7i\x1bR\x9a\x90\xe1q\xe3\xd8-\x0dNo\xf6\xc8I\xd9\xb6\xf3\x1aV\xae+\xb6t\x14\xeb\xcf\xfb&\xe3\x1a\xba\x1d\x96.j;X\x94\x89GV\xff%\xa0\x93pS\x83\xda\x84t\x14\xc3g\x9e\x04h:\xdf\x8e@Z\x1dJN\xcfC\x91;\xe7V\xd6\x00p\xcbR\xee{}\xae:\xe7\xbc1\xf9E\xf6\xc2`\xcf\x13Y\x02+\x80\xcc4G\xdf\xb9\xde\x90em\x02\xcf,\x91\xa6\xa6\xe7\xde\x85\x18I|fN\xa3:m\xa9\xb5\xee4.\xba\x0d\x03\xb83\xdfG\xeb\xb1k\x8d%\xd9\x9b\xce\x81\xd1EF2\x96p\x87\xde\x02\x0eIC\x85\xb6ls\xbbd\xeaaA\xac\xc9\xd4T\xdf\x87/\xc7"\xb2&\xcc\x9fYTh\x9f\xfc\xbe*/\xc4U\x1cu@`\x17\x85\x02U9\x8b\x7f\x05\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x9c_\x00\xdf\xaa\x01\xd70+8\x88\xa2\xb8mJ\x9c\xf2\x11\x91\x830\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00K6\xa6\x84wi\xdd;\x19\x9fg#\x08o\x0ea\xc9\xfd\x84\xdc_\xd86\x81\xcd\xd8\x1bA-\x9f`\xdd\xc7\x1ah\xd9\xd1n\x86\xe1\x88#\xcf\x13\xdeC\xcf\xe24\xb3\x04\x9d\x1f)\xd5\xbf\xf8^\xc8\xd5\xc1\xbd\xee\x92o2t\xf2\x91\x82/\xbd\x82Bz\xad*\xb7 }M\xbczU\x12\xc2\x15\xea\xbd\xf7j\x95.lt\x9f\xcf\x1c\xb4\xf2\xc5\x01\xa3\x85\xd0r>\xads\xab\x0b\x9bu\x0cmE\xb7\x8e\x94\xac\x967\xb5\xa0\xd0\x8f\x15G\x0e\xe3\xe8\x83\xdd\x8f\xfd\xefA\x01w\xcc'\xa9b\x853\xf27\x08\xefq\xcfw\x06\xde\xc8\x19\x1d\x88@\xcf}F\x1d\xff\x1e\xc7\xe1\xce\xff#\xdb\xc6\xfa\x8dUN\xa9\x02\xe7G\x11F>\xf4\xfd\xbd{)&\xbb\xa9ab7(\xb6-*\xf6\x10\x86d\xc9p\xa7\xd2\xad\xb7)py\xea<\xdac%\x9f\xfdh\xb70\xecp\xfbu\x8a\xb7m`g\xb2\x1e\xc8\xb9\xe9\xd8\xa8o\x02\x8bg\x0dM&Wq\xda \xfc\xc1JP\x8d\xb1(\xba", + ["CN=Sonera Class2 CA,O=Sonera,C=FI"] = "0\x82\x03 0\x82\x02\x08\xa0\x03\x02\x01\x02\x02\x01\x1d0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00091\x0b0\x09\x06\x03U\x04\x06\x13\x02FI1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Sonera1\x190\x17\x06\x03U\x04\x03\x13\x10Sonera Class2 CA0\x1e\x17\x0d010406072940Z\x17\x0d210406072940Z091\x0b0\x09\x06\x03U\x04\x06\x13\x02FI1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Sonera1\x190\x17\x06\x03U\x04\x03\x13\x10Sonera Class2 CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\x90\x17J5\x9d\xca\xf0\x0d\x96\xc7D\xfa\x167\xfcH\xbd\xbd\x7f\x80-5;\xe1o\xa8g\xa9\xbf\x03\x1cM\x8co2G\xd5Ah\xa4\x13\x04\xc15\x0c\x9a\x84C\xfc\\x1d\xff\x89\xb3\xe8\x17\x18\xcd\x91_\xfb\x89\xe3\xea\xbfN]|\x1b&\xd3uy\xed\xe6\x84\xe3W\xe5\xad)\xc4\xf4:(\xe7\xa5{\x846i\xb3\xfd^v\xbd\xa3-\x99\xd3\x90N#(}\x18c\xf1T;&\x9dv[\x97B\xb2\xff\xae\xf0N\xec\xdd9\x95N\x83\x06\x7f\xe7I@\xc8\xc5\x01\xb2TZf\x1d=\xfc\xf9\xe9<\x0a\x9e\x81\xb8p\xf0\x01\x8b\xe4#T|\xc8\xae\xf8\x90\x1e\x00\x96r\xd4T\xcfa#\xbc\xea\xfb\x9d\x02\x95\xd1\xb6\xb9q:i\x08?\x0f\xb4\xe1B\xc7\x88\xf5?\x98\xa8\xa7\xba\x1c\xe0qq\xefXW\x81Pz\ktF\x0e\x83\x03\x98\xc3\x8e\xa8n\xf2v2n'\x83\xc2s\xf3\xdc\x18\xe8\xb4\x93\xeauDk\x04` qW\x87\x9d\xf3\xbe\xa0\x90#=\x8a$\xe1\xda!\xdb\xc3\x02\x03\x01\x00\x01\xa33010\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x11\x06\x03U\x1d\x0e\x04\x0a\x04\x08J\xa0\xaaX\x84\xd3^<0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00Z\xce\x87\xf9\x16r\x15WK\x1d\xd9\x9b\xe7\xa2&0\xec\x93g\xdf\xd6-\xd24\xaf\xf78\xa5\xce\xab\x16\xb9\xab/|5\xcb\xac\xd0\x0f\xb4L+\xfc\x80\xefk\x8c\x91_6v\xf7\xdb\xb3\x1b\x19\xea\xf4\xb2\x11\xfdaqD\xbf(\xb3:\x1d\xbf\xb3C\xe8\x9f\xbf\xdc1\x08q\xb0\x9d\x8d\xd64G2\x90\xc6e$\xf7\xa0J|\x04s\x8f9o\x17\x8cr\xb5\xbdK\xc8z\xf8{\x83\xc3(N\x9c\x09\xeag?\xb2g\x04\x1b\xc3\x14\xda\xf8\xe7I$\x91\xd0\x1dj\xfaa9\xefk\xe7!u\x06\x07\xd8\x12\xb4! pBq\x81\xda<\x9a6\xbe\xa6[\x0djl\x9a\x1f\x91{\xf9\xf9\xefB\xbaNN\x9e\xcc\x0c\x8d\x94\xdc\xd9E\x9c^\xecBPc\xae\xf4]\xc4\xb1\x12\xdc\xca;\xa8.\x9d\x14Z\x05u\xb7\xec\xd7c\xe2\xba5\xb6\x04\x08\x91\xe8\xda\x9d\x9c\xf6f\xb5\x18\xac\x0a\xa6T&43\xd2\x1b\xc1\xd4\x7f\x1a:\x8e\x0b\xaa2n\xdb\xfcO%\x9f\xd92\xc7\x96Zp\xac\xdfL", + ["CN=SZAFIR ROOT CA2,O=Krajowa Izba Rozliczeniowa S.A.,C=PL"] = "0\x82\x03r0\x82\x02Z\xa0\x03\x02\x01\x02\x02\x14>\x8a]\x07\xecU\xd22\xd5\xb7\xe3\xb6_\x01\xeb-\xdc\xe4\xd6\xe40\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000Q1\x0b0\x09\x06\x03U\x04\x06\x13\x02PL1(0&\x06\x03U\x04\x0a\x0c\x1fKrajowa Izba Rozliczeniowa S.A.1\x180\x16\x06\x03U\x04\x03\x0c\x0fSZAFIR ROOT CA20\x1e\x17\x0d151019074330Z\x17\x0d351019074330Z0Q1\x0b0\x09\x06\x03U\x04\x06\x13\x02PL1(0&\x06\x03U\x04\x0a\x0c\x1fKrajowa Izba Rozliczeniowa S.A.1\x180\x16\x06\x03U\x04\x03\x0c\x0fSZAFIR ROOT CA20\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xb7\xbc>P\xa8K\xcd@\xb5\xcea\xe7\x96\xca\xb4\xa1\xda\x0c"\xb0\xfa\xb5{v\x00w\x8c\x0b\xcf}\xa8\x86\xcc&Q\xe4 =\x85\x0c\xd6X\xe3\xe7\xf4*\x18\x9d\xda\xd1\xae&\xee\xebS\xdc\xf4\x90\xd6\x13J\x0c\x90<\xc3\xf4\xda\xd2\x8e\x0d\x92:\xdc\xb1\xb1\xff8\xde\xc3\xba-_\x80\xb9\x02\xbdJ\x9d\x1b\x0f\xb4\xc3\xc2\xc1g\x03\xdd\xdc\x1b\x9c=\xb3\xb0\xde\x00\x1e\xa84G\xbb\x9a\xeb\xfe\x0b\x14\xbd6\x84\xda\x0d \xbf\xfa[\xcb\xa9\x16 \xad9`\xee/u\xb6\xe7\x97\x9c\xf9>\xfd~MoM/\xef\x88\x0dj\xfa\xdd\xf1=n \xa5\xa0\x12\xb4Mp\xb9\xce\xd7r;\x89\x93\xa7\x80\x84\x1c'IrI\xb5\xff;\x95\x9e\xc1\xcc\xc8\x01\xec\xe8\x0e\x8a\x0a\x96\xe7\xb3\xa6\x87\xe5\xd6\xf9\x05+\x0d\x97@p<\xba\xacuZ\x9c\xd5M\x9d\x02\x0a\xd2K\x9bfKF\x07\x17e\xad\x9fl\x88\x00\xdc"\x89\xe0\xe1d\xd4g\xbc1ya<\xbb\xcaA\xcd\j\x00\xc8<8\x8eX\xaf\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14.\x16\xa9J\x18\xb5\xcb\xcc\xf5oP\xf3#_\xf8]\xe7\xac\xf0\xc80\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\xb5s\xf8\x03\xdcY[\x1dv\xe9\xa3*{\x90(\xb2M\xc03O\xaa\x9a\xb1\xd4\xb8\xe4'\xff\xa9\x96\x99\xceF\xe0m|L\xa28\xa4\x06p\xf0\xf4A\x11\xec?G\x8d?r\x87\xf9;\xfd\xa4o+S\x00\xe0\xff9\xb9j\x07\x0e\xeb\x1d\x1c\xf6\xa2r\x90\xcb\x82=\x11\x82\x8b\xd2\xbb\x9f*\xaf!\xe6c\x86\x9dy\x19\xef\xf7\xbb\x0c5\x90\xc3\x8a\xedO\x0f\xf5\xcc\x12\xd9\xa4>\xbb\xa0\xfc \x95_O&/\x11#\x83Nu\x07\x0f\xbf\x9b\xd1\xb4\x1d\xe9\x10\x04\xfe\xca`\x8f\xa2L\xb8\xad\xcf\xe1\x90\x0f\xcd\xae\x0a\xc7]{\xb7P\xd2\xd4a\xfa\xd5\x15\xdb\xd7\x9f\x87QT\xeb\xa5\xe3\xeb\xc9\x85\xa0% 7\xfb\x8e\xce\x0c4\x84\xe1<\x81\xb2wNC\xa5\x88_\x86g\xa1=\xe6\xb4\a\xb6>\xdb\xfe\xb7(\xc5\xa2\x07\xae\xb5\xca\xca\x8d*\x12\xef\x97\xed\xc20\xa4\xc9*z\xfb\xf3M#\x1b\x9934\xa0.\xf5\xa9\x0b?\xd4]\xe1\xcf\x84\x9f\xe2\x19\xc2_\x8a\xd6 \x1e\xe3s\xb7", + ["OU=ePKI Root Certification Authority,O=Chunghwa Telecom Co., Ltd.,C=TW"] = "0\x82\x05\xb00\x82\x03\x98\xa0\x03\x02\x01\x02\x02\x10\x15\xc8\xbdeG\\xaf\xb8\x97\x00^\xe4\x06\xd2\xbc\x9d0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000^1\x0b0\x09\x06\x03U\x04\x06\x13\x02TW1#0!\x06\x03U\x04\x0a\x0c\x1aChunghwa Telecom Co., Ltd.1*0(\x06\x03U\x04\x0b\x0c!ePKI Root Certification Authority0\x1e\x17\x0d041220023127Z\x17\x0d341220023127Z0^1\x0b0\x09\x06\x03U\x04\x06\x13\x02TW1#0!\x06\x03U\x04\x0a\x0c\x1aChunghwa Telecom Co., Ltd.1*0(\x06\x03U\x04\x0b\x0c!ePKI Root Certification Authority0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xe1%\x0f\xee\x8d\xdb\x883ug\xcd\xad\x1f}:Nm\x9d\xd3/\x14\xf3ct\xcb\x01!j7\xea\x84P\x07K&[\x09Cl!\x9ej\xc8\xd5\x03\xf5`i\x8f\xcc\xf0"\xe4\x1f\xe7\xf7j"1\xb7,\x15\xf2\xe0\xfe\x00jC\xff\x87e\xc6\xb5\x1a\xc1\xa7Lm"p!\x8a1\xf2\x97t\x89\x09\x12&\x1c\x9e\xca\xd9\x12\xa2\x95<\xda\xe9g\xbf\x08\xa0d\xe3\xd6B\xb7E\xef\x97\xf4\xf6\xf5\xd7\xb5J\x15\x02X}\x98XK`\xbc\xcd\xd7\x0d\x9a\x133S\xd1a\xf9z\xd5\xd7x\xb3\x9a3\xf7\x00\x86\xce\x1dM\x948\xaf\xa8\xecxQp\x8a\\x10\x83Q!\xf7\x11=4\x86^\xe5H\xcd\x97\x81\x825L\x19\xece\xf6k\xc5\x05\xa1\xeeG\x13\xd6\xb3!'\x94\x10\x0a\xd9$;\xba\xbeD\x13F0?\x97<\xd8\xd7\xd7j\xee;8\xe3+\xd4\x97\x0e\xb9\x1b\xe7\x07I\x7f7*\xf9wx\xcfT\xed[F\x9d\xa3\x80\x0e\x91C\xc1\xd6[_\x14\xba\x9f\xa6\x8d$G@Y\xbfr8\xb26l7\xff\x99\xd1]\x0eY\x0a\xabi\xf7\xc0\xb2\x04EzT\x00\xae\xbeS\xf6\xb5\xe7\xe1\xf8<\xa31\xd2\xa9\xfe!Rd\xc5\xa6g\xf0u\x07\x06\x94\x14\x81U\xc6'\xe4\x01\x8f\x17\xc1jq\xd7\xbeK\xfb\x94X}~\x113\xb1B\xf7bl\x18\xd6\xcf\x09h>\x7fl\xf6\x1e\x8fb\xad\xa5c\xdb\x09\xa7\x1f"BA\x1eo\x99\x8a>\xd7\xf9?@zy\xb0\xa5\x01\x92\xd2\x9d=\x08\x15\xa5\x10\x01-\xb32v\xa8\x95\x0d\xb3z\x9a\xfb\x07\x10x\x11o\xe1\x8f\xc7\xba\x0f%\x1at*\xe5\x1c\x98A\x99\xdf!\x87\xe8\x95\x06j\x0a\xb3jGve\xf6:\xcf\x8fb\x17\x19{\x0a(\xcd\x1a\xd2\x83\x1e!\xc7,\xbf\xbe\xffah\xb7g\x1b\xbbxM\x8d\xceg\xe5\xe4\xc1\x8e\xb7#f\xe2\x9d\x90u4\x98\xa96+\x8a\x9a\x94\xb9\x9d\xec\xcc\x8a\xb1\xf8%\x89\Z\xb6/\x8c\x1fmy$\xa7Rh\xc3\x845\xe2f\x8dc\x0e%M\xd5\x19\xb2\xe6y7\xa7"\x9dT1\x02\x03\x01\x00\x01\xa3j0h0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x1e\x0c\xf7\xb6g\xf2\xe1\x92&\x09E\xc0U9.w?BJ\xa20\x0c\x06\x03U\x1d\x13\x04\x050\x03\x01\x01\xff09\x06\x04g*\x07\x00\x0410/0-\x02\x01\x000\x09\x06\x05+\x0e\x03\x02\x1a\x05\x000\x07\x06\x05g*\x03\x00\x00\x04\x14E\xb0\xc2\xc7\x0aV|\xee[x\x0c\x95\xf9\x18S\xc1\xa6\x1c\xd8\x100\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00\x09\xb3\x83SY\x01>\x95I\xb9\xf1\x81\xba\xf9v #\xb5'`t\xd4j\x994^l\x00S\xd9\x9f\xf2\xa6\xb1$\x07Dj*\xc6\xa5\x8ex\x12\xe8G\xd9X\x1b\x13*^y\x9b\x9f\x0a*g\xa6%?\x06iVs\xc3\x8afH\xfb)\x81Wt\x06\xca\x9c\xea(\xe88g&+\xf1\xd5\xb5?e\x93\xf86]\x8e\x8d\x8d@ \x87\x19\xea\xef'\xc0=\xb49\x0f%{hPtU\x9c\x0cY}Z=A\x94%R\x08\xe0G,\x151\x19\xd5\xbf\x07U\xc6\xbb\x12\xb5\x97\xf4_\x83\x85\xbaq\xc1\xd9l\x81\x11v\x0a\x0a\xb0\xbf\x82\x97\xf7\xea=\xfa\xfa\xec-\xa9(\x94;V\xdd\xd2Q.\xae\xc0\xbd\x08\x15\x8cwR4\x96\xd6\x9b\xac\xd3\x1d\x8ea\x0f5{\x9b\xae9i\x0bb`@ 6\x8f\xaf\xfb6\xee-\x08J\x1d\xb8\xbf\x9b\\xf8\xea\xa5\x1b\xa0s\xa6\xd8\xf8n\xe03\x04_h\xaa'\x87\xed\xd9\xc1\x90\x9c\xed\xbd\xe3j5\xafc\xdf\xab\x18\xd9\xba\xe6\xe9J\xeaP\x8a\x0fa\x93\x1e\xe2-\x19\xe20\x945\x92]\x0e\xb6\x07\xaf\x19\x80\x8fG\x90QK.M\xdd\x85\xe2\xd2\x0aR\x0a\x17\x9a\xfc\x1a\xb0P\x02\xe5\x01\xa3c7!LD\xc4\x9bQ\x99\x11\x0es\x9c\x06\x8fT.\xa7(^D9\x87V-7\xbd\x85D\x94\xe1\x0cK,\x9c\xc3\x92\x854a\xcb\x0f\xb8\x9bJCR\xfe4:}\xb8\xe9)\xdcv\xa9\xc80\xf8\x14q\x80\xc6\x1e6Ht"A\\x87\x82\xe8\x18q\x8bA\x89D\xe7~X[\xa8\xb8\x8d\x13\xe9\xa7l\xc3G\xed\xb3\x1a\x9db\xae\x8d\x82\xea\x94\x9e\xddY\x10\xc3\xad\xdd\xe2M\xe31\xd5\xc7\xec\xe8\xf2\xb0\xfe\x92\x1e\x16\x0a\x1a\xfc\xd9\xf3\xf8'\xb6\xc9\xbe\x1d\xb4ld\x90\x7f\xf4\xe4\xc4[\xd77\xaeB\x0e\xdd\xa4\x1ao|\x88T\xc5\x16n\xe1zh.\xf8:\xbf\x0d\xa4<\x89;x\xa7Nc\x83\x04!\x08g\x8d\xf2\x82I\xd0[\xfd\xb1\xcd\x0f\x83\x84\xd4> \x85\xf7J=+\x9c\xfd*\x0a\x09M\xea\x81\xf8\x11\x9c", + ["CN=Amazon Root CA 3,O=Amazon,C=US"] = "0\x82\x01\xb60\x82\x01[\xa0\x03\x02\x01\x02\x02\x13\x06l\x9f\xd5t\x976f?;\x0b\x9a\xd9\xe8\x9ev\x03\xf2J0\x0a\x06\x08*\x86H\xce=\x04\x03\x02091\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Amazon1\x190\x17\x06\x03U\x04\x03\x13\x10Amazon Root CA 30\x1e\x17\x0d150526000000Z\x17\x0d400526000000Z091\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Amazon1\x190\x17\x06\x03U\x04\x03\x13\x10Amazon Root CA 30Y0\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H\xce=\x03\x01\x07\x03B\x00\x04)\x97\xa7\xc6A\x7f\xc0\x0d\x9b\xe8\x01\x1bV\xc6\xf2R\xa5\xba-\xb2\x12\xe8\xd2.\xd7\xfa\xc9\xc5\xd8\xaam\x1fs\x81;;\x98k9|3\xa5\xc5N\x86\x8e\x80\x17hbEW}DX\x1d\xb37\xe5g\x08\xebf\xde\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xab\xb6\xdb\xd7\x06\x9e7\xac0\x86\x07\x91p\xc7\x9c\xc4\x19\xb1x\xc00\x0a\x06\x08*\x86H\xce=\x04\x03\x02\x03I\x000F\x02!\x00\xe0\x85\x92\xa3\x17\xb7\x8d\xf9+\x06\xa5\x93\xac\x1a\x98har\xfa\xe1\xa1\xd0\xfb\x1cx`\xa6C\x99\xc5\xb8\xc4\x02!\x00\x9c\x02\xef\xf1\x94\x9c\xb3\x96\xf9\xeb\xc6*\xf8\xb6,\xfe:\x90\x14\x16\xd7\x8cc$H\x1c\xdf0}\xd5h;", + ["CN=Izenpe.com,O=IZENPE S.A.,C=ES"] = "0\x82\x05\xf10\x82\x03\xd9\xa0\x03\x02\x01\x02\x02\x10\x00\xb0\xb7Z\x16H_\xbf\xe1\xcb\xf5\x8b\xd7\x19\xe6}0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00081\x0b0\x09\x06\x03U\x04\x06\x13\x02ES1\x140\x12\x06\x03U\x04\x0a\x0c\x0bIZENPE S.A.1\x130\x11\x06\x03U\x04\x03\x0c\x0aIzenpe.com0\x1e\x17\x0d071213130828Z\x17\x0d371213082725Z081\x0b0\x09\x06\x03U\x04\x06\x13\x02ES1\x140\x12\x06\x03U\x04\x0a\x0c\x0bIZENPE S.A.1\x130\x11\x06\x03U\x04\x03\x0c\x0aIzenpe.com0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xc9\xd3z\xca\x0f\x1e\xac\xa7\x86\xe8\x16ej\xb1\xc2\x1bE2q\x95\xd9\xfe\x10[\xcc\xaf\xe7\xa5y\x01\x8f\x89\xc3\xca\xf2Uq\xf7w\xbew\x94\xf3r\xa4,D\xd8\x9e\x92\x9b\x14:\xa1\xe7$\x90\x0a\x0aV\x8e\xc5\xd8&\x94\xe1\xd9H\xe1->\xda\x0ar\xdd\xa3\x99\x15\xda\x81\xa2\x87\xf4{n&w\x89X\xad\xd6\xeb\x0c\xb2Azsnm\xdbzxA\xe9\x08\x88\x12~\x87.f\x11clT\xfb<\x9dr\xc0\xbc.\xff\xc2\xb7\xdd\x0dv\xe3:\xd7\xf7\xb4h\xbe\xa2\xf5\xe3\x81n\xc1Fo]\x8d\xe0M\xc6TU\x89\x1a31\x0a\xb1W\xb9\xa3\x8a\x98\xc3\xec;4\xc5\x95Ai~u\xc2< \xc5a\xbaQG\xa0 \x90\x93\xa1\x90K\xf3N|\x85ET\x9a\xd1\x05&A\xb0\xb5M\x1d3\xbe\xc4\x03\xc8%|\xc1p\xdb;\xf4\x09-T'H\xac/\xe1\xc4\xac>\xc8\xcb\x92LS97#\xec\xd3\x01\xf9\xe0\x09DMMd\xc0\xe1\x0dZ\x87"\xbc\xad\x1b\xa3\xfe&\xb5\x15\xf3\xa7\xfc\x84\x19\xe9\xec\xa1\x88\xb4Di\x84\x83\xf3\x89\xd1t\x06\xa9\xcc\x0b\xd6\xc2\xde'\x85P&\xca\x17\xb8\xc9z\x87V,\x1a\x01\x1el\xbe\x13\xad\x10\xac\xb5$\xf58\x91\xa1\xd6K\xda\xf1\xbb\xd2\xdeG\xb5\xf1\xbc\x81\xf6Yk\xcf\x19S\xe9\x8d\x15\xcbJ\xcb\xa9oD\xe5\x1bA\xcf\xe1\x86\xa7\xca\xd0j\x9f\xbcL\x8d\x063Z\xa2\x85\xe5\x905\xa0b\\x16N\xf0\xe3\xa2\xfa\x03\x1a\xb4,q\xb3X,\xde{\x0b\xdb\x1a\x0f\xeb\xde!\x1f\x06w\x06\x03\xb0\xc9\xef\x99\xfc\xc0\xb9O\x0b\x86(\xfe\xd2\xb9\xea\xe3\xda\xa5\xc3Gi\x12\xe0\xdb\xf0\xf6\x19\x8b\xed{p\xd7\x02\xd6\xed\x87\x18(,\x04$Lw\xe4H\x8a\x1a\xc6;\x9a\xd4\x0f\xca\xfau\xd2\x01@Z\x8dy\xbf\x8b\xcfK\xcf\xaa\x16\xc1\x95\xe4\xadL\x8a>\x17\x91\xd4\xb1b\xe5\x82\xe5\x80\x04\xa4\x03~\x8d\xbf\xda\x7f\xa2\x0f\x97O\x0c\xd3\x0d\xfb\xd7\xd1\xe5r~\x1c\xc8w\xff[\x9a\x0f\xb7\xae\x05F\xe5\xf1\xa8\x16\xecG\xa4\x17\x02\x03\x01\x00\x01\xa3\x81\xf60\x81\xf30\x81\xb0\x06\x03U\x1d\x11\x04\x81\xa80\x81\xa5\x81\x0finfo@izenpe.com\xa4\x81\x910\x81\x8e1G0E\x06\x03U\x04\x0a\x0c>IZENPE S.A. - CIF A01337260-RMerc.Vitoria-Gasteiz T1055 F62 S81C0A\x06\x03U\x04\x09\x0c:Avda del Mediterraneo Etorbidea 14 - 01010 Vitoria-Gasteiz0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x1d\x1ce\x0e\xa8\xf2%{\xb4\x91\xcf\xe4\xb1\xb1\xe6\xbdUtl\x050\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00x\xa6\x0c\x16J\x9fL\x88:\xc0\xcb\x0e\xa5\x16}\x9f\xb9H_\x18\x8f\x0db6\xf6\xcd\x19k\xac\xab\xd5\xf6\x91}\xaeq\xf3?\xb3\x0ex\x85\x9b\x95\xa4'!GBJ|H:\xf5E|\xb3\x0c\x8eQx\xac\x95\x13\xde\xc6\xfd}\xb8\x1a\x90L\xab\x92\x03\xc7\xedB\x01\xce\x0f\xd8\xb1\xfa\xa2\x92\xe1`m\xaezk\x09\xaa\xc6)\xeehIg0\x80$z1\x169[~\xf1\x1c.\xddl\x09\xad\xf21\xc1\x82N\xb9\xbb\xf9\xbe\xbf*\x85?\xc0@\xa3:Y\xfcYK<($\xdb\xb4\x15u\xae\x0d\x88\xba.s\xc0\xbdX\x87\xe5B\xf2\xeb^\xee\x1e0"\x99\xcb7\xd1\xc4!l\x81\xec\xbem&\xe6\x1c\xe4B \x9eG\xb0\xac\x83Yp,5\xd6\xaf64\xb4\xcd;\xf82\xa8\xef\xe3x\x89\xfb\x8dE,\xda\x9c\xb8~@\x1ca\xe7>\xa2\x92,K\xf2\xcd\xfa\x98\xb6)\xff\xf3\xf2{\xa9\x1f.\xa0\x93W+\xde\x85\x03\xf9i7\xcb\x9exj\x05\xb4\xc51x\x89\xecz\xa7\x85\xe1\xb9{<\xde\xbe\x1ey\x84\xce\x9fp\x0eY\xc25.\x90*1\xd9\xe4EzA\xa4.\x13\x9b4\x0ef{I\xabd\x97\xd0F\xc3y\x9drPc\xa6\x98[\x06\xbdHm\xd89\x83p\xe85\xf0\x05\xd1\xaa\xbc\xe3\xdb\xc8\x02\xea|\xfd\x82\xda\xc2[R5\xae\x98:\xad\xba5\x93#\xa7\x1fH\xdd5F\x98\xb2\x10h\xe4\xa51\xc2\x0aX.\x19\x81\x10\xc9Pu\xfc\xeaZ\x16\xce\x11\xd7\xee\xefP\x88-a\xff?Bs\x05\x94C\xd5\x8e\x9d\xa3l\xdb\xfc&\x88\xc7", + ["CN=COMODO RSA Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB"] = "0\x82\x05\xd80\x82\x03\xc0\xa0\x03\x02\x01\x02\x02\x10L\xaa\xf9\xca\xdbco\xe0\x1f\xf7N\xd8[\x03\x86\x9d0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x000\x81\x851\x0b0\x09\x06\x03U\x04\x06\x13\x02GB1\x1b0\x19\x06\x03U\x04\x08\x13\x12Greater Manchester1\x100\x0e\x06\x03U\x04\x07\x13\x07Salford1\x1a0\x18\x06\x03U\x04\x0a\x13\x11COMODO CA Limited1+0)\x06\x03U\x04\x03\x13"COMODO RSA Certification Authority0\x1e\x17\x0d100119000000Z\x17\x0d380118235959Z0\x81\x851\x0b0\x09\x06\x03U\x04\x06\x13\x02GB1\x1b0\x19\x06\x03U\x04\x08\x13\x12Greater Manchester1\x100\x0e\x06\x03U\x04\x07\x13\x07Salford1\x1a0\x18\x06\x03U\x04\x0a\x13\x11COMODO CA Limited1+0)\x06\x03U\x04\x03\x13"COMODO RSA Certification Authority0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\x91\xe8T\x92\xd2\x0aV\xb1\xac\x0d$\xdd\xc5\xcfDgt\x99+7\xa3}#p\x00q\xbcS\xdf\xc4\xfa*\x12\x8fK\x7f\x10V\xbd\x9fpr\xb7a\x7f\xc9K\x0f\x17\xa7=\xe3\xb0\x04a\xee\xff\x11\x97\xc7\xf4\x86>\x0a\xfa>\\xf9\x93\xe64z\xd9\x14k\xe7\x9c\xb3\x85\xa0\x82zv\xafq\x90\xd7\xec\xfd\x0d\xfa\x9cl\xfa\xdf\xb0\x82\xf4\x14~\xf9\xbe\xc4\xa6/O\x7f\x99\x7f\xb5\xfcgCr\xbd\x0c\x00\xd6\x89\xebk,\xd3\xed\x8f\x98\x1c\x14\xab~\xe5\xe3n\xfc\xd8\xa8\xe4\x92$\xdaCkb\xb8U\xfd\xea\xc1\xbcl\xb6\x8b\xf3\x0e\x8d\x9a\xe4\x9bli\x99\xf8xH0E\xd5\xad\xe1\x0d\x99\xfa\x95\x17\xda|3WA<\x8dQ\xed\x0b\xb6\\xaf,c\x1a\xdfW\xc8?\xbc\xe9]\xc4\x9b\xafE\x99\xe2\xa3Z$\xb4\xba\xa9V=\xcfo\xaa\xffIX\xbe\xf0\xa8\xff\xf4\xb8\xad\xe97\xfb\xba\xb8\xf4\x0b:\xf9\xe8CB\x1e\x89\xd8\x84\xcb\x13\xf1\xd9\xbb\xe1\x89`\xb8\x8c(V\xac\x14\x1d\x9c\x0a\xe7q\xeb\xcf\x0e\xdd=\xa9\x96\xa1H\xbd<\xf7\xaf\xb5\x0d"L\xc0\x11\x81\xecV;\xf6\xd3\xa2\xe2[\xb7\xb2\x04"R\x95\x80\x93i\xe8\x8eLe\xf1\x91\x03-pt\x02\xea\x8bg\x15)iR\x02\xbb\xd7\xdfPjUF\xbf\xa0\xa3(a\x7fp\xd0\xc3\xa2\xaa,!\xaaG\xce(\x9c\x06Ev\xbf\x82\x18'\xb4\xd5\xae\xb4\xcbP\xe6k\xf4L\x86q0\xe9\xa6\xdf\x16\x86\xe0\xd8\xff@\xdd\xfb\xd0B\x88\x7f\xa33:.\\x1eA\x11\x81c\xce\x18qk+\xec\xa6\x8a\xb71\:jG\xe0\xc3yY\xd6 \x1a\xaf\xf2j\x98\xaar\xbcWJ\xd2K\x9d\xbb\x10\xfc\xb0LA\xe5\xed\x1d=^(\x9d\x9c\xcc\xbf\xb3Q\xda\xa7G\xe5\x84S\x02\x03\x01\x00\x01\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xbb\xaf~\x02=\xfa\xa6\xf1<\x84\x8e\xad\xee8\x98\xec\xd922\xd40\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x00\x03\x82\x02\x01\x00\x0a\xf1\xd5F\x84\xb7\xaeQ\xbbl\xb2MA\x14\x00\x93L\x9c\xcb\xe5\xc0T\xcf\xa0%\x8e\x02\xf9\xfd\xb0\xa2\x0d\xf5 \x98<\x13-\xacV\xa2\xb0\xd6~\x11\x92\xe9.\xba\x9e.\x9ar\xb1\xbd\x19Dla5\xa2\x9a\xb4\x16\x12iZ\x8c\xe1\xd7>\xa4\x1a\xe8/\x03\xf4\xaea\x1d\x10\x1b*\xa4\x8bz\xc5\xfe\x05\xa6\xe1\xc0\xd6\xc8\xfe\x9e\xae\x8f+\xba=\x99\xf8\xd8s\x09XFn\xa6\x9c\xf4\xd7'\xd3\x95\xda7\x83r\x1c\xd3s\xe0\xa2G\x99\x038]\xd5Iy\x00)\x1c\xc7\xec\x9b \x1c\x07$iWx\xb29\xfc:\x84\xa0\xb5\x9c|\x8d\xbf.\x93b'\xb79\xda\x17\x18\xae\xbd<\x09h\xff\x84\x9b<\xd5\xd6\x0b\x03\xe3W\x9e\x14\xf7\xd1\xebO\xc8\xbd\x87#\xb7\xb6ICy\x85\\xba\xeb\x92\x0b\xa1\xc6\xe8h\xa8L\x16\xb1\x1a\x99\x0a\xe8S,\x92\xbb\xa1\x09\x18u\x0ce\xa8{\xcb#\xb7\x1a\xc2(\x85\xc3\x1b\xff\xd0+b\xef\xa4{\x09\x91\x98g\x8c\x14\x01\xcdh\x06jc!u\x03\x80\x88\x8an\x81\xc6\x85\xf2\xa9\xa4-\xe7\xf4\xa5$\x10G\x83\xca\xcd\xf4\x8dyX\xb1\x06\x9b\xe7\x1a*\xd9\x9d\x01\xd7\x94}\xed\x03J\xca\xf0\xdb\xe8\xa9\x01>\xf5V\x99\xc9\x1e\x8eI=\xbb\xe5\x09\xb9\xe0OI\x92=\x16\x82@\xcc\xccY\xc6\xe6:\xed\x12.i\xe1\xf6\xd8\x09\xe13d+c\xd72^\x9f\xf9\xc0{\x0fxo\x97\xbc\x93\x9a\xf9\x9c\x12\x90xz\x80\x87\x15\xd7rt\x9cUtx\xb1\xba\xe1np\x04\xbaO\xa0\xbah\xc3{\xff1\xf0s==\x94*\xb1\x0bA\x0e\xa0\xfeM\x88eky3\xb4\xd7\x02\x03\x01\x00\x01\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xedD\x19\xc0\xd3\xf0\x06\x8b\xee\xa4{\xbeB\xe7&T\xc8\x8e6v0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00\x0d\xae\x902\xf6\xa6K|Dv\x19a\x1e'(\xcd^T\xef%\xbc\xe3\x08\x90\xf9)\xd7\xaeh\x08\xe1\x94\x00X\xef..~SR\x8c\xb6\\x07\xea\x88\xba\x99\x8bP\x94\xd7\x82\x80\xdfa\x09\x00\x93\xad\x0d\x14\xe6\xce\xc1\xf27\x94x\xb0_\x9c\xb3\xa2s\xb8\x8f\x05\x938\xcd\x8d>\xb0\xb8\xfb\xc0\xcf\xb1\xf2\xec--\x1b\xcc\xec\xaa\x9a\xb3\xaa`\x82\x1b-;\xc3\x84=W\x8a\x96\x1e\x9cu\xb8\xd30\xcd`\x08\x83\x90\xd3\x8eT\xf1Mf\xc0]t\x03@\xa3\xee\x85~\xc2\x1fw\x9c\x06\xe8\xc1\xa7\x18]R\x95\xed\xc9\xdd%\x9em\xfa\xa9\xed\xa3:4\xd0Y{\xda\xedP\xf35\xbf\xed\xeb\x14M1\xc7`\xf4\xda\xf1\x87\x9c\xe2H\xe2\xc6\xc57\xfb\x06\x10\xfauYf1G)\xdav\x9a\x1c\xe9\x82\xae\xef\x9a\xb9Q\xf7\x88#\x9ai\x95b<\xe5U\x806\xd7T\x02\xff\xf1\xb9]\xce\xd4#o\xd8E\x84J[e\xef\x89\x0c\xdd\x14\xa7 \xcb\x18\xa5%\xb4\x0d\xf9\x01\xf0\xa2\xd2\xf4\x00\xc8t\x8e\xa1*H\x8ee\xdb\x13\xc4\xe2%\x17}\xeb\xbe\x87[\x17 TQ\x93JS\x03\x0b\xec]\xca3\xedb\xfdE\xc7/[\xdcX\xa0\x809\xe6\xfa\xd7\xfe\x13\x14\xa6\xed=\x94JBt\xd4\xc3wYs\xcd\x8fF\xbeU8\xef\xfa\xe8\x912\xea\x97X\x04"\xde8\xc3\xcc\xbcm\xc93:j\x0ai?\xa0\xc8\xear\x8f\x8cc\x86#\xbdm<\x96\x9e\x95\xe0IL\xaa\xa2\xb9*\x1b\x9c6\x81x\xed\xc3\xe8F\xe2&YDu\x1e\xd9u\x89Q\xcd\x10\x84\x9da`\xcb]\xf9\x97"M\x8e\x98\xe6\xe3\x7f\xf6[\xbb\xae\xcd\xcaJ\x81k^\x0b\xf3Q\xe1t+\xe9~'\xa7\xd9\x99IN\xf8\xa5\x80\xdb%\x0f\x1ccb\x8a\xc93gk<\x10\x83\xc6\xad\xde\xa8\xcd\x16\x8e\x8d\xf0\x077q\x9f\xf2\xab\xfcA\xf5\xc1\x8b\xec\x007]\x09\xe5N\x80\xef\xfa\xb1\8\x06\xa5\x1bJ\xe1\xdc8-<\xdc\xab\x1f\x90\x1a\xd5J\x9c\xee\xd1pl\xcc\xee\xf4W\xf8\x18\xba\x84n\x87", + ["CN=Global Chambersign Root - 2008,O=AC Camerfirma S.A.,serialNumber=A82743287,L=Madrid (see current address at www.camerfirma.com/address),C=EU"] = "0\x82\x07I0\x82\x051\xa0\x03\x02\x01\x02\x02\x09\x00\xc9\xcd\xd3\xe9\xd5}#\xce0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\xac1\x0b0\x09\x06\x03U\x04\x06\x13\x02EU1C0A\x06\x03U\x04\x07\x13:Madrid (see current address at www.camerfirma.com/address)1\x120\x10\x06\x03U\x04\x05\x13\x09A827432871\x1b0\x19\x06\x03U\x04\x0a\x13\x12AC Camerfirma S.A.1'0%\x06\x03U\x04\x03\x13\x1eGlobal Chambersign Root - 20080\x1e\x17\x0d080801123140Z\x17\x0d380731123140Z0\x81\xac1\x0b0\x09\x06\x03U\x04\x06\x13\x02EU1C0A\x06\x03U\x04\x07\x13:Madrid (see current address at www.camerfirma.com/address)1\x120\x10\x06\x03U\x04\x05\x13\x09A827432871\x1b0\x19\x06\x03U\x04\x0a\x13\x12AC Camerfirma S.A.1'0%\x06\x03U\x04\x03\x13\x1eGlobal Chambersign Root - 20080\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xc0\xdfV\xd3\xe4:\x9bvE\xb4\x13\xdb\xff\xc1\xb6\x19\x8b7A\x18\x95RG\xeb\x17\x9d)\x88\x8e5l\x062.Gb\xf3I\x04\xbf}D6\xb1q\xcc\xbdZ\x09s\xd5\xd9\x85D\xff\x91W%\xdf^6\x8ep\xd1\qC\x1d\xd9\xda\xef\\xd2\xfb\x1b\xbd:\xb5\xcb\xad\xa3\xccD\xa7\x0d\xae!\x15?\xb9z[\x92u\xd8\xa4\x128\x89\x19\x8a\xb7\x80\xd2\xe22oV\x9c\x91\xd6\x88\x10\x0b\xb3td\x92t`\xf3\xf6\xcf\x18O`\xb2#\xd0\xc7;\xceaK\x99\x8f\xc2\x0c\xd0@\xb2\x98\xdc\x0d\xa8N\xa3\xb9\x0a\xae`\xa0\xadERc\xbaf\xbdh\xe0\xf9\xbe\x1a\xa8\x81\xbb\x1eAxu\xd3\xc1\xfe\x00U\xb0\x87T\xe8'\x905\x1dL3\xad\x97\xfc\x97.\x98\x84\xbf,\xc9\xa3\xbf\xd1\x98\x11\x14\xedc\xf8\xca\x98\x88X\x17\x99\xedE\x03\x97~<\x86\x1e\x88\x8c\xbe\xf2\x91\x84\x8fe4\xd8\x00L}\xb71\x17Z)z\x0a\x18$0\xa37\xb5z\xa9\x01}&\xd6\xf9\x0e\x8eY\xf1\xfd\x1b3\xb5);\x17;A\xb6!\xdd\xd4\xc0=\xa5\x9f\x9f\x1fCP\xc9\xbb\xbclz\x97\x98\xee\xcd\x8c\x1f\xfb\x9cQ\xae\x8bp\xbd'\x9fq\xc0k\xac}\x90f\xe8\xd7]:\x0d\xb0\xd5\xc2\x8d\xd5\xc8\x9d\x9d\xc1m\xd0\xd0\xbfQ\xe4\xe3\xf8\xc386\xae\xd6\xa7u\xe6\xaf\x84C]\x93\x92\x0cj\x07\xde;\x1d\x98"\xd6\xac\xc15\xdb\xa3\xa0%\xffr\xb5v\x1d\xdem\xe9,f,R\x84\xd0E\x92\xce\x1c\xe5\xe53\x1d\xdc\x07ST\xa3\xaa\x82;\x9a7/\xdc\xdd\xa0d\xe9\xe6\xdd\xbd\xae\xfcd\x85\x1d<\xa7\xc9\x06\xde\x84\xffk\xe8k\x1a<\xc5\xa2\xb3B\xfb\x8b\x09>_\x08R\xc7b\xc4\xd4\x05q\xbf\xc4d\xe4\xf8\xa1\x83\xe8>\x12\x9b\xa8\x1e\xd46M/q\xf6\x8d(\xf6\x83\xa9\x13\xd2a\xc1\x91\xbbH\xc04\x8fA\x8cKL\xdbi\x12\xffP\x94\x9c \x83Ys\xed|\xa1\xf2\xf1\xfd\xdd\xf7I\xd3CX\xa0Vc\xca==\xe55VY\xe9\x0e\xca \xcc+K\x93)\x0f\x02\x03\x01\x00\x01\xa3\x82\x01j0\x82\x01f0\x12\x06\x03U\x1d\x13\x01\x01\xff\x04\x080\x06\x01\x01\xff\x02\x01\x0c0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb9\x09\xca\x9c\x1e\xdb\xd3l:k\xae\xedT\xf1[\x93\x065.^0\x81\xe1\x06\x03U\x1d#\x04\x81\xd90\x81\xd6\x80\x14\xb9\x09\xca\x9c\x1e\xdb\xd3l:k\xae\xedT\xf1[\x93\x065.^\xa1\x81\xb2\xa4\x81\xaf0\x81\xac1\x0b0\x09\x06\x03U\x04\x06\x13\x02EU1C0A\x06\x03U\x04\x07\x13:Madrid (see current address at www.camerfirma.com/address)1\x120\x10\x06\x03U\x04\x05\x13\x09A827432871\x1b0\x19\x06\x03U\x04\x0a\x13\x12AC Camerfirma S.A.1'0%\x06\x03U\x04\x03\x13\x1eGlobal Chambersign Root - 2008\x82\x09\x00\xc9\xcd\xd3\xe9\xd5}#\xce0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060=\x06\x03U\x1d \x0460402\x06\x04U\x1d \x000*0(\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16\x1chttp://policy.camerfirma.com0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00\x80\x88\x7fp\xde\x92(\xd9\x05\x94F\xff\x90W\xa9\xf1/\xdf\x1a\x0dk\xfa|\x0e\x1cI$y'\xd8F\xaao)YR\x88p\x12\xea\xdd=\xf5\x9bSTo\xe1`\xa2\xa8\x09\xb9\xec\xebY|\xc65\xf1\xdc\x18\xe9\xf1g\xe5\xaf\xbaE\xe0\x09\xde\xcaD\x0f\xc2\x17\x0ew\x91Ez3__\x96,h\x8b\xc1G\x8f\x98\x9b=\xc0\xec\xcb\xf5\xd5\x82\x92\x845\xd1\xbe68Vr1[G-\xaa\x17\xa4cQ\xeb\x0a\x01\xad\x7f\xecu\x9e\xcb\xa1\x1f\xf1\x7f\x12\xb1\xb9\xe4d\x7fg\xd6#*\xf4\xb89]\x98\xe8!\xa7\xe1\xbd=B\x1at\x9ap\xafhlP]I\xcf\xff\xfb\x0e]\xe6,G\xd7\x81:Y\x00\xb5skc \xf61E\x089\x0e\xf4p~@pZ?\xd0kB\xa9t=(/\x02mur\x95\x09\x8dHc\xc6\xc6#W\x92\x93^5\xc1\x8d\xf9\x0a\xf7,\x9db\x1c\xf6\xad|\xdd\xa61\x1e\xb6\xb1\xc7~\x85&\xfa\xa4j\xb5\xdac0\xd1\xef\x937\xb2f/}\x05\xf7\xe7\xb7K\x98\x945\xc0\xd9:)\xc1\x9d\xb2P3\x1dJ\xa9Z\xa6\xc9\x03\xef\xed\xf4\xe7\xa8n\x8a\xb4W\x84\xeb\xa4?\xd0\xee\xaa\xaa\x87[c\xe8\x93\xe2k\xa8\xd4\xb8rxk\x1b\xed9\xe4]\xcb\x9b\xaa\x87\xd5ON\x00\xfe\xd9j\x9f<1\x0f(\x02\x01}\x98\xe8\xa7\xb0\xa2d\x9ey\xf8H\xf2\x15\xa9\xcc\xe6\xc8D\xeb?x\x99\xf2{q><\xf1\x98\xa7\xc5\x18\x12?\xe6\xbb(3B\xe9E\x0a|m\xf2\x86y/\xc5\x82\x19}\x09\x89|\xb2Tv\x88\xae\xde\xc1\xf3\xcc\xe1n\xdb1\xd6\x93\xae\x99\xa0\xef%js\x98\x89[:.\x13\x88\x1e\xbf\xc0\x92\x944\x1b\xe3'\xb7\x8b\x1eoB\xff\xe7\xe97\x9bP\x1d-\xa2\xf9\x02\xee\xcbXX:q\xbch\xe3\xaa\xc1\xaf\x1c(\x1f\xa2\xdc#e?\x81\xea\xae\x99\xd3\xd80\xcf\x13\x0dO\x15\xc9\x84\xbc\xa7H-\xf80#w\xd8FKym\xf6\x8c\xed:\x7f`\x11x\xf4\xe9\x9b\xae\xd5T\xc0t\x80\xd1\x0bB\x9f\xc1", + ["O=Government Root Certification Authority,C=TW"] = "0\x82\x05r0\x82\x03Z\xa0\x03\x02\x01\x02\x02\x10\x1f\x9dYZ\xd7/\xc2\x06D\xa5\x80\x08i\xe3^\xf60\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000?1\x0b0\x09\x06\x03U\x04\x06\x13\x02TW100.\x06\x03U\x04\x0a\x0c'Government Root Certification Authority0\x1e\x17\x0d021205132333Z\x17\x0d321205132333Z0?1\x0b0\x09\x06\x03U\x04\x06\x13\x02TW100.\x06\x03U\x04\x0a\x0c'Government Root Certification Authority0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\x9a%\xb8\xec\xcc\xa2u\xa8{\xf7\xce[Y\x8a\xc9\xd1\x86\x12\x08T\xec\x9c\xf2\xe7F\xf6\x88\xf3|\xe9\xa5\xdfLG6\xa4\x1b\x01\x1c\x7f\x1eW\x8a\x8d\xc3\xc5\xd1!\xe3\xda$?H+\xfb\x9f.\xa1\x94\xe7,\x1c\x93\xd1\xbf\x1b\x01\x87S\x99\xce\xa7\xf5\x0a!vw\xff\xa9\xb7\xc6s\x94OF\xf7\x10I7\xfa\xa8YI]j\x81\x07V\xf2\x8a\xf9\x06\xd0\xf7p"M\xb4\xb7A\xb92\xb8\xb1\xf0\xb1\xc3\x9c?p\xfdS\xdd\x81\xaa\xd8cx\xf6\xd8Sn\xa1\xacj\x84$rT\x86\xc6\xd2\xb2\xca\x1c\x0ey\x81\xd6\xb5pb\x08\x01.NO\x0e\xd5\x11\xaf\xa9\xaf\xe5\x9a\xbf\xdc\xcc\x87m&\xe4\xc9W\xa2\xfb\x96\xf9\xcc\xe1?S\x8clL~\x9bS\x08\x0bl\x17\xfbg\xc8\xc2\xad\xb1\xcd\x80\xb4\x97\xdcv\x01\x16\x15\xe9j\xd7\xa4\xe1xG\xce\x86\xd5\xfb1\xf3\xfa1\xbe4\xaa(\xfbpL\x1dI\xc7\xaf,\x9dmf\xa6\xb6\x8dd~\xb5 j\x9d;\x81\xb6\x8f@\x00gK\x89\x86\xb8\xcce\xfe\x15S\xe9\x04\xc1\xd6_\x1dD\xd7\x0a/'\x9aF}\xa1\x0du\xadT\x86\x15\xdcI;\xf1\x96\xce\x0f\x9b\xa0\xec\xa3z]\xbe\xd5*uB\xe5{\xde\xa5\xb6\xaa\xaf(\xac\xac\x90\xac8\xb7\xd5h5&z\xdc\xf7;\xf3\xfdE\x9b\xd1\xbbCxno\xf1BTj\x98\xf0\x0d\xad\x97\xe9R^\xe9\xd5jr\xdej\xf7\x1b`\x14\xf4\xa5\xe4\xb6qg\xaa\x1f\xea\xe2M\xc1B@\xfegF\x178/G?q\x9c\xae\xe5!\xcaa-m\x07\xa8\x84|-\xeeQ%\xf1c\x90\x9e\xfd\xe1W\x88k\xef\x8a#m\xb1\xe6\xbd?\xad\xd1=\x96\x0b\x85\x8d\xcdk'\xbb\xb7\x05\x9b\xec\xbb\x91\xa9\x0a\x07\x12\x02\x97N \x90\xf0\xff\x0d\x1e\xe2A;\xd3@:\xe7\x8d]\xdaf\xe4\x02\xb0\x07R\x98\\x0e\x8e3\x9c\xc2\xa6\x95\xfbU\x19nL\x8e\xaeK\x0f\xbd\xc18M^\x8f\x84\x1df\xcd\xc5`\x96\xb4RZ\x05\x89\x8e\x95z\x98\xc1\x91<\x95#\xb2\x0e\xf4y\xb4\xc9|\xc1J!\x02\x03\x01\x00\x01\xa3j0h0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xcc\xcc\xef\xcc)`\xa4;\xb1\x92\xb6<\xfa2b\x8f\xac%\x15;0\x0c\x06\x03U\x1d\x13\x04\x050\x03\x01\x01\xff09\x06\x04g*\x07\x00\x0410/0-\x02\x01\x000\x09\x06\x05+\x0e\x03\x02\x1a\x05\x000\x07\x06\x05g*\x03\x00\x00\x04\x14\x03\x9b\xf0"\x13\xff\x95(6\xd3\xdc\x9e\xc02\xfb1:\x8aQe0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00@\x80J\xfa&\xc9\xce^0\xddO\x86tvX\xf5\xae\xb3\x833x\xa4zt\x17\x19N\xe9R\xb5\xb9\xe0\x0atb\xaah\xcax\xa0L\x9a\x8e,#.\xd5j\x12$\xbf\xd4h\xd3\x8a\xd0\xd8\x9c\x9f\xb4\x1f\x0c\xde8~W8\xfc\x8d\xe2O^\x0c\x9f\xab;\xd2\xffu\x97\xcb\xa4\xe3g\x08\xff\xe5\xc0\x16\xb5H\x01}\xe9\xf9\x0a\xff\x1b\xe5ji\xbfx!\xa8\xc2\xa7#\xa9\x86\xabvV\xe8\x0e\x0c\xf6\x13\xdd*f\x8adI=\x1a\x18\x87\x90\x04\x9fBR\xb7O\xcb\xfeGAv5\xef\xff\x00v6E2\x9b\xc6F\x85]\xe2$\xb0\x1e\xe3H\x96\x98WG\x94Uz\x0fA\xb1D$\xf3\xc1\xfe\x1ak\xbf\x88\xfd\xc1\xa6\xda\x93`^\x81J\x99 \x9cHf\x19\xb5\x00yT\x0f\xb8,/K\xbc\xa9][`\x7f\x8c\x87\xa5\xe0Rc*\xbe\xd8;\x85@\x15\xfe\x1e\xb6e?\xc5K\xda~\xb5z5)\xa3.z\x98`"\xa3\xf4}'N-\xea\xb4t<\xe9\x0f\xa43\x0f\x10\x11\xbc\x13\x01\xd6\xe5\x0e\xd3\xbf\xb5\x12\xa2\xe1E#\xc0\xcc\x08na\xb7\x89\xab\x83\xe3$\x1e\xe6]\x07\xe7\x1f >\xcfg\xc8\xe7\xac0m'KhnK*\\x02\x084\xdb\xf8v\xe4g\xa3&\x9c?\xa22\xc2J\xc5\x81\x181\x10V\xaa\x84\xef-\x0a\xff\xb8\x1fw\xd2\xbf\xa5X\xa0b\xe4\xd7K\x91u\x8d\x89\x80\x98~m\xcbSN^\xaf\xf6\xb2\x97\x85\x97\xb9\xdaU\x06\xb9$\xee\xd7\xc68\x1ec\x1b\x12;\x95\xe1X\xac\xf2\xdf\x84\xd5_\x99/\x0dU[\xe68\xdb.?r\xe9H\x85\xcb\xbb)\x13\x8f\x1e8U\xb9\xf3\xb2\xc40\x99#N]\xf2H\xa1\x12\x0c\xdc\x12\x90\x09\x90T\x91\x03\xad\x9e\xd0t\x00\x0e\xeb\xbdQ\xad\xc0\xde,\xc0\xc3j\xfe\xef\xdc\x0b\xa7\xfaF\xdf`\xdb\x9c\xa6YPu#is\x93\xb2\xf9\xfc\x02\xd3G\xe6q\xce\x10\x02\xee'\x8c\x84\xff\xacE\x0d\x13\\x832\xe0%\xa5\x86,|\xf4\x12", + ["emailAddress=pki@sk.ee,CN=EE Certification Centre Root CA,O=AS Sertifitseerimiskeskus,C=EE"] = "0\x82\x04\x030\x82\x02\xeb\xa0\x03\x02\x01\x02\x02\x10T\x80\xf9\xa0s\xed?\x00L\xca\x89\xd8\xe3q\xe6J0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000u1\x0b0\x09\x06\x03U\x04\x06\x13\x02EE1"0 \x06\x03U\x04\x0a\x0c\x19AS Sertifitseerimiskeskus1(0&\x06\x03U\x04\x03\x0c\x1fEE Certification Centre Root CA1\x180\x16\x06\x09*\x86H\x86\xf7\x0d\x01\x09\x01\x16\x09pki@sk.ee0"\x18\x0f20101030101030Z\x18\x0f20301217235959Z0u1\x0b0\x09\x06\x03U\x04\x06\x13\x02EE1"0 \x06\x03U\x04\x0a\x0c\x19AS Sertifitseerimiskeskus1(0&\x06\x03U\x04\x03\x0c\x1fEE Certification Centre Root CA1\x180\x16\x06\x09*\x86H\x86\xf7\x0d\x01\x09\x01\x16\x09pki@sk.ee0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xc8 \xc0\xec\xe0\xc5K\xab\x07x\x95\xf3D\xee\xfb\x0b\x0c\xfft\x8ea\xbb\xb1b\xea#\xd8\xab\xa1e2z\xeb\x8e\x17O\x96\xd8\x0a{\x91\xa2cl\xc7\x8cL.y\xbf\xa9\x05\xfci\\x95\x8db\xf9\xb9p\xed\xc3Q}\xd0\x93\xe6l\xeb0K\xe1\xbc}\xbfR\x9b\xcen{e\xf28\xb1\xc0\xa22\xefb\xb2h\xe0aS\xc16\x95\xff\xec\x94\xba6\xae\x9c\x1c\xa72\x0f\xe5|\xb4\xc6ot\xfd{\x18\xe8\xacW\xed\x06 K20X[\xfd\xcd\xa8\xe6\xa1\xfcp\xbc\x8e\x92s\xdb\x97\xa7|!\xae=\xc1\xf5H\x87l'\xbd\x9f%t\x81U\xb0\xf7u\xf6=\xa4dk\xd6O\xe7\xce@\xad\x0f\xdd2\xd3\xbc\x8a\x12S\x98\xc9\x89\xfb\x10\x1dM~\xcd~\x1fV\x0d!p\x85\xf6 \x83\x1f\xf6\xba\x1f\x04\x8f\xeaw\x885\xc4\xff\xeaN\xa1\x8bM?c\x1bD\xc3D\xd4%v\xca\xb7\x8d\xd7\x1eJfd\xcd\\xc5\x9c\x83\xe1\xc2\x08\x88\x9a\xecN\xa3\xf1>\x1c,\xd9l\x1d\xa1K\x02\x03\x01\x00\x01\xa3\x81\x8a0\x81\x870\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x12\xf2Z>\xeaV\x1c\xbf\xcd\x06\xac\xf1\xf1%\xc9\xa9K\xd4\x14\x990E\x06\x03U\x1d%\x04>0<\x06\x08+\x06\x01\x05\x05\x07\x03\x02\x06\x08+\x06\x01\x05\x05\x07\x03\x01\x06\x08+\x06\x01\x05\x05\x07\x03\x03\x06\x08+\x06\x01\x05\x05\x07\x03\x04\x06\x08+\x06\x01\x05\x05\x07\x03\x08\x06\x08+\x06\x01\x05\x05\x07\x03\x090\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00{\xf6\xe4\xc0\x0d\xaa\x19G\xb7MW\xa3\xfe\xad\xbb\xb1j\xd5\x0f\x9e\xdb\xe4c\xc5\x8e\xa1PV\x93\x96\xb88\xc0$"f\xbcS\x14a\x95\xbf\xd0\xc7*\x969?}(\xb3\x10@!j\xc4\xaf\xb0Rw\x18\xe1\x96\xd8V]\xe3\xdd6^\x1d\xa7PT\xa0\xc5*\xe4\xaa\x8c\x94\x8aO\x9d5\xffv\xa4\x06\x13\x91\xa2\xa2}\x00D?U\xd3\x82<\x1a\xd5[\xbcVL".FC\x8a$@-\xf3\x12\xb8;p\x1a\xa4\x96\xb9\x1a\xaf\x87A\x1aj\x18\x0d\x06O\xc7>n\xb9)M\x0dI\x89\x11\x872[\xe6K\x04\xc8\xe4\\xe6ts\x94]\x16\x98\x13\x95\xfe\xfb\xdb\xb1D\xe5:p\xac7k\xe6\xb33r(\xc9\xb3W\xa0\xf6\x02\x16\x88\x06\x0b\xb6\xa6K (\xd4\xde=\x8b\xad7\x05St\xfen\xcc\xbcC\x17q^\xf9\xc5\xcc\x1a\xa9a\xee\xf7v\x0c\xf3r\xf4r\xad\xcfr\x026\x07G\xcf\xef\x19P\x89`\xcc\xe9$\x95\x0f\xc2\xcb\x1d\xf2ov\x90\xc7\xccu\xc1\x96\xc5\x9d", + ["CN=Certum Trusted Network CA 2,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL"] = "0\x82\x05\xd20\x82\x03\xba\xa0\x03\x02\x01\x02\x02\x10!\xd6\xd0JO%\x0f\xc927\xfc\xaa^\x12\x8d\xe90\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0d\x05\x000\x81\x801\x0b0\x09\x06\x03U\x04\x06\x13\x02PL1"0 \x06\x03U\x04\x0a\x13\x19Unizeto Technologies S.A.1'0%\x06\x03U\x04\x0b\x13\x1eCertum Certification Authority1$0"\x06\x03U\x04\x03\x13\x1bCertum Trusted Network CA 20"\x18\x0f20111006083956Z\x18\x0f20461006083956Z0\x81\x801\x0b0\x09\x06\x03U\x04\x06\x13\x02PL1"0 \x06\x03U\x04\x0a\x13\x19Unizeto Technologies S.A.1'0%\x06\x03U\x04\x0b\x13\x1eCertum Certification Authority1$0"\x06\x03U\x04\x03\x13\x1bCertum Trusted Network CA 20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xbd\xf9x\xf8\xe6\xd5\x80\x0cd\x9d\x86\x1b\x96dg?":\x1eu\x01}\xef\xfb\g\x8c\xc9\xcc\k\xa9\x91\xe6\xb9B\xe5 K\x9b\xda\x9b{\xb9\x99]\xd9\x9b\x80K\xd7\x84@+'\xd3\xe8\xba0\xbb>\x09\x1a\xa7I\x95\xef+@$\xc2\x97\xc7\xa7\xee\x9b%\xef\xa8\x0a\x00\x97\x85Z\xaa\x9d\xdc)\xc9\xe25\x07\xebpMJ\xd6\xc1\xb3V\xb8\xa1A8\x9b\xd1\xfb1\x7f\x8f\xe0_\xe1\xb1?\x0f\x8e\x16I`\xd7\x06\x8d\x18\xf9\xaa&\x10\xab*\xd3\xd0\xd1g\x8d\x1bF\xbeG0\xd5.r\xd1\xc5c\xda\xe7cyD~Kc$\x89\x86.4?)LR\x8b*\xa7\xc0\xe2\x91(\x89\xb9\xc0[\xf9\x1d\xd9\xe7'\xad\xff\x9a\x02\x97\xc1\xc6P\x92\x9b\x02,\xbd\xa9\xb94Y\x0a\xbf\x84J\xff\xdf\xfe\xb3\x9f\xeb\xd9\x9e\xe0\x98#\xec\xa6kw\x16*\xdb\xcc\xad;\x1c\xa4\x87\xdcFs^\x19bhEW\xe4\x90\x82B\xbbB\xd6\xf0a\xe0\xc1\xa3=f\xa3]\xf4\x18\xee\x88\xc9\x8d\x17E)\x992u\x021\xee)&\xc8k\x02\xe6\xb5bE\x7f7\x15Z#h\x89\xd4>\xdeN'\xb0\xf0@\x0c\xbcM\x17\xcbM\xa2\xb3\x1e\xd0\x06Z\xdd\xf6\x93\xcfWu\x99\xf5\xfa\x86\x1agx\xb3\xbf\x96\xfe4\xdc\xbd\xe7RV\xe5\xb3\xe5u{\xd7A\x91\x05\xdc]i\xe3\x95\x0dC\xb9\xfc\x83\x969\x95{l\x80ZO\x13r\xc6\xd7})zD\xbaR\xa4*\xd5AF\x09 \xfe"\xa0\xb6[0\x8d\xbc\x89\x0c\xd5\xd7p\xf8\x87R\xfd\xda\xef\xacQ.\x07\xb3N\xfe\xd0\x09\xdap\xef\x98\xfaV\xe6m\xdb\xb5WK\xdc\xe5,%\x15\xc8\x9e.xN\xf8\xda\x9c\x9e\x86,\xcaW\xf3\x1a\xe5\xc8\x92\x8b\x1a\x82\x96z\xc3\xbcP\x12i\xd8\x0eZF\x8b:\xeb&\xfa#\xc9\xb6\xb0\x81\xbeB\x00\xa4\xf8\xd6\xfe0.\xc7\xd2F\xf6\xe5\x8eu\xfd\xf2\xcc\xb9\xd0\x87[\xcc\x06\x10`\xbb\x835\xb7^g\xdeG\xec\x99H\xf1\xa4\xa1\x15\xfe\xad\x8cb\x8e9UO9\x16\xb9\xb1c\x9d\xff\xb7\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb6\xa1T9\x02\xc3\xa0?\x8e\x8a\xbc\xfa\xd4\xf8\x1c\xa6\xd1:\x0e\xfd0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0d\x05\x00\x03\x82\x02\x01\x00q\xa5\x0e\xce\xe4\xe9\xbf?8\xd5\x89Z\xc4\x02a\xfbL\xc5\x14\x17-\x8bOSk\x10\x17\xfce\x84\xc7\x10I\x90\xde\xdb\xc7&\x93\x88&op\xd6\x02^9\xa0\xf7\x8f\xab\x96\xb5\xa5\x13\\x81\x14m\x0e\x81\x82\x11\x1b\x8aN\xc6O\xa5\xddb\x1eD\xdf\x09Y\xf4[w\x0b7\xe9\x8b \xc6\xf8\x0aN.X\x1c\xeb3\xd0\xcf\x86`\xc9\xda\xfb\x80/\x9eL`\x84x=!d\xd6\xfbA\x1f\x18\x0f\xe7\xc9uq\xbd\xbd\\xde4\x87>A\xb0\x0e\xf6\xb9\xd6?\x09\x13\x96\x14/\xde\x9a\x1dZ\xb9V\xce5:\xb0_pM^\xe3)\xf1#(rY\xb6\xab\xc2\x8cf&\x1cw,&v5\x8b(\xa7i\xa0\xf9;\xf5#\xdd\x85\x10t\xc9\x90\x03V\x91\xe7\xaf\xbaG\xd4\x12\x97\x11"\xe3\xa2I\x94l\xe7\xb7\x94K\xba-\xa4\xda3\x8bL\xa6D\xffZ<\xc6\x1dd\xd8\xb51\xe4\xa6\xe7\xf7\x9a\xe2}\xf6q\x98\x99\x04\xaaCtx\xa3\xe3Ia>s\x8cM\x94\xe0\xf9q\xc4\xb6\x16\x0eSx\x1f\xd6\xa2\x87/\x029\x81)<\xaf\x15\x98!0\xfe(\x90\x00\x8c\xd1\xe1\xcb\xfa^\xc8\xfd\xf8\x10F;\xa2xB\x91\x17tU\x0a\xdePgMf\xd1\xa7\xff\xfd\xd9\xc0\xb5\xa8\xa3\x8a\xcef\xf5\x0fC\xcd\xa7+W{cFj\xaa.R\xd8\xf4\xed\xe1m\xad)\x90xH\xba\xe1#\xaa\xa3\x89\xec\xb5\xab\x96\xc0\xb4K\xa2\x1d\x97\x9ez\xf2n@q\xdfh\xf1eM\xce|\x05\xdfSe\xa9\xa5\xf0\xb1\x97\x04p\x15F\x03\x98\xd4\xd2\xbfT\xb4\xa0X}Ro\xdaV&b\xd4\xd8\xdb\x891o\x1c\xf0"\xc2\xd3b\x1c5\xcdLi\x15T\x1a\x90\x98\xde\xeb\x1e_\xcaw\xc7\xcb\x8e=Ci\x9c\x9aX\xd0$;\xdf\x1b@\x96~5\xad\x81\xc7Nq\xba\x88\x13", + ["OU=Starfield Class 2 Certification Authority,O=Starfield Technologies, Inc.,C=US"] = "0\x82\x04\x0f0\x82\x02\xf7\xa0\x03\x02\x01\x02\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000h1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1%0#\x06\x03U\x04\x0a\x13\x1cStarfield Technologies, Inc.1200\x06\x03U\x04\x0b\x13)Starfield Class 2 Certification Authority0\x1e\x17\x0d040629173916Z\x17\x0d340629173916Z0h1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1%0#\x06\x03U\x04\x0a\x13\x1cStarfield Technologies, Inc.1200\x06\x03U\x04\x0b\x13)Starfield Class 2 Certification Authority0\x82\x01 0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0d\x000\x82\x01\x08\x02\x82\x01\x01\x00\xb72\xc8\xfe\xe9q\xa6\x04\x85\xad\x0c\x11d\xdf\xceM\xef\xc8\x03\x18\x87?\xa1\xab\xfb<\xa6\x9f\xf0\xc3\xa1\xda\xd4\xd8n+S\x90\xfb$\xa4>\x84\xf0\x9e\xe8_\xec\xe5'D\xf5(\xa6?{\xde\xe0*\xf0\xc8\xafS/\x9e\xca\x05\x01\x93\x1e\x8ff\x1c9\xa7M\xfaZ\xb6s\x04%f\xebw\x7f\xe7Y\xc6J\x99%\x14T\xeb&\xc7\xf3\x7f\x19\xd50p\x8f\xaf\xb0F*\xff\xad\xeb)\xed\xd7\x9f\xaa\x04\x87\xa3\xd4\xf9\x89\xa54_\xdbC\x91\x826\xd9f<\xb1\xb8\xb9\x82\xfd\x9c:>\x10\xc8;\xef\x06efz\x9b\x19\x18=\xffqQ<0._\xbe=ws\xb2]\x06l\xc3#V\x9a+\x85&\x92\x1c\xa7\x02\xb3\xe4?\x0d\xaf\x08y\x82\xb86=\xea\x9c\xd35\xb3\xbci\xca\xf5\xcc\x9d\xe8\xfdd\x8d\x17\x803n^J]\x99\xc9\x1e\x87\xb4\x9d\x1a\xc0\xd5n\x135#^\xdf\x9b_=\xef\xd6\xf7v\xc2\xea>\xbbx\x0d\x1cBgk\x04\xd8\xf8\xd6\xdao\x8b\xf2D\xa0\x01\xab\x02\x01\x03\xa3\x81\xc50\x81\xc20\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xbf_\xb7\xd1\xce\xdd\x1f\x86\xf4[U\xac\xdc\xd7\x10\xc2\x0e\xa9\x88\xe70\x81\x92\x06\x03U\x1d#\x04\x81\x8a0\x81\x87\x80\x14\xbf_\xb7\xd1\xce\xdd\x1f\x86\xf4[U\xac\xdc\xd7\x10\xc2\x0e\xa9\x88\xe7\xa1l\xa4j0h1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1%0#\x06\x03U\x04\x0a\x13\x1cStarfield Technologies, Inc.1200\x06\x03U\x04\x0b\x13)Starfield Class 2 Certification Authority\x82\x01\x000\x0c\x06\x03U\x1d\x13\x04\x050\x03\x01\x01\xff0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x05\x9d?\x88\x9d\xd1\xc9\x1aU\xa1\xaci\xf3\xf3Y\xda\x9b\x01\x87\x1aOW\xa9\xa1y\x09*\xdb\xf7/\xb2\x1e\xcc\xc7^j\xd8\x83\x87\xa1\x97\xefI5>w\x06AXb\xbf\x8eX\xb8\x0ag?\xec\xb3\xdd!f\x1f\xc9T\xfar\xcc=L@\xd8\x81\xafw\x9e\x83z\xbb\xa2\xc7\xf54\x17\x8e\xd9\x11@\xf4\xfc,*M\x15\x7f\xa7b].%\xd3\x00\x0b \x1a\x1dh\xf9\x17\xb8\xf4\xbd\x8b\xed(Y\xddM\x16\x8b\x17\x83\xc8\xb2e\xc7-z\xa5\xaa\xbcS\x86m\xddW\xa4\xca\xf8 A\x0bh\xf0\xf4\xfbt\xbeV]zy\xf5\xf9\x1d\x85\xe3-\x95\xbe\xf5q\x90C\xcc\x8d\x1f\x9a\x00\x0a\x87)\xe9U"X\x00#\xea\xe3\x12C)[G\x08\xdd\x8cAje\x06\xa8\xe5!\xaaA\xb4\x95!\x95\xb9}\xd14\xab\x13\xd6\xad\xbc\xdc\xe2=9\xcd\xbd>up\xa1\x18Y\x03\xc9"\xb4\x8f\x9c\xd5^*\xd7\xa5\xb6\xd4\x0am\xf8\xb7@\x11F\x9a\x1fy\x0eb\xbf\x0f\x97\xec\xe0/\x1f\x17\x94", + ["CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE"] = "0\x82\x03u0\x82\x02]\xa0\x03\x02\x01\x02\x02\x0b\x04\x00\x00\x00\x00\x01\x15KZ\xc3\x940\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000W1\x0b0\x09\x06\x03U\x04\x06\x13\x02BE1\x190\x17\x06\x03U\x04\x0a\x13\x10GlobalSign nv-sa1\x100\x0e\x06\x03U\x04\x0b\x13\x07Root CA1\x1b0\x19\x06\x03U\x04\x03\x13\x12GlobalSign Root CA0\x1e\x17\x0d980901120000Z\x17\x0d280128120000Z0W1\x0b0\x09\x06\x03U\x04\x06\x13\x02BE1\x190\x17\x06\x03U\x04\x0a\x13\x10GlobalSign nv-sa1\x100\x0e\x06\x03U\x04\x0b\x13\x07Root CA1\x1b0\x19\x06\x03U\x04\x03\x13\x12GlobalSign Root CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xda\x0e\xe6\x99\x8d\xce\xa3\xe3O\x8a~\xfb\xf1\x8b\x83%k\xeaH\x1f\xf1*\xb0\xb9\x95\x11\x04\xbd\xf0c\xd1\xe2gf\xcf\x1c\xdd\xcf\x1bH+\xee\x8d\x89\x8e\x9a\xaf)\x80e\xab\xe9\xc7-\x12\xcb\xab\x1cLp\x07\xa1=\x0a0\xcd\x15\x8dO\xf8\xdd\xd4\x8cP\x15\x1c\xefP\xee\xc4.\xf7\xfc\xe9R\xf2\x91}\xe0m\xd550\x8e^Cs\xf2A\xe9\xd5j\xe3\xb2\x89:V98o\x06<\x88i[*M\xc5\xa7T\xb8l\x89\xcc\x9b\xf9<\xca\xe5\xfd\x89\xf5\x12<\x92x\x96\xd6\xdctn\x93Da\xd1\x8d\xc7F\xb2u\x0e\x86\xe8\x19\x8a\xd5ml\xd5x\x16\x95\xa2\xe9\xc8\x0a8\xeb\xf2$\x13OsT\x93\x13\x85:\x1b\xbc\x1e4\xb5\x8b\x05\x8c\xb9w\x8b\xb1\xdb\x1f \x91\xab\x09Sn\x90\xce{7t\xb9pG\x91"Qc\x16y\xae\xb1\xaeA&\x08\xc8\x19+\xd1F\xaaH\xd6d*\xd7\x834\xff,*\xc1l\x19CJ\x07\x85\xe7\xd3|\xf6!h\xef\xea\xf2R\x9f\x7f\x93\x90\xcf\x02\x03\x01\x00\x01\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14`{f\x1aE\x0d\x97\xca\x89P/}\x04\xcd4\xa8\xff\xfc\xfdK0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xd6s\xe7|Ov\xd0\x8d\xbf\xec\xba\xa2\xbe4\xc5(2\xb5|\xfcl\x9c,+\xbd\x09\x9eS\xbfk^\xaa\x11H\xb6\xe5\x08\xa3\xb3\xca=aM\xd3F\x09\xb3>\xc3\xa0\xe3cU\x1b\xf2\xba\xef\xad9\xe1C\xb98\xa3\xe6/\x8a&;\xef\xa0PV\xf9\xc6\x0a\xfd8\xcd\xc4\x0bpQ\x94\x97\x98\x04\xdf\xc3_\x94\xd5\x15\xc9\x14A\x9c\xc4]ud\x15\x0d\xffU0\xec\x86\x8f\xff\x0d\xef,\xb9cF\xf6\xaa\xfc\xdf\xbci\xfd.\x12Hd\x9a\xe0\x95\xf0\xa6\xef)\x8f\x01\xb1\x15\xb5\x0c\x1d\xa5\xfei,i$x\x1e\xb3\xa7\x1cqb\xee\xca\xc8\x97\xac\x17]\x8a\xc2\xf8G\x86n*\xc4V1\x95\xd0g\x89\x85+\xf9l\xa6]F\x9d\x0c\xaa\x82\xe4\x99Q\xddp\xb7\xdbV=a\xe4j\xe1\\xd6\xf6\xfe=\xdeA\xcc\x07\xaecR\xbfSS\xf4+\xe9\xc7\xfd\xb6\xf7\x82_\x85\xd2A\x18\xdb\x81\xb3\x04\x1c\xc5\x1f\xa4\x80o\x15 \xc9\xde\x0c\x88\x0a\x1d\xd6fU\xe2\xfcH\xc9)&i\xe0", + ["CN=thawte Primary Root CA - G2,OU=(c) 2007 thawte, Inc. - For authorized use only,O=thawte, Inc.,C=US"] = "0\x82\x02\x880\x82\x02\x0d\xa0\x03\x02\x01\x02\x02\x105\xfc&\\xd9\x84O\xc9=&=W\x9b\xae\xd7V0\x0a\x06\x08*\x86H\xce=\x04\x03\x030\x81\x841\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cthawte, Inc.1806\x06\x03U\x04\x0b\x13/(c) 2007 thawte, Inc. - For authorized use only1$0"\x06\x03U\x04\x03\x13\x1bthawte Primary Root CA - G20\x1e\x17\x0d071105000000Z\x17\x0d380118235959Z0\x81\x841\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cthawte, Inc.1806\x06\x03U\x04\x0b\x13/(c) 2007 thawte, Inc. - For authorized use only1$0"\x06\x03U\x04\x03\x13\x1bthawte Primary Root CA - G20v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04\xa2\xd5\x9c\x82{\x95\x9d\xf1Rx\x87\xfe\x8a\x16\xbf\x05\xe6\xdf\xa3\x02O\x0d\x07\xc6\x00Q\xba\x0c\x02R-"\xa4B9\xc4\xfe\x8f\xea\xc9\xc1\xbe\xd4M\xff\x9fz\x9e\xe2\xb1|\x9a\xad\xa7\x86\x09s\x87\xd1\xe7\x9a\xe3z\xa5\xaan\xfb\xba\xb3p\xc0g\x88\xa25\xd4\xa3\x9a\xb1\xfd\xad\xc2\xef1\xfa\xa8\xb9\xf3\xfb\x08\xc6\x91\xd1\xfb)\x95\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x9a\xd8\x000\x00\xe7k\x7f\x85\x18\xee\x8b\xb6\xce\x8a\x0c\xf8\x11\xe1\xbb0\x0a\x06\x08*\x86H\xce=\x04\x03\x03\x03i\x000f\x021\x00\xdd\xf8\xe0WG[\xa7\xe6\x0a\xc3\xbd\xf5\x80\x8a\x975\x0d\x1b\x89\xd9\xcf\x021\x00\xc4\x8d\x94\xfc\xdcS\xd2\xdc\x9dx\x16\x1f\x153#SR\xe3Z1]\x9d\xca\xae\xbd\x13)D\x0d'[\xa8\xe7h\x9c\x12\xf7X?.r\x02W\xa3\x8f\xa1\x14.", + ["OU=Go Daddy Class 2 Certification Authority,O=The Go Daddy Group, Inc.,C=US"] = "0\x82\x04\x000\x82\x02\xe8\xa0\x03\x02\x01\x02\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000c1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1!0\x1f\x06\x03U\x04\x0a\x13\x18The Go Daddy Group, Inc.110/\x06\x03U\x04\x0b\x13(Go Daddy Class 2 Certification Authority0\x1e\x17\x0d040629170620Z\x17\x0d340629170620Z0c1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1!0\x1f\x06\x03U\x04\x0a\x13\x18The Go Daddy Group, Inc.110/\x06\x03U\x04\x0b\x13(Go Daddy Class 2 Certification Authority0\x82\x01 0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0d\x000\x82\x01\x08\x02\x82\x01\x01\x00\xde\x9d\xd7\xeaW\x18I\xa1[\xeb\xd7_H\x86\xea\xbe\xdd\xff\xe4\xefg\x1c\xf4eh\xb3Wq\xa0^w\xbb\xed\x9bI\xe9p\x80=V\x18c\x08o\xda\xf2\xcc\xd0?\x7f\x02T"T\x10\xd8\xb2\x81\xd4\xc0u=K\x7f\xc7w\xc3>x\xab\x1a\x03\xb5 k/j+\xb1\xc5\x88~\xc4\xbb\x1e\xb0\xc1\xd8E'o\xaa7X\xf7\x87&\xd7\xd8-\xf6\xa9\x17\xb7\x1fr6N\xa6\x17?e\x98\x92\xdb*n]\xa2\xfe\x88\xe0\x0b\xde\x7f\xe5\x8d\x15\xe1\xeb\xcb:\xd5\xe2\x12\xa2\x13-\xd8\x8e\xaf_\x12=\xa0\x08\x05\x08\xb6\\xa5e8\x04E\x99\x1e\xa3``t\xc5A\xa5rb\x1bb\xc5\x1fo_\x1aB\xbe\x02Qe\xa8\xae#\x18j\xfcx\x03\xa9M\x7f\x80\xc3\xfa\xabZ\xfc\xa1@\xa4\xca\x19\x16\xfe\xb2\xc8\xef^s\x0d\xeew\xbd\x9a\xf6y\x98\xbc\xb1\x07g\xa2\x15\x0d\xdd\xa0X\xc6D{\x0a>b(_\xbaA\x07SX\xcf\x11~8t\xc5\xf8\xff\xb5i\x90\x8f\x84t\xea\x97\x1b\xaf\x02\x01\x03\xa3\x81\xc00\x81\xbd0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xd2\xc4\xb0\xd2\x91\xd4L\x11q\xb3a\xcb=\xa1\xfe\xdd\xa8j\xd4\xe30\x81\x8d\x06\x03U\x1d#\x04\x81\x850\x81\x82\x80\x14\xd2\xc4\xb0\xd2\x91\xd4L\x11q\xb3a\xcb=\xa1\xfe\xdd\xa8j\xd4\xe3\xa1g\xa4e0c1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1!0\x1f\x06\x03U\x04\x0a\x13\x18The Go Daddy Group, Inc.110/\x06\x03U\x04\x0b\x13(Go Daddy Class 2 Certification Authority\x82\x01\x000\x0c\x06\x03U\x1d\x13\x04\x050\x03\x01\x01\xff0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x002K\xf3\xb2\xca>\x91\xfc\x12\xc6\xa1\x07\x8c\x8ew\xa03\x06\x14\\x90\x1e\x18\xf7\x08\xa6=\x0a\x19\xf9\x87\x80\x11ni\xe4\x96\x170\xff4\x91cr8\xee\xcc\x1c\x01\xa3\x1d\x94(\xa41\xf6z\xc4T\xd7\xf6\xe51X\x03\xa2\xcc\xceb\xdb\x94Es\xb5\xbfE\xc9$\xb5\xd5\x82\x02\xad#yi\x8d\xb8\xb6M\xce\xcfL\xca3#\xe8\x1c\x88\xaa\x9d\x8bAn\x16\xc9 \xe5\x89\x9e\xcd;\xdap\xf7~\x99& \x14T%\xabns\x85\xe6\x9b!\x9d\x0al\x82\x0e\xa8\xf8\xc2\x0c\xfa\x10\x1el\x96\xef\x87\x0d\xc4\x0fa\x8b\xad\xee\x83+\x95\xf8\x8e\x92\x84r9\xeb \xea\x83\xed\x83\xcd\x97n\x08\xbc\xebN&\xb6s+\xe4\xd3\xf6L\xfe&q\xe2a\x11tJ\xffW\x1a\x87\x0fuH.\xcfQi\x17\xa0\x02\x12a\x95\xd5\xd1@\xb2\x10L\xee\xc4\xac\x10C\xa6\xa5\x9e\x0a\xd5\x95b\x9a\x0d\xcf\x88\x82\xc52\x0c\xe4+\x9fE\xe6\x0d\x9f(\x9c\xb1\xb9*ZW\xad7\x0f\xaf\x1d\x7f\xdb\xbd\x9f", + ["CN=COMODO ECC Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB"] = "0\x82\x02\x890\x82\x02\x0f\xa0\x03\x02\x01\x02\x02\x10\x1fG\xaf\xaab\x00pPTL\x01\x9e\x9bc\x99*0\x0a\x06\x08*\x86H\xce=\x04\x03\x030\x81\x851\x0b0\x09\x06\x03U\x04\x06\x13\x02GB1\x1b0\x19\x06\x03U\x04\x08\x13\x12Greater Manchester1\x100\x0e\x06\x03U\x04\x07\x13\x07Salford1\x1a0\x18\x06\x03U\x04\x0a\x13\x11COMODO CA Limited1+0)\x06\x03U\x04\x03\x13"COMODO ECC Certification Authority0\x1e\x17\x0d080306000000Z\x17\x0d380118235959Z0\x81\x851\x0b0\x09\x06\x03U\x04\x06\x13\x02GB1\x1b0\x19\x06\x03U\x04\x08\x13\x12Greater Manchester1\x100\x0e\x06\x03U\x04\x07\x13\x07Salford1\x1a0\x18\x06\x03U\x04\x0a\x13\x11COMODO CA Limited1+0)\x06\x03U\x04\x03\x13"COMODO ECC Certification Authority0v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04\x03G{/u\xc9\x82\x15\x85\xfbu\xe4\x91\x16\xd4\xabb\x99\xf5>R\x0b\x06\xceA\x00\x7f\x97\xe1\x0a$<\x1d\x01\x04\xee=\xd2\x8d\x09\x97\x0c\xe0u\xe4\xfa\xfbw\x8a*\xf5\x03`K6\x8b\x16#\x16\xad\x09q\xf4J\xf4(P\xb4\xfe\x88\x1cn?l//\x09Y[\xa5[\x0b3\x99\xe2\xc3=\x89\xf9j,\xef\xb2\xd3\x06\xe9\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14uq\xa7\x19H\x19\xbc\x9d\x9d\xeaAG\xdf\x94\xc4Hw\x99\xd3y0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0a\x06\x08*\x86H\xce=\x04\x03\x03\x03h\x000e\x021\x00\xef\x03[z\xac\xb7x\x0ar\xb7\x88\xdf\xff\xb5F\x14\x09\x0a\xfa\xa0\xe6}\x08\xc6\x1a\x87\xbd\x18\xa8s\xbd&\xca`\x0c\x9d\xce\x99\x9f\xcf\\x0f0\xe1\xbe\x141\xea\x020\x14\xf4\x93\x89#\x950\x16\x90\x7f\xe8W\x07H\xe7\x19\xae\xbfEg\xb17\x1b\x06*\xfe\xde\xf9\xac}\x83\xfb^\xba\xe4\x8f\x97g\xbeK\x8e\x8dd\x07W8Ui46=\x13H\xefO\xe2\xd3f\x1e\xa4\xcf\x1a\xb7^63\xd4\xb4\x06\xbd\x18\x01\xfdw\x84P\x00E\xf5\x8c]\xe8#\xbc~\xfe5\xe1\xedP{\xa90\x8d\x19\xd3\x09\x8ehg]\xbf<\x97\x18S\xbb)b\xc5\xca^r\xc1\xc7\x96\xd4\xdb-\xa0\xb4\x1fi\x03\xec\xea\xe2P\xf1\x0c<\xf0\xac\xf3S-\xf0\x1c\xf5\xedl99s\x80\x16\xc8R\xb0#\xcd\xe0>\xdc\xddM=\x98\xa8a\xde:\x1e\xd2\xf8^\x03\xe0\xc1\xc9\x1c\x8c\xd3\x8dM\xd3\x956\xb37_cc\x9b3\x14\xf0-&kS|\x89\x8c2\xc2n\xec=!\x009\xc9\xa1h\xe2P\x83.\xb0:+\xf36\xa0\xac/\xe4oa\xc2Q\x099>\x8bS\xb9\xbbg\xda\xdcS\xb9vY6\x9dC\xe5 \xe0=2`\x85"Q\xb7\xc73\xbb\xdd\x15/\xa4x\xa6\x07{\x81F6\x04\x86\xddy5\xc7\x95,;\xb0\xa3\x175\xe5s\x1f\xb4\Y\xef\xda\xea\x10e{z\xd0\x7f\x9f\xb3\xb4*7;p\x8b\x9b[\xb9+\xb7\xec\xb2Q\x12\x97S)Z\xd4\xf0\x12\x10\xdcO\x02\xbb\x12\x92/b\xd4?iC|\x0d\xd6\xfcXu\x01\x88\x9dX\x16K\xde\xba\x90\xffG\x01\x89\x06j\xf6_\xb2\x90j\xb3\x02\xa6\x02\x88\xbf\xb3G~*\xd9\xd5\xfahx5M\x02\x03\x01\x00\x01\xa3?0=0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xf0\x8fY8\x00\xb3\xf5\x8f\x9a\x96\x0c\xd5\xeb\xfa{\xaa\x17\xe8\x13\x120\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00\xbe\xe4\bN$\xf4\x0c\x08\xff\xf0\xd3\x0ch\xe4\x93I"?D'o\xbbm\xde\x83f\xce\xa8\xcc\x0d\xfc\xf5\x9a\x06\xe5w\x14\x91\xeb\x9dA{\x99*\x84\xe5\xff\xfc!\xc1]\xf0\xe4\x1fW\xb7u\xa9\xa1_\x02&\xff\xd7\xc7\xf7N\xdeO\xf8\xf7\x1cF\xc0zO@,"5\xf0\x19\xb1\xd0kg,\xb0\xa8\xe0\xc0@75\xf6\x84\\\xe3\xafBx\xfe\xa7\xc9\x0dP\xea\x0d\x84v\xf6Q\xef\x83S\xc6z\xff\x0eVI.\x8fz\xd6\x0c\xe6'T\xe3M\x0a`rb\xcd\x91\x07\xd6\xa5\xbf\xc8\x99k\xed\xc4\x19\xe6\xabL\x118\xc5o1\xe2nI\xc8?v\x80&\x03&)\xe06\xf6\xf6 S\xe3\x17p4\x17\x9dch\x1ek\xec\xc3M\x86\xb8\x130/]F\x0dGC\xd5\x1b\xaaY\x0e\xb9\\x8d\x06H\xadt\x87_\xc7\xfc1TA\x13\xe2\xc7!\x0e\x9e\xe0\x1e\x0d\xe1\xc0{C\x85\x90\xc5\x8aX\xc6e\x0axW\xf2\xc6#\x0f\x01\xd9 K\xde\x0f\xfb\x92\x85u*\s\x8dm{%\x91\xca\xeeE\xae\x06K\x00\xcc\xd3\xb1YP\xda:\x88;)CF^\x97+T\xceSo\x8dJ\xe7\x96\xfa\xbfq\x0eB\x8b|\xfd(\xa0\xd0H\xca\xda\xc4\x81L\xbb\xa2s\x93&\xc8\xeb\x0c\xd6&\x88\xb6\xc0$\xcf\xbb\xbd[\xebu}\xe9\x08\x8e\x863,yw\x09i\xa5\x89\xfc\xb3p\x90\x87v\x8f\xd3"\xbbB\xce\xbds\x0b &*\xd0\x9b=p\x1e$l\xcd\x87v\xa9\x17\x96\xb7\xcf\x0d\x92\xfb\x8e\x18\xa9\x98I\xd1\x9e\xfe`Dr!\xb9\x19\xed\xc2\xf51\xf19H\x88\x90$uT\x16\xad\xce\xf4\xf8i\x14d9\xfb\xa3\xb8\xbap@\xc7'\x1c\xbf\xc4VS\xface\xd0\xf3\x1c\x0e\x16\xf5k\x86XM\x18\xd4\xe4\x0d\x8e\xa5\x9d[\x91\xdcv$P?\xc6*\xfb\xd9\xb7\x9c\xb5\xd6\xe6\xd0\xd9\xe8\x19\x8b\x15qH\xad\xb7\xea\xd8Y\x88\xd4\x90\xbf\x16\xb3\xd9\xe9\xacYaT\xc8\x1c\xba\xca\xc1\xca\xe1\xb9 L\x8f:\x93\x89\xa5\xa0\xcc\xbf\xd3\xf6u\xa4u\x96mV", + ["CN=E-Tugra Certification Authority,OU=E-Tugra Sertifikasyon Merkezi,O=E-TuC49Fra EBG BiliC59Fim Teknolojileri ve Hizmetleri A.C59E.,L=Ankara,C=TR"] = "0\x82\x06K0\x82\x043\xa0\x03\x02\x01\x02\x02\x08jh>\x9cQ\x9b\xcbS0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\xb21\x0b0\x09\x06\x03U\x04\x06\x13\x02TR1\x0f0\x0d\x06\x03U\x04\x07\x0c\x06Ankara1@0>\x06\x03U\x04\x0a\x0c7E-Tu\xc4\x9fra EBG Bili\xc5\x9fim Teknolojileri ve Hizmetleri A.\xc5\x9e.1&0$\x06\x03U\x04\x0b\x0c\x1dE-Tugra Sertifikasyon Merkezi1(0&\x06\x03U\x04\x03\x0c\x1fE-Tugra Certification Authority0\x1e\x17\x0d130305120948Z\x17\x0d230303120948Z0\x81\xb21\x0b0\x09\x06\x03U\x04\x06\x13\x02TR1\x0f0\x0d\x06\x03U\x04\x07\x0c\x06Ankara1@0>\x06\x03U\x04\x0a\x0c7E-Tu\xc4\x9fra EBG Bili\xc5\x9fim Teknolojileri ve Hizmetleri A.\xc5\x9e.1&0$\x06\x03U\x04\x0b\x0c\x1dE-Tugra Sertifikasyon Merkezi1(0&\x06\x03U\x04\x03\x0c\x1fE-Tugra Certification Authority0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xe2\xf5?\x93\x05Q\x1e\x85bT^z\x0b\xf5\x18\x07\x83\xae~\xaf|\xf7\xd4\x8ak\xa5cC9\xb9K\xf7\xc3\xc6d\x89=\x94.T\x80R99\x07KK\xdd\x85\x07v\x87\xcc\xbf/\x95L\xcc}\xa7=\xbcG\x0f\x98p\xf8\x8c\x85\x1et\x8e\x92m\x1b@\xd1\x99\x0d\xbbun\xc8\xa9k\x9a\xc0\x841\xaf\xcaC\xcb\xeb+4\xe8\x8f\x97k\x01\x9b\xd5\x0eJ\x08\xaa[\x92t\x85C\xd3\x80\xae\xa1\x88[\xae\xb3\xea^\xcb\x16\x9awD\xc8\xa1\xf6Th\xce\xde\x8f\x97+\xba[@\x02\x0cd\x17\xc0\xb5\x93\xcd\xe1\xf1\x13f\xce\x0cy\xef\xd1\x91(\xab_\xa0\x12R0s\x19\x8e\x8f\xe1\x8c\x07\xa2\xc3\xbbJ\xf0\xea\x1f\x15\xa8\xee%\xcc\xa4F\xf8\x1b"\xef\xb3\x0eC\xba,$\xb8\xc5,\\xd4\x1c\xf8]d\xbd\xc3\x93^(\xa7?'\xf1\x8e\x1e\xd3*P\x05\xa3U\xd9\xcb\xe79S\xc0\x98\x9e\x8cTb\x8b&\xb0\xf7}\x8d|\xe4\xc6\x9efBU\x82G\xe7\xb2X\x8df\xf7\x07|.6\xe6P\x1c?\xdbC$\xc5\xbf\x86Gy\xb3y\x1c\xf7Z\xf4\x13\xecl\xf8?\xe2Y\x1f\x95\xeeB>\xb9\xad\xa82\x85I\x97F\xfeK1\x8fZ\xcb\xadtG\x1f\xe9\x91\xb7\xdf(\x04"\xa0\xd4\x0f]\xe2yO\xeal\x85\x86\xbd\xa8\xa6\xce\xe4\xfa\xc3\xe1\xb3\xae\xdeuI\xfe\x8f\xa7\xe2\x89\xc5g\xd7\x9dF\x13N1v;$\xb3\x9e\x11e\x86\xab\x7f\xef\x1d\xd4\xf8\xbc\xe7\xacZ\\xb7ZG\U\xceU\xb4"q[[\x0b\xf0\xcf\xdc\xa0ad\xea\xa9\xd7h\x0ac\xa7\xe0\x0d?\xa0\xaf\xd3\xaa\xd2~\xefQ\xa0\xe6Q+U\x92\x15\x17S\xcb\xb7f\x0efL\xf8\xf9uL\x90\xe7\x12p\xc7E\x02\x03\x01\x00\x01\xa3c0a0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14.\xe3\xdb\xb2I\xd0\x9cTy\\xfa'*\xfe\xccN\xd2\xe8NT0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14.\xe3\xdb\xb2I\xd0\x9cTy\\xfa'*\xfe\xccN\xd2\xe8NT0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00\x057:\xf4M\xb7E\xe2Eu$\x8f\xb6wR\xe8\x1c\xd8\x10\x93e\xf3\xf2Y\x06\xa4>\x1e)\xec]\xd1\xd0\xab|\xe0\x0a\x90Hx\xedN\x98\x03\x99\xfe(`\x91\x1d0\x1d\xb8c|\xa8\xe65\xb5\xfa\xd3av\xe6\xd6\x07K\xcai\x9a\xb2\x84zw\x93E\x17\x15\x9f$\xd0\x98\x13\x12\xff\xbb\xa0.\xfdNL\x87\xf8\xce\\xaa\x98\x1b\x05\xe0\x00FJ\x82\x80\xa53\x8b(\xdc\xed8\xd3\xdf\xe5>\xe9\xfe\xfbY\xdda\x84O\xd2T\x96\x13a\x13>\x8f\x80i\xbe\x93G\xb55C\xd2Z\xbb=\\xef\xb3BG\xcd;U\x13\x06\xb0\x09\xdb\xfdc\xf6:\x88\x0a\x99o~\xe1\xce\x1bSjDf#Q\x08{\xbc[R\xa2\xfd\x0678@a\x8fJ\x96\xb8\x907\xf8f\xc7x\x90\x00\x15.\x8b\xadQ5S\x07\xa8kh\xae\xf9N<\x07&\xcd\x08\x05p\xcc9?v\xbd\xa5\xd3g&\x01\x86\xa6S\xd2`;|C\x7fU\x8a\xbc\x95\x1a\xc1(9L\x1fC\xd2\x91\xf4rY\x8a\xb9V\xfc?\xb4\x9d\xdap\x9cvZ\x8cCP\xee\x8e0rM\xdf\xffI\xf7\xc6\xa9g\xd9m\xac\x02\x11\xe2:\x16%\xa7X\x08\xcboSA\x9cH8Gh3\xd1\xd7\xc7\x8f\xd4t!\xd4\xc3\x05\x90z\xff\xce\x96\x88\xb1\x15)]#\xab\xd0`\xa1\x12O\xde\xf4\x17\xcd2\xe5\xc9\xbf\xc8C\xad\xfd.\x8e\xf1\xaf\xe2\xf4\x98\xfa\x12\x1f \xd8\xc0\xa7\x0c\x85\xc5\x90\xf4;-\x96&\xb1,\xbeL\xab\xeb\xb1\xd2\x8a\xc9\xdbx\x13\x0f\x1e\x09\x9dm\x8f\x00\x9f\x02\xda\xc1\xfa\x1fzz\x09\xc4J\xe6\x88*\x97\x9f\x89\x8b\xfd7__:\xce8Y\x86K\xafq\x0b\xb4\xd8\xf2pO\x9f2\x13\xe3\xb0\xa7W\xe5\xda\xdaC\xcb\x844\xf2(\xc4\xeam\xf4*\xef\xc1kv\xda\xfb~\xbb\x85<\xd2S\xc2M\xbeq\xe1E\xd1\xfd#g\x0d\x13u\xfb\xcfeg"\x9d\xae\xb0\x09\xd1\x09\xff\x1d4\xbf\xfe#\x977\xd29\xfa=\x0d\x06\x0b\xb4\xdb;\xa3\xabo\\x1d\xb6~\xe8\xb3\x824\xed\x06\$", + ["CN=Amazon Root CA 2,O=Amazon,C=US"] = "0\x82\x05A0\x82\x03)\xa0\x03\x02\x01\x02\x02\x13\x06l\x9f\xd2\x965\x86\x9f\x0a\x0f\xe5\x86x\xf8[&\xbb\x8a70\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x00091\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Amazon1\x190\x17\x06\x03U\x04\x03\x13\x10Amazon Root CA 20\x1e\x17\x0d150526000000Z\x17\x0d400526000000Z091\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Amazon1\x190\x17\x06\x03U\x04\x03\x13\x10Amazon Root CA 20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xad\x96\x9f-\x9cJLJ\x81yQ\x99\xec\x8a\xcbk`Q\x13\xbcMm\x06\xfc\xb0\x08\x8d\xdd\x19\x10j\xc7&\x0c5\xd8\xc0o \x84\xe9\x94\xb1\x9b\x85\x03\xc3[\xdbJ\xe8\xc8\xf8\x90v\xd9[O\xe3L\xe8\x066M\xcc\x9a\xac=\x0c\x90+\x92\xd4\x06\x19`\xac7Dy\x85\x81\x82\xadZ7\xe0\x0d\xcc\x9d\xa6LRv\xeaC\x9d\xb7\x04\xd1P\xf6U\xe0\xd5\xd2\xa6I\x85\xe97\xe9\xca~\xae\\x95MH\x9a?\xae Zm\x88\x95\xd94\xb8R\x1aC\x90\xb0\xbfl\x05\xb9\xb6x\xb7\xea\xd0\xe4:<\x12Sb\xffJ\xf2{\xbe5\x05\xa9\x124\xe3\xf3dtb,=\x00IZ(\xfe2D\xbb\x87\xdde'\x02q;\xdaJ\xf7\x1f\xda\xcd\xf7!U\x90O\x0f\xec\xae\x82\xe1\x9fk\xd9E\xd3\xbb\xf0_\x87\xed<,9\x86\xda?\xde\xecrU\xeby\xa3\xad\xdb\xdd|\xb0\xba\x1c\xce\xfc\xdeO5v\xcf\x0f\xf8x\x1fj6QF'a[\xe9\x9e\xcf\xf0\xa2U}|%\x8ao/\xb4\xc5\xcf\x84.+\xfd\x0dQ\x10l\xfb_\x1b\xbc\x1b~\xc5\xae;\x98\x011\x92\xff\x0bW\xf4\x9a\xb2\xb9W\xe9\xab\xef\x0dv\xd1\xf0\xee\xf4\xce\x86\xa7\xe0n\xe9\xb4i\xa1\xdfi\xf63\xc6i.\x97\x13\x9e\xa5\x87\xb0W\x10\x817\xc9S\xb3\xbb\x7f\xf6\x92\xd1\x9c\xd0\x18\xf4\x92n\xda\x83O\xa6c\x99L\xa5\xfb^\xef!dz _ld\x85\x15\xcb7\xe9b\x0c\x0b*\x16\xdc\x01.2\xda>K\xf5\x9e:\xf6\x17@\x94\xef\x9e\x91\x08\x86\xfa\xbec\xa8Z3\xec\xcbtC\x95\xf9liR6\xc7)o\xfcU\x03\\x1f\xfb\x9f\xbdG\xeb\xe7IG\x95\x0bN\x89"\x09I\xe0\xf5a\x1e\xf1\xbf.\x8arn\x80Y\xffW:\xf9u2\xa3N_\xec\xed(b\xd9Ms\xf2\xcc\x81\x17`\xed\xcd\xeb\xdc\xdb\xa7\xca\xc5~\x02\xbd\xf2T\x08T\xfd\xb4-\x09,\x17TJ\x98\xd1T\xe1Qg\x08\xd2\xedn~o?\xd2-\x81Y)f\xcb\x909\x95\x11\x1et'\xfe\xdd\xeb\xaf\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb0\x0c\xf0L0\xf4\x05X\x02H\xfd3\xe5R\xafK\x84\xe3fR0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x00\x03\x82\x02\x01\x00\xaa\xa8\x80\x8f\x0ex\xa3\xe0\xa2\xd4\xcd\xe6\xf5\x98z;\xea\x00\x03\xb0\x97\x0e\x93\xbcZ\xa8\xf6,\x8cr\x87\xa9\xb1\xfc\x7fs\xfdcqx\xa5\x87Y\xcf0\xe1\x0d\x10\xb2\x13Zm\x82\xf5j\xe6\x80\x9f\xa0\x05\x0bh\xe4Gk\xc7j\xdf\xb6\xfdw2r\xe5\x18\xfa\x09\xf4\xa0\x93,]\xd2\x8cu\x85ve\x90\x0c\x03y\xb71#c\xadx\x83\x09\x86h\x84\xca\xff\xf9\xcf&\x9a\x92y\xe7\xcdK\xc5\xe7a\xa7\x17\xcb\xf3\xa9\x12\x93\x93k\xa7\xe8/S\x92\xc4`X\xb0\xcc\x02Q\x18[\x85\x8dbYc\xb6\xad\xb4\xde\x9a\xfb&\xf7\x00'\xc0]U7t\x99\xc9P\x7f\xe3Y.D\xe3,%\xee\xecL2w\xb4\x9f\x1a\xe9K] \xc5\xda\xfd\x1c\x87\x16\xc6C\xe8\xd4\xbb&\x9aEp^\xa9\x0b7S\xe2F{'\xfd\xe0F\xf2\x89\xb7\xccB\xb6\xcb(&n\xd9\xa5\xc9:\xc8A\x13`\xf7P\x8c\x15\xae\xb2m\x1a\x15\x1aWx\xe6\x92*\xd9e\x90\x82?l\x02\xaf\xae\x12:'\x966\x04\xd7\x1d\xa2\x80c\xa9\x9b\xf1\xe5\xba\xb4|\x14\xb0N\xc9\xb1\x1ft_8\xf6Q\xea\x9b\xfa,\xa2\x11\xd4\xa9-'\x1aE\xb1\xaf\xb2Nq\x0d\xc0XF\xd6i\x06\xcbS\xcb\xb3\xfekA\xcdA~}L\x0f|ryzY\xcd^J\x0e\xac\x9b\xa9\x98sy|\xb4\xf4\xcc\xb9\xb8\x07\x0c\xb2t\\xb8\xc7o\x88\xa1\x90\xa7\xf4\xaa\xf9\xbfg:\xf4\x1a\x15b\x1e\xb7\x9f\xbe=\xb1)\xafg\xa1\x12\xf2X\x10\x19S\x030\x1b\xb8\x1a\x89\xf6\x9c\xbd\x97\x03\x8e\xa3\x09\xf3\x1d\x8b!\xf1\xb4\xdf\xe4\x1c\xd1\x9fe\x02\x06\xea\\xd6\x13\xb3\x84\xef\xa2\xa5\\x8cw)\xa7h\xc0k\xae@\xd2\xa8\xb4\xea\xcd\xf0\x8dK8\x9c\x19\x9a\x1b(T\xb8\x89\x90\xef\xcau\x81>\x1e\xf2d$\xc7\x18\xafN\xffG\x9e\x07\xf65e\xa4\xd3\x0aV\xff\xf5\x17dl\xef\xa8"%I\x93\xb6\xdf\x00\x17\xdaX~]\xee\xc5\x1b\xb0\xd1\xd1_!\x10\xc7\xf9\xf3\xba\x02\x0a'\x07\xc5\xf1\xd6\xc7\xd3\xe0\xfb\x09`l", + ["CN=QuoVadis Root CA 2,O=QuoVadis Limited,C=BM"] = "0\x82\x05\xb70\x82\x03\x9f\xa0\x03\x02\x01\x02\x02\x02\x05\x090\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000E1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1b0\x19\x06\x03U\x04\x03\x13\x12QuoVadis Root CA 20\x1e\x17\x0d061124182700Z\x17\x0d311124182333Z0E1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1b0\x19\x06\x03U\x04\x03\x13\x12QuoVadis Root CA 20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\x9a\x18\xcaK\x94\x0d\x00-\xaf\x03)\x8a\xf0\x0f\x81\xc8\xaeL\x19\x85\x1d\x08\x9f\xab)D\x85\xf3/\x81\xad2\x1e\x90F\xbf\xa3\x86&\x1a\x1e\xfe~\x1c\x18:\\x9c`\x17*:t\x8330}aT\x11\xcb\xed\xab\xe0\xe6\xd2\xa2~\xf5ko\x18\xb7\x0a\x0b-\xfd\xe9>\xef\x0a\xc6\xb3\x10\xe9\xdc\xc2F\x17\xf8]\xfd\xa4\xda\xff\x9eIZ\x9c\xe63\xe6$\x96\xf7?\xba[+\x1cz5\xc2\xd6g\xfe\xabfP\x8bm(`+\xef\xd7`\xc3\xc7\x93\xbc\x8d6\x91\xf3\x7f\xf8\xdb\x11\x13\xc4\x9cwv\xc1\xae\xb7\x02j\x81z\xa9E\x83\xe2\x05\xe6\xb9V\xc1\x947\x8fHqc"\xec\x17e\x07\x95\x8aK\xdf\x8f\xc6Z\x0a\xe5\xb0\xe3_^k\x11\xab\x0c\xf9\x85\xebD\xe9\xf8\x04s\xf2\xe9\xfe\\x98\x8c\xf5s\xafk\xb4~\xcd\xd4\\x02+L9\xe1\xb2\x95\x95-B\x87\xd7\xd5\xb3\x90C\xb7l\x13\xf1\xde\xdd\xf6\xc4\xf8\x89?\xd1u\xf5\x92\xc3\x91\xd5\x8a\x88\xd0\x90\xec\xdcm\xde\x89\xc2eq\x96\x8b\x0d\x03\xfd\x9c\xbf[\x16\xac\x92\xdb\xea\xfey|\xad\xeb\xaf\xf7\x16\xcb\xdb\xcd%+\xe5\x1f\xfb\x9a\x9f\xe2Q\xcc:S\x0cH\xe6\x0e\xbd\xc9\xb4v\x06R\xe6\x11\x13\x85rc\x03\x04\xe0\x046+ \x19\x02\xe8t\xa7\x1f\xb6\xc9Vf\xf0u%\xdcg\xc1\x0ea`\x88\xb3>\xd1\xa8\xfc\xa3\xda\x1d\xb0\xd1\xb1#T\xdfDvm\xedA\xd8\xc1\xb2"\xb6S\x1c\xdf5\x1d\xdc\xa1w*1\xe4-\xf5\xe5\xe5\xdb\xc8\xe0\xff\xe5\x80\xd7\x0bc\xa0\xff3\xa1\x0f\xba,\x15\x15\xea\x97\xb3\xd2\xa2\xb5\xbe\xf2\x8c\x96\x1e\x1a\x8f\x1dl\xa4a7\xb9\x86s3\xd7\x97\x96\x9e#}\x82\xa4L\x81\xe2\xa1\xd1\xbag_\x95\x07\xa3'\x11\xee\x16\x10{\xbcEJL\xb2\x04\xd2\xab\xef\xd5\xfd\x0cQ\xcePj\x081\xf9\x91\xda\x0c\x8fd\\x03\xc3:\x8b ?n\x8dg=:\xd6\xfe}[\x88\xc9^\xfb\xcca\xdc\x8b3w\xd3D25\x09b\x04\x92\x16\x10\xd8\x9e'G\xfb;!\xe3\xf8\xeb\x1d[\x02\x03\x01\x00\x01\xa3\x81\xb00\x81\xad0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x1a\x84b\xbcHL3%\x04\xd4\xee\xd0\xf6\x03\xc4\x19F\xd1\x94k0n\x06\x03U\x1d#\x04g0e\x80\x14\x1a\x84b\xbcHL3%\x04\xd4\xee\xd0\xf6\x03\xc4\x19F\xd1\x94k\xa1I\xa4G0E1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1b0\x19\x06\x03U\x04\x03\x13\x12QuoVadis Root CA 2\x82\x02\x05\x090\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00>\x0a\x16M\x9f\x06[\xa8\xaeq]/\x05/g\xe6\x13E\x83\xc46\xf6\xf3\xc0&\x0c\x0d\xb5Gd]\xf8\xb4r\xc9F\xa5\x03\x18'U\x89x}v\xea\x964\x80\x17 \xdc\xe7\x83\xf8\x8d\xfc\x07\xb8\xda_M.g\xb2\x84\xfd\xd9D\xfcwP\x81\xe6|\xb4\xc9\x0d\x0brS\xf8v\x07\x07AG\x96\x0c\xfb\xe0\x82&\x93U\x8c\xfe"\x1f`e|_\xe7&\xb3\xf72\x90\x98P\xd47qU\xf6\x92!x\xf7\x95y\xfa\xf8-&\x87fV0w\xa67x3R\x10X\xae?a\x8e\xf2j\xb1\xef\x18~JYc\xca\x8d\xa2V\xd5\xa7/\xbcV\x1f\xcf9\xc1\xe2\xfb\x0a\xa8\x15,}Mzc\xc6l\x97D<\xd2o\xc3J\x17\x0a\xf8\x90\xd2W\xa2\x19Q\xa5-\x97A\xda\x07O\xa9P\xda\x90\x8d\x94F\xe1>\xf0\x94\xfd\x10\x008\xf5;\xe8@\xe1\xb4nV\x1a \xccoX\x8d\xed.E\x8f\xd6\xe9\x93?\xe7\xb1,\xdf:\xd6"\x8c\xdc\x84\xbb"o\xd0\xf8\xe4\xc69\xe9\x04\x88<\xc3\xba\xebUzm\x80\x99$\xf5l\x01\xfb\xf8\x97\xb0\x94[\xeb\xfd\xd2o\xf1wh\x0d5d#\xac\xb8U\xa1\x03\xd1MB\x19\xdc\xf8uYV\xa3\xf9\xa8Iy\xf8\xaf\x0e\xb9\x11\xa0|\xb7j\xed4\xd0\xb6&b8\x1a\x87\x0c\xf8\xe8\xfd.\xd3\x90\x7f\x07\x91*\x1d\xd6~\\x85\x83\x99\xb08\x08?\xe9^\xf95\x07\xe4\xc9bnW\x7f\xa7P\x95\xf7\xba\xc8\x9b\xe6\x8e\xa2\x01\xc5\xd6f\xbfya\xf3<\x1c\xe1\xb9\x82\]\xa0\xc3\xe9\xd8H\xbd\x19\xa2\x11\x14\x19n\xb2\x86\x1bh>H7\x1a\x88\xb7]\x96^\x9c\xc7\xef'b\x08\xe2\x91\x19\\xd2\xf1!\xdd\xba\x17B\x82\x97q\x81S1\xa9\x9f\xf6}b\xbfr\xe1\xa3\x93\x1d\xcc\x8a&Z\x098\xd0\xce\xd7\x0d\x80\x16\xb4x\xa5:\x87L\x8d\x8a\xa5\xd5F\x97\xf2,\x10\xb9\xbcT"\xc0\x01PiC\x9e\xf4\xb2\xefm\xf8\xec\xda\xf1\xe3\xb1\xef\xdf\x91\x8fT*\x0b%\xc1&\x19\xc4R\x10\x05e\xd5\x82\x10\xea\xc21\xcd.", + ["CN=GeoTrust Global CA,O=GeoTrust Inc.,C=US"] = "0\x82\x03T0\x82\x02<\xa0\x03\x02\x01\x02\x02\x03\x024V0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000B1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1\x1b0\x19\x06\x03U\x04\x03\x13\x12GeoTrust Global CA0\x1e\x17\x0d020521040000Z\x17\x0d220521040000Z0B1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1\x1b0\x19\x06\x03U\x04\x03\x13\x12GeoTrust Global CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xda\xcc\x18c0\xfd\xf4\x17#\x1aV~[\xdf\x9c&d\xcc\xdf\xce\x83\x19q\xcaN\xe6\xd4\xd5{\xa9\x19\xcdU\xde\xc8\xec\xd2^8S\xe5\O\x8c-\xfeP#6\xfcf\xe6\xcb\x8e\xa49\x19\x00\xb7\x95\x029\x91\x0b\x0e\xfe8.\xd1\x1d\x05\x9a\xf6M>o\x0f\x07\x1d\xaf,\x1e\x8f`9\xe2\xfa6S\x139\xd4^&+\xdb=\xa8\x14\xbd2\xeb\x18\x03(R\x04q\xe5\xab3=\xe18\xbb\x076\x84b\x9cy\xea\x160\xf4_\xc0+\xe8qk\xe4\xf9\x02\x03\x01\x00\x01\xa3S0Q0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xc0z\x98h\x8d\x89\xfb\xab\x05d\x0c\x11}\xaa}e\xb8\xca\xccN0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xc0z\x98h\x8d\x89\xfb\xab\x05d\x0c\x11}\xaa}e\xb8\xca\xccN0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x005\xe3)j\xe5/]T\x8e)P\x94\x9f\x99\x1a\x14\xe4\x8fx*b\x94\xa2'g\x9e\xd0\xcf\x1a^G\xe9\xc1\xb2\xa4\xcf\xddA\x1a\x05N\x9bK\xeeJoUR\xb3$\xa17\x0a\xebdv*.,\xf3\xfd;u\x90\xbf\xfaq\xd8\xc7=7\xd2\xb5\x05\x95b\xb9\xa6\xde\x89=6{8wH\x97\xac\xa6 \x8f.\xa6\xc9\x0c\xc2\xb2\x99E\x00\xc7\xce\x11Q""\xe0\xa5\xea\xb6\x15H\x09d\xea^Ot\xf7\x05>\xc7\x8aR\x0c\xdb\x15\xb4\xbdm\x9b\xe5\xc6\xb1Th\xa9\xe3i\x90\xb6\x9a\xa5\x0f\xb8\xb9? }\xaeJ\xb5\xb8\x9c\xe4\x1d\xb6\xab\xe6\x94\xa5\xc1\xc7\x83\xad\xdb\xf5'\x87\x0e\x04l\xd5\xff\xdd\xa0]\xed\x87R\xb7+\x15\x02\xae9\xa6jt\xe9\xda\xc4\xe7\xbcM4\x1e\xa9\M3_\x92\x09/\x88f]w\x97\xc7\x1dv\x13\xa9\xd5\xe5\xf1\x16\x09\x115\xd5\xac\xdb$qp,\x98V\x0b\xd9\x17\xb4\xd1\xe3Q+^u\xe8\xd5\xd0\xdcO4\xed\xc2\x05f\x80\xa1\xcb\xe63", + ["CN=LuxTrust Global Root 2,O=LuxTrust S.A.,C=LU"] = "0\x82\x05\xc30\x82\x03\xab\xa0\x03\x02\x01\x02\x02\x14\x0a~\xa6\xdfKD\x9e\xdaj$\x85\x9e\xe6\xb8\x15\xd3\x16\x7f\xbb\xb10\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000F1\x0b0\x09\x06\x03U\x04\x06\x13\x02LU1\x160\x14\x06\x03U\x04\x0a\x0c\x0dLuxTrust S.A.1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16LuxTrust Global Root 20\x1e\x17\x0d150305132157Z\x17\x0d350305132157Z0F1\x0b0\x09\x06\x03U\x04\x06\x13\x02LU1\x160\x14\x06\x03U\x04\x0a\x0c\x0dLuxTrust S.A.1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16LuxTrust Global Root 20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xd7\x85\x97\xbf\x11\x98\xe9\xf0b\x83L<\x87\xf9Sj7\x0b\xf2\x0f<\x87\xceo\xdc&)\xbd\xc5\x89\xba\xc9\x83=\xf7\xee\xca[\xc6mIs\xb4\xc9F\xa3\x1b4\x13?\xc1\x89EW\xf4\xd9\xb1\xfb6eK\xfb\x08\xe2Hq\x11\xc8n;\x9e\x9d\xdf\x89e7\xa6\x85\xf6;D\x18\xb6\xc670bD\x92\x97i}B0$\xe4\x0d\x0c\x89kc\xde\xc5\xe1\xdfN\xa9\x14lS\xe0a\xce\xf6\x17/\x1d<\xbd\xe6"L\x1d\x93\xf5\x10\xc4\xa1v\xecj\xde\xc5l\xdf\x96\xb4V@B\xc0b\x920\xa1-\x15\x94\xa0\xd2 \x06\x09njm\xe5\xeb\xb7\xbe\xd4\xf0\xf1\x15|\x8b\xe6N\xba\x13\xccK'^\x99<\x17]\x8f\x81\x7f3=O\xd3?\x1b\xec\?\xf0f\x8f\x9c\x16\x11`\x8f\x9e\x89og\xbe\xe0GZ;\x0c\x9ag\x8b\xcfF\xc6\xae8\xa3\xf2\xa7\xbc\xe6\xd6\x85k3$p"K\xcb\x08\x9b\xbb\xc8\xf8\x02)\x1d\xbe \x0cF\xbfk\x87\x9b\xb3*fB5Fl\xaa\xba\xad\xf9\x98{\xe9PU\x141\xbf\xb1\xda-\xed\x80\xadh$\xfbi\xab\xd8q\x130\xe6g\xb3\x87@\xfd\x89~\xf2C\xd1\x11\xdf/e/d\xce_\x14\xb9\xb1\xbf1\xbd\x87xZYe\x88\xaa\xfcY2H\x86\xd6L\xb9)K\x95\xd3v\xf3w%mB\x1c8\x83M\xfd\xa3_\x9b\x7f-\xacy\x1b\x0eB1\x97c\xa4\xfb\x8ai\xd5"\x0d4\x900.\xa8\xb4\xe0m\xb6\x94\xac\xbc\x8bN\xd7p\xfc\xc58\x8ed%\xe1M9\x90\xce\xc9\x87\x84Xq\x02\x03\x01\x00\x01\xa3\x81\xa80\x81\xa50\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0B\x06\x03U\x1d \x04;0907\x06\x07+\x81+\x01\x01\x01\x0a0,0*\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16\x1ehttps://repository.luxtrust.lu0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xff\x18(v\xf9H\x05,\xa1\xae\xf1+\x1b+\xb2S\xf8K|\xb30\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xff\x18(v\xf9H\x05,\xa1\xae\xf1+\x1b+\xb2S\xf8K|\xb30\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00j\x19\x14\xedny\xc1,\x87\xd4\x0dp~\xd7\xf6x\xc9\x0b\x04N\xc4\xb1\xce\x93p\xfe\xb0T\xc02\xcd\x990d\x17\xbf\x0f\xe5\xe23\xfd\x076@r\x0e\x1a\xb6jY\xd6\x00\xe5h \xdd.r\x0d\x1fjd1 \x84}I\xa6Z7\xebE\xc9\x85\xf5\xd4\xc7\x17\x99\x07\xe6\x9bU\xe4\x0c\xe8\xa9\xb4\xce\x8c[\xb5\x11\\xcf\x8a\x0e\x0d\xd6\xacw\x81\xfe2\x9c$\x9er\xceT\xf3\xd0o\xa2V\xd6\xec\xc37,eX\xbeW\x00\x1a\xf25\xfa\xeb{1]\xc2\xc1\x12=\x96\x81\x88\x96\x89\xc1Y\z\xe6\x7fp4\xe7\x83\xe2\xb1\xe1\xe1\xb8X\xef\xd4\x95\xe4`\x9c\xf0\x96\x97r\x8c\xeb\x84\x02.e\x8f\xa4\xb7\xd2\x7fg\xdd\xc8\xd3\x9e\\xaa\xa9\xa4\xa0%\x14\x06\x9b\xecO~-\x0b\x7f\x1du\xf13\xd8\xed\xce\xb8um>[\xb9\x98\x1d1\x0dV\xd8C\x0f0\x91\xb2\x04k\xddV\xbe\x95\x80Ug\xbe\xd8\xcd\x83\xd9\x18\xee.\x0f\x86-\x92\x9ep\x13\xec\xdeQ\xc9Cx\x02\xa5M\xc8\xf9_\xc4\x91XF\x16wZt\xaa@\xbc\x07\x9f0\xb9\xb1\xf7\x12\x17\xdd\xe3\xff$@\x1dzj\xd1O\x18\x0a\xaa\x90\x1d\xeb@\x1e\xdf\xa1\x1eD\x92\x10\x9a\xf2\x8d\xe1\xd1KF\x9e\xe8EB\x97\xeaE\x99\xf3\xecf\xd5\x02\xfa\xf2\xa6J$\xaa\xde\xce\xb9\xca\xf9?\x93o\xf9\xa3\xba\xea\xa5>\x99\xad\xfd\xff{\x99\xf5e\xee\xf0Y(g\xd7\x90\x95\xa4\x13\x84\xa9\x84\xc1\xe8\xce\xceu\x93c\x1a\xbc<\xea\xd5d\x1f-*\x129\xc6\xc3Z2\xedG\x91\x16\x0e\xbc8\xc1P\xde\x8f\xca*\x904\x1c\xeeA\x94\x9c^\x19.\xf8EI\x99t\x91\xb0\x04o\xe3\x04Z\xb1\xab*\xab\xfe\xc7\xd0\x96\xb6\xda\xe1Jd\x06n`M\xbdBN\xffx\xda$\xca\x1b\xb4\xd7\x969l\xae\xf1\x0e\xaa\xa7}H\x8b L\xcfd\xd6\xb8\x97F\xb0N\xd1*V:\xa0\x93\xbd\xaf\x80$\xe0\x0a~\xe7\xca\xd5\xca\xe8\x85U\xdc6*\xe1\x94h\x93\xc7frD\x0f\x80!2l%\xc7#\x80\x83\x0a\xeb", + ["CN=Visa eCommerce Root,OU=Visa International Service Association,O=VISA,C=US"] = "0\x82\x03\xa20\x82\x02\x8a\xa0\x03\x02\x01\x02\x02\x10\x13\x865M\x1d?\x06\xf2\xc1\xf9e\x05\xd5\x90\x1cb0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000k1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0d0\x0b\x06\x03U\x04\x0a\x13\x04VISA1/0-\x06\x03U\x04\x0b\x13&Visa International Service Association1\x1c0\x1a\x06\x03U\x04\x03\x13\x13Visa eCommerce Root0\x1e\x17\x0d020626021836Z\x17\x0d220624001612Z0k1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0d0\x0b\x06\x03U\x04\x0a\x13\x04VISA1/0-\x06\x03U\x04\x0b\x13&Visa International Service Association1\x1c0\x1a\x06\x03U\x04\x03\x13\x13Visa eCommerce Root0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xafW\xdeV\x1en\xa1\xda`\xb1\x94'\xcb\x17\xdb\x07?\x80\x85O\xc8\x9c\xb6\xd0\xf4oO\xcf\x99\xd8\xe1\xdb\xc2H\:\xac93\xc7\x1fj\x8b&=+5\xf5H\xb1\x91\xc1\x02N\x04\x96\x91{\xb03\xf0\xb1\x14N\x11o\xb5@\xaf\x1bE\xa5J\xef~\xb6\xac\xf2\xa0\x1fX?\x12F`<\x8d\xa1\xe0}\xcfW>3\x1e\xfbG\xf1\xaa\x15\x97\x07Uf\xa5\xb5-.\xd8\x80Y\xb2\xa7\x0d\xb7F\xec!c\xff5\xab\xa5\x02\xcf*\xf4L\xfe{\xf5\x94]\x84M\xa8\xf2`\x8f\xdb\x0e%<\x9fsq\xcf\x94\xdfJ\xea\xdb\xdfr8\x8c\xf3\x96\xbd\xf1\x17\xbc\xd2\xba;EZ\xc6\xa7\xf6\xc6\x17\x8b\x01\x9d\xfc\x19\xa8*\x83\x16\xb8:H\xfeN>\xa0\xab\x06\x19\xe9S\xf3\x80\x13\x07\xed-\xbf?\x0a \x84^\xed\xb2V(\xa7\xf8\xe0\xb9@q7\xc5\xcbG\x0e\x97*h\xc0"\x95b\x15\xdbG\xd9\xf5\xd0+\xff\x82K\xc9\xad>\xdeL\xdb\x90\x80P?\x09\x8a\x84\x00\xec0\x0a=\x18\xcd\xfb\xfd*Y\x9a#\x95\x17,E\x9e\x1fnCym\x0c\\x98\xfeH\xa7\xc5#G\^\xfdn\xe7\x1e\xb4\xf6hE\xd1\x86\x83[\xa2\x8a\x8d\xb1\xe3)\x80\xfe%q\x88\xad\xbe\xbc\x8f\xacR\x96K\xaaQ\x8d\xe4\x131\x19\xe8NM\x9f\xdb\xac\xb3j\xd5\xbc9Tq\xcazz\x7f\x90\xdd}\x1d\x80\xd9\x81\xbbY&\xc2\x11\xfe\xe6\x93\xe2\xf7\x80\xe4e\xfb47\x0e)\x80pM\xaf8\x86.\x9e\x7fW\xaf\x9e\x17\xae\xeb\x1c\xcb(!_\xb6\x1c\xd8\xe7\xa2\x04"\xf9\xd3\xda\xd8\xcb\x02\x03\x01\x00\x01\xa3\x81\xb00\x81\xad0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0+\x06\x03U\x1d\x10\x04$0"\x80\x0f20061127202342Z\x81\x0f20261127205342Z0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14h\x90\xe4g\xa4\xa6S\x80\xc7\x86f\xa4\xf1\xf7KC\xfb\x84\xbdm0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14h\x90\xe4g\xa4\xa6S\x80\xc7\x86f\xa4\xf1\xf7KC\xfb\x84\xbdm0\x1d\x06\x09*\x86H\x86\xf6}\x07A\x00\x04\x100\x0e\x1b\x08V7.1:4.0\x03\x02\x04\x900\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x93\xd40\xb0\xd7\x03 *\xd0\xf9c\xe8\x91\x0c\x05 \xa9_\x19\xca{rN\xd4\xb1\xdb\xd0\x96\xfbTZ\x19,\x0c\x08\xf7\xb2\xbc\x85\xa8\x9d\x7fm;R\xb3*\xdb\xe7\xd4\x84\x8cc\xf6\x0f\xcb&\x01\x91Pl\xf4_\x14\xe2\x93t\xc0\x13\x9e0:P\xe3\xb4`\xc5\x1c\xf0"D\x8dqG\xac\xc8\x1a\xc9\xe9\x9b\x9a\x00`\x13\xffp~_\x11MI\x1b\xb3\x15R{\xc9T\xda\xbf\x9d\x95\xafk\x9a\xd8\x9e\xe9\xf1\xe4C\x8d\xe2\x11D:\xbf\xaf\xbd\x83BsR\x8b\xaa\xbb\xa7)\xcf\xf5d\x1c\x0aM\xd1\xbc\xaa\xac\x9f*\xd0\xff\x7f\x7f\xda}\xea\xb1\xed0%\xc1\x84\xda4\xd2[x\x83V\xec\x9c6\xc3&\xe2\x11\xf6gI\x1d\x92\xab\x8c\xfb\xeb\xffz\xee\x85J\xa7P\x80\xf0\xa7\J\x94._\x05\x99Y>\xdd&\xf5$\xc9\x11\xa7Z\xa3L@\x1fF\xa1\x99\xb5\xa7:Qn\x86;\x9e}r\xa7\x12\x05xY\xed>Qx\x15\x0b\x03\x8f\x8d\xd0/\x05\xb2>{J\x1cKs\x05\x12\xfc\xc6\xea\xe0P\x13|C\x93t\xb3\xcat\xe7\x8e\x1f\x01\x08\xd00\xd4[q6\xb4\x07\xba\xc100\H\xb7\x82;\x98\xa6}`\x8a\xa2\xa3)\x82\xcc\xba\xbd\x83\x04\x1b\xa2\x83\x03A\xa1\xd6\x05\xf1\x1b\xc2\xb6\xf0\xa8|\x86;F\xa8H*\x88\xdcv\x9av\xbf\x1fj\xa5=\x19\x8f\xeb8\xf3d\xde\xc8+\x0d\x0a(\xff\xf7\xdb\xe2\x15B\xd4"\xd0']\xe1y\xfe\x18\xe7p\x88\xadN\xe6\xd9\x8b:\xc6\xdd'Qn\xff\xbcd\xf53CO\x02\x03\x01\x00\x01\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14y\xb4Y\xe6{\xb6\xe5\xe4\x01s\x80\x08\x88\xc8\x1aX\xf6\xe9\x9bn0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00U\x1fX\xa9\xbc\xb2\xa8P\xd0\x0c\xb1\xd8\x1ai ')\x08\xacau\\x8an\xf8\x82\xe5i/\xd5\xf6VK\xb9\xb8s\x10Y\xd3!\x97~\xe7Lq\xfb\xb2\xd2`\xad9\xa8\x0b\xea\x17!V\x85\xf1P\x0eY\xeb\xce\xe0Y\xe9\xba\xc9\x15\xef\x86\x9d\x8f\x84\x80\xf6\xe4\xe9\x91\x90\xdc\x17\x9bb\x1bE\xf0f\x95\xd2|o\xc2\xea;\xef\x1f\xcf\xcb\xd6\xae'\xf1\xa9\xb0\xc8\xae\xfd}~\x9a\xfa"\x04\xeb\xff\xd9\x7f\xea\x91+"\xb1\x17\x0e\x8f\xf2\x8a4[X\xd8\xfc\x01\xc9T\xb9\xb8&\xcc\x8a\x883\x89L-\x84<\x82\xdf\xee\x96W\x05\xba,\xbb\xf7\xc4\xb7\xc7N;\x82\xbe1\xc8"ss\x92\xd1\xc2\x80\xa499\x103#\x82L<\x9f\x86\xb2U\x98\x1d\xbe)\x86\x8c"\x9b\x9e\xe2k;W:\x82pM\xdc\x09\xc7\x89\xcb\x0a\x07Ml\xe8]\x8e\xc9\xef\xce\xab\xc7\xbb\xb5+NE\xd6J\xd0&\xcc\xe5r\xca\x08j\xa5\x95\xe3\x15\xa1\xf7\xa4\xed\xc9,_\xa5\xfb\xff\xac(\x02.\xbe\xd7{\xbb\xe3q{\x90\x16\xd3\x07^FS|7\x07B\x8c\xd3\xc4\x96\x9c\xd5\x99\xb5*\xe0\x95\x1a\x80H\xaeL9\x07\xce\xccG\xa4R\x95+\xba\xb8\xfb\xad\xd23S}\xe5\x1dMm\xd5\xa1\xb1\xc7Bo\xe6@'5\\xa3(\xb7\x07\x8d\xe7\x8d3\x90\xe7#\x9f\xfbP\x9cylF\xd5\xb4\x15\xb3\x96n~\x9b\x0c\x96:\xb8R-?\xd6[\xe1\xfb\x08\xc2\x84\xfe$\xa8\xa3\x89\xda\xacj\xe1\x18*\xb1\xa8Ca[\xd3\x1f\xdc;\x8dv\xf2-\xe8\x8du\xdf\x173l=S\xfb{\xcbA_\xff\xdc\xa2\xd0a8\xe1\x96\xb8\xac]\x8b7\xd7u\xd53\xc0\x99\x11\xae\x9dA\xc1ru\x84\xbe\x02AB_g$H\x94\xd1\x9b'\xbe\x07?\xb9\xb8O\x81tQ\xe1z\xb7\xed\x9d#\xe2\xbe\xe0\xd5(\x04\x13<1\x03\x9e\xddzl\x8f\xc6\x07\x18\xc6\x7f\xdeG\x8e?(\x9e\x04\x06\xcf\xa5T4w\xbd\xec\x89\x9b\xe9\x17C\xdf[\xdb_\xfe\x8e\x1eW\xa2\xcd@\x9d~b"\xda\xde\x18'", + ["CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US"] = "0\x82\x03\xc50\x82\x02\xad\xa0\x03\x02\x01\x02\x02\x10\x02\xac\&j\x0b@\x9b\x8f\x0by\xf2\xaeF%w0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000l1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cDigiCert Inc1\x190\x17\x06\x03U\x04\x0b\x13\x10www.digicert.com1+0)\x06\x03U\x04\x03\x13"DigiCert High Assurance EV Root CA0\x1e\x17\x0d061110000000Z\x17\x0d311110000000Z0l1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cDigiCert Inc1\x190\x17\x06\x03U\x04\x0b\x13\x10www.digicert.com1+0)\x06\x03U\x04\x03\x13"DigiCert High Assurance EV Root CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xc6\xcc\xe5s\xe6\xfb\xd4\xbb\xe5--2\xa6\xdf\xe5\x81?\xc9\xcd%I\xb6q*\xc3\xd5\x944g\xa2\x0a\x1c\xb0_i\xa6@\xb1\xc4\xb7\xb2\x8f\xd0\x98\xa4\xa9AY:\xd3\xdc\x94\xd6<\xdbt8\xa4J\xccM%\x82\xf7J\xa5S\x128\xee\xf3Imq\x91~c\xb6\xab\xa6_\xc3\xa4\x84\xf8ObQ\xbe\xf8\xc5\xec\xdb8\x92\xe3\x06\xe5\x08\x91\x0c\xc4(AU\xfb\xcbZ\x89\x15~q\xe85\xbfMr\x09=\xbe:8P[w1\x1b\x8d\xb3\xc7$E\x9a\xa7\xacm\x00\x14Z\x04\xb7\xba\x13\xebQ\x0a\x98AA"Nea\x87\x81AP\xa6y\\x89\xde\x19JW\xd5.\xe6]\x1cS,~\x98\xcd\x1a\x06\x16\xa4hs\xd04\x04\x13\\xa1q\xd3Z|U\xdb^d\xe17\x870V\x04\xe5\x11\xb4)\x80\x12\xf1y9\x88\xa2\x02\x11|'f\xb7\x88\xb7x\xf2\xca\x0a\xa88\xab\x0ad\xc2\xbff]\x95\x84\xc1\xa1%\x1e\x87]\x1aP\x0b \x12\xccA\xbbn\x0bQ8\xb8K\xcb\x02\x03\x01\x00\x01\xa3c0a0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb1>\xc3i\x03\xf8\xbfG\x01\xd4\x98&\x1a\x08\x02\xefcd+\xc30\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xb1>\xc3i\x03\xf8\xbfG\x01\xd4\x98&\x1a\x08\x02\xefcd+\xc30\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x1c\x1a\x06\x97\xdc\xd7\x9c\x9f<\x88f\x06\x08W!\xdb!G\xf8*g\xaa\xbf\x182v@\x10W\xc1\x8a\xf3z\xd9\x11e\x8e5\xfa\x9e\xfcE\xb5\x9e\xd9L1K\xb8\x91\xe8C,\x8e\xb3x\xce\xdb\xe3Syq\xd6\xe5!\x94\x01\xdaU\x87\x9a$d\xf6\x8af\xcc\xde\x9c7\xcd\xa84\xb1i\x9b#\xc8\x9ex"+pC\xe3UG1a\x19\xefX\xc5\x85/N0\xf6\xa01\x16#\xc8\xe7\xe2e\x163\xcb\xbf\x1a\x1b\xa0=\xf8\xca^\x8b1\x8b`\x08\x89-\x0c\x06\R\xb7\xc4\xf9\x0a\x98\xd1\x15_\x9f\x12\xbe|6c8\xbdD\xa4\x7f\xe4&+\x0a\xc4\x97i\x0d\xe9\x8c\xe2\xc0\x10W\xb8\xc8v\x12\x91U\xf2Hi\xd8\xbc*\x02[\x0fD\xd4 1\xdb\xf4\xbap&]\x90`\x9e\xbcK\x17\x09/\xb4\xcb\x1eCh\xc9\x07'\xc1\xd2\\xf7\xea!\xb9h\x12\x9c<\x9c\xbf\x9e\xfc\x80\\x9bc\xcd\xecG\xaa%'g\xa07\xf3\x00\x82}T\xd7\xa9\xf8\xe9.\x13\xa3w\xe8\x1fJ", + ["CN=Cybertrust Global Root,O=Cybertrust, Inc"] = "0\x82\x03\xa10\x82\x02\x89\xa0\x03\x02\x01\x02\x02\x0b\x04\x00\x00\x00\x00\x01\x0f\x85\xaa-H0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000;1\x180\x16\x06\x03U\x04\x0a\x13\x0fCybertrust, Inc1\x1f0\x1d\x06\x03U\x04\x03\x13\x16Cybertrust Global Root0\x1e\x17\x0d061215080000Z\x17\x0d211215080000Z0;1\x180\x16\x06\x03U\x04\x0a\x13\x0fCybertrust, Inc1\x1f0\x1d\x06\x03U\x04\x03\x13\x16Cybertrust Global Root0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xf8\xc8\xbc\xbd\x14Pf\x13\xff\xf0\xd3y\xec#\xf2\xb7\x1a\xc7\x8e\x85\xf1\x12s\xa6\x19\xaa\x10\xdb\x9c\xa2etZw>Q}V\xf6\xdc#\xb6\xd4\xed_X\xb17M\xd5I\x0en\xf5j\x87\xd6\xd2\x8c\xd2'\xc6\xe2\xff6\x9f\x98e\xa0\x13N\xc6*d\x9b\xd5\x90\x12\xcf\x14\x06\xf4;\xe3\xd4(\xbe\xe8\x0e\xf8\xabNH\x94m\x8e\x951\x10\\xed\xa2-\xbd\xd5:m\xb2\x1c\xbb`\xc0FK\x01\xf5I\xae~F\x8a\xd0t\x8d\xa1\x0c\x02\xce\xee\xfc\xe7\x8f\xb8kf\xf3\x7fD\x00\xbff%\x14+\xdd\x100\x1d\x07\x96?M\xf6k\xb8\x8f\xb7{\x0c\xa58\xeb\xdeG\xdb\xd5]9\xfc\x88\xa7\xf3\xd7*t\xf1\xe8Z\xa2;\x9fP\xba\xa6\x8cE5\xc2Pe\x95\xdcc\x82\xef\xdd\xbfwM\x9cb\xc9cs\x16\xd0)\x0fI\xa9H\xf0\xb3\xaa\xb7l\xc5\xa709@]\xae\xc4\xe2]&S\xf0\xce\x1c#\x08a\xa8\x94\x19\xba\x04b@\xec\x1f8pw\x12\x06q\xa70\x18]%'\xa5\x02\x03\x01\x00\x01\xa3\x81\xa50\x81\xa20\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb6\x08{\x0dz\xcc\xac L\x86V2^\xcf\xabn\x85-pW0?\x06\x03U\x1d\x1f\x0480604\xa02\xa00\x86.http://www2.public-trust.com/crl/ct/ctroot.crl0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xb6\x08{\x0dz\xcc\xac L\x86V2^\xcf\xabn\x85-pW0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00V\xef\x0a#\xa0TN\x95\x97\xc9\xf8\x89\xdaE\xc1\xd4\xa3\x00%\xf4\x1f\x13\xab\xb7\xa3\x85Xi\xc20\xad\xd8\x15\x8a-\xe3\xc9\xcd\x81Z\xf8s#Z\xa7|\x05\xf3\xfd";\x0e\xd1\x06\xc4\xdb6Ls\x04\x8e\xe5\xb0"\xe4\xc5\xf3.\xa5\xd9#\xe3\xb8NJ \xa7n\x02$\x9f"`g{\x8b\x1dr\x09\xc51\\xe9y\x9f\x80G=\xad\xa1\x0b\x07\x14=G\xff\x03i\x1a\x0c\x0bD\xe7c%\xa7\x7f\xb2\xc9\xb8v\x84\xed#\xf6}\x07\xabE~\xd3\xdf\xb3\xbf\xe9\x8a\xb6\xcd\xa8\xa2g+R\xd5\xb7e\xf09Lc\xa0\x91y\x93R\x0fT\xdd\x83\xbb\x9f\xd1\x8f\xa7Ss\xc3\xcb\xff0\xec|\x04\xb8\xd8D\x1f\x93_q\x09"\xb7n>\xea\x1c\x03N\x9d\x1a a\xfb\x817\xec^\xfc\x0aE\xab\xd7\xe7\x17U\xd0\xa0\xea`\x9b\xa6\xf6\xe3\x8c[)\xc2\x06`\x14\x9d-\x97L\xa9\x93\x15\x9da\xc4\x01_H\xd6X\xbdV1\x12N\x11\xc8!\xe0\xb3\x11\x91e\xdb\xb4\xa6\x888\xceU", + ["CN=SSL.com Root Certification Authority ECC,O=SSL Corporation,L=Houston,ST=Texas,C=US"] = "0\x82\x02\x8d0\x82\x02\x14\xa0\x03\x02\x01\x02\x02\x08u\xe6\xdf\xcb\xc1h[\xa80\x0a\x06\x08*\x86H\xce=\x04\x03\x020|1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0e0\x0c\x06\x03U\x04\x08\x0c\x05Texas1\x100\x0e\x06\x03U\x04\x07\x0c\x07Houston1\x180\x16\x06\x03U\x04\x0a\x0c\x0fSSL Corporation110/\x06\x03U\x04\x03\x0c(SSL.com Root Certification Authority ECC0\x1e\x17\x0d160212181403Z\x17\x0d410212181403Z0|1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0e0\x0c\x06\x03U\x04\x08\x0c\x05Texas1\x100\x0e\x06\x03U\x04\x07\x0c\x07Houston1\x180\x16\x06\x03U\x04\x0a\x0c\x0fSSL Corporation110/\x06\x03U\x04\x03\x0c(SSL.com Root Certification Authority ECC0v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04En\xa9P\xc4\xa6#6\x9e_(\x8d\x17\xcb\x96"d?\xdcz\x8e\x1d\xcc\x08\xb3\xa2q$\xba\x8eI\xb9\x04\x1bG\x96X\xab-\x95\xc8\xed\x9e\x085\xc8'\xeb\x89\x8cSX\xebb\x8a\xfe\xf0[\x0fk1RcA;\x89\xcd\xec\xec\xb6\x8d\x19\xd34\x07\xdc\xbb\xc6\x06\x7f\xc2E\x95\xec\xcb\x7f\xa8#\xe0\x09\xe9\x81\xfa\xf3G\xd3\xa3c0a0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x82\xd1\x85s0\xe75\x04\xd3\x8e\x02\x92\xfb\xe5\xa4\xd1\xc4!\xe8\xcd0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\x82\xd1\x85s0\xe75\x04\xd3\x8e\x02\x92\xfb\xe5\xa4\xd1\xc4!\xe8\xcd0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0a\x06\x08*\x86H\xce=\x04\x03\x02\x03g\x000d\x020o\xe7\xebY\x11\xa4`\xcfa\xb0\x96{\xed\x05\xf9/\x13\x91\xdc\xed\xe5\xfcPk\x11FF\xb3\x1c!\x00b\xbb\xbe\xc3\xe7\xe8\xcd\x07\x99\xf9\x0d\x0b]r>\xc4\xaa\x020\x1f\xbc\xba\x0b\xe20$\xfb|m\x80U\x0a\x99>\x80\x0d3\xe5f\xa3\xb3\xa3\xbb\xa5\xd5\x8b\x8f\x09,\xa6]~\xe2\xf0\x07\x08hm\xd2|in_\xdf\xe5je", + ["CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1,OU=Kamu Sertifikasyon Merkezi - Kamu SM,O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK,L=Gebze - Kocaeli,C=TR"] = "0\x82\x04c0\x82\x03K\xa0\x03\x02\x01\x02\x02\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\xd21\x0b0\x09\x06\x03U\x04\x06\x13\x02TR1\x180\x16\x06\x03U\x04\x07\x13\x0fGebze - Kocaeli1B0@\x06\x03U\x04\x0a\x139Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK1-0+\x06\x03U\x04\x0b\x13$Kamu Sertifikasyon Merkezi - Kamu SM1604\x06\x03U\x04\x03\x13-TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 10\x1e\x17\x0d131125082555Z\x17\x0d431025082555Z0\x81\xd21\x0b0\x09\x06\x03U\x04\x06\x13\x02TR1\x180\x16\x06\x03U\x04\x07\x13\x0fGebze - Kocaeli1B0@\x06\x03U\x04\x0a\x139Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK1-0+\x06\x03U\x04\x0b\x13$Kamu Sertifikasyon Merkezi - Kamu SM1604\x06\x03U\x04\x03\x13-TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 10\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xafu03\xaa\xbbk\xd3\x99,\x127\x84\xd9\x8d{\x97\x80\xd3n\xe7\xff\x9bP\x95>\x90\x95VB\xd7\x19|&\x84\x8d\x92\xfa\x01\x1d:\x0f\xe2d8\xb7\x8c\xbc\xe8\x88\xf9\x8b$\xab.\xa3\xf57\xe4@\x8e\x18%y\x83u\x1f;\xffl\xa8\xc5\xc6V\xf8\xb4\xed\x8aD\xa3\xablL\xfc\x1d\xd0\xdc\xefh\xbd\xcf\xe4\xaa\xce\xf0U\xf7\xa24\xd4\x83k7|\x1c\xc2\xfe\xb5\x03\xecW\xce\xbc\xb4\xb5\xc5\xed\x00\x0fS7*M\xf4O\x0c\x83\xfb\x86\xcf\xcb\xfe\x8cN\xbd\x87\xf9\xa7\x8b!W\x9cz\xdf\x03g\x89,\x9d\x97a\xa7\x10\xb8U\x90\x7f\x0e-'8t\xdf\xe7\xfd\xdaN\x12\xe3M\x15"\x02\xc8\xe0\xe0\xfc\x0f\xad\x8a\xd7\xc9TP\xcc;\x0f\xca\x16\x80\x84\xd0QV\xc3\x8eV\x7f\x89"3/\xe6\x85\x0a\xbd\xa5\xa8\x1b6\xde\xd3\xdc,m;\xc7\x13\xbdY#,\xe6\xe5\xa4\xf7\xd8\x0b\xed\xea\x90@D\xa8\x95\xbb\x93\xd5\xd0\x804\xb6Fx\x0e\x1f\x00\x93F\xe1\xee\xe9\xf9\xecO\x17\x02\x03\x01\x00\x01\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14e?\xc7\x8a\x86\xc6<\xddT\x0e\xb0\xd8\xc9N\xdc\xf212V\xead\xf9\xea\xb5\x9d\x16fBr\xf3\x7f\xd3\xb11C\xfc\xa4\x8e\x17\xf1m#\xab\x94f\xf8\xad\xfb\x0f\x08n&-\x7f\x17\x07\x09\xb2\x8c\xfbP\xc0\x9f\x96\x8d\xcf\xb6\xfd\x00\x9dZ\x14\x9a\xbf\x02D\xf5\xc1\xc2\x9f"^\xa2\x0f\xa1\xe3", + ["CN=AffirmTrust Premium,O=AffirmTrust,C=US"] = "0\x82\x05F0\x82\x03.\xa0\x03\x02\x01\x02\x02\x08m\x8c\x14F\xb1\xa6\x0a\xee0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x000A1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x140\x12\x06\x03U\x04\x0a\x0c\x0bAffirmTrust1\x1c0\x1a\x06\x03U\x04\x03\x0c\x13AffirmTrust Premium0\x1e\x17\x0d100129141036Z\x17\x0d401231141036Z0A1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x140\x12\x06\x03U\x04\x0a\x0c\x0bAffirmTrust1\x1c0\x1a\x06\x03U\x04\x03\x0c\x13AffirmTrust Premium0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xc4\x12\xdf\xa9_\xfeA\xdd\xdd\xf5\x9f\x8a\xe3\xf6\xac\xe1Q\xa7\xd1"\xc4\x0a\xa78Hl\xb3\xf9\xff}\xab\x86W\xe3\xba\xd6\x85xw\xbaC\xeaH\x7f\xf6\xd8\xbe#m\x1e\xbf\xd16lX\\xf1\xee\xa4\x19T\x1a\xf5\x03\xd2v\xe6\xe1\x8c\xbd<\xb3\xd3HK\xe2\xc8\xf8\x7f\x92\xa8vF\x9cBe>\xa4\x1e\xc1\x07\x03ZF-\xb8\x97\xf3\xb7\xd5\xb2U!\xef\xba\xdcL\x00\x97\xfb\x14\x95'3\xbf\xe8CGF\xd2\x08\x99\x16`;\x9a~\xd2\xe6\xed8\xea\xec\x01\x1e\x10\xe5\x0b\x03\xc9\x9aB\x00l\xc5\x94~a\xc4\x8a\xdf\x7f\x82\x1a\x0bY\xc4Y2w\xb3\xbc`iV9\xfd\xb4\x06{,\xd6d6\xd9\xbdH\xed\x84\x1f~\xa5"\x8f*\xb8B\xf4\x82\xb7\xd4S\x90xN-\x1a\xfd\x81oD\xd7;\x01t\x96B\xe0\x00\xe2.k\xea\xc5\xeer\xac\xbb\xbf\xfe\xea\xaa\xa8\xf8\xdc\xf6\xb2y\x8a\xb6g\x02\x03\x01\x00\x01\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x9d\xc0g\xa6\x0c"\xd9&\xf5E\xab\xa6eR\x11'\xd8E\xacc0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x00\x03\x82\x02\x01\x00\xb3WM\x10bN:\xe4\xac\xea\xb8\x1c\xaf2#\xc8\xb3IZQ\x9cv(\x8dy\xaaWF\x17\xd5\xf5R\xf6\xb7D\xe8\x08D\xbf\x18\x84\xd2\x0b\x80\xcd\xc5\x12\xfd\x00U\x05a\x87A\xdc\xb5$\x9e<\xc4\xd8\xc8\xfbp\x9e/x\x96\x83 6\xde|\x0fi\x13\x88\xa5u6\x98\x08\xa6\xc6\xdf\xac\xce\xe3X\xd6\xb7>\xde\xba\xf3\xeb4@\xd8\xa2\x81\xf5x?/\xd5\xa5\xfc\xd9\xa2\xd4^\x04\x0e\x17\xad\xfeA\xf0\xe5\xb2r\xfaD\x823B\xe8-X\xf7V\x8cb?\xbaB\xb0\x9c\x0c\~.e&\SO\x00\xb2x~\xa1\x0d\x99-\x8d\xb8\x1d\x8e\xa2\xc4\xb0\xfd`\xd00\xa4\x8e\xc8\x04b\xa9\xc4\xed5\xdez\x97\xed\x0e8^\x92/\x93p\xa5\xa9\x9co\xa7}\x13\x1d~\xc6\x08H\xb1^g\xebQ\x08%\xe9\xe6%kR)\x91\x9c\xd29s\x08W\xde\x99\x06\xb4[\x9d\x10\x06\xe1\xc2\x00\xa8\xb8\x1cJ\x02\x0a\x14\xd0\xc1A\xca\xfb\x8c5!}\x828\xf2\xa9T\x91\x195\x93\x94mj:\xc5\xb2\xd0\xbb\x89\x86\x93\xe8\x9b\xc9\x0f:\xa7z\xb8\xa1\xf0xF\xfa\xfc7/\xe5\x8a\x84\xf3\xdf\xfe\x04\xd9\xa1h\xa0/$\xe2\x09\x95\x06\xd5\x95\xca\xe1$\x96\xeb|\xf6\x93\x05\xbb\xeds\xe9-\xd1u9\xd7\xe7$\xdb\xd8N_C\x8f\x9e\xd0\x149\xbfUpH\x99W1\xb4\x9c\xeeJ\x98\x03\x960\x1f`\x06\xee\x1b#\xfe\x81`#\x1aGb\x85\xa5\xcc\x194\x80o\xb3\xac\x1a\xe3\x9f\xf0{H\xad\xd5\x01\xd9g\xb6\xa9r\x93\xea-f\xb5\xb2\xb8\xe4=<\xb2\xefL\x8c\xea\xeb\x07\xbf\xab5\x9aU\x86\xbc\x18\xa6\xb5\xa8^\xb4\x83lki@\xd3\x9f\xdc\xf1\xc3ik\xb9\xe1m\x09\xf4\xf1\xaaPv\x0az}z\x17\xa1U\x96B\x991\x09\xdd`\x11\x8d\x050~\xe6\x8eF\xd1\x9d\x14\xda\xc7\x17\xe4\x05\x96\x8c\xc4$\xb5\x1b\xcf\x14\x07\xb2@\xf8\xa3\x9eA\x86\xbc\x04\xd0k\x96\xc8*\x804\xfd\xbf\xef\x06\xa3\xddX\xc5\x85=>\x8f\xfe\x9e)\xe0\xb6\xb8\x09h\x19\x1c\x18C", + ["CN=CFCA EV ROOT,O=China Financial Certification Authority,C=CN"] = "0\x82\x05\x8d0\x82\x03u\xa0\x03\x02\x01\x02\x02\x04\x18J\xcc\xd60\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000V1\x0b0\x09\x06\x03U\x04\x06\x13\x02CN100.\x06\x03U\x04\x0a\x0c'China Financial Certification Authority1\x150\x13\x06\x03U\x04\x03\x0c\x0cCFCA EV ROOT0\x1e\x17\x0d120808030701Z\x17\x0d291231030701Z0V1\x0b0\x09\x06\x03U\x04\x06\x13\x02CN100.\x06\x03U\x04\x0a\x0c'China Financial Certification Authority1\x150\x13\x06\x03U\x04\x03\x0c\x0cCFCA EV ROOT0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xd7]k\xcd\x10?\x1f\x05Y\xd5\x05M7\xb1\x0e\xec\x98+\x8e\x15\x1d\xfa\x93K\x17\x82!q\x10R\xd7Qdp\x16\xc2UiM\x8e\x15m\x9f\xbf\x0c\x1b\xc2\xe0\xa3g\xd6\x0c\xac\xcf"\xae\xafwT*KL\x8aSRz\xc3\xee.\xde\xb3q%\xc1\xe9]=\xee\xa1/\xa3\xf7*<\xc9#\x1dj\xab\x1d\xa1\xa7\xf1\xf3\xec\xa0\xd5D\xcf\x15\xcfr/\x1dc\x97\xe8\x99\xf9\xfd\x93\xa4T\x80LR\xd4R\xab.I\xdf\x90\xcd\xb8_\xbe?\xde\xa1\xcaM \xd4%\xe8\x84)S\xb7\xb1\x88\x1f\xff\xfa\xda\x90\x9f\x0a\xa9-A?\xb1\xf1\x18)\xee\x16Y,4I\x1a\xa8\x06\xd7\xa8\x88\xd2\x03rz2\xe2\xeahMn,\x96e{\xcaY\xfa\xf2\xe2\xdd\xee0,\xfb\xccF\xac\xc4c\xebo\x7f6+4s\x12\x94\x7f\xdf\xcc&\x9e\xf1r]PeY\x8fi\xb3\x87^2o\xc3\x18\x8a\xb5\x95\x8f\xb0z7\xdeZE;\xc76\xe1\xefg\xd19\xd3\x97[sb\x19H-\x87\x1c\x06\xfbt\x98 Is\xf0\x05\xd2\x1b\xb1\xa0\xa3\xb7\x1bp\xd3\x88i\xb9Z\xd68\xf4b\xdc%\x8bx\xbf\xf8\xe8~\xb8\\xc9\x95O_\xa7-\xb9 k\xcfk\xdd\xf5\x0d\xf4\x82\xb7\xf4\xb2f.\x10(\xf6\x97Z{\x96\x16\x8f\x01\x19-ln\x7f9X\x06d\x83\x01\x83\x83\xc3M\x92\xdd2\xc6\x87\xa47\xe9\x16\xce\xaa-h\xaf\x0a\x81e:p\xc1\x9b\xadMmT\xca*-K\x85\x1b\xb3\x80\xe6pE\x0dk^5\xf0\x7f;\xb8\x9c\xe4\x04p\x89\x12%\x93\xda\x0a\x99"`jc`Nv\x06\x98N\xbd\x83\xad\x1dX\x8a%\x85\xd2\xc7e\x1e-\x8e\xc6\xdf\xb6\xc6\xe1\x7f\x8a\x04!\x15)t\xf0>\x9c\x90\x9d\x0c.\xf1\x8a>Z\xaa\x0c\x09\x1e\xc7\xd5<\xa3\xed\x97\xc3\x1e4\xfa8\xf9\x08\x0e\xe3\xc0]+\x83\xd1Vj\xc9\xb6\xa8TS.x2g=\x82\x7ft\xd0\xfb\xe1\xb6\x05`\xb9p\xdb\x8e\x0b\xf9\x13Xoq`\x10R\x10\xb9\xc1A\x09\xefr\x1fg1x\xff\x96\x05\x8d\x02\x03\x01\x00\x01\xa3c0a0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xe3\xfe-\xfd(\xd0\x0b\xb5\xba\xb6\xa2\xc4\xbf\x06\xaa\x05\x8c\x93\xfb/0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xe3\xfe-\xfd(\xd0\x0b\xb5\xba\xb6\xa2\xc4\xbf\x06\xaa\x05\x8c\x93\xfb/0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00%\xc6\xbak\xeb\x87\xcb\xde\x829\x96=\xf0D\xa7k\x84s\x03\xde\x9d+O\xba \x7f\xbcx\xb2\xcf\x97\xb0\x1b\x9c\xf3\xd7y.\xf5H\xb6\xd2\xfb\x17\x88\xe6\xd3z?\xedS\x13\xd0\xe2/jy\xcb\x00#(\xe6\x1e7W5\x89\x84\xc2vO46\xadg\xc3\xceA\x06\x88\xc5\xf7\xee\xd8\x1a\xb8\xd6\x0b\x7fP\xff\x93\xaa\x17K\x8c\xec\xedR`\xb2\xa4\x06\xeaN\xeb\xf4k\x19\xfd\xeb\xf5\x1a\xe0%*\x9a\xdc\xc7A6\xf7\xc8t\x05\x849\x959\xd6\x0b;\xa4'\xfa\x08\xd8\\x1e\xf8\x04`R\x11((\x03\xff\xefSf\x00\xa5J4\x16f|\xfd\x09\xa4\xae\x9eg\x1aoA\x0bk\x06\x13\x9b\x8f\x86q\x05\xb4/\x8d\x89f3)vT\x9a\x11\xf8'\xfa\xb2?\x91\xe0\xce\x0d\x1b\xf30\x1a\xad\xbf"]\x1b\xd3\xbf%\x05M\xe1\x92\x1a\x7f\x99\x9f\xcfO_lv^\xa0K7\x91\x9e\xdc"\xe6m\xce\x14\x1a\x8ej\xcb\xfe\xcd\xb3\x14d\x17\xc7[)\x9e2\xbf\xf2\xee\xfa\xd3\x0bB\xd4\xab\xb7A2\xda\x0c\xd4\xef\xf8\x81\xd5\xbb\x8dX?\xb5\x1b\xe8I(\xa2p\xda1\x04\xdd\xf7\xb2\x16\xf2L\x0aN\x07\xa8\xedJ=^\xb5\x7f\xa3\x90\xc3\xaf'\x02\x03\x01\x00\x01\xa3c0a0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x03\xdeP5V\xd1L\xbbf\xf0\xa3\xe2\x1b\x1b\xc3\x97\xb2=\xd1U0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\x03\xdeP5V\xd1L\xbbf\xf0\xa3\xe2\x1b\x1b\xc3\x97\xb2=\xd1U0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xcb\x9c7\xaaH\x13\x12\x0a\xfa\xddD\x9cOR\xb0\xf4\xdf\xae\x04\xf5yy\x08\xa3$\x18\xfcK+\x84\xc0-\xb9\xd5\xc7\xfe\xf4\xc1\x1fX\xcb\xb8m\x9czt\xe7\x98)\xab\x11\xb5\xe3p\xa0\xa1\xcdL\x88\x99\x93\x8c\x91p\xe2\xab\x0f\x1c\xbe\x93\xa9\xffc\xd5\xe4\x07`\xd3\xa3\xbf\x9d[\x09\xf1\xd5\x8e\xe3S\xf4\x8ec\xfa?\xa7\xdb\xb4f\xdfbf\xd6\xd1nA\x8d\xf2-\xb5\xeawJ\x9f\x9dX\xe2+Y\xc0@#\xed-(\x82E>yT\x92&\x98\xe0\x80H\xa87\xef\xf0\xd6y`\x16\xde\xac\xe8\x0e\xcdn\xacD\x178/I\xda\xe1E>*\xb96S\xcf:P\x06\xf7.\xe8\xc4WIla!\x18\xd5\x04\xadx<,:\x80k\xa7\xeb\xaf\x15\x14\xe9\xd8\x89\xc1\xb98l\xe2\x91l\x8a\xffd\xb9w%W0\xc0\x1b$\xa3\xe1\xdc\xe9\xdfG|\xb5\xb4$\x08\x050\xec-\xbd\x0b\xbfE\xbfP\xb9\xa9\xf3\xeb\x98\x01\x12\xad\xc8\x88\xc6\x984_\x8d\x0a<\xc6\xe9\xd5\x95\x95m\xde", + ["CN=CA Disig Root R2,O=Disig a.s.,L=Bratislava,C=SK"] = "0\x82\x05i0\x82\x03Q\xa0\x03\x02\x01\x02\x02\x09\x00\x92\xb8\x88\xdb\xb0\x8a\xc1c0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000R1\x0b0\x09\x06\x03U\x04\x06\x13\x02SK1\x130\x11\x06\x03U\x04\x07\x13\x0aBratislava1\x130\x11\x06\x03U\x04\x0a\x13\x0aDisig a.s.1\x190\x17\x06\x03U\x04\x03\x13\x10CA Disig Root R20\x1e\x17\x0d120719091530Z\x17\x0d420719091530Z0R1\x0b0\x09\x06\x03U\x04\x06\x13\x02SK1\x130\x11\x06\x03U\x04\x07\x13\x0aBratislava1\x130\x11\x06\x03U\x04\x0a\x13\x0aDisig a.s.1\x190\x17\x06\x03U\x04\x03\x13\x10CA Disig Root R20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xa2\xa3\xc4\x00\x09\xd6\x85]-m\x14\xf6\xc2\xc3s\x9e5\xc2qU~\x81\xfb\xabFP\xe0\xc1|Ix\xe6\xabyX<\xda\xff|\x1c\x9f\xd8\x97\x02x>kA\x04\xe9A\xbd\xbe\x03,E\xf6/d\xd4\xab]\xa3G=d\x9b\xe9h\x9a\xc6\xcc\x1b?\xba\xbe\xb2\x8b4\x02.\x98U\x19\xfc\x8co\xaa_\xdaL\xceM\x03!\xa3\xd8\xd24\x93V\x96\xcbL\x0c\x00\x16<_\x1a\xcd\xc8\xc7l\xa6\xad\xd31\xa7\xbc\xe8\xe5\xe1f\xd6\xd2\xfb\x03\xb4Ae\xc9\x10\xae\x0e\x05c\xc6\x80ji0\xfd\xd2\xee\x90\xef\x0d'\xdf\x9f\x95s\xf4\xe1%\xdal\x16\xdeA84\xea\x8b\xfc\xd1\xe8\x04\x14a-A~\xac\xc7wN\xcbQT\xfb^\x92\x18\x1b\x04Zh\xc6\xc9\xc4\xfa\xb7\x13\xa0\x98\xb7\x11+\xb7\xd6W\xcc|\x9e\x17\xd1\xcb%\xfe\x86N$.V\x0cxM\x9e\x01\x12\xa6+\xa7\x01en|b\x1d\x84\x84\xdf\xea\xc0k\xb5\xa5*\x95\x83\xc3S\x11\x0cs\x1d\x0b\xb2F\x90\xd1B:\xce@n\x95\xad\xff\xc6\x94\xadn\x97\x84\x8e}o\x9e\x8a\x80\x0dIms\xe2{\x92\x1e\xc3\xf3\xc1\xf3\xeb.\x05o\xd9\x1b\xcf7v\x04\xc8\xb4Z\xe4\x17\xa7\xcb\xddv\x1f\xd0\x19v\xe8,\x05\xb3\xd6\x9c4\xd8\x96\xdca\x87\x91\x05\xe4D\x083\xc1\xda\xb9\x08e\xd4\xae\xb26\x0d\xeb\xba8\xba\x0c\xe5\x9b\x9e\xeb\x8df\xdd\x99\xcf\xd6\x89A\xf6\x04\x92\x8a))mk:\x1c\xe7u}\x02q\x0e\xf3\xc0\xe7\xbd\xcb\x19\xdd\x9d`\xb2\xc2f`\xb6\xb1\x04\xee\xc9\xe6\x86\xb9\x9af@\xa8\xe7\x11\xed\x81E\x03\x8b\xf6gY\xe8\xc1\x06\x11\xbd\xdd\xcf\x80\x02Oe@x\GP\xc8\x9b\xe6\x1f\x81{\xe4D\xa8[\x85\x9a\xe2\xdeZ\xd5\xc7\xf9:DfK\xe42T|\xe4l\x9c\xb3\x0e=\x17\xa2\xb24\x12\xd6~\xb2\xa8I\xbb\xd1z(@\xbe\xa2\x16\x1f\xdf\xe47\x1f\x11s\xfb\x90\x0aeC\xa2\x0d|\xf8\x06\x01U3}\xb0\x0d\xb8\xf4\xf5\xae\xa5BW|6\x11\x8c{^\xc4\x03\x9d\x8cy\x9d\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb5\x99\xf8\xaf\xb0\x94\xf5\xe3 \xd6\x0a\xad\xceNV\xa4.nB\xed0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00&\x06^p\xe7e3\xc8\x82n\xd9\x9c\x17:\x1bzf\xb2\x01\xf6x;i^/\xea\xffN\xf9(\xc3\x98*aL\xb4$\x12\x8a}m\x11\x14\xf7\x9c\xb5\xca\xe6\xbc\x9e'\x8eL\x19\xc8\xa9\xbdz\xc0\xd76\x0em\x85rn\xa8\xc6\xa2m\xf6\xfasc\x7f\xbcny\x08\x1c\x9d\x8a\x9f\x1a\x8aS\xa6\xd8\xbb\xd95U\xb1\x11\xc5\xa9\x03\xb3V;\xb9\x84\x93"^~\xc1\xf6\x12R\x8b\xea,g\xbc\xfe6L\xf5\xb8\xcf\xd1\xb3I\x92;\xd3)\x0e\x99\x1b\x96\xf7a\xb8;\xc4+\xb6xl\xb4#o\xf0\xfd\xd3\xb2^u\x1f\x99\x95\xa8\xac\xf6\xda\xe1\xc51{\xfb\xd1F\xb3\xd2\xbcg\xb4bT\xba\x09\xf7c\xb0\x93\xa2\x9a\xf9\xe9R.\x8b`\x12\xab\xfc\xf5`V\xef\x10\\x8b\xc4\x1aB\xdc\x83[d\x0e\xcb\xb5\xbc\xd6O\xc1|!b\xf1\x7fcq\x0c\xc9\x9fD\xdb\xa8'\xa2u\xben\x81>\xd7\xc0\xeb\x1b\x98\x0fp\4\xb2\x8a\xcc\xc0\x85\x18\xebnz\xb3\xf7Z\xa1\x07\xbf\xa9B\x92\xf3`"\x97\xe4\x14\xa1\x07\x9bNv\xc0\x8e}\xfd\xa4%\xc7G\xed\xff\x1fs\xac\xcc\xc3\xa5\xe9o\x0a\x8e\x9be\xc2P\x85\xb5\xa3\xa0S\x12\xccU\x87a\xf3\x81\xae\x10Fa\xbdD!\xb8\xc2=t\xcf~$5\xfa\x1c\x07\x0e\x9b="\xca\xef1/\x8c\xac\x12\xbd\xef@(\xfc)g\x9f\xb2\x13Of$\xc4S\x19\xe9\x1e)\x15\xef\xe6m\xb0\x7f-g\xfd\xf3l\x1buF\xa3\xe5J\x17\xe9\xa4\xd7\x0b", + ["CN=Baltimore CyberTrust Root,OU=CyberTrust,O=Baltimore,C=IE"] = "0\x82\x03w0\x82\x02_\xa0\x03\x02\x01\x02\x02\x04\x02\x00\x00\xb90\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000Z1\x0b0\x09\x06\x03U\x04\x06\x13\x02IE1\x120\x10\x06\x03U\x04\x0a\x13\x09Baltimore1\x130\x11\x06\x03U\x04\x0b\x13\x0aCyberTrust1"0 \x06\x03U\x04\x03\x13\x19Baltimore CyberTrust Root0\x1e\x17\x0d000512184600Z\x17\x0d250512235900Z0Z1\x0b0\x09\x06\x03U\x04\x06\x13\x02IE1\x120\x10\x06\x03U\x04\x0a\x13\x09Baltimore1\x130\x11\x06\x03U\x04\x0b\x13\x0aCyberTrust1"0 \x06\x03U\x04\x03\x13\x19Baltimore CyberTrust Root0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xa3\x04\xbb"\xab\x98=W\xe8&r\x9a\xb5y\xd4)\xe2\xe1\xe8\x95\x80\xb1\xb0\xe3[\x8e+)\x9ad\xdf\xa1]\xed\xb0\x09\x05m\xdb(.\xceb\xa2b\xfe\xb4\x88\xda\x12\xeb8\xeb!\x9d\xc0A+\x01R{\x88w\xd3\x1c\x8f\xc7\xba\xb9\x88\xb5j\x09\xe7s\xe8\x11@\xa7\xd1\xcc\xcab\x8d-\xe5\x8f\x0b\xa6P\xd2\xa8P\xc3(\xea\xf5\xab%\x87\x8a\x9a\x96\x1c\xa9g\xb8?\x0c\xd5\xf7\xf9R\x13/\xc2\x1b\xd5pp\xf0\x8f\xc0\x12\xca\x06\xcb\x9a\xe1\xd9\xca3zw\xd6\xf8\xec\xb9\xf1hDBH\x13\xd2\xc0\xc2\xa4\xae^`\xfe\xb6\xa6\x05\xfc\xb4\xdd\x07Y\x02\xd4Y\x18\x98c\xf5\xa5c\xe0\x90\x0c}]\xb2\x06z\xf3\x85\xea\xeb\xd4\x03\xae^\x84>_\xff\x15\xedi\xbc\xf996ru\xcfwRM\xf3\xc9\x90,\xb9=\xe5\xc9#S?\x1f$\x98!\\x07\x99)\xbd\xc6:\xec\xe7n\x86:k\x97tc3\xbdh\x181\xf0x\x8dv\xbf\xfc\x9e\x8e]*\x86\xa7M\x90\xdc'\x1a9\x02\x03\x01\x00\x01\xa3E0C0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xe5\x9dY0\x82GX\xcc\xac\xfa\x08T6\x86{:\xb5\x04M\xf00\x12\x06\x03U\x1d\x13\x01\x01\xff\x04\x080\x06\x01\x01\xff\x02\x01\x030\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x85\x0c]\x8e\xe4oQhB\x05\xa0\xdd\xbbO'%\x84\x03\xbd\xf7d\xfd-\xd70\xe3\xa4\x10\x17\xeb\xda))\xb6y?v\xf6\x19\x13#\xb8\x10\x0a\xf9X\xa4\xd4ap\xbd\x04aj\x12\x8a\x17\xd5\x0a\xbd\xc5\xbc0|\xd6\xe9\x0c%\x8d\x86@O\xec\xcc\xa3~8\xc67\x11O\xed\xddh1\x8eL\xd2\xb3\x01t\xee\xbeu^\x07H\x1a\x7fp\xff\x16\\x84\xc0y\x85\xb8\x05\xfd\x7f\xbee\x11\xa3\x0f\xc0\x02\xb4\xf8R79\x04\xd5\xa91z\x18\xbf\xa0*\xf4\x12\x99\xf7\xa3E\x82\xe3<^\xf5\x9d\x9e\xb5\xc8\x9e|.\xc8\xa4\x9eN\x08\x14Km\xfdpmk\x1ac\xbdd\xe6\x1f\xb7\xce\xf0\xf2\x9f.\xbb\x1b\xb7\xf2P\x88s\x92\xc2\xe2\xe3\x16\x8d\x9a2\x02\xab\x8e\x18\xdd\xe9\x10\x11\xee~5\xab\x90\xaf>0\x94z\xd03=\xa7e\x0f\xf5\xfc\x8e\x9eb\xcfGD,\x01]\xbb\x1d\xb52\xd2G\xd28.\xd0\xfe\x81\xdc2j\x1e\xb5\xee<\xd5\xfc\xe7\x81\x1d\x19\xc3$B\xeac9\xa9", + ["CN=Hellenic Academic and Research Institutions ECC RootCA 2015,O=Hellenic Academic and Research Institutions Cert. Authority,L=Athens,C=GR"] = "0\x82\x02\xc30\x82\x02J\xa0\x03\x02\x01\x02\x02\x01\x000\x0a\x06\x08*\x86H\xce=\x04\x03\x020\x81\xaa1\x0b0\x09\x06\x03U\x04\x06\x13\x02GR1\x0f0\x0d\x06\x03U\x04\x07\x13\x06Athens1D0B\x06\x03U\x04\x0a\x13;Hellenic Academic and Research Institutions Cert. Authority1D0B\x06\x03U\x04\x03\x13;Hellenic Academic and Research Institutions ECC RootCA 20150\x1e\x17\x0d150707103712Z\x17\x0d400630103712Z0\x81\xaa1\x0b0\x09\x06\x03U\x04\x06\x13\x02GR1\x0f0\x0d\x06\x03U\x04\x07\x13\x06Athens1D0B\x06\x03U\x04\x0a\x13;Hellenic Academic and Research Institutions Cert. Authority1D0B\x06\x03U\x04\x03\x13;Hellenic Academic and Research Institutions ECC RootCA 20150v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04\x92\xa0A\xe8K\x82\x84\\xe2\xf81\x11\x99\x86dN\x09%/\x9dA/\x0a\xae5Ot\x95\xb2Qdk\x8dk\xe6?p\x95\xf0\x05DG\xa6r8Pv\x95\x02Z\x8e\xae(\x9e\xf9-N\x99\xef,HoL%)\xe8\xd1q[\xdf\x1d\xc1u7\xb4\xd7\xfa{zB\x9cj\x0aVZ|i\x0b\xaa\x80\x09$l~\xc1F\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb4"\x0b\x82\x99$\x01\x0e\x9c\xbb\xe4\x0e\xfd\xbf\xfb\x97 \x93\x99*0\x0a\x06\x08*\x86H\xce=\x04\x03\x02\x03g\x000d\x020g\xce\x16b8\xa2\xacbE\xa7\xa9\x95$\xc0\x1a'\x9c2;\xc0\xc0\xd5\xba\xa9\xe7\xf8\x04CS\x85\xeeR!\xde\x9d\xf5%\x83>\x9eXK/\xd7g\x13\x0e!\x020\x05\xe1u\x01\xdeh\xed*\x1fML\x09\x08\x0d\xecK\xadd\x17(\xe7u\xceEer!\x17\xcb"A\x0e\x8c\x13\x988\x9aTm\x9b\xca\xe2|\xea\x02X"\x91", + ["CN=Entrust.net Certification Authority (2048),OU=(c) 1999 Entrust.net Limited,OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.),O=Entrust.net"] = "0\x82\x04*0\x82\x03\x12\xa0\x03\x02\x01\x02\x02\x048c\xde\xf80\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\xb41\x140\x12\x06\x03U\x04\x0a\x13\x0bEntrust.net1@0>\x06\x03U\x04\x0b\x147www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)1%0#\x06\x03U\x04\x0b\x13\x1c(c) 1999 Entrust.net Limited1301\x06\x03U\x04\x03\x13*Entrust.net Certification Authority (2048)0\x1e\x17\x0d991224175051Z\x17\x0d290724141512Z0\x81\xb41\x140\x12\x06\x03U\x04\x0a\x13\x0bEntrust.net1@0>\x06\x03U\x04\x0b\x147www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)1%0#\x06\x03U\x04\x0b\x13\x1c(c) 1999 Entrust.net Limited1301\x06\x03U\x04\x03\x13*Entrust.net Certification Authority (2048)0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xadMK\xa9\x12\x86\xb2\xea\xa3 \x07\x15\x16d*+K\xd1\xbf\x0bJM\x8e\xed\x80v\xa5g\xb7x@\xc0sB\xc8h\xc0\xdbS+\xdd^\xb8v\x985\x93\x8b\x1a\x9d|\x13:\x0e\x1f[\xb7\x1e\xcf\xe5$\x14\x1e\xb1\x81\xa9\x8d}\xb8\xcckK\x03\xf1\x02\x0c\xdc\xab\xa5@$\x00\x7ft\x94\xa1\x9d\x08)\xb3\x88\x0b\xf5\x87w\x9dU\xcd\xe4\xc3~\xd7jd\xab\x85\x14\x86\x95[\x972Po=\xc8\xbaf\x0c\xe3\xfc\xbd\xb8I\xc1v\x89I\x19\xfd\xc0\xa8\xbd\x89\xa3g/\xc6\x9f\xbcq\x19`\xb8-\xe9,\xc9\x90vf{\x94\xe2\xafx\xd6eS]<\xd6\x9c\xb2\xcf)\x03\xf9/\xa4P\xb2\xd4H\xce\x052U\x8a\xfd\xb2dL\x0e\xe4\x98\x07u\xdb\x7f\xdf\xb9\x08U`\x850)\xf9{H\xa4i\x86\xe35?\x1e\x86]zz\x15\xbd\xef\x00\x8e\x15"T\x17\x00\x90&\x93\xbc\x0eIh\x91\xbf\xf8G\xd3\x9d\x95B\xc1\x0eM\xdfo&\xcf\xc3\x18!bfCp\xd6\xd5\xc0\x07\xe1\x02\x03\x01\x00\x01\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14U\xe4\x81\xd1\x11\x80\xbe\xd8\x89\xb9\x08\xa31\xf9\xa1$\x09\x16\xb9p0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00;\x9b\x8fV\x9b0\xe7S\x99|zy\xa7M\x97\xd7\x19\x95\x90\xfb\x06\x1f\xca3|Fc\x8f\x96f$\xfa@\x1b!'\xca\xe6rs\xf2O\xfe1\x99\xfd\xc8\x0cLhS\xc6\x80\x82\x13\x98\xfa\xb6\xad\xda]=\xf1\xcen\xf6\x15\x11\x94\x82\x0c\xee?\x95\xaf\x11\xab\x0f\xd7/\xde\x1f\x03\x8fW,\x1e\xc9\xbb\x9a\x1aD\x95\xeb\x18O\xa6\x1f\xcd}W\x10/\x9b\x04\x09Z\x84\xb5n\xd8\x1d:\xe1\xd6\x9e\xd1ly^y\x1c\x14\xc5\xe3\xd0L\x93;e<\xed\xdf=\xbe\xa6\xe5\x95\x1a\xc3\xb5\x19\xc3\xbd^[\xbb\xff#\xefh\x19\xcb\x12\x93'\\x03-o0\xd0\x1e\xb6\x1a\xac\xdeZ\xf7\xd1\xaa\xa8'\xa6\xfey\x81\xc4y\x993W\xba\x12\xb0\xa9\xe0Bl\x93\xcaV\xde\xfem\x84\x0b\x08\x8b~\x8d\xea\xd7\x98!\xc6\xf3\xe7\x18/u\xd4\xad\x86I\xcb\x95\xafT\x06l\xd8\x06\x13\x8d[\xff\xe1&\x19Y\xc0$\xba\x81qy\x90DPh$\x94_\xb8\xb3\x11\xf1)Aa\xa3A\xcb#6\xd5\xc1\xf12P\x10N\x7f\xf4\x86\x93\xec\x84\xd3\x8e\xbcK\xbf\\x01N\x07=\xdc\x14\x8a\x94\x0a\xa4\xeas\xfb\x0bQ\xe8\x13\x07\x18\xfa\x0e\xf1+\xd1T\x15}<\xe1\xf7\xb4\x19Bgb^w\xe0\xa2U\xec\xb6\xd9i\x17\xd5:\xafD\xedJ\xc5\x9e\xe4z'|\xe5u\xd7\xaa\xcb%\xe7\xdfk\x0a\xdb\x0fM\x93N\xa8\xa0\xcd{.\xf2Y\x01j\xb7\x0d\xb8\x07\x81~\x8b8\x1b8\xe6\x0aW\x99=\xee!\xe8\xa3\xf5\x0c\x16\xdd\x8b\xec4\x8e\x9c*\x1c\x00\x15\x17\x8dh\x83\xd2p\x9f\x18\x08\xcd\x11h\xd5\xc9kR\xcd\xc4F\x8f\xdc\xb5\xf3\xd8Ws\x1e\xe9\x949\x04\xbf\xd3\xde8\xde\xb4S\xeci\x1c\xa2~\xc4\x8f\xe4\x1bp\xad\xf2\xa2\xf9\xfb\xf7\x16dfi\x9fIQ\xa2\xe2\x15\x18g\x06J\x7f\xd5l\xb5M\xb33\xe0a\xeb]\xbe\xe9\x98\x0f2\xd7\x1dK<.Z\x01R\x91\x09\xf2\xdf\xea\x8d\xd8\x06@c\xaa\x11\xe4\xfe\xc37\x9e\x14R?\xf4\xe2\xcc\xf2a\x93\xd1\xfdgk\xd7R\xae\xbfh\xab@C\xa0W5Sx\xf0S\xf8aB\x07d\xc6\xd7o\x9bL8\x0dc\xacb\xaf6\x8b\xa2s\x0a\x0d\xf5!\xbdt\xaaM\xear\x03I\xdb\xc7_\x1dbc\xc7\xfd\xdd\x91\xec3\xee\xf5m\xb4n0h\xde\xc8\xd6&\xb0u^{\xb4\x07 \x98\xa1v2\xb8MlO\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xc9\x80w\xe0b\x92\x82\xf5F\x9c\xf3\xba\xf7L\xc3\xde\xb8\xa3\xad90\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00S_!\xf5\xba\xb0:R9,\x92\xb0l\x00\xc9\xef\xce \xef\x06\xf2\x96\x9e\xe9\xa4t\x7fz\x16\xfc\xb7\xf5\xb6\xfb\x15\x1b?\xab\xa6\xc0r]\x10\xb1q\xee\xbcO\xe3\xad\xac\x03m.q.\xaf\xc4\xe3\xad\xa3\xbd\x0c\x11\xa7\xb4\xffJ\xb2{\x10\x10\x1f\xa7WA\xb2\xc0\xae\xf4,Y\xd6G\x10\x88\xf3!Q)0\xca`\x86\xafF\xab\x1d\xed:[\xb0\x94\xdeD\xe3A\x08\xa2\xc1\xec\x1d\xd6\xfdO\xb6\xd6G\xd0\x14\x0b\xca\xe6\xca\xb5{w~A\x1f^\x83\xc7\xb6\x8c9\x96\xb0?\x96\x81Ao`\x90\xe2\xe8\xf9\xfb"q\xd9}\xb3=F\xbf\xb4\x84\xaf\x90\x1c\x0f\x8f\x12j\xaf\xef\xee\x1ez\xae\x02J\x8a\x17+v\xfe\xacT\x89$,O?\xb6\xb2\xa7N\x8c\xa8\x91\x97\xfb)\xc6{\-\xb9\xcbf\xb6\xb7\xa8[\x12Q\x85\xb5\x09~bxp\xfe\xa9j`\xb6\x1d\x0ey\x0c\xfd\xca\xea$\x80r\xc3\x97?\xf2w\xabC"\x0a\xc7\xeb\xb6\x0c\x84\x82,\x80kA\x8a\x08\xc0\xeb\xa5k\xdf\x99\x12\xcb\x8a\xd5^\x80\x0c\x91\xe0&\x086H\xc5\xfa8\x115\xff%\x83-\xf2z\xbf\xda\xfd\x8e\xfe\xa5\xcbE,\x1f\xc4\x88S\xaew\x0e\xd9\x9av\xc5\x8e,\x1d\xa3\xba\xd5\xec2\xae\xc0\xaa\xac\xf7\xd1zM\xeb\xd4\x07\xe2H\xf7"\x8e\xb0\xa4\x9fj\xce\x8e\xb2\xb2`\xf4\xa3"\xd0#\xeb\x94Zzi\xdd\x0f\xbf@W\xackYP\xd9\xa3\x99\xe1n\xfe\x8d\x01y'#\x15\xde\x92\x9d{\x09MZ\xe7KH0Z\x18\xe6\x0am\xe6\x8f\xe0\xd2\xbb\xe6\xdf|n!\x82\xc1h9M\xb4\x98Xfb\xccJ\x90^\xc3\xfa'\x04\xb1y\x15t\x99\xcc\xbe\xad \xde&`\x1c\xebVQ\xa6\xa3\xea\xe4\xa3?\xa7\xffa\xdc\xf1ZMl2#C\xee\xac\xa8\xee\xeeJ\x12\x09<]q\xc2\xbey\xfa\xc2\x87h\x1d\x0b\xfd\i\xcc\x06\xd0\x9a}T\x99*\xc99\x1a\x19\xafK*C\xf3c]ZX\xe2/\xe3\x1d\xe4\xa9\xd6\xd0\x0a\xd0\x9e\xbf\xd7\x81\x09\xf1\xc9\xc7&\x0d\xac\x98\x16V\xa0", + ["CN=GeoTrust Primary Certification Authority - G3,OU=(c) 2008 GeoTrust Inc. - For authorized use only,O=GeoTrust Inc.,C=US"] = "0\x82\x03\xfe0\x82\x02\xe6\xa0\x03\x02\x01\x02\x02\x10\x15\xacn\x94\x19\xb2yKA\xf6'\xa9\xc3\x18\x0f\x1f0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\x981\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1907\x06\x03U\x04\x0b\x130(c) 2008 GeoTrust Inc. - For authorized use only1604\x06\x03U\x04\x03\x13-GeoTrust Primary Certification Authority - G30\x1e\x17\x0d080402000000Z\x17\x0d371201235959Z0\x81\x981\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1907\x06\x03U\x04\x0b\x130(c) 2008 GeoTrust Inc. - For authorized use only1604\x06\x03U\x04\x03\x13-GeoTrust Primary Certification Authority - G30\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xdc\xe2^bX\x1d3W923\xfa\xeb\xcb\x87\x8c\xa7\xd4J\xdd\x06\x88\xead\x8e1\x98\xa58\x90\x1e\x98\xcf.c+\xf0F\xbcD\xb2\x89\xa1\xc0(\x0cIp!\x95\x9fd\xc0\xa6\x93\x12\x02e&\x86\xc6\xa5\x89\xf0\xfa\xd7\x84\xa0p\xafO\x1a\x97?\x06D\xd5\xc9\xebr\x10}\xe41(\xfb\x1ca\xe6(\x07Ds\x92"i\xa7\x03\x88l\x9dc\xc8R\xda\x98'\xe7\x08Lp>\xb4\xc9\x12\xc1\xc5g\x83]3\xf3\x03\x11\xecj\xd0S\xe2\xd1\xba6`\x94\x80\xbbacl[\x17~\xdf@\x94\x1e\xab\x0d\xc2!(p\x88\xff\xd6&ll`\x04%NU~}\xef\xbf\x94H\xde\xb7\x1d\xddp\x8d\x05_\x88\xa5\x9b\xf2\xc2\xee\xea\xd1@Amb8\x1dV\x06\xc5\x03GQ \x19\xfc{\x10\x0b\x0eb\xaevU\xbf_w\xbe>I\x01S=\x98%\x03v$Z\x1d\xb4\xdb\x89\xeay\xe5\xb6\xb3;?\xbaL(A\x7f\x06\xacj\x8e\xc1\xd0\xf6\x05\x1d}\xe6B\x86\xe3\xa5\xd5G\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xc4y\xca\x8e\xa1N\x03\x1d\x1c\xdck\xdb1[\x94>?0\x7f-0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00-\xc5\x13\xcfV\x80{zx\xbd\x9f\xae,\x99\xe7\xef\xda\xdf\x94^\x09i\xa7\xe7nh\x8c\xbdr\xbeG\xa9\x0e\x97\x12\xb8J\xf1d\xd39\xdf%4\xd4\xc1\xcdN\x81\xf0\x0f\x04\xc4$\xb34\x96\xc6\xa6\xaa0\xdfhas\xd7\xf9\x8e\x85\x89\xef\x0e^\x95(J*'\x8f\x10\x8e.|\x86\xc4\x02\x9e\xda\x0cwe\x0eD\x0d\x92\xfd\xfd\xb3\x166\xfa\x11\x0d\x1d\x8c\x0e\x07\x89j)V\xf7r\xf4\xdd\x15\x9cw5fW\xab\x13S\xd8\x8e\xc1@\xc5\xd7\x13\x16Zr\xc7\xb7i\x01\xc4z\xb1\x83\x01h}\x8dA\xa1\x94\x18\xc1%\\xfc\xf0\xfe\x83\x02\x87|\x0d\x0d\xcf.\x08\J@\x0d>\xec\x81a\xe6$\xdb\xca\xe0\x0e-\x07\xb2>V\xdc\x8d\xf5A\x85\x07H\x9b\x0c\x0b\xcbI?}\xec\xb7\xfd\xcb\x8dg\x89\x1a\xab\xed\xbb\x1e\xa3\x00\x08\x08\x17*\x82\1]F\x8a-\x0f\x86\x9bt\xd9E\xfb\xd4@\xb1z\xaah-\x86\xb2\x99"\xe1\xc1+\xc7\x9c\xf8\xf3_\xa8\x82\x12\xeb\x19\x11-", + ["CN=Secure Global CA,O=SecureTrust Corporation,C=US"] = "0\x82\x03\xbc0\x82\x02\xa4\xa0\x03\x02\x01\x02\x02\x10\x07V"\xa4\xe8\xd4\x8a\x89M\xf4\x13\xc8\xf0\xf8\xea\xa50\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000J1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1 0\x1e\x06\x03U\x04\x0a\x13\x17SecureTrust Corporation1\x190\x17\x06\x03U\x04\x03\x13\x10Secure Global CA0\x1e\x17\x0d061107194228Z\x17\x0d291231195206Z0J1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1 0\x1e\x06\x03U\x04\x0a\x13\x17SecureTrust Corporation1\x190\x17\x06\x03U\x04\x03\x13\x10Secure Global CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xaf5.\xd8\xaclUi\x06q\xe5\x13h$\xb3O\xd8\xcc!G\xf8\xf1`8\x89\x89\x03\xe9\xbd\xea^FS\x09\xdc\\xf5Z\xe8\xf7E*\x02\xeb1a\xd7)3L\xce\xc7|\x0a7~\x0f\xba2\x98\xe1\x1d\x97\xaf\x8f\xc7\xdc\xc98\x96\xf3\xdb\x1a\xfcQ\xedh\xc6\xd0n\xa4|$\xd1\xaeB\xc8\x96Pc.\xe0\xfeu\xfe\x98\xa7_I.\x95\xe393d\x8e\x1e\xa4_\x90\xd2g<\xb2\xd9\xfeA\xb9U\xa7\x09\x8er\x05\x1e\x8b\xddD\x85\x82B\xd0I\xc0\x1d`\xf0\xd1\x17,\x95\xeb\xf6\xa5\xc1\x92\xa3\xc5\xc2\xa7\x08`\x0d`\x04\x10\x96y\x9e\x164\xe6\xa9\xb6\xfa%E9\xc8\x1ee\xf9\x93\xf5\xaa\xf1R\xdc\x99\x98=\xa5\x86\x1a\x0c53\xfaK\xa5\x04\x06\x15\x1c1\x80\xef\xaa\x18k\xc2{\xd7\xda\xce\xf93 \xd5\xf5\xbdj3-\x81\x04\xfb\xb0\\xd4\x9c\xa3\xe2\\x1d\xe3\xa9Bu^{\xd4w\xef9T\xba\xc9\x0a\x18\x1b\x12\x99I/\x88K\xfdPb\xd1s\xe7\x8fzC\x02\x03\x01\x00\x01\xa3\x81\x9d0\x81\x9a0\x13\x06\x09+\x06\x01\x04\x01\x827\x14\x02\x04\x06\x1e\x04\x00C\x00A0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x860\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xafD\x04\xc2A~H\x83\xdbN9\x02\xec\xec\x84z\xe6\xce\xc9\xa404\x06\x03U\x1d\x1f\x04-0+0)\xa0'\xa0%\x86#http://crl.securetrust.com/SGCA.crl0\x10\x06\x09+\x06\x01\x04\x01\x827\x15\x01\x04\x03\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00c\x1a\x08@}\xa4^S\x0dw\xd8z\xae\x1f\x0d\x0bQ\x16\x03\xef\x18|\xc8\xe3\xafjX\x93\x14`\x91\xb2\x84\xdc\x88N\xbe9\x8a:\xf3\xe6\x82\x89]\x017\xb3\xab$\xa4\x15\x0e\x925ZJD^NW\xfau\xce\x1fH\xcef\xf4<@&\x92\x98l\x1b\xee$F\x0c\x17\xb3R\xa5\xdb\xa5\x91\x91\xcf7\xd3o\xe7'\x08:N\x19\x1f:\xa7X\\x17\xcfy?\x8b\xe4\xa7\xd3&#\x9d&\x0fXi\xfcG~\xb2\xd0\x8d\x8b\x93\xbf)OCitvgK\xcf\x07\x8c\xe6\x02\xf7\xb5\xe1\xb4C\xb5K-\x14\x9f\xf9\xdc&\x0d\xbf\xa6Gt\x06\xd8\x88\xd1:)0\x84\xce\xd29\x80b\x1b\xa8\xc7WI\xbcjUQg\x15J\xbe5\x07\xe4\xd5u\x987y0\x14\xdb)\x9dl\xc5i\xccGU\xa20\xf7\xcc\\x7f\xc2\xc3\x98\x1ckN\x16\x80\xebzxeE\xa2\x00\x1a\xaf\x0c\x0dUd4H\xb8\x92\xb9\xf1\xb4P)\xf2O#\x1f\xdal\xac\x1fD\xe1\xdd#xQ[\xc7\x16", + ["CN=QuoVadis Root CA 1 G3,O=QuoVadis Limited,C=BM"] = "0\x82\x05`0\x82\x03H\xa0\x03\x02\x01\x02\x02\x14xX_.\xad,\x19K\xe37\x0754\x13(\xb5\x96\xd4e\x930\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000H1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1e0\x1c\x06\x03U\x04\x03\x13\x15QuoVadis Root CA 1 G30\x1e\x17\x0d120112172744Z\x17\x0d420112172744Z0H1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1e0\x1c\x06\x03U\x04\x03\x13\x15QuoVadis Root CA 1 G30\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xa0\xbeP\x10\x8e\xe9\xf2l@\xb4\x04\x9c\x85\xb91\xca\xdc-\xe4\x11\xa9\x04<\x1bU\xc1\xe7X0\x1d$\xb4\xc3\xef\x85\xde\x8c,\xe1\xc1=\xdf\x82\xe6O\xadG\x87l\xec[I\xc1J\xd5\xbb\x8f\xec\x87\xac\x7f\x82\x9a\x86\xec=\x03\x99R\x01\xd25\x9e\xac\xda\xf0S\xc9f<\xd4\xac\x02\x01\xda$\xd3;\xa8\x02F\xaf\xa4\x1c\xe3\xf8sXv\xb7\xf6\x0e\x90\x0d\xb5\xf0\xcf\xcc\xfa\xf9\xc6L\xe5\xc3\x860\x0a\x8d\x17~5\xeb\xc5\xdf\xbb\x0e\x9c\xc0\x8d\x87\xe3\x888\x85g\xfa>\xc7\xab\xe0\x13\x9c\x05\x18\x98\xcf\x93\xf5\xb1\x92\xb4\xfc#\xd3\xcf\xd5\xc4'I\xe0\x9e<\x9b\x08\xa3\x8b]*!\xe0\xfc9\xaaS\xda}~\xcf\x1a\x09S\xbc]\x05\x04\xcf\xa1J\x8f\x8bv\x82\x0d\xa1\xf8\xd2\xc7\x14w[\x906\x07\x81\x9b>\x06\xfaR^c\xc5\xa6\x00\xfe\xa5\xe9R\x1bR\xb5\x929r\x03\x09b\xbd\xb0`\x16n\xa6\xdd%\xc2\x03f\xdd\xf3\x04\xd1@\xe2N\x8b\x86\xf4o\xe5\x83\xa0'\x84^\x04\xc1\xf5\x90\xbd0=\xc4\xef\xa8i\xbc8\x9b\xa4\xa4\x96\xd1b\xdai\xc0\x01\x96\xae\xcb\xc4Q4\xea\x0c\xaa\xff!\x8eY\x8fJ\\xe4a\x9a\xa7\xd2\xe9*x\x8dQ=:\x15\xee\xa2Y\x8e\xa9\\xde\xc5\xf9\x90"\xe5\x88Eq\xdd\x91\x99lz\x9f==\x98|^\xf6\xbe\x16h\xa0^\xae\x0b#\xfcZ\x0f\xaa"v-\xc9\xa1\x10\x1d\xe4\xd3D#\x90\x88\x9f\xc6*\xe6\xd7\xf5\x9a\xb3X\x1e/0\x89\x08\x1bT\xa2\xb5\x98#\xec\x08w\x1c\x95]a\xd1\xcb\x89\x9c_\xa2J\x91\x9a\xef!\xaaI\x16\x08\xa8\xbda(1\xc9t\xad\x85\xf6\xd9\xc5\xb1\x8b\xd1\xe5\x102M_\x8b :z\xc7_w\xc7\xca\xdf\xcf_\xc3\x12\xc4@]\xd42\xaa\xb8j\xd7\xd5\x15\x15F\x98#\xa5\xe6\x90[\x18\x99L\xe3\xadB\xa3\x8216\x88\xcd\xe9\xfb\xc4\x04\x96H\x8b\x01\xc7\x8d\x01\xcf[3\x06\x96Fft\x1dO\xed\xc1\xb6\xb9\xb4\x0da\xccc~\xd7.w\x8c\x96\x1c*#hk\x85Wvp3\x13\xfe\xe1O\xa6#w\x18\xfa\x1a\x8c\xe8\xbde\xc9\xcf?\xf4\xc9\x17\xdc\xeb\xc7\xbc\xc0\x04.-F/if\xc3\x1b\x8f\xfe\xec>\xd3\xca\x94\xbfv\x0a%\x0d\xa9{\x02\x1c\xa9\xd0;_\x0b\xc0\x81:=d\xe1\xbf\xa7-N\xbdM\xc4\xd8)\xc6"\x18\xd0\xc5\xacr\x02\x82?\xaa:\xa2:"\x971\xdd\x08c\xc3u\x14\xb9`(-[h\xe0\x16\xa9f\x82#Q\xf5\xebS\xd81\x9b{\xe9\xb7\x9dK\xeb\x88\x16\xcf\xf9]8\x8aI0\x8f\xed\xf1\xeb\x19\xf4w\x1a1\x18MgTl/oe\xf9\xdb=\xec!\xec^\xf4\xf4\x8b\xca`eT\xd1qd\xf4\xf9\xa6\xa3\x81363q\xf0\xa4x_N\xad\x83!\xde4I\x8d\xe8Y\xac\x9d\xf2vZ6\xf2\x13\xf4\xaf\xe0\x09\xc7a*l\xf7\xe0\x9d\xae\xbb\x86J(o.\xee\xb4y\xcd\x903\xc3\xb3v\xfa\xf5\xf0l\x9d\x01\x90\xfa\x9e\x90\xf6\x9cr\xcfG\xda\xc3\x1f\xe45 S\xf2T\xd1\xdfa\x83\xa6\x02\xe2%8\xde\x852-^s\x90R]B\xc4\xce=K\xe1\xf9\x19\x84\x1d\xd5\xa2P\xccA\xfbA\x14\xc3\xbd\xd6\xc9Z\xa3cf\x02\x80\xbd\x05:;G\x9c\xec\x00&L\xf5\x88Q\xbf\xa8#\x7f\x18\x07\xb0\x0b\xed\x8b&\xa1d\xd3aJ\xeb\\x9f\xde\xb3\xafg\x03\xb3\x1f\xddm]ihi\xab^:\xec|i\xbc\xc7;\x85N\x9e\x15\xb9\xb4\x15O\xc3\x95zX\xd7\xc9l\xe9l\xb9\xf3)c^\xb4,\xf0-=\xedZe\xe0\xa9[@\xc2H\x99\x81m\x9e\x1f\x06*<\x12\xb4\x8b\x0f\x9b\xa2$\xf0\xa6\x8d\xd6z\xe0K\xb6d\x96c\x95\x84\xc2J\xcd\x1c.$\x873`\xe5\xc3", + ["CN=SwissSign Gold CA - G2,O=SwissSign AG,C=CH"] = "0\x82\x05\xba0\x82\x03\xa2\xa0\x03\x02\x01\x02\x02\x09\x00\xbb@\x1cC\xf5^O\xb00\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000E1\x0b0\x09\x06\x03U\x04\x06\x13\x02CH1\x150\x13\x06\x03U\x04\x0a\x13\x0cSwissSign AG1\x1f0\x1d\x06\x03U\x04\x03\x13\x16SwissSign Gold CA - G20\x1e\x17\x0d061025083035Z\x17\x0d361025083035Z0E1\x0b0\x09\x06\x03U\x04\x06\x13\x02CH1\x150\x13\x06\x03U\x04\x0a\x13\x0cSwissSign AG1\x1f0\x1d\x06\x03U\x04\x03\x13\x16SwissSign Gold CA - G20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xaf\xe4\xee~\x8b$\x0e\x12n\xa9P-\x16D;\x92\x92\\xca\xb8]\x84\x92B\x13*\xbceW\x82@>W$\xcdP\x8b%*\xb7o\xfc\xef\xa2\xd0\xc0\x1f\x02$J\x13\x96\x8f#\x13\xe6(X\x00\xa3G\xc7\x06\xa7\x84#+\xbb\xbd\x96+\x7fU\xcc\x8b\xc1W\x1f\x0ebe\x0f\xdd=V\x8as\xda\xae~m\xba\x81\x1c~B\x8c 5\xd9CM\x84\xfa\x84\xdbR,\xf3\x0e'w\x0bk\xbf\x11/rx\x9f.\xd8>\xe6\x187Z*r\xf9\xdab\x90\x92\x95\xca\x1f\x9c\xe9\xb3<+\xcb\xf3\x01\x13\xbfZ\xcf\xc1\xb5\x0a`\xbd\xdd\xb5\x99dS\xb8\xa0\x96\xb3o\xe2&w\x91\x8c\xe0b\x10\x02\x9f4\x0f\xa4\xd5\x923Q\xde\xbe\x8d\xba\x84z`)u\xe7~\xa7bX\xaf%4\xa5A\xc7=\xbc\x0dP\xca\x03\x03\x0f\x08Z\x1f\x95sxb\xbf\xafr\x14i\x0e\xa5\xe5\x03\x0ex\x8e&(B\xf0\x07\x0bb \x10g9F\xfa\xa9\x03\xcc\x048zf\xef \x83\xb5\x8cJV\x8e\x91\x00\xfc\x8e\\x82\xde\x88\xa0\xc3\xe2hn}\x8d\xef<\xdde\xf4]\xacQ\xef$\x80\xae\xaaV\x97o\xf9\xad}\xdaa?\x98w<\xa5\x91\xb6\x1c\x8c&\xdae\xa2\x09m\xc1\xe2T\xe3\xb9\xcaLL\x80\x8fw{`\x9a\x1e\xdf\xb6\xf2H\x1e\x0e\xbaNTm\x98\xe0\xe1\xa2\x1a\xa2wP\xcf\xc4c\x92\xecG\x19\x9d\xeb\xe6k\xce\xc1\x02\x03\x01\x00\x01\xa3\x81\xac0\x81\xa90\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14[%{\x96\xa4eQ~\xb89\xf3\xc0xf^\xe8:\xe7\xf0\xee0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14[%{\x96\xa4eQ~\xb89\xf3\xc0xf^\xe8:\xe7\xf0\xee0F\x06\x03U\x1d \x04?0=0;\x06\x09`\x85t\x01Y\x01\x02\x01\x010.0,\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16 http://repository.swisssign.com/0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00'\xba\xe3\x94|\xf1\xae\xc0\xde\x17\xe6\xe5\xd8\xd5\xf5T\xb0\x83\xf4\xbb\xcd^\x05{O\x9fuf\xaf<\xe8V~\xfcrx8\x03\xd9+b\x1b\x00\xb9\xf8\xe9`\xcd\xcc\xceQ\x8a\xc7P1n\xe1J~\x18/iY\xb6=d\x81+\xe3\x83\x84\xe6"\x87\x8e}\xe0\xee\x02\x99a\xb8\x1e\xf4\xb8+\x88\x12\x16\x84\xc21\x938\x961\xa6\xb9;S?\xc3$\x93V[i\x92\xec\xc5\xc1\xbb8\x00\xe3\xec\x17\xa9\xb8\xdc\xc7|\x01\x83\x9f2G\xbaR"4\x1d2z\x09V\xa7|%6\xa9=K\xda\xc0\x82o\x0a\xbb\x12\xc8\x87K'\x11\xf9\x1e-\xc7\x93?\x9e\xdb_&kR\xd9.\x8a\xf1\x14\xc6D\x8d\x15\xa9\xb7\xbf\xbd\xde\xa6\x1a\xee\xae-\xfbHw\x17\xfe\xbb\xec\xaf\x18\xf5*Q\xf09\x84\x97\x95ln\x1b\xc3+\xc4t`y%\xb0\x0a'\xdf\xdf^\xd29\xcfE}BK\xdf\xb3,\x1e\xc5\xc6]\xcaU:\xa0\x9ci\x9a\x8f\xda\xef\xb2\xb0<\x9f\x87l\x12+ep\x15R1\x1a$\xcfo1#P\x1f\x8cO\x8f#\xc3tAc\x1cU\xa8\x14\xdd>\xe0QP\xcf\xf1\x1b0V\x0e\x92\xb0\x82\x85\xd8\x83\xcb"d\xbc-\xb8%\xd5T\xa2\xb8\x06\xea\xad\x92\xa4$\xa0\xc1\x86\xb5J\x13jG\xcf.\x0bV\x95T\xcb\xce\x9a\xdbj\xb4\xa6\xb2\xdbA\x08\x86'w\xf7j\xa0Bl\x0b8\xce\xd7uP2\x92\xc2\xdf+0"H\xd0\xd5A8%]\xa4\xe9]\x9f\xc6\x94u\xd0E\xfd0\x97C\x8f\x90\xab\x0a\xc7\x86s`Ji-\xde\xa5x\xd7\x06\xdaj\x9eK>w: \x13"\x01\xd0\xbfh\x9ec`k5M\x0bm\xba\xa1=\xc0\x93\xe0\x7f#\xb3U\xadr%NF\xf9\xd2\x16\xef\xb0d\xc1\x01\x9e\xe9\xca\xa0j\x98\x0e\xcf\xd8`\xf2/I\xb8\xe4B\xe185\x16\xf4\xc8nO\xf7\x81V\xe8\xba\xa3\xbe#\xaf\xae\xfdo\x03\xe0\x02;0v\xfa\x1bmA\xcf\x01\xb1\xe9\xb8\xc9f\xf4\xdb&\xf3:\xa4t\xf2I$[\xc9\xb0\xd0W\xc1\xfa>z\xe1\x97\xc9", + ["CN=Certinomis - Root CA,OU=0002 433998903,O=Certinomis,C=FR"] = "0\x82\x05\x920\x82\x03z\xa0\x03\x02\x01\x02\x02\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000Z1\x0b0\x09\x06\x03U\x04\x06\x13\x02FR1\x130\x11\x06\x03U\x04\x0a\x13\x0aCertinomis1\x170\x15\x06\x03U\x04\x0b\x13\x0e0002 4339989031\x1d0\x1b\x06\x03U\x04\x03\x13\x14Certinomis - Root CA0\x1e\x17\x0d131021091718Z\x17\x0d331021091718Z0Z1\x0b0\x09\x06\x03U\x04\x06\x13\x02FR1\x130\x11\x06\x03U\x04\x0a\x13\x0aCertinomis1\x170\x15\x06\x03U\x04\x0b\x13\x0e0002 4339989031\x1d0\x1b\x06\x03U\x04\x03\x13\x14Certinomis - Root CA0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xd4\xcc\x09\x0a,?\x92\xf6\x7f\x14\x9e\x0b\x9c\x9aj\x1d@0d\xfd\xaa\xdf\x0e\x1e\x06[\x9fP\x85\xea\xcd\x8d\xabCg\xde\xb0\xfa~\x80\x96\x9e\x84x\x92H\xd6\xe39\xee\xce\xe4YX\x97\xe5.'\x98\xea\x93\xa8w\x9bJ\xf0\xeft\x80-\xeb0\x1f\xb5\xd9\xc7\x80\x9cb'\x91\x88\xf0J\x89\xdd\xdc\x88\xe6\x14\xf9\xd5\x03/\xff\x95\xdb\xbd\x9f\xec,\xfa\x14\x15Y\x95\x0a\xc6G|i\x18\xb9\xa7\x03\xf9\xcav\xa9\xcf\xc7o\xb4^\x05\xfe\xee\xc1R\xb2u2\x87\xec\xed)f;\xf3J\x16\x82\xf6\xd6\x9a\xdbr\x98\xe9\xde\xf0\xc5L\xa5\xab\xb5\xea\x01\xe2\x8c.d\x7fdo\xfd\xa3%\x93\x8b\xc8\xa2\x0eI\x8d4\xf0\x1f\xecXE.4\xaa\x84P\xbd\xe7\xb2J\x13\xb8\xb0\x0f\xae8]\xb0\xa9\x1b\xe6s\xc9Z\xa1\xd9f@\xaa\xa9M\xa64\x02\xad\x84~\xb2#\xc1\xfb*\xc6g\xf44\xb6\xb0\x95j3OqD\xb5\xad\xc0y3\x88\xe0\xbf\xed\xa3\xa0\x14\xb4\x9c\x09\xb0\x0a\xe3`\xbe\xf8\xf8f\x88\xcd[\xf1w\x05\xe0\xb5sn\xc1}F.\x8eK'\xa6\xcd5\x0a\xfd\xe5M}\xaa*\xa3)\xc7Zh\x04\xe8\xe5\xd6\x93\xa4b\xc2\xc5\xe6\xf4O\xc6\xf9\x9f\x1a\x8d\x82I\x19\x8a\xcaYC:\xe8\x0d2\xc1\xf4L\x13\x03on\xa6?\x91s\xcb\xcaso\x12 \x8b\xee\xc0\x82x\xdeK.\xc2I\xc3\x1d\xed\x16\xf6$\xf4'\x1b\W1\xdcU\xee\xa8\x1eol\xac\xe2E\xccWW\x8auW\x19\xe0\xb5X\x99I61<3\x01m\x16J\xcd\xb8*\x83\x84\x86\x9b\xf9`\xd2\x1fm\x91\x03\xd3`\xa6\xd5=\x9a\xddw\x90=5\xa4\x9f\x0f^\xf5RDi\xb9\xc0\xba\xdc\xcf}\xdf|\xd9\xc4\xac\x86"2\xbc{k\x91\xefz\xf8\x17h\xb0\xe2SU`-\xaf>\xc2\x83\xd8\xd9\x09+\xf0\xc0d\xdb\x87\x8b\x91\xcc\x91\xeb\x04\xfdv\xb4\x95\x9a\xe6\x14\x06\x1b\xd54\x1d\xbe\xd8\xfft\x1cS\x85\x99\xe0YRJa\xed\x88\x9ekI\x89F~ Z\xd9\xe7J\xe5j\xee\xd2e\x11C\x02\x03\x01\x00\x01\xa3c0a0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xef\x91L\xf5\xa5\xc30\xe8/\x08\xea\xd3q"\xa4\x92hxt\xd90\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xef\x91L\xf5\xa5\xc30\xe8/\x08\xea\xd3q"\xa4\x92hxt\xd90\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00~=T\xda"]\x1aX>;T'\xba\xba\xcc\xc8\xe3\x1aj\xea>\xf9\x12\xebV_=P\xce\xe0\xeaH&&\xcfyV~\x91\x1c\x99?\xd0\xa1\x91\x1c,\x0fO\x98\x95YS\xbd\xd0"\xd8\x88]\x9c7\xfc\xfbd\xc1x\x8c\x8b\x9a`\x09\xea\xd5\xfa!_\xd0te\xe7P\xc5\xbf.\xb9\x0b\x0b\xad\xb5\xb0\x17\xa6\x12\x8c\xd4bx\xeaVj\xec\x0a\xd2@\xc3<\x050>M\x94\xb7\x9fJ\x03\xd3}'K\xb6\xfeD\xce\xfa\x193\x1am\xa4B\xd1\xdd\xcc\xc8\xc8\xd7\x16R\x83O5\x94\xb3\x12U}\xe5\xe2B\xeb\xe4\x9c\x93\x09\xc0L[\x07\xab\xc7m\x11\xa0P\x17\x94#\xa8\xb5\x0a\x92\x0f\xb2z\xc1`,8\xcc\x1a\xa6[\xff\xf2\x0c\xe3\xaa\x1f\x1c\xdc\xb8\xa0\x93'\xdec\xe3\x7f!\x9f:\xe5\x9e\xfa\xe0\x13ju\xeb\x96\b\x91\x94\x8egS\xb6\x89\xf8\x12\x09\xcboR[\x03r\x86P\x95\x08\xd4\x8d\x87\x86\x15\x1f\x95$\xd8\xa4o\x9a\xce\xa4\x9d\x9bm\xd2\xb2v\x06\x86\xc6V\x08\xc5\xeb\x09\xda6\xc2\x1b[A\xbea*\xe3p\xe6\xb8\xa6\xf8\xb6Z\xc4\xbd!\xf7\xff\xaa_\xa1lv9f\xd6\xeaLU\xe1\x003\x9b\x13\x98c\xc9o\xd0\x01 \x097R\xe7\x0cO>\xcd\xbc\xf5_\x96'\xa7 \x02\x95\xe0.\xe8\x07A\x05\x1f\x15n\xd6\xb0\xe4\x19\xe0\x0f\x02\x93\x00'r\xc5\x8b\xd1T\x1f]J\xc3@\x97~U\xa6|\xc13\x04\x14\x01\x1dI i\x0b\x19\x93\x9dnX"\xf7@\x0cF\x0c#c\xf39\xd2\x7fvQ\xa7\xf4\xc8\xa1\xf1\x0cv"#FR)-\xe2\xa3A\x07Vi\x98\xd2\x05\x09\xbci\xc7Za\xcd\x8f\x81`\x15M\x80\xdd\x90\xe2}\xc4P\xf2\x8c;nJ\xc7\xc6\xe6\x80+<\x81\xbc\x11\x80\x16\x10'\xd7\xf0\xcd?y\xccs*\xc3~S\x91\xd6n\xf8\xf5\xf3\xc7\xd0QM\x8eK\xa5[\xe6\x19\x17;\xd6\x81\x09\xdc"\xdc\xee\x8e\xb9\xc4\x8fS\xe1g\xbb3\xb8\x88\x15F\xcf\xedi5\xffu\x0dF\xf3\xceq\xe1\xc5k\x86B\x06\xb9A", + ["CN=GDCA TrustAUTH R5 ROOT,O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD.,C=CN"] = "0\x82\x05\x880\x82\x03p\xa0\x03\x02\x01\x02\x02\x08}\x09\x97\xfe\xf0G\xeaz0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000b1\x0b0\x09\x06\x03U\x04\x06\x13\x02CN1200\x06\x03U\x04\x0a\x0c)GUANG DONG CERTIFICATE AUTHORITY CO.,LTD.1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16GDCA TrustAUTH R5 ROOT0\x1e\x17\x0d141126051315Z\x17\x0d401231155959Z0b1\x0b0\x09\x06\x03U\x04\x06\x13\x02CN1200\x06\x03U\x04\x0a\x0c)GUANG DONG CERTIFICATE AUTHORITY CO.,LTD.1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16GDCA TrustAUTH R5 ROOT0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xd9\xa3\x16\xf0\xc8ttw\x9b\xef3\x0d;\x06~U\xfc\xb5`\x8fv\x86\x12B}Vf>\x88\x82\xedrc\x0e\x9e\x8b\xdd4,\x02QQ\xc3\x19\xfdYT\x84\xc9\xf1k\xb3L\xb0\xe9\xe8F]8\xc6\xa2\xa7.\x11W\xba\x82\x15\xa2\x9c\x8fm\xb0\x99J\x0a\xf2\xeb\x89pcNy\xc4\xb7[\xbd\xa2]\xb1\xf2A\x02+\xad\xa9:\xa3\xecy\x0a\xec_:\xe3\xfd\xef\x80<\xad4\x9b\x1a\xab\x88&{V\xa2\x82\x86\x1f\xeb5\x89\x83\x7f_\xae)N=\xb6n\xec\xae\xc1\xf0'\x9b\xae\xe3\xf4\xec\xef\xae\x7f\xf7\x86=rz\xeb\xa5\xfbYN\xa7\xeb\x95\x8c"9y\xe1-\x08\x8f\xcc\xbc\x91\xb8A\xf7\x14\xc1#\xa9\xc3\xad\x9aED\xb3\xb2\xd7,\xcd\xc6)\xe2P\x10\xae\\xcb\x82\x8e\x17\x186}\x97\xe6\x88\x9a\xb0M4\x09\xf4,\xb9Zf*\xb0\x17\x9b\x9e\x1ev\x9dJf1A\xdf?\xfb\xc5\x06\xef\x1b\xb6~\x1aF6\xf7dc;\xe39\x18#\xe7gu\x14\xd5uW\x927\xbd\xbej\x1b&P\xf26&\x06\x90\xc5p\x01dmvf\xe1\x91\xdbn\x07\xc0a\x80.\xb2./\x8cp\xa7\xd1;<\xb3\x91\xe4n\xb6\xc4;p\xf2l\x92\x97\x09\xcdG}\x18\xc0\xf3\xbb\x9e\x0f\xd6\x8b\xae\x07\xb6Z\x0f\xce\x0b\x0cG\xa7\xe5>\xb8\xbd}\xc7\x9b5\xa0a\x97:Au\x17\xcc+\x96w*\x92!\x1e\xd9\x95v gh\xcf\x0d\xbd\xdf\xd6\x1f\x09j\x9a\xe2\xccsq\xa4/}\x12\x80\xb7S0F^KT\x99\x0fg\xc9\xa5\xc8\xf2 \xc1\x82\xec\x9d\x11\xdf\xc2\x02\xfb\x1a;\xd1\xed \x9a\xefed\x92\x10\x0d*\xe2\xdep\xf1\x18g\x82\x8ca\xde\xb8\xbc\xd1/\x9c\xfb\x0f\xd0+\xed\x1bv\xb9\xe49U\xf8\xf8\xa1\x1d\xb8\xaa\x80\x00L\x82\xe7\xb2\x7f\x09\xb8\xbc0\xa0/\x0d\xf5R\x9e\x8e\xf7\x92\xb3\x0a\x00\x1d\x00T\x97\x06\xe0\xb1\x07\xd9\xc7\x0f\e}\xe7\x81\x8a\x18W9\x85t\x1aB\xc7\xe9[\x13_\x8f\xf9\x08\xe9\x92t\x8d\xf5G\xd2\xab;\xd6\xfbxfN6}\xf9\xe9\x92\xe9\x04\xde\xfdIc\xfcm\xfb\x14q\x93g/GJ\xb7\xb9\xff\x1e*spF0\xbfZ\xf2/y\xa5\xe1\x8d\x0c\xd9\xf9\xb2c7\x8c7e\x85pj\[\x09r\xb9\xadc<\xb1\xdd\xf8\xfc2\xbf7\x86\xe4\xbb\x8e\x98'~\xba\x1f\x16\xe1p\x11\xf2\x03\xdf%b2'&\x182\x84\x9f\xff\x00:\x13\xba\x9aM\xf4O\xb8\x14p"\xb1\xca+\x90\xce)\xc1p\xf4/\x9d\x7f\xf2\x90\x1e\xd6Z\xdf\xb7F\xfc\xe6\x86\xfa\xcb\xe0 vz\xba\xa6\xcb\xf5|\xdeb\xa5\xb1\x8b\xee\xde\x82f\x8aN:0\x1f?\x80\xcb\xad'\xba\x0c^\xd7\xd0\xb1V\xcawq\xb2\xb5u\xa1P\xa9@C\x17\xc2(\xd9\xcfR\x8b[\xc8c\xd4B>\xa03zF.\xf7\x0a FT~jO1\xf1\x81~Bt8es'\xee\xc6|\xb8\x8e\xd7\xa5:\xd7\x98\xa1\x9c\x8c\x10U\xd3\xdbK\xec@\x90\xf2\xcdnW\xd2b\x0e|W\x93\xb1\xa7m\xcd\x9d\x83\xbb*\xe7\xe5\xb6;qX\xad\xfd\xd1E\xbcZ\x91\xeeS\x15o\xd3E\x09un\xba\x90]\x1e\x04\xcf7\xdf\x1e\xa8f\xb1\x8c\xe6 j\xef\xfcHNt\x98B\xaf)o.j\xc7\xfb}\xd1f1"\xcc\x86\x00~f\x83\x0cB\xf4\xbd4\x92\xc3\x1a\xeaO\xca~rM\x0bp\x8c\xa6H\xbb\xa6\xa1\x14\xf6\xfbXD\x99\x14\xae\xaa\x0b\x93i\xa0)%J\xa5\xcb+\xdd\x8af\x07\x16x\x15Wq\x1b\xec\xf5G\x84\xf3\x9e17z\xd5\x7f$\xad\xe4\xbc\xfd\xfd\xccn\x83\xe8\x0c\xa8\xb7Al\x07\xdd\xbd<\x86\x97/\xd2", + ["CN=Certum Trusted Network CA,OU=Certum Certification Authority,O=Unizeto Technologies S.A.,C=PL"] = "0\x82\x03\xbb0\x82\x02\xa3\xa0\x03\x02\x01\x02\x02\x03\x04D\xc00\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000~1\x0b0\x09\x06\x03U\x04\x06\x13\x02PL1"0 \x06\x03U\x04\x0a\x13\x19Unizeto Technologies S.A.1'0%\x06\x03U\x04\x0b\x13\x1eCertum Certification Authority1"0 \x06\x03U\x04\x03\x13\x19Certum Trusted Network CA0\x1e\x17\x0d081022120737Z\x17\x0d291231120737Z0~1\x0b0\x09\x06\x03U\x04\x06\x13\x02PL1"0 \x06\x03U\x04\x0a\x13\x19Unizeto Technologies S.A.1'0%\x06\x03U\x04\x0b\x13\x1eCertum Certification Authority1"0 \x06\x03U\x04\x03\x13\x19Certum Trusted Network CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xe3\xfb}\xa3r\xba\xc2\xf0\xc9\x14\x87\xf5k\x01N\xe1n@\x07\xbam']\x7f\xf7[-\xb3Z\xc7Q_\xab\xa42\xa6a\x87\xb6n\x0f\x86\xd20\x02\x97\xf8\xd7iW\xa1\x189]jdy\xc6\x01Y\xac<1J8|\xd2\x04\xd2K(\xe8 _;\x07\xa2\xccMs\xdb\xf3\xaeO\xc7V\xd5Z\xa7\x96\x89\xfa\xf3\xabh\xd4#\x86Y'\xcf\x09'\xbc\xacnr\x83\x1c0r\xdf\xe0\xa2\xe9\xd2\xe1tu\x19\xbd*\x9e{\x15T\x04\x1b\xd7C9\xadU(\xc5\xe2\x1a\xbb\xf4\xc0\xe4\xae8I3\xccv\x85\x9f9E\xd2\xa4\x9e\xf2\x12\x8cQ\xf8|\xe4-\x7f\xf5\xac_\xeb\x16\x9f\xb1-\xd1\xba\xcc\x91BwL%\xc9\x908o\xdb\xf0\xcc\xfb\x8e\x1e\x97Y>\xd5`N\xe6\x05(\xedIy\x13K\xbaH\xdb/\xf9r\xd39\xca\xfe\x1f\xd84r\xf5\xb4@\xcf1\x01\xc3\xec\xde\x11-\x17]\x1f\xb8P\xd1^\x19\xa7i\xde\x073(\xcaP\x95\xf9\xa7T\xcbT\x86PE\xa9\xf9I\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x08v\xcd\xcb\x07\xff$\xf6\xc5\xcd\xed\xbb\x90\xbc\xe2\x847Fu\xf70\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xa6\xa8\xad"\xce\x01=\xa6\xa3\xffb\xd0H\x9d\x8b^r\xb0xD\xe3\xdc\x1c\xaf\x09\xfd#H\xfa\xbd*\xc4\xb9U\x04\xb5\x10\xa3\x8d'\xde\x0b\x82c\xd0\xee\xde\x0c7yA["\xb2\xb0\x9aA\\xa6p\xe0\xd4\xd0w\xcb#\xd3\x00\xe0lV/\xe1i\x0d\x0d\xd9\xaa\xbf!\x81P\xd9\x06\xa5\xa8\xff\x957\xd0\xaa\xfe\xe2\xb3\xf5\x99-E\x84\x8a\xe5B\x09\xd7t\x02/\xf7\x89\xd8\x99\xe9\xbc'\xd4G\x8d\xba\x0dF\x1cw\xcf\x14\xa4\x1c\xb9\xa41\xc4\x9c(t\x034\xff3\x19&\xa5\xe9\x0dt\xb7>\x97\xc6v\xe8'\x96\xa3f\xdd\xe1\xae\xf2A[\xca\x98V\x83sp\xe4\x86\x1a\xd21A\xba/\xbe-\x13ZvoN\xe8N\x81\x0e?[\x03"\xa0\x12\xbefX\x11J\xcb\x03\xc4\xb4**-\x96\x17\xe09T\xbcH\xd3v'\x9d\x9a-\x06\xa6\xc9\xec9\xd2\xab\xdb\x9f\x9a\x0b'\x025)\xb1@\x95\xe7\xf9\xe8\x9cU\x88\x19F\xd6\xb74\xf5~\xce9\x9a\xd98\xf1Q\xf7O,", + ["CN=SSL.com Root Certification Authority RSA,O=SSL Corporation,L=Houston,ST=Texas,C=US"] = "0\x82\x05\xdd0\x82\x03\xc5\xa0\x03\x02\x01\x02\x02\x08{,\x9b\xd3\x16\x802\x990\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000|1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0e0\x0c\x06\x03U\x04\x08\x0c\x05Texas1\x100\x0e\x06\x03U\x04\x07\x0c\x07Houston1\x180\x16\x06\x03U\x04\x0a\x0c\x0fSSL Corporation110/\x06\x03U\x04\x03\x0c(SSL.com Root Certification Authority RSA0\x1e\x17\x0d160212173939Z\x17\x0d410212173939Z0|1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0e0\x0c\x06\x03U\x04\x08\x0c\x05Texas1\x100\x0e\x06\x03U\x04\x07\x0c\x07Houston1\x180\x16\x06\x03U\x04\x0a\x0c\x0fSSL Corporation110/\x06\x03U\x04\x03\x0c(SSL.com Root Certification Authority RSA0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xf9\x0f\xdd\xa3+}\xcb\xd0*\xfe\xecg\x85\xa6\xe7.\x1b\xbaw\xe1\xe3\xf5\xaf\xa4\xec\xfaJ]\x91\xc4WGk\x18wkv\xf2\xfd\x93\xe4=\x0f\xc2\x16\x9e\x0bf\xc3V\x94\x9e\x17\x83\x85\xceV\xef\xf2\x16\xfd\x00b\xf5"\x09T\xe8e\x17NA\xb9\xe0OF\x97\xaa\x1b\xc8\xb8nb^i\xb1_\xdb*\x02~\xfcl\xca\xf3A\xd8\xed\xd0\xe8\xfc?aH\xed\xb0\x03\x14\x1d\x10\x0eK\x19\xe0\xbbN\xec\x86e\xff6\xf3^g\x02\x0b\x9d\x86Ua\xfdz8\xed\xfe\xe2\x19\x00\xb7o\xa1Pbut<\xa0\xfa\xc8%\x92\xb4nz"\xc7\xf8\x1e\xa1\xe3\xb2\xdd\x911\xab+\x1d\x04\xff\xa5J\x047\xe9\x85\xa43+\xfd\xe2\xd6U4|\x19\xa4Jh\xc7\xb2\xa8\xd3\xb7\xca\xa1\x93\x88\xeb\xc1\x97\xbc\x8c\xf9\x1d\xd9"\x84$t\xc7\x04=j\xa9)\x93\xcc\xeb\xb8[\xe1\xfe_%\xaa4X\xc8\xc1#T\x9d\x1b\x98\x11\xc38\x9c~=\x86l\xa5\x0f@\x86|\x02\xf4\\x02O(\xcb\xaeq\x9f\x0f:\xc83\xfe\x11%5\xea\xfc\xba\xc5`=\xd9|\x18\xd5\xb2\xa9\xd3ux\x03r"\xca:\xc3\x1f\xef,\xe5.\xa9\xfa\x9e,\xb6QF\xfd\xaf\x03\xd6\xea`h\xea\x85\x166k\x85\xe9\x1e\xc0\xb3\xdd\xc4$\xdc\x80*\x81Am\x94>\xc8\xe0\xc9\x81A\x00\x9e^\xbf\x7f\xc5\x08\x98\xa2\x18,B@\xb3\xf9o8'KN\x80\xf4=\x81G\xe0\x88|\xea\x1c\xce\xb5u\Q.\x1c+\x7f\x1ar(\xe7\x00\xb5\xd1t\xc6\xd7\xe4\x9f\xad\x07\x93\xb6S55\xfc7\xe4\xc3\xf6]\x16\xbe!s\xde\x92\x0a\xf8\xa0cj\xbc\x96\x92j>\xf8\xbceU\x9b\xde\xf5\x0d\x89&\x04\xfc%\x1a\xa6%i\xcb\xc2m\xca|\xe2Y_\x97\xac\xeb\xef.\xc8\xbc\xd7\x1bY<+\xcc\xf2\x19\xc8\x93k'c\x19\xcf\xfc\xe9&\xf8\xcaq\x9b\x7f\x93\xfe4g\x84N\x99\xeb\xfc\xb3x\x093p\xbaf\xa6v\xed\x1bs\xeb\x1a\xa5\x0d\xc4"\x13 \x94V\x0aN,lN\xb1\xfd\xcf\x9c\x09\xba\xa23\xed\x87\x02\x03\x01\x00\x01\xa3c0a0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xdd\x04\x09\x07\xa2\xf5z}RS\x12\x92\x95\xee8\x80%\x0d\xa6Y0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xdd\x04\x09\x07\xa2\xf5z}RS\x12\x92\x95\xee8\x80%\x0d\xa6Y0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00 \x18\x11\x94)\xfb&\x9d\x1c\x1e\x1epa\xf1\x95r\x93q$\xadh\x93X\x8e2\xaf\x1b\xb3p\x03\xfc%+t\x85\x90=xj\xf4\xb9\x8b\xa5\x97;\xb5\x18\x91\xbb\x1e\xa7\xf9@[\x91\xf9U\x99\xaf\x1e\x11\xd0\\x1d\xa7f\xe3\xb1\x94\x07\x0c29\xa6\xea\x1b\xb0y\xd8\x1d\x9cpD\xe3\x8a\xdd\xc4\xf9\x95\x1f\x8a8C?\x01\x85\xa5G\xa7=F\xb2\xbc\xe5"h\xf7{\x9c\xd8,>\x0a!\xc8-3\xac\xbf\xc5\x81\x991t\xc1uq\xc5\xbe\xb1\xf0#E\xf4\x9dk\xfc\x19c\x9d\xa3\xbc\x04\xc6\x18\x0b%\xbbS\x89\x0f\xb3\x80P\xdeE\xeeD\x7f\xab\x94xd\x98\xd3\xf6(\xdd\x87\xd8pet\xfb\x0e\xb9\x13\xeb\xa7\x0fa\xa92\x96\xcc\xde\xbb\xedcL\x18\xbb\xa9@\xf7\xa0Tn \x88qu\x18\xeaz\xb44r\xe0#'w\\xb6\x90\xea\x86%@\xab\xef3\x0f\xcb\x9f\x82\xbe\xa2 \xfb\xf6\xb5-\x1a\xe6\xc2\x85\xb1t\x0f\xfb\xc8e\x02\xa4R\x01G\xddI"\xc1\xbf\xd8\xebk\xac~\xde\xecc3\x15\xb7#\x08\x8f\xc6\x0f\x8dAZ\xdd\x8e\xc5\xb9\x8f\xe5E?x\xdb\xba\xd2\x1b@\xb1\xfeqM?\xe0\x81\xa2\xba^\xb4\xec\x15\xe0\x93\xdd\x08\x1f~\xe1U\x99\x0b!\xde\x93\x9e\x0a\xfb\xe6\xa3I\xbd60\xfe\xe7w\xb2\xa0u\x97\xb5-\x81\x88\x17e \xf7\xda\x90\x00\x9f\xc9R\xcc2\xca5|\xf5=\x0f\xd8+\xd7\xf5&l\xc9\x064\x96\x16\xeapY\x1a2yy\x0b\xb6\x88\x7f\x0fRH=\xbfl\xd8\xa2D.\xd1N\xb7rX\xd3\x89\x13\x95\xfeD\xab\xf8\xd7\x8b\x1bn\x9c\xbc,\xa0[\xd5j\x00\xaf_7\xe1\xd5\xfa\x10\x0b\x98\x9c\x86\xe7&\x8f\xce\xf0\xecn\x8aW\x0b\x80\xe3N\xb2\xc0\xa0ca\x90\xbaUh7tj\xb6\x92\xdb\x9f\xa1\x86"\xb6e'\x0e\xec\xb6\x9fB`\xe4g\xc2\xb5\xdaA\x0b\xc4\xd3\x8ba\x1b\xbc\xfa\x1f\x91+\xd7D\x07^\xba)\xac\xd9\xc5\xe9\xefSHZ\xeb\x80\xf1(X!\xcd\xb0\x06U\xfb'?S\x90p\xa9\x04\x1eW'\xb9", + ["CN=SecureTrust CA,O=SecureTrust Corporation,C=US"] = "0\x82\x03\xb80\x82\x02\xa0\xa0\x03\x02\x01\x02\x02\x10\x0c\xf0\x8e\\x08\x16\xa5\xadB\x7f\xf0\xeb'\x18Y\xd00\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000H1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1 0\x1e\x06\x03U\x04\x0a\x13\x17SecureTrust Corporation1\x170\x15\x06\x03U\x04\x03\x13\x0eSecureTrust CA0\x1e\x17\x0d061107193118Z\x17\x0d291231194055Z0H1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1 0\x1e\x06\x03U\x04\x0a\x13\x17SecureTrust Corporation1\x170\x15\x06\x03U\x04\x03\x13\x0eSecureTrust CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xab\xa4\x81\xe5\x95\xcd\xf5\xf6\x14\x8e\xc2O\xca\xd4\xe2x\x95X\x9cA\xe1\x0d\x99@$\x179\x913f\xe9\xbe\xe1\x83\xafb\\x89\xd1\xfc$[a\xb3\xe0\x11\x11A\x1c\x1dn\xf0\xb8\xbb\xf8\xde\xa7\x81\xba\xa6H\xc6\x9f\x1d\xbd\xbe\x8e\xa9A>\xb8\x94\xed)\x1a\xd4\x8e\xd2\x03\x1d\x03\xefm\x0dg\x1cW\xd7\x06\xad\xca\xc8\xf5\xfe\x0e\xaff%H\x04\x96\x0b]\xa3\xba\x16\xc3\x08O\xd1F\xf8\x14\\xf2\xc8^\x01\x99m\xfd\x88\xcc\x86\xa8\xc1o1BlR>h\xcb\xf3\x194\xdf\xbb\x87\x18V\x80&\xc4\xd0\xdc\xc0o\xdf\xde\xa0\xc2\x91\x16\xa0d\x11KD\xbc\x1e\xf6\xe7\xfac\xdef\xacv\xa4q\xa3\xec6\x94hzw\xa4\xb1\xe7\x0e/\x81z\xe2\xb5r\x86\xef\xa2k\x8b\xf0\x0f\xdb\xd3Y?\xbar\xbcD$\x9c\xe3s\xb3\xf7\xafW/B&\x9d\xa9t\xba\x00R\xf2K\xcdS|G\x0b6\x85\x0ef\xa9\x08\x97\x164W\xc1f\xf7\x80\xe3\xedpT\xc7\x93\xe0.(\x15Y\x87\xba\xbb\x02\x03\x01\x00\x01\xa3\x81\x9d0\x81\x9a0\x13\x06\x09+\x06\x01\x04\x01\x827\x14\x02\x04\x06\x1e\x04\x00C\x00A0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x860\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14B2\xb6\x16\xfa\x04\xfd\xfe]Kz\xc3\xfd\xf7L@\x1dZC\xaf04\x06\x03U\x1d\x1f\x04-0+0)\xa0'\xa0%\x86#http://crl.securetrust.com/STCA.crl0\x10\x06\x09+\x06\x01\x04\x01\x827\x15\x01\x04\x03\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x000\xedOJ\xe1X:Rr[\xb5\xa6\xa3e\x18\xa6\xbbQ;w\xe9\x9d\xea\xd3\x9f\\xe0Ee{\x0d\xca[\xe2pP\xb2\x94\x05\x14\xaeI\xc7\x8dA\x07\x12s\x94~\x0c#!\xfd\xbc\x10\x7f`\x10Zr\xf5\x98\x0e\xac\xec\xb9\x7f\xddzo]\xd3\x1c\xf4\xff\x88\x05iB\xa9\x05q\xc8\xb7\xac&\xe8.\xb4\x8cj\xffq\xdc\xb8\xb1\xdf\x99\xbc|!T+\xe4X\xa2\xbbW)\xae\x9e\xa9\xa3\x19&\x0f\x99.\x08\xb0\xef\xfdi\xcf\x99\x1a\x09\x8d\xe3\xa7\x9f+\xc964{$\xb3xL\x95\x17\xa4\x06&\x1e\xb6dR6_`g\xd9\x9c\xc5\x05t\x0b\xe7g#\xd2\x08\xfc\x88\xe9\xae\x8b\x7f\xe10\xf47~\xfd\xc62\xda-\x9eD00l\xee\x07\xde\xd24\xfc\xd2\xff@\xf6K\xf4fF\x06T\xa6\xf22\x0ac&0k\x9b\xd1\xdc\x8bG\xba\xe1\xb9\xd5b\xd0\xa2\xa0\xf4g\x05x)c\x1ao\x04\xd6\xf8\xc6L\xa3\x9a\xb17\xb4\x8d\xe5(K\x1d\x9e,\xc2\xb8h\xbc\xed\x02\xee1", + ["CN=QuoVadis Root CA 3 G3,O=QuoVadis Limited,C=BM"] = "0\x82\x05`0\x82\x03H\xa0\x03\x02\x01\x02\x02\x14.\xf5\x9b\x02(\xa7\xdbz\xff\xd5\xa3\xa9\xee\xbd\x03\xa0\xcf\x12j\x1d0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000H1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1e0\x1c\x06\x03U\x04\x03\x13\x15QuoVadis Root CA 3 G30\x1e\x17\x0d120112202632Z\x17\x0d420112202632Z0H1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1e0\x1c\x06\x03U\x04\x03\x13\x15QuoVadis Root CA 3 G30\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xb3\xcb\x0e\x10g\x8e\xea\x14\x97\xa72*\x0aV6\x7fhL\xc7\xb3o:#\x14\x91\xff\x19\x7f\xa5\xca\xac\xee\xb3v\x9dz\xe9\x8b\x1b\xabk1\xdb\xfa\x0bSL\xaf\xc5\xa5\x1ay<\x8aL\xff\xac\xdf%\xdeN\xd9\x822\x0bD\xde\xca\xdb\x8c\xac\xa3n\x16\x83;\xa6dK2\x89\xfb\x16\x168~\xebC\xe2\xd3tJ\xc2b\x0as\x0a\xddI\xb3W\xd2\xb0\x0a\x85\x9dq<\xde\xa3\xcb\xc02\xf3\x019 C\x1b5\xd1S\xb3\xb1\xee\xc5\x93i\x82>\x16\xb5(F\xa1\xde\xea\x89\x09\xedC\xb8\x05F\x8a\x86\xf5YG\xbe\x1bo\x01!\x10\xb9\xfd\xa9\xd2(\xca\x109\x09\xca\x136\xcf\x9c\xad\xad@ty+\x02?4\xff\xfa i}\xd3\xeea\xf5\xba\xb3\xe70\xd07#\x86raE)HYhow\xa6.\x81\xbe\x07Mo\xaf\xce\xc4E\x13\x91\x14p\x06\x8f\x1f\x9f\xf8\x87i\xb1\x0e\xef\xc3\x89\x19\xeb\xea\x1ca\xfczl\x8a\xdc\xd6\x03\x0b\x9e&\xba\x12\xdd\xd4T9\xab&\xa33\xeau\x81\xda-\xcd\x0fO\xe4\x03\xd1\xef\x15\x97\x1bk\x90\xc5\x02\x90\x93f\x02!\xb1G\xde\x8b\x9aJ\x80\xb9U\x8f\xb5\xa2/\xc0\xd63g\xda~\xc4\xa7\xb4\x04D\xebG\xfb\xe6X\xb9\xf7\x0c\xf0{+\xb1\xc0p)\xc3@b-;Hi\xdc#\x88l`\x7f\x90O\x95\xf7\xf6-\xad\x019\x07\x04\xfau\x80}\xbfIP\xed\xef\xc9\xc4|\x1c\xeb\x80~\xdb\xb6\xd0\xdd\x13\xfe\xc9\xd3\x9c\xd7\xb2\x97\xa9\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xc6\x17\xd0\xbc\xa8\xea\x02C\xf2\x1b\x06\x99]+\x90 \xb9\xd7\x9c\xe40\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x004a\xd9V\xb5\x12\x87UM\xdd\xa351F\xbb\xa4\x07r\xbc_ab\xe8\xa5\xfb\x0b7\xb1<\xb6\xb3\xfa)\x9d\x7f\x02\xf5\xa4\xc9\xa8\x93\xb7zq(i\x8fs\xe1R\x90\xda\xd5\xbe:\xe5\xb7vjV\x80!\xdf]\xe6\xe9:\x9e\xe5>\xf6\xa2i\xc7*\x0a\xb0\x18G\xdc p}R\xa3>Y|\xc1\xba\xc9\xc8\x15@a\xcar\xd6p\xac\xd2\xb7\xf0\x1c\xe4\x86)\xf0\xce\xefhc\xd0\xb5 \x8a\x15a\x9a~\x86\x98\xb4\xc9\xc2v\xfb\xcc\xba0\x16\xcc\xa3a\xc6t\x13\xe5k\xef\xa3\x15\xea\x03\xfe\x13\x8bd\xe4\xd3\xc1\xd2\xe8\x84\xfbI\xd1\x10Myf\xeb\xaa\xfd\xf4\x8d1\x1ep\x14\xad\xdc\xdeg\x13L\x81\x15a\xbc\xb7\xd9\x91wq\x19\x81`\xbb\xf0X\xa5\xb5\x9c\x0b\xf7\x8f"U'\xc0K\x01m;\x99\x0d\xd4\x1d\x9bcg/\xd0\xee\x0d\xcaf\xbc\x94O\xa6\xad\xed\xfc\xeec\xacW?e%\xcf\xb2\x86\x8f\xd0\x08\xff\xb8v\x14n\xde\xe5'\xec\xabx\xb5S\xb9\xb6?\xe8 \xf9\xd2\xa8\xbeaF\xca\x87\x8c\x84\xf3\xf9\xf1\xa0h\x9b"\x1e\x81&\x9b\x10\x04\x91q\xc0\x06\x1f\xdc\xa0\xd3\xb9V\xa7\xe3\x98-\x7f\x83\x9d\xdf\x8c+\x9c2\x8e2\x94\xf0\x01<"*\x9fC\xc2.\xc3\x989\x078{\xfc^\x00B\x1f\xf32&y\x83\x84\xf6\xe5\xf0\xc1Q\x12\xc0\x0b\x1e\x04#\x0cT\xa5L/I\xc5J\xd1\xb6n`\x0dk\xfck\x8b\x85$d\xb7\x89\x0e\xab%G[<\xcf~I\xbd\xc7\xe9\x0a\xc6\xda\xf7~\x0e\x17\x08\xd3H\x97\xd0q\x92\xf0\x0f9>4j\x1c}\xd8\xf2"\xae\xbbi\xf43\xb4\xa6HU\xd1\x0f\x0e&\xe8\xec\xb6\x0b-\xa7\x855\xcd\xfdY\xc8\x9f\xd1\xcd>Z)4\xb9=\x84\xce\xb1e\xd4Y\x91\x91Vu!\xc1w\x9e\xf9z\xe1`\x9d\xd3\xad\x04\x18\xf4|\xeb^\x93\x8fSJ")\xf8H+>M\x86\xac[\x7f\xcb\x06\x99Y`\xd8Xe\x95\x8dD\xd1\xf7\x7f~'\x7f}\xae\x80\xf5\x07L\xb6>\x9cqT\x99\x04K\xfdX\xf9\x98\xf4", + ["CN=AAA Certificate Services,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB"] = "0\x82\x0420\x82\x03\x1a\xa0\x03\x02\x01\x02\x02\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000{1\x0b0\x09\x06\x03U\x04\x06\x13\x02GB1\x1b0\x19\x06\x03U\x04\x08\x0c\x12Greater Manchester1\x100\x0e\x06\x03U\x04\x07\x0c\x07Salford1\x1a0\x18\x06\x03U\x04\x0a\x0c\x11Comodo CA Limited1!0\x1f\x06\x03U\x04\x03\x0c\x18AAA Certificate Services0\x1e\x17\x0d040101000000Z\x17\x0d281231235959Z0{1\x0b0\x09\x06\x03U\x04\x06\x13\x02GB1\x1b0\x19\x06\x03U\x04\x08\x0c\x12Greater Manchester1\x100\x0e\x06\x03U\x04\x07\x0c\x07Salford1\x1a0\x18\x06\x03U\x04\x0a\x0c\x11Comodo CA Limited1!0\x1f\x06\x03U\x04\x03\x0c\x18AAA Certificate Services0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xbe@\x9d\xf4n\xe1\xeav\x87\x1cMED\x8e\xbeF\xc8\x83\x06\x9d\xc1*\xfe\x18\x1f\x8e\xe4\x02\xfa\xf3\xab]P\x8a\x161\x0b\x9a\x06\xd0\xc5p"\xcdI-Tc\xcc\xb6nhF\x0bS\xea\xcbL$\xc0\xbcrN\xea\xf1\x15\xae\xf4T\x9a\x12\x0a\xc3z\xb23`\xe2\xda\x89U\xf3"X\xf3\xde\xdc\xcf\xef\x83\x86\xa2\x8c\x94O\x9fh\xf2\x98\x90F\x84'\xc7v\xbf\xe3\xcc5,\x8b^\x07de\x82\xc0H\xb0\xa8\x91\xf9a\x9fv P\xa8\x91\xc7f\xb5\xebxb\x03V\xf0\x8a\x1a\x13\xea1\xa3\x1e\xa0\x99\xfd8\xf6\xf6'2Xo\x07\xf5k\xb8\xfb\x14+\xaf\xb7\xaa\xcc\xd6c_s\x8c\xda\x05\x99\xa88\xa8\xcb\x17x6Q\xac\xe9\x9e\xf4x:\x8d\xcf\x0f\xd9B\xe2\x98\x0c\xab/\x9f\x0e\x01\xde\xef\x9f\x99I\xf1-\xdf\xactM\x1b\x98\xb5G\xc5\xe5)\xd1\xf9\x90\x18\xc7b\x9c\xbe\x83\xc7&{>\x8a%\xc7\xc0\xdd\x9d\xe65h\x10 \x9d\x8f\xd8\xde\xd2\xc3\x84\x9c\x0d^\xe8/\xc9\x02\x03\x01\x00\x01\xa3\x81\xc00\x81\xbd0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xa0\x11\x0a#>\x96\xf1\x07\xec\xe2\xaf)\xef\x82\xa5\x7f\xd00\xa4\xb40\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0{\x06\x03U\x1d\x1f\x04t0r08\xa06\xa04\x862http://crl.comodoca.com/AAACertificateServices.crl06\xa04\xa02\x860http://crl.comodo.net/AAACertificateServices.crl0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x08V\xfc\x02\xf0\x9b\xe8\xff\xa4\xfa\xd6{\xc6D\x80\xceO\xc4\xc5\xf6\x00X\xcc\xa6\xb6\xbc\x14Ih\x04v\xe8\xe6\xee]\xec\x02\x0f`\xd6\x8dP\x18O&N\x01\xe3\xe6\xb0\xa5\xee\xbf\xbctTA\xbf\xfd\xfc\x12\xb8\xc7OZ\xf4\x89`\x05\x7f`\xb7\x05J\xf3\xf6\xf1\xc2\xbf\xc4\xb9t\x86\xb6-}k\xcc\xd2\xf3F\xdd/\xc6\xe0j\xc3\xc34\x03,}\x96\xddZ\xc2\x0e\xa7\x0a\x99\xc1\x05\x8b\xab\x0c/\xf3\:\xcfl7U\x09\x87\xdeS@lX\xef\xfc\xb6\xaben\x04\xf6\x1b\xdc<\xe0Z\x15\xc6\x9e\xd9\xf1YH0!e\x03l\xec\xe9!s\xec\x9b\x03\xa1\xe07\xad\xa0\x15\x18\x8f\xfa\xba\x02\xce\xa7,\xa9\x10\x13,\xd4\xe5\x08&\xab"\x97`\xf8\x90^t\xd4\xa2\x9aS\xbd\xf2\xa9h\xe0\xa2n\xc2\xd7l\xb1\xa3\x0f\x9e\xbf\xebh\xe7V\xf2\xae\xf2\xe3+8:\x09\x81\xb5k\x85\xd7\xbe-\xed?\x1a\xb7\xb2c\xe2\xf5b,\x82\xd4j\x00AP\xf19\x83\x9f\x95\xe96\x96\x98n", + ["OU=certSIGN ROOT CA,O=certSIGN,C=RO"] = "0\x82\x0380\x82\x02 \xa0\x03\x02\x01\x02\x02\x06 \x06\x05\x16p\x020\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000;1\x0b0\x09\x06\x03U\x04\x06\x13\x02RO1\x110\x0f\x06\x03U\x04\x0a\x13\x08certSIGN1\x190\x17\x06\x03U\x04\x0b\x13\x10certSIGN ROOT CA0\x1e\x17\x0d060704172004Z\x17\x0d310704172004Z0;1\x0b0\x09\x06\x03U\x04\x06\x13\x02RO1\x110\x0f\x06\x03U\x04\x0a\x13\x08certSIGN1\x190\x17\x06\x03U\x04\x0b\x13\x10certSIGN ROOT CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xb73\xb9~\xc8%J\x8e\xb5\xdb\xb4(\x1b\xaaW\x90\xe8\xd1"\xd3d\xba\xd3\x93\xe8\xd4\xac\x86a@j`WhT\x84M\xbcjT\x02\x05\xff\xdf\x9b\x9a*\xae]\x07\x8fJ\xc3(\x7f\xef\xfb+\xfay\xf1\xc7\xad\xf0\x10S$\x90\x8bf\xc9\xa8\x88\xab\xafZ\xa3\x00\xe9\xbe\xbaF\xee[s{,\x17\x82\x81^b,\xa1\x02e\xb3\xbd\xc5+\x00~\xc4\xfc\x033W\x0d\xed\xe2\xfa\xce]E\xd68\xcd5\xb6\xb2\xc1\xd0\x9c\x81J\xaa\xe4\xb2\x01\\x1d\x8f_\x99\xc4\xb1\xad\xdb\x88!\xeb\x90\x08\x82\x80\xf30\xa3C\xe6\x90\x82\xaeU(I\xed[\xd7\xa9\x108\x0e\xfe\x8fL[\x9bF\xeaA\xf5\xb0\x08t\xc3\xd0\x883\xb6|\xd7t\xdf\xdc\x84\xd1C\x0eu9\xa1%@(\xeax\xcb\x0e,.9\x9d\x8c\x8bn\x16\x1c/&\x82\x10\xe2\xe3e\x94\x0a\x04\xc0^\xf7][\xf8\x10\xe2\xd0\xbazK\xfb\xde7\x00\x00\x1a[(\xe3\xd2\x9cs>2\x87\x98\xa1\xc9Q/\xd7\xde\xac3\xb3O\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\xc60\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xe0\x8c\x9b\xdb%I\xb3\xf1|\x86\xd6\xb2B\x87\x0b\xd0k\xa0\xd9\xe40\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00>\xd2\x1c\x89.5\xfc\xf8u\xdd\xe6\x7fe\x88\xf4rL\xc9,\xd72N\xf3\xdd\x19yG\xbd\x8e;[\x93\x0fPI$\x13k\x14\x06r\xef\x09\xd3\xa1\xa1\xe3@\x84\xc9\xe7\x182t\xc7\xa0\x09\xcc\xa3H\xd1\xe0\xdbd\xe7\x92\xb5\xcf\xafrCp\x8b\xf9\xc3\x84<\x13\xaa~\x92\x9bWS\x93\xfap\xc2\x91\x0e1\xf9\x9bg]\xe9\x968^_\xb3sN\x88\x15g\xde\x9ev\x10b \xbeUi\x95C\x009M\xf6\xee\xb0ZNIDTX_B\x83", + ["CN=Class 2 Primary CA,O=Certplus,C=FR"] = "0\x82\x03\x920\x82\x02z\xa0\x03\x02\x01\x02\x02\x11\x00\x85\xbdK\xf3\xd8\xda\xe3i\xf6\x94\xd7_\xc3\xa5D#0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000=1\x0b0\x09\x06\x03U\x04\x06\x13\x02FR1\x110\x0f\x06\x03U\x04\x0a\x13\x08Certplus1\x1b0\x19\x06\x03U\x04\x03\x13\x12Class 2 Primary CA0\x1e\x17\x0d990707170500Z\x17\x0d190706235959Z0=1\x0b0\x09\x06\x03U\x04\x06\x13\x02FR1\x110\x0f\x06\x03U\x04\x0a\x13\x08Certplus1\x1b0\x19\x06\x03U\x04\x03\x13\x12Class 2 Primary CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xdcP\x96\xd0\x12\xf85\xd2\x08xz\xb6Rp\xfdo\xee\xcf\xb9\x11\xcb]w\xe1\xec\xe9~\x04\x8d\xd6\xccosCW`\xac3\x0aD\xec\x03_\x1c\x80$\x91\xe5\xa8\x91V\x12\x82\xf7\xe0+\xf4\xdb\xaea.\x89\x10\x8dkl\xba\xb3\x02\xbd\xd56\xc5H7#\xe2\xf0Z7R3\x17\x12\xe2\xd1`M\xbe/A\x11\xe3\xf6\x17%\x0c\x8b\x91\xc0\x1b\x99{\x99V\x0d\xaf\xee\xd2\xbcGW\xe3yI{4\x89'$\x84\xde\xb1\xec\xe9XN\xfeN\xdfZ\xbeA\xad\xac\x08\xc5\x18\x0e\xef\xd2S\xeel\xd0\x9d\x12\x01\x13\x8d\xdc\x80b\xf7\x95\xa9D\x88JqN`U\x9e\xdb#\x19yV\x07\x0c?c\x0b\\xb0\xe2\xbe~\x15\xfc\x943XA8t\xc4\xe1\x8f\x8b\xdf&\xac\x1f\xb5\x8b;\xb7CYk\xb0$\xa6m\x90\x8b\xc4r\xea]3\x98\xb7\xcb\xde^{\xef\x94\xf1\x1b>\xca\xc9!\xc1\xc5\x98\x02\xaa\xa2\xf6[w\x9b\xf5~\x96U4\x1cgi\xc0\xf1B\xe3G\xac\xfc(\x1cfU\x02\x03\x01\x00\x01\xa3\x81\x8c0\x81\x890\x0f\x06\x03U\x1d\x13\x04\x080\x06\x01\x01\xff\x02\x01\x0a0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xe3s-\xdf\xcb\x0e(\x0c\xde\xdd\xb3\xa4\xcay\xb8\x8e\xbb\xe80\x890\x11\x06\x09`\x86H\x01\x86\xf8B\x01\x01\x04\x04\x03\x02\x01\x0607\x06\x03U\x1d\x1f\x0400.0,\xa0*\xa0(\x86&http://www.certplus.com/CRL/class2.crl0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xa7T\xcf\x88D\x19\xcb\xdf\xd4\x7f\x00\xdfV3b\xb5\xf7Q\x01\x90\xeb\xc3?\xd1\x88D\xe9$]\xef\xe7\x14\xbd \xb7\x9a<\x00\xfem\x9f\xdb\x90\xdc\xd7\xf4b\xd6\x8bp]\xe7\xe5\x04H\xa9h|\xc9\xf1B\xf3l\x7f\xc5z|\x1dQ\x88\xba\xd2\x0a>']\xde-QN\xd3\x13di\xe4.\xe3\xd3\xe7\x9b\x09\x99\xa6\xe0\x95\x9b\xce\x1a\xd7\x7f\xbe<\xceR\xb3\x11\x15\xc1\x0f\x17\xcd\x03\xbb\x9c%\x15\xba\xa2v\x89\xfc\x06\xf1\x18\xd0\x93K\x0e|\x82\xb7\xa5\xf4\xf6_\xfe\xed@\xa6\x9d\x84t9\xb9\xdc\x1e\x85\x16\xda)\x1b\x86#\x00\xc9\xbb\x89~n\x80\x88\x1e/\x14\xb4\x03$\xa82o\x03\x9aG,0\xbeV\xc6\xa7B\x02p\x1b\xea@\xd8\xba\x05\x03p\x07\xa4\x96\xff\xfdH3\x0a\xe1\xdc\xa5\x81\x90\x9bM\xdd}\xe7\xe7\xb2\xcd\\xc8j\x95\xf8\xa5\xf6\x8d\xc4]x\x08\xbe{\x06\xd6I\xcf\x196P#.\x08\xe6\x9e\x05MG\x18\xd5\x16\xe9\xb1\xd6\xb6\x10\xd5\xbb\x97\xbf\xa2\x8e\xb4T", + ["OU=Security Communication RootCA1,O=SECOM Trust.net,C=JP"] = "0\x82\x03Z0\x82\x02B\xa0\x03\x02\x01\x02\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000P1\x0b0\x09\x06\x03U\x04\x06\x13\x02JP1\x180\x16\x06\x03U\x04\x0a\x13\x0fSECOM Trust.net1'0%\x06\x03U\x04\x0b\x13\x1eSecurity Communication RootCA10\x1e\x17\x0d030930042049Z\x17\x0d230930042049Z0P1\x0b0\x09\x06\x03U\x04\x06\x13\x02JP1\x180\x16\x06\x03U\x04\x0a\x13\x0fSECOM Trust.net1'0%\x06\x03U\x04\x0b\x13\x1eSecurity Communication RootCA10\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xb3\xb3\xfe\x7f\xd3m\xb1\xef\x16|W\xa5\x0cmv\x8a/K\xbfd\xfbL\xee\x8a\xf0\xf3)|\xf5\xff\xee*\xe0\xe9\xe9\xba[d"\x9a\x9ao,:&iQ\x05\x99&\xdc\xd5\x1cjq\xc6\x9a}\x1e\x9d\xdd|l\xc6\x8cggJ>\xf8q\xb0\x19'\xa9\x09\x0c\xa6\x95\xbfK\x8c\x0c\xfaU\x98;\xd8\xe8"\xa1Kq8y\xac\x97\x92i\xb3\x89~\xea!h\x06\x98\x14\x96\x87\xd2a6\xbcm'V\x9eW\xee\xc0\xc0V\xfd2\xcf\xa4\xd9\x8e\xc2#\xd7\x8d\xa8\xf3\xd8%\xac\x97\xe4p8\xf4\xb6:\xb4\x9d;\x97&C\xa3\xa1\xbcIYrL#0\x87\x01X\xf6N\xbe\x1chVf\xaf\xcdA]\xc8\xb3M*UF\xab\x1f\xda\x1e\xe2@=\xdb\xcd}\xb9\x92\x80\x9c7\xdd\x0c\x96d\x9d\xdc"\xf7d\x8b\xdfa\xde\x15\x94R\x15\xa0}R\xc9K\xa8!\xc9\xc6\xb1\xed\xcb\xc3\x95`\xd1\x0f\xf0\xabp\xf8\xdf\xcbM~\xec\xd6\xfa\xab\xd9\xbd\x7fT\xf2\xa5\xe9y\xfa\xd9\xd6v$(s\x02\x03\x01\x00\x01\xa3?0=0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xa0sI\x99h\xdc\x85[e\xe3\x9b(/W\x9f\xbd3\xbc\x07H0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00h@\xa9\xa8\xbb\xe4O]y\xb3\x05\xb5\x17\xb3`\x13\xeb\xc6\x92]\xe0\xd1\xd3j\xfe\xfb\xbe\x9bm\xbf\xc7\x05mY \xc4\x1c\xf0\xb7\xda\x84X\x02c\xfaH\x16\xefO\xa5\x0b\xf7J\x98\xf2?\x9e\x1b\xadGkc\xce\x08G\xebR?x\x9c\xafM\xae\xf8\xd5O\xcf\x9a\x98*\x10A9R\xc4\xdd\xd9\x9b\x0e\xef\x93\x01\xae\xb2.\xcahB$Bl\xb0\xb3:>\xcd\xe9\xdaH\xc4\x15\xcb\xe9\xf9\x07\x0f\x92PI\x8a\xdd1\x97_\xc9\xe97\xaa;Ye\x97\x942\xc9\xb3\x9f>:bX\xc5I\xadb\x0eq\xa52\xaa/\xc6\x89vC@\x13\x13g=\xa2T%\x10\xcb\xf1:\xf2\xd9\xfa\xdbIV\xbb\xa6\xfe\xa7A5\xc3\xe0\x88a\xc9\x88\xc7\xdf6\x10"\x98Y\xea\xb0J\xfbV\x16sn\xacM\xf7"\xa1O\xad\x1dz-E'\xe50\xc1^\xf2\xda\x13\xcb%BQ\x95G\x03\x8cl!\xcctB\xedS\xff3\x8b\x8f\x0fW\x01\x16/\xcf\xa6\xee\xc9p"\x14\xbd\xfd\xbel\x0b\x03", + ["CN=OISTE WISeKey Global Root GA CA,OU=OISTE Foundation Endorsed,OU=Copyright (c) 2005,O=WISeKey,C=CH"] = "0\x82\x03\xf10\x82\x02\xd9\xa0\x03\x02\x01\x02\x02\x10A=r\xc7\xf4k\x1f\x81C}\xf1\xd2(T\xdf\x9a0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\x8a1\x0b0\x09\x06\x03U\x04\x06\x13\x02CH1\x100\x0e\x06\x03U\x04\x0a\x13\x07WISeKey1\x1b0\x19\x06\x03U\x04\x0b\x13\x12Copyright (c) 20051"0 \x06\x03U\x04\x0b\x13\x19OISTE Foundation Endorsed1(0&\x06\x03U\x04\x03\x13\x1fOISTE WISeKey Global Root GA CA0\x1e\x17\x0d051211160344Z\x17\x0d371211160951Z0\x81\x8a1\x0b0\x09\x06\x03U\x04\x06\x13\x02CH1\x100\x0e\x06\x03U\x04\x0a\x13\x07WISeKey1\x1b0\x19\x06\x03U\x04\x0b\x13\x12Copyright (c) 20051"0 \x06\x03U\x04\x0b\x13\x19OISTE Foundation Endorsed1(0&\x06\x03U\x04\x03\x13\x1fOISTE WISeKey Global Root GA CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xcbO\xb3\x00\x9b=6\xdd\xf9\xd1Ijk\x10I\x1f\xec\xd8+\xb2\xc6\xf82\x81)C\x95L\x9a\x19#!\x15E\xde\xe3\xc8\x1cQU[\xae\x93\xe87\xff+k\xe9\xd4\xea\xbe*\xdd\xa8Q+\xd7f\xc3a\`\x02\xc8\xf5\xcer{;\xb8\xf2Ne\x08\x9a\xcd\xa4j\x19\xc1\x01\xbbs\xa6\xd7\xf6\xc3\xdd\xcd\xbc\xa4\x8b\xb5\x99a\xb8\x01\xa2\xa3\xd4M\xd4\x05=\x91\xad\xf8\xb4\x08qd\xafp\xf1\x1ck~\xf6\xc3w\x9d$s{\xe4\x0c\x8c\xe1\xd96\xe1\x99\x8b\x05\x99\x0b\xedE1\x09\xca\xc2\x00\xdb\xf7r\xa0\x96\xaa\x95\x87\xd0\x8e\xc7\xb6as\x0dvf\x8c\xdc\x1b\xb4c\xa2\x9f\x7f\x93\x130\xf1\xa1'\xdb\xd9\xff,U\x88\x91\xa0\xe0O\x07\xb0(V\x8c\x18\x1b\x97D\x8e\x89\xdd\xe0\x17n\xe7*\xef\x8f9\x0a1\x84\x82\xd8@\x14I.zA\xe4\xa7\xfe\xe3d\xcc\xc1YqK,!\xa7[}\xe0\x1d\xd1.\x81\x9b\xc3\xd8h\xf7\xbd\x96\x1b\xacp\xb1\x16\x14\x0b\xdb`\xb9&\x01\x05\x02\x03\x01\x00\x01\xa3Q0O0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x860\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb3\x03~\xae6\xbc\xb0y\xd1\xdc\x94&\xb6\x11\xbe!\xb2i\x86\x940\x10\x06\x09+\x06\x01\x04\x01\x827\x15\x01\x04\x03\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00K\xa1\xff\x0b\x87n\xb3\xf9\xc1C\xb1H\xf3(\xc0\x1d.\xc9\x09A\xfa\x94\x00\x1c\xa4\xa4\xabIO\x8f=\x1e\xefMo\xbd\xbc\xa4\xf6\xf2&0\xc9\x10\xca\x1d\x88\xfbt\x19\x1f\x85E\xbd\xb0lQ\xf96~\xdb\xf5L2:AO[G\xcf\xe8\x0b-\xb6\xc4\x19\x9dt\xc5G\xc6;j\x0f\xac\x14\xdb<\xf4s\x9c\xa9\x05\xdf\x00\xdctx\xfa\xf85`Y\x02\x13\x18|\xbc\xfbM\xb0 mC\xbb`0zg3\\xc5\x99\xd1\xf8-9Rs\xfb\x8c\xaa\x97%\r\xd9\x08\x1e\xabN<\xe3\x811\x9f\x03\xa6\xfb\xc0\xfe)\x88U\xda\x84\xd5P\x03\xb6\xe2\x84\xa3\xa66\xaa\x11:\x01\xe1\x18K\xd6Dh\xb3=\xf9St\x84\xb3F\x91F\x96\x00\xb7\x80,\xb6\xe1\xe3\x10\xe2\xdb\xa2\xe7(\x8f\x01\x96b\x16>\x00\xe3\x1c\xa56\x81\x18\xa2LRv\xc0\x11\xa3n\xe6\x1d\xba\xe3Z\xbe6S\xc5>u\x8f\x86i)XS\xb5\x9c\xbbo\x9f\\xc5\x18\xec\xdd/\xe1\x98\xc9\xfc\xbe\xdf\x0a\x0d", + ["CN=SwissSign Silver CA - G2,O=SwissSign AG,C=CH"] = "0\x82\x05\xbd0\x82\x03\xa5\xa0\x03\x02\x01\x02\x02\x08O\x1b\xd4/T\xbb/K0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000G1\x0b0\x09\x06\x03U\x04\x06\x13\x02CH1\x150\x13\x06\x03U\x04\x0a\x13\x0cSwissSign AG1!0\x1f\x06\x03U\x04\x03\x13\x18SwissSign Silver CA - G20\x1e\x17\x0d061025083246Z\x17\x0d361025083246Z0G1\x0b0\x09\x06\x03U\x04\x06\x13\x02CH1\x150\x13\x06\x03U\x04\x0a\x13\x0cSwissSign AG1!0\x1f\x06\x03U\x04\x03\x13\x18SwissSign Silver CA - G20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xc4\xf1\x87\x7f\xd3x1\xf78\xc9\xf8\xc3\x99C\xbc\xc7\xf7\xbc7\xe7Nq\xbaK\x8f\xa5s\x1d\n\x98\xae\x03W\xae87C/\x17=\x1f\xc8\xceh\x10\xc1x\xae\x19\x03+\x10\xfa,y\x83\xf6\xe8\xb9h\xb9U\xf2\x04D\xa79\xf9\xfc\x04\x8b\x1e\xf1\xa2M'\xf9a{\xba\xb7\xe5\xa2\x13\xb6\xeba>\xd0l\xd1\xe6\xfb\xfa^\xed\x1d\xb4\x9e\xa05[\xa1\x92\xcb\xf0I\x92\xfe\x85\x0a\x05>\xe6\xd9\x0b\xe2O\xbb\xdc\x957\xfc\x91\xe925"\xd1\x1f:N'\x85\x9d\xb0\x15\x942\xdaa\x0dGM`B\xae\x92G\xe8\x83ZPX\xe9\x8a\x8b\xb9]\xa1\xdc\xdd\x99J\x1f6g\xbbH\xe4\x83\xb67\xebH:\xaf\x0fg\x8f\x17\x07\xe8\x04\xca\xefj1\x87\xd4\xc0\xb6\xf9\x94q{gd\xb8\xb6\x91JB{e.0j\x0c\xf5\x90\xee\x95\xe6\xf2\xcd\x82\xec\xd9\xa1J\xec\xf6\xb2K\xe5E\x85\xe6mx\x93\x04.\x9c\x82m6\xa9\xc41d\x1f\x86\x83\x0b*\xf45\x0ax\xc9U\xcfA\xb0G\xe90\x9f\x99\xbea\xa8\x06\x84\xb9(z_8\xd9\x1b\xa98\xb0\x83\x7fs\xc1\xc3;H*\x82\x0f!\x9b\xb8\xcc\xa85\xc3\x84\x1b\x83\xb3>\xbe\xa4\x95i\x01:\x89\x00x\x04\xd9\xc9\xf4\x99\x19\xabV~[\x8b\x869\x15\x91\xa4\x10,\x092\x80`\xb3\x93\xc0*\xb6\x18\x0b\x9d~\x8dI\xf2\x10J\x7f\xf9\xd5F/\x19\x92\xa3\x99\xa7&\xac\xbb\x8c<\xe6\x0e\xbcG\x07\xdcsQ\xf1pd/\x08\xf9\xb4G\x1d0lD\xea)7\x85\x92hf\xbc\x838\xfe{9.\xd3P\xf0\x1f\xfb^`\xb6\xa9\xa6\xfa'A\xf1\x9b\x18r\xf2\xf5\x84tJ\xc9g\xc4T\xaeHd\xdf\x8c\xd1n\xb0\x1d\xe1\x07\x8f\x08\x1e\x99\x9cq\xe9L\xd8\xa5\xf7G\x12\x1ft\xd1Q\x9e\x86\xf3\xc2\xa2#@\x0bs\xdbK\xa6\xe7s\x06\x8c\xc1\xa0\xe9\xc1Y\xacF\xfa\xe6/\xf8\xcfq\x9cFm\xb9\xc4\x15\x8d8y\x03EH\xef\xc4]\xd7\x08\xee\x879"\x86\xb2\x0d\x0fXC\xf7q\xa9H.\xfd\xea\xd6\x1f\x02\x03\x01\x00\x01\xa3\x81\xac0\x81\xa90\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x17\xa0\xcd\xc1\xe4A\xb6:[;\xcbE\x9d\xbd\x1c\xc2\x98\xfa\x86X0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\x17\xa0\xcd\xc1\xe4A\xb6:[;\xcbE\x9d\xbd\x1c\xc2\x98\xfa\x86X0F\x06\x03U\x1d \x04?0=0;\x06\x09`\x85t\x01Y\x01\x03\x01\x010.0,\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16 http://repository.swisssign.com/0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00s\xc6\x81\xe0'\xd2-\x0f\xe0\x950\xe2\x9aA\x7fP,__ba\xa9\x86ji\x18\x0ctI\xd6]\x84\xeaAR\x18oX\xadPV j\xc6\xbd(iX\x91\xdc\x91\x115\xa9:\x1d\xbc\x1a\xa5`\x9e\xd8\x1f\x7fE\x91i\xd9~\xbbxr\xc1\x06\x0f*\xce\x8f\x85pa\xac\xa0\xcd\x0b\xb89)V\x842N\x86\xbb=\xc4*\xd9\xd7\x1fr\xee\xfeQ\xa1"A\xb1q\x02c\x1a\x82\xb0b\xab^W\x12\x1f\xdf\xcb\xddu\xa0\xc0]y\x90\x8c\x1b\xe0P\xe6\xde1\xfe\x98{p_\xa5\x90\xd8\xad\xf8\x02\xb6o\xd3`\xdd@K"\xc5=\xad:z\x9f\x1a\x1aG\x91y3\xba\x82\xdc2i\x03\x96n\x1fK\xf0q\xfe\xe3gr\xa0\xb1\xbf\\x8b\xe4\xfa\x99"\xc7\x84\xb9\x1b\x8d#\x97?\xed%\xe0\xcfe\xbb\xf5a\x04\xef\xdd\x1e\xb2ZA"Z\xa1\x9f],\xe8[\xc9m\xa9\x0c\x0cx\xaa`\xc6V\x8f\x01Z\x0ch\xbci\x19y\xc4\x1f~\x97\x05\xbf\xc5\xe9$Q^\xd4\xd5KS\xed\xd9#Z6\x03e\xa3\xc1\x03\xadA0\xf3F\x1b\x85\x90\xafe\xb5\xd5\xb1\xe4\x16[xu\x1d\x97zmY\xa9*\x8f{\xde\xc3\x87\x89\x10\x99Isx\xc8=\xbdQ5t*\xd5\xf1~i\x1b*\xbb;\xbd%\xb8\x9aZ=ra\x90f\x87\xee\x0c\xd6M\xd4\x11t\x0bj\xfe\x0b\x03\xfc\xa3UW\x89\xfeJ\xcb\xae[\x17\x05\xc8\xf2\x8d#1S8\xd2-j?\x82\xb9\x8d\x08j\xf7^Atn\xc3\x11~\x07\xac)`\x91?8\xcaW\x10\x0d\xbd0/\xc7\xa5\xe6A\xa0\xda\xae\x05\x87\x9a\xa0\xa4elL\x09\x0c\x89\xba\xb8\xd3\xb9\xc0\x93\x8a0\xfa\x8d\xe5\x9ak\x15\x01Ng\xaa\xdabV>\x84\x08f\xd2\xc46}\xa7>\x10\xfc\x88\xe0\xd4\x80\xe5\x00\xbd\xaa\xf3N\x06\xa3zj\xf9br\xe3\x09O\xeb\x9b\x0e\x01#\xf1\x9f\xbb|\xdc\xdcl\x11\x97%\xb2\xf2\xb4c\x14\xd2\x06*g\x8c\x83\xf5\xce\xea\x07\xd8\x9aj\x1e\xec\xe4\x0a\xbb*L\xeb\x09`9\xce\xcab\xd8.n", + ["CN=thawte Primary Root CA - G3,OU=(c) 2008 thawte, Inc. - For authorized use only,OU=Certification Services Division,O=thawte, Inc.,C=US"] = "0\x82\x04*0\x82\x03\x12\xa0\x03\x02\x01\x02\x02\x10`\x01\x97\xb7F\xa7\xea\xb4\xb4\x9a\xd6K/\xf7\x90\xfb0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\xae1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cthawte, Inc.1(0&\x06\x03U\x04\x0b\x13\x1fCertification Services Division1806\x06\x03U\x04\x0b\x13/(c) 2008 thawte, Inc. - For authorized use only1$0"\x06\x03U\x04\x03\x13\x1bthawte Primary Root CA - G30\x1e\x17\x0d080402000000Z\x17\x0d371201235959Z0\x81\xae1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cthawte, Inc.1(0&\x06\x03U\x04\x0b\x13\x1fCertification Services Division1806\x06\x03U\x04\x0b\x13/(c) 2008 thawte, Inc. - For authorized use only1$0"\x06\x03U\x04\x03\x13\x1bthawte Primary Root CA - G30\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xb2\xbf',\xfb\xdb\xd8[\xddx{\x1b\x9ewf\x81\xcb>\xbc|\xae\xf3\xa6'\x9a4\xa3h1q83b\xe4\xf3qfy\xb1\xa9e\xa3\xa5\x8b\xd5\x8f`-?B\xcc\xaak2\xc0#\xcb,A\xdd\xe4\xdf\xfca\x9c\xe2s\xb2"\x95\x11C\x18_\xc4\xb6\x1fWl\x0a\x05X"\xc86L:|\xa5\xd1\xcf\x86\xaf\x88\xa7D\x02\x13tqs\x0aBY\x02\xf8\x1b\x14kB\xdfo_\xbak\x82\xa2\x9d[\xe7J\xbd\x1e\x01r\xdbKt\xe8;\x7f\x7f}\x1f\x04\xb4&\x9b\xe0\xb4Z\xacG=U\xb8\xd7\xb0&R(\x011@f\xd8\xd9$\xbd\xf6*\xd8\xec!I\\x9b\xf6z\xe9\x7fU5~\x96k\x8d\x93\x93'\xcb\x92\xbb\xea\xac@\xc0\x9f\xc2\xf8\x80\xcf]\xf4Z\xdc\xcet\x86\xa6>l\x0bS\xca\xbd\x92\xce\x19\x06r\xe6\x0c\8i\xc7\x04\xd6\xbcl\xce[\xf6\xf7h\x9c\xdc%\x15H\x88\xa1\xe9\xa9\xf8\x98\x9c\xe0\xf3\xd51(a\x11lg\x96\x8d9\x99\xcb\xc2E$9\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xadl\xaa\x94`\x9c\xed\xe4\xff\xfa>\x0at+c\x03\xf7\xb6Y\xbf0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x1a@\xd8\x95e\xac\x09\x92\x89\xc69\xf4\x10\xe5\xa9\x0efS]x\xde\xfa$\x91\xbb\xe7DQ\xdf\xc6\x164\x0a\xefjDQ\xea+\x07\x8a\x03z\xc3\xeb?\x0a,R\x16\xa0+C\xb9%\x90?p\xa93%mE\x1a(;'\xcf\xaa\xc3)B\x1b\xdf;L\xc034[A\x88\xbfk+e\xaf(\xef\xb2\xf5\xc3\xaaf\xce{V\xee\xb7\xc8\xcbg\xc1\xc9\x9c\x1a\x18\xb8\xc4\xc3I\x03\xf1`\x0eP\xcdF\xc5\xf3wy\xf7\xb6\x15\xe08\xdb\xc7/(\xa0\x0c?w&t\xd9%\x12\xda1\xda\x1a\x1e\xdc)A\x91"\xd4pk\xbaq\xa6\xaaX\xae\xf4\xbb\xe9l\xb6\xef\x87\xcc\x9b\xbb\xff9\xe6Va\xd3\x0a\xa7\xc4\L`{\x05w&z\xbf\xd8\x07R,b\xf7pc\xd99\xbco\x1c\xc2y\xdcv)\xaf\xce\xc5,d\x04^\x886n1\xd4@\x1ab46?5\x01\xae\xacc\xa0", + ["CN=TrustCor RootCert CA-1,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA"] = "0\x82\x0400\x82\x03\x18\xa0\x03\x02\x01\x02\x02\x09\x00\xda\x9b\xecq\xf3\x03\xb0\x190\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\xa41\x0b0\x09\x06\x03U\x04\x06\x13\x02PA1\x0f0\x0d\x06\x03U\x04\x08\x0c\x06Panama1\x140\x12\x06\x03U\x04\x07\x0c\x0bPanama City1$0"\x06\x03U\x04\x0a\x0c\x1bTrustCor Systems S. de R.L.1'0%\x06\x03U\x04\x0b\x0c\x1eTrustCor Certificate Authority1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16TrustCor RootCert CA-10\x1e\x17\x0d160204123216Z\x17\x0d291231172316Z0\x81\xa41\x0b0\x09\x06\x03U\x04\x06\x13\x02PA1\x0f0\x0d\x06\x03U\x04\x08\x0c\x06Panama1\x140\x12\x06\x03U\x04\x07\x0c\x0bPanama City1$0"\x06\x03U\x04\x0a\x0c\x1bTrustCor Systems S. de R.L.1'0%\x06\x03U\x04\x0b\x0c\x1eTrustCor Certificate Authority1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16TrustCor RootCert CA-10\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xbf\x8e\xb7\x95\xe2\xc2&\x12k3\x19\xc7@X\x0a\xabY\xaa\x8d\x00\xa3\xfc\x80\xc7P{\x8e\xd4 &\xba2\x12\xd8#TI%\x10"\x98\x9dF\xd2\xc1\xc9\x9eN\x1b.,\x0e8\xf3\x1a%h\x1c\xa6Z\x05\xe6\x1e\x8bH\xbf\x98\x96t>i\xca\xe9\xb5x\xa5\x06\xbc\xd5\x00^\x09\x0a\xf2'zR\xfc-\xd5\xb1\xea\xb4\x89a$\xf3\x1a\x13\xdb\xa9\xcfR\xed\x0c$\xba\xb9\x9e\xec~\x00t\xfa\x93\xadl)\x92\xaeQ\xb4\xbb\xd3W\xbf\xb3\xf3\xa8\x8d\x9c\xf4$K*\xd6\x99\x9e\xf4\x9e\xfe\xc0~B:\xe7\x0b\x95S\xda\xb7h\x0e\x90L\xfbp?\x8fJ,\x94\xf3&\xddci\xa9\x94\xd8\x10N\xc5G\x08\x90\x99\x1b\x17M\xb9ln\xef`\x95\x11\x8e!\x80\xb5\xbd\xa0s\xd8\xd0\xb2w\xc4E\xeaZ&\xfbfvv\xf8\x06\x1fam\x0fU\xc5\x83\xb7\x10Vr\x06\x07\xa5\xf3\xb1\x1a\x03\x05d\x0e\x9dZ\x8a\xd6\x86p\x1b$\xde\xfe(\x8a+\xd0j\xb0\xfcz\xa2\xdc\xb2y\x0e\x8be\x0f\x02\x03\x01\x00\x01\xa3c0a0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xeekI\x82\xa8Z\x93\xbe\xc6\xd0d\x91\xb6\xcf\xd9\xb6\x18\xcf\xdb~\xd2e\xa3\xa6\xc4\x8e\x171\xc1\xfb~v\xdb\xd3\x85\xe3X\xb2wzv;l/P\x1c\xe7\xdb\xf6gy\x1f\xf5\x82\x95\x9a\x07\xa7\x14\xaf\x8f\xdc(!g\x09\xd2\xd6MZ\x1c\x19\x1c\x8ew\\xc3\x94$=2kK~\xd4x\x94\x83\xbe7M\xce_\xc7\x1eN<\xe0\x893\x95\x0b\x0f\xa52\xd6\x80\x83\x0f\xa6\xa7Y\x87\xc9\x90EC~\x00\xea\x86y*\x03\xbd=7\x99\x89f\xb7\xe5\x8aV\x86\x93\x9chKh\x04\x8c\x93\x93\x02>0\xd27:"a\x89\x1c\x85N}\x8f\xd5\xaf{5\xf6~(G\x891\xdc\x0eyd\x1f\x99\xd2[\xba\xfe\x7f`\xbf\xad\xeb\xe7<8)j/\xe5\x91\x0bU\xff\xecoX\xd5-\xc9\xdeLfq\x8f\x0c\xd7\x04\xda\x07\xe6\x1e\x18\xe3\xbd)\x02\xa8\xfa\x1c\xe1[\xb9\x83\xa8AH\xbc\x1aq\x8d\xe7b\xe5-\xb2\xeb\xdf|\xcf\xdb\xabZ\xca1\xf1L"\xf3\x05\x13\xf7\x82\xf9sy\x0c\xbe\xd7K\x1c\xc0\xd1\x15<\x93Ad\xd1\xe6\xbe#\x17"\x00\x89^\x1fk\xa5\xacn\xa7K\x8c\xed\xa3r\xe6\xafcM/\x85\xd2\x145\x9a.N\x8c\xea2\x98(\x86\xa1\x91\x09A:\xb4\xe1\xe3\xf2\xfa\xf0\xc9\x0a\xa2A\xdd\xa9\xe3\x03\xc7\x88\x15;\x1c\xd4\x1a\x94\xd7\x9fdY\x12m\x02\x03\x01\x00\x01\xa3S0Q0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xba\xfaq%y\x8bWA%!\x86\x0bq\xeb\xb2d\x0e\x8b!g0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xba\xfaq%y\x8bWA%!\x86\x0bq\xeb\xb2d\x0e\x8b!g0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00~X\xff\xfd5\x19}\x9c\x18O\x9e\xb0+\xbc\x8e\x8c\x14\xff,\xa0\xdaG[\xc3\xef\x81-\xaf\x05\xeatH[\xf3>N\x07\xc7m\xc5\xb3\x93\xcf"5\\xb6?u'_\x09\x96\xcd\xa0\xfe\xbe@\x0c\\x12U\xf8\x93\x82\xca)\xe9^?VW\x8b86\xf7E\x1aL(\xcd\x9eA\xb8\xedVL\x84\xa4@\xc8\xb8\xb0\xa5+ip\x04j\xc3\xf8\xd4\x122\xf9\x0e\xc3\xb1\xdc2\x84D,o\xcbF\x0f\xeafA\x0fO\xf1X\xa5\xa6\x0d\x0d\x0fa\xde\xa5\x9e]}e\xa1<\x17\xe7\xa8UN\xef\xa0\xc7\xed\xc6D\x7fT\xf5\xa3\xe0\x8f\xf0|U"\x8f)\xb6\x81\xa3\xe1mN,\x1b\x80g\xec\xad \x9f\x0cba\xd5\x97\xffC\xed-\xc1\xda])*\x85?\xace\xee\x86\x0f\x05\x8d\x90_\xdf\xee\x9f\xf4\xbf\xee\x1d\xfb\x98\xe4\x7f\x90+\x84x\x10\x0elIS\xef\x15[eFJ]\xaf\xba\xfb:r\x1d\xcd\xf6%\x88\x1e\x97\xcc!\x9c)\x01\x0de\xebW\xd9\xf3W\x96\xbbH\xcd\x81", + ["CN=Buypass Class 3 Root CA,O=Buypass AS-983163327,C=NO"] = "0\x82\x05Y0\x82\x03A\xa0\x03\x02\x01\x02\x02\x01\x020\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000N1\x0b0\x09\x06\x03U\x04\x06\x13\x02NO1\x1d0\x1b\x06\x03U\x04\x0a\x0c\x14Buypass AS-9831633271 0\x1e\x06\x03U\x04\x03\x0c\x17Buypass Class 3 Root CA0\x1e\x17\x0d101026082858Z\x17\x0d401026082858Z0N1\x0b0\x09\x06\x03U\x04\x06\x13\x02NO1\x1d0\x1b\x06\x03U\x04\x0a\x0c\x14Buypass AS-9831633271 0\x1e\x06\x03U\x04\x03\x0c\x17Buypass Class 3 Root CA0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xa5\xda\x0a\x95\x16P\xe3\x95\xf2^\x9dv1\x062z\x9b\xf1\x10v\xb8\x00\x9a\xb5R6\xcd$G\xb0\x9f\x18d\xbc\x9a\xf6\xfa\xd5y\xd8\x90bL"/\xde8=\xd6\xe0\xa8\xe9\x1c,\xdbx\x11\xe9\x8ehQ\x15r\xc7\xf33\x87\xe4\xa0]\x0b\\xe0W\x07*0\xf5\xcd\xc47w(M\x18\x91\xe6\xbf\xd5R\xfdq-p>\xe7\xc6\xc4\x8a\xe3\xf0(\x0b\xf4v\x98\xa1\x8b\x87U\xb2:\x13\xfc\xb7>'7\x8e"\xe3\xa8O*\xef`\xbb=\xb79\xc3\x0e\x01G\x99]\x12O\xdbC\xfaW\xa1\xed\xf9\x9d\xbe\x11G&[\x13\x98\xab]\x16\x8a\xb07\x1cW\x9dE\xff\x88\x966\xbf\xbb\xca\x07{o\x87c\xd7\xd02j\xd6]l\x0c\xf1\xb3n9\xe2k1.9\x00'\x14\xde8\xc0\xec\x19f\x86\x12\xe8\x9dr\x16\x13dR\xc7\xa97\x1c\xfd\x820\xed\x84\x18\x1d\xf4\xae\\xffp\x13\x00\xeb\xb1\xf53zK\xd6U\xf8\x05\x8dKi\xb0\xf5\xb3(6\\x14\xc4QsMk\x0b\xf14\x07\xdb\x179\xd7\xdc({k\xf5\x9f\xf3.\xc1O\x17*\x10\xf3\xcc\xca\xe8\xeb\xfdk\xab.\x9a\x9f-\x82n\x04\xd4R\x01\x93-=\x86\xfc~\xfc\xdf\xefB\x1d\xa6k\xef\xb9 \xc6\xf7\xbd\xa0\xa7\x95\xfd\xa7\xe6\x89$\xd8\xcc\x8c4l\xe2#/\xd9\x12\x1a!\xb9U\x91o\x0b\x91y\x19\x0c\xad@\x88\x0bp\xe2z\xd2\x0e\xd8hH\xbb\x82\x139\x10X\xe9\xd8*\x07\xc6\x12\xdbX\xdb\xd2;U\x10G\x05\x15gb~\x18c\xa6F?\x09\x0eT2^\xbf\x0dbz'\xef\x80\xe8\xdb\xd9K\x06Z7Z%\xd0\x08\x12w\xd4o\x09P\x97=\xc8\x1d\xc3\xdf\x8cE0V\xc6\xd3d\xabf\xf3\xc0^\x96\x9c\xc3\xc4\xef\xc3|k\x8b:y\x7f\xb3I\xcf=\xe2\x89\x9f\xa00K\x85\xb9\x9c\x94$y\x8f}k\xa9Eh\x0f+\xd0\xf1\xda\x1c\xcbi\xb8\xcaIbm\xc8\xd0cb\xdd`\x0fX\xaa\x8f\xa1\xbc\x05\xa5f\xa2\xcf\x1bv\xb2\x84d\xb1L9R\xc00\xba\xf0\x8cK\x02\xb0\xb6\xb7\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14G\xb8\xcd\xff\xe5o\xee\xf8\xb2\xec/N\x0e\xf9%\xb0\x8e\x01\x07ST]e}\xf7\x8as\xa1\x9aTZ\x1f)C\x14'\xc2\x85\x0f\xb5\x88{\x1a;\x94\xb7\x1d`\xa7\xb5\x9c\xe7)iWZ\x9b\x93zC0\x1b\x03\xd7b\xc8@\xa6\xaa\xfcd\xe4J\xd7\x91S\x01\xa8 \x88n\x9c_D\xb9\xcb`\x814\xeco\xd3}\xdaH_\xeb\xb4\x90\xbc-\xa9\x1c\x0b\xac\x1c\xd5\xa2h \x80\x04\xd6\xfc\xb1\x8f/\xbbJ1\x0dJ\x86\x1c\xeb\xe26)&\xf5\xda\xd8\xc4\xf2ua\xcf~\xaevcJz@e\x93\x87\xf8\x1e\x80\x8c\x86\xe5\x86\xd6\x8f\x0e\xfcS,`\xe8\x16a\x1a\xa2>C{\xcd9`Tj\xf5\xf2\x89&\x01h\x83H\xa23\xe8\xc9\x04\x91\xb2\x114\x11>\xea\xd0C\x19\x1f\x03\x93\x90\x0c\xffQ=W\xf4An\xe1\xcb\xa0\xbe\xeb\xc9c\xcdm\xcc\xe4\xf86\xaah\x9d\xed\xbd]\x97pD\x0d\xb6\x0e5\xdc\xe1\x0c]\xbb\xa0Q\x94\xcb~\x16\xeb\x11/\xa3\x92E\xc8Lq\xd9\xbc\xc9\x99RWF/P\xcf\xbd5i\xf4=\x15\xce\x06\xa5,\x0f>\xf6\x81\xba\x94\xbb\xc3\xbb\xbfex\xd2\x86y\xffI;\x1a\x83\x0c\xf0\xdex\xec\xc8\xf2ML\x1a\xde\x82)\xf8\xc1Z\xda\xed\xee\xe6'^\xe8E\xd0\x9d\x1cQ\xa8h\xabD\xe3\xd0\x8bj\xe3\xf8;\xbb\xdcM\xd7d\xf2Q\xbe\xe6\xaa\xabZ\xe91\xee\x06\xbcs\xbf\x13b\x0a\x9f\xc7\xb9\x97", + ["CN=USERTrust RSA Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US"] = "0\x82\x05\xde0\x82\x03\xc6\xa0\x03\x02\x01\x02\x02\x10\x01\xfdm0\xfc\xa3\xcaQ\xa8\x1b\xbcd\x0e5\x03-0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x000\x81\x881\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x130\x11\x06\x03U\x04\x08\x13\x0aNew Jersey1\x140\x12\x06\x03U\x04\x07\x13\x0bJersey City1\x1e0\x1c\x06\x03U\x04\x0a\x13\x15The USERTRUST Network1.0,\x06\x03U\x04\x03\x13%USERTrust RSA Certification Authority0\x1e\x17\x0d100201000000Z\x17\x0d380118235959Z0\x81\x881\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x130\x11\x06\x03U\x04\x08\x13\x0aNew Jersey1\x140\x12\x06\x03U\x04\x07\x13\x0bJersey City1\x1e0\x1c\x06\x03U\x04\x0a\x13\x15The USERTRUST Network1.0,\x06\x03U\x04\x03\x13%USERTrust RSA Certification Authority0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\x80\x12e\x176\x0e\xc3\xdb\x08\xb3\xd0\xacW\x0dv\xed\xcd'\xd3L\xadP\x83a\xe2\xaa M\x09-d\x09\xdc\xce\x89\x9f\xcc=\xa9\xec\xf6\xcf\xc1\xdc\xf1\xd3\xb1\xd6{7(\x11+G\xda9\xc6\xbc:\x19\xb4_\xa6\xbd}\x9d\xa3cB\xb6v\xf2\xa9;+\x91\xf8\xe2o\xd0\xec\x16 \x90\x09>\xe2\xe8t\xc9\x18\xb4\x91\xd4bd\xdb\x7f\xa3\x06\xf1\x88\x18j\x90"<\xbc\xfe\x13\xf0\x87\x14{\xf6\xe4\x1f\x8e\xd4\xe4Q\xc6\x11gF\x08Q\xcb\x86\x14T?\xbc3\xfe~l\x9c\xff\x16\x9d\x18\xbdQ\x8e5\xa6\xa7f\xc8rg\xdb!f\xb1\xd4\x9bx\x03\xc0P:\xe8\xcc\xf0\xdc\xbc\x9eL\xfe\xaf\x05\x965\x1fWZ\xb7\xff\xce\xf9=\xb7,\xb6\xf6T\xdd\xc8\xe7\x12:M\xaeL\x8a\xb7\\x9a\xb4\xb7 =\xca\x7f"4\xae~;hf\x01D\xe7\x01NFS\x9b3`\xf7\x94\xbeS7\x90sC\xf32\xc3S\xef\xdb\xaa\xfetNi\xc7k\x8c`\x93\xde\xc4\xc7\x0c\xdf\xe12\xae\xcc\x93;Qx\x95g\x8b\xee=V\xfe\x0c\xd0i\x0f\x1b\x0f\xf3%&k3m\xf7nG\xfasC\xe5~\x0e\xa5f\xb1)|2\x84cU\x89\xc4\x0d\xc1\x93T0\x19\x13\xac\xd3}7\xa7\xeb]:l5\\xdbA\xd7\x12\xda\xa9I\x0b\xdf\xd8\x80\x8a\x09\x93b\x8e\xb5f\xcf%\x88\xcd\x84\xb8\xb1?\xa49\x0f\xd9\x02\x9e\xeb\x12L\x95|\xf3k\x05\xa9^\x16\x83\xcc\xb8g\xe2\xe8\x13\x9d\xcc[\x82\xd3L\xb3\xed[\xff\xde\xe5s\xac#;-\x00\xbf5Ut\x09I\xd8IX\x1a\x7f\x926\xe6Q\x92\x0e\xf3&}\x1cM\x17\xbc\xc9\xecC&\xd0\xbfA_@\xa9DD\xf4\x99\xe7W\x87\x9eP\x1fWT\xa8>\xfdtc/\xb1Pe\x09\xe6XB.C\x1aL\xb4\xf0%GY\xfa\x04\x1e\x93\xd4&FJP\x81\xb2\xde\xbex\xb7\xfcg\x15\xe1\xc9W\x84\x1e\x0fc\xd6\xe9b\xba\xd6_U.\xea\\xc6(\x08\x04%9\xb8\x0e+\xa9\xf2L\x97\x1c\x07?\x0dR\xf5\xed\xef/\x82\x0f\x02\x03\x01\x00\x01\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14Sy\xbfZ\xaa+J\xcfT\x80\xe1\xd8\x9b\xc0\x9d\xf2\xb2\x03f\xcb0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x00\x03\x82\x02\x01\x00\\xd4|\x0d\xcf\xf7\x01}A\x99e\x0cs\xc5R\x9f\xcb\xf8\xcf\x99\x06\x7f\x1b\xdaC\x15\x9f\x9e\x02UW\x96\x14\xf1R<'\x87\x94(\xed\x1f:\x017\xa2v\xfcSP\xc0\x84\x9b\xc6kN\xba\x8c!O\xa2\x8eUb\x91\xf3i\x15\xd8\xbc\x88\xe3\xc4\xaa\x0b\xfd\xef\xa8\xe9KU*\x06 mUx)\x19\xee_0\K$\x11U\xff$\x9an^*+\xee\x0bM\x9f\x7f\xf7\x018\x94\x14\x95C\x07\x09\xfb`\xa9\xee\x1c\xab\x12\x8c\xa0\x9a^\xa7\x98jYm\x8b?\x08\xfb\xc8\xd1E\xaf\x18\x15d\x90\x12\x0fs(.\xc5\xe2$N\xfcX\xec\xf0\xf4E\xfe"\xb3\xeb/\x8e\xd2\xd9Ea\x05\xc1\x97o\xa8vr\x8f\x8b\x8c6\xaf\xbf\x0d\x05\xceq\x8d\xe6\xa6o\x1fl\xa6qb\xc5\xd8\xd0\x83r\x0c\xf1g\x11\x89\x0c\x9c\x13Lr4\xdf\xbc\xd5q\xdf\xaaq\xdd\xe1\xb9l\x8c<\x12]e\xda\xbdW\x12\xb6Ck\xff\xe5\xdeMf\x11Q\xcf\x99\xae\xec\x17\xb6\xe8q\x91\x8c\xdeI\xfe\xdd5q\xa2\x15'\x94\x1c\xcfa\xe3&\xbbo\xa3g%!]\xe6\xdd\x1d\x0b.h\x1b;\x82\xaf\xec\x83g\x85\xd4\x98Qt\xb1\xb9\x99\x80\x89\xff\x7fx\x19\yJ`.\x92@\xaeL7*,\xc9\xc7b\xc8\x0e]\xf76[\xca\xe0%%\x01\xb4\xdd\x1a\x07\x9cw\x00?\xd0\xdc\xd5\xec=\xd4\xfa\xbb?\xcc\x85\xd6o\x7f\xa9-\xdf\xb9\x02\xf7\xf5\x97\x9a\xb55\xda\xc3g\xb0\x87J\xa9(\x9e#\x8e\xff\'k\xe1\xb0O\xf3\x07\xee\x00.\xd4Y\x87\xcbRA\x95\xea\xf4G\xd7\xeedAU|\x8dY\x02\x95\xddb\x9d\xc2\xb9\xeeZ(t\x84\xa5\x9b\xb7\x90\xc7\x0c\x07\xdf\xf5\x896t2\xd6(\xc1\xb0\xb0\x0b\xe0\x9cL\xc3\x1c\xd6\xfc\xe3i\xb5GF\x81/\xa2\x82\xab\xd3cDp\xc4\x8d\xff-3\xba\xad\x8f{\xb5p\x88\xae>\x19\xcf@(\xd8\xfc\xc8\x90\xbb]\x99"\xf5R\xe6X\xc5\x1f\x881C\xee\x88\x1d\xd7\xc6\x8eA+!\x7f\xee\x8b]\x07\x06\x9dC\xc4)\x0a+\xfc*>\x86\xcb<\x83:\xf9\xc9\x0d\xda\xc5\x99\xe2\xbcxA3v\xe1\xbf/]\xe5\xa4\x98P\x0c\x15\xdd\xe0\xfa\x9c\x7f8h\xd0\xb2\xa6z\xa7\xd11\xbd~\x8aX'C\xb3\xba3\x91\xd3\xa7\x98\x15\\x9a\xe6\xd3\x0fu\xd9\xfcA\x98\x97>\xaa%\xdb\x8f\x92.\xb0{\x0c_\xf1c\xa97\xf9\x9buiL(&%\xda\xd5\xf2\x12pEU\xe3\xdfs^7\xf5!l\x90\x8e5Z\xc9\xd3#\xeb\xd3\xc0\xbex\xacB(Xf\xa5Fmp\x02\xd7\x10\xf9KT\xfc]\x86J\x87\xcf\x7f\xcaE\xac\x11Z\xb5 Q\x8d/\x88G\x979\xc0\xcf\xba\xc0B\x01@\x99H!\x0bk\xa7\xd2\xfd\x96\xd5\xd1\xbeF\x9dI\xe0\x0b\xa6\xa0"N8\xd0\xc1<0\xbcp\x8f,u\xcc\xd0\xc5\x8cQ;=\x94\x08d&a}\xb9\xc3e\x8f\x14\x9c!\xd0\xaa\xfd\x17r\x03\x8f\xbd\x9b\x8c\xe6^S\x9e\xb9\x9d\xef\x82\xbb\xe1\xbc\xe2rA[!\x94\xd3E7\x94\xd1\xdf\x099]\xe7#\xaa\x9a\x1d\xcam\xa8\x0a\x86\x85\x8a\x82\xbeB\x07\xd6\xf28\x82s\xda\x87[\xe5<\xd3\x9e>\xa7;\x9e\xf4\x03\xb3\xf9\xf1}\x13t\x02\xff\xbb\xa1\xe5\xfa\x00y\x1c\xa6fA\x88\`W\xa6.\x09\xc4\xba\xfd\x9a\xcf\xa7\x1f@\xc3\xbb\xccZ\x0aUK;8vQ\xb8c\x8b\x84\x94\x16\xe6V\xf3\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xfe\xab\x00\x90\x98\x9e$\xfc\xa9\xcc\x1a\x8a\xfb'\xb8\xbf0n\xa8;0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00\xcfw,nV\xbeN\xb3\xb6\x84\x00\x94\xabG\xc9\x0d\xd2v\xc7\x86\x9f\x1d\x07\xd3\xb6\xb4\xbb\x08x\xafi\xd2\x0bI\xde3\xc5\xac\xad\xc2\x88\x02}\x06\xb75\x02\xc1`\xc9\xbf\xc4\xe8\x94\xde\xd4\xd3\xa9\x13%Z\xfen\xa2\xae}\x05\xdc}\xf3l\xf0~\xa6\x8d\xee\xd9\xd7\xceX\x17\xe8\xa9)\xaesH\x87\xe7\x9b\xcan)\xa1d_\x19\x13\xf7\xae\x06\x10\xffQ\xc6\x9bMU%O\x93\x99\x10\x01Su\xf1\x13\xce\xc7\xa6AA\xd2\xbf\x88\xa5\x7fE\xfc\xac\xb8\xa5\xb53\x0c\x82\xc4\xfb\x07\xf6j\xe5%\x84_\x06\xca\xc1\x869\x11\xdbX\xcdw;,\xc2L\x0f^\x9a\xe3\xf0\xab>a\x1bP$\xc2\xc0\xf4\xf1\x19\xf0\x11)\xb6\xa5\x18\x02\x9b\xd7cLp\x8cG\xa3\x03C\\xb9]F\xa0\x0do\xffY\x8e\xbe\xdd\x9fr\xc3[+\xdf\x8c[\xce\xe5\x0cFl\x92\xb2\x0a\xa3LTB\x18\x15\x12\x18\xbd\xda\xfc\xbatn\xff\xc1\xb6\xa0d\xd8\xa9_U\xae\x9f\jv\x96\xd8sg\x87\xfbM\x7f\\xeei\xcas\x10\xfb\x8a\xa9\xfd\x9e\xbd68II\x87\xf4\x0e\x14\xf0\xe9\x87\xb8?\xa7OzZ\x8ey\xd4\x93\xe4\xbbhR\x84\xacl\xe9\xf3\x98pUr2\xf94\xab+I\xb5\xcd b\xe4:zgc\xab\x96\xdcm\xae\x97\xec\xfc\x9fvV\x88.f\xcf[\xb6\xc9\xa4\xb0\xd7\x05\xba\xe1'/\x93\xbb&*\xa2\x93\xb0\x1b\xf3\x8e\xbe\x1d@\xa3\xb96\x8f>\x82\x1a\x1a^\x88\xeaP\xf8Y\xe2\x83F)\x0b\xe3D\\xe1\x95\xb6i\x90\x9a\x14o\x97\xae\x81\xcfh\xef\x99\x9a\xbe\xb5\xe7\xe1\x7f\xf8\xfa\x13G\x16L\xccm\x08@\xe7\x8bxoP\x82DP?f\x06\x8a\xabC\x84VJ\x0f -\x86\x0e\xf5\xd2\xdb\xd2z\x8aK\xcd\xa5\xe8N\xf1^&%\x01Y#\xa0~\xd2\xf6~!W\xd7'\xbc\x15WL\xa4F\xc1\xe0\x83\x1e\x0cLM\x1fO\x06\x19\xe2\xf9\xa8\xf4:\x82\xa1\xb2yCy\xd6\xadoz'\x90\x03\xa4\xea$\x87?\xd9\xbd\xd9\xe9\xf2_PI\x1c\xee\xec\xd7.", + ["CN=Amazon Root CA 4,O=Amazon,C=US"] = "0\x82\x01\xf20\x82\x01x\xa0\x03\x02\x01\x02\x02\x13\x06l\x9f\xd7\xc1\xbb\x10L)C\xe5q{{,\xc8\x1a\xc1\x0e0\x0a\x06\x08*\x86H\xce=\x04\x03\x03091\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Amazon1\x190\x17\x06\x03U\x04\x03\x13\x10Amazon Root CA 40\x1e\x17\x0d150526000000Z\x17\x0d400526000000Z091\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Amazon1\x190\x17\x06\x03U\x04\x03\x13\x10Amazon Root CA 40v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04\xd2\xab\x8a7O\xa3S\x0d\xfe\xc1\x8a{K\xa8{FKc\xb0b\xf6-\x1b\xdb\x08q!\xd2\x00\xe8c\xbd\x9a'\xfb\xf09n]\xea=\xa5\xc9\x81\xaa\xa3[ \x98E]\x16\xdb\xfd\xe8\x10m\xe3\x9c\xe0\xe3\xbd_\x84b\xf3pd3\xa0\xcb$/p\xba\x88\xa1*\xa0u\xf8\x81\xaeb\x06\xc4\x81\xdb9n)\xb0\x1e\xfa.\\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xd3\xec\xc7:en\xcc\xe1\xdav\x9aV\xfb\x9c\xf3\x86mW\xe5\x810\x0a\x06\x08*\x86H\xce=\x04\x03\x03\x03h\x000e\x020:\x8b!\xf1\xbd~\x11\xad\xd0\xefX\x96/\xd6\xeb\x9d~\x90\x8d+\xcffU\xc3,\xe3(\xa9p\x0aG\x0e\xf07Y\x12\xff-\x99\x94(N*O5M3Z\x021\x00\xeau\x00N;\xc4:\x94\x12\x91\xc9XF\x9d!\x13r\xa7\x88\x9c\x8a\xe4LJ\xdb\x96\xd4\xac\x8bkkI\x12S3\xad\xd7\xe4\xbe$\xfc\xb5\x0av\xd4\xa5\xbc\x10", + ["CN=AffirmTrust Commercial,O=AffirmTrust,C=US"] = "0\x82\x03L0\x82\x024\xa0\x03\x02\x01\x02\x02\x08ww\x06'&\xa9\xb1|0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000D1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x140\x12\x06\x03U\x04\x0a\x0c\x0bAffirmTrust1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16AffirmTrust Commercial0\x1e\x17\x0d100129140606Z\x17\x0d301231140606Z0D1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x140\x12\x06\x03U\x04\x0a\x0c\x0bAffirmTrust1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16AffirmTrust Commercial0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xf6\x1bOg\x07+\xa1\x15\xf5\x06"\xcb\x1f\x01\xb2\xe3sE\x06DI,\xbbI%\x14\xd6\xce\xc3\xb7\xab,O\xc6A2\x94W\xfa\x12\xa7[\x0e\xe2\x8f\x1f\x1e\x86\x19\xa7\xaa\xb5-\xb9_\x0d\x8a\xc2\xaf\x855y2-\xbb\x1cb7\xf2\xb1[J=\xca\xcdq_\xe9B\xbe\x94\xe8\xc8\xde\xf9"Hd\xc6\xe5\xab\xc6+m\xad\x05\xf0\xfa\xd5\x0b\xcf\x9a\xe5\xf0P\xa4\x8b;G\xa5#[zz\xf83?\xb8\xef\x99\x97\xe3 \xc1\xd6(\x89\xcf\x94\xfb\xb9E\xed\xe3@\x17\x11\xd4t\xf0\x0b1\xe2+&j\x9bLW\xae\xac >\xbaEz\x05\xf3\xbd\x9bi\x15\xae}N c\xc45v:\x07\x02\xc97\xfd\xc7G\xee\xe8\xf1v\x1ds\x15\xf2\x97\xa4\xb5\xc8zy\xd9B\xaa+\x7f\\xfe\xce&O\xa3f\x815\xafD\xbaT\x1e\x1c02e\x9d\xe6<\x93^PNz\xe3:\xd4n\xcc\x1a\xfb\xf9\xd27\xae$*\xabW\x03"(\x0dIu\x7f\xb7(\xdau\xbf\x8e\xe3\xdc\x0ey1\x02\x03\x01\x00\x01\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x9d\x93\xc6S\x8b^\xca\xaf?\x9f\x1e\x0f\xe5\x99\x95\xbc$\xf6\x94\x8f0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00X\xac\xf4\x04\x0e\xcd\xc0\x0d\xff\x0a\xfd\xd4\xba\x16_)\xbd{h\x99XI\xd2\xb4\x1d7M\x7f'}F\x06]C\xc6\x86.>s\xb2&}O\x93\xa9\xb6\xc4*\x9a\xab!\x97\x14\xb1\xde\x8c\xd3\xab\x89\x15\xd8k$\xd4\xf1\x16\xae\xd8\xa4\\xd4\x7fQ\x8e\xed\x18\x01\xb1\x93c\xbd\xbc\xf8a\x80\x9a\x9e\xb1\xceBp\xe2\xa9}\x06%}'\xa1\xfeo\xec\xb3\x1e$\xda\xe3KU\x1a\x00;5\xb4;\xd9\xd7]0\xfd\x81\x13\x89\xf2\xc2\x06+\xedg\xc4\x8e\xc9C\xb2\k\x15\x89\x02\xbcb\xfcN\xf2\xb53\xaa\xb2o\xd3\x0a\xa2P\xe3\xf6;\xe8.D\xc2\xdbf8\xa93VH\xf1m\x1b3\x8d\x0d\x8c?`7\x9d\xd3\xcam~4~\x0d\x9frv\x8b\x1b\x9fr\xfdR5AE\x02\x96/\x1c\xb2\x9asI!\xb1IGEG\xb4\xefj4\x11\xc9M\x9a\xccY\xb7\xd6\x02\x9eZNe\xb5\x94\xae\x1b\xdf)\xb0\x16\xf1\xbf\x00\x9e\x07:\x17d\xb5\x04\xb5#!\x99\x0a\x95;\x97|\xef", + ["C=ES,O=ACCV,OU=PKIACCV,CN=ACCVRAIZ1"] = "0\x82\x07\xd30\x82\x05\xbb\xa0\x03\x02\x01\x02\x02\x08^\xc3\xb7\xa6C\x7f\xa4\xe00\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000B1\x120\x10\x06\x03U\x04\x03\x0c\x09ACCVRAIZ11\x100\x0e\x06\x03U\x04\x0b\x0c\x07PKIACCV1\x0d0\x0b\x06\x03U\x04\x0a\x0c\x04ACCV1\x0b0\x09\x06\x03U\x04\x06\x13\x02ES0\x1e\x17\x0d110505093737Z\x17\x0d301231093737Z0B1\x120\x10\x06\x03U\x04\x03\x0c\x09ACCVRAIZ11\x100\x0e\x06\x03U\x04\x0b\x0c\x07PKIACCV1\x0d0\x0b\x06\x03U\x04\x0a\x0c\x04ACCV1\x0b0\x09\x06\x03U\x04\x06\x13\x02ES0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\x9b\xa9\xab\xbfaJ\x97\xaf/\x97f\x9at_\xd0\xd9\x96\xfd\xcf\xe2\xe4f\xef\x1f\x1fG3\xc2D\xa3\xdf\x9a\xde\x1f\xb5T\xdd\x15|i5\x11o\xbb\xc8\x0c\x8ej\x18\x1e\xd8\x8f\xd9\x16\xbc\x10H6\\xf0c\xb3\x90Z\$7\xd7\xa3\xd6\xcb\x09q\xb9\xf1\x01r\x84\xb0}\xdbM\x80\xcd\xfc\xd3o\xc9\xf8\xda\xb6\x0e\x82\xd2E\x85\xa8\x1bh\xa8=\xe8\xf4Dl\xbd\xa1\xc2\xcb\x03\xbe\x8c>\x13\x00\x84\xdfJH\xc0\xe3"\x0a\xe8\xe97\xa7\x18L\xb1\x09\x0d#V\x7f\x04M\xd9\x17\x84\x18\xa5\xc8\xda@\x94s\xeb\xce\x0eW<\x03\x81:\x9d\x0a\xa1WCi\xacWmy\x90x\xe5\xb5\xb4;\xd8\xbcL\x8d(\xa1\xa7\xa3\xa7\xba\x02N%\xd1*\xae\xed\xae\x03"\xb8k \x0f0(T\x95\x7f\xe0\xee\xce\x0af\x9d\xd1@-n"\xaf\x9d\x1a\xc1\x05\x19\xd2o\xc0\xf2\x9f\xf8{\xb3\x02B\xfbP\xa9\x1d-\x93\x0f#\xab\xc6\xc1\x0f\x92\xff\xd0\xa2\x15\xf5S\x09q\x1c\xffE\x13\x84\xe6&^\xf8\xe0\x88\x1c\x0a\xfc\x16\xb6\xa8s\x06\xb8\xf0c\x84\x02\xa0\xc6Z\xec\xe7t\xdfp\xae\xa3\x83%\xea\xd6\xc7\x97\x87\x93\xa7\xc6\x8a\x8a3\x97`7\x10>\x97>n)\x15\xd6\xa1\x0f\xd1\x88,\x12\x9fo\xaa\xa4\xc6B\xebA\xa2\xe3\x95C\xd3\x01\x85m\x8e\xbb;\xf3#6\xc7\xfe;\xe0\xa1%\x07H\xab\xc9\x89t\xff\x08\x8f\x80\xbf\xc0\x96e\xf3\xee\xecKh\xbd\x9d\x88\xc31\xb3@\xf1\xe8\xcf\xf68\xbb\x9c\xe4\xd1\x7f\xd4\xe5X\x9b|\xfa\xd4\xf3\x0e\x9bu\x91\xe4\xbaR.\x19~\xd1\xf5\xcdZ\x19\xfc\xba\x06\xf6\xfbR\xa8K\x99\x04\xdd\xf8\xf9\xb4\x8bP\xa3Nb\x89\xf0\x87$\xfa\x83B\xc1\x87\xfa\xd5-)*Zqzdj\xd7'`c\x0d\xdb\xceI\xf5\x8d\x1f\x90\x892\x17\xf8sC\xb8\xd2Z\x93\x86a\xd6\xe1u\x0a\xeayfv\x88Oq\xeb\x04%\xd6\x0aZz\x93\xe5\xb9K\x17@\x0f\xb1\xb6\xb9\xf5\xdeO\xdc\xe0\xb3\xac;\x11p`\x84JCn\x99 \xc0)q\x0a\xc0e\x02\x03\x01\x00\x01\xa3\x82\x02\xcb0\x82\x02\xc70}\x06\x08+\x06\x01\x05\x05\x07\x01\x01\x04q0o0L\x06\x08+\x06\x01\x05\x05\x070\x02\x86@http://www.accv.es/fileadmin/Archivos/certificados/raizaccv1.crt0\x1f\x06\x08+\x06\x01\x05\x05\x070\x01\x86\x13http://ocsp.accv.es0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xd2\x87\xb4\xe3\xdf7'\x93U\xf6V\xea\x81\xe56\xcc\x8c\x1e?\xbd0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xd2\x87\xb4\xe3\xdf7'\x93U\xf6V\xea\x81\xe56\xcc\x8c\x1e?\xbd0\x82\x01s\x06\x03U\x1d \x04\x82\x01j0\x82\x01f0\x82\x01b\x06\x04U\x1d \x000\x82\x01X0\x82\x01"\x06\x08+\x06\x01\x05\x05\x07\x02\x020\x82\x01\x14\x1e\x82\x01\x10\x00A\x00u\x00t\x00o\x00r\x00i\x00d\x00a\x00d\x00 \x00d\x00e\x00 \x00C\x00e\x00r\x00t\x00i\x00f\x00i\x00c\x00a\x00c\x00i\x00\xf3\x00n\x00 \x00R\x00a\x00\xed\x00z\x00 \x00d\x00e\x00 \x00l\x00a\x00 \x00A\x00C\x00C\x00V\x00 \x00(\x00A\x00g\x00e\x00n\x00c\x00i\x00a\x00 \x00d\x00e\x00 \x00T\x00e\x00c\x00n\x00o\x00l\x00o\x00g\x00\xed\x00a\x00 \x00y\x00 \x00C\x00e\x00r\x00t\x00i\x00f\x00i\x00c\x00a\x00c\x00i\x00\xf3\x00n\x00 \x00E\x00l\x00e\x00c\x00t\x00r\x00\xf3\x00n\x00i\x00c\x00a\x00,\x00 \x00C\x00I\x00F\x00 \x00Q\x004\x006\x000\x001\x001\x005\x006\x00E\x00)\x00.\x00 \x00C\x00P\x00S\x00 \x00e\x00n\x00 \x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00a\x00c\x00c\x00v\x00.\x00e\x00s00\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16$http://www.accv.es/legislacion_c.htm0U\x06\x03U\x1d\x1f\x04N0L0J\xa0H\xa0F\x86Dhttp://www.accv.es/fileadmin/Archivos/certificados/raizaccv1_der.crl0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x17\x06\x03U\x1d\x11\x04\x100\x0e\x81\x0caccv@accv.es0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00\x971\x02\x9f\xe7\xfdCgHD\x14\xe4)\x87\xedL(f\xd0\x8f5\xdaMa\xb7J\x97M\xb5\xdb\x90\xe0\x05.\x0e\xc6y\xd0\xf2\x97i\x0f\xbd\x04G\xd9\xbe\xdb\xb5)\xda\x9b\xd9\xae\xa9\x99\xd5\xd3<0\x93\xf5\x8d\xa1\xa8\xfc\x06\x8dD\xf4\xca\x16\x95|3\xdcb\x8b\xa87\xf8'\xd8\x09-\x1b\xef\xc8\x14' \xa9dD\xff.\xd6u\xaalM`@\x19ICTc\xda\xe2\xcc\xbaf\xe5ODz[\xd9j\x81+@\xd5\x7f\xf9\x01'X,\xc8\xedH\x91|?\xa6\x00\xcf\xc4)s\x116\xde\x86\x19>\x9d\xee\x19\x8a\x1b\xd5\xb0\xed\x8e=\x9c*\xc0\x0d\xd8=f\xe3<\x0d\xbd\xd5\x94\\xe2\xe2\xa75\x1b\x04\x00\xf6?Z\x8d\xeaC\xbd_\x89\x1d\xa9\xc1\xb0\xcc\x99\xe2M\x00\x0a\xda\xc9'[\xe7\x13\x90\\xe4\xf53\xa2Um\xdc\xe0\x09M/\xb1&['u\x00\x09\xc4bw)\x08_\x9eY\xac\xb6~\xad\x9fT0"\x03\xc1\x1eqd\xfe\xf98\x0a\x96\x18\xdd\x02\x14\xac#\xcb\x06\x1c\x1e\xa4}\x8d\x0d\xde'A\xe8\xad\xda\x15\xb7\xb0#\xdd+\xa8\xd3\xda%\x87\xed\xe8UDM\x88\xf46~\x84\x9ax\xac\xf7\x0eVI\x0e\xd63%\xd6\x84PBl \x12\x1d*\xd5\xbe\xbc\xf2p\x81\xa4p`\xbe\x05\xb5\x9b\x9e\x04D\xbea#\xac\xe9\xa5$\x8c\x11\x80\x94Z\xa2\xa2\xb9I\xd2\xc1\xdc\xd1\xa7\xed1\x11,\x9e\x19\xa6\xee\xe1U\xe1\xc0\xea\xcf\x0d\x84\xe4\x17\xb7\xa2|\xa5\xdeU%\x06\xee\xcc\xc0\x87\@\xda\xcc\x95?U\xe05\xc7\xb8\x84\xbe\xb4]\xcdz\x83\x01r\xee\x87\xe6_\x1d\xae\xb5\x85\xc6&\xdf\xe6\xc1\x9a\xe9\x1e\x02G\x9f*\xa8m\xa9[\xcf\xecEw\x7f\x98'\x9a2]*\xe3\x84\xee\xc5\x98f/\x96 \x1d\xdd\xd8\xc3'\xd7\xb0\xf9\xfe\xd9}\xcd\xd0\x9f\x8f\x0b\x14XQ\x9f/\x8b\xc38-\xde\xe8\x8f\xd6\x8d\x87\xa4\xf5VC\x16\x99,\xf4\xa4V\xb44\xb8a7\xc9\xc2X\x80\x1b\xa0\x97\xa1\xfcY\x8d\xe9\x11\xf6\xd1\x0fKU4F*\x8b\x86;", + ["CN=QuoVadis Root Certification Authority,OU=Root Certification Authority,O=QuoVadis Limited,C=BM"] = "0\x82\x05\xd00\x82\x04\xb8\xa0\x03\x02\x01\x02\x02\x04:\xb6P\x8b0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x7f1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1%0#\x06\x03U\x04\x0b\x13\x1cRoot Certification Authority1.0,\x06\x03U\x04\x03\x13%QuoVadis Root Certification Authority0\x1e\x17\x0d010319183333Z\x17\x0d210317183333Z0\x7f1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1%0#\x06\x03U\x04\x0b\x13\x1cRoot Certification Authority1.0,\x06\x03U\x04\x03\x13%QuoVadis Root Certification Authority0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xbfa\xb5\x95S\xbaW\xfc\xfa\xf2g\x0b:\x1a\xdf\x11\x80d\x95\xb4\xd1\xbc\xcdz\xcf\xf6)\x96.$T@$8\xf7\x1a\x85\xdcXL\xcb\xa4'B\x97\xd0\x9f\x83\x8a\xc3\xe4\x06\x03[\x00\xa5Q\x1ep\x04t\xe2\xc1\xd4:\xab\xd7\xad;\x07\x18\x05\x8e\xfd\x83\xac\xeaf\xd9\x18\x1bh\x8a\xf5W\x1a\x98\xba\xf5\xedv=|\xd9\xde\x94j;K\x17\xc1\xd5\x8f\xbde8:\x95\xd0=U6N\xdfyW1*\x1e\xd8YeIX \x98~\xab_~\x9f\xe9\xd6M\xec\x83t\xa9\xc7l\xd8\xee)J\x85*\x06\x14\xf9T\xe6\xd3\xdae\x07\x8bc7\x12\xd7\xd0\xec\xc3{ AD\xa3\xed\xcb\xa0\x17\xe1qe\xce\x1df1\xf7v\x01\x19\xc8}\x03X\xb6\x95I\x1d\xa6\x12&\xe8\xc6\x0cv\xe0\xe3f\xcb\xea]\xa6&\xee\xe5\xcc_\xbdg\xa7\x01'\x0e\xa2\xcaT\xc5\xb1z\x95\x1dq\x1eJ)\x8a\x03\xdcjE\xc1\xa4\x19^o6\xcd\xc3\xa2\xb0\xb7\xfe\8\xe2R\xbc\xf8DC\xe6\x90\xbb\x02\x03\x01\x00\x01\xa3\x82\x02R0\x82\x02N0=\x06\x08+\x06\x01\x05\x05\x07\x01\x01\x0410/0-\x06\x08+\x06\x01\x05\x05\x070\x01\x86!https://ocsp.quovadisoffshore.com0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x82\x01\x1a\x06\x03U\x1d \x04\x82\x01\x110\x82\x01\x0d0\x82\x01\x09\x06\x09+\x06\x01\x04\x01\xbeX\x00\x010\x81\xfb0\x81\xd4\x06\x08+\x06\x01\x05\x05\x07\x02\x020\x81\xc7\x1a\x81\xc4Reliance on the QuoVadis Root Certificate by any party assumes acceptance of the then applicable standard terms and conditions of use, certification practices, and the QuoVadis Certificate Policy.0"\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16\x16http://www.quovadis.bm0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x8bKm\xed\xd3)\xb9\x06\x19\xec99\xa9\xf0\x97\x84j\xcb\xef\xdf0\x81\xae\x06\x03U\x1d#\x04\x81\xa60\x81\xa3\x80\x14\x8bKm\xed\xd3)\xb9\x06\x19\xec99\xa9\xf0\x97\x84j\xcb\xef\xdf\xa1\x81\x84\xa4\x81\x810\x7f1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1%0#\x06\x03U\x04\x0b\x13\x1cRoot Certification Authority1.0,\x06\x03U\x04\x03\x13%QuoVadis Root Certification Authority\x82\x04:\xb6P\x8b0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x8a\xd4\x14\xb5\xfe\xf4\x9a\x92\xa7\x19\xd4\xa4~r\x18\x8f\xd9h|R$\xddgo9z\xc4\xaa^=\xe2X\xb0Mp\x98\x84a\xe8\x1b\xe3i\x18\x0e\xce\xfbGP\xa0N\xff\xf0$\x1f\xbd\xb2\xce\xf5'\xfc\xec/S\xaas{\x03=tn\xe6\x16\x9e\xeb\xa5.\xc4\xbfV'P+b\xba\xbeK\x1c\x82K&\x110n\xe1?A\xc7G\x005\xd5\xf5\xd3\xf7T>\x81=\xdaIj\x9a\xb3\xef\x10=\xe6\xebo\xd1\xc8"G\xcb\xcc\xcf\x011\x92\xd9\x18\xe3"\xbe\x09\x1e\x1a>Z\xb2\xe4k\x0cTz}CN\xb8\x89\xa5{\xd7\xa2=\x96\x86\xcc\xf2&4-j\x92\x9d\x9a\x1a\xd00\xe2]N\x04\xb0_\x8b ~w\xc1=\x95\x82\xd1F\x9a;)\xb8\x0f\x09\xd34\xdd3\xf5b\xd1\xe1\xcd\x19\xe9\xee\x18OLX\xae\xe2\x1e\xd6\x0c[\x15Z\xd8:\xb8\xc4\x18d\x1e\xe33\xb2\xb5\x89wN\x0c\xbf\xd9\x94k\x13\x97o\x12\xa3\xfe\x99\xa9\x04\xcc\x15\xec`h6\xed\x08{\xb7\xf5\xbf\x93\xedf1\x83\x8c\xc6q4\x87N\x17\xea\xaf\x8b\x91\x8d\x1cVA\xae"7^7\xf2\x1d\xd9\xd1-\x0d/iQ\xa7\xbef\xa6\x8a:*\xbd\xc7\x1a\xb1\xe1\x14\xf0\xbe:\x1d\xb9\xcf[\xb1j\xfe\xb4\xb1F \xa2\xfb\x1e;p\xef\x93\x98}\x8cs\x96\xf2\xc5\xef\x85p\xad)&\xfc\x1e\x04>\x1c\xa0\xd8\x0f\xcbR\x83b|\xee\x8bS\x95\x90\xa9W\xa2\xeaa\x05\xd8\xf9M\xc4'\xfan\xad\xed\xf9\xd7Q\xf7k\xa5\x02\x03\x01\x00\x01\xa3\x82\x01$0\x82\x01 0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xd3\x94\x8aLb\x13*\x19.\xcc\xafr\x8a}6\xd7\x9a\x1c\xdcg0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x81\xdd\x06\x03U\x1d\x1f\x04\x81\xd50\x81\xd20\x81\x87\xa0\x81\x84\xa0\x81\x81\x86\x7fldap://directory.d-trust.net/CN=D-TRUST%20Root%20Class%203%20CA%202%20EV%202009,O=D-Trust%20GmbH,C=DE?certificaterevocationlist0F\xa0D\xa0B\x86@http://www.d-trust.net/crl/d-trust_root_class_3_ca_2_ev_2009.crl0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x004\xed{Z<\xa4\x94\x88\xef\x1a\x11u\x07/\xb3\xfe<\xfa\x1eQ&\xeb\x87\xf6)\xde\xe0\xf1\xd4\xc6$\x09\xe9\xc1\xcfU\x1b\xb40\xd9\xce\x1a\xfe\x06Q\xa6\x15\xa4-\xef\xb2K\xbf (%I\xd1\xa66w4\xe8d\xdfR\xb1\x11\xc7sz\xcd9\x9e\xc2\xad\x8cq!\xf2Zk\xaf\xdf\xd7\x9e\xfc-u\xb2\xc1\x14\xd5#\x03\xdb[o\x0b>x/\x0d\xde3\x8d\x16\xb7H\xe7\x83\x9a\x81\x0f{\xc1CMU\x04\x178JQ\xd5Y\xa2\x89t\xd3\x9f\xbe\x1eK\xd7\xc6m\xb7\x88$o`\x91\xa4\x82\x85[VA\xbc\xd0D\xabj\x13\xbe\xd1,X\xb7\x123X\xb27c\xdc\x13\xf5\x94\x1d?@Q\xf5O\xf5:\xed\xc8\xc5\xeb\xc2\x1e\x1d\x16\x95z\xc7~Bq\x93nK\x15\xb70\xdf\xaa\xedW\x85H\xac\x1dj\xdd9i\xe4\xe1yx\xbe\xce\x05\xbf\xa1\x0c\xf7\x80{!g'0Y", + ["CN=VeriSign Class 3 Public Primary Certification Authority - G3,OU=(c) 1999 VeriSign, Inc. - For authorized use only,OU=VeriSign Trust Network,O=VeriSign, Inc.,C=US"] = "0\x82\x04\x1a0\x82\x03\x02\x02\x11\x00\x9b~\x06I\xa3>b\xb9\xd5\xee\x90Hq)\xefW0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\xca1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x170\x15\x06\x03U\x04\x0a\x13\x0eVeriSign, Inc.1\x1f0\x1d\x06\x03U\x04\x0b\x13\x16VeriSign Trust Network1:08\x06\x03U\x04\x0b\x131(c) 1999 VeriSign, Inc. - For authorized use only1E0C\x06\x03U\x04\x03\x13\x15 f\x08/\x95\x93\xbf\xaaG/\xa8F\x97\xf0\x12\xe2\xfe\xc2\x0a+Q\xe6v\xe6\xb7F\xb7\xe2\x0d\xa6\xcc\xa8\xc3LYU\x89\xe6\xe8S\\x1c\xea\x9d\xf0b\x16\x0b\xa7\xc9_\x0c\xf0\xde\xc2v\xce\xaf\xf7j\xf2\xfaA\xa6\xa23\x14\xc9\xe5zc\xd3\x9eb7\xd5\x85e\x9e\x0e\xe6S$t\x1b^\x1d\x12S[\xc7,\xe7\x83I;\x15\xae\x8ah\xb9W\x97\x02\x03\x01\x00\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x11\x14\x96\xc1\xab\x92\x08\xf7?/\xc9\xb2\xfe\xe4Z\x9fd\xde\xdb!O\x86\x994v6W\xdd\xd0\x15/\xc5\xad\x7f\x15\x1f7bs>\xd4\xe7_\xce\x17\x03\xdb5\xfa+\xdb\xae`\x09_\x1e_\x8fn\xbb\x0b=\xeaZ\x13\x1e\x0c`o\xb5\xc0\xb5#".\x07\x0b\xcb\xa9t\xcbG\xbb\x1d\xc1\xd7\xa5k\xcc/\xd2B\xfdI\xdd\xa7\x89\xcfS\xba\xda\x00Z(\xbf\x82\xdf\xf8\xba\x13\x1dP\x86\x82\xfd\x8e0\x8f)F\xb0\x1e=5\xda8b\x16\x18J\xad\xe6\xb6Ql\xde\xafb\xeb\x01\xd0\x1e$\xfez\x8f\x12\x1a\x12h\xb8\xfbf\x99\x14\x14E\\xae\xe7\xaei\x17\x81+Z7\xc9^*\xf4\xc6\xe2\xa1\T\x9b\xa6T\x00\xcf\xf0\xf1\xc1\xc7\x980\x1a;6\x16\xdb\xa3n\xea\xfd\xad\xb2\xc2\xda\xef\x02G\x13\x8a\xc0\xf1\xb31\xadO\x1c\xe1O\x9c\xaf\x0f\x0c\x9d\xf7x\x0d\xd8\xf45V\x80\xda\xb7m\x17\x8f\x9d\x1e\x81d\xe1\xfe\xc5E\xba\xadk\xb9\x0azNOK\x84\xeeK\xf1}\xdd\x11", + ["CN=Entrust Root Certification Authority - G2,OU=(c) 2009 Entrust, Inc. - for authorized use only,OU=See www.entrust.net/legal-terms,O=Entrust, Inc.,C=US"] = "0\x82\x04>0\x82\x03&\xa0\x03\x02\x01\x02\x02\x04JS\x8c(0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\xbe1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dEntrust, Inc.1(0&\x06\x03U\x04\x0b\x13\x1fSee www.entrust.net/legal-terms1907\x06\x03U\x04\x0b\x130(c) 2009 Entrust, Inc. - for authorized use only1200\x06\x03U\x04\x03\x13)Entrust Root Certification Authority - G20\x1e\x17\x0d090707172554Z\x17\x0d301207175554Z0\x81\xbe1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dEntrust, Inc.1(0&\x06\x03U\x04\x0b\x13\x1fSee www.entrust.net/legal-terms1907\x06\x03U\x04\x0b\x130(c) 2009 Entrust, Inc. - for authorized use only1200\x06\x03U\x04\x03\x13)Entrust Root Certification Authority - G20\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xba\x84\xb6r\xdb\x9e\x0ck\xe2\x99\xe90\x01\xa7v\xea2\xb8\x95A\x1a\xc9\xdaaNXr\xcf\xfe\xf6\x82y\xbfsa\x06\x0a\xa5'\xd8\xb3_\xd3EN\x1cr\xd6N2\xf2r\x8a\x0f\xf7\x83\x19\xd0j\x80\x80\x00E\x1e\xb0\xc7\xe7\x9a\xbf\x12W'\x1c\xa3h/\x0a\x87\xbdjk\x0e^e\xf3\x1cw\xd5\xd4\x85\x8dp!\xb4\xb32\xe7\x8b\xa2\xd5\x869\x02\xb1\xb8\xd2G\xce\xe4\xc9I\xc4;\xa7\xde\xfbT}W\xbe\xf0\xe8n\xc2y\xb2:\x0bU\xe2P\x98\x162\x13\/xV\xc1\xc2\x94\xb3\xf2Z\xe4'\x9a\x9f$\xd7\xc6\xec\xd0\x9b%\x82\xe3\xcc\xc2\xc4E\xc5\x8c\x97z\x06k*\x11\x9f\xa9\x0anH;o\xdb\xd4\x11\x19B\xf7\x8f\x07\xbf\xf5S_\x9c>\xf4\x17,\xe6i\xacN2Lbw\xea\xb7\xe8\xe5\xbb4\xbc\x19\x8b\xae\x9cQ\xe7\xb7~\xb5S\xb13"\xe5m\xcfp<\x1a\xfa\xe2\x9bg\xb6\x83\xf4\x8d\xa5\xafbLM\xe0X\xacd4\x12\x03\xf8\xb6\x8d\x94c$\xa4q\x02\x03\x01\x00\x01\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14jr&z\xd0\x1e\xef}\xe7;iQ\xd4l\x8d\x9f\x90\x12f\xab0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00y\x9f\x1d\x96\xc6\xb6y?"\x8d\x87\xd3\x87\x03\x04`jk\x9a.Y\x89s\x11\xacC\xd1\xf5\x13\xff\x8d9+\xc0\xf2\xbdOp\x8c\xa9/\xea\x17\xc4\x0bT\x9e\xd4\x1b\x96\x983<\xa8\xadb\xa2\x00v\xabYin\x06\x1d~\xc4\xb9D\x8d\x98\xaf\x12\xd4a\xdb\x0a\x19FG\xf3\xeb\xf7c\xc1@\x05@\xa5\xd2\xb7\xf4\xb5\x9a6\xbf\xa9\x88v\x88\x04U\x04+\x9c\x87\x7f\x1a7<~-\xa5\x1a\xd8\xd4\x89^\xca\xbd\xac=l\xd8m\xaf\xd5\xf3v\x0f\xcd;\x888"\x9dl\x93\x9a\xc4=\xbf\x82\x1be?\xa6\x0f]\xaa\xfc\xe5\xb2\x15\xca\xb5\xad\xc6\xbc=\xd0\x84\xe8\xea\x06r\xb0M92x\xbf>\x11\x9c\x0b\xa4\x9d\x9a!\xf3\xf0\x9b\x0b0x\xdb\xc1\xdc\x87C\xfe\xbcc\x9a\xca\xc5\xc2\x1c\xc9\xc7\x8d\xff;\x12X\x08\xe6\xb6=\xecz,N\xfb\x83\x96\xce\x0c_]\xce\x09\xff\x82\x0c\x1b\x9aQP\x1a&\x89\xdd\xd5a]\x19\xdc\x12\x0f-\x0a\xa2C]\x17\xd04\x92 \xeas\xcf8,\x06&\x09zr\xf7\xfaP2\xf8\xc2\x93\xd3i\xa2#\xceA\xb1\xcc\xe4\xd5\x1f6\xd1\x8a:\xf8\x8cc\xe2\x14Yi\xed\x0d\xd3\x7fk\xe8\xb8\x03\xe5Oj\xe5\x98ciH\x05\xbe.\xff3\xb6\xe9\x97Yi\xf8g\x19\xae\x93a\x96D\x15\xd3r\xb0?\xbcj}\xecH\x7f\x8d\xc3\xab\xaaq+SiAS4\xb5\xb0\xb9\xc5\x06\x0a\xc4\xb0E\xf5A]n\x89E{=;&\x8ct\xc2\xe5\xd2\xd1}\xb2\x11\xd4\xfbX2"\x9a\x80\xc9\xdc\xfd\x0c\xe9\x7f^\x03\x97\xce;\x00\x14\x87'p8\xa9\x8en\xb3'v\x98Q\xe0\x05\xe3!\xab\x1a\xd5\x85"<)\xb5\x9a\x16\xc5\x80\xa8\xf4\xbbk0\x8f/F\x02\xa2\xb1\x0c"\xe0\xd3\x02\x03\x01\x00\x01\xa3\x81\x970\x81\x940\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14!0\xc9\xfb\x00\xd7N\x98\xda\x87\xaa*\xd0\xa7.\xb1@1\xa7L0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0R\x06\x03U\x1d\x1f\x04K0I0G\xa0E\xa0C\x86Ahttp://crl.netsolssl.com/NetworkSolutionsCertificateAuthority.crl0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xbb\xaeK\xe7\xb7W\xeb\x7f\xaa-\xb7sG\x85j\xc1\xe4\xa5\x1d\xe4\xe7<\xe9\xf4Yew\xb5z[Z\x8d%6\xe0z\x97.8\xc0W`\x83\x98\x06\x83\x9f\xb9vznP\xe0\xba\x88,\xfcE\xcc\x18\xb0\x99\x95Q\x0e\xec\x1d\xb8\x88\xff\x87P\x1c\x82\xc2\xe3\xe02\x80\xbf\xa0\x0bG\xc8\xc31\xef\x99g2\x80O\x17!y\x0ci\\xde^4\xae\x02\xb5&\xeaP\xdf\x7f\x18e,\xc9\xf2c\xe1\xa9\x07\xfe|q\x1fk3$j\x1e\x05\xf7\x05h\xc0j\x12\xcb.^a\xcb\xae(\xd3~\xc2\xb4f\x91&_<.$_\xcbX\x0f\xeb(\xec\xaf\x11\x96\xf3\xdc{o\xc0\xa7\x88\xf2Sw\xb3`^\xae\xae(\xda5,o4E\xd3&\xe1\xde\xec[O'k\x16|\xbdD\x04\x18\x82\xb3\x89y\x17\x10q=z\xa2\x16N\xf5\x01\xcd\xa4leh\xa1Iv\C\xc9\xd8\xbc6gl\xa5\x94\xb5\xd4\xcc\xb9\xbdj5V!\xde\xd8\xc3\xeb\xfb\xcb\xa4`L\xb0U\xa0\xa0{W\xb2", + ["CN=Go Daddy Root Certificate Authority - G2,O=GoDaddy.com, Inc.,L=Scottsdale,ST=Arizona,C=US"] = "0\x82\x03\xc50\x82\x02\xad\xa0\x03\x02\x01\x02\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\x831\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x100\x0e\x06\x03U\x04\x08\x13\x07Arizona1\x130\x11\x06\x03U\x04\x07\x13\x0aScottsdale1\x1a0\x18\x06\x03U\x04\x0a\x13\x11GoDaddy.com, Inc.110/\x06\x03U\x04\x03\x13(Go Daddy Root Certificate Authority - G20\x1e\x17\x0d090901000000Z\x17\x0d371231235959Z0\x81\x831\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x100\x0e\x06\x03U\x04\x08\x13\x07Arizona1\x130\x11\x06\x03U\x04\x07\x13\x0aScottsdale1\x1a0\x18\x06\x03U\x04\x0a\x13\x11GoDaddy.com, Inc.110/\x06\x03U\x04\x03\x13(Go Daddy Root Certificate Authority - G20\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xbfqb\x08\xf1\xfaY4\xf7\x1b\xc9\x18\xa3\xf7\x80IX\xe9"\x83\x13\xa6\xc5 C\x01;\x84\xf1\xe6\x85I\x9f'\xea\xf6\x84\x1bN\xa0\xb4\xdbp\x98\xc72\x01\xb1\x05>\x07N\xee\xf4\xfaO/Y0"\xe7\xab\x19Vk\xe2\x80\x07\xfc\xf3\x16u\x809Q{\xe5\xf95\xb6tN\xa9\x8d\x82\x13\xe4\xb6?\xa9\x03\x83\xfa\xa2\xbe\x8a\x15j\x7f\xde\x0b\xc3\xb6\x19\x14\x05\xca\xea\xc3\xa8\x04\x94;F|2\x0d\xf3\x00f"\xc8\x8dim6\x8c\x11\x18\xb7\xd3\xb2\x1c`\xb48\xfa\x02\x8c\xce\xd3\xddF\x07\xde\x0a>\xeb]|\xc8|\xfb\xb0+S\xa4\x92biQ%\x05a\x1aD\x81\x8c,\xa9C\x96#\xdf\xac:\x81\x9a\x0e)\xc5\x1c\xa9\xe9]\x1e\xb6\x9e\x9e0\x0a9\xce\xf1\x88\x80\xfbK]\xcc2\xec\x85bC%4\x02V'\x01\x91\xb4;p*?n\xb1\xe8\x9c\x88\x01}\x9f\xd4\xf9\xdbSm`\x9d\xbf,\xe7X\xab\xb8_F\xfc\xce\xc4\x1b\x03<\x09\xebI1\iF\xb3\xe0G\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14:\x9a\x85\x07\x10g(\xb6\xef\xf6\xbd\x05An \xc1\x94\xda\x0f\xde0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x99\xdb]y\xd5\xf9\x97Yg\x03a\xf1~;\x061u-\xa1 \x8eOe\x87\xb4\xf7\xa6\x9c\xbc\xd8\xe9/\xd0\xdbZ\xee\xcft\x8cs\xb48B\xda\x05{\xf8\x02u\xb8\xfd\xa5\xb1\xd7\xae\xf6\xd7\xde\x13\xcbS\x10~\x8aF\xd1\x97\xfa\xb7.+\x11\xab\x90\xb0'\x80\xf9\xe8\x9fZ\xe97\x9f\xab\xe4\xdfl\xb3\x85\x17\x9d=\xd9$Oy\x915\xd6_\x04\xeb\x80\x83\xab\x9a\x02-\xb5\x10\xf4\xd8\x90\xc7\x04s@\xedr%\xa0\xa9\x9f\xec\x9e\xabh\x12\x99W\xc6\x8f\x12:\x09\xa4\xbdD\xfd\x06\x157\xc1\x9b\xe42\xa3\xed8\xe8\xd8d\xf3,~\x14\xfc\x02\xea\x9f\xcd\xff\x07h\x17\xdb"\x908-z\x8d\xd1T\xf1i\xe3_3\xcaz={\x0a\xe3\xca\x7f_9\xe5\xe2u\xba\xc5v\x183\xce,\xf0/L\xad\xf7\xb1\xe7\xceO\xa8\xc4\x9bJT\x06\xc5\x7f}\xd5\x08\x0f\xe2\x1c\xfe~\x17\xb8\xac^\xf6\xd4\x16\xb2C\x09\x0cM\xf6\xa7k\xb4\x99\x84e\xcaz\x88\xe2\xe2D\xbe\\xf7\xea\x1c\xf5", + ["CN=XRamp Global Certification Authority,O=XRamp Security Services Inc,OU=www.xrampsecurity.com,C=US"] = "0\x82\x0400\x82\x03\x18\xa0\x03\x02\x01\x02\x02\x10P\x94l\xec\x18\xea\xd5\x9cM\xd5\x97\xefu\x8f\xa0\xad0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\x821\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x1e0\x1c\x06\x03U\x04\x0b\x13\x15www.xrampsecurity.com1$0"\x06\x03U\x04\x0a\x13\x1bXRamp Security Services Inc1-0+\x06\x03U\x04\x03\x13$XRamp Global Certification Authority0\x1e\x17\x0d041101171404Z\x17\x0d350101053719Z0\x81\x821\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x1e0\x1c\x06\x03U\x04\x0b\x13\x15www.xrampsecurity.com1$0"\x06\x03U\x04\x0a\x13\x1bXRamp Security Services Inc1-0+\x06\x03U\x04\x03\x13$XRamp Global Certification Authority0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\x98$\x1e\xbd\x15\xb4\xba\xdf\xc7\x8c\xa5'\xb68\x0bi\xf3\xb6N\xa8,.!\x1d\D\xdf!]~#t\xfe^~\xb4J\xb7\xa6\xad\x1f\xae\xe0\x06\x16\xe2\x9b[\xd9gtk]\x80\x8f)\x9d\x86\x1b\xd9\x9c\x0d\x98mv\x10(X\xe4e\xb0\x7fJ\x98y\x9f\xe0\xc31~\x80+\xb5\x8c\xc0@;\x11\x86\xd0\xcb\xa2\x866`\xa4\xd50\x82m\xd9n\xd0\x0f\x12\x043\x97_OaZ\xf0\xe4\xf9\x91\xab\xe7\x1d;\xbc\xe8\xcf\xf4k-4|\xe2Ha\x1c\x8e\xf3aD\xcco\xa0J\xa9\x94\xb0M\xda\xe7\xa94zr8\xa8A\xcc<\x94\x11}\xeb\xc8\xa6\x8c\xb7\x86\xcb\xca3;\xd9=7\x8b\xfbz>\x86,\xe7s\xd7\x0aW\xacd\x9b\x19\xeb\xf4\x0f\x04\x08\x8a\xac\x03\x17\x19d\xf4Z%"\x8d4,\xb2\xf6h\x1d\x12m\xd3\x8a\x1e\x14\xda\xc4\x8f\xa6\xe2#\x85\xd5z\x0d\xbdj\xe0\xe9\xec\xec\x17\xbbB\x1bg\xaa%\xedE\x83!\xfc\xc1\xc9|\xd5b>\xfa\xf2\xc5-\xd3\xfd\xd4e\x02\x03\x01\x00\x01\xa3\x81\x9f0\x81\x9c0\x13\x06\x09+\x06\x01\x04\x01\x827\x14\x02\x04\x06\x1e\x04\x00C\x00A0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x860\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xc6O\xa2=\x06c\x84\x09\x9c\xceb\xe4\x04\xac\x8d\\xb5\xe9\xb6\x1b06\x06\x03U\x1d\x1f\x04/0-0+\xa0)\xa0'\x86%http://crl.xrampsecurity.com/XGCA.crl0\x10\x06\x09+\x06\x01\x04\x01\x827\x15\x01\x04\x03\x02\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x91\x159\x03\x01\x1bg\xfbJ\x1c\xf9\x0a`[\xa1\xdaM\x97b\xf9$S'\xd7\x82dN\x90.\xc3I\x1b+\x9a\xdc\xfc\xa8xg5\xf1\x1d\xf0\x11\xbd\xb7H\xe3\x10\xf6\x0d\xdf?\xd2\xc9\xb6\xaaU\xa4H\xba\x02\xdb\xdeY.\x15[;\x9d\x16}G\xd77\xea_Mv\x126\xbb\x1f\xd7\xa1\x81\x04F \xa3,m\xa9\x9e\x01~?)\xce\x00\x93\xdf\xfd\xc9\x92s\x89\x89d\x9e\xe7+\xe4\x1c\x91,\xd2\xb9\xce}\xceo1\x99\xd3\xe6\xbe\xd2\x1e\x90\xf0\x09\x14y\#\xabM\xd2\xda!\x1fM\x99y\x9d\xe1\xcf'\x9f\x10\x9b\x1c\x88\x0d\xb0\x8adA1\xb8\x0el\x90$\xa4\x9b\q\x8f\xba\xbb~\x1c\x1b\xdbj\x80\x0f!\xbc\xe9\xdb\xa6\xb7@\xf4\xb2\x8b\xa9\xb1\xe4\xef\x9a\x1a\xd0=i\x99\xee\xa8(\xa3\xe1<\xb3\xf0\xb2\x11\x9c\xcf|@\xe6\xdd\xe7C}\xa2\xd8:\xb5\xa9\x8d\xf24\x99\xc4\xd4\x10\xe1\x06\xfd\x09\x84\x10;\xee\xc4L\xf4\xec'|B\xc2t|\x82\x8a\x09\xc9\xb4\x03%\xbc", + ["CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R3"] = "0\x82\x03_0\x82\x02G\xa0\x03\x02\x01\x02\x02\x0b\x04\x00\x00\x00\x00\x01!XS\x08\xa20\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000L1 0\x1e\x06\x03U\x04\x0b\x13\x17GlobalSign Root CA - R31\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0\x1e\x17\x0d090318100000Z\x17\x0d290318100000Z0L1 0\x1e\x06\x03U\x04\x0b\x13\x17GlobalSign Root CA - R31\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xcc%v\x90y\x06x"\x16\xf5\xc0\x83\xb6\x84\xca(\x9e\xfd\x05v\x11\xc5\xad\x88r\xfcF\x02C\xc7\xb2\x8a\x9d\x04_$\xcb.K\xe1`\x82F\xe1R\xab\x0c\x81Gpl\xddd\xd1\xeb\xf5,\xa3\x0f\x82=\x0c+\xae\x97\xd7\xb6\x14\x86\x10y\xbb;\x13\x80w\x8c\x08\xe1I\xd2jb/\x1f^\xfa\x96h\xdf\x89'\x958\x9f\x06\xd7>\xc9\xcb&Y\x0ds\xde\xb0\xc8\xe9&\x0e\x83\x15\xc6\xef[\x8b\xd2\x04`\xcaI\xa6(\xf6i;\xf6\xcb\xc8(\x91\xe5\x9d\x8aaW7\xact\x14\xdct\xe0:\xeer/.\x9c\xfb\xd0\xbb\xbf\xf5=\x00\xe1\x063\xe8\x82+\xaeS\xa6:\x16s\x8c\xddA\x0e :\xc0\xb4\xa7\xa1\xe9\xb2O\x90.2`\xe9W\xcb\xb9\x04\x92hh\xe58&`u\xb2\x9fw\xff\x91\x14\xef\xae I\xfc\xad@\x15H\xd1\x021a\x19^\xb8\x97\xef\xadw\xb7d\x9az\xbf_\xc1\x13\xef\x9bb\xfb\x0dl\xe0Ti\x16\xa9\x03\xdan\xe9\x83\x93qv\xc6i\x85\x82\x17\x02\x03\x01\x00\x01\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x8f\xf0K\x7f\xa8.E$\xaeMP\xfac\x9a\x8b\xde\xe2\xdd\x1b\xbc0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00K@\xdb\xc0P\xaa\xfe\xc8\x0c\xef\xf7\x96TEI\xbb\x96\x00\x09A\xac\xb3\x13\x86\x86(\x073\xcak\xe6t\xb9\xba\x00-\xae\xa4\x0a\xd3\xf5\xf1\xf1\x0f\x8a\xbfsgJ\x83\xc7D{x\xe0\xafnlo\x03)\x8e39E\xc3\x8e\xe4\xb9Wl\xaa\xfc\x12\x96\xecS\xc6-\xe4$l\xb9\x94c\xfb\xdcShgV>\x83\xb8\xcf5!\xc3\xc9h\xfe\xce\xda\xc2S\xaa\xcc\x90\x8a\xe9\xf0]F\x8c\x95\xddzX(\x1a/\x1d\xde\xcd\x007A\x8f\xedDm\xd7S(\x97~\xf3g\x04\x1e\x15\xd7\x8a\x96\xb4\xd3\xdeL'\xa4L\x1bssv\xf4\x17\x99\xc2\x1fz\x0e\xe3-\x08\xad\x0a\x1c,\xff<\xabU\x0e\x0f\x91~6\xeb\xc3WI\xbe\xe1.-|`\x8b\xc3AQ\x13#\x9d\xce\xf72k\x94\x01\xa8\x99\xe7,3\x1f:;%\xd2\x86@\xce;,\x86x\xc9a/\x14\xba\xee\xdbUo\xdf\x84\xee\x05\x09M\xbd(\xd8r\xce\xd3bPe\x1e\xeb\x92\x97\x831\xd9\xb3\xb5\xcaGX?_", + ["CN=TWCA Root Certification Authority,OU=Root CA,O=TAIWAN-CA,C=TW"] = "0\x82\x03{0\x82\x02c\xa0\x03\x02\x01\x02\x02\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000_1\x0b0\x09\x06\x03U\x04\x06\x13\x02TW1\x120\x10\x06\x03U\x04\x0a\x0c\x09TAIWAN-CA1\x100\x0e\x06\x03U\x04\x0b\x0c\x07Root CA1*0(\x06\x03U\x04\x03\x0c!TWCA Root Certification Authority0\x1e\x17\x0d080828072433Z\x17\x0d301231155959Z0_1\x0b0\x09\x06\x03U\x04\x06\x13\x02TW1\x120\x10\x06\x03U\x04\x0a\x0c\x09TAIWAN-CA1\x100\x0e\x06\x03U\x04\x0b\x0c\x07Root CA1*0(\x06\x03U\x04\x03\x0c!TWCA Root Certification Authority0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xb0~r\xb8\xa4\x03\x94\xe6\xa7\xde\x098\x91J\x11@\x87\xa7|Yd\x14{\xb5\x11\x10\xdd\xfe\xbf\xd5\xc0\xbbV\xe2\x85%\xf45r\x0f\xf8S\xd0A\xe1D\x01\xc2\xb4\x1c\xc31B\x16G\x853"v\xb2\x0ao\x0f\xe5%PO\x85\x86\xbe\xbf\x98.\x10g\x1e\xbe\x11\x05\x86\x05\x90\xc4Y\xd0|x\x10\xb0\x80\\xb7\xe1\xc7+u\xcb|\x9f\xae\xb5\xd1\x9d#7c\xa7\xdcB\xa2-\x92\x04\x1bP\xc1{\xb8>\x1b\xc9V\x04\x8b/R\x9b\xad\xa9V\xe9\xc1\xff\xad\xa9X\x870\xb6\x81\xf7\x97E\xfc\x19W;+o\xe4G\xf4\x99E\xfe\x1d\xf1\xf8\x97\xa3\x88\x1d7\x1c\\x8f\xe0v%\x9aP\xf8\xa0T\xffD\x90v#\xd22\xc6\xc3\xab\x06\xbf\xfc\xfb\xbf\xf3\xad}\x92b\x02[)\xd35\xa3\x93\x9aCd`]\xb2\xfa2\xff;\x04\xafM@j\xf9\xc7\xe3\xef#\xfdk\xcb\xe5\x0f\x8b8\x0d\xee\x0a\xfc\xfe\x0f\x98\x9f01\xddlRe\xf9\x8b\x81\xbe"\xe1\x1cX\x03\xba\x91\x1b\x89\x07\x02\x03\x01\x00\x01\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14j8[&\x8d\xde\x8bZ\xf2OzT\x83\x19\x18\xe3\x085\xa6\xba0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00<\xd5w=\xda\xdf\x89\xba\x87\x0c\x08Tj P\x92\xbe\xb0A=\xb9&d\x83\x0a/\xe8@\xc0\x97('\x820J\xc9\x93\xffj\xe7\xa6\x00\x7f\x89B\x9a\xd6\x11\xe5S\xce/\xcc\xf2\xda\x05\xc4\xfe\xe2P\xc4:\x86}\xcc\xda~\x10\x09;\x925*S\xb2\xfe\xeb+\x05\xd9l]\xe6\xd0\xef\xd3jf\x9e\x15(\x85z\xe8\x82\x00\xac\x1e\xa7\x09iVB\xd3hQ\x18\xbeT\x9a\xbfDA\xbaI\xbe \xbai\\xee\xb8w\xcd\xcel\x1f\xad\x83\x96\x18}\x0e\xb5\x149\x84\xf1(\xe9-\xa3\x9e{\x1ezrZ\x83\xb3yo\xef\xb4\xfc\xd0\x0a\xa5XOF\xdf\xfbmyY\xf2\x84"R\xae\x0f\xcc\xfb|;\xe7j\xcaGa\xc3z\xf8\xd3\x92\x04\x1f\xb8 \x84\xe16T\x16\xc7@\xde;\x8as\xdc\xdf\xc6\x09L\xdf\xec\xda\xff\xd4SB\xa1\xc9\xf2b\x1d"\x83<\x97\xc5\xf9\x19b'\xace"\xd7\xd3<\xc6\xe5\x8e\xb2S\xccI\xce\xbc0\xfe{\x0e3\x90\xfb\xed\xd2\x14\x91\x1f\x07\xaf", + ["CN=Hellenic Academic and Research Institutions RootCA 2015,O=Hellenic Academic and Research Institutions Cert. Authority,L=Athens,C=GR"] = "0\x82\x06\x0b0\x82\x03\xf3\xa0\x03\x02\x01\x02\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\xa61\x0b0\x09\x06\x03U\x04\x06\x13\x02GR1\x0f0\x0d\x06\x03U\x04\x07\x13\x06Athens1D0B\x06\x03U\x04\x0a\x13;Hellenic Academic and Research Institutions Cert. Authority1@0>\x06\x03U\x04\x03\x137Hellenic Academic and Research Institutions RootCA 20150\x1e\x17\x0d150707101121Z\x17\x0d400630101121Z0\x81\xa61\x0b0\x09\x06\x03U\x04\x06\x13\x02GR1\x0f0\x0d\x06\x03U\x04\x07\x13\x06Athens1D0B\x06\x03U\x04\x0a\x13;Hellenic Academic and Research Institutions Cert. Authority1@0>\x06\x03U\x04\x03\x137Hellenic Academic and Research Institutions RootCA 20150\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xc2\xf8\xa9?\x1b\x89\xfc<<\x04]=\x906\xb0\x91:y\xdf\xac\xaf\xe7\xa1\x88k1\xaf\xf0\x8b\xd0\x183\xb8\xdbEj4\xf4\x02\x80$(\x0a\x02\x15\x95^v*\x0d\x99:\x14[\xf6\xcb\xcbS\xbc\x13M\x01\x887\x94%\x1bB\xbc"\xd8\x8e\xa3\x96^:\xd92\xdb>\xe8\xf0\x10e\xedt\xe1/\xa7|\xaf'4\xbb)}\x9b\xb6\xcf\x09\xc8\xe5\xd3\x0a\xfc\x88eet\x0a\xdcs\x1c\\xcd@\xb1\x1c\xd4\xb6\x84\x8cLP\xcfh\x8e\xa8Y\xae\xc2'N\x82\xa25\xdd\x14\xf4\x1f\xff\xb2w\xd5\x87/\xaan}$'\xe7\xc6\xcb&\xe6\xe5\xfeg\x07c\xd8E\x0d\xdd:Ye9Xz\x92\x99r=\x9c\x84^\x88!\xb8\xd5\xf4,\xfc\xd9pROx\xb8\xbd<+\x8b\x95\x98\xf5\xb3\xd1h\xcf \x14~L\_\xe7\x8b\xe5\xf55\x81\x197\xd7\x11\x08\xb7f\xbe\xd3J\xce\x83W\x00:\xc3\x81\xf8\x17\xcb\x926]\xd1\xa3\xd8u\x1b\xe1\x8b'\xeazHA\xfdE\x19\x06\xad'\x99N\xc1pG\xdd\xb5\x9f\x81S\x12\xe5\xb1\x8cH]1C\x17\xe3\x8c\xc6zc\x96K)0N\x84Nb\x19^<\xce\x97\x90\xa5\x7f\x01\xeb\x9d\xe0\xf8\x8b\x89\xdd%\x98=\x92\xb6~\xef\xd9\xf1QQ}-&\xc8iYa\xe0\xacj\xb8*6\x11\x04zP\xbd2\x84\xbe/\xdcr\xd5\xd7\x1d\x16G\xe4Gf ?\xf4\x96\xc5\xaf\x8e\x01z\xa5\x0fzd\xf5\x0d\x18\x87\xd9\xae\x88\xd5\xfa\x84\xc1:\xc0i(-\xf2\x0dhQ\xaa\xe3\xa5w\xc6\xa4\x90\x0e\xa17\x8b1#G\xc1\x09\x08\xebn\xf7x\x9b\xd7\x82\xfc\x84 \x99I\x19\xb6\x12F\xb1\xfbEU\x16\xa9\xa3e\xac\x9c\x07\x0f\xeak\xdc\x1f.\x06r\xec\x86\x88\x12\xe4-\xdb_\x05/\xe4\xf0\x03\xd3&3\xe7\x80\xc2\xcdB\xa1\x174\x0b\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14q\x15g\xc8\xc8\xc9\xbdu]r\xd08\x18j\x9d\xf3q$T\x0b0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00u\xbbmTK\xaa\x10XF4\xf2b\xd7\x166]\x08^\xd5l\xc8\x87\xbd\xb4.F\xf21\xf8|\xeaB\xb5\x93\x16U\xdc\xa1\x0c\x12\xa0\xdaa~\x0fXXsdr\xc7\xe8E\x8e\xdc\xa9\xf2&?\xc6y\x8c\xb1S\x083\x81\xb0V\x13\xbe\xe6Q\\xd8\x9b\x0aOK\x9cVS\x02\xe9O\xf6\x0d`\xeaMBU\xe8|\x1b!!\xd3\x1b:\xccw\xf2\xb8\x90\xf1h\xc7\xf9Z\xfe\xfa-\xf4\xbf\xc9\xf5E\x1b\xce8\x10*7\x8ay\xa3\xb4\xe3\x09l\x85\x86\x93\xff\x89\x96'x\x81\x8fg\xe3FtT\x8e\xd9\x0di\xe2J\xf4Mt\x03\xff\xb2w\xed\x95g\x97\xe4\xb1\xc5\xab\xbfj#\xe8\xd4\x94\xe2D(b\xc4K\xe2\xf0\xd8\xe2)k\x1ap~$a\x93{O\x032%\x0dE$+\x96\xb4Fj\xbfJ\x0b\xf7\x9a\x8f\xc1\xac\x1a\xc5g\xf3o4\xd2\xfasc\x8c\xef\x16\xb0\xa8\xa4F*\xf8\xeb\x12\xecr\xb4\xef\xf8+~\x8cR\xc0\x8b\x84T\xf9/>\xe3U\xa8\xdcf\xb1\xd9\xe1_\xd8\xb3\x8cY4Y\xa4\xabOl\xbb\x1f\x18\xdbu\xab\xd8\xcb\x92\xcd\x948a\x0e\x07\x06\x1fKF\x10\xf1\x15\xbe\x8d\x85\;J+\x81y\x0f\xb4i\x9fIP\x97M\xf7\x0eV]\xc0\x95j\xc26\xc3\x1bh\xc9\xf5*\xdcG\x9a\xbe\xb2\xce\xc5%\xe8\xfa\x03\xb9\xda\xf9\x16n\x91\x84\xf5\x1c(\xc8\xfc&\xcc\xd7\x1c\x90V\xa7_o:\x04\xbc\xcdx\x89\x0b\x8e\x0f/\xa3\xaaO\xa2\x1b\x12=\x16\x08@\x0f\xf1FL\xd7\xaa{\x08\xc1\x0a\xf5m'\xde\x02\x8f\xca\xc3\xb5+\xca\xe9\xeb\xc8!S8\xa5\xcc;\xd8w70\xa2O\xd9o\xd1\xf2@\xadAz\x17\xc5\xd6J5\x89\xb7A\xd5|\x86\x7fUM\x83J\xa5s \xc0:\xaf\x90\xf1\x9a$\x8e\xd9\x8eq\xca{\xb8\x86\xda\xb2\x8f\x99>\x1d\x13\x0d\x12\x11\xee\xd4\xab\xf0\xe9\x15v\x02\xe4\xe0\xdf\xaa \x1e[a\x85d@\xa9\x90\x97\x0d\xadS\xd2Z\x1d\x87j\x00\x97eb\xb4\xbeoj\xa7\xf5,B\xed2\xad\xb6!\x9e\xbe\xbc", + ["CN=DigiCert Trusted Root G4,OU=www.digicert.com,O=DigiCert Inc,C=US"] = "0\x82\x05\x900\x82\x03x\xa0\x03\x02\x01\x02\x02\x10\x05\x9b\x1bW\x9e\x8e!2\xe29\x07\xbd\xa7wu\0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x000b1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cDigiCert Inc1\x190\x17\x06\x03U\x04\x0b\x13\x10www.digicert.com1!0\x1f\x06\x03U\x04\x03\x13\x18DigiCert Trusted Root G40\x1e\x17\x0d130801120000Z\x17\x0d380115120000Z0b1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cDigiCert Inc1\x190\x17\x06\x03U\x04\x0b\x13\x10www.digicert.com1!0\x1f\x06\x03U\x04\x03\x13\x18DigiCert Trusted Root G40\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xbf\xe6\x90sh\xde\xbb\xe4]J<0"0i3\xec\xc2\xa7%.\xc9!=\xf2\x8a\xd8Y\xc2\xe1)\xa7=X\xabv\x9a\xcd\xae{\x1b\x84\x0d\xc40\x1f\xf3\x1b\xa48\x16\xebV\xc6\x97m\x1d\xab\xb2y\xf2\xca\x11\xd2\xe4_\xd6\x05\x10\x91p\xabU\x82A2\xd7\xdb\x04s*n\x91\x01|!L\xd4\xbc\xae\x1b\x03u]xf\xd9:1D\x9a3@\xbf\x08\xd7ZI\xa4\xc2\xe6\xa9\xa0g\xdd\xa4'\xbc\xa1O9\xb5\x11X\x17\xf7$\F\x8fd\xf7\xc1i\x88v\x98v=Y]Bv\x87\x89\x97izH\xf0\xe0\xa2\x12\x1bf\x9at\xca\xdeK\x1e\xe7\x0ec\xae\xe6\xd4\xef\x92\x92:\x9e=\xdc\x00\xe4E%\x89\xb6\x9aD\x19+~\xc0\x94\xb4\xd2am\xeb3\xd9\xc5\xdfK\x04\x00\xcc}\x1c\x95\xc3\x8f\xf7!\xb2\xb2\x11\xb7\xbb\x7f\xf2\xd5\x8cp,A`\xaa\xb1c\x18D\x95\x1avb~\xf6\x80\xb0\xfb\xe8d\xa63\xd1\x89\x07\xe1\xbd\xb7\xe6C\xa4\x18\xb8\xa6w\x01\xe1\x0f\x94\x0c!\x1d\xb2T)%\x89l\xe5\x0eRQGt\xbe&\xac\xb6Au\xdez\xac_\x8d?\xc9\xbc\xd3A\x11\x12[\xe5\x10P\xeb1\xc5\xcar\x16"\x09\xdf|Lu?c\xec!_\xc4 Qko\xb1\xab\x86\x8bO\xc2\xd6E_\x9d \xfc\xa1\x1e\xc5\xc0\x8f\xa2\xb1~\x0a&\x99\xf5\xe4i/\x98\x1d-\xf5\xd9\xa9\xb2\x1d\xe5\x1b\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xec\xd7\xe3\x82\xd2q]dL\xdf.g?\xe7\xba\x98\xae\x1c\x0fO0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x00\x03\x82\x02\x01\x00\xbba\xd9}\xa9l\xbe\x17\xc4\x91\x1b\xc3\xa1\xa2\x00\x8d\xe3dh\x0fV\xcfw\xaep\xf9\xfd\x9aJ\x99\xb9\xc9x\\x0c\x0c_\xe4\xe6\x14)V\x0b6I]Dc\xe0\xad\x9c\x96\x18f\x1b#\x0d=y\xe9mk\xd6T\xf8\xd2<\xc1C@\xae\x1dP\xf5R\xfc\x90;\xbb\x98\x99ik\xc7\xc1\xa7\xa8h\xa4'\xdc\x9d\xf9'\xae0\x85\xb9\xf6gM:>\x8fY9"SD\xeb\xc8]\x03\xca\xedPz}b!\x0a\x80\xc8sf\xd1\xa0\x05`_\xe8\xa5\xb4\xa7\xaf\xa8\xf7m5\x9c|Z\x8a\xd6\xa28\x99\xf3x\x8b\xf4M\xd2 \x0b\xde\x04\xee\x8c\x9bG\x81r\x0d\xc0\x142\xef0Y.\xae\xe0q\xf2V\xe4j\x97o\x92Pm\x96\x8dhz\x9a\xb26\x14z\x06\xf2$\xb9\x09\x11P\xd7\x08\xb1\xb8\x89z\x84#aB)\xe5\xa3\xcd\xa2 A\xd7\xd1\x9cd\xd9\xea&\xa1\x8b\x14\xd7L\x19\xb2PAq=?Mp#\x86\x0cJ\xdc\x81\xd2\xcc2\x94\x84\x0d\x08\x09\x97\x1cO\xc0\xeek t0\xd2\xe094\x10\x85!\x15\x01\x08\xe8U2\xdeqI\xd9(\x17PM\xe6\xbeM\xd1u\xac\xd0\xca\xfbA\xb8C\xa5\xaa\xd3\xc3\x05DO,6\x9b\xe2\xfa\xe2E\xb8#Sl\x06ogU\x7fF\xb5L?n(Zy&\xd2\xa4\xa8b\x97\xd2\x1e\xe2\xedJ\x8b\xbc\x1b\xfdGJ\x0d\xdfgf~\xb2[A\xd0;\xe4\xf4;\xf4\x04c\xe9\xef\xc2T\x00Q\xa0\x8a*\xc9\xcex\xcc\xd5\xea\x87\x04\x18\xb3\xce\xafI\x88\xaf\xf3\x92\x99\xb6\xb3\xe6a\x0f\xd2\x85\x00\xe7P\x1a\xe4\x1b\x95\x9d\x19\xa1\xb9\x9c\xb1\x9b\xb1\x00\x1e\xef\xd0\x0fOBl\xc9\x0a\xbc\xeeC\xfa:q\xa5\xc8M&\xa55\xfd\x89]\xbc\x85b\x1d2\xd2\xa0+T\xed\x9aW\xc1\xdb\xfa\x10\xcf\x19\xb7\x8bJ\x1b\x8f\x01\xb6'\x95S\xe8\xb6\x89m[\xbch\xd4#\xe8\x8bQ\xa2V\xf9\xf0\xa6\x80\xa0\xd6\x1e\xb3\xbc\x0f\x0fSu)\xaa\xea\x13w\xe4\xde\x8c\x81!\xad\x07\x10G\x11\xad\x87=\x07\xd1u\xbc\xcf\xf3f~", + ["CN=QuoVadis Root CA 3,O=QuoVadis Limited,C=BM"] = "0\x82\x06\x9d0\x82\x04\x85\xa0\x03\x02\x01\x02\x02\x02\x05\xc60\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000E1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1b0\x19\x06\x03U\x04\x03\x13\x12QuoVadis Root CA 30\x1e\x17\x0d061124191123Z\x17\x0d311124190644Z0E1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1b0\x19\x06\x03U\x04\x03\x13\x12QuoVadis Root CA 30\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xccWB\x16T\x9c\xe6\x98\xd3\xd3M\xee\xfe\xed\xc7\x9fC9Je\xb3\xe8\x16\x884\xdb\x0dY\x91t\xcf\x92\xb8\x04@\xad\x02K1\xab\xbc\x8d\x91h\xd8 \x0e\x1a\x01\xe2\x1a{N\x17]\xe2\x8a\xb7?\x99\x1a\xcd\xeba\xab\xc2e\xa6\x1f\xb7\xb7\xbd\xb7\x8f\xfc\xfdp\x8f\x0b\xa0g\xbe\x01\xa2Y\xcfq\xe6\x0f)v\xff\xb1VyE+\x1f\x9ezT\xe8\xa3)5h\xa4\x01O\x0f\xa4.7\xef\x1b\xbf\xe3\x8f\x10\xa8r\xabXW\xe7T\x86\xc8\xc9\xf3[\xda,\xda]\x8en<\xa3>\xda\xfb\x82\xe5\xdd\xf2\\xb2\x053o\x8a6\xce\xd0\x13N\xff\xbfJ\x0c4L\xa6\xc3!\xbdP\x04U\xeb\xb1\xbb\x9d\xfbE\x1ed\x15\xdeU\x01\x8c\x02v\xb5\xcb\xa1?Bi\xbc/\xbdhC\x16V\x89*7a\x91\xfd\xa6\xaeN\xc0\xcb\x14e\x947K\x92\x06\xef\x04\xd0\xc8\x9c\x88\xdb\x0b{\x81\xaf\xb1=*\xc4e:x\xb6\xee\xdc\x80\xb1\xd2\xd3\x99\x9c:\xeekZk\xb3\x8d\xb7\xd5\xce\x9c\xc2\xbe\xa5K/\x16\xb1\x9eh;\x06o\xae}\x9f\xf8\xde\xec\xcc)\xa7\x98\xa3%C/\xef\xf1_&\xe1\x88M\xf8^n\xd7\xd9\x14n\x193i\xa7;\x84\x89\x93\xc4SU\x13\xa1Qx@\xf8\xb8\xc9\xa2\xee{\xbaRB\x83\x9e\x14\xed\x05RZYV\xa7\x97\xfc\x9d?\x0a)\xd8\xdcO\x91\x0e\x13\xbc\xde\x95\xa4\xdf\x8b\x99\xbe\xac\x9b3\x88\xef\xb5\x81\xaf\x1b\xc6"S\xc8\xf6\xc7\xee\x97\x14\xb0\xc5|xR\xc8\xf0\xcenw`\x84\xa6\xe9*v \xedX\x01\x170\x93\xe9\x1a\x8b\xe0sc\xd9j\x92\x94IN\xb4\xadJ\x85\xc4\xa3"0\xfc\x09\xedh"s\xa6\x88\x0cU!X\xc5\xe1:\x9f*\xdd\xca\xe1\x90\xe0\xd9s\xabl\x80\xb8\xe8\x0bd\x93\xa0\x9c\x8c\x19\xff\xb3\xd2\x0c\xec\x91&\x87\x8a\xb3\xa2\xe1p\x8f,\x0a\xe5\xcdmhQ\xeb\xda?\x05\x7f\x8b2\xe6\x13\k\xfe_@\xe2"\xc8\xb4\xb4dO\xd6\xba}H>\xa8i\x0c\xd7\xbb\x86q\xc9s\xb8?;\x9d%K\xda\xff@\xeb\x02\x03\x01\x00\x01\xa3\x82\x01\x950\x82\x01\x910\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x81\xe1\x06\x03U\x1d \x04\x81\xd90\x81\xd60\x81\xd3\x06\x09+\x06\x01\x04\x01\xbeX\x00\x030\x81\xc50\x81\x93\x06\x08+\x06\x01\x05\x05\x07\x02\x020\x81\x86\x1a\x81\x83Any use of this Certificate constitutes acceptance of the QuoVadis Root CA 3 Certificate Policy / Certification Practice Statement.0-\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16!http://www.quovadisglobal.com/cps0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xf2\xc0\x13\xe0\x82C>\xfb\xee/g2\x965\\xdb\xb8\xcb\x02\xd00n\x06\x03U\x1d#\x04g0e\x80\x14\xf2\xc0\x13\xe0\x82C>\xfb\xee/g2\x965\\xdb\xb8\xcb\x02\xd0\xa1I\xa4G0E1\x0b0\x09\x06\x03U\x04\x06\x13\x02BM1\x190\x17\x06\x03U\x04\x0a\x13\x10QuoVadis Limited1\x1b0\x19\x06\x03U\x04\x03\x13\x12QuoVadis Root CA 3\x82\x02\x05\xc60\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00O\xad\xa0,L\xfa\xc0\xf2o\xf7fU\xab#4\xee\xe7)\xda\xc3[\xb6\xb0\x83\xd9\xd0\xd0\xe2!\xfb\xf3`\xa7;]`S'\xa2\x9b\xf6\x08"*\xe7\xbf\xa0r\xe5\x9c$j1\xb1\x90z'\xdb\x84\x11\x89'\xa6wZ8\xd7\xbf\xac\x86\xfc\xee]\x83\xbc\x06\xc6\xd1wk\x0fm$/Kzl\xa7\x07\x96\xca\xe3\x84\x9f\xad\x88\x8b\x1d\xab\x16\x8d[f\x17\xd9\x16\xf4\x8b\x80\xd2\xdd\xf8\xb2v\xc3\xfc8\x13\xaa\x0c\xdeBi+n\xf3<\xeb\x80'\xdb\xf5\xa6D\x0d\x9fZUY\x0b\xd5\x0dRH\xc5\xae\x9f\xf2/\x80\xc5\xea2P5\x12\x97.\xc1\xe1\xff\xf1#\x88Q8\x9f\xf2fVv\xe7\x0fQ\x97\xa5R\x0cMIQ\x956=\xbf\xa2K\x0c\x10\x1d\x86\x99L\xaa\xf3r\x11\x93\xe4\xea\xf6\x9b\xda\xa8]\xa7M\xb7\x9e\x02\xaes\x00\xc8\xda#\x03\xe8\xf9\xea\x19tb\x00\x94\xcb" \xbe\x94\xa7Y\xb5\x82j\xbe\x99yz\xa9\xf2J$R\xf7t\xfd\xbaN\xe6\xa8\x1d\x02n\xb1\x0d\x80D\xc1\xae\xd3#7_\xbb\x85|+\x92.\xe8~\xa5\x8b\xdd\x99\xe1\xbf'o-]\xaa{\x87\xfe\x0a\xddK\xfc\x8e\xf5&\xe4npBn3\xec1\x9e{\x93\xc1\xe4\xc9i\x1a=\xc0kN"m\xee\xabXM\xc6\xd0A\xc1+\xeaO\x12\x87^\xebE\xd8l\xf5\x98\x02\xd3\xa0\xd8U\x8a\x06\x99\x19\xa2\xa0w\xd10\x9e\xac\xccu\xee\x83\xf5\xb0b9\xcflW\xe2L\xd2\x91\x0b\x0eu(\x1b\x9a\xbf\xfd\x1aC\xf1\xcaw\xfb;\x8fa\xb8i(\x16B\x04^p*\x1c!\xd8\x8f\xe1\xbd#[-t@\x92\xd9c\x19\x0ds\xddi\xbcbG\xbc\xe0t+\xb2\xeb}\xbeA\x1b\xb5\xc0F\xc5\xa1"\xcb_N\xc1(\x92\xde\x18\xba\xd5*(\xbb\x11\x8b\x17\x93\x98\x99`\x94\#\xcfZ'\x97^\x0b\x05\x06\x937\x1e;i6\xeb\xa9\x9ea\x1d\x8f2\xda\x8e\x0c\xd6t>{\x09$\xda\x01wG\xc4;\xcd4\x8c\x99\xf5\xca\xe1%a3\xb2Y\x1b\xe2n\xd77W\xb6\x0d\xa9\x12\xda", + ["OU=Security Communication RootCA2,O=SECOM Trust Systems CO.,LTD.,C=JP"] = "0\x82\x03w0\x82\x02_\xa0\x03\x02\x01\x02\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000]1\x0b0\x09\x06\x03U\x04\x06\x13\x02JP1%0#\x06\x03U\x04\x0a\x13\x1cSECOM Trust Systems CO.,LTD.1'0%\x06\x03U\x04\x0b\x13\x1eSecurity Communication RootCA20\x1e\x17\x0d090529050039Z\x17\x0d290529050039Z0]1\x0b0\x09\x06\x03U\x04\x06\x13\x02JP1%0#\x06\x03U\x04\x0a\x13\x1cSECOM Trust Systems CO.,LTD.1'0%\x06\x03U\x04\x0b\x13\x1eSecurity Communication RootCA20\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xd0\x159R\xb1R\xb3\xba\xc5Y\x82\xc4]R\xae:Ce\x80K\xc7\xf2\x96\xbc\xdb6\x97\xd6\xa6d\x8c\xa8^\xf0\xe3\x0a\x1c\xf7\xdf\x97=K\xae\xf6]\xec!\xb5A\xab\xcd\xb9~v\x9f\xbe\xf9>64\xa0;\xc1\xf61\x11Et\x93=W\x80\xc5\xf9\x89\x99\xca\xe5\xabj\xd4\xb5\xdaA\x90\x10\xc1\xd6\xd6B\x89\xc2\xbf\xf48\x12\x95LT\x05\xf76\xe4E\x83{\x14e\xd6\xdc\x0cM\xd1\xde~\x0c\xab;\xc4\x15\xbe:V\xa6ZoviR\xa9z\xb9\xc8\xebj\x9a]R\xd0-\x0ak5\x16\x09\x10\x84\xd0j\xca:\x06\x007G\xe4~WO?\x8b\xebg\xb8\x88\xaa\xc5\xbeSU\xb2\x91\xc4}\xb9\xb0\x85\x19\x06x.\xdba\x1a\xfa\x85\xf5J\x91\xa1\xe7\x16\xd5\x8e\xa29\xdf\x94\xb8p\x1f(?\x8b\xfc@^c\x83<\x83*\x1a\x99k\xcf\xdeYj;\xfco\x16\xd7\x1f\xfdJ\x10\xebN\x82\x16:\xac'\x0cS\xf1\xad\xd5$\xb0k\x03P\xc1-<\x16\xddD4'\x1au\xfb\x02\x03\x01\x00\x01\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x0a\x85\xa9we\x05\x98|@\x81\xf8\x0f\x97,8\xf1\x0a\xec<\xcf0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00L:\xa3D\xac\xb9E\xb1\xc7\x93~\xc8\x0b\x0aB\xdfd\xea\x1c\xeeYl\x08\xba\x89_j\xcaJ\x95\x9ez\x8f\x07\xc5\xdaEr\x82q\x0e:\xd2\xcco\xa7\xb4\xa1#\xbb\xf6$\x9f\xcb\x17\xfe\x8c\xa6\xce\xc2\xd2\xdb\xcc\x8d\xfcq\xfc\x03)\xc1l]3_d\xb6e;\x89o\x18vx\xf5\xdc\xa2H\x1f\x19?\x8e\x93\xeb\xf1\xfa\x17\xee\xcdN\xe3\x04\x12U\xd6\xe5\xe4\xdd\xfb>\x05|\xe2\x1d^\xc6\xa7\xbc\x97Oh:\xf5\xe9.\x0aC\xb6\xafW\bh|\xb7\xfd\xa3\x8a\x84\xa0\xacb\xbe+\x09\x874\xf0j\x01\xbb\x9b)V<\xfe\x007\xcf#l\xf1N\xaa\xb6tF\x12l\x91\xee4\xd5\xec\x9a\x91\xe7D\xbe\x901r\xd5I\x02\xf6\x02\xe5\xf4\x1f\xeb|\xd9\x96U\xa9\xff\xec\x8a\xf9\x99G\xff5Z\x02\xaa\x04\xcb\x8a[\x87q)\x91\xbd\xa4\xb4z\x0d\xbd\x9a\xf5W#\x00\x07!\x17?J9\xd1\x05I\x0b\xa7\xb67\x81\xa5]\x8c\xaa3^\x81(|\xa7}'\xeb\x00\xae\x8d7", + ["CN=TrustCor RootCert CA-2,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA"] = "0\x82\x06/0\x82\x04\x17\xa0\x03\x02\x01\x02\x02\x08%\xa1\xdf\xca3\xcbY\x020\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\xa41\x0b0\x09\x06\x03U\x04\x06\x13\x02PA1\x0f0\x0d\x06\x03U\x04\x08\x0c\x06Panama1\x140\x12\x06\x03U\x04\x07\x0c\x0bPanama City1$0"\x06\x03U\x04\x0a\x0c\x1bTrustCor Systems S. de R.L.1'0%\x06\x03U\x04\x0b\x0c\x1eTrustCor Certificate Authority1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16TrustCor RootCert CA-20\x1e\x17\x0d160204123223Z\x17\x0d341231172639Z0\x81\xa41\x0b0\x09\x06\x03U\x04\x06\x13\x02PA1\x0f0\x0d\x06\x03U\x04\x08\x0c\x06Panama1\x140\x12\x06\x03U\x04\x07\x0c\x0bPanama City1$0"\x06\x03U\x04\x0a\x0c\x1bTrustCor Systems S. de R.L.1'0%\x06\x03U\x04\x0b\x0c\x1eTrustCor Certificate Authority1\x1f0\x1d\x06\x03U\x04\x03\x0c\x16TrustCor RootCert CA-20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xa7 n\xc2*\xa2b$\x95\x90v\xc88~\x80\xd2\xab\xc1\x9be\x05\x94\xf4\xc1\x0a\x10\xd5\x02\xac\xed\x9f\x93\xc7\x87\xc8\xb0'+B\x0c=\x0a>AZ\x9eu\xdd\x8d\xca\xe0\x9b\xech2\xa4i\x92h\x8c\x0b\x81\x0eV\xa0>\x1a\xdd,%\x14\x82/\x97\xd3dF\xf4T\xa9\xdc:T-1+\x99\x82\xf2\xd9*\xd7\xefq\x00\xb81\xa4\xbez$\x07\xc3B \xf2\x8a\xd4\x92\x04\x1beVLl\xd4\xfb\xb6aZG#\xb4\xd8i\xb4\xb7:\xd0t<\x0cu\xa1\x8cNv\xa1\xe9\xdb*\xa5;\xfa\xce\xb0\xff~j(\xfd'\x1c\xc8\xb1\xe9)\xf1Wnd\xb4\xd0\xc1\x15m\x0e\xbe.\x0eF\xc8^\xf4Q\xfe\xef\x0ec:;q\xba\xcfoY\xca\x0c\xe3\x9b]I\xb8L\xe2W\xb1\x98\x8aBW\x9cv\xef\xef\xbd\xd1h\xa8\xd2\xf4\x09\xbbw5\xbe%\x82\x08\xc4\x16,D V\xa9D\x11w\xef]\xb4\x1d\xaa^k>\x8b2\xf6\x07/W\x04\x92\xca\xf5\xfe\x9d\xc2\xe9\xe8\xb3\x8eLK\x021\xd9\xe4\xc3k0\x0a\x06\x08*\x86H\xce=\x04\x03\x030\x81\x981\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1907\x06\x03U\x04\x0b\x130(c) 2007 GeoTrust Inc. - For authorized use only1604\x06\x03U\x04\x03\x13-GeoTrust Primary Certification Authority - G20\x1e\x17\x0d071105000000Z\x17\x0d380118235959Z0\x81\x981\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1907\x06\x03U\x04\x0b\x130(c) 2007 GeoTrust Inc. - For authorized use only1604\x06\x03U\x04\x03\x13-GeoTrust Primary Certification Authority - G20v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04\x15\xb1\xe8\xfd\x03\x15C\xe5\xac\xeb\x877\x11b\xef\xd2\x836R}EW\x0bJ\x8d{T;:n_\x15\x02\xc0P\xa6\xcf%/}\xcaH\xb8\xc7Pc\x1c*!\x08|\x9a6\xd8\x0b\xfe\xd1&\xc5X10(%\xf3]]\xa3\xb8\xb6\xa5\xb4\x92\xedl,\x9f\xeb\xddC\x89\xa2\xa8\x81\x12\xd0\xcb\xba\xd0\x92\x0b\xb6\x9e\x96\xaa\x04\x0f\x8a", + ["CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US"] = "0\x82\x03\x8e0\x82\x02v\xa0\x03\x02\x01\x02\x02\x10\x03:\xf1\xe6\xa7\x11\xa9\xa0\xbb(d\xb1\x1d\x09\xfa\xe50\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000a1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cDigiCert Inc1\x190\x17\x06\x03U\x04\x0b\x13\x10www.digicert.com1 0\x1e\x06\x03U\x04\x03\x13\x17DigiCert Global Root G20\x1e\x17\x0d130801120000Z\x17\x0d380115120000Z0a1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cDigiCert Inc1\x190\x17\x06\x03U\x04\x0b\x13\x10www.digicert.com1 0\x1e\x06\x03U\x04\x03\x13\x17DigiCert Global Root G20\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xbb7\xcd4\xdc{k\xc9\xb2h\x90\xadJu\xffF\xba!\x0a\x08\x8d\xf5\x19T\xc9\xfb\x88\xdb\xf3\xae\xf2:\x89\x911\xe2\x8d\x84\x9e\xe3\x8a\xda\xda\x96>5\x13\xa5_\xf0\xf9pPpGA\x11W\x19N\xc0\x8f\xae\x06\xc4\x95\x13\x17/\x1b%\x9fu\xf2\xb1\x8e\x99\xa1o\x13\xb1Aq\xfe\x88*\xc8O\x10 U\xd7\xf3\x14E\xe5\xe0D\xf4\xea\x87\x952\x93\x0e\xfeSF\xfa,\x9d\xff\x8b"\xb9K\xd9\x09E\xa4\xde\xa4\xb8\x9aX\xdd\x1b}R\x9f\x8eYC\x88\x81\xa4\x9e&\xd5o\xad\xdd\x0d\xc67}\xed\x03\x92\x1b\xe5w_v\xee<\x8d\xc4]V[\xa2\xd9fn\xb357\xe52\xb6", + ["CN=VeriSign Class 3 Public Primary Certification Authority - G4,OU=(c) 2007 VeriSign, Inc. - For authorized use only,OU=VeriSign Trust Network,O=VeriSign, Inc.,C=US"] = "0\x82\x03\x840\x82\x03\x0a\xa0\x03\x02\x01\x02\x02\x10/\x80\xfe#\x8c\x0e"\x0fHg\x12(\x91\x87\xac\xb30\x0a\x06\x08*\x86H\xce=\x04\x03\x030\x81\xca1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x170\x15\x06\x03U\x04\x0a\x13\x0eVeriSign, Inc.1\x1f0\x1d\x06\x03U\x04\x0b\x13\x16VeriSign Trust Network1:08\x06\x03U\x04\x0b\x131(c) 2007 VeriSign, Inc. - For authorized use only1E0C\x06\x03U\x04\x03\x134\xfeg\xf4>f\xd1\xd3\xf4@\xcf^b4\x0fp\x06> \x18Z\xce\xf7r\x1b%l\x93t\x14\x93\xa3s\xb1\x0e\xaa\x87\x10#Y_ \x05\x19G\xedh\x8e\x92\x12\xca]\xfc\xd6+\xb2\x92< \xcf\xe1_\xaf \xbe\xa0v\x7fv\xe5\xec\x1a\x86a3>\xe7{\xb4?\xa0\x0f\x8e\xa2\xb9jo\xb9\x87&oAl\x88\xa6P\xfdjc\x0b\xf5\x93\x16\x1b\x19\x8f\xb2\xed\x9b\x9b\xc9\x90\xf5\x01\x0c\xdf\x19=\x0f>8#\xc9/\x8f\x0c\xd1\x02\xfe\x1bU\xd6N\xd0\x8d<\xafO\xa4\xf3\xfe\xaf*\xd3\x05\x9dy\x08\xa1\xcbW1\xb4\x9c\xc8\x90\xb2g\xf4\x18\x16\x93:\xfcG\xd8\xd1x\x961\x1f\xba+\x0c_]\x99\xadc\x89Z$ v\xd8\xdf\xfd\xabN\xa6"\xaa\x9d^\xe6'\x8a}h)\xa3\xe7\x8a\xb8\xda\x11\xbb\x17-\x99\x9d\x13$F\xf7\xc5\xe2\xd8\x9f\x8e\x7f\xc7\x8ftmZ\xb2\xe8r\xf5\xac\xee$\x10\xad/\x14\xda\xff-\x9aFqG\xbeB\xdf\xbb\x01\xdb\xf4\x7f\xd3(\x8f1Y[\xd3\xc9\x02\xa6\xb4R\xcan\x97\xfbC\xc5\x08&o\x8a\xf4\xbb\xfd\x9f(\xaa\x0d\xd5E\xf3\x13:\x1d\xd8\xc0x\x8fAg<\x1e\x94d\xae{\x0b\xc5\xe8\xd9\x01\x889\x1a\x97\x86dA\xd5;\x87\x0cn\xfa\x0f\xc6\xbdH\x14\xbf9M\xd4\x9eA\xb6\x8f\x96\x1dc\x96\x93\xd9\x95\x06x1h\x9e7\x06;\x80\x89Ea9#\xc7\x1bD\xa3\x15\xe5\x1c\xf8\x920\xbb\x02\x03\x01\x00\x01\xa3\x81\xef0\x81\xec0\x12\x06\x03U\x1d\x13\x01\x01\xff\x04\x080\x06\x01\x01\xff\x02\x01\x010\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14e\xcd\xeb\xab5\x1e\x00>~\xd5t\xc0\x1c\xb4sG\x0e\x1ad/0\x81\xa6\x06\x03U\x1d \x04\x81\x9e0\x81\x9b0\x81\x98\x06\x04U\x1d \x000\x81\x8f0/\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16#http://www.firmaprofesional.com/cps0\\x06\x08+\x06\x01\x05\x05\x07\x02\x020P\x1eN\x00P\x00a\x00s\x00e\x00o\x00 \x00d\x00e\x00 \x00l\x00a\x00 \x00B\x00o\x00n\x00a\x00n\x00o\x00v\x00a\x00 \x004\x007\x00 \x00B\x00a\x00r\x00c\x00e\x00l\x00o\x00n\x00a\x00 \x000\x008\x000\x001\x0070\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00\x17}\xa0\xf9\xb4\xdd\xc5\xc5\xeb\xadK$\xb5\xa1\x02\xab\xdd\xa5\x88J\xb2\x0fUK+W\x8c;\xe51\xdd\xfe\xc42\xf1\xe7[d\x9662\x18\xec\xa52w\xd7\xe3D\xb6\xc0\x11*\x80\xb9=jn|\x9b\xd3\xad\xfc\xc3\xd6\xa3\xe6d)|\xd1\xe18\x1e\x82+\xff'e\xaf\xfb\x16\x15\xc4.q\x84\xe5\xb5\xff\xfa\xa4G\xbdd2\xbb\xf6%\x84\xa2'B\xf5 \xb0\xc2\x13\x10\x11\xcd\x10\x15\xbaB\x90*\xd2D\xe1\x96&\xeb1H\x12\xfd*\xda\xc9\x06\xcft\x1e\xa9K\xd5\x87(\xf9y4\x92>.D\xe8\xf6\x8fO\x8f5?%\xb39\xdcc*\x90k _\xc4R\x12N\x97,*\xac\x9d\x97\xdeH\xf2\xa3f\xdb\xc2\xd2\x83\x95\xa6f\xa7\x9e%\x0f\xe9\x0b3\x91e\x0aZ\xc3\xd9T\x12\xdd\xaf\xc3N\x0e\x1f&^\x0d\xdc\xb3\x8d\xec\xd5\x81p\xde\xd2O$\x05\xf3lN\xf5LIf\x8d\xd1\xff\xd2\x0b%AH\xfeQ\x84\xc6B\xaf\x80\x04\xcf\xd0~dI\xe4\xf2\xdf\xa2\xec\xb1L\xc0*\x1d\xe7\xb4\xb1e\xa2\xc4\xbc\xf1\x98\xf4\xaap\x07c\xb4\xb8\xda;L\xfa@"0[\x11\xa6\xf0\x05\x0e\xc6\x02\x03H\xab\x86\x9b\x85\xdd\xdb\xdd\xea\xa2v\x80s}\xf5\x9c\x04\xc4E\x8d\xe7\xb9\x1c\x8b\x9e\xea\xd7u\xd1r\xb1\xdeuD\xe7B}\xe2Wk}\xdc\x99\xbc=\x83(\xea\x80\x93\x8d\xc5Le\xc1p\x81\xb88\xfcC1\xb2\xf6\x034G\xb2\xac\xfb"\x06\xcb\x1e\xdd\x17G\x1c_f\xb9\xd3\x1a\xa2\xda\x11\xb1\xa4\xbc#\xc9\xe4\xbe\x87\xff\xb9\x94\xb6\xf8] J\xd4_\xe7\xbdh{e\xf2\x15\x1e\xd2:\xa9-\xe9\xd8k$\xac\x97XDG\xadY\x18\xf1!ep\xde\xce4`\xa8@\xf1\xf3<\xa4\xc3(#\x8c\xfe'3C@\xa0\x17<\xeb\xea;\xb0r\xa6\xa3\xb9JK^\x16H\xf4\xb2\xbc\xc8\x8c\x92\xc5\x9d\x9f\xacr6\xbc4\x804k\xa9\x8b\x92\xc0\xb8\x17\xed\xecvS\xf5$\x01\x8c\xb3"\xe8K|U\xc6\x9d\xfa\xa3\x14\xbbe\x85nnO\x12~\x0a<\x9d\x95", + ["CN=DST Root CA X3,O=Digital Signature Trust Co."] = "0\x82\x03J0\x82\x022\xa0\x03\x02\x01\x02\x02\x10D\xaf\xb0\x80\xd6\xa3'\xba\x8909\x86.\xf8@k0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000?1$0"\x06\x03U\x04\x0a\x13\x1bDigital Signature Trust Co.1\x170\x15\x06\x03U\x04\x03\x13\x0eDST Root CA X30\x1e\x17\x0d000930211219Z\x17\x0d210930140115Z0?1$0"\x06\x03U\x04\x0a\x13\x1bDigital Signature Trust Co.1\x170\x15\x06\x03U\x04\x03\x13\x0eDST Root CA X30\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xdf\xaf\xe9\x97P\x08\x83W\xb4\xccbe\xf6\x90\x82\xec\xc7\xd3,k0\xca[\xec\xd9\xc3}\xc7@\xc1\x18\x14\x8b\xe0\xe83vI*\xe3?!I\x93\xacN\x0e\xaf>H\xcbe\xee\xfc\xd3!\x0fe\xd2*\xd92\x8f\x8c\xe5\xf7w\xb0\x12{\xb5\x95\xc0\x89\xa3\xa9\xba\xeds.z\x0c\x062\x83\xa2~\x8a\x140\xcd\x11\xa0\xe1*8\xb9y\x0a1\xfdP\xbd\x80e\xdf\xb7Qc\x83\xc8\xe2\x88a\xeaKa\x81\xecRk\xb9\xa2\xe2K\x1a(\x9fH\xa3\x9e\x0c\xda\x09\x8e>\x17.\x1e\xdd \xdf[\xc6*\x8a\xab.\xbdp\xad\xc5\x0b\x1a%\x90tr\xc5{j\xab4\xd60\x89\xff\xe5h\x13{T\x0b\xc8\xd6\xae\xecZ\x9c\x92\x1e=d\xb3\x8c\xc6\xdf\xbf\xc9Ap\xec\x16r\xd5&\xec8U9C\xd0\xfc\xfd\x18\@\xf1\x97\xeb\xd5\x9a\x9b\x8d\x1d\xba\xda%\xb9\xc6\xd8\xdf\xc1\x15\x02:\xab\xdan\xf1>.\xf5\\x08\x9c<\xd6\x83i\xe4\x10\x9b\x19*\xb6)W\xe3\xe5=\x9b\x9f\xf0\x02]\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xc4\xa7\xb1\xa4{,q\xfa\xdb\xe1K\x90u\xff\xc4\x15`\x85\x89\x100\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xa3\x1a,\x9b\x17\x00\\xa9\x1e\xee(f7:\xbf\x83\xc7?K\xc3\x09\xa0\x95 ]\xe3\xd9YD\xd2>\x0d>\xbd\x8aK\xa0t\x1f\xce\x10\x82\x9ct\x1a\x1d~\x98\x1a\xdd\xcb\x13K\xb3 D\xe4\x91\xe9\xcc\xfc}\xa5\xdbj\xe5\xfe\xe6\xfd\xe0N\xdd\xb7\x00:\xb5pI\xaf\xf2\xe5\xeb\x02\xf1\xd1\x02\x8b\x19\xcb\x94:^H\xc4\x18\x1eX\x19_\x1e\x02Z\xf0\x0c\xf1\xb1\xad\xa9\xdcY\x86\x8bn\xe9\x91\xf5\x86\xca\xfa\xb9f3\xaaY[\xce\xe2\xa7\x16sG\xcb+\xcc\x99\xb07H\xcf\xe3VK\xf5\xcf\x0f\x0cr2\x87\xc6\xf0D\xbbSrmC\xf5&H\x9aRg\xb7X\xab\xfegvqx\xdb\x0d\xa2V\x14\x139$1\x85\xa2\xa8\x02Z0G\xe1\xddP\x07\xbc\x02\x09\x90\x00\xebdc`\x9b\x16\xbc\x88\xc9\x12\xe6\xd2}\x91\x8b\xf9=2\x8de\xb4\xe9|\xb1Wv\xea\xc5\xb6(9\xbf\x15e\x1c\xc8\xf6w\x96j\x0a\x8dw\x0b\xd8\x91\x0b\x04\x8e\x07\xdb)\xb6\x0a\xee\x9d\x8255\x10", + ["CN=Entrust Root Certification Authority - EC1,OU=(c) 2012 Entrust, Inc. - for authorized use only,OU=See www.entrust.net/legal-terms,O=Entrust, Inc.,C=US"] = "0\x82\x02\xf90\x82\x02\x80\xa0\x03\x02\x01\x02\x02\x0d\x00\xa6\x8by)\x00\x00\x00\x00P\xd0\x91\xf90\x0a\x06\x08*\x86H\xce=\x04\x03\x030\x81\xbf1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dEntrust, Inc.1(0&\x06\x03U\x04\x0b\x13\x1fSee www.entrust.net/legal-terms1907\x06\x03U\x04\x0b\x130(c) 2012 Entrust, Inc. - for authorized use only1301\x06\x03U\x04\x03\x13*Entrust Root Certification Authority - EC10\x1e\x17\x0d121218152536Z\x17\x0d371218155536Z0\x81\xbf1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dEntrust, Inc.1(0&\x06\x03U\x04\x0b\x13\x1fSee www.entrust.net/legal-terms1907\x06\x03U\x04\x0b\x130(c) 2012 Entrust, Inc. - for authorized use only1301\x06\x03U\x04\x03\x13*Entrust Root Certification Authority - EC10v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04\x84\x13\xc9\xd0\xbamA{\xe2l\xd0\xebU_f\x02\x1a$\xf4[\x89iG\xe3\xb8\xc2}\xf1\xf2\x02\xc5\x9f\xa0\xf6[\xd5\x8b\x06\x19\x86OS\x10m\x07$'\xa1\xa0\xf8\xd5G\x19aL}\xca\x93'\xeat\x0c\xefo\x96\x09\xfec\xecp]6\xadgw\xae\xc9\x9d|UD:\xa2cQ\x1f\xf5\xe3b\xd4\xa9G\x07>\xcc \xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb7c\xe7\x1a\xdd\x8d\xe9\x08\xa6U\x83\xa4\xe0jPAe\x11BI0\x0a\x06\x08*\x86H\xce=\x04\x03\x03\x03g\x000d\x020ay\xd8\xe5BG\xdf\x1c\xaeS\x99\x17\xb6o\x1c}\xe1\xbf\x11\x94\xd1\x03\x88u\xe4\x8d\x89\xa4\x8awF\xdema\xef\x02\xf5\xfb\xb5\xdf\xcc\xfeN\xff\xfe\xa9\xe6\xa7\x020[\x99\xd7\x857\x06\xb5{\x08\xfd\xeb'\x8bJ\x94\xf9\xe1\xfa\xa7\x8e&\x08\xe8|\x92hms\xd8o&\xac!\x02\xb8\x99\xb7&A[%`\xae\xd0H\x1a\xee\x06", + ["CN=GeoTrust Primary Certification Authority,O=GeoTrust Inc.,C=US"] = "0\x82\x03|0\x82\x02d\xa0\x03\x02\x01\x02\x02\x10\x18\xac\xb5j\xfdi\xb6\x15:cl\xaf\xda\xfa\xc4\xa10\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000X1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.110/\x06\x03U\x04\x03\x13(GeoTrust Primary Certification Authority0\x1e\x17\x0d061127000000Z\x17\x0d360716235959Z0X1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.110/\x06\x03U\x04\x03\x13(GeoTrust Primary Certification Authority0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xbe\xb8\x15{\xff\xd4|}g\xad\x83d{\xc8BS-\xdf\xf6\x84\x08 a\xd6\x01Yj\x9cD\x11\xaf\xefv\xfd\x95~\xcea0\xbbz\x83_\x02\xbd\x01f\xca\xee\x15\x8do\xa10\x9c\xbd\xa1\x85\x9e\x94:\xf3V\x88\x001\xcf\xd8\xeej\x96\x02\xd9\xed\x03\x8c\xfbum\xe7\xea\xb8U\x16\x05\x16\x9a\xf4\xe0^\xb1\x88\xc0d\x85\\x15M\x88\xc7\xb7\xba\xe0u\xe9\xad\x05=\x9d\xc7\x89H\xe0\xbb(\xc8\x03\xe10\x93d^R\xc0Yp"5W\x88\x8a\xf1\x95\x0a\x83\xd7\xbc1s\x014\xed\xefFq\xe0k\x02\xa85rk\x97\x9bf\xe0\xcb\x1cy_\xd8\x1a\x04h\x1eG\x02\xe6\x9d`\xe26\x97\x01\xdf\xce5\x92\xdf\xbeg\xc7mwY;\x8f\x9d\xd6\x90\x15\x94\xbcB4\x10\xc19\xf9\xb1'>~\xd6\x8au\xc5\xb2\xaf\x96\xd3\xa2\xde\x9b\xe4\x98\xbe}\xe1\xe9\x81\xad\xb6o\xfc\xd7\x0e\xda\xe04\xb0\x0d\x1aw\xe7\xe3\x08\x98\xefX\xfa\x9c\x84\xb76\xaf\xc2\xdf\xac\xd2\xf4\x10\x06pq5\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14,\xd5PA\x97\x15\x8b\xf0\x8f6a[J\xfbk\xd9\x99\xc93\x920\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00Zp\x7f,\xdd\xb74O\xf5\x86Q\xa9&\xbeK\xb8\xaa\xf1q\x0d\xdca\xc7\xa0\xea4\x1ezw\x0f\x045\xe8'\x8fl\x90\xbf\x91\x16$F>JN\xce+\x16\xd5\x0bR\x1d\xfc\x1fg\xa2\x02E1O\xce\xf3\xfa\x03\xa7y\x9dSj\xd9\xdac:\xf8\x80\xd7\xd3\x99\xe1\xa5\xe1\xbe\xd4Uq\x985:\xbe\x93\xea\xae\xadB\xb2\x90o\xe0\xfc!M5c3\x89I\xd6\x9bN\xca\xc7\xe7N\x09\x00\xf7\xda\xc7\xef\x99b\x99w\xb6\x95"^\x8a\xa0\xab\xf4\xb8x\x98\xca8\x19\x99\xc9r\x9ex\xcdK\xac\xaf\x19\xa0s\x12-\xfc\xc2A\xba\x81\x91\xda\x16Z1\xb7\xf9\xb4q\x80\x12H\x99rsZYS\xc1cR3\xed\xa7\xc9\xd29\x02p\xfa\xe0\xb1Bf)\xaa\x9bQ\xed0T"\x14_\xd9\xab\x1d\xc1\xe4\x94\xf0\xf8\xf5+\xf7\xea\xcaxF\xd6\xb8\x91\xfd\xa6\x0d+\x1a\x14\x01>\x80\xf0B\xa0\x95\x07^m\xcd\xccK\xa4E\x8d\xab\x12\xe8\xb3\xdeZ\xe5\xa0|\xe8\x0f"\x1dZ\xe9Y", + ["CN=Amazon Root CA 1,O=Amazon,C=US"] = "0\x82\x03A0\x82\x02)\xa0\x03\x02\x01\x02\x02\x13\x06l\x9f\xcf\x99\xbf\x8c\x0a9\xe2\xf0x\x8aC\xe6\x966[\xca0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00091\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Amazon1\x190\x17\x06\x03U\x04\x03\x13\x10Amazon Root CA 10\x1e\x17\x0d150526000000Z\x17\x0d380117000000Z091\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0f0\x0d\x06\x03U\x04\x0a\x13\x06Amazon1\x190\x17\x06\x03U\x04\x03\x13\x10Amazon Root CA 10\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xb2x\x80q\xcax\xd5\xe3q\xafG\x80Pt}n\xd8\xd7\x88v\xf4\x99h\xf7X!`\xf9t\x84\x01/\xac\x02-\x86\xd3\xa0CzN\xb2\xa4\xd06\xba\x01\xbe\x8d\xdbH\xc8\x07\x176L\xf4\xee\x88#\xc7>\xeb7\xf5\xb5\x19\xf8Ih\xb0\xde\xd7\xb9v8\x1da\x9e\xa4\xfe\x826\xa5\xe5JV\xe4E\xe1\xf9\xfd\xb4\x16\xfat\xda\x9c\x9b59/\xfa\xb0 P\x06lz\xd0\x80\xb2\xa6\xf9\xaf\xecG\x19\x8fP8\x07\xdc\xa2\x879X\xf8\xba\xd5\xa9\xf9Hg0\x96\xee\x94x^o\x89\xa3Q\xc00\x86f\xa1Ef\xbaT\xeb\xa3\xc3\x91\xf9H\xdc\xff\xd1\xe80-}-tp5\xd7\x88$\xf7\x9e\xc4Yn\xbbs\x87\x17\xf22F(\xb8C\xfa\xb7\x1d\xaa\xca\xb4\xf2\x9f$\x0e-K\xf7q\^i\xff\xea\x95\x02\xcb8\x8a\xaeP8o\xdb\xfb-b\x1b\xc5\xc7\x1eT\xe1w\xe0g\xc8\x0f\x9c\x87#\xd6?@ \x7f \x80\xc4\x80L>;$&\x8e\x04\xael\x9a\xc8\xaa\x0d\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x84\x18\xcc\x854\xec\xbc\x0c\x94\x94.\x08Y\x9c\xc7\xb2\x10N\x0a\x080\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x98\xf27ZA\x90\xa1\x1a\xc5vQ( 6#\x0e\xae\xe6(\xbb\xaa\xf8\x94\xaeH\xa40\x7f\x1b\xfc$\x8dK\xb4\xc8\xa1\x97\xf6\xb6\xf1zp\xc8S\x93\xcc\x08(\xe3\x98%\xcf#\xa4\xf9\xde!\xd3|\x85\x09\xadN\x9au:\xc2\x0bj\x89xvDG\x18el\x8dA\x8e;\x7f\x9a\xcb\xf4\xb5\xa7P\xd7\x05,7\xe8\x03K\xad\xe9a\xa0\x02n\xf5\xf2\xf0\xc5\xb2\xed[\xb7\xdc\xfa\x94\w\x9e\x13\xa5\x7fR\xad\x95\xf2\xf8\x93;\xde\x8b\[\xcaZR[`\xaf\x14\xf7K\xef\xa3\xfb\x9f@\x95m1T\xfcB\xd3\xc7F\x1f#\xad\xd9\x0fHp\x9a\xd9uxq\xd1rC4unWY\xc2\x02\&`)\xcf#\x19\x16\x8e\x88C\xa5\xd4\xe4\xcb\x08\xfb#\x11C\xe8C)rb\xa1\xa9]^\x08\xd4\x90\xae\xb8\xd8\xce\x14\xc2\xd0U\xf2\x86\xf6\xc4\x93Cwfa\xc0\xb9\xe8A\xd7\x97x`\x03nJr\xae\xa5\xd1}\xba\x10\x9e\x86l\x1b\x8a\xb9Y3\xf8\xeb\xc4\x90\xbe\xf1\xb9", + ["CN=IdenTrust Public Sector Root CA 1,O=IdenTrust,C=US"] = "0\x82\x05f0\x82\x03N\xa0\x03\x02\x01\x02\x02\x10\x0a\x01B\x80\x00\x00\x01E#\xcfF|\x00\x00\x00\x020\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000M1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x120\x10\x06\x03U\x04\x0a\x13\x09IdenTrust1*0(\x06\x03U\x04\x03\x13!IdenTrust Public Sector Root CA 10\x1e\x17\x0d140116175332Z\x17\x0d340116175332Z0M1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x120\x10\x06\x03U\x04\x0a\x13\x09IdenTrust1*0(\x06\x03U\x04\x03\x13!IdenTrust Public Sector Root CA 10\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xb6"\x94\xfc\xa4H\xaf\xe8Gk\x0a\xfb'v\xe4\xf2?\x8a;zJ,1*\x8c\x8d\xb0\xa9\xc31k\xa8wv\x84&\xb6\xac\x81B\x0d\x08\xebUX\xbbz\xf8\xbce}\xf2\xa0m\x8b\xa8G\xe9bv\x1e\x11\xee\x08\x14\xd1\xb2D\x16\xf4\xea\xd0\xfa\x1e/^\xdb\xcbsA\xae\xbc\x00\xb0J+@\xb2\xac\xe1;K\xc2-\x9d\xe4\xa1\x9b\xec\x1a:\x1e\xf0\x08\xb3\xd0\xe4$5\x07\x9f\x9c\xb4\xc9Rm\xdb\x07\xca\x8f\xb5[\xf0\x83\xf3O\xc7-\xa5\xc8\xad\xcb\x95 \xa41(WXZ\xe4\x8d\x1b\x9a\xab\x9e\x0d\x0c\xf2\x0a39"9\x0a\x97.\xf3Sw\xb9DE\xfd\x84\xcb6 \x81Y-\x9aomHHa\xcaL\xdfS\xd1\xafR\xbcD\x9f\xab/k\x83r\xefu\x80\xda\x063\x1b]\xc8\xdac\xc6M\xcd\xacf1\xcd\xd1\xde>\x87\x106\xe1\xb9\xa4z\xef`P\xb2\xcb\xca\xa6V\xe07\xaf\xab4\x139%\xe89f\xe4\x98z\xaa\x12\x98\x9cYf\x86>\xad\xf1\xb0\xca>\x06\x0f{\xf0\x11K7\xa0Dm{\xcb\xa8\x8cq\xf4\xd5\xb5\x916\xcc\xf0\x15\xc6+\xdeQ\x17\xb1\x97LP=\xb1\x95Y|\x05}-!\xd5\x00\xbf\x01g\xa2^{\xa6\\xf2\xf7"\xf1\x90\x0d\x93\xdb\xaaDQf\xcc}v\x03\xebj\xa8*8\x19\x97v\x0dk\x8aa\xf9\xbc\xf6\xeev\xfdp+\xdd)<\xf8\x0a\x1e[B\x1c\x8bV/U\x1b\x1c\xa1.\xb5\xc7\x16\xe6\xf8\xaa<\x92\x8ei\xb6\x01\xc1\xb5\x86\x9d\x89\x0f\x0b8\x94T\xe8\xea\xdc\x9e=%\xbcS&\xed\xd5\xab9\xaa\xc5@LT\xab\xb2\xb4\xd9\xd9\xf8\xd7r\xdb\x1c\xbcm\xbde_\xef\x885*f/\xee\xf6\xb3e\xf03\x8d|\x98AiF\x0fC\x1ci\xfa\x9b\xb5\xd0aj\xcd\xcaK\xd9L\x90F\xab\x15Y\xa1GT).\x83(_\x1c\xc2\xa2\xabr\x17\x00\x06\x8eE\xec\x8b\xe23=\x7f\xda\x19D\xe4br\xc3\xdf"\xc6\xf2V\xd4\xdd_\x95r\xedm_\xf7H\x03[\xfd\xc5*\xa0\xf6s#\x84\x10\x1b\x01\xe7\x02\x03\x01\x00\x01\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xe3q\xe0\x9e\xd8\xa7B\xd9\xdbq\x91k\x94\x93\xeb\xc3\xa3\xd1\x14\xa30\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00G\xfa\xdd\x0a\xb0\x11\x918\xadM]\xf7\xe5\x0e\x97T\x19\x82H\x87T\x8c\xaad\x99\xd8Z\xfe\x88\x01\xc5X\xa5\x99\xb1#T#\xb7j\x1d W\xe5\x01bA\x17\xd3\x09\xdbu\xcbnT\x90u\xfe\x1a\x9f\x81\x0a\xc2\xdd\xd7\xf7\x09\xd0[r\x15\xe4\x1e\x09j=3\xf3!\x9a\xe6\x15~\xadQ\xd5\x0d\x10\xed}B\xc0\x8f\xee\xc0\x9a\x08\xd5A\xd6\\x0e!in\x80a\x0e\x15\xc0\xb8\xcf\xc5I\x12R\xcc\xbe:\xcc\xd4.8\x05\xde5\xfd\x1fo\xb8\x80h\x98=M\xa0\xca@e\xd2s|\xf5\x8b\xd9\x0a\x95?\xd8?#m\x1a\xd1*$\x19\xd9\x85\xb3\x17\xefxn\xa9X\xd1#\xd3\xc7\x13\xedr%\x7f]\xb1sp\xd0\x7f\x06\x97\x09\x84)\x80a\x1d\xfa^\xffs\xac\xa0\xe3\x89\xb8\x1cq\x15\xc6\xde1\x7f\x12\xdc\xe1m\x9b\xaf\xe7\xe8\x9fuxL\xabF;\x9a\xce\xbf\x05\x18]M\x15<\x16\x9a\x19P\x04\x9a\xb2\x9aoe\x8bR_\x01\xef\x9c", + ["CN=SSL.com EV Root Certification Authority RSA R2,O=SSL Corporation,L=Houston,ST=Texas,C=US"] = "0\x82\x05\xeb0\x82\x03\xd3\xa0\x03\x02\x01\x02\x02\x08V\xb6)\xcd4\xbcx\xf60\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\x821\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0e0\x0c\x06\x03U\x04\x08\x0c\x05Texas1\x100\x0e\x06\x03U\x04\x07\x0c\x07Houston1\x180\x16\x06\x03U\x04\x0a\x0c\x0fSSL Corporation1705\x06\x03U\x04\x03\x0c.SSL.com EV Root Certification Authority RSA R20\x1e\x17\x0d170531181437Z\x17\x0d420530181437Z0\x81\x821\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x0e0\x0c\x06\x03U\x04\x08\x0c\x05Texas1\x100\x0e\x06\x03U\x04\x07\x0c\x07Houston1\x180\x16\x06\x03U\x04\x0a\x0c\x0fSSL Corporation1705\x06\x03U\x04\x03\x0c.SSL.com EV Root Certification Authority RSA R20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\x8f6e@\xe1\xd6M\xc0\xd7\xb4\xe9F\xdak\xea3G\xcdL\xf9}}\xbe\xbd-=\xf0\xdbx\xe1\x86\xa5\xd9\xba\x09Wh\xedW>\xa0\xd0\x08A\x83\xe7(A$\x1f\xe3r\x15\xd0\x01\x1a\xfb^p#\xb2\xcb\x9f9\xe3\xcf\xc5N\xc6\x92m&\xc6{\xbb\xb3\xda'\x9d\x0a\x86\xe9\x817\x05\xfe\xf0qq\xec\xc3\x1c\xe9c\xa2\x17\x14\x9d\xef\x1bg\xd3\x85U\x02\x02\xd6I\xc9\xccZ\xe1\xb1\xf7o2\x9f\xc9\xd4;\x88A\xa8\x9c\xbd\xcb\xab\xdbm{\x09\x1f\xa2Lr\x90\xda+\x08\xfc\xcf\x07\xa2\xa3\x05&\x11i\x97\xea\x85\xb7\x0f\x96\x0bK\xc8@\xe1P\xba.\x8a\xcb\xf7\x0f\x9a"\xe7\x7f\x9a7\x13\xcd\xf2M\x13k!\xd1\xc0\xcc"\xf2\xa1F\xf6Di\x9c\xcaa5\x07\x00o\xd6a\x08\x11\xea\xba\xb8\xf6\xe9\xb3`\xe5M\xb9\xec\x9f\x14f\xc9WX\xdb\xcd\x87i\xf8\x8a\x86\x12\x03G\xbff\x13v\xacw}4$\x85\x83\xcd\xd7\xaa\x9c\x90\x1a\x9f!,\x7fx\xb7d\xb8\xd8\xe8\xa6\xf4x\xb3U\xcb\x84\xd22\xc4x\xae\xa3\x8fa\xdd\xce\x08S\xad\xec\x88\xfc\x15\xe4\x9a\x0d\xe6\x9f\x1aw\xceL\x8f\xb8\x14\x15=b\x9c\x868\x06\x00f\x12\xe4YvZS\xc0\x02\x98\xa2\x10+hD{\x8ey\xce3Jv\xaa[\x81\x16\x1b\xb5\x8a\xd8\xd0\x00{^b\xb4\x09\xd6\x86c\x0e\xa6\x05\x95I\xba(\x8b\x88\x93\xb24\x1c\xd8\xa4Un\xb7\x1c\xd0\xde\x99U;#\xf4"\xe0\xf9)f&\xec Pw\xdbJ\x0b\x8f\xbe\xe5\x02`pA^\xd4\xaeP9"\x14&\xcb\xb2;stUG\x07y\x819\xa80\x13D\xe5\x04\x8a\xae\x96\x13%B\x0f\xb9S\xc4\x9b\xfc\xcd\xe4\x1c\xde<\xfa\xab\xd6\x06J\x1fg\xa6\x980\x1c\xdd,\xdb\xdc\x18\x95Wf\xc6\xff\\x8bV\xf5w\x02\x03\x01\x00\x01\xa3c0a0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xf9`\xbb\xd4\xe3\xd54\xf6\xb8\xf5\x06\x80%\xa7s\xdbFi\xa8\x9e0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xf9`\xbb\xd4\xe3\xd54\xf6\xb8\xf5\x06\x80%\xa7s\xdbFi\xa8\x9e0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00V\xb3\x8e\xcb\x0a\x9dI\x8e\xbf\xa4\xc4\x91\xbbf\x17\x05Q\x98u\xfb\xe5P,z\x9e\xf1\x14\xfa\xab\xd3\x8a>\xff\x91)\x8fc\x8b\xd8\xb4\xa9T\x01\x0d\xbe\x93\x86/\xf9Jm\xc7^\xf5W\xf9\xcaU\x1c\x12\xbeG\x0f6\xc5\xdfj\xb7\xdbu\xc2G%\x7f\xb9\xf1c\xf8h-U\x04\xd1\xf2\x8d\xb0\xa4\xcf\xbc<^\x1fx\xe7\xa5\xa0 p\xb0\x04\xc5\xb7\xf7r\xa7\xde"\x0d\xbd3%F\x8cd\x92&\xe3>.c\x96\xda\x9b\x8c=\xf8\x18\x09\xd7\x03\xcc}\x86\x82\xe0\xca\x04\x07QP\xd7\xff\x92\xd5\x0c\xef\xda\x86\x9f\x99\xd7\xeb\xb7\xafh\xe29&\x94\xbah\xb7\xbf\x83\xd3\xeazg=bg\xae%\xe5r\xe8\xe2\xe4\xec\xae\x12\xf6K+<\x9f\xe9\xb0@\xf38T\xb3\xfd\xb7h\xc8\xda\xc6\x8fQ<\xb2\xfb\x91\xdc\x1c\xe7\x9b\x9d\xe1\xb7\x0dr\x8f\xe2\xa4\xc4\xa9x\xf9\xeb\x14\xac\xc6C\x05\xc2e9(\x18\x02\xc3\x82\xb2\x9d\x05\xbee\xed\x96_et<\xfb\x095.{\x9c\x13\xfd\x1b\x0f]\xc7m\x81:V\x0f\xcc;\xe1\xaf\x02/"\xacF\xcaF<\xa0\x1cL\xd6D\xb4^.\\x15f\x09\xe1&)\xfe\xc6Ra\xba\xb1s\xff\xc3\x0c\x9c\xe5lj\x94?\x14\xca@\x16\x95\x84\xf3Y\xa9\xac_La\x93m\xd1;\xcc\xa2\x95\x0c"\xa6ggD.\xb9\xd9\xd2\x8aA\xb3f\x0bZ\xfb}#\xa5\xf2\x1a\xb0\xff\xde\x9b\x83\x94.\xd1?\xdf\x92\xb7\x91\xaf\x05;e\xc7\xa0l\xb1\xcdb\x12\xc3\x90\x1b\xe3%\xce4\xbcowv\xb1\x10\xc3\xf7\x05\x1a\xc0\xd6\xaftbH\x17w\x92i\x90a\x1c\xde\x95\x80tT\x8f\x18\x1c\xc3\xf3\x03\xd0\xbf\xa4Cu\x86S\x18z\x0a.\x09\x1c6\x9f\x91\xfd\x82\x8a"K\xd1\x0eP%\xdd\xcb\x03\x0c\x17\xc9\x83\x00\x08N5M\x8a\x8b\xed\xf0\x02\x94f,D\x7f\xcb\x95'\x96\x17\xad\x090\xac\xb6q\x17n\x8b\x17\xf6\x1c\x09\xd4-;\x98\xa5q\xd3T\x13\xd9`\xf3\xf5KfO\xfa\xf1\xee \x12\x8d\xb4\xacW\xb1Ec\xa1\xacv\xa9\xc2\xfb", + ["CN=DigiCert Global Root G3,OU=www.digicert.com,O=DigiCert Inc,C=US"] = "0\x82\x02?0\x82\x01\xc5\xa0\x03\x02\x01\x02\x02\x10\x05UV\xbc\xf2^\xa455\xc3\xa4\x0f\xd5\xabEr0\x0a\x06\x08*\x86H\xce=\x04\x03\x030a1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cDigiCert Inc1\x190\x17\x06\x03U\x04\x0b\x13\x10www.digicert.com1 0\x1e\x06\x03U\x04\x03\x13\x17DigiCert Global Root G30\x1e\x17\x0d130801120000Z\x17\x0d380115120000Z0a1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cDigiCert Inc1\x190\x17\x06\x03U\x04\x0b\x13\x10www.digicert.com1 0\x1e\x06\x03U\x04\x03\x13\x17DigiCert Global Root G30v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04\xdd\xa7\xd9\xbb\x8a\xb8\x0b\xfb\x0b\x7f!\xd2\xf0\xbe\xbes\xf33]\x1a\xbc4\xea\xde\xc6\x9b\xbc\xd0\x95\xf6\xf0\xcc\xd0\x0b\xbaa[QF~\x9e-\x9f\xee\x8ec\x0c\x17\xec\x07p\xf5\xcf\x84.@\x83\x9c\xe8?Am;\xad\xd3\xa4\x14Y6x\x9d\x03C\xee\x10\x13lr\xde\xae\x88\xa7\xa1k\xb5C\xceg\xdc#\xff\x03\x1c\xa3\xe2>\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb3\xdbH\xa4\xf9\xa1\xc5\xd8\xae6A\xcc\x11cib)\xbcK\xc60\x0a\x06\x08*\x86H\xce=\x04\x03\x03\x03h\x000e\x021\x00\xad\xbc\xf2l?\x12J\xd1-9\xc3\x0a\x09\x97s\xf4\x886\x8c\x88'\xbb\xe6\x88\x8dP\x85\xa7c\xf9\x9e2\xdef\x93\x0f\xf1\xcc\xb1\x09\x8f\xddl\xab\xfak\x7f\xa0\x0209f[\xc2d\x8d\xb8\x9eP\xdc\xa8\xd5I\xa2\xed\xc7\xdc\xd1I\x7f\x17\x01\xb8\xc8\x86\x8fN\x8c\x88+\xa8\x9a\xa9\x8a\xc5\xd1\x00\xbd\xf8T\xe2\x9a\xe5[|\xb3'\x17", + ["CN=GeoTrust Universal CA 2,O=GeoTrust Inc.,C=US"] = "0\x82\x05l0\x82\x03T\xa0\x03\x02\x01\x02\x02\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000G1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1 0\x1e\x06\x03U\x04\x03\x13\x17GeoTrust Universal CA 20\x1e\x17\x0d040304050000Z\x17\x0d290304050000Z0G1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1 0\x1e\x06\x03U\x04\x03\x13\x17GeoTrust Universal CA 20\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xb3TR\xc1\xc9>\xf2\xd9\xdc\xb1S\x1aY)\xe7\xb1\xc3E(\xe5\xd7\xd1\xed\xc5\xc5K\xa1\xaat{W\xafJ&\xfc\xd8\xf5^\xa7n\x19\xdbt\x0cO5[2\x0b\x01\xe3\xdb\xebzw5\xea\xaaZ\xe0\xd6\xe8\xa1W\x94\xf0\x90\xa3tV\x94D0\x03\x1e\N+\x85&t\x82z\x0cv\xa0oM\xceA-\xa0\x15\x06\x14_\xb7B\xcd{\x8fXa4\xdc*\x08\xf9.\xc3\x01\xa6"D\x1cL\x07\x82\xe6[\xce\xd0J|\x04\xd3\x19s'\xf0\xaa\x98\x7f.\xafN\xeb\x87\x1e$wj]\xb6\xe8[E\xba\xdc\xc3\xa1\x05oV\x8e\x8f\x10&\xa5I\xc3.\xd7A\x87"\xe0O\x86\xca`\xb5\xea\xa1c\xc0\x01\x97\x10y\xbd\x00<\x12m+\x15\xb1\xacK\xb1\xee\x18\xb9N\x96\xdc\xdcv\xff;\xbe\xcf_\x03\xc0\xfc;\xe8\xbeF\x1b\xff\xda@\xc2R\xf7\xfe\xe3:\xf7jw5\xd0\xda\x8d\xeb^\x18j1\xc7\x1e\xba<\x1b(\xd6kT\xc6\xaa[\xd7\xa2,\x1b\x19\xcc\xa2\x02\xf6\x9bY\xbd7k\x86\xb5m\x82\xba\xd8\xea\xc9V\xbc\xa96X\xfd>\x19\xf3\xed\x0c&\xa9\x938\xf8O\xc1]"\x06\xd0\x97\xea\xe1\xad\xc6U\xe0\x81+(\x83:\xfa\xf4{!Q\x00\xbeR8\xce\xcdfy\xa8\xf4\x81V\xe2\xd0\x83\x09GQ[Pj\xcf\xdbH\x1a]>\xf7\xcb\xf6e\xf7l\xf1\x95\xf8\x02;2V\x829z[\xbd/\x89\x1b\xbf\xa1\xb4\xe8\xff\x7f\x8d\x8c\xdf\x03\xf1`NX\x11L\xeb\xa3?\x10+\x83\x9a\x01s\xd9\x94m\x84\x00'f\xac\xf0p@\x09B\x92\xadO\x93\x0da\x09Q$\xd8\x92\xd5\x0b\x94a\xb2\x87\xb2\xed\xff\x9a5\xff\x85T\xca\xedDC\xac\x1b<\x16kHJ\x0a\x1c@\x88\x1f\x92\xc2\x0b\x00\x05\xff\xf2\xc8\x02J\xa4\xaa\xa9\xcc\x99\x96\x9c/X\xe0}\xe1\xbe\xbb\x07\xdc_\x04r\14\xc3\xec_-\xe0=d\x90"\xe6\xd1\xec\xb8.\xddY\xae\xd9\xa17\xbfT5\xdcs2O\x8c\x04\x1e3\xb2\xc9F\xf1\xd8\\xc8UP\xc9h\xbd\xa8\xba6\x09\x02\x03\x01\x00\x01\xa3c0a0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14v\xf3U\xe1\xfa\xa46\xfb\xf0\x9f\bq\xed<\xf4G8\x10+0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14v\xf3U\xe1\xfa\xa46\xfb\xf0\x9f\bq\xed<\xf4G8\x10+0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x00f\xc1\xc6#\xf3\xd9\xe0.n_\xe8\xcf\xae\xb0\xb0%M+\xf8;X\x9b@$7Z\xcb\xab\x16I\xff\xb3uy3\xa1/mp\x174\x91\xfeg~\x8f\xec\x9b\xe5^\x82\xa9U\x1f/\xdc\xd4Q\x07\x12\xfe\xac\x16>,5\xc6c\xfc\xdc\x10\xeb\x0d\xa3\xaa\xd0|\xcc\xd1\xd0/Q.\xc4\x14Z\xde\xe8\x19\xe1>\xc6\xcc\xa4)\xe7.\x84\xaa\x060xvTs(\x98Y8\xe0\x00\x0db\xd3B}!\x9f\xae=:\x8c\xd5\xfaw\x0d\x18+\x16\x0e_6\xe1\xfc*\xb50$\xcf\xe0c\x0c{X\x1a\xfe\x99\xbaB\x12\xb1\x91\xf4|h\xe2\xc8\xe8\xaf,\xea\xc9~\xae\xbb*=\x0d\x15\xdc4\x95\xb6\x18t\xa8j\x0f\xc7\xb4\xf4\x13\xc4\xe4[\xed\x0a\xd2\xa4\x97L*\xed/l\x12\x89=\xf1'p\xaaj\x03R!\x9f@\xa8gP\xf2\xf3Z\x1f\xdf\xdf#\xf6\xdcxN\xe6\x98OU:S\xe3\xef\xf2\xf4\x9f\xc7|\xd8X\xaf)"\x97\xb8\xe0\xbd\x91.\xb0v\xecW\x11\xcf\xef)D\xf3\xe9\x85z`c\xe4]3\x89\x17\xd91\xaa\xda\xd6\xf3\x185r\xcf\x87+/c#\x84]\x84\x8c?W\xa0\x88\xfc\x99\x91(&i\x99\xd4\x8f\x97D\xbe\x8e\xd5H\xb1\xa4()\xf1\x15\xb4\xe1\xe5\x9e\xdd\xf8\x8f\xa6o&\xd7\x09<:\x1c\x11\x0e\xa6l7\xf7\xadD\x87,(\xc7\xd8t\x82\xb3\xd0oJW\xbb5)'\xa0\x8b\xe8!\xa7\x87d6]\xcc\xd8\x16\xac\xc7\xb2'@\x92U8(\x8dQn\xdd\x14gSlq\&\x84MuZ\xb6~`V\xa9M\xad\xfb\x9b\x1e\x97\xf3\x0d\xd9\xd2\x97Tw\xda=\x12\xb7\xe0\x1e\xef\x08\x06\xac\xf9\x85\x87\xe9\xa2\xdc\xaf~\x18\x12\x83\xfdV\x17A.\xd5)\x82}\x99\xf41\xf6q\xa9\xcf,\x01'\xa5\x05\xb9\xaa\xb2HN*\xef\x9f\x93RQ\x95\x03^\x19\x8bD\xa2\xd5\xc7\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xbfY 6\x00y\xa0\xa0"k\x8c\xd5\xf2a\xd2\xb8,\xcb\x82J0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x001\x03\xa2a\x0b\x1ft\xe8r6\xc6m\xf9M\x9e\xfa"\xa8\xe1\x81V\xcf\xcd\xbb\x9f\xea\xab\x91\x198\xaf\xaa|\x15M\xf3\xb6\xa3\x8d\xa5\xf4\x8e\xf6D\xa9\xa7\xe8!\x95\xad>\x00b\x16\x88\xf0\x02\xba\xfca#\xe63\x9b0zk6b{\xad\x04#\x84Xe\xe2\xdb+\x8a\xe7%S7bS_\xbc\xda\x01b)\xa2\xa6'q\xe6:"~\xc1o\x1d\x95p J\x074\xdf\xea\xff\x15\x80\xe5\xba\xd7z\xd8[u|\x05z)G~@\xa81\x13w\xcd@;\xb4QGz.\x11\xe3G\x11\xde\x9df\xd0\x8b\xd5Tf\xfa\x83U\xea|\xc2)\x89\x1b\xe9o\xb3\xce\xe2\x05\x84\xc9/>x\x85bn\xc9_\xc1xctX\xc0H\x18\x0c\x999\xeb\xa4\xcc\x1a\xb5yZ\x8d\x15\x9c\xd8\x14\x0d\xf6z\x07W\xc7"\x83\x05-<\x9b%&=\x18\xb3\xa9C|\xc8\xc8\xabd\x8f\x0e\xa3\xbf\x9c\x1b\x9d0\xdb\xda\xd0\x19.\xaa<\xf1\xfb3\x80v\xe4\xcd\xad\x19O\x05'\x8e\x13\xa1n\xc2", + ["CN=SecureSign RootCA11,O=Japan Certification Services, Inc.,C=JP"] = "0\x82\x03m0\x82\x02U\xa0\x03\x02\x01\x02\x02\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000X1\x0b0\x09\x06\x03U\x04\x06\x13\x02JP1+0)\x06\x03U\x04\x0a\x13"Japan Certification Services, Inc.1\x1c0\x1a\x06\x03U\x04\x03\x13\x13SecureSign RootCA110\x1e\x17\x0d090408045647Z\x17\x0d290408045647Z0X1\x0b0\x09\x06\x03U\x04\x06\x13\x02JP1+0)\x06\x03U\x04\x0a\x13"Japan Certification Services, Inc.1\x1c0\x1a\x06\x03U\x04\x03\x13\x13SecureSign RootCA110\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xfdw\xaa\xa5\x1c\x90\x05;\xcbL\x9b3\x8bZ\x14E\xa4\xe7\x90\x16\xd1\xdfW\xd2!\x10\xa4\x17\xfd\xdf\xac\xd6\x1f\xa7\xe4\xdb|\xf7\xec\xdf\xb8\x03\xda\x94X\xfd]r|\x8c?_\x01gt\x15\x96\xe3\x02<\x87\xdb\xae\xcb\x01\x8e\xc2\xf3f\xc6\x85E\xf4\x02\xc6:\xb5b\xb2\xaf\xfa\x9c\xbf\xa4\xe6\xd4\x800\x98\xf3\x0d\xb6\x93\x8f\xa9\xd4\xd86\xf2\xb0\xfc\x8a\xca,\xa1\x153\x951\xda\xc0\x1b\xf2\xeeb\x99\x86c?\xbf\xdd\x93*\x83\xa8v\xb9\x13\x1f\xb7\xceNB\x85\x8f"\xe7.\x1a\xf2\x95\x09\xb2\x05\xb5DNw\xa1 \xbd\xa9\xf2N\x0a}P\xad\xf5\x05\x0dEOFq\xfd(>S\xfb\x04\xd8-\xd7e\x1dJ\x1b\xfa\xcf;\xb01\x9a5n\xc8\x8b\x06\xd3\x00\x91\xf2\x94\x08eL\xb14\x06\x00z\x89\xe2\xf0\xc7\x03Y\xcf\xd5\xd6\xe8\xa72\xb3\xe6\x98@\x86\xc5\xcd'\x12\x8b\xcc{\xce\xb7\x11+@n\x94\x80\x09m\xb6\xb3owo5\x08P\xfb\x02\x87\xc5>\x89\x02\x03\x01\x00\x01\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14[\xf8MO\xb2\xa5\x86\xd4:\xd2\xf1c\x9a\xa0\xbe\x09\xf6W\xb7\xde0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xa0\xa18\x16f.\xa7V\x1f!\x9c\x06\xfa\x1d\xed\xb9"\xc58&\xd8NO\xec\xa3\x7fy\xdeF!\xa1\x87w\x8f\x07\x08\x9a\xb2\xa4\xc5\xaf\x0f2\x98\x0b|f)\xb6\x9b}%RIC\xabL.+nzp\xaf\x16\x0e\xe3\x02l\xfbB\xe6\x18\x9dE\xd8U\xc8\xe8;\xdd\xe7\xe1\xf4.\x0b\x1c4\lXJ\xfb\x8c\x88P_\x95\x1c\xbf\xed\xab"\xb5e\xb3\x85\xba\x9e\x0f\xb8\xad\xe5z\x1b\x8aP:\x1d\xbd\x0d\xbc{TP\x0b\xb9B\xafU\xa0\x18\x81\xade\x99\xef\xbe\xe4\x9c\xbf\xc4\x85\xabA\xb2To\xdc%\xcd\xedx\xe2\x8e\x0c\x8d\x09I\xddc{Zi\x96\x02!\xa8\xbdRY\xe9}5\xcb\xc8R\xca\x7f\x81\xfe\xd9k\xd3\xf7\x11\xed%\xdf\xf8\xe7\xf9\xa4\xfar\x97\x84S\x0d\xa5\xd02\x18QvY\x14l\x0f\xeb\xec_\x80\x8cuC\x83\xc3\x85\x98\xffL\x9e-\x0d\xe4w\x83\x93N\xb5\x96\x07\x8b(\x13\x9b\x8c\x19\x8dA'I@\xee\xde\xe6#D9\xdc\xa1"\xd6\xba\x03\xf2", + ["emailAddress=info@e-szigno.hu,CN=Microsec e-Szigno Root CA 2009,O=Microsec Ltd.,L=Budapest,C=HU"] = "0\x82\x04\x0a0\x82\x02\xf2\xa0\x03\x02\x01\x02\x02\x09\x00\xc2~C\x04NG?\x190\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\x821\x0b0\x09\x06\x03U\x04\x06\x13\x02HU1\x110\x0f\x06\x03U\x04\x07\x0c\x08Budapest1\x160\x14\x06\x03U\x04\x0a\x0c\x0dMicrosec Ltd.1'0%\x06\x03U\x04\x03\x0c\x1eMicrosec e-Szigno Root CA 20091\x1f0\x1d\x06\x09*\x86H\x86\xf7\x0d\x01\x09\x01\x16\x10info@e-szigno.hu0\x1e\x17\x0d090616113018Z\x17\x0d291230113018Z0\x81\x821\x0b0\x09\x06\x03U\x04\x06\x13\x02HU1\x110\x0f\x06\x03U\x04\x07\x0c\x08Budapest1\x160\x14\x06\x03U\x04\x0a\x0c\x0dMicrosec Ltd.1'0%\x06\x03U\x04\x03\x0c\x1eMicrosec e-Szigno Root CA 20091\x1f0\x1d\x06\x09*\x86H\x86\xf7\x0d\x01\x09\x01\x16\x10info@e-szigno.hu0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xe9\xf8\x8f\xf3c\xad\xda\x86\xd8\xa7\xe0B\xfb\xcf\x91\xde\xa6&\xf8\x99\xa5cp\xad\x9b\xae\xca3@}m\x96n\xa1\x0eD\xee\xe1\x13\x9d\x94BR\x9a\xbdu\x85t,\xa8\x0e\x1d\x93\xb6\x18\xb7\x8c,\xa8\xcf\xfb\q\xb9\xda\xec\xfe\xe8~\x8f\xe4/\x1d\xb2\xa8u\x87\xd8\xb7\xa1\xe5;\xcf\x99JF\xd0\x83\x19}\xc0\xa1\x12\x1c\x95mJ\xf4\xd8\xc7\xa5M3.\x859@u~\x14|\x80\x12\x98P\xc7Ag\xb8\xa0\x80aT\xa6lN\x1f\xe0\x9d\x0e\x07\xe9\xc9\xba3\xe7\xfe\xc0U(,\x02\x80\xa7\x19\xf5\x9e\xdcUS\x03\x97{\x07H\xff\x99\xfb7\x8a$\xc4Y\xccP\x10c\x8e\xaa\xa9\x1a\xb0\x84\x1a\x86\xf9_\xbb\xb1Pn\xa4\xd1\x0a\xcc\xd5q~\x1f\xa7\x1b|\xf5Sn"_\xcb+\xe6\xd4|]\xae\xd6\xc2\xc6L\xe5\x05\x01\xd9\xedW\xfc\xc1#y\xfc\xfa\xc8$\x83\x95\xf3\xb5jQ\x01\xd0w\xd6\xe9\x12\xa1\xf9\x1a\x83\xfb\x82\x1b\xb9\xb0\x97\xf4v\x063CI\xa0\xff\x0b\xb5\xfa\xb5\x02\x03\x01\x00\x01\xa3\x81\x800~0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xcb\x0f\xc6\xdfBC\xcc=\xcb\xb5H#\xa1\x1az\xa6*\xbb4h0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xcb\x0f\xc6\xdfBC\xcc=\xcb\xb5H#\xa1\x1az\xa6*\xbb4h0\x1b\x06\x03U\x1d\x11\x04\x140\x12\x81\x10info@e-szigno.hu0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\xc9\xd1\x0e^.\xd5\xcc\xb3|>\xcb\xfc=\xff\x0d(\x95\x93\x04\xc8\xbf\xda\xcdy\xb8C\x90\xf0\xa4\xbe\xef\xf2\xef!\x98\xbc\xd4\xd4]\x06\xf6\xeeB\xec0l\xa0\xaa\xa9\xca\xf1\xaf\x8a\xfa?\x0bsj>\xea.@~\x1f\xaeTay\xeb.\x087\xd7#\xf3\x8c\x9f\xbe\x1d\xb1\xe1\xa4u\xdb\xa0\xe2T\x14\xb1\xba\x1c)\xa4\x18\xf6\x12\xba\xa2\x14\x14\xe315\xc8@\xff\xb7\xe0\x05vW\xc1\x1cY\xf2\xf8\xbf\xe4\xed%b\\x84\xf0~~\x1f\xb3\xbe\xf9\xb7!\x11\xcc\x03\x01Vp\xa7\x10\x92\x1e\x1b4\x81\x1e\xad\x9c\x1a\xc3\x04<\xed\x02a\xd6\x1e\x06\xf3_:\x87\xf2+\xf1E\x87\xe5=\xac\xd1\xc7W\x84\xbdk\xae\xdc\xd8\xf9\xb6\x1bbp\x0b=6\xc9B\xf22\xd7za\xe6\xd2\xdb=\xcf\xc8\xa9\xc9\x9b\xdc\xdbXD\xd7o8\xaf\x7fx\xd3\xa3\xad\x1au\xba\x1c\xc16|\x8f\x1em\x1c\xc3uF\xae5\x05\xa6\xf6\=!\xeeV\xf0\xc9\x82"-zT\xabp\xc3}"e\x82p\x96", + ["CN=thawte Primary Root CA,OU=(c) 2006 thawte, Inc. - For authorized use only,OU=Certification Services Division,O=thawte, Inc.,C=US"] = "0\x82\x04 0\x82\x03\x08\xa0\x03\x02\x01\x02\x02\x104N\xd5W \xd5\xed\xecI\xf4/\xce7\xdb+m0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\xa91\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cthawte, Inc.1(0&\x06\x03U\x04\x0b\x13\x1fCertification Services Division1806\x06\x03U\x04\x0b\x13/(c) 2006 thawte, Inc. - For authorized use only1\x1f0\x1d\x06\x03U\x04\x03\x13\x16thawte Primary Root CA0\x1e\x17\x0d061117000000Z\x17\x0d360716235959Z0\x81\xa91\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x150\x13\x06\x03U\x04\x0a\x13\x0cthawte, Inc.1(0&\x06\x03U\x04\x0b\x13\x1fCertification Services Division1806\x06\x03U\x04\x0b\x13/(c) 2006 thawte, Inc. - For authorized use only1\x1f0\x1d\x06\x03U\x04\x03\x13\x16thawte Primary Root CA0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xac\xa0\xf0\xfb\x80Y\xd4\x9c\xc7\xa4\xcf\x9d\xa1Ys\x09\x10E\x0c\x0d,nh\xf1l[HhIY7\xfc\x0b3\x19\xc2w\x7f\xcc\x10-\x954\x1c\xe6\xebM\x09\xa7\x1c\xd2\xb8\xc9\x976\x02\xb7\x89\xd4$_\x06\xc0\xccD\x94\x94\x8d\x02bo\xebZ\xdd\x11\x8d(\x9a\\x84\x90\x10z\x0d\xbdtf/j8\xa0\xe2\xd5TD\xeb\x1d\x07\x9f\x07\xbao\xee\xe9\xfdN\x0b)\xf5>\x84\xa0\x01\xf1\x9c\xab\xf8\x1c~\x89\xa4\xe8\xa1\xd8qe\x0d\xa3Q{\xee\xbc\xd2"`\x0d\xb9[\x9d\xdf\xba\xfcQ[\x0b\xaf\x98\xb2\xe9.\xe9\x04\xe8b\x87\xde+\xc8\xd7N\xc1Ld\x1e\xdd\xcf\x87X\xbaJO\xcah\x07\x1d\x1c\x9dJ\xc6\xd5/\x91\xcc|qr\x1c\xc5\xc0g\xeb2\xfd\xc9\x92\\x94\xda\x85\xc0\x9b\xbfS}+\x09\xf4\x8c\x9d\x91\x1f\x97jR\xcb\xde\x096\xa4w\xd8{\x87PD\xd5>n)i\xfb9I&\x1e\x09\xa5\x80{@-\xeb\xe8'\x85\xc9\xfea\xfd~\xe6|\x97\x1d\xd5\x9d\x02\x03\x01\x00\x01\xa3B0@0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14{[E\xcf\xaf\xce\xcbz\xfd1\x92\x1aj\xb6\xf3F\xebWHP0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00y\x11\xc0K\xb3\x91\xb6\xfc\xf0\xe9g\xd4\x0dnE\xbeU\xe8\x93\xd2\xce\x03?\xed\xda%\xb0\x1dW\xcb\x1e:v\xa0L\xecPv\xe8dr\x0c\xa4\xa9\xf1\xb8\x8b\xd6\xd6\x87\x84\xbb2\xe5A\x11\xc0w\xd9\xb3`\x9d\xeb\x1b\xd5\xd1nDD\xa9\xa6\x01\xecUb\x1dw\xb8\\x8eHI|\x9c;W\x11\xac\xads7\x8e/x\\x90hG\xd9``\xe6\xfc\x07=" \x17\xc4\xf7\x16\xe9\xc4\xd8r\xf9\xc8s|\xdf\x16/\x15\xa9>\xfdj'\xb6\xa1\xebZ\xba\x98\x1f\xd5\xe3Md\x0a\x9d\x13\xc8a\xba\xf59\x1c\x87\xba\xb8\xbd{"\x7f\xf6\xfe\xac@y\xe5\xac\x10o=\x8f\x1byv\x8b\xc47\xb3!\x18\x84\xe56\x00\xebc \x99\xb9\xe9\xfe3\x04\xbbA\xc8\xc1\x02\xf9Dc \x9e\x81\xceB\xd3\xd6?,v\xd3c\x9cY\xdd\x8f\xa6\xe1\x0e\xa0.A\xf7.\x95G\xcf\xbc\xfd3\xf3\xf6\x0ba~~\x91+\x81G\xc2'0\xee\xa7\x10]7\x8f\9+\xe4\x04\xf0{\x8dV\x8ch", + ["CN=COMODO Certification Authority,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB"] = "0\x82\x04\x1d0\x82\x03\x05\xa0\x03\x02\x01\x02\x02\x10N\x81-\x8a\x82e\xe0\x0b\x02\xee>5\x02F\xe5=0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\x811\x0b0\x09\x06\x03U\x04\x06\x13\x02GB1\x1b0\x19\x06\x03U\x04\x08\x13\x12Greater Manchester1\x100\x0e\x06\x03U\x04\x07\x13\x07Salford1\x1a0\x18\x06\x03U\x04\x0a\x13\x11COMODO CA Limited1'0%\x06\x03U\x04\x03\x13\x1eCOMODO Certification Authority0\x1e\x17\x0d061201000000Z\x17\x0d291231235959Z0\x81\x811\x0b0\x09\x06\x03U\x04\x06\x13\x02GB1\x1b0\x19\x06\x03U\x04\x08\x13\x12Greater Manchester1\x100\x0e\x06\x03U\x04\x07\x13\x07Salford1\x1a0\x18\x06\x03U\x04\x0a\x13\x11COMODO CA Limited1'0%\x06\x03U\x04\x03\x13\x1eCOMODO Certification Authority0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xd0@\x8b\x8br\xe3\x91\x1b\xf7Q\xc1\x1bT\x04\x98\xd3\xa9\xbf\xc1\xe6\x8a];\x87\xfb\xbb\x88\xce\x0d\xe3/?\x06\x96\xf0\xa2)P\x99\xae\xdb;\xa1W\xb0tQq\xcd\xedB\x91MA\xfe\xa9\xc8\xd8j\x86wD\xbbYf\x97P^\xb4\xd4,pD\xcf\xda7\x95Bi<0\xc4q\xb3R\xf0!M\xa1\xd8\xba9|\x1c\x9e\xa3$\x9d\xf2\x83\x16\x98\xaa\x16|C\x9b\x15[\xb7\xae4\x91\xfe\xd4b&\x18F\x9a?\xeb\xc1\xf9\xf1\x90W\xeb\xacz\x0d\x8b\xdbr0jf\xd5\xe0F\xa3p\xdch\xd9\xff\x04H\x89w\xde\xb5\xe9\xfbgmA\xe9\xbc9\xbd2\xd9b\x02\xf1\xb1\xa8=n7\x9c\xe2/\xe2\xd3\xa2&\x8b\xc6\xb8UC\x88\xe1#>\xa5\xd2$9jG\xab\x00\xd4\xa1\xb3\xa9%\xfe\x0d?\xa7\x1d\xba\xd3Q\xc1\x0b\xa4\xda\xac8\xefUP$\x05eF\x934O-\x8d\xad\xc6\xd4!\x19\xd2\x8e\xca\x05aq\x07sG\xe5\x8a\x19\x12\xbd\x04M\xceN\x9c\xa5H\xac\xbb&\xf7\x02\x03\x01\x00\x01\xa3\x81\x8e0\x81\x8b0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x0bX\xe5\x8b\xc6L\x157\xa4@\xa90\xa9!\xbeG6ZV\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0I\x06\x03U\x1d\x1f\x04B0@0>\xa0<\xa0:\x868http://crl.comodoca.com/COMODOCertificationAuthority.crl0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00>\x98\x9e\x9b\xf6\x1b\xe9\xd79\xb7x\xae\x1dr\x18I\xd3\x87\xe4C\x82\xeb?\xc9\xaa\xf5\xa8\xb5\xefU|!Re\xf9\xd5\x0d\xe1l\xf4>\x8c\x93s\x91.\x02\xc4N\x07qo\xc0\x8f8a\x08\xa8\x1e\x81\x0a\xc0/ /A\x8b\x91\xdcHE\xbc\xf1\xc6\xde\xbavk3\xc8\x00-1FL\xed\xe7\x9d\xcf\x88\x94\xff3\xc0V\xe8$\x86&\xb8\xd888\xdf*k\xdd\x12\xcc\xc7?G\x17L\xa2\xc2\x06\x96\x09\xd6\xdb\xfe?\xa8:v$O\x81!\xc5\xe3\x0f\x02\xf8\x93\x94G \xbb\xfe\xd4\x0e\xd3h\xb9\xdd\xc4z\x84\x82\xe3STy\xdd\xdb\x9c\xd2\xf2\x07\x9b.\xb6\xbc>\xed\x85m\xef%\x11\xf2\x97\x1aBa\xf7J\x97\xe8\x8b\xb1\x10\x07\xfae\x81\xb2\xa29\xcf\xf7<\xff\x18\xfb\xc6\xf1Z\x8bY\xe2\x02\xac{\x92\xd0N\x14OYE\xf6\x0c^(_\xb0\xe8?E\xcf\xcf\xaf\x9bo\xfb\x84\xd3wZ\x95o\xac\x94\x84\x9e\xee\xbc\xc0J\x8fJ\x93\xf8D!\xe21EaPN\x10\xd8\xe35|L\x19\xb4\xde\x05\xbf\xa3\x06\x9f\xc8\xb5\xcd\xe4\x1f\xd7\x17\x06\x0dz\x95tU\x0dh\x1a\xfc\x10\x1bbd\x9dm\xe0\x95\xa0\xc3\x94\x07W\x0d\x14\xe6\xbd\x05\xfb\xb8\x9f\xe6\xdf\x8b\xe2\xc6\xe7~\x96\xf6S\xc5\x804P(X\xf0\x12Pq\x170\xba\xe6xc\xbc\xf4\xb2\xad\x9b+\xb2\xfe\xe19\x8c^\xba\x0b \x94\xde{\x83\xb8\xff\xe3V\x8d\xb7\x11\xe9;\x8c\xf2\xb1\xc1]\x9d\xa4\x0bL+\xd9\xb2\x18\xf5\xb5\x9fK\x02\x03\x01\x00\x01\xa3c0a0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14R\xd8\x88:\xc8\x9fxf\xed\x89\xf3{8p\x94\xc9\x02\x026\xd00\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14R\xd8\x88:\xc8\x9fxf\xed\x89\xf3{8p\x94\xc9\x02\x026\xd00\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00\x0b{r\x87\xc0`\xa6IL\x88X\xe6\x1d\x88\xf7\x14dH\xa6\xd8X\x0a\x0eO\x135\xdf5\x1d\xd4\xed\x061\xc8\x81>j\xd5\xdd;\x1a2\xee\x90=\x11\xd2.\xf4\x8e\xc3c.#f\xb0g\xbeo\xb6\xc0\x139`\xaa\xa24%\x93uR\xde\xa7\x9d\xad\x0e\x87\x89Rqj\x16<\x19\x1d\x83\xf8\x9a)e\xbe\xf4?\x9a\xd9\xf0\xf3Z\x87!q\x80M\xcb\xe08\x9b?\xbb\xfa\xe00M\xcf\x86\xd3e\x10\x19\x18\xd1\x97\x02\xb1+rBh\xac\xa0\xbdNZ\xda\x18\xbfk\x98\x81\xd0\xfd\x9a\xbe^\x15H\xcd\x11\x15\xb9\xc0)\\xb4\xe8\x88\xf7>6\xae\xb7b\xfd\x1eb\xdepx\x10\x1cH[\xda\xbc\xa48\xbag\xedU>^W\xdf\xd4\x03@L\x81\xa4\xd2Oc\xa7\x09B\x09\x14\xfc\x00\xa9\xc2\x80sO.\xc0@\xd9\x11{H\xeaz\x02\xc0\xd3\xeb(\x01&Xt\xc1\xc0s"m\x93\x95\xfd9}\xbb*\xe3\xf6\x82\xe3,\x97_N\x1f\x91\x94\xfa\xfe,\xa3\xd8v\x1a\xb8M\xb28O\x9b\xfa\x1dH`y&\xe2\xf3\xfd\xa9\xd0\x9a\xe8p\x8fIz\xd6\xe5\xbd\x0a\x0e\xdb-\xf3\x8d\xbf\xeb\xe3\xa4}\xcb\xc7\x95q\xe8\xda\xa3|\xc5\xc2\xf8t\x92\x04\x1b\x86\xac\xa4"S@\xb6\xac\xfeLv\xcf\xfb\x942\xc05\x9fv?n\xe5\x90n\xa0\xa6&\xa2\xb8,\xbe\xd1+\x85\xfd\xa7h\xc8\xba\x01+\xb1lt\x1d\xb8s\x95\xe7\xee\xb7\xc7%\xf0\x00L\x00\xb2~\xb6\x0b\x8b\x1c\xf3\xc0P\x9e%\xb9\xe0\x08\xde6f\xff7\xa5\xd1\xbbTd,\xc9'\xb5K\x92~e\xff\xd3-\xe1\xb9N\xbc\x7f\xa4A!\x90Aw\xa69\x1f\xea\x9e\xe3\x9f\xd0fo\x05\xec\xaav~\xbfk\x16\xa0\xeb\xb5\xc7\xfc\x92T/+\x11'%7xLQj\xb0\xf3\xccX]\x14\xf1jH\x15\xff\xc2\x07\xb6\xb1\x8d\x0f\x8e\PF\xb3=\xbf\x01\x98O\xb2YTG>4{xmV\x93.s\xeaf(x\xcd\x1d\x14\xbf\xa0\x8f/.\xb8.\x8e\xf2\x14\x8a\xcc\xe9\xb5|\xfbl\x9d\x0c\xa5\xe1\x96", + ["CN=AddTrust External CA Root,OU=AddTrust External TTP Network,O=AddTrust AB,C=SE"] = "0\x82\x0460\x82\x03\x1e\xa0\x03\x02\x01\x02\x02\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000o1\x0b0\x09\x06\x03U\x04\x06\x13\x02SE1\x140\x12\x06\x03U\x04\x0a\x13\x0bAddTrust AB1&0$\x06\x03U\x04\x0b\x13\x1dAddTrust External TTP Network1"0 \x06\x03U\x04\x03\x13\x19AddTrust External CA Root0\x1e\x17\x0d000530104838Z\x17\x0d200530104838Z0o1\x0b0\x09\x06\x03U\x04\x06\x13\x02SE1\x140\x12\x06\x03U\x04\x0a\x13\x0bAddTrust AB1&0$\x06\x03U\x04\x0b\x13\x1dAddTrust External TTP Network1"0 \x06\x03U\x04\x03\x13\x19AddTrust External CA Root0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xb7\xf7\x1a3\xe6\xf2\x00\x04-9\xe0N[\xed\x1f\xbcl\x0f\xcd\xb5\xfa#\xb6\xce\xde\x9b\x113\x97\xa4)L}\x93\x9f\xbdJ\xbc\x93\xed\x03\x1a\xe3\x8f\xcf\xe5mPZ\xd6\x97)\x94Z\x80\xb0Iz\xdb.\x95\xfd\xb8\xca\xbf78-\x1e>\x91A\xadpV\xc7\xf0O?\xe82\x9et\xca\xc8\x90T\xe9\xc6_\x0fx\x9d\x9a@<\x0e\xaca\xaa^\x14\x8f\x9e\x87\xa1jP\xdc\xd7\x9aN\xaf\x05\xb3\xa6q\x94\x9cq\xb3P`\x0a\xc7\x13\x9d8\x07\x86\x02\xa8\xe9\xa8i&\x18\x90\xabL\xb0O#\xab:O\x84\xd8\xdf\xce\x9f\xe1io\xbb\xd7B\xd7kD\xe4\xc7\xad\xeemA_rZq\x087\xb3ye\xa4Y\xa0\x947\xf7\x00/\x0d\xc2\x92r\xda\xd08r\xdb\x14\xa8E\xc4]*}\xb7\xb4\xd6\xc4\xee\xac\xcd\x13D\xb7\xc9+\xddC\x00%\xfaa\xb9ijX#\x11\xb7\xa73\x8fVuY\xf5\xcd)\xd7F\xb7\x0a+e\xb6\xd3Bo\x15\xb2\xb8{\xfb\xef\xe9]S\xd54Z'\x02\x03\x01\x00\x01\xa3\x81\xdc0\x81\xd90\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xad\xbd\x98z4\xb4&\xf7\xfa\xc4&T\xef\x03\xbd\xe0$\xcbT\x1a0\x0b\x06\x03U\x1d\x0f\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x81\x99\x06\x03U\x1d#\x04\x81\x910\x81\x8e\x80\x14\xad\xbd\x98z4\xb4&\xf7\xfa\xc4&T\xef\x03\xbd\xe0$\xcbT\x1a\xa1s\xa4q0o1\x0b0\x09\x06\x03U\x04\x06\x13\x02SE1\x140\x12\x06\x03U\x04\x0a\x13\x0bAddTrust AB1&0$\x06\x03U\x04\x0b\x13\x1dAddTrust External TTP Network1"0 \x06\x03U\x04\x03\x13\x19AddTrust External CA Root\x82\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\xb0\x9b\xe0\x85%\xc2\xd6#\xe2\x0f\x96\x06\x92\x9dA\x98\x9c\xd9\x84y\x81\xd9\x1e[\x14\x07#6e\x8f\xb0\xd8w\xbb\xacAlG`\x83Q\xb0\xf92=\xe7\xfc\xf6&\x13\xc7\x80\x16\xa5\xbfZ\xfc\x87\xcfxy\x89!\x9a\xe2L\x07\x0a\x865\xbc\xf2\xdeQ\xc4\xd2\x96\xb7\xdc~N\xeep\xfd\x1c9\xeb\x0c\x02Q\x14-\x8e\xbd\x16\xe0\xc1\xdfFu\xe7$\xad\xec\xf4B\xb4\x85\x93p\x10g\xba\x9d\x065J\x18\xd3+z\xccQB\xa1zc\xd1\xe6\xbb\xa1\xc5+\xc26\xbe\x13\x0d\xe6\xbdc~y{\xa7\x09\x0d@\xabj\xdd\x8f\x8a\xc3\xf6\xf6\x8c\x1aB\x05Q\xd4E\xf5\x9f\xa7b!h\x15 C<\x99\xe7|\xbd$\xd8\xa9\x91\x17s\x88?V\x1b18\x18\xb4q\x0f\x9a\xcd\xc8\x0e\x9e\x8e.\x1b\xe1\x8c\x98\x83\xcb\x1f1\xf1DL\xc6\x04sIv`\x0f\xc7\xf8\xbd\x17\x80k.\xe9\xccL\x0eZ\x9ay\x0f \x0a.\xd5\x9ec&\x1eU\x92\x94\xd8\x82\x17Z{\xd0\xbc\xc7\x8fN\x86\x04", + ["CN=Certigna,O=Dhimyotis,C=FR"] = "0\x82\x03\xa80\x82\x02\x90\xa0\x03\x02\x01\x02\x02\x09\x00\xfe\xdc\xe3\x01\x0f\xc9H\xff0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00041\x0b0\x09\x06\x03U\x04\x06\x13\x02FR1\x120\x10\x06\x03U\x04\x0a\x0c\x09Dhimyotis1\x110\x0f\x06\x03U\x04\x03\x0c\x08Certigna0\x1e\x17\x0d070629151305Z\x17\x0d270629151305Z041\x0b0\x09\x06\x03U\x04\x06\x13\x02FR1\x120\x10\x06\x03U\x04\x0a\x0c\x09Dhimyotis1\x110\x0f\x06\x03U\x04\x03\x0c\x08Certigna0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xc8h\xf1\xc9\xd6\xd6\xb34u&\x82\x1e\xec\xb4\xbe\xea\\xe1&\xed\x11Ga\xe1\xa2|\x16x@!\xe4`\x9eZ\xc8c\xe1\xc4\xb1\x96\x92\xff\x18mi#\xe1+b\xf7\xdd\xe26/\x91\x07\xb9H\xcf\x0e\xecy\xb6,\xe74Kp\x08%\xa3<\x87\x1b\x19\xf2\x81\x07\x0f8\x90\x19\xd3\x11\xfe\x86\xb4\xf2\xd1^\x1e\x1e\x96\xcd\x80l\xce;1\x93\xb6\xf2\xa0\xd0\xa9\x95\x12}\xa5\x9a\xcck\xc8\x84V\x8a3\xa9\xe7"\x15S\x16\xf0\xcc\x17\xecW_\xe9\xa2\x0a\x98\x09\xde\xe3_\x9co\xdcH\xe3\x85\x0b\x15Z\xa6\xba\x9f\xacH\xe3\x09\xb2\xf7\xf42\xde^4\xbe\x1cx]B[\xce\x0e"\x8fM\x90\xd7}2\x18\xb3\x0b,j\xbf\x8e?\x14\x11\x89 \x0ew\x14\xb5=\x94\x08\x87\xf7%\x1e\xd5\xb2`\x00\xeco*(%n*>\x18c\x17%?>D \x16\xf6&\xc8%\xae\x05J\xb4\xe7c,\xf3\x8c\x16S~\\xfb\x11\x1a\x08\xc1Fb\x9f"\xb8\xf1\xc2\x8di\xdc\xfa:X\x06\xdf\x02\x03\x01\x00\x01\xa3\x81\xbc0\x81\xb90\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x1a\xed\xfeA9\x90\xb4$Y\xbe\x01\xf2R\xd5E\xf6Z9\xdc\x110d\x06\x03U\x1d#\x04]0[\x80\x14\x1a\xed\xfeA9\x90\xb4$Y\xbe\x01\xf2R\xd5E\xf6Z9\xdc\x11\xa18\xa46041\x0b0\x09\x06\x03U\x04\x06\x13\x02FR1\x120\x10\x06\x03U\x04\x0a\x0c\x09Dhimyotis1\x110\x0f\x06\x03U\x04\x03\x0c\x08Certigna\x82\x09\x00\xfe\xdc\xe3\x01\x0f\xc9H\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x11\x06\x09`\x86H\x01\x86\xf8B\x01\x01\x04\x04\x03\x02\x00\x070\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x85\x03\x1e\x92q\xf6B\xaf\xe1\xa3a\x9e\xeb\xf3\xc0\x0f\xf2\xa5\xd4\xda\x95\xe6\xd6\xbeh6=~n\x1fL\x8a\xef\xd1\x0f!m^\xa5Rc\xce\x12\xf8\xef*\xdao\xeb7\xfe\x13\x02\xc7\xcb;>"k\xdaa.\x7f\xd4r=\xdd0\xe1\x1eL@\x19\x8c\x0f\xd7\x9c\xd1\x830{\x98Y\xdc}\xc6\xb9\x0c)L\xa13\xa2\xebg:e\x84\xd3\x96\xe2\xedvEp\x8f\xb5+\xde\xf9#\xd6In<\x14\xb5\xc6\x9f5\x1eP\xd0\xc1\x8fjpD\x02b\xcb\xae\x1dhA\xa7\xaaW\xe8S\xaa\x07\xd2\x06\xf6\xd5\x14\x06\x0b\x91\x03u,lr\xb5a\x95\x9a\x0d\x8b\xb9\x0d\xe7\xf5\xdfT\xcd\xde\xe6\xd8\xd6\x09\x08\x97c\xe5\xc1.\xb0\xb7D&\xc0&\xc0\xafU0\x9e;\xd56*\x19\x04\xf4\\x1e\xff\xcf,\xb7\xff\xd0\xfd\x87@\x11\xd5\x11#\xbbH\xc0!\xa9\xa4(-\xfd\x15\xf8\xb0N+\xf40[!\xfc\x11\x914\xbeA\xef{\x9d\x97u\xff\x97\x95\xc0\x96X/\xea\xbbF\xd7\xbb\xe4\xd9.", + ["CN=VeriSign Universal Root Certification Authority,OU=(c) 2008 VeriSign, Inc. - For authorized use only,OU=VeriSign Trust Network,O=VeriSign, Inc.,C=US"] = "0\x82\x04\xb90\x82\x03\xa1\xa0\x03\x02\x01\x02\x02\x10@\x1a\xc4d!\xb3\x13!\x03\x0e\xbb\xe4\x12\x1a\xc5\x1d0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000\x81\xbd1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x170\x15\x06\x03U\x04\x0a\x13\x0eVeriSign, Inc.1\x1f0\x1d\x06\x03U\x04\x0b\x13\x16VeriSign Trust Network1:08\x06\x03U\x04\x0b\x131(c) 2008 VeriSign, Inc. - For authorized use only1806\x06\x03U\x04\x03\x13/VeriSign Universal Root Certification Authority0\x1e\x17\x0d080402000000Z\x17\x0d371201235959Z0\x81\xbd1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x170\x15\x06\x03U\x04\x0a\x13\x0eVeriSign, Inc.1\x1f0\x1d\x06\x03U\x04\x0b\x13\x16VeriSign Trust Network1:08\x06\x03U\x04\x0b\x131(c) 2008 VeriSign, Inc. - For authorized use only1806\x06\x03U\x04\x03\x13/VeriSign Universal Root Certification Authority0\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xc7a7^\xb1\x014\xdbb\xd7\x15\x9b\xffXZ\x8c##\xd6`\x8e\x91\xd7\x90\x98\x83z\xe6X\x198\x8c\xc5\xf6\xe5d\x85\xb4\xa2q\xfb\xed\xbd\xb9\xda\xcdM\x00\xb4\xc8-s\xa5\xc7iq\x95\x1f9<\xb2D\x07\x9c\xe8\x0e\xfaMJ\xc4!\xdf)a\x8f2"a\x82\xc5\x87\x1fn\x8c|_\x16 QD\xd1pOW\xea\xe3\x1c\xe3\xccy\xeeX\xd8\x0e\xc2\xb3E\x93\xc0,\xe7\x9a\x17+{\x007zA3x\xe13\xe2\xf3\x10\x1a\x7f\x87,\xbe\xf6\xf5\xf7B\xe2\xe5\xbf\x87b\x89_\x00K\xdf\xc5\xdd\xe4uD2A:\x1eqni\xcb\x0buF\x08\xd1\xca\xd2+\x95\xd0\xcf\xfb\xb9@kd\x8cWM\xfc\x13\x11y\x84\xed^T\xf64\x9f\x08\x01\xf3\x10%\x06\x17J\xda\xf1\x1dzfk\x98`f\xa4\xd9\xef\xd2.\x82\xf1\xf0\xef\x09\xeaD\xc9\x15j\xe2\x03n3\xd3\xac\x9fU\x00\xc7\xf6\x08j\x94\xb9_\xdc\xe03\xf1\x84`\xf9['\x11\xb4\xfc\x16\xf2\xbbVj\x80%\x8d\x02\x03\x01\x00\x01\xa3\x81\xb20\x81\xaf0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060m\x06\x08+\x06\x01\x05\x05\x07\x01\x0c\x04a0_\xa1]\xa0[0Y0W0U\x16\x09image/gif0!0\x1f0\x07\x06\x05+\x0e\x03\x02\x1a\x04\x14\x8f\xe5\xd3\x1a\x86\xac\x8d\x8ek\xc3\xcf\x80j\xd4H\x18,{\x19.0%\x16#http://logo.verisign.com/vslogo.gif0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xb6w\xfaiHG\x9fS\x12\xd5\xc2\xea\x072v\x07\xd1\x97\x07\x190\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00J\xf8\xf8\xb0\x03\xe6,g{\xe4\x94wc\xccnL\xf9}\x0e\x0d\xdc\xc8\xb95\xb9pOc\xfa$\xfal\x83\x8cG\x9d;c\xf3\x9a\xf9v2\x95\x91\xb1w\xbc\xac\x9a\xbe\xb1\xe41!\xc6\x81\x95VZ\x0e\xb1\xc2\xd4\xb1\xa6Y\xac\xf1c\xcb\xb8L\x1dY\x90J\xef\x90\x16(\x1fZ\xae\x10\xfb\x81P8\x0cl\xcc\xf1=\xc3\xf5c\xe3\xb3\xe3!\xc9$9\xe9\xfd\x15fF\xf4\x1b\x11\xd0Ms\xa3}F\xf9=\xed\xa8_b\xd4\xf1?\xf8\xe0tW+\x18\x9d\x81\xb4\xc4(\xda\x94\x97\xa5p\xeb\xac\x1d\xbe\x07\x11\xf0\xd5\xdb\xdd\xe5\x8c\xf0\xd52\xb0\x83\xe6W\xe2\x8f\xbf\xbe\xa1\xaa\xbf=\x1d\xb5\xd48\xea\xd7\xb0\:Oj?\x8f\xc0flc\xaa\xe9\xd9\xa4\x16\xf4\x81\xd1\x95\x14\x0e}\xcd\x954\xd9\xd2\x8fps\x81{\x9c~\xbd\x98a\xd8E\x87\x98\x90\xc5\xeb\x860\xc65\xbf\xf0\xff\xc3U\x88\x83K\xef\x05\x92\x06q\xf2\xb8\x98\x93\xb7\xec\xcd\x82a\xf18\xe6O\x97\x98*Z\x8d", + ["CN=AffirmTrust Premium ECC,O=AffirmTrust,C=US"] = "0\x82\x01\xfe0\x82\x01\x85\xa0\x03\x02\x01\x02\x02\x08t\x97%\x8a\xc7?zT0\x0a\x06\x08*\x86H\xce=\x04\x03\x030E1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x140\x12\x06\x03U\x04\x0a\x0c\x0bAffirmTrust1 0\x1e\x06\x03U\x04\x03\x0c\x17AffirmTrust Premium ECC0\x1e\x17\x0d100129142024Z\x17\x0d401231142024Z0E1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x140\x12\x06\x03U\x04\x0a\x0c\x0bAffirmTrust1 0\x1e\x06\x03U\x04\x03\x0c\x17AffirmTrust Premium ECC0v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04\x0d0^\x1b\x15\x9d\x03\xd0\xa1y5\xb7:<\x92z\xca\x15\x1c\xcdb\xf3\x9c&\\x07=\xe5T\xfa\xa3\xd6\xcc\x12\xea\xf4\x14_\xe8\x8e\x19\xab/.H\xe6\xac\x18Cx\xac\xd07\xc3\xbd\xb2\xcd,\xe6G\xe2\x1a\xe6c\xb8=./x\xc4O\xdb\xf4\x0f\xa4hLUrk\x95\x1dN\x18B\x95x\xcc7<\x91\xe2\x9be+)\xa3B0@0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\x9a\xaf)z\xc0\x1155&Q0\x00\xc3j\xfe@\xd5\xae\xd6<0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0a\x06\x08*\x86H\xce=\x04\x03\x03\x03g\x000d\x020\x17\x09\xf3\x87\x88PZ\xaf\xc8\xc0B\xbfG_\xf5lj\x86\xe0\xc4't\xe48S\xd7\x05\x7f\x1b4\xe3\xc6/\xb3\xca\x09<7\x9d\xd7\xe7\xb8F\xf1\xfd\xa1\xe2q\x020BY\x87C\xd4Q\xdf\xba\xd3\x092Z\xce\x88~W=\x9c_Bk\xf5\x07-\xb5\xf0\x82\x93\xf9Yo\xaed\xfaX\xe5\x8b\x1e\xe3c\xbe\xb5\x81\xcdo\x02\x8cy", + ["CN=TWCA Global Root CA,OU=Root CA,O=TAIWAN-CA,C=TW"] = "0\x82\x05A0\x82\x03)\xa0\x03\x02\x01\x02\x02\x02\x0c\xbe0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000Q1\x0b0\x09\x06\x03U\x04\x06\x13\x02TW1\x120\x10\x06\x03U\x04\x0a\x13\x09TAIWAN-CA1\x100\x0e\x06\x03U\x04\x0b\x13\x07Root CA1\x1c0\x1a\x06\x03U\x04\x03\x13\x13TWCA Global Root CA0\x1e\x17\x0d120627062833Z\x17\x0d301231155959Z0Q1\x0b0\x09\x06\x03U\x04\x06\x13\x02TW1\x120\x10\x06\x03U\x04\x0a\x13\x09TAIWAN-CA1\x100\x0e\x06\x03U\x04\x0b\x13\x07Root CA1\x1c0\x1a\x06\x03U\x04\x03\x13\x13TWCA Global Root CA0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xb0\x05\xdb\xc8\xeb\x8c\xc4n\x8a!\xef\x8eM\x9cq\x0a\x1fRp\xedm\x82\x9c\x97\xc5\xd7LNEI\xcb@B\xb5\x124l\x19\xc2t\xa41_\x85\x02\x97\xecC3\x0aS\xd2\x9c\x8c\x8e\xb7\xb8y\xdb+\xd5j\xf2\x8ef\xc4\xee+\x01\x07\x92\xd4\xb3\xd0\x02\xdfP\xf6U\xaff\x0e\xcb\xe0G`/+295R:(\x83\xf8{\x16\xc6\x18\xb8b\xd6G%\x91\xce\xf0\x19\x12M\xadc\xf5\xd3?u_)\xf0\xa10\x1c*\xa0\x98\xa6\x15\xbd\xee\xfd\x196\xf0\xe2\x91C\x8f\xfa\xca\xd6\x10'IL\xef\xdd\xc1\xf1\x85p\x9b\xca\xea\xa8ZC\xfcm\x86os\xe97E\xa9\xf06\xc7\xcc\x88u\x1e\xbbl\x06\xff\x9bk>\x17\xeca\xaaq|\xc6\x1d\xa2\xf7I\xe9\x15\xb5<\xd6\xa1a\xf5\x11\xf7\x05o\x1d\xfd\x11\xbe\xd00\x07\xc2)\xb0\x09N&\xdc\xe3\xa2\xa8\x91j\x1f\xc2\x91E\x88\\xe5\x98\xb8q\xa5\x15\x19\xc9|u\x11\xccptO-\x9b\x1d\x91D\xfdV(\xa0\xfe\xbb\x86j\xc8\xfa\\x0bX\xdc\xc6Kv\xc8\xab"\xd9s\x0f\xa5\xf4Z\x02\x89?O\x9e"\x82\xee\xa2tS*=S'i\x1dl\x8e2,d\x00&ca6N\xa3F\xb7?}\xb3-\xacm\x90\xa2\x95\xa2\xce\xcf\xda\x82\xe7\x074\x19\x96\xe9\xb8!\xaa)~\xa68\xbe\x8e)J!fy\x1f\xb3\xc3\xb5\x09g\xde\xd6\xd4\x07F\xf3*\xda\xe6"7`\xcb\x81\xb6\x0f\xa0\x0f\xe9\xc8\x95\x7f\xbfU\x91\x05z\xcf=\x15\xc0o\xde\x09\x94\x01\x83\xd74\x1b\xcc@\xa5\xf0\xb8\x9bg\xd5\x98\x91;\xa7\x84x\x95&\xa4Z\x08\xf8+t\xb4\x00\x04<\xdf\xb8\x14\x8e\xe8\xdf\xa9\x8dlg\x923\x1d\xc0\xb7\xd2\xec\x92\xc8\xbe\x09\xbf,)\x05o\x02k\x9e\xef\xbc\xbf*\xbc[\xc0P\x8fApq\x87\xb2M\xb7\x04\xa9\x84\xa32\xaf\xae\xeek\x17\x8b\xb2\xb1\xfel\xe1\x90\x8c\x88\xa8\x97H\xce\xc8M\xcb\xf3\x06\xcf_j\x0aB\xb1\x1e\x1ew/\x8e\xa0\xe6\x92\x0e\x06\xfc\x05"\xd2&\xe11Q}2\xdc\x0f\x02\x03\x01\x00\x01\xa3#0!0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00_4\x81v\xef\x96\x1d\xd5\xe5\xb5\xd9\x02c\x84\x16\xc1\xae\xa0pQ\xa7\xf7LG5\xc8\x0b\xd7(=\x89q\xd9\xaa3A\xea\x14\x1bl!\x00\xc0lB\x19~\x9fi[ B\xdf\xa2\xd2\xda\xc4|\x97K\x8d\xb0\xe8\xac\xc8\xee\xa5i\x04\x99\x0a\x92\xa6\xab'.\x1aM\x81\xbf\x84\xd4p\x1e\xadG\xfe\xfdJ\x9d3\xe0\xf2\xb9\xc4E\x08!\x0a\xdaiisr\x0d\xbe4\xfe\x94\x8b\xad\xc3\x1e5\xd7\xa2\x83\xef\xe58\xc7\xa5\x85\x1f\xab\xcf4\xec?(\xfe\x0c\xf1W\x86N\xc9U\xf7\x1c\xd4\xd8\xa5}\x06zo\xd5\xdf\x10\xdf\x81N!e\xb1\xb6\xe1\x17y\x95E\x06\xce_\xcc\xdcF\x89chD\x8d\x93\xf4dp\xa0=\x9d(\x05\xc39p\xb8b{ \xfd\xe4\xdb\xe9\x08\xa1\xb8\x9e=\x09\xc7O\xfb,\xf8\x93vA\xdeR\xe0\xe1W\xd2\x9d\x03\xbcw\x9e\xfe\x9e)^\xf7\xc1Q`\x1f\xde\xda\x0b\xb2-u\xb7CH\x93\xe7\xf6y\xc6\x84]\x80Y`\x94\xfcx\x98\x8f<\x93Q\xed@\x90\x07\xdfdc$\xcbNq\x05\xa1\xd7\x94\x1a\x882\xf1"t"\xae\xa5\xa6\xd8\x12iL`\xa3\x02\xee+\xec\xd4c\x92\x0b^\xbe/vk\xa3\xb6&\xbc\x8f\x03\xd8\x0a\xf2LdF\xbd9b\xe5\x96\xeb4c\x11(\xcc\x95\xf1\xad\xef\xef\xdc\x80XH\xe9K\xb8\xeae\xac\xe9\xfc\x80\xb5\xb5\xc8E\xf9\xac\xc1\x9f\xd9\xb9\xeab\x88\x8e\xc4\xf1K\x83\x12\xad\xe6\x8b\x84\xd6\x9e\xc2\xeb\x83\x18\x9fj\xbb\x1b$`3p\xcc\xec\xf72\xf3\\xd9y}\xef\x9e\xa4\xfe\xc9#\xc3$\xee\x15\x92\xb1=\x91O&\x86\xbdfs$\x13\xea\xa4\xaec\xc1\xad}\x84\x03<\x10x\x86\x1by\xe3\xc4\xf3\xf2\x04\x95 \xae#\x82\xc4\xb3:\x00b\xbf\xe66$\xe1W\xba\xc7\x1e\x90u\xd5_?\x95a+\xc1;\xcd\xe5\xb3ha\xd0F&\xa9!Ri-\xeb.\xc7\xebw\xce\xa6:\xb5\x033Ov\xd1\xe7\T\x01]\xcbx\xf4\xc9\x0c\xbf\xcf\x12\x8e\x17-#h\x94\xe7\xab\xfe\xa9\xb2+\x06\xd0\x04\xcd", + ["CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R5"] = "0\x82\x02\x1e0\x82\x01\xa4\xa0\x03\x02\x01\x02\x02\x11`YI\xe0&.\xbbU\xf9\x0aw\x8aq\xf9J\xd8l0\x0a\x06\x08*\x86H\xce=\x04\x03\x030P1$0"\x06\x03U\x04\x0b\x13\x1bGlobalSign ECC Root CA - R51\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0\x1e\x17\x0d121113000000Z\x17\x0d380119031407Z0P1$0"\x06\x03U\x04\x0b\x13\x1bGlobalSign ECC Root CA - R51\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0v0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00"\x03b\x00\x04GE\x0e\x96\xfb}]\xbf\xe99\xd1!\xf8\x9f\x0b\xb6\xd5{\x1e\x92:HY\x1c\xf0b1-\xc0z(\xfe\x1a\xa7\\xb3\xb6\xcc\x97\xe7E\xd4X\xfa\xd1wmC\xa2\xc0\x87e4\x0a\x1fz\xdd\xeb<3\xa1\xc5\x9dM\xa4oA\x958\x7f\xc9\x1e\x84\xeb\xd1\x9eI\x92\x87\x94\x87\x0c:\x85Jf\x9f\x9dY\x93M\x97a\x06\x86J\xa3B0@0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14=\xe6)H\x9b\xea\x07\xca!DJ&\xden\xde\xd2\x83\xd0\x9fY0\x0a\x06\x08*\x86H\xce=\x04\x03\x03\x03h\x000e\x021\x00\xe5i\x12\xc9n\xdb\xc61\xba\x09A\xe1\x97\xf8\xfb\xfd\x9a\xe2}\x12\xc9\xed|d\xd3\xcb\x05%\x8bV\xd9\xa0\xe7^]N\x0b\x83\x9c[v)\xa0\x09&!jb\x020q\xd2\xb5\x8f\\xea;\xe1x\x09\x85\xa8u\x92;\xc8\\xfdH\xef\x0dt"\xa8\x08\xe2n\xc5I\xce\xc7\x0c\xbc\xa7ai\xf1\xf7;\xe1*\xcb\xf9+\xf3f\x907", + ["CN=D-TRUST Root Class 3 CA 2 2009,O=D-Trust GmbH,C=DE"] = "0\x82\x0430\x82\x03\x1b\xa0\x03\x02\x01\x02\x02\x03\x09\x83\xf30\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x000M1\x0b0\x09\x06\x03U\x04\x06\x13\x02DE1\x150\x13\x06\x03U\x04\x0a\x0c\x0cD-Trust GmbH1'0%\x06\x03U\x04\x03\x0c\x1eD-TRUST Root Class 3 CA 2 20090\x1e\x17\x0d091105083558Z\x17\x0d291105083558Z0M1\x0b0\x09\x06\x03U\x04\x06\x13\x02DE1\x150\x13\x06\x03U\x04\x0a\x0c\x0cD-Trust GmbH1'0%\x06\x03U\x04\x03\x0c\x1eD-TRUST Root Class 3 CA 2 20090\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xd3\xb2J\xcfzG\xefu\x9b#\xfa:/\xd6PE\x895:\xc6k\xdb\xfe\xdb\x00h\xa8\xe0\x03\x11\x1d7P\x08\x9fMJh\x945\xb3S\xd1\x94c\xa7 V\xaf\xdeQx\xec*=\xf3HHP>\x0a\xdfFU\x8b'm\xc3\x10M\x0d\x91RC\xd8\x87\xe0]N6\xb5!\xca_9@\x04_[~\xcc\xa3\xc6+\xa9@\x1e\xd96\x84\xd6H\xf3\x92\x1e4F $\xc1\xa4Q\x8eJ\x1a\xefP?i]\x19\x7fE\xc3\xc7\x01\x8fQ\xc9#\xe8r\xae\xb4\xbcV\x09\x7f\x12\xcb\x1c\xb1\xaf)\x90\x0a\xc9U\xcc\x0f\xd3\xb4\x1a\xedG5ZJ\xed\x9cs\x04!\xd0\xaa\xbd\x0c\x13\xb5\x00\xca&l\xc4k\x0c\x94Z\x95\x94\xdaP\x9a\xf1\xff\xa5+f1\xa4\xc98\xa0\xdf\x1d\x1f\xb8\x09.\xf3\xa7\xe8gR\xab\x95\x1f\xe0F>\xd8\xa4\xc3\xcaZ\xc51\x80\xe8H\x9a\x9f\x94i\xfe\x19\xdd\xd8s|\x81\xca\x96\xde\x8e\xed\xb32\x05e\x844\xe6\xe6\xfdW\x10\xb5_v\xbf/\xb0\x10\x0d\xc5\x02\x03\x01\x00\x01\xa3\x82\x01\x1a0\x82\x01\x160\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xfd\xda\x14\xc4\x9f0\xde!\xbd\x1eB9\xfc\xabc#I\xe0\xf1\x840\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x81\xd3\x06\x03U\x1d\x1f\x04\x81\xcb0\x81\xc80\x81\x80\xa0~\xa0|\x86zldap://directory.d-trust.net/CN=D-TRUST%20Root%20Class%203%20CA%202%202009,O=D-Trust%20GmbH,C=DE?certificaterevocationlist0C\xa0A\xa0?\x86=http://www.d-trust.net/crl/d-trust_root_class_3_ca_2_2009.crl0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x7f\x97\xdb0\xc8\xdf\xa4\x9c}!z\x80p\xce\x14\x12i\x88\x14\x95`D\x01\xac\xb2\xe90O\x9bP\xc2f\xd8~\x8d0\xb5p1\xe9\xe2i\xc7\xf3p\xdb \x15\x86\xd0\x0d\xf0\xbe\xac\x01u\x84\xce~\x9fM\xbf\xb7`;\x9c\xf3\xca\x1d\xe2^h\xd8\xa3\x9d\x97\xe5@`\xd26!\xfe\xd0\xb4\xb8\x17\xdat\xa3\x7f\xd4\xdf\xb0\x98\x02\xacokk,%$r\xa1e\xee%Z\xe5\xe62\xe7\xf2\xdf\xabI\xfa\xf3\x90i#\xdb\x04\xd9\xe7\X\xfce\xd4\x97\xbe\xcc\xfc.\x0a\xcc%*5\x04\xf8`\x91\x15u=A\xff#\x1f\x19\xc8l\xeb\x82S\x04\xa6\xe4L"M\x8d\x8c\xba\xce[s\xecdTPm\xd1\x9cU\xfbi\xc36\xc3\x8c\xbc<\x85\xa6k\x0a&\x0d\xe0\x93\x98`\xae~\xc6$\x97\x8aa_\x91\x8ef\x92\x09\x876\xcd\x8b\x9b->\xf6Q\xd4P\xd4Y(\xbd\x83\xf2\xcc({S\x86m\xd8&\x88p\xd7\xea\x91\xcd>\xb9\xca\xc0\x90nZ\xc6^te\xd7\\xfe\xa3\xe2", + ["CN=Hellenic Academic and Research Institutions RootCA 2011,O=Hellenic Academic and Research Institutions Cert. Authority,C=GR"] = "0\x82\x0410\x82\x03\x19\xa0\x03\x02\x01\x02\x02\x01\x000\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\x951\x0b0\x09\x06\x03U\x04\x06\x13\x02GR1D0B\x06\x03U\x04\x0a\x13;Hellenic Academic and Research Institutions Cert. Authority1@0>\x06\x03U\x04\x03\x137Hellenic Academic and Research Institutions RootCA 20110\x1e\x17\x0d111206134952Z\x17\x0d311201134952Z0\x81\x951\x0b0\x09\x06\x03U\x04\x06\x13\x02GR1D0B\x06\x03U\x04\x0a\x13;Hellenic Academic and Research Institutions Cert. Authority1@0>\x06\x03U\x04\x03\x137Hellenic Academic and Research Institutions RootCA 20110\x82\x01"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\x0a\x02\x82\x01\x01\x00\xa9S\x00\xe3.\xa6\xf6\x8e\xfa`\xd8-\x95>\xf8,*TN\xcd\xb9\x84a\x94XO\x8f=\x8b\xe4C\xf3u\x89\x8dQ\xe4\xc37\xd2\x8a\x88My\x1e\xb7\x12\xddCxJ\x8a\x92\xe6\xd7H\xd5\x0f\xa4:)D5\xb8\x07\xf6h\x1dU\xcd8Q\xf0\x8c$1\x85\xaf\x83\xc9}\xe9w\xaf\xed\x1a{\x9d\x17\xf9\xb3\x9d8P\x0f\xa6Zy\x91\x80\xaf7\xae\xa6\xd31\xfb\xb5&\x09\x9d\xa0<0\x05\x82\x03.gr0\x05\x82\x03.eu0\x06\x82\x04.edu0\x06\x82\x04.org0\x05\x81\x03.gr0\x05\x81\x03.eu0\x06\x81\x04.edu0\x06\x81\x04.org0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x1f\xefyA\xe1{n?\xb2\x8c\x867BJN\x1c7\x1e\x8df\xba$\x81\xc9O\x12\x0f!\xc0\x03\x97\x86%m]\xd3")\xa8l\xa2\x0d\xa9\xeb=\x06[\x99:\xc7\xcc\xc3\x9a4\x7f\xab\x0e\xc8N\x1c\xe1\xfa\xe4\xdc\xcd\x0d\xbe\xbf$\xfel\xe7k\xc2\x0d\xc8\x06\x9eN\x8da(\xa6j\xfd\xe5\xf6b\xea\x18\xe3\x88\xe3\x80I%\xc8\x97\xb5\x9d\x9a\x99M\xb0<\xf8J\x00\x9bd\xdd\x9f9K\xd1'\xd7\xb8", + ["CN=Chambers of Commerce Root - 2008,O=AC Camerfirma S.A.,serialNumber=A82743287,L=Madrid (see current address at www.camerfirma.com/address),C=EU"] = "0\x82\x07O0\x82\x057\xa0\x03\x02\x01\x02\x02\x09\x00\xa3\xdaB~\xa4\xb1\xae\xda0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000\x81\xae1\x0b0\x09\x06\x03U\x04\x06\x13\x02EU1C0A\x06\x03U\x04\x07\x13:Madrid (see current address at www.camerfirma.com/address)1\x120\x10\x06\x03U\x04\x05\x13\x09A827432871\x1b0\x19\x06\x03U\x04\x0a\x13\x12AC Camerfirma S.A.1)0'\x06\x03U\x04\x03\x13 Chambers of Commerce Root - 20080\x1e\x17\x0d080801122950Z\x17\x0d380731122950Z0\x81\xae1\x0b0\x09\x06\x03U\x04\x06\x13\x02EU1C0A\x06\x03U\x04\x07\x13:Madrid (see current address at www.camerfirma.com/address)1\x120\x10\x06\x03U\x04\x05\x13\x09A827432871\x1b0\x19\x06\x03U\x04\x0a\x13\x12AC Camerfirma S.A.1)0'\x06\x03U\x04\x03\x13 Chambers of Commerce Root - 20080\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xaf\x00\xcbp7+\x80ZJ:lx\x94}\xa3\x7f\x1a\x1f\xf65\xd5\xbd\xdb\xcb\x0dDr>&\xb2\x90R\xbac;(Xo\xa5\xb3m\x94\xa6\xf3\xddd\x0cU\xf6\xf6\xe7\xf2""\x80^\xe1b\xc6\xb6)\xe1\x81l\xf2\xbf\xe5}2jT\xa02\x19Y\xfe\x1f\x8b\xd7=`\x86\x85$o\xe3\x11\xb3w> \x965!k\xb3\x08\xd9p.d\xf7\x84\x92S\xd6\x0e\xb0\x90\x8a\x8a\xe3\x87\x8d\x06\xd3\xbd\x90\x0e\xe2\x99\xa1\x1b\x86\x0e\xda\x9a\x0a\xbb\x0baP\x06R\xf1\x9e\x7fv\xec\xcb\x0f\xd0\x1e\x0d\xcf\x990=\x1c\xc4E\x10X\xac\xd6\xd3\xe8\xd7\xe5\xea\xc5\x01\x07w\xd6Q\xe6\x03\x7f\x8aH\xa5Mhu\xb9\xe9\xbc\x9eN\x19q\xf52K\x9cm`\x19\x0b\xfb\xcc\x9du\xdc\xbf&\xcd\x8f\x93x9ys^%\x0e\xca\\xebw\x12\x07\xcbdAGr\x93\xabP\xc3\xeb\x09vd4\xd29\xb7v\x11\x09\x0dvE\xc4\xa9\xae=j\xaf\xb5}e/\x94X\x10\xec\|\xaf~\xe2\xb6\x18\xd9\xd0\x9bNZI\xdf\xa9f\x0b\xcc<\xc6x|\xa7\x9c\x1d\xe3\xce\x8eS\xbe\x05\xde`\x0fk\xe5\x1a\xdb?\xe3\xe1!\xc9)\xc1\xf1\xeb\x07\x9cR\x1b\x01DQ<{%\xd7\xc4\xe5RT]%\x07\xca\x16 \xb8\xad\xe4A\xeez\x08\xfe\x99o\x83\xa6\x91\x02\xb0l6Uj\xe7}\xf5\x96\xe6\xca\x81\xd6\x97\xf1\x94\x83\xe9\xed\xb0\xb1k\x12i\x1e\xac\xfb]\xa9\xc5\x98\xe9\xb4[Xz\xbe=\xa2D:cY\xd4\x0b%\xde\x1bO\xbd\xe5\x01\x9e\xcd\xd2)\xd5\x9f\x17\x19\x0ao\xbf\x0c\x90\xd3\x09_\xd9\xe3\x8a5\xccyZM\x197\x92\xb7\xc4\xc1\xad\xaf\xf4y$\x9a\xb2\x01\x0b\xb1\xaf\\x96\xf3\x802\xfb\=\x98\xf1\xa0?J\xde\xbe\xaf\x94.\xd9U\x9a\x17n`\x9dcl\xb8c\xc9\xae\x81\\x185\xe0\x90\xbb\xbeM7C\x0d\x92\x15\x9c\x18"\xcdQ\x99\xa0)\x1a<_\x8a23[0\xc7\x89/G\x98\x0f\xa3\x03\xc6\xf6\xf1\xac\xdf2\xf0\xd9\x81\x1a\xe4\x9c\xbd\xf6\x80\x14\xf0\xd1,\xb9\x85\xf5\xd8\xa3\xb1\xc8\xa5!\xe5\x1c\x13\x97\xee\x0e\xbd\xdf)\xa9\xef4S[\xd3\xe4j\x13\x84\x06\xb62\x02\xc4R\xae"\xd2\xdc\xb2!B\x1a\xda@\xf0)\xc9\xec\x0a\x0c\\xe2\xd0\xba\xccH\xd37\x0a\xcc\x12\x0a\x8ay\xb0=\x03\x7fiK\xf44 }\xb34\xea\x8eKd\xf5>\xfd\xb3#g\x15\x0d\x04\xb8\xf0-\xc1\x09Q<\xb2l\x15\xf0\xa5#\xd7\x83t\xe4\xe5.\xc9\xfe\x98'B\xc6\xab\xc6\x9e\xb0\xd0[8\xa5\x9bP\xde~\x18\x98\xb5E;\xf6y\xb4\xe8\xf7\x1a{\x06\x83\xfb\xd0\x8b\xda\xbb\xc7\xbd\x18\xab\x08o<\x80k@?\x19\x19\xbae\x8a\xe6\xbe\xd5\\xd36\xd7\xef@R$`8g\x041\xec\x8f\xf3\x82\xc6\xde\xb9U\xf3;1\x91Z\xdc\xb5\x08\x15\xadv%\x0a\x0d{.\x87\xe2\x0c\xa6\x06\xbc&\x10m7\x9d\xec\xddx\x8c|\x80\xc5\xf0\xd9wH\xd0", + ["CN=GeoTrust Universal CA,O=GeoTrust Inc.,C=US"] = "0\x82\x05h0\x82\x03P\xa0\x03\x02\x01\x02\x02\x01\x010\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x000E1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1\x1e0\x1c\x06\x03U\x04\x03\x13\x15GeoTrust Universal CA0\x1e\x17\x0d040304050000Z\x17\x0d290304050000Z0E1\x0b0\x09\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\x0a\x13\x0dGeoTrust Inc.1\x1e0\x1c\x06\x03U\x04\x03\x13\x15GeoTrust Universal CA0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\xa6\x15U\xa0\xa3\xc6\xe0\x1f\x8c\x9d!P\xd7\xc1\xbe+[\xb5\xa4\x9e\xa1\xd9rX\xbd\x00\x1bL\xbfa\xc9\x14\x1dE\x82\xab\xc6\x1d\x80\xd6=\xeb\x10\x9c:\xafm$\xf8\xbcq\x01\x9e\x06\xf5|_\x1e\xc1\x0eU\xca\x83\x9aY0\xae\x19\xcb0H\x95\xed"7\x8d\xf4J\x9arf>\xad\x95\xc0\xe0\x16\x00\xe0\x10\x1f+1\x0e\xd7\x94T\xd3B3\xa04\x1d\x1eEv\xddO\xca\x187\xec\x85\x15z\x19\x08\xfc\xd5\xc7\x9c\xf0\xf2\xa9.\x10\xa9\x92\xe6=X=\xa9\x16h\xe7\xd2\x09\x0d5\x94\xdd\x80NS\x97\xd7\xb5\x09D d\x16\x17\x03\x02LS\x0dh\xde\xd5\xaarM\x93m\x82\x0e\xdb\x9c\xbd\xcf\xb4\xf3\]Tzi\x09\x96\xd6\xdb\x11\xc1\x8du\xa8\xb4\xcf9\xc8\xce<\xbc$|\xe6b\xca\xe1\xbd}\xa7\xbdWe\x0b\xe4\xfe%\xed\xb6i\x10\xdc(\x1aF\xbd\x01\x1d\xd0\x97\xb5\xe1\x98;\xc07d\xd6=\x94\xee\x0b\xe1\xf5(\xae\x0bV\xbfq\x8b#)A\x8e\x86\xc5KR{\xd8q\xab\x1f\x8a\x15\xa6;\x83Z\xd7X\x01Q\xc6LA\xd9\x7f\xd8Agr\xa2(\xdf`\x83\xa9\x9e\xc8{\xfcSsrY\xf5\x93z\x17v\x0e\xce\xf7\xe5\\xd9\x0bU4\xa2\xaa[\xb5jT\xe7\x13\xcaW\xec\x97m\xf4^\x06/E\x8bX\xd4#\x16\x92\xe4\x16n(cY0\xdfP\x01\x9cc\x89\x1a\x9f\xdb\x17\x94\x82p7\xc3$\x9e\x9aG\xd6Z\xcaN\xa8i\x89r\x1f\x91l\xdb~\x9e\x1b\xad\xc7\x1fs\xdd,O\x19e\xfd\x7f\x93@\x10.\xd2\xf0\xed<\x9e.(>i&3\xc5{\x02\x03\x01\x00\x01\xa3c0a0\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xda\xbb.\xaa\xb0\x0c\xb8\x88&Qt\m\x03\xd3\xc0\xd8\x8fz\xd60\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xda\xbb.\xaa\xb0\x0c\xb8\x88&Qt\m\x03\xd3\xc0\xd8\x8fz\xd60\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x860\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x02\x01\x001x\xe6\xc7\xb5\xdf\xb8\x94@\xc9q\xc4\xa85\xecF\x1d\xc2\x85\xf3(X\x86\xb0\x0b\xfc\x8e\xb29\x8fDU\xabd\x84\i\xa9\xd0\x9a8<\xfa\xe5\x1f5\xe5D\xe3\x80y\x94h\xa4\xbb\xc4\x9f=\xe14\xcd0F\x8bT+\x95\xa5\xef\xf7?\x99\x84\xfd5\xe6\xcf1\xc6\xdcj\xbf\xa7\xd7#\x08\xe1\x98^\xc3Z\x08v\xa9\xa6\xafw/\xb7`\xbdDFj\xef\x97\xffs\x95\xc1\x8e\xe8\x93\xfb\xfd1\xb7\xecW\x11\x11E\x9b0\xf1\x1a\x889\xc1O<\xa7\x00\xd5\xc7\xfc\xabm\x80"p\xa5\x0c\xe0]\x04)\x02\xfb\xcb\xa0\x91\xd1|\xd6\xc3~P\xd5\x9dX\xbeA8\xeb\xb9u<\x15\xd9\x9b\xc9J\x83Y\xc0\xdaS\xfd3\xbb6\x18\x9b\x85\x0f\x15\xdd\xee-\xacv\x93\xb9\xd9\x01\x8dH\x10\xa8\xfb\xf58\x86\xf1\xdb\x0a\xc6\xbd\x84\xa3#A\xde\xd6wo\x85\xd4\x85\x1cP\xe0\xaeQ\x8a\xba\x8d>v\xe2\xb9\xca'\xf2_\x9f\xefnY\x0d\x06\xd8+\x17\xa4\xd2|k\xbb_\x14\x1aH\x8f\x1aL\xe7\xb3G\x1c\x8eLE+ \xeeH\xdf\xe7\xdd\x09\x8e\x18\xa8\xda@\x8d\x92&\x11Sas]\xeb\xbd\xe7\xc4M)7a\xeb\xac9-g.\x16\xd6\xf5\x00\x83\x85\xa1\xcc\x7fv\xc4}\xe4\xb7Kf\xef\x03E`i\xb6\x0cR\x96\x92\x84^\xa6\xa3\xb5\xa4>+\xd9\xcc\xd8\x1bG\xaa\xf2D\xdaO\xf9\x03\xe8\xf0\x14\xcb?\xf3\x83\xde\xd0\xc1T\xe3\xb7\xe8\x0a7M\x8b Y\x030\x19\xa1,\xc8\xbd\x11\x1f\xdf\xae\xc9J\xc5\xf3'ff\x86\xach\x91\xff\xd9\xe6S\x1c\x0f\x8b\ie\x0a&\xc8\x1e4\xc3]Q{\xd7\xa9\x9c\x06\xa16\xdd\xd5\x89\x94\xbc\xd9\xe4-\x0c^\x09l\x08\x97|\xa3=|\x93\xff?\xa1\x14\xa7\xcf\xb5]\xeb\xdb\xdb\x1c\xc4v\xdf\x88\xb9\xbdE\x05\x95\x1b\xae\xfcFjL\xafH\xe3\xce\xae\x0f\xd2~\xeb\xe6l\x9cO\x81jzd\xac\xbb>\xd5\xe7\xcbv.\xc5\xa7H\xc1\\x90\x0f\xcb\xc8?\xfa\xe62\xe1\x8d\x1bo\xa4\xe6\x8e\xd8\xf9)H\x8a\xces\xfe,", + ["CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R6"] = "0\x82\x05\x830\x82\x03k\xa0\x03\x02\x01\x02\x02\x0eE\xe6\xbb\x03\x833\xc3\x85eH\xe6\xffEQ0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x000L1 0\x1e\x06\x03U\x04\x0b\x13\x17GlobalSign Root CA - R61\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0\x1e\x17\x0d141210000000Z\x17\x0d341210000000Z0L1 0\x1e\x06\x03U\x04\x0b\x13\x17GlobalSign Root CA - R61\x130\x11\x06\x03U\x04\x0a\x13\x0aGlobalSign1\x130\x11\x06\x03U\x04\x03\x13\x0aGlobalSign0\x82\x02"0\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x02\x0f\x000\x82\x02\x0a\x02\x82\x02\x01\x00\x95\x07\xe8s\xcaf\xf9\xec\x14\xca{<\xf7\x0d\x08\xf1\xb4E\x0b,\x82\xb4H\xc6\xeb[<\xae\x83\xb8A\x923\x14\xa4o\x7f\xe9*\xcc\xc6\xb0\x88k\xc5\xb6\x89\xd1\xc6\xb2\xff\x14\xceQ\x14!\xecJ\xdd\x1bZ\xc6\xd6\x87\xeeM:\x15\x06\xeddf\x0b\x92\x80\xcaD\xdes\x94N\xf3\xa7\x89\x7fOxc\x08\xc8\x12PmBf/M\xb9y(MR\x1a\x8a\x1a\x80\xb7\x19\x81\x0e~\xc4\x8a\xbcdL!\x1cCh\xd7=<\x8a\xc5\xb2f\xd5\x90\x9a\xb71\x06\xc5\xbe\xe2m2\x06\xa6\x1e\xf9\xb9\xeb\xaa\xa3\xb8\xbf\xbe\x82cP\xd0\xf0\x18\x89\xdf\xe4\x0fy\xf5\xea\xa2\x1f*\xd2p.{\xe7\xbc\x93\xbbmS\xe2H|\x8c\x10\x078\xfff\xb2wa~\xe0\xea\x8c<\xaa\xb4\xa4\xf6\xf3\x95J\x12\x07m\xfd\x8c\xb2\x89\xcf\xd0\xa0aw\xc8Xt\xb0\xd4#:\xf7]:\xca\xa2\xdb\x9d\x09\xde]D-\x90\xf1\x81\xcdW\x92\xfa~\xbcP\x04c4\xdfk\x93\x18\xbek6\xb29\xe4\xac$6\xb7\xf0\xef\xb6\x1c\x13W\x93\xb6\xde\xb2\xf8\xe2\x85\xb7s\xa2\xb85\xaaE\xf2\xe0\x9d6\xa1oT\x8a\xf1rVn.\x88\xc5QBD\x15\x94\xee\xa3\xc58\x96\x9bNNZ\x0bG\xf3\x066Iw0\xbcq7\xe5\xa6\xec!\x08u\xfc\xe6a\x16?w\xd5\xd9\x91\x97\x84\x0al\xd4\x02Mt\xc0\x14\xed\xfd9\xfb\x83\xf2^\x14\xa1\x04\xb0\x0b\xe9\xfe\xee\x8f\xe1n\x0b\xb2\x08\xb3af\x09j\xb1\x06:e\x96Y\xc0\xf05\xfd\xc9\xda(\x8d\x1a\x11\x87p\x81\x0a\xa8\x9au\x1d\x9e:\x86\x05\x00\x9e\xdb\x80\xd6%\xf9\xdc\x05\x9e'YLv9[\xea\xf9\xa5\xa1\xd8\x83\x0f\xd1\xff\xdf0\x11\xf9\x85\xcf3H\xf5\xcamd\x14,zXO\xd3K\x08I\xc5\x95d\x1ac\x0ey=\xf5\xb3\x8c\xcaX\xad\x9cBEyn\x0e\x87\x19\T\xb1e\xb6\xbf\x8c\x9b\xdc\x13\xe9\x0do\xb8.\xdcgn\xc9\x8b\x11\xb5\x84\x14\x8a\x00\x19p\x83y\x91\x97\x91\xd4\x1a'\xbf7\x1e2\x07\xd8\x14c<(L\xaf\x02\x03\x01\x00\x01\xa3c0a0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x060\x0f\x06\x03U\x1d\x13\x01\x01\xff\x04\x050\x03\x01\x01\xff0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xael\x05\xa3\x93\x13\xe2\xa2\xe7\xe2\xd7\x1c\xd6\xc7\xf0\x7f\xc8gS\xa00\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xael\x05\xa3\x93\x13\xe2\xa2\xe7\xe2\xd7\x1c\xd6\xc7\xf0\x7f\xc8gS\xa00\x0d\x06\x09*\x86H\x86\xf7\x0d\x01\x01\x0c\x05\x00\x03\x82\x02\x01\x00\x83%\xed\xe8\xd1\xfd\x95R\xcd\x9e\xc0\x04\xa0\x91i\xe6\\xd0\x84\xde\xdc\xad\xa2O\xe8Gx\xd6e\x98\xa9[\xa8<\x87|\x02\x8a\xd1n\xb7\x16s\xe6_\xc0T\x98\xd5t\xbe\xc1\xcd\xe2\x11\x91\xad#\x18=\xdd\xe1rD\x96\xb4\x95^\xc0{\x8e\x99x\x16C\x13VW\xb3\xa2\xb3;\xb5w\xdc@r\xac\xa3\xeb\x9b5>\xb1\x08!\xa1\xe7\xc4C7y2\xbe\xb5\xe7\x9c,L\xbcC)\x99\x8e0\xd3\xac!\xe0\xe3\x1d\xfa\xd8\x073vT\x00"*\xb9M .ph\xda\xe5S\xfc\x83\\xd3\x9d\xf2\xffD\x0cDf\xf2\xd2\xe3\xbdF\x00\x1am\x02\xba%]\x8d\xa11Q\xddTF\x1cM\xdb\x99\x96\xef\x1a\x1c\x04\\xa6\x15\xefx\xe0y\xfe]\xdb>\xaaLU\xfd\x9a\x15\xa9o\xe1\xa6\xfb\xdfp0\xe9\xc3\xeeBF\xed\xc2\x93\x05\x89\xfa}c{?\xd0q\x81|\x00\xe8\x98\xae\x0ex4\xc3%\xfb\xaf\x0a\x9f k\xdd;\x13\x8f\x12\x8c\xe2A\x1aHzs\xa0wi\xc7\xb6\\x7f\x82\xc8\x1e\xfeX\x1b(+\xa8l\xad^m\xc0\x05\xd2{\xb7\xeb\x80\xfe%7\xfe\x02\x9bh\xacB]\xc3\xee\xf5\xcc\xdc\xf0Pu\xd26i\x9c\xe6{\x04\xdfn\x06i\xb6\xde\x0a\x09HY\x87\xeb{\x14`zd\xaaiC\xef\x91\xc7L\xec\x18\xddl\xefS-\x8c\x99\xe1^\xf2r>\xcfT\xc8\xbdg\xec\xa4\x0fLE\xff\xd3\xb90#\x07L\x8f\x10\xbf\x86\x96\xd9\x99Z\xb4\x99W\x1c\xa4\xcc\xbb\x15\x89S\xba,\x05\x0f\xe4\xc4\x9e\x19\xb1\x184\xd5L\x9d\xba\xed\xf7\x1f\xaf$\x95\x04x\xa8\x03\xbb\xee\x81\xe5\xda_|\x8bJ\xa1\x90t%\xa7\xb3>K\xc8,V\xbd\xc7\xc8\xef8\xe2\\x92\xf0y\xf7\x9c\x84\xbat-a\x01 ~~\xd1\xf2O\x07Y_\x8b-CR\xebF\x0c\x94\xe1\xf5fGyw\xd5T[\x1f\xad$7\xcbEZN\xa0DH\xc8\xd8\xb0\x99\xc5\x15\x84\x09\xf6\xd6II\xc0e\xb8\xe6\x1aqn\xa0\xa8\xf1\x82\xe8E>l\xd6\x02\xd7\x0ag\x83\x05Z\xc9\xa4\x10" + } + + The default root CA bundle. By default, the mozilla-ca-list.bro + script sets this to Mozilla's root CA list. + +Types +##### +.. bro:type:: SSL::CTInfo + + :Type: :bro:type:`record` + + description: :bro:type:`string` + Description of the Log + + operator: :bro:type:`string` + Operator of the Log + + key: :bro:type:`string` + Public key of the Log. + + maximum_merge_delay: :bro:type:`count` + Maximum merge delay of the Log + + url: :bro:type:`string` + URL of the Log + + The record type which contains the field for the Certificate + Transparency log bundle. + +.. bro:type:: SSL::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time when the SSL connection was first detected. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + version_num: :bro:type:`count` :bro:attr:`&optional` + Numeric SSL/TLS version that the server chose. + + version: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + SSL/TLS version that the server chose. + + cipher: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + SSL/TLS cipher suite that the server chose. + + curve: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Elliptic curve the server chose when using ECDH/ECDHE. + + server_name: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Value of the Server Name Indicator SSL/TLS extension. It + indicates the server name that the client was requesting. + + session_id: :bro:type:`string` :bro:attr:`&optional` + Session ID offered by the client for session resumption. + Not used for logging. + + resumed: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Flag to indicate if the session was resumed reusing + the key material exchanged in an earlier connection. + + client_ticket_empty_session_seen: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Flag to indicate if we saw a non-empty session ticket being + sent by the client using an empty session ID. This value + is used to determine if a session is being resumed. It's + not logged. + + client_key_exchange_seen: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Flag to indicate if we saw a client key exchange message sent + by the client. This value is used to determine if a session + is being resumed. It's not logged. + + server_appdata: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Count to track if the server already sent an application data + packet for TLS 1.3. Used to track when a session was established. + + client_appdata: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Flag to track if the client already sent an application data + packet for TLS 1.3. Used to track when a session was established. + + last_alert: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Last alert that was seen during the connection. + + next_protocol: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Next protocol the server chose using the application layer + next protocol extension, if present. + + analyzer_id: :bro:type:`count` :bro:attr:`&optional` + The analyzer ID used for the analyzer instance attached + to each connection. It is not used for logging since it's a + meaningless arbitrary number. + + established: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Flag to indicate if this ssl session has been established + successfully, or if it was aborted during the handshake. + + logged: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + Flag to indicate if this record already has been logged, to + prevent duplicates. + + delay_tokens: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&optional` + + cert_chain: :bro:type:`vector` of :bro:type:`Files::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + Chain of certificates offered by the server to validate its + complete signing chain. + + cert_chain_fuids: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + An ordered vector of all certificate file unique IDs for the + certificates offered by the server. + + client_cert_chain: :bro:type:`vector` of :bro:type:`Files::Info` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + Chain of certificates offered by the client to validate its + complete signing chain. + + client_cert_chain_fuids: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` :bro:attr:`&log` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + An ordered vector of all certificate file unique IDs for the + certificates offered by the client. + + subject: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + Subject of the X.509 certificate offered by the server. + + issuer: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + Subject of the signer of the X.509 certificate offered by the + server. + + client_subject: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + Subject of the X.509 certificate offered by the client. + + client_issuer: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + Subject of the signer of the X.509 certificate offered by the + client. + + server_depth: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + Current number of certificates seen from either side. Used + to create file handles. + + client_depth: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/base/protocols/ssl/files.bro` is loaded) + + + last_originator_heartbeat_request_size: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + last_responder_heartbeat_request_size: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + originator_heartbeats: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + responder_heartbeats: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + heartbleed_detected: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + enc_appdata_packages: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + enc_appdata_bytes: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/heartbleed.bro` is loaded) + + + validation_status: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-certs.bro` is loaded) + + Result of certificate validation for this connection. + + validation_code: :bro:type:`int` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-certs.bro` is loaded) + + Result of certificate validation for this connection, given + as OpenSSL validation code. + + valid_chain: :bro:type:`vector` of :bro:type:`opaque` of x509 :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-certs.bro` is loaded) + + Ordered chain of validated certificate, if validation succeeded. + + ocsp_status: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-ocsp.bro` is loaded) + + Result of ocsp validation for this connection. + + ocsp_response: :bro:type:`string` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-ocsp.bro` is loaded) + + ocsp response as string. + + valid_scts: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-sct.bro` is loaded) + + Number of valid SCTs that were encountered in the connection. + + invalid_scts: :bro:type:`count` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-sct.bro` is loaded) + + Number of SCTs that could not be validated that were encountered in the connection. + + valid_ct_logs: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-sct.bro` is loaded) + + Number of different Logs for which valid SCTs were encountered in the connection. + + valid_ct_operators: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-sct.bro` is loaded) + + Number of different Log operators of which valid SCTs were encountered in the connection. + + valid_ct_operators_list: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-sct.bro` is loaded) + + List of operators for which valid SCTs were encountered in the connection. + + ct_proofs: :bro:type:`vector` of :bro:type:`SSL::SctInfo` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/validate-sct.bro` is loaded) + + Information about all SCTs that were encountered in the connection. + + notary: :bro:type:`CertNotary::Response` :bro:attr:`&log` :bro:attr:`&optional` + (present if :doc:`/scripts/policy/protocols/ssl/notary.bro` is loaded) + + A response from the ICSI certificate notary. + + The record type which contains the fields of the SSL log. + +Events +###### +.. bro:id:: SSL::log_ssl + + :Type: :bro:type:`event` (rec: :bro:type:`SSL::Info`) + + Event that can be handled to access the SSL + record as it is sent on to the logging framework. + +Hooks +##### +.. bro:id:: SSL::ssl_finishing + + :Type: :bro:type:`hook` (c: :bro:type:`connection`) : :bro:type:`bool` + + +Functions +######### +.. bro:id:: SSL::delay_log + + :Type: :bro:type:`function` (info: :bro:type:`SSL::Info`, token: :bro:type:`string`) : :bro:type:`void` + + Delays an SSL record for a specific token: the record will not be + logged as long as the token exists or until 15 seconds elapses. + +.. bro:id:: SSL::undelay_log + + :Type: :bro:type:`function` (info: :bro:type:`SSL::Info`, token: :bro:type:`string`) : :bro:type:`void` + + Undelays an SSL record for a previously inserted token, allowing the + record to be logged. + + diff --git a/doc/scripts/base/protocols/ssl/mozilla-ca-list.bro.rst b/doc/scripts/base/protocols/ssl/mozilla-ca-list.bro.rst new file mode 100644 index 0000000000..4a655c3c04 --- /dev/null +++ b/doc/scripts/base/protocols/ssl/mozilla-ca-list.bro.rst @@ -0,0 +1,22 @@ +:tocdepth: 3 + +base/protocols/ssl/mozilla-ca-list.bro +====================================== +.. bro:namespace:: SSL + + +:Namespace: SSL +:Imports: :doc:`base/protocols/ssl ` + +Summary +~~~~~~~ +Redefinitions +############# +=============================================================== = +:bro:id:`SSL::root_certs`: :bro:type:`table` :bro:attr:`&redef` +=============================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/syslog/__load__.bro.rst b/doc/scripts/base/protocols/syslog/__load__.bro.rst new file mode 100644 index 0000000000..25ab896ecc --- /dev/null +++ b/doc/scripts/base/protocols/syslog/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/syslog/__load__.bro +================================== + + +:Imports: :doc:`base/protocols/syslog/consts.bro `, :doc:`base/protocols/syslog/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/syslog/consts.bro.rst b/doc/scripts/base/protocols/syslog/consts.bro.rst new file mode 100644 index 0000000000..66d9f8db38 --- /dev/null +++ b/doc/scripts/base/protocols/syslog/consts.bro.rst @@ -0,0 +1,83 @@ +:tocdepth: 3 + +base/protocols/syslog/consts.bro +================================ +.. bro:namespace:: Syslog + +Constants definitions for syslog. + +:Namespace: Syslog + +Summary +~~~~~~~ +Constants +######### +===================================================================================================================== ====================================================================== +:bro:id:`Syslog::facility_codes`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between the constants and string values for syslog facilities. +:bro:id:`Syslog::severity_codes`: :bro:type:`table` :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` Mapping between the constants and string values for syslog severities. +===================================================================================================================== ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: Syslog::facility_codes + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "MAIL", + [9] = "CRON", + [17] = "LOCAL1", + [6] = "LPR", + [11] = "FTP", + [14] = "ALERT", + [4] = "AUTH", + [22] = "LOCAL6", + [1] = "USER", + [8] = "UUCP", + [7] = "NEWS", + [15] = "CLOCK", + [23] = "LOCAL7", + [5] = "SYSLOG", + [19] = "LOCAL3", + [10] = "AUTHPRIV", + [0] = "KERN", + [3] = "DAEMON", + [12] = "NTP", + [13] = "AUDIT", + [18] = "LOCAL2", + [21] = "LOCAL5", + [16] = "LOCAL0", + [20] = "LOCAL4" + } + + Mapping between the constants and string values for syslog facilities. + +.. bro:id:: Syslog::severity_codes + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`string` + :Attributes: :bro:attr:`&default` = :bro:type:`function` :bro:attr:`&optional` + :Default: + + :: + + { + [2] = "CRIT", + [6] = "INFO", + [4] = "WARNING", + [1] = "ALERT", + [7] = "DEBUG", + [5] = "NOTICE", + [0] = "EMERG", + [3] = "ERR" + } + + Mapping between the constants and string values for syslog severities. + + diff --git a/doc/scripts/base/protocols/syslog/index.rst b/doc/scripts/base/protocols/syslog/index.rst new file mode 100644 index 0000000000..d81d4ebba1 --- /dev/null +++ b/doc/scripts/base/protocols/syslog/index.rst @@ -0,0 +1,19 @@ +:orphan: + +Package: base/protocols/syslog +============================== + +Support for Syslog protocol analysis. + +:doc:`/scripts/base/protocols/syslog/__load__.bro` + + +:doc:`/scripts/base/protocols/syslog/consts.bro` + + Constants definitions for syslog. + +:doc:`/scripts/base/protocols/syslog/main.bro` + + Core script support for logging syslog messages. This script represents + one syslog message as one logged record. + diff --git a/doc/scripts/base/protocols/syslog/main.bro.rst b/doc/scripts/base/protocols/syslog/main.bro.rst new file mode 100644 index 0000000000..4e110991ea --- /dev/null +++ b/doc/scripts/base/protocols/syslog/main.bro.rst @@ -0,0 +1,61 @@ +:tocdepth: 3 + +base/protocols/syslog/main.bro +============================== +.. bro:namespace:: Syslog + +Core script support for logging syslog messages. This script represents +one syslog message as one logged record. + +:Namespace: Syslog +:Imports: :doc:`base/protocols/syslog/consts.bro ` + +Summary +~~~~~~~ +Types +##### +============================================ ============================================================ +:bro:type:`Syslog::Info`: :bro:type:`record` The record type which contains the fields of the syslog log. +============================================ ============================================================ + +Redefinitions +############# +================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`connection`: :bro:type:`record` +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Syslog::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp when the syslog message was seen. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + The connection's 4-tuple of endpoint addresses/ports. + + proto: :bro:type:`transport_proto` :bro:attr:`&log` + Protocol over which the message was seen. + + facility: :bro:type:`string` :bro:attr:`&log` + Syslog facility for the message. + + severity: :bro:type:`string` :bro:attr:`&log` + Syslog severity for the message. + + message: :bro:type:`string` :bro:attr:`&log` + The plain text message. + + The record type which contains the fields of the syslog log. + + diff --git a/doc/scripts/base/protocols/tunnels/__load__.bro.rst b/doc/scripts/base/protocols/tunnels/__load__.bro.rst new file mode 100644 index 0000000000..f487872242 --- /dev/null +++ b/doc/scripts/base/protocols/tunnels/__load__.bro.rst @@ -0,0 +1,13 @@ +:tocdepth: 3 + +base/protocols/tunnels/__load__.bro +=================================== + + + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/tunnels/index.rst b/doc/scripts/base/protocols/tunnels/index.rst new file mode 100644 index 0000000000..74fd98c8e5 --- /dev/null +++ b/doc/scripts/base/protocols/tunnels/index.rst @@ -0,0 +1,11 @@ +:orphan: + +Package: base/protocols/tunnels +=============================== + +Provides DPD signatures for tunneling protocols that otherwise +wouldn't be detected at all. + +:doc:`/scripts/base/protocols/tunnels/__load__.bro` + + diff --git a/doc/scripts/base/protocols/xmpp/__load__.bro.rst b/doc/scripts/base/protocols/xmpp/__load__.bro.rst new file mode 100644 index 0000000000..b6f2ec9d3e --- /dev/null +++ b/doc/scripts/base/protocols/xmpp/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +base/protocols/xmpp/__load__.bro +================================ + + +:Imports: :doc:`base/protocols/xmpp/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/protocols/xmpp/index.rst b/doc/scripts/base/protocols/xmpp/index.rst new file mode 100644 index 0000000000..184e8f6e29 --- /dev/null +++ b/doc/scripts/base/protocols/xmpp/index.rst @@ -0,0 +1,17 @@ +:orphan: + +Package: base/protocols/xmpp +============================ + +Support for the Extensible Messaging and Presence Protocol (XMPP). + +Note that currently the XMPP analyzer only supports analyzing XMPP sessions +until they do or do not switch to TLS using StartTLS. Hence, we do not get +actual chat information from XMPP sessions, only X509 certificates. + +:doc:`/scripts/base/protocols/xmpp/__load__.bro` + + +:doc:`/scripts/base/protocols/xmpp/main.bro` + + diff --git a/doc/scripts/base/protocols/xmpp/main.bro.rst b/doc/scripts/base/protocols/xmpp/main.bro.rst new file mode 100644 index 0000000000..e52fb58010 --- /dev/null +++ b/doc/scripts/base/protocols/xmpp/main.bro.rst @@ -0,0 +1,21 @@ +:tocdepth: 3 + +base/protocols/xmpp/main.bro +============================ +.. bro:namespace:: XMPP + + +:Namespace: XMPP + +Summary +~~~~~~~ +Redefinitions +############# +================================================================= = +:bro:id:`likely_server_ports`: :bro:type:`set` :bro:attr:`&redef` +================================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/base/utils/active-http.bro.rst b/doc/scripts/base/utils/active-http.bro.rst new file mode 100644 index 0000000000..f68dcad5f6 --- /dev/null +++ b/doc/scripts/base/utils/active-http.bro.rst @@ -0,0 +1,116 @@ +:tocdepth: 3 + +base/utils/active-http.bro +========================== +.. bro:namespace:: ActiveHTTP + +A module for performing active HTTP requests and +getting the reply at runtime. + +:Namespace: ActiveHTTP +:Imports: :doc:`base/utils/exec.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +=============================================================================== ================================================= +:bro:id:`ActiveHTTP::default_max_time`: :bro:type:`interval` :bro:attr:`&redef` The default timeout for HTTP requests. +:bro:id:`ActiveHTTP::default_method`: :bro:type:`string` :bro:attr:`&redef` The default HTTP method/verb to use for requests. +=============================================================================== ================================================= + +Types +##### +==================================================== = +:bro:type:`ActiveHTTP::Request`: :bro:type:`record` +:bro:type:`ActiveHTTP::Response`: :bro:type:`record` +==================================================== = + +Functions +######### +=================================================== ======================================== +:bro:id:`ActiveHTTP::request`: :bro:type:`function` Perform an HTTP request according to the + :bro:type:`ActiveHTTP::Request` record. +=================================================== ======================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: ActiveHTTP::default_max_time + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 min`` + + The default timeout for HTTP requests. + +.. bro:id:: ActiveHTTP::default_method + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"GET"`` + + The default HTTP method/verb to use for requests. + +Types +##### +.. bro:type:: ActiveHTTP::Request + + :Type: :bro:type:`record` + + url: :bro:type:`string` + The URL being requested. + + method: :bro:type:`string` :bro:attr:`&default` = :bro:see:`ActiveHTTP::default_method` :bro:attr:`&optional` + The HTTP method/verb to use for the request. + + client_data: :bro:type:`string` :bro:attr:`&optional` + Data to send to the server in the client body. Keep in + mind that you will probably need to set the *method* field + to "POST" or "PUT". + + max_time: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`ActiveHTTP::default_max_time` :bro:attr:`&optional` + Timeout for the request. + + addl_curl_args: :bro:type:`string` :bro:attr:`&optional` + Additional curl command line arguments. Be very careful + with this option since shell injection could take place + if careful handling of untrusted data is not applied. + + +.. bro:type:: ActiveHTTP::Response + + :Type: :bro:type:`record` + + code: :bro:type:`count` + Numeric response code from the server. + + msg: :bro:type:`string` + String response message from the server. + + body: :bro:type:`string` :bro:attr:`&optional` + Full body of the response. + + headers: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` :bro:attr:`&optional` + All headers returned by the server. + + +Functions +######### +.. bro:id:: ActiveHTTP::request + + :Type: :bro:type:`function` (req: :bro:type:`ActiveHTTP::Request`) : :bro:type:`ActiveHTTP::Response` + + Perform an HTTP request according to the + :bro:type:`ActiveHTTP::Request` record. This is an asynchronous + function and must be called within a "when" statement. + + + :req: A record instance representing all options for an HTTP request. + + + :returns: A record with the full response message. + + diff --git a/doc/scripts/base/utils/addrs.bro.rst b/doc/scripts/base/utils/addrs.bro.rst new file mode 100644 index 0000000000..db1df18bed --- /dev/null +++ b/doc/scripts/base/utils/addrs.bro.rst @@ -0,0 +1,190 @@ +:tocdepth: 3 + +base/utils/addrs.bro +==================== + +Functions for parsing and manipulating IP and MAC addresses. + + +Summary +~~~~~~~ +Constants +######### +============================================================ = +:bro:id:`ip_addr_regex`: :bro:type:`pattern` +:bro:id:`ipv4_addr_regex`: :bro:type:`pattern` +:bro:id:`ipv6_8hex_regex`: :bro:type:`pattern` +:bro:id:`ipv6_addr_regex`: :bro:type:`pattern` +:bro:id:`ipv6_compressed_hex4dec_regex`: :bro:type:`pattern` +:bro:id:`ipv6_compressed_hex_regex`: :bro:type:`pattern` +:bro:id:`ipv6_hex4dec_regex`: :bro:type:`pattern` +============================================================ = + +Functions +######### +========================================================================= ========================================================================= +:bro:id:`addr_to_uri`: :bro:type:`function` Returns the string representation of an IP address suitable for inclusion + in a URI. +:bro:id:`extract_ip_addresses`: :bro:type:`function` Extracts all IP (v4 or v6) address strings from a given string. +:bro:id:`find_ip_addresses`: :bro:type:`function` :bro:attr:`&deprecated` Extracts all IP (v4 or v6) address strings from a given string. +:bro:id:`has_valid_octets`: :bro:type:`function` Checks if all elements of a string array are a valid octet value. +:bro:id:`is_valid_ip`: :bro:type:`function` Checks if a string appears to be a valid IPv4 or IPv6 address. +:bro:id:`normalize_mac`: :bro:type:`function` Given a string, extracts the hex digits and returns a MAC address in + the format: 00:a0:32:d7:81:8f. +========================================================================= ========================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: ip_addr_regex + + :Type: :bro:type:`pattern` + :Default: + + :: + + /^?((^?((^?((^?((^?([[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3})$?)|(^?(([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})$?))$?)|(^?((([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})*)?)::(([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})*)?))$?))$?)|(^?((([0-9A-Fa-f]{1,4}:){6,6})([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+))$?))$?)|(^?((([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})*)?)::(([0-9A-Fa-f]{1,4}:)*)([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+))$?))$?/ + + +.. bro:id:: ipv4_addr_regex + + :Type: :bro:type:`pattern` + :Default: + + :: + + /^?([[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3})$?/ + + +.. bro:id:: ipv6_8hex_regex + + :Type: :bro:type:`pattern` + :Default: + + :: + + /^?(([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})$?/ + + +.. bro:id:: ipv6_addr_regex + + :Type: :bro:type:`pattern` + :Default: + + :: + + /^?((^?((^?((^?(([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})$?)|(^?((([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})*)?)::(([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})*)?))$?))$?)|(^?((([0-9A-Fa-f]{1,4}:){6,6})([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+))$?))$?)|(^?((([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})*)?)::(([0-9A-Fa-f]{1,4}:)*)([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+))$?))$?/ + + +.. bro:id:: ipv6_compressed_hex4dec_regex + + :Type: :bro:type:`pattern` + :Default: + + :: + + /^?((([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})*)?)::(([0-9A-Fa-f]{1,4}:)*)([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+))$?/ + + +.. bro:id:: ipv6_compressed_hex_regex + + :Type: :bro:type:`pattern` + :Default: + + :: + + /^?((([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})*)?)::(([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})*)?))$?/ + + +.. bro:id:: ipv6_hex4dec_regex + + :Type: :bro:type:`pattern` + :Default: + + :: + + /^?((([0-9A-Fa-f]{1,4}:){6,6})([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+))$?/ + + +Functions +######### +.. bro:id:: addr_to_uri + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`string` + + Returns the string representation of an IP address suitable for inclusion + in a URI. For IPv4, this does no special formatting, but for IPv6, the + address is included in square brackets. + + + :a: the address to make suitable for URI inclusion. + + + :returns: the string representation of the address suitable for URI inclusion. + +.. bro:id:: extract_ip_addresses + + :Type: :bro:type:`function` (input: :bro:type:`string`) : :bro:type:`string_vec` + + Extracts all IP (v4 or v6) address strings from a given string. + + + :input: a string that may contain an IP address anywhere within it. + + + :returns: an array containing all valid IP address strings found in *input*. + +.. bro:id:: find_ip_addresses + + :Type: :bro:type:`function` (input: :bro:type:`string`) : :bro:type:`string_array` + :Attributes: :bro:attr:`&deprecated` + + Extracts all IP (v4 or v6) address strings from a given string. + + + :input: a string that may contain an IP address anywhere within it. + + + :returns: an array containing all valid IP address strings found in *input*. + +.. bro:id:: has_valid_octets + + :Type: :bro:type:`function` (octets: :bro:type:`string_vec`) : :bro:type:`bool` + + Checks if all elements of a string array are a valid octet value. + + + :octets: an array of strings to check for valid octet values. + + + :returns: T if every element is between 0 and 255, inclusive, else F. + +.. bro:id:: is_valid_ip + + :Type: :bro:type:`function` (ip_str: :bro:type:`string`) : :bro:type:`bool` + + Checks if a string appears to be a valid IPv4 or IPv6 address. + + + :ip_str: the string to check for valid IP formatting. + + + :returns: T if the string is a valid IPv4 or IPv6 address format. + +.. bro:id:: normalize_mac + + :Type: :bro:type:`function` (a: :bro:type:`string`) : :bro:type:`string` + + Given a string, extracts the hex digits and returns a MAC address in + the format: 00:a0:32:d7:81:8f. If the string doesn't contain 12 or 16 hex + digits, an empty string is returned. + + + :a: the string to normalize. + + + :returns: a normalized MAC address, or an empty string in the case of an error. + + diff --git a/doc/scripts/base/utils/conn-ids.bro.rst b/doc/scripts/base/utils/conn-ids.bro.rst new file mode 100644 index 0000000000..24d53409b0 --- /dev/null +++ b/doc/scripts/base/utils/conn-ids.bro.rst @@ -0,0 +1,54 @@ +:tocdepth: 3 + +base/utils/conn-ids.bro +======================= +.. bro:namespace:: GLOBAL + +Simple functions for generating ASCII strings from connection IDs. + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Functions +######### +================================================== ==================================================================== +:bro:id:`directed_id_string`: :bro:type:`function` Calls :bro:id:`id_string` or :bro:id:`reverse_id_string` if the + second argument is T or F, respectively. +:bro:id:`id_string`: :bro:type:`function` Takes a conn_id record and returns a string representation with the + general data flow appearing to be from the connection originator + on the left to the responder on the right. +:bro:id:`reverse_id_string`: :bro:type:`function` Takes a conn_id record and returns a string representation with the + general data flow appearing to be from the connection responder + on the right to the originator on the left. +================================================== ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: directed_id_string + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`, is_orig: :bro:type:`bool`) : :bro:type:`string` + + Calls :bro:id:`id_string` or :bro:id:`reverse_id_string` if the + second argument is T or F, respectively. + +.. bro:id:: id_string + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`) : :bro:type:`string` + + Takes a conn_id record and returns a string representation with the + general data flow appearing to be from the connection originator + on the left to the responder on the right. + +.. bro:id:: reverse_id_string + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`) : :bro:type:`string` + + Takes a conn_id record and returns a string representation with the + general data flow appearing to be from the connection responder + on the right to the originator on the left. + + diff --git a/doc/scripts/base/utils/dir.bro.rst b/doc/scripts/base/utils/dir.bro.rst new file mode 100644 index 0000000000..60bc6f772f --- /dev/null +++ b/doc/scripts/base/utils/dir.bro.rst @@ -0,0 +1,62 @@ +:tocdepth: 3 + +base/utils/dir.bro +================== +.. bro:namespace:: Dir + + +:Namespace: Dir +:Imports: :doc:`base/frameworks/reporter `, :doc:`base/utils/exec.bro `, :doc:`base/utils/paths.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +======================================================================== ===================================================================== +:bro:id:`Dir::polling_interval`: :bro:type:`interval` :bro:attr:`&redef` The default interval this module checks for files in directories when + using the :bro:see:`Dir::monitor` function. +======================================================================== ===================================================================== + +Functions +######### +============================================ ============================================================== +:bro:id:`Dir::monitor`: :bro:type:`function` Register a directory to monitor with a callback that is called + every time a previously unseen file is seen. +============================================ ============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Dir::polling_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``30.0 secs`` + + The default interval this module checks for files in directories when + using the :bro:see:`Dir::monitor` function. + +Functions +######### +.. bro:id:: Dir::monitor + + :Type: :bro:type:`function` (dir: :bro:type:`string`, callback: :bro:type:`function` (fname: :bro:type:`string`) : :bro:type:`void`, poll_interval: :bro:type:`interval` :bro:attr:`&default` = :bro:see:`Dir::polling_interval` :bro:attr:`&optional`) : :bro:type:`void` + + Register a directory to monitor with a callback that is called + every time a previously unseen file is seen. If a file is deleted + and seen to be gone, then the file is available for being seen again + in the future. + + + :dir: The directory to monitor for files. + + + :callback: Callback that gets executed with each file name + that is found. Filenames are provided with the full path. + + + :poll_interval: An interval at which to check for new files. + + diff --git a/doc/scripts/base/utils/directions-and-hosts.bro.rst b/doc/scripts/base/utils/directions-and-hosts.bro.rst new file mode 100644 index 0000000000..3d54f30d00 --- /dev/null +++ b/doc/scripts/base/utils/directions-and-hosts.bro.rst @@ -0,0 +1,109 @@ +:tocdepth: 3 + +base/utils/directions-and-hosts.bro +=================================== + + +:Imports: :doc:`base/utils/site.bro ` + +Summary +~~~~~~~ +Types +##### +======================================= = +:bro:type:`Direction`: :bro:type:`enum` +:bro:type:`Host`: :bro:type:`enum` +======================================= = + +Functions +######### +==================================================== ====================================================================== +:bro:id:`addr_matches_host`: :bro:type:`function` Checks whether a given host (IP address) matches a given host type. +:bro:id:`id_matches_direction`: :bro:type:`function` Checks whether a given connection is of a given direction with respect + to the locally-monitored network. +==================================================== ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Direction + + :Type: :bro:type:`enum` + + .. bro:enum:: INBOUND Direction + + The connection originator is not within the locally-monitored + network, but the other endpoint is. + + .. bro:enum:: OUTBOUND Direction + + The connection originator is within the locally-monitored network, + but the other endpoint is not. + + .. bro:enum:: BIDIRECTIONAL Direction + + Only one endpoint is within the locally-monitored network, meaning + the connection is either outbound or inbound. + + .. bro:enum:: NO_DIRECTION Direction + + This value doesn't match any connection. + + +.. bro:type:: Host + + :Type: :bro:type:`enum` + + .. bro:enum:: LOCAL_HOSTS Host + + A host within the locally-monitored network. + + .. bro:enum:: REMOTE_HOSTS Host + + A host not within the locally-monitored network. + + .. bro:enum:: ALL_HOSTS Host + + Any host. + + .. bro:enum:: NO_HOSTS Host + + This value doesn't match any host. + + +Functions +######### +.. bro:id:: addr_matches_host + + :Type: :bro:type:`function` (ip: :bro:type:`addr`, h: :bro:type:`Host`) : :bro:type:`bool` + + Checks whether a given host (IP address) matches a given host type. + + + :ip: address of a host. + + + :h: a host type. + + + :returns: T if the given host matches the given type, else F. + +.. bro:id:: id_matches_direction + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`, d: :bro:type:`Direction`) : :bro:type:`bool` + + Checks whether a given connection is of a given direction with respect + to the locally-monitored network. + + + :id: a connection record containing the originator/responder hosts. + + + :d: a direction with respect to the locally-monitored network. + + + :returns: T if the two connection endpoints match the given direction, else F. + + diff --git a/doc/scripts/base/utils/email.bro.rst b/doc/scripts/base/utils/email.bro.rst new file mode 100644 index 0000000000..36872a3a35 --- /dev/null +++ b/doc/scripts/base/utils/email.bro.rst @@ -0,0 +1,78 @@ +:tocdepth: 3 + +base/utils/email.bro +==================== + + + +Summary +~~~~~~~ +Functions +######### +========================================================== =========================================================================== +:bro:id:`extract_email_addrs_set`: :bro:type:`function` Extract mail addresses out of address specifications conforming to RFC5322. +:bro:id:`extract_email_addrs_vec`: :bro:type:`function` Extract mail addresses out of address specifications conforming to RFC5322. +:bro:id:`extract_first_email_addr`: :bro:type:`function` Extract the first email address from a string. +:bro:id:`split_mime_email_addresses`: :bro:type:`function` Split email addresses from MIME headers. +========================================================== =========================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: extract_email_addrs_set + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`set` [:bro:type:`string`] + + Extract mail addresses out of address specifications conforming to RFC5322. + + + :str: A string potentially containing email addresses. + + + :returns: A set of extracted email addresses. An empty set is returned + if no email addresses are discovered. + +.. bro:id:: extract_email_addrs_vec + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`string_vec` + + Extract mail addresses out of address specifications conforming to RFC5322. + + + :str: A string potentially containing email addresses. + + + :returns: A vector of extracted email addresses. An empty vector is returned + if no email addresses are discovered. + +.. bro:id:: extract_first_email_addr + + :Type: :bro:type:`function` (str: :bro:type:`string`) : :bro:type:`string` + + Extract the first email address from a string. + + + :str: A string potentially containing email addresses. + + + :returns: An email address or empty string if none found. + +.. bro:id:: split_mime_email_addresses + + :Type: :bro:type:`function` (line: :bro:type:`string`) : :bro:type:`set` [:bro:type:`string`] + + Split email addresses from MIME headers. The email addresses will + include the display name and email address as it was given by the mail + mail client. Note that this currently does not account for MIME group + addresses and won't handle them correctly. The group name will show up + as part of an email address. + + + :str: The argument from a MIME header. + + + :returns: A set of addresses or empty string if none found. + + diff --git a/doc/scripts/base/utils/exec.bro.rst b/doc/scripts/base/utils/exec.bro.rst new file mode 100644 index 0000000000..4c83ec0612 --- /dev/null +++ b/doc/scripts/base/utils/exec.bro.rst @@ -0,0 +1,91 @@ +:tocdepth: 3 + +base/utils/exec.bro +=================== +.. bro:namespace:: Exec + +A module for executing external command line programs. + +:Namespace: Exec +:Imports: :doc:`base/frameworks/input ` + +Summary +~~~~~~~ +Types +##### +============================================= = +:bro:type:`Exec::Command`: :bro:type:`record` +:bro:type:`Exec::Result`: :bro:type:`record` +============================================= = + +Functions +######### +========================================= ====================================================== +:bro:id:`Exec::run`: :bro:type:`function` Function for running command line programs and getting + output. +========================================= ====================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Exec::Command + + :Type: :bro:type:`record` + + cmd: :bro:type:`string` + The command line to execute. Use care to avoid injection + attacks (i.e., if the command uses untrusted/variable data, + sanitize it with :bro:see:`str_shell_escape`). + + stdin: :bro:type:`string` :bro:attr:`&default` = ``""`` :bro:attr:`&optional` + Provide standard input to the program as a string. + + read_files: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&optional` + If additional files are required to be read in as part of the + output of the command they can be defined here. + + uid: :bro:type:`string` :bro:attr:`&default` = ``rFj3eGxkRR5`` :bro:attr:`&optional` + The unique id for tracking executors. + + +.. bro:type:: Exec::Result + + :Type: :bro:type:`record` + + exit_code: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + Exit code from the program. + + signal_exit: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + True if the command was terminated with a signal. + + stdout: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` + Each line of standard output. + + stderr: :bro:type:`vector` of :bro:type:`string` :bro:attr:`&optional` + Each line of standard error. + + files: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string_vec` :bro:attr:`&optional` + If additional files were requested to be read in + the content of the files will be available here. + + +Functions +######### +.. bro:id:: Exec::run + + :Type: :bro:type:`function` (cmd: :bro:type:`Exec::Command`) : :bro:type:`Exec::Result` + + Function for running command line programs and getting + output. This is an asynchronous function which is meant + to be run with the `when` statement. + + + :cmd: The command to run. Use care to avoid injection attacks! + + + :returns: A record representing the full results from the + external program execution. + + diff --git a/doc/scripts/base/utils/files.bro.rst b/doc/scripts/base/utils/files.bro.rst new file mode 100644 index 0000000000..388a28f548 --- /dev/null +++ b/doc/scripts/base/utils/files.bro.rst @@ -0,0 +1,39 @@ +:tocdepth: 3 + +base/utils/files.bro +==================== + + +:Imports: :doc:`base/utils/addrs.bro ` + +Summary +~~~~~~~ +Functions +######### +========================================================================= ====================================================================== +:bro:id:`extract_filename_from_content_disposition`: :bro:type:`function` For CONTENT-DISPOSITION headers, this function can be used to extract + the filename. +:bro:id:`generate_extraction_filename`: :bro:type:`function` This function can be used to generate a consistent filename for when + contents of a file, stream, or connection are being extracted to disk. +========================================================================= ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: extract_filename_from_content_disposition + + :Type: :bro:type:`function` (data: :bro:type:`string`) : :bro:type:`string` + + For CONTENT-DISPOSITION headers, this function can be used to extract + the filename. + +.. bro:id:: generate_extraction_filename + + :Type: :bro:type:`function` (prefix: :bro:type:`string`, c: :bro:type:`connection`, suffix: :bro:type:`string`) : :bro:type:`string` + + This function can be used to generate a consistent filename for when + contents of a file, stream, or connection are being extracted to disk. + + diff --git a/doc/scripts/base/utils/geoip-distance.bro.rst b/doc/scripts/base/utils/geoip-distance.bro.rst new file mode 100644 index 0000000000..dbf25ed44b --- /dev/null +++ b/doc/scripts/base/utils/geoip-distance.bro.rst @@ -0,0 +1,42 @@ +:tocdepth: 3 + +base/utils/geoip-distance.bro +============================= + +Functions to calculate distance between two locations, based on GeoIP data. + + +Summary +~~~~~~~ +Functions +######### +===================================================== ========================================================================== +:bro:id:`haversine_distance_ip`: :bro:type:`function` Returns the distance between two IP addresses using the haversine formula, + based on GeoIP database locations. +===================================================== ========================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: haversine_distance_ip + + :Type: :bro:type:`function` (a1: :bro:type:`addr`, a2: :bro:type:`addr`) : :bro:type:`double` + + Returns the distance between two IP addresses using the haversine formula, + based on GeoIP database locations. Requires Bro to be built with GeoIP. + + + :a1: First IP address. + + + :a2: Second IP address. + + + :returns: The distance between *a1* and *a2* in miles, or -1.0 if GeoIP data + is not available for either of the IP addresses. + + .. bro:see:: haversine_distance lookup_location + + diff --git a/doc/scripts/base/utils/hash_hrw.bro.rst b/doc/scripts/base/utils/hash_hrw.bro.rst new file mode 100644 index 0000000000..a52f3cdb5e --- /dev/null +++ b/doc/scripts/base/utils/hash_hrw.bro.rst @@ -0,0 +1,92 @@ +:tocdepth: 3 + +base/utils/hash_hrw.bro +======================= +.. bro:namespace:: HashHRW + +An implementation of highest random weight (HRW) hashing, also called +rendezvous hashing. See +``_. + +:Namespace: HashHRW + +Summary +~~~~~~~ +Types +##### +================================================= =================================================================== +:bro:type:`HashHRW::Pool`: :bro:type:`record` A collection of sites to distribute keys across. +:bro:type:`HashHRW::Site`: :bro:type:`record` A site/node is a unique location to which you want a subset of keys + to be distributed. +:bro:type:`HashHRW::SiteTable`: :bro:type:`table` A table of sites, indexed by their id. +================================================= =================================================================== + +Functions +######### +================================================= ======================================== +:bro:id:`HashHRW::add_site`: :bro:type:`function` Add a site to a pool. +:bro:id:`HashHRW::get_site`: :bro:type:`function` Returns: the site to which the key maps. +:bro:id:`HashHRW::rem_site`: :bro:type:`function` Remove a site from a pool. +================================================= ======================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: HashHRW::Pool + + :Type: :bro:type:`record` + + sites: :bro:type:`HashHRW::SiteTable` :bro:attr:`&default` = ``{ }`` :bro:attr:`&optional` + + A collection of sites to distribute keys across. + +.. bro:type:: HashHRW::Site + + :Type: :bro:type:`record` + + id: :bro:type:`count` + A unique identifier for the site, should not exceed what + can be contained in a 32-bit integer. + + user_data: :bro:type:`any` :bro:attr:`&optional` + Other data to associate with the site. + + A site/node is a unique location to which you want a subset of keys + to be distributed. + +.. bro:type:: HashHRW::SiteTable + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`HashHRW::Site` + + A table of sites, indexed by their id. + +Functions +######### +.. bro:id:: HashHRW::add_site + + :Type: :bro:type:`function` (pool: :bro:type:`HashHRW::Pool`, site: :bro:type:`HashHRW::Site`) : :bro:type:`bool` + + Add a site to a pool. + + + :returns: F is the site is already in the pool, else T. + +.. bro:id:: HashHRW::get_site + + :Type: :bro:type:`function` (pool: :bro:type:`HashHRW::Pool`, key: :bro:type:`any`) : :bro:type:`HashHRW::Site` + + + :returns: the site to which the key maps. + +.. bro:id:: HashHRW::rem_site + + :Type: :bro:type:`function` (pool: :bro:type:`HashHRW::Pool`, site: :bro:type:`HashHRW::Site`) : :bro:type:`bool` + + Remove a site from a pool. + + + :returns: F if the site is not in the pool, else T. + + diff --git a/doc/scripts/base/utils/json.bro.rst b/doc/scripts/base/utils/json.bro.rst new file mode 100644 index 0000000000..419721f38d --- /dev/null +++ b/doc/scripts/base/utils/json.bro.rst @@ -0,0 +1,39 @@ +:tocdepth: 3 + +base/utils/json.bro +=================== + +Functions to assist with generating JSON data from Bro data scructures. + +:Imports: :doc:`base/utils/strings.bro ` + +Summary +~~~~~~~ +Functions +######### +======================================= ============================================================ +:bro:id:`to_json`: :bro:type:`function` A function to convert arbitrary Bro data into a JSON string. +======================================= ============================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: to_json + + :Type: :bro:type:`function` (v: :bro:type:`any`, only_loggable: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional`, field_escape_pattern: :bro:type:`pattern` :bro:attr:`&default` = ``/^?(^_)$?/`` :bro:attr:`&optional`) : :bro:type:`string` + + A function to convert arbitrary Bro data into a JSON string. + + + :v: The value to convert to JSON. Typically a record. + + + :only_loggable: If the v value is a record this will only cause + fields with the &log attribute to be included in the JSON. + + + :returns: a JSON formatted string. + + diff --git a/doc/scripts/base/utils/numbers.bro.rst b/doc/scripts/base/utils/numbers.bro.rst new file mode 100644 index 0000000000..5d02333d41 --- /dev/null +++ b/doc/scripts/base/utils/numbers.bro.rst @@ -0,0 +1,37 @@ +:tocdepth: 3 + +base/utils/numbers.bro +====================== + + + +Summary +~~~~~~~ +Functions +######### +============================================= ================================= +:bro:id:`extract_count`: :bro:type:`function` Extract an integer from a string. +============================================= ================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: extract_count + + :Type: :bro:type:`function` (s: :bro:type:`string`, get_first: :bro:type:`bool` :bro:attr:`&default` = ``T`` :bro:attr:`&optional`) : :bro:type:`count` + + Extract an integer from a string. + + + :s: The string to search for a number. + + + :get_first: Provide `F` if you would like the last number found. + + + :returns: The request integer from the given string or 0 if + no integer was found. + + diff --git a/doc/scripts/base/utils/paths.bro.rst b/doc/scripts/base/utils/paths.bro.rst new file mode 100644 index 0000000000..d7759bfa1c --- /dev/null +++ b/doc/scripts/base/utils/paths.bro.rst @@ -0,0 +1,96 @@ +:tocdepth: 3 + +base/utils/paths.bro +==================== + +Functions to parse and manipulate UNIX style paths and directories. + + +Summary +~~~~~~~ +Constants +######### +================================================ = +:bro:id:`absolute_path_pat`: :bro:type:`pattern` +================================================ = + +Functions +######### +===================================================== ====================================================================== +:bro:id:`build_path`: :bro:type:`function` Constructs a path to a file given a directory and a file name. +:bro:id:`build_path_compressed`: :bro:type:`function` Returns a compressed path to a file given a directory and file name. +:bro:id:`compress_path`: :bro:type:`function` Compresses a given path by removing '..'s and the parent directory it + references and also removing dual '/'s and extraneous '/./'s. +:bro:id:`extract_path`: :bro:type:`function` Given an arbitrary string, extracts a single, absolute path (directory + with filename). +===================================================== ====================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Constants +######### +.. bro:id:: absolute_path_pat + + :Type: :bro:type:`pattern` + :Default: + + :: + + /^?((\/|[A-Za-z]:[\\\/]).*)$?/ + + +Functions +######### +.. bro:id:: build_path + + :Type: :bro:type:`function` (dir: :bro:type:`string`, file_name: :bro:type:`string`) : :bro:type:`string` + + Constructs a path to a file given a directory and a file name. + + + :dir: the directory in which the file lives. + + + :file_name: the name of the file. + + + :returns: the concatenation of the directory path and file name, or just + the file name if it's already an absolute path. + +.. bro:id:: build_path_compressed + + :Type: :bro:type:`function` (dir: :bro:type:`string`, file_name: :bro:type:`string`) : :bro:type:`string` + + Returns a compressed path to a file given a directory and file name. + See :bro:id:`build_path` and :bro:id:`compress_path`. + +.. bro:id:: compress_path + + :Type: :bro:type:`function` (dir: :bro:type:`string`) : :bro:type:`string` + + Compresses a given path by removing '..'s and the parent directory it + references and also removing dual '/'s and extraneous '/./'s. + + + :dir: a path string, either relative or absolute. + + + :returns: a compressed version of the input path. + +.. bro:id:: extract_path + + :Type: :bro:type:`function` (input: :bro:type:`string`) : :bro:type:`string` + + Given an arbitrary string, extracts a single, absolute path (directory + with filename). + + .. todo:: Make this work on Window's style directories. + + + :input: a string that may contain an absolute path. + + + :returns: the first absolute path found in input string, else an empty string. + + diff --git a/doc/scripts/base/utils/patterns.bro.rst b/doc/scripts/base/utils/patterns.bro.rst new file mode 100644 index 0000000000..9b61097285 --- /dev/null +++ b/doc/scripts/base/utils/patterns.bro.rst @@ -0,0 +1,89 @@ +:tocdepth: 3 + +base/utils/patterns.bro +======================= +.. bro:namespace:: GLOBAL + +Functions for creating and working with patterns. + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Types +##### +================================================== = +:bro:type:`PatternMatchResult`: :bro:type:`record` +================================================== = + +Functions +######### +============================================= ========================================================================= +:bro:id:`match_pattern`: :bro:type:`function` Matches the given pattern against the given string, returning + a :bro:type:`PatternMatchResult` record. +:bro:id:`set_to_regex`: :bro:type:`function` Given a pattern as a string with two tildes (~~) contained in it, it will + return a pattern with string set's elements OR'd together where the + double-tilde was given (this function only works at or before init time). +============================================= ========================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: PatternMatchResult + + :Type: :bro:type:`record` + + matched: :bro:type:`bool` + T if a match was found, F otherwise. + + str: :bro:type:`string` + Portion of string that first matched. + + off: :bro:type:`count` + 1-based offset where match starts. + + +Functions +######### +.. bro:id:: match_pattern + + :Type: :bro:type:`function` (s: :bro:type:`string`, p: :bro:type:`pattern`) : :bro:type:`PatternMatchResult` + + Matches the given pattern against the given string, returning + a :bro:type:`PatternMatchResult` record. + For example: ``match_pattern("foobar", /o*[a-k]/)`` returns + ``[matched=T, str=f, off=1]``, because the *first* match is for + zero o's followed by an [a-k], but ``match_pattern("foobar", /o+[a-k]/)`` + returns ``[matched=T, str=oob, off=2]``. + + + :s: a string to match against. + + + :p: a pattern to match. + + + :returns: a record indicating the match status. + +.. bro:id:: set_to_regex + + :Type: :bro:type:`function` (ss: :bro:type:`set` [:bro:type:`string`], pat: :bro:type:`string`) : :bro:type:`pattern` + + Given a pattern as a string with two tildes (~~) contained in it, it will + return a pattern with string set's elements OR'd together where the + double-tilde was given (this function only works at or before init time). + + + :ss: a set of strings to OR together. + + + :pat: the pattern containing a "~~" in it. If a literal backslash is + included, it needs to be escaped with another backslash due to Bro's + string parsing reducing it to a single backslash upon rendering. + + + :returns: the input pattern with "~~" replaced by OR'd elements of input set. + + diff --git a/doc/scripts/base/utils/queue.bro.rst b/doc/scripts/base/utils/queue.bro.rst new file mode 100644 index 0000000000..cb9a254069 --- /dev/null +++ b/doc/scripts/base/utils/queue.bro.rst @@ -0,0 +1,164 @@ +:tocdepth: 3 + +base/utils/queue.bro +==================== +.. bro:namespace:: Queue + +A FIFO queue. + +:Namespace: Queue + +Summary +~~~~~~~ +Types +##### +=============================================== ========================================== +:bro:type:`Queue::Queue`: :bro:type:`record` The internal data structure for the queue. +:bro:type:`Queue::Settings`: :bro:type:`record` Settings for initializing the queue. +=============================================== ========================================== + +Redefinitions +############# +============================================ = +:bro:type:`Queue::Queue`: :bro:type:`record` +============================================ = + +Functions +######### +================================================= ============================================================== +:bro:id:`Queue::get`: :bro:type:`function` Get a value from the end of a queue. +:bro:id:`Queue::get_vector`: :bro:type:`function` Get the contents of the queue as a vector. +:bro:id:`Queue::init`: :bro:type:`function` Initialize a queue record structure. +:bro:id:`Queue::len`: :bro:type:`function` Get the number of items in a queue. +:bro:id:`Queue::merge`: :bro:type:`function` Merge two queues together. +:bro:id:`Queue::peek`: :bro:type:`function` Peek at the value at the end of the queue without removing it. +:bro:id:`Queue::put`: :bro:type:`function` Put a value onto the beginning of a queue. +================================================= ============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Queue::Queue + + :Type: :bro:type:`record` + + initialized: :bro:type:`bool` :bro:attr:`&default` = ``F`` :bro:attr:`&optional` + + vals: :bro:type:`table` [:bro:type:`count`] of :bro:type:`any` :bro:attr:`&optional` + + settings: :bro:type:`Queue::Settings` :bro:attr:`&optional` + + top: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + + bottom: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + + size: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + + The internal data structure for the queue. + +.. bro:type:: Queue::Settings + + :Type: :bro:type:`record` + + max_len: :bro:type:`count` :bro:attr:`&optional` + If a maximum length is set for the queue + it will maintain itself at that + maximum length automatically. + + Settings for initializing the queue. + +Functions +######### +.. bro:id:: Queue::get + + :Type: :bro:type:`function` (q: :bro:type:`Queue::Queue`) : :bro:type:`any` + + Get a value from the end of a queue. + + + :q: The queue to get the value from. + + + :returns: The value gotten from the queue. + +.. bro:id:: Queue::get_vector + + :Type: :bro:type:`function` (q: :bro:type:`Queue::Queue`, ret: :bro:type:`vector` of :bro:type:`any`) : :bro:type:`void` + + Get the contents of the queue as a vector. + + + :q: The queue. + + + :ret: A vector containing the current contents of the queue + as the type of ret. + +.. bro:id:: Queue::init + + :Type: :bro:type:`function` (s: :bro:type:`Queue::Settings` :bro:attr:`&default` = ``[]`` :bro:attr:`&optional`) : :bro:type:`Queue::Queue` + + Initialize a queue record structure. + + + :s: A record which configures the queue. + + + :returns: An opaque queue record. + +.. bro:id:: Queue::len + + :Type: :bro:type:`function` (q: :bro:type:`Queue::Queue`) : :bro:type:`count` + + Get the number of items in a queue. + + + :q: The queue. + + + :returns: The length of the queue. + +.. bro:id:: Queue::merge + + :Type: :bro:type:`function` (q1: :bro:type:`Queue::Queue`, q2: :bro:type:`Queue::Queue`) : :bro:type:`Queue::Queue` + + Merge two queues together. If any settings are applied + to the queues, the settings from *q1* are used for the new + merged queue. + + + :q1: The first queue. Settings are taken from here. + + + :q2: The second queue. + + + :returns: A new queue from merging the other two together. + +.. bro:id:: Queue::peek + + :Type: :bro:type:`function` (q: :bro:type:`Queue::Queue`) : :bro:type:`any` + + Peek at the value at the end of the queue without removing it. + + + :q: The queue to get the value from. + + + :returns: The value at the end of the queue. + +.. bro:id:: Queue::put + + :Type: :bro:type:`function` (q: :bro:type:`Queue::Queue`, val: :bro:type:`any`) : :bro:type:`void` + + Put a value onto the beginning of a queue. + + + :q: The queue to put the value into. + + + :val: The value to insert into the queue. + + diff --git a/doc/scripts/base/utils/site.bro.rst b/doc/scripts/base/utils/site.bro.rst new file mode 100644 index 0000000000..93b77726ff --- /dev/null +++ b/doc/scripts/base/utils/site.bro.rst @@ -0,0 +1,188 @@ +:tocdepth: 3 + +base/utils/site.bro +=================== +.. bro:namespace:: Site + +Definitions describing a site - which networks and DNS zones are "local" +and "neighbors", and servers running particular services. + +:Namespace: Site +:Imports: :doc:`base/utils/patterns.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +========================================================================= ====================================================================== +:bro:id:`Site::local_admins`: :bro:type:`table` :bro:attr:`&redef` If local network administrators are known and they have responsibility + for defined address space, then a mapping can be defined here between + networks for which they have responsibility and a set of email + addresses. +:bro:id:`Site::local_nets`: :bro:type:`set` :bro:attr:`&redef` Networks that are considered "local". +:bro:id:`Site::local_zones`: :bro:type:`set` :bro:attr:`&redef` DNS zones that are considered "local". +:bro:id:`Site::neighbor_nets`: :bro:type:`set` :bro:attr:`&redef` Networks that are considered "neighbors". +:bro:id:`Site::neighbor_zones`: :bro:type:`set` :bro:attr:`&redef` DNS zones that are considered "neighbors". +:bro:id:`Site::private_address_space`: :bro:type:`set` :bro:attr:`&redef` Address space that is considered private and unrouted. +========================================================================= ====================================================================== + +State Variables +############### +=================================================== ===================================================================== +:bro:id:`Site::local_nets_table`: :bro:type:`table` This is used for retrieving the subnet when using multiple entries in + :bro:id:`Site::local_nets`. +=================================================== ===================================================================== + +Functions +######### +====================================================== ================================================================= +:bro:id:`Site::get_emails`: :bro:type:`function` Function that returns a comma-separated list of email addresses + that are considered administrators for the IP address provided as + an argument. +:bro:id:`Site::is_local_addr`: :bro:type:`function` Function that returns true if an address corresponds to one of + the local networks, false if not. +:bro:id:`Site::is_local_name`: :bro:type:`function` Function that returns true if a host name is within a local + DNS zone. +:bro:id:`Site::is_neighbor_addr`: :bro:type:`function` Function that returns true if an address corresponds to one of + the neighbor networks, false if not. +:bro:id:`Site::is_neighbor_name`: :bro:type:`function` Function that returns true if a host name is within a neighbor + DNS zone. +:bro:id:`Site::is_private_addr`: :bro:type:`function` Function that returns true if an address corresponds to one of + the private/unrouted networks, false if not. +====================================================== ================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Site::local_admins + + :Type: :bro:type:`table` [:bro:type:`subnet`] of :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + If local network administrators are known and they have responsibility + for defined address space, then a mapping can be defined here between + networks for which they have responsibility and a set of email + addresses. + +.. bro:id:: Site::local_nets + + :Type: :bro:type:`set` [:bro:type:`subnet`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Networks that are considered "local". Note that BroControl sets + this automatically. + +.. bro:id:: Site::local_zones + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + DNS zones that are considered "local". + +.. bro:id:: Site::neighbor_nets + + :Type: :bro:type:`set` [:bro:type:`subnet`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Networks that are considered "neighbors". + +.. bro:id:: Site::neighbor_zones + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + DNS zones that are considered "neighbors". + +.. bro:id:: Site::private_address_space + + :Type: :bro:type:`set` [:bro:type:`subnet`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + 192.168.0.0/16, + 127.0.0.0/8, + ::1/128, + 172.16.0.0/12, + 10.0.0.0/8, + fe80::/10, + 100.64.0.0/10 + } + + Address space that is considered private and unrouted. + By default it has RFC defined non-routable IPv4 address space. + +State Variables +############### +.. bro:id:: Site::local_nets_table + + :Type: :bro:type:`table` [:bro:type:`subnet`] of :bro:type:`subnet` + :Default: ``{}`` + + This is used for retrieving the subnet when using multiple entries in + :bro:id:`Site::local_nets`. It's populated automatically from there. + A membership query can be done with an + :bro:type:`addr` and the table will yield the subnet it was found + within. + +Functions +######### +.. bro:id:: Site::get_emails + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`string` + + Function that returns a comma-separated list of email addresses + that are considered administrators for the IP address provided as + an argument. + The function inspects :bro:id:`Site::local_admins`. + +.. bro:id:: Site::is_local_addr + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`bool` + + Function that returns true if an address corresponds to one of + the local networks, false if not. + The function inspects :bro:id:`Site::local_nets`. + +.. bro:id:: Site::is_local_name + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`bool` + + Function that returns true if a host name is within a local + DNS zone. + The function inspects :bro:id:`Site::local_zones`. + +.. bro:id:: Site::is_neighbor_addr + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`bool` + + Function that returns true if an address corresponds to one of + the neighbor networks, false if not. + The function inspects :bro:id:`Site::neighbor_nets`. + +.. bro:id:: Site::is_neighbor_name + + :Type: :bro:type:`function` (name: :bro:type:`string`) : :bro:type:`bool` + + Function that returns true if a host name is within a neighbor + DNS zone. + The function inspects :bro:id:`Site::neighbor_zones`. + +.. bro:id:: Site::is_private_addr + + :Type: :bro:type:`function` (a: :bro:type:`addr`) : :bro:type:`bool` + + Function that returns true if an address corresponds to one of + the private/unrouted networks, false if not. + The function inspects :bro:id:`Site::private_address_space`. + + diff --git a/doc/scripts/base/utils/strings.bro.rst b/doc/scripts/base/utils/strings.bro.rst new file mode 100644 index 0000000000..25a560f799 --- /dev/null +++ b/doc/scripts/base/utils/strings.bro.rst @@ -0,0 +1,82 @@ +:tocdepth: 3 + +base/utils/strings.bro +====================== + +Functions to assist with small string analysis and manipulation that can +be implemented as Bro functions and don't need to be implemented as built-in +functions. + + +Summary +~~~~~~~ +Functions +######### +================================================ ============================================================================= +:bro:id:`cut_tail`: :bro:type:`function` Cut a number of characters from the end of the given string. +:bro:id:`is_string_binary`: :bro:type:`function` Returns true if the given string is at least 25% composed of 8-bit + characters. +:bro:id:`join_string_set`: :bro:type:`function` Join a set of strings together, with elements delimited by a constant string. +:bro:id:`string_escape`: :bro:type:`function` Given a string, returns an escaped version. +================================================ ============================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: cut_tail + + :Type: :bro:type:`function` (s: :bro:type:`string`, tail_len: :bro:type:`count`) : :bro:type:`string` + + Cut a number of characters from the end of the given string. + + + :s: a string to trim. + + + :tail_len: the number of characters to remove from the end of the string. + + + :returns: the given string with *tail_len* characters removed from the end. + +.. bro:id:: is_string_binary + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`bool` + + Returns true if the given string is at least 25% composed of 8-bit + characters. + +.. bro:id:: join_string_set + + :Type: :bro:type:`function` (ss: :bro:type:`set` [:bro:type:`string`], j: :bro:type:`string`) : :bro:type:`string` + + Join a set of strings together, with elements delimited by a constant string. + + + :ss: a set of strings to join. + + + :j: the string used to join set elements. + + + :returns: a string composed of all elements of the set, delimited by the + joining string. + +.. bro:id:: string_escape + + :Type: :bro:type:`function` (s: :bro:type:`string`, chars: :bro:type:`string`) : :bro:type:`string` + + Given a string, returns an escaped version. + + + :s: a string to escape. + + + :chars: a string containing all the characters that need to be escaped. + + + :returns: a string with all occurrences of any character in *chars* escaped + using ``\``, and any literal ``\`` characters likewise escaped. + + diff --git a/doc/scripts/base/utils/thresholds.bro.rst b/doc/scripts/base/utils/thresholds.bro.rst new file mode 100644 index 0000000000..a621c277ad --- /dev/null +++ b/doc/scripts/base/utils/thresholds.bro.rst @@ -0,0 +1,107 @@ +:tocdepth: 3 + +base/utils/thresholds.bro +========================= +.. bro:namespace:: GLOBAL + +Functions for using multiple thresholds with a counting tracker. For +example, you may want to generate a notice when something happens 10 times +and again when it happens 100 times but nothing in between. You can use +the :bro:id:`check_threshold` function to define your threshold points +and the :bro:type:`TrackCount` variable where you are keeping track of your +counter. + +:Namespace: GLOBAL + +Summary +~~~~~~~ +Redefinable Options +################### +========================================================================== ========================================================== +:bro:id:`default_notice_thresholds`: :bro:type:`vector` :bro:attr:`&redef` The thresholds you would like to use as defaults with the + :bro:id:`default_check_threshold` function. +========================================================================== ========================================================== + +Types +##### +========================================== = +:bro:type:`TrackCount`: :bro:type:`record` +========================================== = + +Functions +######### +======================================================= ==================================================================== +:bro:id:`check_threshold`: :bro:type:`function` This will check if a :bro:type:`TrackCount` variable has crossed any + thresholds in a given set. +:bro:id:`default_check_threshold`: :bro:type:`function` This will use the :bro:id:`default_notice_thresholds` variable to + check a :bro:type:`TrackCount` variable to see if it has crossed + another threshold. +:bro:id:`new_track_count`: :bro:type:`function` +======================================================= ==================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: default_notice_thresholds + + :Type: :bro:type:`vector` of :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + [30, 100, 1000, 10000, 100000, 1000000, 10000000] + + The thresholds you would like to use as defaults with the + :bro:id:`default_check_threshold` function. + +Types +##### +.. bro:type:: TrackCount + + :Type: :bro:type:`record` + + n: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The counter for the number of times something has happened. + + index: :bro:type:`count` :bro:attr:`&default` = ``0`` :bro:attr:`&optional` + The index of the vector where the counter currently is. This + is used to track which threshold is currently being watched + for. + + +Functions +######### +.. bro:id:: check_threshold + + :Type: :bro:type:`function` (v: :bro:type:`vector` of :bro:type:`count`, tracker: :bro:type:`TrackCount`) : :bro:type:`bool` + + This will check if a :bro:type:`TrackCount` variable has crossed any + thresholds in a given set. + + + :v: a vector holding counts that represent thresholds. + + + :tracker: the record being used to track event counter and currently + monitored threshold value. + + + :returns: T if a threshold has been crossed, else F. + +.. bro:id:: default_check_threshold + + :Type: :bro:type:`function` (tracker: :bro:type:`TrackCount`) : :bro:type:`bool` + + This will use the :bro:id:`default_notice_thresholds` variable to + check a :bro:type:`TrackCount` variable to see if it has crossed + another threshold. + +.. bro:id:: new_track_count + + :Type: :bro:type:`function` () : :bro:type:`TrackCount` + + + diff --git a/doc/scripts/base/utils/time.bro.rst b/doc/scripts/base/utils/time.bro.rst new file mode 100644 index 0000000000..f1f88ea161 --- /dev/null +++ b/doc/scripts/base/utils/time.bro.rst @@ -0,0 +1,29 @@ +:tocdepth: 3 + +base/utils/time.bro +=================== + + + +Summary +~~~~~~~ +Functions +######### +===================================================== ======================================================================== +:bro:id:`duration_to_mins_secs`: :bro:type:`function` Given an interval, returns a string representing the minutes and seconds + in the interval (for example, "3m34s"). +===================================================== ======================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Functions +######### +.. bro:id:: duration_to_mins_secs + + :Type: :bro:type:`function` (dur: :bro:type:`interval`) : :bro:type:`string` + + Given an interval, returns a string representing the minutes and seconds + in the interval (for example, "3m34s"). + + diff --git a/doc/scripts/base/utils/urls.bro.rst b/doc/scripts/base/utils/urls.bro.rst new file mode 100644 index 0000000000..dcd1f2a96f --- /dev/null +++ b/doc/scripts/base/utils/urls.bro.rst @@ -0,0 +1,103 @@ +:tocdepth: 3 + +base/utils/urls.bro +=================== + +Functions for URL handling. + + +Summary +~~~~~~~ +Redefinable Options +################### +=========================================================== ====================================================== +:bro:id:`url_regex`: :bro:type:`pattern` :bro:attr:`&redef` A regular expression for matching and extracting URLs. +=========================================================== ====================================================== + +Types +##### +=================================== ============================================ +:bro:type:`URI`: :bro:type:`record` A URI, as parsed by :bro:id:`decompose_uri`. +=================================== ============================================ + +Functions +######### +============================================================ ================================================== +:bro:id:`decompose_uri`: :bro:type:`function` +:bro:id:`find_all_urls`: :bro:type:`function` Extracts URLs discovered in arbitrary text. +:bro:id:`find_all_urls_without_scheme`: :bro:type:`function` Extracts URLs discovered in arbitrary text without + the URL scheme included. +============================================================ ================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: url_regex + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /^?(^([a-zA-Z\-]{3,5})(:\/\/[^\/?#"'\r\n><]*)([^?#"'\r\n><]*)([^[:blank:]\r\n"'><]*|\??[^"'\r\n><]*))$?/ + + A regular expression for matching and extracting URLs. + +Types +##### +.. bro:type:: URI + + :Type: :bro:type:`record` + + scheme: :bro:type:`string` :bro:attr:`&optional` + The URL's scheme.. + + netlocation: :bro:type:`string` + The location, which could be a domain name or an IP address. Left empty if not + specified. + + portnum: :bro:type:`count` :bro:attr:`&optional` + Port number, if included in URI. + + path: :bro:type:`string` + Full including the file name. Will be '/' if there's not path given. + + file_name: :bro:type:`string` :bro:attr:`&optional` + Full file name, including extension, if there is a file name. + + file_base: :bro:type:`string` :bro:attr:`&optional` + The base filename, without extension, if there is a file name. + + file_ext: :bro:type:`string` :bro:attr:`&optional` + The filename's extension, if there is a file name. + + params: :bro:type:`table` [:bro:type:`string`] of :bro:type:`string` :bro:attr:`&optional` + A table of all query parameters, mapping their keys to values, if there's a + query. + + A URI, as parsed by :bro:id:`decompose_uri`. + +Functions +######### +.. bro:id:: decompose_uri + + :Type: :bro:type:`function` (uri: :bro:type:`string`) : :bro:type:`URI` + + +.. bro:id:: find_all_urls + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`string_set` + + Extracts URLs discovered in arbitrary text. + +.. bro:id:: find_all_urls_without_scheme + + :Type: :bro:type:`function` (s: :bro:type:`string`) : :bro:type:`string_set` + + Extracts URLs discovered in arbitrary text without + the URL scheme included. + + diff --git a/doc/scripts/broxygen/__load__.bro.rst b/doc/scripts/broxygen/__load__.bro.rst new file mode 100644 index 0000000000..958a73094a --- /dev/null +++ b/doc/scripts/broxygen/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +broxygen/__load__.bro +===================== + + +:Imports: :doc:`broxygen/example.bro `, :doc:`policy/frameworks/control/controllee.bro `, :doc:`policy/frameworks/control/controller.bro `, :doc:`policy/frameworks/files/extract-all-files.bro `, :doc:`policy/misc/dump-events.bro `, :doc:`policy/protocols/dhcp/deprecated_events.bro `, :doc:`policy/protocols/smb/__load__.bro `, :doc:`policy/protocols/ssl/notary.bro `, :doc:`test-all-policy.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/broxygen/example.bro.rst b/doc/scripts/broxygen/example.bro.rst new file mode 100644 index 0000000000..d729ab85ee --- /dev/null +++ b/doc/scripts/broxygen/example.bro.rst @@ -0,0 +1,248 @@ +:tocdepth: 3 + +broxygen/example.bro +==================== +.. bro:namespace:: BroxygenExample + +This is an example script that demonstrates Broxygen-style +documentation. It generally will make most sense when viewing +the script's raw source code and comparing to the HTML-rendered +version. + +Comments in the from ``##!`` are meant to summarize the script's +purpose. They are transferred directly in to the generated +`reStructuredText `_ +(reST) document associated with the script. + +.. tip:: You can embed directives and roles within ``##``-stylized comments. + +There's also a custom role to reference any identifier node in +the Bro Sphinx domain that's good for "see alsos", e.g. + +See also: :bro:see:`BroxygenExample::a_var`, +:bro:see:`BroxygenExample::ONE`, :bro:see:`SSH::Info` + +And a custom directive does the equivalent references: + +.. bro:see:: BroxygenExample::a_var BroxygenExample::ONE SSH::Info + +:Namespace: BroxygenExample +:Imports: :doc:`base/frameworks/notice `, :doc:`base/protocols/http `, :doc:`policy/frameworks/software/vulnerable.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +==================================================================================== ======================================================= +:bro:id:`BroxygenExample::an_option`: :bro:type:`set` :bro:attr:`&redef` Add documentation for "an_option" here. +:bro:id:`BroxygenExample::option_with_init`: :bro:type:`interval` :bro:attr:`&redef` Default initialization will be generated automatically. +==================================================================================== ======================================================= + +State Variables +############### +======================================================================== ======================================================================== +:bro:id:`BroxygenExample::a_var`: :bro:type:`bool` Put some documentation for "a_var" here. +:bro:id:`BroxygenExample::summary_test`: :bro:type:`string` The first sentence for a particular identifier's summary text ends here. +:bro:id:`BroxygenExample::var_without_explicit_type`: :bro:type:`string` Types are inferred, that information is self-documenting. +======================================================================== ======================================================================== + +Types +##### +================================================================================= =========================================================== +:bro:type:`BroxygenExample::ComplexRecord`: :bro:type:`record` :bro:attr:`&redef` General documentation for a type "ComplexRecord" goes here. +:bro:type:`BroxygenExample::Info`: :bro:type:`record` An example record to be used with a logging stream. +:bro:type:`BroxygenExample::SimpleEnum`: :bro:type:`enum` Documentation for the "SimpleEnum" type goes here. +:bro:type:`BroxygenExample::SimpleRecord`: :bro:type:`record` General documentation for a type "SimpleRecord" goes here. +================================================================================= =========================================================== + +Redefinitions +############# +============================================================= ==================================================================== +:bro:type:`BroxygenExample::SimpleEnum`: :bro:type:`enum` Document the "SimpleEnum" redef here with any special info regarding + the *redef* itself. +:bro:type:`BroxygenExample::SimpleRecord`: :bro:type:`record` Document the record extension *redef* itself here. +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`Notice::Type`: :bro:type:`enum` +============================================================= ==================================================================== + +Events +###### +====================================================== ========================== +:bro:id:`BroxygenExample::an_event`: :bro:type:`event` Summarize "an_event" here. +====================================================== ========================== + +Functions +######### +=========================================================== ======================================= +:bro:id:`BroxygenExample::a_function`: :bro:type:`function` Summarize purpose of "a_function" here. +=========================================================== ======================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: BroxygenExample::an_option + + :Type: :bro:type:`set` [:bro:type:`addr`, :bro:type:`addr`, :bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Add documentation for "an_option" here. + The type/attribute information is all generated automatically. + +.. bro:id:: BroxygenExample::option_with_init + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 msecs`` + + Default initialization will be generated automatically. + More docs can be added here. + +State Variables +############### +.. bro:id:: BroxygenExample::a_var + + :Type: :bro:type:`bool` + + Put some documentation for "a_var" here. Any global/non-const that + isn't a function/event/hook is classified as a "state variable" + in the generated docs. + +.. bro:id:: BroxygenExample::summary_test + + :Type: :bro:type:`string` + + The first sentence for a particular identifier's summary text ends here. + And this second sentence doesn't show in the short description provided + by the table of all identifiers declared by this script. + +.. bro:id:: BroxygenExample::var_without_explicit_type + + :Type: :bro:type:`string` + :Default: ``"this works"`` + + Types are inferred, that information is self-documenting. + +Types +##### +.. bro:type:: BroxygenExample::ComplexRecord + + :Type: :bro:type:`record` + + field1: :bro:type:`count` + Counts something. + + field2: :bro:type:`bool` + Toggles something. + + field3: :bro:type:`BroxygenExample::SimpleRecord` + Broxygen automatically tracks types + and cross-references are automatically + inserted in to generated docs. + + msg: :bro:type:`string` :bro:attr:`&default` = ``"blah"`` :bro:attr:`&optional` + Attributes are self-documenting. + :Attributes: :bro:attr:`&redef` + + General documentation for a type "ComplexRecord" goes here. + +.. bro:type:: BroxygenExample::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + + uid: :bro:type:`string` :bro:attr:`&log` + + status: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + + An example record to be used with a logging stream. + Nothing special about it. If another script redefs this type + to add fields, the generated documentation will show all original + fields plus the extensions and the scripts which contributed to it + (provided they are also @load'ed). + +.. bro:type:: BroxygenExample::SimpleEnum + + :Type: :bro:type:`enum` + + .. bro:enum:: BroxygenExample::ONE BroxygenExample::SimpleEnum + + Documentation for particular enum values is added like this. + And can also span multiple lines. + + .. bro:enum:: BroxygenExample::TWO BroxygenExample::SimpleEnum + + Or this style is valid to document the preceding enum value. + + .. bro:enum:: BroxygenExample::THREE BroxygenExample::SimpleEnum + + .. bro:enum:: BroxygenExample::FOUR BroxygenExample::SimpleEnum + + And some documentation for "FOUR". + + .. bro:enum:: BroxygenExample::FIVE BroxygenExample::SimpleEnum + + Also "FIVE". + + Documentation for the "SimpleEnum" type goes here. + It can span multiple lines. + +.. bro:type:: BroxygenExample::SimpleRecord + + :Type: :bro:type:`record` + + field1: :bro:type:`count` + Counts something. + + field2: :bro:type:`bool` + Toggles something. + + field_ext: :bro:type:`string` :bro:attr:`&optional` + Document the extending field like this. + Or here, like this. + + General documentation for a type "SimpleRecord" goes here. + The way fields can be documented is similar to what's already seen + for enums. + +Events +###### +.. bro:id:: BroxygenExample::an_event + + :Type: :bro:type:`event` (name: :bro:type:`string`) + + Summarize "an_event" here. + Give more details about "an_event" here. + + BroxygenExample::a_function should not be confused as a parameter + in the generated docs, but it also doesn't generate a cross-reference + link. Use the see role instead: :bro:see:`BroxygenExample::a_function`. + + + :name: Describe the argument here. + +Functions +######### +.. bro:id:: BroxygenExample::a_function + + :Type: :bro:type:`function` (tag: :bro:type:`string`, msg: :bro:type:`string`) : :bro:type:`string` + + Summarize purpose of "a_function" here. + Give more details about "a_function" here. + Separating the documentation of the params/return values with + empty comments is optional, but improves readability of script. + + + :tag: Function arguments can be described + like this. + + + :msg: Another param. + + + :returns: Describe the return type here. + + diff --git a/doc/scripts/broxygen/index.rst b/doc/scripts/broxygen/index.rst new file mode 100644 index 0000000000..b96de2148b --- /dev/null +++ b/doc/scripts/broxygen/index.rst @@ -0,0 +1,37 @@ +:orphan: + +Package: broxygen +================= + +This package is loaded during the process which automatically generates +reference documentation for all Bro scripts (i.e. "Broxygen"). Its only +purpose is to provide an easy way to load all known Bro scripts plus any +extra scripts needed or used by the documentation process. + +:doc:`/scripts/broxygen/__load__.bro` + + +:doc:`/scripts/broxygen/example.bro` + + This is an example script that demonstrates Broxygen-style + documentation. It generally will make most sense when viewing + the script's raw source code and comparing to the HTML-rendered + version. + + Comments in the from ``##!`` are meant to summarize the script's + purpose. They are transferred directly in to the generated + `reStructuredText `_ + (reST) document associated with the script. + + .. tip:: You can embed directives and roles within ``##``-stylized comments. + + There's also a custom role to reference any identifier node in + the Bro Sphinx domain that's good for "see alsos", e.g. + + See also: :bro:see:`BroxygenExample::a_var`, + :bro:see:`BroxygenExample::ONE`, :bro:see:`SSH::Info` + + And a custom directive does the equivalent references: + + .. bro:see:: BroxygenExample::a_var BroxygenExample::ONE SSH::Info + diff --git a/doc/scripts/policy/files/x509/log-ocsp.bro.rst b/doc/scripts/policy/files/x509/log-ocsp.bro.rst new file mode 100644 index 0000000000..df05dd4534 --- /dev/null +++ b/doc/scripts/policy/files/x509/log-ocsp.bro.rst @@ -0,0 +1,85 @@ +:tocdepth: 3 + +policy/files/x509/log-ocsp.bro +============================== +.. bro:namespace:: OCSP + +Enable logging of OCSP responses. + +:Namespace: OCSP + +Summary +~~~~~~~ +Types +##### +========================================== ========================================================== +:bro:type:`OCSP::Info`: :bro:type:`record` The record type which contains the fields of the OCSP log. +========================================== ========================================================== + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +=========================================== =================================================== +:bro:id:`OCSP::log_ocsp`: :bro:type:`event` Event that can be handled to access the OCSP record + as it is sent to the logging framework. +=========================================== =================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: OCSP::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Time when the OCSP reply was encountered. + + id: :bro:type:`string` :bro:attr:`&log` + File id of the OCSP reply. + + hashAlgorithm: :bro:type:`string` :bro:attr:`&log` + Hash algorithm used to generate issuerNameHash and issuerKeyHash. + + issuerNameHash: :bro:type:`string` :bro:attr:`&log` + Hash of the issuer's distingueshed name. + + issuerKeyHash: :bro:type:`string` :bro:attr:`&log` + Hash of the issuer's public key. + + serialNumber: :bro:type:`string` :bro:attr:`&log` + Serial number of the affected certificate. + + certStatus: :bro:type:`string` :bro:attr:`&log` + Status of the affected certificate. + + revoketime: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + Time at which the certificate was revoked. + + revokereason: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Reason for which the certificate was revoked. + + thisUpdate: :bro:type:`time` :bro:attr:`&log` + The time at which the status being shows is known to have been correct. + + nextUpdate: :bro:type:`time` :bro:attr:`&log` :bro:attr:`&optional` + The latest time at which new information about the status of the certificate will be available. + + The record type which contains the fields of the OCSP log. + +Events +###### +.. bro:id:: OCSP::log_ocsp + + :Type: :bro:type:`event` (rec: :bro:type:`OCSP::Info`) + + Event that can be handled to access the OCSP record + as it is sent to the logging framework. + + diff --git a/doc/scripts/policy/frameworks/control/controllee.bro.rst b/doc/scripts/policy/frameworks/control/controllee.bro.rst new file mode 100644 index 0000000000..c1e87d3416 --- /dev/null +++ b/doc/scripts/policy/frameworks/control/controllee.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +policy/frameworks/control/controllee.bro +======================================== +.. bro:namespace:: Control + +The controllee portion of the control framework. Load this script if remote +runtime control of the Bro process is desired. + +A controllee only needs to load the controllee script in addition +to the specific analysis scripts desired. It may also need a node +configured as a controller node in the communications nodes configuration:: + + bro frameworks/control/controllee + +:Namespace: Control +:Imports: :doc:`base/frameworks/broker `, :doc:`base/frameworks/control ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/control/controller.bro.rst b/doc/scripts/policy/frameworks/control/controller.bro.rst new file mode 100644 index 0000000000..276c024c4f --- /dev/null +++ b/doc/scripts/policy/frameworks/control/controller.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/frameworks/control/controller.bro +======================================== +.. bro:namespace:: Control + +This is a utility script that implements the controller interface for the +control framework. It's intended to be run to control a remote Bro +and then shutdown. + +It's intended to be used from the command line like this:: + + bro frameworks/control/controller Control::host= Control::host_port= Control::cmd= [Control::arg=] + +:Namespace: Control +:Imports: :doc:`base/frameworks/broker `, :doc:`base/frameworks/control ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/dpd/detect-protocols.bro.rst b/doc/scripts/policy/frameworks/dpd/detect-protocols.bro.rst new file mode 100644 index 0000000000..8bd68b6929 --- /dev/null +++ b/doc/scripts/policy/frameworks/dpd/detect-protocols.bro.rst @@ -0,0 +1,125 @@ +:tocdepth: 3 + +policy/frameworks/dpd/detect-protocols.bro +========================================== +.. bro:namespace:: ProtocolDetector + +Finds connections with protocols on non-standard ports with DPD. + +:Namespace: ProtocolDetector +:Imports: :doc:`base/frameworks/notice `, :doc:`base/utils/conn-ids.bro `, :doc:`base/utils/site.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +===================================================================================== = +:bro:id:`ProtocolDetector::minimum_duration`: :bro:type:`interval` :bro:attr:`&redef` +:bro:id:`ProtocolDetector::minimum_volume`: :bro:type:`double` :bro:attr:`&redef` +:bro:id:`ProtocolDetector::suppress_servers`: :bro:type:`set` :bro:attr:`&redef` +:bro:id:`ProtocolDetector::valids`: :bro:type:`table` :bro:attr:`&redef` +===================================================================================== = + +Constants +######### +================================================================ = +:bro:id:`ProtocolDetector::check_interval`: :bro:type:`interval` +================================================================ = + +State Variables +############### +=============================================================================================== = +:bro:id:`ProtocolDetector::servers`: :bro:type:`table` :bro:attr:`&read_expire` = ``14.0 days`` +=============================================================================================== = + +Types +##### +=================================================== = +:bro:type:`ProtocolDetector::dir`: :bro:type:`enum` +=================================================== = + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + +Functions +######### +================================================================ = +:bro:id:`ProtocolDetector::found_protocol`: :bro:type:`function` +================================================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: ProtocolDetector::minimum_duration + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``30.0 secs`` + + +.. bro:id:: ProtocolDetector::minimum_volume + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``4000.0`` + + +.. bro:id:: ProtocolDetector::suppress_servers + + :Type: :bro:type:`set` [:bro:type:`Analyzer::Tag`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + +.. bro:id:: ProtocolDetector::valids + + :Type: :bro:type:`table` [:bro:type:`Analyzer::Tag`, :bro:type:`addr`, :bro:type:`port`] of :bro:type:`ProtocolDetector::dir` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + +Constants +######### +.. bro:id:: ProtocolDetector::check_interval + + :Type: :bro:type:`interval` + :Default: ``5.0 secs`` + + +State Variables +############### +.. bro:id:: ProtocolDetector::servers + + :Type: :bro:type:`table` [:bro:type:`addr`, :bro:type:`port`, :bro:type:`string`] of :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&read_expire` = ``14.0 days`` + :Default: ``{}`` + + +Types +##### +.. bro:type:: ProtocolDetector::dir + + :Type: :bro:type:`enum` + + .. bro:enum:: ProtocolDetector::NONE ProtocolDetector::dir + + .. bro:enum:: ProtocolDetector::INCOMING ProtocolDetector::dir + + .. bro:enum:: ProtocolDetector::OUTGOING ProtocolDetector::dir + + .. bro:enum:: ProtocolDetector::BOTH ProtocolDetector::dir + + +Functions +######### +.. bro:id:: ProtocolDetector::found_protocol + + :Type: :bro:type:`function` (c: :bro:type:`connection`, atype: :bro:type:`Analyzer::Tag`, protocol: :bro:type:`string`) : :bro:type:`void` + + + diff --git a/doc/scripts/policy/frameworks/dpd/packet-segment-logging.bro.rst b/doc/scripts/policy/frameworks/dpd/packet-segment-logging.bro.rst new file mode 100644 index 0000000000..7e0db34a51 --- /dev/null +++ b/doc/scripts/policy/frameworks/dpd/packet-segment-logging.bro.rst @@ -0,0 +1,43 @@ +:tocdepth: 3 + +policy/frameworks/dpd/packet-segment-logging.bro +================================================ +.. bro:namespace:: DPD + +This script enables logging of packet segment data when a protocol +parsing violation is encountered. The amount of data from the +packet logged is set by the :bro:see:`DPD::packet_segment_size` variable. +A caveat to logging packet data is that in some cases, the packet may +not be the packet that actually caused the protocol violation. + +:Namespace: DPD +:Imports: :doc:`base/frameworks/dpd ` + +Summary +~~~~~~~ +Runtime Options +############### +====================================================================== ===================================================== +:bro:id:`DPD::packet_segment_size`: :bro:type:`int` :bro:attr:`&redef` Size of the packet segment to display in the DPD log. +====================================================================== ===================================================== + +Redefinitions +############# +========================================= = +:bro:type:`DPD::Info`: :bro:type:`record` +========================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: DPD::packet_segment_size + + :Type: :bro:type:`int` + :Attributes: :bro:attr:`&redef` + :Default: ``255`` + + Size of the packet segment to display in the DPD log. + + diff --git a/doc/scripts/policy/frameworks/files/detect-MHR.bro.rst b/doc/scripts/policy/frameworks/files/detect-MHR.bro.rst new file mode 100644 index 0000000000..30ff33e78f --- /dev/null +++ b/doc/scripts/policy/frameworks/files/detect-MHR.bro.rst @@ -0,0 +1,69 @@ +:tocdepth: 3 + +policy/frameworks/files/detect-MHR.bro +====================================== +.. bro:namespace:: TeamCymruMalwareHashRegistry + +Detect file downloads that have hash values matching files in Team +Cymru's Malware Hash Registry (http://www.team-cymru.org/Services/MHR/). + +:Namespace: TeamCymruMalwareHashRegistry +:Imports: :doc:`base/frameworks/files `, :doc:`base/frameworks/notice `, :doc:`policy/frameworks/files/hash-all-files.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +================================================================================================ ==================================================================== +:bro:id:`TeamCymruMalwareHashRegistry::match_file_types`: :bro:type:`pattern` :bro:attr:`&redef` File types to attempt matching against the Malware Hash Registry. +:bro:id:`TeamCymruMalwareHashRegistry::match_sub_url`: :bro:type:`string` :bro:attr:`&redef` The Match notice has a sub message with a URL where you can get more + information about the file. +:bro:id:`TeamCymruMalwareHashRegistry::notice_threshold`: :bro:type:`count` :bro:attr:`&redef` The malware hash registry runs each malware sample through several + A/V engines. +================================================================================================ ==================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: TeamCymruMalwareHashRegistry::match_file_types + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /^?((^?((^?((^?((^?((^?((^?(application\/x-dosexec)$?)|(^?(application\/vnd.ms-cab-compressed)$?))$?)|(^?(application\/pdf)$?))$?)|(^?(application\/x-shockwave-flash)$?))$?)|(^?(application\/x-java-applet)$?))$?)|(^?(application\/jar)$?))$?)|(^?(video\/mp4)$?))$?/ + + File types to attempt matching against the Malware Hash Registry. + +.. bro:id:: TeamCymruMalwareHashRegistry::match_sub_url + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"https://www.virustotal.com/en/search/?query=%s"`` + + The Match notice has a sub message with a URL where you can get more + information about the file. The %s will be replaced with the SHA-1 + hash of the file. + +.. bro:id:: TeamCymruMalwareHashRegistry::notice_threshold + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``10`` + + The malware hash registry runs each malware sample through several + A/V engines. Team Cymru returns a percentage to indicate how + many A/V engines flagged the sample as malicious. This threshold + allows you to require a minimum detection rate. + + diff --git a/doc/scripts/policy/frameworks/files/entropy-test-all-files.bro.rst b/doc/scripts/policy/frameworks/files/entropy-test-all-files.bro.rst new file mode 100644 index 0000000000..8dd5d402ec --- /dev/null +++ b/doc/scripts/policy/frameworks/files/entropy-test-all-files.bro.rst @@ -0,0 +1,21 @@ +:tocdepth: 3 + +policy/frameworks/files/entropy-test-all-files.bro +================================================== +.. bro:namespace:: Files + + +:Namespace: Files + +Summary +~~~~~~~ +Redefinitions +############# +============================================================== = +:bro:type:`Files::Info`: :bro:type:`record` :bro:attr:`&redef` +============================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/files/extract-all-files.bro.rst b/doc/scripts/policy/frameworks/files/extract-all-files.bro.rst new file mode 100644 index 0000000000..eefc98c501 --- /dev/null +++ b/doc/scripts/policy/frameworks/files/extract-all-files.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +policy/frameworks/files/extract-all-files.bro +============================================= + +Extract all files to disk. + +:Imports: :doc:`base/files/extract ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/files/hash-all-files.bro.rst b/doc/scripts/policy/frameworks/files/hash-all-files.bro.rst new file mode 100644 index 0000000000..c090afe4a6 --- /dev/null +++ b/doc/scripts/policy/frameworks/files/hash-all-files.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +policy/frameworks/files/hash-all-files.bro +========================================== + +Perform MD5 and SHA1 hashing on all files. + +:Imports: :doc:`base/files/hash ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/do_expire.bro.rst b/doc/scripts/policy/frameworks/intel/do_expire.bro.rst new file mode 100644 index 0000000000..5a01885c36 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/do_expire.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/frameworks/intel/do_expire.bro +===================================== +.. bro:namespace:: Intel + +This script enables expiration for intelligence items. + +:Namespace: Intel +:Imports: :doc:`base/frameworks/intel ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================================================= = +:bro:id:`Intel::item_expiration`: :bro:type:`interval` :bro:attr:`&redef` +========================================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/do_notice.bro.rst b/doc/scripts/policy/frameworks/intel/do_notice.bro.rst new file mode 100644 index 0000000000..7f467cb2a0 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/do_notice.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +policy/frameworks/intel/do_notice.bro +===================================== +.. bro:namespace:: Intel + +This script enables notice generation for intelligence matches. + +:Namespace: Intel +:Imports: :doc:`base/frameworks/intel `, :doc:`base/frameworks/notice ` + +Summary +~~~~~~~ +Redefinitions +############# +=============================================== = +:bro:type:`Intel::MetaData`: :bro:type:`record` +:bro:type:`Notice::Type`: :bro:type:`enum` +=============================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/__load__.bro.rst b/doc/scripts/policy/frameworks/intel/seen/__load__.bro.rst new file mode 100644 index 0000000000..6b0ae6dde0 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/__load__.bro +========================================= + + +:Imports: :doc:`policy/frameworks/intel/seen/conn-established.bro `, :doc:`policy/frameworks/intel/seen/dns.bro `, :doc:`policy/frameworks/intel/seen/file-hashes.bro `, :doc:`policy/frameworks/intel/seen/file-names.bro `, :doc:`policy/frameworks/intel/seen/http-headers.bro `, :doc:`policy/frameworks/intel/seen/http-url.bro `, :doc:`policy/frameworks/intel/seen/pubkey-hashes.bro `, :doc:`policy/frameworks/intel/seen/smtp-url-extraction.bro `, :doc:`policy/frameworks/intel/seen/smtp.bro `, :doc:`policy/frameworks/intel/seen/ssl.bro `, :doc:`policy/frameworks/intel/seen/x509.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/conn-established.bro.rst b/doc/scripts/policy/frameworks/intel/seen/conn-established.bro.rst new file mode 100644 index 0000000000..0b8e7638e0 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/conn-established.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/conn-established.bro +================================================= + + +:Imports: :doc:`base/frameworks/intel `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/dns.bro.rst b/doc/scripts/policy/frameworks/intel/seen/dns.bro.rst new file mode 100644 index 0000000000..7e7a11ba9d --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/dns.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/dns.bro +==================================== + + +:Imports: :doc:`base/frameworks/intel `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/file-hashes.bro.rst b/doc/scripts/policy/frameworks/intel/seen/file-hashes.bro.rst new file mode 100644 index 0000000000..b95dd2a7f6 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/file-hashes.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/file-hashes.bro +============================================ + + +:Imports: :doc:`base/frameworks/intel `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/file-names.bro.rst b/doc/scripts/policy/frameworks/intel/seen/file-names.bro.rst new file mode 100644 index 0000000000..6f802b7e8e --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/file-names.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/file-names.bro +=========================================== + + +:Imports: :doc:`base/frameworks/intel `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/http-headers.bro.rst b/doc/scripts/policy/frameworks/intel/seen/http-headers.bro.rst new file mode 100644 index 0000000000..f9aaac8ee7 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/http-headers.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/http-headers.bro +============================================= + + +:Imports: :doc:`base/frameworks/intel `, :doc:`base/utils/addrs.bro `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/http-url.bro.rst b/doc/scripts/policy/frameworks/intel/seen/http-url.bro.rst new file mode 100644 index 0000000000..0298117533 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/http-url.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/http-url.bro +========================================= + + +:Imports: :doc:`base/frameworks/intel `, :doc:`base/protocols/http/utils.bro `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/index.rst b/doc/scripts/policy/frameworks/intel/seen/index.rst new file mode 100644 index 0000000000..d30c0b7144 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/index.rst @@ -0,0 +1,46 @@ +:orphan: + +Package: policy/frameworks/intel/seen +===================================== + +Scripts that send data to the intelligence framework. + +:doc:`/scripts/policy/frameworks/intel/seen/__load__.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/conn-established.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/where-locations.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/dns.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/file-hashes.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/file-names.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/http-headers.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/http-url.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/pubkey-hashes.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/ssl.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/smtp.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/smtp-url-extraction.bro` + + +:doc:`/scripts/policy/frameworks/intel/seen/x509.bro` + + diff --git a/doc/scripts/policy/frameworks/intel/seen/pubkey-hashes.bro.rst b/doc/scripts/policy/frameworks/intel/seen/pubkey-hashes.bro.rst new file mode 100644 index 0000000000..48f94beba7 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/pubkey-hashes.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/pubkey-hashes.bro +============================================== + + +:Imports: :doc:`base/frameworks/intel `, :doc:`base/protocols/ssh `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/smtp-url-extraction.bro.rst b/doc/scripts/policy/frameworks/intel/seen/smtp-url-extraction.bro.rst new file mode 100644 index 0000000000..bc63272703 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/smtp-url-extraction.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/smtp-url-extraction.bro +==================================================== + + +:Imports: :doc:`base/frameworks/intel `, :doc:`base/protocols/smtp `, :doc:`base/utils/urls.bro `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/smtp.bro.rst b/doc/scripts/policy/frameworks/intel/seen/smtp.bro.rst new file mode 100644 index 0000000000..6941da26dc --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/smtp.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/smtp.bro +===================================== + + +:Imports: :doc:`base/frameworks/intel `, :doc:`base/protocols/smtp `, :doc:`base/utils/email.bro `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/ssl.bro.rst b/doc/scripts/policy/frameworks/intel/seen/ssl.bro.rst new file mode 100644 index 0000000000..58452c6a65 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/ssl.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/ssl.bro +==================================== + + +:Imports: :doc:`base/frameworks/intel `, :doc:`base/protocols/ssl `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/where-locations.bro.rst b/doc/scripts/policy/frameworks/intel/seen/where-locations.bro.rst new file mode 100644 index 0000000000..051c79d184 --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/where-locations.bro.rst @@ -0,0 +1,20 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/where-locations.bro +================================================ + + +:Imports: :doc:`base/frameworks/intel ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`Intel::Where`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/intel/seen/x509.bro.rst b/doc/scripts/policy/frameworks/intel/seen/x509.bro.rst new file mode 100644 index 0000000000..a6ea234c5a --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/seen/x509.bro.rst @@ -0,0 +1,32 @@ +:tocdepth: 3 + +policy/frameworks/intel/seen/x509.bro +===================================== +.. bro:namespace:: Intel + + +:Namespace: Intel +:Imports: :doc:`base/files/x509 `, :doc:`base/frameworks/intel `, :doc:`policy/frameworks/intel/seen/where-locations.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================================== ============================================================================= +:bro:id:`Intel::enable_x509_ext_subject_alternative_name`: :bro:type:`bool` :bro:attr:`&redef` Enables the extraction of subject alternate names from the X509 SAN DNS field +============================================================================================== ============================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Intel::enable_x509_ext_subject_alternative_name + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Enables the extraction of subject alternate names from the X509 SAN DNS field + + diff --git a/doc/scripts/policy/frameworks/intel/whitelist.bro.rst b/doc/scripts/policy/frameworks/intel/whitelist.bro.rst new file mode 100644 index 0000000000..50275a522a --- /dev/null +++ b/doc/scripts/policy/frameworks/intel/whitelist.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/frameworks/intel/whitelist.bro +===================================== +.. bro:namespace:: Intel + +This script enables whitelisting for intelligence items. + +:Namespace: Intel +:Imports: :doc:`base/frameworks/intel ` + +Summary +~~~~~~~ +Redefinitions +############# +=============================================== = +:bro:type:`Intel::MetaData`: :bro:type:`record` +=============================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/notice/__load__.bro.rst b/doc/scripts/policy/frameworks/notice/__load__.bro.rst new file mode 100644 index 0000000000..793c811b2c --- /dev/null +++ b/doc/scripts/policy/frameworks/notice/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/frameworks/notice/__load__.bro +===================================== + + +:Imports: :doc:`policy/frameworks/notice/extend-email/hostnames.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/notice/extend-email/hostnames.bro.rst b/doc/scripts/policy/frameworks/notice/extend-email/hostnames.bro.rst new file mode 100644 index 0000000000..2d6c0b8fe3 --- /dev/null +++ b/doc/scripts/policy/frameworks/notice/extend-email/hostnames.bro.rst @@ -0,0 +1,20 @@ +:tocdepth: 3 + +policy/frameworks/notice/extend-email/hostnames.bro +=================================================== +.. bro:namespace:: Notice + +Loading this script extends the :bro:enum:`Notice::ACTION_EMAIL` action +by appending to the email the hostnames associated with +:bro:type:`Notice::Info`'s *src* and *dst* fields as determined by a +DNS lookup. + +:Namespace: Notice +:Imports: :doc:`base/frameworks/notice/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/frameworks/notice/index.rst b/doc/scripts/policy/frameworks/notice/index.rst new file mode 100644 index 0000000000..dd31fa8efa --- /dev/null +++ b/doc/scripts/policy/frameworks/notice/index.rst @@ -0,0 +1,16 @@ +:orphan: + +Package: policy/frameworks/notice +================================= + + +:doc:`/scripts/policy/frameworks/notice/__load__.bro` + + +:doc:`/scripts/policy/frameworks/notice/extend-email/hostnames.bro` + + Loading this script extends the :bro:enum:`Notice::ACTION_EMAIL` action + by appending to the email the hostnames associated with + :bro:type:`Notice::Info`'s *src* and *dst* fields as determined by a + DNS lookup. + diff --git a/doc/scripts/policy/frameworks/packet-filter/shunt.bro.rst b/doc/scripts/policy/frameworks/packet-filter/shunt.bro.rst new file mode 100644 index 0000000000..8bd43923bb --- /dev/null +++ b/doc/scripts/policy/frameworks/packet-filter/shunt.bro.rst @@ -0,0 +1,99 @@ +:tocdepth: 3 + +policy/frameworks/packet-filter/shunt.bro +========================================= +.. bro:namespace:: PacketFilter + + +:Namespace: PacketFilter +:Imports: :doc:`base/frameworks/notice `, :doc:`base/frameworks/packet-filter ` + +Summary +~~~~~~~ +Redefinable Options +################### +============================================================================ ====================================================================== +:bro:id:`PacketFilter::max_bpf_shunts`: :bro:type:`count` :bro:attr:`&redef` The maximum number of BPF based shunts that Bro is allowed to perform. +============================================================================ ====================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + +Functions +######### +======================================================================== =========================================================================== +:bro:id:`PacketFilter::current_shunted_conns`: :bro:type:`function` Retrieve the currently shunted connections. +:bro:id:`PacketFilter::current_shunted_host_pairs`: :bro:type:`function` Retrieve the currently shunted host pairs. +:bro:id:`PacketFilter::force_unshunt_host_pair`: :bro:type:`function` Performs the same function as the :bro:id:`PacketFilter::unshunt_host_pair` + function, but it forces an immediate filter update. +:bro:id:`PacketFilter::shunt_conn`: :bro:type:`function` Call this function to use BPF to shunt a connection (to prevent the + data packets from reaching Bro). +:bro:id:`PacketFilter::shunt_host_pair`: :bro:type:`function` This function will use a BPF expression to shunt traffic between + the two hosts given in the `conn_id` so that the traffic is never + exposed to Bro's traffic processing. +:bro:id:`PacketFilter::unshunt_host_pair`: :bro:type:`function` Remove shunting for a host pair given as a `conn_id`. +======================================================================== =========================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: PacketFilter::max_bpf_shunts + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``100`` + + The maximum number of BPF based shunts that Bro is allowed to perform. + +Functions +######### +.. bro:id:: PacketFilter::current_shunted_conns + + :Type: :bro:type:`function` () : :bro:type:`set` [:bro:type:`conn_id`] + + Retrieve the currently shunted connections. + +.. bro:id:: PacketFilter::current_shunted_host_pairs + + :Type: :bro:type:`function` () : :bro:type:`set` [:bro:type:`conn_id`] + + Retrieve the currently shunted host pairs. + +.. bro:id:: PacketFilter::force_unshunt_host_pair + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`) : :bro:type:`bool` + + Performs the same function as the :bro:id:`PacketFilter::unshunt_host_pair` + function, but it forces an immediate filter update. + +.. bro:id:: PacketFilter::shunt_conn + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`) : :bro:type:`bool` + + Call this function to use BPF to shunt a connection (to prevent the + data packets from reaching Bro). For TCP connections, control + packets are still allowed through so that Bro can continue logging + the connection and it can stop shunting once the connection ends. + +.. bro:id:: PacketFilter::shunt_host_pair + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`) : :bro:type:`bool` + + This function will use a BPF expression to shunt traffic between + the two hosts given in the `conn_id` so that the traffic is never + exposed to Bro's traffic processing. + +.. bro:id:: PacketFilter::unshunt_host_pair + + :Type: :bro:type:`function` (id: :bro:type:`conn_id`) : :bro:type:`bool` + + Remove shunting for a host pair given as a `conn_id`. The filter + is not immediately removed. It waits for the occasional filter + update done by the `PacketFilter` framework. + + diff --git a/doc/scripts/policy/frameworks/software/version-changes.bro.rst b/doc/scripts/policy/frameworks/software/version-changes.bro.rst new file mode 100644 index 0000000000..d757fb9e10 --- /dev/null +++ b/doc/scripts/policy/frameworks/software/version-changes.bro.rst @@ -0,0 +1,45 @@ +:tocdepth: 3 + +policy/frameworks/software/version-changes.bro +============================================== +.. bro:namespace:: Software + +Provides the possibility to define software names that are interesting to +watch for changes. A notice is generated if software versions change on a +host. + +:Namespace: Software +:Imports: :doc:`base/frameworks/notice `, :doc:`base/frameworks/software ` + +Summary +~~~~~~~ +Runtime Options +############### +=================================================================================== ==================================================================== +:bro:id:`Software::interesting_version_changes`: :bro:type:`set` :bro:attr:`&redef` Some software is more interesting when the version changes and this + is a set of all software that should raise a notice when a different + version is seen on a host. +=================================================================================== ==================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Software::interesting_version_changes + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Some software is more interesting when the version changes and this + is a set of all software that should raise a notice when a different + version is seen on a host. + + diff --git a/doc/scripts/policy/frameworks/software/vulnerable.bro.rst b/doc/scripts/policy/frameworks/software/vulnerable.bro.rst new file mode 100644 index 0000000000..d1fc0522b8 --- /dev/null +++ b/doc/scripts/policy/frameworks/software/vulnerable.bro.rst @@ -0,0 +1,99 @@ +:tocdepth: 3 + +policy/frameworks/software/vulnerable.bro +========================================= +.. bro:namespace:: Software + +Provides a variable to define vulnerable versions of software and if +a version of that software is as old or older than the defined version a +notice will be generated. + +:Namespace: Software +:Imports: :doc:`base/frameworks/control `, :doc:`base/frameworks/notice `, :doc:`base/frameworks/software ` + +Summary +~~~~~~~ +Runtime Options +############### +================================================================================================ ============================================================= +:bro:id:`Software::vulnerable_versions_update_endpoint`: :bro:type:`string` :bro:attr:`&redef` The DNS zone where runtime vulnerable software updates will + be loaded from. +:bro:id:`Software::vulnerable_versions_update_interval`: :bro:type:`interval` :bro:attr:`&redef` The interval at which vulnerable versions should grab updates + over DNS. +================================================================================================ ============================================================= + +Redefinable Options +################### +============================================================================= =============================================================== +:bro:id:`Software::vulnerable_versions`: :bro:type:`table` :bro:attr:`&redef` This is a table of software versions indexed by the name of the + software and a set of version ranges that are declared to be + vulnerable for that software. +============================================================================= =============================================================== + +Types +##### +================================================================ = +:bro:type:`Software::VulnerableVersionRange`: :bro:type:`record` +================================================================ = + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Software::vulnerable_versions_update_endpoint + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``""`` + + The DNS zone where runtime vulnerable software updates will + be loaded from. + +.. bro:id:: Software::vulnerable_versions_update_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 hr`` + + The interval at which vulnerable versions should grab updates + over DNS. + +Redefinable Options +################### +.. bro:id:: Software::vulnerable_versions + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`set` [:bro:type:`Software::VulnerableVersionRange`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + This is a table of software versions indexed by the name of the + software and a set of version ranges that are declared to be + vulnerable for that software. + +Types +##### +.. bro:type:: Software::VulnerableVersionRange + + :Type: :bro:type:`record` + + min: :bro:type:`Software::Version` :bro:attr:`&optional` + The minimal version of a vulnerable version range. This + field can be undefined if all previous versions of a piece + of software are vulnerable. + + max: :bro:type:`Software::Version` + The maximum vulnerable version. This field is deliberately + not optional because a maximum vulnerable version must + always be defined. This assumption may become incorrect + if all future versions of some software are to be considered + vulnerable. :) + + + diff --git a/doc/scripts/policy/frameworks/software/windows-version-detection.bro.rst b/doc/scripts/policy/frameworks/software/windows-version-detection.bro.rst new file mode 100644 index 0000000000..1f8e47e1d1 --- /dev/null +++ b/doc/scripts/policy/frameworks/software/windows-version-detection.bro.rst @@ -0,0 +1,89 @@ +:tocdepth: 3 + +policy/frameworks/software/windows-version-detection.bro +======================================================== +.. bro:namespace:: OS + +Windows systems access a Microsoft Certificate Revocation List (CRL) periodically. The +user agent for these requests reveals which version of Crypt32.dll installed on the system, +which can uniquely identify the version of Windows that's running. + +This script will log the version of Windows that was identified to the Software framework. + +:Namespace: OS +:Imports: :doc:`base/frameworks/software `, :doc:`base/protocols/http ` + +Summary +~~~~~~~ +Redefinable Options +################### +====================================================================== = +:bro:id:`OS::crypto_api_mapping`: :bro:type:`table` :bro:attr:`&redef` +====================================================================== = + +Types +##### +========================================================== = +:bro:type:`Software::name_and_version`: :bro:type:`record` +========================================================== = + +Redefinitions +############# +============================================ = +:bro:type:`Software::Type`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: OS::crypto_api_mapping + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`Software::name_and_version` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + ["Microsoft-CryptoAPI/5.131.3790.1830"] = [name="Windows", version=[major=5, minor=131, minor2=3790, minor3=1830, addl="XP x64 or Server 2003 SP1"]], + ["Microsoft-CryptoAPI/5.131.2600.3205"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=3205, addl="XP SP3 Beta 2"]], + ["Microsoft-CryptoAPI/6.1"] = [name="Windows", version=[major=6, minor=1, minor2=, minor3=, addl="7 or Server 2008 R2"]], + ["Microsoft-CryptoAPI/5.131.2600.2180"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=2180, addl="XP SP2"]], + ["Microsoft-CryptoAPI/5.131.2600.5508"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=5508, addl="XP SP3 RC2 Update 2"]], + ["Microsoft-CryptoAPI/5.131.3790.0"] = [name="Windows", version=[major=5, minor=131, minor2=3790, minor3=0, addl="XP x64 or Server 2003 SP0"]], + ["Microsoft-CryptoAPI/6.0"] = [name="Windows", version=[major=6, minor=0, minor2=, minor3=, addl="Vista or Server 2008"]], + ["Microsoft-CryptoAPI/5.131.2195.6661"] = [name="Windows", version=[major=5, minor=131, minor2=2195, minor3=6661, addl="2000 SP4"]], + ["Microsoft-CryptoAPI/5.131.3790.5235"] = [name="Windows", version=[major=5, minor=131, minor2=3790, minor3=5235, addl="XP x64 or Server 2003 with MS13-095"]], + ["Microsoft-CryptoAPI/6.4"] = [name="Windows", version=[major=6, minor=4, minor2=, minor3=, addl="10 Technical Preview"]], + ["Microsoft-CryptoAPI/6.2"] = [name="Windows", version=[major=6, minor=2, minor2=, minor3=, addl="8 or Server 2012"]], + ["Microsoft-CryptoAPI/5.131.2600.1106"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=1106, addl="XP SP1"]], + ["Microsoft-CryptoAPI/5.131.2600.3311"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=3311, addl="XP SP3 RC2 Update"]], + ["Microsoft-CryptoAPI/10.0"] = [name="Windows", version=[major=10, minor=0, minor2=, minor3=, addl=]], + ["Microsoft-CryptoAPI/5.131.2600.3180"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=3180, addl="XP SP3 Beta 1"]], + ["Microsoft-CryptoAPI/5.131.3790.3959"] = [name="Windows", version=[major=5, minor=131, minor2=3790, minor3=3959, addl="XP x64 or Server 2003 SP2"]], + ["Microsoft-CryptoAPI/6.3"] = [name="Windows", version=[major=6, minor=3, minor2=, minor3=, addl="8.1 or Server 2012 R2"]], + ["Microsoft-CryptoAPI/5.131.2195.6824"] = [name="Windows", version=[major=5, minor=131, minor2=2195, minor3=6824, addl="2000 with MS04-11"]], + ["Microsoft-CryptoAPI/5.131.2195.6926"] = [name="Windows", version=[major=5, minor=131, minor2=2195, minor3=6926, addl="2000 with Hotfix 98830"]], + ["Microsoft-CryptoAPI/5.131.2600.3282"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=3282, addl="XP SP3 RC1 Update"]], + ["Microsoft-CryptoAPI/5.131.2600.3300"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=3300, addl="XP SP3 RC2"]], + ["Microsoft-CryptoAPI/5.131.2600.3264"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=3264, addl="XP SP3 RC1"]], + ["Microsoft-CryptoAPI/5.131.2600.5512"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=5512, addl="XP SP3"]], + ["Microsoft-CryptoAPI/5.131.2600.0"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=0, addl="XP SP0"]], + ["Microsoft-CryptoAPI/5.131.2600.3249"] = [name="Windows", version=[major=5, minor=131, minor2=2600, minor3=3249, addl="XP SP3 RC Beta"]] + } + + +Types +##### +.. bro:type:: Software::name_and_version + + :Type: :bro:type:`record` + + name: :bro:type:`string` + + version: :bro:type:`Software::Version` + + + diff --git a/doc/scripts/policy/integration/barnyard2/__load__.bro.rst b/doc/scripts/policy/integration/barnyard2/__load__.bro.rst new file mode 100644 index 0000000000..d6396c1561 --- /dev/null +++ b/doc/scripts/policy/integration/barnyard2/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/integration/barnyard2/__load__.bro +========================================= + + +:Imports: :doc:`policy/integration/barnyard2/main.bro `, :doc:`policy/integration/barnyard2/types.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/integration/barnyard2/index.rst b/doc/scripts/policy/integration/barnyard2/index.rst new file mode 100644 index 0000000000..e8c6ca4bf5 --- /dev/null +++ b/doc/scripts/policy/integration/barnyard2/index.rst @@ -0,0 +1,21 @@ +:orphan: + +Package: policy/integration/barnyard2 +===================================== + +Integration with Barnyard2. + +:doc:`/scripts/policy/integration/barnyard2/__load__.bro` + + +:doc:`/scripts/policy/integration/barnyard2/types.bro` + + This file is separate from the base script so that dependencies can + be loaded in the correct order. + +:doc:`/scripts/policy/integration/barnyard2/main.bro` + + This script lets Barnyard2 integrate with Bro. It receives alerts from + Barnyard2 and logs them. In the future it will do more correlation + and derive new notices from the alerts. + diff --git a/doc/scripts/policy/integration/barnyard2/main.bro.rst b/doc/scripts/policy/integration/barnyard2/main.bro.rst new file mode 100644 index 0000000000..613cec8a12 --- /dev/null +++ b/doc/scripts/policy/integration/barnyard2/main.bro.rst @@ -0,0 +1,65 @@ +:tocdepth: 3 + +policy/integration/barnyard2/main.bro +===================================== +.. bro:namespace:: Barnyard2 + +This script lets Barnyard2 integrate with Bro. It receives alerts from +Barnyard2 and logs them. In the future it will do more correlation +and derive new notices from the alerts. + +:Namespace: Barnyard2 +:Imports: :doc:`policy/integration/barnyard2/types.bro ` + +Summary +~~~~~~~ +Types +##### +=============================================== = +:bro:type:`Barnyard2::Info`: :bro:type:`record` +=============================================== = + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Functions +######### +================================================== ===================================================================== +:bro:id:`Barnyard2::pid2cid`: :bro:type:`function` This can convert a Barnyard :bro:type:`Barnyard2::PacketID` value to + a :bro:type:`conn_id` value in the case that you might need to index + into an existing data structure elsewhere within Bro. +================================================== ===================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Barnyard2::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp of the alert. + + pid: :bro:type:`Barnyard2::PacketID` :bro:attr:`&log` + Associated packet ID. + + alert: :bro:type:`Barnyard2::AlertData` :bro:attr:`&log` + Associated alert data. + + +Functions +######### +.. bro:id:: Barnyard2::pid2cid + + :Type: :bro:type:`function` (p: :bro:type:`Barnyard2::PacketID`) : :bro:type:`conn_id` + + This can convert a Barnyard :bro:type:`Barnyard2::PacketID` value to + a :bro:type:`conn_id` value in the case that you might need to index + into an existing data structure elsewhere within Bro. + + diff --git a/doc/scripts/policy/integration/barnyard2/types.bro.rst b/doc/scripts/policy/integration/barnyard2/types.bro.rst new file mode 100644 index 0000000000..8fda226eaa --- /dev/null +++ b/doc/scripts/policy/integration/barnyard2/types.bro.rst @@ -0,0 +1,89 @@ +:tocdepth: 3 + +policy/integration/barnyard2/types.bro +====================================== +.. bro:namespace:: Barnyard2 + +This file is separate from the base script so that dependencies can +be loaded in the correct order. + +:Namespace: Barnyard2 + +Summary +~~~~~~~ +Types +##### +===================================================================== = +:bro:type:`Barnyard2::AlertData`: :bro:type:`record` :bro:attr:`&log` +:bro:type:`Barnyard2::PacketID`: :bro:type:`record` :bro:attr:`&log` +===================================================================== = + +Events +###### +====================================================== ================================================================ +:bro:id:`Barnyard2::barnyard_alert`: :bro:type:`event` This is the event that Barnyard2 instances will send if they're + configured with the bro_alert output plugin. +====================================================== ================================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: Barnyard2::AlertData + + :Type: :bro:type:`record` + + sensor_id: :bro:type:`count` :bro:attr:`&log` + Sensor that originated this event. + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp attached to the alert. + + signature_id: :bro:type:`count` :bro:attr:`&log` + Sig id for this generator. + + generator_id: :bro:type:`count` :bro:attr:`&log` + Which generator generated the alert? + + signature_revision: :bro:type:`count` :bro:attr:`&log` + Sig revision for this id. + + classification_id: :bro:type:`count` :bro:attr:`&log` + Event classification. + + classification: :bro:type:`string` :bro:attr:`&log` + Descriptive classification string. + + priority_id: :bro:type:`count` :bro:attr:`&log` + Event priority. + + event_id: :bro:type:`count` :bro:attr:`&log` + Event ID. + :Attributes: :bro:attr:`&log` + + +.. bro:type:: Barnyard2::PacketID + + :Type: :bro:type:`record` + + src_ip: :bro:type:`addr` :bro:attr:`&log` + + src_p: :bro:type:`port` :bro:attr:`&log` + + dst_ip: :bro:type:`addr` :bro:attr:`&log` + + dst_p: :bro:type:`port` :bro:attr:`&log` + :Attributes: :bro:attr:`&log` + + +Events +###### +.. bro:id:: Barnyard2::barnyard_alert + + :Type: :bro:type:`event` (id: :bro:type:`Barnyard2::PacketID`, alert: :bro:type:`Barnyard2::AlertData`, msg: :bro:type:`string`, data: :bro:type:`string`) + + This is the event that Barnyard2 instances will send if they're + configured with the bro_alert output plugin. + + diff --git a/doc/scripts/policy/integration/collective-intel/__load__.bro.rst b/doc/scripts/policy/integration/collective-intel/__load__.bro.rst new file mode 100644 index 0000000000..8f8665b51a --- /dev/null +++ b/doc/scripts/policy/integration/collective-intel/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/integration/collective-intel/__load__.bro +================================================ + + +:Imports: :doc:`policy/integration/collective-intel/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/integration/collective-intel/index.rst b/doc/scripts/policy/integration/collective-intel/index.rst new file mode 100644 index 0000000000..b598a8d62b --- /dev/null +++ b/doc/scripts/policy/integration/collective-intel/index.rst @@ -0,0 +1,16 @@ +:orphan: + +Package: policy/integration/collective-intel +============================================ + +The scripts in this module are for deeper integration with the +Collective Intelligence Framework (CIF) since Bro's Intel framework +doesn't natively behave the same as CIF nor does it store and maintain +the same data in all cases. + +:doc:`/scripts/policy/integration/collective-intel/__load__.bro` + + +:doc:`/scripts/policy/integration/collective-intel/main.bro` + + diff --git a/doc/scripts/policy/integration/collective-intel/main.bro.rst b/doc/scripts/policy/integration/collective-intel/main.bro.rst new file mode 100644 index 0000000000..2e5317e5cc --- /dev/null +++ b/doc/scripts/policy/integration/collective-intel/main.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/integration/collective-intel/main.bro +============================================ +.. bro:namespace:: Intel + + +:Namespace: Intel +:Imports: :doc:`base/frameworks/intel ` + +Summary +~~~~~~~ +Redefinitions +############# +=============================================== ======================================================================= +:bro:type:`Intel::MetaData`: :bro:type:`record` These are some fields to add extended compatibility between Bro and the + Collective Intelligence Framework. +=============================================== ======================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/misc/capture-loss.bro.rst b/doc/scripts/policy/misc/capture-loss.bro.rst new file mode 100644 index 0000000000..70f7cd9348 --- /dev/null +++ b/doc/scripts/policy/misc/capture-loss.bro.rst @@ -0,0 +1,94 @@ +:tocdepth: 3 + +policy/misc/capture-loss.bro +============================ +.. bro:namespace:: CaptureLoss + +This script logs evidence regarding the degree to which the packet +capture process suffers from measurement loss. +The loss could be due to overload on the host or NIC performing +the packet capture or it could even be beyond the host. If you are +capturing from a switch with a SPAN port, it's very possible that +the switch itself could be overloaded and dropping packets. +Reported loss is computed in terms of the number of "gap events" (ACKs +for a sequence number that's above a gap). + +:Namespace: CaptureLoss +:Imports: :doc:`base/frameworks/notice ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================== ================================================================ +:bro:id:`CaptureLoss::too_much_loss`: :bro:type:`double` :bro:attr:`&redef` The percentage of missed data that is considered "too much" + when the :bro:enum:`CaptureLoss::Too_Much_Loss` notice should be + generated. +:bro:id:`CaptureLoss::watch_interval`: :bro:type:`interval` :bro:attr:`&redef` The interval at which capture loss reports are created. +============================================================================== ================================================================ + +Types +##### +================================================= = +:bro:type:`CaptureLoss::Info`: :bro:type:`record` +================================================= = + +Redefinitions +############# +========================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: CaptureLoss::too_much_loss + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``0.1`` + + The percentage of missed data that is considered "too much" + when the :bro:enum:`CaptureLoss::Too_Much_Loss` notice should be + generated. The value is expressed as a double between 0 and 1 with 1 + being 100%. + +.. bro:id:: CaptureLoss::watch_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``15.0 mins`` + + The interval at which capture loss reports are created. + +Types +##### +.. bro:type:: CaptureLoss::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for when the measurement occurred. + + ts_delta: :bro:type:`interval` :bro:attr:`&log` + The time delay between this measurement and the last. + + peer: :bro:type:`string` :bro:attr:`&log` + In the event that there are multiple Bro instances logging + to the same host, this distinguishes each peer with its + individual name. + + gaps: :bro:type:`count` :bro:attr:`&log` + Number of missed ACKs from the previous measurement interval. + + acks: :bro:type:`count` :bro:attr:`&log` + Total number of ACKs seen in the previous measurement interval. + + percent_lost: :bro:type:`double` :bro:attr:`&log` + Percentage of ACKs seen where the data being ACKed wasn't seen. + + + diff --git a/doc/scripts/policy/misc/detect-traceroute/__load__.bro.rst b/doc/scripts/policy/misc/detect-traceroute/__load__.bro.rst new file mode 100644 index 0000000000..f027818250 --- /dev/null +++ b/doc/scripts/policy/misc/detect-traceroute/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/misc/detect-traceroute/__load__.bro +========================================== + + +:Imports: :doc:`policy/misc/detect-traceroute/main.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/misc/detect-traceroute/index.rst b/doc/scripts/policy/misc/detect-traceroute/index.rst new file mode 100644 index 0000000000..45401bf1d2 --- /dev/null +++ b/doc/scripts/policy/misc/detect-traceroute/index.rst @@ -0,0 +1,17 @@ +:orphan: + +Package: policy/misc/detect-traceroute +====================================== + +Detect hosts that are running traceroute. + +:doc:`/scripts/policy/misc/detect-traceroute/__load__.bro` + + +:doc:`/scripts/policy/misc/detect-traceroute/main.bro` + + This script detects a large number of ICMP Time Exceeded messages heading + toward hosts that have sent low TTL packets. It generates a notice when the + number of ICMP Time Exceeded messages for a source-destination pair exceeds + a threshold. + diff --git a/doc/scripts/policy/misc/detect-traceroute/main.bro.rst b/doc/scripts/policy/misc/detect-traceroute/main.bro.rst new file mode 100644 index 0000000000..60d869673b --- /dev/null +++ b/doc/scripts/policy/misc/detect-traceroute/main.bro.rst @@ -0,0 +1,114 @@ +:tocdepth: 3 + +policy/misc/detect-traceroute/main.bro +====================================== +.. bro:namespace:: Traceroute + +This script detects a large number of ICMP Time Exceeded messages heading +toward hosts that have sent low TTL packets. It generates a notice when the +number of ICMP Time Exceeded messages for a source-destination pair exceeds +a threshold. + +:Namespace: Traceroute +:Imports: :doc:`base/frameworks/signatures `, :doc:`base/frameworks/sumstats ` + +Summary +~~~~~~~ +Redefinable Options +################### +========================================================================================== =================================================================== +:bro:id:`Traceroute::icmp_time_exceeded_interval`: :bro:type:`interval` :bro:attr:`&redef` Interval at which to watch for the + :bro:id:`Traceroute::icmp_time_exceeded_threshold` variable to be + crossed. +:bro:id:`Traceroute::icmp_time_exceeded_threshold`: :bro:type:`double` :bro:attr:`&redef` Defines the threshold for ICMP Time Exceeded messages for a src-dst + pair. +:bro:id:`Traceroute::require_low_ttl_packets`: :bro:type:`bool` :bro:attr:`&redef` By default this script requires that any host detected running + traceroutes first send low TTL packets (TTL < 10) to the traceroute + destination host. +========================================================================================== =================================================================== + +Types +##### +================================================ ====================================== +:bro:type:`Traceroute::Info`: :bro:type:`record` The log record for the traceroute log. +================================================ ====================================== + +Redefinitions +############# +========================================================================= = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`Notice::Type`: :bro:type:`enum` +:bro:id:`Signatures::ignored_ids`: :bro:type:`pattern` :bro:attr:`&redef` +========================================================================= = + +Events +###### +======================================================= = +:bro:id:`Traceroute::log_traceroute`: :bro:type:`event` +======================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Traceroute::icmp_time_exceeded_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``3.0 mins`` + + Interval at which to watch for the + :bro:id:`Traceroute::icmp_time_exceeded_threshold` variable to be + crossed. At the end of each interval the counter is reset. + +.. bro:id:: Traceroute::icmp_time_exceeded_threshold + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``3.0`` + + Defines the threshold for ICMP Time Exceeded messages for a src-dst + pair. This threshold only comes into play after a host is found to + be sending low TTL packets. + +.. bro:id:: Traceroute::require_low_ttl_packets + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + By default this script requires that any host detected running + traceroutes first send low TTL packets (TTL < 10) to the traceroute + destination host. Changing this setting to F will relax the + detection a bit by solely relying on ICMP time-exceeded messages to + detect traceroute. + +Types +##### +.. bro:type:: Traceroute::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp + + src: :bro:type:`addr` :bro:attr:`&log` + Address initiating the traceroute. + + dst: :bro:type:`addr` :bro:attr:`&log` + Destination address of the traceroute. + + proto: :bro:type:`string` :bro:attr:`&log` + Protocol used for the traceroute. + + The log record for the traceroute log. + +Events +###### +.. bro:id:: Traceroute::log_traceroute + + :Type: :bro:type:`event` (rec: :bro:type:`Traceroute::Info`) + + + diff --git a/doc/scripts/policy/misc/dump-events.bro.rst b/doc/scripts/policy/misc/dump-events.bro.rst new file mode 100644 index 0000000000..f51d16bdc6 --- /dev/null +++ b/doc/scripts/policy/misc/dump-events.bro.rst @@ -0,0 +1,49 @@ +:tocdepth: 3 + +policy/misc/dump-events.bro +=========================== +.. bro:namespace:: DumpEvents + +This script dumps the events that Bro raises out to standard output in a +readable form. This is for debugging only and allows to understand events and +their parameters as Bro processes input. Note that it will show only events +for which a handler is defined. + +:Namespace: DumpEvents + +Summary +~~~~~~~ +Runtime Options +############### +======================================================================= =========================================================== +:bro:id:`DumpEvents::include`: :bro:type:`pattern` :bro:attr:`&redef` Only include events matching the given pattern into output. +:bro:id:`DumpEvents::include_args`: :bro:type:`bool` :bro:attr:`&redef` If true, include event arguments in output. +======================================================================= =========================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: DumpEvents::include + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /^?(.*)$?/ + + Only include events matching the given pattern into output. By default, the + pattern matches all events. + +.. bro:id:: DumpEvents::include_args + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + If true, include event arguments in output. + + diff --git a/doc/scripts/policy/misc/load-balancing.bro.rst b/doc/scripts/policy/misc/load-balancing.bro.rst new file mode 100644 index 0000000000..5aad3d9b61 --- /dev/null +++ b/doc/scripts/policy/misc/load-balancing.bro.rst @@ -0,0 +1,58 @@ +:tocdepth: 3 + +policy/misc/load-balancing.bro +============================== +.. bro:namespace:: LoadBalancing + +This script implements the "Bro side" of several load balancing +approaches for Bro clusters. + +:Namespace: LoadBalancing +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/packet-filter ` + +Summary +~~~~~~~ +Redefinable Options +################### +===================================================================================== ============================================ +:bro:id:`LoadBalancing::method`: :bro:type:`LoadBalancing::Method` :bro:attr:`&redef` Defines the method of load balancing to use. +===================================================================================== ============================================ + +Types +##### +=================================================== = +:bro:type:`LoadBalancing::Method`: :bro:type:`enum` +=================================================== = + +Redefinitions +############# +============================================= = +:bro:type:`Cluster::Node`: :bro:type:`record` +============================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: LoadBalancing::method + + :Type: :bro:type:`LoadBalancing::Method` + :Attributes: :bro:attr:`&redef` + :Default: ``LoadBalancing::AUTO_BPF`` + + Defines the method of load balancing to use. + +Types +##### +.. bro:type:: LoadBalancing::Method + + :Type: :bro:type:`enum` + + .. bro:enum:: LoadBalancing::AUTO_BPF LoadBalancing::Method + + Apply BPF filters to each worker in a way that causes them to + automatically flow balance traffic between them. + + + diff --git a/doc/scripts/policy/misc/loaded-scripts.bro.rst b/doc/scripts/policy/misc/loaded-scripts.bro.rst new file mode 100644 index 0000000000..d657ea90e9 --- /dev/null +++ b/doc/scripts/policy/misc/loaded-scripts.bro.rst @@ -0,0 +1,41 @@ +:tocdepth: 3 + +policy/misc/loaded-scripts.bro +============================== +.. bro:namespace:: LoadedScripts + +Log the loaded scripts. + +:Namespace: LoadedScripts +:Imports: :doc:`base/utils/paths.bro ` + +Summary +~~~~~~~ +Types +##### +=================================================== = +:bro:type:`LoadedScripts::Info`: :bro:type:`record` +=================================================== = + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: LoadedScripts::Info + + :Type: :bro:type:`record` + + name: :bro:type:`string` :bro:attr:`&log` + Name of the script loaded potentially with spaces included + before the file name to indicate load depth. The convention + is two spaces per level of depth. + + + diff --git a/doc/scripts/policy/misc/profiling.bro.rst b/doc/scripts/policy/misc/profiling.bro.rst new file mode 100644 index 0000000000..ac9d8e4e4e --- /dev/null +++ b/doc/scripts/policy/misc/profiling.bro.rst @@ -0,0 +1,25 @@ +:tocdepth: 3 + +policy/misc/profiling.bro +========================= +.. bro:namespace:: Profiling + +Turns on profiling of Bro resource consumption. + +:Namespace: Profiling + +Summary +~~~~~~~ +Redefinitions +############# +============================================================================ ================================================= +:bro:id:`expensive_profiling_multiple`: :bro:type:`count` :bro:attr:`&redef` Set the expensive profiling interval (multiple of + :bro:id:`profiling_interval`). +:bro:id:`profiling_file`: :bro:type:`file` :bro:attr:`&redef` Set the profiling output file. +:bro:id:`profiling_interval`: :bro:type:`interval` :bro:attr:`&redef` Set the cheap profiling interval. +============================================================================ ================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/misc/scan.bro.rst b/doc/scripts/policy/misc/scan.bro.rst new file mode 100644 index 0000000000..45e5d291b8 --- /dev/null +++ b/doc/scripts/policy/misc/scan.bro.rst @@ -0,0 +1,95 @@ +:tocdepth: 3 + +policy/misc/scan.bro +==================== +.. bro:namespace:: Scan + +TCP Scan detection. + +:Namespace: Scan +:Imports: :doc:`base/frameworks/notice `, :doc:`base/frameworks/sumstats `, :doc:`base/utils/time.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +=========================================================================== ================================================================== +:bro:id:`Scan::addr_scan_interval`: :bro:type:`interval` :bro:attr:`&redef` Failed connection attempts are tracked over this time interval for + the address scan detection. +:bro:id:`Scan::addr_scan_threshold`: :bro:type:`double` :bro:attr:`&redef` The threshold of the unique number of hosts a scanning host has to + have failed connections with on a single port. +:bro:id:`Scan::port_scan_interval`: :bro:type:`interval` :bro:attr:`&redef` Failed connection attempts are tracked over this time interval for + the port scan detection. +:bro:id:`Scan::port_scan_threshold`: :bro:type:`double` :bro:attr:`&redef` The threshold of the number of unique ports a scanning host has to + have failed connections with on a single victim host. +=========================================================================== ================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + +Hooks +##### +================================================== = +:bro:id:`Scan::addr_scan_policy`: :bro:type:`hook` +:bro:id:`Scan::port_scan_policy`: :bro:type:`hook` +================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: Scan::addr_scan_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 mins`` + + Failed connection attempts are tracked over this time interval for + the address scan detection. A higher interval will detect slower + scanners, but may also yield more false positives. + +.. bro:id:: Scan::addr_scan_threshold + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``25.0`` + + The threshold of the unique number of hosts a scanning host has to + have failed connections with on a single port. + +.. bro:id:: Scan::port_scan_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 mins`` + + Failed connection attempts are tracked over this time interval for + the port scan detection. A higher interval will detect slower + scanners, but may also yield more false positives. + +.. bro:id:: Scan::port_scan_threshold + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``15.0`` + + The threshold of the number of unique ports a scanning host has to + have failed connections with on a single victim host. + +Hooks +##### +.. bro:id:: Scan::addr_scan_policy + + :Type: :bro:type:`hook` (scanner: :bro:type:`addr`, victim: :bro:type:`addr`, scanned_port: :bro:type:`port`) : :bro:type:`bool` + + +.. bro:id:: Scan::port_scan_policy + + :Type: :bro:type:`hook` (scanner: :bro:type:`addr`, victim: :bro:type:`addr`, scanned_port: :bro:type:`port`) : :bro:type:`bool` + + + diff --git a/doc/scripts/policy/misc/stats.bro.rst b/doc/scripts/policy/misc/stats.bro.rst new file mode 100644 index 0000000000..eab2ea77ff --- /dev/null +++ b/doc/scripts/policy/misc/stats.bro.rst @@ -0,0 +1,149 @@ +:tocdepth: 3 + +policy/misc/stats.bro +===================== +.. bro:namespace:: Stats + +Log memory/packet/lag statistics. + +:Namespace: Stats +:Imports: :doc:`base/frameworks/notice ` + +Summary +~~~~~~~ +Runtime Options +############### +========================================================================= ============================= +:bro:id:`Stats::report_interval`: :bro:type:`interval` :bro:attr:`&redef` How often stats are reported. +========================================================================= ============================= + +Types +##### +=========================================== = +:bro:type:`Stats::Info`: :bro:type:`record` +=========================================== = + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +============================================= =============================================================== +:bro:id:`Stats::log_stats`: :bro:type:`event` Event to catch stats as they are written to the logging stream. +============================================= =============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Stats::report_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 mins`` + + How often stats are reported. + +Types +##### +.. bro:type:: Stats::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for the measurement. + + peer: :bro:type:`string` :bro:attr:`&log` + Peer that generated this log. Mostly for clusters. + + mem: :bro:type:`count` :bro:attr:`&log` + Amount of memory currently in use in MB. + + pkts_proc: :bro:type:`count` :bro:attr:`&log` + Number of packets processed since the last stats interval. + + bytes_recv: :bro:type:`count` :bro:attr:`&log` + Number of bytes received since the last stats interval if + reading live traffic. + + pkts_dropped: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Number of packets dropped since the last stats interval if + reading live traffic. + + pkts_link: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + Number of packets seen on the link since the last stats + interval if reading live traffic. + + pkt_lag: :bro:type:`interval` :bro:attr:`&log` :bro:attr:`&optional` + Lag between the wall clock and packet timestamps if reading + live traffic. + + events_proc: :bro:type:`count` :bro:attr:`&log` + Number of events processed since the last stats interval. + + events_queued: :bro:type:`count` :bro:attr:`&log` + Number of events that have been queued since the last stats + interval. + + active_tcp_conns: :bro:type:`count` :bro:attr:`&log` + TCP connections currently in memory. + + active_udp_conns: :bro:type:`count` :bro:attr:`&log` + UDP connections currently in memory. + + active_icmp_conns: :bro:type:`count` :bro:attr:`&log` + ICMP connections currently in memory. + + tcp_conns: :bro:type:`count` :bro:attr:`&log` + TCP connections seen since last stats interval. + + udp_conns: :bro:type:`count` :bro:attr:`&log` + UDP connections seen since last stats interval. + + icmp_conns: :bro:type:`count` :bro:attr:`&log` + ICMP connections seen since last stats interval. + + timers: :bro:type:`count` :bro:attr:`&log` + Number of timers scheduled since last stats interval. + + active_timers: :bro:type:`count` :bro:attr:`&log` + Current number of scheduled timers. + + files: :bro:type:`count` :bro:attr:`&log` + Number of files seen since last stats interval. + + active_files: :bro:type:`count` :bro:attr:`&log` + Current number of files actively being seen. + + dns_requests: :bro:type:`count` :bro:attr:`&log` + Number of DNS requests seen since last stats interval. + + active_dns_requests: :bro:type:`count` :bro:attr:`&log` + Current number of DNS requests awaiting a reply. + + reassem_tcp_size: :bro:type:`count` :bro:attr:`&log` + Current size of TCP data in reassembly. + + reassem_file_size: :bro:type:`count` :bro:attr:`&log` + Current size of File data in reassembly. + + reassem_frag_size: :bro:type:`count` :bro:attr:`&log` + Current size of packet fragment data in reassembly. + + reassem_unknown_size: :bro:type:`count` :bro:attr:`&log` + Current size of unknown data in reassembly (this is only PIA buffer right now). + + +Events +###### +.. bro:id:: Stats::log_stats + + :Type: :bro:type:`event` (rec: :bro:type:`Stats::Info`) + + Event to catch stats as they are written to the logging stream. + + diff --git a/doc/scripts/policy/misc/trim-trace-file.bro.rst b/doc/scripts/policy/misc/trim-trace-file.bro.rst new file mode 100644 index 0000000000..3ea7a4253e --- /dev/null +++ b/doc/scripts/policy/misc/trim-trace-file.bro.rst @@ -0,0 +1,55 @@ +:tocdepth: 3 + +policy/misc/trim-trace-file.bro +=============================== +.. bro:namespace:: TrimTraceFile + +Deletes the ``-w`` tracefile at regular intervals and starts a new file +from scratch. + +:Namespace: TrimTraceFile + +Summary +~~~~~~~ +Redefinable Options +################### +=============================================================================== ================================================================ +:bro:id:`TrimTraceFile::trim_interval`: :bro:type:`interval` :bro:attr:`&redef` The interval between times that the output tracefile is rotated. +=============================================================================== ================================================================ + +Events +###### +============================================== =================================================================== +:bro:id:`TrimTraceFile::go`: :bro:type:`event` This event can be generated externally to this script if on-demand + tracefile rotation is required with the caveat that the script + doesn't currently attempt to get back on schedule automatically and + the next trim likely won't happen on the + :bro:id:`TrimTraceFile::trim_interval`. +============================================== =================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: TrimTraceFile::trim_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``10.0 mins`` + + The interval between times that the output tracefile is rotated. + +Events +###### +.. bro:id:: TrimTraceFile::go + + :Type: :bro:type:`event` (first_trim: :bro:type:`bool`) + + This event can be generated externally to this script if on-demand + tracefile rotation is required with the caveat that the script + doesn't currently attempt to get back on schedule automatically and + the next trim likely won't happen on the + :bro:id:`TrimTraceFile::trim_interval`. + + diff --git a/doc/scripts/policy/misc/weird-stats.bro.rst b/doc/scripts/policy/misc/weird-stats.bro.rst new file mode 100644 index 0000000000..40fa83e59f --- /dev/null +++ b/doc/scripts/policy/misc/weird-stats.bro.rst @@ -0,0 +1,75 @@ +:tocdepth: 3 + +policy/misc/weird-stats.bro +=========================== +.. bro:namespace:: SumStats +.. bro:namespace:: WeirdStats + +Log weird statistics. + +:Namespaces: SumStats, WeirdStats +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/sumstats ` + +Summary +~~~~~~~ +Redefinable Options +################### +================================================================================== ============================= +:bro:id:`WeirdStats::weird_stat_interval`: :bro:type:`interval` :bro:attr:`&redef` How often stats are reported. +================================================================================== ============================= + +Types +##### +================================================ = +:bro:type:`WeirdStats::Info`: :bro:type:`record` +================================================ = + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +======================================================== = +:bro:id:`WeirdStats::log_weird_stats`: :bro:type:`event` +======================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: WeirdStats::weird_stat_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``15.0 mins`` + + How often stats are reported. + +Types +##### +.. bro:type:: WeirdStats::Info + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for the measurement. + + name: :bro:type:`string` :bro:attr:`&log` + Name of the weird. + + num_seen: :bro:type:`count` :bro:attr:`&log` + Number of times weird was seen since the last stats interval. + + +Events +###### +.. bro:id:: WeirdStats::log_weird_stats + + :Type: :bro:type:`event` (rec: :bro:type:`WeirdStats::Info`) + + + diff --git a/doc/scripts/policy/protocols/conn/known-hosts.bro.rst b/doc/scripts/policy/protocols/conn/known-hosts.bro.rst new file mode 100644 index 0000000000..e7a4eef7ce --- /dev/null +++ b/doc/scripts/policy/protocols/conn/known-hosts.bro.rst @@ -0,0 +1,176 @@ +:tocdepth: 3 + +policy/protocols/conn/known-hosts.bro +===================================== +.. bro:namespace:: Known + +This script logs hosts that Bro determines have performed complete TCP +handshakes and logs the address once per day (by default). The log that +is output provides an easy way to determine a count of the IP addresses in +use on a network per day. + +:Namespace: Known +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/utils/directions-and-hosts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================ ======================================================= +:bro:id:`Known::host_store_timeout`: :bro:type:`interval` :bro:attr:`&redef` The timeout interval to use for operations against + :bro:see:`Known::host_store`. +:bro:id:`Known::host_tracking`: :bro:type:`Host` :bro:attr:`&redef` The hosts whose existence should be logged and tracked. +============================================================================ ======================================================= + +Redefinable Options +################### +=========================================================================== =================================================================== +:bro:id:`Known::host_store_expiry`: :bro:type:`interval` :bro:attr:`&redef` The expiry interval of new entries in :bro:see:`Known::host_store`. +:bro:id:`Known::host_store_name`: :bro:type:`string` :bro:attr:`&redef` The Broker topic name to use for :bro:see:`Known::host_store`. +:bro:id:`Known::use_host_store`: :bro:type:`bool` :bro:attr:`&redef` Toggles between different implementations of this script. +=========================================================================== =================================================================== + +State Variables +############### +=================================================================================================== ================================================================= +:bro:id:`Known::host_store`: :bro:type:`Cluster::StoreInfo` Holds the set of all known hosts. +:bro:id:`Known::hosts`: :bro:type:`set` :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` The set of all known addresses to store for preventing duplicate + logging of addresses. +=================================================================================================== ================================================================= + +Types +##### +================================================ ======================================================================== +:bro:type:`Known::HostsInfo`: :bro:type:`record` The record type which contains the column fields of the known-hosts log. +================================================ ======================================================================== + +Redefinitions +############# +===================================== ========================================== +:bro:type:`Log::ID`: :bro:type:`enum` The known-hosts logging stream identifier. +===================================== ========================================== + +Events +###### +=================================================== ======================================================================= +:bro:id:`Known::log_known_hosts`: :bro:type:`event` An event that can be handled to access the :bro:type:`Known::HostsInfo` + record as it is sent on to the logging framework. +=================================================== ======================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Known::host_store_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``15.0 secs`` + + The timeout interval to use for operations against + :bro:see:`Known::host_store`. + +.. bro:id:: Known::host_tracking + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``ALL_HOSTS`` + + The hosts whose existence should be logged and tracked. + See :bro:type:`Host` for possible choices. + +Redefinable Options +################### +.. bro:id:: Known::host_store_expiry + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 day`` + + The expiry interval of new entries in :bro:see:`Known::host_store`. + This also changes the interval at which hosts get logged. + +.. bro:id:: Known::host_store_name + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/known/hosts"`` + + The Broker topic name to use for :bro:see:`Known::host_store`. + +.. bro:id:: Known::use_host_store + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Toggles between different implementations of this script. + When true, use a Broker data store, else use a regular Bro set + with keys uniformly distributed over proxy nodes in cluster + operation. + +State Variables +############### +.. bro:id:: Known::host_store + + :Type: :bro:type:`Cluster::StoreInfo` + :Default: + + :: + + { + name= + store= + master_node="" + master=F + backend=Broker::MEMORY + options=[sqlite=[path=""], rocksdb=[path=""]] + clone_resync_interval=10.0 secs + clone_stale_interval=5.0 mins + clone_mutation_buffer_interval=2.0 mins + } + + Holds the set of all known hosts. Keys in the store are addresses + and their associated value will always be the "true" boolean. + +.. bro:id:: Known::hosts + + :Type: :bro:type:`set` [:bro:type:`addr`] + :Attributes: :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` + :Default: ``{}`` + + The set of all known addresses to store for preventing duplicate + logging of addresses. It can also be used from other scripts to + inspect if an address has been seen in use. + Maintain the list of known hosts for 24 hours so that the existence + of each individual address is logged each day. + + In cluster operation, this set is distributed uniformly across + proxy nodes. + +Types +##### +.. bro:type:: Known::HostsInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The timestamp at which the host was detected. + + host: :bro:type:`addr` :bro:attr:`&log` + The address that was detected originating or responding to a + TCP connection. + + The record type which contains the column fields of the known-hosts log. + +Events +###### +.. bro:id:: Known::log_known_hosts + + :Type: :bro:type:`event` (rec: :bro:type:`Known::HostsInfo`) + + An event that can be handled to access the :bro:type:`Known::HostsInfo` + record as it is sent on to the logging framework. + + diff --git a/doc/scripts/policy/protocols/conn/known-services.bro.rst b/doc/scripts/policy/protocols/conn/known-services.bro.rst new file mode 100644 index 0000000000..a286ae320e --- /dev/null +++ b/doc/scripts/policy/protocols/conn/known-services.bro.rst @@ -0,0 +1,199 @@ +:tocdepth: 3 + +policy/protocols/conn/known-services.bro +======================================== +.. bro:namespace:: Known + +This script logs and tracks services. In the case of this script, a service +is defined as an IP address and port which has responded to and fully +completed a TCP handshake with another host. If a protocol is detected +during the session, the protocol will also be logged. + +:Namespace: Known +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/utils/directions-and-hosts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +=============================================================================== ====================================================== +:bro:id:`Known::service_store_timeout`: :bro:type:`interval` :bro:attr:`&redef` The timeout interval to use for operations against + :bro:see:`Known::service_store`. +:bro:id:`Known::service_tracking`: :bro:type:`Host` :bro:attr:`&redef` The hosts whose services should be tracked and logged. +=============================================================================== ====================================================== + +Redefinable Options +################### +============================================================================== ====================================================================== +:bro:id:`Known::service_store_expiry`: :bro:type:`interval` :bro:attr:`&redef` The expiry interval of new entries in :bro:see:`Known::service_store`. +:bro:id:`Known::service_store_name`: :bro:type:`string` :bro:attr:`&redef` The Broker topic name to use for :bro:see:`Known::service_store`. +:bro:id:`Known::use_service_store`: :bro:type:`bool` :bro:attr:`&redef` Toggles between different implementations of this script. +============================================================================== ====================================================================== + +State Variables +############### +=================================================================================== ==================================================================== +:bro:id:`Known::service_store`: :bro:type:`Cluster::StoreInfo` Holds the set of all known services. +:bro:id:`Known::services`: :bro:type:`set` :bro:attr:`&create_expire` = ``1.0 day`` Tracks the set of daily-detected services for preventing the logging + of duplicates, but can also be inspected by other scripts for + different purposes. +=================================================================================== ==================================================================== + +Types +##### +=================================================== ====================================================================== +:bro:type:`Known::AddrPortPair`: :bro:type:`record` +:bro:type:`Known::ServicesInfo`: :bro:type:`record` The record type which contains the column fields of the known-services + log. +=================================================== ====================================================================== + +Redefinitions +############# +========================================== ============================================= +:bro:type:`Log::ID`: :bro:type:`enum` The known-services logging stream identifier. +:bro:type:`connection`: :bro:type:`record` +========================================== ============================================= + +Events +###### +====================================================== ======================================================================= +:bro:id:`Known::log_known_services`: :bro:type:`event` Event that can be handled to access the :bro:type:`Known::ServicesInfo` + record as it is sent on to the logging framework. +====================================================== ======================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Known::service_store_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``15.0 secs`` + + The timeout interval to use for operations against + :bro:see:`Known::service_store`. + +.. bro:id:: Known::service_tracking + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``ALL_HOSTS`` + + The hosts whose services should be tracked and logged. + See :bro:type:`Host` for possible choices. + +Redefinable Options +################### +.. bro:id:: Known::service_store_expiry + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 day`` + + The expiry interval of new entries in :bro:see:`Known::service_store`. + This also changes the interval at which services get logged. + +.. bro:id:: Known::service_store_name + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/known/services"`` + + The Broker topic name to use for :bro:see:`Known::service_store`. + +.. bro:id:: Known::use_service_store + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Toggles between different implementations of this script. + When true, use a Broker data store, else use a regular Bro set + with keys uniformly distributed over proxy nodes in cluster + operation. + +State Variables +############### +.. bro:id:: Known::service_store + + :Type: :bro:type:`Cluster::StoreInfo` + :Default: + + :: + + { + name= + store= + master_node="" + master=F + backend=Broker::MEMORY + options=[sqlite=[path=""], rocksdb=[path=""]] + clone_resync_interval=10.0 secs + clone_stale_interval=5.0 mins + clone_mutation_buffer_interval=2.0 mins + } + + Holds the set of all known services. Keys in the store are + :bro:type:`Known::AddrPortPair` and their associated value is + always the boolean value of "true". + +.. bro:id:: Known::services + + :Type: :bro:type:`set` [:bro:type:`addr`, :bro:type:`port`] + :Attributes: :bro:attr:`&create_expire` = ``1.0 day`` + :Default: ``{}`` + + Tracks the set of daily-detected services for preventing the logging + of duplicates, but can also be inspected by other scripts for + different purposes. + + In cluster operation, this set is uniformly distributed across + proxy nodes. + + This set is automatically populated and shouldn't be directly modified. + +Types +##### +.. bro:type:: Known::AddrPortPair + + :Type: :bro:type:`record` + + host: :bro:type:`addr` + + p: :bro:type:`port` + + +.. bro:type:: Known::ServicesInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The time at which the service was detected. + + host: :bro:type:`addr` :bro:attr:`&log` + The host address on which the service is running. + + port_num: :bro:type:`port` :bro:attr:`&log` + The port number on which the service is running. + + port_proto: :bro:type:`transport_proto` :bro:attr:`&log` + The transport-layer protocol which the service uses. + + service: :bro:type:`set` [:bro:type:`string`] :bro:attr:`&log` + A set of protocols that match the service's connection payloads. + + The record type which contains the column fields of the known-services + log. + +Events +###### +.. bro:id:: Known::log_known_services + + :Type: :bro:type:`event` (rec: :bro:type:`Known::ServicesInfo`) + + Event that can be handled to access the :bro:type:`Known::ServicesInfo` + record as it is sent on to the logging framework. + + diff --git a/doc/scripts/policy/protocols/conn/mac-logging.bro.rst b/doc/scripts/policy/protocols/conn/mac-logging.bro.rst new file mode 100644 index 0000000000..57085f9fb6 --- /dev/null +++ b/doc/scripts/policy/protocols/conn/mac-logging.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/protocols/conn/mac-logging.bro +===================================== +.. bro:namespace:: Conn + +This script adds link-layer address (MAC) information to the connection logs + +:Namespace: Conn +:Imports: :doc:`base/protocols/conn ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`Conn::Info`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/conn/vlan-logging.bro.rst b/doc/scripts/policy/protocols/conn/vlan-logging.bro.rst new file mode 100644 index 0000000000..87fe5e4a4f --- /dev/null +++ b/doc/scripts/policy/protocols/conn/vlan-logging.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/protocols/conn/vlan-logging.bro +====================================== +.. bro:namespace:: Conn + +This script adds VLAN information to the connection log. + +:Namespace: Conn +:Imports: :doc:`base/protocols/conn ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`Conn::Info`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/conn/weirds.bro.rst b/doc/scripts/policy/protocols/conn/weirds.bro.rst new file mode 100644 index 0000000000..73112c89ba --- /dev/null +++ b/doc/scripts/policy/protocols/conn/weirds.bro.rst @@ -0,0 +1,27 @@ +:tocdepth: 3 + +policy/protocols/conn/weirds.bro +================================ +.. bro:namespace:: Conn + +This script handles core generated connection related "weird" events to +push weird information about connections into the weird framework. +For live operational deployments, this can frequently cause load issues +due to large numbers of these events and quite possibly shouldn't be +loaded. + +:Namespace: Conn +:Imports: :doc:`base/frameworks/notice ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/dhcp/deprecated_events.bro.rst b/doc/scripts/policy/protocols/dhcp/deprecated_events.bro.rst new file mode 100644 index 0000000000..6e3fd4e5d7 --- /dev/null +++ b/doc/scripts/policy/protocols/dhcp/deprecated_events.bro.rst @@ -0,0 +1,354 @@ +:tocdepth: 3 + +policy/protocols/dhcp/deprecated_events.bro +=========================================== + +Bro 2.6 removed certain DHCP events, but scripts in the Bro +ecosystem are still relying on those events. As a transition, this +script will handle the new event, and generate the old events, +which are marked as deprecated. Note: This script should be +removed in the next Bro version after 2.6. + +:Imports: :doc:`base/protocols/dhcp ` + +Summary +~~~~~~~ +Types +##### +=============================================== ==================================================== +:bro:type:`dhcp_msg`: :bro:type:`record` A DHCP message. +:bro:type:`dhcp_router_list`: :bro:type:`table` A list of router addresses offered by a DHCP server. +=============================================== ==================================================== + +Events +###### +================================================================== =================================================================================== +:bro:id:`dhcp_ack`: :bro:type:`event` :bro:attr:`&deprecated` Generated for DHCP messages of type *DHCPACK* (Server to client with configuration + parameters, including committed network address). +:bro:id:`dhcp_decline`: :bro:type:`event` :bro:attr:`&deprecated` Generated for DHCP messages of type *DHCPDECLINE* (Client to server indicating + network address is already in use). +:bro:id:`dhcp_discover`: :bro:type:`event` :bro:attr:`&deprecated` Generated for DHCP messages of type *DHCPDISCOVER* (client broadcast to locate + available servers). +:bro:id:`dhcp_inform`: :bro:type:`event` :bro:attr:`&deprecated` Generated for DHCP messages of type *DHCPINFORM* (Client to server, asking only for + local configuration parameters; client already has externally configured network + address). +:bro:id:`dhcp_nak`: :bro:type:`event` :bro:attr:`&deprecated` Generated for DHCP messages of type *DHCPNAK* (Server to client indicating client's + notion of network address is incorrect (e.g., client has moved to new subnet) or + client's lease has expired). +:bro:id:`dhcp_offer`: :bro:type:`event` :bro:attr:`&deprecated` Generated for DHCP messages of type *DHCPOFFER* (server to client in response + to DHCPDISCOVER with offer of configuration parameters). +:bro:id:`dhcp_release`: :bro:type:`event` :bro:attr:`&deprecated` Generated for DHCP messages of type *DHCPRELEASE* (Client to server relinquishing + network address and cancelling remaining lease). +:bro:id:`dhcp_request`: :bro:type:`event` :bro:attr:`&deprecated` Generated for DHCP messages of type *DHCPREQUEST* (Client message to servers either + (a) requesting offered parameters from one server and implicitly declining offers + from all others, (b) confirming correctness of previously allocated address after, + e.g., system reboot, or (c) extending the lease on a particular network address.) +================================================================== =================================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: dhcp_msg + + :Type: :bro:type:`record` + + op: :bro:type:`count` + Message OP code. 1 = BOOTREQUEST, 2 = BOOTREPLY + + m_type: :bro:type:`count` + The type of DHCP message. + + xid: :bro:type:`count` + Transaction ID of a DHCP session. + + h_addr: :bro:type:`string` + Hardware address of the client. + + ciaddr: :bro:type:`addr` + Original IP address of the client. + + yiaddr: :bro:type:`addr` + IP address assigned to the client. + + A DHCP message. + + .. note:: This type is included to support the deprecated events dhcp_ack, + dhcp_decline, dhcp_discover, dhcp_inform, dhcp_nak, dhcp_offer, + dhcp_release and dhcp_request and is thus similarly deprecated + itself. Use :bro:see:`dhcp_message` instead. + + .. bro:see:: dhcp_message dhcp_ack dhcp_decline dhcp_discover + dhcp_inform dhcp_nak dhcp_offer dhcp_release dhcp_request + +.. bro:type:: dhcp_router_list + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`addr` + + A list of router addresses offered by a DHCP server. + + .. note:: This type is included to support the deprecated events dhcp_ack + and dhcp_offer and is thus similarly deprecated + itself. Use :bro:see:`dhcp_message` instead. + + .. bro:see:: dhcp_message dhcp_ack dhcp_offer + +Events +###### +.. bro:id:: dhcp_ack + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dhcp_msg`, mask: :bro:type:`addr`, router: :bro:type:`dhcp_router_list`, lease: :bro:type:`interval`, serv_addr: :bro:type:`addr`, host_name: :bro:type:`string`) + :Attributes: :bro:attr:`&deprecated` + + Generated for DHCP messages of type *DHCPACK* (Server to client with configuration + parameters, including committed network address). + + + :c: The connection record describing the underlying UDP flow. + + + :msg: The parsed type-independent part of the DHCP message. + + + :mask: The subnet mask specified by the message. + + + :router: The list of routers specified by the message. + + + :lease: The least interval specified by the message. + + + :serv_addr: The server address specified by the message. + + + :host_name: Optional host name value. May differ from the host name requested + from the client. + + .. bro:see:: dhcp_message dhcp_discover dhcp_offer dhcp_request + dhcp_decline dhcp_nak dhcp_release dhcp_inform + + .. note:: This event has been deprecated, and will be removed in the next version. + Use dhcp_message instead. + + +.. bro:id:: dhcp_decline + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dhcp_msg`, host_name: :bro:type:`string`) + :Attributes: :bro:attr:`&deprecated` + + Generated for DHCP messages of type *DHCPDECLINE* (Client to server indicating + network address is already in use). + + + :c: The connection record describing the underlying UDP flow. + + + :msg: The parsed type-independent part of the DHCP message. + + + :host_name: Optional host name value. + + .. bro:see:: dhcp_message dhcp_discover dhcp_offer dhcp_request + dhcp_ack dhcp_nak dhcp_release dhcp_inform + + .. note:: This event has been deprecated, and will be removed in the next version. + Use dhcp_message instead. + + .. note:: Bro does not support broadcast packets (as used by the DHCP + protocol). It treats broadcast addresses just like any other and + associates packets into transport-level flows in the same way as usual. + + +.. bro:id:: dhcp_discover + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dhcp_msg`, req_addr: :bro:type:`addr`, host_name: :bro:type:`string`) + :Attributes: :bro:attr:`&deprecated` + + Generated for DHCP messages of type *DHCPDISCOVER* (client broadcast to locate + available servers). + + + :c: The connection record describing the underlying UDP flow. + + + :msg: The parsed type-independent part of the DHCP message. + + + :req_addr: The specific address requested by the client. + + + :host_name: The value of the host name option, if specified by the client. + + .. bro:see:: dhcp_message dhcp_discover dhcp_offer dhcp_request + dhcp_decline dhcp_ack dhcp_nak dhcp_release dhcp_inform + + .. note:: This event has been deprecated, and will be removed in the next version. + Use dhcp_message instead. + + .. note:: Bro does not support broadcast packets (as used by the DHCP + protocol). It treats broadcast addresses just like any other and + associates packets into transport-level flows in the same way as usual. + + +.. bro:id:: dhcp_inform + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dhcp_msg`, host_name: :bro:type:`string`) + :Attributes: :bro:attr:`&deprecated` + + Generated for DHCP messages of type *DHCPINFORM* (Client to server, asking only for + local configuration parameters; client already has externally configured network + address). + + + :c: The connection record describing the underlying UDP flow. + + + :msg: The parsed type-independent part of the DHCP message. + + + :host_name: The value of the host name option, if specified by the client. + + .. bro:see:: dhcp_message dhcp_discover dhcp_offer dhcp_request + dhcp_decline dhcp_ack dhcp_nak dhcp_release + + .. note:: This event has been deprecated, and will be removed in the next version. + Use dhcp_message instead. + + .. note:: Bro does not support broadcast packets (as used by the DHCP + protocol). It treats broadcast addresses just like any other and + associates packets into transport-level flows in the same way as usual. + + +.. bro:id:: dhcp_nak + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dhcp_msg`, host_name: :bro:type:`string`) + :Attributes: :bro:attr:`&deprecated` + + Generated for DHCP messages of type *DHCPNAK* (Server to client indicating client's + notion of network address is incorrect (e.g., client has moved to new subnet) or + client's lease has expired). + + + :c: The connection record describing the underlying UDP flow. + + + :msg: The parsed type-independent part of the DHCP message. + + + :host_name: Optional host name value. + + .. bro:see:: dhcp_message dhcp_discover dhcp_offer dhcp_request + dhcp_decline dhcp_ack dhcp_release dhcp_inform + + .. note:: This event has been deprecated, and will be removed in the next version. + Use dhcp_message instead. + + .. note:: Bro does not support broadcast packets (as used by the DHCP + protocol). It treats broadcast addresses just like any other and + associates packets into transport-level flows in the same way as usual. + + +.. bro:id:: dhcp_offer + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dhcp_msg`, mask: :bro:type:`addr`, router: :bro:type:`dhcp_router_list`, lease: :bro:type:`interval`, serv_addr: :bro:type:`addr`, host_name: :bro:type:`string`) + :Attributes: :bro:attr:`&deprecated` + + Generated for DHCP messages of type *DHCPOFFER* (server to client in response + to DHCPDISCOVER with offer of configuration parameters). + + + :c: The connection record describing the underlying UDP flow. + + + :msg: The parsed type-independent part of the DHCP message. + + + :mask: The subnet mask specified by the message. + + + :router: The list of routers specified by the message. + + + :lease: The least interval specified by the message. + + + :serv_addr: The server address specified by the message. + + + :host_name: Optional host name value. May differ from the host name requested + from the client. + + .. bro:see:: dhcp_message dhcp_discover dhcp_request dhcp_decline + dhcp_ack dhcp_nak dhcp_release dhcp_inform + + .. note:: This event has been deprecated, and will be removed in the next version. + Use dhcp_message instead. + + .. note:: Bro does not support broadcast packets (as used by the DHCP + protocol). It treats broadcast addresses just like any other and + associates packets into transport-level flows in the same way as usual. + + +.. bro:id:: dhcp_release + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dhcp_msg`, host_name: :bro:type:`string`) + :Attributes: :bro:attr:`&deprecated` + + Generated for DHCP messages of type *DHCPRELEASE* (Client to server relinquishing + network address and cancelling remaining lease). + + + :c: The connection record describing the underlying UDP flow. + + + :msg: The parsed type-independent part of the DHCP message. + + + :host_name: The value of the host name option, if specified by the client. + + .. bro:see:: dhcp_message dhcp_discover dhcp_offer dhcp_request + dhcp_decline dhcp_ack dhcp_nak dhcp_inform + + .. note:: This event has been deprecated, and will be removed in the next version. + Use dhcp_message instead. + + +.. bro:id:: dhcp_request + + :Type: :bro:type:`event` (c: :bro:type:`connection`, msg: :bro:type:`dhcp_msg`, req_addr: :bro:type:`addr`, serv_addr: :bro:type:`addr`, host_name: :bro:type:`string`) + :Attributes: :bro:attr:`&deprecated` + + Generated for DHCP messages of type *DHCPREQUEST* (Client message to servers either + (a) requesting offered parameters from one server and implicitly declining offers + from all others, (b) confirming correctness of previously allocated address after, + e.g., system reboot, or (c) extending the lease on a particular network address.) + + + :c: The connection record describing the underlying UDP flow. + + + :msg: The parsed type-independent part of the DHCP message. + + + :req_addr: The client address specified by the message. + + + :serv_addr: The server address specified by the message. + + + :host_name: The value of the host name option, if specified by the client. + + .. bro:see:: dhcp_message dhcp_discover dhcp_offer dhcp_decline + dhcp_ack dhcp_nak dhcp_release dhcp_inform + + .. note:: This event has been deprecated, and will be removed in the next version. + Use dhcp_message instead. + + .. note:: Bro does not support broadcast packets (as used by the DHCP + protocol). It treats broadcast addresses just like any other and + associates packets into transport-level flows in the same way as usual. + + + diff --git a/doc/scripts/policy/protocols/dhcp/msg-orig.bro.rst b/doc/scripts/policy/protocols/dhcp/msg-orig.bro.rst new file mode 100644 index 0000000000..87c84d711e --- /dev/null +++ b/doc/scripts/policy/protocols/dhcp/msg-orig.bro.rst @@ -0,0 +1,26 @@ +:tocdepth: 3 + +policy/protocols/dhcp/msg-orig.bro +================================== +.. bro:namespace:: DHCP + +Add a field that logs the order of hosts sending messages +using the same DHCP transaction ID. This information is +occasionally needed on some networks to fully explain the +DHCP sequence. + +:Namespace: DHCP +:Imports: :doc:`base/protocols/dhcp ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`DHCP::Info`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/dhcp/software.bro.rst b/doc/scripts/policy/protocols/dhcp/software.bro.rst new file mode 100644 index 0000000000..e621a7dffb --- /dev/null +++ b/doc/scripts/policy/protocols/dhcp/software.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +policy/protocols/dhcp/software.bro +================================== +.. bro:namespace:: DHCP + +Software identification and extraction for DHCP traffic. + +:Namespace: DHCP +:Imports: :doc:`base/frameworks/software `, :doc:`base/protocols/dhcp ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================ = +:bro:type:`DHCP::Info`: :bro:type:`record` +:bro:type:`Software::Type`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/dhcp/sub-opts.bro.rst b/doc/scripts/policy/protocols/dhcp/sub-opts.bro.rst new file mode 100644 index 0000000000..8dffc5577b --- /dev/null +++ b/doc/scripts/policy/protocols/dhcp/sub-opts.bro.rst @@ -0,0 +1,22 @@ +:tocdepth: 3 + +policy/protocols/dhcp/sub-opts.bro +================================== +.. bro:namespace:: DHCP + + +:Namespace: DHCP +:Imports: :doc:`base/protocols/dhcp ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`DHCP::Info`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/dns/auth-addl.bro.rst b/doc/scripts/policy/protocols/dns/auth-addl.bro.rst new file mode 100644 index 0000000000..d7c86e1daf --- /dev/null +++ b/doc/scripts/policy/protocols/dns/auth-addl.bro.rst @@ -0,0 +1,28 @@ +:tocdepth: 3 + +policy/protocols/dns/auth-addl.bro +================================== +.. bro:namespace:: DNS + +This script adds authoritative and additional responses for the current +query to the DNS log. It can cause severe overhead due to the need +for all authoritative and additional responses to have events generated. +This script is not recommended for use on heavily loaded links. + +:Namespace: DNS +:Imports: :doc:`base/protocols/dns/main.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +================================================================ = +:bro:type:`DNS::Info`: :bro:type:`record` +:bro:id:`dns_skip_all_addl`: :bro:type:`bool` :bro:attr:`&redef` +:bro:id:`dns_skip_all_auth`: :bro:type:`bool` :bro:attr:`&redef` +================================================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/dns/detect-external-names.bro.rst b/doc/scripts/policy/protocols/dns/detect-external-names.bro.rst new file mode 100644 index 0000000000..dbb44bab84 --- /dev/null +++ b/doc/scripts/policy/protocols/dns/detect-external-names.bro.rst @@ -0,0 +1,26 @@ +:tocdepth: 3 + +policy/protocols/dns/detect-external-names.bro +============================================== +.. bro:namespace:: DNS + +This script detects names which are not within zones considered to be +local but resolving to addresses considered local. +The :bro:id:`Site::local_zones` variable **must** be set appropriately for +this detection. + +:Namespace: DNS +:Imports: :doc:`base/frameworks/notice `, :doc:`base/utils/site.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/ftp/detect-bruteforcing.bro.rst b/doc/scripts/policy/protocols/ftp/detect-bruteforcing.bro.rst new file mode 100644 index 0000000000..b90b6e1611 --- /dev/null +++ b/doc/scripts/policy/protocols/ftp/detect-bruteforcing.bro.rst @@ -0,0 +1,53 @@ +:tocdepth: 3 + +policy/protocols/ftp/detect-bruteforcing.bro +============================================ +.. bro:namespace:: FTP + +FTP brute-forcing detector, triggering when too many rejected usernames or +failed passwords have occurred from a single address. + +:Namespace: FTP +:Imports: :doc:`base/frameworks/sumstats `, :doc:`base/protocols/ftp `, :doc:`base/utils/time.bro ` + +Summary +~~~~~~~ +Redefinable Options +################### +======================================================================================= ================================================================== +:bro:id:`FTP::bruteforce_measurement_interval`: :bro:type:`interval` :bro:attr:`&redef` The time period in which the threshold needs to be crossed before + being reset. +:bro:id:`FTP::bruteforce_threshold`: :bro:type:`double` :bro:attr:`&redef` How many rejected usernames or passwords are required before being + considered to be bruteforcing. +======================================================================================= ================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: FTP::bruteforce_measurement_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``15.0 mins`` + + The time period in which the threshold needs to be crossed before + being reset. + +.. bro:id:: FTP::bruteforce_threshold + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``20.0`` + + How many rejected usernames or passwords are required before being + considered to be bruteforcing. + + diff --git a/doc/scripts/policy/protocols/ftp/detect.bro.rst b/doc/scripts/policy/protocols/ftp/detect.bro.rst new file mode 100644 index 0000000000..ead2b607e7 --- /dev/null +++ b/doc/scripts/policy/protocols/ftp/detect.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/protocols/ftp/detect.bro +=============================== +.. bro:namespace:: FTP + +Detect various potentially bad FTP activities. + +:Namespace: FTP +:Imports: :doc:`base/frameworks/notice `, :doc:`base/protocols/ftp ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/ftp/software.bro.rst b/doc/scripts/policy/protocols/ftp/software.bro.rst new file mode 100644 index 0000000000..c257fca4b7 --- /dev/null +++ b/doc/scripts/policy/protocols/ftp/software.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/protocols/ftp/software.bro +================================= +.. bro:namespace:: FTP + +Software detection with the FTP protocol. + +:Namespace: FTP +:Imports: :doc:`base/frameworks/software ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================ = +:bro:type:`Software::Type`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/http/detect-sqli.bro.rst b/doc/scripts/policy/protocols/http/detect-sqli.bro.rst new file mode 100644 index 0000000000..66a58e68ab --- /dev/null +++ b/doc/scripts/policy/protocols/http/detect-sqli.bro.rst @@ -0,0 +1,98 @@ +:tocdepth: 3 + +policy/protocols/http/detect-sqli.bro +===================================== +.. bro:namespace:: HTTP + +SQL injection attack detection in HTTP. + +:Namespace: HTTP +:Imports: :doc:`base/frameworks/notice `, :doc:`base/frameworks/sumstats `, :doc:`base/protocols/http ` + +Summary +~~~~~~~ +Redefinable Options +################### +=============================================================================== ================================================================ +:bro:id:`HTTP::collect_SQLi_samples`: :bro:type:`count` :bro:attr:`&redef` Collecting samples will add extra data to notice emails + by collecting some sample SQL injection url paths. +:bro:id:`HTTP::match_sql_injection_uri`: :bro:type:`pattern` :bro:attr:`&redef` Regular expression is used to match URI based SQL injections. +:bro:id:`HTTP::sqli_requests_interval`: :bro:type:`interval` :bro:attr:`&redef` Interval at which to watch for the + :bro:id:`HTTP::sqli_requests_threshold` variable to be crossed. +:bro:id:`HTTP::sqli_requests_threshold`: :bro:type:`double` :bro:attr:`&redef` Defines the threshold that determines if an SQL injection attack + is ongoing based on the number of requests that appear to be SQL + injection attacks. +=============================================================================== ================================================================ + +Redefinitions +############# +========================================== = +:bro:type:`HTTP::Tags`: :bro:type:`enum` +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + +Hooks +##### +============================================= ======================================================================= +:bro:id:`HTTP::sqli_policy`: :bro:type:`hook` A hook that can be used to prevent specific requests from being counted + as an injection attempt. +============================================= ======================================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: HTTP::collect_SQLi_samples + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``5`` + + Collecting samples will add extra data to notice emails + by collecting some sample SQL injection url paths. Disable + sample collection by setting this value to 0. + +.. bro:id:: HTTP::match_sql_injection_uri + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /^?((^?((^?((^?((^?((^?([\?&][^[:blank:]\x00-\x37\|]+?=[\-[:alnum:]%]+([[:blank:]\x00-\x37]|\/\*.*?\*\/)*['"]?([[:blank:]\x00-\x37]|\/\*.*?\*\/|\)?;)+.*?([hH][aA][vV][iI][nN][gG]|[uU][nN][iI][oO][nN]|[eE][xX][eE][cC]|[sS][eE][lL][eE][cC][tT]|[dD][eE][lL][eE][tT][eE]|[dD][rR][oO][pP]|[dD][eE][cC][lL][aA][rR][eE]|[cC][rR][eE][aA][tT][eE]|[iI][nN][sS][eE][rR][tT])([[:blank:]\x00-\x37]|\/\*.*?\*\/)+)$?)|(^?([\?&][^[:blank:]\x00-\x37\|]+?=[\-0-9%]+([[:blank:]\x00-\x37]|\/\*.*?\*\/)*['"]?([[:blank:]\x00-\x37]|\/\*.*?\*\/|\)?;)+([xX]?[oO][rR]|[nN]?[aA][nN][dD])([[:blank:]\x00-\x37]|\/\*.*?\*\/)+['"]?(([^a-zA-Z&]+)?=|[eE][xX][iI][sS][tT][sS]))$?))$?)|(^?([\?&][^[:blank:]\x00-\x37]+?=[\-0-9%]*([[:blank:]\x00-\x37]|\/\*.*?\*\/)*['"]([[:blank:]\x00-\x37]|\/\*.*?\*\/)*(-|=|\+|\|\|)([[:blank:]\x00-\x37]|\/\*.*?\*\/)*([0-9]|\(?[cC][oO][nN][vV][eE][rR][tT]|[cC][aA][sS][tT]))$?))$?)|(^?([\?&][^[:blank:]\x00-\x37\|]+?=([[:blank:]\x00-\x37]|\/\*.*?\*\/)*['"]([[:blank:]\x00-\x37]|\/\*.*?\*\/|;)*([xX]?[oO][rR]|[nN]?[aA][nN][dD]|[hH][aA][vV][iI][nN][gG]|[uU][nN][iI][oO][nN]|[eE][xX][eE][cC]|[sS][eE][lL][eE][cC][tT]|[dD][eE][lL][eE][tT][eE]|[dD][rR][oO][pP]|[dD][eE][cC][lL][aA][rR][eE]|[cC][rR][eE][aA][tT][eE]|[rR][eE][gG][eE][xX][pP]|[iI][nN][sS][eE][rR][tT])([[:blank:]\x00-\x37]|\/\*.*?\*\/|[\[(])+[a-zA-Z&]{2,})$?))$?)|(^?([\?&][^[:blank:]\x00-\x37]+?=[^\.]*?([cC][hH][aA][rR]|[aA][sS][cC][iI][iI]|[sS][uU][bB][sS][tT][rR][iI][nN][gG]|[tT][rR][uU][nN][cC][aA][tT][eE]|[vV][eE][rR][sS][iI][oO][nN]|[lL][eE][nN][gG][tT][hH])\()$?))$?)|(^?(\/\*![[:digit:]]{5}.*?\*\/)$?))$?/ + + Regular expression is used to match URI based SQL injections. + +.. bro:id:: HTTP::sqli_requests_interval + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``5.0 mins`` + + Interval at which to watch for the + :bro:id:`HTTP::sqli_requests_threshold` variable to be crossed. + At the end of each interval the counter is reset. + +.. bro:id:: HTTP::sqli_requests_threshold + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``50.0`` + + Defines the threshold that determines if an SQL injection attack + is ongoing based on the number of requests that appear to be SQL + injection attacks. + +Hooks +##### +.. bro:id:: HTTP::sqli_policy + + :Type: :bro:type:`hook` (c: :bro:type:`connection`, method: :bro:type:`string`, unescaped_URI: :bro:type:`string`) : :bro:type:`bool` + + A hook that can be used to prevent specific requests from being counted + as an injection attempt. Use a 'break' statement to exit the hook + early and ignore the request. + + diff --git a/doc/scripts/policy/protocols/http/detect-webapps.bro.rst b/doc/scripts/policy/protocols/http/detect-webapps.bro.rst new file mode 100644 index 0000000000..45ab3fa949 --- /dev/null +++ b/doc/scripts/policy/protocols/http/detect-webapps.bro.rst @@ -0,0 +1,25 @@ +:tocdepth: 3 + +policy/protocols/http/detect-webapps.bro +======================================== +.. bro:namespace:: HTTP + +Detect and log web applications through the software framework. + +:Namespace: HTTP +:Imports: :doc:`base/frameworks/signatures `, :doc:`base/frameworks/software `, :doc:`base/protocols/http ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================================================= = +:bro:id:`Signatures::ignored_ids`: :bro:type:`pattern` :bro:attr:`&redef` +:bro:type:`Software::Info`: :bro:type:`record` +:bro:type:`Software::Type`: :bro:type:`enum` +========================================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/http/header-names.bro.rst b/doc/scripts/policy/protocols/http/header-names.bro.rst new file mode 100644 index 0000000000..8ea9cfcc1e --- /dev/null +++ b/doc/scripts/policy/protocols/http/header-names.bro.rst @@ -0,0 +1,50 @@ +:tocdepth: 3 + +policy/protocols/http/header-names.bro +====================================== +.. bro:namespace:: HTTP + +Extract and include the header names used for each request in the HTTP +logging stream. The headers in the logging stream will be stored in the +same order which they were seen on the wire. + +:Namespace: HTTP +:Imports: :doc:`base/protocols/http/main.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================ ===================================================================== +:bro:id:`HTTP::log_client_header_names`: :bro:type:`bool` :bro:attr:`&redef` A boolean value to determine if client header names are to be logged. +:bro:id:`HTTP::log_server_header_names`: :bro:type:`bool` :bro:attr:`&redef` A boolean value to determine if server header names are to be logged. +============================================================================ ===================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`HTTP::Info`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: HTTP::log_client_header_names + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + A boolean value to determine if client header names are to be logged. + +.. bro:id:: HTTP::log_server_header_names + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``F`` + + A boolean value to determine if server header names are to be logged. + + diff --git a/doc/scripts/policy/protocols/http/software-browser-plugins.bro.rst b/doc/scripts/policy/protocols/http/software-browser-plugins.bro.rst new file mode 100644 index 0000000000..cacbda5e9e --- /dev/null +++ b/doc/scripts/policy/protocols/http/software-browser-plugins.bro.rst @@ -0,0 +1,25 @@ +:tocdepth: 3 + +policy/protocols/http/software-browser-plugins.bro +================================================== +.. bro:namespace:: HTTP + +Detect browser plugins as they leak through requests to Omniture +advertising servers. + +:Namespace: HTTP +:Imports: :doc:`base/frameworks/software `, :doc:`base/protocols/http ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================ = +:bro:type:`HTTP::Info`: :bro:type:`record` +:bro:type:`Software::Type`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/http/software.bro.rst b/doc/scripts/policy/protocols/http/software.bro.rst new file mode 100644 index 0000000000..1da3eff390 --- /dev/null +++ b/doc/scripts/policy/protocols/http/software.bro.rst @@ -0,0 +1,43 @@ +:tocdepth: 3 + +policy/protocols/http/software.bro +================================== +.. bro:namespace:: HTTP + +Software identification and extraction for HTTP traffic. + +:Namespace: HTTP +:Imports: :doc:`base/frameworks/software ` + +Summary +~~~~~~~ +Runtime Options +############### +=========================================================================== =============================================================== +:bro:id:`HTTP::ignored_user_agents`: :bro:type:`pattern` :bro:attr:`&redef` The pattern of HTTP User-Agents which you would like to ignore. +=========================================================================== =============================================================== + +Redefinitions +############# +============================================ = +:bro:type:`Software::Type`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: HTTP::ignored_user_agents + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /^?(NO_DEFAULT)$?/ + + The pattern of HTTP User-Agents which you would like to ignore. + + diff --git a/doc/scripts/policy/protocols/http/var-extraction-cookies.bro.rst b/doc/scripts/policy/protocols/http/var-extraction-cookies.bro.rst new file mode 100644 index 0000000000..5d1aafd5de --- /dev/null +++ b/doc/scripts/policy/protocols/http/var-extraction-cookies.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/protocols/http/var-extraction-cookies.bro +================================================ +.. bro:namespace:: HTTP + +Extracts and logs variable names from cookies sent by clients. + +:Namespace: HTTP +:Imports: :doc:`base/protocols/http/main.bro `, :doc:`base/protocols/http/utils.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`HTTP::Info`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/http/var-extraction-uri.bro.rst b/doc/scripts/policy/protocols/http/var-extraction-uri.bro.rst new file mode 100644 index 0000000000..398352dd43 --- /dev/null +++ b/doc/scripts/policy/protocols/http/var-extraction-uri.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +policy/protocols/http/var-extraction-uri.bro +============================================ +.. bro:namespace:: HTTP + +Extracts and logs variables from the requested URI in the default HTTP +logging stream. + +:Namespace: HTTP +:Imports: :doc:`base/protocols/http ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`HTTP::Info`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/krb/ticket-logging.bro.rst b/doc/scripts/policy/protocols/krb/ticket-logging.bro.rst new file mode 100644 index 0000000000..2b24267fe2 --- /dev/null +++ b/doc/scripts/policy/protocols/krb/ticket-logging.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/protocols/krb/ticket-logging.bro +======================================= +.. bro:namespace:: KRB + +Add Kerberos ticket hashes to the krb.log + +:Namespace: KRB +:Imports: :doc:`base/protocols/krb ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================= = +:bro:type:`KRB::Info`: :bro:type:`record` +========================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/modbus/known-masters-slaves.bro.rst b/doc/scripts/policy/protocols/modbus/known-masters-slaves.bro.rst new file mode 100644 index 0000000000..1f6b379e56 --- /dev/null +++ b/doc/scripts/policy/protocols/modbus/known-masters-slaves.bro.rst @@ -0,0 +1,91 @@ +:tocdepth: 3 + +policy/protocols/modbus/known-masters-slaves.bro +================================================ +.. bro:namespace:: Known + +Script for tracking known Modbus masters and slaves. + +.. todo:: This script needs a lot of work. What might be more interesting + is to track master/slave relationships based on commands sent and + successful (non-exception) responses. + +:Namespace: Known +:Imports: :doc:`base/protocols/modbus ` + +Summary +~~~~~~~ +State Variables +############### +========================================================================================================== =============================== +:bro:id:`Known::modbus_nodes`: :bro:type:`set` :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` The Modbus nodes being tracked. +========================================================================================================== =============================== + +Types +##### +===================================================== = +:bro:type:`Known::ModbusDeviceType`: :bro:type:`enum` +:bro:type:`Known::ModbusInfo`: :bro:type:`record` +===================================================== = + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +==================================================== ===================================================================== +:bro:id:`Known::log_known_modbus`: :bro:type:`event` Event that can be handled to access the loggable record as it is sent + on to the logging framework. +==================================================== ===================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +State Variables +############### +.. bro:id:: Known::modbus_nodes + + :Type: :bro:type:`set` [:bro:type:`addr`, :bro:type:`Known::ModbusDeviceType`] + :Attributes: :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` + :Default: ``{}`` + + The Modbus nodes being tracked. + +Types +##### +.. bro:type:: Known::ModbusDeviceType + + :Type: :bro:type:`enum` + + .. bro:enum:: Known::MODBUS_MASTER Known::ModbusDeviceType + + .. bro:enum:: Known::MODBUS_SLAVE Known::ModbusDeviceType + + +.. bro:type:: Known::ModbusInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The time the device was discovered. + + host: :bro:type:`addr` :bro:attr:`&log` + The IP address of the host. + + device_type: :bro:type:`Known::ModbusDeviceType` :bro:attr:`&log` + The type of device being tracked. + + +Events +###### +.. bro:id:: Known::log_known_modbus + + :Type: :bro:type:`event` (rec: :bro:type:`Known::ModbusInfo`) + + Event that can be handled to access the loggable record as it is sent + on to the logging framework. + + diff --git a/doc/scripts/policy/protocols/modbus/track-memmap.bro.rst b/doc/scripts/policy/protocols/modbus/track-memmap.bro.rst new file mode 100644 index 0000000000..e4408d0af5 --- /dev/null +++ b/doc/scripts/policy/protocols/modbus/track-memmap.bro.rst @@ -0,0 +1,126 @@ +:tocdepth: 3 + +policy/protocols/modbus/track-memmap.bro +======================================== +.. bro:namespace:: Modbus + +This script tracks the memory map of holding (read/write) registers and logs +changes as they are discovered. + +.. todo:: Not all register read and write functions are supported yet. + +:Namespace: Modbus +:Imports: :doc:`base/protocols/modbus `, :doc:`base/utils/directions-and-hosts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +=================================================================== ================================================== +:bro:id:`Modbus::track_memmap`: :bro:type:`Host` :bro:attr:`&redef` The hosts that should have memory mapping enabled. +=================================================================== ================================================== + +State Variables +############### +===================================================== ======================================================= +:bro:id:`Modbus::device_registers`: :bro:type:`table` The memory map of slaves is tracked with this variable. +===================================================== ======================================================= + +Types +##### +===================================================== ===================================================================== +:bro:type:`Modbus::MemmapInfo`: :bro:type:`record` +:bro:type:`Modbus::RegisterValue`: :bro:type:`record` +:bro:type:`Modbus::Registers`: :bro:type:`table` Indexed on the device register value and yielding the register value. +===================================================== ===================================================================== + +Redefinitions +############# +============================================ = +:bro:type:`Log::ID`: :bro:type:`enum` +:bro:type:`Modbus::Info`: :bro:type:`record` +============================================ = + +Events +###### +===================================================== ===================================================================== +:bro:id:`Modbus::changed_register`: :bro:type:`event` This event is generated every time a register is seen to be different + than it was previously seen to be. +===================================================== ===================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Modbus::track_memmap + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``ALL_HOSTS`` + + The hosts that should have memory mapping enabled. + +State Variables +############### +.. bro:id:: Modbus::device_registers + + :Type: :bro:type:`table` [:bro:type:`addr`] of :bro:type:`Modbus::Registers` + :Default: ``{}`` + + The memory map of slaves is tracked with this variable. + +Types +##### +.. bro:type:: Modbus::MemmapInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + Timestamp for the detected register change. + + uid: :bro:type:`string` :bro:attr:`&log` + Unique ID for the connection. + + id: :bro:type:`conn_id` :bro:attr:`&log` + Connection ID. + + register: :bro:type:`count` :bro:attr:`&log` + The device memory offset. + + old_val: :bro:type:`count` :bro:attr:`&log` + The old value stored in the register. + + new_val: :bro:type:`count` :bro:attr:`&log` + The new value stored in the register. + + delta: :bro:type:`interval` :bro:attr:`&log` + The time delta between when the *old_val* and *new_val* were + seen. + + +.. bro:type:: Modbus::RegisterValue + + :Type: :bro:type:`record` + + last_set: :bro:type:`time` + + value: :bro:type:`count` + + +.. bro:type:: Modbus::Registers + + :Type: :bro:type:`table` [:bro:type:`count`] of :bro:type:`Modbus::RegisterValue` + + Indexed on the device register value and yielding the register value. + +Events +###### +.. bro:id:: Modbus::changed_register + + :Type: :bro:type:`event` (c: :bro:type:`connection`, register: :bro:type:`count`, old_val: :bro:type:`count`, new_val: :bro:type:`count`, delta: :bro:type:`interval`) + + This event is generated every time a register is seen to be different + than it was previously seen to be. + + diff --git a/doc/scripts/policy/protocols/mysql/software.bro.rst b/doc/scripts/policy/protocols/mysql/software.bro.rst new file mode 100644 index 0000000000..7340b616b5 --- /dev/null +++ b/doc/scripts/policy/protocols/mysql/software.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/protocols/mysql/software.bro +=================================== +.. bro:namespace:: MySQL + +Software identification and extraction for MySQL traffic. + +:Namespace: MySQL +:Imports: :doc:`base/frameworks/software ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================ = +:bro:type:`Software::Type`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/rdp/indicate_ssl.bro.rst b/doc/scripts/policy/protocols/rdp/indicate_ssl.bro.rst new file mode 100644 index 0000000000..40b8a5bd59 --- /dev/null +++ b/doc/scripts/policy/protocols/rdp/indicate_ssl.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +policy/protocols/rdp/indicate_ssl.bro +===================================== +.. bro:namespace:: RDP + +If an RDP session is "upgraded" to SSL, this will be indicated +with this script in a new field added to the RDP log. + +:Namespace: RDP +:Imports: :doc:`base/protocols/rdp `, :doc:`base/protocols/ssl ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================= = +:bro:type:`RDP::Info`: :bro:type:`record` +========================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/smb/__load__.bro.rst b/doc/scripts/policy/protocols/smb/__load__.bro.rst new file mode 100644 index 0000000000..356c480ce2 --- /dev/null +++ b/doc/scripts/policy/protocols/smb/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/protocols/smb/__load__.bro +================================= + + +:Imports: :doc:`base/protocols/smb ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/smb/index.rst b/doc/scripts/policy/protocols/smb/index.rst new file mode 100644 index 0000000000..b5784596d6 --- /dev/null +++ b/doc/scripts/policy/protocols/smb/index.rst @@ -0,0 +1,14 @@ +:orphan: + +Package: policy/protocols/smb +============================= + + +:doc:`/scripts/policy/protocols/smb/log-cmds.bro` + + Load this script to generate an SMB command log, smb_cmd.log. + This is primarily useful for debugging. + +:doc:`/scripts/policy/protocols/smb/__load__.bro` + + diff --git a/doc/scripts/policy/protocols/smb/log-cmds.bro.rst b/doc/scripts/policy/protocols/smb/log-cmds.bro.rst new file mode 100644 index 0000000000..13735c23fc --- /dev/null +++ b/doc/scripts/policy/protocols/smb/log-cmds.bro.rst @@ -0,0 +1,46 @@ +:tocdepth: 3 + +policy/protocols/smb/log-cmds.bro +================================= +.. bro:namespace:: SMB + +Load this script to generate an SMB command log, smb_cmd.log. +This is primarily useful for debugging. + +:Namespace: SMB +:Imports: :doc:`base/protocols/smb ` + +Summary +~~~~~~~ +Runtime Options +############### +=========================================================================== ==================================================== +:bro:id:`SMB::ignored_command_statuses`: :bro:type:`set` :bro:attr:`&redef` The server response statuses which are *not* logged. +=========================================================================== ==================================================== + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SMB::ignored_command_statuses + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "MORE_PROCESSING_REQUIRED" + } + + The server response statuses which are *not* logged. + + diff --git a/doc/scripts/policy/protocols/smtp/blocklists.bro.rst b/doc/scripts/policy/protocols/smtp/blocklists.bro.rst new file mode 100644 index 0000000000..b02ffd3dd7 --- /dev/null +++ b/doc/scripts/policy/protocols/smtp/blocklists.bro.rst @@ -0,0 +1,42 @@ +:tocdepth: 3 + +policy/protocols/smtp/blocklists.bro +==================================== +.. bro:namespace:: SMTP + +Watch for various SPAM blocklist URLs in SMTP error messages. + +:Namespace: SMTP +:Imports: :doc:`base/frameworks/notice `, :doc:`base/protocols/smtp ` + +Summary +~~~~~~~ +Runtime Options +############### +================================================================================ = +:bro:id:`SMTP::blocklist_error_messages`: :bro:type:`pattern` :bro:attr:`&redef` +================================================================================ = + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SMTP::blocklist_error_messages + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /^?((^?((^?((^?((^?((^?((^?((^?((^?((^?((^?((^?((^?((^?((^?(spamhaus\.org\/)$?)|(^?(sophos\.com\/security\/)$?))$?)|(^?(spamcop\.net\/bl)$?))$?)|(^?(cbl\.abuseat\.org\/)$?))$?)|(^?(sorbs\.net\/)$?))$?)|(^?(bsn\.borderware\.com\/)$?))$?)|(^?(mail-abuse\.com\/)$?))$?)|(^?(b\.barracudacentral\.com\/)$?))$?)|(^?(psbl\.surriel\.com\/)$?))$?)|(^?(antispam\.imp\.ch\/)$?))$?)|(^?(dyndns\.com\/.*spam)$?))$?)|(^?(rbl\.knology\.net\/)$?))$?)|(^?(intercept\.datapacket\.net\/)$?))$?)|(^?(uceprotect\.net\/)$?))$?)|(^?(hostkarma\.junkemailfilter\.com\/)$?))$?/ + + + diff --git a/doc/scripts/policy/protocols/smtp/detect-suspicious-orig.bro.rst b/doc/scripts/policy/protocols/smtp/detect-suspicious-orig.bro.rst new file mode 100644 index 0000000000..b2a6d92b85 --- /dev/null +++ b/doc/scripts/policy/protocols/smtp/detect-suspicious-orig.bro.rst @@ -0,0 +1,49 @@ +:tocdepth: 3 + +policy/protocols/smtp/detect-suspicious-orig.bro +================================================ +.. bro:namespace:: SMTP + + +:Namespace: SMTP +:Imports: :doc:`base/frameworks/notice/main.bro `, :doc:`base/protocols/smtp/main.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +==================================================================================== =================================================================== +:bro:id:`SMTP::suspicious_origination_countries`: :bro:type:`set` :bro:attr:`&redef` Places where it's suspicious for mail to originate from represented + as all-capital, two character country codes (e.g., US). +:bro:id:`SMTP::suspicious_origination_networks`: :bro:type:`set` :bro:attr:`&redef` +==================================================================================== =================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SMTP::suspicious_origination_countries + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + Places where it's suspicious for mail to originate from represented + as all-capital, two character country codes (e.g., US). It requires + Bro to be built with GeoIP support. + +.. bro:id:: SMTP::suspicious_origination_networks + + :Type: :bro:type:`set` [:bro:type:`subnet`] + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + + diff --git a/doc/scripts/policy/protocols/smtp/entities-excerpt.bro.rst b/doc/scripts/policy/protocols/smtp/entities-excerpt.bro.rst new file mode 100644 index 0000000000..ba55d8d0b3 --- /dev/null +++ b/doc/scripts/policy/protocols/smtp/entities-excerpt.bro.rst @@ -0,0 +1,43 @@ +:tocdepth: 3 + +policy/protocols/smtp/entities-excerpt.bro +========================================== +.. bro:namespace:: SMTP + +This script is for optionally adding a body excerpt to the SMTP +entities log. + +:Namespace: SMTP +:Imports: :doc:`base/protocols/smtp/entities.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +================================================================================ =================================================================== +:bro:id:`SMTP::default_entity_excerpt_len`: :bro:type:`count` :bro:attr:`&redef` This is the default value for how much of the entity body should be + included for all MIME entities. +================================================================================ =================================================================== + +Redefinitions +############# +============================================ = +:bro:type:`SMTP::Entity`: :bro:type:`record` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SMTP::default_entity_excerpt_len + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``0`` + + This is the default value for how much of the entity body should be + included for all MIME entities. The lesser of this value and + :bro:see:`default_file_bof_buffer_size` will be used. + + diff --git a/doc/scripts/policy/protocols/smtp/software.bro.rst b/doc/scripts/policy/protocols/smtp/software.bro.rst new file mode 100644 index 0000000000..61a7692054 --- /dev/null +++ b/doc/scripts/policy/protocols/smtp/software.bro.rst @@ -0,0 +1,71 @@ +:tocdepth: 3 + +policy/protocols/smtp/software.bro +================================== +.. bro:namespace:: SMTP + +This script feeds software detected through email into the software +framework. Mail clients and webmail interfaces are the only thing +currently detected. + +TODO: + +* Find some heuristic to determine if email was sent through + a MS Exchange webmail interface as opposed to a desktop client. + +:Namespace: SMTP +:Imports: :doc:`base/frameworks/software/main.bro `, :doc:`base/protocols/smtp/main.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +==================================================================================== =================================================================== +:bro:id:`SMTP::detect_clients_in_messages_from`: :bro:type:`Host` :bro:attr:`&redef` Assuming that local mail servers are more trustworthy with the + headers they insert into message envelopes, this default makes Bro + not attempt to detect software in inbound message bodies. +:bro:id:`SMTP::webmail_user_agents`: :bro:type:`pattern` :bro:attr:`&redef` A regular expression to match USER-AGENT-like headers to find if a + message was sent with a webmail interface. +==================================================================================== =================================================================== + +Redefinitions +############# +============================================ = +:bro:type:`SMTP::Info`: :bro:type:`record` +:bro:type:`Software::Type`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SMTP::detect_clients_in_messages_from + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``LOCAL_HOSTS`` + + Assuming that local mail servers are more trustworthy with the + headers they insert into message envelopes, this default makes Bro + not attempt to detect software in inbound message bodies. If mail + coming in from external addresses gives incorrect data in + the Received headers, it could populate your SOFTWARE logging stream + with incorrect data. If you would like to detect mail clients for + incoming messages (network traffic originating from a non-local + address), set this variable to EXTERNAL_HOSTS or ALL_HOSTS. + +.. bro:id:: SMTP::webmail_user_agents + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /^?((^?((^?((^?((^?((^?(^iPlanet Messenger)$?)|(^?(^Sun Java\(tm\) System Messenger Express)$?))$?)|(^?(\(IMP\))$?))$?)|(^?(^SquirrelMail)$?))$?)|(^?(^NeoMail)$?))$?)|(^?(ZimbraWebClient)$?))$?/ + + A regular expression to match USER-AGENT-like headers to find if a + message was sent with a webmail interface. + + diff --git a/doc/scripts/policy/protocols/ssh/detect-bruteforcing.bro.rst b/doc/scripts/policy/protocols/ssh/detect-bruteforcing.bro.rst new file mode 100644 index 0000000000..8066268b27 --- /dev/null +++ b/doc/scripts/policy/protocols/ssh/detect-bruteforcing.bro.rst @@ -0,0 +1,66 @@ +:tocdepth: 3 + +policy/protocols/ssh/detect-bruteforcing.bro +============================================ +.. bro:namespace:: SSH + +Detect hosts which are doing password guessing attacks and/or password +bruteforcing over SSH. + +:Namespace: SSH +:Imports: :doc:`base/frameworks/intel `, :doc:`base/frameworks/notice `, :doc:`base/frameworks/sumstats `, :doc:`base/protocols/ssh ` + +Summary +~~~~~~~ +Redefinable Options +################### +============================================================================ ===================================================================== +:bro:id:`SSH::guessing_timeout`: :bro:type:`interval` :bro:attr:`&redef` The amount of time to remember presumed non-successful logins to + build a model of a password guesser. +:bro:id:`SSH::ignore_guessers`: :bro:type:`table` :bro:attr:`&redef` This value can be used to exclude hosts or entire networks from being + tracked as potential "guessers". +:bro:id:`SSH::password_guesses_limit`: :bro:type:`double` :bro:attr:`&redef` The number of failed SSH connections before a host is designated as + guessing passwords. +============================================================================ ===================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Intel::Where`: :bro:type:`enum` +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Redefinable Options +################### +.. bro:id:: SSH::guessing_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``30.0 mins`` + + The amount of time to remember presumed non-successful logins to + build a model of a password guesser. + +.. bro:id:: SSH::ignore_guessers + + :Type: :bro:type:`table` [:bro:type:`subnet`] of :bro:type:`subnet` + :Attributes: :bro:attr:`&redef` + :Default: ``{}`` + + This value can be used to exclude hosts or entire networks from being + tracked as potential "guessers". The index represents + client subnets and the yield value represents server subnets. + +.. bro:id:: SSH::password_guesses_limit + + :Type: :bro:type:`double` + :Attributes: :bro:attr:`&redef` + :Default: ``30.0`` + + The number of failed SSH connections before a host is designated as + guessing passwords. + + diff --git a/doc/scripts/policy/protocols/ssh/geo-data.bro.rst b/doc/scripts/policy/protocols/ssh/geo-data.bro.rst new file mode 100644 index 0000000000..f3268e70e6 --- /dev/null +++ b/doc/scripts/policy/protocols/ssh/geo-data.bro.rst @@ -0,0 +1,48 @@ +:tocdepth: 3 + +policy/protocols/ssh/geo-data.bro +================================= +.. bro:namespace:: SSH + +Geodata based detections for SSH analysis. + +:Namespace: SSH +:Imports: :doc:`base/frameworks/notice `, :doc:`base/protocols/ssh ` + +Summary +~~~~~~~ +Runtime Options +############### +==================================================================== ================================================================== +:bro:id:`SSH::watched_countries`: :bro:type:`set` :bro:attr:`&redef` The set of countries for which you'd like to generate notices upon + successful login. +==================================================================== ================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +:bro:type:`SSH::Info`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SSH::watched_countries + + :Type: :bro:type:`set` [:bro:type:`string`] + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + { + "RO" + } + + The set of countries for which you'd like to generate notices upon + successful login. + + diff --git a/doc/scripts/policy/protocols/ssh/interesting-hostnames.bro.rst b/doc/scripts/policy/protocols/ssh/interesting-hostnames.bro.rst new file mode 100644 index 0000000000..3835fc9db5 --- /dev/null +++ b/doc/scripts/policy/protocols/ssh/interesting-hostnames.bro.rst @@ -0,0 +1,47 @@ +:tocdepth: 3 + +policy/protocols/ssh/interesting-hostnames.bro +============================================== +.. bro:namespace:: SSH + +This script will generate a notice if an apparent SSH login originates +or heads to a host with a reverse hostname that looks suspicious. By +default, the regular expression to match "interesting" hostnames includes +names that are typically used for infrastructure hosts like nameservers, +mail servers, web servers and ftp servers. + +:Namespace: SSH +:Imports: :doc:`base/frameworks/notice ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================ =============================================================== +:bro:id:`SSH::interesting_hostnames`: :bro:type:`pattern` :bro:attr:`&redef` Strange/bad host names to see successful SSH logins from or to. +============================================================================ =============================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SSH::interesting_hostnames + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /^?((^?((^?((^?((^?((^?((^?(^d?ns[0-9]*\.)$?)|(^?(^smtp[0-9]*\.)$?))$?)|(^?(^mail[0-9]*\.)$?))$?)|(^?(^pop[0-9]*\.)$?))$?)|(^?(^imap[0-9]*\.)$?))$?)|(^?(^www[0-9]*\.)$?))$?)|(^?(^ftp[0-9]*\.)$?))$?/ + + Strange/bad host names to see successful SSH logins from or to. + + diff --git a/doc/scripts/policy/protocols/ssh/software.bro.rst b/doc/scripts/policy/protocols/ssh/software.bro.rst new file mode 100644 index 0000000000..717d2cfb62 --- /dev/null +++ b/doc/scripts/policy/protocols/ssh/software.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +policy/protocols/ssh/software.bro +================================= +.. bro:namespace:: SSH + +Extracts SSH client and server information from SSH +connections and forwards it to the software framework. + +:Namespace: SSH +:Imports: :doc:`base/frameworks/software ` + +Summary +~~~~~~~ +Redefinitions +############# +============================================ = +:bro:type:`Software::Type`: :bro:type:`enum` +============================================ = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/ssl/expiring-certs.bro.rst b/doc/scripts/policy/protocols/ssl/expiring-certs.bro.rst new file mode 100644 index 0000000000..0c829664a1 --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/expiring-certs.bro.rst @@ -0,0 +1,57 @@ +:tocdepth: 3 + +policy/protocols/ssl/expiring-certs.bro +======================================= +.. bro:namespace:: SSL + +Generate notices when X.509 certificates over SSL/TLS are expired or +going to expire soon based on the date and time values stored within the +certificate. + +:Namespace: SSL +:Imports: :doc:`base/files/x509 `, :doc:`base/frameworks/notice `, :doc:`base/protocols/ssl `, :doc:`base/utils/directions-and-hosts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +==================================================================================== ===================================================================== +:bro:id:`SSL::notify_certs_expiration`: :bro:type:`Host` :bro:attr:`&redef` The category of hosts you would like to be notified about which have + certificates that are going to be expiring soon. +:bro:id:`SSL::notify_when_cert_expiring_in`: :bro:type:`interval` :bro:attr:`&redef` The time before a certificate is going to expire that you would like + to start receiving :bro:enum:`SSL::Certificate_Expires_Soon` notices. +==================================================================================== ===================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SSL::notify_certs_expiration + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``LOCAL_HOSTS`` + + The category of hosts you would like to be notified about which have + certificates that are going to be expiring soon. By default, these + notices will be suppressed by the notice framework for 1 day after + a particular certificate has had a notice generated. + Choices are: LOCAL_HOSTS, REMOTE_HOSTS, ALL_HOSTS, NO_HOSTS + +.. bro:id:: SSL::notify_when_cert_expiring_in + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``30.0 days`` + + The time before a certificate is going to expire that you would like + to start receiving :bro:enum:`SSL::Certificate_Expires_Soon` notices. + + diff --git a/doc/scripts/policy/protocols/ssl/extract-certs-pem.bro.rst b/doc/scripts/policy/protocols/ssl/extract-certs-pem.bro.rst new file mode 100644 index 0000000000..259083d1df --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/extract-certs-pem.bro.rst @@ -0,0 +1,45 @@ +:tocdepth: 3 + +policy/protocols/ssl/extract-certs-pem.bro +========================================== +.. bro:namespace:: SSL + +This script is used to extract host certificates seen on the wire to disk +after being converted to PEM files. The certificates will be stored in +a single file, one for local certificates and one for remote certificates. + +.. note:: + + - It doesn't work well on a cluster because each worker will write its + own certificate files and no duplicate checking is done across the + cluster so each node would log each certificate. + + +:Namespace: SSL +:Imports: :doc:`base/files/x509 `, :doc:`base/protocols/ssl `, :doc:`base/utils/directions-and-hosts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +===================================================================== ========================================================= +:bro:id:`SSL::extract_certs_pem`: :bro:type:`Host` :bro:attr:`&redef` Control if host certificates offered by the defined hosts + will be written to the PEM certificates file. +===================================================================== ========================================================= + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SSL::extract_certs_pem + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``LOCAL_HOSTS`` + + Control if host certificates offered by the defined hosts + will be written to the PEM certificates file. + Choices are: LOCAL_HOSTS, REMOTE_HOSTS, ALL_HOSTS, NO_HOSTS. + + diff --git a/doc/scripts/policy/protocols/ssl/heartbleed.bro.rst b/doc/scripts/policy/protocols/ssl/heartbleed.bro.rst new file mode 100644 index 0000000000..9153a6350a --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/heartbleed.bro.rst @@ -0,0 +1,25 @@ +:tocdepth: 3 + +policy/protocols/ssl/heartbleed.bro +=================================== +.. bro:namespace:: Heartbleed + +Detect the TLS heartbleed attack. See http://heartbleed.com for more. + +:Namespace: Heartbleed +:Imports: :doc:`base/frameworks/notice `, :doc:`base/protocols/ssl ` + +Summary +~~~~~~~ +Redefinitions +############# +==================================================================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +:bro:type:`SSL::Info`: :bro:type:`record` +:bro:id:`SSL::disable_analyzer_after_detection`: :bro:type:`bool` :bro:attr:`&redef` +==================================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/ssl/known-certs.bro.rst b/doc/scripts/policy/protocols/ssl/known-certs.bro.rst new file mode 100644 index 0000000000..2b3e9f771a --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/known-certs.bro.rst @@ -0,0 +1,195 @@ +:tocdepth: 3 + +policy/protocols/ssl/known-certs.bro +==================================== +.. bro:namespace:: Known + +Log information about certificates while attempting to avoid duplicate +logging. + +:Namespace: Known +:Imports: :doc:`base/files/x509 `, :doc:`base/frameworks/cluster `, :doc:`base/protocols/ssl `, :doc:`base/utils/directions-and-hosts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +============================================================================ =================================================================== +:bro:id:`Known::cert_store_expiry`: :bro:type:`interval` :bro:attr:`&redef` The expiry interval of new entries in :bro:see:`Known::cert_store`. +:bro:id:`Known::cert_store_timeout`: :bro:type:`interval` :bro:attr:`&redef` The timeout interval to use for operations against + :bro:see:`Known::cert_store`. +:bro:id:`Known::cert_tracking`: :bro:type:`Host` :bro:attr:`&redef` The certificates whose existence should be logged and tracked. +============================================================================ =================================================================== + +Redefinable Options +################### +======================================================================= ============================================================== +:bro:id:`Known::cert_store_name`: :bro:type:`string` :bro:attr:`&redef` The Broker topic name to use for :bro:see:`Known::cert_store`. +:bro:id:`Known::use_cert_store`: :bro:type:`bool` :bro:attr:`&redef` Toggles between different implementations of this script. +======================================================================= ============================================================== + +State Variables +############### +=================================================================================================== ==================================================================== +:bro:id:`Known::cert_store`: :bro:type:`Cluster::StoreInfo` Holds the set of all known certificates. +:bro:id:`Known::certs`: :bro:type:`set` :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` The set of all known certificates to store for preventing duplicate + logging. +=================================================================================================== ==================================================================== + +Types +##### +======================================================= = +:bro:type:`Known::AddrCertHashPair`: :bro:type:`record` +:bro:type:`Known::CertsInfo`: :bro:type:`record` +======================================================= = + +Redefinitions +############# +===================================== = +:bro:type:`Log::ID`: :bro:type:`enum` +===================================== = + +Events +###### +=================================================== ===================================================================== +:bro:id:`Known::log_known_certs`: :bro:type:`event` Event that can be handled to access the loggable record as it is sent + on to the logging framework. +=================================================== ===================================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: Known::cert_store_expiry + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``1.0 day`` + + The expiry interval of new entries in :bro:see:`Known::cert_store`. + This also changes the interval at which certs get logged. + +.. bro:id:: Known::cert_store_timeout + + :Type: :bro:type:`interval` + :Attributes: :bro:attr:`&redef` + :Default: ``15.0 secs`` + + The timeout interval to use for operations against + :bro:see:`Known::cert_store`. + +.. bro:id:: Known::cert_tracking + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``ALL_HOSTS`` + + The certificates whose existence should be logged and tracked. + Choices are: LOCAL_HOSTS, REMOTE_HOSTS, ALL_HOSTS, NO_HOSTS. + +Redefinable Options +################### +.. bro:id:: Known::cert_store_name + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"bro/known/certs"`` + + The Broker topic name to use for :bro:see:`Known::cert_store`. + +.. bro:id:: Known::use_cert_store + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Toggles between different implementations of this script. + When true, use a Broker data store, else use a regular Bro set + with keys uniformly distributed over proxy nodes in cluster + operation. + +State Variables +############### +.. bro:id:: Known::cert_store + + :Type: :bro:type:`Cluster::StoreInfo` + :Default: + + :: + + { + name= + store= + master_node="" + master=F + backend=Broker::MEMORY + options=[sqlite=[path=""], rocksdb=[path=""]] + clone_resync_interval=10.0 secs + clone_stale_interval=5.0 mins + clone_mutation_buffer_interval=2.0 mins + } + + Holds the set of all known certificates. Keys in the store are of + type :bro:type:`Known::AddrCertHashPair` and their associated value is + always the boolean value of "true". + +.. bro:id:: Known::certs + + :Type: :bro:type:`set` [:bro:type:`addr`, :bro:type:`string`] + :Attributes: :bro:attr:`&create_expire` = ``1.0 day`` :bro:attr:`&redef` + :Default: ``{}`` + + The set of all known certificates to store for preventing duplicate + logging. It can also be used from other scripts to + inspect if a certificate has been seen in use. The string value + in the set is for storing the DER formatted certificate' SHA1 hash. + + In cluster operation, this set is uniformly distributed across + proxy nodes. + +Types +##### +.. bro:type:: Known::AddrCertHashPair + + :Type: :bro:type:`record` + + host: :bro:type:`addr` + + hash: :bro:type:`string` + + +.. bro:type:: Known::CertsInfo + + :Type: :bro:type:`record` + + ts: :bro:type:`time` :bro:attr:`&log` + The timestamp when the certificate was detected. + + host: :bro:type:`addr` :bro:attr:`&log` + The address that offered the certificate. + + port_num: :bro:type:`port` :bro:attr:`&log` :bro:attr:`&optional` + If the certificate was handed out by a server, this is the + port that the server was listening on. + + subject: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Certificate subject. + + issuer_subject: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Certificate issuer subject. + + serial: :bro:type:`string` :bro:attr:`&log` :bro:attr:`&optional` + Serial number for the certificate. + + +Events +###### +.. bro:id:: Known::log_known_certs + + :Type: :bro:type:`event` (rec: :bro:type:`Known::CertsInfo`) + + Event that can be handled to access the loggable record as it is sent + on to the logging framework. + + diff --git a/doc/scripts/policy/protocols/ssl/log-hostcerts-only.bro.rst b/doc/scripts/policy/protocols/ssl/log-hostcerts-only.bro.rst new file mode 100644 index 0000000000..a7bc27d40e --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/log-hostcerts-only.bro.rst @@ -0,0 +1,25 @@ +:tocdepth: 3 + +policy/protocols/ssl/log-hostcerts-only.bro +=========================================== +.. bro:namespace:: X509 + +When this script is loaded, only the host certificates (client and server) +will be logged to x509.log. Logging of all other certificates will be suppressed. + +:Namespace: X509 +:Imports: :doc:`base/files/x509 `, :doc:`base/protocols/ssl ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================================== = +:bro:type:`X509::Info`: :bro:type:`record` +:bro:type:`fa_file`: :bro:type:`record` :bro:attr:`&redef` +========================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/ssl/notary.bro.rst b/doc/scripts/policy/protocols/ssl/notary.bro.rst new file mode 100644 index 0000000000..f4e19e941c --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/notary.bro.rst @@ -0,0 +1,60 @@ +:tocdepth: 3 + +policy/protocols/ssl/notary.bro +=============================== +.. bro:namespace:: CertNotary + + +:Namespace: CertNotary +:Imports: :doc:`base/protocols/ssl ` + +Summary +~~~~~~~ +Runtime Options +############### +=================================================================== =========================== +:bro:id:`CertNotary::domain`: :bro:type:`string` :bro:attr:`&redef` The notary domain to query. +=================================================================== =========================== + +Types +##### +==================================================== ============================================ +:bro:type:`CertNotary::Response`: :bro:type:`record` A response from the ICSI certificate notary. +==================================================== ============================================ + +Redefinitions +############# +========================================= = +:bro:type:`SSL::Info`: :bro:type:`record` +========================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: CertNotary::domain + + :Type: :bro:type:`string` + :Attributes: :bro:attr:`&redef` + :Default: ``"notary.icsi.berkeley.edu"`` + + The notary domain to query. + +Types +##### +.. bro:type:: CertNotary::Response + + :Type: :bro:type:`record` + + first_seen: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + + last_seen: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + + times_seen: :bro:type:`count` :bro:attr:`&log` :bro:attr:`&optional` + + valid: :bro:type:`bool` :bro:attr:`&log` :bro:attr:`&optional` + + A response from the ICSI certificate notary. + + diff --git a/doc/scripts/policy/protocols/ssl/validate-certs.bro.rst b/doc/scripts/policy/protocols/ssl/validate-certs.bro.rst new file mode 100644 index 0000000000..dc1d4332a7 --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/validate-certs.bro.rst @@ -0,0 +1,99 @@ +:tocdepth: 3 + +policy/protocols/ssl/validate-certs.bro +======================================= +.. bro:namespace:: SSL + +Perform full certificate chain validation for SSL certificates. + +:Namespace: SSL +:Imports: :doc:`base/frameworks/cluster `, :doc:`base/frameworks/notice `, :doc:`base/protocols/ssl ` + +Summary +~~~~~~~ +State Variables +############### +===================================================================================================================== ================================================================== +:bro:id:`SSL::recently_validated_certs`: :bro:type:`table` :bro:attr:`&read_expire` = ``5.0 mins`` :bro:attr:`&redef` Result values for recently validated chains along with the + validation status are kept in this table to avoid constant + validation every time the same certificate chain is seen. +:bro:id:`SSL::ssl_cache_intermediate_ca`: :bro:type:`bool` :bro:attr:`&redef` Use intermediate CA certificate caching when trying to validate + certificates. +:bro:id:`SSL::ssl_store_valid_chain`: :bro:type:`bool` :bro:attr:`&redef` Store the valid chain in c$ssl$valid_chain if validation succeeds. +===================================================================================================================== ================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +:bro:type:`SSL::Info`: :bro:type:`record` +========================================== = + +Events +###### +================================================== =============================================================== +:bro:id:`SSL::intermediate_add`: :bro:type:`event` Event from a manager to workers when encountering a new, valid + intermediate. +:bro:id:`SSL::new_intermediate`: :bro:type:`event` Event from workers to the manager when a new intermediate chain + is to be added. +================================================== =============================================================== + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +State Variables +############### +.. bro:id:: SSL::recently_validated_certs + + :Type: :bro:type:`table` [:bro:type:`string`] of :bro:type:`X509::Result` + :Attributes: :bro:attr:`&read_expire` = ``5.0 mins`` :bro:attr:`&redef` + :Default: ``{}`` + + Result values for recently validated chains along with the + validation status are kept in this table to avoid constant + validation every time the same certificate chain is seen. + +.. bro:id:: SSL::ssl_cache_intermediate_ca + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Use intermediate CA certificate caching when trying to validate + certificates. When this is enabled, Bro keeps track of all valid + intermediate CA certificates that it has seen in the past. When + encountering a host certificate that cannot be validated because + of missing intermediate CA certificate, the cached list is used + to try to validate the cert. This is similar to how Firefox is + doing certificate validation. + + Disabling this will usually greatly increase the number of validation warnings + that you encounter. Only disable if you want to find misconfigured servers. + +.. bro:id:: SSL::ssl_store_valid_chain + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Store the valid chain in c$ssl$valid_chain if validation succeeds. + This has a potentially high memory impact, depending on the local environment + and is thus disabled by default. + +Events +###### +.. bro:id:: SSL::intermediate_add + + :Type: :bro:type:`event` (key: :bro:type:`string`, value: :bro:type:`vector` of :bro:type:`opaque` of x509) + + Event from a manager to workers when encountering a new, valid + intermediate. + +.. bro:id:: SSL::new_intermediate + + :Type: :bro:type:`event` (key: :bro:type:`string`, value: :bro:type:`vector` of :bro:type:`opaque` of x509) + + Event from workers to the manager when a new intermediate chain + is to be added. + + diff --git a/doc/scripts/policy/protocols/ssl/validate-ocsp.bro.rst b/doc/scripts/policy/protocols/ssl/validate-ocsp.bro.rst new file mode 100644 index 0000000000..db59702c3c --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/validate-ocsp.bro.rst @@ -0,0 +1,24 @@ +:tocdepth: 3 + +policy/protocols/ssl/validate-ocsp.bro +====================================== +.. bro:namespace:: SSL + +Perform validation of stapled OCSP responses. + +:Namespace: SSL +:Imports: :doc:`base/frameworks/notice `, :doc:`base/protocols/ssl ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +:bro:type:`SSL::Info`: :bro:type:`record` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/protocols/ssl/validate-sct.bro.rst b/doc/scripts/policy/protocols/ssl/validate-sct.bro.rst new file mode 100644 index 0000000000..d707b77418 --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/validate-sct.bro.rst @@ -0,0 +1,90 @@ +:tocdepth: 3 + +policy/protocols/ssl/validate-sct.bro +===================================== +.. bro:namespace:: SSL + +Perform validation of Signed Certificate Timestamps, as used +for Certificate Transparency. See RFC6962 for more details. + +:Namespace: SSL +:Imports: :doc:`base/protocols/ssl `, :doc:`policy/protocols/ssl/validate-certs.bro ` + +Summary +~~~~~~~ +Types +##### +============================================ ================================================================ +:bro:type:`SSL::SctInfo`: :bro:type:`record` This record is used to store information about the SCTs that are + encountered in a SSL connection. +:bro:type:`SSL::SctSource`: :bro:type:`enum` List of the different sources for Signed Certificate Timestamp +============================================ ================================================================ + +Redefinitions +############# +========================================================================= = +:bro:type:`SSL::Info`: :bro:type:`record` +:bro:id:`SSL::ssl_store_valid_chain`: :bro:type:`bool` :bro:attr:`&redef` +========================================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Types +##### +.. bro:type:: SSL::SctInfo + + :Type: :bro:type:`record` + + version: :bro:type:`count` + The version of the encountered SCT (should always be 0 for v1). + + logid: :bro:type:`string` + The ID of the log issuing this SCT. + + timestamp: :bro:type:`count` + The timestamp at which this SCT was issued measured since the + epoch (January 1, 1970, 00:00), ignoring leap seconds, in + milliseconds. Not converted to a Bro timestamp because we need + the exact value for validation. + + sig_alg: :bro:type:`count` + The signature algorithm used for this sct. + + hash_alg: :bro:type:`count` + The hash algorithm used for this sct. + + signature: :bro:type:`string` + The signature of this SCT. + + source: :bro:type:`SSL::SctSource` + Source of this SCT. + + valid: :bro:type:`bool` :bro:attr:`&optional` + Validation result of this SCT. + + This record is used to store information about the SCTs that are + encountered in a SSL connection. + +.. bro:type:: SSL::SctSource + + :Type: :bro:type:`enum` + + .. bro:enum:: SSL::SCT_X509_EXT SSL::SctSource + + Signed Certificate Timestamp was encountered in the extension of + an X.509 certificate. + + .. bro:enum:: SSL::SCT_TLS_EXT SSL::SctSource + + Signed Certificate Timestamp was encountered in an TLS session + extension. + + .. bro:enum:: SSL::SCT_OCSP_EXT SSL::SctSource + + Signed Certificate Timestamp was encountered in the extension of + an stapled OCSP reply. + + List of the different sources for Signed Certificate Timestamp + + diff --git a/doc/scripts/policy/protocols/ssl/weak-keys.bro.rst b/doc/scripts/policy/protocols/ssl/weak-keys.bro.rst new file mode 100644 index 0000000000..aee448615c --- /dev/null +++ b/doc/scripts/policy/protocols/ssl/weak-keys.bro.rst @@ -0,0 +1,94 @@ +:tocdepth: 3 + +policy/protocols/ssl/weak-keys.bro +================================== +.. bro:namespace:: SSL + +Generate notices when SSL/TLS connections use certificates, DH parameters, +or cipher suites that are deemed to be insecure. + +:Namespace: SSL +:Imports: :doc:`base/frameworks/notice `, :doc:`base/protocols/ssl `, :doc:`base/utils/directions-and-hosts.bro ` + +Summary +~~~~~~~ +Runtime Options +############### +======================================================================================== ============================================================================== +:bro:id:`SSL::notify_dh_length_shorter_cert_length`: :bro:type:`bool` :bro:attr:`&redef` Warn if the DH key length is smaller than the certificate key length. +:bro:id:`SSL::notify_minimal_key_length`: :bro:type:`count` :bro:attr:`&redef` The minimal key length in bits that is considered to be safe. +:bro:id:`SSL::notify_weak_keys`: :bro:type:`Host` :bro:attr:`&redef` The category of hosts you would like to be notified about which are using weak + keys/ciphers/protocol_versions. +:bro:id:`SSL::tls_minimum_version`: :bro:type:`count` :bro:attr:`&redef` Warn if a server negotiates a SSL session with a protocol version smaller than + the specified version. +:bro:id:`SSL::unsafe_ciphers_regex`: :bro:type:`pattern` :bro:attr:`&redef` Warn if a server negotiates an unsafe cipher suite. +======================================================================================== ============================================================================== + +Redefinitions +############# +========================================== = +:bro:type:`Notice::Type`: :bro:type:`enum` +========================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ +Runtime Options +############### +.. bro:id:: SSL::notify_dh_length_shorter_cert_length + + :Type: :bro:type:`bool` + :Attributes: :bro:attr:`&redef` + :Default: ``T`` + + Warn if the DH key length is smaller than the certificate key length. This is + potentially unsafe because it gives a wrong impression of safety due to the + certificate key length. However, it is very common and cannot be avoided in some + settings (e.g. with old jave clients). + +.. bro:id:: SSL::notify_minimal_key_length + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``2048`` + + The minimal key length in bits that is considered to be safe. Any shorter + (non-EC) key lengths will trigger a notice. + +.. bro:id:: SSL::notify_weak_keys + + :Type: :bro:type:`Host` + :Attributes: :bro:attr:`&redef` + :Default: ``LOCAL_HOSTS`` + + The category of hosts you would like to be notified about which are using weak + keys/ciphers/protocol_versions. By default, these notices will be suppressed + by the notice framework for 1 day after a particular host has had a notice + generated. Choices are: LOCAL_HOSTS, REMOTE_HOSTS, ALL_HOSTS, NO_HOSTS + +.. bro:id:: SSL::tls_minimum_version + + :Type: :bro:type:`count` + :Attributes: :bro:attr:`&redef` + :Default: ``769`` + + Warn if a server negotiates a SSL session with a protocol version smaller than + the specified version. By default, the minimal version is TLSv10 because SSLv2 + and v3 have serious security issued. + See https://tools.ietf.org/html/draft-thomson-sslv3-diediedie-00 + To disable, set to SSLv20 + +.. bro:id:: SSL::unsafe_ciphers_regex + + :Type: :bro:type:`pattern` + :Attributes: :bro:attr:`&redef` + :Default: + + :: + + /^?((_EXPORT_)|(_RC4_))$?/ + + Warn if a server negotiates an unsafe cipher suite. By default, we only warn when + encountering old export cipher suites, or RC4 (see RFC7465). + + diff --git a/doc/scripts/policy/tuning/__load__.bro.rst b/doc/scripts/policy/tuning/__load__.bro.rst new file mode 100644 index 0000000000..a22971902a --- /dev/null +++ b/doc/scripts/policy/tuning/__load__.bro.rst @@ -0,0 +1,15 @@ +:tocdepth: 3 + +policy/tuning/__load__.bro +========================== + +This loads the default tuning + +:Imports: :doc:`policy/tuning/defaults ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/tuning/defaults/__load__.bro.rst b/doc/scripts/policy/tuning/defaults/__load__.bro.rst new file mode 100644 index 0000000000..a96ccd62b6 --- /dev/null +++ b/doc/scripts/policy/tuning/defaults/__load__.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +policy/tuning/defaults/__load__.bro +=================================== + + +:Imports: :doc:`policy/tuning/defaults/extracted_file_limits.bro `, :doc:`policy/tuning/defaults/packet-fragments.bro `, :doc:`policy/tuning/defaults/warnings.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/tuning/defaults/extracted_file_limits.bro.rst b/doc/scripts/policy/tuning/defaults/extracted_file_limits.bro.rst new file mode 100644 index 0000000000..5e751cdb0a --- /dev/null +++ b/doc/scripts/policy/tuning/defaults/extracted_file_limits.bro.rst @@ -0,0 +1,20 @@ +:tocdepth: 3 + +policy/tuning/defaults/extracted_file_limits.bro +================================================ + + +:Imports: :doc:`base/files/extract ` + +Summary +~~~~~~~ +Redefinitions +############# +========================================================================== = +:bro:id:`FileExtract::default_limit`: :bro:type:`count` :bro:attr:`&redef` +========================================================================== = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/tuning/defaults/index.rst b/doc/scripts/policy/tuning/defaults/index.rst new file mode 100644 index 0000000000..dde3efd48b --- /dev/null +++ b/doc/scripts/policy/tuning/defaults/index.rst @@ -0,0 +1,23 @@ +:orphan: + +Package: policy/tuning/defaults +=============================== + +Sets various defaults, and prints warning messages to stdout under +certain conditions. + +:doc:`/scripts/policy/tuning/defaults/__load__.bro` + + +:doc:`/scripts/policy/tuning/defaults/packet-fragments.bro` + + +:doc:`/scripts/policy/tuning/defaults/warnings.bro` + + This file is meant to print messages on stdout for settings that would be + good to set in most cases or other things that could be done to achieve + better detection. + +:doc:`/scripts/policy/tuning/defaults/extracted_file_limits.bro` + + diff --git a/doc/scripts/policy/tuning/defaults/packet-fragments.bro.rst b/doc/scripts/policy/tuning/defaults/packet-fragments.bro.rst new file mode 100644 index 0000000000..d72c698d4f --- /dev/null +++ b/doc/scripts/policy/tuning/defaults/packet-fragments.bro.rst @@ -0,0 +1,20 @@ +:tocdepth: 3 + +policy/tuning/defaults/packet-fragments.bro +=========================================== + + + +Summary +~~~~~~~ +Redefinitions +############# +=============================================================== ============================================================================ +:bro:id:`frag_timeout`: :bro:type:`interval` :bro:attr:`&redef` Shorten the fragment timeout from never expiring to expiring fragments after + five minutes. +=============================================================== ============================================================================ + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/tuning/defaults/warnings.bro.rst b/doc/scripts/policy/tuning/defaults/warnings.bro.rst new file mode 100644 index 0000000000..41a4fbc13d --- /dev/null +++ b/doc/scripts/policy/tuning/defaults/warnings.bro.rst @@ -0,0 +1,17 @@ +:tocdepth: 3 + +policy/tuning/defaults/warnings.bro +=================================== + +This file is meant to print messages on stdout for settings that would be +good to set in most cases or other things that could be done to achieve +better detection. + +:Imports: :doc:`base/utils/site.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/tuning/index.rst b/doc/scripts/policy/tuning/index.rst new file mode 100644 index 0000000000..3017043a21 --- /dev/null +++ b/doc/scripts/policy/tuning/index.rst @@ -0,0 +1,34 @@ +:orphan: + +Package: policy/tuning +====================== + +Miscellaneous tuning parameters. + +:doc:`/scripts/policy/tuning/__load__.bro` + + This loads the default tuning + +:doc:`/scripts/policy/tuning/defaults/__load__.bro` + + +:doc:`/scripts/policy/tuning/defaults/packet-fragments.bro` + + +:doc:`/scripts/policy/tuning/defaults/warnings.bro` + + This file is meant to print messages on stdout for settings that would be + good to set in most cases or other things that could be done to achieve + better detection. + +:doc:`/scripts/policy/tuning/defaults/extracted_file_limits.bro` + + +:doc:`/scripts/policy/tuning/json-logs.bro` + + Loading this script will cause all logs to be written + out as JSON by default. + +:doc:`/scripts/policy/tuning/track-all-assets.bro` + + diff --git a/doc/scripts/policy/tuning/json-logs.bro.rst b/doc/scripts/policy/tuning/json-logs.bro.rst new file mode 100644 index 0000000000..11cdb91c5e --- /dev/null +++ b/doc/scripts/policy/tuning/json-logs.bro.rst @@ -0,0 +1,21 @@ +:tocdepth: 3 + +policy/tuning/json-logs.bro +=========================== + +Loading this script will cause all logs to be written +out as JSON by default. + + +Summary +~~~~~~~ +Redefinitions +############# +================================================================= = +:bro:id:`LogAscii::use_json`: :bro:type:`bool` :bro:attr:`&redef` +================================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/policy/tuning/track-all-assets.bro.rst b/doc/scripts/policy/tuning/track-all-assets.bro.rst new file mode 100644 index 0000000000..2b2e9bcc79 --- /dev/null +++ b/doc/scripts/policy/tuning/track-all-assets.bro.rst @@ -0,0 +1,23 @@ +:tocdepth: 3 + +policy/tuning/track-all-assets.bro +================================== + + +:Imports: :doc:`base/frameworks/software `, :doc:`policy/protocols/conn/known-hosts.bro `, :doc:`policy/protocols/conn/known-services.bro `, :doc:`policy/protocols/ssl/known-certs.bro ` + +Summary +~~~~~~~ +Redefinitions +############# +======================================================================= = +:bro:id:`Known::cert_tracking`: :bro:type:`Host` :bro:attr:`&redef` +:bro:id:`Known::host_tracking`: :bro:type:`Host` :bro:attr:`&redef` +:bro:id:`Known::service_tracking`: :bro:type:`Host` :bro:attr:`&redef` +:bro:id:`Software::asset_tracking`: :bro:type:`Host` :bro:attr:`&redef` +======================================================================= = + + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/doc/scripts/test-all-policy.bro.rst b/doc/scripts/test-all-policy.bro.rst new file mode 100644 index 0000000000..0c1c9a43b4 --- /dev/null +++ b/doc/scripts/test-all-policy.bro.rst @@ -0,0 +1,14 @@ +:tocdepth: 3 + +test-all-policy.bro +=================== + + +:Imports: :doc:`policy/files/x509/log-ocsp.bro `, :doc:`policy/frameworks/dpd/detect-protocols.bro `, :doc:`policy/frameworks/dpd/packet-segment-logging.bro `, :doc:`policy/frameworks/files/detect-MHR.bro `, :doc:`policy/frameworks/files/entropy-test-all-files.bro `, :doc:`policy/frameworks/files/hash-all-files.bro `, :doc:`policy/frameworks/intel/do_expire.bro `, :doc:`policy/frameworks/intel/do_notice.bro `, :doc:`policy/frameworks/intel/seen/__load__.bro `, :doc:`policy/frameworks/intel/seen/conn-established.bro `, :doc:`policy/frameworks/intel/seen/dns.bro `, :doc:`policy/frameworks/intel/seen/file-hashes.bro `, :doc:`policy/frameworks/intel/seen/file-names.bro `, :doc:`policy/frameworks/intel/seen/http-headers.bro `, :doc:`policy/frameworks/intel/seen/http-url.bro `, :doc:`policy/frameworks/intel/seen/pubkey-hashes.bro `, :doc:`policy/frameworks/intel/seen/smtp-url-extraction.bro `, :doc:`policy/frameworks/intel/seen/smtp.bro `, :doc:`policy/frameworks/intel/seen/ssl.bro `, :doc:`policy/frameworks/intel/seen/where-locations.bro `, :doc:`policy/frameworks/intel/seen/x509.bro `, :doc:`policy/frameworks/intel/whitelist.bro `, :doc:`policy/frameworks/notice/__load__.bro `, :doc:`policy/frameworks/notice/extend-email/hostnames.bro `, :doc:`policy/frameworks/packet-filter/shunt.bro `, :doc:`policy/frameworks/software/version-changes.bro `, :doc:`policy/frameworks/software/vulnerable.bro `, :doc:`policy/frameworks/software/windows-version-detection.bro `, :doc:`policy/integration/barnyard2/__load__.bro `, :doc:`policy/integration/barnyard2/main.bro `, :doc:`policy/integration/barnyard2/types.bro `, :doc:`policy/integration/collective-intel/__load__.bro `, :doc:`policy/integration/collective-intel/main.bro `, :doc:`policy/misc/capture-loss.bro `, :doc:`policy/misc/detect-traceroute/__load__.bro `, :doc:`policy/misc/detect-traceroute/main.bro `, :doc:`policy/misc/load-balancing.bro `, :doc:`policy/misc/loaded-scripts.bro `, :doc:`policy/misc/profiling.bro `, :doc:`policy/misc/scan.bro `, :doc:`policy/misc/stats.bro `, :doc:`policy/misc/trim-trace-file.bro `, :doc:`policy/misc/weird-stats.bro `, :doc:`policy/protocols/conn/known-hosts.bro `, :doc:`policy/protocols/conn/known-services.bro `, :doc:`policy/protocols/conn/mac-logging.bro `, :doc:`policy/protocols/conn/vlan-logging.bro `, :doc:`policy/protocols/conn/weirds.bro `, :doc:`policy/protocols/dhcp/msg-orig.bro `, :doc:`policy/protocols/dhcp/software.bro `, :doc:`policy/protocols/dhcp/sub-opts.bro `, :doc:`policy/protocols/dns/auth-addl.bro `, :doc:`policy/protocols/dns/detect-external-names.bro `, :doc:`policy/protocols/ftp/detect-bruteforcing.bro `, :doc:`policy/protocols/ftp/detect.bro `, :doc:`policy/protocols/ftp/software.bro `, :doc:`policy/protocols/http/detect-sqli.bro `, :doc:`policy/protocols/http/detect-webapps.bro `, :doc:`policy/protocols/http/header-names.bro `, :doc:`policy/protocols/http/software-browser-plugins.bro `, :doc:`policy/protocols/http/software.bro `, :doc:`policy/protocols/http/var-extraction-cookies.bro `, :doc:`policy/protocols/http/var-extraction-uri.bro `, :doc:`policy/protocols/krb/ticket-logging.bro `, :doc:`policy/protocols/modbus/known-masters-slaves.bro `, :doc:`policy/protocols/modbus/track-memmap.bro `, :doc:`policy/protocols/mysql/software.bro `, :doc:`policy/protocols/rdp/indicate_ssl.bro `, :doc:`policy/protocols/smb/log-cmds.bro `, :doc:`policy/protocols/smtp/blocklists.bro `, :doc:`policy/protocols/smtp/detect-suspicious-orig.bro `, :doc:`policy/protocols/smtp/entities-excerpt.bro `, :doc:`policy/protocols/smtp/software.bro `, :doc:`policy/protocols/ssh/detect-bruteforcing.bro `, :doc:`policy/protocols/ssh/geo-data.bro `, :doc:`policy/protocols/ssh/interesting-hostnames.bro `, :doc:`policy/protocols/ssh/software.bro `, :doc:`policy/protocols/ssl/expiring-certs.bro `, :doc:`policy/protocols/ssl/extract-certs-pem.bro `, :doc:`policy/protocols/ssl/heartbleed.bro `, :doc:`policy/protocols/ssl/known-certs.bro `, :doc:`policy/protocols/ssl/log-hostcerts-only.bro `, :doc:`policy/protocols/ssl/validate-certs.bro `, :doc:`policy/protocols/ssl/validate-ocsp.bro `, :doc:`policy/protocols/ssl/validate-sct.bro `, :doc:`policy/protocols/ssl/weak-keys.bro `, :doc:`policy/tuning/__load__.bro `, :doc:`policy/tuning/defaults/__load__.bro `, :doc:`policy/tuning/defaults/extracted_file_limits.bro `, :doc:`policy/tuning/defaults/packet-fragments.bro `, :doc:`policy/tuning/defaults/warnings.bro `, :doc:`policy/tuning/json-logs.bro `, :doc:`policy/tuning/track-all-assets.bro ` + +Summary +~~~~~~~ + +Detailed Interface +~~~~~~~~~~~~~~~~~~ + diff --git a/src/ID.cc b/src/ID.cc index 9e4eb7d245..fd99d7c937 100644 --- a/src/ID.cc +++ b/src/ID.cc @@ -749,7 +749,11 @@ void ID::DescribeReST(ODesc* d, bool roles_only) const if ( val && type && type->Tag() != TYPE_FUNC && - type->InternalType() != TYPE_INTERNAL_VOID ) + type->InternalType() != TYPE_INTERNAL_VOID && + // Values within Version module are likely to include a + // constantly-changing version number and be a frequent + // source of error/desynchronization, so don't include them. + ModuleName() != "Version" ) { d->Add(":Default:"); diff --git a/src/broxygen/ScriptInfo.cc b/src/broxygen/ScriptInfo.cc index 2c054ea9b1..a32d96cdd5 100644 --- a/src/broxygen/ScriptInfo.cc +++ b/src/broxygen/ScriptInfo.cc @@ -327,7 +327,7 @@ string ScriptInfo::DoReStructuredText(bool roles_only) const rval += "\n"; } - rval += fmt(":Source File: :download:`/scripts/%s`\n", name.c_str()); + //rval += fmt(":Source File: :download:`/scripts/%s`\n", name.c_str()); rval += "\n"; rval += broxygen::make_heading("Summary", '~'); rval += make_summary("Runtime Options", '#', '=', options); diff --git a/src/broxygen/Target.cc b/src/broxygen/Target.cc index f2bc71ce6c..dba0d67d6c 100644 --- a/src/broxygen/Target.cc +++ b/src/broxygen/Target.cc @@ -260,8 +260,6 @@ void ProtoAnalyzerTarget::DoCreateAnalyzerDoc(FILE* f) const { fprintf(f, "Protocol Analyzers\n"); fprintf(f, "==================\n\n"); - fprintf(f, ".. contents::\n"); - fprintf(f, " :depth: 2\n\n"); WriteAnalyzerTagDefn(f, "Analyzer"); @@ -288,8 +286,6 @@ void FileAnalyzerTarget::DoCreateAnalyzerDoc(FILE* f) const { fprintf(f, "File Analyzers\n"); fprintf(f, "==============\n\n"); - fprintf(f, ".. contents::\n"); - fprintf(f, " :depth: 2\n\n"); WriteAnalyzerTagDefn(f, "Files"); diff --git a/testing/btest/Baseline/doc.broxygen.example/example.rst b/testing/btest/Baseline/doc.broxygen.example/example.rst index 109784229d..d729ab85ee 100644 --- a/testing/btest/Baseline/doc.broxygen.example/example.rst +++ b/testing/btest/Baseline/doc.broxygen.example/example.rst @@ -28,7 +28,6 @@ And a custom directive does the equivalent references: :Namespace: BroxygenExample :Imports: :doc:`base/frameworks/notice `, :doc:`base/protocols/http `, :doc:`policy/frameworks/software/vulnerable.bro ` -:Source File: :download:`/scripts/broxygen/example.bro` Summary ~~~~~~~ diff --git a/testing/btest/Baseline/doc.sphinx.conditional-notice/btest-doc.sphinx.conditional-notice#1 b/testing/btest/Baseline/doc.sphinx.conditional-notice/btest-doc.sphinx.conditional-notice#1 deleted file mode 100644 index 0cb081d6fb..0000000000 --- a/testing/btest/Baseline/doc.sphinx.conditional-notice/btest-doc.sphinx.conditional-notice#1 +++ /dev/null @@ -1,26 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r tls/tls-expired-cert.trace conditional-notice.bro - -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat notice.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path notice - #open 2017-12-21-02-23-46 - #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude - #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double - 1394745603.293028 CHhAvVGS1DHFjwGM9 192.168.4.149 60539 87.98.220.10 443 F1fX1R2cDOzbvg17ye - - tcp SSL::Certificate_Expired Certificate CN=www.spidh.org,OU=COMODO SSL,OU=Domain Control Validated expired at 2014-03-04-23:59:59.000000000 - 192.168.4.149 87.98.220.10 443 - - Notice::ACTION_EMAIL,Notice::ACTION_LOG 86400.000000 F - - - - - - #close 2017-12-21-02-23-46 - diff --git a/testing/btest/Baseline/doc.sphinx.connection-record-01/btest-doc.sphinx.connection-record-01#1 b/testing/btest/Baseline/doc.sphinx.connection-record-01/btest-doc.sphinx.connection-record-01#1 deleted file mode 100644 index fcc4c8f846..0000000000 --- a/testing/btest/Baseline/doc.sphinx.connection-record-01/btest-doc.sphinx.connection-record-01#1 +++ /dev/null @@ -1,11 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -b -r http/get.trace connection_record_01.bro - [id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], orig=[size=136, state=5, num_pkts=7, num_bytes_ip=512, flow_label=0, l2_addr=c8:bc:c8:96:d2:a0], resp=[size=5007, state=5, num_pkts=7, num_bytes_ip=5379, flow_label=0, l2_addr=00:10:db:88:d2:ef], start_time=1362692526.869344, duration=0.211484, service={ - - }, history=ShADadFf, uid=CHhAvVGS1DHFjwGM9, tunnel=, vlan=, inner_vlan=, conn=[ts=1362692526.869344, uid=CHhAvVGS1DHFjwGM9, id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], proto=tcp, service=, duration=0.211484, orig_bytes=136, resp_bytes=5007, conn_state=SF, local_orig=, local_resp=, missed_bytes=0, history=ShADadFf, orig_pkts=7, orig_ip_bytes=512, resp_pkts=7, resp_ip_bytes=5379, tunnel_parents=], extract_orig=F, extract_resp=F, thresholds=] - diff --git a/testing/btest/Baseline/doc.sphinx.connection-record-02/btest-doc.sphinx.connection-record-02#1 b/testing/btest/Baseline/doc.sphinx.connection-record-02/btest-doc.sphinx.connection-record-02#1 deleted file mode 100644 index db5b18beeb..0000000000 --- a/testing/btest/Baseline/doc.sphinx.connection-record-02/btest-doc.sphinx.connection-record-02#1 +++ /dev/null @@ -1,15 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -b -r http/get.trace connection_record_02.bro - [id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], orig=[size=136, state=5, num_pkts=7, num_bytes_ip=512, flow_label=0, l2_addr=c8:bc:c8:96:d2:a0], resp=[size=5007, state=5, num_pkts=7, num_bytes_ip=5379, flow_label=0, l2_addr=00:10:db:88:d2:ef], start_time=1362692526.869344, duration=0.211484, service={ - - }, history=ShADadFf, uid=CHhAvVGS1DHFjwGM9, tunnel=, vlan=, inner_vlan=, conn=[ts=1362692526.869344, uid=CHhAvVGS1DHFjwGM9, id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], proto=tcp, service=, duration=0.211484, orig_bytes=136, resp_bytes=5007, conn_state=SF, local_orig=, local_resp=, missed_bytes=0, history=ShADadFf, orig_pkts=7, orig_ip_bytes=512, resp_pkts=7, resp_ip_bytes=5379, tunnel_parents=], extract_orig=F, extract_resp=F, thresholds=, http=[ts=1362692526.939527, uid=CHhAvVGS1DHFjwGM9, id=[orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp], trans_depth=1, method=GET, host=bro.org, uri=/download/CHANGES.bro-aux.txt, referrer=, version=1.1, user_agent=Wget/1.14 (darwin12.2.0), request_body_len=0, response_body_len=4705, status_code=200, status_msg=OK, info_code=, info_msg=, tags={ - - }, username=, password=, capture_password=F, proxied=, range_request=F, orig_fuids=, orig_filenames=, orig_mime_types=, resp_fuids=[FakNcS1Jfe01uljb3], resp_filenames=, resp_mime_types=[text/plain], current_entity=, orig_mime_depth=1, resp_mime_depth=1], http_state=[pending={ - - }, current_request=1, current_response=1, trans_depth=1]] - diff --git a/testing/btest/Baseline/doc.sphinx.data_struct_record_01/btest-doc.sphinx.data_struct_record_01#1 b/testing/btest/Baseline/doc.sphinx.data_struct_record_01/btest-doc.sphinx.data_struct_record_01#1 deleted file mode 100644 index 24b6631c40..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_struct_record_01/btest-doc.sphinx.data_struct_record_01#1 +++ /dev/null @@ -1,14 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro data_struct_record_01.bro - Service: dns(RFC1035) - port: 53/udp - port: 53/tcp - Service: http(RFC2616) - port: 8080/tcp - port: 80/tcp - diff --git a/testing/btest/Baseline/doc.sphinx.data_struct_record_02/btest-doc.sphinx.data_struct_record_02#1 b/testing/btest/Baseline/doc.sphinx.data_struct_record_02/btest-doc.sphinx.data_struct_record_02#1 deleted file mode 100644 index 17988360aa..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_struct_record_02/btest-doc.sphinx.data_struct_record_02#1 +++ /dev/null @@ -1,15 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro data_struct_record_02.bro - System: morlock - Service: http(RFC2616) - port: 8080/tcp - port: 80/tcp - Service: dns(RFC1035) - port: 53/udp - port: 53/tcp - diff --git a/testing/btest/Baseline/doc.sphinx.data_struct_set_declaration/btest-doc.sphinx.data_struct_set_declaration#1 b/testing/btest/Baseline/doc.sphinx.data_struct_set_declaration/btest-doc.sphinx.data_struct_set_declaration#1 deleted file mode 100644 index 01b42e5c86..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_struct_set_declaration/btest-doc.sphinx.data_struct_set_declaration#1 +++ /dev/null @@ -1,16 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro data_struct_set_declaration.bro - SSL Port: 22/tcp - SSL Port: 443/tcp - SSL Port: 587/tcp - SSL Port: 993/tcp - Non-SSL Port: 80/tcp - Non-SSL Port: 25/tcp - Non-SSL Port: 143/tcp - Non-SSL Port: 23/tcp - diff --git a/testing/btest/Baseline/doc.sphinx.data_struct_table_complex/btest-doc.sphinx.data_struct_table_complex#1 b/testing/btest/Baseline/doc.sphinx.data_struct_table_complex/btest-doc.sphinx.data_struct_table_complex#1 deleted file mode 100644 index 144a76e9f4..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_struct_table_complex/btest-doc.sphinx.data_struct_table_complex#1 +++ /dev/null @@ -1,12 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -b data_struct_table_complex.bro - Harakiri was released in 1962 by Shochiku Eiga studios, directed by Masaki Kobayashi and starring Tatsuya Nakadai - Goyokin was released in 1969 by Fuji studios, directed by Hideo Gosha and starring Tatsuya Nakadai - Tasogare Seibei was released in 2002 by Eisei Gekijo studios, directed by Yoji Yamada and starring Hiroyuki Sanada - Kiru was released in 1968 by Toho studios, directed by Kihachi Okamoto and starring Tatsuya Nakadai - diff --git a/testing/btest/Baseline/doc.sphinx.data_struct_table_declaration/btest-doc.sphinx.data_struct_table_declaration#1 b/testing/btest/Baseline/doc.sphinx.data_struct_table_declaration/btest-doc.sphinx.data_struct_table_declaration#1 deleted file mode 100644 index 83bcdbaf5d..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_struct_table_declaration/btest-doc.sphinx.data_struct_table_declaration#1 +++ /dev/null @@ -1,12 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro data_struct_table_declaration.bro - Service Name: SSH - Common Port: 22/tcp - Service Name: HTTPS - Common Port: 443/tcp - Service Name: SMTPS - Common Port: 587/tcp - Service Name: IMAPS - Common Port: 993/tcp - diff --git a/testing/btest/Baseline/doc.sphinx.data_struct_vector_declaration/btest-doc.sphinx.data_struct_vector_declaration#1 b/testing/btest/Baseline/doc.sphinx.data_struct_vector_declaration/btest-doc.sphinx.data_struct_vector_declaration#1 deleted file mode 100644 index e8bb16ee00..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_struct_vector_declaration/btest-doc.sphinx.data_struct_vector_declaration#1 +++ /dev/null @@ -1,12 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro data_struct_vector_declaration.bro - contents of v1: [1, 2, 3, 4] - length of v1: 4 - contents of v2: [1, 2, 3, 4] - length of v2: 4 - diff --git a/testing/btest/Baseline/doc.sphinx.data_struct_vector_iter/btest-doc.sphinx.data_struct_vector_iter#1 b/testing/btest/Baseline/doc.sphinx.data_struct_vector_iter/btest-doc.sphinx.data_struct_vector_iter#1 deleted file mode 100644 index 4ee9351803..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_struct_vector_iter/btest-doc.sphinx.data_struct_vector_iter#1 +++ /dev/null @@ -1,11 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -b data_struct_vector_iter.bro - 1.2.0.0/18 - 2.3.0.0/18 - 3.4.0.0/18 - diff --git a/testing/btest/Baseline/doc.sphinx.data_type_const.bro/btest-doc.sphinx.data_type_const.bro#1 b/testing/btest/Baseline/doc.sphinx.data_type_const.bro/btest-doc.sphinx.data_type_const.bro#1 deleted file mode 100644 index 15cf20c1c4..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_type_const.bro/btest-doc.sphinx.data_type_const.bro#1 +++ /dev/null @@ -1,12 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -b data_type_const.bro - { - [80/tcp] = WWW, - [6666/tcp] = IRC - } - diff --git a/testing/btest/Baseline/doc.sphinx.data_type_interval/btest-doc.sphinx.data_type_interval#1 b/testing/btest/Baseline/doc.sphinx.data_type_interval/btest-doc.sphinx.data_type_interval#1 deleted file mode 100644 index cba6436e3d..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_type_interval/btest-doc.sphinx.data_type_interval#1 +++ /dev/null @@ -1,25 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r wikipedia.trace data_type_interval.bro - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.118 - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 - Time since last connection: 132.0 msecs 97.0 usecs - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 - Time since last connection: 177.0 usecs - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 - Time since last connection: 2.0 msecs 177.0 usecs - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 - Time since last connection: 33.0 msecs 898.0 usecs - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 - Time since last connection: 35.0 usecs - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3 - Time since last connection: 2.0 msecs 532.0 usecs - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.2 - Time since last connection: 7.0 msecs 866.0 usecs - 2011/06/18 19:03:09: New connection established from 141.142.220.235 to 173.192.163.128 - Time since last connection: 817.0 msecs 703.0 usecs - diff --git a/testing/btest/Baseline/doc.sphinx.data_type_pattern/btest-doc.sphinx.data_type_pattern#1 b/testing/btest/Baseline/doc.sphinx.data_type_pattern/btest-doc.sphinx.data_type_pattern#1 deleted file mode 100644 index a05d4cdabc..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_type_pattern/btest-doc.sphinx.data_type_pattern#1 +++ /dev/null @@ -1,11 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro data_type_pattern_01.bro - The - brown fox jumps over the - dog. - diff --git a/testing/btest/Baseline/doc.sphinx.data_type_pattern_02/btest-doc.sphinx.data_type_pattern_02#1 b/testing/btest/Baseline/doc.sphinx.data_type_pattern_02/btest-doc.sphinx.data_type_pattern_02#1 deleted file mode 100644 index 9c0cfee2d4..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_type_pattern_02/btest-doc.sphinx.data_type_pattern_02#1 +++ /dev/null @@ -1,10 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro data_type_pattern_02.bro - equality and /^?(equal)$?/ are not equal - equality and /^?(equality)$?/ are equal - diff --git a/testing/btest/Baseline/doc.sphinx.data_type_subnets/btest-doc.sphinx.data_type_subnets#1 b/testing/btest/Baseline/doc.sphinx.data_type_subnets/btest-doc.sphinx.data_type_subnets#1 deleted file mode 100644 index f7a3f918fa..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_type_subnets/btest-doc.sphinx.data_type_subnets#1 +++ /dev/null @@ -1,12 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro data_type_subnets.bro - 172.16.4.56 belongs to subnet 172.16.0.0/20 - 172.16.47.254 belongs to subnet 172.16.32.0/20 - 172.16.22.45 belongs to subnet 172.16.16.0/20 - 172.16.1.1 belongs to subnet 172.16.0.0/20 - diff --git a/testing/btest/Baseline/doc.sphinx.data_type_time/btest-doc.sphinx.data_type_time#1 b/testing/btest/Baseline/doc.sphinx.data_type_time/btest-doc.sphinx.data_type_time#1 deleted file mode 100644 index 179367ab12..0000000000 --- a/testing/btest/Baseline/doc.sphinx.data_type_time/btest-doc.sphinx.data_type_time#1 +++ /dev/null @@ -1,17 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r wikipedia.trace data_type_time.bro - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.118\x0a - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.3\x0a - 2011/06/18 19:03:08: New connection established from 141.142.220.118 to 208.80.152.2\x0a - 2011/06/18 19:03:09: New connection established from 141.142.220.235 to 173.192.163.128\x0a - diff --git a/testing/btest/Baseline/doc.sphinx.file-analysis-01/btest-doc.sphinx.file-analysis-01#1 b/testing/btest/Baseline/doc.sphinx.file-analysis-01/btest-doc.sphinx.file-analysis-01#1 deleted file mode 100644 index 5712208760..0000000000 --- a/testing/btest/Baseline/doc.sphinx.file-analysis-01/btest-doc.sphinx.file-analysis-01#1 +++ /dev/null @@ -1,17 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r http/get.trace file_analysis_01.bro - file_state_remove - FakNcS1Jfe01uljb3 - CHhAvVGS1DHFjwGM9 - [orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp] - HTTP - connection_state_remove - CHhAvVGS1DHFjwGM9 - [orig_h=141.142.228.5, orig_p=59856/tcp, resp_h=192.150.187.43, resp_p=80/tcp] - HTTP - diff --git a/testing/btest/Baseline/doc.sphinx.file-analysis-02/btest-doc.sphinx.file-analysis-02#1 b/testing/btest/Baseline/doc.sphinx.file-analysis-02/btest-doc.sphinx.file-analysis-02#1 deleted file mode 100644 index ec727a39d5..0000000000 --- a/testing/btest/Baseline/doc.sphinx.file-analysis-02/btest-doc.sphinx.file-analysis-02#1 +++ /dev/null @@ -1,10 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r http/get.trace file_analysis_02.bro - new file, FakNcS1Jfe01uljb3 - file_hash, FakNcS1Jfe01uljb3, md5, 397168fd09991a0e712254df7bc639ac - diff --git a/testing/btest/Baseline/doc.sphinx.file-analysis-03/btest-doc.sphinx.file-analysis-03#1 b/testing/btest/Baseline/doc.sphinx.file-analysis-03/btest-doc.sphinx.file-analysis-03#1 deleted file mode 100644 index 9a01c7c4af..0000000000 --- a/testing/btest/Baseline/doc.sphinx.file-analysis-03/btest-doc.sphinx.file-analysis-03#1 +++ /dev/null @@ -1,11 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro file_analysis_03.bro - new file, FZedLu4Ajcvge02jA8 - file_hash, FZedLu4Ajcvge02jA8, md5, f0ef7081e1539ac00ef5b761b4fb01b3 - file_state_remove - diff --git a/testing/btest/Baseline/doc.sphinx.file_extraction/btest-doc.sphinx.file_extraction#1 b/testing/btest/Baseline/doc.sphinx.file_extraction/btest-doc.sphinx.file_extraction#1 deleted file mode 100644 index a3bec06fc1..0000000000 --- a/testing/btest/Baseline/doc.sphinx.file_extraction/btest-doc.sphinx.file_extraction#1 +++ /dev/null @@ -1,14 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r http/bro.org.pcap file_extraction.bro - Extracting file HTTP-FiIpIB2hRQSDBOSJRg.html - Extracting file HTTP-FMG4bMmVV64eOsCb.txt - Extracting file HTTP-FnaT2a3UDd093opCB9.txt - Extracting file HTTP-FfQGqj4Fhh3pH7nVQj.txt - Extracting file HTTP-FsvATF146kf1Emc21j.txt - [...] - diff --git a/testing/btest/Baseline/doc.sphinx.framework_logging_factorial-2/btest-doc.sphinx.framework_logging_factorial-2#1 b/testing/btest/Baseline/doc.sphinx.framework_logging_factorial-2/btest-doc.sphinx.framework_logging_factorial-2#1 deleted file mode 100644 index 9edd79d146..0000000000 --- a/testing/btest/Baseline/doc.sphinx.framework_logging_factorial-2/btest-doc.sphinx.framework_logging_factorial-2#1 +++ /dev/null @@ -1,33 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro framework_logging_factorial_02.bro - -.. rst-class:: btest-include - - .. code-block:: guess - :linenos: - - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path factor - #open 2013-10-07-23-48-11 - #fields num factorial_num - #types count count - 1 1 - 2 2 - 3 6 - 4 24 - 5 120 - 6 720 - 7 5040 - 8 40320 - 9 362880 - 10 3628800 - #close 2013-10-07-23-48-11 - diff --git a/testing/btest/Baseline/doc.sphinx.framework_logging_factorial-3/btest-doc.sphinx.framework_logging_factorial-3#1 b/testing/btest/Baseline/doc.sphinx.framework_logging_factorial-3/btest-doc.sphinx.framework_logging_factorial-3#1 deleted file mode 100644 index cc0f1c1444..0000000000 --- a/testing/btest/Baseline/doc.sphinx.framework_logging_factorial-3/btest-doc.sphinx.framework_logging_factorial-3#1 +++ /dev/null @@ -1,29 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro framework_logging_factorial_03.bro - -.. rst-class:: btest-include - - .. code-block:: guess - :linenos: - - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path factor-mod5 - #open 2013-10-07-23-48-12 - #fields num factorial_num - #types count count - 5 120 - 6 720 - 7 5040 - 8 40320 - 9 362880 - 10 3628800 - #close 2013-10-07-23-48-12 - diff --git a/testing/btest/Baseline/doc.sphinx.framework_logging_factorial/btest-doc.sphinx.framework_logging_factorial#1 b/testing/btest/Baseline/doc.sphinx.framework_logging_factorial/btest-doc.sphinx.framework_logging_factorial#1 deleted file mode 100644 index bd6c14f966..0000000000 --- a/testing/btest/Baseline/doc.sphinx.framework_logging_factorial/btest-doc.sphinx.framework_logging_factorial#1 +++ /dev/null @@ -1,18 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro framework_logging_factorial_01.bro - 1 - 2 - 6 - 24 - 120 - 720 - 5040 - 40320 - 362880 - 3628800 - diff --git a/testing/btest/Baseline/doc.sphinx.ftp-bruteforce/btest-doc.sphinx.ftp-bruteforce#1 b/testing/btest/Baseline/doc.sphinx.ftp-bruteforce/btest-doc.sphinx.ftp-bruteforce#1 deleted file mode 100644 index 3d3ad09013..0000000000 --- a/testing/btest/Baseline/doc.sphinx.ftp-bruteforce/btest-doc.sphinx.ftp-bruteforce#1 +++ /dev/null @@ -1,24 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r ftp/bruteforce.pcap protocols/ftp/detect-bruteforcing.bro - -.. rst-class:: btest-include - - .. code-block:: guess - :linenos: - - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path notice - #open 2017-12-21-02-24-08 - #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude - #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double - 1389721084.522861 - - - - - - - - - FTP::Bruteforcing 192.168.56.1 had 20 failed logins on 1 FTP server in 0m37s - 192.168.56.1 - - - - Notice::ACTION_LOG 3600.000000 F - - - - - - #close 2017-12-21-02-24-08 - diff --git a/testing/btest/Baseline/doc.sphinx.http_proxy_01/btest-doc.sphinx.http_proxy_01#1 b/testing/btest/Baseline/doc.sphinx.http_proxy_01/btest-doc.sphinx.http_proxy_01#1 deleted file mode 100644 index d14ba4102a..0000000000 --- a/testing/btest/Baseline/doc.sphinx.http_proxy_01/btest-doc.sphinx.http_proxy_01#1 +++ /dev/null @@ -1,9 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r http/proxy.pcap http_proxy_01.bro - A local server is acting as an open proxy: 192.168.56.101 - diff --git a/testing/btest/Baseline/doc.sphinx.http_proxy_02/btest-doc.sphinx.http_proxy_02#1 b/testing/btest/Baseline/doc.sphinx.http_proxy_02/btest-doc.sphinx.http_proxy_02#1 deleted file mode 100644 index 48f5d8719b..0000000000 --- a/testing/btest/Baseline/doc.sphinx.http_proxy_02/btest-doc.sphinx.http_proxy_02#1 +++ /dev/null @@ -1,9 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r http/proxy.pcap http_proxy_02.bro - A local server is acting as an open proxy: 192.168.56.101 - diff --git a/testing/btest/Baseline/doc.sphinx.http_proxy_03/btest-doc.sphinx.http_proxy_03#1 b/testing/btest/Baseline/doc.sphinx.http_proxy_03/btest-doc.sphinx.http_proxy_03#1 deleted file mode 100644 index 09b2137d42..0000000000 --- a/testing/btest/Baseline/doc.sphinx.http_proxy_03/btest-doc.sphinx.http_proxy_03#1 +++ /dev/null @@ -1,9 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r http/proxy.pcap http_proxy_03.bro - A local server is acting as an open proxy: 192.168.56.101 - diff --git a/testing/btest/Baseline/doc.sphinx.http_proxy_04/btest-doc.sphinx.http_proxy_04#1 b/testing/btest/Baseline/doc.sphinx.http_proxy_04/btest-doc.sphinx.http_proxy_04#1 deleted file mode 100644 index 7ec214a1a9..0000000000 --- a/testing/btest/Baseline/doc.sphinx.http_proxy_04/btest-doc.sphinx.http_proxy_04#1 +++ /dev/null @@ -1,24 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r http/proxy.pcap http_proxy_04.bro - -.. rst-class:: btest-include - - .. code-block:: guess - :linenos: - - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path notice - #open 2017-12-21-02-24-33 - #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude - #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double - 1389654450.449603 CHhAvVGS1DHFjwGM9 192.168.56.1 52679 192.168.56.101 80 - - - tcp HTTP::Open_Proxy A local server is acting as an open proxy: 192.168.56.101 - 192.168.56.1 192.168.56.101 80 - - Notice::ACTION_LOG 86400.000000 F - - - - - - #close 2017-12-21-02-24-33 - diff --git a/testing/btest/Baseline/doc.sphinx.include-build_scripts_base_bif_plugins_Bro_DNS_events_bif_bro/output b/testing/btest/Baseline/doc.sphinx.include-build_scripts_base_bif_plugins_Bro_DNS_events_bif_bro/output deleted file mode 100644 index 6e15ece5e0..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-build_scripts_base_bif_plugins_Bro_DNS_events_bif_bro/output +++ /dev/null @@ -1,30 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -Bro_DNS.events.bif.bro - -## Generated for DNS requests. For requests with multiple queries, this event -## is raised once for each. -## -## See `Wikipedia `__ for more -## information about the DNS protocol. Bro analyzes both UDP and TCP DNS -## sessions. -## -## c: The connection, which may be UDP or TCP depending on the type of the -## transport-layer session being analyzed. -## -## msg: The parsed DNS message header. -## -## query: The queried name. -## -## qtype: The queried resource record type. -## -## qclass: The queried resource record class. -## -## .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl -## dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply -## dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end -## dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name -## dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply -## dns_rejected non_dns_request dns_max_queries dns_session_timeout dns_skip_addl -## dns_skip_all_addl dns_skip_all_auth dns_skip_auth -global dns_request: event(c: connection , msg: dns_msg , query: string , qtype: count , qclass: count ); diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_connecting-connector_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_connecting-connector_bro/output deleted file mode 100644 index d2916a4c4f..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_connecting-connector_bro/output +++ /dev/null @@ -1,16 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -connecting-connector.bro - -redef exit_only_after_terminate = T; - -event bro_init() - { - Broker::peer("127.0.0.1"); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - terminate(); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_connecting-listener_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_connecting-listener_bro/output deleted file mode 100644 index b15bac75c0..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_connecting-listener_bro/output +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -connecting-listener.bro - -redef exit_only_after_terminate = T; - -event bro_init() - { - Broker::listen("127.0.0.1"); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - } - -event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer lost", endpoint; - terminate(); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_events-connector_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_events-connector_bro/output deleted file mode 100644 index 96616dbd3c..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_events-connector_bro/output +++ /dev/null @@ -1,39 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -events-connector.bro - -redef exit_only_after_terminate = T; -global my_event: event(msg: string, c: count); -global my_auto_event: event(msg: string, c: count); - -event bro_init() - { - Broker::peer("127.0.0.1"); - Broker::auto_publish("bro/event/my_auto_event", my_auto_event); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - Broker::publish("bro/event/my_event", my_event, "hi", 0); - event my_auto_event("stuff", 88); - Broker::publish("bro/event/my_event", my_event, "...", 1); - event my_auto_event("more stuff", 51); - local e = Broker::make_event(my_event, "bye", 2); - Broker::publish("bro/event/my_event", e); - } - -event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) - { - terminate(); - } - -event my_event(msg: string, c: count) - { - print "got my_event", msg, c; - } - -event my_auto_event(msg: string, c: count) - { - print "got my_auto_event", msg, c; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_events-listener_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_events-listener_bro/output deleted file mode 100644 index 928ba60311..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_events-listener_bro/output +++ /dev/null @@ -1,37 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -events-listener.bro - -redef exit_only_after_terminate = T; -global msg_count = 0; -global my_event: event(msg: string, c: count); -global my_auto_event: event(msg: string, c: count); - -event bro_init() - { - Broker::subscribe("bro/event/"); - Broker::listen("127.0.0.1"); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - } - -event my_event(msg: string, c: count) - { - ++msg_count; - print "got my_event", msg, c; - - if ( msg_count == 5 ) - terminate(); - } - -event my_auto_event(msg: string, c: count) - { - ++msg_count; - print "got my_auto_event", msg, c; - - if ( msg_count == 5 ) - terminate(); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_logs-connector_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_logs-connector_bro/output deleted file mode 100644 index 84d0a60391..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_logs-connector_bro/output +++ /dev/null @@ -1,40 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -logs-connector.bro - -@load ./testlog - -redef exit_only_after_terminate = T; -global n = 0; - -event bro_init() - { - Broker::peer("127.0.0.1"); - } - -event do_write() - { - if ( n == 6 ) - return; - - Log::write(Test::LOG, [$msg = "ping", $num = n]); - ++n; - event do_write(); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - event do_write(); - } - -event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) - { - terminate(); - } - -event Test::log_test(rec: Test::Info) - { - print "wrote log", rec; - Broker::publish("bro/logs/forward/test", Test::log_test, rec); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_logs-listener_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_logs-listener_bro/output deleted file mode 100644 index 359a88b476..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_logs-listener_bro/output +++ /dev/null @@ -1,26 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -logs-listener.bro - -@load ./testlog - -redef exit_only_after_terminate = T; - -event bro_init() - { - Broker::subscribe("bro/logs"); - Broker::listen("127.0.0.1"); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - } - -event Test::log_test(rec: Test::Info) - { - print "got log event", rec; - - if ( rec$num == 5 ) - terminate(); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_stores-connector_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_stores-connector_bro/output deleted file mode 100644 index 8ef4dca1f5..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_stores-connector_bro/output +++ /dev/null @@ -1,33 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -stores-connector.bro - -redef exit_only_after_terminate = T; - -global h: opaque of Broker::Store; - -global ready: event(); - -event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) - { - terminate(); - } - -event bro_init() - { - h = Broker::create_master("mystore"); - - local myset: set[string] = {"a", "b", "c"}; - local myvec: vector of string = {"alpha", "beta", "gamma"}; - Broker::put(h, "one", 110); - Broker::put(h, "two", 223); - Broker::put(h, "myset", myset); - Broker::put(h, "myvec", myvec); - Broker::increment(h, "one"); - Broker::decrement(h, "two"); - Broker::insert_into_set(h, "myset", "d"); - Broker::remove_from(h, "myset", "b"); - Broker::push(h, "myvec", "delta"); - - Broker::peer("127.0.0.1"); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_stores-listener_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_stores-listener_bro/output deleted file mode 100644 index 571ede2687..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_stores-listener_bro/output +++ /dev/null @@ -1,83 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -stores-listener.bro - -redef exit_only_after_terminate = T; - -global h: opaque of Broker::Store; -global expected_key_count = 4; -global key_count = 0; - -# Lookup a value in the store based on an arbitrary key string. -function do_lookup(key: string) - { - when ( local res = Broker::get(h, key) ) - { - ++key_count; - print "lookup", key, res; - - # End after we iterated over looking up each key in the store twice. - if ( key_count == expected_key_count * 2 ) - terminate(); - } - # All data store queries must specify a timeout - timeout 3sec - { print "timeout", key; } - } - -event check_keys() - { - # Here we just query for the list of keys in the store, and show how to - # look up each one's value. - when ( local res = Broker::keys(h) ) - { - print "clone keys", res; - - if ( res?$result ) - { - # Since we know that the keys we are storing are all strings, - # we can conveniently cast the result of Broker::keys to - # a native Bro type, namely 'set[string]'. - for ( k in res$result as string_set ) - do_lookup(k); - - # Alternatively, we can use a generic iterator to iterate - # over the results (which we know is of the 'set' type because - # that's what Broker::keys() always returns). If the keys - # we stored were not all of the same type, then you would - # likely want to use this method of inspecting the store's keys. - local i = Broker::set_iterator(res$result); - - while ( ! Broker::set_iterator_last(i) ) - { - do_lookup(Broker::set_iterator_value(i) as string); - Broker::set_iterator_next(i); - } - } - } - # All data store queries must specify a timeout. - # You also might see timeouts on connecting/initializing a clone since - # it hasn't had time to get fully set up yet. - timeout 1sec - { - print "timeout"; - schedule 1sec { check_keys() }; - } - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added"; - # We could create a clone early, like in bro_init and it will periodically - # try to synchronize with its master once it connects, however, we just - # create it now since we know the peer w/ the master store has just - # connected. - h = Broker::create_clone("mystore"); - - event check_keys(); - } - -event bro_init() - { - Broker::listen("127.0.0.1"); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_testlog_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_testlog_bro/output deleted file mode 100644 index 8d779a1b92..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_broker_testlog_bro/output +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -testlog.bro - -module Test; - -export { - redef enum Log::ID += { LOG }; - - type Info: record { - msg: string &log; - num: count &log; - }; - - global log_test: event(rec: Test::Info); -} - -event bro_init() &priority=5 - { - Log::create_stream(Test::LOG, [$columns=Test::Info, $ev=log_test, $path="test"]); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_file_analysis_01_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_file_analysis_01_bro/output deleted file mode 100644 index 045fa5ff9f..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_file_analysis_01_bro/output +++ /dev/null @@ -1,24 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -file_analysis_01.bro - -event connection_state_remove(c: connection) - { - print "connection_state_remove"; - print c$uid; - print c$id; - for ( s in c$service ) - print s; - } - -event file_state_remove(f: fa_file) - { - print "file_state_remove"; - print f$id; - for ( cid in f$conns ) - { - print f$conns[cid]$uid; - print cid; - } - print f$source; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_file_analysis_02_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_file_analysis_02_bro/output deleted file mode 100644 index 7c0b7eb8f0..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_file_analysis_02_bro/output +++ /dev/null @@ -1,16 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -file_analysis_02.bro - -event file_sniff(f: fa_file, meta: fa_metadata) - { - if ( ! meta?$mime_type ) return; - print "new file", f$id; - if ( meta$mime_type == "text/plain" ) - Files::add_analyzer(f, Files::ANALYZER_MD5); - } - -event file_hash(f: fa_file, kind: string, hash: string) - { - print "file_hash", f$id, kind, hash; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_file_analysis_03_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_file_analysis_03_bro/output deleted file mode 100644 index 4084169945..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_file_analysis_03_bro/output +++ /dev/null @@ -1,29 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -file_analysis_03.bro - -redef exit_only_after_terminate = T; - -event file_new(f: fa_file) - { - print "new file", f$id; - Files::add_analyzer(f, Files::ANALYZER_MD5); - } - -event file_state_remove(f: fa_file) - { - print "file_state_remove"; - Input::remove(f$source); - terminate(); - } - -event file_hash(f: fa_file, kind: string, hash: string) - { - print "file_hash", f$id, kind, hash; - } - -event bro_init() - { - local source: string = "./myfile"; - Input::add_analysis([$source=source, $name=source]); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-1-drop-with-debug_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-1-drop-with-debug_bro/output deleted file mode 100644 index b451d5aa4f..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-1-drop-with-debug_bro/output +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-1-drop-with-debug.bro - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -event connection_established(c: connection) - { - NetControl::drop_connection(c$id, 20 secs); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-10-use-skeleton_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-10-use-skeleton_bro/output deleted file mode 100644 index 331afbc80d..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-10-use-skeleton_bro/output +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-10-use-skeleton.bro - -event NetControl::init() - { - local skeleton_plugin = NetControl::create_skeleton(""); - NetControl::activate(skeleton_plugin, 0); - } - -event connection_established(c: connection) - { - NetControl::drop_connection(c$id, 20 secs); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-2-ssh-guesser_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-2-ssh-guesser_bro/output deleted file mode 100644 index 87c8cdda7a..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-2-ssh-guesser_bro/output +++ /dev/null @@ -1,20 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-2-ssh-guesser.bro - - -@load protocols/ssh/detect-bruteforcing - -redef SSH::password_guesses_limit=10; - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSH::Password_Guessing ) - NetControl::drop_address(n$src, 60min); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-3-ssh-guesser_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-3-ssh-guesser_bro/output deleted file mode 100644 index 228856f00a..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-3-ssh-guesser_bro/output +++ /dev/null @@ -1,20 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-3-ssh-guesser.bro - - -@load protocols/ssh/detect-bruteforcing - -redef SSH::password_guesses_limit=10; - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSH::Password_Guessing ) - add n$actions[Notice::ACTION_DROP]; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-4-drop_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-4-drop_bro/output deleted file mode 100644 index e7b15fd91b..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-4-drop_bro/output +++ /dev/null @@ -1,30 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-4-drop.bro - -function our_drop_connection(c: conn_id, t: interval) - { - # As a first step, create the NetControl::Entity that we want to block - local e = NetControl::Entity($ty=NetControl::CONNECTION, $conn=c); - # Then, use the entity to create the rule to drop the entity in the forward path - local r = NetControl::Rule($ty=NetControl::DROP, - $target=NetControl::FORWARD, $entity=e, $expire=t); - - # Add the rule - local id = NetControl::add_rule(r); - - if ( id == "" ) - print "Error while dropping"; - } - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -event connection_established(c: connection) - { - our_drop_connection(c$id, 20 secs); - } - diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-5-hook_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-5-hook_bro/output deleted file mode 100644 index d27e3f9a6a..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-5-hook_bro/output +++ /dev/null @@ -1,26 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-5-hook.bro - -hook NetControl::rule_policy(r: NetControl::Rule) - { - if ( r$ty == NetControl::DROP && - r$entity$ty == NetControl::CONNECTION && - r$entity$conn$orig_h in 192.168.0.0/16 ) - { - print "Ignored connection from", r$entity$conn$orig_h; - break; - } - } - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -event connection_established(c: connection) - { - NetControl::drop_connection(c$id, 20 secs); - } - diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-6-find_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-6-find_bro/output deleted file mode 100644 index bcc5199590..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-6-find_bro/output +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-6-find.bro - -event NetControl::init() - { - local netcontrol_debug = NetControl::create_debug(T); - NetControl::activate(netcontrol_debug, 0); - } - -event connection_established(c: connection) - { - if ( |NetControl::find_rules_addr(c$id$orig_h)| > 0 ) - { - print "Rule already exists"; - return; - } - - NetControl::drop_connection(c$id, 20 secs); - print "Rule added"; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-7-catch-release_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-7-catch-release_bro/output deleted file mode 100644 index aa10d8cc01..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-7-catch-release_bro/output +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-7-catch-release.bro - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -event connection_established(c: connection) - { - NetControl::drop_address_catch_release(c$id$orig_h); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-8-multiple_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-8-multiple_bro/output deleted file mode 100644 index f9bac69f44..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-8-multiple_bro/output +++ /dev/null @@ -1,33 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-8-multiple.bro - -function our_openflow_check(p: NetControl::PluginState, r: NetControl::Rule): bool - { - if ( r$ty == NetControl::DROP && - r$entity$ty == NetControl::ADDRESS && - subnet_width(r$entity$ip) == 32 && - subnet_to_addr(r$entity$ip) in 192.168.17.0/24 ) - return F; - - return T; - } - -event NetControl::init() - { - # Add debug plugin with low priority - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - - # Instantiate OpenFlow debug plugin with higher priority - local of_controller = OpenFlow::log_new(42); - local netcontrol_of = NetControl::create_openflow(of_controller, [$check_pred=our_openflow_check]); - NetControl::activate(netcontrol_of, 10); - } - -event NetControl::init_done() - { - NetControl::drop_address(10.0.0.1, 1min); - NetControl::drop_address(192.168.17.2, 1min); - NetControl::drop_address(192.168.18.2, 1min); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-9-skeleton_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-9-skeleton_bro/output deleted file mode 100644 index 0fed26184f..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_netcontrol-9-skeleton_bro/output +++ /dev/null @@ -1,43 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-9-skeleton.bro - -module NetControl; - -export { - ## Instantiates the plugin. - global create_skeleton: function(argument: string) : PluginState; -} - -function skeleton_name(p: PluginState) : string - { - return "NetControl skeleton plugin"; - } - -function skeleton_add_rule_fun(p: PluginState, r: Rule) : bool - { - print "add", r; - event NetControl::rule_added(r, p); - return T; - } - -function skeleton_remove_rule_fun(p: PluginState, r: Rule, reason: string &default="") : bool - { - print "remove", r; - event NetControl::rule_removed(r, p); - return T; - } - -global skeleton_plugin = Plugin( - $name = skeleton_name, - $can_expire = F, - $add_rule = skeleton_add_rule_fun, - $remove_rule = skeleton_remove_rule_fun - ); - -function create_skeleton(argument: string) : PluginState - { - local p = PluginState($plugin=skeleton_plugin); - - return p; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_notice_ssh_guesser_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_notice_ssh_guesser_bro/output deleted file mode 100644 index 11b77dd1ba..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_notice_ssh_guesser_bro/output +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -notice_ssh_guesser.bro - - -@load protocols/ssh/detect-bruteforcing - -redef SSH::password_guesses_limit=10; - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSH::Password_Guessing && /192\.168\.56\.103/ in n$sub ) - add n$actions[Notice::ACTION_EMAIL]; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sqlite-conn-filter_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sqlite-conn-filter_bro/output deleted file mode 100644 index dc42f0bce1..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sqlite-conn-filter_bro/output +++ /dev/null @@ -1,16 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sqlite-conn-filter.bro - -event bro_init() - { - local filter: Log::Filter = - [ - $name="sqlite", - $path="/var/db/conn", - $config=table(["tablename"] = "conn"), - $writer=Log::WRITER_SQLITE - ]; - - Log::add_filter(Conn::LOG, filter); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sqlite-read-events_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sqlite-read-events_bro/output deleted file mode 100644 index 6703c4ca7e..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sqlite-read-events_bro/output +++ /dev/null @@ -1,44 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sqlite-read-events.bro - -@load frameworks/files/hash-all-files - -type Val: record { - hash: string; - description: string; -}; - -event line(description: Input::EventDescription, tpe: Input::Event, r: Val) - { - print fmt("malware-hit with hash %s, description %s", r$hash, r$description); - } - -global malware_source = "/var/db/malware"; - -event file_hash(f: fa_file, kind: string, hash: string) - { - - # check all sha1 hashes - if ( kind=="sha1" ) - { - Input::add_event( - [ - $source=malware_source, - $name=hash, - $fields=Val, - $ev=line, - $want_record=T, - $config=table( - ["query"] = fmt("select * from malware_hashes where hash='%s';", hash) - ), - $reader=Input::READER_SQLITE - ]); - } - } - -event Input::end_of_data(name: string, source:string) - { - if ( source == malware_source ) - Input::remove(name); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sqlite-read-table_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sqlite-read-table_bro/output deleted file mode 100644 index dea06055ea..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sqlite-read-table_bro/output +++ /dev/null @@ -1,39 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sqlite-read-table.bro - -type Idx: record { - host: addr; -}; - -type Val: record { - users: set[string]; -}; - -global hostslist: table[addr] of Val = table(); - -event bro_init() - { - Input::add_table([$source="/var/db/hosts", - $name="hosts", - $idx=Idx, - $val=Val, - $destination=hostslist, - $reader=Input::READER_SQLITE, - $config=table(["query"] = "select * from machines_to_users;") - ]); - - Input::remove("hosts"); - } - -event Input::end_of_data(name: string, source: string) - { - if ( name != "hosts" ) - return; - - # now all data is in the table - print "Hosts list has been successfully imported"; - - # List the users of one host. - print hostslist[192.168.17.1]$users; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sumstats-countconns_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sumstats-countconns_bro/output deleted file mode 100644 index 0ec0c9ce70..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sumstats-countconns_bro/output +++ /dev/null @@ -1,40 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sumstats-countconns.bro - -@load base/frameworks/sumstats - -event connection_established(c: connection) - { - # Make an observation! - # This observation is global so the key is empty. - # Each established connection counts as one so the observation is always 1. - SumStats::observe("conn established", - SumStats::Key(), - SumStats::Observation($num=1)); - } - -event bro_init() - { - # Create the reducer. - # The reducer attaches to the "conn established" observation stream - # and uses the summing calculation on the observations. - local r1 = SumStats::Reducer($stream="conn established", - $apply=set(SumStats::SUM)); - - # Create the final sumstat. - # We give it an arbitrary name and make it collect data every minute. - # The reducer is then attached and a $epoch_result callback is given - # to finally do something with the data collected. - SumStats::create([$name = "counting connections", - $epoch = 1min, - $reducers = set(r1), - $epoch_result(ts: time, key: SumStats::Key, result: SumStats::Result) = - { - # This is the body of the callback that is called when a single - # result has been collected. We are just printing the total number - # of connections that were seen. The $sum field is provided as a - # double type value so we need to use %f as the format specifier. - print fmt("Number of connections established: %.0f", result["conn established"]$sum); - }]); - } \ No newline at end of file diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sumstats-toy-scan_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sumstats-toy-scan_bro/output deleted file mode 100644 index b1b46b3b39..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_frameworks_sumstats-toy-scan_bro/output +++ /dev/null @@ -1,49 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sumstats-toy-scan.bro - -@load base/frameworks/sumstats - -# We use the connection_attempt event to limit our observations to those -# which were attempted and not successful. -event connection_attempt(c: connection) - { - # Make an observation! - # This observation is about the host attempting the connection. - # Each established connection counts as one so the observation is always 1. - SumStats::observe("conn attempted", - SumStats::Key($host=c$id$orig_h), - SumStats::Observation($num=1)); - } - -event bro_init() - { - # Create the reducer. - # The reducer attaches to the "conn attempted" observation stream - # and uses the summing calculation on the observations. Keep - # in mind that there will be one result per key (connection originator). - local r1 = SumStats::Reducer($stream="conn attempted", - $apply=set(SumStats::SUM)); - - # Create the final sumstat. - # This is slightly different from the last example since we're providing - # a callback to calculate a value to check against the threshold with - # $threshold_val. The actual threshold itself is provided with $threshold. - # Another callback is provided for when a key crosses the threshold. - SumStats::create([$name = "finding scanners", - $epoch = 5min, - $reducers = set(r1), - # Provide a threshold. - $threshold = 5.0, - # Provide a callback to calculate a value from the result - # to check against the threshold field. - $threshold_val(key: SumStats::Key, result: SumStats::Result) = - { - return result["conn attempted"]$sum; - }, - # Provide a callback for when a key crosses the threshold. - $threshold_crossed(key: SumStats::Key, result: SumStats::Result) = - { - print fmt("%s attempted %.0f or more connections", key$host, result["conn attempted"]$sum); - }]); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_file_extraction_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_file_extraction_bro/output deleted file mode 100644 index 729947ff72..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_file_extraction_bro/output +++ /dev/null @@ -1,28 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -file_extraction.bro - - -global mime_to_ext: table[string] of string = { - ["application/x-dosexec"] = "exe", - ["text/plain"] = "txt", - ["image/jpeg"] = "jpg", - ["image/png"] = "png", - ["text/html"] = "html", -}; - -event file_sniff(f: fa_file, meta: fa_metadata) - { - if ( f$source != "HTTP" ) - return; - - if ( ! meta?$mime_type ) - return; - - if ( meta$mime_type !in mime_to_ext ) - return; - - local fname = fmt("%s-%s.%s", f$source, f$id, mime_to_ext[meta$mime_type]); - print fmt("Extracting file %s", fname); - Files::add_analyzer(f, Files::ANALYZER_EXTRACT, [$extract_filename=fname]); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_01_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_01_bro/output deleted file mode 100644 index 4e10859d98..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_01_bro/output +++ /dev/null @@ -1,9 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_proxy_01.bro - -event http_reply(c: connection, version: string, code: count, reason: string) - { - if ( /^[hH][tT][tT][pP]:/ in c$http$uri && c$http$status_code == 200 ) - print fmt("A local server is acting as an open proxy: %s", c$id$resp_h); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_02_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_02_bro/output deleted file mode 100644 index 01e3822001..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_02_bro/output +++ /dev/null @@ -1,30 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_proxy_02.bro - - -module HTTP; - -export { - - global success_status_codes: set[count] = { - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 226, - 304 - }; -} - -event http_reply(c: connection, version: string, code: count, reason: string) - { - if ( /^[hH][tT][tT][pP]:/ in c$http$uri && - c$http$status_code in HTTP::success_status_codes ) - print fmt("A local server is acting as an open proxy: %s", c$id$resp_h); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_03_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_03_bro/output deleted file mode 100644 index 5139fa8c49..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_03_bro/output +++ /dev/null @@ -1,35 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_proxy_03.bro - - -@load base/utils/site - -redef Site::local_nets += { 192.168.0.0/16 }; - -module HTTP; - -export { - - global success_status_codes: set[count] = { - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 226, - 304 - }; -} - -event http_reply(c: connection, version: string, code: count, reason: string) - { - if ( Site::is_local_addr(c$id$resp_h) && - /^[hH][tT][tT][pP]:/ in c$http$uri && - c$http$status_code in HTTP::success_status_codes ) - print fmt("A local server is acting as an open proxy: %s", c$id$resp_h); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_04_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_04_bro/output deleted file mode 100644 index a8ca8e19b2..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_httpmonitor_http_proxy_04_bro/output +++ /dev/null @@ -1,44 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_proxy_04.bro - -@load base/utils/site -@load base/frameworks/notice - -redef Site::local_nets += { 192.168.0.0/16 }; - -module HTTP; - -export { - - redef enum Notice::Type += { - Open_Proxy - }; - - global success_status_codes: set[count] = { - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 226, - 304 - }; -} - -event http_reply(c: connection, version: string, code: count, reason: string) - { - if ( Site::is_local_addr(c$id$resp_h) && - /^[hH][tT][tT][pP]:/ in c$http$uri && - c$http$status_code in HTTP::success_status_codes ) - NOTICE([$note=HTTP::Open_Proxy, - $msg=fmt("A local server is acting as an open proxy: %s", - c$id$resp_h), - $conn=c, - $identifier=cat(c$id$resp_h), - $suppress_for=1day]); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro/output deleted file mode 100644 index ef537b6c53..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro/output +++ /dev/null @@ -1,39 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -mimestats.bro - -module MimeMetrics; - -export { - - redef enum Log::ID += { LOG }; - - type Info: record { - ## Timestamp when the log line was finished and written. - ts: time &log; - ## Time interval that the log line covers. - ts_delta: interval &log; - ## The mime type - mtype: string &log; - ## The number of unique local hosts that fetched this mime type - uniq_hosts: count &log; - ## The number of hits to the mime type - hits: count &log; - ## The total number of bytes received by this mime type - bytes: count &log; - }; - - ## The frequency of logging the stats collected by this script. - const break_interval = 5mins &redef; -} -event HTTP::log_http(rec: HTTP::Info) - { - if ( Site::is_local_addr(rec$id$orig_h) && rec?$resp_mime_types ) - { - local mime_type = rec$resp_mime_types[0]; - SumStats::observe("mime.bytes", [$str=mime_type], - [$num=rec$response_body_len]); - SumStats::observe("mime.hits", [$str=mime_type], - [$str=cat(rec$id$orig_h)]); - } - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro@2/output b/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro@2/output deleted file mode 100644 index 027eade4dc..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro@2/output +++ /dev/null @@ -1,8 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -mimestats.bro - - local r1: SumStats::Reducer = [$stream="mime.bytes", - $apply=set(SumStats::SUM)]; - local r2: SumStats::Reducer = [$stream="mime.hits", - $apply=set(SumStats::UNIQUE)]; diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro@3/output b/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro@3/output deleted file mode 100644 index e410c6ebb9..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro@3/output +++ /dev/null @@ -1,18 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -mimestats.bro - - SumStats::create([$name="mime-metrics", - $epoch=break_interval, - $reducers=set(r1, r2), - $epoch_result(ts: time, key: SumStats::Key, result: SumStats::Result) = - { - local l: Info; - l$ts = network_time(); - l$ts_delta = break_interval; - l$mtype = key$str; - l$bytes = double_to_count(floor(result["mime.bytes"]$sum)); - l$hits = result["mime.hits"]$num; - l$uniq_hosts = result["mime.hits"]$unique; - Log::write(MimeMetrics::LOG, l); - }]); diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro@4/output b/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro@4/output deleted file mode 100644 index 10c7b6bb34..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_mimestats_mimestats_bro@4/output +++ /dev/null @@ -1,68 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -mimestats.bro - -@load base/utils/site -@load base/frameworks/sumstats - -redef Site::local_nets += { 10.0.0.0/8 }; - -module MimeMetrics; - -export { - - redef enum Log::ID += { LOG }; - - type Info: record { - ## Timestamp when the log line was finished and written. - ts: time &log; - ## Time interval that the log line covers. - ts_delta: interval &log; - ## The mime type - mtype: string &log; - ## The number of unique local hosts that fetched this mime type - uniq_hosts: count &log; - ## The number of hits to the mime type - hits: count &log; - ## The total number of bytes received by this mime type - bytes: count &log; - }; - - ## The frequency of logging the stats collected by this script. - const break_interval = 5mins &redef; -} - -event bro_init() &priority=3 - { - Log::create_stream(MimeMetrics::LOG, [$columns=Info, $path="mime_metrics"]); - local r1: SumStats::Reducer = [$stream="mime.bytes", - $apply=set(SumStats::SUM)]; - local r2: SumStats::Reducer = [$stream="mime.hits", - $apply=set(SumStats::UNIQUE)]; - SumStats::create([$name="mime-metrics", - $epoch=break_interval, - $reducers=set(r1, r2), - $epoch_result(ts: time, key: SumStats::Key, result: SumStats::Result) = - { - local l: Info; - l$ts = network_time(); - l$ts_delta = break_interval; - l$mtype = key$str; - l$bytes = double_to_count(floor(result["mime.bytes"]$sum)); - l$hits = result["mime.hits"]$num; - l$uniq_hosts = result["mime.hits"]$unique; - Log::write(MimeMetrics::LOG, l); - }]); - } - -event HTTP::log_http(rec: HTTP::Info) - { - if ( Site::is_local_addr(rec$id$orig_h) && rec?$resp_mime_types ) - { - local mime_type = rec$resp_mime_types[0]; - SumStats::observe("mime.bytes", [$str=mime_type], - [$num=rec$response_body_len]); - SumStats::observe("mime.hits", [$str=mime_type], - [$str=cat(rec$id$orig_h)]); - } - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_quickstart_conditional-notice_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_quickstart_conditional-notice_bro/output deleted file mode 100644 index 8412154ec4..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_quickstart_conditional-notice_bro/output +++ /dev/null @@ -1,28 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -conditional-notice.bro - -@load protocols/ssl/expiring-certs - -const watched_servers: set[addr] = { - 87.98.220.10, -} &redef; - -# Site::local_nets usually isn't something you need to modify if -# BroControl automatically sets it up from networks.cfg. It's -# shown here for completeness. -redef Site::local_nets += { - 87.98.0.0/16, -}; - -hook Notice::policy(n: Notice::Info) - { - if ( n$note != SSL::Certificate_Expired ) - return; - - if ( n$id$resp_h !in watched_servers ) - return; - - add n$actions[Notice::ACTION_EMAIL]; - } - diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_connection_record_01_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_connection_record_01_bro/output deleted file mode 100644 index 34303a12ad..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_connection_record_01_bro/output +++ /dev/null @@ -1,10 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -connection_record_01.bro - -@load base/protocols/conn - -event connection_state_remove(c: connection) - { - print c; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_connection_record_02_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_connection_record_02_bro/output deleted file mode 100644 index 12092ee2a0..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_connection_record_02_bro/output +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -connection_record_02.bro - -@load base/protocols/conn -@load base/protocols/http - -event connection_state_remove(c: connection) - { - print c; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_record_01_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_record_01_bro/output deleted file mode 100644 index e67783fdeb..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_record_01_bro/output +++ /dev/null @@ -1,26 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_record_01.bro - -type Service: record { - name: string; - ports: set[port]; - rfc: count; -}; - -function print_service(serv: Service) - { - print fmt("Service: %s(RFC%d)",serv$name, serv$rfc); - - for ( p in serv$ports ) - print fmt(" port: %s", p); - } - -event bro_init() - { - local dns: Service = [$name="dns", $ports=set(53/udp, 53/tcp), $rfc=1035]; - local http: Service = [$name="http", $ports=set(80/tcp, 8080/tcp), $rfc=2616]; - - print_service(dns); - print_service(http); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_record_02_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_record_02_bro/output deleted file mode 100644 index 04da3522f2..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_record_02_bro/output +++ /dev/null @@ -1,45 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_record_02.bro - -type Service: record { - name: string; - ports: set[port]; - rfc: count; - }; - -type System: record { - name: string; - services: set[Service]; - }; - -function print_service(serv: Service) - { - print fmt(" Service: %s(RFC%d)",serv$name, serv$rfc); - - for ( p in serv$ports ) - print fmt(" port: %s", p); - } - -function print_system(sys: System) - { - print fmt("System: %s", sys$name); - - for ( s in sys$services ) - print_service(s); - } - -event bro_init() - { - local server01: System; - server01$name = "morlock"; - add server01$services[[ $name="dns", $ports=set(53/udp, 53/tcp), $rfc=1035]]; - add server01$services[[ $name="http", $ports=set(80/tcp, 8080/tcp), $rfc=2616]]; - print_system(server01); - - - # local dns: Service = [ $name="dns", $ports=set(53/udp, 53/tcp), $rfc=1035]; - # local http: Service = [ $name="http", $ports=set(80/tcp, 8080/tcp), $rfc=2616]; - # print_service(dns); - # print_service(http); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro/output deleted file mode 100644 index 47aa12030b..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro/output +++ /dev/null @@ -1,9 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_set_declaration.bro - -event bro_init() - { - local ssl_ports: set[port]; - local non_ssl_ports = set( 23/tcp, 80/tcp, 143/tcp, 25/tcp ); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro@2/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro@2/output deleted file mode 100644 index 12020f4b67..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro@2/output +++ /dev/null @@ -1,9 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_set_declaration.bro - - for ( i in ssl_ports ) - print fmt("SSL Port: %s", i); - - for ( i in non_ssl_ports ) - print fmt("Non-SSL Port: %s", i); diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro@3/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro@3/output deleted file mode 100644 index b7a68af4aa..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro@3/output +++ /dev/null @@ -1,7 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_set_declaration.bro - - # Check for SMTPS - if ( 587/tcp !in ssl_ports ) - add ssl_ports[587/tcp]; diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro@4/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro@4/output deleted file mode 100644 index 53b193850c..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_set_declaration_bro@4/output +++ /dev/null @@ -1,26 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_set_declaration.bro - -event bro_init() - { - local ssl_ports: set[port]; - local non_ssl_ports = set( 23/tcp, 80/tcp, 143/tcp, 25/tcp ); - - # SSH - add ssl_ports[22/tcp]; - # HTTPS - add ssl_ports[443/tcp]; - # IMAPS - add ssl_ports[993/tcp]; - - # Check for SMTPS - if ( 587/tcp !in ssl_ports ) - add ssl_ports[587/tcp]; - - for ( i in ssl_ports ) - print fmt("SSL Port: %s", i); - - for ( i in non_ssl_ports ) - print fmt("Non-SSL Port: %s", i); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_table_complex_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_table_complex_bro/output deleted file mode 100644 index c92d338cec..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_table_complex_bro/output +++ /dev/null @@ -1,17 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_table_complex.bro - -event bro_init() - { - local samurai_flicks: table[string, string, count, string] of string; - - samurai_flicks["Kihachi Okamoto", "Toho", 1968, "Tatsuya Nakadai"] = "Kiru"; - samurai_flicks["Hideo Gosha", "Fuji", 1969, "Tatsuya Nakadai"] = "Goyokin"; - samurai_flicks["Masaki Kobayashi", "Shochiku Eiga", 1962, "Tatsuya Nakadai" ] = "Harakiri"; - samurai_flicks["Yoji Yamada", "Eisei Gekijo", 2002, "Hiroyuki Sanada" ] = "Tasogare Seibei"; - - for ( [d, s, y, a] in samurai_flicks ) - print fmt("%s was released in %d by %s studios, directed by %s and starring %s", samurai_flicks[d, s, y, a], y, s, d, a); - } - diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_table_declaration_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_table_declaration_bro/output deleted file mode 100644 index f6d38e1618..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_table_declaration_bro/output +++ /dev/null @@ -1,23 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_table_declaration.bro - -event bro_init() - { - # Declaration of the table. - local ssl_services: table[string] of port; - - # Initialize the table. - ssl_services = table(["SSH"] = 22/tcp, ["HTTPS"] = 443/tcp); - - # Insert one key-yield pair into the table. - ssl_services["IMAPS"] = 993/tcp; - - # Check if the key "SMTPS" is not in the table. - if ( "SMTPS" !in ssl_services ) - ssl_services["SMTPS"] = 587/tcp; - - # Iterate over each key in the table. - for ( k in ssl_services ) - print fmt("Service Name: %s - Common Port: %s", k, ssl_services[k]); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_vector_declaration_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_vector_declaration_bro/output deleted file mode 100644 index 22790f45fe..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_vector_declaration_bro/output +++ /dev/null @@ -1,19 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_vector_declaration.bro - -event bro_init() - { - local v1: vector of count; - local v2 = vector(1, 2, 3, 4); - - v1 += 1; - v1 += 2; - v1 += 3; - v1 += 4; - - print fmt("contents of v1: %s", v1); - print fmt("length of v1: %d", |v1|); - print fmt("contents of v2: %s", v2); - print fmt("length of v2: %d", |v2|); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_vector_iter_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_vector_iter_bro/output deleted file mode 100644 index 5f16dcc5af..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_struct_vector_iter_bro/output +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_vector_iter.bro - -event bro_init() - { - local addr_vector: vector of addr = vector(1.2.3.4, 2.3.4.5, 3.4.5.6); - - for (i in addr_vector) - print mask_addr(addr_vector[i], 18); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_const_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_const_bro/output deleted file mode 100644 index 20a4f8d71e..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_const_bro/output +++ /dev/null @@ -1,13 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_const.bro - -const port_list: table[port] of string &redef; - -redef port_list += { [6666/tcp] = "IRC"}; -redef port_list += { [80/tcp] = "WWW" }; - -event bro_init() - { - print port_list; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_const_simple_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_const_simple_bro/output deleted file mode 100644 index 29844f2b01..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_const_simple_bro/output +++ /dev/null @@ -1,8 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_const_simple.bro - -@load base/protocols/http - -redef HTTP::default_capture_password = T; - diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_declaration_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_declaration_bro/output deleted file mode 100644 index a153f3066c..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_declaration_bro/output +++ /dev/null @@ -1,13 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_declaration.bro - -event bro_init() - { - local a: int; - a = 10; - local b = 10; - - if ( a == b ) - print fmt("A: %d, B: %d", a, b); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_interval_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_interval_bro/output deleted file mode 100644 index 25076f3e8e..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_interval_bro/output +++ /dev/null @@ -1,22 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_interval.bro - -# Store the time the previous connection was established. -global last_connection_time: time; - -# boolean value to indicate whether we have seen a previous connection. -global connection_seen: bool = F; - -event connection_established(c: connection) - { - local net_time: time = network_time(); - - print fmt("%s: New connection established from %s to %s", strftime("%Y/%M/%d %H:%m:%S", net_time), c$id$orig_h, c$id$resp_h); - - if ( connection_seen ) - print fmt(" Time since last connection: %s", net_time - last_connection_time); - - last_connection_time = net_time; - connection_seen = T; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_local_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_local_bro/output deleted file mode 100644 index 0e034dddd2..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_local_bro/output +++ /dev/null @@ -1,15 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_local.bro - -function add_two(i: count): count - { - local added_two = i+2; - print fmt("i + 2 = %d", added_two); - return added_two; - } - -event bro_init() - { - local test = add_two(10); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_pattern_01_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_pattern_01_bro/output deleted file mode 100644 index cca008116e..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_pattern_01_bro/output +++ /dev/null @@ -1,17 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_pattern_01.bro - -event bro_init() - { - local test_string = "The quick brown fox jumps over the lazy dog."; - local test_pattern = /quick|lazy/; - - if ( test_pattern in test_string ) - { - local results = split(test_string, test_pattern); - print results[1]; - print results[2]; - print results[3]; - } - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_pattern_02_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_pattern_02_bro/output deleted file mode 100644 index 4e4d8992df..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_pattern_02_bro/output +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_pattern_02.bro - -event bro_init() - { - local test_string = "equality"; - - local test_pattern = /equal/; - print fmt("%s and %s %s equal", test_string, test_pattern, test_pattern == test_string ? "are" : "are not"); - - test_pattern = /equality/; - print fmt("%s and %s %s equal", test_string, test_pattern, test_pattern == test_string ? "are" : "are not"); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_record_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_record_bro/output deleted file mode 100644 index 6d8760700a..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_record_bro/output +++ /dev/null @@ -1,29 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_record.bro - -module Conn; - -export { - ## The record type which contains column fields of the connection log. - type Info: record { - ts: time &log; - uid: string &log; - id: conn_id &log; - proto: transport_proto &log; - service: string &log &optional; - duration: interval &log &optional; - orig_bytes: count &log &optional; - resp_bytes: count &log &optional; - conn_state: string &log &optional; - local_orig: bool &log &optional; - local_resp: bool &log &optional; - missed_bytes: count &log &default=0; - history: string &log &optional; - orig_pkts: count &log &optional; - orig_ip_bytes: count &log &optional; - resp_pkts: count &log &optional; - resp_ip_bytes: count &log &optional; - tunnel_parents: set[string] &log; - }; -} diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_subnets_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_subnets_bro/output deleted file mode 100644 index 75600794ec..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_subnets_bro/output +++ /dev/null @@ -1,19 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_subnets.bro - -event bro_init() - { - local subnets = vector(172.16.0.0/20, 172.16.16.0/20, 172.16.32.0/20, 172.16.48.0/20); - local addresses = vector(172.16.4.56, 172.16.47.254, 172.16.22.45, 172.16.1.1); - - for ( a in addresses ) - { - for ( s in subnets ) - { - if ( addresses[a] in subnets[s] ) - print fmt("%s belongs to subnet %s", addresses[a], subnets[s]); - } - } - - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_time_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_time_bro/output deleted file mode 100644 index 00a3e20813..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_data_type_time_bro/output +++ /dev/null @@ -1,8 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_time.bro - -event connection_established(c: connection) - { - print fmt("%s: New connection established from %s to %s\n", strftime("%Y/%M/%d %H:%m:%S", network_time()), c$id$orig_h, c$id$resp_h); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_01_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_01_bro/output deleted file mode 100644 index e542572647..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_01_bro/output +++ /dev/null @@ -1,23 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_logging_factorial_01.bro - -module Factor; - -function factorial(n: count): count - { - if ( n == 0 ) - return 1; - else - return ( n * factorial(n - 1) ); - } - -event bro_init() - { - local numbers: vector of count = vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - for ( n in numbers ) - print fmt("%d", factorial(numbers[n])); - } - - diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_02_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_02_bro/output deleted file mode 100644 index 19932699b6..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_02_bro/output +++ /dev/null @@ -1,39 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_logging_factorial_02.bro - -module Factor; - -export { - # Append the value LOG to the Log::ID enumerable. - redef enum Log::ID += { LOG }; - - # Define a new type called Factor::Info. - type Info: record { - num: count &log; - factorial_num: count &log; - }; - } - -function factorial(n: count): count - { - if ( n == 0 ) - return 1; - - else - return ( n * factorial(n - 1) ); - } - -event bro_init() - { - # Create the logging stream. - Log::create_stream(LOG, [$columns=Info, $path="factor"]); - } - -event bro_done() - { - local numbers: vector of count = vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - for ( n in numbers ) - Log::write( Factor::LOG, [$num=numbers[n], - $factorial_num=factorial(numbers[n])]); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_03_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_03_bro/output deleted file mode 100644 index 01ed659c75..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_03_bro/output +++ /dev/null @@ -1,49 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_logging_factorial_03.bro - -module Factor; - -export { - redef enum Log::ID += { LOG }; - - type Info: record { - num: count &log; - factorial_num: count &log; - }; - } - -function factorial(n: count): count - { - if ( n == 0 ) - return 1; - - else - return (n * factorial(n - 1)); - } - -event bro_done() - { - local numbers: vector of count = vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - for ( n in numbers ) - Log::write( Factor::LOG, [$num=numbers[n], - $factorial_num=factorial(numbers[n])]); - } - -function mod5(id: Log::ID, path: string, rec: Factor::Info) : string - { - if ( rec$factorial_num % 5 == 0 ) - return "factor-mod5"; - - else - return "factor-non5"; - } - -event bro_init() - { - Log::create_stream(LOG, [$columns=Info, $path="factor"]); - - local filter: Log::Filter = [$name="split-mod5s", $path_func=mod5]; - Log::add_filter(Factor::LOG, filter); - Log::remove_filter(Factor::LOG, "default"); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_04_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_04_bro/output deleted file mode 100644 index c0f8d8ddac..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_logging_factorial_04_bro/output +++ /dev/null @@ -1,54 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_logging_factorial_04.bro - -module Factor; - -export { - redef enum Log::ID += { LOG }; - - type Info: record { - num: count &log; - factorial_num: count &log; - }; - - global log_factor: event(rec: Info); - } - -function factorial(n: count): count - { - if ( n == 0 ) - return 1; - - else - return (n * factorial(n - 1)); - } - -event bro_init() - { - Log::create_stream(LOG, [$columns=Info, $ev=log_factor, $path="factor"]); - } - -event bro_done() - { - local numbers: vector of count = vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - for ( n in numbers ) - Log::write( Factor::LOG, [$num=numbers[n], - $factorial_num=factorial(numbers[n])]); - } - -function mod5(id: Log::ID, path: string, rec: Factor::Info) : string - { - if ( rec$factorial_num % 5 == 0 ) - return "factor-mod5"; - - else - return "factor-non5"; - } - -event bro_init() - { - local filter: Log::Filter = [$name="split-mod5s", $path_func=mod5]; - Log::add_filter(Factor::LOG, filter); - Log::remove_filter(Factor::LOG, "default"); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_hook_01_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_hook_01_bro/output deleted file mode 100644 index 96a3b5a921..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_hook_01_bro/output +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_notice_hook_01.bro - -@load policy/protocols/ssh/interesting-hostnames.bro - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSH::Interesting_Hostname_Login ) - add n$actions[Notice::ACTION_EMAIL]; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_hook_suppression_01_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_hook_suppression_01_bro/output deleted file mode 100644 index b51bd2eebe..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_hook_suppression_01_bro/output +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_notice_hook_suppression_01.bro - -@load policy/protocols/ssl/expiring-certs.bro - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSL::Certificate_Expires_Soon ) - n$suppress_for = 12hrs; - } diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_shortcuts_01_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_shortcuts_01_bro/output deleted file mode 100644 index 7a0eaf5cb4..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_shortcuts_01_bro/output +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_notice_shortcuts_01.bro - -@load policy/protocols/ssh/interesting-hostnames.bro -@load base/protocols/ssh/ - -redef Notice::emailed_types += { - SSH::Interesting_Hostname_Login -}; - diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_shortcuts_02_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_shortcuts_02_bro/output deleted file mode 100644 index 0e92c5ea32..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_framework_notice_shortcuts_02_bro/output +++ /dev/null @@ -1,10 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_notice_shortcuts_02.bro - -@load policy/protocols/ssh/interesting-hostnames.bro -@load base/protocols/ssh/ - -redef Notice::type_suppression_intervals += { - [SSH::Interesting_Hostname_Login] = 1day, -}; diff --git a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_http_main_bro/output b/testing/btest/Baseline/doc.sphinx.include-doc_scripting_http_main_bro/output deleted file mode 100644 index 9f49450799..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-doc_scripting_http_main_bro/output +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_main.bro - -module HTTP; - -export { - ## This setting changes if passwords used in Basic-Auth are captured or - ## not. - const default_capture_password = F &redef; -} diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_base_bif_event_bif_bro/output b/testing/btest/Baseline/doc.sphinx.include-scripts_base_bif_event_bif_bro/output deleted file mode 100644 index c77e08c5a1..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_base_bif_event_bif_bro/output +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -event.bif.bro - -## Generated for every new connection. This event is raised with the first -## packet of a previously unknown connection. Bro uses a flow-based definition -## of "connection" here that includes not only TCP sessions but also UDP and -## ICMP flows. -global new_connection: event(c: connection ); -## Generated when a TCP connection timed out. This event is raised when -## no activity was seen for an interval of at least -## :bro:id:`tcp_connection_linger`, and either one endpoint has already -## closed the connection or one side never became active. -global connection_timeout: event(c: connection ); -## Generated when a connection's internal state is about to be removed from -## memory. Bro generates this event reliably once for every connection when it -## is about to delete the internal state. As such, the event is well-suited for -## script-level cleanup that needs to be performed for every connection. This -## event is generated not only for TCP sessions but also for UDP and ICMP -## flows. -global connection_state_remove: event(c: connection ); diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_base_bif_plugins_Bro_DNS_events_bif_bro/output b/testing/btest/Baseline/doc.sphinx.include-scripts_base_bif_plugins_Bro_DNS_events_bif_bro/output deleted file mode 100644 index 6e15ece5e0..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_base_bif_plugins_Bro_DNS_events_bif_bro/output +++ /dev/null @@ -1,30 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -Bro_DNS.events.bif.bro - -## Generated for DNS requests. For requests with multiple queries, this event -## is raised once for each. -## -## See `Wikipedia `__ for more -## information about the DNS protocol. Bro analyzes both UDP and TCP DNS -## sessions. -## -## c: The connection, which may be UDP or TCP depending on the type of the -## transport-layer session being analyzed. -## -## msg: The parsed DNS message header. -## -## query: The queried name. -## -## qtype: The queried resource record type. -## -## qclass: The queried resource record class. -## -## .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl -## dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply -## dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end -## dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name -## dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply -## dns_rejected non_dns_request dns_max_queries dns_session_timeout dns_skip_addl -## dns_skip_all_addl dns_skip_all_auth dns_skip_auth -global dns_request: event(c: connection , msg: dns_msg , query: string , qtype: count , qclass: count ); diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_base_init-bare_bro/output b/testing/btest/Baseline/doc.sphinx.include-scripts_base_init-bare_bro/output deleted file mode 100644 index 0057a78cc4..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_base_init-bare_bro/output +++ /dev/null @@ -1,7 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -init-bare.bro - -type string_array: table[count] of string; -type string_set: set[string]; -type addr_set: set[addr]; diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro/output deleted file mode 100644 index 1ecfcf027a..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro/output +++ /dev/null @@ -1,76 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-MHR.bro - -##! Detect file downloads that have hash values matching files in Team -##! Cymru's Malware Hash Registry (http://www.team-cymru.org/Services/MHR/). - -@load base/frameworks/files -@load base/frameworks/notice -@load frameworks/files/hash-all-files - -module TeamCymruMalwareHashRegistry; - -export { - redef enum Notice::Type += { - ## The hash value of a file transferred over HTTP matched in the - ## malware hash registry. - Match - }; - - ## File types to attempt matching against the Malware Hash Registry. - option match_file_types = /application\/x-dosexec/ | - /application\/vnd.ms-cab-compressed/ | - /application\/pdf/ | - /application\/x-shockwave-flash/ | - /application\/x-java-applet/ | - /application\/jar/ | - /video\/mp4/; - - ## The Match notice has a sub message with a URL where you can get more - ## information about the file. The %s will be replaced with the SHA-1 - ## hash of the file. - option match_sub_url = "https://www.virustotal.com/en/search/?query=%s"; - - ## The malware hash registry runs each malware sample through several - ## A/V engines. Team Cymru returns a percentage to indicate how - ## many A/V engines flagged the sample as malicious. This threshold - ## allows you to require a minimum detection rate. - option notice_threshold = 10; -} - -function do_mhr_lookup(hash: string, fi: Notice::FileInfo) - { - local hash_domain = fmt("%s.malware.hash.cymru.com", hash); - - when ( local MHR_result = lookup_hostname_txt(hash_domain) ) - { - # Data is returned as " " - local MHR_answer = split_string1(MHR_result, / /); - - if ( |MHR_answer| == 2 ) - { - local mhr_detect_rate = to_count(MHR_answer[1]); - - if ( mhr_detect_rate >= notice_threshold ) - { - local mhr_first_detected = double_to_time(to_double(MHR_answer[0])); - local readable_first_detected = strftime("%Y-%m-%d %H:%M:%S", mhr_first_detected); - local message = fmt("Malware Hash Registry Detection rate: %d%% Last seen: %s", mhr_detect_rate, readable_first_detected); - local virustotal_url = fmt(match_sub_url, hash); - # We don't have the full fa_file record here in order to - # avoid the "when" statement cloning it (expensive!). - local n: Notice::Info = Notice::Info($note=Match, $msg=message, $sub=virustotal_url); - Notice::populate_file_info2(fi, n); - NOTICE(n); - } - } - } - } - -event file_hash(f: fa_file, kind: string, hash: string) - { - if ( kind == "sha1" && f?$info && f$info?$mime_type && - match_file_types in f$info$mime_type ) - do_mhr_lookup(hash, Notice::create_file_info(f)); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro@2/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro@2/output deleted file mode 100644 index 4ce4383efb..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro@2/output +++ /dev/null @@ -1,7 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-MHR.bro - -@load base/frameworks/files -@load base/frameworks/notice -@load frameworks/files/hash-all-files diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro@3/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro@3/output deleted file mode 100644 index 3b1cd60810..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro@3/output +++ /dev/null @@ -1,31 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-MHR.bro - -export { - redef enum Notice::Type += { - ## The hash value of a file transferred over HTTP matched in the - ## malware hash registry. - Match - }; - - ## File types to attempt matching against the Malware Hash Registry. - option match_file_types = /application\/x-dosexec/ | - /application\/vnd.ms-cab-compressed/ | - /application\/pdf/ | - /application\/x-shockwave-flash/ | - /application\/x-java-applet/ | - /application\/jar/ | - /video\/mp4/; - - ## The Match notice has a sub message with a URL where you can get more - ## information about the file. The %s will be replaced with the SHA-1 - ## hash of the file. - option match_sub_url = "https://www.virustotal.com/en/search/?query=%s"; - - ## The malware hash registry runs each malware sample through several - ## A/V engines. Team Cymru returns a percentage to indicate how - ## many A/V engines flagged the sample as malicious. This threshold - ## allows you to require a minimum detection rate. - option notice_threshold = 10; -} diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro@4/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro@4/output deleted file mode 100644 index 55950caf6b..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_frameworks_files_detect-MHR_bro@4/output +++ /dev/null @@ -1,38 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-MHR.bro - -function do_mhr_lookup(hash: string, fi: Notice::FileInfo) - { - local hash_domain = fmt("%s.malware.hash.cymru.com", hash); - - when ( local MHR_result = lookup_hostname_txt(hash_domain) ) - { - # Data is returned as " " - local MHR_answer = split_string1(MHR_result, / /); - - if ( |MHR_answer| == 2 ) - { - local mhr_detect_rate = to_count(MHR_answer[1]); - - if ( mhr_detect_rate >= notice_threshold ) - { - local mhr_first_detected = double_to_time(to_double(MHR_answer[0])); - local readable_first_detected = strftime("%Y-%m-%d %H:%M:%S", mhr_first_detected); - local message = fmt("Malware Hash Registry Detection rate: %d%% Last seen: %s", mhr_detect_rate, readable_first_detected); - local virustotal_url = fmt(match_sub_url, hash); - # We don't have the full fa_file record here in order to - # avoid the "when" statement cloning it (expensive!). - local n: Notice::Info = Notice::Info($note=Match, $msg=message, $sub=virustotal_url); - Notice::populate_file_info2(fi, n); - NOTICE(n); - } - } - } - } - -event file_hash(f: fa_file, kind: string, hash: string) - { - if ( kind == "sha1" && f?$info && f$info?$mime_type && - match_file_types in f$info$mime_type ) - do_mhr_lookup(hash, Notice::create_file_info(f)); diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro/output deleted file mode 100644 index 59d57223d9..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro/output +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-bruteforcing.bro - -module FTP; - -export { - redef enum Notice::Type += { - ## Indicates a host bruteforcing FTP logins by watching for too - ## many rejected usernames or failed passwords. - Bruteforcing - }; - - ## How many rejected usernames or passwords are required before being - ## considered to be bruteforcing. - const bruteforce_threshold: double = 20 &redef; - - ## The time period in which the threshold needs to be crossed before - ## being reset. - const bruteforce_measurement_interval = 15mins &redef; -} diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@2/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@2/output deleted file mode 100644 index 648fe8a559..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@2/output +++ /dev/null @@ -1,13 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-bruteforcing.bro - -event ftp_reply(c: connection, code: count, msg: string, cont_resp: bool) - { - local cmd = c$ftp$cmdarg$cmd; - if ( cmd == "USER" || cmd == "PASS" ) - { - if ( FTP::parse_ftp_reply_code(code)$x == 5 ) - SumStats::observe("ftp.failed_auth", [$host=c$id$orig_h], [$str=cat(c$id$resp_h)]); - } - } diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@3/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@3/output deleted file mode 100644 index f81c9f50ba..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@3/output +++ /dev/null @@ -1,27 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-bruteforcing.bro - -event bro_init() - { - local r1: SumStats::Reducer = [$stream="ftp.failed_auth", $apply=set(SumStats::UNIQUE), $unique_max=double_to_count(bruteforce_threshold+2)]; - SumStats::create([$name="ftp-detect-bruteforcing", - $epoch=bruteforce_measurement_interval, - $reducers=set(r1), - $threshold_val(key: SumStats::Key, result: SumStats::Result) = - { - return result["ftp.failed_auth"]$num+0.0; - }, - $threshold=bruteforce_threshold, - $threshold_crossed(key: SumStats::Key, result: SumStats::Result) = - { - local r = result["ftp.failed_auth"]; - local dur = duration_to_mins_secs(r$end-r$begin); - local plural = r$unique>1 ? "s" : ""; - local message = fmt("%s had %d failed logins on %d FTP server%s in %s", key$host, r$num, r$unique, plural, dur); - NOTICE([$note=FTP::Bruteforcing, - $src=key$host, - $msg=message, - $identifier=cat(key$host)]); - }]); - } diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@4/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@4/output deleted file mode 100644 index bb7b0fd078..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@4/output +++ /dev/null @@ -1,64 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-bruteforcing.bro - -##! FTP brute-forcing detector, triggering when too many rejected usernames or -##! failed passwords have occurred from a single address. - -@load base/protocols/ftp -@load base/frameworks/sumstats - -@load base/utils/time - -module FTP; - -export { - redef enum Notice::Type += { - ## Indicates a host bruteforcing FTP logins by watching for too - ## many rejected usernames or failed passwords. - Bruteforcing - }; - - ## How many rejected usernames or passwords are required before being - ## considered to be bruteforcing. - const bruteforce_threshold: double = 20 &redef; - - ## The time period in which the threshold needs to be crossed before - ## being reset. - const bruteforce_measurement_interval = 15mins &redef; -} - - -event bro_init() - { - local r1: SumStats::Reducer = [$stream="ftp.failed_auth", $apply=set(SumStats::UNIQUE), $unique_max=double_to_count(bruteforce_threshold+2)]; - SumStats::create([$name="ftp-detect-bruteforcing", - $epoch=bruteforce_measurement_interval, - $reducers=set(r1), - $threshold_val(key: SumStats::Key, result: SumStats::Result) = - { - return result["ftp.failed_auth"]$num+0.0; - }, - $threshold=bruteforce_threshold, - $threshold_crossed(key: SumStats::Key, result: SumStats::Result) = - { - local r = result["ftp.failed_auth"]; - local dur = duration_to_mins_secs(r$end-r$begin); - local plural = r$unique>1 ? "s" : ""; - local message = fmt("%s had %d failed logins on %d FTP server%s in %s", key$host, r$num, r$unique, plural, dur); - NOTICE([$note=FTP::Bruteforcing, - $src=key$host, - $msg=message, - $identifier=cat(key$host)]); - }]); - } - -event ftp_reply(c: connection, code: count, msg: string, cont_resp: bool) - { - local cmd = c$ftp$cmdarg$cmd; - if ( cmd == "USER" || cmd == "PASS" ) - { - if ( FTP::parse_ftp_reply_code(code)$x == 5 ) - SumStats::observe("ftp.failed_auth", [$host=c$id$orig_h], [$str=cat(c$id$resp_h)]); - } - } diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ssh_interesting-hostnames_bro/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ssh_interesting-hostnames_bro/output deleted file mode 100644 index 8ed5d89543..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ssh_interesting-hostnames_bro/output +++ /dev/null @@ -1,56 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -interesting-hostnames.bro - -##! This script will generate a notice if an apparent SSH login originates -##! or heads to a host with a reverse hostname that looks suspicious. By -##! default, the regular expression to match "interesting" hostnames includes -##! names that are typically used for infrastructure hosts like nameservers, -##! mail servers, web servers and ftp servers. - -@load base/frameworks/notice - -module SSH; - -export { - redef enum Notice::Type += { - ## Generated if a login originates or responds with a host where - ## the reverse hostname lookup resolves to a name matched by the - ## :bro:id:`SSH::interesting_hostnames` regular expression. - Interesting_Hostname_Login, - }; - - ## Strange/bad host names to see successful SSH logins from or to. - option interesting_hostnames = - /^d?ns[0-9]*\./ | - /^smtp[0-9]*\./ | - /^mail[0-9]*\./ | - /^pop[0-9]*\./ | - /^imap[0-9]*\./ | - /^www[0-9]*\./ | - /^ftp[0-9]*\./; -} - -function check_ssh_hostname(id: conn_id, uid: string, host: addr) - { - when ( local hostname = lookup_addr(host) ) - { - if ( interesting_hostnames in hostname ) - { - NOTICE([$note=Interesting_Hostname_Login, - $msg=fmt("Possible SSH login involving a %s %s with an interesting hostname.", - Site::is_local_addr(host) ? "local" : "remote", - host == id$orig_h ? "client" : "server"), - $sub=hostname, $id=id, $uid=uid]); - } - } - } - -event ssh_auth_successful(c: connection, auth_method_none: bool) - { - for ( host in set(c$id$orig_h, c$id$resp_h) ) - { - check_ssh_hostname(c$id, c$uid, host); - } - } - diff --git a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ssl_expiring-certs_bro/output b/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ssl_expiring-certs_bro/output deleted file mode 100644 index cc2d8817bd..0000000000 --- a/testing/btest/Baseline/doc.sphinx.include-scripts_policy_protocols_ssl_expiring-certs_bro/output +++ /dev/null @@ -1,9 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -expiring-certs.bro - - NOTICE([$note=Certificate_Expires_Soon, - $msg=fmt("Certificate %s is going to expire at %T", cert$subject, cert$not_valid_after), - $conn=c, $suppress_for=1day, - $identifier=cat(c$id$resp_h, c$id$resp_p, hash), - $fuid=fuid]); diff --git a/testing/btest/Baseline/doc.sphinx.mimestats/btest-doc.sphinx.mimestats#1 b/testing/btest/Baseline/doc.sphinx.mimestats/btest-doc.sphinx.mimestats#1 deleted file mode 100644 index 3dcac30c13..0000000000 --- a/testing/btest/Baseline/doc.sphinx.mimestats/btest-doc.sphinx.mimestats#1 +++ /dev/null @@ -1,30 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r http/bro.org.pcap mimestats.bro - -.. rst-class:: btest-include - - .. code-block:: guess - :linenos: - - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path mime_metrics - #open 2016-07-13-16-13-23 - #fields ts ts_delta mtype uniq_hosts hits bytes - #types time interval string count count count - 1389719059.311698 300.000000 image/png 1 9 82176 - 1389719059.311698 300.000000 image/gif 1 1 172 - 1389719059.311698 300.000000 image/x-icon 1 2 2300 - 1389719059.311698 300.000000 text/html 1 2 42231 - 1389719059.311698 300.000000 text/plain 1 15 128001 - 1389719059.311698 300.000000 image/jpeg 1 1 186859 - 1389719059.311698 300.000000 application/pgp-signature 1 1 836 - #close 2016-07-13-16-13-23 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-1-drop-with-debug.bro/btest-doc.sphinx.netcontrol-1-drop-with-debug.bro#1 b/testing/btest/Baseline/doc.sphinx.netcontrol-1-drop-with-debug.bro/btest-doc.sphinx.netcontrol-1-drop-with-debug.bro#1 deleted file mode 100644 index 91f41babb3..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-1-drop-with-debug.bro/btest-doc.sphinx.netcontrol-1-drop-with-debug.bro#1 +++ /dev/null @@ -1,32 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r tls/ecdhe.pcap netcontrol-1-drop-with-debug.bro - netcontrol debug (Debug-All): init - netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::CONNECTION, conn=[orig_h=192.168.18.50, orig_p=56981/tcp, resp_h=74.125.239.97, resp_p=443/tcp], flow=, ip=, mac=], expire=20.0 secs, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] - -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat netcontrol.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path netcontrol - #open 2016-06-22-22-58-31 - #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin - #types time string enum string enum string enum string string string string int interval string string - 0.000000 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All - 0.000000 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All - 0.000000 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - - 1398529018.678276 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::CONNECTION 192.168.18.50/56981<->74.125.239.97/443 - - 0 20.000000 - Debug-All - 1398529018.678276 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::CONNECTION 192.168.18.50/56981<->74.125.239.97/443 - - 0 20.000000 - Debug-All - #close 2016-06-22-22-58-31 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-1-drop-with-debug.bro/btest-doc.sphinx.netcontrol-1-drop-with-debug.bro#2 b/testing/btest/Baseline/doc.sphinx.netcontrol-1-drop-with-debug.bro/btest-doc.sphinx.netcontrol-1-drop-with-debug.bro#2 deleted file mode 100644 index 5c361dba1c..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-1-drop-with-debug.bro/btest-doc.sphinx.netcontrol-1-drop-with-debug.bro#2 +++ /dev/null @@ -1,18 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat netcontrol_drop.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path netcontrol_drop - #open 2016-06-22-22-58-31 - #fields ts rule_id orig_h orig_p resp_h resp_p expire location - #types time string addr port addr port interval string - 1398529018.678276 2 192.168.18.50 56981 74.125.239.97 443 20.000000 - - #close 2016-06-22-22-58-31 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-2-ssh-guesser.bro/btest-doc.sphinx.netcontrol-2-ssh-guesser.bro#1 b/testing/btest/Baseline/doc.sphinx.netcontrol-2-ssh-guesser.bro/btest-doc.sphinx.netcontrol-2-ssh-guesser.bro#1 deleted file mode 100644 index da4c7a78d1..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-2-ssh-guesser.bro/btest-doc.sphinx.netcontrol-2-ssh-guesser.bro#1 +++ /dev/null @@ -1,32 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r ssh/sshguess.pcap netcontrol-2-ssh-guesser.bro - netcontrol debug (Debug-All): init - netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::ADDRESS, conn=, flow=, ip=192.168.56.1/32, mac=], expire=1.0 hr, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] - -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat netcontrol.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path netcontrol - #open 2016-06-22-22-58-36 - #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin - #types time string enum string enum string enum string string string string int interval string string - 0.000000 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All - 0.000000 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All - 0.000000 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - - 1427726711.398575 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.56.1/32 - - 0 3600.000000 - Debug-All - 1427726711.398575 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.56.1/32 - - 0 3600.000000 - Debug-All - #close 2016-06-22-22-58-36 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-3-ssh-guesser.bro/btest-doc.sphinx.netcontrol-3-ssh-guesser.bro#1 b/testing/btest/Baseline/doc.sphinx.netcontrol-3-ssh-guesser.bro/btest-doc.sphinx.netcontrol-3-ssh-guesser.bro#1 deleted file mode 100644 index 5f899ce9c0..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-3-ssh-guesser.bro/btest-doc.sphinx.netcontrol-3-ssh-guesser.bro#1 +++ /dev/null @@ -1,32 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r ssh/sshguess.pcap netcontrol-3-ssh-guesser.bro - netcontrol debug (Debug-All): init - netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::ADDRESS, conn=, flow=, ip=192.168.56.1/32, mac=], expire=10.0 mins, priority=0, location=ACTION_DROP: T, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] - -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat netcontrol.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path netcontrol - #open 2017-12-21-18-58-53 - #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin - #types time string enum string enum string enum string string string string int interval string string - 0.000000 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All - 0.000000 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All - 0.000000 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - - 1427726759.303199 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.56.1/32 - - 0 600.000000 ACTION_DROP: T Debug-All - 1427726759.303199 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.56.1/32 - - 0 600.000000 ACTION_DROP: T Debug-All - #close 2017-12-21-18-58-53 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-3-ssh-guesser.bro/btest-doc.sphinx.netcontrol-3-ssh-guesser.bro#2 b/testing/btest/Baseline/doc.sphinx.netcontrol-3-ssh-guesser.bro/btest-doc.sphinx.netcontrol-3-ssh-guesser.bro#2 deleted file mode 100644 index 039821c266..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-3-ssh-guesser.bro/btest-doc.sphinx.netcontrol-3-ssh-guesser.bro#2 +++ /dev/null @@ -1,18 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat notice.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path notice - #open 2017-12-21-18-58-53 - #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude - #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double - 1427726759.303199 - - - - - - - - - SSH::Password_Guessing 192.168.56.1 appears to be guessing SSH passwords (seen in 10 connections). Sampled servers: 192.168.56.103, 192.168.56.103, 192.168.56.103, 192.168.56.103, 192.168.56.103 192.168.56.1 - - - - Notice::ACTION_DROP,Notice::ACTION_LOG 3600.000000 F - - - - - - #close 2017-12-21-18-58-53 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-4-drop.bro/btest-doc.sphinx.netcontrol-4-drop.bro#1 b/testing/btest/Baseline/doc.sphinx.netcontrol-4-drop.bro/btest-doc.sphinx.netcontrol-4-drop.bro#1 deleted file mode 100644 index 437d9ba58f..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-4-drop.bro/btest-doc.sphinx.netcontrol-4-drop.bro#1 +++ /dev/null @@ -1,32 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r tls/ecdhe.pcap netcontrol-4-drop.bro - netcontrol debug (Debug-All): init - netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::CONNECTION, conn=[orig_h=192.168.18.50, orig_p=56981/tcp, resp_h=74.125.239.97, resp_p=443/tcp], flow=, ip=, mac=], expire=20.0 secs, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] - -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat netcontrol.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path netcontrol - #open 2016-06-22-22-58-42 - #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin - #types time string enum string enum string enum string string string string int interval string string - 0.000000 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All - 0.000000 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All - 0.000000 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - - 1398529018.678276 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::CONNECTION 192.168.18.50/56981<->74.125.239.97/443 - - 0 20.000000 - Debug-All - 1398529018.678276 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::CONNECTION 192.168.18.50/56981<->74.125.239.97/443 - - 0 20.000000 - Debug-All - #close 2016-06-22-22-58-42 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-5-hook.bro/btest-doc.sphinx.netcontrol-5-hook.bro#1 b/testing/btest/Baseline/doc.sphinx.netcontrol-5-hook.bro/btest-doc.sphinx.netcontrol-5-hook.bro#1 deleted file mode 100644 index 0dd5d01130..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-5-hook.bro/btest-doc.sphinx.netcontrol-5-hook.bro#1 +++ /dev/null @@ -1,10 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r tls/ecdhe.pcap netcontrol-5-hook.bro - netcontrol debug (Debug-All): init - Ignored connection from, 192.168.18.50 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-6-find.bro/btest-doc.sphinx.netcontrol-6-find.bro#1 b/testing/btest/Baseline/doc.sphinx.netcontrol-6-find.bro/btest-doc.sphinx.netcontrol-6-find.bro#1 deleted file mode 100644 index 66846d738d..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-6-find.bro/btest-doc.sphinx.netcontrol-6-find.bro#1 +++ /dev/null @@ -1,12 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r tls/google-duplicate.trace netcontrol-6-find.bro - netcontrol debug (Debug-All): init - netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::CONNECTION, conn=[orig_h=192.168.4.149, orig_p=60623/tcp, resp_h=74.125.239.129, resp_p=443/tcp], flow=, ip=, mac=], expire=20.0 secs, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] - Rule added - Rule already exists - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-7-catch-release.bro/btest-doc.sphinx.netcontrol-7-catch-release.bro#1 b/testing/btest/Baseline/doc.sphinx.netcontrol-7-catch-release.bro/btest-doc.sphinx.netcontrol-7-catch-release.bro#1 deleted file mode 100644 index ed2d956171..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-7-catch-release.bro/btest-doc.sphinx.netcontrol-7-catch-release.bro#1 +++ /dev/null @@ -1,10 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r tls/ecdhe.pcap netcontrol-7-catch-release.bro - netcontrol debug (Debug-All): init - netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::ADDRESS, conn=, flow=, ip=192.168.18.50/32, mac=], expire=10.0 mins, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-7-catch-release.bro/btest-doc.sphinx.netcontrol-7-catch-release.bro#2 b/testing/btest/Baseline/doc.sphinx.netcontrol-7-catch-release.bro/btest-doc.sphinx.netcontrol-7-catch-release.bro#2 deleted file mode 100644 index df2080fc59..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-7-catch-release.bro/btest-doc.sphinx.netcontrol-7-catch-release.bro#2 +++ /dev/null @@ -1,19 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat netcontrol_catch_release.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path netcontrol_catch_release - #open 2016-06-22-22-58-49 - #fields ts rule_id ip action block_interval watch_interval blocked_until watched_until num_blocked location message - #types time string addr enum interval interval time time count string string - 1398529018.678276 2 192.168.18.50 NetControl::DROP 600.000000 3600.000000 1398529618.678276 1398532618.678276 1 - - - 1398529018.678276 2 192.168.18.50 NetControl::DROPPED 600.000000 3600.000000 1398529618.678276 1398532618.678276 1 - - - #close 2016-06-22-22-58-49 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#1 b/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#1 deleted file mode 100644 index 3f48475e7e..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#1 +++ /dev/null @@ -1,10 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro netcontrol-8-multiple.bro - netcontrol debug (Debug-All): init - netcontrol debug (Debug-All): add_rule: [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::ADDRESS, conn=, flow=, ip=192.168.17.2/32, mac=], expire=1.0 min, priority=0, location=, out_port=, mod=, id=3, cid=3, _plugin_ids={\x0a\x0a}, _active_plugin_ids={\x0a\x0a}, _no_expire_plugins={\x0a\x0a}, _added=F] - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#2 b/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#2 deleted file mode 100644 index 435078d4fb..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#2 +++ /dev/null @@ -1,28 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat netcontrol.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path netcontrol - #open 2016-06-22-22-58-52 - #fields ts rule_id category cmd state action target entity_type entity mod msg priority expire location plugin - #types time string enum string enum string enum string string string string int interval string string - 1466636332.844326 - NetControl::MESSAGE - - - - - - - activating plugin with priority 0 - - - Debug-All - 1466636332.844326 - NetControl::MESSAGE - - - - - - - activation finished - - - Debug-All - 1466636332.844326 - NetControl::MESSAGE - - - - - - - activating plugin with priority 10 - - - Openflow-Log-42 - 1466636332.844326 - NetControl::MESSAGE - - - - - - - activation finished - - - Openflow-Log-42 - 1466636332.844326 - NetControl::MESSAGE - - - - - - - plugin initialization done - - - - - 1466636332.844326 2 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 10.0.0.1/32 - - 0 60.000000 - Openflow-Log-42 - 1466636332.844326 3 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.17.2/32 - - 0 60.000000 - Debug-All - 1466636332.844326 4 NetControl::RULE ADD NetControl::REQUESTED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.18.2/32 - - 0 60.000000 - Openflow-Log-42 - 1466636332.844326 3 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.17.2/32 - - 0 60.000000 - Debug-All - 1466636332.844326 2 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 10.0.0.1/32 - - 0 60.000000 - Openflow-Log-42 - 1466636332.844326 4 NetControl::RULE ADD NetControl::SUCCEEDED NetControl::DROP NetControl::FORWARD NetControl::ADDRESS 192.168.18.2/32 - - 0 60.000000 - Openflow-Log-42 - #close 2016-06-22-22-58-52 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#3 b/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#3 deleted file mode 100644 index 7094c08b74..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#3 +++ /dev/null @@ -1,21 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat openflow.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path openflow - #open 2016-06-22-22-58-52 - #fields ts dpid match.in_port match.dl_src match.dl_dst match.dl_vlan match.dl_vlan_pcp match.dl_type match.nw_tos match.nw_proto match.nw_src match.nw_dst match.tp_src match.tp_dst flow_mod.cookie flow_mod.table_id flow_mod.command flow_mod.idle_timeout flow_mod.hard_timeout flow_mod.priority flow_mod.out_port flow_mod.out_group flow_mod.flags flow_mod.actions.out_ports flow_mod.actions.vlan_vid flow_mod.actions.vlan_pcp flow_mod.actions.vlan_strip flow_mod.actions.dl_src flow_mod.actions.dl_dst flow_mod.actions.nw_tos flow_mod.actions.nw_src flow_mod.actions.nw_dst flow_mod.actions.tp_src flow_mod.actions.tp_dst - #types time count count string string count count count count count subnet subnet count count count count enum count count count count count count vector[count] count count bool string string count addr addr count count - 1466636332.844326 42 - - - - - 2048 - - 10.0.0.1/32 - - - 4398046511108 - OpenFlow::OFPFC_ADD 0 60 0 - - 1 (empty) - - F - - - - - - - - 1466636332.844326 42 - - - - - 2048 - - - 10.0.0.1/32 - - 4398046511109 - OpenFlow::OFPFC_ADD 0 60 0 - - 1 (empty) - - F - - - - - - - - 1466636332.844326 42 - - - - - 2048 - - 192.168.18.2/32 - - - 4398046511112 - OpenFlow::OFPFC_ADD 0 60 0 - - 1 (empty) - - F - - - - - - - - 1466636332.844326 42 - - - - - 2048 - - - 192.168.18.2/32 - - 4398046511113 - OpenFlow::OFPFC_ADD 0 60 0 - - 1 (empty) - - F - - - - - - - - #close 2016-06-22-22-58-52 - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#4 b/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#4 deleted file mode 100644 index 941d9336c9..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-8-multiple.bro/btest-doc.sphinx.netcontrol-8-multiple.bro#4 +++ /dev/null @@ -1,15 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r tls/ecdhe.pcap netcontrol-10-use-skeleton.bro - add, [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::CONNECTION, conn=[orig_h=192.168.18.50, orig_p=56981/tcp, resp_h=74.125.239.97, resp_p=443/tcp], flow=, ip=, mac=], expire=20.0 secs, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={ - - }, _active_plugin_ids={ - - }, _no_expire_plugins={ - - }, _added=F] - diff --git a/testing/btest/Baseline/doc.sphinx.netcontrol-9-skeleton.bro/btest-doc.sphinx.netcontrol-9-skeleton.bro#1 b/testing/btest/Baseline/doc.sphinx.netcontrol-9-skeleton.bro/btest-doc.sphinx.netcontrol-9-skeleton.bro#1 deleted file mode 100644 index 941d9336c9..0000000000 --- a/testing/btest/Baseline/doc.sphinx.netcontrol-9-skeleton.bro/btest-doc.sphinx.netcontrol-9-skeleton.bro#1 +++ /dev/null @@ -1,15 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r tls/ecdhe.pcap netcontrol-10-use-skeleton.bro - add, [ty=NetControl::DROP, target=NetControl::FORWARD, entity=[ty=NetControl::CONNECTION, conn=[orig_h=192.168.18.50, orig_p=56981/tcp, resp_h=74.125.239.97, resp_p=443/tcp], flow=, ip=, mac=], expire=20.0 secs, priority=0, location=, out_port=, mod=, id=2, cid=2, _plugin_ids={ - - }, _active_plugin_ids={ - - }, _no_expire_plugins={ - - }, _added=F] - diff --git a/testing/btest/Baseline/doc.sphinx.notice_ssh_guesser.bro/btest-doc.sphinx.notice_ssh_guesser.bro#1 b/testing/btest/Baseline/doc.sphinx.notice_ssh_guesser.bro/btest-doc.sphinx.notice_ssh_guesser.bro#1 deleted file mode 100644 index 56918146fa..0000000000 --- a/testing/btest/Baseline/doc.sphinx.notice_ssh_guesser.bro/btest-doc.sphinx.notice_ssh_guesser.bro#1 +++ /dev/null @@ -1,26 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -C -r ssh/sshguess.pcap notice_ssh_guesser.bro - -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat notice.log - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path notice - #open 2017-12-21-02-24-48 - #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude - #types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double - 1427726759.303199 - - - - - - - - - SSH::Password_Guessing 192.168.56.1 appears to be guessing SSH passwords (seen in 10 connections). Sampled servers: 192.168.56.103, 192.168.56.103, 192.168.56.103, 192.168.56.103, 192.168.56.103 192.168.56.1 - - - - Notice::ACTION_EMAIL,Notice::ACTION_LOG 3600.000000 F - - - - - - #close 2017-12-21-02-24-48 - diff --git a/testing/btest/Baseline/doc.sphinx.sumstats-countconns/btest-doc.sphinx.sumstats-countconns#1 b/testing/btest/Baseline/doc.sphinx.sumstats-countconns/btest-doc.sphinx.sumstats-countconns#1 deleted file mode 100644 index b7126957ce..0000000000 --- a/testing/btest/Baseline/doc.sphinx.sumstats-countconns/btest-doc.sphinx.sumstats-countconns#1 +++ /dev/null @@ -1,9 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r workshop_2011_browse.trace sumstats-countconns.bro - Number of connections established: 6 - diff --git a/testing/btest/Baseline/doc.sphinx.sumstats-toy-scan/btest-doc.sphinx.sumstats-toy-scan#1 b/testing/btest/Baseline/doc.sphinx.sumstats-toy-scan/btest-doc.sphinx.sumstats-toy-scan#1 deleted file mode 100644 index f5db95c5f3..0000000000 --- a/testing/btest/Baseline/doc.sphinx.sumstats-toy-scan/btest-doc.sphinx.sumstats-toy-scan#1 +++ /dev/null @@ -1,9 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r nmap-vsn.trace sumstats-toy-scan.bro - 192.168.1.71 attempted 5 or more connections - diff --git a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#1 b/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#1 deleted file mode 100644 index f64da50784..0000000000 --- a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#1 +++ /dev/null @@ -1,30 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro -r wikipedia.trace - -.. rst-class:: btest-include - - .. code-block:: guess - :linenos: - - #separator \x09 - #set_separator , - #empty_field (empty) - #unset_field - - #path conn - #open 2018-01-12-21-43-52 - #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents - #types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string] - 1300475167.096535 CHhAvVGS1DHFjwGM9 141.142.220.202 5353 224.0.0.251 5353 udp dns - - - S0 - - 0 D 1 73 0 0 - - 1300475167.097012 ClEkJM2Vm5giqnMf4h fe80::217:f2ff:fed7:cf65 5353 ff02::fb 5353 udp dns - - - S0 - - 0 D 1 199 0 0 - - 1300475167.099816 C4J4Th3PJpwUYZZ6gc 141.142.220.50 5353 224.0.0.251 5353 udp dns - - - S0 - - 0 D 1 179 0 0 - - 1300475168.853899 CmES5u32sYpV7JYN 141.142.220.118 43927 141.142.2.2 53 udp dns 0.000435 38 89 SF - - 0 Dd 1 66 1 117 - - 1300475168.854378 CP5puj4I8PtEU4qzYg 141.142.220.118 37676 141.142.2.2 53 udp dns 0.000420 52 99 SF - - 0 Dd 1 80 1 127 - - 1300475168.854837 C37jN32gN3y3AZzyf6 141.142.220.118 40526 141.142.2.2 53 udp dns 0.000392 38 183 SF - - 0 Dd 1 66 1 211 - - 1300475168.857956 C0LAHyvtKSQHyJxIl 141.142.220.118 32902 141.142.2.2 53 udp dns 0.000317 38 89 SF - - 0 Dd 1 66 1 117 - - [...] - diff --git a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#2 b/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#2 deleted file mode 100644 index 2b060fc2ff..0000000000 --- a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#2 +++ /dev/null @@ -1,19 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat conn.log | bro-cut id.orig_h id.orig_p id.resp_h duration - 141.142.220.202 5353 224.0.0.251 - - fe80::217:f2ff:fed7:cf65 5353 ff02::fb - - 141.142.220.50 5353 224.0.0.251 - - 141.142.220.118 43927 141.142.2.2 0.000435 - 141.142.220.118 37676 141.142.2.2 0.000420 - 141.142.220.118 40526 141.142.2.2 0.000392 - 141.142.220.118 32902 141.142.2.2 0.000317 - 141.142.220.118 59816 141.142.2.2 0.000343 - 141.142.220.118 59714 141.142.2.2 0.000375 - 141.142.220.118 58206 141.142.2.2 0.000339 - [...] - diff --git a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#3 b/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#3 deleted file mode 100644 index 92378e6c08..0000000000 --- a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#3 +++ /dev/null @@ -1,19 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # awk '/^[^#]/ {print $3, $4, $5, $6, $9}' conn.log - 141.142.220.202 5353 224.0.0.251 5353 - - fe80::217:f2ff:fed7:cf65 5353 ff02::fb 5353 - - 141.142.220.50 5353 224.0.0.251 5353 - - 141.142.220.118 43927 141.142.2.2 53 0.000435 - 141.142.220.118 37676 141.142.2.2 53 0.000420 - 141.142.220.118 40526 141.142.2.2 53 0.000392 - 141.142.220.118 32902 141.142.2.2 53 0.000317 - 141.142.220.118 59816 141.142.2.2 53 0.000343 - 141.142.220.118 59714 141.142.2.2 53 0.000375 - 141.142.220.118 58206 141.142.2.2 53 0.000339 - [...] - diff --git a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#4 b/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#4 deleted file mode 100644 index c5c8e310c7..0000000000 --- a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#4 +++ /dev/null @@ -1,14 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro-cut -d ts uid host uri < http.log - 2011-03-18T19:06:08+0000 CUM0KZ3MLUfNB0cl11 bits.wikimedia.org /skins-1.5/monobook/main.css - 2011-03-18T19:06:08+0000 CwjjYJ2WqgTbAqiHl6 upload.wikimedia.org /wikipedia/commons/6/63/Wikipedia-logo.png - 2011-03-18T19:06:08+0000 C3eiCBGOLw3VtHfOj upload.wikimedia.org /wikipedia/commons/thumb/b/bb/Wikipedia_wordmark.svg/174px-Wikipedia_wordmark.svg.png - 2011-03-18T19:06:08+0000 Ck51lg1bScffFj34Ri upload.wikimedia.org /wikipedia/commons/b/bd/Bookshelf-40x201_6.png - 2011-03-18T19:06:08+0000 CtxTCR2Yer0FR1tIBg upload.wikimedia.org /wikipedia/commons/thumb/8/8a/Wikinews-logo.png/35px-Wikinews-logo.png - [...] - diff --git a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#5 b/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#5 deleted file mode 100644 index aaa93f5073..0000000000 --- a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#5 +++ /dev/null @@ -1,14 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro-cut -u ts uid host uri < http.log - 2011-03-18T19:06:08+0000 CUM0KZ3MLUfNB0cl11 bits.wikimedia.org /skins-1.5/monobook/main.css - 2011-03-18T19:06:08+0000 CwjjYJ2WqgTbAqiHl6 upload.wikimedia.org /wikipedia/commons/6/63/Wikipedia-logo.png - 2011-03-18T19:06:08+0000 C3eiCBGOLw3VtHfOj upload.wikimedia.org /wikipedia/commons/thumb/b/bb/Wikipedia_wordmark.svg/174px-Wikipedia_wordmark.svg.png - 2011-03-18T19:06:08+0000 Ck51lg1bScffFj34Ri upload.wikimedia.org /wikipedia/commons/b/bd/Bookshelf-40x201_6.png - 2011-03-18T19:06:08+0000 CtxTCR2Yer0FR1tIBg upload.wikimedia.org /wikipedia/commons/thumb/8/8a/Wikinews-logo.png/35px-Wikinews-logo.png - [...] - diff --git a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#6 b/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#6 deleted file mode 100644 index 1489b54426..0000000000 --- a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#6 +++ /dev/null @@ -1,14 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # bro-cut -D %d-%m-%YT%H:%M:%S%z ts uid host uri < http.log - 18-03-2011T19:06:08+0000 CUM0KZ3MLUfNB0cl11 bits.wikimedia.org /skins-1.5/monobook/main.css - 18-03-2011T19:06:08+0000 CwjjYJ2WqgTbAqiHl6 upload.wikimedia.org /wikipedia/commons/6/63/Wikipedia-logo.png - 18-03-2011T19:06:08+0000 C3eiCBGOLw3VtHfOj upload.wikimedia.org /wikipedia/commons/thumb/b/bb/Wikipedia_wordmark.svg/174px-Wikipedia_wordmark.svg.png - 18-03-2011T19:06:08+0000 Ck51lg1bScffFj34Ri upload.wikimedia.org /wikipedia/commons/b/bd/Bookshelf-40x201_6.png - 18-03-2011T19:06:08+0000 CtxTCR2Yer0FR1tIBg upload.wikimedia.org /wikipedia/commons/thumb/8/8a/Wikinews-logo.png/35px-Wikinews-logo.png - [...] - diff --git a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#7 b/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#7 deleted file mode 100644 index 22172b1ac6..0000000000 --- a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#7 +++ /dev/null @@ -1,13 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat conn.log | bro-cut uid resp_bytes | sort -nrk2 | head -5 - CwjjYJ2WqgTbAqiHl6 734 - CtxTCR2Yer0FR1tIBg 734 - Ck51lg1bScffFj34Ri 734 - CLNN1k2QMum1aexUK7 734 - CykQaM33ztNt0csB9a 733 - diff --git a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#8 b/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#8 deleted file mode 100644 index 7a041756e8..0000000000 --- a/testing/btest/Baseline/doc.sphinx.using_bro/btest-doc.sphinx.using_bro#8 +++ /dev/null @@ -1,9 +0,0 @@ -.. rst-class:: btest-cmd - - .. code-block:: none - :linenos: - :emphasize-lines: 1,1 - - # cat http.log | bro-cut uid id.resp_h method status_code host uri | grep UM0KZ3MLUfNB0cl11 - CUM0KZ3MLUfNB0cl11 208.80.152.118 GET 304 bits.wikimedia.org /skins-1.5/monobook/main.css - diff --git a/testing/btest/btest.cfg b/testing/btest/btest.cfg index 1c93c9cb6b..6624d70431 100644 --- a/testing/btest/btest.cfg +++ b/testing/btest/btest.cfg @@ -4,7 +4,6 @@ TmpDir = %(testbase)s/.tmp BaselineDir = %(testbase)s/Baseline IgnoreDirs = .svn CVS .tmp IgnoreFiles = *.tmp *.swp #* *.trace .DS_Store -PartFinalizer = btest-diff-rst [environment] BROPATH=`bash -c %(testbase)s/../../build/bro-path-dev` diff --git a/testing/btest/coverage/sphinx-broxygen-docs.sh b/testing/btest/coverage/sphinx-broxygen-docs.sh new file mode 100644 index 0000000000..37a28403ad --- /dev/null +++ b/testing/btest/coverage/sphinx-broxygen-docs.sh @@ -0,0 +1,33 @@ +# This script checks whether the reST docs generated by broxygen are stale. +# If this test fails, then simply run: +# +# testing/scripts/gen-broxygen-docs.sh +# +# and then include the changes in your commit. +# +# @TEST-EXEC: bash $SCRIPTS/gen-broxygen-docs.sh ./doc +# @TEST-EXEC: bash %INPUT + +function check_diff + { + local file=$1 + echo "Checking $file for differences" + diff -Nru $DIST/$file $file 1>&2 + + if [ $? -ne 0 ]; then + echo "============================" 1>&2 + echo "$DIST/$file is outdated" 1>&2 + echo "Re-run the following command:" 1>&2 + echo "" 1>&2 + echo " $SCRIPTS/gen-broxygen-docs.sh" 1>&2 + echo "" 1>&2 + echo "And then include the changes in your commit" 1>&2 + exit 1 + fi + } + +for file in $(find ./doc -name autogenerated-*); do + check_diff $file +done + +check_diff ./doc/scripts diff --git a/testing/btest/doc/sphinx/conditional-notice.btest b/testing/btest/doc/sphinx/conditional-notice.btest deleted file mode 100644 index ff3eea1132..0000000000 --- a/testing/btest/doc/sphinx/conditional-notice.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/tls/tls-expired-cert.trace ${DOC_ROOT}/quickstart/conditional-notice.bro -@TEST-EXEC: btest-rst-cmd cat notice.log diff --git a/testing/btest/doc/sphinx/connection-record-01.btest b/testing/btest/doc/sphinx/connection-record-01.btest deleted file mode 100644 index 3704d58932..0000000000 --- a/testing/btest/doc/sphinx/connection-record-01.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -b -r ${TRACES}/http/get.trace ${DOC_ROOT}/scripting/connection_record_01.bro diff --git a/testing/btest/doc/sphinx/connection-record-02.btest b/testing/btest/doc/sphinx/connection-record-02.btest deleted file mode 100644 index 0b0c87c1f2..0000000000 --- a/testing/btest/doc/sphinx/connection-record-02.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -b -r ${TRACES}/http/get.trace ${DOC_ROOT}/scripting/connection_record_02.bro diff --git a/testing/btest/doc/sphinx/data_struct_record_01.btest b/testing/btest/doc/sphinx/data_struct_record_01.btest deleted file mode 100644 index ae52b9a24d..0000000000 --- a/testing/btest/doc/sphinx/data_struct_record_01.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_record_01.bro diff --git a/testing/btest/doc/sphinx/data_struct_record_02.btest b/testing/btest/doc/sphinx/data_struct_record_02.btest deleted file mode 100644 index d978224e3b..0000000000 --- a/testing/btest/doc/sphinx/data_struct_record_02.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_record_02.bro diff --git a/testing/btest/doc/sphinx/data_struct_set_declaration.btest b/testing/btest/doc/sphinx/data_struct_set_declaration.btest deleted file mode 100644 index 2812479dff..0000000000 --- a/testing/btest/doc/sphinx/data_struct_set_declaration.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_set_declaration.bro diff --git a/testing/btest/doc/sphinx/data_struct_table_complex.btest b/testing/btest/doc/sphinx/data_struct_table_complex.btest deleted file mode 100644 index 99117130f8..0000000000 --- a/testing/btest/doc/sphinx/data_struct_table_complex.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -b ${DOC_ROOT}/scripting/data_struct_table_complex.bro diff --git a/testing/btest/doc/sphinx/data_struct_table_declaration.btest b/testing/btest/doc/sphinx/data_struct_table_declaration.btest deleted file mode 100644 index ac83e84e45..0000000000 --- a/testing/btest/doc/sphinx/data_struct_table_declaration.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_table_declaration.bro diff --git a/testing/btest/doc/sphinx/data_struct_vector_declaration.btest b/testing/btest/doc/sphinx/data_struct_vector_declaration.btest deleted file mode 100644 index b017f84aed..0000000000 --- a/testing/btest/doc/sphinx/data_struct_vector_declaration.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_struct_vector_declaration.bro diff --git a/testing/btest/doc/sphinx/data_struct_vector_iter.btest b/testing/btest/doc/sphinx/data_struct_vector_iter.btest deleted file mode 100644 index f5e6c2a0ba..0000000000 --- a/testing/btest/doc/sphinx/data_struct_vector_iter.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -b ${DOC_ROOT}/scripting/data_struct_vector_iter.bro diff --git a/testing/btest/doc/sphinx/data_type_const.bro.btest b/testing/btest/doc/sphinx/data_type_const.bro.btest deleted file mode 100644 index 903fed3fbf..0000000000 --- a/testing/btest/doc/sphinx/data_type_const.bro.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -b ${DOC_ROOT}/scripting/data_type_const.bro diff --git a/testing/btest/doc/sphinx/data_type_interval.btest b/testing/btest/doc/sphinx/data_type_interval.btest deleted file mode 100644 index 0c1baa1372..0000000000 --- a/testing/btest/doc/sphinx/data_type_interval.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/wikipedia.trace ${DOC_ROOT}/scripting/data_type_interval.bro diff --git a/testing/btest/doc/sphinx/data_type_pattern.btest b/testing/btest/doc/sphinx/data_type_pattern.btest deleted file mode 100644 index 30ba3c6fe0..0000000000 --- a/testing/btest/doc/sphinx/data_type_pattern.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_type_pattern_01.bro diff --git a/testing/btest/doc/sphinx/data_type_pattern_02.btest b/testing/btest/doc/sphinx/data_type_pattern_02.btest deleted file mode 100644 index b197cef792..0000000000 --- a/testing/btest/doc/sphinx/data_type_pattern_02.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_type_pattern_02.bro diff --git a/testing/btest/doc/sphinx/data_type_subnets.btest b/testing/btest/doc/sphinx/data_type_subnets.btest deleted file mode 100644 index c78fe8c71c..0000000000 --- a/testing/btest/doc/sphinx/data_type_subnets.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/data_type_subnets.bro diff --git a/testing/btest/doc/sphinx/data_type_time.btest b/testing/btest/doc/sphinx/data_type_time.btest deleted file mode 100644 index 29dee6002f..0000000000 --- a/testing/btest/doc/sphinx/data_type_time.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/wikipedia.trace ${DOC_ROOT}/scripting/data_type_time.bro diff --git a/testing/btest/doc/sphinx/file-analysis-01.btest b/testing/btest/doc/sphinx/file-analysis-01.btest deleted file mode 100644 index 6dac37ee38..0000000000 --- a/testing/btest/doc/sphinx/file-analysis-01.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/get.trace ${DOC_ROOT}/frameworks/file_analysis_01.bro diff --git a/testing/btest/doc/sphinx/file-analysis-02.btest b/testing/btest/doc/sphinx/file-analysis-02.btest deleted file mode 100644 index ea359e1bca..0000000000 --- a/testing/btest/doc/sphinx/file-analysis-02.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/get.trace ${DOC_ROOT}/frameworks/file_analysis_02.bro diff --git a/testing/btest/doc/sphinx/file-analysis-03.btest b/testing/btest/doc/sphinx/file-analysis-03.btest deleted file mode 100644 index 6ad81d6a76..0000000000 --- a/testing/btest/doc/sphinx/file-analysis-03.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: echo "Hello world" > myfile -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/frameworks/file_analysis_03.bro diff --git a/testing/btest/doc/sphinx/file_extraction.btest b/testing/btest/doc/sphinx/file_extraction.btest deleted file mode 100644 index 76ebd82474..0000000000 --- a/testing/btest/doc/sphinx/file_extraction.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd -n 5 bro -r ${TRACES}/http/bro.org.pcap ${DOC_ROOT}/httpmonitor/file_extraction.bro diff --git a/testing/btest/doc/sphinx/framework_logging_factorial-2.btest b/testing/btest/doc/sphinx/framework_logging_factorial-2.btest deleted file mode 100644 index c0f1262217..0000000000 --- a/testing/btest/doc/sphinx/framework_logging_factorial-2.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/framework_logging_factorial_02.bro -@TEST-EXEC: btest-rst-include factor.log diff --git a/testing/btest/doc/sphinx/framework_logging_factorial-3.btest b/testing/btest/doc/sphinx/framework_logging_factorial-3.btest deleted file mode 100644 index 75f2054661..0000000000 --- a/testing/btest/doc/sphinx/framework_logging_factorial-3.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/framework_logging_factorial_03.bro -@TEST-EXEC: btest-rst-include factor-mod5.log diff --git a/testing/btest/doc/sphinx/framework_logging_factorial.btest b/testing/btest/doc/sphinx/framework_logging_factorial.btest deleted file mode 100644 index 798b821f87..0000000000 --- a/testing/btest/doc/sphinx/framework_logging_factorial.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/scripting/framework_logging_factorial_01.bro diff --git a/testing/btest/doc/sphinx/ftp-bruteforce.btest b/testing/btest/doc/sphinx/ftp-bruteforce.btest deleted file mode 100644 index 0a9c89c22e..0000000000 --- a/testing/btest/doc/sphinx/ftp-bruteforce.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/ftp/bruteforce.pcap protocols/ftp/detect-bruteforcing.bro -@TEST-EXEC: btest-rst-include notice.log diff --git a/testing/btest/doc/sphinx/http_proxy_01.btest b/testing/btest/doc/sphinx/http_proxy_01.btest deleted file mode 100644 index 95c212876d..0000000000 --- a/testing/btest/doc/sphinx/http_proxy_01.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/proxy.pcap ${DOC_ROOT}/httpmonitor/http_proxy_01.bro diff --git a/testing/btest/doc/sphinx/http_proxy_02.btest b/testing/btest/doc/sphinx/http_proxy_02.btest deleted file mode 100644 index 886177a025..0000000000 --- a/testing/btest/doc/sphinx/http_proxy_02.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/proxy.pcap ${DOC_ROOT}/httpmonitor/http_proxy_02.bro diff --git a/testing/btest/doc/sphinx/http_proxy_03.btest b/testing/btest/doc/sphinx/http_proxy_03.btest deleted file mode 100644 index fe1e22f58c..0000000000 --- a/testing/btest/doc/sphinx/http_proxy_03.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/proxy.pcap ${DOC_ROOT}/httpmonitor/http_proxy_03.bro diff --git a/testing/btest/doc/sphinx/http_proxy_04.btest b/testing/btest/doc/sphinx/http_proxy_04.btest deleted file mode 100644 index 1c2dcb707e..0000000000 --- a/testing/btest/doc/sphinx/http_proxy_04.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/proxy.pcap ${DOC_ROOT}/httpmonitor/http_proxy_04.bro -@TEST-EXEC: btest-rst-include notice.log diff --git a/testing/btest/doc/sphinx/include-build_scripts_base_bif_plugins_Bro_DNS_events_bif_bro.btest b/testing/btest/doc/sphinx/include-build_scripts_base_bif_plugins_Bro_DNS_events_bif_bro.btest deleted file mode 100644 index 6e15ece5e0..0000000000 --- a/testing/btest/doc/sphinx/include-build_scripts_base_bif_plugins_Bro_DNS_events_bif_bro.btest +++ /dev/null @@ -1,30 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -Bro_DNS.events.bif.bro - -## Generated for DNS requests. For requests with multiple queries, this event -## is raised once for each. -## -## See `Wikipedia `__ for more -## information about the DNS protocol. Bro analyzes both UDP and TCP DNS -## sessions. -## -## c: The connection, which may be UDP or TCP depending on the type of the -## transport-layer session being analyzed. -## -## msg: The parsed DNS message header. -## -## query: The queried name. -## -## qtype: The queried resource record type. -## -## qclass: The queried resource record class. -## -## .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl -## dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply -## dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end -## dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name -## dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply -## dns_rejected non_dns_request dns_max_queries dns_session_timeout dns_skip_addl -## dns_skip_all_addl dns_skip_all_auth dns_skip_auth -global dns_request: event(c: connection , msg: dns_msg , query: string , qtype: count , qclass: count ); diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_broker_connecting-connector_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_broker_connecting-connector_bro.btest deleted file mode 100644 index d2916a4c4f..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_broker_connecting-connector_bro.btest +++ /dev/null @@ -1,16 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -connecting-connector.bro - -redef exit_only_after_terminate = T; - -event bro_init() - { - Broker::peer("127.0.0.1"); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - terminate(); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_broker_connecting-listener_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_broker_connecting-listener_bro.btest deleted file mode 100644 index b15bac75c0..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_broker_connecting-listener_bro.btest +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -connecting-listener.bro - -redef exit_only_after_terminate = T; - -event bro_init() - { - Broker::listen("127.0.0.1"); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - } - -event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer lost", endpoint; - terminate(); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_broker_events-connector_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_broker_events-connector_bro.btest deleted file mode 100644 index 96616dbd3c..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_broker_events-connector_bro.btest +++ /dev/null @@ -1,39 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -events-connector.bro - -redef exit_only_after_terminate = T; -global my_event: event(msg: string, c: count); -global my_auto_event: event(msg: string, c: count); - -event bro_init() - { - Broker::peer("127.0.0.1"); - Broker::auto_publish("bro/event/my_auto_event", my_auto_event); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - Broker::publish("bro/event/my_event", my_event, "hi", 0); - event my_auto_event("stuff", 88); - Broker::publish("bro/event/my_event", my_event, "...", 1); - event my_auto_event("more stuff", 51); - local e = Broker::make_event(my_event, "bye", 2); - Broker::publish("bro/event/my_event", e); - } - -event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) - { - terminate(); - } - -event my_event(msg: string, c: count) - { - print "got my_event", msg, c; - } - -event my_auto_event(msg: string, c: count) - { - print "got my_auto_event", msg, c; - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_broker_events-listener_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_broker_events-listener_bro.btest deleted file mode 100644 index 928ba60311..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_broker_events-listener_bro.btest +++ /dev/null @@ -1,37 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -events-listener.bro - -redef exit_only_after_terminate = T; -global msg_count = 0; -global my_event: event(msg: string, c: count); -global my_auto_event: event(msg: string, c: count); - -event bro_init() - { - Broker::subscribe("bro/event/"); - Broker::listen("127.0.0.1"); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - } - -event my_event(msg: string, c: count) - { - ++msg_count; - print "got my_event", msg, c; - - if ( msg_count == 5 ) - terminate(); - } - -event my_auto_event(msg: string, c: count) - { - ++msg_count; - print "got my_auto_event", msg, c; - - if ( msg_count == 5 ) - terminate(); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_broker_logs-connector_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_broker_logs-connector_bro.btest deleted file mode 100644 index 84d0a60391..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_broker_logs-connector_bro.btest +++ /dev/null @@ -1,40 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -logs-connector.bro - -@load ./testlog - -redef exit_only_after_terminate = T; -global n = 0; - -event bro_init() - { - Broker::peer("127.0.0.1"); - } - -event do_write() - { - if ( n == 6 ) - return; - - Log::write(Test::LOG, [$msg = "ping", $num = n]); - ++n; - event do_write(); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - event do_write(); - } - -event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) - { - terminate(); - } - -event Test::log_test(rec: Test::Info) - { - print "wrote log", rec; - Broker::publish("bro/logs/forward/test", Test::log_test, rec); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_broker_logs-listener_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_broker_logs-listener_bro.btest deleted file mode 100644 index 359a88b476..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_broker_logs-listener_bro.btest +++ /dev/null @@ -1,26 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -logs-listener.bro - -@load ./testlog - -redef exit_only_after_terminate = T; - -event bro_init() - { - Broker::subscribe("bro/logs"); - Broker::listen("127.0.0.1"); - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added", endpoint; - } - -event Test::log_test(rec: Test::Info) - { - print "got log event", rec; - - if ( rec$num == 5 ) - terminate(); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_broker_stores-connector_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_broker_stores-connector_bro.btest deleted file mode 100644 index 8ef4dca1f5..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_broker_stores-connector_bro.btest +++ /dev/null @@ -1,33 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -stores-connector.bro - -redef exit_only_after_terminate = T; - -global h: opaque of Broker::Store; - -global ready: event(); - -event Broker::peer_lost(endpoint: Broker::EndpointInfo, msg: string) - { - terminate(); - } - -event bro_init() - { - h = Broker::create_master("mystore"); - - local myset: set[string] = {"a", "b", "c"}; - local myvec: vector of string = {"alpha", "beta", "gamma"}; - Broker::put(h, "one", 110); - Broker::put(h, "two", 223); - Broker::put(h, "myset", myset); - Broker::put(h, "myvec", myvec); - Broker::increment(h, "one"); - Broker::decrement(h, "two"); - Broker::insert_into_set(h, "myset", "d"); - Broker::remove_from(h, "myset", "b"); - Broker::push(h, "myvec", "delta"); - - Broker::peer("127.0.0.1"); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_broker_stores-listener_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_broker_stores-listener_bro.btest deleted file mode 100644 index 571ede2687..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_broker_stores-listener_bro.btest +++ /dev/null @@ -1,83 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -stores-listener.bro - -redef exit_only_after_terminate = T; - -global h: opaque of Broker::Store; -global expected_key_count = 4; -global key_count = 0; - -# Lookup a value in the store based on an arbitrary key string. -function do_lookup(key: string) - { - when ( local res = Broker::get(h, key) ) - { - ++key_count; - print "lookup", key, res; - - # End after we iterated over looking up each key in the store twice. - if ( key_count == expected_key_count * 2 ) - terminate(); - } - # All data store queries must specify a timeout - timeout 3sec - { print "timeout", key; } - } - -event check_keys() - { - # Here we just query for the list of keys in the store, and show how to - # look up each one's value. - when ( local res = Broker::keys(h) ) - { - print "clone keys", res; - - if ( res?$result ) - { - # Since we know that the keys we are storing are all strings, - # we can conveniently cast the result of Broker::keys to - # a native Bro type, namely 'set[string]'. - for ( k in res$result as string_set ) - do_lookup(k); - - # Alternatively, we can use a generic iterator to iterate - # over the results (which we know is of the 'set' type because - # that's what Broker::keys() always returns). If the keys - # we stored were not all of the same type, then you would - # likely want to use this method of inspecting the store's keys. - local i = Broker::set_iterator(res$result); - - while ( ! Broker::set_iterator_last(i) ) - { - do_lookup(Broker::set_iterator_value(i) as string); - Broker::set_iterator_next(i); - } - } - } - # All data store queries must specify a timeout. - # You also might see timeouts on connecting/initializing a clone since - # it hasn't had time to get fully set up yet. - timeout 1sec - { - print "timeout"; - schedule 1sec { check_keys() }; - } - } - -event Broker::peer_added(endpoint: Broker::EndpointInfo, msg: string) - { - print "peer added"; - # We could create a clone early, like in bro_init and it will periodically - # try to synchronize with its master once it connects, however, we just - # create it now since we know the peer w/ the master store has just - # connected. - h = Broker::create_clone("mystore"); - - event check_keys(); - } - -event bro_init() - { - Broker::listen("127.0.0.1"); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_broker_testlog_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_broker_testlog_bro.btest deleted file mode 100644 index 8d779a1b92..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_broker_testlog_bro.btest +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -testlog.bro - -module Test; - -export { - redef enum Log::ID += { LOG }; - - type Info: record { - msg: string &log; - num: count &log; - }; - - global log_test: event(rec: Test::Info); -} - -event bro_init() &priority=5 - { - Log::create_stream(Test::LOG, [$columns=Test::Info, $ev=log_test, $path="test"]); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_file_analysis_01_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_file_analysis_01_bro.btest deleted file mode 100644 index 045fa5ff9f..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_file_analysis_01_bro.btest +++ /dev/null @@ -1,24 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -file_analysis_01.bro - -event connection_state_remove(c: connection) - { - print "connection_state_remove"; - print c$uid; - print c$id; - for ( s in c$service ) - print s; - } - -event file_state_remove(f: fa_file) - { - print "file_state_remove"; - print f$id; - for ( cid in f$conns ) - { - print f$conns[cid]$uid; - print cid; - } - print f$source; - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_file_analysis_02_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_file_analysis_02_bro.btest deleted file mode 100644 index 7c0b7eb8f0..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_file_analysis_02_bro.btest +++ /dev/null @@ -1,16 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -file_analysis_02.bro - -event file_sniff(f: fa_file, meta: fa_metadata) - { - if ( ! meta?$mime_type ) return; - print "new file", f$id; - if ( meta$mime_type == "text/plain" ) - Files::add_analyzer(f, Files::ANALYZER_MD5); - } - -event file_hash(f: fa_file, kind: string, hash: string) - { - print "file_hash", f$id, kind, hash; - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_file_analysis_03_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_file_analysis_03_bro.btest deleted file mode 100644 index 4084169945..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_file_analysis_03_bro.btest +++ /dev/null @@ -1,29 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -file_analysis_03.bro - -redef exit_only_after_terminate = T; - -event file_new(f: fa_file) - { - print "new file", f$id; - Files::add_analyzer(f, Files::ANALYZER_MD5); - } - -event file_state_remove(f: fa_file) - { - print "file_state_remove"; - Input::remove(f$source); - terminate(); - } - -event file_hash(f: fa_file, kind: string, hash: string) - { - print "file_hash", f$id, kind, hash; - } - -event bro_init() - { - local source: string = "./myfile"; - Input::add_analysis([$source=source, $name=source]); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-1-drop-with-debug_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-1-drop-with-debug_bro.btest deleted file mode 100644 index b451d5aa4f..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-1-drop-with-debug_bro.btest +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-1-drop-with-debug.bro - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -event connection_established(c: connection) - { - NetControl::drop_connection(c$id, 20 secs); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-10-use-skeleton_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-10-use-skeleton_bro.btest deleted file mode 100644 index 331afbc80d..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-10-use-skeleton_bro.btest +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-10-use-skeleton.bro - -event NetControl::init() - { - local skeleton_plugin = NetControl::create_skeleton(""); - NetControl::activate(skeleton_plugin, 0); - } - -event connection_established(c: connection) - { - NetControl::drop_connection(c$id, 20 secs); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-2-ssh-guesser_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-2-ssh-guesser_bro.btest deleted file mode 100644 index 87c8cdda7a..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-2-ssh-guesser_bro.btest +++ /dev/null @@ -1,20 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-2-ssh-guesser.bro - - -@load protocols/ssh/detect-bruteforcing - -redef SSH::password_guesses_limit=10; - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSH::Password_Guessing ) - NetControl::drop_address(n$src, 60min); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-3-ssh-guesser_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-3-ssh-guesser_bro.btest deleted file mode 100644 index 228856f00a..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-3-ssh-guesser_bro.btest +++ /dev/null @@ -1,20 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-3-ssh-guesser.bro - - -@load protocols/ssh/detect-bruteforcing - -redef SSH::password_guesses_limit=10; - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSH::Password_Guessing ) - add n$actions[Notice::ACTION_DROP]; - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-4-drop_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-4-drop_bro.btest deleted file mode 100644 index e7b15fd91b..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-4-drop_bro.btest +++ /dev/null @@ -1,30 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-4-drop.bro - -function our_drop_connection(c: conn_id, t: interval) - { - # As a first step, create the NetControl::Entity that we want to block - local e = NetControl::Entity($ty=NetControl::CONNECTION, $conn=c); - # Then, use the entity to create the rule to drop the entity in the forward path - local r = NetControl::Rule($ty=NetControl::DROP, - $target=NetControl::FORWARD, $entity=e, $expire=t); - - # Add the rule - local id = NetControl::add_rule(r); - - if ( id == "" ) - print "Error while dropping"; - } - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -event connection_established(c: connection) - { - our_drop_connection(c$id, 20 secs); - } - diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-5-hook_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-5-hook_bro.btest deleted file mode 100644 index d27e3f9a6a..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-5-hook_bro.btest +++ /dev/null @@ -1,26 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-5-hook.bro - -hook NetControl::rule_policy(r: NetControl::Rule) - { - if ( r$ty == NetControl::DROP && - r$entity$ty == NetControl::CONNECTION && - r$entity$conn$orig_h in 192.168.0.0/16 ) - { - print "Ignored connection from", r$entity$conn$orig_h; - break; - } - } - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -event connection_established(c: connection) - { - NetControl::drop_connection(c$id, 20 secs); - } - diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-6-find_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-6-find_bro.btest deleted file mode 100644 index bcc5199590..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-6-find_bro.btest +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-6-find.bro - -event NetControl::init() - { - local netcontrol_debug = NetControl::create_debug(T); - NetControl::activate(netcontrol_debug, 0); - } - -event connection_established(c: connection) - { - if ( |NetControl::find_rules_addr(c$id$orig_h)| > 0 ) - { - print "Rule already exists"; - return; - } - - NetControl::drop_connection(c$id, 20 secs); - print "Rule added"; - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-7-catch-release_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-7-catch-release_bro.btest deleted file mode 100644 index aa10d8cc01..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-7-catch-release_bro.btest +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-7-catch-release.bro - -event NetControl::init() - { - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - } - -event connection_established(c: connection) - { - NetControl::drop_address_catch_release(c$id$orig_h); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-8-multiple_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-8-multiple_bro.btest deleted file mode 100644 index f9bac69f44..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-8-multiple_bro.btest +++ /dev/null @@ -1,33 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-8-multiple.bro - -function our_openflow_check(p: NetControl::PluginState, r: NetControl::Rule): bool - { - if ( r$ty == NetControl::DROP && - r$entity$ty == NetControl::ADDRESS && - subnet_width(r$entity$ip) == 32 && - subnet_to_addr(r$entity$ip) in 192.168.17.0/24 ) - return F; - - return T; - } - -event NetControl::init() - { - # Add debug plugin with low priority - local debug_plugin = NetControl::create_debug(T); - NetControl::activate(debug_plugin, 0); - - # Instantiate OpenFlow debug plugin with higher priority - local of_controller = OpenFlow::log_new(42); - local netcontrol_of = NetControl::create_openflow(of_controller, [$check_pred=our_openflow_check]); - NetControl::activate(netcontrol_of, 10); - } - -event NetControl::init_done() - { - NetControl::drop_address(10.0.0.1, 1min); - NetControl::drop_address(192.168.17.2, 1min); - NetControl::drop_address(192.168.18.2, 1min); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-9-skeleton_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-9-skeleton_bro.btest deleted file mode 100644 index 0fed26184f..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_netcontrol-9-skeleton_bro.btest +++ /dev/null @@ -1,43 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -netcontrol-9-skeleton.bro - -module NetControl; - -export { - ## Instantiates the plugin. - global create_skeleton: function(argument: string) : PluginState; -} - -function skeleton_name(p: PluginState) : string - { - return "NetControl skeleton plugin"; - } - -function skeleton_add_rule_fun(p: PluginState, r: Rule) : bool - { - print "add", r; - event NetControl::rule_added(r, p); - return T; - } - -function skeleton_remove_rule_fun(p: PluginState, r: Rule, reason: string &default="") : bool - { - print "remove", r; - event NetControl::rule_removed(r, p); - return T; - } - -global skeleton_plugin = Plugin( - $name = skeleton_name, - $can_expire = F, - $add_rule = skeleton_add_rule_fun, - $remove_rule = skeleton_remove_rule_fun - ); - -function create_skeleton(argument: string) : PluginState - { - local p = PluginState($plugin=skeleton_plugin); - - return p; - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_notice_ssh_guesser_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_notice_ssh_guesser_bro.btest deleted file mode 100644 index 11b77dd1ba..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_notice_ssh_guesser_bro.btest +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -notice_ssh_guesser.bro - - -@load protocols/ssh/detect-bruteforcing - -redef SSH::password_guesses_limit=10; - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSH::Password_Guessing && /192\.168\.56\.103/ in n$sub ) - add n$actions[Notice::ACTION_EMAIL]; - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_sqlite-conn-filter_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_sqlite-conn-filter_bro.btest deleted file mode 100644 index dc42f0bce1..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_sqlite-conn-filter_bro.btest +++ /dev/null @@ -1,16 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sqlite-conn-filter.bro - -event bro_init() - { - local filter: Log::Filter = - [ - $name="sqlite", - $path="/var/db/conn", - $config=table(["tablename"] = "conn"), - $writer=Log::WRITER_SQLITE - ]; - - Log::add_filter(Conn::LOG, filter); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_sqlite-read-events_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_sqlite-read-events_bro.btest deleted file mode 100644 index 6703c4ca7e..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_sqlite-read-events_bro.btest +++ /dev/null @@ -1,44 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sqlite-read-events.bro - -@load frameworks/files/hash-all-files - -type Val: record { - hash: string; - description: string; -}; - -event line(description: Input::EventDescription, tpe: Input::Event, r: Val) - { - print fmt("malware-hit with hash %s, description %s", r$hash, r$description); - } - -global malware_source = "/var/db/malware"; - -event file_hash(f: fa_file, kind: string, hash: string) - { - - # check all sha1 hashes - if ( kind=="sha1" ) - { - Input::add_event( - [ - $source=malware_source, - $name=hash, - $fields=Val, - $ev=line, - $want_record=T, - $config=table( - ["query"] = fmt("select * from malware_hashes where hash='%s';", hash) - ), - $reader=Input::READER_SQLITE - ]); - } - } - -event Input::end_of_data(name: string, source:string) - { - if ( source == malware_source ) - Input::remove(name); - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_sqlite-read-table_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_sqlite-read-table_bro.btest deleted file mode 100644 index dea06055ea..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_sqlite-read-table_bro.btest +++ /dev/null @@ -1,39 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sqlite-read-table.bro - -type Idx: record { - host: addr; -}; - -type Val: record { - users: set[string]; -}; - -global hostslist: table[addr] of Val = table(); - -event bro_init() - { - Input::add_table([$source="/var/db/hosts", - $name="hosts", - $idx=Idx, - $val=Val, - $destination=hostslist, - $reader=Input::READER_SQLITE, - $config=table(["query"] = "select * from machines_to_users;") - ]); - - Input::remove("hosts"); - } - -event Input::end_of_data(name: string, source: string) - { - if ( name != "hosts" ) - return; - - # now all data is in the table - print "Hosts list has been successfully imported"; - - # List the users of one host. - print hostslist[192.168.17.1]$users; - } diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_sumstats-countconns_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_sumstats-countconns_bro.btest deleted file mode 100644 index 0ec0c9ce70..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_sumstats-countconns_bro.btest +++ /dev/null @@ -1,40 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sumstats-countconns.bro - -@load base/frameworks/sumstats - -event connection_established(c: connection) - { - # Make an observation! - # This observation is global so the key is empty. - # Each established connection counts as one so the observation is always 1. - SumStats::observe("conn established", - SumStats::Key(), - SumStats::Observation($num=1)); - } - -event bro_init() - { - # Create the reducer. - # The reducer attaches to the "conn established" observation stream - # and uses the summing calculation on the observations. - local r1 = SumStats::Reducer($stream="conn established", - $apply=set(SumStats::SUM)); - - # Create the final sumstat. - # We give it an arbitrary name and make it collect data every minute. - # The reducer is then attached and a $epoch_result callback is given - # to finally do something with the data collected. - SumStats::create([$name = "counting connections", - $epoch = 1min, - $reducers = set(r1), - $epoch_result(ts: time, key: SumStats::Key, result: SumStats::Result) = - { - # This is the body of the callback that is called when a single - # result has been collected. We are just printing the total number - # of connections that were seen. The $sum field is provided as a - # double type value so we need to use %f as the format specifier. - print fmt("Number of connections established: %.0f", result["conn established"]$sum); - }]); - } \ No newline at end of file diff --git a/testing/btest/doc/sphinx/include-doc_frameworks_sumstats-toy-scan_bro.btest b/testing/btest/doc/sphinx/include-doc_frameworks_sumstats-toy-scan_bro.btest deleted file mode 100644 index b1b46b3b39..0000000000 --- a/testing/btest/doc/sphinx/include-doc_frameworks_sumstats-toy-scan_bro.btest +++ /dev/null @@ -1,49 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -sumstats-toy-scan.bro - -@load base/frameworks/sumstats - -# We use the connection_attempt event to limit our observations to those -# which were attempted and not successful. -event connection_attempt(c: connection) - { - # Make an observation! - # This observation is about the host attempting the connection. - # Each established connection counts as one so the observation is always 1. - SumStats::observe("conn attempted", - SumStats::Key($host=c$id$orig_h), - SumStats::Observation($num=1)); - } - -event bro_init() - { - # Create the reducer. - # The reducer attaches to the "conn attempted" observation stream - # and uses the summing calculation on the observations. Keep - # in mind that there will be one result per key (connection originator). - local r1 = SumStats::Reducer($stream="conn attempted", - $apply=set(SumStats::SUM)); - - # Create the final sumstat. - # This is slightly different from the last example since we're providing - # a callback to calculate a value to check against the threshold with - # $threshold_val. The actual threshold itself is provided with $threshold. - # Another callback is provided for when a key crosses the threshold. - SumStats::create([$name = "finding scanners", - $epoch = 5min, - $reducers = set(r1), - # Provide a threshold. - $threshold = 5.0, - # Provide a callback to calculate a value from the result - # to check against the threshold field. - $threshold_val(key: SumStats::Key, result: SumStats::Result) = - { - return result["conn attempted"]$sum; - }, - # Provide a callback for when a key crosses the threshold. - $threshold_crossed(key: SumStats::Key, result: SumStats::Result) = - { - print fmt("%s attempted %.0f or more connections", key$host, result["conn attempted"]$sum); - }]); - } diff --git a/testing/btest/doc/sphinx/include-doc_httpmonitor_file_extraction_bro.btest b/testing/btest/doc/sphinx/include-doc_httpmonitor_file_extraction_bro.btest deleted file mode 100644 index 729947ff72..0000000000 --- a/testing/btest/doc/sphinx/include-doc_httpmonitor_file_extraction_bro.btest +++ /dev/null @@ -1,28 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -file_extraction.bro - - -global mime_to_ext: table[string] of string = { - ["application/x-dosexec"] = "exe", - ["text/plain"] = "txt", - ["image/jpeg"] = "jpg", - ["image/png"] = "png", - ["text/html"] = "html", -}; - -event file_sniff(f: fa_file, meta: fa_metadata) - { - if ( f$source != "HTTP" ) - return; - - if ( ! meta?$mime_type ) - return; - - if ( meta$mime_type !in mime_to_ext ) - return; - - local fname = fmt("%s-%s.%s", f$source, f$id, mime_to_ext[meta$mime_type]); - print fmt("Extracting file %s", fname); - Files::add_analyzer(f, Files::ANALYZER_EXTRACT, [$extract_filename=fname]); - } diff --git a/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_01_bro.btest b/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_01_bro.btest deleted file mode 100644 index 4e10859d98..0000000000 --- a/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_01_bro.btest +++ /dev/null @@ -1,9 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_proxy_01.bro - -event http_reply(c: connection, version: string, code: count, reason: string) - { - if ( /^[hH][tT][tT][pP]:/ in c$http$uri && c$http$status_code == 200 ) - print fmt("A local server is acting as an open proxy: %s", c$id$resp_h); - } diff --git a/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_02_bro.btest b/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_02_bro.btest deleted file mode 100644 index 01e3822001..0000000000 --- a/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_02_bro.btest +++ /dev/null @@ -1,30 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_proxy_02.bro - - -module HTTP; - -export { - - global success_status_codes: set[count] = { - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 226, - 304 - }; -} - -event http_reply(c: connection, version: string, code: count, reason: string) - { - if ( /^[hH][tT][tT][pP]:/ in c$http$uri && - c$http$status_code in HTTP::success_status_codes ) - print fmt("A local server is acting as an open proxy: %s", c$id$resp_h); - } diff --git a/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_03_bro.btest b/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_03_bro.btest deleted file mode 100644 index 5139fa8c49..0000000000 --- a/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_03_bro.btest +++ /dev/null @@ -1,35 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_proxy_03.bro - - -@load base/utils/site - -redef Site::local_nets += { 192.168.0.0/16 }; - -module HTTP; - -export { - - global success_status_codes: set[count] = { - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 226, - 304 - }; -} - -event http_reply(c: connection, version: string, code: count, reason: string) - { - if ( Site::is_local_addr(c$id$resp_h) && - /^[hH][tT][tT][pP]:/ in c$http$uri && - c$http$status_code in HTTP::success_status_codes ) - print fmt("A local server is acting as an open proxy: %s", c$id$resp_h); - } diff --git a/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_04_bro.btest b/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_04_bro.btest deleted file mode 100644 index a8ca8e19b2..0000000000 --- a/testing/btest/doc/sphinx/include-doc_httpmonitor_http_proxy_04_bro.btest +++ /dev/null @@ -1,44 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_proxy_04.bro - -@load base/utils/site -@load base/frameworks/notice - -redef Site::local_nets += { 192.168.0.0/16 }; - -module HTTP; - -export { - - redef enum Notice::Type += { - Open_Proxy - }; - - global success_status_codes: set[count] = { - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 226, - 304 - }; -} - -event http_reply(c: connection, version: string, code: count, reason: string) - { - if ( Site::is_local_addr(c$id$resp_h) && - /^[hH][tT][tT][pP]:/ in c$http$uri && - c$http$status_code in HTTP::success_status_codes ) - NOTICE([$note=HTTP::Open_Proxy, - $msg=fmt("A local server is acting as an open proxy: %s", - c$id$resp_h), - $conn=c, - $identifier=cat(c$id$resp_h), - $suppress_for=1day]); - } diff --git a/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro.btest b/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro.btest deleted file mode 100644 index ef537b6c53..0000000000 --- a/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro.btest +++ /dev/null @@ -1,39 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -mimestats.bro - -module MimeMetrics; - -export { - - redef enum Log::ID += { LOG }; - - type Info: record { - ## Timestamp when the log line was finished and written. - ts: time &log; - ## Time interval that the log line covers. - ts_delta: interval &log; - ## The mime type - mtype: string &log; - ## The number of unique local hosts that fetched this mime type - uniq_hosts: count &log; - ## The number of hits to the mime type - hits: count &log; - ## The total number of bytes received by this mime type - bytes: count &log; - }; - - ## The frequency of logging the stats collected by this script. - const break_interval = 5mins &redef; -} -event HTTP::log_http(rec: HTTP::Info) - { - if ( Site::is_local_addr(rec$id$orig_h) && rec?$resp_mime_types ) - { - local mime_type = rec$resp_mime_types[0]; - SumStats::observe("mime.bytes", [$str=mime_type], - [$num=rec$response_body_len]); - SumStats::observe("mime.hits", [$str=mime_type], - [$str=cat(rec$id$orig_h)]); - } - } diff --git a/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro@2.btest b/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro@2.btest deleted file mode 100644 index 027eade4dc..0000000000 --- a/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro@2.btest +++ /dev/null @@ -1,8 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -mimestats.bro - - local r1: SumStats::Reducer = [$stream="mime.bytes", - $apply=set(SumStats::SUM)]; - local r2: SumStats::Reducer = [$stream="mime.hits", - $apply=set(SumStats::UNIQUE)]; diff --git a/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro@3.btest b/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro@3.btest deleted file mode 100644 index e410c6ebb9..0000000000 --- a/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro@3.btest +++ /dev/null @@ -1,18 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -mimestats.bro - - SumStats::create([$name="mime-metrics", - $epoch=break_interval, - $reducers=set(r1, r2), - $epoch_result(ts: time, key: SumStats::Key, result: SumStats::Result) = - { - local l: Info; - l$ts = network_time(); - l$ts_delta = break_interval; - l$mtype = key$str; - l$bytes = double_to_count(floor(result["mime.bytes"]$sum)); - l$hits = result["mime.hits"]$num; - l$uniq_hosts = result["mime.hits"]$unique; - Log::write(MimeMetrics::LOG, l); - }]); diff --git a/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro@4.btest b/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro@4.btest deleted file mode 100644 index 10c7b6bb34..0000000000 --- a/testing/btest/doc/sphinx/include-doc_mimestats_mimestats_bro@4.btest +++ /dev/null @@ -1,68 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -mimestats.bro - -@load base/utils/site -@load base/frameworks/sumstats - -redef Site::local_nets += { 10.0.0.0/8 }; - -module MimeMetrics; - -export { - - redef enum Log::ID += { LOG }; - - type Info: record { - ## Timestamp when the log line was finished and written. - ts: time &log; - ## Time interval that the log line covers. - ts_delta: interval &log; - ## The mime type - mtype: string &log; - ## The number of unique local hosts that fetched this mime type - uniq_hosts: count &log; - ## The number of hits to the mime type - hits: count &log; - ## The total number of bytes received by this mime type - bytes: count &log; - }; - - ## The frequency of logging the stats collected by this script. - const break_interval = 5mins &redef; -} - -event bro_init() &priority=3 - { - Log::create_stream(MimeMetrics::LOG, [$columns=Info, $path="mime_metrics"]); - local r1: SumStats::Reducer = [$stream="mime.bytes", - $apply=set(SumStats::SUM)]; - local r2: SumStats::Reducer = [$stream="mime.hits", - $apply=set(SumStats::UNIQUE)]; - SumStats::create([$name="mime-metrics", - $epoch=break_interval, - $reducers=set(r1, r2), - $epoch_result(ts: time, key: SumStats::Key, result: SumStats::Result) = - { - local l: Info; - l$ts = network_time(); - l$ts_delta = break_interval; - l$mtype = key$str; - l$bytes = double_to_count(floor(result["mime.bytes"]$sum)); - l$hits = result["mime.hits"]$num; - l$uniq_hosts = result["mime.hits"]$unique; - Log::write(MimeMetrics::LOG, l); - }]); - } - -event HTTP::log_http(rec: HTTP::Info) - { - if ( Site::is_local_addr(rec$id$orig_h) && rec?$resp_mime_types ) - { - local mime_type = rec$resp_mime_types[0]; - SumStats::observe("mime.bytes", [$str=mime_type], - [$num=rec$response_body_len]); - SumStats::observe("mime.hits", [$str=mime_type], - [$str=cat(rec$id$orig_h)]); - } - } diff --git a/testing/btest/doc/sphinx/include-doc_quickstart_conditional-notice_bro.btest b/testing/btest/doc/sphinx/include-doc_quickstart_conditional-notice_bro.btest deleted file mode 100644 index 8412154ec4..0000000000 --- a/testing/btest/doc/sphinx/include-doc_quickstart_conditional-notice_bro.btest +++ /dev/null @@ -1,28 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -conditional-notice.bro - -@load protocols/ssl/expiring-certs - -const watched_servers: set[addr] = { - 87.98.220.10, -} &redef; - -# Site::local_nets usually isn't something you need to modify if -# BroControl automatically sets it up from networks.cfg. It's -# shown here for completeness. -redef Site::local_nets += { - 87.98.0.0/16, -}; - -hook Notice::policy(n: Notice::Info) - { - if ( n$note != SSL::Certificate_Expired ) - return; - - if ( n$id$resp_h !in watched_servers ) - return; - - add n$actions[Notice::ACTION_EMAIL]; - } - diff --git a/testing/btest/doc/sphinx/include-doc_scripting_connection_record_01_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_connection_record_01_bro.btest deleted file mode 100644 index 34303a12ad..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_connection_record_01_bro.btest +++ /dev/null @@ -1,10 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -connection_record_01.bro - -@load base/protocols/conn - -event connection_state_remove(c: connection) - { - print c; - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_connection_record_02_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_connection_record_02_bro.btest deleted file mode 100644 index 12092ee2a0..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_connection_record_02_bro.btest +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -connection_record_02.bro - -@load base/protocols/conn -@load base/protocols/http - -event connection_state_remove(c: connection) - { - print c; - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_record_01_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_record_01_bro.btest deleted file mode 100644 index e67783fdeb..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_record_01_bro.btest +++ /dev/null @@ -1,26 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_record_01.bro - -type Service: record { - name: string; - ports: set[port]; - rfc: count; -}; - -function print_service(serv: Service) - { - print fmt("Service: %s(RFC%d)",serv$name, serv$rfc); - - for ( p in serv$ports ) - print fmt(" port: %s", p); - } - -event bro_init() - { - local dns: Service = [$name="dns", $ports=set(53/udp, 53/tcp), $rfc=1035]; - local http: Service = [$name="http", $ports=set(80/tcp, 8080/tcp), $rfc=2616]; - - print_service(dns); - print_service(http); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_record_02_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_record_02_bro.btest deleted file mode 100644 index 04da3522f2..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_record_02_bro.btest +++ /dev/null @@ -1,45 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_record_02.bro - -type Service: record { - name: string; - ports: set[port]; - rfc: count; - }; - -type System: record { - name: string; - services: set[Service]; - }; - -function print_service(serv: Service) - { - print fmt(" Service: %s(RFC%d)",serv$name, serv$rfc); - - for ( p in serv$ports ) - print fmt(" port: %s", p); - } - -function print_system(sys: System) - { - print fmt("System: %s", sys$name); - - for ( s in sys$services ) - print_service(s); - } - -event bro_init() - { - local server01: System; - server01$name = "morlock"; - add server01$services[[ $name="dns", $ports=set(53/udp, 53/tcp), $rfc=1035]]; - add server01$services[[ $name="http", $ports=set(80/tcp, 8080/tcp), $rfc=2616]]; - print_system(server01); - - - # local dns: Service = [ $name="dns", $ports=set(53/udp, 53/tcp), $rfc=1035]; - # local http: Service = [ $name="http", $ports=set(80/tcp, 8080/tcp), $rfc=2616]; - # print_service(dns); - # print_service(http); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro.btest deleted file mode 100644 index 47aa12030b..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro.btest +++ /dev/null @@ -1,9 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_set_declaration.bro - -event bro_init() - { - local ssl_ports: set[port]; - local non_ssl_ports = set( 23/tcp, 80/tcp, 143/tcp, 25/tcp ); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro@2.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro@2.btest deleted file mode 100644 index 12020f4b67..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro@2.btest +++ /dev/null @@ -1,9 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_set_declaration.bro - - for ( i in ssl_ports ) - print fmt("SSL Port: %s", i); - - for ( i in non_ssl_ports ) - print fmt("Non-SSL Port: %s", i); diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro@3.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro@3.btest deleted file mode 100644 index b7a68af4aa..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro@3.btest +++ /dev/null @@ -1,7 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_set_declaration.bro - - # Check for SMTPS - if ( 587/tcp !in ssl_ports ) - add ssl_ports[587/tcp]; diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro@4.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro@4.btest deleted file mode 100644 index 53b193850c..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_set_declaration_bro@4.btest +++ /dev/null @@ -1,26 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_set_declaration.bro - -event bro_init() - { - local ssl_ports: set[port]; - local non_ssl_ports = set( 23/tcp, 80/tcp, 143/tcp, 25/tcp ); - - # SSH - add ssl_ports[22/tcp]; - # HTTPS - add ssl_ports[443/tcp]; - # IMAPS - add ssl_ports[993/tcp]; - - # Check for SMTPS - if ( 587/tcp !in ssl_ports ) - add ssl_ports[587/tcp]; - - for ( i in ssl_ports ) - print fmt("SSL Port: %s", i); - - for ( i in non_ssl_ports ) - print fmt("Non-SSL Port: %s", i); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_table_complex_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_table_complex_bro.btest deleted file mode 100644 index c92d338cec..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_table_complex_bro.btest +++ /dev/null @@ -1,17 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_table_complex.bro - -event bro_init() - { - local samurai_flicks: table[string, string, count, string] of string; - - samurai_flicks["Kihachi Okamoto", "Toho", 1968, "Tatsuya Nakadai"] = "Kiru"; - samurai_flicks["Hideo Gosha", "Fuji", 1969, "Tatsuya Nakadai"] = "Goyokin"; - samurai_flicks["Masaki Kobayashi", "Shochiku Eiga", 1962, "Tatsuya Nakadai" ] = "Harakiri"; - samurai_flicks["Yoji Yamada", "Eisei Gekijo", 2002, "Hiroyuki Sanada" ] = "Tasogare Seibei"; - - for ( [d, s, y, a] in samurai_flicks ) - print fmt("%s was released in %d by %s studios, directed by %s and starring %s", samurai_flicks[d, s, y, a], y, s, d, a); - } - diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_table_declaration_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_table_declaration_bro.btest deleted file mode 100644 index f6d38e1618..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_table_declaration_bro.btest +++ /dev/null @@ -1,23 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_table_declaration.bro - -event bro_init() - { - # Declaration of the table. - local ssl_services: table[string] of port; - - # Initialize the table. - ssl_services = table(["SSH"] = 22/tcp, ["HTTPS"] = 443/tcp); - - # Insert one key-yield pair into the table. - ssl_services["IMAPS"] = 993/tcp; - - # Check if the key "SMTPS" is not in the table. - if ( "SMTPS" !in ssl_services ) - ssl_services["SMTPS"] = 587/tcp; - - # Iterate over each key in the table. - for ( k in ssl_services ) - print fmt("Service Name: %s - Common Port: %s", k, ssl_services[k]); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_vector_declaration_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_vector_declaration_bro.btest deleted file mode 100644 index 22790f45fe..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_vector_declaration_bro.btest +++ /dev/null @@ -1,19 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_vector_declaration.bro - -event bro_init() - { - local v1: vector of count; - local v2 = vector(1, 2, 3, 4); - - v1 += 1; - v1 += 2; - v1 += 3; - v1 += 4; - - print fmt("contents of v1: %s", v1); - print fmt("length of v1: %d", |v1|); - print fmt("contents of v2: %s", v2); - print fmt("length of v2: %d", |v2|); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_vector_iter_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_struct_vector_iter_bro.btest deleted file mode 100644 index 5f16dcc5af..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_struct_vector_iter_bro.btest +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_struct_vector_iter.bro - -event bro_init() - { - local addr_vector: vector of addr = vector(1.2.3.4, 2.3.4.5, 3.4.5.6); - - for (i in addr_vector) - print mask_addr(addr_vector[i], 18); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_const_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_const_bro.btest deleted file mode 100644 index 20a4f8d71e..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_const_bro.btest +++ /dev/null @@ -1,13 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_const.bro - -const port_list: table[port] of string &redef; - -redef port_list += { [6666/tcp] = "IRC"}; -redef port_list += { [80/tcp] = "WWW" }; - -event bro_init() - { - print port_list; - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_const_simple_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_const_simple_bro.btest deleted file mode 100644 index 29844f2b01..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_const_simple_bro.btest +++ /dev/null @@ -1,8 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_const_simple.bro - -@load base/protocols/http - -redef HTTP::default_capture_password = T; - diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_declaration_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_declaration_bro.btest deleted file mode 100644 index a153f3066c..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_declaration_bro.btest +++ /dev/null @@ -1,13 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_declaration.bro - -event bro_init() - { - local a: int; - a = 10; - local b = 10; - - if ( a == b ) - print fmt("A: %d, B: %d", a, b); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_interval_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_interval_bro.btest deleted file mode 100644 index 25076f3e8e..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_interval_bro.btest +++ /dev/null @@ -1,22 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_interval.bro - -# Store the time the previous connection was established. -global last_connection_time: time; - -# boolean value to indicate whether we have seen a previous connection. -global connection_seen: bool = F; - -event connection_established(c: connection) - { - local net_time: time = network_time(); - - print fmt("%s: New connection established from %s to %s", strftime("%Y/%M/%d %H:%m:%S", net_time), c$id$orig_h, c$id$resp_h); - - if ( connection_seen ) - print fmt(" Time since last connection: %s", net_time - last_connection_time); - - last_connection_time = net_time; - connection_seen = T; - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_local_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_local_bro.btest deleted file mode 100644 index 0e034dddd2..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_local_bro.btest +++ /dev/null @@ -1,15 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_local.bro - -function add_two(i: count): count - { - local added_two = i+2; - print fmt("i + 2 = %d", added_two); - return added_two; - } - -event bro_init() - { - local test = add_two(10); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_pattern_01_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_pattern_01_bro.btest deleted file mode 100644 index cca008116e..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_pattern_01_bro.btest +++ /dev/null @@ -1,17 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_pattern_01.bro - -event bro_init() - { - local test_string = "The quick brown fox jumps over the lazy dog."; - local test_pattern = /quick|lazy/; - - if ( test_pattern in test_string ) - { - local results = split(test_string, test_pattern); - print results[1]; - print results[2]; - print results[3]; - } - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_pattern_02_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_pattern_02_bro.btest deleted file mode 100644 index 4e4d8992df..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_pattern_02_bro.btest +++ /dev/null @@ -1,14 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_pattern_02.bro - -event bro_init() - { - local test_string = "equality"; - - local test_pattern = /equal/; - print fmt("%s and %s %s equal", test_string, test_pattern, test_pattern == test_string ? "are" : "are not"); - - test_pattern = /equality/; - print fmt("%s and %s %s equal", test_string, test_pattern, test_pattern == test_string ? "are" : "are not"); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_record_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_record_bro.btest deleted file mode 100644 index 6d8760700a..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_record_bro.btest +++ /dev/null @@ -1,29 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_record.bro - -module Conn; - -export { - ## The record type which contains column fields of the connection log. - type Info: record { - ts: time &log; - uid: string &log; - id: conn_id &log; - proto: transport_proto &log; - service: string &log &optional; - duration: interval &log &optional; - orig_bytes: count &log &optional; - resp_bytes: count &log &optional; - conn_state: string &log &optional; - local_orig: bool &log &optional; - local_resp: bool &log &optional; - missed_bytes: count &log &default=0; - history: string &log &optional; - orig_pkts: count &log &optional; - orig_ip_bytes: count &log &optional; - resp_pkts: count &log &optional; - resp_ip_bytes: count &log &optional; - tunnel_parents: set[string] &log; - }; -} diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_subnets_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_subnets_bro.btest deleted file mode 100644 index 75600794ec..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_subnets_bro.btest +++ /dev/null @@ -1,19 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_subnets.bro - -event bro_init() - { - local subnets = vector(172.16.0.0/20, 172.16.16.0/20, 172.16.32.0/20, 172.16.48.0/20); - local addresses = vector(172.16.4.56, 172.16.47.254, 172.16.22.45, 172.16.1.1); - - for ( a in addresses ) - { - for ( s in subnets ) - { - if ( addresses[a] in subnets[s] ) - print fmt("%s belongs to subnet %s", addresses[a], subnets[s]); - } - } - - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_data_type_time_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_data_type_time_bro.btest deleted file mode 100644 index 00a3e20813..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_data_type_time_bro.btest +++ /dev/null @@ -1,8 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -data_type_time.bro - -event connection_established(c: connection) - { - print fmt("%s: New connection established from %s to %s\n", strftime("%Y/%M/%d %H:%m:%S", network_time()), c$id$orig_h, c$id$resp_h); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_01_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_01_bro.btest deleted file mode 100644 index e542572647..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_01_bro.btest +++ /dev/null @@ -1,23 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_logging_factorial_01.bro - -module Factor; - -function factorial(n: count): count - { - if ( n == 0 ) - return 1; - else - return ( n * factorial(n - 1) ); - } - -event bro_init() - { - local numbers: vector of count = vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - - for ( n in numbers ) - print fmt("%d", factorial(numbers[n])); - } - - diff --git a/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_02_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_02_bro.btest deleted file mode 100644 index 19932699b6..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_02_bro.btest +++ /dev/null @@ -1,39 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_logging_factorial_02.bro - -module Factor; - -export { - # Append the value LOG to the Log::ID enumerable. - redef enum Log::ID += { LOG }; - - # Define a new type called Factor::Info. - type Info: record { - num: count &log; - factorial_num: count &log; - }; - } - -function factorial(n: count): count - { - if ( n == 0 ) - return 1; - - else - return ( n * factorial(n - 1) ); - } - -event bro_init() - { - # Create the logging stream. - Log::create_stream(LOG, [$columns=Info, $path="factor"]); - } - -event bro_done() - { - local numbers: vector of count = vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - for ( n in numbers ) - Log::write( Factor::LOG, [$num=numbers[n], - $factorial_num=factorial(numbers[n])]); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_03_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_03_bro.btest deleted file mode 100644 index 01ed659c75..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_03_bro.btest +++ /dev/null @@ -1,49 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_logging_factorial_03.bro - -module Factor; - -export { - redef enum Log::ID += { LOG }; - - type Info: record { - num: count &log; - factorial_num: count &log; - }; - } - -function factorial(n: count): count - { - if ( n == 0 ) - return 1; - - else - return (n * factorial(n - 1)); - } - -event bro_done() - { - local numbers: vector of count = vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - for ( n in numbers ) - Log::write( Factor::LOG, [$num=numbers[n], - $factorial_num=factorial(numbers[n])]); - } - -function mod5(id: Log::ID, path: string, rec: Factor::Info) : string - { - if ( rec$factorial_num % 5 == 0 ) - return "factor-mod5"; - - else - return "factor-non5"; - } - -event bro_init() - { - Log::create_stream(LOG, [$columns=Info, $path="factor"]); - - local filter: Log::Filter = [$name="split-mod5s", $path_func=mod5]; - Log::add_filter(Factor::LOG, filter); - Log::remove_filter(Factor::LOG, "default"); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_04_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_04_bro.btest deleted file mode 100644 index c0f8d8ddac..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_framework_logging_factorial_04_bro.btest +++ /dev/null @@ -1,54 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_logging_factorial_04.bro - -module Factor; - -export { - redef enum Log::ID += { LOG }; - - type Info: record { - num: count &log; - factorial_num: count &log; - }; - - global log_factor: event(rec: Info); - } - -function factorial(n: count): count - { - if ( n == 0 ) - return 1; - - else - return (n * factorial(n - 1)); - } - -event bro_init() - { - Log::create_stream(LOG, [$columns=Info, $ev=log_factor, $path="factor"]); - } - -event bro_done() - { - local numbers: vector of count = vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - for ( n in numbers ) - Log::write( Factor::LOG, [$num=numbers[n], - $factorial_num=factorial(numbers[n])]); - } - -function mod5(id: Log::ID, path: string, rec: Factor::Info) : string - { - if ( rec$factorial_num % 5 == 0 ) - return "factor-mod5"; - - else - return "factor-non5"; - } - -event bro_init() - { - local filter: Log::Filter = [$name="split-mod5s", $path_func=mod5]; - Log::add_filter(Factor::LOG, filter); - Log::remove_filter(Factor::LOG, "default"); - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_hook_01_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_hook_01_bro.btest deleted file mode 100644 index 96a3b5a921..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_hook_01_bro.btest +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_notice_hook_01.bro - -@load policy/protocols/ssh/interesting-hostnames.bro - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSH::Interesting_Hostname_Login ) - add n$actions[Notice::ACTION_EMAIL]; - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_hook_suppression_01_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_hook_suppression_01_bro.btest deleted file mode 100644 index b51bd2eebe..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_hook_suppression_01_bro.btest +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_notice_hook_suppression_01.bro - -@load policy/protocols/ssl/expiring-certs.bro - -hook Notice::policy(n: Notice::Info) - { - if ( n$note == SSL::Certificate_Expires_Soon ) - n$suppress_for = 12hrs; - } diff --git a/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_shortcuts_01_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_shortcuts_01_bro.btest deleted file mode 100644 index 7a0eaf5cb4..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_shortcuts_01_bro.btest +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_notice_shortcuts_01.bro - -@load policy/protocols/ssh/interesting-hostnames.bro -@load base/protocols/ssh/ - -redef Notice::emailed_types += { - SSH::Interesting_Hostname_Login -}; - diff --git a/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_shortcuts_02_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_shortcuts_02_bro.btest deleted file mode 100644 index 0e92c5ea32..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_framework_notice_shortcuts_02_bro.btest +++ /dev/null @@ -1,10 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -framework_notice_shortcuts_02.bro - -@load policy/protocols/ssh/interesting-hostnames.bro -@load base/protocols/ssh/ - -redef Notice::type_suppression_intervals += { - [SSH::Interesting_Hostname_Login] = 1day, -}; diff --git a/testing/btest/doc/sphinx/include-doc_scripting_http_main_bro.btest b/testing/btest/doc/sphinx/include-doc_scripting_http_main_bro.btest deleted file mode 100644 index 9f49450799..0000000000 --- a/testing/btest/doc/sphinx/include-doc_scripting_http_main_bro.btest +++ /dev/null @@ -1,11 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -http_main.bro - -module HTTP; - -export { - ## This setting changes if passwords used in Basic-Auth are captured or - ## not. - const default_capture_password = F &redef; -} diff --git a/testing/btest/doc/sphinx/include-scripts_base_bif_event_bif_bro.btest b/testing/btest/doc/sphinx/include-scripts_base_bif_event_bif_bro.btest deleted file mode 100644 index c77e08c5a1..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_base_bif_event_bif_bro.btest +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -event.bif.bro - -## Generated for every new connection. This event is raised with the first -## packet of a previously unknown connection. Bro uses a flow-based definition -## of "connection" here that includes not only TCP sessions but also UDP and -## ICMP flows. -global new_connection: event(c: connection ); -## Generated when a TCP connection timed out. This event is raised when -## no activity was seen for an interval of at least -## :bro:id:`tcp_connection_linger`, and either one endpoint has already -## closed the connection or one side never became active. -global connection_timeout: event(c: connection ); -## Generated when a connection's internal state is about to be removed from -## memory. Bro generates this event reliably once for every connection when it -## is about to delete the internal state. As such, the event is well-suited for -## script-level cleanup that needs to be performed for every connection. This -## event is generated not only for TCP sessions but also for UDP and ICMP -## flows. -global connection_state_remove: event(c: connection ); diff --git a/testing/btest/doc/sphinx/include-scripts_base_bif_plugins_Bro_DNS_events_bif_bro.btest b/testing/btest/doc/sphinx/include-scripts_base_bif_plugins_Bro_DNS_events_bif_bro.btest deleted file mode 100644 index 6e15ece5e0..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_base_bif_plugins_Bro_DNS_events_bif_bro.btest +++ /dev/null @@ -1,30 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -Bro_DNS.events.bif.bro - -## Generated for DNS requests. For requests with multiple queries, this event -## is raised once for each. -## -## See `Wikipedia `__ for more -## information about the DNS protocol. Bro analyzes both UDP and TCP DNS -## sessions. -## -## c: The connection, which may be UDP or TCP depending on the type of the -## transport-layer session being analyzed. -## -## msg: The parsed DNS message header. -## -## query: The queried name. -## -## qtype: The queried resource record type. -## -## qclass: The queried resource record class. -## -## .. bro:see:: dns_AAAA_reply dns_A_reply dns_CNAME_reply dns_EDNS_addl -## dns_HINFO_reply dns_MX_reply dns_NS_reply dns_PTR_reply dns_SOA_reply -## dns_SRV_reply dns_TSIG_addl dns_TXT_reply dns_WKS_reply dns_end -## dns_full_request dns_mapping_altered dns_mapping_lost_name dns_mapping_new_name -## dns_mapping_unverified dns_mapping_valid dns_message dns_query_reply -## dns_rejected non_dns_request dns_max_queries dns_session_timeout dns_skip_addl -## dns_skip_all_addl dns_skip_all_auth dns_skip_auth -global dns_request: event(c: connection , msg: dns_msg , query: string , qtype: count , qclass: count ); diff --git a/testing/btest/doc/sphinx/include-scripts_base_init-bare_bro.btest b/testing/btest/doc/sphinx/include-scripts_base_init-bare_bro.btest deleted file mode 100644 index 0057a78cc4..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_base_init-bare_bro.btest +++ /dev/null @@ -1,7 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -init-bare.bro - -type string_array: table[count] of string; -type string_set: set[string]; -type addr_set: set[addr]; diff --git a/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro.btest b/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro.btest deleted file mode 100644 index 1ecfcf027a..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro.btest +++ /dev/null @@ -1,76 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-MHR.bro - -##! Detect file downloads that have hash values matching files in Team -##! Cymru's Malware Hash Registry (http://www.team-cymru.org/Services/MHR/). - -@load base/frameworks/files -@load base/frameworks/notice -@load frameworks/files/hash-all-files - -module TeamCymruMalwareHashRegistry; - -export { - redef enum Notice::Type += { - ## The hash value of a file transferred over HTTP matched in the - ## malware hash registry. - Match - }; - - ## File types to attempt matching against the Malware Hash Registry. - option match_file_types = /application\/x-dosexec/ | - /application\/vnd.ms-cab-compressed/ | - /application\/pdf/ | - /application\/x-shockwave-flash/ | - /application\/x-java-applet/ | - /application\/jar/ | - /video\/mp4/; - - ## The Match notice has a sub message with a URL where you can get more - ## information about the file. The %s will be replaced with the SHA-1 - ## hash of the file. - option match_sub_url = "https://www.virustotal.com/en/search/?query=%s"; - - ## The malware hash registry runs each malware sample through several - ## A/V engines. Team Cymru returns a percentage to indicate how - ## many A/V engines flagged the sample as malicious. This threshold - ## allows you to require a minimum detection rate. - option notice_threshold = 10; -} - -function do_mhr_lookup(hash: string, fi: Notice::FileInfo) - { - local hash_domain = fmt("%s.malware.hash.cymru.com", hash); - - when ( local MHR_result = lookup_hostname_txt(hash_domain) ) - { - # Data is returned as " " - local MHR_answer = split_string1(MHR_result, / /); - - if ( |MHR_answer| == 2 ) - { - local mhr_detect_rate = to_count(MHR_answer[1]); - - if ( mhr_detect_rate >= notice_threshold ) - { - local mhr_first_detected = double_to_time(to_double(MHR_answer[0])); - local readable_first_detected = strftime("%Y-%m-%d %H:%M:%S", mhr_first_detected); - local message = fmt("Malware Hash Registry Detection rate: %d%% Last seen: %s", mhr_detect_rate, readable_first_detected); - local virustotal_url = fmt(match_sub_url, hash); - # We don't have the full fa_file record here in order to - # avoid the "when" statement cloning it (expensive!). - local n: Notice::Info = Notice::Info($note=Match, $msg=message, $sub=virustotal_url); - Notice::populate_file_info2(fi, n); - NOTICE(n); - } - } - } - } - -event file_hash(f: fa_file, kind: string, hash: string) - { - if ( kind == "sha1" && f?$info && f$info?$mime_type && - match_file_types in f$info$mime_type ) - do_mhr_lookup(hash, Notice::create_file_info(f)); - } diff --git a/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro@2.btest b/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro@2.btest deleted file mode 100644 index 4ce4383efb..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro@2.btest +++ /dev/null @@ -1,7 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-MHR.bro - -@load base/frameworks/files -@load base/frameworks/notice -@load frameworks/files/hash-all-files diff --git a/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro@3.btest b/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro@3.btest deleted file mode 100644 index 3b1cd60810..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro@3.btest +++ /dev/null @@ -1,31 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-MHR.bro - -export { - redef enum Notice::Type += { - ## The hash value of a file transferred over HTTP matched in the - ## malware hash registry. - Match - }; - - ## File types to attempt matching against the Malware Hash Registry. - option match_file_types = /application\/x-dosexec/ | - /application\/vnd.ms-cab-compressed/ | - /application\/pdf/ | - /application\/x-shockwave-flash/ | - /application\/x-java-applet/ | - /application\/jar/ | - /video\/mp4/; - - ## The Match notice has a sub message with a URL where you can get more - ## information about the file. The %s will be replaced with the SHA-1 - ## hash of the file. - option match_sub_url = "https://www.virustotal.com/en/search/?query=%s"; - - ## The malware hash registry runs each malware sample through several - ## A/V engines. Team Cymru returns a percentage to indicate how - ## many A/V engines flagged the sample as malicious. This threshold - ## allows you to require a minimum detection rate. - option notice_threshold = 10; -} diff --git a/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro@4.btest b/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro@4.btest deleted file mode 100644 index 55950caf6b..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_frameworks_files_detect-MHR_bro@4.btest +++ /dev/null @@ -1,38 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-MHR.bro - -function do_mhr_lookup(hash: string, fi: Notice::FileInfo) - { - local hash_domain = fmt("%s.malware.hash.cymru.com", hash); - - when ( local MHR_result = lookup_hostname_txt(hash_domain) ) - { - # Data is returned as " " - local MHR_answer = split_string1(MHR_result, / /); - - if ( |MHR_answer| == 2 ) - { - local mhr_detect_rate = to_count(MHR_answer[1]); - - if ( mhr_detect_rate >= notice_threshold ) - { - local mhr_first_detected = double_to_time(to_double(MHR_answer[0])); - local readable_first_detected = strftime("%Y-%m-%d %H:%M:%S", mhr_first_detected); - local message = fmt("Malware Hash Registry Detection rate: %d%% Last seen: %s", mhr_detect_rate, readable_first_detected); - local virustotal_url = fmt(match_sub_url, hash); - # We don't have the full fa_file record here in order to - # avoid the "when" statement cloning it (expensive!). - local n: Notice::Info = Notice::Info($note=Match, $msg=message, $sub=virustotal_url); - Notice::populate_file_info2(fi, n); - NOTICE(n); - } - } - } - } - -event file_hash(f: fa_file, kind: string, hash: string) - { - if ( kind == "sha1" && f?$info && f$info?$mime_type && - match_file_types in f$info$mime_type ) - do_mhr_lookup(hash, Notice::create_file_info(f)); diff --git a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro.btest b/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro.btest deleted file mode 100644 index 59d57223d9..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro.btest +++ /dev/null @@ -1,21 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-bruteforcing.bro - -module FTP; - -export { - redef enum Notice::Type += { - ## Indicates a host bruteforcing FTP logins by watching for too - ## many rejected usernames or failed passwords. - Bruteforcing - }; - - ## How many rejected usernames or passwords are required before being - ## considered to be bruteforcing. - const bruteforce_threshold: double = 20 &redef; - - ## The time period in which the threshold needs to be crossed before - ## being reset. - const bruteforce_measurement_interval = 15mins &redef; -} diff --git a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@2.btest b/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@2.btest deleted file mode 100644 index 648fe8a559..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@2.btest +++ /dev/null @@ -1,13 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-bruteforcing.bro - -event ftp_reply(c: connection, code: count, msg: string, cont_resp: bool) - { - local cmd = c$ftp$cmdarg$cmd; - if ( cmd == "USER" || cmd == "PASS" ) - { - if ( FTP::parse_ftp_reply_code(code)$x == 5 ) - SumStats::observe("ftp.failed_auth", [$host=c$id$orig_h], [$str=cat(c$id$resp_h)]); - } - } diff --git a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@3.btest b/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@3.btest deleted file mode 100644 index f81c9f50ba..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@3.btest +++ /dev/null @@ -1,27 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-bruteforcing.bro - -event bro_init() - { - local r1: SumStats::Reducer = [$stream="ftp.failed_auth", $apply=set(SumStats::UNIQUE), $unique_max=double_to_count(bruteforce_threshold+2)]; - SumStats::create([$name="ftp-detect-bruteforcing", - $epoch=bruteforce_measurement_interval, - $reducers=set(r1), - $threshold_val(key: SumStats::Key, result: SumStats::Result) = - { - return result["ftp.failed_auth"]$num+0.0; - }, - $threshold=bruteforce_threshold, - $threshold_crossed(key: SumStats::Key, result: SumStats::Result) = - { - local r = result["ftp.failed_auth"]; - local dur = duration_to_mins_secs(r$end-r$begin); - local plural = r$unique>1 ? "s" : ""; - local message = fmt("%s had %d failed logins on %d FTP server%s in %s", key$host, r$num, r$unique, plural, dur); - NOTICE([$note=FTP::Bruteforcing, - $src=key$host, - $msg=message, - $identifier=cat(key$host)]); - }]); - } diff --git a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@4.btest b/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@4.btest deleted file mode 100644 index bb7b0fd078..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ftp_detect-bruteforcing_bro@4.btest +++ /dev/null @@ -1,64 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -detect-bruteforcing.bro - -##! FTP brute-forcing detector, triggering when too many rejected usernames or -##! failed passwords have occurred from a single address. - -@load base/protocols/ftp -@load base/frameworks/sumstats - -@load base/utils/time - -module FTP; - -export { - redef enum Notice::Type += { - ## Indicates a host bruteforcing FTP logins by watching for too - ## many rejected usernames or failed passwords. - Bruteforcing - }; - - ## How many rejected usernames or passwords are required before being - ## considered to be bruteforcing. - const bruteforce_threshold: double = 20 &redef; - - ## The time period in which the threshold needs to be crossed before - ## being reset. - const bruteforce_measurement_interval = 15mins &redef; -} - - -event bro_init() - { - local r1: SumStats::Reducer = [$stream="ftp.failed_auth", $apply=set(SumStats::UNIQUE), $unique_max=double_to_count(bruteforce_threshold+2)]; - SumStats::create([$name="ftp-detect-bruteforcing", - $epoch=bruteforce_measurement_interval, - $reducers=set(r1), - $threshold_val(key: SumStats::Key, result: SumStats::Result) = - { - return result["ftp.failed_auth"]$num+0.0; - }, - $threshold=bruteforce_threshold, - $threshold_crossed(key: SumStats::Key, result: SumStats::Result) = - { - local r = result["ftp.failed_auth"]; - local dur = duration_to_mins_secs(r$end-r$begin); - local plural = r$unique>1 ? "s" : ""; - local message = fmt("%s had %d failed logins on %d FTP server%s in %s", key$host, r$num, r$unique, plural, dur); - NOTICE([$note=FTP::Bruteforcing, - $src=key$host, - $msg=message, - $identifier=cat(key$host)]); - }]); - } - -event ftp_reply(c: connection, code: count, msg: string, cont_resp: bool) - { - local cmd = c$ftp$cmdarg$cmd; - if ( cmd == "USER" || cmd == "PASS" ) - { - if ( FTP::parse_ftp_reply_code(code)$x == 5 ) - SumStats::observe("ftp.failed_auth", [$host=c$id$orig_h], [$str=cat(c$id$resp_h)]); - } - } diff --git a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ssh_interesting-hostnames_bro.btest b/testing/btest/doc/sphinx/include-scripts_policy_protocols_ssh_interesting-hostnames_bro.btest deleted file mode 100644 index 8ed5d89543..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ssh_interesting-hostnames_bro.btest +++ /dev/null @@ -1,56 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -interesting-hostnames.bro - -##! This script will generate a notice if an apparent SSH login originates -##! or heads to a host with a reverse hostname that looks suspicious. By -##! default, the regular expression to match "interesting" hostnames includes -##! names that are typically used for infrastructure hosts like nameservers, -##! mail servers, web servers and ftp servers. - -@load base/frameworks/notice - -module SSH; - -export { - redef enum Notice::Type += { - ## Generated if a login originates or responds with a host where - ## the reverse hostname lookup resolves to a name matched by the - ## :bro:id:`SSH::interesting_hostnames` regular expression. - Interesting_Hostname_Login, - }; - - ## Strange/bad host names to see successful SSH logins from or to. - option interesting_hostnames = - /^d?ns[0-9]*\./ | - /^smtp[0-9]*\./ | - /^mail[0-9]*\./ | - /^pop[0-9]*\./ | - /^imap[0-9]*\./ | - /^www[0-9]*\./ | - /^ftp[0-9]*\./; -} - -function check_ssh_hostname(id: conn_id, uid: string, host: addr) - { - when ( local hostname = lookup_addr(host) ) - { - if ( interesting_hostnames in hostname ) - { - NOTICE([$note=Interesting_Hostname_Login, - $msg=fmt("Possible SSH login involving a %s %s with an interesting hostname.", - Site::is_local_addr(host) ? "local" : "remote", - host == id$orig_h ? "client" : "server"), - $sub=hostname, $id=id, $uid=uid]); - } - } - } - -event ssh_auth_successful(c: connection, auth_method_none: bool) - { - for ( host in set(c$id$orig_h, c$id$resp_h) ) - { - check_ssh_hostname(c$id, c$uid, host); - } - } - diff --git a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ssl_expiring-certs_bro.btest b/testing/btest/doc/sphinx/include-scripts_policy_protocols_ssl_expiring-certs_bro.btest deleted file mode 100644 index cc2d8817bd..0000000000 --- a/testing/btest/doc/sphinx/include-scripts_policy_protocols_ssl_expiring-certs_bro.btest +++ /dev/null @@ -1,9 +0,0 @@ -# @TEST-EXEC: cat %INPUT >output && btest-diff output - -expiring-certs.bro - - NOTICE([$note=Certificate_Expires_Soon, - $msg=fmt("Certificate %s is going to expire at %T", cert$subject, cert$not_valid_after), - $conn=c, $suppress_for=1day, - $identifier=cat(c$id$resp_h, c$id$resp_p, hash), - $fuid=fuid]); diff --git a/testing/btest/doc/sphinx/mimestats.btest b/testing/btest/doc/sphinx/mimestats.btest deleted file mode 100644 index 06e47ea888..0000000000 --- a/testing/btest/doc/sphinx/mimestats.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/http/bro.org.pcap ${DOC_ROOT}/mimestats/mimestats.bro -@TEST-EXEC: btest-rst-include mime_metrics.log diff --git a/testing/btest/doc/sphinx/netcontrol-1-drop-with-debug.bro.btest b/testing/btest/doc/sphinx/netcontrol-1-drop-with-debug.bro.btest deleted file mode 100644 index ca5a6aec02..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-1-drop-with-debug.bro.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-1-drop-with-debug.bro -@TEST-EXEC: btest-rst-cmd cat netcontrol.log diff --git a/testing/btest/doc/sphinx/netcontrol-1-drop-with-debug.bro.btest#2 b/testing/btest/doc/sphinx/netcontrol-1-drop-with-debug.bro.btest#2 deleted file mode 100644 index 03d4fe15f4..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-1-drop-with-debug.bro.btest#2 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd cat netcontrol_drop.log diff --git a/testing/btest/doc/sphinx/netcontrol-2-ssh-guesser.bro.btest b/testing/btest/doc/sphinx/netcontrol-2-ssh-guesser.bro.btest deleted file mode 100644 index 76b3ef2568..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-2-ssh-guesser.bro.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/ssh/sshguess.pcap ${DOC_ROOT}/frameworks/netcontrol-2-ssh-guesser.bro -@TEST-EXEC: btest-rst-cmd cat netcontrol.log diff --git a/testing/btest/doc/sphinx/netcontrol-3-ssh-guesser.bro.btest b/testing/btest/doc/sphinx/netcontrol-3-ssh-guesser.bro.btest deleted file mode 100644 index 4a8b749f0f..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-3-ssh-guesser.bro.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/ssh/sshguess.pcap ${DOC_ROOT}/frameworks/netcontrol-3-ssh-guesser.bro -@TEST-EXEC: btest-rst-cmd cat netcontrol.log diff --git a/testing/btest/doc/sphinx/netcontrol-3-ssh-guesser.bro.btest#2 b/testing/btest/doc/sphinx/netcontrol-3-ssh-guesser.bro.btest#2 deleted file mode 100644 index 8447c8cf90..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-3-ssh-guesser.bro.btest#2 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd cat notice.log diff --git a/testing/btest/doc/sphinx/netcontrol-4-drop.bro.btest b/testing/btest/doc/sphinx/netcontrol-4-drop.bro.btest deleted file mode 100644 index 44808d18a4..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-4-drop.bro.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-4-drop.bro -@TEST-EXEC: btest-rst-cmd cat netcontrol.log diff --git a/testing/btest/doc/sphinx/netcontrol-5-hook.bro.btest b/testing/btest/doc/sphinx/netcontrol-5-hook.bro.btest deleted file mode 100644 index d2d7ab4d28..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-5-hook.bro.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-5-hook.bro diff --git a/testing/btest/doc/sphinx/netcontrol-6-find.bro.btest b/testing/btest/doc/sphinx/netcontrol-6-find.bro.btest deleted file mode 100644 index dd8abab8f3..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-6-find.bro.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/google-duplicate.trace ${DOC_ROOT}/frameworks/netcontrol-6-find.bro diff --git a/testing/btest/doc/sphinx/netcontrol-7-catch-release.bro.btest b/testing/btest/doc/sphinx/netcontrol-7-catch-release.bro.btest deleted file mode 100644 index ec49c2d2ba..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-7-catch-release.bro.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-7-catch-release.bro diff --git a/testing/btest/doc/sphinx/netcontrol-7-catch-release.bro.btest#2 b/testing/btest/doc/sphinx/netcontrol-7-catch-release.bro.btest#2 deleted file mode 100644 index 72a79f9639..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-7-catch-release.bro.btest#2 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd cat netcontrol_catch_release.log diff --git a/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest b/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest deleted file mode 100644 index 790bac070d..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro ${DOC_ROOT}/frameworks/netcontrol-8-multiple.bro diff --git a/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest#2 b/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest#2 deleted file mode 100644 index 24ef5ee2f9..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest#2 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd cat netcontrol.log diff --git a/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest#3 b/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest#3 deleted file mode 100644 index ad47aa86bf..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest#3 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd cat openflow.log diff --git a/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest#4 b/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest#4 deleted file mode 100644 index 76b34fa474..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-8-multiple.bro.btest#4 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-9-skeleton.bro ${DOC_ROOT}/frameworks/netcontrol-10-use-skeleton.bro diff --git a/testing/btest/doc/sphinx/netcontrol-9-skeleton.bro.btest b/testing/btest/doc/sphinx/netcontrol-9-skeleton.bro.btest deleted file mode 100644 index 76b34fa474..0000000000 --- a/testing/btest/doc/sphinx/netcontrol-9-skeleton.bro.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/tls/ecdhe.pcap ${DOC_ROOT}/frameworks/netcontrol-9-skeleton.bro ${DOC_ROOT}/frameworks/netcontrol-10-use-skeleton.bro diff --git a/testing/btest/doc/sphinx/notice_ssh_guesser.bro.btest b/testing/btest/doc/sphinx/notice_ssh_guesser.bro.btest deleted file mode 100644 index 50d6f17694..0000000000 --- a/testing/btest/doc/sphinx/notice_ssh_guesser.bro.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -C -r ${TRACES}/ssh/sshguess.pcap ${DOC_ROOT}/frameworks/notice_ssh_guesser.bro -@TEST-EXEC: btest-rst-cmd cat notice.log diff --git a/testing/btest/doc/sphinx/sqlite-conn-filter-check.btest b/testing/btest/doc/sphinx/sqlite-conn-filter-check.btest deleted file mode 100644 index c34319428f..0000000000 --- a/testing/btest/doc/sphinx/sqlite-conn-filter-check.btest +++ /dev/null @@ -1,2 +0,0 @@ -# Make sure this parses correctly at least. -@TEST-EXEC: bro ${DOC_ROOT}/frameworks/sqlite-conn-filter.bro diff --git a/testing/btest/doc/sphinx/sqlite-read-events-check.btest b/testing/btest/doc/sphinx/sqlite-read-events-check.btest deleted file mode 100644 index 7a0f291882..0000000000 --- a/testing/btest/doc/sphinx/sqlite-read-events-check.btest +++ /dev/null @@ -1,2 +0,0 @@ -# Make sure this parses correctly at least. -@TEST-EXEC: bro ${DOC_ROOT}/frameworks/sqlite-read-events.bro diff --git a/testing/btest/doc/sphinx/sqlite-read-table-check.btest b/testing/btest/doc/sphinx/sqlite-read-table-check.btest deleted file mode 100644 index f696e30f1a..0000000000 --- a/testing/btest/doc/sphinx/sqlite-read-table-check.btest +++ /dev/null @@ -1,2 +0,0 @@ -# Make sure this parses correctly at least. -@TEST-EXEC: bro ${DOC_ROOT}/frameworks/sqlite-read-table.bro diff --git a/testing/btest/doc/sphinx/sumstats-countconns.btest b/testing/btest/doc/sphinx/sumstats-countconns.btest deleted file mode 100644 index fd375af5fb..0000000000 --- a/testing/btest/doc/sphinx/sumstats-countconns.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/workshop_2011_browse.trace ${DOC_ROOT}/frameworks/sumstats-countconns.bro diff --git a/testing/btest/doc/sphinx/sumstats-toy-scan.btest b/testing/btest/doc/sphinx/sumstats-toy-scan.btest deleted file mode 100644 index 8756f1cfc0..0000000000 --- a/testing/btest/doc/sphinx/sumstats-toy-scan.btest +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r ${TRACES}/nmap-vsn.trace ${DOC_ROOT}/frameworks/sumstats-toy-scan.bro diff --git a/testing/btest/doc/sphinx/using_bro.btest b/testing/btest/doc/sphinx/using_bro.btest deleted file mode 100644 index 233f415942..0000000000 --- a/testing/btest/doc/sphinx/using_bro.btest +++ /dev/null @@ -1,2 +0,0 @@ -@TEST-EXEC: btest-rst-cmd bro -r $TRACES/wikipedia.trace -@TEST-EXEC: btest-rst-include -n 15 conn.log diff --git a/testing/btest/doc/sphinx/using_bro.btest#2 b/testing/btest/doc/sphinx/using_bro.btest#2 deleted file mode 100644 index afa29e6184..0000000000 --- a/testing/btest/doc/sphinx/using_bro.btest#2 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd -n 10 "cat conn.log | bro-cut id.orig_h id.orig_p id.resp_h duration" diff --git a/testing/btest/doc/sphinx/using_bro.btest#3 b/testing/btest/doc/sphinx/using_bro.btest#3 deleted file mode 100644 index a3ce44357e..0000000000 --- a/testing/btest/doc/sphinx/using_bro.btest#3 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd -n 10 awk \'/^[^#]/ {print \$3, \$4, \$5, \$6, \$9}\' conn.log diff --git a/testing/btest/doc/sphinx/using_bro.btest#4 b/testing/btest/doc/sphinx/using_bro.btest#4 deleted file mode 100644 index ce10bba56a..0000000000 --- a/testing/btest/doc/sphinx/using_bro.btest#4 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd -n 5 "bro-cut -d ts uid host uri < http.log" diff --git a/testing/btest/doc/sphinx/using_bro.btest#5 b/testing/btest/doc/sphinx/using_bro.btest#5 deleted file mode 100644 index 786aebffab..0000000000 --- a/testing/btest/doc/sphinx/using_bro.btest#5 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd -n 5 "bro-cut -u ts uid host uri < http.log" diff --git a/testing/btest/doc/sphinx/using_bro.btest#6 b/testing/btest/doc/sphinx/using_bro.btest#6 deleted file mode 100644 index cc52531b9c..0000000000 --- a/testing/btest/doc/sphinx/using_bro.btest#6 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd -n 5 "bro-cut -D %d-%m-%YT%H:%M:%S%z ts uid host uri < http.log" diff --git a/testing/btest/doc/sphinx/using_bro.btest#7 b/testing/btest/doc/sphinx/using_bro.btest#7 deleted file mode 100644 index 4662f67c88..0000000000 --- a/testing/btest/doc/sphinx/using_bro.btest#7 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd "cat conn.log | bro-cut uid resp_bytes | sort -nrk2 | head -5" diff --git a/testing/btest/doc/sphinx/using_bro.btest#8 b/testing/btest/doc/sphinx/using_bro.btest#8 deleted file mode 100644 index 0657c14dab..0000000000 --- a/testing/btest/doc/sphinx/using_bro.btest#8 +++ /dev/null @@ -1 +0,0 @@ -@TEST-EXEC: btest-rst-cmd "cat http.log | bro-cut uid id.resp_h method status_code host uri | grep UM0KZ3MLUfNB0cl11" diff --git a/testing/scripts/gen-broxygen-docs.sh b/testing/scripts/gen-broxygen-docs.sh new file mode 100755 index 0000000000..610c490fc6 --- /dev/null +++ b/testing/scripts/gen-broxygen-docs.sh @@ -0,0 +1,61 @@ +#! /usr/bin/env bash + +unset BRO_DISABLE_BROXYGEN + +# If running this from btest, unset any of the environment +# variables that alter default script values. +unset BRO_DEFAULT_LISTEN_ADDRESS +unset BRO_DEFAULT_LISTEN_RETRY +unset BRO_DEFAULT_CONNECT_RETRY + +dir="$( cd "$( dirname "$0" )" && pwd )" +source_dir=$dir/../.. +build_dir=$source_dir/build +conf_file=$build_dir/broxygen-test.conf +output_dir=$source_dir/doc +bro_error_file=$build_dir/broxygen-test-stderr.txt + +if [ -n "$1" ]; then + output_dir=$1 +fi + +case $output_dir in + /*) ;; + *) output_dir=`pwd`/$output_dir ;; +esac + +cd $build_dir +. bro-path-dev.sh +export BRO_SEED_FILE=$source_dir/testing/btest/random.seed + +function run_bro + { + bro -X $conf_file broxygen >/dev/null 2>$bro_error_file + + if [ $? -ne 0 ]; then + echo "Failed running bro with broxygen config file $conf_file" + echo "See stderr in $bro_error_file" + exit 1 + fi + } + +scripts_output_dir=$output_dir/scripts +rm -rf $scripts_output_dir +printf "script\t*\t$scripts_output_dir/" > $conf_file +echo "Generating $scripts_output_dir/" +run_bro + +script_ref_dir=$output_dir/script-reference +mkdir -p $script_ref_dir + +function generate_index + { + echo "Generating $script_ref_dir/$2" + printf "$1\t*\t$script_ref_dir/$2\n" > $conf_file + run_bro + } + +generate_index "script_index" "autogenerated-script-index.rst" +generate_index "package_index" "autogenerated-package-index.rst" +generate_index "file_analyzer" "autogenerated-file-analyzer-index.rst" +generate_index "proto_analyzer" "autogenerated-protocol-analyzer-index.rst"