Frage:
Wie ist "Hacken" überhaupt möglich, wenn ich richtig "verteidige"?
J. Berman
2013-04-12 10:37:54 UTC
view on stackexchange narkive permalink

Auf einem Linux-basierten Server befolge ich die folgenden grundlegenden Vorgehensweisen:

  1. Machen Sie das Kennwort des Administratorkontos lang und kompliziert genug (dh theoretisch kann das Kennwort nicht innerhalb einer angemessenen Zeit geknackt werden).
  2. Überwachen Sie den gesamten eingehenden Netzwerkverkehr zu den Verwaltungsdateien.
  3. Um die Schutzschicht von # 2 oben zu erweitern, überwachen Sie lokale Dateiänderungen (insbesondere solche, die über Befehle verfügen, für die sudo -Privilegien erforderlich sind.
  4. Überprüfen Sie alle Benutzereingaben, damit alle Benutzereingaben garantiert sicher sind.
  5. ol>

    Als unerfahrener Entwickler verstehe ich nicht, wie ein Hacking überhaupt möglich ist, wenn der Serveradministrator die oben genannten Schritte ausführt.

Ein Keylogger auf einem beliebigen Terminal, von dem aus Ihr Administrator auf Ihren Server zugreift, und der Hacker sind dabei. Sie können den Hacker nicht von Ihrem Administrator unterscheiden. Dies ist nur ein Beispiel. Es gibt viele andere Möglichkeiten, wie Ihr Server verletzt werden könnte. Am einfachsten ist es jedoch, auf die eigene Dummheit und / oder Naivität der Menschen zu zählen.
NULL TAGE. Das wars so ziemlich.
http://xkcd.com/538/
Soziale Entwicklung.
Wenn Leute Ihr Root-Passwort knacken, bedeutet dies, dass sie bereits Root haben (weshalb sie den Inhalt von `/ etc / shadow` sehen können, in dem sich das Hash-Passwort befindet). Oder Sie verwenden nicht "/ etc / shadow", sondern haben ein traditionelles Setup mit Hashes in "/ etc / passwd", das nicht so sicher ist, wie Sie nur können.
5. Überprüfen Sie jede relevante Codezeile im System auf Richtigkeit und Sicherheit und kompilieren Sie sie gegebenenfalls ordnungsgemäß.
Die einzige fast todsichere Möglichkeit, das Hacken unmöglich zu machen, besteht darin, (1) das zu zerstören, was Sie schützen möchten, (2) jemanden einzustellen, dem Sie vertrauen, um sicherzustellen, dass niemand in der Lage ist, Zeitreisen rückwärts zu unternehmen, um es zu erreichen, bevor es zerstört wurde ) stellen Sie sicher, dass es keine Kopien von Daten gibt und dass niemand sie kennt, was bedeutet, dass Sie wahrscheinlich Selbstmord begehen müssen oder dass Sie von jemandem getötet werden, dem Sie vertrauen, und (4) stellen Sie sicher, dass niemand Sie wiederbeleben kann und dass Sie sich nicht daran erinnern Informationen, wenn Sie jemals ganz oder teilweise wiederbelebt oder wiedergeboren werden und Erinnerungen an vergangene Leben haben. Es ist nicht so einfach, wie es sich anhört.
@GaryS.Weaver - Probieren Sie es aus: http://scifi.stackexchange.com/
Ja ja!! Es ist alles so EINFACH! Du bist unbesiegbar! Also, an welcher riesigen Finanzseite haben Sie wieder gearbeitet? Im Ernst, Sie gehen davon aus, dass Sie all das tatsächlich kontrollieren und es überhaupt keinen Einstiegspunkt von Drittanbietern gibt und dass Sie nur Kernbibliotheksmaterial verwenden, das selbst natürlich immer sehr sicher und niemals anfällig für Angriffe ist oder wenn dies der Fall ist wurde sicherlich nie für Wochen bis Monate von korporativen / politischen Spielereien auf diese Weise verlassen, wenn eine ernsthafte Sicherheitslücke entdeckt wird.
@GaryS.Weaver Es gibt nur zwei todsichere Möglichkeiten, um das Hacken unmöglich zu machen. (1) bereits von Ihnen erwähnt. (2) Apathie. Entscheide, dass es dir egal ist. Wenn dann Dritte in Ihr System eindringen, wird es nicht gehackt. Oder verwenden Sie eine Kombination aus 1 & 2.
@Kaz 6. Überprüfen Sie die Hardware mit einem leistungsstarken Mikroskop, um sicherzustellen, dass sie korrekt und sicher ist und ordnungsgemäß zusammengebaut wurde.
Warum glauben Sie, Sie können dem Computer, vor dem Sie sitzen, vertrauen, um einen Server zu verwalten?
@emory Überprüfen Sie das leistungsstarke Mikroskop, um sicherzustellen, dass es korrekt, sicher und ordnungsgemäß zusammengebaut ist ... sowie die Werkzeuge, mit denen Sie es überprüft haben. Plus diese Tools ... plus ... Bis Sie sich irgendwann selbst überprüfen müssen (wer sagt, dass keinen Computer heimlich in Ihr Gehirn implantiert hat, um Ihre sensorischen Eingaben zu ändern ... Jetzt sind Sie in Schwierigkeiten! Irgendwann muss man einfach auf die Vertrauenswürdigkeit von etwas vertrauen!
@Kitsune Ja, Sie haben Recht, der Wahnsinn hört mit dem leistungsstarken Mikroskop nicht auf. Sie müssen unendlich viele Dinge überprüfen, aber Sie müssen sich niemals selbst überprüfen. Wenn der Gegner Ihr Gehirn hacken kann, warum sollte sich der Gegner dann die Mühe machen, Ihren Computer zu hacken? Es gehört ihm schon. Oder Sie könnten einfach zugeben, dass Ihr Computer hackbar ist, und Ihr Leben fortsetzen.
Sie steuern ein Risiko. Risiken können nicht beseitigt, sondern nur gemindert werden, so dass das Restrisiko geringer ist. Da Sie nicht 100% Kontrolle über ALLE Variablen haben, können Sie niemals 100% sicher sein, dass jemand keine Schwachstelle in Ihrem System finden kann.
Fünfzehn antworten:
Kitsune
2013-04-12 11:12:07 UTC
view on stackexchange narkive permalink

Stellen Sie nicht sicher, dass alle Sicherheitsupdates angewendet werden? Denken Sie daran, dass Sie als Verteidiger 100% der Zeit gewinnen müssen. Ein Hacker muss nur einmal gewinnen.

Die Schritte, die Sie aufgelistet haben, sind auch viel einfacher gesagt als getan (mit Ausnahme des Passworts ... und dennoch wählen die Leute immer noch schreckliche Passwörter!).

2) Was ist eine "glaubwürdige Quelle" für einen öffentlich zugänglichen Webserver? Das gesamte Internet? Das gesamte Internet ohne China / Russland (/ einige / andere / Länder)? Automatisierte Systeme können viele Arten von Angriffen erkennen, aber genau wie Antivirenprogramme können sie nur so weit gehen.

