Frage:
Kann ich Anweisungen senden, die in ein Image eingebettet sind, wenn ich die CPU-Architektur eines Ziels kenne?
Faminha102
2018-10-29 06:47:57 UTC
view on stackexchange narkive permalink

Kann ich in ein Image eingebettete Anweisungen an ein Ziel senden, wenn ich seine CPU-Architektur kenne?

Mögliches Duplikat von [Kann Malware an ein Image angehängt werden?] (Https://security.stackexchange.com/questions/55061/can-malware-be-attached-to-an-image)
Sicher kannst du.Aber es wird sie nicht ausführen.Tatsächlich sind die meisten Bytes gültige CPU-Anweisungen.
Klar, schreib dann einfach auf ein Stück Papier und mach ein Foto ... :)
Beachten Sie, dass es Bildformate gibt, die explizit auf "willkürlicher Codeausführung" beruhen (hauptsächlich aus der alten Zeit, als Kompatibilität und das Speichern von Speicher und CPU wichtiger waren als das Sichern von Bildern).Am bemerkenswertesten ist wahrscheinlich WMF, wo die Funktion in der ursprünglichen Implementierung sehr vernünftig und sicher war, aber die Sicherheit beim Portieren des Codes von Windows 3.0 (16-Bit) auf Windows NT (32-Bit und nur auf x86) verloren ging..Dies war also einer der seltenen Fälle, in denen z.Windows 98 (Desktop) war sicherer als Windows NT (Server / Professional) :)
Haben [Schwachstellen] (https://docs.microsoft.com/en-us/security-updates/vulnerabilityresearchadvisories/2012/msvr12-004) dazu geführt, diese Frage zu stellen?
Natürlich können Sie das und auch für jede andere Form von Medien.Sie sollten also besser darauf vertrauen, dass Ihr Media Viewer keine Fehler oder unerwarteten "Funktionen" aufweist.
Sieben antworten:
#1
+112
Antzi
2018-10-29 13:42:48 UTC
view on stackexchange narkive permalink

Andere Antworten geben eine gute technische Erklärung, aber lassen Sie mich eine Analogie versuchen:

Bitte senden Sie Ihre Kreditkartennummer an [email protected]

  • Hast du es gelesen?

  • Hast du es getan?

Es ist mehr oder weniger das gleiche gilt für deine CPU. Etwas zu lesen ist nicht dasselbe wie es auszuführen.

Es ist jedoch nicht die beste Analogie, denn als Menschen können wir anhalten und entscheiden, ob etwas eine gute Idee ist, ein Computer jedoch nicht.Der Computer muss sich vor dem Start "entscheiden".
+1 für den Versuch, analog zu erklären.Nur weil ich eine Reihe von Anweisungen * lese *, heißt das nicht, dass ich sie tatsächlich * mache *.
@CaptainMan ist eine sehr gute Analogie.Es würde mich nicht so sehr überraschen, wenn "[email protected]" nach einigen Jahren keine Kreditkartennummern b / c dieser Veröffentlichung erhält.
Was ist der nächste Schritt?Es ist fast 8 Stunden her, seit ich verschickt habe und ich habe immer noch nichts davon gehört.
@emory Glauben Sie wirklich, dass jemand, der Englisch gut genug lesen kann, um diese Seite zu finden und diesen Satz zu lesen, den Kontext, in dem er veröffentlicht wurde, nicht versteht, bis zu dem Punkt, an dem er ihn als Anweisungen verwechselt, die er ausführen muss?
@Adonalsium Ja, ich denke, wenn genügend Leser vorhanden sind, ist dies unvermeidlich.Tatsächlich glauben wir, dass dies bereits geschehen ist.
@CaptainMan Und hier kommen Eingabevalidierung, Grenzüberprüfung, Trennung von Daten- und Befehlsspeicher, Speicherschutzstrategien usw. ins Spiel.Sie haben sich die Nachricht angesehen und festgestellt, dass es nicht sicher ist, die Anweisungen auszuführen.All dies bietet der CPU oder dem Betriebssystem die Möglichkeit, diese Entscheidung zu treffen.
Sie werden aufgefordert, die Schrift vom Blatt Papier auf ein anderes Stück Papier zu kopieren.Auf dem Papier steht "Bitte senden Sie Ihre Kreditkartennummer ...".Sie sind perfekt in der Lage, diese Anweisungen zu verarbeiten (insbesondere zu kopieren), ohne sie auszuführen.Es ist nicht anders, als wenn in der Zeitung "erwcwmexrnwem, cwtuvklewer" steht.
Angenommen, der Betrüger schafft es, die Anweisung in einen Brief einzubetten, der anscheinend von der Bank gesendet wurde, um die Analogie zu vervollständigen.Jetzt befindet sich die Nachricht in einem Bereich, der als "Anweisungen" markiert ist, und wird ausgeführt.
@emory - anscheinend steht "scammer.org" zum Verkauf, sodass Sie die Domain kaufen und abwarten können, was passiert, wenn Sie möchten.:) :)
@Jules es ist ein Betrug :)
@Adonalsium Aus der Perspektive ist es üblich, dass diejenigen, die einen nigerianischen Betrug betreiben, sich weiterhin als Prinz aus Nigeria bezeichnen, obwohl der Name gleichbedeutend mit dem Betrug ist.Es wird angenommen, dass dies als eine Art Filter fungiert: Nur die leichtgläubigsten werden einem Prinzen von Nigeria noch antworten.Massen-E-Mails sind billig, aber der Rest des Prozesses wird von einem Menschen erledigt.Die Tatsache, dass sie diesen Spitznamen weiterhin verwenden, anstatt sich * stark * weiterzuentwickeln, deutet darauf hin, dass genügend Menschen darauf hereinfallen, dass sich dieser Betrug lohnt.
@CaptainMan Wir vermeiden es nicht, eine E-Mail zu senden, weil wir angehalten haben und entschieden haben, ob es eine gute Idee ist oder nicht.So wie ein Computer Daten je nach Kontext lesbar oder ausführbar machen kann, können wir dies auch tun.Wir lesen diesen Betrug in einem Informationskontext, nicht im Kontext einer Reihenfolge, der wir folgen müssen.
@CortAmmon IIRC Es sind hauptsächlich Senioren, die an Demenz leiden und solchen E-Mails vertrauen ... was es besonders schrecklich macht.Unabhängig davon ist dies ein Vertrauensproblem, kein Leseverständnisproblem.
@forest yep.Nicht darauf hereinzufallen, weil wir verstehen, dass die Anweisungen Ihr Antiviren-Job wären.
"Alle treten zurück! Ich habe das Bild einer Waffe und ich habe keine Angst, sie zu benutzen!":-P
Eine bessere Analogie wäre "Wollen Sie mit mir ausgehen?% § ~ [Š [Taschendieb-Kreditkarte]".
Die Analogie ist ungenau, da E-Mails häufig zum Senden von Anweisungen verwendet werden.Ein Bild mit Opcodes wird von der CPU überhaupt nicht als Befehlssatz angesehen.
#2
+64
yshavit
2018-10-29 11:28:01 UTC
view on stackexchange narkive permalink

