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