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