Frage:
Bietet die Verschleierung von Code einen messbaren Sicherheitsvorteil?
MechMK1
2019-10-09 19:44:37 UTC
view on stackexchange narkive permalink

Ich habe immer fest daran geglaubt, dass Verschleierung im Wesentlichen nutzlos ist. Verschleierter Code ist nicht unmöglich zu lesen, nur schwerer zu lesen. Ich war der Überzeugung, dass ein ausreichend erfahrener Angreifer den verschleierten Code wieder in einen besser lesbaren Zustand versetzen kann.

OWASP empfiehlt jedoch die Verwendung der Verschleierung für mobile Clients. Ich frage mich daher, ob die Verschleierung glaubwürdiger ist, als ich ihr gegeben habe.

Daher meine Frage: Gibt die Verschleierung einen messbaren Sicherheitsvorteil? Insbesondere ein Vorteil, der die zusätzlichen Kosten, die Komplexität und die reduzierte Leistung überwiegt.


Hinweis: Wenn ich "Verschleierung" sage, spreche ich von absichtlichen Maßnahmen zur Verhinderung von Reverse Engineering. Compiler-Optimierungen werden durchgeführt, um die Leistung zu verbessern und nicht das Reverse Engineering zu verhindern, obwohl sie die Lesbarkeit der Baugruppe beeinträchtigen.