3) Die Überwachung lokaler Dateien ist gut, aber auch hier kein Allheilmittel. Was ist, wenn der Angreifer es schafft, Code in den Webserver einzufügen und dann einen Kernel-Fehler verwendet, um Code in den Kernel zu bekommen ... ohne jemals eine Datei auf die Festplatte zu schreiben? Zu diesem Zeitpunkt könnten sie Dateien auf die Festplatte schreiben und ein Root-Kit verwenden, um zu verhindern, dass die meisten (theoretisch alle ) Online-Scans Änderungen am System bemerken.

Und selbst wenn sie nur den Webserver ausnutzen können, können sie alles tun, was der Webserver tun kann (was möglicherweise alles ist, woran der Angreifer sowieso interessiert war).

4) Das sollten Sie Benutzereingaben immer validieren. Die meisten Entwickler wissen das (und viele versuchen es). Leider ist es viel einfacher gesagt als getan, weshalb wir weiterhin Probleme nach Problemen sehen, bei denen Benutzereingaben nicht angemessen validiert werden. Sie können niemals garantieren, dass eine echte Software alle Benutzereingaben korrekt überprüft. Lesen Sie einige PHP + MySQL-Fragen zu StackOverflow, um zu sehen, wie viele Leute glauben, dass mysqli_real_escape_string () alle SQL-Injection-Angriffe verhindert ( "where ID =". $ Val ist anfällig, auch wenn $ val ist die Ausgabe von mysqli_real_escape_string !).

Selbst wenn Sie sicherstellen könnten (Sie können nicht), dass jeder bekannte Angriffsvektor geschützt ist, können Sie nichts weiter tun, als wild im Dunkeln gegen Unbekannt-Unbekannt zu schwingen (also hilft es, sich ständig weiterzubilden).

Als Beispiel, bei dem Ihre Verteidigung nichts getan hätte, nahm ich an einem Sicherheitskurs teil, in dem wir "Kriegsspiele" durchführen. Ich war in der Lage, den Server eines gegnerischen Teams zu rooten, indem ich eines seiner Benutzerkennwörter von einem anderen Computer abrufen konnte (einer von ihnen hat es vermasselt und versehentlich als Befehl in bash eingegeben, und sie haben nie daran gedacht um es aus .bash_history zu löschen).

Von dort aus habe ich die IP des Computers gefälscht, von dem aus sie sich normalerweise angemeldet haben, und SSHed, indem ich ihren Benutzernamen und ihr Passwort eingegeben habe. Ich hatte nur eingeschränkten Zugriff auf das System. Ich habe dann sudo vim ausgeführt, das gleiche Passwort erneut eingegeben und vim eine Bash-Shell erzeugen lassen. Tada! Root-Zugriff aus einer glaubwürdigen Quelle, ohne ungewöhnliche Änderungen an lokalen Dateien vorzunehmen, ohne ein schwaches Kennwort auszunutzen (es war schlecht, aber selbst das beste Kennwort der Welt hätte nicht geholfen) oder sich auf nicht validierte Benutzereingaben zu verlassen.

Da ich schelmisch war, habe ich alle Protokolldateien, die sich auf mein legitimes Login beziehen, manuell geändert und ihre IDS gelöscht (ich wette, sie werden nicht aufmerksam genug sein, um zu bemerken, dass ich alle ersetzt habe seine Binärdateien mit Kopien von / bin / true !). Ein "echter" Hacker wäre wahrscheinlich weitaus besser gerüstet, um sicherzustellen, dass seine Aktivität nicht von wachsameren Admins erkannt wird, aber ich hatte mein Ziel bereits erreicht, und ein kleiner Teil von mir wollte, dass sie herausfinden, dass jemand es bekam.

