Merge https://github.com/martin-rublik/Applied-Crypto-Hardening
authorAaron Zauner <azet@azet.org>
Fri, 6 Jun 2014 14:47:22 +0000 (16:47 +0200)
committerAaron Zauner <azet@azet.org>
Fri, 6 Jun 2014 14:47:22 +0000 (16:47 +0200)
src/acknowledgements.tex
src/theory.tex
src/theory/TLS.tex [new file with mode: 0644]
src/theory/tls/HSTS.tex [new file with mode: 0644]

index 24ad838..7978982 100644 (file)
@@ -26,6 +26,7 @@ Petukhova, Anna (Logo) \\
 Pichler, Patrick \\
 Riebesel, Nicolas \\
 Roeckx, Kurt \\
+Rublik, Martin \\
 Seidl, Eva (PDF layout) \\
 Wagner, Sebastian («sebix») \\
 Zangerl, Alexander \\
index 83ded83..fcada95 100644 (file)
@@ -6,3 +6,4 @@
 \input{theory/SHA}
 \input{theory/DH}
 \input{theory/PKIs}
+\input{theory/TLS}
\ No newline at end of file
diff --git a/src/theory/TLS.tex b/src/theory/TLS.tex
new file mode 100644 (file)
index 0000000..90389a1
--- /dev/null
@@ -0,0 +1,9 @@
+\section{TLS and its support mechanisms}
+\label{section:TLS}
+\todo{Add a short intro}
+
+\subsection{HTTP Strict Transport Security}
+\label{subsection:HSTS}
+\input{"./theory/tls/HSTS.tex"}
+
+%\subsection{Server Name Indication}
\ No newline at end of file
diff --git a/src/theory/tls/HSTS.tex b/src/theory/tls/HSTS.tex
new file mode 100644 (file)
index 0000000..2eddb3e
--- /dev/null
@@ -0,0 +1,70 @@
+%\subsection{HTTP Strict Transport Security}
+HTTP Strict Transport Security (HSTS) is a web security policy mechanism. HSTS is realized through HTTP header by which a web server declares that complying user agents (web browsers) should interact with it by using \emph{only} secure HTTPS connections\footnote{\url{https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security}}. 
+
+HSTS header is bound to a DNS name or domain by which the server was accessed. For example if server serves content for two domains and it is HTTPS enabled only for one domain, the browser won't enforce HSTS for the latter. 
+
+HSTS reduces the risk of active man-in-the-middle attacks such as SSL stripping, and impersonation attacks with \emph{untrusted} certificate. HSTS also helps to avoid unintentional mistakes such as insecure links to a secure web site (missing HTTPS links\footnote{Thus, it might be useful for fixing HTTPS mixed-content related errors, see \url{https://community.qualys.com/blogs/securitylabs/2014/03/19/https-mixed-content-still-the-easiest-way-to-break-ssl}.}), and mistyped HTTPS URLs.  
+
+After the web browser receives a HSTS header in a \emph{correctly}\footnote{Website must load without SSL/TLS browser warnings (certificate is issued by a trusted CA, contains correct DNS name, it is time valid, etc.)} prepared SSL session it will automatically use secure HTTPS links for accessing the server. This prevents unencrypted HTTP access (SSL striping, mistyped HTTPS URLs, etc.) when the server is accessed later by the client. 
+
+When a server (that previously emitted a HSTS header) starts using untrusted certificate, complying user agent must show an error message and \emph{block the server connection}. Thus impersonation MITM attack with \emph{untrusted} certificate cannot occur.
+
+For the initial setup HSTS header needs a trusted secure connection over HTTPS. This limitation can be addressed by compiling a list of STS enabled sites  directly into a browser\footnote{List of the preloaded sites can be found at \url{http://dev.chromium.org/sts}. This list is managed by Google/Chrome but it is also used by Firefox \url{https://wiki.mozilla.org/Privacy/Features/HSTS_Preload_List}}. 
+
+\subsubsection{HSTS Header Directives}
+\label{subsubsection:HSTS Header Directives}
+HSTS header can be parametrized by two directives:
+\begin{itemize*}
+  \item max-age=<number-of-seconds> 
+       \item includeSubdomains 
+\end{itemize*}
+
+\emph{max-age} is a required directive. This directive indicates the number of seconds during which the user agent should enforce the HSTS policy (after the reception of the STS header field from a server).
+
+\emph{includeSubdomains} is an optional directive. This directive indicates that the HSTS Policy applies to this HSTS Host as well as \emph{any subdomains of the host's domain name}.
+
+\subsubsection{HSTS Client Support}
+\label{subsubsection:HSTS Client Support}
+HSTS is supported\footnote{\url{http://caniuse.com/stricttransportsecurity}} by these web browsers:
+\begin{itemize*}
+  \item Firefox version >= v4.0
+       \item Chrome version >= 4.0
+       \item Android Browser >=4.4
+       \item Opera version >= 12.0 
+       \item Opera mobile >= 16.0
+       \item Safari >= 7.0
+\end{itemize*}
+Microsoft should add HSTS support in Internet Explorer 12\footnote{\url{http://status.modern.ie/httpstricttransportsecurityhsts}}.
+
+\subsubsection{HSTS Considerations}
+\label{subsubsection:HSTS Considerations}
+Before enabling HSTS it is recommended to consider following:
+\begin{itemize*}
+  \item Is it \emph{required} to serve content or services over HTTP?
+       \item Enabling \emph{includeSubdomains} and SSL certificate management.
+       \item Proper value of \emph{max-age}. 
+\end{itemize*}
+
+It is recommended to serve all content using HTTPS, but there are exceptions to this rule as well. Consider running a private PKI\footnote{see \nameref{section:PKIs}}. CRLs and OCSP responses are published typically by HTTP protocol. If HSTS is enabled on the site where OCSP and CRLs are published the browser might fail fetching CRL or validating OCSP response.
+
+Similar reasoning goes for \emph{includeSubdomains}. One needs to be sure that HTTPS can be enforced for all subdomains. Moreover the administrators are advised to watch for expiration of the SSL certificate and handle the renewal process with caution. If a SSL certificate is renewed after expiration or misses a (HSTS enabled) domain name, the connection to site will break (without providing override mechanism to the end user).  
+
+Finally HSTS should be tested with lower \emph{max-age} values and deployed with higher \emph{max-age} values. 
+
+\subsubsection{Testing HSTS}
+\label{subsubsection:Testing HSTS}
+HSTS can be tested either using locally or through the Internet. 
+
+For local testing it is possible to utilize Chrome Web browser UI by typing \url{chrome://net-internals/#hsts}\footnote{see \url{http://blog.chromium.org/2011/06/new-chromium-security-features-june.html}} in the address bar.
+
+Testing over the Internet can be conducted by Qualys SSL Labs test \url{https://www.ssllabs.com/ssltest/}. \emph{Strict Transport Security (HSTS)} information is located in the \emph{Protocol Details} section.
+
+\subsubsection{References}
+\begin{itemize*}
+       \item Websites Must Use HSTS in Order to Be Secure \url{https://www.eff.org/deeplinks/2014/02/websites-hsts}
+       \item OWASP: HTTP Strict Transport Security: \url{https://www.owasp.org/index.php/HTTP_Strict_Transport_Security}
+       \item HSTS Browser Compatibility List: \url{http://caniuse.com/stricttransportsecurity}
+  \item RFC 6797:HTTP Strict Transport Security (HSTS) - Examples: \url{https://tools.ietf.org/html/rfc6797#section-6.2}
+\end{itemize*}
+
+