add quotation mark in add_header HSTS directive
[ach-master.git] / src / practical_settings / proxy_solutions.tex
1 %hack.
2 \gdef\currentsectionname{Proxies}
3 %%\subsection{Intercepting proxy solutions and reverse proxies}
4
5 Within enterprise networks and corporations with increased levels of paranoia or at least some defined security requirements it is common \textbf{not} to allow direct connections to the public internet.
6
7 For this reason proxy solutions are deployed on corporate networks to intercept and scan the traffic for potential threats within sessions.
8
9 For encrypted traffic there are four options:
10
11 \begin{itemize*}
12   \item Block the connection because it cannot be scanned for threats.
13   \item Bypass the threat-mitigation and pass the encrypted session to the client, which results in a situation where malicious content is transferred directly to the client without visibility to the security system.
14   \item Intercept (i.e. terminate) the session at the proxy, scan there and re-encrypt the session towards the client (effectively MITM).
15   \item Deploy special Certificate Authorities to enable Deep Packet Inspection on the wire.
16 \end{itemize*}
17
18 While the latest solution might be the most "up to date", it arises a new front in the context of this paper, because the most secure part of a client's connection could only be within the corporate network, if the proxy-server handles the connection to the destination server in an insecure manner.
19
20 Conclusion: Don't forget to check your proxy solutions SSL-capabilities. Also do so for your reverse proxies!
21
22 %% ---------------------------------------------------------------------- 
23 % who was the author of this section?
24 % can we have this either tested or removed?
25 %\subsection{Squid}
26 %As of squid-3.2.7 (01 Feb 2013) there is support for the OpenSSL NO\_Compression option within squid config (CRIME attack) and if you combine that in the config file, with an enforcement of the server cipher preferences (BEAST Attack) you are safe.
27 %
28 %
29 %\todo{UNTESTED!}
30 %\configfile{squid.conf}{1363-1363,1379-1379}{Cipher selection and SSL options in Squid}
31 %%% http://forum.pfsense.org/index.php?topic=63262.0
32 %%\todo{UNTESTED!}
33 %% see squid.conf, repeating the options here does not help.
34 %\todo{Patch here? Definitely working for 3.2.6!}
35 %For squid Versions before 3.2.7 use this patch against a vanilla source-tree:
36 %\begin{lstlisting}
37 %--- support.cc.ini      2013-01-09 02:41:51.000000000 +0100
38 %+++ support.cc  2013-01-21 16:13:32.549383848 +0100
39 %@@ -400,6 +400,11 @@
40 %         "NO_TLSv1_2", SSL_OP_NO_TLSv1_2
41 %     },
42 % #endif
43 %+#ifdef SSL_OP_NO_COMPRESSION
44 %+    {
45 %+        "NO_Compression", SSL_OP_NO_COMPRESSION
46 %+    },
47 %+#endif
48 %     {
49 %         "", 0
50 %     },
51 %\end{lstlisting}
52 %
53 %
54 %% ---------------------------------------------------------------------- 
55 \subsection{Bluecoat}
56 %% https://kb.bluecoat.com/index?page=content&id=KB5549
57 \subsubsection{Tested with Versions}
58 \begin{itemize*}
59   \item SGOS 6.5.x
60 \end{itemize*}
61
62 BlueCoat Proxy SG Appliances can be used as forward and reverse proxies. The reverse proxy feature is rather under-developed, and while it is possible and supported, there only seems to be limited use of this feature "in the wild" - nonetheless there are a few cipher suites to choose from, when enabling SSL features.
63
64 \paragraph*{Only allow TLS 1.0,1.1 and 1.2 protocols:}
65 ~
66 \begin{lstlisting}
67 $conf t
68 $(config)ssl
69 $(config ssl)edit ssl-device-profile default
70 $(config device-profile default)protocol tlsv1 tlsv1.1 tlsv1.2
71   ok
72 \end{lstlisting}
73
74 \paragraph*{Select your accepted cipher-suites:}
75 ~
76 \begin{lstlisting}
77 $conf t
78 Enter configuration commands, one per line.  End with CTRL-Z.
79 $(config)proxy-services
80 $(config proxy-services)edit ReverseProxyHighCipher
81 $(config ReverseProxyHighCipher)attribute cipher-suite
82 Cipher#  Use        Description        Strength
83 -------  ---  -----------------------  --------
84       1  yes            AES128-SHA256      High
85       2  yes            AES256-SHA256      High
86       3  yes               AES128-SHA    Medium
87       4  yes               AES256-SHA      High
88       5  yes       DHE-RSA-AES128-SHA      High
89       6  yes       DHE-RSA-AES256-SHA      High
90                [...]
91      13  yes          EXP-RC2-CBC-MD5    Export
92
93 Select cipher numbers to use, separated by commas: 2,5,6
94   ok
95 \end{lstlisting}
96
97 The same protocols are available for forward proxy settings and should be adjusted accordingly:
98 In your local policy file add the following section:
99 \begin{lstlisting}
100 <ssl>
101     DENY server.connection.negotiated_ssl_version=(SSLV2, SSLV3)
102 \end{lstlisting}
103
104 Disabling protocols and ciphers in a forward proxy environment could lead to unexpected results on certain (misconfigured?) webservers (i.e. ones accepting only SSLv2/3 protocol connections)
105
106
107 %% ---------------------------------------------------------------------- 
108 \subsection{HAProxy}
109 % See http://www.haproxy.org/
110 % See https://timtaubert.de/blog/2014/11/the-sad-state-of-server-side-tls-session-resumption-implementations/
111 % See http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#5.1-npn
112 % See http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.ssl.cachesize
113 % See https://kura.io/2014/07/02/haproxy-ocsp-stapling/
114 % See https://kura.io/2015/01/27/hpkp-http-public-key-pinning-with-haproxy/
115
116 HAProxy can be used as loadbalancer and proxy for TCP and HTTP-based applications. Since version 1.5 it supports SSL and IPv6.
117
118 \subsubsection{Tested with Versions}
119 \begin{itemize*}
120   \item HAProxy 1.5.11 with OpenSSL 1.0.1e on Debian Wheezy
121 \end{itemize*}
122
123 \subsubsection{Settings}
124 \configfile{haproxy.cfg}{1-4}{global configuration}
125 \configfile{haproxy.cfg}{21-25}{frontend configuration}
126 \configfile{haproxy.cfg}{27-33}{backend configuration}
127
128 \subsubsection{Additional Settings}
129 \paragraph*{Enable \ac{NPN} Support:}
130 ~
131 \begin{lstlisting}
132         bind *:443 ssl crt server.pem npn "http/1.1,http/1.0"
133 \end{lstlisting}
134 Append the npn command in the frontend configuration of HAProxy.
135
136 \paragraph*{Enable OCSP stapling:}
137 ~
138 HAProxy supports since version 1.5.0 OCSP stapling. To enable it you have to generate the OCSP singing file in the same folder, with the same name as your certificate file plus the extension .ocsp. (e.g. your certificate file is named server.crt then the OCSP file have to be named server.crt.oscp)\\
139 To generate the OCSP file use these commands:
140 \begin{lstlisting}
141 openssl x509 -in your.certificate.crt -noout -ocsp_uri # <- get your ocsp uri
142 openssl ocsp -noverify -issuer ca.root.cert.crt -cert your.certificate.crt -url "YOUR OCSP URI" -respout your.certificate.crt.ocsp
143 \end{lstlisting}
144 Reload HAProxy and now OCSP stapling should be enabled.\\
145 Note: This OCSP signature file is only valid for a limited time. The simplest way of updating this file is by using cron.daily or something similar.
146
147 \paragraph*{Enable \ac{HPKP}:}
148 ~
149 Get certificate informations:
150 \begin{lstlisting}
151 openssl x509 -in server.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | base64
152 \end{lstlisting}
153 Then you append the returned string in the HAProxy configuration. Add the following line to the backend configuration:
154 \begin{lstlisting}
155 rspadd Public-Key-Pins:\ pin-sha256="YOUR_KEY";\ max-age=15768000;\ includeSubDomains
156 \end{lstlisting}
157 Reload HAProxy and HPKP should now be enabled.\\
158 Note: Keep in mind to generate a backup key in case of problems with your primary key file.
159
160 \subsubsection{How to test}
161 See appendix \ref{cha:tools}
162
163 %% ---------------------------------------------------------------------- 
164 \subsection{Pound}
165 % See http://www.apsis.ch/pound
166 % See https://help.ubuntu.com/community/Pound
167
168 \subsubsection{Tested with Versions}
169 \begin{itemize*}
170   \item Pound 2.6
171 \end{itemize*}
172
173 \subsubsection{Settings}
174 \configfile{pound.cfg}{31}{HTTPS Listener in Pound}
175
176
177 %% ---------------------------------------------------------------------- 
178 \subsection{stunnel}
179 % See https://www.stunnel.org/
180
181 \subsubsection{Tested with Versions}
182 \begin{itemize*}
183   \item stunnel 4.53-1.1ubuntu1 on Ubuntu 14.04 Trusty with OpenSSL 1.0.1f, without disabling Secure Client-Initiated Renegotiation
184   \item stunnel 5.02-1 on Ubuntu 14.04 Trusty with OpenSSL 1.0.1f
185   \item stunnel 4.53-1.1 on Debian Wheezy with OpenSSL 1.0.1e, without disabling Secure Client-Initiated Renegotiation
186 \end{itemize*}
187
188 \subsubsection{Settings}
189 \configfile{stunnel.conf}{48-55}{HTTPS Listener in Pound}
190
191 \subsubsection{Additional information}
192 Secure Client-Initiated Renegotiation can only be disabled for stunnel versions >= 4.54, when the renegotiation parameter has been added (See changelog).
193
194 \subsubsection{References} 
195 \begin{itemize*}
196   \item stunnel documentation: \url{https://www.stunnel.org/static/stunnel.html}
197   \item stunnel changelog: \url{https://www.stunnel.org/sdf_ChangeLog.html}
198 \end{itemize*}
199
200
201 \subsubsection{How to test} 
202 See appendix \ref{cha:tools}
203