Das ganze Internet ohne China / Russland ist nicht einfach. Eine Person kann in jedem Land einen Exit-Knoten angeben und von dort aus auf den Webserver zugreifen. Die Dateiüberwachung funktioniert nicht immer, da moderne Exploits die Festplatte nicht berühren. Kurz gesagt, Sicherheit ist ein komplexes Tier.
@void_in Ja. Es ist äußerst hilfreich zu wissen, wie Angreifer ihre Angriffe ausführen. Ohne dieses Wissen ist es leicht, sich durch Pläne mit riesigen Löchern, die sie in der Praxis unbrauchbar (möglicherweise sogar schädlich!) Machen, in ein falsches Sicherheitsgefühl wiegen zu lassen.
Wie macht dich `mysqli_real_escape_string` verwundbar? Liegt es daran, dass Sie "vergessen" haben, "$ val" zu zitieren?
@Jon `$ val = mysqli_real_escape_string (" 1; DROP TABLE-Benutzer; # "); $ query = "SELECT * FROM foo WHERE id = $ val"; `
@Juhana: Die Antwort lautet also "Ja"?
Richtig. Die Escape-Funktion setzt voraus, dass der Wert in Anführungszeichen gesetzt wird.
Ein bisschen wie bei der Parametrisierung wird davon ausgegangen, dass Sie die Daten nicht direkt in der statischen Abfrage verketten, sondern dass dies auch ständig der Fall ist.
@Esailija Ja, jeder Sicherheitsmechanismus kann Sie nur so weit bringen (besonders wenn er nicht verwendet wird!). Aber das ist auch der Grund, warum ich ein Fan von Umgebungen bin, die es nicht einfach machen, beliebige SQL-Abfragezeichenfolgen auszuführen. Sie sind also nie versucht, eine erste Version schnell durch Verkettung zu erhalten ... und dann zu vergessen, sich darum zu kümmern Reparieren, bevor es in Produktion geht (oder jemand greift nach dem Code und schlägt ihn im Großhandel in ein Produktionssystem, ohne zu schauen!).
"Als Verteidiger müssen Sie 100% der Zeit gewinnen. Ein Hacker muss nur einmal gewinnen." - Dies ist x1000.
@Kitsune Ich bin mir nicht sicher, warum Sie sowieso nicht nur für kurzfristige Bedenken isolieren würden. Ich bin ein Sicherheits- / Datenbankanfänger, aber was ist, wenn Sie diese Abfrage an 20 verschiedenen Stellen für ein neues Produkt wiederverwenden möchten und sich die Datenbank plötzlich aufgrund eines anderen Problems ändert?
@Juhana Selbst wenn zitiert, [diese Funktion ist nicht narrensicher] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)
"Ich habe dann sudo vim ausgeführt, das gleiche Passwort erneut eingegeben und vim eine Bash-Shell erzeugen lassen." Ich dachte, Sie können einfach "sudo su" machen ...
@AlvinWong hätte ich sicherlich haben können, aber ich hatte gehofft, dass, wenn ich irgendwelche Protokolle verpasse, niemand etwas Verdächtiges an einem "sudo vim" denken würde (da die meisten weniger erfahrenen Linux-Benutzer nicht zu erkennen scheinen, dass Sie beliebige Shell-Befehle ausführen können es).
Graham Hill
2013-04-12 14:00:35 UTC
view on stackexchange narkive permalink

Wenn ich Schneiers Gesetz zerfleischen könnte:

Jeder, vom ahnungslosesten Amateur bis zum besten Systemadministrator, kann ein Sicherheitssystem erstellen, das er selbst nicht knacken kann.

Vielen Dank. Dies ist eine wirklich gute Möglichkeit, es in einen Satz zu fassen.
pnp
2013-04-12 10:59:44 UTC
view on stackexchange narkive permalink

Kurz gesagt, richtig zu verteidigen ist keine leichte Aufgabe, weil ... enter image description here

schnell auf Ihre Eingaben drücken ->

Machen Sie das Passwort für das Administratorkonto lang ...

Das bloße Surfen auf der Schulter macht jede Menge Bemühungen um sichere Passwörter zunichte.
Plus, wenn Ihre Mechanismen zur Speicherung von Passwörtern schwach sind (anfällig für) SQL-Injektionen oder unsichere Hashing-Mechanismen oder im schlimmsten Fall die Speicherung von Kennwörtern im Klartext bleiben anfällig.

Überwachen Sie jeden eingehenden Netzwerkverkehr

sehr viel Verkehr überwachen. Was ist die Garantie, dass Sie einige wichtige Dinge nicht verpassen? Und was ist mit Zero-Days?
Was ist mit verschlüsseltem Datenverkehr? Was werden Sie darauf überwachen?

... und nur glaubwürdige Quellen zulassen.

Was ist, wenn Ihre glaubwürdigen Quellen erhalten kompromittiert / gehackt? Dann sind sie nicht mehr glaubwürdig , aber Sie, der Systemadministrator, wissen das nicht!

... lokale Dateiänderungen überwachen ... Überprüfen Sie jede Benutzereingabe. ..

Wie viel können Sie überwachen und wie viele Protokolle können Sie analysieren ...

Außerdem wird davon ausgegangen, dass mindestens einige Dienste auf dem Computer ausgeführt werden Computer, Schwachstellen im Dienst können die Ursache für die Gefährdung Ihres Computers sein.

Ich hoffe, ich konnte Ihnen ein Gefühl dafür geben, wie das Hacken von machbar ist :)

Ack: Bild von www.quotesparade.com

