Commit graph

6667 commits

Author SHA1 Message Date
Jon Siwek
deced3795c Fix a nb_dns.c compile error (older OSs) due to C90 vs C99. 2017-11-21 11:35:33 -06:00
Jon Siwek
82a51e0731 Merge branch 'topic/corelight/load-hook' of https://github.com/corelight/bro
* 'topic/corelight/load-hook' of https://github.com/corelight/bro:
  Fix and extend behavior of HookLoadFile

I refactored some parts of scan.l to avoid the ambiguity of some
branches returning 0 and some branches not returning anything.
2017-11-20 14:06:45 -06:00
Jon Siwek
26dc94c31d BIT-1827: fix error on initializing DNS w/ IPv6 nameserver.
This just skips over IPv6 nameserver addresses for now and uses the
first IPv4 one in the resolver config.  Should be possible to support
IPv6, but that may need more testing (e.g. need to make sure the code
will be portable to various platforms).
2017-11-20 11:36:04 -06:00
Robin Sommer
44baf1b355 Merge remote-tracking branch 'origin/topic/dnthayer/ticket1863'
* origin/topic/dnthayer/ticket1863:
  Fix ASCII logging of very large values of type "double"
  Add more test cases to ascii-double.bro
2017-11-17 15:11:22 -08:00
Robin Sommer
25c6a777a1 Merge remote-tracking branch 'origin/topic/jazoff/contentline-limit'
Changed '>' to '>=' in new length check.

* origin/topic/jazoff/contentline-limit:
  add a max_line_length flag to ContentLine_Analyzer
2017-11-17 14:56:50 -08:00
Robin Sommer
c74dbbfe59 Merge remote-tracking branch 'origin/topic/johanna/header-fix'
* origin/topic/johanna/header-fix:
  Fix OOB read in Sessions.cc
2017-11-17 14:51:21 -08:00
Johanna Amann
b852437126 Add reporter hook.
The hook being added is:

bool HookReporter(const std::string& prefix, const EventHandlerPtr event,
                  const Connection* conn, const val_list* addl, bool location,
                  const Location* location1, const Location* location2,
                  bool time, const std::string& buffer) override;

This hook gives access to basically all information that is available in
the function in Reporter.cc that performs the logging. The hook is
called each time when anything passes through the reporter in the cases
in which an event usually would be called. This includes weirds. The
hook can return false to prevent the normal reporter events from being
raised.
2017-11-16 13:02:12 -08:00
Johanna Amann
91dcefe104 Fix and extend behavior of HookLoadFile
This commit fixes and extends the behavior of HookLoadFile. Before this
change, HookLoadFile appended ".bro" to each path that was @loaded, even
if the path specified directory names. Furthermore it only gave the path
of the file as it was specified in the Bro script without revealing the
final path of the file that it was going to load.

This patch changes this behavior - in addition to giving the unmodified
path given in the @load command, the hook now returns the resolved path
of the file or directory it is going to load (if found). The hook is
furthermore raises for @load-sigs and @load-plugin; a enum specifies the
kind of load that is happening.
2017-11-16 12:31:27 -08:00
Luke Valenta
6b21167d96 update documentation, fix whitespace errors, add certificate extraction to ssl-verbose script 2017-11-08 10:07:54 -05:00
Luke Valenta
de6883fa1c add verbose SSL logging output that includes cryptographic values 2017-11-07 23:19:30 -05:00
Daniel Thayer
6e89505d06 Fix ASCII logging of very large values of type "double"
Increased the size of a buffer to be large enough to contain all the
characters of the largest possible "double" value when scientific
notation is not being used (previously, the nonsensical "NAN.0" would be
written to ASCII logs for any value >= 1e248).
2017-11-06 14:01:07 -06:00
Justin Azoff
43b2b9806e add a max_line_length flag to ContentLine_Analyzer
In ContentLine_Analyzer, prevent excessively long lines being assembled.
The line length will default to just under 16MB, but can be overriden on
a per-analyzer basis.  This is done for the finger,ident, and irc
analyzers.
2017-11-03 16:25:26 -04:00
Robin Sommer
5b88936070 Fix assignments to event arguments becoming visible to subsequent
handlers.