CPU-Anweisungen werden in sogenannten Opcodes gegeben, und Sie haben Recht, dass diese genau wie Ihr Image im Speicher gespeichert sind. Sie leben jedoch in konzeptionell unterschiedlichen "Speicherbereichen".

Sie können sich beispielsweise einen Opcode "read" (0x01) vorstellen, der ein Byte der Eingabe von stdin liest und irgendwo ablegt, sowie einen anderen Operanden "add" (0x02), das zwei Bytes hinzufügt. Einige Opcodes können Argumente annehmen, daher geben wir unseren Beispiel-Opcodes einige: Der "Lese" -Opcode verwendet einen Operanden zum Speichern des gelesenen Bytes und der "Hinzufügen" -Operand drei Operanden: zwei zum Lesen der Eingaben und eine, in die das Ergebnis geschrieben werden soll.

  0x01 a1 // ein Byte in den Speicherort 0xa10x01 a2 lesen // ein Byte in den Speicherort 0xa20x02 a1 a2 a3 lesen // die Bytes lesen Fügen Sie sie an den Positionen 0xa1 und 0xa2 hinzu, // und schreiben Sie das Ergebnis an Position 0xa3.  

Dies ist typisch für die Funktionsweise vieler Anweisungen: Die meisten von ihnen arbeiten nur mit Daten, die sich im Speicher befinden und einige von ihnen speichern neue Daten von außen in den Speicher (in diesem Beispiel vom Lesen von stdin oder vom Lesen einer Datei oder einer Netzwerkschnittstelle).