Ich glaube, Sie schulden mir ein Bier, um Sie daran zu erinnern, dieses menschliche Dummheitsfoto aufzunehmen! Oh, und du hast vergessen, Affen zu erwähnen. [Muss Affen haben] (http://meta.security.stackexchange.com/a/1206/20074) !! :)): P.
Natürlich ... Ich gebe von Herzen zu, dass es @TildalWave war, dessen Kommentar an dieses Foto erinnerte. Obwohl ich kein Bier mag, sponsere mich eine Reise in dein Land und wir können darüber nachdenken: P.
Denken Sie, dass der Rechtschreibfehler ein typisches Beispiel ist? Oder soll ironisch sein?
@TimPietzcker Darf ich wissen, auf welchen Rechtschreibfehler Sie hinweisen?
@TimPietzcker LOLZ ... hat es nicht bemerkt! Schuld daran ist die Website, die ich dafür verwendet habe ...
Rory Alsop
2013-04-12 12:37:52 UTC
view on stackexchange narkive permalink

Wenn Sie "richtig" verteidigen könnten, könnten Hacker niemals hineinkommen. Das Problem ist, was in einer solchen Situation richtig bedeutet.

Sie könnten den Server ausschalten und ihn eine halbe Meile unter der Erde in Beton versiegeln, und er ist ziemlich sicher, oder? Aber es ist unbrauchbar. Und wenn der Wert dessen, was darauf ist, hoch genug ist, kann ein Angreifer versuchen, es auszugraben. An diesem extremen Beispiel können Sie also bereits erkennen, dass Sicherheit ein Gleichgewicht ist. Es muss angemessen sein - und dennoch die Verwendung des Servers ermöglichen.

In diesem Fall treten folgende Probleme auf:

  • Wie stellen Sie sicher, dass alle ausführbaren Dateien sicher sind? Wieder kannst du nicht. Sie können entscheiden, wie viel Aufwand Sie für die Überprüfung aufwenden und verschiedene Tests ausführen möchten. Die Codebasen sind jedoch groß genug für die meisten Anwendungen, in die sich versehentliche Fehler einschleichen.
  • macht Ihre vorgeschlagene Sicherheitsoption den Server für unbrauchbar seine Zielgruppe? Wenn Sie es vom Netzwerk trennen, erhöht sich die Sicherheit, aber Ihre Benutzer werden nicht zufrieden sein.
  • Kennen Sie tatsächlich alle möglichen Eingaben, die Ihre Benutzer möglicherweise verwenden möchten? Wenn ja, brillante weiße Liste sie. Denken Sie jedoch daran, jedes Mal zu aktualisieren, wenn Ihre Anwendung aktualisiert wird oder über neue Funktionen verfügt. Und überprüfen Sie jedes Mal, wenn Sie einen neuen Benutzer erhalten. Und testen Sie, ob die weiße Liste funktioniert, um alle nicht genehmigten Eingaben zu stoppen. Und so weiter ...
  • Angriffe müssen möglicherweise keine Dateien auf der Festplatte ändern. Durch das Überwachen von Dateien werden beispielsweise Angriffe, die auf Code im Speicher abzielen, nicht direkt erfasst.
  • Beim Hinzufügen technischer Sicherheitskontrollen werden soziale oder physische Angriffe nicht berücksichtigt. Wenn ein Angreifer wirklich Zugriff auf einen gut geschützten Server haben möchte, ist es möglicherweise sinnvoll, Sie zu nerven, Ihre Tastenanschläge zu protokollieren, um Kennwörter zu erhalten usw. Oder es ist einfacher, einen Benutzer zu nerven - vielleicht sind sie sich der Sicherheit weniger bewusst.
  • etc etc

Einfach ausgedrückt: Sie können abhängig von Ihrem Budget auf ein Niveau sichern. Entscheiden Sie, wie viel Sie bereit sind, basierend auf dem, was Sie schützen möchten, auszugeben. Akzeptieren Sie, dass ein Restrisiko besteht.

Und dann planen Sie, dass etwas schief geht - irgendwann wird Ihre Sicherheit beeinträchtigt und Sie müssen wissen, wie Sie reagieren sollen. Für einen einfachen Dateiserver ist dieser Prozess möglicherweise nur ein Löschen und erneutes Installieren aus dem Backup. Für etwas Komplexeres müssen Sie jedoch möglicherweise Benutzer, Interessengruppen, Aufsichtsbehörden usw. informieren, Beweise speichern, forensische Kopien erstellen, neu erstellen, neu konfigurieren oder in irgendeiner Form korrigieren den Vorfall ... und nutzen Sie dann die Lernerfahrungen, um Ihren Sicherheitsplan zu überdenken.

... und dann ... wiederholen Sie alles noch einmal. Überprüfen Sie regelmäßig Ihre Sicherheit und Ihren Sicherheitsappetit, da sich die Welt schnell verändert!

user24793
2013-04-14 17:58:48 UTC
view on stackexchange narkive permalink

Nehmen wir an, Sie haben einen Webserver, der einen Befehl benötigt:

GET /helloworld.txt

Und das gibt ganz einfach "Hallo Welt!" zurück. p>

Das ist die am einfachsten zu codierende Sache der Welt, oder? Angenommen, Sie nehmen die Eingabe, suchen nach der Zeichenfolge "GET /helloworld.txt" und tun das Richtige. Ignorieren Sie dann alles andere. Welche Möglichkeiten gibt es für Hacking? Keine?

OK. Wie groß ist Ihr Befehlspuffer? 20 Bytes? Gerade lange genug, um diesen Befehl anzunehmen? Was ist, wenn jemand einen Befehl gibt, der zwei Bytes länger ist? Was ist, wenn sie einen Befehl geben, der 2000 Bytes länger ist? Wie erhalten Sie den Befehl tatsächlich? Was spricht mit der Netzwerkkarte? Was macht die Paketdecodierung? Was ist, wenn die Zeichen in zwei Paketen ohne NUL-Terminierung zwischen Bytes gesendet werden?

Kurz gesagt, selbst dieses "einfachste" Netzwerkprogramm, das nicht einmal einen Kennwortzugriff benötigt, kann VIELE Sicherheit bieten Mängel.

Es geht einfach um Komplexität. Jedes Mal, wenn eine Variable eingeführt wird, steigt die Anzahl der MÖGLICHEN Angriffsvektoren exponentiell an. Nicht alle davon sind Angriffsvektoren, aber sie KÖNNTEN es sein, und deshalb müssen Sie sie alle abdecken, wenn Sie sicher sein wollen.

Das ist so gut wie unmöglich, ohne eine vollständig geprüfte, vollständig getestete Einheit. Vertraglich entworfenes und vielleicht sogar mathematisch erprobtes System. Soweit ich weiß, gibt es kein solches System. OpenBSD könnte nahe kommen, aber ich bezweifle, dass es den ganzen Weg dorthin ist.

Die sehr kurze Antwort lautet: Nehmen Sie mit Sicherheit immer das Schlimmste an. Es ist VIEL klüger zu wissen, dass Sie verwundbar sind, und angemessen bescheiden zu handeln und so wenig wie möglich zu riskieren, als anzunehmen, dass Sie in Sicherheit sind, nur weil Sie sich keinen möglichen Angriffsvektor vorstellen können.

user1451340
2013-04-12 11:04:35 UTC
view on stackexchange narkive permalink

Wenn Sie alles richtig machen, können Sie viele verschiedene Angriffe verhindern. Leider ist Hacking mehr als nur ein direkter Angriff auf Login / Zugriff.

Ein großer Teil umfasst die Umgehung Ihres Schutzes, sodass ein Angreifer das Passwort nicht kennen muss. Social Engineering ist ein weiterer großer Teil. Passwörter schützen nichts, wenn sie Angreifern bekannt sind. Darüber hinaus gibt es mehr schädliche Angriffe und Ziele als nur den Zugriff auf das Admin-Panel. Wenn jemand nicht möchte, dass Sie einen Webshop betreiben, weil er einen eigenen hat und seine Kunden (und Sie aus dem Geschäft) heraushalten möchte, wie möchten Sie einen DDoS-Angriff verhindern oder einfach nur jemanden, der den Stecker in Ihren Server zieht Zimmer? (Die Putzfrau, die nur das Mainboard abstauben wollte ?;))

