@(#) $Id: CHANGES,v 1.68 2005/05/20 06:39:04 vern Exp $ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 0.9a9 Thu May 19 23:31:33 PDT 2005 - First cut at analyzer for NFS (Vern Paxson). It generates the following events: event nfs_request_null(n: connection) event nfs_request_getattr(n: connection, fh: string, attrs: nfs3_attrs) event nfs_request_lookup(n: connection, req: nfs3_lookup_args, rep: nfs3_lookup_reply) event nfs_request_fsstat(n: connection, root_fh: string, stat: nfs3_fsstat) event nfs_attempt_null(n: connection, status: count) event nfs_attempt_getattr(n: connection, status: count, fh: string) event nfs_attempt_lookup(n: connection, status: count, req: nfs3_lookup_args, dir_attrs: nfs3_opt_attrs) event nfs_attempt_fsstat(n: connection, status: count, root_fh: string, obj_attrs: nfs3_opt_attrs) - The new script OS-fingerprint.bro integrates Bro's new passive OS fingerprinting mechanism with the software.bro framework (Vern Paxson). - You can now operate on patterns using && and || (Vern Paxson). If p1 and p2 are patterns, then p1 && p2 yields a pattern that matches their concatenation and p1 || p2 yields a pattern that matches either. Note that the syntax for this may change in the future to a single '&' or '|', which would be more consistent with the use of '|' in constructing pattern constants. - An experimental "connection compressor" tracks not-yet-established connections using much less memory than Bro normally does (Robin Sommer). This is potentially a major win during flooding attacks and high-speed scans. You activate it by setting use_connection_compressor to T. You can then control the granularity of its processing using the variables cc_handle_resets, cc_handle_only_syns, and cc_instantiate_on_data. See bro.init for brief discussion of these. - The experimental new script firewall.bro supports firewall-rule-like processing of connections in terms of allow/deny (Robin Sommer). It is not particularly efficient. - sensor-sshd.bro provides an experimental interface for receiving events from instrumented SSH servers that communicate with Bro via the Broccoli client library (Christian Kreibich and Robin Sommer). Supporting this also entailed extensions to login.bro so it can process the events even though they don't correspond to a connection known to Bro's event engine. - The new built-in function match_signatures() can be used in a policy script to send text directly into the signature engine (Robin Sommer). - Correction: the 0.9a8 CHANGES states that the mail_script variable used for NOTICE_EMAIL defaults to mail_script.sh. The correct value is instead "mail_notice.sh". - The scripts rsh.bro and passwords.bro, and the passive-fingerprinting signatures policy/sigs/p0fsyn.osf were inadvertantly left out of the 0.9a8 distribution. - Added s2b (snort to bro) files into the distribution. (Jason Lee) - Non-blocking packet capture under Linux has been fixed (Robin Sommer). - Fixed printing of DNS replies, which used to work but was broken a number of months ago (Vern Paxson). - The new script brolite-sigs separates out how signatures are configured in Bro Lite so the functionality can be enabled/disabled with a simple load statement (Roger Winslow). That is, to use signatures with Bro lite, simply add "@load brolite-sigs". - The new script variable enable_syslog (default T) controls whether alarm's are syslog'd (Robin Sommer). As before, syslogs can only happen when Bro is reading from live network traffic (this should be changed at some point, to accommodate real-time Bro's that don't read the network but collect events from other sensors). Previously, in that case syslog's always happened; now, you can turn them off using this variable. - The new script variable expensive_profiling_multiple controls how often, when doing profiling, to perform more expensive forms of profiling, in particular, memory consumption profiling (Robin Sommer). If profiling_interval is set to 15 sec and expensive_profiling_multiple is set to 20, then expensive profiling will be done every 5 minutes (these are the defaults now in profiling.bro). Also, the profiling_update event now includes a second argument, expensive: bool, which indicates whether the update corresponds to one of these expensive profiling intervals. - First cut at parsing DNS AAAA replies (Scott Campbell). This is quite incomplete - currently, the replies are turned into fake A record replies, due to the difficulty of dealing with IPv6 addresses if Bro wasn't built to analyze IPv6 traffic. - software.bro has been tweaked to have a new control variable, "only_report_local" (default F). If true, then only software versions for local addresses (as determined by is_local_addr()) will be reported. - synflood.bro now has a script variable max_sources (default 100) that specifies the maximum number of sources to track for a given victim (Robin Sommer). - Remote peers now negotiate their versions of the serialization format (Robin Sommer). If they don't agree then the connection is terminated. - Generic UDP request/response processing has been moved into the new policy script udp-common.bro, which, unlike udp.bro, does *not* set the packet filter to capture all UDP traffic (Robin Sommer). A number of UDP-based policy scripts have been modified to use udp-common.bro rather than udp.bro. - When printing serialized/independent state, access times are now again included (Robin Sommer). - Bro's implementation of timers has been switched (reverted) to using priority queues (Vern Paxson). - The http-request.bro script variables skip_remote_sensitive_URIs and const sensitive_post_URIs are now exported so they can be accessed externally (Robin Sommer). - Some new rootkit filenames have been added to ftp.bro and http-request.bro (Brian Tierney). The plan is to eventually merge these lists so there's only one main list. - trw.bro is now scoped as a module "TRW" (Brian Tierney). - Better support of the '--disable-localpcap' flag to configure, and consolidated all the pcap checks in configure.in (Jason Lee). - A bug in processing bare carriage-returns in Telnet input/output has been fixed (Vern Paxson). - The Bro Lite bro.rc script has been tweaked to use the 'ax' flags instead of '-ax' (Jason Lee). - A bug with reporting ICMP "ports" (i.e., type + code) has been fixed (Vern Paxson). - Bug fix for excessively large RPC messages (Ruoming Pang). - A bug with /0 subnet prefixes has been fixed (Robin Sommer). - The function record_connection() now takes the file to write to as its first argument (Robin Sommer). - remote.bro now tracks whether a given Destination is connected (Robin Sommer). - mail_notice.sh is now installed as part of installing a distribution (Jason Lee). - Fixed bug where the sort order for the test suite changed depending on locale. (Jason Lee) - Bug fix for email_notice() when notice_action_filters not defined for given notice (Vern Paxson). - The test suite test for rare-events fixed to not give false positives (Jason Lee). - Date added for 0.9a8 release. 0.9a8 Wed Feb 16 17:09:34 PST 2005 - aux/rst/ contains the source for the "rst" tool used by Bro (via the policy script function terminate_connection() in conn.bro) to tear down established connections by forging RST packets. - Bro's main event loop has been reworked (Robin Sommer). This should (1) not cause any visible differences in most cases, (2) improve performance in some cases, (3) fixed problems running Bro without a network input (but still receiving asynchronous input from remote event sources). There are some more changes coming to this soon. - Passive OS fingerprinting has been added, based on Michal Zalewski's "p0f" tool (Holger Dreger). Currently, it's limited to fingerprinting clients based on the initial SYNs they send. To use it, define an event handler: OS_version_found(c: connection, host: addr, OS: OS_version) OS_version is a record containing a string $genre (e.g., "Solaris"), a string $detail (e.g., "2.0.27"), a count $dist (hop-count distance from monitor to host), and $match_type, which specifies via an enumerated type whether the match was direct from a signature, generic to the genre, or "fuzzy". The match is done against a passive fingerprinting signature file, which is specified by the variable passive_fingerprint_file. It defaults to "sigs/p0fsyn", which is found using $BROPATH and has an "osf" suffix added. You can restrict the matching to only be performed for hosts from particular subnets by adding those subnets to the variable generate_OS_version_event. If it's empty (default), then all subnets are analyzed. Note, the passive fingerprinting should be integrated with the version-tracking in software.bro, but this hasn't been done yet. - Support for IPv6 has been repaired and brought up to date. Note, however, that inter-Bro communication currently only works over IPv4. - Signature-matching is now off by default in brolite.bro. If you want to use it, define use_signatures = T prior to @load'ing it. - Notices are now tied to their corresponding connections (Scott Campbell). - New backdoor detectors for IRC, SMTP, Gaobot (Scott Campbell). - Signature matches now have a connection associated with them (Scott Campbell). - Bro scripts that set initial timers (via "schedule" statements in a bro_init handler) but don't have any source of network input (trace files or live interfaces) now execute in real-time, with network_time set to the current time, rather than having their timers expire immediately. - Default timeouts have been added to tables in trw.bro and http.bro, which have been found operationally to potentially grow very large (Scott Campbell). - The new policy script large-conns.bro can be included in order to track the size of TCP connections (each direction is referred to as a "flow") using a secondary packet filter (Chema Gonzalez). This method is completely separate from Bro's usual size accounting, and offers the advantages that it tracks sizes even for connections that don't terminate (or for which Bro misses their establishment) and for connections with sizes > 4 GB. The interface is via the function: function estimate_flow_size_and_remove(cid: conn_id, orig: bool) If $orig=T, then an estimate of the size of the forward (originator) direction is returned. If $orig=F, then the reverse (responder) direction is returned. In both cases, what's returned is a "flow_size_est" record, which includes a flag, $have_est, indicating whether there was any estimate formed. If $have_est is T, then the record also includes an estimate in bounded by $lower (lower bound) and $upper (upper bound). The estimate also includes $num_inconsistent, which, if > 0, means that the estimates came from sequence numbers that were inconsistent, and thus something is wrong - perhaps packet drops by the secondary filter). Finally, calling the function causes the flow's record to be deleted. - An RSH analyzer has been contributed by Manu (ManuX@rstack.org). It generates rsh_request and rsh_reply events, and the following notices: DifferentRSH_Usernames Client and server username differ. FailedRSH_Authentication Attempt to authenticate via RSH failed. InteractiveRSH The RSH session appears to be interactive (multiple lines of user commands). SensitiveRSH_Input SensitiveRSH_Output RSH client input or server output match input_trouble/ full_input_trouble or output_trouble/full_output_trouble. - The new notice action NOTICE_EMAIL indicates that in addition to logging an alarm, it should also be sent out as email (Scott Campbell). By default, email is only sent if Bro is running on live traffic; you can override this via redef'ing the script variable mail_notification. Mail is sent using the script specified by the mail_script variable (default: "mail_script.sh", which is now included in the distribution, but at present is not installed), which must be in $PATH. The mail is sent to the username specified in mail_dest (default: the local "bro" user, though you can change this to name@domain). Note that specifying email as a separate notice action may change in the future, to instead be an attribute that's associated with other notice actions. For example, it may make sense to want to specify both NOTICE_ALARM_PER_CONN and NOTICE_EMAIL; currently, however, you can't do this. - A similar notice action NOTICE_PAGE does the same thing as NOTICE_EMAIL except it send the mail to mail_page_dest (Scott Campbell). - You can now use the attribute &rotate_size for file objects to specify the maximum file size in bytes (Robin Sommer). If the limit is reached, the file is rotated similiarly as is already done with &rotate (which, for consistency, has been renamed to &rotate_interval). For both &rotate_size and &rotate_interval, when they trigger they now generate events (rotate_size and rotate_interval, respectively; each takes the file as the sole argument) rather than invoking &postprocessor, which has been removed. There's also a new variable log_rotate_size to set a global size maximum. Related to log rotation are the following new built-in functions: rotate_file(f: file) closes the file, moves it to a temporary name, and opens a new one. It returns the new "rotate_info" record, which gives the temporary name and the open/close times. rotate_file_by_name(s: string): similar, but call by the name of the file rather than a Bro script value. This is needed because some files are not represented by file objects but need to be rotated nevertheless (most importantly, the tcpdump save file and the dump files for dump_current_packet()). This function rotates the file with the given name. Finally, you can load the new policy script rotate-logs.bro to get default behavior of rotating all log files every hour. - The new "@unload