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