2013-02-05 3 views
13

Ich entwickle eine asp.net MVC Web-Anwendung und der Client hat die Anfrage, dass wir unser Bestes versuchen, um es so widerstandsfähig wie möglich zu machen, um Denial-of-Service-Angriffe. Sie befürchten, dass die Website bösartige Anfragen mit hohem Volumen erhält, mit der Absicht, die Website zu verlangsamen/zu entfernen.Verhindern böswillige Anfragen - DOS-Angriffe

Ich habe dies mit dem Product Owner diskutiert als wirklich außerhalb der Zuständigkeit für die eigentliche Web-Anwendung. Ich glaube, es liegt in der Verantwortung des Hosting-/Netzwerk-Teams, den Datenverkehr zu überwachen und auf bösartige Anfragen zu reagieren.

Sie sind jedoch der Meinung, dass die Anwendung einige Vorsichtsmaßnahmen eingebaut haben sollte. Sie möchten CAPTCHA jedoch nicht implementieren.

Es wurde vorgeschlagen, die Anzahl der Anfragen zu beschränken, die innerhalb eines bestimmten Zeitraums für eine Sitzung gestellt werden können. Ich dachte an etwas wie das zu tun Best way to implement request throttling in ASP.NET MVC? Aber mit der Session-ID nicht die Client-IP, da dies Probleme für Benutzer aus einer Corporate Firewall kommen würde - ihre IP wäre alles gleich.

Sie haben auch vorgeschlagen, die Möglichkeit, bestimmte Bereiche der Website zu deaktivieren - was darauf hindeutet, dass ein Administrator Benutzer Datenbank intensive Bereiche deaktivieren könnte ..... Allerdings würde dies über die Benutzeroberfläche gesteuert und sicher, wenn es unter war DOS-Angriff würde ein Admin-Benutzer sowieso nicht erreichen können.

Meine Frage ist, ist es wirklich das wert? Sicher wäre ein echter DOS-Angriff viel fortgeschrittener?

Haben Sie weitere Vorschläge?

+0

Interessante Sache, ich war nur auf der Suche nach einer Lösung, um dies vor nur ein paar Minuten zu implementieren. –

+4

Ein DoS-Angriff ist nicht zu rechtfertigen und wenn alles getan werden kann, um ihn zu mildern, wird es normalerweise NICHT auf Anwendungsebene gemacht. – Icarus

+6

Ich bin (überhaupt) kein Experte, aber wenn ich einen Server DOS angreifen will, werde ich zuerst versuchen, geladenen Ping zu senden. Ich glaube nicht, dass das Verhindern von DOS-Angriffen auf der Website-Seite behandelt werden sollte, aber mit einer Firewall, die die Website schützt. Wir haben genug mit Sql Injection, Cross Site Scripting und so weiter ... – tschmit007

Antwort

8

Ein Denial-of-Service-Angriff kann so ziemlich alles sein, was die Stabilität Ihres Dienstes für andere Menschen beeinträchtigen würde. In diesem Fall handelt es sich um ein Netzwerk-DoS, und wie bereits erwähnt, würde dies in der Regel nicht auf Ihrer Anwendungsebene passieren.

Im Idealfall würde diese Art von Angriff auf Netzwerkebene gemildert werden. Es gibt dedizierte Firewalls, die dafür gebaut werden, wie die Cisco ASA 5500 series, die vom grundlegenden Schutz bis zur Minderung des hohen Datendurchsatzes reicht. Sie sind ziemlich intelligente Boxen und ich kann für ihre Effektivität bei der Blockierung dieser Art von Angriffen bürgen, solange das richtige Modell für den Durchsatz, den Sie erhalten, verwendet wird.

Natürlich, wenn es nicht möglich ist, Zugriff auf eine Hardware-Firewall zu haben, die dies für Sie tut, gibt es einige Notbehelf-Maßnahmen, die Sie bei der Verteidigung vor diesen Arten von Angriffen unterstützen können. Bitte beachten Sie, dass keines davon halb so effektiv ist wie eine dedizierte Firewall.

Ein solches Beispiel wäre das IIS-Modul Dynamic IP Restrictions, mit dem Sie ein Limit für maximale gleichzeitige Anforderungen definieren können. In der Praxis hat dies jedoch den Nachteil, dass es möglicherweise beginnt, legitime Anfragen von Browsern zu blockieren, die einen hohen gleichzeitigen Anfragedurchsatz zum Herunterladen von Skripten und Bildern usw. haben.

schließlich etwas, was Sie tun können, ist wirklich roh, aber auch wirklich wirksam, ist etwas, was ich zuvor geschrieben hatte. Im Grunde war es ein kleines Tool, das Protokolldateien auf doppelte Anfragen von derselben IP-Adresse überwacht. Also sagen wir 10 Anfragen an /Home über 2 Sekunden von 1.2.3.4. Wenn dies erkannt wird, wird eine Firewallregel (in Windows Advanced Firewall, die mithilfe der Shellbefehle hinzugefügt wurde) hinzugefügt, um Anforderungen von dieser IP zu blockieren. Die Regel könnte dann 30 Minuten später entfernt werden.