It's well known that changes to mutable event arguments, like tables,
become visible to all places where those values are used, including
subsequent handlers of the same event. However, there's a related case
that's more suprising: simply assigning *a new value* to an event
argument passes through, too. This commit fixes that behaviour. (We
even had a btest with a baseline reflecting the problen).
2017-10-27 13:28:48 -07:00
Johanna Amann
28498f752b Fix use-after-free in Trigger.cc
timeout_val is used _right_ after it is Unref'd.
2017-10-26 10:36:13 -07:00
Johanna Amann
924ed053c7 Fix OOB read in Sessions.cc
IP packets that have a header length that is greater than the total
length of the packet cause a integer overflow, which cause range-checks
to fail, which causes OOB reads.

Furthermore Bro does not currently check the version field of IP packets
that are read from tunnels. I added this check - otherwhise Bro reports
bogus IP information in its error messages, just converting the data
from the place where the IP information is supposed to be to IPs.

This behavior brings us closer to what other software (e.g. Wireshark)
displays in these cases.
2017-10-19 10:29:29 -07:00
Johanna Amann
6c0f101a62 Patch OOB write in content-line analyzer.
A combination of packets can trigger an out of bound write of '0' byte
in the content-line analyzer.

This bug was found by Frank Meier.

Addresses BIT-1856.
2017-10-16 13:13:41 -07:00
Justin Oursler
3d2ec29d04 removed check on kerberos request or response type. allow the kerberos analyzer to handle what it can, gssapi shouldn't check this 2017-10-11 14:18:58 -04:00
Justin Oursler
57bfbc02b1 modified GSSAPI analyzer to parse NTLM and KRB tokens 2017-10-11 13:42:54 -04:00
Johanna Amann
bcd5624f79 Merge remote-tracking branch 'origin/topic/vladg/bit-1838'
* origin/topic/vladg/bit-1838:
  Add btest for new SSH curve25519 KEX
  Updates the SSH analyzer to support the "curve25519-sha256" KEX.
2017-10-05 14:35:16 -07:00
Vlad Grigorescu
6cbcfbcd49 Merge remote-tracking branch 'origin/master' into topic/vladg/bit-1838 2017-10-05 14:36:45 -05:00
Jon Siwek
76764fb135 Merge branch 'topic/corelight/script-debug-output' of https://github.com/corelight/bro
* 'topic/corelight/script-debug-output' of https://github.com/corelight/bro:
  Add -B scripts flag to allow debug output of script load order.
2017-10-03 12:02:27 -05:00
Jon Siwek
e7d3dd0818 Merge branch 'topic/corelight/eval-condition-crash' of https://github.com/corelight/bro
* 'topic/corelight/eval-condition-crash' of https://github.com/corelight/bro:
  Fix segmentation fault on eval condition with no return value.
2017-10-03 11:56:32 -05:00
Robin Sommer
ad6162ce44 Merge remote-tracking branch 'origin/topic/johanna/in-binary'
BIT-1845 #merged

* origin/topic/johanna/in-binary:
  Make "in" keyword work with binary data.
2017-09-21 10:00:32 -07:00
Robin Sommer
92746d3257 Merge remote-tracking branch 'origin/topic/johanna/tls13experiment'
Closes BIT-1843.

* origin/topic/johanna/tls13experiment:
  Add TLS 1.3 fix and testcase.
2017-09-21 09:43:15 -07:00
Johanna Amann
ed678dd72c Add -B scripts flag to allow debug output of script load order.
This patch adds a "scripts" option to -B, when Bro is enabled with
--enable-debug. This option will output information about the scripts
that are loaded to debug.log, showing their exact load order.
2017-09-19 09:38:08 -07:00
Johanna Amann
5243a054ef Fix segmentation fault on eval condition with no return value.
Signatures using an eval-condition that had no return value caused a
segmentation fault. This fix just returns false in this case, as it is
done for an interpreter error.
2017-09-19 09:23:09 -07:00
Johanna Amann
fc33bf2014 Make strerror_r portable.
This uses the same code that broker already uses to determine if we use
the XSI or gnu version of strerror_r. Patch by Thomas Petersen.
2017-09-18 14:50:30 -07:00
Johanna Amann
2a873f5aed Prevent crash when calling bro -U [unwritable destination]
set_processing_status can be called before reporter is initialized or
after it is deleted. Work around by sending data to stderr instead.