Außerdem hilft die Überwachung nicht wirklich, Angriffe zu verhindern.

Es gibt Verschiedene Arten von Schutzsystemen, manipulationssicheren, manipulationssicheren und manipulationssicheren Systemen. Manipulationssichere Systeme möchten Angriffe verlangsamen (z. B. lange Passwörter). Manipulationsreaktionen teilen Ihnen mit, ob ein Angriff stattfindet (z. B. wenn ein Alarm ausgelöst wird, wenn Ihr IDS einige SQL-Injection-Strings erkennt), und manipulationssichere Systeme zeigen Ihnen, wie die tatsächlichen Angriffe stattgefunden haben (z. B. Protokolldateien)

Hacker versuchen, diesen Schutz zu knacken oder zu vermeiden, und es ist Ihre Aufgabe, einen Schritt voraus zu sein. Dies ist natürlich sehr schwierig, da Sie kaum Sicherheitslücken in Ihrer Serversoftware kennen, die es einem Angreifer ermöglichen könnten, ohne Kennwort auf Stamminformationen zuzugreifen. Normalerweise finden Angreifer diese Art von Schwächen zuerst, und es ist Ihre Aufgabe, sich um Ihr System zu kümmern und ihre Angriffe zu verlangsamen, bis das Problem behoben ist.

Manishearth
2013-04-12 16:31:15 UTC
view on stackexchange narkive permalink

Machen Sie das Kennwort für das Administratorkonto lang und kompliziert genug (d. h. theoretisch kann das Kennwort nicht innerhalb einer angemessenen Zeit geknackt werden).

Durch brutale Gewalt geknackt? Vom Social Engineering geknackt? Ja. Wenn viele Leute das Passwort kennen, ist es nicht allzu schwer, es über Social Engineering zu bekommen. (Wenn mehr als eine Person das Passwort kennt, ist es möglich, den Identitätswechsel effektiv zu verwenden, um das Passwort zu erhalten.) Wenn Sie nur Zugriff haben, kann der physische Zugriff dennoch über Social Engineering erfolgen. Es ist jedoch schwieriger, dies zu verwalten, und Sie müssen sich fragen, ob sich die Mühe wirklich lohnt.

Überwachen Sie jeden eingehenden Netzwerkverkehr zu den Verwaltungsdateien.

Dies schützt Sie nicht vor DDoS. Und wenn Sie vor DDoS schützen möchten, gibt es zu viele Fehlalarme von Benutzern, die zu Unrecht blockiert werden.

Selbst wenn Ihr Kennwort lang ist, kann ein Botnetz einbrechen. Wenn Sie eine Einschränkung haben Wenn Sie einen Kennwortversuch fehlschlagen, können sie Sie sperren.

Außerdem sind CAPTCHAs nicht mehr so ​​sicher, es gibt viele Unternehmen, für die Geld bezahlt wird Leute, die den ganzen Tag sitzen und Captchas lösen.

Um die Schutzschicht von # 2 oben zu erweitern, überwachen Sie lokale Dateiänderungen (insbesondere solche, deren Befehle Sudo-Berechtigungen erfordern.

