[test suite] added long running server-access AFL fuzzing results
[fwknop.git] / ChangeLog
1 fwknop-2.6.5 (12/16/2014):
2     - [server] (Grant Pannell) Added a new access.conf variable "DESTINATION"
3       to define the destination address for which an SPA packet will be
4       accepted. The string "ANY" is also accepted if a valid SPA packet should
5       be honored to any destination IP. Similarly to the "SOURCE" variable,
6       networks should be specified in CIDR notation (e.g. ""),
7       and individual IP addresses can be specified as well. Also, multiple IP's
8       and/or networks can be defined as a comma separated list (e.g.
9       ",").
10     - [server] Bug fix to ensure that proper bounds are enforced when
11       importing digest cache files from previous fwknopd executions. This bug
12       was discovered through fuzzing with American Fuzzy Lop (AFL) as driven
13       by the test/afl/fuzzing-wrappers/server-digest-cache.sh wrapper.
14       Previous to this fix, fwknopd could be made to crash through a malicious
15       digest cache file (normally in /var/run/fwknop/digest.cache) upon
16       initial import. This crash can only be triggered by a local user on the
17       system where fwknopd is deployed and who has write permissions to the
18       digest.cache file - usually only root has these permissions.
20 fwknop-2.6.4 (11/16/2014):
21     - [server] Added a UDP server mode so that SPA packets can be acquired via
22       UDP directly without having to use libpcap. This is an optional feature
23       since it opens a UDP port (and therefore requires the local firewall be
24       opened for communications to this port), but fwknopd is careful to never
25       send anything back to a client that sends data to this port. So, from the
26       perspective of an attacker or scanner, fwknopd remains invisible. This
27       feature is enabled in fwknopd either with a new command line argument
28       --udp-server or in the fwknopd.conf file with the ENABLE_UDP_SERVER
29       variable. When deployed in this mode, it is advisable to recompile fwknop
30       beforehand with './configure --enable-udp-server' so that fwknopd does
31       not link against libpcap.
32     - [server] Replaced all popen() and system() calls with execvpe() with no
33       usage of the environment. This is a defensive measure to not make use of
34       the shell for firewall command execution, and is supported on systems
35       where execvpe() is available.
36     - (Gerry Reno) Added support for firewalld to the fwknopd daemon on RHEL 7
37       and CentOS 7. This is implemented using the current firewalld '--direct
38       --passthrough' capability which accepts raw iptables commands. More
39       information on firewalld can be found here:
41       https://fedoraproject.org/wiki/FirewallD
43     - [server] Added support for the 'American Fuzzy Lop' (AFL) fuzzer from
44       Michal Zalewski. This requires that fwknop is compiled with the
45       '--enable-afl-fuzzing' argument to the configure script as this allows
46       encryption/digest short circuiting in a manner necessary for AFL to
47       function properly. The benefit of this strategy is that AFL can fuzz the
48       SPA packet decoding routines implemented by libfko. See the test/afl/
49       directory for some automation around AFL fuzzing.
50     - (Bill Stubbs) submitted a patch to fix a bug where fwknopd could not
51       handle Ethernet frames that include the Frame Check Sequence (FCS)
52       header. This header is four bytes long, and is placed at the end of each
53       Ethernet frame. Normally the FCS header is not visible to libpcap, but
54       some card/driver combinations result in it being included. Bill noticed
55       this on the following platform:
57           BeagleBone Black rev C running 3.8.13-bone50 #1 SMP Tue May 13
58           13:24:52 UTC 2014 armv7l GNU/Linux
60     - [client] Bug fix to ensure that a User-Agent string can be specified
61       when the fwknop client uses wget via SSL to resolve the external IP
62       address. This closes issue #134 on github reported by Barry Allard. The
63       fwknop client now uses the wget '-U' option to specify the User-Agent
64       string with a default of "Fwknop/<version>". In addition, a new command
65       line argument "--use-wget-user-agent" to allow the default wget
66       User-Agent string to apply instead.
67     - [python module] When an HMAC key is passed to spa_data_final() then
68       default to HMAC SHA256 if no HMAC mode was specified.
70 fwknop-2.6.3 (07/28/2014):
71     - [client] External IP resolution via '-R' (or '--resolve-ip-http') is now
72       done via SSL by default. The IP resolution URL is now
73       'https://www.cipherdyne.org/cgi-gin/myip', and a warning is generated
74       in '-R' mode whenever a non-HTTPS URL is specified (it is safer just to
75       use the default). The fwknop client leverages 'wget' for this operation
76       since that is cleaner than having fwknop link against an SSL library.
77     - Integrated the 'libfiu' fault injection library available from
78       http://blitiri.com.ar/p/libfiu/  This feature is disabled by default,
79       and requires the --enable-libfiu-support argument to the 'configure'
80       script in order to enable it. With fwknop compiled against libfiu, fault
81       injections are done at various locations within the fwknop sources and
82       the test suite verifies that the faults are properly handled at run time
83       via test/fko-wrapper/fko_fault_injection.c. In addition, the libfiu tool
84       'fiu-run' is used against the fwknop binaries to ensure they handle
85       faults that libfiu introduces into libc functions. For example, fiu-run
86       can force malloc() to fail even without huge memory pressure on the
87       local system, and the test suite ensures the fwknop binaries properly
88       handle this.
89     - [test suite] Integrated a new python fuzzer for fwknop SPA packets (see
90       test/spa_fuzzing.py). This greatly extends the ability of the test suite
91       to validate libfko operations since SPA fuzzing packets are sent through
92       libfko routines directly (indendepently of encryption and
93       authentication) with a special 'configure' option
94       --enable-fuzzing-interfaces. The python fuzzer generates over 300K SPA
95       packets, and when used by the test suite consumes about 400MB of disk.
96       For reference, to use both the libfiu fault injection feature mentioned
97       above and the python fuzzer, use the --enable-complete option to the
98       test suite.
99     - [test suite] With the libfiu fault injection support and the new python
100       fuzzer, automated testing of fwknop achieves 99.7% function coverage and
101       90.2% line coverage as determined by 'gcov'. The full report may be
102       viewed here: http://www.cipherdyne.org/fwknop/lcov-results/
103     - [server] Add a new GPG_FINGERPRINT_ID variable to the access.conf file
104       so that full GnuPG fingerprints can be required for incoming SPA packets
105       in addition to the appreviated GnuPG signatures listed in GPG_REMOTE_ID.
106       From the test suite, an example fingerprint is
108       GPG_FINGERPRINT_ID            00CC95F05BC146B6AC4038C9E36F443C6A3FAD56
110     - [server] When validating access.conf stanzas make sure that one of
111       GPG_REMOTE_ID or GPG_FINGERPRINT_ID is specified whenever GnuPG
112       signatures are to be verified for incoming SPA packets. Signature
113       verification is the default, and can only be disabled with
114       GPG_DISABLE_SIG but this is NOT recommended.
115     - [server] Bug fix for PF firewalls without ALTQ support on FreeBSD. With
116       this fix it doesn't matter whether ALTQ support is available or not.
117       Thanks to Barry Allard for discovering and reporting this issue.
118       Closes issue #121 on github.
119     - [server] Bug fix discovered with the libfiu fault injection tag
120       "fko_get_username_init" combined with valgrind analysis. This bug is
121       only triggered after a valid authenticated and decrypted SPA packet is
122       sniffed by fwknopd:
124         ==11181== Conditional jump or move depends on uninitialised value(s)
125         ==11181==    at 0x113B6D: incoming_spa (incoming_spa.c:707)
126         ==11181==    by 0x11559F: process_packet (process_packet.c:211)
127         ==11181==    by 0x5270857: ??? (in /usr/lib/x86_64-linux-gnu/libpcap.so.1.4.0)
128         ==11181==    by 0x114BCC: pcap_capture (pcap_capture.c:270)
129         ==11181==    by 0x10F32C: main (fwknopd.c:195)
130         ==11181==  Uninitialised value was created by a stack allocation
131         ==11181==    at 0x113476: incoming_spa (incoming_spa.c:294)
133     - [server] Bug fix to handle SPA packets over HTTP by making sure to honor
134       the ENABLE_SPA_OVER_HTTP fwknopd.conf variable and to properly account
135       for SPA packet lengths when delivered via HTTP.
136     - [server] Add --test mode to instruct fwknopd to acquire and process
137       SPA packets, but not manipulate firewall rules or execute commands that
138       are provided by SPA clients. This option is mostly useful for the fuzzing
139       tests in the test suite to ensure broad code coverage under adverse
140       conditions.
142 fwknop-2.6.2 (04/28/2014):
143     - [libfko] fix double free bug in SPA parser discovered with the new
144       python SPA payload fuzzer (see the 'spa_encoding_fuzzing' branch which
145       is not merged into the master branch yet).  This bug could be triggered
146       in fwknopd with a malicious SPA payload, but only when GnuPG is used and
147       when an attacker is in possession of valid GnuPG keys listed in the
148       access.conf file. In other words, an arbitrary attacker cannot trigger
149       this bug. Further, when Rijndael is used for SPA packet encryption, this
150       bug cannot be triggered at all due to an length/format check towards the
151       end of _rijndael_decrypt(). This bug was introduced in the 2.6.1
152       development series, and no previous versions of fwknop are affected.
154 fwknop-2.6.1 (04/12/2014):
155     - Updated copyright and authorship information to include a standard
156       header which references both the AUTHORS and CREDITS files.  The
157       specific language in this header was created by the Debian legal team at
158       the request of Franck Joncourt.
159     - [server] When GnuPG is used, the default now is to require that incoming
160       SPA packets are signed by a key listed in GPG_REMOTE_ID for each
161       access.conf stanza. In other words, the usage of GPG_REQUIRE_SIG is no
162       longer necessary in order to authenticate SPA packets via the GnuPG
163       signature. Verification of GnuPG signatures can be disabled with a new
164       access.conf variable GPG_DISABLE_SIG, but this is NOT a recommended
165       configuration.
166     - [libfko] Bug fix to correct a memory leak in GnuPG SPA packet handling
167       within the gpg_decrypt() function.  Here is the specific valgrind leak
168       record that enabled the bug to be found (note that the new valgrind
169       suppressions usage was critical for finding this bug among all other
170       libgpgme memory leaks):
172       ==23983== 1,044 bytes in 1 blocks are definitely lost in loss record 7 of 8
173       ==23983==    at 0x4C2C494: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
174       ==23983==    by 0x4E41D3A: gpg_decrypt (fko_encryption.c:422)
175       ==23983==    by 0x4E42520: fko_decrypt_spa_data (fko_encryption.c:626)
176       ==23983==    by 0x1155B0: incoming_spa (incoming_spa.c:519)
177       ==23983==    by 0x1180A7: process_packet (process_packet.c:211)
178       ==23983==    by 0x506D857: ??? (in /usr/lib/x86_64-linux-gnu/libpcap.so.1.4.0)
179       ==23983==    by 0x117865: pcap_capture (pcap_capture.c:270)
180       ==23983==    by 0x10F937: main (fwknopd.c:353)
182     - [libfko] Better SPA packet dumping output to include GnuPG specifics
183       whenever SPA packets are encrypted/authenticated via GnuPG.
184     - [server] Validate SPA packet GnuPG signatures with the libfko
185       fko_gpg_signature_id_match() function instead of server code doing this
186       independently.
187     - [client+server] Add --gpg-exe command line argument and GPG_EXE config
188       variable to ~/.fwknoprc and the access.conf file so that the path to
189       GnuPG can be changed from the default /usr/bin/gpg path.
190     - [libfko] Allow usernames that are compatible with Microsoft guidelines as
191       defined here: http://technet.microsoft.com/en-us/library/bb726984.aspx
192       This allows for greater compatibility between fwknop clients on Windows
193       (for example that may be deployed with Cygwin) and fwknopd on other
194       systems.  This change was suggested by Gerry Reno, and closes Github
195       issue #114.
196     - [client] Minor bug fixes in 'udpraw' mode (normally used for spoofing the
197       SPA source IP) to set a non-zero source port and to properly set the
198       length field of the UDP header.
199     - [test suite] Added valgrind suppressions for gpgme library function
200       calls.
201     - [test suite] Added the ability to run the 'lcov' tool against fwknop
202       when compiled in --enable-profile-coverage mode.  This enabled lots of
203       new tests to be developed for better code coverage.
205 fwknop-2.6.0 (01/12/2014):
206     - (Radostan Riedel) Added an AppArmor policy for fwknopd that is known to
207       work on Debian and Ubuntu systems.  The policy file is available at
208       extras/apparmor/usr.sbin/fwknopd.
209     - [libfko] Nikolay Kolev reported a build issue with Mac OS X Mavericks
210       where local fwknop copies of strlcat() and strlcpy() were conflicting
211       with those that already ship with OS X 10.9. Closes #108 on github.
212     - [libfko] (Franck Joncourt) Consolidated FKO context dumping function into
213       lib/fko_util.c. In addition to adding a shared utility function for
214       printing an FKO context, this change also makes the FKO context output
215       slightly easier to parse by printing each FKO attribute on a single line
216       (this change affected the printing of the final SPA packet data).  The
217       test suite has been updated to account for this change as well.
218     - [libfko] Bug fix to not attempt SPA packet decryption with GnuPG without
219       an fko object with encryption_mode set to FKO_ENC_MODE_ASYMMETRIC.  This
220       bug was caught with valgrind validation against the perl FKO extension
221       together with the set of SPA fuzzing packets in
222       test/fuzzing/fuzzing_spa_packets.  Note that this bug cannot be
223       triggered via fwknopd because additional checks are made within fwknopd
224       itself to force FKO_ENC_MODE_ASYMMETRIC whenever an access.conf stanza
225       contains GPG key information.  This fix strengthens libfko itself to
226       independently require that the usage of fko objects without GPG key
227       information does not result in attempted GPG decryption operations.
228       Hence this fix applies mostly to third party usage of libfko - i.e.
229       stock installations of fwknopd are not affected.  As always, it is
230       recommended to use HMAC authenticated encryption whenever possible even
231       for GPG modes since this also provides a work around even for libfko
232       prior to this fix.
233     - [Android] (Gerry Reno) Updated the Android client to be compatible with
234       Android-4.4.
235     - [Android] Added HMAC support (currently optional).
236     - [server] Updated pcap_dispatch() default packet count from zero to 100.
237       This change was made to ensure backwards compatibility with older
238       versions of libpcap per the pcap_dispatch() man page, and also because
239       some of a report from Les Aker of an unexpected crash on Arch Linux with
240       libpcap-1.5.1 that is fixed by this change (closes #110).
241     - [server] Bug fix for SPA NAT modes on iptables firewalls to ensure that
242       custom fwknop chains are re-created if they get deleted out from under
243       the running fwknopd instance.
244     - [server] Added FORCE_SNAT to the access.conf file so that per-access
245       stanza SNAT criteria can be specified for SPA access.
246     - [test suite] added --gdb-test to allow a previously executed fwknop
247       or fwknopd command to be sent through gdb with the same command line
248       args as the test suite used.  This is for convenience to rapidly allow
249       gdb to be launched when investigating fwknop/fwknopd problems.
250     - [client] (Franck Joncourt) Added --stanza-list argument to show the
251       stanza names from ~/.fwknoprc.
252     - [libfko] (Hank Leininger) Contributed a patch to greatly extend libfko
253       error code descriptions at various places in order to give much better
254       information on what certain error conditions mean.  Closes #98.
255     - [test suite] Added the ability to run perl FKO module built-in tests in
256       the t/ directory underneath the CPAN Test::Valgrind module.  This allows
257       valgrind memory checks to be applied to libfko functions via the perl
258       FKO module (and hence rapid prototyping can be combined with memory leak
259       detection).  A check is made to see whether the Test::Valgrind module
260       has been installed, and --enable-valgrind is also required (or
261       --enable-all) on the test-fwknop.pl command line.
263 fwknop-2.5.1 (07/25/2013):
264     - [client] Bug fix to reset terminal setting to orignal values after
265       entering keys via stdin.
266     - [server] Bug fix to not print pid file existence warning.  Reported by
267       Ilya Tumaykin to the fwknop list.
268     - [test suite] Bug fix to not run an iptables Rijndael HMAC test on
269       non-Linux systems.
271 fwknop-2.5 (07/19/2013):
272     - ***** IMPORTANT *****:  If you are upgrading from an older version of
273       fwknop, you will want to read the "Backwards Compatibility" section of
274       the fwknop tutorial available here:
276       http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html#backwards-compatibility
278       In summary, it is possible to have a mixed environment of fwknop-2.5
279       clients and/or servers with older client and/or servers, but this
280       requires some configuration in order to work properly.  On the server
281       side, the directive "ENCRYPTION_MODE legacy" will need to be added to
282       every access.conf stanza that uses Rijndael and that needs to support
283       SPA packets from pre-2.5 clients.  On the client side when generating
284       Rijndael-encrypted SPA packets for a pre-2.5 server, the command line
285       argument "-M legacy" will need to be given.  GnuPG operations are not
286       affected however and don't require the above steps whenever the new HMAC
287       authenticated encryption feature (offered in fwknop-2.5) is not used.
288     - Major release of new functionality - HMAC authenticated encryption
289       support in the encrypt-then-authenticate model for SPA communications.
290       Supported HMAC digests include MD5, SHA1, SHA256, SHA384, and SHA512.
291       The default is HMAC-SHA256 when an HMAC is used.  The HMAC mode is
292       supported for both Rijndael and GPG encrypted SPA packet data, and
293       provides a significant security benefit for the fwknopd server since the
294       HMAC verification is more simplisitic than decryption operations.  This
295       is particularly true for GPG.  Beyond this, HMAC authenticated
296       encryption in the encrypt-then-authenticate mode does not suffer from
297       things like CBC-mode padding oracle attacks (see the Vaudenay attack and
298       the more recent "Lucky 13" attack against SSL).  HMAC verifications are
299       performed with a constant time comparison function.
300     - [libfko] Significant bug fix to honor the full encryption key length for
301       user-supplied Rijndael keys > 16 bytes long.  Previous to this fix,
302       only the first 16 bytes of a key were actually used in the encryption/
303       decryption process even if the supplied key was longer.  The result was
304       a weakening of expected security for users that had keys > 16 bytes.
305       Note that "passphrase" is perhaps technically a better word for
306       "user-supplied key" in this context since the actual key is generated
307       with the PBKDF1 key derivation algorithm.  This issue was reported by
308       Michael T. Dean.  Closes issue #18 on github.
309     - [libfko] Added the ability to maintain backwards compatibility with the
310       now deprecated "zero padding" key derivation strategy in AES mode that
311       was a hold over from the old perl fwknop implementation.  This is NOT
312       compliant with PBKDF1 and is only brought forward into fwknop-2.5 for
313       backwards compatibility.  Future versions of fwknop will remove this
314       code altogether since PBKDF1 is now implemented.
315     - [libfko+server] Ensure that all HMAC, digest, and other comparisons are
316       done via a dedicated constant_runtime_cmp() function so that a potential
317       attacker cannot gain any information about fail/success just by mounting
318       a timing attack.  This function always compares two buffers from
319       beginning to end regardless of whether a difference is detected early on
320       in the comparison, and this strategy mirrors changes in SSL libraries
321       such as yaSSL to protect against potential timing attacks.  This change
322       fixes #85 on github which was reported by Ryman.
323     - [test suite] Added --enable-openssl-checks to send all SPA packets
324       encrypted via libfko through the OpenSSL library to ensure that the
325       libfko usage of AES is always compatible with OpenSSL.  This ensures
326       that the fwknop usage of AES is properly implemented as verified by the
327       OpenSSL library, which is a frequently audited high profile crypto
328       engine.  If a vulnerability is discovered in OpenSSL and a change is
329       made, then the --enable-openssl-checks mode will allow the test suite to
330       discover this in a automated fashion for fwknop.
331     - The fwknop project is using Coverity for source code validation (in
332       addition to other tools such as the CLANG static analyzer).  Many bugs
333       have been fixed in this release that were discovered by Coverity.  These
334       bugs spanned multiple classes of problems from memory leaks, improper use
335       of sizeof(), potential double-free conditions, and more.  Full details on
336       these fixes are available in the git history.  Any open source project
337       that is written in a language supported by Coverity would benefit highly
338       from participating.  As of the 2.5 release, fwknop has a Coverity defect
339       score of zero.
340     - [test suite] Changed how the test suite interacts with the fwknop client
341       and server by looking for indications that SPA packets are actually
342       received.  This is done by first waiting for 'main event loop' in fwknopd
343       log output to ensure that fwknopd is ready to receive packets, sending
344       the SPA packet(s), and then watching for for 'SPA Packet from IP' in
345       fwknopd output.  This is an improvement over the previous strategy that
346       was only based on timeout values since it works identically regardless of
347       whether fwknop is being run under valgrind or when the test suite is run
348       on an embedded system with very limited resources.  Another check is run
349       for fwknopd receiving the SIGTERM signal to shutdown via 'fwknopd -K',
350       and that failing, the test suite manually kills the process (though this
351       should be rarely needed).  This change was implemented based on
352       discussions with George Herlin.
353     - (Franck Joncourt) Added support for resolving hostnames in various NAT
354       modes (fixes issue #43 in github).
355     - (Franck Joncourt) Bug fix in the client for resolving hostnames in '-P
356       icmp' mode (fixes issue #64).
357     - (Franck Joncourt) Added support for saving fwknop client command line
358       arguments via a new options --save-rc-stanza.
359     - (Franck Joncourt) Added log module support for the client.
360     - [client] Bug fix for --nat-rand-port mode to ensure that the port to be
361       NAT'd is properly defined so that the fwknopd server will NAT
362       connnections to this port instead of applying the NAT operation to the
363       port that is to be accessed via -A.  This change also prints the
364       randomly assigned port to stdout regardless of whether --verbose mode is
365       used (since if not then the user will have no idea which port is
366       actually going to be NAT'd on the fwknopd side).
367     - (Vlad Glagolev) Submitted an OpenBSD port for fwknop-2.0.4, and this has
368       been checked in under the extras/openbsd/fwknop-2.0.4 directory.
369     - (Shawn Wilson) Added better SPA source IP logging for various fwknopd
370       logging messages.  This helps to make it more clear why certain SPA
371       packets are rejected from some systems.
372     - [client] Added --get-hmac-key to allow HMAC keys to be acquried from the
373       specified file similarly to the --get-key option.  This is a convenience
374       only, and the fwknop rc file feature should be used instead since it is
375       far more powerful.
377 fwknop-2.0.4 (12/09/2012):
378     - [client] Misc fixes and the addition of save_args and last command 
379       (.fwknop.last) support on the Windows platform.
380     - [client] Fixed bug in username determination code where a valid value
381       could be overrwritten in certain circumstances.
382     - [server] Added upstart config at extras/upstart/fwknop.conf.  This
383       allows the fwknopd to easily be managed with upstart via commands like
384       "service fwknop start" and "service fwknop stop".
385     - [server] (Vlad Glagolev) Submitted a patch to fix ndbm/gdbm usage when
386       --disable-file-cache is used for the autoconf configure script.  This
387       functionality was broken in be4193d734850fe60f14a26b547525ea0b9ce1e9
388       through improper handling of #define macros from --disable-file-cache.
389     - [server] (Vlad Glagolev) Submitted a patch to fix command exec mode
390       under SPA message type validity test.  Support for command exec mode was
391       also added to the test suite.
392     - (Vlad Glagolev) Submitted an OpenBSD port for fwknop-2.0.3, and this has
393       been checked in under the extras/openbsd/ directory.
394     - [server] Bug fix to allow GPG_ALLOW_NO_PW to result in not also having
395       to specify a Rijndael key.
396     - [Android] Added new .properties files to allow the fwknop client to
397       build and function properly on the latest Android release (4.1.2).
398     - [client] Added '-P udpraw' to allow the client to send SPA packets over
399       UDP with a spoofed source IP address.  This is in addition to the
400       original 'tcpraw' and 'icmp' protocols that also support a spoofed
401       source IP.
402     - [libfko] Bug fix to check b64_decode() return value to ensure that
403       non-base64 encoded data is never used.  Even though other validation
404       routines checked decoded results, it is important to discard invalid
405       data as early as possible.  Note too that such invalid data would only
406       be provided to b64_decode() after proper decryption, so the client must
407       provide authentic SPA data.
408     - [libfko] Added validation of NAT access strings in the various NAT
409       modes.
410     - [libfko] Restricted usernames embedded in SPA packets to be
411       alpha-numeric along with "-" chars.
412     - [client] (Franck Joncourt) Contributed a patch to allow the fwknop
413       client to be stopped during the password entry prompt with Ctrl-C before
414       any SPA packet is sent on the wire.
415     - [client+server] Applied patch from Franck Joncourt to remove unnecessary
416       chmod() call when creating client rc file and server replay cache file.
417       The permissions are now set appropriately via open(), and at the same
418       time this patch fixes a potential race condition since the previous code
419       used fopen() followed by chmod().
420     - [server] Bug fix to accept SPA packets over ICMP if the fwknop client
421       is executed with '-P icmp' and the user has the required privileges.
422     - [test suite] Applied patch from Franck Joncourt to have the perl FKO
423       module link against libfko in the local directory (if it exists) so that
424       it doesn't have to have libfko completely installed in the /usr/lib/
425       directory.  This allows the test suite to run FKO tests without
426       installing libfko.
427     - [test suite] Significant update to include a set of fuzzing SPA packets
428       that are built using a patched version of libfko.  These packets are
429       located in the test/fuzzing/bogus_spa_packets file, and are designed to
430       ensure proper validation of SPA packet data.  This validation is
431       performed in --enable-perl-module-checks mode via the perl FKO module.
432     - [client] Added --icmp-type and --icmp-code arguments so the user can
433       control the icmp type/code combination for spoofed SPA packets ('-P
434       icmp') mode.
435     - [client] Updated default TTL value to 64 for spoofed SPA packets.  This
436       is closer to more OS default TTL values than the previous 255.
437     - Updated build CFLAGS and LDFLAGS to conform to the Debian
438       hardening-includes file for PIE support (e.g. '-fPIE' for CFLAGS and
439       '-fPIE -pie' for LDFLAGS).
440     - [test suite] For GnuPG tests that require a passphrase associated with
441       a gpg key, added a pinentry check to see if the local gpg engine
442       requires it.  If so, the gpg test that require a key are excluded since.
443     - [server] Added a new '--pcap-file <file>' option to allow pcap files to
444       be processed directly by fwknopd instead of sniffing an interface.  This
445       feature is mostly intended for debugging purposes.
446     - [server] Added chain_exists() check to SPA rule creation so that if any
447       of the fwknop chains are deleted out from under fwknopd they will be
448       recreated on the fly.  This mitigates scenarios where fwknopd might be
449       started before a system level firewall policy is applied due to init
450       script ordering, or if an iptables policy is re-applied without
451       restarting fwknopd.
453 fwknop-2.0.3 (09/03/2012):
454     - [server] Fernando Arnaboldi from IOActive found several DoS/code
455       execution vulnerabilities for malicious fwknop clients that manage to
456       get past the authentication stage (so a such a client must be in
457       possession of a valid access.conf encryption key).  These vulnerabilities
458       manifested themselves in the handling of malformed access requests, and
459       both the fwknopd server code along with libfko now perform stronger input
460       validation of access request data.  These vulnerabilities affect
461       pre-2.0.3 fwknop releases.
462     - [server] Fernando Arnaboldi from IOActive found a condition in which
463       the server did not properly validate allow IP addresses from malicious
464       authenticated clients.  This has been fixed with stronger allow IP
465       validation.
466     - [client+server] Fernando Arnaboldi from IOActive found that strict
467       filesystem permissions for various fwknop files are not verified.  Added
468       warnings whenever permissions are not strict enough, and ensured that
469       files created by the fwknop client and server are only set to user
470       read/write.
471     - [client] Fernando Arnaboldi from IOActive found a local buffer overflow
472       in --last processing with a maliciously constructed ~/.fwknop.run file.
473       This has been fixed with proper validation of .fwknop.run arguments.
474     - [server] Fernando Arnaboldi from IOActive found several conditions in
475       which the server did not properly throw out maliciously constructed
476       variables in the access.conf file.  This has been fixed along with new
477       fuzzing tests in the test suite.
478     - [test suite] Added a new fuzzing capability to ensure proper server-side
479       input validation.  Fuzzing data is constructed with modified fwknop
480       client code that is designed to emulate malicious behavior.
481     - Fixed RPM builds by including the $(DESTDIR) prefix for uninstall-local
482       and install-exec-hook stages in Makefile.am.
484 fwknop-2.0.2 (08/18/2012):
485     - [server] For GPG mode, added a new access.conf variable
486       "GPG_ALLOW_NO_PW" to make it possible to leverage a server-side GPG key
487       pair that has no associated password.  This comes in handy when a system
488       requires the user to leverage gpg-agent / pinentry which can present a
489       problem in automated environments as required by the fwknopd server.
490       Now, it might seem like a problem to remove the passphrase from a GPG
491       key pair, but it's important to note that simply doing this is little
492       worse than storing the passphrase in the clear on disk anyway in the
493       access.conf file.  Further, this link helps provide additional detail:
495       http://www.gnupg.org/faq/GnuPG-FAQ.html#how-can-i-use-gnupg-in-an-automated-environment
497     - [client] In IP resolution mode (-R) changed HTTP connection type to
498       'close' since there is no need for connection persistence, and indeed the
499       client expects to just get the IP and the connection to be closed.
500       Jonathan Schulz submitted a patch for this.
501     - [client] Bug fix to ensure that all data is read via recv() from a
502       remote webserver IP resolution mode (-R).  Previously IP resolution
503       could fail if HTTP headers were transferred separately from the data
504       (for whatever reason).  Jonathan Schulz submitted a patch for this.
505     - [client] Added backup check against a cipherdyne.com 'myip' cgi instance
506       in -R mode if the normal check against cipherdyne.org fails.
507     - [server] Bug fix to implement FLUSH_IPT_AT_INIT and FLUSH_IPT_AT_EXIT
508       functionality.  These are enabled by default, and now iptables rules
509       added by fwknopd can be made persistent by setting these variables to
510       "N" in the fwknopd.conf file (this is not a recommended setting
511       however).
512       [server] Added FLUSH_IPFW_AT_INIT and FLUSH_IPFW_AT_EXIT for ipfw
513       firewalls to emulate the corresponding functionality that is implemented
514       for iptables firewalls.  This was suggested by Jonathan Schulz.
515     - [server] Replay attack bug fix to ensure that an attacker cannot force a
516       replay attack by intercepting an SPA packet and the replaying it with the
517       base64 version of "Salted__" (for Rijndael) or the "hQ" prefix (for
518       GnuPG).  This is an important fix.  The following comment was added into
519       the fwknopd code:
521       /* Ignore any SPA packets that contain the Rijndael or GnuPG prefixes
522        * since an attacker might have tacked them on to a previously seen
523        * SPA packet in an attempt to get past the replay check.  And, we're
524        * no worse off since a legitimate SPA packet that happens to include
525        * a prefix after the outer one is stripped off won't decrypt properly
526        * anyway because libfko would not add a new one.
527       */
529     - [server] Fixed a memory leak bug in the replay attack detection code.
530       The leak was found with the test suite in --enable-valgrind mode, and
531       here is the valgrind trace that exposed it:
533       44 bytes in 1 blocks are definitely lost in loss record 2 of 2
534          at 0x482BE68: malloc (in
535          /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
536          by 0x490EA50: strdup (strdup.c:43)
537          by 0x10CD69: incoming_spa (incoming_spa.c:162)
538          by 0x10E000: process_packet (process_packet.c:200)
539          by 0x4862E63: ??? (in /usr/lib/i386-linux-gnu/libpcap.so.1.1.1)
540          by 0x4865667: pcap_dispatch (in /usr/lib/i386-linux-gnu/libpcap.so.1.1.1)
541          by 0x10DABF: pcap_capture (pcap_capture.c:226)
542          by 0x10A798: main (fwknopd.c:299)
544     - [test suite] Added GPG tests for keyrings that have no associated
545       passphrases.
546     - [server] Implemented a new check to ensure that the iptables 'comment'
547       match exists to ensure the proper environment for fwknopd operations.
548       This check is controlled by the new ENABLE_IPT_COMMENT_CHECK variable,
549       and was suggested by Hank Leininger.
550     - [server] 'make install' fix to ensure restrictive permissions on the
551       /etc/fwknop/ directory and /etc/fwknop/* files.  Also updated the 'make
552       install' step to not overwrite any existing config files in /etc/fwknop/
553       and instead install new copies from the source tree at
554       /etc/fwknop/fwknopd.conf.inst and /etc/fwknop/access.conf.inst
556 fwknop-2.0.1 (07/23/2012):
557     - [server] Bug fix where the same encryption key used for two stanzas in
558       the access.conf file would result in access requests that matched the
559       second stanza to always be treated as a replay attack.  This has been
560       fixed for the fwknop-2.0.1 release, and was reported by Andy Rowland. Now
561       the fwknopd server computes the SHA256 digest of raw incoming payload
562       data before decryption, and compares this against all previous hashes.
563       Previous to this commit, fwknopd would add a new hash to the replay
564       digest list right after the first access.conf stanza match, so when SPA
565       packet data matched the second access.conf stanza a matching replay
566       digest would already be there.
567     - [server] Updated PCAP_LOOP_SLEEP default to 1/10th of a second (in
568       microseconds).  This was supposed to be the default anyway, but C
569       Anthony Risinger reported a bug where fwknopd was consuming more
570       resources than necessary, and the cause was PCAP_LOOP_SLEEP set by
571       default to 1/100th of a second - this has been fixed.
572     - [libfko] Added SPA message validation calls to fko decoding routines to
573       help ensure that SPA messages conform to expected values.
574     - Bug fix for PF firewalls: updated the PF anchor check to not rely on
575       listing the PF policy - fwknopd now uses 'pfctl -s Anchor' instead.
576     - [test suite] Added parsing of valgrind output to produce a listing of
577       functions that have been flagged - this assists in the development
578       process to ensure that fwknop is not leaking memory.
579     - [test suite] Bug fix on Mac OS X systems to account for libfko.dylib path
580       instead of libfko.so.  This fixes the existence check for libfko.
581     - [test suite] Added tests for --nat-local mode.
582     - [client] Fixed several minor memory leaks caught by valgrind.
583     - [libfko] Minor gcc warning fix: fko_decode.c:43:17: warning: variable
584       'edata_size' set but not used [-Wunused-but-set-variable].
585     - Updated fwknopd init script for Debian systems (contributed by Franck
586       Joncourt).
588 fwknop-2.0 (01/02/2012):
589     - This is the first production release that has been completely re-written
590       in C.  This brings Single Packet Authorization functionality to all sorts
591       of machines from embedded devices to large systems.  iptables, ipfw, and
592       pf firewalls are supported by the fwknopd daemon, and the fwknop client
593       is known to work on most major *NIX environments, the iPhone and Android
594       operating systems, and Cygwin under Windows.
595     - Added FORCE_NAT mode to the access.conf file so that for any valid SPA
596       packet, force the requested connection to be NAT'd through to the
597       specified (usually internal) IP and port value.  This is useful if there
598       are multiple internal systems running a service such as SSHD, and you
599       want to give transparent access to only one internal system for each
600       stanza in the access.conf file.  This way, multiple external users can
601       each directly access only one internal system per SPA key.
602     - Added two new access.conf variables are added "ACCESS_EXPIRE" and
603       "ACCESS_EXPIRE_EPOCH" to allow access stanzas to be expired without
604       having to modify the access.conf file and restart fwknopd.
605     - Added a new feature to allow an access stanza that matches the SPA source
606       address to not automatically short circuit other stanzas if there is an
607       error (such as when there are multiple encryption keys involved and an
608       incoming SPA packet is meant for, say, the second stanza and the first
609       therefore doesn't allow proper decryption).
610     - Bug fix to exclude SPA packets with timestamps in the future that are too
611       great (old packets were properly excluded already).
612     - Bug fix to honor the fwknop client --time-offset-plus and
613       --time-offset-minus options
614     - Added DNAT mode tests, minor memory leak fix in NAT mode, added fwknopd
615       check for ENABLE_IPT_FORWARDING variable before attempting NAT access.
616     - [test suite] Added --diff mode to compare results from one execution to
617       the next.