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