Sie können nicht alle Dateiänderungen vollständig überwachen. Es gibt einfach zu viele Informationen. Die meisten Programme spielen während der Ausführung viel mit Dateien. Wie würden Sie zwischen einem Programmupdate und einer schädlichen Datei unterscheiden?

Überprüfen Sie jede Benutzereingabe, damit alle Benutzereingaben garantiert sicher sind.

Stellen Sie sicher, dass Sie diese Serverseite ausführen.

Endlich Zero-Day-Exploits sind immer ein Problem. Wenn jemand in dem von Ihnen verwendeten Framework eine Sicherheitslücke findet, sind Sie untergegangen. Um dies zu verhindern, verwenden Sie weit verbreitete Frameworks und hoffen Sie auf das Beste.

Der Schutz vor Hacking ist wie der Versuch, einen Unterwasserbunker voller Natrium zu schützen. Es gibt viele Stellen, die Ihrer Meinung nach repariert werden müssen. Sie können sie alle flicken. Das heißt aber nicht, dass Sie in Sicherheit sind - alles, was Sie brauchen, ist ein kleines Leck an einem Ort, an dem Sie nicht überprüft haben, ob alles zusammenbricht.

Tom Leek
2013-04-12 18:32:03 UTC
view on stackexchange narkive permalink

"Richtig verteidigen" bedeutet: "Mein Code hat keine Fehler; auch keines der von mir verwendeten Tools". Aber Software hat Fehler; Hardware hat Fehler; Niemand weiß, wie man das Fehlen von Fehlern in einer nicht trivialen Software oder Hardware garantiert (diejenigen, die das Gegenteil behaupten, sind Wahnvorstellungen oder Lügen oder beides). Siehe diese vorherige Frage für eine Diskussion.

Die praktische Art und Weise, wie Angriffe auftreten, besteht darin, dass ein Angreifer einen Fehler entdeckt oder davon erfährt, der zu seinem Vorteil ausgenutzt werden kann, und vor dem Systembesitzer erfährt davon und behebt es.

Aus Ihrer Liste:

  • Ein großes, dickes, zufälliges, nicht erratbares Administratorkennwort ist in Ordnung - solange der Computer Wenn der Administrator sein Kennwort eingibt, ist er nicht mit Keylogger-Malware infiziert.

  • Die Überwachung hilft hauptsächlich bei der Post-Mortem-Analyse. Es verhindert den Angriff nicht, hilft Ihnen jedoch festzustellen, was passiert ist und welcher Fehler ausgenutzt wurde, damit er behoben werden kann ... für das nächste Mal.

  • Dort ist keine "garantierte sichere Benutzereingabe". Es gibt "Benutzereingaben, die überprüft wurden, um einem bestimmten Regelwerk zu entsprechen, was bedeuten sollte, dass die Benutzereingaben in einer bestimmten Konstruktion verwendet werden können, ohne auf unangenehme Situationen zu stoßen". Beispielsweise kann ein Textstück "sicher für die Aufnahme in eine HTML-Datei" sein (es enthält keine HTML-Sonderzeichen, die eine erweiterte Verarbeitung auslösen, wie "<" und "&"), aber überhaupt nicht sicher für Aufnahme in eine SQL-Abfrage (die HTML-sicheren Zeichen könnten eine völlig nicht sichere SQL-Abfrage codieren).

cde
2013-04-12 18:51:26 UTC
view on stackexchange narkive permalink

Nur um ein paar Punkte hinzuzufügen:

Machen Sie das Kennwort des Administratorkontos lang und kompliziert genug (dh theoretisch kann das Kennwort nicht innerhalb einer angemessenen Zeit geknackt werden).

Lange und komplizierte Passwörter sind zwar gut, erhöhen jedoch die Wahrscheinlichkeit, dass sie aufgeschrieben werden. Gleiches gilt für Passwörter, die häufig geändert werden müssen. Insbesondere, wenn mehr als eine Person das Kennwort benötigt oder es sich um ein Kennwort handelt, das nicht häufig verwendet wird.

Überwachen Sie den gesamten eingehenden Netzwerkverkehr zu den Verwaltungsdateien.

Angriffe zur Eskalation von Berechtigungen machen dies sinnlos, da Änderungen dann anscheinend vom lokalen Datenverkehr und nicht vom Netzwerk stammen. Und zu viel Überwachung wird neue Probleme aufwerfen. Pufferüberlauf Exploits sind häufig. Heck, einige Consumer-Router ersticken immer noch an blockierten Verkehrsversuchen, die ihre Verbindungstabellen verstopfen.

Um die Schutzschicht von # 2 oben zu erweitern, überwachen Sie lokale Dateiänderungen (insbesondere solche, für die Befehle erforderlich sind sudo-Berechtigungen).

Besser, aber Angriffe zur Eskalation von Berechtigungen können es jemandem ermöglichen, eine Binärdatei hochzuladen und suid / sgid-Sticky-Bits hinzuzufügen. Es wird nicht in Ihrer Liste der zu überprüfenden Dateien aufgeführt.

Überprüfen Sie alle Benutzereingaben, damit alle Benutzereingaben garantiert sicher sind.

Wie viel Aufwand werden Sie dafür betreiben? Das Bereinigen der Benutzereingaben ist niemals zu 100% effektiv.

Grundsätzlich geht es darum, dass einige Dinge, die Sie tun, mehr Probleme verursachen als sie nicht tun. Es gibt immer Möglichkeiten, dies zu umgehen. Versuchen Sie einfach, Ihr Bestes zu geben und Ich hoffe, Sie machen keinen Fehler ohne Kopf. Sei wie ein Desinfektionsmittel. Sie können nur 99% des Problems töten.