Patch by Thomas Petersen.
2017-09-18 14:33:22 -07:00
Johanna Amann
c1f8e3baec Remove annoying error message from connsize bifs.
The connsize bifs used to output a reporter message when they could not
find the associated connection. This patch disables this message; it is
not useful and can happen during normal operation when trying to use
thresholding on short-lived connections. This case is still reported by
the boolean value that the respective functions return.
2017-09-18 14:07:12 -07:00
Johanna Amann
a4d25c8828 Make "in" keyword work with binary data.
This switches in from using strstr to use strnstr (implementation from
FreeBSD on systems which do not bring their own implementation).

It is especially likely that users come accross this when using the
DATA_EVENT analyzer with files that contain binary data - the test uses
exactly this case.
2017-09-18 12:12:38 -07:00
John E. Rollinson
5afde3f0e5 Changes proposed in #104 2017-09-17 14:59:41 -04:00
Vlad Grigorescu
16f504e828 Merge remote-tracking branch 'origin/master' into topic/vladg/bit-1838 2017-09-15 20:34:41 -05:00
Vlad Grigorescu
7e374f8c3f Updates the SSH analyzer to support the "curve25519-sha256" KEX.
From the OpenSSH 7.4 changelog:

sshd(8), ssh(1): Support the "curve25519-sha256" key exchange
   method. This is identical to the currently-supported method named
   "curve25519-sha256@libssh.org".
2017-09-15 20:30:39 -05:00
Johanna Amann
e1997144c2 Fix small OCSP parser bug.
It turns out that the serial number field in all events was never
populated correctly. Instead, the previous field (issuer key hash) was
re-read and repeated in all events.
2017-09-11 09:26:33 -07:00
Johanna Amann
1ede6bf7fe Add TLS 1.3 fix and testcase.
It turns out that Chrome supports an experimental mode to support TLS
1.3, which uses a non-standard way to negotiate TLS 1.3 with a server.
This non-standard way to negotiate TLS 1.3 breaks the current draft RFC
and re-uses an extension on the server-side with a different binary
formatting, causing us to throw a binpac exception.

This patch ignores the extension when sent by the server, continuing to
correctly parse the server_hello reply (as far as possible).

From what I can tell this seems to be google working around the fact
that MITM equipment cannot deal with TLS 1.3 server hellos; this change
makes the fact that TLS 1.3 is used completely opaque unless one looks
into a few extensions.

We currently log this as TLS 1.2.
2017-09-09 22:25:49 -07:00
Robin Sommer
0b5894ce23 Merge remote-tracking branch 'origin/topic/johanna/ocsp-sct-validate'
* origin/topic/johanna/ocsp-sct-validate:
  SSL SCT/OCSP: small fixes by robin; mostly update comments.
2017-08-04 13:28:08 -07:00
Johanna Amann
eab80c8834 HTTP: Recognize and skip upgrade/websocket connections.
This adds a slight patch to the HTTP analyzer, which recognizez when a connection is
upgraded to a different protocol (using a 101 reply with a few specific headers being
set).

In this case, the analyzer stops further processing of the connection (which will
result in DPD errors) and raises a new event:

event http_connection_upgrade(c: connection, protocol: string);

Protocol contains the name of the protocol that is being upgraded to, as specified in
one of the header values.
2017-08-04 07:04:28 -07:00
Johanna Amann
d5678418da SSL SCT/OCSP: small fixes by robin; mostly update comments.
SetMime now only works on the first call (as it was documented) and
unused code was used from one of the x.509 functions.
2017-08-01 16:30:08 -07:00
Robin Sommer
faa4150154 Merge remote-tracking branch 'origin/topic/johanna/ocsp-sct-validate'
Closes #1830.

* origin/topic/johanna/ocsp-sct-validate: (82 commits)
  Tiny script changes for SSL.
  Update CT Log list
  SSL: Update OCSP/SCT scripts and documentation.
  Revert "add parameter 'status_type' to event ssl_stapled_ocsp"
  Revert "parse multiple OCSP stapling responses"
  SCT: Fix script error when mime type of file unknown.
  SCT: another memory leak in SCT parsing.
  SCT validation: fix small memory leak (public keys were not freed)
  Change end-of-connection handling for validation
  OCSP/TLS/SCT: Fix a number of test failures.
  SCT Validate: make caching a bit less aggressive.
  SSL: Fix type of ssl validation result
  TLS-SCT: compile on old versions of OpenSSL (1.0.1...)
  SCT: Add caching support for validation
  SCT: Add signed certificate timestamp validation script.
  SCT: Allow verification of SCTs in Certs.
  SCT: only compare correct OID/NID for Cert/OCSP.
  SCT: add validation of proofs for extensions and OCSP.
  SCT: pass timestamp as uint64 instead of time
  Add CT log information to Bro
  ...
