openvpn: cipherstring comment
[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 use of IKE (v1 or v2) and ESP for this document.
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| & All Suite-B variants use NIST elliptic curves
72 \\ \verb|Suite-B-GMAC-256| & \verb|Suite-B-GMAC-128| & 
73 \\ & \verb|VPN-B|\footnote{\url{http://tools.ietf.org/html/rfc4308}} &
74 \\
75     \bottomrule
76   \end{tabular}
77 \end{table}
78
79 \paragraph*{IKE or Phase 1}\mbox{}\\
80
81 Alternatively to the pre-defined cipher suites, you can define your
82 own, as described in this and the next section.
83
84 IKE or Phase 1 is the mutual authentication and key exchange phase.
85
86 Use only ``main mode``, as ``aggressive mode`` has known security
87 vulnerabilities \footnote{\url{http://ikecrack.sourceforge.net/}}.
88
89 \todo{how to make footnotes in a table appear in the output document?}
90
91 \begin{table}
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 \footnote{2048--8192 bit DH},
102     19--21\footnote{(256--521 bit ECDH)} & Group 14--21 \\
103     Lifetime & \todo{need recommendations; 1 day seems to be common
104       practice} & \\
105     \bottomrule
106   \end{tabular}
107 \end{table}
108
109 \paragraph*{ESP or Phase 2}\mbox{}\\
110
111 ESP or Phase 2 is where the actual data are protected.
112
113 \todo{make the tables appear right here!}
114
115 \begin{table}
116   \centering
117   \small
118   \begin{tabular}{lll}
119     \toprule
120     & Configuration A & Configuration B \\
121     \midrule
122     Perfect Forward Secrecy & yes & yes \\
123     Encryption & AES-GCM-16, AES-CTR, AES-CCM-16, AES-256 &
124   AES-GCM-16, AES-CTR, AES-CCM-16, AES-256, CAMELLIA-256, AES-128, CAMELLIA-128 \\
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 %% cipherstrings current 2013-12-09
207 \subsubsection{OpenVPN}
208
209 \begin{description}
210
211 \item[Tested with Version:] \mbox{}\\
212
213 \begin{itemize}
214 \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
215 \item OpenVPN 2.2.1 from Debian 7.0 linked against openssl
216     (libssl.so.1.0.0) 
217 \item OpenVPN 2.3.2 for Windows
218 \end{itemize}
219
220 \item[Settings:] \mbox{}
221
222 \paragraph{General}\mbox{}
223
224 We describe a configuration with certificate-based authentication; see
225 below for details on the \verb|easyrsa| tool to help you with that.
226
227 OpenVPN uses TLS only for authentication and key exchange. The
228 bulk traffic is then encrypted and authenticated with the OpenVPN
229 protocol using those keys.
230
231 Note that while the \verb|tls-cipher| option takes a list of ciphers
232 that is then negotiated as usual with TLS, the \verb|cipher|
233 and \verb|auth| options both take a single argument that must match on
234 client and server.
235
236 \paragraph{Server Configuration}\mbox{}
237
238 % this is only a DoS-protection, out of scope:
239 % # TLS Authentication
240 % tls-auth ta.key
241
242 % previous:
243 % tls-cipher
244 % 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
245 % the cipherlist here is config B without the ECDHE strings, because
246 % it must fit in 256 bytes...
247 \begin{lstlisting}[breaklines]
248 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
249 cipher AES-256-CBC
250 auth SHA384
251 # generate with 'openssl dhparam -out dh2048.pem 2048':
252 dh dh2048.pem
253 \end{lstlisting}
254
255 \paragraph{Client Configuration}\mbox{}
256
257 Client and server have to use compatible configurations, otherwise they can't communicate.
258 The \verb|cipher| and \verb|auth| directives have to be identical.
259
260 \begin{lstlisting}[breaklines]
261 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
262 cipher AES-256-CBC
263 auth SHA384
264
265 # http://openvpn.net/index.php/open-source/documentation/howto.html#mitm
266 remote-cert-tls server
267
268 tls-remote server.example.com
269 \end{lstlisting}
270
271 \item[Justification for special settings (if needed):] \mbox{}\\
272
273 OpenVPN 2.3.1 changed the values that the \verb|tls-cipher| option
274 expects from OpenSSL to IANA cipher names. That means from that
275 version on you will get ``Deprecated TLS cipher name'' warnings for
276 the configurations above. You cannot use the selection strings from
277 section \ref{section:recommendedciphers} directly from 2.3.1 on, which
278 is why we give an explicit cipher list here.
279
280 In addition, there is a 256 character limit on configuration file line
281 lengths; that limits the size of cipher suites, so we dropped all
282 ECDHE suites.
283
284 The configuration shown above is compatible with all tested versions.
285
286 \item[References:] \mbox{}\\
287
288 \url{http://openvpn.net/index.php/open-source/documentation/security-overview.html}
289
290 %\item[How to test:]
291
292
293 \item[Additional settings:] \mbox{}
294
295 \paragraph{Key renegotiation interval}\mbox{}
296
297 The default for renegotiation of encryption keys is one hour
298 (\verb|reneg-sec 3600|). If you
299 transfer huge amounts of data over your tunnel, you might consider
300 configuring a shorter interval, or switch to a byte- or packet-based
301 interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
302
303 \paragraph{Fixing ``easy-rsa''}\mbox{}
304
305 When installing an OpenVPN server instance, you are probably using
306 {\it easy-rsa} to generate keys and certificates.
307 The file \verb|vars| in the easyrsa installation directory has a
308 number of settings that should be changed to secure values:
309
310 \begin{lstlisting}[breaklines]
311 export KEY_SIZE=4096
312 export KEY_EXPIRE=365
313 export CA_EXPIRE=1826
314 \end{lstlisting}
315
316 This will enhance the security of the key generation by using RSA keys
317 with a length of 2048 bits, and set a lifetime of one year for the
318 server/client certificates and five years for the CA certificate.
319
320 In addition, edit the \verb|pkitool| script and replace all occurences
321 of \verb|sha1| with \verb|sha256|, to sign the certificates with
322 SHA256.
323
324 \item[Limitations:] \mbox{}
325
326 Note that the ciphersuites shown by \verb|openvpn --show-tls| are {\it
327 known}, but not necessarily {\it
328 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 \end{description}
335
336
337 \subsubsection{PPTP}
338
339 PPTP is considered insecure, Microsoft recommends to ``use a more secure VPN
340 tunnel''\footnote{\url{http://technet.microsoft.com/en-us/security/advisory/2743314}}.
341
342 There is a cloud service that cracks the underlying MS-CHAPv2
343 authentication protocol for the price of USD~200\footnote{\url{https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/}},
344 and given the resulting MD4 hash, all PPTP traffic for a user can
345 be decrypted.
346
347 \subsubsection{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 \begin{description}
350 \item[Tested with Version:] 
351 9.1(3)
352 \item[Settings:] \mbox{}
353 \begin{lstlisting}[breaklines]
354 crypto ipsec ikev2 ipsec-proposal AES-Fallback
355  protocol esp encryption aes-256 aes-192 aes
356  protocol esp integrity sha-512 sha-384 sha-256
357 crypto ipsec ikev2 ipsec-proposal AES-GCM-Fallback
358  protocol esp encryption aes-gcm-256 aes-gcm-192 aes-gcm
359  protocol esp integrity sha-512 sha-384 sha-256
360 crypto ipsec ikev2 ipsec-proposal AES128-GCM
361  protocol esp encryption aes-gcm
362  protocol esp integrity sha-512
363 crypto ipsec ikev2 ipsec-proposal AES192-GCM
364  protocol esp encryption aes-gcm-192
365  protocol esp integrity sha-512
366 crypto ipsec ikev2 ipsec-proposal AES256-GCM
367  protocol esp encryption aes-gcm-256
368  protocol esp integrity sha-512
369 crypto ipsec ikev2 ipsec-proposal AES
370  protocol esp encryption aes
371  protocol esp integrity sha-1 md5
372 crypto ipsec ikev2 ipsec-proposal AES192
373  protocol esp encryption aes-192
374  protocol esp integrity sha-1 md5
375 crypto ipsec ikev2 ipsec-proposal AES256
376  protocol esp encryption aes-256
377  protocol esp integrity sha-1 md5
378 crypto ipsec ikev2 sa-strength-enforcement
379 crypto ipsec security-association pmtu-aging infinite
380 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set pfs group14
381 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set ikev2 ipsec-proposal AES256-GCM AES192-GCM AES128-GCM AES-GCM-Fallback AES-Fallback
382 crypto map Outside-DMZ_map 65535 ipsec-isakmp dynamic SYSTEM_DEFAULT_CRYPTO_MAP
383 crypto map Outside-DMZ_map interface Outside-DMZ
384
385 crypto ikev2 policy 1
386  encryption aes-gcm-256
387  integrity null
388  group 24 14
389  prf sha512 sha384 sha256 sha
390  lifetime seconds 86400
391 crypto ikev2 policy 2
392  encryption aes-gcm-256 aes-gcm-192 aes-gcm
393  integrity null
394  group 24 14 5
395  prf sha512 sha384 sha256 sha
396  lifetime seconds 86400
397 crypto ikev2 policy 3
398  encryption aes-256 aes-192 aes
399  integrity sha512 sha384 sha256
400  group 24 14
401  prf sha512 sha384 sha256 sha
402  lifetime seconds 86400
403 crypto ikev2 policy 4
404  encryption aes-256 aes-192 aes
405  integrity sha512 sha384 sha256 sha
406  group 24 14 5
407  prf sha512 sha384 sha256 sha
408  lifetime seconds 86400
409 crypto ikev2 enable Outside-DMZ client-services port 443
410 crypto ikev2 remote-access trustpoint ASDM_TrustPoint0
411
412 ssl server-version tlsv1-only
413 ssl client-version tlsv1-only
414 ssl encryption dhe-aes256-sha1 dhe-aes128-sha1 aes256-sha1 aes128-sha1
415 ssl trust-point ASDM_TrustPoint0 Outside-DMZ
416 \end{lstlisting}
417
418 \item[Justification for special settings (if needed):] \mbox{}
419 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.
420
421 % 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
422
423 \item[References:] 
424 \url{http://www.cisco.com/en/US/docs/security/asa/roadmap/asaroadmap.html}
425
426 % add any further references or best practice documents here
427
428 %%\item[How to test:] 
429 % 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.
430
431 \end{description}
432
433
434
435
436
437
438
439 %%\subsubsection{Juniper VPN}
440 %%\todo{write this subsubsection. AK: ask Hannes}
441
442
443 %%\begin{description}
444 %%\item[Tested with Version:] \todo{version?}
445
446 %%\item[Settings:] \mbox{}
447
448 %%\begin{lstlisting}[breaklines]
449 %%    %Here goes your setting string
450 %%\end{lstlisting}
451
452 %%\item[Additional settings:] \mbox{}
453
454 %Here you can add additional settings
455
456 %%\begin{lstlisting}[breaklines]
457 %%    %copy \& paste additional settings
458 %%\end{lstlisting}
459
460 %%\item[Justification for special settings (if needed):] \mbox{}
461
462 % 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
463
464 %%\item[References:] \todo{add references}
465
466 % add any further references or best practice documents here
467
468 %%\item[How to test:]
469 % 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.
470
471 %%\end{description}
472
473
474
475 \subsubsection{L2TP over IPSec}
476 \todo{write this subsubsection}
477
478
479 \begin{description}
480 \item[Tested with Version:] \todo{version?}
481
482 \item[Settings:] \mbox{}
483
484 \begin{lstlisting}[breaklines]
485     %Here goes your setting string
486 \end{lstlisting}
487
488 \item[Additional settings:] \mbox{}
489
490 %Here you can add additional settings
491
492 \begin{lstlisting}[breaklines]
493     %copy \& paste additional settings
494 \end{lstlisting}
495
496 \item[Justification for special settings (if needed):] \mbox{}
497
498 % 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
499
500 \item[References:] \todo{add references}
501
502 % add any further references or best practice documents here
503
504 \item[How to test:]
505 % 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.
506
507 \end{description}
508
509
510
511
512
513
514 \subsubsection{Racoon}
515 \todo{write this subsubsection}
516
517
518 \begin{description}
519 \item[Tested with Version:] \todo{version?}
520
521 \item[Settings:] \mbox{}
522
523 \begin{lstlisting}[breaklines]
524     %Here goes your setting string
525 \end{lstlisting}
526
527 \item[Additional settings:] \mbox{}
528
529 %Here you can add additional settings
530
531 \begin{lstlisting}[breaklines]
532     %copy \& paste additional settings
533 \end{lstlisting}
534
535 \item[Justification for special settings (if needed):] \mbox{}
536
537 % 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
538
539 \item[References:] \todo{add references}
540
541 % add any further references or best practice documents here
542
543 \item[How to test:]
544 % 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.
545
546 \end{description}