"Es ist möglich, keine Fehler zu begehen und trotzdem zu verlieren. Das ist keine Schwäche, das ist Leben." - Picard

Kaz
2013-04-12 21:11:26 UTC
view on stackexchange narkive permalink

Sie haben nicht definiert, was es bedeutet, dass Ihr Server gehackt wird.

Der erste Schritt besteht darin, den Umfang des legitimen Zugriffs auf das System zu definieren. Wer sind die Benutzer und was bietet das System den Benutzern, die geschützt werden müssen?

Wenn das System einer ganz bestimmten, eingeschränkten Funktion (wie der Bereitstellung einer bestimmten verteilten Anwendung) zugeordnet ist und Angreifer dies können Greifen Sie nur über das Netzwerk auf dieses System zu, dann muss so ziemlich nur diese Anwendung sicher sein, sowie die netzwerkgefährdeten Teile des Systems: der LAN-Adapter, sein Treiber und der Netzwerkstapel.

Die eigentliche Herausforderung Bei der Sicherheit in einem Betriebssystem wie Linux kann das Betriebssystem in einer Mehrbenutzersituation nicht gehackt werden, wenn Benutzer das System fast vollständig nutzen und sich bei Betriebssystemkonten anmelden und Anwendungen direkt ausführen können.

A. Das System kann Sicherheitsvorfälle aufweisen, ohne dass das Superuser-Konto gefährdet wird. Angenommen, Sie haben ein vollkommen unknackbares Linux-System. Der Benutzer joe installiert jedoch eine unsichere Anwendung / home / joe / bin . Diese Anwendung öffnet ein schädliches Dokument, das einen Fehler in der Anwendung ausnutzt, wodurch bösartiger Code die Ausführung von beliebigem Code im Sicherheitskontext von joe erhält. Der Schadcode beschädigt die Daten von joe und stiehlt dem Computer auch die CPU-Zeit. (Wie auch immer, es kann keine Superuser-Ausführungsberechtigungen erhalten, da der Computer "nicht hackbar" ist.)

Ist das gehackt? Oder nicht gehackt? Wie wäre es aus der Sicht des Benutzers joe . Interessiert es joe , dass root bei dem Vorfall nie kompromittiert wurde?

AJ Henderson
2013-04-12 22:11:38 UTC
view on stackexchange narkive permalink

Wenn Leute (oder zumindest Ihre Administratoren) nie Fehler gemacht haben und Computerprogramme die ganze Zeit zu 100% fehlerfrei waren, dann sind Sie theoretisch richtig. Leider ist keines davon jemals wahr und es ist für einen Angreifer leicht genug, an diesen Punkten anzugreifen.

Selbst wenn die Software perfekt konfiguriert ist, kann sie aufgrund von Fehlern nicht so funktionieren, wie sie ständig konfiguriert ist. Unter den richtigen Bedingungen kann es möglich sein, die Software dazu zu bringen, etwas zu tun, was sie nicht tun sollte.

Ebenso ist Social Engineering wahrscheinlich die häufigste Form des Hackens. Es sind keine komplexen technischen Maßnahmen erforderlich, wenn Sie Ihren Gegner einfach dazu verleiten können, Ihnen das zu geben, was Sie wollen. Das Surfen in der Schulter, das Abrufen eines Key-Loggers auf einem Computer, den der Administrator verwendet, oder das Betrügen eines Administrators, der Ihre schädliche Software ausführt, sind alles mögliche Möglichkeiten, um sich unter dem Radar durchzuschleichen.

Sie können eine Menge davon kompensieren Dies geschieht, indem ein Server in einem Raum ohne Internetverbindung gesperrt wird und Administratoren das System nur dann verwenden können, wenn sie sich im Raum mit einem Wachmann an der Tür befinden Hindernis für die Benutzerfreundlichkeit.

Letztendlich geht es bei der Sicherheit darum, Benutzerfreundlichkeit und Risiko in Einklang zu bringen. Die Schritte, die Sie skizzieren, erfordern eine zu starke Reduzierung der Benutzerfreundlichkeit, um sicher implementiert zu werden, und können daher in einer realen Situation nicht von alleine funktionieren. Sicherheit ist ein komplexes und sich ständig änderndes Feld, in dem Sie über Bedrohungen auf dem Laufenden bleiben, Ihre Abwehrkräfte gegen neue Bedrohungen prüfen und auf Kompromisse achten müssen, die als 0-Tage-Probleme auftreten können.

Nick P
2013-04-15 23:01:40 UTC
view on stackexchange narkive permalink

Ich habe seit fast zehn Jahren versucht, kugelsichere Systeme zu bauen. Ich musste etwas über hochsichere Designtechniken (z. B. EAL7), verdeckte Kanäle, Subversion-Angriffe usw. lernen. Ehrlich gesagt verfügen die meisten Systemdesigner oder Administratoren weder über das Wissen noch über die Ressourcen, um eine Maschine vollständig vor bekannten Angriffen zu schützen. Angesichts geschäftlicher Einschränkungen ist dies nahezu unmöglich. Die meisten Sicherheitsentscheidungen spiegeln Kompromisse zwischen Kosten, Funktionen, Benutzerfreundlichkeit, Legacy-Kompatibilität, wahrscheinlichen Angreiferprofilen usw. wider.