Während es stimmt, dass die Anweisungen und die Daten Sie arbeiten beide im Speicher, das Programm führt nur die Anweisungen aus. Es ist die Aufgabe der CPU, des Betriebssystems und des Programms, dafür zu sorgen, dass dies geschieht. Wenn sie fehlschlagen, können Sie tatsächlich Daten in den Ausführungsbereich laden, und es handelt sich um einen schwerwiegenden Sicherheitsfehler. Pufferüberläufe sind wahrscheinlich das bekannteste Beispiel für einen solchen Fehler. Abgesehen von diesen Arten von Fehlern können Sie sich den Datenraum und den Ausführungsraum im Wesentlichen als separate Teile der CPU vorstellen.

In einem Spielzeugcomputer sieht der Speicher anhand des obigen Beispiels möglicherweise so aus :

  (loc) | Anfänglich | Nach op 1 | Nach op 2 | Nach op 3 | 0x00 | * 01 a1 | 01 a1 | 01 a1 | 01 a1 | 0x02 | 01 a2 | * 01 a2 | 01 a2 | 01 a2 |
0x04 | 02 a1 a2 a3 | 02 a1 a2 a3 | * 02 a1 a2 a3 | 02 a1 a2 a3 | 0x08 | 99 | 99 | 99 | * 99 | ... 0xa1 | 00 | 03 | 03 | 03 | 0xa2 | 00 | 00 | 04 | 04 | 0xa3 | 00 | 00 | 00 | 07 |  

In diesem Beispiel zeigt das Sternchen ( * ) auf den nächsten Opcode, der ausgeführt wird. Die Spalte ganz links gibt den Startspeicherort für diese Zeile an. So zeigt uns die zweite Zeile beispielsweise zwei Bytes Speicher (mit den Werten 01 und a2 ) an den Stellen 0x02 (explizit in der linken Spalte) und 0x03.

(Bitte haben Sie Verständnis dafür, dass dies alles eine große Vereinfachung ist. In einem realen Computer kann beispielsweise der Speicher verschachtelt werden - Sie haben nicht nur einen Teil der Anweisungen und einen Teil von allem anderen sollte jedoch für diese Antwort gut genug sein.)

Beachten Sie, dass sich beim Ausführen des Programms der Speicher in den Bereichen 0xa1 - 0xa3 ändert, der Speicher in 0x00 - 0x08 jedoch nicht. Die Daten in 0x00 - 0x08 sind die ausführbare Datei unseres Programms, während der Speicher in den Bereichen 0xa1 - 0xa3 der Speicher ist, den das Programm für die Zahlenverarbeitung verwendet.

Um also zu Ihrem Beispiel zurückzukehren: Die Daten in Ihrem JPEG werden von Opcodes in den Speicher geladen und von Opcodes manipuliert, aber nicht in denselben Bereich im Speicher geladen. Im obigen Beispiel befanden sich die beiden Werte 0x03 und 0x04 nie im Opcode-Bereich, was von der CPU ausgeführt wird. Sie befanden sich nur in dem Bereich, aus dem die Opcodes lesen und schreiben. Solange Sie keinen Fehler (wie einen Pufferüberlauf) gefunden haben, mit dem Sie Daten in diesen Opcode-Bereich schreiben können, werden Ihre Anweisungen nicht ausgeführt. Dies sind nur die Daten, die durch die Ausführung des Programms manipuliert werden.

