Ich werde ein bisschen ketzerisch sein und mich auf die Beine stellen und sagen:
- Sie müssen wirklich mit den Systemadministratoren / Netzwerkmitarbeitern sprechen, die ihre Computer sichern. Diese Leute beschäftigen sich jeden Tag mit dem Konzept der Einbrüche und sind immer auf der Suche nach möglichen Exploits, die gegen sie eingesetzt werden können. Ignorieren Sie größtenteils den Aspekt der "Motivation", wie Angreifer denken, da die Zeiten des "Hacking for Notoriety" längst vorbei sind. Konzentrieren Sie sich stattdessen auf die Methodik . Ein kompetenter Administrator kann dies leicht demonstrieren.
Wenn Sie ein Programm schreiben, präsentieren Sie eine (hoffentlich) nahtlose, reibungslose Schnittstelle zu $ {was auch immer-sonst-akzeptiert-Ihre-Programme-E / A}. In diesem Fall kann es sich um einen Endbenutzer oder um einen anderen Prozess auf einem anderen Computer handeln, dies spielt jedoch keine Rolle. Gehen Sie IMMER davon aus, dass der "Client" Ihrer Anwendung möglicherweise feindlich eingestellt ist, unabhängig davon, ob es sich um eine Maschine oder eine Person handelt.
Glaubst du mir nicht? Versuchen Sie, eine kleine App zu schreiben, die Kundenaufträge von Verkäufern entgegennimmt, und legen Sie dann eine Unternehmensregel fest, die Sie über diese App durchsetzen müssen. Die Verkäufer versuchen jedoch ständig, sich fortzubewegen, damit sie mehr Geld verdienen können. Allein diese kleine Übung zeigt, wie ein motivierter Angreifer - in diesem Fall der beabsichtigte Endbenutzer - aktiv nach Wegen sucht, um entweder logische Fehler auszunutzen oder das System auf andere Weise zu spielen. Und das sind vertrauenswürdige Endbenutzer!
Multiplayer-Online-Spiele befinden sich ständig im Krieg gegen Betrüger, da die Serversoftware normalerweise dem Client vertraut. In allen Fällen kann und wird der Client gehackt, was dazu führt, dass Spieler das System spielen. Denken Sie darüber nach - hier haben wir Menschen, die sich einfach amüsieren und extreme Maßnahmen ergreifen, um bei einer Aktivität, bei der es nicht darum geht, Geld zu verdienen, die Oberhand zu gewinnen.
Stellen Sie sich die Motivation eines professionellen Bot-Herders vor, der auf diese Weise sein Geld für seinen Lebensunterhalt verdient ... Malware schreibt, damit er die Maschinen anderer Leute als Einnahmequellen nutzen und seine Botnets an den Höchstbietenden für massive Spam-Fluten verkaufen kann ... ja , dies wirklich nicht passieren .
Unabhängig von der Motivation bleibt der Punkt bestehen, Ihr Programm kann und wird irgendwann angegriffen werden. Es reicht nicht aus, sich vor Pufferüberläufen , Stapelzerstörung , Stapelausführung (Code-as-Data wird in den Stapel geladen, dann erfolgt eine Rückgabe zum Entladen des Stapels, was zur Ausführung des Codes führt), Datenausführung , standortübergreifend zu schützen Skripterstellung , Eskalation von Privilegien , Rennbedingungenoder andere "programmatische" Angriffe, obwohl es hilft. Zusätzlich zu Ihrer "Standard" -Programmabwehr müssen Sie auch in Bezug auf Vertrauen, Überprüfung, Identität und Anmeldeinformationen denken - mit anderen Worten, sich mit dem befassen, was Ihre Programmeingabe liefert und was die Ausgabe Ihres Programms verbraucht. Wie verteidigt man sich beispielsweise aus programmatischer Sicht gegen DNS-Vergiftungen ? Und manchmal können Sie Dinge im Code nicht vermeiden - es ist ein Beispiel, Ihre Endbenutzer dazu zu bringen, ihre Passwörter nicht an Kollegen weiterzugeben.
Integrieren Sie diese Konzepte in eine Methodik für Sicherheit und nicht in eine "Technologie". Sicherheit ist ein Prozess, kein Produkt . Wenn Sie darüber nachdenken, was "auf der anderen Seite" Ihres Programms ist und welche Methoden Sie anwenden können, um diese Probleme zu mindern, wird viel klarer, was richtig und was schrecklich falsch laufen kann.