modified crypto map to reflect cipher settings
[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:] OpenVPN 2.3.2 from Debian backports linked against openssl (libssl.so.1.0.0) 
211
212 \todo{cm: please write this subsubsection}
213 \todo{We suppose user uses easy-rsa which is roughly used in all HOWTO\footnote{\url{http://openvpn.net/index.php/open-source/documentation/howto.html}}}
214
215
216 \item[Additional settings:] \mbox{}
217
218 \paragraph{Fine tuning at installation level}
219
220 When installing an OpenVPN server instance, you are probably using {\it easy-rsa} tools to generate the crypto stuff needed.
221 From the directory where you will run them, you can enhance you configuration by changing the following variables in \verb|vars|:
222
223 \begin{lstlisting}[breaklines]
224 export KEY_SIZE=2048 
225 export KEY_EXPIRE=365
226 export CA_EXPIRE=1826
227 \end{lstlisting}
228
229 This will enhance the security of the key generation by using RSA keys
230 with a length of 2048 bits, and set a lifetime of one year for the
231 keys and five years for the CA certificate.
232
233 In addition, edit the \verb|pkitool| script and replace all occurences
234 of \verb|sha1| with \verb|sha256|, to sign the certificates with
235 SHA256.
236
237 \paragraph{Server Configuration}
238
239 In the server configuration file, you can select the algorithm that will be used for traffic encryption.
240 Based on previous recommendation established in that document, select AES with a 256 bits key in CBC mode.
241
242 Note that TLS is used only for negotiation bla bla bla...
243
244 \todo{cm: explain how openvpn crypto works; make configA/B sections/tables}
245
246 \item[Settings:] \mbox{}
247
248 % openvpn --show-ciphers
249 % --show-tls
250
251 \todo{cm: changelog 2.3.1: ``Switch to IANA names for TLS ciphers'' --
252 give both types of strings?}
253
254 \begin{lstlisting}[breaklines]
255 cipher AES-256-CBC   # AES
256
257 # TLS Authentication
258 tls-auth ta.key
259 tls-cipher EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA
260
261 auth SHA512
262
263 reneg-bytes XXX
264 reneg-pkts XXX
265 reneg-sec XXX
266
267 \end{lstlisting}
268
269 % tls-cipher is a list, C&P the string!
270 % what about: TLS-DHE-RSA-WITH-AES-256-CBC-SHA
271 % DH params/DH key sizes
272
273 \todo{Explain a little bit tls-auth and auth directives + TEST}
274 \todo{also test with network-damager?}
275
276 The following ciphers are avaible and recommended\footnote{You can retrieve the list of supported algorithm on your OpenVPN installation thanks to the command {\it openvpn --show-ciphers}}
277 \begin{lstlisting}[breaklines]
278 AES-128-CBC
279 AES-192-CBC
280 AES-256-CBC
281 CAMELLIA-128-CBC
282 CAMELLIA-192-CBC
283 CAMELLIA-256-CBC
284 SEED-CBC
285 \end{lstlisting}
286
287
288 \paragraph{Client Configuration}
289
290 Client and server have to use identical configuration otherwise they can't communicate.
291 The {\it cipher} directive has then to be identical in both server and client configuration.
292
293 \begin{lstlisting}[breaklines]
294 cipher AES-256-CBC   # AES
295
296 remote-cert-tls server # http://openvpn.net/index.php/open-source/documentation/howto.html#mitm
297
298 tls-remote server.example.com
299
300 \end{lstlisting}
301
302 \todo{what about tls-auth keys/ta.key? }. 
303 \todo{what about auth sha512 ?}
304
305 \item[Justification for special settings (if needed):]
306
307 \item[References:] \url{http://openvpn.net/index.php/open-source/documentation/security-overview.html}
308
309 \item[How to test:]
310 \todo{write me please}
311
312
313 \end{description}
314
315
316 \subsubsection{PPTP}
317
318 PPTP is considered insecure, Microsoft recommends to ``use a more secure VPN
319 tunnel''\footnote{\url{http://technet.microsoft.com/en-us/security/advisory/2743314}}.
320
321 There is a cloud service that cracks the underlying MS-CHAPv2
322 authentication protocol for the price of USD~200\footnote{\url{https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/}},
323 and given the resulting MD4 hash, all PPTP traffic for a user can
324 be decrypted.
325
326 \subsubsection{Cisco ASA IPSec and AnyConnect (SSL/TLS)}
327 \todo{write this subsubsection}
328
329 \begin{description}
330 \item[Tested with Version:] \todo{version?}
331 ASA Version 9.1(3)
332 \item[Settings:] \mbox{}
333
334 \begin{lstlisting}[breaklines]
335 crypto ipsec ikev2 ipsec-proposal AES-Fallback
336  protocol esp encryption aes-256 aes-192 aes
337  protocol esp integrity sha-512 sha-384 sha-256
338 crypto ipsec ikev2 ipsec-proposal AES-GMAC-Fallback
339  protocol esp encryption aes-gmac-256 aes-gmac-192 aes-gmac
340  protocol esp integrity sha-512 sha-384 sha-256
341 crypto ipsec ikev2 ipsec-proposal AES128-GMAC
342  protocol esp encryption aes-gmac
343  protocol esp integrity sha-512
344 crypto ipsec ikev2 ipsec-proposal AES192-GMAC
345  protocol esp encryption aes-gcm-192
346  protocol esp integrity sha-512
347 crypto ipsec ikev2 ipsec-proposal AES256-GMAC
348  protocol esp encryption aes-gmac-256
349  protocol esp integrity sha-512
350 crypto ipsec ikev2 ipsec-proposal AES-GCM-Fallback
351  protocol esp encryption aes-gcm-256 aes-gcm-192 aes-gcm
352  protocol esp integrity sha-512 sha-384 sha-256
353 crypto ipsec ikev2 ipsec-proposal AES128-GCM
354  protocol esp encryption aes-gcm
355  protocol esp integrity sha-512
356 crypto ipsec ikev2 ipsec-proposal AES192-GCM
357  protocol esp encryption aes-gcm-192
358  protocol esp integrity sha-512
359 crypto ipsec ikev2 ipsec-proposal AES256-GCM
360  protocol esp encryption aes-gcm-256
361  protocol esp integrity sha-512
362 crypto ipsec ikev2 ipsec-proposal DES
363  protocol esp encryption des
364  protocol esp integrity sha-1 md5
365 crypto ipsec ikev2 ipsec-proposal 3DES
366  protocol esp encryption 3des
367  protocol esp integrity sha-1 md5
368 crypto ipsec ikev2 ipsec-proposal AES
369  protocol esp encryption aes
370  protocol esp integrity sha-1 md5
371 crypto ipsec ikev2 ipsec-proposal AES192
372  protocol esp encryption aes-192
373  protocol esp integrity sha-1 md5
374 crypto ipsec ikev2 ipsec-proposal AES256
375  protocol esp encryption aes-256
376  protocol esp integrity sha-1 md5
377 crypto ipsec ikev2 sa-strength-enforcement
378 crypto ipsec security-association pmtu-aging infinite
379 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set pfs group14
380 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
381 crypto map Outside-DMZ_map 65535 ipsec-isakmp dynamic SYSTEM_DEFAULT_CRYPTO_MAP
382
383 crypto ikev2 policy 1
384  encryption aes-gcm-256
385  integrity null
386  group 24 14
387  prf sha512 sha384 sha256 sha
388  lifetime seconds 86400
389 crypto ikev2 policy 2
390  encryption aes-gcm-256 aes-gcm-192 aes-gcm
391  integrity null
392  group 24 14 5
393  prf sha512 sha384 sha256 sha
394  lifetime seconds 86400
395 crypto ikev2 policy 3
396  encryption aes-256 aes-192 aes
397  integrity sha512 sha384 sha256
398  group 24 14
399  prf sha512 sha384 sha256 sha
400  lifetime seconds 86400
401 crypto ikev2 policy 4
402  encryption aes-256 aes-192 aes
403  integrity sha512 sha384 sha256 sha
404  group 24 14 5
405  prf sha512 sha384 sha256 sha
406  lifetime seconds 86400
407 crypto ikev2 enable Outside-DMZ client-services port 443
408 crypto ikev2 remote-access trustpoint ASDM_TrustPoint0
409
410 ssl server-version tlsv1-only
411 ssl client-version tlsv1-only
412 ssl encryption dhe-aes256-sha1 dhe-aes128-sha1 aes256-sha1 aes128-sha1
413 ssl trust-point ASDM_TrustPoint0 Outside-DMZ
414 \end{lstlisting}
415
416 \item[Additional settings:] \mbox{}
417
418 %Here you can add additional settings
419
420 \begin{lstlisting}[breaklines]
421     %copy \& paste additional settings
422 \end{lstlisting}
423
424 \item[Justification for special settings (if needed):] \mbox{}
425
426 % 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
427
428 \item[References:] \todo{add references}
429
430 % add any further references or best practice documents here
431
432 \item[How to test:] 
433 % 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.
434
435 \end{description}
436
437
438
439
440
441
442
443 \subsubsection{Juniper VPN}
444 \todo{write this subsubsection. AK: ask Hannes}
445
446
447 \begin{description}
448 \item[Tested with Version:] \todo{version?}
449
450 \item[Settings:] \mbox{}
451
452 \begin{lstlisting}[breaklines]
453     %Here goes your setting string
454 \end{lstlisting}
455
456 \item[Additional settings:] \mbox{}
457
458 %Here you can add additional settings
459
460 \begin{lstlisting}[breaklines]
461     %copy \& paste additional settings
462 \end{lstlisting}
463
464 \item[Justification for special settings (if needed):] \mbox{}
465
466 % 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
467
468 \item[References:] \todo{add references}
469
470 % add any further references or best practice documents here
471
472 \item[How to test:]
473 % 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.
474
475 \end{description}
476
477
478
479
480
481 \subsubsection{L2TP over IPSec}
482 \todo{write this subsubsection}
483
484
485 \begin{description}
486 \item[Tested with Version:] \todo{version?}
487
488 \item[Settings:] \mbox{}
489
490 \begin{lstlisting}[breaklines]
491     %Here goes your setting string
492 \end{lstlisting}
493
494 \item[Additional settings:] \mbox{}
495
496 %Here you can add additional settings
497
498 \begin{lstlisting}[breaklines]
499     %copy \& paste additional settings
500 \end{lstlisting}
501
502 \item[Justification for special settings (if needed):] \mbox{}
503
504 % 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
505
506 \item[References:] \todo{add references}
507
508 % add any further references or best practice documents here
509
510 \item[How to test:]
511 % 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.
512
513 \end{description}
514
515
516
517
518
519
520 \subsubsection{Racoon}
521 \todo{write this subsubsection}
522
523
524 \begin{description}
525 \item[Tested with Version:] \todo{version?}
526
527 \item[Settings:] \mbox{}
528
529 \begin{lstlisting}[breaklines]
530     %Here goes your setting string
531 \end{lstlisting}
532
533 \item[Additional settings:] \mbox{}
534
535 %Here you can add additional settings
536
537 \begin{lstlisting}[breaklines]
538     %copy \& paste additional settings
539 \end{lstlisting}
540
541 \item[Justification for special settings (if needed):] \mbox{}
542
543 % 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
544
545 \item[References:] \todo{add references}
546
547 % add any further references or best practice documents here
548
549 \item[How to test:]
550 % 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.
551
552 \end{description}