no downgrade attacks on ipsec
[ach-master.git] / src / practical_settings / vpn.tex
1 %%\subsection{VPNs}
2 \todo{write this subsection}
3 \subsubsection{IPSec}
4 \label{section:IPSECgeneral}
5
6
7 \begin{description}
8
9 \item[Settings:] \mbox{}
10
11 \paragraph*{Assumptions}\mbox{}\\
12
13 We assume the usage of IKE (v1 or v2) for this document, and ESP.
14
15 \paragraph*{Authentication}\mbox{}\\
16
17 IPSEC authentication should optimally be performed via RSA signatures,
18 with a key size of 2048 bits or more. Configuring only the trusted CA
19 that issued the peer certificate provides for additional protection
20 against fake certificates.
21
22 If you need to use Pre-Shared Key authentication:
23
24 \begin{enumerate}
25 \item Choose a \textbf{random}, \textbf{long enough} PSK (see below)
26 \item Use a \textbf{separate} PSK for any IPSEC connection
27 \item Change the PSKs regularily
28 \end{enumerate}
29
30 The size of the PSK should not be shorter than the output size of
31 the hash algorithm used in IKE \footnote{It is used in a HMAC, see
32   \url{http://www.ietf.org/rfc/rfc2104.txt}.}.
33
34 For a key composed of upper- and lowercase letters, numbers, and two
35 additional symbols \footnote{64 possible values = 6 bits}, that gives
36 the following minimum lengths in characters:
37
38 \begin{table}[h]
39   \centering
40   \small
41   \begin{tabular}{lc}
42     \toprule
43     IKE Hash & PSK length \\
44     \midrule
45     SHA256 & 43 \\
46     SHA384 & 64 \\
47     SHA512 & 86 \\
48     \bottomrule
49   \end{tabular}
50 \end{table}
51
52 \paragraph*{Cryptographic Suites}\mbox{}\\
53
54 IPSEC Cryptographic Suites are pre-defined settings for all the
55 items of a configuration; they try to provide a balanced security
56 level and make setting up VPNs easier.
57
58 When using any of those suites, make sure to enable ``Perfect Forward
59 Secrecy`` for Phase 2, as this is not specified in the suites. The
60 equivalents to the recommended ciphers suites in section
61 \ref{section:recommendedciphers} are:
62
63 \begin{table}[h]
64   \centering
65   \small
66   \begin{tabular}{lll}
67     \toprule
68     Configuration A & Configuration B & Notes\\
69     \midrule
70     \verb|Suite-B-GCM-256|\footnote{\url{http://tools.ietf.org/html/rfc6379}} &
71 \verb|Suite-B-GCM-128| & Uses NIST elliptic curves
72 \\ & \verb|VPN-B|\footnote{\url{http://tools.ietf.org/html/rfc4308}} &
73 \\
74     \bottomrule
75   \end{tabular}
76 \end{table}
77
78 \paragraph*{IKE or Phase 1}\mbox{}\\
79
80 Alternatively to the pre-defined cipher suites, you can define your
81 own, as described in this and the next section.
82
83 IKE or Phase 1 is the mutual authentication and key exchange phase.
84
85 Use only ``main mode``, as ``aggressive mode`` has known security
86 vulnerabilities \footnote{\url{http://ikecrack.sourceforge.net/}}.
87
88 \todo{how to make footnotes in a table appear in the output document?}
89
90 \begin{table}
91   \centering
92   \small
93   \begin{tabular}{lll}
94     \toprule
95     & Configuration A & Configuration B \\
96     \midrule
97     Mode & Main Mode & Main Mode \\
98     Encryption & AES-256 & AES-256, CAMELLIA-256 \\
99     Hash & SHA2-* & SHA2-*, SHA1 \\
100     DH Group & Group 14--18 \footnote{2048--8192 bit DH},
101     19--21\footnote{(256--521 bit ECDH)} & Group 14--21 \\
102     Lifetime & \todo{need recommendations; 1 day seems to be common
103       practice} & \\
104     \bottomrule
105   \end{tabular}
106 \end{table}
107
108 \paragraph*{ESP or Phase 2}\mbox{}\\
109
110 ESP or Phase 2 is where the actual data are protected.
111
112 \todo{make the tables appear right here!}
113
114 \begin{table}
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 & AES-GCM-16, AES-CTR, AES-CCM-16, AES-256 & AES-GCM-16, AES-CTR, AES-CCM-16, AES-256, CAMELLIA-256 \\
123     Hash & SHA2-* (or none for AES-GCM) & SHA2-*, SHA1 (or none for AES-GCM) \\
124     DH Group & Same as Phase 1 & Same as Phase 1 \\
125     Lifetime & \todo{need recommendations; 1-8 hours is common} & \\
126     \bottomrule
127   \end{tabular}
128 \end{table}
129
130 \item[References:] \mbox{}
131
132 ``A Cryptographic Evaluation of IPsec'', Niels Ferguson and Bruce
133   Schneier: \url{https://www.schneier.com/paper-ipsec.pdf}
134
135 \end{description}
136
137 \subsubsection{Check Point FireWall-1}
138    
139 \begin{description}
140 \item[Tested with Version:] \mbox{}
141
142 \begin{itemize}
143 \item R77 (should work with any currently supported version)
144 \end{itemize}
145
146 \item[Settings:] \mbox{}
147
148 Please see section \ref{section:IPSECgeneral} for guidance on
149 parameter choice. In this section, we will configure a strong setup
150 according to ``Configuration A''.
151
152 This is based on the concept of a ``VPN Community'', which has all the
153 settings for the gateways that are included in that community.
154 Communities can be found in the ``IPSEC VPN'' tab of SmartDashboard.
155
156 \todo{make those graphics prettier -- whoever has the right LaTeX
157   mojo, please do!}
158
159 \includegraphics{checkpoint_1.png}
160
161 Either chose one of the encryption suites here, or proceed to
162 ``Custom Encryption...'', where you can set encryption and hash for
163 Phase 1 and 2:
164
165 \includegraphics{checkpoint_2.png}
166
167 The Diffie-Hellman groups and Perfect Forward Secrecy Settings can be
168 found under ``Advanced Settings'' / ``Advanced VPN Properties'':
169
170 \includegraphics{checkpoint_3.png}
171
172 \item[Additional settings:]
173
174 For remote Dynamic IP Gateways, the settings are not taken from the
175 community, but set in the ``Global Properties'' dialog under ``Remote
176 Access'' / ``VPN Authentication and Encryption''. Via the ``Edit...''
177 button, you can configure sets of algorithms that all gateways support:
178
179 \includegraphics{checkpoint_4.png}
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 %\item[Justification for special settings (if needed):]
185
186 %\item[Limitations:]
187
188 \item[References:]\mbox{}
189
190 \begin{itemize}
191
192 \item Check Point
193   \href{https://sc1.checkpoint.com/documents/R77/CP_R77_VPN_AdminGuide/html_frameset.htm}{VPN
194     R77 Administration Guide} (may require a
195   UserCenter account to access)
196
197 \end{itemize}
198
199 % \item[How to test:]
200
201 \end{description}
202
203
204 \subsubsection{OpenVPN}
205
206 \begin{description}
207
208 \item[Tested with Version:] \mbox{}\\
209
210 \begin{itemize}
211 \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
212 \item OpenVPN 2.2.1 from Debian 7.0 linked against openssl (libssl.so.1.0.0) 
213 \end{itemize}
214
215 \item[Settings:] \mbox{}
216
217 \paragraph{General}\mbox{}
218
219 We describe a configuration with certificate-based authentication; see
220 below for details on the \verb|easyrsa| tool to help you with that.
221
222 OpenVPN uses TLS only for authentication and key exchange. The
223 bulk traffic is then encrypted and authenticated with the OpenVPN
224 protocol using those keys.
225
226 Note that while the \verb|tls-cipher| option takes a list of ciphers
227 that is then negotiated as usual with TLS, the \verb|cipher|
228 and \verb|auth| options both take a single argument that must match on
229 client and server.
230
231 \paragraph{Server Configuration}\mbox{}
232
233 % this is only a DoS-protection, out of scope:
234 % # TLS Authentication
235 % tls-auth ta.key
236
237 \begin{lstlisting}[breaklines]
238 tls-cipher ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:AES256-SHA
239 cipher AES-256-CBC
240 auth SHA384
241 # generate with 'openssl dhparam -out dh2048.pem 2048':
242 dh dh2048.pem
243 \end{lstlisting}
244
245 \paragraph{Client Configuration}\mbox{}
246
247 Client and server have to use compatible configurations, otherwise they can't communicate.
248 The \verb|cipher| and \verb|auth| directives have to be identical.
249
250 \begin{lstlisting}[breaklines]
251 tls-cipher ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:AES256-SHA
252 cipher AES-256-CBC
253 auth SHA384
254
255 # http://openvpn.net/index.php/open-source/documentation/howto.html#mitm
256 remote-cert-tls server
257
258 tls-remote server.example.com
259 \end{lstlisting}
260
261 \item[Justification for special settings (if needed):] \mbox{}\\
262
263 OpenVPN 2.3.1 changed the values that the \verb|tls-cipher| option
264 expects from OpenSSL to IANA cipher names. That means from that
265 version on you will get ``Deprecated TLS cipher name'' warnings for
266 the configurations above. You cannot use the selection strings from
267 section \ref{section:recommendedciphers} directly from 2.3.1 on, which
268 is why we give an explicit cipher list here.
269
270 The configuration shown above is compatible with all tested versions.
271
272 \item[References:] \mbox{}\\
273
274 \url{http://openvpn.net/index.php/open-source/documentation/security-overview.html}
275
276 %\item[How to test:]
277
278
279 \item[Additional settings:] \mbox{}
280
281 \paragraph{Key renegotiation interval}\mbox{}
282
283 The default for renegotiation of encryption keys is one hour
284 (\verb|reneg-sec 3600|). If you
285 transfer huge amounts of data over your tunnel, you might consider
286 configuring a shorter interval, or switch to a byte- or packet-based
287 interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
288
289 \paragraph{Fixing ``easy-rsa''}\mbox{}
290
291 When installing an OpenVPN server instance, you are probably using
292 {\it easy-rsa} to generate keys and certificates.
293 The file \verb|vars| in the easyrsa installation directory has a
294 number of settings that should be changed to secure values:
295
296 \begin{lstlisting}[breaklines]
297 export KEY_SIZE=4096
298 export KEY_EXPIRE=365
299 export CA_EXPIRE=1826
300 \end{lstlisting}
301
302 This will enhance the security of the key generation by using RSA keys
303 with a length of 2048 bits, and set a lifetime of one year for the
304 server/client certificates and five years for the CA certificate.
305
306 In addition, edit the \verb|pkitool| script and replace all occurences
307 of \verb|sha1| with \verb|sha256|, to sign the certificates with
308 SHA256.
309
310 \item[Limitations:] \mbox{}
311
312 Note that the ciphersuites shown by \verb|openvpn --show-tls| are {\it
313 known}, but not necessarily {\it
314 supported} \footnote{\url{https://community.openvpn.net/openvpn/ticket/304}}.
315
316
317 \end{description}
318
319
320 \subsubsection{PPTP}
321
322 PPTP is considered insecure, Microsoft recommends to ``use a more secure VPN
323 tunnel''\footnote{\url{http://technet.microsoft.com/en-us/security/advisory/2743314}}.
324
325 There is a cloud service that cracks the underlying MS-CHAPv2
326 authentication protocol for the price of USD~200\footnote{\url{https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/}},
327 and given the resulting MD4 hash, all PPTP traffic for a user can
328 be decrypted.
329
330 \subsubsection{Cisco ASA}
331 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.
332 \begin{description}
333 \item[Tested with Version:] \todo{version?}
334 ASA Version 9.1(3)
335 \item[Settings:] \mbox{}
336 \begin{lstlisting}[breaklines]
337 crypto ipsec ikev2 ipsec-proposal AES-Fallback
338  protocol esp encryption aes-256 aes-192 aes
339  protocol esp integrity sha-512 sha-384 sha-256
340 crypto ipsec ikev2 ipsec-proposal AES-GCM-Fallback
341  protocol esp encryption aes-gcm-256 aes-gcm-192 aes-gcm
342  protocol esp integrity sha-512 sha-384 sha-256
343 crypto ipsec ikev2 ipsec-proposal AES128-GCM
344  protocol esp encryption aes-gcm
345  protocol esp integrity sha-512
346 crypto ipsec ikev2 ipsec-proposal AES192-GCM
347  protocol esp encryption aes-gcm-192
348  protocol esp integrity sha-512
349 crypto ipsec ikev2 ipsec-proposal AES256-GCM
350  protocol esp encryption aes-gcm-256
351  protocol esp integrity sha-512
352 crypto ipsec ikev2 ipsec-proposal AES
353  protocol esp encryption aes
354  protocol esp integrity sha-1 md5
355 crypto ipsec ikev2 ipsec-proposal AES192
356  protocol esp encryption aes-192
357  protocol esp integrity sha-1 md5
358 crypto ipsec ikev2 ipsec-proposal AES256
359  protocol esp encryption aes-256
360  protocol esp integrity sha-1 md5
361 crypto ipsec ikev2 sa-strength-enforcement
362 crypto ipsec security-association pmtu-aging infinite
363 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set pfs group14
364 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set ikev2 ipsec-proposal AES256-GCM AES192-GCM AES128-GCM AES-GCM-Fallback AES-Fallback
365 crypto map Outside-DMZ_map 65535 ipsec-isakmp dynamic SYSTEM_DEFAULT_CRYPTO_MAP
366 crypto map Outside-DMZ_map interface Outside-DMZ
367
368 crypto ikev2 policy 1
369  encryption aes-gcm-256
370  integrity null
371  group 24 14
372  prf sha512 sha384 sha256 sha
373  lifetime seconds 86400
374 crypto ikev2 policy 2
375  encryption aes-gcm-256 aes-gcm-192 aes-gcm
376  integrity null
377  group 24 14 5
378  prf sha512 sha384 sha256 sha
379  lifetime seconds 86400
380 crypto ikev2 policy 3
381  encryption aes-256 aes-192 aes
382  integrity sha512 sha384 sha256
383  group 24 14
384  prf sha512 sha384 sha256 sha
385  lifetime seconds 86400
386 crypto ikev2 policy 4
387  encryption aes-256 aes-192 aes
388  integrity sha512 sha384 sha256 sha
389  group 24 14 5
390  prf sha512 sha384 sha256 sha
391  lifetime seconds 86400
392 crypto ikev2 enable Outside-DMZ client-services port 443
393 crypto ikev2 remote-access trustpoint ASDM_TrustPoint0
394
395 ssl server-version tlsv1-only
396 ssl client-version tlsv1-only
397 ssl encryption dhe-aes256-sha1 dhe-aes128-sha1 aes256-sha1 aes128-sha1
398 ssl trust-point ASDM_TrustPoint0 Outside-DMZ
399 \end{lstlisting}
400
401 \item[Additional settings:] \mbox{}
402
403 %Here you can add additional settings
404
405 \begin{lstlisting}[breaklines]
406     %copy \& paste additional settings
407 \end{lstlisting}
408
409 \item[Justification for special settings (if needed):] \mbox{}
410 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.
411
412 % in case you have the need for further justifications why you chose this and that setting or if the settings do not fit into the standard Variant A or Variant B schema, please document this here
413
414 \item[References:] \todo{add references}
415
416 % add any further references or best practice documents here
417
418 \item[How to test:] 
419 % 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.
420
421 \end{description}
422
423
424
425
426
427
428
429 \subsubsection{Juniper VPN}
430 \todo{write this subsubsection. AK: ask Hannes}
431
432
433 \begin{description}
434 \item[Tested with Version:] \todo{version?}
435
436 \item[Settings:] \mbox{}
437
438 \begin{lstlisting}[breaklines]
439     %Here goes your setting string
440 \end{lstlisting}
441
442 \item[Additional settings:] \mbox{}
443
444 %Here you can add additional settings
445
446 \begin{lstlisting}[breaklines]
447     %copy \& paste additional settings
448 \end{lstlisting}
449
450 \item[Justification for special settings (if needed):] \mbox{}
451
452 % in case you have the need for further justifications why you chose this and that setting or if the settings do not fit into the standard Variant A or Variant B schema, please document this here
453
454 \item[References:] \todo{add references}
455
456 % add any further references or best practice documents here
457
458 \item[How to test:]
459 % 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.
460
461 \end{description}
462
463
464
465
466
467 \subsubsection{L2TP over IPSec}
468 \todo{write this subsubsection}
469
470
471 \begin{description}
472 \item[Tested with Version:] \todo{version?}
473
474 \item[Settings:] \mbox{}
475
476 \begin{lstlisting}[breaklines]
477     %Here goes your setting string
478 \end{lstlisting}
479
480 \item[Additional settings:] \mbox{}
481
482 %Here you can add additional settings
483
484 \begin{lstlisting}[breaklines]
485     %copy \& paste additional settings
486 \end{lstlisting}
487
488 \item[Justification for special settings (if needed):] \mbox{}
489
490 % in case you have the need for further justifications why you chose this and that setting or if the settings do not fit into the standard Variant A or Variant B schema, please document this here
491
492 \item[References:] \todo{add references}
493
494 % add any further references or best practice documents here
495
496 \item[How to test:]
497 % 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.
498
499 \end{description}
500
501
502
503
504
505
506 \subsubsection{Racoon}
507 \todo{write this subsubsection}
508
509
510 \begin{description}
511 \item[Tested with Version:] \todo{version?}
512
513 \item[Settings:] \mbox{}
514
515 \begin{lstlisting}[breaklines]
516     %Here goes your setting string
517 \end{lstlisting}
518
519 \item[Additional settings:] \mbox{}
520
521 %Here you can add additional settings
522
523 \begin{lstlisting}[breaklines]
524     %copy \& paste additional settings
525 \end{lstlisting}
526
527 \item[Justification for special settings (if needed):] \mbox{}
528
529 % in case you have the need for further justifications why you chose this and that setting or if the settings do not fit into the standard Variant A or Variant B schema, please document this here
530
531 \item[References:] \todo{add references}
532
533 % add any further references or best practice documents here
534
535 \item[How to test:]
536 % 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.
537
538 \end{description}