clarify wording
[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 % Attention, only example...
120 Checkpoint firewall is a \gls{firewall} that ....
121
122 \subsubsection{Tested with Versions}
123 \begin{itemize*}
124   \item R77 (should work with any currently supported version)
125 \end{itemize*}
126
127 \subsubsection{Settings}
128 Please see section \ref{section:IPSECgeneral} for guidance on
129 parameter choice. In this section, we will configure a strong setup
130 according to ``Configuration A''.
131
132 This is based on the concept of a ``VPN Community'', which has all the
133 settings for the gateways that are included in that community.
134 Communities can be found in the ``IPSEC VPN'' tab of SmartDashboard.
135
136 \begin{figure}[p]
137   \centering
138   \includegraphics[width=0.592\textwidth]{img/checkpoint_1.png}
139   \caption{VPN Community encryption properties}
140   \label{fig:checkpoint_1}
141 \end{figure}
142
143 Either chose one of the encryption suites in the properties dialog
144 (figure \ref{fig:checkpoint_1}), or proceed to
145 ``Custom Encryption...'', where you can set encryption and hash for
146 Phase 1 and 2 (figure \ref{fig:checkpoint_2}).
147
148 \begin{figure}[p]
149   \centering
150   \includegraphics[width=0.411\textwidth]{img/checkpoint_2.png}
151   \caption{Custom Encryption Suite Properties}
152   \label{fig:checkpoint_2}
153 \end{figure}
154
155 The Diffie-Hellman groups and Perfect Forward Secrecy Settings can be
156 found under ``Advanced Settings'' / ``Advanced VPN Properties''
157 (figure \ref{fig:checkpoint_3}).
158
159 \begin{figure}[p]
160   \centering
161   \includegraphics[width=0.589\textwidth]{img/checkpoint_3.png}
162   \caption{Advanced VPN Properties}
163   \label{fig:checkpoint_3}
164 \end{figure}
165
166
167 \subsubsection{Additional settings}
168 For remote Dynamic IP Gateways, the settings are not taken from the
169 community, but set in the ``Global Properties'' dialog under ``Remote
170 Access'' / ``VPN Authentication and Encryption''. Via the ``Edit...''
171 button, you can configure sets of algorithms that all gateways support
172 (figure \ref{fig:checkpoint_4}).
173
174 \begin{figure}[p]
175   \centering
176   \includegraphics[width=0.474\textwidth]{img/checkpoint_4.png}
177   \caption{Remote Access Encryption Properties}
178   \label{fig:checkpoint_4}
179 \end{figure}
180
181 Please note that these settings restrict the available algorithms for
182 \textbf{all} gateways, and also influence the VPN client connections.
183
184 %\subsubsection{Justification for special settings (if needed)}
185
186 %\subsubsection{Limitations}
187
188 \subsubsection{References}
189 \begin{itemize*}
190   \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)
191 \end{itemize*}
192
193 %\subsubsection{How to test}
194
195 %% cipherstrings current 2013-12-09
196 % ---------------------------------------------------------------------- 
197 \subsection{OpenVPN}
198
199 \subsubsection{Tested with Versions}
200 \begin{itemize*}
201   \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
202   \item OpenVPN 2.2.1 from Debian Wheezy linked against openssl
203     (libssl.so.1.0.0) 
204   \item OpenVPN 2.3.2 for Windows
205 \end{itemize*}
206
207 \subsubsection{Settings}
208
209 \paragraph{General}
210 We describe a configuration with certificate-based authentication; see
211 below for details on the \verb|easyrsa| tool to help you with that.
212
213 OpenVPN uses TLS only for authentication and key exchange. The
214 bulk traffic is then encrypted and authenticated with the OpenVPN
215 protocol using those keys.
216
217 Note that while the \verb|tls-cipher| option takes a list of ciphers
218 that is then negotiated as usual with TLS, the \verb|cipher|
219 and \verb|auth| options both take a single argument that must match on
220 client and server.
221
222 \paragraph{Server Configuration}
223 ~\\
224 % the cipherlist here is config B without the ECDHE strings, because
225 % it must fit in 256 bytes...
226 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
227 \configfile{server.conf}{248-250}{Cipher configuration for OpenVPN (Server)}
228
229 \paragraph{Client Configuration}
230 Client and server have to use compatible configurations, otherwise they can't communicate.
231 The \verb|cipher| and \verb|auth| directives have to be identical.
232
233 % the cipherlist here is config B without the ECDHE strings, because
234 % it must fit in 256 bytes...
235 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
236 \configfile{client.conf}{44-45,115-121}{Cipher and TLS configuration for OpenVPN (Server)}
237
238 \subsubsection{Justification for special settings}
239 OpenVPN 2.3.1 changed the values that the \verb|tls-cipher| option
240 expects from OpenSSL to IANA cipher names. That means from that
241 version on you will get ``Deprecated TLS cipher name'' warnings for
242 the configurations above. You cannot use the selection strings from
243 section \ref{section:recommendedciphers} directly from 2.3.1 on, which
244 is why we give an explicit cipher list here.
245
246 In addition, there is a 256 character limit on configuration file line
247 lengths; that limits the size of cipher suites, so we dropped all
248 ECDHE suites.
249
250 The configuration shown above is compatible with all tested versions.
251
252
253 \subsubsection{References}
254 \begin{itemize*}
255   \item OpenVPN Documentation: \emph{Security Overview} \url{https://openvpn.net/index.php/open-source/documentation/security-overview.html}
256 \end{itemize*}
257
258 %\subsubsection{How to test}
259
260
261 \subsubsection{Additional settings}
262
263 \paragraph{Key renegotiation interval}
264 The default for renegotiation of encryption keys is one hour
265 (\verb|reneg-sec 3600|). If you
266 transfer huge amounts of data over your tunnel, you might consider
267 configuring a shorter interval, or switch to a byte- or packet-based
268 interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
269
270 \paragraph{Fixing ``easy-rsa''}
271 When installing an OpenVPN server instance, you are probably using
272 \emph{easy-rsa} to generate keys and certificates.
273 The file \verb|vars| in the easyrsa installation directory has a
274 number of settings that should be changed to secure values:
275
276 \configfile{vars}{53-53,56-56,59-59}{Sane default values for OpenVPN (easy-rsa)}
277
278
279 This will enhance the security of the key generation by using RSA keys
280 with a length of 4096 bits, and set a lifetime of one year for the
281 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.
282
283 In addition, edit the \verb|pkitool| script and replace all occurrences
284 of \verb|sha1| with \verb|sha256|, to sign the certificates with
285 SHA256.
286
287 \subsubsection{Limitations}
288 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}}.
289
290 Which cipher suite is actually used can be seen in the logs:
291
292 \verb|Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-CAMELLIA256-SHA, 2048 bit RSA|
293
294
295 % ---------------------------------------------------------------------- 
296 \subsection{PPTP}
297
298 PPTP is considered insecure, Microsoft recommends to ``use a more secure VPN
299 tunnel''\footnote{\url{http://technet.microsoft.com/en-us/security/advisory/2743314}}.
300
301 There is a cloud service that cracks the underlying MS-CHAPv2
302 authentication protocol for the price of USD~200\footnote{\url{https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/}},
303 and given the resulting MD4 hash, all PPTP traffic for a user can
304 be decrypted.
305
306 % ---------------------------------------------------------------------- 
307 \subsection{Cisco ASA}
308 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.
309
310
311 \subsubsection{Tested with Versions}
312 \begin{itemize*}
313   \item 9.1(3) - X-series model
314 \end{itemize*}
315
316 \subsubsection{Settings}
317 \begin{lstlisting}
318 crypto ipsec ikev2 ipsec-proposal AES-Fallback
319  protocol esp encryption aes-256 aes-192 aes
320  protocol esp integrity sha-512 sha-384 sha-256
321 crypto ipsec ikev2 ipsec-proposal AES-GCM-Fallback
322  protocol esp encryption aes-gcm-256 aes-gcm-192 aes-gcm
323  protocol esp integrity sha-512 sha-384 sha-256
324 crypto ipsec ikev2 ipsec-proposal AES128-GCM
325  protocol esp encryption aes-gcm
326  protocol esp integrity sha-512
327 crypto ipsec ikev2 ipsec-proposal AES192-GCM
328  protocol esp encryption aes-gcm-192
329  protocol esp integrity sha-512
330 crypto ipsec ikev2 ipsec-proposal AES256-GCM
331  protocol esp encryption aes-gcm-256
332  protocol esp integrity sha-512
333 crypto ipsec ikev2 ipsec-proposal AES
334  protocol esp encryption aes
335  protocol esp integrity sha-1 md5
336 crypto ipsec ikev2 ipsec-proposal AES192
337  protocol esp encryption aes-192
338  protocol esp integrity sha-1 md5
339 crypto ipsec ikev2 ipsec-proposal AES256
340  protocol esp encryption aes-256
341  protocol esp integrity sha-1 md5
342 crypto ipsec ikev2 sa-strength-enforcement
343 crypto ipsec security-association pmtu-aging infinite
344 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set pfs group14
345 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set ikev2 ipsec-proposal AES256-GCM AES192-GCM AES128-GCM AES-GCM-Fallback AES-Fallback
346 crypto map Outside-DMZ_map 65535 ipsec-isakmp dynamic SYSTEM_DEFAULT_CRYPTO_MAP
347 crypto map Outside-DMZ_map interface Outside-DMZ
348
349 crypto ikev2 policy 1
350  encryption aes-gcm-256
351  integrity null
352  group 14
353  prf sha512 sha384 sha256 sha
354  lifetime seconds 86400
355 crypto ikev2 policy 2
356  encryption aes-gcm-256 aes-gcm-192 aes-gcm
357  integrity null
358  group 14
359  prf sha512 sha384 sha256 sha
360  lifetime seconds 86400
361 crypto ikev2 policy 3
362  encryption aes-256 aes-192 aes
363  integrity sha512 sha384 sha256
364  group 14
365  prf sha512 sha384 sha256 sha
366  lifetime seconds 86400
367 crypto ikev2 policy 4
368  encryption aes-256 aes-192 aes
369  integrity sha512 sha384 sha256 sha
370  group 14
371  prf sha512 sha384 sha256 sha
372  lifetime seconds 86400
373 crypto ikev2 enable Outside-DMZ client-services port 443
374 crypto ikev2 remote-access trustpoint ASDM_TrustPoint0
375
376 ssl server-version tlsv1-only
377 ssl client-version tlsv1-only
378 ssl encryption dhe-aes256-sha1 dhe-aes128-sha1 aes256-sha1 aes128-sha1
379 ssl trust-point ASDM_TrustPoint0 Outside-DMZ
380 \end{lstlisting}
381
382 \subsubsection{Justification for special settings}
383 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.
384
385 3DES has been completely disabled as such Windows XP AnyConnect Clients will no longer be able to connect.
386
387 The Cisco ASA platform does not currently support RSA Keys above 2048bits.
388
389 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.
390
391 \subsubsection{References}
392 \begin{itemize*}
393   \item \url{http://www.cisco.com/en/US/docs/security/asa/roadmap/asaroadmap.html}
394   \item \url{http://www.cisco.com/web/about/security/intelligence/nextgen_crypto.html}
395 \end{itemize*}
396
397 % add any further references or best practice documents here
398
399 %%\subsubsection{How to test}
400 % 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.
401
402
403 % ---------------------------------------------------------------------- 
404 \subsection{Openswan}
405
406
407 \subsubsection{Tested with Version}
408 \begin{itemize*}
409   \item Openswan 2.6.39 (Gentoo)
410 \end{itemize*}
411
412 \subsubsection{Settings}
413 NB: The available algorithms depend on your kernel configuration (when using protostack=netkey) and/or
414 build-time options.
415
416 To list the supported algorithms
417 \begin{lstlisting}
418 $ ipsec auto --status | less
419 \end{lstlisting}
420 and look for 'algorithm ESP/IKE' at the beginning.
421
422 \begin{lstlisting}
423 aggrmode=no
424 # ike format: cipher-hash;dhgroup
425 # recommended ciphers:
426 # - aes
427 # recommended hashes:
428 # - sha2_256 with at least 43 byte PSK
429 # - sha2_512 with at least 86 byte PSK
430 # recommended dhgroups:
431 # - modp2048 = DH14
432 # - modp3072 = DH15
433 # - modp4096 = DH16
434 # - modp6144 = DH17
435 # - modp8192 = DH18
436 ike=aes-sha2_256;modp2048
437 type=tunnel
438 phase2=esp
439 # esp format: cipher-hash;dhgroup
440 # recommended ciphers configuration A:
441 # - aes_gcm_c-256 = AES_GCM_16
442 # - aes_ctr-256
443 # - aes_ccm_c-256 = AES_CCM_16
444 # - aes-256 
445 # additional ciphers configuration B:
446 # - camellia-256
447 # - aes-128
448 # - camellia-128
449 # recommended hashes configuration A:
450 # - sha2-256
451 # - sha2-384
452 # - sha2-512
453 # - null (only with GCM/CCM ciphers)
454 # additional hashes configuration B:
455 # - sha1
456 # recommended dhgroups: same as above
457 phase2alg=aes_gcm_c-256-sha2_256;modp2048
458 salifetime=8h
459 pfs=yes
460 auto=ignore
461 \end{lstlisting}
462
463 \subsubsection{How to test}
464 Start the vpn and using
465 \begin{lstlisting}
466 $ ipsec auto --status | less
467 \end{lstlisting}
468 and look for 'IKE algorithms wanted/found' and 'ESP algorithms wanted/loaded'.
469
470 \subsubsection{References}
471 \todo{more specific References}
472 \begin{itemize*}
473   \item \url{https://www.openswan.org/}
474 \end{itemize*}
475
476
477 \subsection{tinc}
478 \subsubsection{Tested with Version}
479 \begin{itemize*}
480   \item tinc 1.0.23 from Gentoo linked against OpenSSL 1.0.1e
481   \item tinc 1.0.23 from Sabayon linked against OpenSSL 1.0.1e
482 \end{itemize*}
483
484 \paragraph*{Defaults}\mbox{}\\
485 tinc uses 2048 bit RSA keys, Blowfish-CBC, and SHA1 as default settings and suggests the usage of CBC mode ciphers.
486 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.
487
488 \paragraph*{Settings}\mbox{}\\
489 Generate keys with
490 \begin{lstlisting}[breaklines]
491 tincd -n NETNAME -K8196
492 \end{lstlisting}
493 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
494 \configfile{tinc.conf}{3-4}{Cipher and digest selection in tinc}
495
496 \paragraph*{References}\mbox{}\\
497 \begin{itemize}
498 \item tincd(8) man page
499 \item tinc.conf(5) man page
500 \item \href{http://www.tinc-vpn.org/pipermail/tinc/2014-January/003538.html}{tinc mailinglist}
501 \end{itemize}
502
503
504 % ---------------------------------------------------------------------- 
505 %%\subsection{Juniper VPN}
506 %%\todo{write this subsubsection. AK: ask Hannes}
507
508
509
510
511 % ---------------------------------------------------------------------- 
512 %\subsection{L2TP over IPSec}
513 %\todo{write this subsubsection}
514
515
516
517
518 % ---------------------------------------------------------------------- 
519 %\subsection{Racoon}
520 %\todo{write this subsubsection}
521
522