| 1 | fwknop-1.9.9 (11/13/2008): |
|---|
| 2 | - Added support to fwknop for the Linux 'any' interface which allows SPA |
|---|
| 3 | packets to be received on multiple interfaces on a Linux system. This |
|---|
| 4 | is useful for running fwknop on a dual-homed Linux host, and then |
|---|
| 5 | accepting SPA packets on either the internal or external interface so |
|---|
| 6 | that SPA packets can influence the packet filter from either network. |
|---|
| 7 | - Added support for interfacing fwknop with third party software through |
|---|
| 8 | the addition of three new variables in the access.conf file (or set |
|---|
| 9 | globally in the fwknop.conf file): EXTERNAL_CMD_OPEN, |
|---|
| 10 | EXTERNAL_CMD_CLOSE, and EXTERNAL_CMD_ALARM. |
|---|
| 11 | The "open" and "close" commands might be manually supplied firewall |
|---|
| 12 | commands, and both support variable substitution of any of the variables |
|---|
| 13 | in the access.conf file with "$VAR". Also, three special variables are |
|---|
| 14 | supported: $SRC, $PORT, and $PROTO, which are derived from actual values |
|---|
| 15 | from within valid SPA packets (as opposed to $SOURCE from access.conf |
|---|
| 16 | which may contain a list of networks instead of a single IP address). |
|---|
| 17 | Here are some examples: |
|---|
| 18 | - Execute a specific iptables command on behalf of the source IP |
|---|
| 19 | in a valid SPA packet to add a new ACCEPT rule, and execute another |
|---|
| 20 | command (to delete the same rule after a timeout): |
|---|
| 21 | EXTERNAL_CMD_OPEN iptables -A INPUT -s $SRC -j ACCEPT |
|---|
| 22 | EXTERNAL_CMD_CLOSE iptables -D INPUT -s $SRC -j ACCEPT |
|---|
| 23 | - Execute a custom binary with the SOURCE and OPEN_PORTS variables from |
|---|
| 24 | the access.conf file as input on the command line, and after a |
|---|
| 25 | timeout execute a different program but use the real SPA source IP: |
|---|
| 26 | EXTERNAL_CMD_OPEN /path/someprog $SOURCE $OPEN_PORTS |
|---|
| 27 | EXTERNAL_CMD_OPEN /path/otherprog $SRC |
|---|
| 28 | - Added IPT_CMD_ALARM to control the number of seconds that the |
|---|
| 29 | IPTables::ChainMgr module uses to wrap alarm() calls around iptables |
|---|
| 30 | commands (for IPTables::ChainMgr 0.8 and later, although this does not |
|---|
| 31 | interfere with earlier versions of the module). |
|---|
| 32 | - Added IPT_EXEC_STYLE to control the execution method used for iptables |
|---|
| 33 | commands in the IPTables::ChainMgr module. The default is "waitpid", |
|---|
| 34 | but "system", and "popen" are also supported. |
|---|
| 35 | - Added IPT_EXEC_SLEEP to control the number of seconds that the |
|---|
| 36 | IPTables::ChainMgr module uses to delay between each iptables command. |
|---|
| 37 | The default is zero (no delay), but this can be increased to ensure that |
|---|
| 38 | iptables commands are issued at a slower pace. |
|---|
| 39 | - Added IPT_EXEC_TRIES to allow critical iptables commands to be tried |
|---|
| 40 | multiple times (with a default of 1) in case there are any errors from |
|---|
| 41 | iptables execution. |
|---|
| 42 | - Added --Override-config to fwknopd (suggested by Franck Joncourt) to |
|---|
| 43 | allow config variables in the normal /etc/fwknop/fwknop.conf file to be |
|---|
| 44 | superseded by values from other specified files. The --Override-config |
|---|
| 45 | command line argument accepts a comma-separated list of multiple files |
|---|
| 46 | from which to import configuration variables from. |
|---|
| 47 | - Added code to prefer the usage of the /usr/sbin/sendmail binary to send |
|---|
| 48 | email alerts before falling back to the mail binary (suggested by |
|---|
| 49 | Alexander Perlis). |
|---|
| 50 | - Added --Dump-config to fwknopd (suggested by Franck Joncourt). |
|---|
| 51 | - Added execution of --Dump-config to the test suite to collect the |
|---|
| 52 | installed version of the fwknop.conf and access.conf files (personal |
|---|
| 53 | information is anonymized). |
|---|
| 54 | - Updated fwknopd to use the POSIX sys_wait_h API for SIGCHLD handling in |
|---|
| 55 | order to be more consistent with an example from the perlipc man page. |
|---|
| 56 | - Updated fwknopd to pass in a reference to the SIGCHLD signal handler to |
|---|
| 57 | the IPTables::ChainMgr module so that all command executions via fork() |
|---|
| 58 | and exec() are associated with the same signal handler. |
|---|
| 59 | - Updated to IPTables::ChainMgr version 0.8. |
|---|
| 60 | - Updated to IPTables::Parse version 0.7. |
|---|
| 61 | - (Test suite): Added time stamps to MSG and TEST lines for each test |
|---|
| 62 | (useful to see the relative time if an alarm expires). |
|---|
| 63 | - (Test suite): Added tests for fwknopd --Override-config, --Dump-config, |
|---|
| 64 | and writing SPA packets to disk with the --Save-packet functionality (in |
|---|
| 65 | the fwknop client). |
|---|
| 66 | - (Test suite): Added tests for IPT_EXEC_SLEEP delays for executing |
|---|
| 67 | iptables commands. |
|---|
| 68 | - (Test suite): Added tests for Linux 'any' interface capture of SPA |
|---|
| 69 | packets on all interfaces. |
|---|
| 70 | - (Test suite): Added the ability to collect output from knoptm to see |
|---|
| 71 | when requests are received from fwknopd and when rules are added and |
|---|
| 72 | removed. |
|---|
| 73 | - Added version information for fwknopd to syslog startup message. |
|---|
| 74 | - Bug fix for the fwknop client in symmetric key mode where the terminal |
|---|
| 75 | would not be taken out of 'noecho' mode if a password less than 8 |
|---|
| 76 | characters long is provided. Previous to this fix, it was necessary to |
|---|
| 77 | blindly type 'reset'. (Reported by Alexander Perlis.) |
|---|
| 78 | |
|---|
| 79 | fwknop-1.9.8 (09/30/2008): |
|---|
| 80 | - Added GPG_NO_REQUIRE_PREFIX to access.conf to control whether the GnuPG |
|---|
| 81 | 'hQ' prefix is added before base64 decoding and decrypting. Normally |
|---|
| 82 | this is not needed, but if there appear to be communications issues |
|---|
| 83 | between the fwknop client and the fwknopd server then this option can be |
|---|
| 84 | useful to ensure that encrypted SPA data is sent through the GnuPG |
|---|
| 85 | decryption routine. The 'hQ' prefix is a heuristic derived from the |
|---|
| 86 | file 'magic' database for describing data encrypted with GnuPG, and the |
|---|
| 87 | fwknop client normally strips this data from outgoing SPA packets |
|---|
| 88 | (unless the --Include-gpg-prefix option is used). |
|---|
| 89 | - Added 'GPG_PATH <path>' to fwknopd (via access.conf) so that different |
|---|
| 90 | paths to the gpg binary can be specified on a per-SOURCE basis. This |
|---|
| 91 | allows one SOURCE stanza to apply one gpg binary to decrypt incoming SPA |
|---|
| 92 | packets (say /usr/bin/gpg), and another SOURCE stanza to apply to another |
|---|
| 93 | gpg binary (say /usr/bin/gpg2). In this way, fwknop/fwknopd now |
|---|
| 94 | supports gpg2 in addition to gpg. |
|---|
| 95 | - Bugfix to make sure that neither fwknop nor fwknopd reference any |
|---|
| 96 | options file in GnuPG mode, and this is now the default (which overrides |
|---|
| 97 | the now unnecessary --gpg-no-options arg). There is a new option |
|---|
| 98 | --gpg-use-options and GPG_USE_OPTIONS to restore the usage of an options |
|---|
| 99 | file by GnuPG by fwknop and fwknopd (not normally needed). |
|---|
| 100 | - Added '--gpg-prefix <bytes>' to the fwknop client so that the |
|---|
| 101 | predictable prefix for GnuPG encrypted data can be changed. Normally |
|---|
| 102 | this prefix is 'hQ' (base64 encoded), or the raw bytes 0x8502. |
|---|
| 103 | - Added the ability to control the path used for the gpg binary on the |
|---|
| 104 | client side with a new argument '--gpg-path <path>', and on the server |
|---|
| 105 | side with gpgCmd in the fwknop.conf file. The GnuPG::Interface module |
|---|
| 106 | normally just takes the first instance of gpg that is the current path, |
|---|
| 107 | but this new feature allows the path to the binary to be explicitly set. |
|---|
| 108 | - Added --Save-packet-append to allow SPA packets to be appended to the |
|---|
| 109 | --Save-packet-file in --Save-packet mode. This allows multiple SPA |
|---|
| 110 | packets to more easily be stored for closer examination (i.e. to make |
|---|
| 111 | sure randomness is high or to test encryption properties over large |
|---|
| 112 | sets of SPA packets). |
|---|
| 113 | - Updated fwknopd to enforce the DIGEST_TYPE variable more strictly by not |
|---|
| 114 | accepting SPA packets that do not include digest of the specified type. |
|---|
| 115 | The DIGEST_TYPE default is 'ALL', so normally fwknopd accepts any |
|---|
| 116 | supported digest. |
|---|
| 117 | - Bugfix to make sure to apply BLACKLIST checks to IP addresses specified |
|---|
| 118 | with -a (or derived via -R) in addition to the source IP in the IP |
|---|
| 119 | header (which can be modified via --Spoof-src). (Franck Joncourt |
|---|
| 120 | submitted a patch for this.) |
|---|
| 121 | - Bugfix to ensure that the permissions for the |
|---|
| 122 | /var/run/fwknop/knopwatchd.pid file are set to 0600 (noticed by Franck |
|---|
| 123 | Joncourt). |
|---|
| 124 | - Bugfix to remove the Net::IPv4Addr dependency in the fwknop client and |
|---|
| 125 | knoptm daemon (Franck Joncourt). |
|---|
| 126 | - (Test suite) Added the base64_byte_frequency.pl script to the test/ |
|---|
| 127 | directory. This script parses files that contain base64 encoded data |
|---|
| 128 | (one record per line), and produces data files that can be graphed with |
|---|
| 129 | Gnuplot in order to visualize SPA packets. The new --Save-packet-append |
|---|
| 130 | argument makes it easy to generate large collections of SPA packets with |
|---|
| 131 | the fwknop client, and this data can then be parsed by |
|---|
| 132 | base64_byte_frequency.pl to look for features that are common across SPA |
|---|
| 133 | packets (this should be minimized because every fwknop SPA packet contains |
|---|
| 134 | 16 bytes of random data). Some analysis of randomness in SPA packets |
|---|
| 135 | generated by fwknop is presented in this blog post: |
|---|
| 136 | |
|---|
| 137 | http://www.cipherdyne.org/blog/2008/09/visualizing-spa-packet-randomness.html |
|---|
| 138 | |
|---|
| 139 | - (Test suite) Added tests for GPG_NO_REQUIRE_PREFIX functionality and for |
|---|
| 140 | the expected GnuPG prefix. |
|---|
| 141 | - (Test suite) Added tests for GnuPG version 2 (a check is made to see if |
|---|
| 142 | it is installed before these tests are run). |
|---|
| 143 | |
|---|
| 144 | fwknop-1.9.7 (08/24/2008): |
|---|
| 145 | - Mirek Trmac from Red Hat contributed several patches so that fwknop can |
|---|
| 146 | be bundled within the Fedora Linux distribution. These patches |
|---|
| 147 | implemented the following changes: |
|---|
| 148 | |
|---|
| 149 | Updates to fwknopd to remove the NetPacket module as a dependency |
|---|
| 150 | (this is a particularly important update since it assists with getting |
|---|
| 151 | fwknop bundled with Debian as well). The patch manually decodes the |
|---|
| 152 | network and transport layer headers. |
|---|
| 153 | A patch to make the fwknop init script not start fwknopd by default |
|---|
| 154 | on Red Hat systems. This patch also supports Fedora init script |
|---|
| 155 | conventions better (i.e. fwknop instead of the fwknopd name for the lock |
|---|
| 156 | file in /var/lock/subsys). |
|---|
| 157 | Updated the fwknop Makefile to respect the OPTS variable which is used |
|---|
| 158 | in the RPM spec file. |
|---|
| 159 | Bugfix in fwknop_serv to support the variable expansion code from |
|---|
| 160 | fwknopd. This was important for the TCPSERV_PID_FILE file which is |
|---|
| 161 | defined as $FWKNOP_RUN_DIR/fwknop_serv.pid. |
|---|
| 162 | Updated fwknopd to use the Net::Pcap API valid in Net::Pcap-0.14 for |
|---|
| 163 | the datalink() function (used to detect the datalink layer type). |
|---|
| 164 | |
|---|
| 165 | - Updated fwknop, fwknopd, and knoptm to import perl modules out of the |
|---|
| 166 | /usr/lib/fwknop/ directory if it exists. This allows the perl module |
|---|
| 167 | path to be manipulated via the --Lib-dir command line argument and |
|---|
| 168 | 'require' statements instead of the old 'use module' strategy. |
|---|
| 169 | - Added module version output for each non-core perl module used by fwknop |
|---|
| 170 | and fwknopd in --debug mode. This is mostly useful for the test suite |
|---|
| 171 | to see which versions of the modules are being used. |
|---|
| 172 | - Added the ability to ignore any local GnuPG 'options' file with a new |
|---|
| 173 | command line argument --gpg-no-options (for the fwknop client) and a new |
|---|
| 174 | access.conf config variable GPG_NO_OPTIONS (for the fwknopd daemon). |
|---|
| 175 | This fixes a problem reported by Mike Holzmann where the 'encrypt-to' |
|---|
| 176 | option in the default options file was causing SPA packets to exceed |
|---|
| 177 | 1500 bytes when encrypted with a 2048-bit GnuPG key. Also added the |
|---|
| 178 | MAX_SNIFF_BYTES to the fwknop.conf file and --Max-packet-size to the |
|---|
| 179 | fwknop command line to alter the default of 1500 bytes if needed (but |
|---|
| 180 | this shouldn't really be necessary). |
|---|
| 181 | - Bugfix for 'Premature end of base64 data' and 'Premature padding of |
|---|
| 182 | base64 data' warning messages from MIME::Base64 errors. Now fwknopd |
|---|
| 183 | applies more rigorous checks for base64 encoded characters, and either |
|---|
| 184 | of these two messages above will result in the packet data being |
|---|
| 185 | discarded before it is sent through any decryption function. Mike |
|---|
| 186 | Holzmann reported this issue. |
|---|
| 187 | - (Test suite) Added --test-system-fwknop to allow any installed version |
|---|
| 188 | of fwknop to be installed instead of the scripts bundled within the |
|---|
| 189 | local source distribution. |
|---|
| 190 | |
|---|
| 191 | fwknop-1.9.6 (07/18/2008): |
|---|
| 192 | - SPA packets are base64-encoded by the fwknop client, and this encoding |
|---|
| 193 | pads data with '=' chars until the total length of the encoded data is a |
|---|
| 194 | multiple of four. This characteristic can be used within a Snort rule |
|---|
| 195 | to assist in the detection of SPA communications. The 1.9.6 release of |
|---|
| 196 | fwknop strips out these padding characters before the client sends an |
|---|
| 197 | SPA packet, and the fwknopd server adds them back in (to form a multiple |
|---|
| 198 | of four) before base64 decoding the packet data. This reduces the level |
|---|
| 199 | of identifying information in SPA packets and therefore makes it more |
|---|
| 200 | difficult to detect the usage of SPA for service access. For reference, |
|---|
| 201 | a Snort rule that would detect SPA packets via the trailing '=' chars |
|---|
| 202 | (previous to this release) would be: |
|---|
| 203 | |
|---|
| 204 | alert udp any any -> any 62201 (msg:"fwknop SPA traffic"; \ |
|---|
| 205 | dsize:>150; pcre:"/==$/"; sid:20080001; rev:1;) |
|---|
| 206 | |
|---|
| 207 | - According to the 'file' command (via it's 'magic') database, files that |
|---|
| 208 | are encrypted with GnuPG begin with 0x8502, and this is true for SPA |
|---|
| 209 | packets generated by fwknop (previous to this release). In |
|---|
| 210 | fwknop-1.9.6, the "hQ" prefix is removed by the fwknop client and added |
|---|
| 211 | back in by the fwknopd server if it doesn't exist. This measure is |
|---|
| 212 | another effort to make SPA packets more difficult to detect on the wire, |
|---|
| 213 | such as with the following Snort rule: |
|---|
| 214 | |
|---|
| 215 | alert udp any any -> any 62201 (msg:"fwknop GnuPG encrypted SPA |
|---|
| 216 | traffic"; content:"hQ"; depth:2; dsize:>1000; sid:20080003; rev:1;) |
|---|
| 217 | |
|---|
| 218 | - Updated the fwknop client to randomize the UDP source port for default |
|---|
| 219 | SPA packet generation. There is also a new command line argument |
|---|
| 220 | --Source-port <port> to allow the user to manually set the source port |
|---|
| 221 | on the fwknop client command line. A lot more attention is given now to |
|---|
| 222 | source ports after the Dan Kaminsky DNS caching exploit, and it turns |
|---|
| 223 | out that even on Linux that the kernel did not randomize UDP source |
|---|
| 224 | ports until the 2.6.24 kernel. Of course, any userspace process is free |
|---|
| 225 | to request a random port itself, but if a userspace application did not |
|---|
| 226 | build this in then it would be up to the kernel to assign a source port. |
|---|
| 227 | In the case of Linux, here are two links that show the change to the |
|---|
| 228 | kernel code as well as the ChangeLog entry for UDP source port |
|---|
| 229 | randomization: |
|---|
| 230 | |
|---|
| 231 | http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;\ |
|---|
| 232 | a=commit;h=32c1da70810017a98aa6c431a5494a302b6b9a30 |
|---|
| 233 | http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.24 |
|---|
| 234 | |
|---|
| 235 | - (Test suite): Added the ability to explicitly run major classes of tests |
|---|
| 236 | with two new command line arguments to the fwknop_test.pl script: |
|---|
| 237 | --test-include <test>, and --test-exclude <test>. In each case the |
|---|
| 238 | <test> string is used as a sub-string match against the main identifying |
|---|
| 239 | string for the name of the test. For example, to run all tests for |
|---|
| 240 | replay attacks, use "--test-include Replay", and for all port |
|---|
| 241 | randomization tests use "--test-include random". To see all possible |
|---|
| 242 | classes of tests, run the test suite without any command line arguments |
|---|
| 243 | and examine the test.log file. |
|---|
| 244 | - (Test suite): Added tests for the legacy shared and encrypted port |
|---|
| 245 | knocking modes. |
|---|
| 246 | - (Legacy port knocking mode): Updated to not require iptables log |
|---|
| 247 | messages to be written to the fwknopfifo named pipe and just parse the |
|---|
| 248 | /var/log/messages file directly by default. This can be configured via |
|---|
| 249 | two new variables ENABLE_SYSLOG_FILE and IPT_SYSLOG_FILE (similarly to |
|---|
| 250 | the psad project). In support of this feature, install.pl now does not |
|---|
| 251 | create the fwknopfifo or reconfigure the syslog daemon unless the |
|---|
| 252 | --install-syslog-fifo argument is used, and the knopmd does not have to |
|---|
| 253 | run. |
|---|
| 254 | - (Legacy port knocking mode): Added the ability to re-open the |
|---|
| 255 | /var/log/messages file if it is rotated by an external program such as |
|---|
| 256 | logrotate. |
|---|
| 257 | - (Test suite): Bugfix to use --fw-type argument on fwknopd command line. |
|---|
| 258 | This fixes various tests on Mac OS X and FreeBSD systems running ipfw. |
|---|
| 259 | - Minor bugfix to require a space character after variable names when |
|---|
| 260 | parsing the fwknop.conf file via knopmd and knopwatchd (implemented in |
|---|
| 261 | fwknop_funcs.c) |
|---|
| 262 | |
|---|
| 263 | fwknop-1.9.5 (06/08/2008): |
|---|
| 264 | - Updated to Class::MethodMaker 2.11 from CPAN. This helps with systems |
|---|
| 265 | running perl-5.10.0 and greater (such as Fedora 9). |
|---|
| 266 | - Added the LOCALE variable to fwknop.conf and made the "C" locale set by |
|---|
| 267 | default so that gpg process output would always be correctly |
|---|
| 268 | interpreted. |
|---|
| 269 | - Updated to Net::RawIP 0.23 from 0.21_03 and removed List::MoreUtils |
|---|
| 270 | since Net::RawIP no longer requires it |
|---|
| 271 | - Updated to Crypt::Rijndael 1.06 from 1.04. |
|---|
| 272 | - Updated to Crypt::CBC 2.29 from 2.19. |
|---|
| 273 | - Updated to GnuPG::Interface 0.36 from 0.34. |
|---|
| 274 | - Removed legacy knopmd.conf file since knopmd uses the fwknop.conf file |
|---|
| 275 | instead. Also, note that knopmd only runs in the legacy port knocking |
|---|
| 276 | mode to collect iptables log information from syslog. The default |
|---|
| 277 | authentication/authorization method used by fwknop is SPA which exhibits |
|---|
| 278 | far better security properties than port knocking (see |
|---|
| 279 | http://www.cipherdyne.org/fwknop/docs/SPA.html). |
|---|
| 280 | |
|---|
| 281 | fwknop-1.9.4 (06/01/2008): |
|---|
| 282 | - Added two new port randomization options. The first instructs the |
|---|
| 283 | fwknop client to select a random port between 10,000 and 65,535 as the |
|---|
| 284 | destination port over which to send an SPA packet. This feature is |
|---|
| 285 | enabled with a new command line argument "--rand-port" like so: |
|---|
| 286 | |
|---|
| 287 | $ fwknop -A tcp/22 --rand-port -R -D 11.1.1.1 |
|---|
| 288 | |
|---|
| 289 | On the fwknopd server side, the default PCAP_FILTER setting of "udp port |
|---|
| 290 | 62201" should be changed to "udp dst portrange 10000-65535" so that |
|---|
| 291 | fwknopd can sniff SPA packets that are sent over randomized destination |
|---|
| 292 | ports. Randomizing the destination port makes it more difficult to |
|---|
| 293 | write IDS signatures to detect fwknop SPA communications. |
|---|
| 294 | |
|---|
| 295 | The second port randomization technique uses a new SPA message type to |
|---|
| 296 | tell the fwknopd daemon to create a NAT rule for access to a local |
|---|
| 297 | socket via the iptables INPUT chain. This allows an SSH client to meet |
|---|
| 298 | the local SSHD daemon running on the fwknopd server system by SSH'ing to |
|---|
| 299 | the random port. This functionality is implemented via two new command |
|---|
| 300 | line arguments on the fwknop client command line: "--NAT-rand-port" to |
|---|
| 301 | instruct fwknop to select a random port over which the follow-on |
|---|
| 302 | connection will be made), and "--NAT-local" (to instruct the fwknopd |
|---|
| 303 | server that new firewall rules should NAT an incoming connection to the |
|---|
| 304 | randomly selected port). Here is an example: |
|---|
| 305 | |
|---|
| 306 | $ fwknop -A tcp/22 --NAT-rand-port --NAT-local -R -D 11.1.1.1 |
|---|
| 307 | |
|---|
| 308 | Now the fwknop client will select a random port to NAT the incoming |
|---|
| 309 | connection. So say it selects port 31001 (as indicated by the output of |
|---|
| 310 | fwknop on the command line as displayed below) - then you would SSH to |
|---|
| 311 | this port to access the real SSH daemon on the system where fwknopd is |
|---|
| 312 | running: |
|---|
| 313 | |
|---|
| 314 | [+] Sending 206 byte message to 127.0.0.1 over udp/46245... |
|---|
| 315 | Requesting NAT access to tcp/22 on 127.0.0.1 via port 31001 |
|---|
| 316 | |
|---|
| 317 | $ ssh -p 31001 <user>@11.1.1.1 |
|---|
| 318 | |
|---|
| 319 | Note that in this case it is not necessary to use --NAT-access since the |
|---|
| 320 | fwknopd daemon knows that access is requested to a local service (so an |
|---|
| 321 | internal IP address does not have to be specified). |
|---|
| 322 | |
|---|
| 323 | - Added the ability to specify the port that SPA packets are sent over |
|---|
| 324 | with the fwknop client by using the syntax "<host|IP>:<port>". So, for |
|---|
| 325 | example, to have the client send an SPA packet to 11.1.1.1 over UDP port |
|---|
| 326 | 12345 (instead of the default of 62201), one could use the following |
|---|
| 327 | command: |
|---|
| 328 | |
|---|
| 329 | $ fwknop -A tcp/22 -R -D 11.1.1.1:12345 |
|---|
| 330 | |
|---|
| 331 | - Bugfix to add a check for "keep-state" in ipfw policies in addition to |
|---|
| 332 | the existing "check-state" check (noticed by Sebastien Jeanquier). |
|---|
| 333 | - Updated the install.pl script to try to determine the OS type as early |
|---|
| 334 | as possible during the install process. |
|---|
| 335 | - Added the MIN_SPA_PKT_LEN variable with 150 (bytes) as the default. |
|---|
| 336 | This allows fwknopd to ignore packets that are not at least this many |
|---|
| 337 | bytes (including packet headers) before any decryption attempt is made. |
|---|
| 338 | - Added --time-offset-plus and --time-offset-minus args to the fwknop |
|---|
| 339 | client command line. This allows the time stamp within an SPA packet to |
|---|
| 340 | be influenced without setting the system clock (which normal users |
|---|
| 341 | cannot usually do). This is useful for when the client and server |
|---|
| 342 | systems have clocks that are out of sync. |
|---|
| 343 | - Bugfix on Ubuntu systems to make sure that the fwknop init script is |
|---|
| 344 | installed with a priority of 99 instead of 20 - this puts fwknop as late |
|---|
| 345 | as possible within the boot sequence so that the system is ready to run |
|---|
| 346 | fwknop. |
|---|
| 347 | - Bugfix to not open ports that are not specifically requested in an SPA |
|---|
| 348 | packet even if those ports are listed in the OPEN_PORTS variable in the |
|---|
| 349 | access.conf file. |
|---|
| 350 | - Updated to version 5.47 of the Digest::SHA module. |
|---|
| 351 | - Updated to version 0.7 of the IPTables::ChainMgr module (includes |
|---|
| 352 | perldoc documentation). |
|---|
| 353 | - Updated to version 0.6 of the IPTables::Parse module (includes perldoc |
|---|
| 354 | documentation). |
|---|
| 355 | - Added NAT, port randomization, and and time offset option discussions to |
|---|
| 356 | fwknop(8) man page. |
|---|
| 357 | |
|---|
| 358 | fwknop-1.9.3 (04/05/2008): |
|---|
| 359 | - Added MASQUERADE and SNAT support to complement inbound DNAT connections |
|---|
| 360 | for SPA packets that request --Forward-access to internal systems. This |
|---|
| 361 | functionality is only enabled when both ENABLE_IPT_FORWARDING and |
|---|
| 362 | ENABLE_IPT_SNAT are set, and is configured by two new variables |
|---|
| 363 | IPT_MASQUERADE_ACCESS and IPT_SNAT_ACCESS which define the iptables |
|---|
| 364 | interface to creating SNAT rules. The SNAT supplements of DNAT rules |
|---|
| 365 | are not usually necessary because internal systems usually have a route |
|---|
| 366 | back out to the Internet, but this feature accommodates those systems |
|---|
| 367 | that do not have such a route. By default, the MASQUERADE target is |
|---|
| 368 | used if ENABLE_IPT_SNAT is enabled because this means that the external |
|---|
| 369 | IP does not have to be manually defined. However, the external IP can |
|---|
| 370 | be defined by the SNAT_TRANSLATE_IP variable. |
|---|
| 371 | - Added hex_dump() feature for fwknop client so that raw encrypted SPA |
|---|
| 372 | packet data can be displayed in --verbose mode. |
|---|
| 373 | - When ENABLE_IPT_FORWARDING is set, added a check for the value of the |
|---|
| 374 | /proc/sys/net/ipv4/ip_forward file to ensure that the local system |
|---|
| 375 | allows packets to be forwarded. Unless ENABLE_PROC_IP_FORWARD is |
|---|
| 376 | disabled, then fwknopd will automatically set the ip_forward file to "1" |
|---|
| 377 | if it is set to "0" (again, only if ENABLE_IPT_FORWARDING is enabled). |
|---|
| 378 | - Minor bugfix to remove sys_log() call in legacy port knocking mode. |
|---|
| 379 | - Minor bugfix to expand both the Id and Revision tags via the |
|---|
| 380 | svn:keywords directive. |
|---|
| 381 | |
|---|
| 382 | fwknop-1.9.2 (03/12/2008): |
|---|
| 383 | - Crypt::CBC adds the string "Salted__" to the beginning of the encrypted |
|---|
| 384 | text (at least for how fwknop interfaces with Crypt::CBC), so the fwknop |
|---|
| 385 | client was updated to delete the encoded version of this string |
|---|
| 386 | "U2FsdGVkX1" before sending a Rijndael-encrypted SPA packet on the wire. |
|---|
| 387 | The fwknopd server will add this string back in before decrypting. This |
|---|
| 388 | makes it harder to write an IDS signature that looks for fwknop traffic; |
|---|
| 389 | e.g. look for the default prefix string "U2FsdGVkX1" over UDP port 62201, |
|---|
| 390 | which would work for fwknop clients < 1.9.2 (as long as the port number |
|---|
| 391 | is not changed with --Server-port). |
|---|
| 392 | - Added more granular source IP and allowed IP tests so that access to |
|---|
| 393 | particular internal IP addresses can be excluded in --Forward-access |
|---|
| 394 | mode. A new keyword "INTERNAL_NET_ACCESS" is now parsed from the |
|---|
| 395 | access.conf file in order to implemented these restrictions. |
|---|
| 396 | - (SPAPICT Group) Added BLACKLIST functionality to allow source IP |
|---|
| 397 | addresses to easily be excluded from the authentication process. |
|---|
| 398 | - (Grant Ferley) Submitted patch to handle SIGCHLD in IPTables::ChainMgr. |
|---|
| 399 | - (Grant Ferley) Submitted patch to handle Linux "cooked" interfaces for |
|---|
| 400 | packet capture (e.g. PPPoE interfaces). |
|---|
| 401 | - (SPAPICT Group) Applied modified version of the client-defined access |
|---|
| 402 | timeout patches submitted by the PICT SPA Group. There are two new |
|---|
| 403 | message types to facilitate client timeouts; one for normal access mode, |
|---|
| 404 | and the other for the FORWARD access mode. In the access.conf file, |
|---|
| 405 | there is also a new variable "PERMIT_CLIENT_TIMEOUT" to allow each |
|---|
| 406 | SOURCE stanza to allow client-defined timeouts or not. |
|---|
| 407 | - (SPAPICT Group) Submitted patches to include support for the SHA1 digest |
|---|
| 408 | algorithm for SPA packet replay attack detection. I modified these |
|---|
| 409 | patches for maximum configurability (see the --digest-alg argument on |
|---|
| 410 | the fwknop command line), and the ability to use the SHA256 algorithm as |
|---|
| 411 | well. The default path to the /var/log/fwknop/md5sums file has been |
|---|
| 412 | changed to /var/log/fwknop/digest.cache, and the default digest |
|---|
| 413 | algorithm is now SHA256 (but this is tunable via the DIGEST_TYPE |
|---|
| 414 | variable in the fwknop.conf file). |
|---|
| 415 | - Added the Digest::SHA perl module in support of the SHA1 and SHA256 |
|---|
| 416 | digest algorithms for replay attack detection and SPA message integrity. |
|---|
| 417 | - Added full packet hex dumps (including packet headers) to fwknopd in |
|---|
| 418 | --debug --verbose mode. This is to help diagnose packet sniffing issues |
|---|
| 419 | over the loopback interface on Mac OS X (first reported by Sebastien |
|---|
| 420 | Jeanquier). |
|---|
| 421 | - (Test suite) Bugfix to ensure that the FWKNOP_DIR variable is set to the |
|---|
| 422 | local output/ directory in several of the test config files in the |
|---|
| 423 | test/conf/ directory. |
|---|
| 424 | - (Test suite) Added several tests for configurable digest algorithms in |
|---|
| 425 | support for the SHA256, SHA1, and MD5 digest changes made by the SPAPICT |
|---|
| 426 | Group. |
|---|
| 427 | - Updated the fwknop client to always call encode_base64() with the string |
|---|
| 428 | to encode along with a second null-string argument to force all encoded |
|---|
| 429 | data to not include line breaks. |
|---|
| 430 | - Bugfix in install.pl to not test for the iptable command on non-Linux |
|---|
| 431 | systems, and to not test for the ipfw command on systems that are Linux. |
|---|
| 432 | - (Test suite) Updated to include the /proc/config.gz file so that the |
|---|
| 433 | kernel config can be reviewed (not all Netfilter hooks are necessarily |
|---|
| 434 | compiled in). |
|---|
| 435 | |
|---|
| 436 | fwknop-1.9.1 (01/26/2008): |
|---|
| 437 | - Added ENABLE_OUTPUT_ACCESS keyword to access.conf file parsing. This |
|---|
| 438 | provides a similar configuration gate for the iptables OUTPUT chain to |
|---|
| 439 | the ENABLE_FORWARD_ACCESS keyword, and adds the abiliy to control which |
|---|
| 440 | access.conf SOURCE blocks interface to the OUTPUT chain. |
|---|
| 441 | - Better installation support for various Linux distributions including |
|---|
| 442 | Fedora 8 and Ubuntu. The current runlevel is now acquired via the |
|---|
| 443 | "runlevel" command instead of attempting to read /etc/inittab (which |
|---|
| 444 | does not even exist on Ubuntu 7.10), and there are new command line |
|---|
| 445 | arguments --init-dir, --init-name, and --runlevel to allow the init |
|---|
| 446 | directory, init script name, and the runlevel to be manually specified |
|---|
| 447 | on the install.pl command line. |
|---|
| 448 | - Added command line argument display to fwknop client --verbose mode. |
|---|
| 449 | - Updated the test suite to include OUTPUT chain tests, reference |
|---|
| 450 | access.conf files in the test/conf/ directory, and perform SPA packet |
|---|
| 451 | format validation tests by parsing fwknopd output. |
|---|
| 452 | - Updated fwknopd to use always use the -c argument on the knoptm command |
|---|
| 453 | line (this makes sure that the test suite usage of fwknopd causes knoptm |
|---|
| 454 | to reference the correct configuration). |
|---|
| 455 | - Updated IPTables::ChainMgr to print iptables command output to stdout or |
|---|
| 456 | stderr if running in debug or verbose mode. |
|---|
| 457 | - Added --Exclude-mod-regex to install.pl so that the installation of |
|---|
| 458 | particular perl modules that match the supplied regex can be skipped. |
|---|
| 459 | - Added SIGALRM wrapper to the test suite since some libpcap and system |
|---|
| 460 | combinations break the ability of fwknopd to sniff packets. |
|---|
| 461 | - Added srand() call to the fwknop client (this is useful for older |
|---|
| 462 | versions of perl which do not automatically call srand() at the first |
|---|
| 463 | rand() call if srand() was not already called). |
|---|
| 464 | - Added a test to the test suite for sniffing packets over the loopback |
|---|
| 465 | interface. |
|---|
| 466 | - Added SPA packet aging test to the test suite to ensure that packet |
|---|
| 467 | expirations work properly (this feature protects against MITM attacks |
|---|
| 468 | where a valid SPA packet is stopped by an inline attacker and |
|---|
| 469 | retransmitted at a later time to acquire access). |
|---|
| 470 | - Added a file (test.log) to collect test suite console output. |
|---|
| 471 | - Added --Prepare-results argument to test suite to anonymize test results |
|---|
| 472 | and create a tarball that can be emailed to a third party to assist in |
|---|
| 473 | - Added full firewall policy dumps and the collection of system specifics |
|---|
| 474 | to the test suite. This makes it easy to send the output directory and |
|---|
| 475 | the test.log file to developers to assist in debugging (no information |
|---|
| 476 | is sent anywhere except as part of a manual process of course, and |
|---|
| 477 | addresses can be anonymized with --Prepare-results - loopback addresses |
|---|
| 478 | are not modified). |
|---|
| 479 | - Added --fw-del-ip <IP> argument to fwknopd so that a specific IP address |
|---|
| 480 | can be removed from the local firewall policy (this is used by the test |
|---|
| 481 | suite to ensure that if a test for removed firewall rules fails then |
|---|
| 482 | subsequent tests will not also fail because they are no longer tracked |
|---|
| 483 | by a running knoptm instance). |
|---|
| 484 | - Added a test to the test suite to collect fwknopd syslog output. This |
|---|
| 485 | is useful to see if a mechanism such as SELinux is deployed in a manner |
|---|
| 486 | that prevents normal fwknop communications. |
|---|
| 487 | - Bugfix to track MD5 digest for SPA command mode packets. |
|---|
| 488 | - Bugfix in fwknopd to not open ports listed in OPEN_PORTS in the absence |
|---|
| 489 | of the PERMIT_CLIENT_PORTS directive when an SPA packet contains a |
|---|
| 490 | request for access to a port not listed in OPEN_PORTS. |
|---|
| 491 | debugging fwknop if there are any issues. |
|---|
| 492 | - Added --verbose flag to fwknopd commands issued by the test suite so |
|---|
| 493 | that more data is collected for debugging analysis. |
|---|
| 494 | - Added GnuPG tests to the test suite with dedicated keys (for use only |
|---|
| 495 | with the test suite) in the test/conf/client-gpg and |
|---|
| 496 | test/conf/server-gpg directories. |
|---|
| 497 | - Added digest file validation to test suite to make sure that fwknopd |
|---|
| 498 | correctly tracks SPA packet MD5 digests. |
|---|
| 499 | - Updated to search state tracking rule in any iptables chain (many |
|---|
| 500 | iptables policies have user-defined chains that can be a bit complicated |
|---|
| 501 | to parse). |
|---|
| 502 | - Updated install.pl to be more strict in stopping any running fwknopd |
|---|
| 503 | processes. |
|---|
| 504 | |
|---|
| 505 | fwknop-1.9.0 (12/15/2007): |
|---|
| 506 | - Added a test suite so that fwknop and fwknopd functionality can be |
|---|
| 507 | automatically tested over the loopback interface (see the fwknop_test.pl |
|---|
| 508 | script in the test/ directory). |
|---|
| 509 | - Major update to allow SPA packets to create DNAT connections to internal |
|---|
| 510 | systems through the FORWARD chain (iptables only). This is useful to |
|---|
| 511 | connect through to internal systems (that may be running on non-routable |
|---|
| 512 | IP addresses) via a border firewall or router that is running fwknopd to |
|---|
| 513 | create inbound DNAT rules. |
|---|
| 514 | - Added support for the iptables OUTPUT chain via two new variable in the |
|---|
| 515 | fwknop.conf file: ENABLE_IPT_OUTPUT and IPT_OUTPUT_ACCESS. This is |
|---|
| 516 | useful for iptables firewalls that are not running the conntrack modules |
|---|
| 517 | and that have a restrictive OUTPUT chain (so SYN/ACK responses are not |
|---|
| 518 | allowed out without an explicit ACCEPT rule). |
|---|
| 519 | - Added the ability to force the fwknopd and knoptm daemons to restart |
|---|
| 520 | themselves (via knopwatchd) after a configurable timeout (see the |
|---|
| 521 | ENABLE_VOLUNTARY_EXITS and EXIT_INTERVAL variables in the |
|---|
| 522 | /etc/fwknop/fwknop.conf file). This feature is for those that want |
|---|
| 523 | fwknopd to go through its initialization routine periodically just in |
|---|
| 524 | case there is a logic (or other) bug that might result in fwknopd not |
|---|
| 525 | accepting a valid SPA packet. NOTE: This feature is disabled by default, |
|---|
| 526 | and is not normally needed since fwknopd is quite stable in most |
|---|
| 527 | deployments. |
|---|
| 528 | - Major update to perform all firewall rule expirations with knoptm, which |
|---|
| 529 | is now started in all data collection modes. Older versions of fwknopd |
|---|
| 530 | maintained its own firewall rule expiration code for the FILE_PCAP, |
|---|
| 531 | ULOG_PCAP, and KNOCK modes, so two mechanisms were being maintained for |
|---|
| 532 | the same purpose. The 1.9.0 release fixes this oversight. |
|---|
| 533 | - Minor bugfix to have knopwatchd generate syslog messages whenever an |
|---|
| 534 | fwknop daemon needs to be restarted. |
|---|
| 535 | - Added --interface command line argument to install.pl to allow the |
|---|
| 536 | sniffing interface to be specified from the command line. Also updated |
|---|
| 537 | install.pl to enforce a 10-try maximum for attempting to accept a valid |
|---|
| 538 | interface name from the command line (LANG env issues can exist |
|---|
| 539 | sometimes). |
|---|
| 540 | - Updated SPA packet format for server_auth and forward_info elements; |
|---|
| 541 | the internal MD5 sum is now always the last field in an SPA packet. This |
|---|
| 542 | makes extensions of the SPA protocol much easier, and the generation of |
|---|
| 543 | SPA packets more elegant. Also, SPA packet validation has been improved |
|---|
| 544 | to ensure that fields that are supposed to be digits really only contain |
|---|
| 545 | integer data. |
|---|
| 546 | - Added ENABLE_FORWARD_ACCESS variable to the access.conf file, and added |
|---|
| 547 | ENABLE_IPT_FORWARDING to the fwknop.conf file. These variables provide |
|---|
| 548 | the per-SOURCE ability to create DNAT connnections through the FORWARD |
|---|
| 549 | chain.. |
|---|
| 550 | - Replaced the IPT_AUTO_CHAIN1 variable with IPT_INPUT_ACCESS and |
|---|
| 551 | IPT_FORWARD_ACCESS in fwknop.conf. |
|---|
| 552 | - Added --Forward-access argument to the fwknop client. |
|---|
| 553 | - Added client version number to syslog messages generated by fwknopd when |
|---|
| 554 | a valid SPA packet is received. |
|---|
| 555 | - Added human readable timestamp to MD5 cache. Here is an example of the |
|---|
| 556 | update format: |
|---|
| 557 | 127.0.0.1 X6WF2C29kEgAv4aDJ8TDeQ [Wed Nov 28 09:24:46 2007] |
|---|
| 558 | - Added --Count argument to fwknopd so that it calls exit() when the |
|---|
| 559 | specified number of packets is monitored. |
|---|
| 560 | - Added --no-logs argument to knoptm in support of the test suite so that |
|---|
| 561 | no emails are generated. |
|---|
| 562 | - Bugfix in fwknopd to account for non-Ethernet link layer header over |
|---|
| 563 | *BSD loopback interfaces. |
|---|
| 564 | - Added --Save-dst argument to the fwknop client to add a priority file to |
|---|
| 565 | store client command line arguments (~/.fwknop.save). This file is only |
|---|
| 566 | overwritten when --Save-dst is used. |
|---|
| 567 | - Added fwknopd --fw-del-chains to allow the fwknopd iptables chains to |
|---|
| 568 | easily be deleted. |
|---|
| 569 | - Minor fwknopd bugfix to set process exit status to 0 when --Kill is |
|---|
| 570 | used. |
|---|
| 571 | |
|---|
| 572 | fwknop-1.8.3 (11/17/2007): |
|---|
| 573 | - Updated external IP resolution to point to http://www.whatismyip.org, |
|---|
| 574 | and added http://www.cipherdyne.org/cgi/clientip.cgi as a backup site |
|---|
| 575 | for fwknop IP resolution. |
|---|
| 576 | - Added storage of source IP along with SPA MD5 sum. This allows the user |
|---|
| 577 | to infer which networks are more hostile if an SPA packet is replayed. |
|---|
| 578 | - Added SPA packet hex dumps in 'fwknopd --debug' mode so that the |
|---|
| 579 | integration of third-party encryption algorithms is easier to |
|---|
| 580 | troubleshoot. Sean Greven contributed a patch for this. |
|---|
| 581 | - Reinstated the legacy port knocking mode. It appears that all encrypted |
|---|
| 582 | output from the updated Crypt::Rijndael module is at least 32 bytes |
|---|
| 583 | long, so port knocking sequences are now 32 bytes long as well (they |
|---|
| 584 | were previously 16 bytes long in old versions of fwknop). |
|---|
| 585 | - Bugfix to ensure the key length is at least 8 chars in --get-key mode. |
|---|
| 586 | - Minor update to remove init message on OS X install. |
|---|
| 587 | - Updated install.pl to set the LANG environmental variable to |
|---|
| 588 | "en_US.UTF-8". This should fix the problem where the output of ifconfig |
|---|
| 589 | was not interpreted correctly if the locale LANG setting is not English. |
|---|
| 590 | - Implemented verbose email alerting by setting the ALERTING_METHODS |
|---|
| 591 | variable to "verbose". This instructs fwknopd to generate a new email |
|---|
| 592 | message for each message that it normally logs vis syslog (this feature |
|---|
| 593 | is not the default, and must be manually enabled). |
|---|
| 594 | |
|---|
| 595 | fwknop-1.8.2 (09/15/2007): |
|---|
| 596 | - Added fwknopd server support for Mac OS X. The Darwin uname return |
|---|
| 597 | string is detected and this enables Darwin-specific installation code in |
|---|
| 598 | install.pl. |
|---|
| 599 | - Updated to not print sensitive key/password information in --debug mode |
|---|
| 600 | with fwknopd. |
|---|
| 601 | - Bugfix for install.pl on Windows 2003 Server running under Cygwin where |
|---|
| 602 | 'uname -o' output is reported 'Gygwin' for some reason. |
|---|
| 603 | - Added --Cygwin-install command line argument to install.pl to force |
|---|
| 604 | client-only fwknop install on Cygwin systems. |
|---|
| 605 | - Added --OS-type command line argument to install.pl to allow the user to |
|---|
| 606 | force the installation type. |
|---|
| 607 | - Updated to version 1.04 of Crypt::Rijndael. This fixes incompatibilities |
|---|
| 608 | between SPA packets between 64-bit and 32-bit platorms. |
|---|
| 609 | - Bugfix to enforce a maximum of 20 tries to read a password from stdin. |
|---|
| 610 | - Applied TCP options parsing fix from psad for invalid zero or one length |
|---|
| 611 | fields that break TLV encoding (this is for fwknopd, and only applies to |
|---|
| 612 | the legacy port knocking mode). |
|---|
| 613 | - Added code to fwknopd to check to see if there are any state tracking |
|---|
| 614 | rules in place within the local iptables or ipfw policy. |
|---|
| 615 | - Made syslog identity, facility, and priority configurable (applied code |
|---|
| 616 | from the psad project). |
|---|
| 617 | - Implemented --fw-list for ipfw firewalls. |
|---|
| 618 | - Bugfix for knoptm removing ipfw rules too quickly after not timing out |
|---|
| 619 | previously instantiated rules properly. |
|---|
| 620 | - Implemented smarter cache removal strategy in knoptm so that rules that |
|---|
| 621 | are manually removed from the running iptables or ipfw policy are also |
|---|
| 622 | removed from the cache. |
|---|
| 623 | - Added /var/log/fwknop/errs/fwknopd.{warn,die} tracking to the fwknopd |
|---|
| 624 | daemon for the PCAP modes of collecting packet data. Added |
|---|
| 625 | knoptm{warn,die} files for knoptm as well. |
|---|
| 626 | - Bugfix to import the GnuPG::Interface module in --get-key mode. |
|---|
| 627 | - Bugfix to send source IP as a part of the command message in command |
|---|
| 628 | mode so that REQUIRE_SOURCE_ADDRESS controls can be applied. |
|---|
| 629 | - Added --Test-mode to fwknop client so that SPA packets can be built but |
|---|
| 630 | never sent over the network. |
|---|
| 631 | |
|---|
| 632 | fwknop-1.8.1 (06/06/2007): |
|---|
| 633 | - Bugfix to ensure that the "keep-state" directive is added to firewall |
|---|
| 634 | rules on systems running the ipfw firewall. |
|---|
| 635 | - Added the --Save-packet and --Save-packet-file command line arguments |
|---|
| 636 | to the fwknop client. These options instruct fwknop to save a copy of |
|---|
| 637 | an encrypted SPA packet before it is sent across the network. |
|---|
| 638 | - Bugfix to find minimal unused ipfw rule number for ipfw firewalls. This |
|---|
| 639 | fixes an issue where ipfw rules added by fwknopd could be inserted at |
|---|
| 640 | the same position as rules from an existing ipfw policy. While ipfw |
|---|
| 641 | allows duplicate rules, whenever such a rule is deleted by its rule |
|---|
| 642 | number all matching rules are deleted. |
|---|
| 643 | |
|---|
| 644 | fwknop-1.8 (06/03/2007): |
|---|
| 645 | - Added support for ipfw firewalls (found on *BSD systems). The |
|---|
| 646 | IPTables::Parse and IPTables::ChainMgr modules are not installed on |
|---|
| 647 | such systems. |
|---|
| 648 | - Added gpg-agent support for both the fwknop client and fwknopd SPA |
|---|
| 649 | server. |
|---|
| 650 | - Updated client-only installation mode to restrict perl module |
|---|
| 651 | installation to those module that are actually required by the fwknop |
|---|
| 652 | client. This results in clean installs of the fwknop client on Windows |
|---|
| 653 | systems running Cygwin. |
|---|
| 654 | - Added --Defaults to install.pl so that fwknop can be installed without |
|---|
| 655 | prompting the user to answer any questions. This is to make it easier |
|---|
| 656 | to install fwknop on the Source Mage Linux distro. |
|---|
| 657 | - Consolidated daemon config files into the fwknop.conf file (except for |
|---|
| 658 | the access.conf file). This simplifies the configuration of fwknop. |
|---|
| 659 | - Added recursive variable resolution in the parsing routines for the |
|---|
| 660 | fwknop.conf file. This allows variable values to contain embedded |
|---|
| 661 | variables. |
|---|
| 662 | - Added init script for FreeBSD systems. |
|---|
| 663 | - Added --BSD-install command line argument to install.pl. This is not |
|---|
| 664 | normally necessary since the installer should detect installations on |
|---|
| 665 | *BSD systems, but this option can force this behavior. |
|---|
| 666 | - Updated knopmd and knopwatchd to use safe_malloc() instead of malloc(). |
|---|
| 667 | - Bugfix to never time out rules from SOURCE blocks with FW_ACCESS_TIMEOUT |
|---|
| 668 | set to zero |
|---|
| 669 | |
|---|
| 670 | fwknop-1.0.1 (01/09/2007): |
|---|
| 671 | - Updated fwknopd to allow the GPG_REMOTE_ID variable to have the value |
|---|
| 672 | "ANY" to allow a SOURCE block to match on arbitrary remote gpg signing |
|---|
| 673 | keys (Leland Weathers). |
|---|
| 674 | - Bugfix to allow OPEN_PORTS to be omitted in access.conf in favor of |
|---|
| 675 | having only PERMIT_CLIENT_PORTS enabled (reported by Raul Siles). |
|---|
| 676 | - Added the cd_rpmbuilder script to make it easy to build RPM's out of |
|---|
| 677 | CipherDyne projects by automatically downloading the project .tar.gz and |
|---|
| 678 | .spec files from http://www.cipherdyne.org/. |
|---|
| 679 | |
|---|
| 680 | fwknop-1.0 (11/05/2006): |
|---|
| 681 | - Bugfix for OpenSSH-4.3p2 patch to make sure to include the spa.h header |
|---|
| 682 | file. |
|---|
| 683 | - Bugfix for access hashes accumluating when multiple ports are requested |
|---|
| 684 | to be opened by a client. |
|---|
| 685 | - Better validation of IPT_AUTO_CHAIN variable so that the from_chain |
|---|
| 686 | cannot be identical to the to_chain. |
|---|
| 687 | - Bugfix in RPM to install List::MoreUtils. |
|---|
| 688 | - Bugfix so that the MD5 sum for an SPA packet is not examined for each |
|---|
| 689 | SOURCE block. This fixes a problem where an SPA packet could appear to |
|---|
| 690 | be replayed if multiple SOURCE blocks are defined in |
|---|
| 691 | /etc/fwknop/access.conf. |
|---|
| 692 | - Refactored main SPA access loop so that it is clearer how and when SPA |
|---|
| 693 | clients are granted access. |
|---|
| 694 | - Better handling of GnuPG key identifier strings (they can now contain |
|---|
| 695 | spaces, and syslog messages wrap the identifiers with double quotes). |
|---|
| 696 | - Added source IP address to command string in the SPA packet so that |
|---|
| 697 | the REQUIRE_SOURCE_ADDRESS criteria can be applied by the fwknopd |
|---|
| 698 | server. |
|---|
| 699 | - Added --Show-last-cmd and --Show-host-cmd args to fwknop so that the |
|---|
| 700 | last fwknop command and the last fwknop host commands can be viewed. |
|---|
| 701 | - Added the svn revision number to --Version and --help output. |
|---|
| 702 | |
|---|
| 703 | fwknop-0.9.9 (10/15/2006): |
|---|
| 704 | - Added REQUIRE_SOURCE_ADDRESS (disabled by default) to force fwknop |
|---|
| 705 | clients to know their source IP address (i.e. -s cannot be used). So, |
|---|
| 706 | either fwknop clients have to use -R to resolve their externally |
|---|
| 707 | routable address, or they must just know what it is. |
|---|
| 708 | - Updated to Net-RawIP-0.21_03 for compatibility with gcc-4.x compilers. |
|---|
| 709 | - Added List-MoreUtils-0.22 which is a dependency of the new Net::RawIP |
|---|
| 710 | module. |
|---|
| 711 | - Bugfix to restore "start" functionality in Gentoo init script. |
|---|
| 712 | - Bugfix to use the IPT_OUTPUT_FILE and IPT_ERROR_FILE configuration |
|---|
| 713 | variables in fwknopd. |
|---|
| 714 | - Added KNOPTM_IPT_OUTPUT_FILE and KNOPTM_IPT_ERROR_FILE variables |
|---|
| 715 | specifically for the knoptm daemon so that it can use IPTables::ChainMgr |
|---|
| 716 | completely independently of fwknopd (this removes a potential race |
|---|
| 717 | condition between fwknopd and knoptm). |
|---|
| 718 | |
|---|
| 719 | fwknop-0.9.8 (09/17/2006): |
|---|
| 720 | - Added the ability to ignore old SPA packets through use of the |
|---|
| 721 | client-side time stamp. This means that an attacker cannot intercept an |
|---|
| 722 | SPA packet, prevent it from being forwarded to its intended destination, |
|---|
| 723 | and then put the packet on the wire at some time outside of the allowed |
|---|
| 724 | time window. There are two new configuration options in fwknop.conf |
|---|
| 725 | "ENABLE_SPA_PACKET_AGING" and "MAX_SPA_PACKET_AGE" that control the |
|---|
| 726 | length of the acceptable time window (2 minutes by default). This |
|---|
| 727 | requires some level of synchronization between the fwknop client and the |
|---|
| 728 | fwknopd server, but this is not onerous through the use of NTP. This |
|---|
| 729 | feature is enabled by default, and the idea for it was contributed by |
|---|
| 730 | Sebastien J. |
|---|
| 731 | - Completely re-worked IPTables::ChainMgr to support the return of |
|---|
| 732 | iptables error messages that are collected via stderr. This is critical |
|---|
| 733 | to fixing any bugs where fwknopd could die as a result of a poorly |
|---|
| 734 | crafted iptables command. |
|---|
| 735 | but no information would be returned to the user. |
|---|
| 736 | - Added the ability to specify the position for both the jump rule into |
|---|
| 737 | the fwknopd chains as well as the position for new rules within the |
|---|
| 738 | fwknopd chains via the -I argument to iptables. This fixes a bug where |
|---|
| 739 | the user was given the impression that the IPTABLES_AUTO_RULENUM would |
|---|
| 740 | accomplish this (IPTABLES_AUTO_RULENUM has been removed). |
|---|
| 741 | - Updated fwknopd to require < 1500 byte payload length before attempting |
|---|
| 742 | to decrypt. Also, GnuPG decrypts are not attempted unless the encrypted |
|---|
| 743 | payload is at least 400 bytes long (this is conservative since even |
|---|
| 744 | encrypting a single byte with a 1024-bit key will result in about 340 |
|---|
| 745 | bytes of encrypted data). |
|---|
| 746 | - Added the --gpg-default-key option to have fwknop use the default GnuPG |
|---|
| 747 | key that is defined in the ~/.gnupg/options file. |
|---|
| 748 | - Added the --URL command line argument so that a URL other than the |
|---|
| 749 | default http://www.whatismyip.com/ can be provided by the user for |
|---|
| 750 | external IP resolution (suggested by Sebastien J.). |
|---|
| 751 | - Updated to be more rigorous with md5 sums; we now require that the |
|---|
| 752 | md5_base64() function actually returns a non-null result. |
|---|
| 753 | - Bugfix to make sure that only the users associated with the a specific |
|---|
| 754 | REQUIRE_USERNAME value (in a specific SOURCE block in access.conf) are |
|---|
| 755 | granted the appropriate access even if a valid encrypted packet is |
|---|
| 756 | constructed from a different user name (by an fwknop client). |
|---|
| 757 | - Populated the _debug option in the IPTables::ChainMgr module, and also |
|---|
| 758 | added a _verbose option so that the specific iptables commands can |
|---|
| 759 | actually be seen as IPTables::ChainMgr functions are called. |
|---|
| 760 | - Added code to install.pl to update command paths in fwknop.conf and |
|---|
| 761 | knopwatchd.conf if any of the paths are broken (i.e. the local system |
|---|
| 762 | does not conform to the default paths). By default this only happens if |
|---|
| 763 | the user does not want old configs to be merged, but to override this |
|---|
| 764 | use the new --path-update command line argument to install.pl. |
|---|
| 765 | - Added the --Skip-mod-install command line argument to install.pl to |
|---|
| 766 | allow all perl module installs to be skipped. |
|---|
| 767 | - Added the --force-mod-regex command line argument to install.pl to allow |
|---|
| 768 | a regex match on perl module names to force matching modules to be |
|---|
| 769 | installed. |
|---|
| 770 | - Minor bugfix to generate better (i.e. closer to those that Firefox |
|---|
| 771 | generates) http requests to http://www.whatismyip.com/). |
|---|
| 772 | - Adapted Mate Wierdl's RPM patch from the psad project so that the fwknop |
|---|
| 773 | RPM builds on x86_64 systems. |
|---|
| 774 | - Removed iptables requirement in RPM spec file because fwknop may be |
|---|
| 775 | installed on a system just to run the fwknop client. |
|---|
| 776 | - Updated to email username mismatch errors. |
|---|
| 777 | |
|---|
| 778 | fwknop-0.9.7 (08/04/2006): |
|---|
| 779 | - Added fwknop_serv to function as minimal TCP server over which SPA |
|---|
| 780 | packets can be sent. This allows SPA to be compatible with the Tor |
|---|
| 781 | network, which requires that a virtual circuit is established before |
|---|
| 782 | traffic can be sent. |
|---|
| 783 | - Updated to Crypt::CBC-2.18 after a vulnerability was discovered in |
|---|
| 784 | previous versions of Crypt::CBC that caused weak ciphertext to be |
|---|
| 785 | generated for algorithms that have blocksizes greater than 8 bytes (such |
|---|
| 786 | as Rijndael used by fwknop). Manually specifying initialization vectors |
|---|
| 787 | is not necessary now. |
|---|
| 788 | - Updated SSH patch to support OpenSSH-4.3p2. |
|---|
| 789 | - Bugfix to make sure to create /var/* directories if they don't exist |
|---|
| 790 | (such as when /var is a tmpfs). |
|---|
| 791 | - Bugfix (Dwayne Rightler) to restore -w IP lookup functionality after |
|---|
| 792 | format change on data returned by whatismyip.com. |
|---|
| 793 | - Bugfix to wrap SPA Rijndael decryption with eval{} so that fwknopd does |
|---|
| 794 | not die if there are problems trying to decrypt data. This is necessary |
|---|
| 795 | because of the security vulnerability fix in Crypt::CBC that creates |
|---|
| 796 | some incompatibilities in different versions of Crypt::CBC. |
|---|
| 797 | - Added "--L-host" command line argument so that the arguments used for |
|---|
| 798 | multiple hosts are preserved and can be recalled. |
|---|
| 799 | - Changed default user-agent setting for whatismyip.com lookups to |
|---|
| 800 | Firefox/1.0.5.4; there is no need to gratuitously advertise fwknop |
|---|
| 801 | traffic. |
|---|
| 802 | - Updated GunPG HOWTO to provide a step-by-step guide to getting fwknop |
|---|
| 803 | Single Packet Authorization working with GnuPG. |
|---|
| 804 | - Updated to derive perl module versions from the VERSION files within |
|---|
| 805 | each of the perl module source directories. |
|---|
| 806 | |
|---|
| 807 | fwknop-0.9.6 (01/13/2006): |
|---|
| 808 | - Added GPG based authentication capability for SPA packets. This new |
|---|
| 809 | mode can be configured to require that a GPG message be signed with a |
|---|
| 810 | particular key or set of keys. |
|---|
| 811 | - In GPG mode, the fwknop client now prints GPG errors to stdout if not |
|---|
| 812 | running with --gpg-no-batch-mode. |
|---|
| 813 | - Added the ability to require that the client know the UNIX crypt() |
|---|
| 814 | password associated with a username on the server side. This |
|---|
| 815 | functionality is enabled on the fwknop client with the "--Server-auth |
|---|
| 816 | crypt" command line argument, and the REQUIRE_AUTH_METHOD variable in |
|---|
| 817 | /etc/fwknop/access.conf on the fwknopd server. |
|---|
| 818 | - Added patch against OpenSSH-4.2p1 to integrate SPA mode. This patch |
|---|
| 819 | adds a "-K <fwknop cmd line>" argument to the SSH client so that |
|---|
| 820 | fwknop can be executed directly before an SSH connection is made. |
|---|
| 821 | - Separated server and client portions of fwknop into "fwknopd" and |
|---|
| 822 | fwknop repectively. This will allow better portability to be |
|---|
| 823 | developed since the client and server pieces can be developed more |
|---|
| 824 | independently. NOTE: With so many changes, it is probably a good idea |
|---|
| 825 | to not preserve old fwknop configs via install.pl. |
|---|
| 826 | - Renamed all relevant fwknopd command and file paths to support new |
|---|
| 827 | fwknopd server component. |
|---|
| 828 | - Added --quiet mode (this is used by default in the OpenSSH patch). |
|---|
| 829 | - Removed legacy port knocking installation in install.pl (fwknopfifo, |
|---|
| 830 | and fwdata file) unless the data collection mode is set to syslog or |
|---|
| 831 | syslog-ng for legacy iptables log messages. |
|---|
| 832 | - Added inode checking for PCAP_PKT_FILE. This helps to ensure that log |
|---|
| 833 | rotation schemes don't interfere with reading packets out of the file |
|---|
| 834 | since this check is size independent. |
|---|
| 835 | - Bugfix for Makefile debug mode. |
|---|
| 836 | - Added compilation check for perl programs in install.pl before |
|---|
| 837 | installation into the filesystem. |
|---|
| 838 | - Bugfix for knopwatchd to make sure it can actually restart all running |
|---|
| 839 | daemons properly. |
|---|
| 840 | - Added --force-mod command line argument to install.pl to allow the user |
|---|
| 841 | to force all perl modules to be be installed regardless of whether a |
|---|
| 842 | module exists in the system perl lib tree. |
|---|
| 843 | - Added --no-save-args to fwknop so that existing .fwknop.run file can |
|---|
| 844 | be preserved (helps to testing new features of fwknop client). |
|---|
| 845 | - Removed useless --encrypt command line argument (only the old shared |
|---|
| 846 | port knock sequences are not encrypted). |
|---|
| 847 | |
|---|
| 848 | fwknop-0.9.5 (10/02/2005): |
|---|
| 849 | - Added the ability to resolve the external IP associated with the |
|---|
| 850 | local network via http://www.whatismyip.com. This is a more secure |
|---|
| 851 | method of accomplishing what the -s option performs. The new |
|---|
| 852 | command line option is --whatismyip (or just -w). |
|---|
| 853 | - Updated fwknop to communicate with knoptm via a UNIX domain socket |
|---|
| 854 | instead of the previous file-based communication. |
|---|
| 855 | - Updated to flush the fwknop iptables chains at start time. |
|---|
| 856 | - Bugfix for removing the wrong hash key in the knoptm IP cache. |
|---|
| 857 | |
|---|
| 858 | fwknop-0.9.4 (09/17/2005): |
|---|
| 859 | - Bugfix for knoptm timing out new entries based on old time values |
|---|
| 860 | (this caused new rules to timed out too quickly). |
|---|
| 861 | - Added support for multiple users in REQUIRE_USERNAME keyword in |
|---|
| 862 | access.conf. |
|---|
| 863 | - Added the ability to display raw encrypted packet data in client |
|---|
| 864 | mode with --verbose. |
|---|
| 865 | - Created fwknop RPM for RPM-based Linux distributions. |
|---|
| 866 | - Bugfix for inappropriate redirects in command mode where the command |
|---|
| 867 | already contained a redirect. |
|---|
| 868 | |
|---|
| 869 | fwknop-0.9.3 (08/27/2005): |
|---|
| 870 | - Added an on-disk cache of md5 sums so that the md5 sum check can |
|---|
| 871 | survive restarts of fwknop. |
|---|
| 872 | - Updated install.pl to be more friendly to Mac OS X (Blair Zajac). |
|---|
| 873 | - Updated to allow access.conf variables to have values instead of just |
|---|
| 874 | being defined. |
|---|
| 875 | - Started on additional server authentication mode code (re-worked MD5 |
|---|
| 876 | sum calculation to allow packet format to be extended by taking into |
|---|
| 877 | account the fwknop version number). |
|---|
| 878 | |
|---|
| 879 | fwknop-0.9.2 (08/06/2005): |
|---|
| 880 | - Added FILE_PCAP data collection method when running in server mode. |
|---|
| 881 | This is a more general way of getting packets than the ULOG_PCAP |
|---|
| 882 | mode since then a normal ethernet sniffer can be used to build the |
|---|
| 883 | file. |
|---|
| 884 | - Added the ability to re-open a pcap file if its size shrinks (i.e. |
|---|
| 885 | it gets rotated out or something). |
|---|
| 886 | - Bugfix for multiple rules with the same timestamp not being timed out |
|---|
| 887 | by knoptm. |
|---|
| 888 | - Integrated spoofing capability directly within fwknop (instead of |
|---|
| 889 | using the knopspoof command) through the use of "require Net::RawIP". |
|---|
| 890 | - Better multi-protocol support in server mode. Tcp and icmp packets |
|---|
| 891 | are properly decoded now. |
|---|
| 892 | |
|---|
| 893 | fwknop-0.9.1 (07/29/2005): |
|---|
| 894 | - Added the ability to specify multiple ports/protocols to access on a |
|---|
| 895 | server with the --Access command line option. |
|---|
| 896 | - Added the ability to spoof SPA packets over icmp and tcp protocols. |
|---|
| 897 | - Added the ability to restrict access at the server to only those |
|---|
| 898 | ports defined in the OPEN_PORTS keyword. This option is controled by |
|---|
| 899 | a new keyword "PERMIT_CLIENT_PORTS". |
|---|
| 900 | - Bugfix for MD5 sum not being properly calculated over decrypted data. |
|---|
| 901 | This allowed old packets that contained additional garbage data to |
|---|
| 902 | be replayed against an fwknop server. |
|---|
| 903 | - Updated to fall back to getpwuid() if getlogin() fails (Blair Zajac). |
|---|
| 904 | - Added --ipt-list to list all current rules in the FWKNOP iptables |
|---|
| 905 | chains. |
|---|
| 906 | - Added --ipt-flush to flush all current rules in the FWKNOP iptables |
|---|
| 907 | chains. |
|---|
| 908 | - Bugfix for the installer dying if ~/lib already exists (Blair Zajac). |
|---|
| 909 | - Updated to delay the loading of server perl modules (Net::Pcap, etc.) |
|---|
| 910 | only if we are running in server mode. |
|---|
| 911 | - Bugfix for module directory paths in install.pl. |
|---|
| 912 | |
|---|
| 913 | fwknop-0.9.0 (05/29/2005): |
|---|
| 914 | - Added new authorization mode that uses Net::Pcap to read packets |
|---|
| 915 | out of a file that is written to by the ulogd pcap writer (also |
|---|
| 916 | stubbed in code to sniff packets directly off the wire). This |
|---|
| 917 | authorization mode only requires single packets, and has many |
|---|
| 918 | characteristics that are better than simple port knocking, including |
|---|
| 919 | being non-replayable, and much more data can be sent. This mode |
|---|
| 920 | is now the default for both the server and the client. |
|---|
| 921 | - Made the execution of knopmd optional depending on whether AUTH_MODE |
|---|
| 922 | is a pcap mode (e.g. ULOG_PCAP or PCAP). |
|---|
| 923 | - Added --Spoof-src argument so that encrypted packets can be spoofed |
|---|
| 924 | via /usr/sbin/knopspoof. |
|---|
| 925 | - Added /usr/sbin/knoptm so that firewall rules can be timed-out when |
|---|
| 926 | the server is running in PCAP mode even if new packets don't appear |
|---|
| 927 | on the wire. |
|---|
| 928 | - Updated fwknop man page to talk about the new pcap-based |
|---|
| 929 | authorization mode. |
|---|
| 930 | |
|---|
| 931 | fwknop-0.5.0 (03/19/2005): |
|---|
| 932 | - Added ALERTING_METHOD to allow syslog and/or email reporting to be |
|---|
| 933 | disabled (there is a dedicated file /etc/fwknop/alert.conf that |
|---|
| 934 | governs this behavior, and both fwknop and knopwatchd reference this |
|---|
| 935 | file). |
|---|
| 936 | - Bugfix for distinguishing OPT field associated with --log-tcp-options |
|---|
| 937 | vs. --log-ip-options. |
|---|
| 938 | - Added install_perl_module() install.pl from psad to provide a |
|---|
| 939 | consistent installation interface. |
|---|
| 940 | - Applied patch to only install perl modules that are not already |
|---|
| 941 | installed (Blair Zajac). |
|---|
| 942 | - Added --last-cmd option to allow fwknop to be executed with command |
|---|
| 943 | line arguments from the previous execution (they are saved in |
|---|
| 944 | ~/.fwknop.run). |
|---|
| 945 | - Added --Home-dir option to allow the home directory to be manually |
|---|
| 946 | specified. |
|---|
| 947 | - Re-worked get_homedir() to be more friendly to systems that do not |
|---|
| 948 | necessarily have /etc/passwd (e.g. OS X). |
|---|
| 949 | - Added configuration preservation and querying for which syslog |
|---|
| 950 | daemon is running to install.pl. These features were adapted from the |
|---|
| 951 | psad installer (http://www.cipherdyne.org/psad). |
|---|
| 952 | - Added IPTables::ChainMgr. Fwknop uses this module to maintain |
|---|
| 953 | dedicated chains to which access rules are added. |
|---|
| 954 | - Added IPTables::Parse, which is used internally by IPTables::ChainMgr. |
|---|
| 955 | - Added __WARN__ and __DIE__ handlers so errors can easily be collected. |
|---|
| 956 | |
|---|
| 957 | fwknop-0.4.2 (09/27/2004): |
|---|
| 958 | - Added init script for Fedora systems. |
|---|
| 959 | - Added --Kill, --Restart, and --Status modes (this fixes the generic |
|---|
| 960 | init script which depends on these arguments). |
|---|
| 961 | |
|---|
| 962 | fwknop-0.4.1 (09/14/2004): |
|---|
| 963 | - Bugfix for legacy posf code in fwknop and variable in fwknop.conf. |
|---|
| 964 | |
|---|
| 965 | fwknop-0.4 (09/10/2004): |
|---|
| 966 | - Added ability to specify multiple IPs/networks in a single SOURCE |
|---|
| 967 | definition. |
|---|
| 968 | - Better examples section in the fwknop manpage. |
|---|
| 969 | - Bugfix to make sure EMAIL_ADDRESSES variable does not contain commas |
|---|
| 970 | (any commas are translated into spaces). |
|---|
| 971 | - Added LICENSE file. |
|---|
| 972 | |
|---|
| 973 | fwknop-0.3 (08/21/2004): |
|---|
| 974 | - Bugfix for tracking knock sequences by source IP address. |
|---|
| 975 | - Bugfix for knock sequence timeouts. |
|---|
| 976 | - Removed old passive OS fingerprinting code in favor of the p0f |
|---|
| 977 | strategy. |
|---|
| 978 | - Added support for taking encryption keys from a file specified on |
|---|
| 979 | the command line. |
|---|
| 980 | - Update to send "sequence decrypt failed" email message only if |
|---|
| 981 | decryption failed for all encrypt sequence SOURCE blocks. |
|---|
| 982 | |
|---|
| 983 | fwknop-0.2 (07/31/2004): |
|---|
| 984 | - Implemented remote username checking in encrypted sequences. |
|---|
| 985 | - Added support for icmp in knock sequences. |
|---|
| 986 | - Added protocol rotation option for encrypted sequences. |
|---|
| 987 | - Added code for multiple SOURCE access blocks with the same source |
|---|
| 988 | net/IP. |
|---|
| 989 | - Added KNOCK_LIMIT access control variable to limit the number of |
|---|
| 990 | times a particular knock sequence is honored. |
|---|
| 991 | - Added email alerts. |
|---|
| 992 | |
|---|
| 993 | fwknop-0.1 (07/08/2004): |
|---|
| 994 | - Initial release. |
|---|