Nicer tables
[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 % the cipherlist here is config B without the ECDHE strings, because
221 % it must fit in 256 bytes...
222 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
223 \begin{lstlisting}
224 tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
225 cipher AES-256-CBC
226 auth SHA384
227 \end{lstlisting}
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 \begin{lstlisting}
237 tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
238 cipher AES-256-CBC
239 auth SHA384
240
241 # https://openvpn.net/index.php/open-source/documentation/howto.html#mitm
242 remote-cert-tls server
243
244 tls-remote server.example.com
245 \end{lstlisting}
246
247 \subsubsection{Justification for special settings}
248 OpenVPN 2.3.1 changed the values that the \verb|tls-cipher| option
249 expects from OpenSSL to IANA cipher names. That means from that
250 version on you will get ``Deprecated TLS cipher name'' warnings for
251 the configurations above. You cannot use the selection strings from
252 section \ref{section:recommendedciphers} directly from 2.3.1 on, which
253 is why we give an explicit cipher list here.
254
255 In addition, there is a 256 character limit on configuration file line
256 lengths; that limits the size of cipher suites, so we dropped all
257 ECDHE suites.
258
259 The configuration shown above is compatible with all tested versions.
260
261
262 \subsubsection{References}
263 \begin{itemize*}
264   \item OpenVPN Documentation: \emph{Security Overview} \url{https://openvpn.net/index.php/open-source/documentation/security-overview.html}
265 \end{itemize*}
266
267 %\subsubsection{How to test}
268
269
270 \subsubsection{Additional settings}
271
272 \paragraph{Key renegotiation interval:}
273 The default for renegotiation of encryption keys is one hour
274 (\verb|reneg-sec 3600|). If you
275 transfer huge amounts of data over your tunnel, you might consider
276 configuring a shorter interval, or switch to a byte- or packet-based
277 interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
278
279 \paragraph{Fixing ``easy-rsa'':}
280 When installing an OpenVPN server instance, you are probably using
281 \emph{easy-rsa} to generate keys and certificates.
282 The file \verb|vars| in the easyrsa installation directory has a
283 number of settings that should be changed to secure values:
284
285 \begin{lstlisting}
286 export KEY_SIZE=4096
287 export KEY_EXPIRE=365
288 export CA_EXPIRE=1826
289 \end{lstlisting}
290
291 This will enhance the security of the key generation by using RSA keys
292 with a length of 4096 bits, and set a lifetime of one year for the
293 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.
294
295 In addition, edit the \verb|pkitool| script and replace all occurrences
296 of \verb|sha1| with \verb|sha256|, to sign the certificates with
297 SHA256.
298
299 \subsubsection{Limitations}
300 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}}.
301
302 Which cipher suite is actually used can be seen in the logs:
303
304 \verb|Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-CAMELLIA256-SHA, 2048 bit RSA|
305
306
307 % ---------------------------------------------------------------------- 
308 \subsection{PPTP}
309
310 PPTP is considered insecure, Microsoft recommends to ``use a more secure VPN
311 tunnel''\footnote{\url{http://technet.microsoft.com/en-us/security/advisory/2743314}}.
312
313 There is a cloud service that cracks the underlying MS-CHAPv2
314 authentication protocol for the price of USD~200\footnote{\url{https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/}},
315 and given the resulting MD4 hash, all PPTP traffic for a user can
316 be decrypted.
317
318 % ---------------------------------------------------------------------- 
319 \subsection{Cisco ASA}
320 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.
321
322
323 \subsubsection{Tested with Versions}
324 \begin{itemize*}
325   \item 9.1(3) - X-series model
326 \end{itemize*}
327
328 \subsubsection{Settings}
329 \begin{lstlisting}
330 crypto ipsec ikev2 ipsec-proposal AES-Fallback
331  protocol esp encryption aes-256 aes-192 aes
332  protocol esp integrity sha-512 sha-384 sha-256
333 crypto ipsec ikev2 ipsec-proposal AES-GCM-Fallback
334  protocol esp encryption aes-gcm-256 aes-gcm-192 aes-gcm
335  protocol esp integrity sha-512 sha-384 sha-256
336 crypto ipsec ikev2 ipsec-proposal AES128-GCM
337  protocol esp encryption aes-gcm
338  protocol esp integrity sha-512
339 crypto ipsec ikev2 ipsec-proposal AES192-GCM
340  protocol esp encryption aes-gcm-192
341  protocol esp integrity sha-512
342 crypto ipsec ikev2 ipsec-proposal AES256-GCM
343  protocol esp encryption aes-gcm-256
344  protocol esp integrity sha-512
345 crypto ipsec ikev2 ipsec-proposal AES
346  protocol esp encryption aes
347  protocol esp integrity sha-1 md5
348 crypto ipsec ikev2 ipsec-proposal AES192
349  protocol esp encryption aes-192
350  protocol esp integrity sha-1 md5
351 crypto ipsec ikev2 ipsec-proposal AES256
352  protocol esp encryption aes-256
353  protocol esp integrity sha-1 md5
354 crypto ipsec ikev2 sa-strength-enforcement
355 crypto ipsec security-association pmtu-aging infinite
356 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set pfs group14
357 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set ikev2 ipsec-proposal AES256-GCM AES192-GCM AES128-GCM AES-GCM-Fallback AES-Fallback
358 crypto map Outside-DMZ_map 65535 ipsec-isakmp dynamic SYSTEM_DEFAULT_CRYPTO_MAP
359 crypto map Outside-DMZ_map interface Outside-DMZ
360
361 crypto ikev2 policy 1
362  encryption aes-gcm-256
363  integrity null
364  group 14
365  prf sha512 sha384 sha256 sha
366  lifetime seconds 86400
367 crypto ikev2 policy 2
368  encryption aes-gcm-256 aes-gcm-192 aes-gcm
369  integrity null
370  group 14
371  prf sha512 sha384 sha256 sha
372  lifetime seconds 86400
373 crypto ikev2 policy 3
374  encryption aes-256 aes-192 aes
375  integrity sha512 sha384 sha256
376  group 14
377  prf sha512 sha384 sha256 sha
378  lifetime seconds 86400
379 crypto ikev2 policy 4
380  encryption aes-256 aes-192 aes
381  integrity sha512 sha384 sha256 sha
382  group 14
383  prf sha512 sha384 sha256 sha
384  lifetime seconds 86400
385 crypto ikev2 enable Outside-DMZ client-services port 443
386 crypto ikev2 remote-access trustpoint ASDM_TrustPoint0
387
388 ssl server-version tlsv1-only
389 ssl client-version tlsv1-only
390 ssl encryption dhe-aes256-sha1 dhe-aes128-sha1 aes256-sha1 aes128-sha1
391 ssl trust-point ASDM_TrustPoint0 Outside-DMZ
392 \end{lstlisting}
393
394 \subsubsection{Justification for special settings}
395 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.
396
397 3DES has been completely disabled as such Windows XP AnyConnect Clients will no longer be able to connect.
398
399 The Cisco ASA platform does not currently support RSA Keys above 2048bits.
400
401 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.
402
403 \subsubsection{References}
404 \begin{itemize*}
405   \item \url{http://www.cisco.com/en/US/docs/security/asa/roadmap/asaroadmap.html}
406   \item \url{http://www.cisco.com/web/about/security/intelligence/nextgen_crypto.html}
407 \end{itemize*}
408
409 % add any further references or best practice documents here
410
411 %%\subsubsection{How to test}
412 % 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.
413
414
415 % ---------------------------------------------------------------------- 
416 \subsection{Openswan}
417
418
419 \subsubsection{Tested with Version}
420 \begin{itemize*}
421   \item Openswan 2.6.39 (Gentoo)
422 \end{itemize*}
423
424 \subsubsection{Settings}
425 NB: The available algorithms depend on your kernel configuration (when using protostack=netkey) and/or
426 build-time options.
427
428 To list the supported algorithms
429 \begin{lstlisting}
430 $ ipsec auto --status | less
431 \end{lstlisting}
432 and look for 'algorithm ESP/IKE' at the beginning.
433
434 \begin{lstlisting}
435 aggrmode=no
436 # ike format: cipher-hash;dhgroup
437 # recommended ciphers:
438 # - aes
439 # recommended hashes:
440 # - sha2_256 with at least 43 byte PSK
441 # - sha2_512 with at least 86 byte PSK
442 # recommended dhgroups:
443 # - modp2048 = DH14
444 # - modp3072 = DH15
445 # - modp4096 = DH16
446 # - modp6144 = DH17
447 # - modp8192 = DH18
448 ike=aes-sha2_256;modp2048
449 type=tunnel
450 phase2=esp
451 # esp format: cipher-hash;dhgroup
452 # recommended ciphers configuration A:
453 # - aes_gcm_c-256 = AES_GCM_16
454 # - aes_ctr-256
455 # - aes_ccm_c-256 = AES_CCM_16
456 # - aes-256 
457 # additional ciphers configuration B:
458 # - camellia-256
459 # - aes-128
460 # - camellia-128
461 # recommended hashes configuration A:
462 # - sha2-256
463 # - sha2-384
464 # - sha2-512
465 # - null (only with GCM/CCM ciphers)
466 # additional hashes configuration B:
467 # - sha1
468 # recommended dhgroups: same as above
469 phase2alg=aes_gcm_c-256-sha2_256;modp2048
470 salifetime=8h
471 pfs=yes
472 auto=ignore
473 \end{lstlisting}
474
475 \subsubsection{How to test}
476 Start the vpn and using
477 \begin{lstlisting}
478 $ ipsec auto --status | less
479 \end{lstlisting}
480 and look for 'IKE algorithms wanted/found' and 'ESP algorithms wanted/loaded'.
481
482 \subsubsection{References}
483 \todo{more specific References}
484 \begin{itemize*}
485   \item \url{https://www.openswan.org/}
486 \end{itemize*}
487
488
489 \subsection{tinc}
490 \subsubsection{Tested with Version}
491 \begin{itemize*}
492   \item tinc 1.0.23 from Gentoo linked against OpenSSL 1.0.1e
493   \item tinc 1.0.23 from Sabayon linked against OpenSSL 1.0.1e
494 \end{itemize*}
495
496 \paragraph*{Defaults}\mbox{}\\
497 tinc uses 2048 bit RSA keys, Blowfish-CBC, and SHA1 as default settings and suggests the usage of CBC mode ciphers.
498 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.
499
500 \paragraph*{Settings}\mbox{}\\
501 Generate keys with
502 \begin{lstlisting}[breaklines]
503 tincd -n NETNAME -K8196
504 \end{lstlisting}
505 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
506 \begin{lstlisting}[breaklines]
507 Cipher = aes-256-cbc
508 Digest = SHA512
509 \end{lstlisting}
510
511 \paragraph*{References}\mbox{}\\
512 \begin{itemize}
513 \item tincd(8) man page
514 \item tinc.conf(5) man page
515 \item \href{http://www.tinc-vpn.org/pipermail/tinc/2014-January/003538.html}{tinc mailinglist}
516 \end{itemize}
517
518
519 % ---------------------------------------------------------------------- 
520 %%\subsection{Juniper VPN}
521 %%\todo{write this subsubsection. AK: ask Hannes}
522
523
524
525
526 % ---------------------------------------------------------------------- 
527 %\subsection{L2TP over IPSec}
528 %\todo{write this subsubsection}
529
530
531
532
533 % ---------------------------------------------------------------------- 
534 %\subsection{Racoon}
535 %\todo{write this subsubsection}
536
537