Nach meiner Erfahrung werden in der Sicherheitswelt nicht viele Messungen und empirische Beweise gesammelt.Es ist meistens eine Menge "gut, es sollte so funktionieren", anekdotische Erfahrungen und Extrapolation.Persönlich denke ich, dass es bei der Verschleierung von Code mehr um den Versuch geht, Geschäftsinteressen und Codegeheimnisse zu schützen, als um Sicherheit.
@SteveSether Ich dachte genauso, aber da ich OWASP als glaubwürdige Quelle betrachte, wollte ich sehen, ob meine Behauptung vielleicht falsch war.
Ein kleiner Vorteil der Verschleierung ist die Zerstörung von Informationen.Dinge wie gesprochene Sprache, Codierungsgewohnheiten usw. Der Prozess (letztendlich Code) kann neu verstanden werden, aber Identifikatoren gehen verloren.Obwohl ich mir keinen legitimen Grund dafür vorstellen kann.Zusätzlich kann eine Verschleierung (z. B. Java früher) Funktionen in die Ausgabe einführen, die mit der aktuellen Technologie / Dekompilierern nicht einfach wiederhergestellt werden können.Dies machte das Entkompilieren von Java unerträglich umständlich.So können selbst erfahrene Benutzer nicht auf den Code schließen.Das ist eine Situation, in der Verschleierung besser ist als die Konkurrenz.
Ich finde es faszinierend, dass die Möglichkeit der Deobfuscation stark vom Codestil abhängt.Zum Beispiel, wie wichtig die Variablennamen sind.Der Code könnte in einer relativ niedrigen Sprache geschrieben sein und sehr hohe Muster verwenden.Wie objektorientierte Klassen, die ungefähr auf Java-Ebene liegen, werden alle teilweise so oft wie nötig implementiert.Auch die Verwendung von Entwurfsmustern, die sich über noch längere Codebereiche erstrecken.All diese Strukturen werden hauptsächlich in Variablennamen ausgedrückt.Zwei Werte desselben Typs können unterschiedlichen Klassen angehören, ausgedrückt im Namen.Verschiedene Klassen können sogar gleich sein.
"OWASP empfiehlt die Verwendung der Verschleierung für mobile Clients" - möglicherweise nur, weil beispielsweise die Minimierung von JavaScript diese verschleiert, aber das eigentliche Ziel besteht darin, sie zu verkleinern, weniger Informationen zu übertragen und den Internetverkehr und die Ladezeiten von Webseiten zu beschleunigen
@Mawg OWASP empfiehlt jedoch nicht ausdrücklich, JavaScript zu verschleiern
Wofür ist diese Frage eigentlich?Die verlinkte OWASP-Seite gibt buchstäblich die Bedrohung an, dass die Verschleierung zum Schutz vor und ausführliche Beschreibungen sowohl der Bedrohung als auch der Lösungen beitragen soll.
Betrachten Sie es als ein Schloss an Ihrer Haustür.Es verhindert in keiner Weise, dass jemand hereinbricht, aber wenn das nächste Haus kein Schloss hat oder nicht besetzt ist, warum sollte die Person dann mit Ihrer Tür herumspielen wollen?Wenn sie ausreichend motiviert sind, um auf Sie abzuzielen, wird sie selbst ein elektrischer Zaun nicht aufhalten.Ein kaputtes Schloss kann auch vor Gericht verteidigt werden, da es beweist, dass die Person ein Motiv hatte, es zu bekommen, anstatt behaupten zu können, dass sie eingeladen wurde.
@Mawg Die Empfehlung befindet sich in einem Feld mit dem Titel "Wie verhindere ich" Reverse Engineering "?".Auf dieser Seite dreht sich alles um Reverse Engineering, nicht um Leistung.
Ich denke, ob es einen Sicherheitsvorteil bietet, ist unabhängig davon, ob es einen messbaren Sicherheitsvorteil bietet.Ich glaube, es gibt einen Sicherheitsvorteil, aber ich weiß nicht, wie ich den Nutzen messen soll.
Echte Javascript-Verschleierung: Übersetzen Sie alles in [JSFuck] (http://www.jsfuck.com/).
@Gloweye Außer dass es automatisierte Tools wie [JSUnFuck] (http://codertab.com/jsunfuck) gibt, die dies vollständig umkehren
Es ist das gleiche, als hätten Sie zwei gleiche Autos nahe beieinander geparkt, aber eines hat (sichtbar) Alarm installiert und das andere nicht.Wenn ein Bösewicht kommt und einen von ihnen stehlen will, welchen wird er wohl wählen?Natürlich, wenn er das Konkrete will, wird er es trotzdem nehmen.Es ist nur eine gute Praxis, die dich normalerweise nichts kostet, also tu es;) Im Zusammenhang mit JS betrachte ich sie normalerweise eher als Minifizierung als als Verschleierung.Und wenn die Quelle auf die Hälfte des Originals reduziert werden kann, ist es wirklich eine gute Idee, dies zu tun.
_ "... ein Vorteil, der die zusätzlichen Kosten, die Komplexität und die reduzierte Leistung überwiegt." _ - Es geht um die falsche Seite Ihrer Frage, aber ich werde das ergänzen (oder daran erinnern, dass es in "Kosten" enthalten ist, inZusätzlich zum Aspekt "reduzierte Leistung" treten die Schwierigkeiten auf, die Benutzer haben, wenn die Verschleierung selbst Fehler in den Code einführt.Dies ist eines der größten Probleme bei technischen Maßnahmen zur Durchsetzung des Urheberrechts: Sie beeinträchtigen die Benutzererfahrung ausnahmslos.Legit Benutzer, das heißt.Menschen, die herumhacken und den Kopierschutz umgehen, leiden nicht unter solchen negativen Auswirkungen.
Ich bin schockiert, dass irgendjemand es jemals für notwendig halten würde, Code * absichtlich * zu verschleiern!
Fünf antworten:
gowenfawr
2019-10-09 20:18:18 UTC
view on stackexchange narkive permalink

Die Verschleierung des Codes bietet zwei Vorteile:

  1. Das flache Ende des Angreiferpools wird entfernt. Skriptkinder, die Schwierigkeiten haben, Ihren Code zu verstehen, werden woanders hingehen.
  2. Dies erhöht den Aufwand für erfahrene Angreifer. Unabhängig davon, wie gut sie sind, ist die Verschleierung billiger als die Entschärfung, und das Ergebnis ist im Allgemeinen weniger verständlich als das Original (Variablennamen bleiben beispielsweise generisch, wenn die Originale beschreibend waren).
  3. ol>

    @SteveSether hat in seinem Kommentar doppelt Recht - tatsächliche Messungen sind fast unmöglich zu finden, und viele Codebasen werden aus proprietären Gründen * und nicht aus Sicherheitsgründen verschleiert.

    Aus Sicherheits- und proprietären Gründen hängt der Wert der Code-Verschleierung jedoch von ihrer asymmetrischen Qualität ab. Die Verschleierung ist billiger als die Entschärfung.


    * By " proprietäre Gründe "Ich meine" den Wunsch, den eigenen Code und die eigenen Algorithmen privater oder schwerer zu reproduzieren, um den Wettbewerbsvorteil auf dem Markt aufrechtzuerhalten. " Unternehmen und Einzelpersonen sind beide dieser Tendenz ausgesetzt.

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (https://chat.stackexchange.com/rooms/99892/discussion-on-answer-by-gowenfawr-does-code-obfuscation-give-any-measurable-secu).
F. Hauri
2019-10-09 20:15:16 UTC
view on stackexchange narkive permalink
    • Solange ich verschleierten Code (meistens in Viren und Rootkits ) auf potenziell allem gesehen habe, was aus dem Internet empfangen werden kann (Mail, FTP, Web, DNS usw., in Anfragen, Protokollen, Dateiübertragungen), die menschliche Zeit, die erforderlich ist, um den Code gut zu deobfuscieren, um wichtige Informationen wie die Serveradresse zu finden. admin id und das gehashte Passwort für ein Botnetz oder sensible Zeichenfolgen oder Bibliotheksaufrufe für Viren werden meistens berücksichtigt Minuten.

      In Bezug auf den Schutz vor fremdem Code ist dies keine große Aufgabe (wenn auch nicht trivial).

    • Auf der anderen Seite bauen bearbeitbare Quellen aus dieser Art von Code können viel Zeit in Anspruch nehmen (in Tagen, Wochen oder sogar mehr zu zählen, wenn der Code groß ist. Je weiter die Deobfuscationsprozesse voranschreiten, desto effizienter sind sie und schnell, als wenn Licht kommt).

    • Über die Empfehlung von OWASP stimme ich zu: Verschleierung impliziert Personal Sie stellen also einige Kosten dar, wodurch Piraterie weniger attraktiv wird.

    • Über Messbarkeit von Sicherheitsvorteil ... Entschuldigung, aber ich kann nicht! Abhängig von , wer interessiert sein könnte, indem Sie Ihren Code hacken, welchen Teil Ihres Codes und warum .

    Insgesamt ist meine eigene Empfehlung: Die Verwendung von Verschleierung ist im Wesentlichen keine schlechte Idee, aber Es ist nicht als große Sicherheitsverbesserung anzusehen!

    Um es klarer zu machen: Denken Sie niemals daran, Code zu verschleiern, um geheime Schlüssel / Funktionen zu verbergen, damit er sicherer ist, als wenn sie nicht verschleiert wären!

Dies mag für Malware zutreffen, aber für ganze Anwendungen oder Spiele ist es schwieriger, den Code zurückzuentwickeln.Mit Sicherheit keine Frage von Minuten.
@HugoZink Ich denke, er meint den Fall, dass Werte von Interesse ungetrübt gefunden werden können.Als Wert muss beispielsweise eine IP-Adresse gespeichert werden.Grundsätzlich `gzip -d obfuscatedfile |Saiten |weniger`
@VolkerSiegel Ich bin anderer Meinung.Es kann algorithmisch generiert oder aus einer verschlüsselten Zeichenfolge entschlüsselt werden, wodurch der Angreifer gezwungen wird, die Mechanismen des Entschlüsselungsalgorithmus und den Speicherort des Schlüssels usw. zu erarbeiten.
@HugoZink Ich meinte den Fall "Sicher keine Frage von Minuten", das war nicht klar.Ich wollte sagen: Es gibt eine Methode, die in "Minuten" durchgeführt werden kann und oft zu Ergebnissen führt.Ich habe keine Einwände gegen dich.
@HugoZink Ich meine: * `Festlegen des Ziels von verschleiertem Code (meistens Malware)` * ist * etwas Triviales *, aber das Erstellen von * bearbeitbarem Quellcode * aus einer großen * verschleierten Anwendung * kann * `viel Zeit in Anspruch nehmen * (*` asGegenteil` *) ... Entschuldigung für mein nicht so gutes Englisch.
@VolkerSiegel Ich benutze oft `smjs <(sed s / exec / print / ...)> deobfuscated.raw` ... Ersetze` print` durch` cat` oder `echo` für shell, php, perl, etc ...(Natürlich in einem geschlossenen Sandkasten;)
@JonBentley Das Spielen mit Sandkästen (`qemu`,` lxc`) ist sehr effizient.Siehe meinen vorherigen Kommentar.
@JonBentley Sie können die wunderbarste verschleierte / verschlüsselte / generierte IP-Adresse der Welt haben, und es kann ein Team von 100 Ingenieuren 30 Jahre dauern, um sie zu entschlüsseln, aber schließlich muss die Software sie unverschlüsselt an einen Systemaufruf wie `connect () liefern.`.Und diese Systemaufrufe lassen sich einfach mit "strace" protokollieren und mit "gdb" abfangen, zumindest unter Linux.
@IwillnotexistIdonotexist Zumindest bei Malware besteht das Ziel hauptsächlich darin, die IP-Adresse vor einer statischen Analyse des Programms zu verbergen, wie dies bei Antivirensoftware der Fall sein könnte.Wenn sie "connect ()" aufrufen, bietet es nur einen minimalen zusätzlichen Wert, um zu wissen, mit wem sie verbunden sind.Tatsächlich kann dies leicht außerhalb des betroffenen Computers durch Überwachen von Netzwerkpaketen beobachtet werden.
@trognanders Eine einfache Möglichkeit, verschleierten Code auszuführen, während der Vorgang mit strace, gdb, tcpdump verfolgt wird, sorgt für viel * Licht *.Da fast alle Zeichenfolgen, Adressen, Ports usw. lesbar werden.
@VolkerSiegel Würden die meisten Leute daran denken, nach dem Wert "2144929806" als IP-Adresse zu suchen?Sie können diese Adresse anpingen und Pakete von google.com zurückerhalten.
@doneal24 Nein. Außer wenn der Kontext dies vorschlägt.Aber ich habe über einen schnellen Hack gesprochen, der die Chance hat, in kurzer Zeit nützliche Ergebnisse zu erzielen.Und vielleicht bin ich ein bisschen traditionell, aber in meiner Welt werden IP-Adressen in Punkt-Dezimal-Schreibweise notiert, wenn es sich um IPv4 handelt.Dies ist eine Zeichenfolgenkonstante auf Codeebene, die häufig von der Verschleierung ausgeschlossen wird.Natürlich können Sie den Obfuscator anweisen, einen bestimmten Long-Int-Wert auszuschließen.Oder denken Sie an Zeichenfolgenkonstanten, die die Dezimaladresse darstellen?(Auch dies alles ist nicht wirklich relevant)
"Ein paar Minuten" können zutreffen, wenn Sie nur nach einer versteckten Zeichenfolge suchen, aber definitiv nicht für das Reverse Engineering komplexer Algorithmen oder Software.Als berühmtes Beispiel ist Minecraft verschleiert.Ein großes Team talentierter Reverse-Ingenieure brauchte Monate, um den Code vollständig zu entschlüsseln.und [bis vor einem Monat] (https://www.reddit.com/r/programming/comments/cznq2s/minecraft_now_releases_obfuscation_maps_for/) dauerte es mehrere Stunden, [die Verschleierungskarten nach jeder Veröffentlichung neu zu erstellen] (https: //minecraft.gamepedia.com/Programs_and_editors/Mod_Coder_Pack)
@BlueRaja-DannyPflughoeft Ich schrieb: * `Das Erstellen von bearbeitbaren Quellen aus dieser Art von Code kann viel Zeit in Anspruch nehmen` *!
@Aaron Ich schrieb: * `... das Erstellen bearbeitbarer Quellen aus dieser Art von Code kann viel Zeit in Anspruch nehmen ...` *
Mein vorheriger Kommentar scheint gelöscht worden zu sein.Ich weiß nicht warum, da daran nichts Schlimmes war.Ich möchte nur noch einmal hinzufügen, dass diese Antwort sehr irreführend ist und den Aufwand für die Durchführung dieser Aktivitäten drastisch unterschätzt.
@Aaron Fair genug, gelöschter Kommentar war aggressiv und falsch!Meine Antwort ist richtig.Ich habe schon viel mit vielen Hacking-Umgebungen gespielt.Das Ziel von verschleiertem Code in Minuten verstehen und bearbeitbaren Quellcode in Wochen oder länger erstellen.Das ist wahr und erfahren!
@F.Dies setzt natürlich nicht triviale Software voraus: Office Word, nicht Calculator.Ich werde sehr, sehr skeptisch bleiben, aber wenn Sie nicht übertreiben, dann viel Glück für Sie.
@Aaron Auch hier spreche ich nicht über das Erstellen von bearbeitbarem Quellcode.Aber das Aufdecken der Ziel-IP, geheimer Zeichenfolgen usw., ja, der Zeit, die in Minuten gezählt werden soll.Aber wenn ich weiß, wie das geht, bin ich nicht allein!Ich kenne viele Leute, die das auch können.
Dmitry Grigoryev
2019-10-11 13:57:22 UTC
view on stackexchange narkive permalink

Ein weiterer Punkt bei der Verschleierung ist, dass es Angreifern schwerer fällt, ihre Reverse-Engineering-Aktivitäten abzulehnen.

Wenn Sie einen Server haben, der jeden Client zulässt, der ihnen eine "Hello foobar" -String sendet, und jemand nutzt es aus, es kann schwierig sein, vor Gericht zu beweisen, dass der Täter wirklich die Absicht hatte anzugreifen, und nicht nur Ihre Lizenzvereinbarung missverstanden und angenommen hat, dass dies erlaubt war. Wenn sich Ihr Client mit einem verschleierten geheimen Schlüssel (der im Client selbst enthalten ist) beim Server authentifiziert, gewinnen Sie wenig an Sicherheit, aber jemand, der Ihren Server ausnutzt, kann nur schwer nachweisen, dass er diesen Schlüssel zufällig erhalten hat, und nicht über einen absichtlichen Reverse Engineering-Aufwand.

trognanders
2019-10-11 13:04:11 UTC
view on stackexchange narkive permalink

Verschleierung erhöht die Zeitkosten für das Reverse Engineering eines Programms erheblich. Während es vielleicht schnell ist, einige kleine Geheimnisse aus einem verschleierten Programm zu extrahieren, kann die Arbeit, eine nicht verschleierte Version dieses Programms zu erstellen, es einfach umschreiben. Das Extrahieren eines neuartigen Algorithmus ist möglich, aber nicht trivial.

Im Wesentlichen verschleierter Code kann begründet, aber nicht wiederverwendet werden.

Die Verschleierung von Code ist das Thema umfangreicher CS-Forschung ... Ihr Axiom, dass die Verschleierung im Wesentlichen wertlos ist wäre umstritten.

Ich würde das Buch Schleichsoftware: Verschleierung, Wasserzeichen und Manipulationssicherheit für den Softwareschutz vorschlagen. von Christian Collberg und Nagra Jasvir.

Manchmal ist sogar die Arbeit mit schlecht geschriebenem ** Quellcode ** schlecht genug, dass Sie ihn besser umschreiben sollten.Und manchmal kann es nicht trivial sein, den Algorithmus einer Person im ursprünglichen Quellcode zu verstehen.10- oder 100-mal schlechter (oder mehr)… OP kann genauso gut die Haus- und Fahrzeugtüren unverschlossen lassen und weit offen hängen und die Wertsachen in Sichtweite halten, da Schlösser die Menschen nicht so sehr verlangsamen wie die Verschleierung von Codes.
R.. GitHub STOP HELPING ICE
2019-10-12 19:00:02 UTC
view on stackexchange narkive permalink

Es erhöht die Wahrscheinlichkeit, dass hochmotivierte und wahrscheinlich gut finanzierte Angreifer, wenn die ausnutzbaren Fehler in Ihrer Software gefunden und ausgenutzt werden, gezielt auf Sie abzielen (oder wer auch immer Ihre Software verwendet), anstatt skript Kinder, Ransomware usw.

Zum größten Teil würde ich mir vorstellen, dass die Fehler in Ihrer Software lieber von Whitehat- oder Grayhat-Forschern gefunden werden, wobei skript Kiddies und Ransomware als zweite Wahl gelten Angreifer auf der Ebene und wie im schlimmsten Fall. Aber Sie müssen diesen Anruf tätigen.



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 4.0-Lizenz, unter der er vertrieben wird.
Loading...