2 - Altered the 'ET MALWARE Bundleware Spyware CHM Download' Snort rule in
3 the bundled Emerging Threats rule set to make sure that ClamAV does not
4 flag on the pattern "mhtml\:file\://" which is associated with the
5 following ClamAV signature:
7 $ grep Exploit.HTML.MHTRedir-8 main.ndb
8 Exploit.HTML.MHTRedir-8:3:*:6d68746d6c3a66696c653a2f2f{1-20}2168
10 An analysis of this issue was posted here:
12 http://www.cipherdyne.org/blog/2010/08/22.html
14 - Bug fix for ICMP packet handling where psad would incorrectly interpret
15 ICMP port unreachable messages as UDP packets because the UDP specifics
16 are included in the iptables log message. This bug was first reported by
17 Lukas Baxa to the Debian maintainers and was followed up by Franck
20 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=596240
22 An example ICMP log message that exposed the bug is included below:
24 Sep 8 18:04:26 baxic kernel: [28241.572876] IN_DROP IN=wlan0
25 OUT= MAC=00:1a:9f:91:df:ae:00:21:27:e8:0a:a0:08:00
26 SRC=10.0.0.138 DST=192.168.1.103 LEN=96 TOS=0x00 PREC=0xC0 TTL=254
27 ID=63642 PROTO=ICMP TYPE=3 CODE=3
28 [SRC=192.168.1.103 DST=10.0.0.138 LEN=68 TOS=0x00 PREC=0x00 TTL=0
29 ID=22458 PROTO=UDP SPT=35080 DPT=33434 LEN=48 ]
31 - Updated the bundled whois client to 5.0.6.
33 psad-2.1.7 (07/14/2010):
34 - (Dan A. Dickey) Added the ability to use the "ip" command from the
35 iproute2 tools to acquire IP addresses from local interfaces. Dan's
36 description is as follows: "...A main reason for doing this is in the
37 case of multi-homed hosts. ifconfig sets these up on an interface using
38 aliases, iproute2 does not. So, for a multi-homed interface (eth0 with
39 multiple addresses), ifconfig -a only shows the first one configured and
40 not the rest. ip addr shows all of the configured addresses...".
41 - Added ENABLE_WHOIS_FORCE_ASCII to replace any non-ascii characters in
42 whois data (which is common with whois lookups against Chinese IP
43 addresses for example) with the string "NA". This option is disabled by
44 default, but can be useful if errors like the following are seen upon
45 receiving an email alert from psad:
47 <<< 554 5.6.1 Eight bit data not allowed
48 554 5.0.0 Service unavailable
50 - Updated psad to issue whois lookups against IP addresses that are not
51 directly connected to the local system. This is useful for example when
52 an internal system is scanning an external destination system, and the
53 scan is logged in the FORWARD chain. Issuing whois lookups on the
54 internal system (frequently on RFC 1918 address space) is not usually
55 very useful, but issuing the whois lookup against the destination system
56 gives much more interesting data. This feature can be disabled with the
57 new ENABLE_WHOIS_FORCE_SRC_IP variable.
59 psad-2.1.6 (07/09/2010):
60 - Bug fix for Decode_Month() calls used to handle date formats and ensure
61 proper month handling for iptables log message time stamps. This bug
62 caused psad to die in some cases, and the specific error on the console
64 Date::Calc::Decode_Month(): argument is not a string at \
65 /usr/sbin/psad line 1103, <FWDATA> line 2.
66 - (Franck Joncourt) Added --Override-config feature so that alternate
67 configuration files can be specified on the command line to override
68 configuration variables in the standard /etc/psad/psad.conf file.
69 - (Franck Joncourt) Submitted patches to fix stderr redirection for the
70 usage of the mail binary, and to close stdout, stdin, and stderr when
71 running psad as a daemon.
73 psad-2.1.5 (02/20/2009):
74 - (Miroslav Grepl) Contributed policy files to make psad compatible with
75 SELinux. The files are located in a new "selinux" directory in the
77 - Bug fix for local server ports not reported correctly under netstat
78 parsing (Franck Joncourt).
79 - (Steve B) Submitted patch to fix a bug in the start() function in the
80 Gentoo init script which caused psad to not be started and the error
81 "* ERROR: psad failed to start" to be generated.
82 - Bug fix when ENABLE_SYSLOG_FILE is enabled to run a preliminary regex
83 match on each syslog message because kmsgsd is not running and therefore
84 has not gone through the kmsgsd tests for a properly structured iptables
86 - Updated IPTables::Parse to 0.7.
87 - Updated IPTables::ChainMgr to 0.9.
89 psad-2.1.4 (08/21/2008):
90 - Restructured perl module paths to make it easy to introduce a "nodeps"
91 distribution of psad that does not contain any perl modules. This
92 allows better integration with systems that already have all necessary
93 modules installed (including the IPTables::ChainMgr and IPTables::Parse
94 modules). The main driver for this work is to make all cipherdyne.org
95 projects easily integrated with distributions based on Debian, and
96 Franck Joncourt has been instrumental in making this process a reality.
97 All perl modules are now placed within the "deps" directory, and the
98 install.pl script checks to see if this directory exists - a separate
99 psad-<ver>-nodeps tarball will be distributed without this directory.
100 The Debian package for psad can then reference the -nodeps tarball, and
101 a new "psad-nodeps.spec" file has been added to build an RPM from the
102 psad sources that does not install any perl modules.
103 - Updated to use the normal system whois client if the /usr/bin/whois_psad
104 path does not exist, and moved the whois/ directory into the deps/
105 directory. This removes /usr/bin/whois_psad as a strict dependency.
106 - Bugfix to honor the IPT_SYSLOG_FILE variable in --Analyze-msgs mode.
107 - Switched from the deprecated bleeding-all.rules file to the new
108 emerging-all.rules available from Matt Jonkman at Emerging Threats
109 (http://www.emergingthreats.net).
111 psad-2.1.3 (06/07/2008):
112 - Updated to enable IPT_SYSLOG_FILE by default. This is a relatively
113 important change since it changes the method of acquiring iptables log
114 data from reading it out of named pipe from syslog to just parsing the
115 /var/log/messages file. This implies that kmsgsd does not have to run,
116 and that it is much easier to ensure that psad actually receives
117 iptables log messages. The most complex and error prone aspect of psad
118 in the past has been the reconfiguration of the various syslog daemons
119 out there (which have very different configuration syntax and features)
120 to write kern.info messages to the /var/lib/psad/psadfifo named pipe.
121 - Updated to version 4.7.26 of the whois client from Marco d'Itri. This
122 allows whois records for some addresses (such as 116.125.35.98, which
123 which was scanning a system running psad but could not be identified
124 under the older whois client) to be properly queried.
125 - Updated to Bit::Vector 6.4 from 6.3.
126 - Updated to Date::Calc 5.4 from 5.3.
127 - Updated to Storable 2.18 from 2.16.
129 psad-2.1.2 (04/03/2008):
130 - Bugfix to not include kernel timestamps in iptables log prefixes that
131 contain spaces like "[ 65.026008] DROP" (bug reported by Erik Heidt).
132 - Bugfix to skip non-resolved IP addresses (bug reported by Albert Whale)
133 - Better p0f output in --debug mode to display when a passive OS
134 fingerprint cannot be calculated based on iptables log messages that
135 include tcp options (i.e., with --log-tcp-options when building a LOG
136 rule on the iptables command line).
138 psad-2.1.1 (01/25/2008):
139 - Added a new feature whereby psad can acquire iptables log data just by
140 parsing an existing file (/var/log/messages by default) that is written
141 to by syslog. By default, psad acquires iptables log data from the
142 /var/log/psad/fwdata file which is written to by kmsgsd, but on some
143 systems, having syslog communicate log data to kmsgsd can be problematic
144 since syslog configs and external factors such as Apparmor and SELinux
145 can play a role here. This new feature is controled by two new
146 configuration variables "ENABLE_SYSLOG_FILE" (to enable/disable the
147 feature) and "IPT_SYSLOG_FILE" to specifiy the path to the file to
149 - Better installation support for various Linux distributions including
150 Fedora 8 and Ubuntu. The current runlevel is now acquired via the
151 "runlevel" command instead of attempting to read /etc/inittab (which
152 does not even exist on Ubuntu 7.10), and there are new command line
153 arguments --init-dir, --init-name, and --runlevel to allow the init
154 directory, init script name, and the runlevel to be manually specified
155 on the install.pl command line.
156 - Updated psad to automatically handle situations where the either the
157 /var/log/psad/fwdata file or the /var/log/messages file (whichever
158 syslog is writing iptables log messages to) gets rotated. The
159 filehandle is closed and reopened if the file shrinks or if the inode
160 changes. This strategy is borrowed from how the fwknop project deals
161 with the filesystem packet capture file.
162 - Minor bugfix to generate syslog message when restarting a psad process.
163 - Updated install.pl to set the LC_ALL environmental variable to "C"
164 This should address some issues with installing psad on non-English
166 - Updated install.pl to be compatible with the rsyslog daemon, which is
167 commonly installed on Fedora 8 systems.
169 psad-2.1 (10/19/2007):
170 - Changed EMAIL_LIMIT model to apply to scanning source addresses only
171 instead of also factoring in the destination address. The original
172 src/dst email limit behavior can be restored by setting a new variable
173 "ENABLE_EMAIL_LIMIT_PER_DST" to "Y".
174 - Added the patches/iptables-1.3.8_LOG_prefix_space.patch file which can
175 be applied to the iptables-1.3.8 code to enforce a trailing space
176 character before any log prefix when a LOG rule is added. This ensures
177 that the user cannot break the iptables syslog format just by forgetting
178 to include a space at the end of a logging prefix.
179 - Bugfix to ensure that parsing TCP options does not descend into an
180 infinite loop in some some circumstances with obscure or maliciously
181 constructed options. Also added syslog reporting for broken options
182 lengths of zero or one byte (the minimum option length is two bytes to
183 accomodate the TLV encoding).
184 - Bugfix to enforce the usage of --CSV-fields in --gnuplot mode.
185 - Implemented --get-next-rule-id so that it is easy to assign a new rule
186 ID to a new signature in the /etc/psad/signatures file.
187 - Updated to just call die() if GetOpt fails; this allows erroneous usage
188 of the command line to display informative error messages more clearly.
190 psad-2.0.8 (07/27/2007):
191 - Added --gnuplot mode so that psad can output data that is suitable for
192 plotting with gnuplot. All output produced in this mode is integer data
193 with the exception of date stamps that are derived from iptables syslog
195 - Added the ability to negate match conditions on fields specified with
196 the --CSV-fields argument by prepending the string "not" (which plays
197 more nicely with shells like bash than a character like "!"). For
198 example, to graph all packet data in --gnuplot or --CSV modes that
199 originates from the 11.11.0.0/16 subnet and is not destined for port
200 80, the following argument does the trick:
202 --CSV-fields "src:11.11.0.0/16 dp:not80"
204 - In --gnuplot mode, added the ability to generate the count for a CSV
205 field instead of the field itself. Supported modes are an absolute
206 count (<field>:count) , and a unique count (<field>:uniqcount). This
207 is useful to plot graphs of source IP vs. the number unique ports for
208 example. Also added the ability to count iptables log fields over
209 various time scales (minutes, hours, and days) with the following
210 switches: <field>:countday, <field>:counthour, <field>:countmin.
211 - In --gnuplot mode, added the ability to specify the view coordinates
212 for 3D graph viewing with --gnuplot-view.
213 - Added the Storable-2.16 module along with the --use-store-file argument
214 so that in --gnuplot mode the Gnuplot data can be stored on disk and
215 retrieve quickly. This eliminates a large performance bottleneck when
216 Gnuplot configuration directives are tweaked while the same graph is
217 generated multiple times.
218 - Added --gnuplot-template so that a template file can be used for all
219 Gnuplot directives (usually psad creates the .gnu file based on the
220 --gnuplot command line arguments).
221 - Added --gnuplot-grayscale to generate graphs without the default red
222 color for graph points.
223 - Bugfix for regular expressions not being imported correctly from within
224 the --CSV-fields argument.
225 - Added --analysis-fields so the iptables log messages that are parsed in
226 -A mode can be restricted to those that meet certain criteria. For
227 example, to restrict the analyze mode to process packets with a source
228 address of 192.168.10.1, use this command:
230 psad -A --analysis-fields "src:192.168.10.1"
232 - Added --plot-separator to allow the format of plot data (either in
233 --gnuplot or --CSV modes) to be influenced by the user.
234 - Added the ability to configure the syslog facility and priority via the
235 psad.conf file (see the SYSLOG_FACILITY and SYSLOG_PRIORITY variables).
236 - Updated psad.spec file to respect the %_initrddir RPM macro.
238 psad-2.0.7 (05/28/2007):
239 - Bugfix to define a custom 'source' definition for syslog-ng daemons -
240 this fixes a problem on SuSE systems where the existing syslog-ng
241 reconfig caused the daemon to not start.
242 - Bugfix to allow specific signatures to be ignored by setting SID values
243 of zero in /etc/psad/snort_rule_dl.
244 - Added -X command line argument to allow the user to delete any psad
245 chains (in auto-response mode). This is a synonym for the iptables -X
246 command line argument.
248 psad-2.0.6 (03/24/2007):
249 - Better integration with fwsnort; psad signature match syslog messages
250 and email alerts now include the fwsnort rule number (for fwsnort
251 version 0.9.0 and greater) and chain information.
252 - Added the Snort bleeding-all.rules signature file from the Bleeding
253 Snort project (see http://www.bleedingsnort.com).
254 - Bugfix to allow interfaces that have IP aliases.
255 - Added uname, ifconfig, and syslog process information to --Dump-conf
256 output (this can help diagnose various runtime issues).
257 - Changed the --Lib-dir command line argument to --lib-dir, and added
258 --List (similar to iptables) to list the psad auto-blocking chain rules.
259 - Added psad.SlackBuild script contributed by pyllyukko for building psad
260 on Slackware systems. It uses the Cipherdyne cd_rpmbuilder script to
261 first build and RPM, and then uses it to build a Slackware package.
263 psad-2.0.5 (03/01/2007):
264 - Consolidated all configuration variables into the /etc/psad/psad.conf
265 file. The kmsgsd.conf, psadwatchd.conf, alert.conf, and fw_search.conf
266 files were all removed since the daemons just reference the psad.conf
267 now. Updated install.pl to archive and remove these files if they
268 exist from a previous psad installation.
269 - Bugfix to account for iptables -nL output where the protocol may be
270 reported as "0" instead of "all".
271 - Added a function safe_malloc() for kmsgsd.c and psadwatchd.c to ensure
272 that a single API is used to perform a NULL check on heap-allocated
274 - Bugfix to ensure that the psad_ip_len signature matching keyword is
275 checked withing match_snort_ip_keywords() so that it applies to all
276 protocol packets. This fixes a bug that would cause the "PSAD-CUSTOM
277 Nachi worm reconnaisannce" signature to fire on normal ICMP packet log
279 - Added version and Subversion file revision numbers to die and warn
280 messages that are written to /var/log/psad/errs/. This helps when
281 trying to track these messages down to a specific file revisions when
282 psad is being upgraded on the local system.
283 - Added version and Subversion file revision numbers to --Dump-conf
285 - Minor update to allow --fw-dump to be used on the command line without
286 also having to use the -D argument.
287 - Updated the default_log() function in the IPTables::Parse module to
288 handle iptables policies that were dumped with -v, such as when
291 psad-2.0.4 (01/27/2007):
292 - Added Snort rule matches to syslog alerts. Multiple matches can be
293 controlled with new configuration variables in psad.conf:
294 ENABLE_SIG_MSG_SYSLOG, SIG_MSG_SYSLOG_THRESHOLD, and
295 SIG_SID_SYSLOG_THRESHOLD.
296 - Bugfix to include scanned UDP port ranges in syslog alerts.
297 - Bugfix to parse SEQ and ACK iptables log message fields (requires
298 --log-tcp-sequence on the iptables command line). This allows the ipEye
300 - Added --debug-sid to allow a specific Snort rule to be debugged while
301 psad runs it through its detection engine. A consequence of this is
302 that the -d command line argument must be spelled out, i.e. "psad
304 - Bugfix to allow logging prefixes to omit trailing spaces. This is a bug
305 in the iptables logging format to allow this in the first place, but
306 before this gets fixed psad needs to compensate.
307 - Bugfix for syslog-ng init script path in install.pl.
308 - Bugfix to include a "source" definition for /proc/kmsg if not already
309 defined for syslog-ng daemons.
310 - Minor memory handling bugfixes discovered by valgrind the excellent
311 Valgrind project: http://www.valgrind.org
313 psad-2.0.3 (12/31/2006):
314 - Removed Psad.pm perl module and kmsgsd.pl and psadwatchd.pl scripts.
315 This is a major change that allows psad to be more flexible and
316 completely derive its config from the psad.conf file and from the
317 command line. In the previous scheme, psad imported its config with a
318 function within Psad.pm, and this required that psad imported the Psad
319 perl module before reading its config. A consequence was that the
320 PSAD_LIBS_DIR var could not be specified usefully within the config
322 - Added the ability to recursively resolve embedded variables from *.conf
323 files (with a limit of 20 resolution attempts).
324 - Added IGNORE_KERNEL_TIMESTAMP so that Linux distros that add a timestamp
325 to all kernel messages (Ubuntu for example) can be ignored.
326 - Consolidated code to import data out of /var/log/psad/<ip> directories
327 with code to display status and analysis output (-S and -A).
328 Essentially the %scan hash is built by the filesystem data import
329 routine and the remainder of the code references this single data
332 psad-2.0.2 (12/23/2006):
333 - Added the ability to download the latest signatures from cipherdyne.org
335 - Added the cd_rpmbuilder script to make it easy to build RPM's out of
336 CipherDyne projects by automatically downloading the project .tar.gz and
337 .spec files from http://www.cipherdyne.org/.
338 - Added print statements for @INC array in debug mode so that the user can
339 see the additional /usr/lib/psad/* directories added by
340 import_psad_perl_modules().
341 - Changed Unix::Syslog import strategy from "use" to "require" since the
342 path is not known until import_psad_perl_modules() gets a chance to
343 run (psad ran fine without this, but it is more consistent this way).
344 - Bugfix for not properly including elements of the
345 @connected_subnets_cidr array.
346 - IP subnet bugfix to make sure to get the entire subnet in signature
347 import routine if it is not in CIDR format
348 - Bugfix to not print an IP addresses in the "top attackers" section that
349 do not have at least one packet or signature match (for any reason).
350 - Bugfix to not print more than TOP_IP_LOG_THRESHOLD IP addresses in thet
351 top attackers section.
352 - Updated install.pl to reference configuration paths directly from
353 psad.conf instead of defining them separately. This should fix Debian
355 - Added -c argument to install.pl so that the path to a psad.conf file
356 can be altered from the command line.
357 - Bugfix to not import any IP from the top_attackers file from a previous
358 psad run that does not have a /var/log/psad/<ip> directory.
359 - Added MIN_DANGER_LEVEL to allow all alerts and /var/log/psad/<ip>
360 tracking to be disabled unless an attacker reaches at least this
362 - Added text in install.pl to mention ifconfig parsing for HOME_NET
365 psad-2.0.1 (12/12/2006):
366 - Added Nachi worm reconnaisannce icmp signature
367 - Added the psad_ip_len signature keyword to allow the length field in the
368 IP header to be explicitly tested.
369 - Bugfix for inappropriately removing some directories in @INC when
370 splicing in psad perl module paths.
371 - Switched nf2csv installation path in install.pl to /usr/bin/.
373 psad-2.0 (12/10/2006):
374 - Completely refactored the Snort rule matching support in psad. Added
375 many header field tests with full range matching support. These tests
376 include the following keywords from Snort: ttl, id, seq, ack, window,
377 icmp_id, icmp_seq, itype, icode, ip_proto, ipopts, and sameip.
378 - Refactored all signatures in /etc/psad/signatures to conform to new
379 signature matching support in this release. There are now about 190
380 signatures that psad can run directly against iptables logging
381 messages (i.e. without the help of fwsnort).
382 - Added the ability to download the latest signatures file from
383 http://www.cipherdyne.org/psad/signatures with the --sig-update command
384 line argument to psad.
385 - Added "MISC Windows popup spam" signature. This allows psad to detect
386 when attempts are made to send spam via the Windows Messenger service.
387 - Completely reworked --Status and --Analyze output, signature matches
388 are included now, along with a listing of top sig matches, top scanned
389 ports, and top attackers. Also, scan data is not written to
390 /var/log/psad/ipt_analysis/ before display analysis output in -A mode;
391 analysis results are displayed much faster this way.
392 - Added ipEye, Subversion, Kuang2, Microsoft SQL, Radmin, and Ghostsurf
394 - Added 'data in TCP SYN packet' signature.
395 - Added --CSV mode so that psad can be used to generate comma-separated
396 value output suitable for the AfterGlow project (see
397 http://afterglow.sourceforge.net/index.html) for graphical
398 representations of iptables logs and associated scan data. Also added
399 nf2csv so that normal users can take advantage of this feature.
400 - Added emulation of the Snort "dsize" test through the use of the IP
401 length field for TCP/ICMP signatures, and the UDP length field for UDP
402 signatures. For SYN packets, TCP options are included so psad
403 automatically adds 44 bytes (the maximum length for TCP options) so the
404 dsize test corresponds to the estimated payload length.
405 - Added the psad_id, psad_dsize, and psad_derived_sids fields for the new
407 - Added the ability to decode IP options, which are included within Snort
408 rules as the "ipopts" keyword. This functionality requires that the
409 --log-ip-options command line argument is given to iptables when
410 building a rule that uses the LOG target.
411 - Added Snort rules (sids 475, 500, 501, and 502) that detect IP options
412 usage such as source routing and the traceroute IP option with the new
414 - Enhanced psad email alert output to include sid values that have been
415 derived from existing Snort rules.
416 - Added the ability to expand embedded variables within the psad
417 configuration files. For example, the path to the FW_DATA_FILE is
418 defined in psad.conf as "$PSAD_DIR/fwdata", which resolves to
419 /var/log/psad/fwdata when the PSAD_DIR variable is expanded. This
420 feature allows a consistent set of file paths to easily be defined
421 instead of using the full path for each file path.
422 - Better validation of IPT_AUTO_CHAIN{n} variables so that the from_chain
423 cannot be identical to the to_chain.
424 - Added dump_config() to psadwatchd.c and kmsgsd.c when compiled with
426 - Added ENABLE_INTF_LOCAL_NETS to have psad automatically treat all IP
427 addresses that are part of the local system as belonging to the HOME_NET
428 for signature matching.
429 - Added ENABLE_SNORT_SIG_STRICT to have psad exit if there are any
430 problems found with Snort rules in the /etc/psad/signatures file. If
431 this feature is disabled (this is the default), then psad generates
432 syslog warnings for improperly formatted signatures).
433 - Update to print the number of IP addresses at each danger level in -A
434 analysis mode. This is useful to get a sense for how long the disk IO
435 might take to write out all of the /var/log/psad/ipt_analysis/<IP>
437 - Added code to restart kmsgsd at psad start up if a previous kmsgsd
438 process is still running and TRUNCATE_FWDATA is set to 'Y' (this is the
439 default). This probably isn't strictly necessary because kmsgsd is
440 capable of writing to the fwdata file even if another process truncates
442 - Added code to recreate the AUTO_IPT_SOCK (/var/run/psad/auto_ipt.sock)
443 file if some other process happens to delete it out of /var/run/psad/
444 - Bugfix to allow backwards compatibility with old NOT_USED value
445 for the HOME_NET variable.
446 - Bugfix to cleanup any lost blocking rules from the running psad
447 timeouts (a separate process might have deleted rules from the psad
449 - Bugfix to allow iptables log messages to include the PHYSDEV (i.e.
450 PHYSIN and PHYSOUT) interfaces.
451 - Updated to read architecture-dependent perl module installation
452 directory out of /usr/lib/psad (e.g. "/usr/lib/psad/x86_64-linux")
453 before importing psad perl modules such as IPTables::Parse, etc. These
454 modules are now imported via "require" after the appropriate
455 directories have been added to @INC. This allows the RPM files to be
456 built on one system that builds @INC differently than the system where
457 psad is actually installed since psad can now compensate for this.
458 - Added new code to populate the <dst>_signature file in each of the
459 /var/log/psad/<ip> directories with verbose information including the
460 signature time, sid, protocol, dst port, and packet count.
461 - Changed --interval to --Interval, and added --interface to allow
462 psad's detection to be limited to a specific IN interface for the INPUT
463 and FORWARD chains (or OUT interface for the OUTPUT chain).
464 - Replaced --status-brief with --status-summary, but changed it so that
465 only the detailed IP status information is omitted.
466 - Removed unnecessary --status-sort-dl option.
467 - Added STATUS_OUTPUT_FILE so the --Status and --Analyze output is
468 captured instead of just being lost if the output was not piped to
469 'less' or another similar program.
470 - Added --restrict-ip so that psad will restrict its attack detection
471 operations to a specific IP or network.
472 - Updated psadwatchd.c to parse EMAIL_ADDRESSES out of
473 /etc/psad/psad.conf to avoid duplication of variables.
474 - Bugfix to clear old @ipt_config array after receiving a HUP signal.
475 This bug broke the auto-blocking mode.
476 - Bugfix for syslog-ng config so that any custom source for /proc/kmsg is
477 used for the psadfifo path.
479 psad-1.4.8 (10/15/2006):
480 - Added the ability to get the auto-blocking status for a specific IP
481 address in --status-ip mode.
482 - Bugfix to use the IPT_OUTPUT_FILE and IPT_ERROR_FILE configuration
484 - Bugfix to restore "start" functionality in Gentoo init script.
485 - Added the ability to selectively disable psad auto-blocking emails.
486 - Added more rigorous IP matching regex from Sebastien J. (contributed
487 originally for fwknop).
489 psad-1.4.7 (09/10/2006):
490 - Completely re-worked IPTables::ChainMgr to support the return of
491 iptables error messages that are collected via stderr. This is critical
492 to fixing a bug where psad would sometimes die on an iptables command
493 but no information would be returned to the user.
494 - Added the ability to specify the position for both the jump rule into
495 the psad chains as well as the position for new rules within the psad
496 chains via the -I argument to iptables. This fixes a bug where the user
497 was given the impression that the IPTABLES_AUTO_RULENUM would accomplish
499 - Populated the _debug option in the IPTables::ChainMgr module, and also
500 added a _verbose option so that the specific iptables commands can
501 actually be seen as IPTables::ChainMgr functions are called.
502 - Added code to install.pl to ask the user if a manual restart of syslog
503 is ok upon an unsuccessful test of the syslog reconfiguration. This
504 fixes a bug where some syslog daemons might not re-import their
505 configurations after receiving a HUP signal.
506 - Bugfix for incorrect config variable name that gated iptables
508 - Added code to install.pl to update command paths in psad.conf and
509 psadwatchd.conf if any of the paths are broken (i.e. the local system
510 does not conform to the default paths). By default this only happens if
511 the user does not want old configs to be merged, but to override this
512 use the new --path-update command line argument to install.pl.
513 - Added the --Skip-mod-install command line argument to install.pl to
514 allow all perl module installs to be skipped.
515 - Added the --force-mod-regex command line argument to install.pl to allow
516 a regex match on perl module names to force matching modules to be
518 - Added the logrotate.psad file (contributed by Albert Whale).
520 psad-1.4.6 (06/13/2006):
521 - Added ENABLE_AUTO_IDS_REGEX and AUTO_BLOCK_REGEX to allow filtering on
523 - Added code to save DShield email to a file.
524 - Added IPTABLES_PREREQ_CHECK to allow the administrator to control the
525 frequency of iptables checks (for auto-block compatibility).
526 - Added IGNORE_LOG_PREFIXES to allow certain log prefixes to be completely
528 - Added classification.config file from Snort-2.3.3 so that psad can
529 assign danger levels based upon Snort rule class type. This is useful
530 when also running fwsnort.
531 - Added snort_rule_dl to allow specific psad to assign specific danger
532 level values to particular signatures. This is useful if you want to
533 do define certain Snort rules as being particularly evil (or not).
534 Running fwsnort is also necessary to take advantage of this feature.
535 - Added reference.config so that psad can include reference information in
536 email alerts that are derived from attacks detected by fwsnort.
537 - Updated to Snort-2.3.3 signatures.
538 - Updated to whois-4.7.13.
540 psad-1.4.5 (01/13/2006):
541 - Bugfix in IPTables::Parse to allow the limit target to apply to
543 - Made calls to chain creation and jump rule functions for only every
544 100 block calls in auto-IDS mode.
545 - Bugfix to make sure /var/run/psad directory exists at startup since
546 this directory is removed by some Linux distributions at boot time.
547 - Bugfix for zero masks in auto_dl; this allows a network of "0.0.0.0/0"
549 - Added ENABLE_FW_LOGGING_CHECK so that the iptables policy check can be
550 enabled/disabled easily via psad.conf.
551 - Enhanced -D output to include "uname -a" and "perl -V" output.
552 - Added ENABLE_RENEW_BLOCK_EMAILS to allow whether renew emails are sent
553 for auto-blocked addresses.
555 psad-1.4.4 (11/27/2005):
556 - Added MAC address reporting in psad email alerts. This feature is
557 enabled via a new config keyword "ENABLE_MAC_ADDR_REPORTING".
558 - Added --fw-rm-block-ip <ip> option to allow IP addresses to be removed
559 from the auto-blocking chains from the command line.
560 - Updated command line firewall arguments to write commands to the
561 AUTO_IPT_SOCK domain socket.
562 - Added the ability to specify ports and port ranges to auto_dl file.
563 - Added --force-mod-install command line argument to installer to force
564 perl modules used by psad to be installed within /usr/lib/psad
565 regardless of whether they already exist in the system perl tree.
566 - Bugfix in the installer to seek() to the end of the fwdata file
567 - Bugfix for psad repeatedly trying to remove the same IP address(es)
568 from the auto-blocking chains.
569 instead of reading the entire thing into memory.
570 - Added the ability to truncate the fwdata file via a new configuration
571 keyword "TRUNCATE_FWDATA" (this is enabled by default).
572 - Bugfix in auto-blocking mode for deleting AUTO_IPT_SOCK when a HUP
574 - Bugfix for parsing iptables policies that contain ULOG logging rules
575 instead of the standard LOG target.
576 - Removed the smtpdaemon requirement in the RPM because psad might be
577 configured to not send email alerts.
579 psad-1.4.3 (09/27/2005):
580 - Bugfixes for auto-blocking code. Timeouts should be handled
581 properly, including cached IP addresses in the auto_blocked_iptables
582 file that are referenced upon psad startup. Communication with the
583 running psad is performed over a Unix domain socket in --fw-block
585 - Bugfix to seek to the end of the fwdata file instead of reading the
586 entire thing into memory and then looking for newly written logging
587 messages. This drastically reduces the amount of memory required
589 - Updated to only display psad chains if --verbose is set
590 - Updated to automatically flush the psad auto-response iptables chains
591 at start time (subject to a new config keyword "FLUSH_IPT_AT_INIT").
593 psad-1.4.2 (07/15/2005):
594 - Dependency bugfixes for mail binary.
595 - Bugfix for various IGNORE_* keywords not being honored.
596 - Bugfix for not timing out blocked IP addresses from a previous run.
597 - Updated to version 0.2 of the IPTables::ChainMgr module.
598 - Updated to not truncate the fwdata file upon psad startup.
599 - Added --fw-dump which produces a sanitized (i.e. no IP addresses)
600 version of the local iptables policy. Also added --fw-include-ips
601 to (optionally) not sanitize IPs/nets. Note that the 0.0.0.0 and
602 0.0.0.0/0 IPs/nets are not sanitized since they give no useful
603 information about specific IPs/nets.
604 - Added ulogd data collection mode.
605 - Bugfix for FW_MSG_SEARCH default (at least "DROP" is included now
606 even if FW_SEARCH_ALL is set to "N").
607 - Bugfix for non-network address for subnet specified with --fw-block.
608 - Bugfix for multiple --fw-block IPs/nets.
609 - Added README.SYSLOG (Francois Marier contributed the content).
610 - Made email alert prefixes (such as "[psad-alert]") customizable via
613 psad-1.4.1 (03/12/2005):
614 - Updated to Snort-2.3 rules in the snort_rules directory.
615 - Re-worked syslog installation portion of install.pl. The user will
616 always be prompted to enter the syslog daemon now, and also added
617 the --syslog-conf arg to allow the config file path to be specified
618 on the install.pl command line.
619 - Bugfix in install.pl for using IP address instead of network address
620 of directly connected subnets.
621 - Updated to version 4.6.23 of the whois client.
622 - Bugfix for distinguishing OPT field associated with --log-tcp-options
623 vs. --log-ip-options.
624 - Bugfix for syslog format that may not include the "kernel:" tag.
625 - Applied patch to only install perl modules that are not already
626 installed (Blair Zajac).
627 - Bugfix for the psad version number that is sent in DShield alerts.
628 - Updated Psad module directory structure to be consistent with current
629 versions of perl (5.8.x).
630 - Added IPTables::ChainMgr module.
631 - Completely re-worked the iptables auto-blocking code to use
632 IPTables::ChainMgr functions so that auto-generated rules are placed
633 in chains created by psad.
634 - Added IPT_AUTO_CHAIN keyword in psad.conf which is used to define the
635 set of chains to which auto-generated iptables rules are added.
636 - Added --fw-list-auto to display the contents of psad iptables
638 - Added the ability to import an IP into the iptableiptablesocking
639 chains from the command line with --fw-block-ip. This allows psad to
640 apply its timeout mechanism against such IPs/nets.
641 - Added the ability to ignore packets based on input interface with
642 IGNORE_INTERFACES in psad.conf.
643 - Re-worked auto_dl code, better hash design and searching function.
644 - Removed dependency on sendmail command unless DShield alerting is
645 enabled and a DShield user id is specified.
646 - Added ALERTING_METHODS keyword in the file alert.conf to allow either
647 syslog or email alerts (or both) to be disabled. Psad and psadwatchd
650 psad-1.4.0 (11/26/2004):
651 - Added p0f-style passive OS fingerprinting through the use of the OPT
652 field in iptables log messages (which is only logged through the use
653 of the --log-tcp-options command line arg to iptables).
654 - Bugfix for iptables log messages that include tcp sequence numbers
655 (see the iptables --log-tcp-sequence command line argument).
656 - Bugfix for O_RDONLY open flag when kmsgsd receives a HUP signal.
658 psad-1.3.4 (10/17/2004):
659 - Bugfix for init script directory on Slackware systems.
660 - Bugfix for null prefix counters.
661 - Added --whois-analysis argument since whois lookups are now disabled
662 by default when running in analysis (-A) mode.
663 - Updated psad_init() to rework setup() and import orderings vs.
664 --fw-analyze and --Benchmark modes.
665 - Added bidirectional iptables auto-blocking support for all chains
666 except for the INPUT and OUTPUT chains.
667 - Better syslog message support when run in auto-blocking mode.
668 - Added iptables auto-block rules section to --Status output.
669 - Added init script for Fedora systems.
670 - Added default_log() function to IPTables::Parse. This function
671 parses user defined chains in an effort to find default logging
673 - Added EMAIL_LIMIT_STATUS_MSG to control whether or not psad sends a
674 status email when the PSAD_EMAIL_LIMIT threshold has been reached by
676 - Added ENABLE_SCAN_ARCHIVE to control whether or not psad archives old
677 scan data within /var/log/psad/scan_archive at start time.
679 psad-1.3.3 (09/09/2004):
680 - Fixed __WARN__ and __DIE__ exception handlers so that they
681 reference global message variables.
682 - Fixed auto danger level assignments. Network auto assignments as
683 well as per-protocol assignments work now.
684 - Added SYSLOG_DAEMON variable to define which syslog daemon is running
685 on the underlying system instead of just guessing.
686 - Added the ability to ignore both ranges and specific ports/protocols
687 with a new variable IGNORE_PORTS in psad.conf.
688 - Bugfix to make sure email addresses are separated by spaces when
689 Psad::sendmail() is called.
690 - Bugfix for ipt_prefix counters not being parsed correct at import
692 - Removed exclude_auto_ignore_ip() since this function was made
693 unnecessary by newly rewritten auto-assign code.
694 - Bugfix for Text::Wrap calls in install.pl uninstall() routine.
695 - Bugfix for using --no-fw-search-all even when FW_SEARCH_ALL is
697 - Removed extraneous ".." and "**" chars from syslog messages, and
698 updated to use [+] prefix strings.
699 - Moved init scripts into init-scripts directory within source tree.
700 - Removed dependency on Bit::Vector (psad does not seem to make use
701 of any Date::Calc functions that require it).
702 - Wrapped copy() and move() calls with "or die()" to make them
704 - Added check for existing psad process in install.pl.
705 - Updated to a new psad email alert subject format. Prefixes of
706 "[psad-alert]", "[psad-error]", and "[psad-status]" are used now.
707 - Permissions fixes with umask() setting in /var/log/psad, permissions
708 fixes for files in /etc/psad at install time.
710 psad-1.3.2 (06/25/2004):
711 - Removed FW_MSG_SEARCH from psad.conf, and created a new config
712 file "fw_search.conf" that both psad and kmsgsd use to get the
713 FW_MSG_SEARCH definition(s).
714 - Added default mode of parsing all iptables messages instead of
715 just those that contain specific search strings. A new config
716 variable "FW_SEARCH_ALL" was added to fw_search.conf that
718 - Updated psad and kmsgsd so that multiple firewall search strings
719 can be specified through multiple FW_MSG_SEARCH variables in
721 - Added iptables chain and logging-prefix tracking for current
722 scan interval in email alerts.
723 - Added protocol-specific auto-danger level assignments.
724 - Added total scan source and destination IP address counters in
726 - Added number of email alerts sent and OS guess in default
727 --Status output. The output is getting wide now, so there is
728 also a new option --status-brief that will remove the alerts
729 sent and OS guess columns.
730 - Added getopt() command line arg parsing to kmsgsd with two new
731 options "-c" (for config file path) and "-k" (for fw_search.conf
733 - Made iptables parsing code into its own script "fwcheck_psad"
734 that gets called by psad.
735 - Added Dshield stats summary to --Status output.
736 - Bugfix for auto-ignore IP addresses and networks being missed.
737 - Made parsing of ifconfig output language independent (should
738 handle French now for example).
739 - Removed "psad_" prefix on files psad_signatures, psad_auto_ips,
740 psad_posf, and psad_icmp_types in /etc/psad/.
741 - Updated to version 4.6.14 of the whois client.
743 psad-1.3.1 (12/25/2003):
744 - Added the ability to import /var/log/psad/<ip> directories
745 back into memory so scan data remains persistent across
746 psad restarts or system reboots.
747 - Added --Analyze-msgs to run psad in analysis mode against an
748 iptables logfile (/var/log/psad/fwdata by default). The logfile
749 path can be changed with --messages-file.
750 - Added icmp type and code validation against RFC 792.
751 - Bugfix for being too strict with FW_MSG_SEARCH.
752 - Added port ranges for tcp and udp scans in <ip>/<dst>_packet_ctr.
753 - Added <ip>/<dst>_start_time and <ip>/os_guess.
754 - Bugfix for missing --no-signatures code.
755 - Updated to Snort-2.1 signatures.
757 psad-1.3 (11/30/2003):
758 - Replaced all signatures in psad_signatures with updated snort
760 - Added support for source and destination ip addresses in
761 signature matching code. A new variable "HOME_NET" makes this
763 - Added support for the iptables output chain.
764 - Added chain tracking for all signatures.
765 - Replaced match_fastsigs() with two new routines for tcp and
766 udp signature matching that don't autovivify hash keys.
767 - Removed support for ipchains.
768 - Added support for metalog.
769 - Removed all "Undefined Code" signatures from psad_signatures.
770 - Re-worked %auto_blocked_ips hash and corresponding blocking
771 routines. This (hopefully) fixes a restart bug seen on older
772 systems such as those that are still running versions of perl
774 - Re-worked firewall policy parsing routines. Chains that have
775 a default policy of DROP are handled properly now.
776 - Bugfix for missing NULL char in kmsgsd.c.
777 - Updated scan alerting format. Put current interval protocol
778 status before source and destination addresses.
779 - Buffer overflow fix in kmsgsd.c for size of buf[MAX_LINE_BUF]
780 buffer in read() call.
781 - Added --no-kmsgsd option to aid in psad --debug mode.
783 psad-1.2.4 (10/15/2003):
784 - Added danger level to subject line in email alerts.
785 - Removed diskmond altogether since psad now handles disk space
786 thresholds directly. This allows filehandles to be handled
788 - Added auto_block_ignore_ip() to prevent 0.0.0.0, 127.0.0.1,
789 and local interface ips from being included in auto blocking
791 - Added Bit::Vector module to stop installation warnings from
793 - Made get_local_ips() called periodically since local addresses
794 may change (dhcp, etc.).
795 - Added installation code and init script for Gentoo Linux.
796 - Bugfix for INIT_DIR in uninstall() routine in install.pl.
797 - Bugfix for auto-blocking loop after timeouts are hit.
798 - Added --status-dl [N] to display status information only for
799 those scans that reach at least [N].
801 psad-1.2.3 (09/12/2003):
802 - Added interface tracking for scans.
803 - Bugfix for not opening /etc/hosts.deny the right way in
805 - Bugfix for psadfifo path in syslog-ng config.
806 - Better format for summary stats section in email alerts.
807 - Bugfix for INIT_DIR path on non-RedHat systems.
808 - Bugfix for gzip path.
809 - Make Psad.pm installed last of all perl modules installed
811 - Added additional call to incr_syscall_ctr() in psadwatchd.c
813 psad-1.2.2 (08/24/2003):
814 - psad is finally available as an RPM package.
815 - Added chain tracking for iptables.
816 - Added chain counts to --Status output.
817 - Bugfix for psad not taking into account multiple scan
819 - Reworked auto-blocking code for both tcpwrappers and
820 iptables. Lines added to /etc/hosts.deny will no longer be
821 duplicated. Added IPTABLES_AUTO_RULENUM and
822 IPCHAINS_AUTO_RULENUM so auto rules can be inserted at a
823 configurable point within iptables and ipchains policies.
824 - Psad now installs all perl modules within /usr/lib/psad.
825 - Removed /var/log/psad/<ip>/scanlog file since it was wasting
827 - Made psad, psadwatchd, and diskmond take the machine hostname
828 from their respective config files. This makes installation
829 via the rpm easier, and is generally cleaner.
830 - Added scan destination in --Status output.
831 - Added --status-sort-dl (the default status output is now
832 sorted by ip address by default).
834 psad-1.2.1 (07/11/2003):
835 - Bugfix for multiple processes being spawned by psadwatchd
836 due to lack of proper config variables in the new split
838 - Bugfix for old scan messages being regenerated if a HUP
840 - Bugfix for incorrectly calculating disk utilization in
842 - Extended install.pl to include compression for archived
844 - Added preserve questions in install.pl for the psad
845 signature and auto ips files.
846 - Bugfix for --USR1 command line switch not mapping to the
848 - Bugfix for psad man page missing the pipe character in
849 psadfifo line for syslog.conf.
851 psad-1.2 (06/18/2003):
852 - Added passive OS fingerprinting based on packet ttl, length,
854 - Added dshield.org alerting capability.
855 - Added exec_external_script() for external script execution.
856 - Added auto blocked timeouts.
857 - Implemented config re-imports via HUP signals in a manner
858 similar to various other system daemons (sysylog, apache
860 - Better --Status output that shows packet counts per protocol
862 - Added --ip-status for more verbose status output for a
863 particular ip address.
864 - Added config preservation code to install.pl.
865 - Added Psad::psyslog().
866 - Split psad.conf into a separate config file for each of the
868 - Completely re-worked the auto blocking code (made dedicated
869 files for iptables and ipchains block methods).
870 - Added danger level hash.
871 - Minor code cleanups (shorter hash keys, etc.).
873 psad-1.1.1 (04/26/2003):
874 - Bugfix for incorrect usage of %scan hash keys associated
875 with tcp/udp when the current protocol is icmp.
876 - Bugfix for being too strict on iptable default log string.
877 - Reworked USR1 signal handler so the Data::Dumper function
878 call is made in the main part of the psad code.
879 - Added a startup message for psad.
880 - Minor bugfix for leading whitespace in auto_ips.
882 psad-1.1 (04/20/2003):
883 - Added the IPTables::Parse module for better processing of
884 the iptables ruleset.
885 - Added --snort-sids so that iptables messages generated by
886 fwsnort can be included in alerts. Such alerts now include
887 the content fields of packets (fwsnort uses the iptables
888 string match module).
889 - Added the ability to specify entire networks in the auto
890 ips file through the use of the Net::IPv4Addr module.
891 - Better logging format that reinstates the current interval,
892 and adds an "overall stats" section that includes packet
893 counters per protocol.
894 - Removed the PROTO hash key since it was unnecesssary.
895 - Better benchmarking code.
896 - Bug fix for incorrectly looking for the "MAC" string in
897 iptables messages that could have been generated by the
900 psad-1.0 (02/27/2003):
901 - Added --Benchmark and --packets command line options to support
903 - Bugfix for improperly detecting NULL scans.
904 - Completely redesigned website.
906 psad-1.0.0-pre4 (11/26/2002):
907 - Rewrote kmsgsd and psadwatchd in C.