merging webserver.tex with upstream
authorsebix <szebi@gmx.at>
Mon, 23 Dec 2013 21:26:29 +0000 (22:26 +0100)
committersebix <szebi@gmx.at>
Mon, 23 Dec 2013 21:26:29 +0000 (22:26 +0100)
19 files changed:
.gitignore
presentations/30C3_bettercrypto.org_LT.pdf [new file with mode: 0644]
src/ECC.tex
src/RNGs.tex
src/abstract.tex
src/applied-crypto-hardening.synctex.gz [deleted file]
src/applied-crypto-hardening.tex
src/disclaimer.tex
src/howtoread.tex
src/methods.tex
src/practical_settings/mailserver.tex
src/practical_settings/ssh.tex
src/practical_settings/vpn.tex
src/practical_settings/webserver.tex
src/related_publications.tex [new file with mode: 0644]
src/security.bib
src/theory.tex [new file with mode: 0644]
src/theory/overview.tex [new file with mode: 0644]
src/whoshouldread.tex [new file with mode: 0644]

index 19cac69..9fc8b05 100644 (file)
@@ -2,4 +2,4 @@
 old
 old/*
 foo
-src/foo
\ No newline at end of file
+src/foosrc/missfont.log
diff --git a/presentations/30C3_bettercrypto.org_LT.pdf b/presentations/30C3_bettercrypto.org_LT.pdf
new file mode 100644 (file)
index 0000000..d313245
Binary files /dev/null and b/presentations/30C3_bettercrypto.org_LT.pdf differ
index e3b5aa0..9d245c3 100644 (file)
@@ -1,6 +1,10 @@
 \section{A note on Elliptic Curve Cryptography}
 \label{section:EllipticCurveCryptography}
 
+%\epigraph{``Mathematics is the queen of the sciences and number theory is the queen of mathematics.''}{-- Carl Friedrich Gauss}
+
+\epigraph{``Everyone knows what a curve is, until he has studied enough mathematics to become confused through the countless number of possible exceptions.''}{-- Felix Klein }
+
 Elliptic Curve Cryptogaphy (simply called ECC from now on) is a branch of 
 cryptography that emerged in the mid-1980ties.
 The security of the RSA algorithm is based on the assumption that factoring 
index 3b791f2..ebe939c 100644 (file)
@@ -3,6 +3,8 @@
 
 % This section was authored by Ralf Schlatterbeck (Ralf Schlatterbeck <rsc@runtux.com>)
 
+\epigraph{``The generation of random numbers is too important to be left to chance.''}{-- Robert R. Coveyou}
+
 A good source of random numbers is essential for many crypto
 operations. The key feature of a good random number generator is the
 non-predictability of the generated numbers. This means that hardware
index f1160a4..f9c3e61 100644 (file)
@@ -14,7 +14,7 @@
 
 \vskip 2em
 
-\epigraph{``Unfortunately, the computer security and cryptology communities have drifted apart over the last 25 years. Security people don't always understand the available crypto tools, and crypto people don't always understand the real-world problems.``}{-- Ross Anderson in \cite{anderson2008security}}
+\epigraph{``Unfortunately, the computer security and cryptology communities have drifted apart over the last 25 years. Security people don't always understand the available crypto tools, and crypto people don't always understand the real-world problems.''}{-- Ross Anderson in \cite{anderson2008security}}
 
 \vskip 2em
 
diff --git a/src/applied-crypto-hardening.synctex.gz b/src/applied-crypto-hardening.synctex.gz
deleted file mode 100644 (file)
index 6364daf..0000000
Binary files a/src/applied-crypto-hardening.synctex.gz and /dev/null differ
index 18f7215..1b5857d 100644 (file)
@@ -49,7 +49,6 @@
 
 
 
-
 \usepackage{gitinfo}
 
 % custom changes:
 \definecolor{CadetBlue}{cmyk}{0.62,0.57,0.23,0}
 \definecolor{lightlightgray}{gray}{0.9}
 
+\usepackage{titlesec}
+%\allsectionsfont{\color{darkblue}\itshape\underline}
+%\sectionfont{\color{darkblue}\itshape\selectfont}
+%\subsectionfont{\color{darkblue}\itshape\selectfont}
+\renewcommand*\sectfont{\sffamily\color{darkblue}\mdseries}
+%\renewcommand*\sectfont{\rmfamily\mdseries\itshape}
+
+
 % makes default font sans-serif
  \renewcommand{\familydefault}{\sfdefault}
 
@@ -219,7 +226,7 @@ morekeywords={__global__, __device__},  %
 \date{\today}
 
 % hyperref needs to be the last package you load.
-\usepackage[pdftex,breaklinks,colorlinks,citecolor=blue,urlcolor=blue]{hyperref}
+\usepackage[pdftex,breaklinks,colorlinks,linkcolor=darkblue,citecolor=blue,urlcolor=blue]{hyperref}
 
 
 %%% Begin document
@@ -234,6 +241,8 @@ morekeywords={__global__, __device__},  %
 \tableofcontents
 \chapter{Introduction}
 \label{chapter:Intro}
+\input{whoshouldread}
+\input{related_publications}
 \input{howtoread}
 \input{disclaimer}
 \input{motivation}
@@ -244,16 +253,9 @@ morekeywords={__global__, __device__},  %
 \input{practical_settings}
 %%
 \chapter{Theory}
-\epigraph{``Number theorists are like lotus-eaters - having tasted this food they can never give it up.''}{-- Leopold Kronecker}
+%\epigraph{``Number theorists are like lotus-eaters - having tasted this food they can never give it up.''}{-- Leopold Kronecker}
 \label{chapter:Theory}
-\input{PKIs}
-\input{ECC}
-\input{SHA}
-\input{DH}
-\input{keylengths}
-\input{RNGs}
-\input{cipher_suites}
-\input{ssllibs}
+\input{theory}
 \chapter{Appendix}
 \input{tools}
 \input{links}
index 138a63a..db0ea23 100644 (file)
@@ -1,7 +1,14 @@
+\newpage
 \section{Disclaimer and scope}
 \label{section:disclaimer}
 
-\epigraph{``A chain is no stronger than its weakest link, and life is after all a chain``}{-- William James}
+\epigraph{``A chain is no stronger than its weakest link, and life is after all a chain''}{-- William James}
+
+\epigraph{``Encryption works. Properly implemented strong crypto systems are
+one of the few things that you can rely on. Unfortunately, endpoint security is
+so terrifically weak that NSA can frequently find ways around it.''}{-— Edward
+Snowden, answering questions live on the Guardian's
+website\cite{snowdenGuardianGreenwald}}
 
 
 This guide specifically does not address physical security, protecting software
@@ -21,6 +28,7 @@ with.\footnote{An easy to read yet very insightful recent example is the
 "FLUSH+RELOAD" technique \cite{yarom2013flush+} for leaking cryptographic keys
 from one virtual machine to another via L3 cache timing attacks.}
 
+\vskip 0.5em
 This guide does not talk much about the well-known insecurities of trusting a
 public-key infrastructure (PKI)\footnote{Interested readers are referred to
 \url{https://bugzilla.mozilla.org/show_bug.cgi?id=647959} or
@@ -28,6 +36,8 @@ public-key infrastructure (PKI)\footnote{Interested readers are referred to
 (german) which brings the problem of trusting PKIs right to the point}. Nor
 does this text fully explain how to run your own Certificate Authority (CA). 
 
+
+\vskip 0.5em
 Most of this zoo of information security issues are addressed in the very
 comprehensive book ``Security Engineering'' by Ross Anderson
 \cite{anderson2008security}. 
@@ -37,9 +47,10 @@ strive to keep the language as non-technical as possible and fitting for our
 target audience: system administrators who can collectively improve the
 security level for all of their users. 
 
+\vskip 0.5em
 
 
-\epigraph{``Security is a process, not a product.``}{-- Bruce Schneier}
+\epigraph{``Security is a process, not a product.''}{-- Bruce Schneier}
 
 This guide can only describe what the authors currently
 \emph{believe} to be the best settings based on their personal experience and
@@ -51,6 +62,7 @@ mind that tomorrow there might be new attacks on some ciphers and many of the
 recommendations in this guide might turn out to be wrong. Security is a
 process.
 
+\vskip 0.5em
 
 We therefore recommend that system administrators keep up to date with recent
 topics in IT security and cryptography. 
index 46b2395..20d2a97 100644 (file)
@@ -1,9 +1,21 @@
 \section{How to read this guide}
 
-%This guide starts with some general remarks in sections \ref{section:DH},\ref{section:EllipticCurveCryptography},\ref{section:keylengths} on 
+This guide tries to accomodate two needs: first of all, having a handy reference on how to configure the most common services's crypto settings and second of all, explaining a bit, how to chose your own cipher settings.
+\vskip 0.5em
 
+System administrators who want to copy \& paste recommendations quickly without spending a lot of time on background reading on cryptography or cryptanalysis can do so, by simply searching for the corresponding section in chapter  \ref{section:PracticalSettings} (``Practical recommendations''). However, for the quick copy \& paste approach it is important to know that this guide assumes users are happy with \textit{cipher String B} which is the baseline and most compatible recommendation that the authors came up with. \textit{Cipher string B} is described in \ref{section:recommendedciphers}.
+\textit{Cipher String B} covers the most common use-cases (such as running an e-commerce shop, a private homagepage, a mail server, $ \ldots $)
 
-If you are a system administrator and want to quickly update your services, jump right to section \ref{section:PracticalSettings}. However, we recommend that you take some time and first read through the theory part (chapter \ref{chapter:Theory}), especially section \ref{section:CipherSuites} on how to choose your own cipher string and then adapt the settings in section \ref{section:PracticalSettings} to your own needs.
+
+\vskip 0.5em
+
+While chapter \ref{section:PracticalSettings} is intended to server as a copy \& paste reference, chapter \ref{chapter:Theory} (``Theory'') explains the reasoning behind \textit{cipher string B}. In particular, section \ref{section:CipherSuites} explains how to choose individual cipher strings. We advise the reader to actually read this section and challenge our reasoning in chosing \textit{cipher string B} and to come up with a better  or localized solution.
+
+
+%We start with some general remarks in sections \ref{section:DH},\ref{section:EllipticCurveCryptography},\ref{section:keylengths} on 
+
+
+%If you are a system administrator and want to quickly update your services, jump right to section \ref{section:PracticalSettings}. However, we recommend that you take some time and first read through the theory part (chapter \ref{chapter:Theory}), especially section \ref{section:CipherSuites} on how to choose your own cipher string and then adapt the settings in section \ref{section:PracticalSettings} to your own needs.
 
 \vskip 1.5em
 
index e608eb6..89dfb6f 100644 (file)
@@ -18,7 +18,13 @@ requests'' on the github
 mirror\footnote{\url{https://github.com/BetterCrypto/Applied-Crypto-Hardening}}
 for this paper.
 
+
+\vskip 0.5em
+
 Public peer-review and ``multiple eyes'' checking of our publication is the
 best strategy we can imagine at the present moment
 \footnote{\url{http://www.wired.com/opinion/2013/10/how-to-design-and-defend-against-the-perfect-backdoor/}}.
 
+\vskip 0.5em
+We invite the gentle reader to participate in this public review process.
+
index 693d11e..42a3cdf 100644 (file)
@@ -2,13 +2,59 @@
 
 This section documents the most common mail (SMTP) and IMAPs/POPs servers. Another option to secure IMAPs/POPs servers is to place them behind an stunnel server. 
 
-\subsubsection{Dovecot}
 
+%% ---------------------------------------------------------------------- 
+
+\subsection{SMTP in general}
+\label{subsection:smtp_general}
+
+SMTP usually makes use of opportunistic TLS. This means that an MTA will accept TLS connections when asked for it during handshake but will not require it. One should always support incoming opportunistic TLS and always try TLS handshake outgoing.\\
+
+Furthermore a mailserver can operate in three modes:
+\begin{itemize}
+\item As MSA (Mail Submission Agent) your mailserver receives mail from your clients MUAs (Mail User Agent).
+\item As receiving MTA (Mail Transmission Agent, MX)
+\item As sending MTA (SMTP client)
+\end{itemize}
+\mbox{}\\
+We recommend the following basic setup for all modes:
+\begin{itemize}
+\item correctly setup MX, A and PTR RRs without using CNAMEs at all.
+\item enable encryption (opportunistic TLS)
+\item do not use self signed certificates
+\end{itemize}
+
+For SMTP client mode we additionally recommend:
+\begin{itemize}
+\item the hostname used as HELO must match the PTR RR
+\item setup a client certificate (most server certificates are client certificates as well)
+\item either the common name or at least an alternate subject name of your certificate must match the PTR RR
+\item do not modify the cipher suite for client mode
+\end{itemize}
+
+For MSA operation we recommend:
+\begin{itemize}
+\item listen on submission port 587
+\item enforce SMTP AUTH even for local networks
+\item do not allow SMTP AUTH on unencrypted connections
+\item optionally use the recommended cipher suites if (and only if) all your connecting MUAs support them
+\end{itemize}
+
+
+
+% Note that (with the exception of MSA mode), it might be better to allow any cipher suite -- since any encryption is better than no encryption when it comes to opportunistic TLS.
+
+We strongly recommend to allow all cipher suites for anything but MSA
+mode, because the alternative is plain text transmission.
+
+%% ---------------------------------------------------------------------- 
 
-\begin{description}
-\item[Tested with Version:] Dovecot 2.2:
+\subsection{Dovecot}
 
-\item[Settings:] \mbox{}
+
+\subsubsection{Tested with Version} Dovecot 2.2
+
+\subsubsection{Settings}
 % Example: http://dovecot.org/list/dovecot/2013-October/092999.html
 
 \begin{lstlisting}[breaklines]
@@ -16,12 +62,12 @@ This section documents the most common mail (SMTP) and IMAPs/POPs servers. Anoth
   ssl_prefer_server_ciphers = yes
 \end{lstlisting}
 
-\item[Additional info:] \mbox{}
+\subsubsection{Additional info}
 
 Dovecot 2.1: Almost as good as dovecot 2.2. Does not support
 ssl\_prefer\_server\_ciphers
 
-\item[Limitations:] \mbox{}
+\subsubsection{Limitations}
 
 Dovecot currently does not support disabling TLS compression. Furthermore, DH
 parameters greater than 1024bit are not supported. The most recent version
@@ -32,21 +78,24 @@ parameters greater than 1024bit are not supported. The most recent version
 
 % 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
 
-\item[References:] \url{http://wiki2.dovecot.org/SSL}
+\subsubsection{References} \url{http://wiki2.dovecot.org/SSL}
 
 % add any further references or best practice documents here
 
-\item[How to test:]
+\subsubsection{How to test}
 % 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.
+\begin{lstlisting}[breaklines]
+ openssl s_client -crlf -connect SERVER.TLD:993
+\end{lstlisting}
 
-\todo{FIXME}
-
-\end{description}
 
 %% ---------------------------------------------------------------------- 
 
-\subsubsection{cyrus-imapd (based on 2.4.17)}
+\subsection{cyrus-imapd (based on 2.4.17)}
+
+\subsubsection{Tested with Version} \todo{FIXME: add}
 
+\subsubsection{Settings}
 \paragraph*{imapd.conf}\mbox{}\\
 
 To activate SSL/TLS configure your certificate with
@@ -88,7 +137,7 @@ To support POP3S/IMAPS on ports 995/993 add
 \end{lstlisting}
 
 
-\paragraph*{Limitations}\mbox{}\\
+\subsubsection{Limitations}
 
 cyrus-imapd currently (2.4.17, trunk) does not support elliptic curve cryptography. Hence, ECDHE will not work even if defined in your cipher list.\\
 
@@ -97,7 +146,10 @@ Currently there is no way to prefer server ciphers or to disable compression.\\
 There is a working patch for all three features:
 \url{https://bugzilla.cyrusimap.org/show_bug.cgi?id=3823}\\
 
-
+\subsubsection{How to test}
+\begin{lstlisting}[breaklines]
+  openssl s_client -crlf -connect SERVER.TLD:993
+\end{lstlisting}
 
 
 
@@ -107,62 +159,10 @@ There is a working patch for all three features:
 % options = CIPHER_SERVER_PREFERENCE
 % TIMEOUTclose = 1
 
-%% ---------------------------------------------------------------------- 
-
-\subsubsection{SMTP in general}
-\label{subsection:smtp_general}
+\subsection{Postfix}
 
-SMTP usually makes use of opportunistic TLS. This means that an MTA will accept TLS connections when asked for it during handshake but will not require it. One should always support incoming opportunistic TLS and always try TLS handshake outgoing.\\
-
-Furthermore a mailserver can operate in three modes:
-\begin{itemize}
-\item As MSA (Mail Submission Agent) your mailserver receives mail from your clients MUAs (Mail User Agent).
-\item As receiving MTA (Mail Transmission Agent, MX)
-\item As sending MTA (SMTP client)
-\end{itemize}
-\mbox{}\\
-We recommend the following basic setup for all modes:
-\begin{itemize}
-\item correctly setup MX, A and PTR RRs without using CNAMEs at all.
-\item enable encryption (opportunistic TLS)
-\item do not use self signed certificates
-\end{itemize}
-
-For SMTP client mode we additionally recommend:
-\begin{itemize}
-\item the hostname used as HELO must match the PTR RR
-\item setup a client certificate (most server certificates are client certificates as well)
-\item either the common name or at least an alternate subject name of your certificate must match the PTR RR
-\item do not modify the cipher suite for client mode
-\end{itemize}
-
-For MSA operation we recommend:
-\begin{itemize}
-\item listen on submission port 587
-\item enforce SMTP AUTH even for local networks
-\item do not allow SMTP AUTH on unencrypted connections
-\item optionally use the recommended cipher suites if (and only if) all your connecting MUAs support them
-\end{itemize}
-
-
-
-% Note that (with the exception of MSA mode), it might be better to allow any cipher suite -- since any encryption is better than no encryption when it comes to opportunistic TLS.
-
-We strongly recommend to allow all cipher suites for anything but MSA
-mode, because the alternative is plain text transmission.
-
-%% ---------------------------------------------------------------------- 
-
-\subsubsection{Postfix}
-
-\begin{description}
-\item[Tested with Version:] \mbox{}
-
-\begin{itemize}
-\item Postfix 2.9.6 (Debian Wheezy)
-\end{itemize}
-
-\item[Settings:] \mbox{}
+\subsubsection{Tested with Version} Postfix 2.9.6 (Debian Wheezy)
+\subsubsection{Settings}
 
 %% I (cm) consider the generation of own DH parameters to be voodoo until
 %% someone can explain the contrary. They are, after all, public, and
@@ -238,7 +238,7 @@ For those users who want to use ECC key exchange, it is possible to specify this
   smtpd_tls_eecdh_grade = ultra
 \end{lstlisting}
 
-\item[Limitations:] \mbox{}
+\subsubsection{Limitations}
 
 tls\_ssl\_options is supported from Postfix 2.11 onwards. You can
 leave the statement in the configuration for older versions, it will
@@ -247,12 +247,12 @@ be ignored.
 tls\_preempt\_cipherlist is supported from Postfix 2.8 onwards. Again,
 you can leave the statement in for older versions.
 
-\item[References:]
+\subsubsection{References}
 
 Refer to \url{http://www.postfix.org/TLS_README.html} for an in-depth
 discussion.
 
-\item[Additional settings:]
+\subsubsection{Additional settings}
 
 Postfix has two sets of built-in DH parameters that can be overridden
 with the \verb|smtpd_tls_dh512_param_file|
@@ -268,7 +268,8 @@ interoperability risk, but we have not tested this yet.
 % \item[Justification for special settings (if needed):]
 % no special settings
 
-\item[How to test:]
+
+\subsubsection{How to test}
 
 You can check the effect of the settings with the following command:
 \begin{lstlisting}[breaklines]
@@ -280,17 +281,18 @@ $ zegrep "TLS connection established from.*with cipher" | /var/log/mail.log | aw
     335 TLSv1 with cipher DHE-RSA-AES256-SHA
 \end{lstlisting}
 
-\end{description}
+\begin{lstlisting}[breaklines]
+ openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
+\end{lstlisting}
 
+\subsubsection{References} \todo{FIXME}
 
 %% ---------------------------------------------------------------------- 
 
-\subsubsection{Exim (based on 4.82)}
+\subsection{Exim (based on 4.82)}
 
 It is highly recommended to read
-
 \url{http://exim.org/exim-html-current/doc/html/spec_html/ch-encrypted_smtp_connections_using_tlsssl.html}
-
 first.
 
 \paragraph*{MSA mode (submission)}\mbox{}\\
@@ -440,42 +442,16 @@ Exim currently (4.82) does not support elliptic curves with OpenSSL. This means
 There already is a working patch to provide support:\\
 \url{http://bugs.exim.org/show_bug.cgi?id=1397}
 
-
-% do we need to documment starttls in detail?
-%\subsubsection{starttls?}
-
-%% ----------------------------------------------------------------------
-\subsubsection{Exchange}
-
-\todo{FIXME: write this section}
-
-\begin{description}
-\item[Tested with Version:] \todo{version?}
-
-\item[Settings:] \mbox{}
-
+\paragraph*{How to test}\mbox{}\\
 \begin{lstlisting}[breaklines]
-    %Here goes your setting string
+ openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
 \end{lstlisting}
 
-\item[Additional settings:] \mbox{}
-
-%Here you can add additional settings
-
-\begin{lstlisting}[breaklines]
-    %copy \& paste additional settings
-\end{lstlisting}
 
-\item[Justification for special settings (if needed):] \mbox{}
-
-% 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
-
-\item[References:] \todo{add references}
+%% ----------------------------------------------------------------------
+\subsection{Exchange}
 
-% add any further references or best practice documents here
+\todo{FIXME: write this section}
 
-\item[How to test:]
-% 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.
 
-\end{description}
 
index 960c14e..25bc3d0 100644 (file)
@@ -1,12 +1,7 @@
+%%---------------------------------------------------------------------- 
 \subsection{OpenSSH}
-
-
-\begin{description}
-\item[Tested with Version:] OpenSSH 6.1
-
-\item[Settings:] \mbox{}
-
-
+\subsubsection{Tested with Version} OpenSSH 6.1
+\subsubsection{Settings}
 \paragraph*{sshd_config}
 \begin{lstlisting}[breaklines]
        # ...
@@ -23,7 +18,6 @@
 \end{lstlisting}
 
 % XXX: curve25519-sha256@libssh.org only available upstream(!)
-
 Note: Older linux systems won't support SHA2. PuTTY (Windows) does not support
 RIPE-MD160. Curve25519, AES-GCM and UMAC are only available upstream (OpenSSH
 6.1). DSA host keys have been removed on purpose, the DSS standard does not
@@ -32,29 +26,22 @@ support for DSA keys stronger than 1024bit
 below current standards (see section \ref{section:keylengths}). Legacy systems
 can use this configuration and simply omit unsupported ciphers, key exchange
 algorithms and MACs.  
-
-\item[Additional settings:] \mbox{}
-
+\subsubsection{Additional settings}
 Note that the setting \texttt{ServerKeyBits 4096}  has no effect until you re-generate new ssh host keys. There might be issues if you have users which rely on the fingerprint of the old ssh host key being stored in their clients' \texttt{.ssh/known\_hosts} file.
-
-\item[References:]
+%\subsubsection{Justification for special settings (if needed)}
+\subsubsection{References}
 The openssh sshd\_config  man page is the best reference: \url{http://www.openssh.org/cgi-bin/man.cgi?query=sshd_config}
-
-
-\item[How to test:]
+\subsubsection{How to test}
 Connect a client with verbose logging enabled to the SSH server \\
 \begin{lstlisting}[breaklines]
 $ ssh -vvv myserver.com
 \end{lstlisting}and observe the key exchange in the output.
-\end{description}
 
-\subsection{Cisco ASA}
 
-
-\begin{description}
-\item[Tested with Version:]9.1(3) 
-
-\item[Settings:] \mbox{}
+%%---------------------------------------------------------------------- 
+\subsection{Cisco ASA}
+\subsubsection{Tested with Version} 9.1(3)
+\subsubsection{Settings}
 \begin{lstlisting}[breaklines]
 crypto key generate rsa modulus 2048
 ssh version 2
@@ -63,25 +50,19 @@ line vty 0 4
  transport input ssh
 \end{lstlisting}
 Note: When the ASA is configured for SSH, by default both SSH versions 1 and 2 are allowed. In addition to that, only a group1 DH-key-exchange is used. This should be changed to allow only SSH version 2 and to use a key-exchnage with group14. The generated RSA key should be 2048 bit (the actual supported maximum). A non-cryptographic best practice is to reconfigure the lines to only allow SSH-logins.
-\item[References:]
-http://www.cisco.com/en/US/docs/security/asa/asa91/configuration/general/admin\_management.html 
-
-
-\item[How to test:]
+\subsubsection{References}
+\url{http://www.cisco.com/en/US/docs/security/asa/asa91/configuration/general/admin\_management.html }
+\subsubsection{How to test}
 Connect a client with verbose logging enabled to the SSH server \\
 \begin{lstlisting}[breaklines]
 $ ssh -vvv myserver.com
 \end{lstlisting}and observe the key exchange in the output.
-\end{description}
 
 
+%---------------------------------------------------------------------- 
 \subsection{Cisco IOS}
-
-
-\begin{description}
-\item[Tested with Version:] 15.0, 15.1, 15.2
-
-\item[Settings:] \mbox{}
+\subsubsection{Tested with Version} 15.0, 15.1, 15.2
+\subsubsection{Settings}
 \begin{lstlisting}[breaklines]
 crypto key generate rsa modulus 2048 label SSH-KEYS
 ip ssh rsa keypair-name SSH-KEYS
@@ -90,15 +71,11 @@ ip ssh dh min size 2048
 \end{lstlisting}
 Note: Same as with the ASA, also on IOS by default both SSH versions 1 and 2 are allowed and the DH-key-exchange only use a DH-group of 768 Bit.
 In IOS, a dedicated Key-pair can be bound to SSH to reduce the usage of individual keys-pairs.
-
-\item[References:]
-http://www.cisco.com/en/US/docs/ios/sec\_user\_services/configuration/guide/sec\_secure\_shell\_v2.html 
-
+\subsubsection{References}
+\url{http://www.cisco.com/en/US/docs/ios/sec\_user\_services/configuration/guide/sec\_secure\_shell\_v2.html }
 % add any further references or best practice documents here
-
-\item[How to test:]
+\subsubsection{How to test}
 Connect a client with verbose logging enabled to the SSH server \\
 \begin{lstlisting}[breaklines]
 $ ssh -vvv myserver.com
 \end{lstlisting}and observe the key exchange in the output.
-\end{description}
index a572ada..f2a5b95 100644 (file)
@@ -268,7 +268,7 @@ client and server.
 % this is only a DoS-protection, out of scope:
 % # TLS Authentication
 % tls-auth ta.key
-
+\todo{FIXME: we should use the CIPHERSTRINGB  macro here}
 % previous:
 % tls-cipher
 % 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
@@ -285,6 +285,7 @@ auth SHA384
 Client and server have to use compatible configurations, otherwise they can't communicate.
 The \verb|cipher| and \verb|auth| directives have to be identical.
 
+\todo{FIXME: we should use the CIPHERSTRINGB  macro here}
 \begin{lstlisting}[breaklines]
 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
index 59d69d3..086f3e0 100644 (file)
@@ -3,7 +3,7 @@
 %%---------------------------------------------------------------------- 
 \subsection{Apache}
 
-\subsubsection{Tested with Versions}
+\subsubsection{Tested with Versions} \todo{FIXME: add}
 %\begin{itemize}
 %\end{itemize}
 
@@ -31,9 +31,10 @@ Enabled modules \emph{SSL} and \emph{Headers} are required.
 Note again, that any cipher suite starting with ECDHE can be omitted, if in doubt.
 
 
+\vskip 1.0em
 \subsubsection{Additional settings}
 
-You should redirect everything to httpS:// if possible. In Apache you can do this with the following setting inside of a VirtualHost environment:
+You might want to redirect everything to httpS:// if possible. In Apache you can do this with the following setting inside of a VirtualHost environment:
 
 \begin{lstlisting}[breaklines]
   <VirtualHost *:80>
@@ -161,7 +162,7 @@ If you decide to trust NIST's ECC curve recommendation, you can add the followin
   ssl_ecdh_curve          secp384r1;
 \end{lstlisting}
 
-You should redirect everything to httpS:// if possible. In Nginx you can do this with the following setting:
+You might want to redirect everything to httpS:// if possible. In Nginx you can do this with the following setting:
 
 \begin{lstlisting}[breaklines]
   rewrite     ^(.*)   https://$host$1 permanent;
diff --git a/src/related_publications.tex b/src/related_publications.tex
new file mode 100644 (file)
index 0000000..0206639
--- /dev/null
@@ -0,0 +1,13 @@
+\section{Related publications}
+
+
+Ecrypt II (\cite{ii2011ecrypt}), ENISA's report on Algorithms, key sizes and
+parameters (\cite{ENISA2013}) and BSI's Technische Richtlinie TR-02102 (\cite{TR02102}) are
+great publications which are more in depth than this guide.  However, this guide
+has a different approach: it focuses on \emph{copy \& paste-able settings} for
+system administrators, effectively breaking down the complexity in the above
+mentioned reports to an easy to use format for the intended target audience. 
+
+
+
+
index 9dbd614..fa8ea0b 100644 (file)
   url        = {https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102_pdf}
 }
 
+@techreport{ENISA2013,
+  title      = {ENISA - Algorithms, Key Sizes and Parameters Report},
+  author     = {{ENISA and Vincent Rijmen, Nigel P. Smart, Bogdan warinschi, Gaven Watson}},
+  year       = {2013},
+  month      = {Oct},
+  url        = {http://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-sizes-and-parameters-report},
+}
   
 @book{anderson2008security,
   title      = {Security engineering},
   year = 2013,
   month = 07,
 }
+
+@misc{snowdenGuardianGreenwald,
+  author = {{Glenn Greenwald}},
+  title = {{Edward Snowden: NSA whistleblower answers reader questions}},
+  howpublished = "\url{http://www.theguardian.com/world/2013/jun/17/edward-snowden-nsa-files-whistleblower},
+               \url{http://www.theguardian.com/world/2013/jun/17/edward-snowden-nsa-files-whistleblower}",
+  year = 2013,
+  month = 07,
+  day = 17,
+}
diff --git a/src/theory.tex b/src/theory.tex
new file mode 100644 (file)
index 0000000..15874fa
--- /dev/null
@@ -0,0 +1,8 @@
+\input{theory/overview}
+\input{PKIs}
+\input{ECC}
+\input{SHA}
+\input{DH}
+\input{keylengths}
+\input{RNGs}
+\input{cipher_suites}
diff --git a/src/theory/overview.tex b/src/theory/overview.tex
new file mode 100644 (file)
index 0000000..afc19a7
--- /dev/null
@@ -0,0 +1,19 @@
+\section{Overview}
+\label{sec:TheoryOverview}
+
+
+\epigraph{``The balance between freedom and security is a delicate one.''}{-- Mark Udall, americal politician}
+
+This chapter provides the necessary background information on why chapter \ref{chapter:PracticalSettings} recommended \textit{cipher string B}.
+
+\vskip 0.5em
+We start off by explaining the structure of cipher strings in section \ref (Architecture) and define some terms. Next we present \textit{Cipher String A} and \textit{Cipher String B} in sections \ref XXX and \ref YYY.
+
+\vskip 0.5em
+After that, the following sections deal with Random number generators, keylengths, current issues in ECC, a note of warning on SHA-1 and some comments on Diffie Hellman key exchanges. All of this is important in understanding why certain choices were made for \textit{Cipher String A and B}. For most system administrators, the question of compatibility is one of the most pressing ones. Having the freedom to be compatible with any client (even running on outdated operating systems) of course, reduces the security of our cipher strings. We address these topics in section \ref{XXX}. 
+All these sections will allow a system administrator to balance his or her needs for strong encryption with useability and compatibility.
+
+\vskip 0.5em
+
+Last but not least, we finish this chapter by talking about issues in PKIs, Certificate Authorities and on hardening a PKI. Note that these last few topics deserve a book on their own. Hence this guide can only mention a few current topics in this area.
+
diff --git a/src/whoshouldread.tex b/src/whoshouldread.tex
new file mode 100644 (file)
index 0000000..3d4d005
--- /dev/null
@@ -0,0 +1,9 @@
+\section{Audience}
+
+
+Sysadmins. Sysadmins. Sysadmins.
+
+
+
+
+