Wie ich schon sagte, es ist sehr grob, aber wenn Sie haben, um es auf Serverebene zu tun, haben Sie nicht wirklich viele sinnvolle Optionen, da es nicht dort ist, wo es getan werden sollte. Du hast genau richtig, dass die Verantwortung etwas beim Hosting-Provider liegt.

Schließlich haben Sie auch mit dem CAPTCHA recht. Wenn überhaupt, könnte es bei einem DoS helfen, indem es die Bilderzeugung (die ressourcenintensiv sein könnte) immer wieder ausführt und dadurch Ihre Ressourcen noch mehr verhungert. Die Zeit, in der ein CAPTCHA effektiv wäre, wäre jedoch, wenn Ihre Website von automatisierten Registrierungs-Bots gespammt würde, aber ich bin mir sicher, dass Sie das bereits wussten.

Wenn Sie wirklich etwas auf Anwendungsebene tun möchten, nur um die Kräfte zu befriedigen, ist die Umsetzung etwas IP-basierte Anfrage Einschränkung in Ihrer App machbar, obwohl 90% unwirksam (da Sie noch die anfordern).

+0

Eine Anmerkung ist, dass dynamische IP-Einschränkungen auf IIS-Box selbst ausgeführt wird, so dass unter Angriffe immer noch die Serverleistung beeinträchtigt werden kann. Es wird empfohlen, ein dediziertes Firewall-Gerät zu verwenden, das einen besseren Schutz bietet. Verwenden Sie einen Cloud-Service, der weitere Vorteile bringen kann, da Sie sich in den meisten Fällen keine Sorgen machen müssen. –

+0

@LexLi Ja, das sage ich über die Minderung des Netzwerklevels. Alles, was ich in meiner Antwort vorgeschlagen habe, ist weniger als ideal für eine * echte * Milderung. –

2

Sie könnten die Lösung in der Cloud und Scale-Server implementieren, wenn Sie absolut bleiben mußten, aber es könnte teuer ...

Eine weitere Idee wäre, die IP-Adressen der registrierten Benutzer anmelden. Im Falle einer DOS schränken Sie den gesamten Datenverkehr auf Anfragen von "guten" Benutzern ein.

1

Das Verhindern eines echten DoS-Angriffs auf Anwendungsebene ist nicht wirklich machbar, da die Requests höchstwahrscheinlich Ihren Webserver töten werden, bevor er Ihre Anwendung aufgrund der Tatsache abbricht, dass Ihre Anwendung einem Anwendungspool zugeordnet ist maximal gleichzeitige Anforderungen, die von der von Ihnen verwendeten Servertechnologie definiert sind. Dieser interessante Artikel http://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45 besagt, dass Windows 7, Windows Vista und Windows 8 maximal 10 gleichzeitige Anfragen haben. Es geht weiter mit der Aussage, dass "Sie ein Windows Server-Betriebssystem benötigen, um die Vorteile von asynchronen Methoden unter hoher Last zu sehen".

Sie können das Limit der HTTP.sys-Warteschlange des Anwendungspools, der Ihrer Anwendung zugeordnet ist, erhöhen, um die Anzahl der Anforderungen zu erhöhen, die in die Warteschlange gestellt werden (zur späteren Berechnung, wenn Threads bereit sind) Protokoll-Stack (HTTP.sys) von Http-Fehler 503 zurückgeben, wenn das Limit überschritten wird und kein Worker-Prozess verfügbar ist, um weitere Anforderungen zu behandeln.

Sie erwähnen, dass der Kunde verlangt, dass Sie "Ihr Bestes versuchen, um Denial-of-Service-Angriffen so widerstandsfähig wie möglich zu machen". Mein Vorschlag ist möglicherweise keine geeignete Maßnahme in Ihrer Situation, aber Sie könnten in die Implementierung der Task-basierte asynchrone Muster (TAP) in dem Artikel erwähnt, um die Kundenanforderung zu berücksichtigen prüfen.

Dieses Muster wird Threads freigeben, während lang andauernde Operationen ausgeführt werden und die Threads für weitere Anforderungen verfügbar machen (wodurch Ihre HTTP.sys-Warteschlange niedriger bleibt). Gleichzeitig erhalten Ihre Anwendung den Vorteil einer erhöhten Gesamtleistung bei mehreren Anfragen Dienste von Drittanbietern oder mehrere intensive E/A-Berechnungen werden durchgeführt.

Diese Maßnahme macht Ihre Anwendung NICHT anfällig für DoS-Angriffe, aber Ihre Anwendung wird so verantwortungsvoll wie möglich auf der Hardware, auf der sie ausgeführt wird, ausgeführt.

Verwandte Themen