Merge branch 'master' of github.com:BetterCrypto/Applied-Crypto-Hardening
[ach-master.git] / src / practical_settings / vpn.tex
1 %%\subsection{VPNs}
2
3 % ---------------------------------------------------------------------- 
4 \subsection{IPSec}
5 \label{section:IPSECgeneral}
6
7 % ciphersuites current 2013-12-09
8 %\begin{description}
9
10 \subsubsection{Settings}
11
12 \paragraph*{Assumptions}\mbox{}\\
13 We assume the use of IKE (v1 or v2) and ESP for this document.
14
15 \paragraph*{Authentication}\mbox{}\\
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 regularly
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} and the discussion starting
32 in \url{http://www.vpnc.org/ietf-ipsec/02.ipsec/msg00268.html}.}.
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 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| &
74     \verb|Suite-B-GCM-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 & Group 14-18 \\
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 AEAD) & SHA2-*, SHA1 (or none for AEAD) \\
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 \subsubsection{References}
142
143
144 ``A Cryptographic Evaluation of IPsec'', Niels Ferguson and Bruce
145   Schneier: \url{https://www.schneier.com/paper-ipsec.pdf}
146
147
148 %---------------------------------------------------------------------- 
149 \subsection{Check Point FireWall-1}
150
151
152 \subsubsection{Tested with Version}
153 \begin{itemize}
154   \item R77 (should work with any currently supported version)
155 \end{itemize}
156
157
158 \subsubsection{Settings}
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]{img/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]{img/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]{img/checkpoint_3.png}
193   \caption{Advanced VPN Properties}
194   \label{fig:checkpoint_3}
195 \end{figure}
196
197
198 \subsubsection{Additional settings}
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]{img/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 %\subsubsection{Justification for special settings (if needed)}
216
217 %\subsubsectionLimitations}
218
219 \subsubsection{References}
220 \begin{itemize}
221 \item Check Point
222   \href{https://sc1.checkpoint.com/documents/R77/CP_R77_VPN_AdminGuide/html_frameset.htm}{VPN R77 Administration Guide} (may require a UserCenter account to access)
223 \end{itemize}
224
225 % \subsubsection{How to test}
226
227
228 %% cipherstrings current 2013-12-09
229 % ---------------------------------------------------------------------- 
230 \subsection{OpenVPN}
231
232
233 \subsubsection{Tested with Version}
234 \begin{itemize}
235   \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
236   \item OpenVPN 2.2.1 from Debian 7.0 linked against openssl (libssl.so.1.0.0) 
237   \item OpenVPN 2.3.2 for Windows
238 \end{itemize}
239
240
241 \subsubsection{Settings}
242 \paragraph{General}\mbox{}\\
243 We describe a configuration with certificate-based authentication; see
244 below for details on the \verb|easyrsa| tool to help you with that.
245
246 OpenVPN uses TLS only for authentication and key exchange. The
247 bulk traffic is then encrypted and authenticated with the OpenVPN
248 protocol using those keys.
249
250 Note that while the \verb|tls-cipher| option takes a list of ciphers
251 that is then negotiated as usual with TLS, the \verb|cipher|
252 and \verb|auth| options both take a single argument that must match on
253 client and server.
254
255 \paragraph{Server Configuration}\mbox{}\\
256 % this is only a DoS-protection, out of scope:
257 % # TLS Authentication
258 % tls-auth ta.key
259 \todo{FIXME: we should use the CIPHERSTRINGB  macro here}
260 % previous:
261 % tls-cipher
262 % 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
263 % the cipherlist here is config B without the ECDHE strings, because
264 % it must fit in 256 bytes...
265 \begin{lstlisting}
266 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
267 cipher AES-256-CBC
268 auth SHA384
269 \end{lstlisting}
270
271 \paragraph{Client Configuration}\mbox{}\\
272 Client and server have to use compatible configurations, otherwise they can't communicate.
273 The \verb|cipher| and \verb|auth| directives have to be identical.
274
275 \begin{lstlisting}
276 tls-cipher %*CIPHERSTRINGB*)
277 cipher AES-256-CBC
278 auth SHA384
279
280 # http://openvpn.net/index