Wenn Sie wissen möchten, finden Sie hier eine meiner vereinfachten Aufschlüsselungen zu den verschiedenen Sicherheitsstufen und -problemen. (Und es ist nicht so groß wie ein Buch 8). Es war an einen Mann gerichtet, der dachte, erstklassige Codierer könnten sichere Programme erstellen, aber Sie können den Administrator für Codierer und immer noch dieselben Ergebnisse unterwerfen. Viel Spaß und lernen Sie die Lektionen weniger, wenn Sie die Geschichte wiederholen, wie es ein Großteil der INFOSEC-Community tut. ;)

http://www.schneier.com/blog/archives/2013/01/essay_on_fbi-ma.html#c1102869

Dies folgt up comment enthält viele Links, die den Verlauf, Regierungsfaktoren, Entwicklungsanforderungen usw. verfolgen. Ich liste auch eine Menge beispielhafter Systeme und Prozesse auf. Jeder kann Fehler haben, die lauern, aber mehr Vertrauen als ein durchschnittliches Produkt schaffen.

http://www.schneier.com/blog/archives/2013/01/essay_on_fbi-ma.html#c1105156

Hallo Nick - willkommen. Interessante Lektüre. Ich habe das Sig unten herausgeschnitten, da jeder das durch Klicken auf Ihren Avatar bekommen kann - Sie können Ihr Profil mit so etwas füllen.
Izzy
2013-04-12 21:22:06 UTC
view on stackexchange narkive permalink

Ein System ist nur so stark wie das schwächste Glied

Dies ist ein Satz, der häufig wiederholt wird, und Sie sollten sich daran erinnern, dass es sich um einen einzelnen Punkt handelt, egal wie stark ein Kennwort ist von Misserfolg und ein Bruteforcer wird irgendwann durchbrechen können.

Und was ist, wenn Ihr Systemadministrator eine recht schöne Auszahlung akzeptiert, um versehentlich eine Menge Dateien zu löschen?

Die Deutschen hielten das Rätsel für unzerbrechlich, und es wurde argumentiert, dass ihr Vertrauen in diese einzige Verschlüsselungsmethode sie den Krieg gekostet hat - die Abhängigkeit von einem einzigen System oder einer einzigen Ressource (menschlich oder anderweitig) ist das Schlimmste mögliches Verbrechen gegen die Sicherheit.

Joe Plante
2013-04-15 19:34:56 UTC
view on stackexchange narkive permalink

Es gibt einige menschliche Aspekte, die normalerweise nicht dargestellt werden, wenn so etwas gefragt wird.

  1. Einige Leute haben buchstäblich nichts Besseres zu tun und werden versuchen, Ihr System aus purer Langeweile zu hacken .
  2. Einige Leute machen es zum Spaß (wie ein paar weiße Hüte). Weiße Hüte sind normalerweise nicht schlecht, weil viele von ihnen Sie kontaktieren und sagen "Alter, ich bin in Ihr System gekommen" und nichts Böses tun.
  3. Einige Leute da draußen werden versuchen, die Passwörter Ihrer Benutzer zu erhalten, um sie auf anderen Websites wie Kreditkarten zu testen. Sie stellen sich vor, um einen enormen Gewinn daraus zu ziehen.
  4. Einige Leute werden einen Server aus Rache angreifen. "Jane Berman hat gesagt, dass ich ein Kotkopf bin? IHR SERVER WIRD UNTEN GEHEN!"
  5. ol>

    Menschen, insbesondere in den Jahren 2 bis 4, neigen dazu, unglaublich leidenschaftlich in Ihr System einzusteigen. Manchmal wird # 1 zu 2-4. Unternehmen müssen jemanden bezahlen, um einen Server zu sichern, und es erfordert viel Geld, Forschung und Arbeitsstunden, um zu verhindern, dass eine Armee dieser Art von Menschen ihn angreift.

jokoon
2013-04-14 00:02:28 UTC
view on stackexchange narkive permalink

Vielleicht, weil die meisten Systeme und Software überhaupt nicht sicherheitsbewusst sind. Sicherheit ist anspruchsvoll zu lehren, zu verstehen und auch zu aktualisieren (Nachrichten, neue Angriffsmethoden usw.).

Deshalb wird sie nicht vollständig und umfassend gelehrt. Zum Beispiel gibt es keine Sicherheitsnorm wie ISO-Normen. Auch weil es ein potenzieller Markt für häusliche Sicherheit (Antivirus) ist.

Wenn Computer häufiger auftreten, wird es vielleicht eines Tages etwas sein, um das man sich kümmern wird. Eine Zukunft, in der es ungefähr 100 oder mehr Computer pro Mensch gibt.

Wenn Sie wirklich darüber nachdenken, verlassen wir uns nicht wirklich genug auf Computer, um uns um die Internetsicherheit zu sorgen (zumindest denke ich, oder Zumindest die Teile, an denen es kritisch ist, werden gut gepflegt.

Keine ISO und nationalen Sicherheitsstandards? Ich bin sprachlos...
@jokoon - es gibt ** internationale ** nationale Standards. Bitte lesen Sie diese Seite genauer durch :-)
Gibt es Betriebssysteme, die diese Standards unterstützen? (Funktioniert Backtrack?) Sind diese Standards streng genug? Treffen sie auf Programmiersprachen und Compiler zu? Ich denke, ADA wäre eine Sprache, die es respektiert, aber wenn nicht, und wenn sich niemand wirklich darum kümmert, ist es nicht wirklich ein Standard, es ist nur ein Stück Papier. Vielleicht ist es nur ein Unternehmenskrieg um den Verkauf von Antivirensoftware, aber ich gebe auf jeden Fall zu, dass ich von nichts wirklich Bedeutendem gehört habe.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...