Merge https://github.com/BetterCrypto/Applied-Crypto-Hardening
[ach-master.git] / src / practical_settings / vpn.tex
1 % ---------------------------------------------------------------------- 
2 \subsection{IPsec}
3 \label{section:IPSECgeneral}
4
5 % ciphersuites current 2013-12-09
6
7 \subsubsection{Settings}
8
9 \paragraph{Assumptions:}
10 We assume the use of IKE (v1 or v2) and ESP for this document.
11
12 \paragraph{Authentication:}
13 IPSEC authentication should optimally be performed via RSA signatures,
14 with a key size of 2048 bits or more. Configuring only the trusted CA
15 that issued the peer certificate provides for additional protection
16 against fake certificates.
17
18 If you need to use Pre-Shared Key authentication:
19
20 \begin{enumerate}
21   \item Choose a \textbf{random}, \textbf{long enough} PSK (see below)
22   \item Use a \textbf{separate} PSK for any IPSEC connection
23   \item Change the PSKs regularly
24 \end{enumerate}
25
26 The size of the PSK should not be shorter than the output size of
27 the hash algorithm used in IKE\footnote{It is used in a HMAC, see
28 RFC2104~\cite{rfc2104} and the discussion starting
29 in \url{http://www.vpnc.org/ietf-ipsec/02.ipsec/msg00268.html}.}.
30
31 For a key composed of upper- and lowercase letters, numbers, and two
32 additional symbols\footnote{64 possible values = 6 bits},
33 table~\ref{tab:IPSEC_psk_len} gives the minimum lengths in characters.
34
35
36 \ctable[%
37 caption={PSK lengths},
38 label=tab:IPSEC_psk_len,
39 ]{lc}{}{
40 \FL    IKE Hash & PSK length
41 \ML    SHA256 & 43
42 \NN    SHA384 & 64
43 \NN    SHA512 & 86
44 \LL}
45
46 \paragraph{Cryptographic Suites:}
47 IPSEC Cryptographic Suites are pre-defined settings for all the items
48 of a configuration; they try to provide a balanced security level and
49 make setting up VPNs easier.
50 \footnote{RFC6379~\cite{rfc6379}, RFC4308~\cite{rfc4308}}
51
52 When using any of those suites, make sure to enable ``Perfect Forward
53 Secrecy`` for Phase 2, as this is not specified in the suites. The
54 equivalents to the recommended ciphers suites in section
55 \ref{section:recommendedciphers} are shown in
56 table~\ref{tab:IPSEC_suites}.
57
58 \ctable[%
59 caption={IPSEC Cryptographic Suites},
60 label=tab:IPSEC_suites,
61 ]{>{\raggedright}p{3cm}>{\raggedright}p{3cm}l}{}{
62 \FL    Configuration A & Configuration B & Notes
63 \ML
64     \texttt{Suite-B-GCM-256} &
65     \texttt{Suite-B-GCM-128} \newline \texttt{VPN-B} &
66     All Suite-B variants use NIST elliptic curves
67 \LL}
68 \paragraph{IKE or Phase 1:}
69
70 Alternatively to the pre-defined cipher suites, you can define your
71 own, as described in this and the next section.
72
73 IKE or Phase 1 is the mutual authentication and key exchange phase;
74 table~\ref{tab:IPSEC_ph1_params} shows the parameters.
75
76 Use only ``main mode``, as ``aggressive mode`` has known security
77 vulnerabilities \footnote{\url{http://ikecrack.sourceforge.net/}}.
78
79 \ctable[%
80 caption={IPSEC Phase 1 parameters},
81 label=tab:IPSEC_ph1_params,
82 ]{lll}{}{%
83 \FL    & Configuration A & Configuration B
84 \ML    Mode & Main Mode & Main Mode
85 \NN    Encryption & AES-256 & AES, CAMELLIA (-256 or -128)
86 \NN    Hash & SHA2-* & SHA2-*, SHA1
87 \NN    DH Group & Group 14-18 & Group 14-18
88 %\NN    Lifetime & \todo{need recommendations; 1 day seems to be common practice} &
89 \LL}
90
91 \paragraph{ESP or Phase 2:}
92 ESP or Phase 2 is where the actual data are protected; recommended
93 parameters are shown in table \ref{tab:IPSEC_ph2_params}.
94
95 \ctable[%
96 caption={IPSEC Phase 2 parameters},
97 label=tab:IPSEC_ph2_params,
98 ]{l>{\raggedright}p{4.5cm}>{\raggedright}p{6cm}}{}{%
99 \FL    & Configuration A & Configuration B
100 \ML    Perfect Forward Secrecy & \yes & \yes
101 \NN    Encryption & %
102     \mbox{AES-GCM-16}, \mbox{AES-CTR}, \mbox{AES-CCM-16}, \mbox{AES-256} &%
103     \mbox{AES-GCM-16}, \mbox{AES-CTR}, \mbox{AES-CCM-16}, \mbox{AES-256}, \mbox{CAMELLIA-256}, \mbox{AES-128}, \mbox{CAMELLIA-128}
104 \NN    Hash & SHA2-* (or none for AEAD) & SHA2-*, SHA1 (or none for AEAD)
105 \NN    DH Group & Same as Phase 1 & Same as Phase 1
106 %\NN    Lifetime & \todo{need recommendations; 1-8 hours is common} &
107 \LL}
108
109 \subsubsection{References}
110 \begin{itemize*}
111   \item ``A Cryptographic Evaluation of IPsec'', Niels Ferguson and Bruce
112     Schneier: \url{https://www.schneier.com/paper-ipsec.pdf}
113 \end{itemize*}
114
115
116 %---------------------------------------------------------------------- 
117 \subsection{Check Point FireWall-1}
118
119 \subsubsection{Tested with Versions}
120 \begin{itemize*}
121   \item R77 (should work with any currently supported version)
122 \end{itemize*}
123
124 \subsubsection{Settings}
125 Please see section \ref{section:IPSECgeneral} for guidance on
126 parameter choice. In this section, we will configure a strong setup
127 according to ``Configuration A''.
128
129 This is based on the concept of a ``VPN Community'', which has all the
130 settings for the gateways that are included in that community.
131 Communities can be found in the ``IPSEC VPN'' tab of SmartDashboard.
132
133 \begin{figure}[p]
134   \centering
135   \includegraphics[width=0.592\textwidth]{img/checkpoint_1.png}
136   \caption{VPN Community encryption properties}
137   \label{fig:checkpoint_1}
138 \end{figure}
139
140 Either chose one of the encryption suites in the properties dialog
141 (figure \ref{fig:checkpoint_1}), or proceed to
142 ``Custom Encryption...'', where you can set encryption and hash for
143 Phase 1 and 2 (figure \ref{fig:checkpoint_2}).
144
145 \begin{figure}[p]
146   \centering
147   \includegraphics[width=0.411\textwidth]{img/checkpoint_2.png}
148   \caption{Custom Encryption Suite Properties}
149   \label{fig:checkpoint_2}
150 \end{figure}
151
152 The Diffie-Hellman groups and Perfect Forward Secrecy Settings can be
153 found under ``Advanced Settings'' / ``Advanced VPN Properties''
154 (figure \ref{fig:checkpoint_3}).
155
156 \begin{figure}[p]
157   \centering
158   \includegraphics[width=0.589\textwidth]{img/checkpoint_3.png}
159   \caption{Advanced VPN Properties}
160   \label{fig:checkpoint_3}
161 \end{figure}
162
163
164 \subsubsection{Additional settings}
165 For remote Dynamic IP Gateways, the settings are not taken from the
166 community, but set in the ``Global Properties'' dialog under ``Remote
167 Access'' / ``VPN Authentication and Encryption''. Via the ``Edit...''
168 button, you can configure sets of algorithms that all gateways support
169 (figure \ref{fig:checkpoint_4}).
170
171 \begin{figure}[p]
172   \centering
173   \includegraphics[width=0.474\textwidth]{img/checkpoint_4.png}
174   \caption{Remote Access Encryption Properties}
175   \label{fig:checkpoint_4}
176 \end{figure}
177
178 Please note that these settings restrict the available algorithms for
179 \textbf{all} gateways, and also influence the VPN client connections.
180
181 %\subsubsection{Justification for special settings (if needed)}
182
183 %\subsubsection{Limitations}
184
185 \subsubsection{References}
186 \begin{itemize*}
187   \item Check Point \href{https://sc1.checkpoint.com/documents/R77/CP_R77_VPN_AdminGuide/html_frameset.htm}{VPN R77 Administration Guide} (may require a UserCenter account to access)
188 \end{itemize*}
189
190 %\subsubsection{How to test}
191
192 %% cipherstrings current 2013-12-09
193 % ---------------------------------------------------------------------- 
194 \subsection{OpenVPN}
195
196 \subsubsection{Tested with Versions}
197 \begin{itemize*}
198   \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
199   \item OpenVPN 2.2.1 from Debian Wheezy linked against openssl
200     (libssl.so.1.0.0) 
201   \item OpenVPN 2.3.2 for Windows
202 \end{itemize*}
203
204 \subsubsection{Settings}
205
206 \paragraph{General}
207 We describe a configuration with certificate-based authentication; see
208 below for details on the \verb|easyrsa| tool to help you with that.
209
210 OpenVPN uses TLS only for authentication and key exchange. The
211 bulk traffic is then encrypted and authenticated with the OpenVPN
212 protocol using those keys.
213
214 Note that while the \verb|tls-cipher| option takes a list of ciphers
215 that is then negotiated as usual with TLS, the \verb|cipher|
216 and \verb|auth| options both take a single argument that must match on
217 client and server.
218
219 \paragraph{Server Configuration}
220 ~\\
221 % the cipherlist here is config B without the ECDHE strings, because
222 % it must fit in 256 bytes...
223 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
224 \configfile{server.conf}{248-250}{Cipher configuration for OpenVPN (Server)}
225
226 \paragraph{Client Configuration}
227 Client and server have to use compatible configurations, otherwise they can't communicate.
228 The \verb|cipher| and \verb|auth| directives have to be identical.
229
230 % the cipherlist here is config B without the ECDHE strings, because
231 % it must fit in 256 bytes...
232 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
233 \configfile{client.conf}{44-45,115-121}{Cipher and TLS configuration for OpenVPN (Server)}
234
235 \subsubsection{Justification for special settings}
236 OpenVPN 2.3.1 changed the values that the \verb|tls-cipher| option
237 expects from OpenSSL to IANA cipher names. That means from that
238 version on you will get ``Deprecated TLS cipher name'' warnings for
239 the configurations above. You cannot use the selection strings from
240 section \ref{section:recommendedciphers} directly from 2.3.1 on, which
241 is why we give an explicit cipher list here.
242
243 In addition, there is a 256 character limit on configuration file line
244 lengths; that limits the size of cipher suites, so we dropped all
245 ECDHE suites.
246
247 The configuration shown above is compatible with all tested versions.
248
249
250 \subsubsection{References}
251 \begin{itemize*}
252   \item OpenVPN Documentation: \emph{Security Overview} \url{https://openvpn.net/index.php/open-source/documentation/security-overview.html}
253 \end{itemize*}
254
255 %\subsubsection{How to test}
256
257
258 \subsubsection{Additional settings}
259
260 \paragraph{Key renegotiation interval}
261 The default for renegotiation of encryption keys is one hour
262 (\verb|reneg-sec 3600|). If you
263 transfer huge amounts of data over your tunnel, you might consider
264 configuring a shorter interval, or switch to a byte- or packet-based
265 interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
266
267 \paragraph{Fixing ``easy-rsa''}
268 When installing an OpenVPN server instance, you are probably using
269 \emph{easy-rsa} to generate keys and certificates.
270 The file \verb|vars| in the easyrsa installation directory has a
271 number of settings that should be changed to secure values:
272
273 \configfile{vars}{53-53,56-56,59-59}{Sane default values for OpenVPN (easy-rsa)}
274
275
276 This will enhance the security of the key generation by using RSA keys
277 with a length of 4096 bits, and set a lifetime of one year for the
278 server/client certificates and five years for the CA certificate. \textbf{NOTE: 4096 bits is only an example of how to do this with easy-rsa.} See also section \ref{section:keylengths} for a discussion on keylengths.
279
280 In addition, edit the \verb|pkitool| script and replace all occurrences
281 of \verb|sha1| with \verb|sha256|, to sign the certificates with
282 SHA256.
283
284 \subsubsection{Limitations}
285 Note that the ciphersuites shown by \verb|openvpn --show-tls| are \emph{known}, but not necessarily \emph{supported} \footnote{\url{https://community.openvpn.net/openvpn/ticket/304}}.
286
287 Which cipher suite is actually used can be seen in the logs:
288
289 \verb|Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-CAMELLIA256-SHA, 2048 bit RSA|
290
291
292 % ---------------------------------------------------------------------- 
293 \subsection{PPTP}
294
295 PPTP is considered insecure, Microsoft recommends to ``use a more secure VPN
296 tunnel''\footnote{\url{http://technet.microsoft.com/en-us/security/advisory/2743314}}.
297
298 There is a cloud service that cracks the underlying MS-CHAPv2
299 authentication protocol for the price of USD~200\footnote{\url{https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/}},
300 and given the resulting MD4 hash, all PPTP traffic for a user can
301 be decrypted.
302
303 % ---------------------------------------------------------------------- 
304 \subsection{Cisco ASA}
305 The following settings reflect our recommendations as best as possible on the Cisco ASA platform. These are - of course - just settings regarding SSL/TLS (i.e. Cisco AnyConnect) and IPsec. For further security settings regarding this platform the appropriate Cisco guides should be followed.
306
307
308 \subsubsection{Tested with Versions}
309 \begin{itemize*}
310   \item 9.1(3) - X-series model
311 \end{itemize*}
312
313 \subsubsection{Settings}
314 \begin{lstlisting}
315 crypto ipsec ikev2 ipsec-proposal AES-Fallback
316  protocol esp encryption aes-256 aes-192 aes
317  protocol esp integrity sha-512 sha-384 sha-256
318 crypto ipsec ikev2 ipsec-proposal AES-GCM-Fallback
319  protocol esp encryption aes-gcm-256 aes-gcm-192 aes-gcm
320  protocol esp integrity sha-512 sha-384 sha-256
321 crypto ipsec ikev2 ipsec-proposal AES128-GCM
322  protocol esp encryption aes-gcm
323  protocol esp integrity sha-512
324 crypto ipsec ikev2 ipsec-proposal AES192-GCM
325  protocol esp encryption aes-gcm-192
326  protocol esp integrity sha-512
327 crypto ipsec ikev2 ipsec-proposal AES256-GCM
328  protocol esp encryption aes-gcm-256
329  protocol esp integrity sha-512
330 crypto ipsec ikev2 ipsec-proposal AES
331  protocol esp encryption aes
332  protocol esp integrity sha-1 md5
333 crypto ipsec ikev2 ipsec-proposal AES192
334  protocol esp encryption aes-192
335  protocol esp integrity sha-1 md5
336 crypto ipsec ikev2 ipsec-proposal AES256
337  protocol esp encryption aes-256
338  protocol esp integrity sha-1 md5
339 crypto ipsec ikev2 sa-strength-enforcement
340 crypto ipsec security-association pmtu-aging infinite
341 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set pfs group14
342 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set ikev2 ipsec-proposal AES256-GCM AES192-GCM AES128-GCM AES-GCM-Fallback AES-Fallback
343 crypto map Outside-DMZ_map 65535 ipsec-isakmp dynamic SYSTEM_DEFAULT_CRYPTO_MAP
344 crypto map Outside-DMZ_map interface Outside-DMZ
345
346 crypto ikev2 policy 1
347  encryption aes-gcm-256
348  integrity null
349  group 14
350  prf sha512 sha384 sha256 sha
351  lifetime seconds 86400
352 crypto ikev2 policy 2
353  encryption aes-gcm-256 aes-gcm-192 aes-gcm
354  integrity null
355  group 14
356  prf sha512 sha384 sha256 sha
357  lifetime seconds 86400
358 crypto ikev2 policy 3
359  encryption aes-256 aes-192 aes
360  integrity sha512 sha384 sha256
361  group 14
362  prf sha512 sha384 sha256 sha
363  lifetime seconds 86400
364 crypto ikev2 policy 4
365  encryption aes-256 aes-192 aes
366  integrity sha512 sha384 sha256 sha
367  group 14
368  prf sha512 sha384 sha256 sha
369  lifetime seconds 86400
370 crypto ikev2 enable Outside-DMZ client-services port 443
371 crypto ikev2 remote-access trustpoint ASDM_TrustPoint0
372
373 ssl server-version tlsv1-only
374 ssl client-version tlsv1-only
375 ssl encryption dhe-aes256-sha1 dhe-aes128-sha1 aes256-sha1 aes128-sha1
376 ssl trust-point ASDM_TrustPoint0 Outside-DMZ
377 \end{lstlisting}
378
379 \subsubsection{Justification for special settings}
380 New IPsec policies have been defined which do not make use of ciphers that may be cause for concern. Policies have a "Fallback" option to support legacy devices.
381
382 3DES has been completely disabled as such Windows XP AnyConnect Clients will no longer be able to connect.
383
384 The Cisco ASA platform does not currently support RSA Keys above 2048bits.
385
386 Legacy ASA models (e.g. 5505, 5510, 5520, 5540, 5550) do not offer the possibility to configure for SHA256/SHA384/SHA512 nor AES-GCM for IKEv2 proposals.
387
388 \subsubsection{References}
389 \begin{itemize*}
390   \item \url{http://www.cisco.com/en/US/docs/security/asa/roadmap/asaroadmap.html}
391   \item \url{http://www.cisco.com/web/about/security/intelligence/nextgen_crypto.html}
392 \end{itemize*}
393
394 % add any further references or best practice documents here
395
396 %%\subsubsection{How to test}
397 % describe here or point the admin to tools (can be a simple footnote or \ref{} to  the tools section) which help the admin to test his settings.
398
399
400 % ---------------------------------------------------------------------- 
401 \subsection{Openswan}
402
403
404 \subsubsection{Tested with Version}
405 \begin{itemize*}
406   \item Openswan 2.6.39 (Gentoo)
407 \end{itemize*}
408
409 \subsubsection{Settings}
410 NB: The available algorithms depend on your kernel configuration (when using protostack=netkey) and/or
411 build-time options.
412
413 To list the supported algorithms
414 \begin{lstlisting}
415 $ ipsec auto --status | less
416 \end{lstlisting}
417 and look for 'algorithm ESP/IKE' at the beginning.
418
419 \begin{lstlisting}
420 aggrmode=no
421 # ike format: cipher-hash;dhgroup
422 # recommended ciphers:
423 # - aes
424 # recommended hashes:
425 # - sha2_256 with at least 43 byte PSK
426 # - sha2_512 with at least 86 byte PSK
427 # recommended dhgroups:
428 # - modp2048 = DH14
429 # - modp3072 = DH15
430 # - modp4096 = DH16
431 # - modp6144 = DH17
432 # - modp8192 = DH18
433 ike=aes-sha2_256;modp2048
434 type=tunnel
435 phase2=esp
436 # esp format: cipher-hash;dhgroup
437 # recommended ciphers configuration A:
438 # - aes_gcm_c-256 = AES_GCM_16
439 # - aes_ctr-256
440 # - aes_ccm_c-256 = AES_CCM_16
441 # - aes-256 
442 # additional ciphers configuration B:
443 # - camellia-256
444 # - aes-128
445 # - camellia-128
446 # recommended hashes configuration A:
447 # - sha2-256
448 # - sha2-384
449 # - sha2-512
450 # - null (only with GCM/CCM ciphers)
451 # additional hashes configuration B:
452 # - sha1
453 # recommended dhgroups: same as above
454 phase2alg=aes_gcm_c-256-sha2_256;modp2048
455 salifetime=8h
456 pfs=yes
457 auto=ignore
458 \end{lstlisting}
459
460 \subsubsection{How to test}
461 Start the vpn and using
462 \begin{lstlisting}
463 $ ipsec auto --status | less
464 \end{lstlisting}
465 and look for 'IKE algorithms wanted/found' and 'ESP algorithms wanted/loaded'.
466
467 \subsubsection{References}
468 \todo{more specific References}
469 \begin{itemize*}
470   \item \url{https://www.openswan.org/}
471 \end{itemize*}
472
473
474 \subsection{tinc}
475 \subsubsection{Tested with Version}
476 \begin{itemize*}
477   \item tinc 1.0.23 from Gentoo linked against OpenSSL 1.0.1e
478   \item tinc 1.0.23 from Sabayon linked against OpenSSL 1.0.1e
479 \end{itemize*}
480
481 \paragraph*{Defaults}\mbox{}\\
482 tinc uses 2048 bit RSA keys, Blowfish-CBC, and SHA1 as default settings and suggests the usage of CBC mode ciphers.
483 Any key length up to 8196 is supported and it does not need to be a power of two. OpenSSL Ciphers and Digests are supported by tinc.
484
485 \paragraph*{Settings}\mbox{}\\
486 Generate keys with
487 \begin{lstlisting}[breaklines]
488 tincd -n NETNAME -K8196
489 \end{lstlisting}
490 Old keys will not be deleted (but disabled), you have to delete them manually. Add the following lines to your tinc.conf on all machines
491 \configfile{tinc.conf}{3-4}{Cipher and digest selection in tinc}
492
493 \paragraph*{References}\mbox{}\\
494 \begin{itemize}
495 \item tincd(8) man page
496 \item tinc.conf(5) man page
497 \item \href{http://www.tinc-vpn.org/pipermail/tinc/2014-January/003538.html}{tinc mailinglist}
498 \end{itemize}
499
500
501 % ---------------------------------------------------------------------- 
502 %%\subsection{Juniper VPN}
503 %%\todo{write this subsubsection. AK: ask Hannes}
504
505
506
507
508 % ---------------------------------------------------------------------- 
509 %\subsection{L2TP over IPSec}
510 %\todo{write this subsubsection}
511
512
513
514
515 % ---------------------------------------------------------------------- 
516 %\subsection{Racoon}
517 %\todo{write this subsubsection}
518
519