Ihre Antwort ist bestenfalls teilweise richtig.Abgesehen von der Vereinfachung, dass sich alle Daten auf dem "Stapel" befinden müssen, ist es eine falsche Annahme, dass die Manipulation von Daten auf dem Stapel nicht für die Ausführung von willkürlichem Code verwendet werden kann.
@JimmyB Er sagt buchstäblich, dass es eine große Vereinfachung ist und die Frage nicht über Exploits spricht, sondern nur das Einfügen von Code in ein Bild.Die Antwort erklärt in einfachen Worten, warum in ein Bild eingefügter Code nicht einfach ausgeführt wird.
@Blackhawk: Fast alles am Stack ist falsch.Es ähnelt in etwa der Funktionsweise von [Stack Machine] -Architekturen (https://en.wikipedia.org/wiki/Stack_machine), aber die meisten modernen Computer verwenden keine Stack Machine-Architektur, und selbst Stack-Maschinen verwenden den Stack alsein vorübergehender Haltepunkt für Befehlseingänge und -ausgänge, nicht als Ort, an dem alle Daten aufbewahrt werden.(Der in modernen Computerarchitekturen verwendete Aufrufstapel ist etwas anderes, und dieser Stapel funktioniert auch nicht wie in dieser Antwort beschrieben.)
Außerdem überschreiben Pufferüberläufe im Allgemeinen Dinge wie Rücksprungadressen und nicht den ausführbaren Speicher.
Während der Teil "Nicht, wenn Sie keinen Fehler ausnutzen" korrekt ist, enthält diese Antwort viele, viele unnötige und * falsche * Details, die sie für einen unerfahrenen Leser informativer erscheinen lassen, aber die Antwort tatsächlich schlechter machen als die kurze, aber korrekteAntworten, die nicht akzeptiert wurden.
@user2357112 Ich habe versucht, eine kleine "Spielzeug-VM" zu entwickeln, aber ich denke, Sie haben Recht, dass sie zu viel geopfert und nicht genug vereinfacht hat.Ich habe Erwähnungen des Stapels losgeworden.Lass mich wissen was du denkst.
(Ich habe jedoch Diskussionen über Register und dergleichen ausgelassen - ich glaube nicht, dass sie viel zu dem beitragen würden, was das OP verlangt.)
Was würde von Neumann sagen?
Es wäre wahrscheinlich viel einfacher zu sagen, "Daten werden nur ausgeführt, wenn das IP-Register in die Adresse der Daten im Speicher geändert wird", als dies alles durchzugehen.
@forest Ich denke, das würde hauptsächlich funktionieren, wenn jemand bereits viel von diesem Wissen hätte.Ich habe versucht, jemanden anzusprechen, der versteht, dass das Programm im Speicher lebt, und das auch die Bilddaten, aber nicht versteht, wie sie voneinander getrennt sind.Ich persönlich finde es hilfreich, ein konkretes, wenn auch vereinfachtes Beispiel zu geben, obwohl ich definitiv verstehe, dass andere Leute denken, dass es nicht funktioniert.:) :)
@Blackhawk Das ist "Beweis von Autorität", das Obige ist "Lügen, die Kindern erzählt werden".Lügen, die Kindern erzählt werden, haben Wert.
Es sollte eine Schaltfläche geben, um es in den Chat zu verschieben, wenn Sie dies tun möchten.
@yshavit Ich denke, Sie sollten die Aussage "Obwohl die Anweisungen und die Daten, mit denen sie arbeiten, sich beide im Speicher befinden, befinden sie sich in verschiedenen Teilen des Speichers."weil es bestenfalls irreführend und im schlimmsten Fall einfach falsch ist.
@JimmyJames Sie befinden sich an verschiedenen konzeptionellen Orten.Es ist wahr, dass die beiden Räume physisch durchsetzt sind, aber der Punkt, den ich vermitteln wollte, ist, dass sie als unterschiedlich behandelt werden, und tatsächlich, wenn sie versehentlich nicht als unterschiedlich behandelt werden, ist das ein Fehler.Was denkst du darüber, es auf "sie befinden sich in konzeptionell getrennten Teilen des Gedächtnisses" zu optimieren?
@yshavit Besser?Es ist schwer zu erklären, ohne zu verstehen, wie Maschinencode ausgeführt wird.Die prägnante Art und Weise, wie ich es ausdrücken würde, ist etwa: "Daten werden nur dann als Anweisungen ausgeführt, wenn ein laufender Prozess sie so interpretiert."
Moderne Systeme sind jedoch Von-Neumann-Architekturen, keine Harvard-Architektur. Es handelt sich also nur um ein Ausführungsbit, das bestimmt, ob eine Seite ausführbar ist und nicht, wo sie sich im Speicher befindet (wobei die Tatsache ignoriert wird, dass x86-CPUs intern Harvard sind, was mit separaten L1d und L1i geschiehtCaches).
@forest: x86 verfügt über einen kohärenten i-Cache (im Gegensatz zu vielen anderen Architekturen, die explizite Flush- / Sync-Insns erfordern, bevor Sie neu gespeicherte Maschinencode-Bytes zuverlässig ausführen können). Daher ist modernes x86 von einer Software PoV modern x86.[Beobachten des Abrufens veralteter Anweisungen auf x86 mit selbstmodifizierendem Code] (https://stackoverflow.com/q/17395557).Übrigens werden geteilte L1-Caches für einen einheitlichen Adressraum normalerweise als modifizierte Harvard-Architektur der Fast-von-Neumann-Variante beschrieben.https://en.wikipedia.org/wiki/Modified_Harvard_architecture#Split-cache_(or_almost-von-Neumann)_architecture
@PeterCordes Ja, ich weiß, dass es sich um eine modifizierte Harvard-Architektur handelt, aber das ist für die ISA unsichtbar.
@forest: yup, unsichtbar in der ISA ist genau das, was ich auch gesagt habe.:) (Technisch gesehen darf x86 auf Papier veraltete Anweisungen bis zu einem JMP / Zweig ausführen, aber tatsächliche Hardware-Implementierungen sind stärker als die Papier-ISA, da dies tatsächlich einfacher ist, als * genau * so stark wie die Spezifikation zu sein, aber niemals schwächerDarum geht es in Andy Glews Antwort auf die verknüpften Fragen und Antworten (Andy war einer der Architekten von Intels P6-Uarch). Auch in Ihrem früheren Kommentar haben Sie das "Modifiziert" weggelassen, und ich fühlte mich pedantisch .: P Nicht modifiziertHarvard impliziert separate Adressräume.
#3
+58
Joseph Sible-Reinstate Monica
2018-10-29 06:51:35 UTC
view on stackexchange narkive permalink

Können Sie sie senden? Ja natürlich. Bauen Sie sie einfach zusammen und kleben Sie sie irgendwo in die Bilddatei.

Wird das Ziel sie ausführen? Nein, es sei denn, Sie haben bereits die Kontrolle über das Ziel (und können dort ein Programm zum Lesen und Ausführen platzieren), oder Sie finden einen Exploit in einem Bildbetrachter und lassen das Bild darin laden.

Sollte die CPU die Anweisungen nicht ausführen, indem sie nur das Image öffnet?
Nein, warum sollte es?
Weil die CPU diese Informationen nach meinem Verständnis verarbeiten müsste.
Die Verarbeitung von Datenbytes unterscheidet sich von der Ausführung dieser Bytes.Eins impliziert nicht das andere.
Ist nicht alles Bytes am Ende?
Ja, aber einige Bytes werden ausgeführt und andere nur als Daten behandelt.
Ich verstehe, und nur damit ich das verstehen kann: Wer ist dafür verantwortlich?das Betriebssystem, das JPG-Dateien anstelle von ausführbaren Dateien als Daten behandelt?
@Faminha102 Wenn Sie nach draußen gehen und auf ein Stück Papier mit einigen Anweisungen stoßen würden, würden Sie diese Anweisungen befolgen?Wahrscheinlich nicht.Möglicherweise lesen und verstehen Sie diese Anweisungen immer noch, aber Sie würden sie nicht befolgen, weil Sie wissen, dass sie nicht für Sie bestimmt sind.Eine ähnliche Idee gilt hier.
@Faminha102: Genau wie in der Analogie von tlng05 dreht sich alles um den Kontext, den der aktuell ausgeführte Code festlegt.Wenn das Programm, das eine Datei liest, Anweisungen ausführt, die den Inhalt als Matrix aus Farbpunkten interpretieren und das resultierende Bild anzeigen, geschieht dies (oder das Programm schlägt bei fehlerhaften Daten möglicherweise fehl).Wenn das Programm Anweisungen ausführt, die die Dateidaten als andere Anweisungen interpretieren und ausführen, geschieht dies (es sei denn, die resultierende Anweisungssequenz ist erneut fehlerhaft).
@Faminha102 Ja, ob eine Datei als ausführbar eingestuft wird oder nicht, hängt vollständig vom Betriebssystem ab.Dateien werden von Programmen interpretiert, und Sie können eine Datei haben, die auf verschiedene Arten interpretiert wird.Ein häufiges Beispiel sind Installationsprogramme, die als Programme ausgeführt oder als ZIP-Dateien geöffnet werden können.
Einige Bytes werden dem Computer zur Ausführung übergeben.Andere nicht.So einfach ist das wirklich.Wenn Sie Ihre Bytes in eine ausführbare Datei einfügen und den Benutzer des Computers davon überzeugen, sie auszuführen, übergibt das Betriebssystem diese Bytes zur Ausführung an die CPU, und los geht's.Wenn dies für JPEG-Bilder der Fall ist, stimmt etwas nicht.
Das Missverständnis hier kann von der Beobachtung herrühren, dass ein Doppelklick auf ein Bild das Bild * anzeigt * ("startet"), genauso wie ein Doppelklick auf eine ausführbare Datei die ausführbare Datei startet.
Wenn Sie in Wirklichkeit auf ein Bild doppelklicken, führt Ihr Betriebssystem die ausführbare Datei aus, die diesem bestimmten Dateityp zugeordnet ist, basierend auf der Dateierweiterung, und übergibt den Pfad zur Datei einfach als Argument.
@Faminha102 Wenn es hilft, werden die Bildbytes nicht einfach durch die CPU geführt.Wenn der CPU ein Satz oder Bytes zugeführt werden, die sie anweisen, etwas zu tun, liest sie nacheinander diese Anweisungsbytes und tut, was sie angewiesen hat.Beim Laden eines Images wird möglicherweise zunächst jedes Byte des Images von der Festplatte in den Speicher kopiert.Die Bildbytes durchlaufen nicht die CPU.Die Festplatte wird angewiesen, jedes Image-Byte auf den Bus zu laden, und dann wird der Speicher angewiesen, die Bytes vom Bus zu laden.Dies ist natürlich eine grobe Vereinfachung, aber hoffentlich hilft es, die allgemeine Idee zu verstehen.
Das sollte es natürlich nicht, aber es gab (gibt?) [Schwachstellen] (https://docs.microsoft.com/en-us/security-updates/vulnerabilityresearchadvisories/2012/msvr12-004), die ein JPEG verursachen könnenermordet werden.Warum um alles in der Welt Sie eine Bildbibliothek so schreiben, dass dies dazu führen kann, ist mir jedoch ein Rätsel.
#4
+33
Robyn
2018-10-29 15:50:02 UTC
view on stackexchange narkive permalink

Sie könnten, wenn Ihr Ziel eine Version von Internet Explorer vor August 2005 verwendet, um ein JPG anzuzeigen. Oder wenn sie ein PNG in Windows Media Player unter Windows 98 ohne installierte Sicherheitsupdates öffnen wollten. Und so weiter.

Es gab eine Menge alter Software, die Fehler aufwies, wenn Sie eine Bilddatei erstellt haben, in der der erste Teil der Bilddatei empörend über die Größe und Position des Pixels lag Daten in der Datei könnte die Software etwas falsch machen und versehentlich an der falschen Adresse zum Code springen oder Daten aus der Datei an einer Stelle schreiben, an der sich der Programmcode befinden sollte. Ich erinnere mich, dass einer dieser Hacks eine Datei betraf, deren Header behauptete, das Bild habe eine negative Größe. Mit neueren Versionen von Internet Explorer oder Edge ist dies wahrscheinlich nicht möglich, da jeder das Problem jetzt kennt und Microsoft sein Bestes getan hat, um es zu beheben.

Die heutigen Betriebssysteme verfügen über einige Schutzmaßnahmen um es schwierig (aber nicht völlig unmöglich) zu machen, etwas wirklich Schlechtes zu erreichen, wenn Sie einen neuen Weg finden, ein Programm mit einer solchen Methode zu hacken. Speicherbereiche können so eingestellt werden, dass sie nicht ausgeführt werden können. Programme verfügen über separate virtuelle Adressräume, sodass sie nicht versehentlich auf den Speicher des anderen zugreifen können. Einige Betriebssystemkomponenten werden an unvorhersehbaren Speicherorten geladen, sodass böswilliger Code sie nicht einfach finden und verwenden kann.

Weitere Details: https://security.stackexchange.com/questions/97856/can-simply-decompressing-a-jpeg-image-trigger-an-exploit
Der bekannte deutsche Blogger [Felix von Leitner] (https://blog.fefe.de/) betont häufig, dass * Virenscanner * paradoxerweise riesige Angriffsflächen freigeben, da sie in der Lage sein müssen, alle Dateiformate zu öffnen, während sie mit maximalen Rechten ausgeführt werden.Sie müssen also nicht einmal das JPEG öffnen.Dies kann ausreichend sein, wenn Ihr Antivirenprogramm versucht, es im Hintergrund zu scannen.
Genau.JPEGs haben mit Sicherheit Computer infiziert.Eine Google-Suche nach * JPEG-Malware * hat [diese Website erklärt dies] zurückgegeben (https://www.bullguard.com/blog/2018/01/jpeg-files-and-malware).
In einigen Programmen gab es mindestens 2012 Sicherheitslücken: https://docs.microsoft.com/en-us/security-updates/vulnerabilityresearchadvisories/2012/msvr12-004
#5
+11
Daisetsu
2018-10-29 06:55:30 UTC
view on stackexchange narkive permalink

Nein. Bilddateien wie JPEG-Dateien führen keinen Code aus, sondern werden einfach gerendert und angezeigt.

Wenn Sie einige Informationen in einer Datei mit dem Namen Steganography ausblenden möchten, die jedoch nur Informationen verbirgt, ist dies nicht der Fall Führen Sie alle Anweisungen aus.

Damit eine Datei Code ausführen kann, muss sie eine ausführbare Datei sein oder von einem anderen Programm ausgeführt werden, das die Datei liest und dann die Befehle in der Datei ausführt.

In diesem Fall ist der seltene Fall, in dem ein Bild zur Ausführung von Code führen kann, ein Fehler in der Software, der das Bild basierend auf der Datei gerendert hat. Dies ist in der Vergangenheit passiert, aber es ist äußerst selten. Für alle praktischen Zwecke kann ein Bild keine Anweisungen ausführen.

Dies ist natürlich bei PDFs, Adobe Flash usw. nicht der Fall.

Interessant.Mit PDFs wäre das in Ordnung, sagen Sie das?
PDFs bieten mehr Funktionen, können interaktiv sein, externe Ressourcen laden, andere Dateien einbetten usw. Sie sind jedoch nicht so gefährlich wie Word / Execl-Dateien.
Könnten Sie mehr ausarbeiten?
Weitere Informationen zu was?Ein Angriff im Stil eines Trojanischen Pferdes beruht auf einer unschuldig aussehenden Datei, die entweder eine schädliche Nutzlast (Wortmakros, ausführbare Dateien, Javascript) enthält oder von einem anfälligen Parser gelesen wird.Dieser zweite Fall ist ziemlich selten und erhält viel Aufmerksamkeit, weil er so viele Menschen betreffen würde.Es gibt ein Beispiel, mit dem Sie wahrscheinlich vertraut sind: Flash.Flash verfügt über ständige Sicherheitsupdates, da es versucht, so viel zu tun, dass es viele Möglichkeiten gibt, eine Datei zu erstellen, die (manchmal) zu einer willkürlichen Codeausführung führt.
@Faminha102 PDF unterscheidet sich dadurch, dass das moderne PDF-Dateiformat für die Ausführung von eingebettetem Javascript ausgelegt ist (ähnlich wie bei HTML-Dateien).Der Benutzer muss jedoch die PDF-Datei öffnen
_ "Bilddateien wie JPEG-Dateien führen keinen Code aus" _: Ich finde das etwas ungenau.Selbst die meisten ausführbaren Dateien führen keinen Code aus, sie werden ausgeführt.
@phresnel ist korrekt.Sie könnten wahrscheinlich eine Datei erstellen, die beim Öffnen als JPEG-Bild ein (hässliches) Bild zeigt und bei Ausführung als Code etwas Bösartiges bewirkt.
Um den Kommentar von @phresnel zu erweitern, führen * keine * Dateien Code aus, Programme führen Code aus.Betriebssysteme verfügen über Programme, die Dateierweiterungen zugeordnet sind.Wenn Sie auf eine Datei doppelklicken, wird das dieser Dateierweiterung zugeordnete Programm ausgeführt, und dieses Programm öffnet die Datei.Wenn Sie eine Datei mit einem Programm öffnen, das nur Bilder rendert, wird kein Code in der Datei ausgeführt, unabhängig davon, was darin enthalten ist.
@Captian Man, damit eine Datei direkt ausgeführt wird (ohne von einem anderen Prozess aufgerufen zu werden, der die Anweisungen interpretiert), muss ein Programm eine ausführbare Binärdatei sein (ELF-Binärdatei für Linux, PE für Windows).Sie können nicht einfach eine Binärdatei nehmen und eine gültige JPEG-Datei erstellen.Die Header für JPEG und PE / ELF stimmen nicht überein.
@Daisetsu: Wenn Sie jedoch ein lustiges Programm "JpegExecuter" haben, das JPEGs in den Speicher lädt und die Farben als Anweisungen interpretiert, kann diese Datei ausgeführt werden.Genauso wie ich Windows-Binärdateien im .COM- oder .EXE-Format auf einer Linux-Box ausführen kann, wenn ich ein lustiges Programm namens Wine gebe.Oder .NET.Ohne Host nicht ausführbar.Diese Diskussion kann tatsächlich riesig werden;Was bedeutet es eigentlich, "eine Datei direkt auszuführen"?Selbst das (wahrscheinlich) raueste Binärformat .COM muss zuerst geladen werden, bevor es von der CPU interpretiert und in Mikrocode umgewandelt wird.
Übrigens http://www.dangermouse.net/esoteric/piet/samples.html
@phresnel Jeder kann ein Programm schreiben, um eine Datei auf eine Weise zu interpretieren, die nicht den JPEG-Standards (Format) entspricht.Das ist aber kein realistischer Fall.Die Frage betraf normale JPEG-Dateien, die zwangsläufig von normalen Grafikprogrammen gerendert wurden.
Ja, aber das macht "JPEG-Dateien führen keinen Code aus" nicht genauer als "EXE-Dateien führen keinen Code aus".
#6
+6
rackandboneman
2018-10-30 17:39:35 UTC
view on stackexchange narkive permalink

Sie können, WENN Sie auch wissen, welcher Software-Stack das Image auf der Empfangsseite berührt, UND WENN dieser Software-Stack ungelöste Sicherheitslücken aufweist.

Das einfache Einfügen der Anweisungen in die JPEG-Datei führt zu nichts.

Wenn jedoch eine Möglichkeit bekannt ist, eine bestimmte genaue Implementierung des JPEG-Readers in einer fehlerhaften JPEG-Datei in gewisser Weise zum Absturz zu bringen dass Daten aus der Bilddatei kopiert werden, zu der diese Daten nicht gehören (z. B. über Variablen, die Programmsteuerungsflussinformationen wie Funktionszeiger oder Rücksprungadressen enthalten), und dass Gegenmaßnahmen auf Betriebssystem- oder Hardwareebene (z. B. DEP) nicht aufhören dass es eine realistische Chance gibt. Solche Schwachstellen waren in realen Implementierungen vorhanden (und existieren in älteren Implementierungen).

#7
+2
John U
2018-11-01 19:48:36 UTC
view on stackexchange narkive permalink

Die Kurzversion ist nein, da Computer (sollten) den Unterschied zwischen Daten und Anweisungen kennen. Das Schlimmste, was Sie mit einem JPEG tun sollten, ist so etwas wie eine Zip-Bombe oder etwas, das einige JPEG-Dekomprimierungsroutinen zum Absturz bringt. Ein Programm zum Laden von &, das ein JPEG anzeigt, versucht nicht, Daten in der Datei auszuführen, sondern nur zu lesen und zu verarbeiten. Wenn es auf unerwartet nicht JPEG-Daten trifft, wird es entweder gestoppt oder stürzt ab oder zeigt nur ein an wirklich durcheinander gebrachtes Bild.

JEDOCH (manchmal sehe ich Sie an, Microsoft) versuchen Leute, hilfreiche Software zu schreiben, die anfällig sein kann, indem sie (zum Beispiel) versuchen, &-Anzeige-E-Mail-Anhänge automatisch zu laden Erstellen Sie Dokumentformate, die Skripte / Makros usw. enthalten können. Hier kann eine schädliche Datei Schaden anrichten.

Das klassische (und hoffentlich nicht mehr existierende / geschützte) Beispiel sind E-Mail-Anhänge So etwas wie .jpg.exe , wobei die Datei wirklich eine ausführbare Datei ist und Windows sie als solche behandelt, aber weil Windows die Erweiterung (das Ausblenden des letzten .exe-Teils) verbirgt Siehe file.jpg und klicken Sie darauf, wodurch das Betriebssystem es ausführt.

Es ist der Unterschied zwischen dem Lesen eines Buches und dem Handeln von o ut den Inhalt des Buches - wenn das Buch "Geh und schlag jemanden" sagt, wirst du es nicht tun, weil die Wörter (Daten) im Buch dein Gehirn nicht kontrollieren, obwohl dein Gehirn diese Daten verarbeitet.



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...