2b949fd0276cd71a00dbee83edbc873df8e73792
[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
111 HAProxy can be used as loadbalancer and proxy for TCP and HTTP-based applications. Since version 1.5 it supports SSL and IPv6.
112
113 \subsubsection{Tested with Versions}
114 \begin{itemize*}
115   \item HAProxy 1.5.11 with OpenSSL 1.0.1e on Debian Wheezy
116 \end{itemize*}
117
118 \subsubsection{Settings}
119 \configfile{haproxy.cfg}{1-4}{global configuration}
120 \configfile{haproxy.cfg}{21-25}{frontend configuration}
121 \configfile{haproxy.cfg}{27-33}{backend configuration}
122
123
124 %% ---------------------------------------------------------------------- 
125 \subsection{Pound}
126 % See http://www.apsis.ch/pound
127 % See https://help.ubuntu.com/community/Pound
128
129 \subsubsection{Tested with Versions}
130 \begin{itemize*}
131   \item Pound 2.6
132 \end{itemize*}
133
134 \subsubsection{Settings}
135 \configfile{pound.cfg}{31}{HTTPS Listener in Pound}
136
137
138 %% ---------------------------------------------------------------------- 
139 \subsection{stunnel}
140 % See https://www.stunnel.org/
141
142 \subsubsection{Tested with Versions}
143 \begin{itemize*}
144   \item stunnel 4.53-1.1ubuntu1 on Ubuntu 14.04 Trusty with OpenSSL 1.0.1f, without disabling Secure Client-Initiated Renegotiation
145   \item stunnel 5.02-1 on Ubuntu 14.04 Trusty with OpenSSL 1.0.1f
146   \item stunnel 4.53-1.1 on Debian Wheezy with OpenSSL 1.0.1e, without disabling Secure Client-Initiated Renegotiation
147 \end{itemize*}
148
149 \subsubsection{Settings}
150 \configfile{stunnel.conf}{48-55}{HTTPS Listener in Pound}
151
152 \subsubsection{Additional information}
153 Secure Client-Initiated Renegotiation can only be disabled for stunnel versions >= 4.54, when the renegotiation parameter has been added (See changelog).
154
155 \subsubsection{References} 
156 \begin{itemize*}
157   \item stunnel documentation: \url{https://www.stunnel.org/static/stunnel.html}
158   \item stunnel changelog: \url{https://www.stunnel.org/sdf_ChangeLog.html}
159 \end{itemize*}
160
161
162 \subsubsection{How to test} 
163 See appendix \ref{cha:tools}
164