2017-07-30 08:49:41 -07:00
Robin Sommer
310ef6974f Small fix to revert to double-% handling in HTTP back to old behaviour. 2017-07-28 12:22:54 -07:00
Johanna Amann
ade9aa219b Better handling of % at end of line. 2017-07-27 22:04:47 -07:00
Johanna Amann
9594f69598 SSL: Update OCSP/SCT scripts and documentation. 2017-07-27 16:22:40 -07:00
Johanna Amann
9126376581 Revert "add parameter 'status_type' to event ssl_stapled_ocsp"
This reverts commit 545848d906.

Revert further part of stapled OCSP response handling that probably
never worked.
2017-07-27 15:12:19 -07:00
Johanna Amann
0d97e5451d Revert "parse multiple OCSP stapling responses"
This reverts commit 07891b3b66.

I suspect this never really was correctly implemented and just breaks
all scripts.
2017-07-27 15:09:54 -07:00
Johanna Amann
924482d540 Merge remote-tracking branch 'origin/master' into topic/johanna/ocsp-sct-validate 2017-07-27 14:24:48 -07:00
Johanna Amann
089f87d8da Merge remote-tracking branch 'origin/topic/robin/plugin-version-check'
I added another small change - since we are inlining Configure(), we can
just set bro_plugin directly to BRO_PLUGIN_BRO_VERSION in
src/plugin/Plugin.h, instead of depending on the plugin to do it. This
also means we do not need to change init-plugin in bro-aux at this
moment.

BIT-1828 #closed

* origin/topic/robin/plugin-version-check:
  Adding plugin API number into versioned function name, and removing old runtime API version check.
  Extend plugin infrastructure to catch Bro version mismatches at link time.
2017-07-25 16:14:49 -07:00
Robin Sommer
78f8ff432f Adding plugin API number into versioned function name, and removing
old runtime API version check.
2017-07-21 13:25:56 -07:00
Robin Sommer
8ae30d8aac Extend plugin infrastructure to catch Bro version mismatches at link
time.

People keep running into the problem that they upgrade Bro but forget
to recompile their plugins--which can lead to crashes. While the
plugins' API version was supposed to catch this, it's not reliable as
that check may come too late. This change takes a different tack: We
compile a C function into the Bro binary that has Bro's version number
encoded into its name. A plugin can then reference that function. If
the Bro version changes, the function goes away and the plugin won't
load anymore.

I've integrated that function reference into the plugin skeleton code
so that new plugins get it automatically (unless explicitly removed).
I couldn't see a way to do it transparently for already existing
plugins unfortunately.

The version number used for the function name is slightly normalized
to skip any git revision postfixes (i.e., "2.5-xxx" is always treated
as "2.5-git") so that one doesn't need to recompile all plugins after
every master commit. That seems good enough, usually people run into
this when upgrading to a new release.

If one loads an old plugin into a new Bro, the error message looks
like this:

    $ bro -NN Demo::Foo
    fatal error in /home/robin/bro/master/scripts/base/init-bare.bro, line 1:
    cannot load plugin library /home/robin/tmp/p/build//lib/Demo-Foo.linux-x86_64.so:
    /home/robin/tmp/p/build//lib/Demo-Foo.linux-x86_64.so: undefined symbol: bro_version_2_5_git_debug

Not the prettiest, but better than a crash!

TODO: I'm still unsure if we should remove the plugin API version
altogetger now. This link-time check should catch everything the API
version does, except for master commits.
2017-07-07 15:58:05 -07:00
balintm
83ebdb65a9 Update krb-protocol.pac 2017-07-07 11:31:58 +01:00
balintm
a51047ec6d padding comes before flags
I am not able to find it in RFC, but all of the pcaps I came across  (https://wiki.wireshark.org/SampleCaptures) contain padding in-front of flags.
2017-07-04 10:42:18 +01:00