Add paragraph "Insecure ciphers" on Sweet32 attack on Blowfish and (3)DES ciphers.
[ach-master.git] / src / practical_settings / vpn.tex
index 487ac2a..ef739ac 100644 (file)
@@ -24,7 +24,7 @@ If you need to use Pre-Shared Key authentication:
 \end{enumerate}
 
 The size of the PSK should not be shorter than the output size of
-the hash algorithm used in IKE \footnote{It is used in a HMAC, see
+the hash algorithm used in IKE\footnote{It is used in a HMAC, see
 RFC2104~\cite{rfc2104} and the discussion starting
 in \url{http://www.vpnc.org/ietf-ipsec/02.ipsec/msg00268.html}.}.
 
@@ -32,21 +32,17 @@ For a key composed of upper- and lowercase letters, numbers, and two
 additional symbols\footnote{64 possible values = 6 bits},
 table~\ref{tab:IPSEC_psk_len} gives the minimum lengths in characters.
 
-\begin{table}[h]
-  \centering
-  \small
-  \begin{tabular}{lc}
-    \toprule
-    IKE Hash & PSK length \\
-    \midrule
-    SHA256 & 43 \\
-    SHA384 & 64 \\
-    SHA512 & 86 \\
-    \bottomrule
-  \end{tabular}
-  \caption{PSK lengths}
-  \label{tab:IPSEC_psk_len}
-\end{table}
+
+\ctable[%
+pos=ht,
+caption={PSK lengths},
+label=tab:IPSEC_psk_len,
+]{lc}{}{
+\FL    IKE Hash & PSK length (chars)
+\ML    SHA256 & 43
+\NN    SHA384 & 64
+\NN    SHA512 & 86
+\LL}
 
 \paragraph{Cryptographic Suites:}
 IPSEC Cryptographic Suites are pre-defined settings for all the items
@@ -60,79 +56,56 @@ equivalents to the recommended ciphers suites in section
 \ref{section:recommendedciphers} are shown in
 table~\ref{tab:IPSEC_suites}.
 
-\begin{table}[h]
-  \centering
-  \small
-  \begin{tabular}{p{2.5cm}p{2.5cm}l}
-    \toprule
-    Configuration A & Configuration B & Notes\\
-    \midrule
-    \verb|Suite-B-GCM-256| &
-    \verb|Suite-B-GCM-128| \newline
-    \verb|VPN-B| 
-    & All Suite-B variants use NIST elliptic curves\\
-    \bottomrule
-  \end{tabular}
-  \caption{IPSEC Cryptographic Suites}
-  \label{tab:IPSEC_suites}
-\end{table}
-
-\paragraph{IKE or Phase 1:}
+\ctable[%
+caption={IPSEC Cryptographic Suites},
+label=tab:IPSEC_suites,
+]{>{\raggedright}p{3cm}>{\raggedright}p{3cm}l}{}{
+\FL    Configuration A & Configuration B & Notes
+\ML
+    \texttt{Suite-B-GCM-256} &
+    \texttt{Suite-B-GCM-128} \newline \texttt{VPN-B} &
+    All Suite-B variants use NIST elliptic curves
+\LL}
+\paragraph{Phase 1:}
 
 Alternatively to the pre-defined cipher suites, you can define your
 own, as described in this and the next section.
 
-IKE or Phase 1 is the mutual authentication and key exchange phase;
+Phase 1 is the mutual authentication and key exchange phase;
 table~\ref{tab:IPSEC_ph1_params} shows the parameters.
 
 Use only ``main mode``, as ``aggressive mode`` has known security
 vulnerabilities \footnote{\url{http://ikecrack.sourceforge.net/}}.
 
-\begin{table}[h]
-  \centering
-  \small
-  \begin{tabular}{lll}
-    \toprule
-    & Configuration A & Configuration B \\
-    \midrule
-    Mode & Main Mode & Main Mode \\
-    Encryption & AES-256 & AES, CAMELLIA (-256 or -128) \\
-    Hash & SHA2-* & SHA2-*, SHA1 \\
-    DH Group & Group 14-18 & Group 14-18 \\
-%    Lifetime & \todo{need recommendations; 1 day seems to be common
-%      practice} & \\
-    \bottomrule
-  \end{tabular}
-  \caption{IPSEC Phase 1 parameters}
-  \label{tab:IPSEC_ph1_params}
-\end{table}
-
-\paragraph{ESP or Phase 2:}
-ESP or Phase 2 is where the actual data are protected; recommended
+\ctable[%
+caption={IPSEC Phase 1 parameters},
+label=tab:IPSEC_ph1_params,
+]{lll}{}{%
+\FL    & Configuration A & Configuration B
+\ML    Mode & Main Mode & Main Mode
+\NN    Encryption & AES-256 & AES, CAMELLIA (-256 or -128)
+\NN    Hash & SHA2-* & SHA2-*, SHA1
+\NN    DH Group & Group 14-18 & Group 14-18
+%\NN    Lifetime & \todo{need recommendations; 1 day seems to be common practice} &
+\LL}
+
+\paragraph{Phase 2:}
+Phase 2 is where the parameters that protect the actual data are negotiated; recommended
 parameters are shown in table \ref{tab:IPSEC_ph2_params}.
 
-\begin{table}[h]
-  \centering
-  \small
-  \begin{tabular}{lll}
-    \toprule
-    & Configuration A & Configuration B \\
-    \midrule
-    Perfect Forward Secrecy & yes & yes \\
-    Encryption & 
-    \parbox[t]{5cm}{\raggedright
-    \mbox{AES-GCM-16}, \mbox{AES-CTR}, \mbox{AES-CCM-16}, \mbox{AES-256}}
-    &
-    \parbox[t]{5cm}{\raggedright
-    \mbox{AES-GCM-16}, \mbox{AES-CTR}, \mbox{AES-CCM-16}, \mbox{AES-256}, \mbox{CAMELLIA-256}, \mbox{AES-128}, \mbox{CAMELLIA-128}} \\
-    Hash & SHA2-* (or none for AEAD) & SHA2-*, SHA1 (or none for AEAD) \\
-    DH Group & Same as Phase 1 & Same as Phase 1 \\
-%    Lifetime & \todo{need recommendations; 1-8 hours is common} & \\
-    \bottomrule
-  \end{tabular}
-  \caption{IPSEC Phase 2 parameters}
-  \label{tab:IPSEC_ph2_params}
-\end{table}
+\ctable[%
+caption={IPSEC Phase 2 parameters},
+label=tab:IPSEC_ph2_params,
+]{l>{\raggedright}p{4.5cm}>{\raggedright}p{6cm}}{}{%
+\FL    & Configuration A & Configuration B
+\ML    Perfect Forward Secrecy & \yes & \yes
+\NN    Encryption & %
+    \mbox{AES-GCM-16}, \mbox{AES-CTR}, \mbox{AES-CCM-16}, \mbox{AES-256} &%
+    \mbox{AES-GCM-16}, \mbox{AES-CTR}, \mbox{AES-CCM-16}, \mbox{AES-256}, \mbox{CAMELLIA-256}, \mbox{AES-128}, \mbox{CAMELLIA-128}
+\NN    Hash & SHA2-* (or none for AEAD) & SHA2-*, SHA1 (or none for AEAD)
+\NN    DH Group & Same as Phase 1 & Same as Phase 1
+%\NN    Lifetime & \todo{need recommendations; 1-8 hours is common} &
+\LL}
 
 \subsubsection{References}
 \begin{itemize*}
@@ -141,9 +114,12 @@ parameters are shown in table \ref{tab:IPSEC_ph2_params}.
 \end{itemize*}
 
 
-%---------------------------------------------------------------------- 
+%----------------------------------------------------------------------
 \subsection{Check Point FireWall-1}
 
+% Attention, only example...
+%Checkpoint firewall is a \gls{firewall} that ....
+
 \subsubsection{Tested with Versions}
 \begin{itemize*}
   \item R77 (should work with any currently supported version)
@@ -165,7 +141,7 @@ Communities can be found in the ``IPSEC VPN'' tab of SmartDashboard.
   \label{fig:checkpoint_1}
 \end{figure}
 
-Either chose one of the encryption suites in the properties dialog
+Either choose one of the encryption suites in the properties dialog
 (figure \ref{fig:checkpoint_1}), or proceed to
 ``Custom Encryption...'', where you can set encryption and hash for
 Phase 1 and 2 (figure \ref{fig:checkpoint_2}).
@@ -219,19 +195,21 @@ Please note that these settings restrict the available algorithms for
 
 %% cipherstrings current 2013-12-09
 % ---------------------------------------------------------------------- 
+\FloatBarrier % the preceding section has several figures. Floating them too far away might get confusing for readers.
+
 \subsection{OpenVPN}
 
 \subsubsection{Tested with Versions}
 \begin{itemize*}
-  \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
-  \item OpenVPN 2.2.1 from Debian Wheezy linked against openssl
-    (libssl.so.1.0.0) 
+  \item OpenVPN 2.3.10 from Ubuntu Xenial 16.04.1 LTS linked against openssl (libssl.so.1.0.0)
+  \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0)
+  \item OpenVPN 2.2.1 from Debian Wheezy linked against openssl (libssl.so.1.0.0)
   \item OpenVPN 2.3.2 for Windows
 \end{itemize*}
 
 \subsubsection{Settings}
 
-\paragraph{General:}
+\paragraph{General}
 We describe a configuration with certificate-based authentication; see
 below for details on the \verb|easyrsa| tool to help you with that.
 
@@ -244,33 +222,26 @@ that is then negotiated as usual with TLS, the \verb|cipher|
 and \verb|auth| options both take a single argument that must match on
 client and server.
 
-\paragraph*{Server Configuration}
+OpenVPN duplexes the tunnel into a data and a control channel. The control
+channel is a usual TLS connection, the data channel currently uses 
+encrypt-then-mac CBC, see \url{https://github.com/BetterCrypto/Applied-Crypto-Hardening/pull/91#issuecomment-75365286}
+
+
+\paragraph{Server Configuration}
+~\\
 % the cipherlist here is config B without the ECDHE strings, because
 % it must fit in 256 bytes...
 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
-\begin{lstlisting}
-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
-cipher AES-256-CBC
-auth SHA384
-\end{lstlisting}
+\configfile{server.conf}{248-250}{Cipher configuration for OpenVPN (Server)}
 
-\paragraph{Client Configuration:}
+\paragraph{Client Configuration}
 Client and server have to use compatible configurations, otherwise they can't communicate.
 The \verb|cipher| and \verb|auth| directives have to be identical.
 
 % the cipherlist here is config B without the ECDHE strings, because
 % it must fit in 256 bytes...
 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
-\begin{lstlisting}
-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
-cipher AES-256-CBC
-auth SHA384
-
-# http://openvpn.net/index.php/open-source/documentation/howto.html#mitm
-remote-cert-tls server
-
-tls-remote server.example.com
-\end{lstlisting}
+\configfile{client.conf}{44-45,115-121}{Cipher and TLS configuration for OpenVPN (Server)}
 
 \subsubsection{Justification for special settings}
 OpenVPN 2.3.1 changed the values that the \verb|tls-cipher| option
@@ -289,7 +260,7 @@ The configuration shown above is compatible with all tested versions.
 
 \subsubsection{References}
 \begin{itemize*}
-  \item OpenVPN Documentation: \emph{Security Overview} \url{http://openvpn.net/index.php/open-source/documentation/security-overview.html}
+  \item OpenVPN Documentation: \emph{Security Overview} \url{https://openvpn.net/index.php/open-source/documentation/security-overview.html}
 \end{itemize*}
 
 %\subsubsection{How to test}
@@ -297,24 +268,42 @@ The configuration shown above is compatible with all tested versions.
 
 \subsubsection{Additional settings}
 
-\paragraph{Key renegotiation interval:}
+\paragraph{Key renegotiation interval}
 The default for renegotiation of encryption keys is one hour
 (\verb|reneg-sec 3600|). If you
 transfer huge amounts of data over your tunnel, you might consider
 configuring a shorter interval, or switch to a byte- or packet-based
 interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
 
-\paragraph{Fixing ``easy-rsa'':}
+\paragraph{Insecure ciphers}
+
+Sweet32\footnote{\url{https://sweet32.info/}} is an attack on 64-bit block
+ciphers, such as \verb|3DES| and \verb|Blowfish| in OpenVPN. The following
+ciphers are affected, and should no longer be used:
+\begin{itemize*}
+  \item BF-*
+  \item DES* (including 3DES variants)
+  \item RC2-*
+\end{itemize*}
+The following ciphers are not affected:
+\begin{itemize*}
+  \item AES-*
+  \item CAMELLIA-*
+  \item SEED-*
+\end{itemize*}
+According to mitigation section on Sweet32 website\footnote{\url{https://sweet32.info/\#impact}}
+users users should change the cipher from the DES or Blowfish to AES
+(\verb|cipher AES-128-CBC|). If cipher change is not possible users can
+mitigate the attack by forcing frequent rekeying (\verb|reneg-bytes 64000000|).
+
+\paragraph{Fixing ``easy-rsa''}
 When installing an OpenVPN server instance, you are probably using
 \emph{easy-rsa} to generate keys and certificates.
 The file \verb|vars| in the easyrsa installation directory has a
 number of settings that should be changed to secure values:
 
-\begin{lstlisting}
-export KEY_SIZE=4096
-export KEY_EXPIRE=365
-export CA_EXPIRE=1826
-\end{lstlisting}
+\configfile{vars}{53-53,56-56,59-59}{Sane default values for OpenVPN (easy-rsa)}
+
 
 This will enhance the security of the key generation by using RSA keys
 with a length of 4096 bits, and set a lifetime of one year for the
@@ -450,8 +439,7 @@ Legacy ASA models (e.g. 5505, 5510, 5520, 5540, 5550) do not offer the possibili
 \end{itemize*}
 
 \subsubsection{Settings}
-NB: The available algorithms depend on your kernel configuration (when using protostack=netkey) and/or
-build-time options.
+Note: the available algorithms depend on your kernel configuration (when using protostack=netkey) and/or build-time options.
 
 To list the supported algorithms
 \begin{lstlisting}
@@ -508,12 +496,39 @@ $ ipsec auto --status | less
 and look for 'IKE algorithms wanted/found' and 'ESP algorithms wanted/loaded'.
 
 \subsubsection{References}
-\todo{more specific References}
+%\todo{more specific References??}
 \begin{itemize*}
   \item \url{https://www.openswan.org/}
 \end{itemize*}
 
 
+\subsection{tinc}
+\subsubsection{Tested with Version}
+\begin{itemize*}
+  \item tinc 1.0.23 from Gentoo linked against OpenSSL 1.0.1e
+  \item tinc 1.0.23 from Sabayon linked against OpenSSL 1.0.1e
+\end{itemize*}
+
+\paragraph*{Defaults}\mbox{}\\
+tinc uses 2048 bit RSA keys, Blowfish-CBC, and SHA1 as default settings and suggests the usage of CBC mode ciphers.
+Any key length up to 8196 is supported and it does not need to be a power of two. OpenSSL Ciphers and Digests are supported by tinc.
+
+\paragraph*{Settings}\mbox{}\\
+Generate keys with
+\begin{lstlisting}[breaklines]
+tincd -n NETNAME -K8196
+\end{lstlisting}
+Old keys will not be deleted (but disabled), you have to delete them manually. Add the following lines to your tinc.conf on all machines
+\configfile{tinc.conf}{3-4}{Cipher and digest selection in tinc}
+
+\paragraph*{References}\mbox{}\\
+\begin{itemize}
+\item tincd(8) man page
+\item tinc.conf(5) man page
+\item \href{http://www.tinc-vpn.org/pipermail/tinc/2014-January/003538.html}{tinc mailinglist: http://www.tinc-vpn.org/pipermail/tinc/2014-January/003538.html}
+\end{itemize}
+
+
 % ---------------------------------------------------------------------- 
 %%\subsection{Juniper VPN}
 %%\todo{write this subsubsection. AK: ask Hannes}