Exchange OWA / ECP mit google reCaptcha versehen

Um die Sicherheit des OWA oder ECP von Exchange deutlich zu erhöhen kann man mit einfachen Mitteln ein Google ReCaptcha einbinden.
Das hat den charmanten Vorteil gegenüber Benutzersperren, dass es Hackern nicht so einfach gemacht wird ein Benutzeraccount im Unternehmen zu sperren.

Um das ReCaptcha in sein Exchange OWA und ECP zu implementieren sind die folgenden Schritte nötig.

  • Bei Google Recaptcha für die Seite einen privaten und öffentlichen Schlüssel registrieren. Wichtig ist hier die Version 2 des Recaptchas zu verwenden.
  • Im OWA Auth Verzeichnis eine neue Datei anlegen. Nennen wir Sie „Recaptcha.aspx“ Das Verzeichnis finden Sie per Default an folgenden Stellen
    Exchange 2016 V14:  C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\Owa\auth
    Exchange 2016 V15: C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\

Bitte in die Datei Recaptcha.aspx folgenden Inhalt einfügen:

<% @ Page AspCompat=True Language = "VB" %>
<%
' In der nächsten Zeile Ihren privaten Schlüssel eintragen
Dim strPrivateKey As String = "CHANGE_ME"
Dim strResponse = Request("response")
Dim objWinHTTP As Object
objWinHTTP = Server.CreateObject("WinHTTP.WinHTTPRequest.5.1")
objWinHTTP.Open("POST", "https://www.google.com/recaptcha/api/siteverify", False)
objWinHTTP.SetRequestHeader("Content-type", "application/x-www-form-urlencoded")
Dim strData As String = "secret=" & strPrivateKey & _
  "&response=" & strResponse
objWinHTTP.Send(strData)
Dim strResponseText = objWinHTTP.ResponseText
Response.Write(strResponseText)
%>

An der Stelle CHANGE_ME muss Ihr privater Schlüssel von google eingetragen werden.

  • Legen Sie in dem Verzeichnis nun ein Backup der Datei Logon.aspx an.
  • Bearbeiten Sie nun die Logon.aspx Datei und ersetzen Sie folgenden Inhalt.
  • Suchen Sie in der Datei nun nach dem Attribut <form> und löschen Sie den Wert bei action=
    Der Inhalt sollte nun wie folgt aussehen: <form action=““ method=“POST“ name=“logonForm“ ENCTYPE=“
  • Suchen Sie in der Datei nun nach dem Wert basicExplanationContent

In V14 sieht der Eintrag so aus

<td><%=basicExplanationContent %></td>
    </tr>
        <% } %>
        </table>
    </td>
</tr>
<% } %>
<tr><td><hr></td></tr>

In V15 sieht der Eintrag so aus

<div id="bscExp" class="signInExpl" style="display:none" role="note"><%=basicExplanationContent %></div>
            <% } %>
        <% } %>
  • Fügen Sie nun unter diese Zeile den folgenden Code ein (Achten Sie auch hier darauf den Schlüssel des Recaptchas zu ersetzen)
    Wichtig: Hier nicht den privaten, sondern den öffentlichen Schlüssel verwenden.  In der V15 fügen Sie den Teil einfach als div oder mit einem br ein.
<tr>
<td>
<script type="text/javascript">
function myClkLgn()
{
  var oReq = new XMLHttpRequest();
  var sResponse = document.getElementById("g-recaptcha-response").value;
  var sData = "response=" + sResponse;
  oReq.open("GET", "/owa/auth/recaptcha.aspx?" + sData, false);
  oReq.send(sData);
  if (oReq.responseText.indexOf("true") != -1)
  {
    document.forms[0].action = "/owa/auth.owa";
    clkLgn();
  }
  else
  {
    alert("Invalid captcha response");
    return false;
  }
}
</script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<div class="g-recaptcha" data-sitekey="CHANGE_ME"></div>
</td>
</tr>
  • Gleich haben Sie es geschafft. Suchen Sie nun noch nach clkLgn und ersetzen Sie dort folgendes

Tauschen Sie nun

(Strings.IDs.LogOn) %>" onclick="clkLgn()"

Gegen

(Strings.IDs.LogOn) %>" onclick="return myClkLgn()"

Herzlichen Glückwunsch, Sie haben Ihren Zugriff auf OWA und ECP nun erfolgreich abgesichert.

Sollten Sie bei der Implementierung Hilfe benötigen, so unterstützen wir Sie gerne.