Frage:
Wurde mathematisch nachgewiesen, dass Antivirus nicht alle Viren erkennen kann?
Cate
2019-01-23 07:51:10 UTC
view on stackexchange narkive permalink

Auf welche Analyse bezog sich Bruce Schneier, als er schrieb:

Viren haben keine „Heilung“. Es ist mathematisch erwiesen, dass es immer möglich ist, einen Virus zu schreiben, den jedes vorhandene Antivirenprogramm nicht stoppen kann.

Aus dem Buch Secrets & Lies von Bruce Schneier , Seite 154.

Ich denke, es ist bereits unmöglich, eine vollständige und formale Definition dessen zu erstellen, was ein Computervirus überhaupt ist, d. H. Zu beschreiben, was genau die "Bösartigkeit" ist.Eine solche Definition ist jedoch erforderlich, um überhaupt über ein entscheidbares oder ein unentscheidbares Problem zu streiten.Aber selbst wenn Sie eine nützliche, wenn auch nicht perfekte Definition finden, wird sie wahrscheinlich aufgrund des [Halteproblems] (https://en.wikipedia.org/wiki/Halting_problem) unentscheidbar sein.
Die Post ist gesperrt, weil sie eine Menge Spekulationen und Meinungen hervorruft.Die Frage bezieht sich auf die Quelle eines Papiers, auf das in einem anderen Artikel verwiesen wird.
Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (https://chat.stackexchange.com/rooms/88818/discussion-on-question-by-cate-has-it-been-mathematically-proven-that-antivirus).
Diese Frage erinnert mich an einen Dialog von Douglas R. Hoffstadter, in dem Gödels Unvollständigkeitssätze erklärt werden: https://genius.com/Douglas-hofstadter-contracrostipunctus-annotated
Ein Beispiel dafür, dass ein "Virus" nicht erkannt werden kann oder was eine Funktion in JavaScript zurückgibt **, es sei denn, die Funktion heißt ** [Wie überprüfe ich, ob eine JavaScript-Funktion ein Versprechen zurückgibt?] (Https://stackoverflow.com)/ q / 43416214 /);[Kann ein regulärer Ausdruck erstellt werden, der den Rückgabetyp einer Funktion bestimmt?] (Https://stackoverflow.com/q/43417236/);https://astexplorer.net/#/gist/7b371f354537e9d3415bc8ed9fad9c94/9cb99f18e70987ff09d1195b7c3189be87d67105
Das Halteproblem sagt ja?Wenn Sie nicht feststellen können, ob ein Programm angehalten wird, können Sie anscheinend auch nicht feststellen, ob ein Programm etwas Bösartiges tut / ein Virus ist.
Ihr Titel stellt eine andere Frage als im Zitat angegeben.Das Zitat behauptet, dass nicht alle Viren gestoppt werden können.Dies unterscheidet sich offensichtlich von der Frage, ob alle wie in Ihrem Titel erkannt werden können.(Dies ist der Fall, da es möglich ist, einen Virus zu stoppen, ohne ihn zu erkennen.)
Betrachten Sie die Überwachung der Anwendung als Antivirenprogramm?Es ist immer möglich, einen Monitor zu erstellen, der Versuche erkennt, aus dem zugewiesenen Verzeichnis (z. B. / usr / local / virus) zu schreiben, zu löschen und sogar auszulesen, oder dieses Verzeichnis über eine Einschränkung hinaus zu vergrößern.Dies würde für die meisten praktischen Zwecke große Klassen von Viren eliminieren.
Einfaches Gegenbeispiel: Ein Programm, das Katzenvideos anzeigt und sich an alle Ihre Freunde sendet.Einige sehen es möglicherweise als Virus, andere als großartige App mit coolen Funktionen.Diese einzelne Instanz ist also bereits unentscheidbar.
Neunzehn antworten:
Joseph Sible-Reinstate Monica
2019-01-23 09:10:11 UTC
view on stackexchange narkive permalink

Unter einer möglichen Interpretation davon ist es ein Ergebnis des Satzes von Rice. Ein Programm ist böswillig, wenn es eine böswillige Aktion ausführt, die es zu einer semantischen Eigenschaft macht. Einige Programme sind bösartig und andere nicht, was es zu einer nicht trivialen Eigenschaft macht. Nach dem Satz von Rice ist es daher im allgemeinen Fall unentscheidbar, ob ein Programm bösartig ist.

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (https://chat.stackexchange.com/rooms/88726/discussion-on-answer-by-joseph-sible-has-it-been-mathematically-proven-that-anti).
Ganz zu schweigen davon, dass "bösartig" ein fast ausschließlich subjektiver Begriff ist.Ich habe gesehen, dass Demontageprogramme als Malware gekennzeichnet wurden, weil der AV-Autor Reverse Engineering anscheinend als "böswillig" ansah (obwohl ich mir keine Situation vorstellen kann, in der jemand, der diesen Disassembler nicht auf seinem Computer haben wollte, enden würdedort oben).
@DoktorJ: Der Punkt ist, dass es selbst dann unmöglich ist, alle / nur bösartige zu kennzeichnen, wenn Sie eine starre nicht-syntaktische Definition für "bösartig" finden (unabhängig davon, ob diese Definition einige Viren übersieht oder einige Nicht-Viren enthält)Programme.
Das OP fragte nach "Viren", nicht nach schädlicher Software.Viren sind nicht unbedingt bösartig.Die einzige bestimmende Eigenschaft ist, dass sie sich selbst repliziert.(Jetzt ist es wahrscheinlich die OP _meant_ Malware (Virus oder nicht)).
@Stéphane Chazelas Selbstreplikation ist ebenfalls eine nicht triviale semantische Eigenschaft, daher ist sie unentscheidbar.
@BlueRaja-DannyPflughoeft: ist es wichtig, dass dies nur insoweit zutrifft, als es unmöglich ist, dies mit einer Kündigungsgarantie im Voraus zu sagen.Aufgrund einer strengen Definition der Aktionen, die das Programm nicht ausführen darf, ist es durchaus möglich, dies während der Ausführung des Programms zu tun - dies ist das Prinzip des Sandboxing.Die meisten Benutzer würden sich mit einem Programm zufrieden geben, das Malware stoppt, bevor sie etwas Schlechtes bewirkt, unabhängig davon, ob es auch die Möglichkeit hat, zuerst einige tanzende Affen zu zeigen.Das Problem ist, dass sich diese "strengen Definitionen" unweigerlich als unvollständig herausstellen werden.
Ich denke, der Satz von Rice gilt nur, wenn Sie * im Voraus * entscheiden müssen, ob ein Programm bösartig ist und wenn Sie keine falsch positiven Ergebnisse zulassen.Wenn der Virenscanner z.B.API-Aufrufe abfangen, das Programm ändern (z. B. um Laufzeitprüfungen einzufügen) und gelegentlich ein "sicheres" Programm ablehnen, sollte es möglich sein, die Sicherheit zu beweisen.Das ist im Grunde, wie z.B.Eine Java-VM kann Sicherheitsgarantien bieten, nicht wahr?
@JeroenMostert: Nein, es hat nichts mit statischer oder Laufzeitanalyse zu tun.Der Unterschied besteht darin, ob die Definition semantisch oder syntaktisch ist."Eine Liste der Aktionen, die das Programm ausführen darf" ist eine syntaktische Definition.Aus diesem Grund ist das Schreiben einer Sandbox so viel einfacher als das Schreiben eines Antivirenprogramms.
@JeroenMostert: Sandboxing löst das Problem nicht.Woher wissen Sie, ob die neueste Version Ihres Browsers, die Sie installiert haben, eine versteckte Malware enthält, die Ihre Tastatureingaben auf Bank-Websites erfasst?Verwenden Sie für jede sensible Website eine andere Sandbox?Woher wissen Sie, dass Ihre neueste Sandbox-Software selbst keine Malware ist?Woher wissen Sie, dass Ihr Betriebssystem ...
@Joseph: Ich stimme Ihrer Antwort zu, aber ein mögliches Problem ist, dass echte Computer nicht vollständig sind, und daher ist es theoretisch möglich (wenn auch praktisch unmöglich) zu bestimmen, ob ein Programm Ihren spezifischen Computer in einen unerwünschten Zustand versetzen würde.Natürlich können Sie dies nicht in Ihrem Computer selbst tun, aber theoretisch können Sie einen anderen Computer mit mehr Speicher für die Analyse verwenden.Natürlich ist die benötigte Zeit proportional zur Anzahl der möglichen Zustände, in denen sich Ihr Computer befinden kann ...
@user21820: Ich habe nie gesagt, dass Sandboxing eine perfekte Lösung ist oder sein könnte (es sollte ziemlich offensichtlich sein, dass * no * -Lösung aus einfacher praktischer Sicht ein absoluter Schutz gegen Malware sein kann, geschweige denn theoretisch).Die Frage ist, ob der Satz von Rice das Richtige ist, um hier als mathematischen Beweis dafür aufzurufen, dass solche Malware nicht erkannt werden kann.(Oder, um noch eine Stufe höher zu gehen, wenn Schneider sich überhaupt darauf bezog, was anscheinend nicht der Fall ist - trotz Unterbewertung [diese Antwort] (https://security.stackexchange.com/a/202003)/ 147318) scheint die richtige zu sein.)
@user21820, das nicht einmal vollständig ist, weil zwei Programme nur dort unterschiedlich sein können, wo Ihre Daten tatsächlich gesendet werden.Eine Banking-App und ein Passwort-Sniffer lesen Ihr Passwort und senden es an einen Server - Ihr Computer macht genau das Gleiche, aber der Empfänger ist anders -, sodass ein lokaler Scan niemals entscheiden kann, ob der Empfänger jemand ist, den Sie tatsächlich beabsichtigenhat Ihre Daten an gesendet, daher sollte das gesamte Internet mit allen erreichbaren Maschinen zusammen mindestens Ihre Zustandsmaschine für die Überprüfung aller Zustände sein - viel Glück ...
@Falco: Ja natürlich.Es gibt viele solche Details, aber das Kommentarfeld war zu flach, um es aufzunehmen.
walen
2019-01-23 20:21:11 UTC
view on stackexchange narkive permalink

Tatsächlich kann das Gegenteil leicht bewiesen werden : Da alle Computerviren auf die eine oder andere Weise ausführbarer Code sind, müssen Sie nur ein Antivirenprogramm schreiben, das JEDE ausführbare Datei meldet Code als viral. Daraus folgt logischerweise, dass ein solches Programm ALLE möglichen Viren erkennt. :

  • Der gesamte Code wird von Ihrem Antivirus erkannt (C → D).
  • Alle Viren sind Code (V → C)
  • Alle Viren werden von Ihrem Antivirenprogramm erkannt (V → D)

Sicher, es könnte ein Argument dafür vorgebracht werden, dass diese Antivirensoftware zu viele Viren ausschließt "Fehlalarm". Aber nach welchen Kriterien kann entschieden werden, ob ein Positiv falsch oder wahr ist? Ah! Es stellt sich heraus, dass die Unterscheidung zwischen gutartigem und bösartigem Code, zwischen einer ehrlichen "Remote PC Control" -Suite und einem Trojaner wie Netbus völlig willkürlich ist und die ganze Frage daher sinnlos ist.

Süß.Ich meine, völlig irrelevant, aber auch süß und klug.
Man kann etwas nützlicher verlangen, dass Programme aus bestimmten Aktionen bestehen, die nicht so zusammengesetzt werden können, dass sie ein "Virus" -Verhalten hervorrufen, und dann Programme ablehnen, die nicht nur aus solchen Aktionen bestehen.Dieser Ansatz ist für viele Zwecke praktisch.Das größte Problem besteht darin, dass der Aufgabenbereich, der nur mit Aktionen ausgeführt werden kann, die kein Virenverhalten hervorrufen können, etwas unter dem Aufgabenbereich liegt, den Computer ausführen sollen.
@supercat, Das Problem mit Ihrer Version ist, dass Sie eine Definition des "Virenverhaltens" erstellen müssen, die programmgesteuert angewendet werden kann.Beispielsweise kann ein Javascript Bitcoin Miner beim Besuch der New York Times-Website virenähnlich sein, beim Besuch von Joes Discount Pirate Software jedoch das gewünschte Verhalten.Das Verschlüsseln des Inhalts Ihrer Festplatte kann ein gutes Verhalten sein, wenn es von Ihrer FDE-Software ausgeführt wird, und virenähnlich, wenn es von Ransomware ausgeführt wird.
Dieses Antivirenprogramm erkennt * sich * als Virus und fährt sich selbst herunter, sodass es nicht mehr in der Lage ist, etwas anderes zu erkennen.
@Mark: Ich würde einen Virus als ein Programm definieren, das sich selbst installiert, um automatisch ohne die Zustimmung des Computerbesitzers oder -betreibers ausgeführt zu werden.Wenn der Satz zulässiger Aktionen keine Möglichkeit zur Installation eines Programms enthält, das automatisch ausgeführt wird, kann aus den Aktionen in diesem Satz kein Virus erstellt werden.
@supercat Viele Viren werden mit Zustimmung des Betreibers installiert, tun jedoch Dinge, denen der Betreiber nicht zugestimmt hat.Wenn Sie jedoch das automatische Ausführen verhindern, wird es durch einen Neustart beendet, nur nicht die Nebenwirkungen.
@Poik: Nicht alle Schadprogramme, die sich selbst verbreiten, sind Viren.Damit ein Code ein Virus ist, muss er unter anderem ohne Zustimmung des Bedieners in der Lage sein, sich zu einem späteren Zeitpunkt ausführen zu lassen, wenn kein Teil davon ausgeführt wird.Wenn Sie verhindern, dass Anwendungen andere Programme oder die Startsequenz ändern, werden Viren zu 100% verhindert, obwohl andere Formen von Malware wie Würmer weiterhin möglich sind.
außer, wie erkennt man, ob etwas ausführbarer Code ist?B. der JPG-Virus, der einen Fehler im JPG-Rendering von Microsoft ausgenutzt hat (wodurch Code ausgeführt wird, wenn Microsoft Internet Explorer eine Webseite besucht).Der einzige Weg wäre also, Ihren Pseudocode zu erweitern, um zu sagen, dass alle Bits sind, da alle Bits ausführbarer Code sein könnten.Wenn wir so lächerlich werden, könnte ich sagen, dass "Bytes" (gemeldet von "dir") tatsächlich eine Übersetzung von "Virus gefunden" ist, also ist "dir" tatsächlich eine Antivirensoftware, die das tut.Äußerst lächerlich.(Um nicht zu sagen, dass ich die Lächerlichkeit nicht schätze. Bravo.)
Antivirus, das den gesamten ausführbaren Code als bösartig erkennt, erkennt auch das Betriebssystem, auf dem es ausgeführt wird, als bösartig.Wenn dieses AV-Programm tatsächlich etwas dagegen unternehmen würde, würde es das Betriebssystem jedes Mal ziemlich schnell zum Absturz bringen.Wäre kein großartiges AV-Programm, würde aber zu einem bösen Virus führen.
Klingt nach einem Argument für * White-Listing * wollte nur Programme, wie in einem Repository von nur getesteter Software, die installiert werden soll (vielleicht sogar FOSS, ähnlich wie bei den meisten Linux-Repositorys), um zumindest zu vermeiden, dass böswillige Dinge absichtlich installiert werden
Wenn Sie eine Frage zu etwas stellen, das auch nur aus der Ferne praktisch ist, können Sie davon ausgehen, dass die triviale Lösung standardmäßig ausgeschlossen ist.
Ich würde die erste Prämisse in Frage stellen: * Der gesamte Code wird von Ihrem Antivirenprogramm erkannt. * Dies ist der Teil davon, der praktisch unmöglich ist.
@Xen2050 "Klingt nach einem Argument, nur gesuchte Programme auf die weiße Liste zu setzen ..." Ja, das tut es.Leider gibt es zum Beispiel Millionen von Apps für Smartphones.Ich möchte nicht derjenige sein, der sie alle testen muss.
Kann man ein Skript als "Code" betrachten?Wenn ja, denke ich, wird die erste Prämisse etwas weniger trivial
Was bedeutet Virisch?Ich kann keine Definition dafür finden.
@TemporalWolf Nein, es ist quälend trivial: Die erste Anweisung des Maschinencodes lautet halt.Wenn Sie zu irgendeinem Zeitpunkt feststellen, dass Ihr Computer angehalten wurde, hat er Code erkannt.
-1, weil diese Antwort in keiner Weise hilfreich ist.
@TOOGAM: genau.Wenn es sich um x86 handelt, werden die meisten Byte-Sequenzen als gültige x86-Anweisungen dekodiert.Normalerweise führt ASCII-Text zu einer Folge von Anweisungen, die keinen Sinn ergibt oder privilegierte Anweisungen wie "6c ins" und "6e outs" enthält, aber es kommt nicht selten vor, dass eine Folge keine illegalen Anweisungen enthält.(Besonders im 32-Bit-Modus.) Ich habe den Text dieser Antwort in foo.s in `.ascii" ... "` eingefügt (Zeilenumbrüche durch `\ n` ersetzen und die Anführungszeichen umgehen) und ihn mit` gcc zusammengesetzt-m32 -c foo.s`.Viele kurze Anweisungen für bedingte Verzweigungen, aber keine illegalen Anweisungen!
Oh, ich kann es auf eine Weise auf Godbolt setzen, die eine Demontage * mit * hexdump zeigt: https://godbolt.org/z/IIXBUc (im Gegensatz zu diesem ersten Versuch von lang = asm, der dies nicht tut: https: // godbolt.org / z / -2ATIj).Einige der unterhaltsamen längeren Anweisungen umfassen "imul esi", "DWORD PTR [edx + esi * 2 + 0x61], 0x202c7972".
@Fax, bei dem davon ausgegangen wird, dass Sie das Programm zunächst scannen können.Möglicherweise wird es über ein angeschlossenes Peripheriegerät ausgeführt, als Bootloader ausgeführt, bei Bedarf entschlüsselt oder die Benutzerinteraktion nachgebildet, indem es vorgibt, eine Tastatur zu sein.Alle vier erfordern unterschiedliche, nicht triviale Ansätze zur Durchsetzung und sind alles Dinge, von denen derzeit bekannt ist, dass sie in freier Wildbahn ausgenutzt werden.Ihr System erfordert außerdem die absolute, nicht triviale Einschränkung, dass keine nicht ausführbaren Dateien die binäre Darstellung eines Maschinenstoppbefehls enthalten. Hier sind einige Unicode-Zeichen, die 0xF4, den x86-Code, enthalten: ôǴ˴ϴӴ ״
@TemporalWolf Nein, das wird nicht vorausgesetzt.Aus Sicht eines Programms ist "jeder Code ist vorhanden" eine logische Tautologie.Niemand hat gesagt, dass Ihr Computer kein ausgezeichneter Briefbeschwerer sein kann.
@JackAidley Da ist nichts "Kluges" drin.Es ist wie die Schlussfolgerung, dass wir keine Probleme mehr im Leben haben werden, wenn wir uns umbringen.
Diese Antwort würde perfekt in einem Setup funktionieren, in dem der AV aufgerufen wird, um ein bisschen Code zu beurteilen, und eine Antwort geben muss.Leider hinterlässt dies eine Lücke in Ihrem Beweis, da Sie beweisen müssten, dass der AV aufgefordert wird, jedes Codebit zu beurteilen.(Und die kleinere Lücke, die es beantworten muss).
Ich habe ein Heilmittel für jede Krankheit, die dem Menschen bekannt ist!
Ich denke, dies ist eine falsche Verwendung von "Erkennen".Es ist analog zu sagen, dass wenn eine Jury einen Mann aus den falschen Gründen für schuldig erklärt, selbst wenn er wirklich schuldig war, sie * wussten *, dass er schuldig war.* Wissen * bedeutet, dass etwas mehr als zufällig richtig ist, und "erkennen" wird hier sehr ähnlich verwendet;es bedeutet etwas mehr als nur zu entscheiden.Dies sollte bedeuten, dass eine Analyse durchgeführt wurde und eine Rechtfertigung für die Entscheidung vorliegt.
@Steve Sieht aus wie ein falscher Versuch, "Virus" in ein Adjektiv zu verwandeln.Wenn ja, sollte es "viral" sein.
@jpmc26 Eher wie ein nicht nativer Fehler.Ich weiß, dass es auf Englisch "viral" ist, aber auf Spanisch ist es "vírico, vírica" und ich habe sie versehentlich gemischt.
Harry Johnston
2019-01-23 12:20:05 UTC
view on stackexchange narkive permalink

Laut Wikipedia:

Im Jahr 1987 veröffentlichte Fred Cohen eine Demonstration, dass es keinen Algorithmus gibt, der alle möglichen Viren perfekt erkennen kann.

Es verweist auch auf dieses Papier. Das könnte die Analyse sein, auf die sich Herr Schneier bezog.

Schneier gibt hier an, dass dies das Ergebnis ist, auf das er sich bezog, als er einige Zeit später in einem anderen Kontext eine sehr ähnliche Aussage machte: https://www.schneier.com/blog/archives/2009/07/making_an_opera.html
@Stephan: Für jede mögliche Binärdatei gibt es eine hypothetische Plattform, für die sie virulent ist, und eine hypothetische Plattform, für die sie nicht virulent ist.Dieser Satz ist stärker als der Satz von Rice, da er auch für Hypercomputer gilt.
so wurde bewiesen, dass 1987 das perfekte Antivirus nicht existierte?ordentlich.Aber hat er auch bewiesen, dass das perfekte Antivirus nicht erstellt werden konnte oder nur, dass es ab 1987 nicht mehr existierte?
@user1067003, Ich bin kein Informatiker, aber ich bin mir ziemlich sicher, dass der Ausdruck "es gibt keinen Algorithmus" bedeutet, dass es keinen möglichen Algorithmus gibt, nicht nur, dass es keinen * bekannten * Algorithmus gibt.Sonst wäre es kein sehr interessantes Ergebnis.(Der geschriebene Beweis gilt wahrscheinlich nur für klassische Computer. Er muss möglicherweise überarbeitet werden, um Quantencomputer oder andere abstrusere Architekturen abzudecken.)
Diese Antwort stützt sich stark auf einen externen Link, um die Frage zu beantworten.Können Sie vielleicht die Argumente aus diesem Papier zusammenfassen?
@HarryJohnston: Quantum-Computer entsprechen in Bezug auf die Berechenbarkeit Turing-Maschinen. Nein, sie müssen nicht erneut erstellt werden.Tatsächlich glaubt so ziemlich jeder Informatiker, dass jeder physisch realisierbare Computer bestenfalls [einer Turing-Maschine entspricht] (https://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis)
@BlueRaja-DannyPflughoeft Die kirchliche Turing-These besagt, dass der menschliche Geist einer Turing-Maschine entspricht.Das hat keine Grundlage dafür, ob ein Hypercomputer konstruiert werden kann oder nicht.Alles was es bedeutet ist, dass wir die Berechnungen nicht von Hand durchführen können.Wir müssten uns darauf verlassen, dass die Maschine korrekt ist.Wie stützt dieser Artikel diese Behauptung überhaupt?
Michael Kay
2019-01-24 00:24:46 UTC
view on stackexchange narkive permalink

Die Aussage kann nur dann mathematisch bewiesen werden, wenn sie als mathematischer Satz umformuliert wurde.

Zumindest erfordert dies eine mathematisch fundierte Definition dessen, was ein "Virus" ist: was herausfordernd ist; und Sie könnten mit einer Abstraktion enden, die in der Praxis nicht nützlich ist, weil sie einige Verhaltensweisen enthält, die von Menschen als völlig harmlos und nützlich angesehen werden, und / oder einige Verhaltensweisen ausschließt, die von Menschen als unsozial angesehen werden.

Das Schwierige Hier geht es darum, dass ein Virus ein Programm ist, das seine Umgebung auf irgendeine Weise verändert, und jeder Versuch, die Umgebung genau zu definieren, für den praktischen Gebrauch zu einschränkend sein wird.

Also würde ich nein sagen: der Vorschlag kann nicht mathematisch bewiesen werden, und das liegt daran, dass es nicht mathematisch formuliert werden kann.

Ein Gegenbeispiel: Ich werde die ursprüngliche Frage spezialisieren (ihre Allgemeinheit verlieren), indem ich * einen Virus * als jedes "Bash-Skript" definiere, das "rm -rf / *" aufruft, wenn es ohne Argumente ausgeführt wird.und ich werde * ein Antivirus * als eine Version des Bash-Interpreters definieren, die die Ausführung dieses Befehls `rm -rf / *` verweigert.Ich hoffe, Sie stimmen zu, dass wir den ganzen Weg nach unten gehen können, um genau zu definieren, was ein "Bash-Interpreter", "Execute" usw. mathematisch bedeutet.Habe ich gerade eine schwächere Version der ursprünglichen Frage formuliert?Widerlegt dies Ihre Behauptung, dass * es nicht mathematisch formuliert werden kann *?Ja und ja.
@ulidtko Nein. Sie können einen Virus nicht einfach willkürlich als etwas definieren, das Sie wollen.Andernfalls könnte ich einen Virus als "Software definieren, deren Name" Antivirus "enthält", was der Diskussion nicht helfen würde, da dies eine Diskussion über Philosophie, nicht über Sicherheit oder Mathematik ist.In der Tat ist Ihre Definition von Virus so, als würde man sagen "Ich definiere die Menge der geraden Zahlen als {2}".Machen Sie ein solches System, wenn Sie wollen, aber Sie haben damit nichts widerlegt.Wie Michael vorgeschlagen hat, kann "Virus" in keiner Weise mathematisch definiert werden, die für diese Konversation nützlich ist.
Betreff: "Zumindest erfordert dies eine mathematisch fundierte Definition dessen, was ein 'Virus' ist": Nicht unbedingt.Wenn es Merkmale gibt, die für * jede * Definition von "Virus" gelten würden, können Sie möglicherweise einige dieser Merkmale mathematisch formalisieren, ohne eine bestimmte vollständige Definition erstellen zu müssen.Diese teilweise Charakterisierung könnte ausreichen, um Sie [den Satz von Rice] anwenden zu lassen (https://en.wikipedia.org/wiki/Rice%27s_theorem).
@ulidtko Auf der gleichen Basis könnte ich einen Virus als jedes Programm definieren, das eine E-Mail sendet.Ich bin sicher, ich könnte einige Überlegungen zu dieser Klasse von Programmen anstellen, aber es würde mir nichts über die Klasse von Programmen sagen, die gewöhnliche Menschen in der realen Welt als Viren klassifizieren.
Der Satz von @ruakh Rice gilt nur, wenn Sie Ihr Antivirenprogramm auf die statische Analyse von (Quell- oder Objekt-) Code beschränken.Die Frage betrifft das "Erkennen von Viren", nicht nur das Erkennen durch virale Analyse.Was passiert, wenn Sie sie erkennen, indem Sie ihr sich selbst replizierendes Verhalten beobachten?
@MichaelKay: Ich bin mir bewusst;Ich habe nur den Satz von Rice als Beispiel dafür erwähnt, warum Ihre Aussage falsch war.Entschuldigung, wenn das unklar war.
Auf einem 64-Bit-System mit einem vollen 64-Bit-Speicherplatz und ohne erweiterbaren Speicher beträgt die Speichergröße $ 2 ^ {64} $ Bytes.Wenn wir dann alle möglichen Permutationen dieses Speicherbereichs berücksichtigen, befinden sich $ 8 ^ {2 ^ {64}} $ Programme in diesem Speicherbereich.Weniger, wenn wir bedenken, dass die kompilierte Binärdatei mit dem Speicher koexistiert.Da die Anzahl der Programme begrenzt ist, können sie in eine Reihe von Schadprogrammen und nicht-Schadprogrammen unterteilt werden.Das wäre die Definition von schädlichen 64-Bit-Programmen.Ihre Behauptung ist, dass wir keine Definition haben, die auf 128 Bit usw. erweitert werden würde.
Ihre Behauptung könnte auch sein, dass eine bestimmte Kombination von Bits für einen Benutzer bösartig und für einen anderen Benutzer nicht bösartig sein könnte.In dieser Situation kann das Problem behoben werden, indem einem Benutzer gestattet wird, etwas, das als bösartig gekennzeichnet wurde, auf die Whitelist zu setzen.Es ist nicht ideal, aber alles, was es wirklich bedeutet, ist, dass Menschen unterschiedliche Definitionen von bösartig oder in einer realistischeren Bedeutung haben - dass einige Benutzer bösartigen Code auf ihrem eigenen Computer ausführen möchten.
Nat
2019-01-25 11:00:19 UTC
view on stackexchange narkive permalink

tl; dr - Die Antwort hängt genau davon ab, welche Anforderungen Sie an die Frage stellen.

  1. Wenn Sie nur Wenn Sie alle Viren ohne weitere Einschränkungen erkennen möchten, markieren Sie einfach alles und jeden als Virus, und schon sind Sie fertig.

  2. Wenn Sie alle Programme ordnungsgemäß als a identifizieren möchten Virus oder nicht, dann ist es im ungebundenen Fall unmöglich, da sich das Klassifizierungsproblem auf das Problem des Anhaltens reduziert.

  3. Wenn Sie alle Programme ordnungsgemäß als Virus identifizieren möchten oder nicht, Wenn Sie eine endliche Maschine in Betracht ziehen, ist dies theoretisch möglich, in der Praxis jedoch im Allgemeinen nicht möglich.

  4. Wenn Sie zulassen, dass der Computer zufällige Fehler erzeugen kann, kann jedes Programm dies sein ein Virus.

  5. ol>

    Fall 1: Vollständige Virenerkennung

    Wenn Sie alle Programme als Viren kennzeichnen, werden sie alle abgefangen. ( Pok'e'mon! )

    Beginnen Sie mit diesem Fall, um darauf hinzuweisen, dass es nicht schwer ist, alle Viren zu erkennen. Das spezifische theoretische Problem besteht vielmehr darin, iff -Programme korrekt zu klassifizieren.

    Fall 2: In einem allgemeinen, unbegrenzten Szenario kann keine korrekte Klassifizierung vorgenommen werden.

    Betrachten Sie die Programm:

      doHaltingProblem (); // Keine Virenoperation selbstinstallEveryVirusEver (); // Auf jeden Fall eine Virenoperation, aber wird es passieren?  

    In diesem Fall ist das Programm nur dann ein Virus, wenn das Stoppproblem angehalten wird und zulässig ist installEveryVirusEver () soll auftreten. Die Viruserkennung reduziert sich also auf das Problem des Anhaltens im allgemeinen, ungebundenen Fall.

    Fall 3: Möglich durch Brute-Force-Suche in begrenzten Szenarien

    Wenn Programme als Viren klassifiziert werden sollen -oder-nicht auf einer endlichen Maschine arbeiten sollen, dann können Sie einfach die Maschine simulieren, die aus jedem möglichen Startzustand läuft. Endliche Maschinen werden irgendwann zu einem früheren Zustand zurückkehren, daher ist es notwendigerweise eine endliche (wenn auch langwierige) Analyse.

    Fall 4: Auf Computern, auf denen Fehler auftreten können, können spontan Viren auftreten.

    Angenommen, auf einem Computer kann ein Programm ausgeführt werden, das als Virus betrachtet wird, und es besteht eine Wahrscheinlichkeit ungleich Null, dass sich eine zufällige Mutation verschiebt Wenn es sich in diesem Zustand befindet, sollte es schließlich zu einem Viruszustand gelangen.

    Das ist eine Art langweiliger Punkt, aber der Vollständigkeit halber.


    Diskussion über die Zitat in der Frage

    Viren haben keine "Heilung". Es ist mathematisch erwiesen, dass es immer möglich ist, einen Virus zu schreiben, den jedes vorhandene Antivirenprogramm nicht stoppen kann.

    - " Secrets & Lies " , Bruce Schneier, Seite 154

    Wie in Fall (1) oben ausgeführt, ist es möglich, alle Viren zu kennzeichnen, indem einfach alles als Virus gekennzeichnet wird. das ist einfach. Was unmöglich ist, ist in einem ungebundenen Fall festzustellen, ob jedes mögliche Programm ein Virus ist oder nicht.

    Außerdem ist es schwierig festzustellen, ob bestimmte Programme in gebundenen Fällen Viren sind. Betrachten Sie beispielsweise das Programm:

      var toExecute = decryptByBruteForce ([Chiffretext]); // Entschlüssele den nächsten Teil des Programms mit brute-forcerun (toExecute); // Den jetzt entschlüsselten Teil des Programms ausführen  

    Wie in Fall (3) erläutert, kann dieses Programm als Virus klassifiziert werden, wenn es auf einem endlichen Computer ausgeführt wird Da dies das brutale Erzwingen einer verschlüsselten Nachricht erfordern würde, ist dies in praktischen Szenarien wahrscheinlich nicht möglich.

    In realen Anwendungen reduziert sich dies auf ein Problem der Heuristik: Antivirenprogramme raten, was ein Virus ist oder nicht. Wenn Sie eine zuverlässigere Sicherheit wünschen, kann ein Antivirenprogramm alles markieren, was sich nicht als sicher erweisen kann, und das Problem umgehen, dass jedes mögliche Programm klassifiziert werden muss.

    Leider gibt die Verwendung von Heuristiken sachkundigen Angreifern Sicherheitslücken zum Zielen. Ohne die Quelle des Zitats zu lesen, vermute ich, dass dieses Problem das ist, worauf sie sich beziehen wollten.

Der Fall (4) ist nicht nur langweilig, sondern weist auf ein wahrscheinlicheres und problematisches Szenario hin.Stellen Sie sich einen Code vor, der einige Aufrufe enthält, wenn (canHappen) installEveryVirusEver ();wo kann nicht passieren kann nicht passieren, wenn die Maschine in Ordnung funktioniert, aber wahrscheinlich, wenn die Maschine übertaktet ist.Wie klassifiziere ich das richtig?
@HansOlsson Ja, es würde eine Verallgemeinerung der Ontologie erfordern, um Probleme zu erfassen, die nicht gut in das deterministische Modell passen.Vermutlich müssten wir das Ensemble möglicher Ergebnisse berücksichtigen und sie dann danach klassifizieren, wie sicher wir sie halten würden, oder einfach zugeben, dass Programme im Allgemeinen böswillig handeln können, selbst wenn sie nicht dafür ausgelegt sind.Ich hatte gehofft, Themen wie [Reihenhammer] (https://en.wikipedia.org/wiki/Row_hammer) zu nicken, bei denen die Annahme eines fehlerfreien Betriebs die Analyse wirklich durcheinander bringen kann.
"Brute Forcing einer verschlüsselten Nachricht" Warum nicht das Programm in einer Sandbox ausführen und herausfinden, wie es die Nachricht selbst entschlüsselt?Mit IIRC funktionieren einige Antivirenprogramme bereits.
@micsthepick Das Ausführen eines Programms in einer Sandbox ist eine besser skalierbare Lösung, die in nicht trivialen Fällen im Allgemeinen überlegen ist. Sie haben also Recht, dass dies in der Praxis eher bevorzugt wird.Die Frage betrifft nur Antiviren im Sinne einer präventiven Analyse.Sandboxing ist ein anderes Thema.
Es ist erwähnenswert, dass das Beispiel für das Anhalten des Problems umgangen werden kann, indem einfach jedes Programm markiert wird, das das Potenzial hat, einen Virus zu installieren.
James_pic
2019-01-23 23:03:48 UTC
view on stackexchange narkive permalink

Es hängt von Ihrer Definition von "Stopp" ab.

Wenn Sie Stopp als "im Voraus erkennen, dass dieser Code etwas Bösartiges tun und verhindern kann, dass er ausgeführt wird" definieren, dann wie andere Dies ist nach dem Satz von Rice unmöglich.

Wenn Sie stop als "Erkennen, wenn ein laufendes Programm versucht, etwas Schlechtes zu tun, und dann stoppen" definieren, gilt der Satz von Rice nicht. Ihr Antivirenprogramm muss nicht entscheiden, ob das Programm etwas Bösartiges tun könnte, sondern nur, ob es jetzt etwas Bösartiges tut.

AFAIK, die zweite Version hat sich mathematisch nicht als unmöglich erwiesen. Und tatsächlich ist es für eine hinreichend spezifische Definition von "böswillig" sehr machbar - dies ist im Wesentlichen Sandboxing.

Es scheint jedoch wahrscheinlich, dass es keine gute Definition von "böswillig" gibt, die alle abdeckt die Formen der Bosheit, die ein Virus versuchen könnte. Was ist mit einem Virus, der Bitcoin abbaut? Oder das serviert Piratenfilme? Oder dass Spam-Foren in Ihrem Namen? All dies ist nicht von Code zu unterscheiden, der von Benutzern ausgeführt wird, die wirklich genau diese Dinge tun möchten. Daher vermute ich (obwohl ich keinen Versuch kenne, dies zu beweisen), dass die Erstellung von Antivirenprogrammen vollständig ist.

Das Problem der Definition von bösartig ist kaum ein Show-Stopper.Unterschiedliche Personen haben unterschiedliche Interessen, um eine für sie geeignete Definition zu erstellen, aber das ist in Ordnung.
Daher erstellt jemand auf einer Website einen Link, der Software auf Ihrem Computer installiert, um zu überwachen, welche Filme Sie gerade ansehen, und die Daten an MegaCorp weiterleitet.Ist das ein Virus?Variiert Ihre Antwort je nachdem, ob es sich bei "jemandem" um Microsoft handelt, im Vergleich zu einem Hacker im Teenageralter?Berücksichtigt Ihre mathematische Bewertung der Software die Vertrauenswürdigkeit des Urhebers?Kurz gesagt, kann dies tatsächlich als mathematisches Problem formuliert werden?
@MichaelKay: Ja.Nein, nur, ob die Aktion gegen Ihre Richtlinie verstößt.Ja.
Ich habe von NP komplett gehört, aber was ist AI komplett?
@Michael AI-Wettbewerb ist die (ich glaube etwas wolligere) Idee, dass "man dieses Problem nicht lösen kann, ohne auch eine künstliche allgemeine Intelligenz zu schaffen".Ich denke nicht, dass es so klar definiert ist wie NP, daher ist es wahrscheinlich nicht für mathematische Beweise zugänglich.
@R Die zunehmende Raffinesse von Malware und die zunehmende Scheiße kommerzieller Softwareanbieter machen diese Grauzone sehr groß.Die für mich sinnvollste Definition von Malware wäre Software, die etwas tut, was der Benutzer nicht wollte und von dem er nicht wusste, dass es passieren würde - was nicht nur von den Wünschen des Benutzers abhängt, sondern auch von seiner Fähigkeit zu verstehen, was passiert.Enthält das die beschissene Browser-Symbolleiste, die Oracle mit Java-Updates enthält?Oder der MITM-Proxy Lenovo, der in einigen ihrer Laptops enthalten ist?So ziemlich alles außer GNU HURD ist in der Grauzone.
Danke, das macht Sinn.Ich hatte eine weniger strenge Version davon gehört, wie folgt: Hier sind fünf (oder 10) Probleme, deren Lösung von hohem Wert wäre, aber es stellt sich heraus, dass nur eines von ihnen (Erstellen eines AGI / ASI) tatsächlich gelöst werden würdebieten die Mittel, um auch die anderen zu lösen (vorausgesetzt, es löscht uns nicht aus / macht uns zu seinen Haustieren / usw.)
Erinnert mich an die alte Frage "Was ist ein Unkraut?"mit der Antwort "alles, was Sie nicht in Ihrem Garten wachsen lassen möchten", bezüglich Ihres Kommentars zu @R
Michał Kuliński
2019-01-23 17:35:02 UTC
view on stackexchange narkive permalink

Ja, es wurde von Alonzo Church in den Jahren 1935 bis 1936 und kurz darauf von Alan Turing in den Jahren 1936 mathematisch bewiesen.

https://en.wikipedia.org/wiki/Entscheidungsproblem

Wenn die Aussage * irgendwie * auf das Problem des Anhaltens reduzierbar wäre, würde das interessante Bit zeigen, dass dies der Fall ist und nicht nur das Löschen von Namen.Oder, um es direkter auszudrücken: Nein, dies ist definitiv nicht das, was Church und Turing bewiesen haben (es ist nicht einmal annähernd das, was sie beweisen wollten).
Ja, @JeroenMostert, Sie haben Recht.Ich habe mich geirrt.Church und Turing haben bewiesen, dass es keinen Mechanismus gibt, der entscheidet, ob ein solches Programm, das alle Viren erkennt, überhaupt geschrieben werden kann.Ich habe die Konzepte verwirrt.Onkel Bob bloggte darüber: https://blog.cleancoder.com/uncle-bob/2018/06/21/IntegersAndEstimates.html
Muss diese Antwort gelöscht oder komplett neu geschrieben werden?
Martins Blog ist zwar amüsant, begeht jedoch einige der häufigsten Irrtümer, wenn es darum geht, das Problem des Anhaltens zu erklären.Zum Beispiel ist "die Spezifikation eines Programms eine große diophantinische Gleichung in einer Unmenge von Unbekannten" falsch, schlicht und einfach.Sicherlich ist das * eine * Art, ein Programm zu spezifizieren (wenn Sie blinzeln), aber Sie müssen * viel * vorsichtiger sein, um aussagekräftige Aussagen darüber zu machen, was Beweise sagen, ist und was nicht möglich ist.Erklärungen wie diese tendieren dazu, eher zu verschleiern als zu klären - die eigentliche Mathematik ist subtil, aber aus dem guten Grund, dass diese Dinge * subtil * sind.
Ich bin mir nicht sicher, ob diese Antwort falsch ist: Wenn "anhalten" bedeutet "einen Bericht erstellen, in dem alle Viren auf dem System aufgelistet sind, nicht mehr oder weniger", können wir nicht im Voraus beweisen, dass das Programm mit a angehalten wirdrichtige Antwort, es sei denn, wir führen sie aus, um es herauszufinden.Beachten Sie, dass sich das Dokument, auf das verwiesen wird, auch auf das Problem des Anhaltens bezieht: https://web.archive.org/web/20140525233117/http://grnlight.net/index.php/computer-articles/109-an-undetectable-computer-Virus
AiliirwykoCMT gelöscht.
@stevegt Beim Anhalten geht es nicht darum, ob es eine richtige Antwort gibt.Es geht darum, ob es überhaupt erst zum Stillstand kommen kann, was eine unbeantwortbare Zeit ist.Sie werden nie wissen, ob es angehalten wird, aber es ist hier nicht nützlich, da keine Verbindung zwischen einem Computer hergestellt wurde, der erkennt, ob ein Computer anhält, und dem Computer, der erkennt, ob ein Computer etwas Bösartiges tut.
Philipp
2019-01-25 14:58:42 UTC
view on stackexchange narkive permalink

Nein, das können Sie nicht, da der Unterschied zwischen Malware und einem nützlichen Programm völlig subjektiv ist. Jedes "böse" Verhalten kann beabsichtigtes Verhalten sein. Zum Beispiel laufen gerade die folgenden Programme auf meinem Computer:

  • Ein Programm, das alle meine Dateien verschlüsselt. Handelt es sich um eine Cryptolocker-Ransomware oder ein Tool zur vollständigen Festplattenverschlüsselung?
  • Ein Programm, mit dem der Fernzugriff meinen Computer steuern kann. Ist es ein Trojaner oder ein Team Viewer?
  • Ein Programm, das Netzwerkverbindungen zu allen Arten von Computern über das Internet herstellt und obskure Daten mit ihnen austauscht. Handelt es sich um ein Botnetz oder eine verteilte Computerplattform?
  • Ein Programm, das alle meine persönlichen Dateien an einen Remote-Server sendet. Handelt es sich um Spyware oder um Cloud Backup?
  • Ein Programm, das ausführbare Dateien aus dem Internet herunterlädt und ausführt. Ist es ein Malware-Dropper oder Steam?

Sie können den Unterschied nicht erkennen, da sie aus rein technischer Sicht genau das Gleiche tun. Der einzige Unterschied liegt in der Absicht. Ein Programm täuscht den Benutzer darüber, was es tut und handelt gegen die Interessen des Benutzers, das andere tut genau das, was der Benutzer möchte. Aber was der Benutzer wirklich von seiner Software will, kann eine Maschine nicht entscheiden ... zumindest nicht in der aktuellen Phase der KI-Technologie. Deshalb basieren alle Virenscanner hauptsächlich auf Signaturen.

kajacx
2019-01-24 18:43:56 UTC
view on stackexchange narkive permalink

Um mathematisch zu beweisen, dass es immer möglich ist, einen Virus zu schreiben, der alle vorhandenen Antivirenprogramme umgehen kann, müssen Sie zunächst mathematisch definieren, was ein Virus ist, und viel Glück damit.

Vielleicht ein "Programm, das unerwünschte Aktionen ausführt"? Nun, das ist einfach unmöglich. Stellen Sie sich ein Programm vor, das eine Verbindung zu Ihrem PC herstellt und die Fernbedienung ermöglicht. Das Antivirenprogramm kann erkennen, dass das Programm dies tut, aber wie kann es wissen, ob es gewünscht wird oder nicht?

Es kann sich um ein legitimes Fernsteuerungsprogramm wie TeamViewer handeln, oder es kann sich um ein einfaches Virus handeln Bildbetrachtungsprogramm, eigter Weg, Ihr Antivirenprogramm sieht ein Programm, das Bilder von Ihrem PC lesen und anzeigen und Remoteverbindungen öffnen kann, und es kann nicht feststellen, ob dies ein "gewünschtes" Verhalten ist oder nicht, da dies nicht möglich ist wissen, warum Sie dieses Programm installieren.

Matthew
2019-01-25 17:45:32 UTC
view on stackexchange narkive permalink

Wie von @walen hervorgehoben, ist es tatsächlich möglich, alle Viren zu erkennen, wenn Fehlalarme zulässig sind: Melden Sie einfach alles als Virus.

Nehmen wir an, dass es auch möglich ist, alle Viren zu erkennen wenn falsch-positive Ergebnisse nicht zulässig sind. Wir haben eine IsVirus -Funktion, die auf jedem Programm ausgeführt werden kann und zurückgibt, ob dieses Programm ein Virus ist oder nicht. Betrachten Sie nun dieses Programm, das wir P :

  nennen, wenn IsVirus (P): exitelse: DoVirusThings  

What ist der Wert von IsVirus (P) ? Wenn es true ist, wird P einfach beendet, ohne etwas zu tun, und wir haben daher ein falsch-positives Ergebnis. Wenn es sich jedoch um false handelt, führt P Viren aus und wir haben einen nicht erkannten Virus.

Dies beweist, dass es nicht möglich ist, alle Viren zu erkennen, wenn Fehlalarme sind nicht zulässig.

Downvoter bitte erklären Sie warum.Soweit ich das beurteilen kann, ist dieser Beweis gültig.
Ich habe nicht abgelehnt, obwohl dies ein bisschen anders aussieht, da es keinen Widerspruch zu geben scheint.Wenn "IsVirus (P)" wahr ist, ist Ihr Skript nicht viral."IsVirus (P)" behauptete jedoch, dass "P" viral sei und nicht Ihr Skript.
Realistisch gesehen würde es niemanden interessieren, ob "IsVirus" berichtet, dass "P" tatsächlich ein Virus ist, obwohl es tatsächlich nicht eins mit dieser Definition von "P" wäre.In der Tat ist es keineswegs unvernünftig, "P" als Virus zu bezeichnen, da es dazu dient, schlechte Dinge zu tun und mit uns klug zu werden, wenn wir versuchen, es zu identifizieren.Mit anderen Worten, das Aufrufen von "IsVirus" kann als Virenkennung für jedes Programm verwendet werden, das nicht unser eigenes Antivirenprogramm ist.(Es gibt Möglichkeiten, diese Argumentation zu "korrigieren", aber sie beinhaltet, dass unsere Definitionen viel präziser werden.)
@Nat `P` ist das Skript
@Matthew Hah, opps, hat diesen Teil verpasst!Das scheint dann ein Widerspruch zu sein, obwohl es ein selbstreferenzielles Problem zu sein scheint, wie "_Diese Aussage ist falsch._", und nicht die Klassifizierung von Viren.
Ein Antivirenprogramm kann alles, was "DoVirusThings" enthält, als Virus identifizieren, da es in Nicht-Virenprogrammen keine Verwendung hat und auf andere Weise aufgerufen werden kann.
Ich denke, Sie gehen davon aus, dass "Code ist ein Virus" vollständig mit "Code, der Viren bei der Ausführung ausführt" korreliert.Dies ist keine verrückte Annahme, aber es ist dennoch eine Annahme (und mit dieser Annahme denke ich, dass Ihr Beweis funktioniert).
Hm, Sie können nicht einfach "P" in eine Funktion einspeisen, wenn "P" das gesamte Programm sein soll.Lassen Sie stattdessen die "IsVirus" -Funktion eine ausführbare Datei sein, die nach Viren sucht, und geben Sie die aktuelle ausführbare Datei als Dateinamen ein.Jetzt ist es für das Programm viel einfacher, "sich selbst in das Antivirenprogramm einzuspeisen" und den Widerspruch zu erzeugen. Das Programm `P` * führt jedoch dann virale Aktionen aus, wenn eine beliebige ausführbare Datei` IsVirus` false zurückgibt, sodass das Markieren als Virus tatsächlich korrekt ist.
stevegt
2019-01-24 05:21:03 UTC
view on stackexchange narkive permalink

Die ursprüngliche Frage lautete "Wurde mathematisch nachgewiesen, dass Antivirus nicht alle Viren erkennen kann?"

Es ist wahrscheinlich richtig zu sagen, dass wir niemals beweisen können dass wir Code geschrieben haben, der alle Viren erkennt.

Ein an das Internet angeschlossener Allzweckcomputer mit der Fähigkeit, Code herunterzuladen und auszuführen, entspricht wahrscheinlich einer universellen Turing-Maschine. Diese Äquivalenz umfasst die unendliche Bandgröße von Turing: Wenn die Bandbreite der Netzwerkschnittstelle des Computers geringer ist als die Gesamtwachstumsrate der über das Internet zugänglichen Daten, kann der Computer niemals das "Ende des Bandes" erreichen. (Ich habe dies in der Schlussfolgerung von diesem Artikel vor langer Zeit ein wenig behandelt. Obwohl dies im praktischen Sinne nachweisbar ist, würde die Erstellung eines mathematischen Beweises wahrscheinlich das Hinzufügen einiger Einschränkungen erfordern.)

Wenn das oben Gesagte zutrifft und "Anhalten" bedeutet, "einen Bericht zu erstellen, in dem alle Viren auf dem System aufgelistet sind, nicht mehr oder weniger", können wir nicht im Voraus beweisen, dass das Programm mit einer korrekten Einstellung angehalten wird Antworten; wir müssen es ausführen, um es herauszufinden.

Wenn beide oben genannten Absätze zutreffen, können wir die Richtigkeit des resultierenden Berichts niemals überprüfen, da wir niemals eine vollständige Liste aller möglichen Viren erstellen können, mit denen wir sie vergleichen können: Diese Viren sind alle da draußen Irgendwo auf dem Band ist es unendlich groß und wir können nie das Ganze lesen.

Wenn alle drei Absätze wahr sind, können wir niemals beweisen, dass wir einen 100% korrekten Virendetektor geschrieben haben.

Adithya Sama
2019-01-24 16:13:56 UTC
view on stackexchange narkive permalink

Nun, die Definition eines Virus ist ziemlich vage. Ja, es ist eine böswillige Entität, aber böswillig ist genauso vage. Abhängig vom System und seinen Richtlinien ändern sich die Möglichkeiten für eine böswillige Entität. Das Definieren einer sich ständig ändernden Entität ist etwas, das in verschiedenen Bereichen, in der Zahlentheorie, in Zustandsmaschinen usw. aufgetaucht ist, und es wurde auf unterschiedliche Weise bewiesen, dass dies nicht möglich ist, zumindest basierend auf dem, was wir wissen.

Ein Weg wäre, anstatt zu definieren, was bösartig ist, können wir definieren, was erlaubt ist, ein sehr strenges und unabhängiges System, das nur bestimmte Abfolgen von Operationen zulässt. Auf diese Weise kann es sicher aufbewahrt werden.

Dieses Problem IMO ist genauso schwierig wie das Definieren von Zufällen.

Bill K
2019-01-25 05:52:11 UTC
view on stackexchange narkive permalink

Ein Virus ist nur Code - es ist nett, wenn er sagt "Kann mein AI-Rasenmäherprogramm den Unterschied zwischen Unkraut und Pflanzen erkennen" - wenn ja, zieht er Podeste?

Wenn Sie a herunterladen Programm, das E-Mails an alle Personen in Ihrer Kontaktliste sendet. Handelt es sich um einen Virus oder um einen Spammer? Hängt davon ab, warum Sie das Programm heruntergeladen haben, und nicht von bestimmten Bytes im Programm.

Sie müssen also nicht einmal zum mathematischen Beweis gehen - Sie können nur begründen, dass dies nicht möglich ist.

Andererseits könnte man sagen, dass es einfach ist, Viren zu identifizieren, wenn Sie Viren anhand ihres Verhaltens definieren. Programme werden im Rahmen eines Aktualisierungsprozesses aktualisiert. Wenn außerhalb dieses Prozesses versucht wird, Code auf Ihrem Computer zu ändern, können Sie ihn als Virus definieren. Mit diesen Definitionen können Sie leicht Änderungen erkennen, die außerhalb bestimmter Installationsverfahren auftreten. Möglicherweise ist Hardware erforderlich, die Code von Daten trennen und den Codebereich sperren kann, wenn Sie keine Taste gedrückt halten. Dies ist jedoch möglich (wenn dies ärgerlich ist).

Dies setzt auch voraus, dass der Code absichtlich installiert wurde Während des Aktualisierungsprozesses handelt es sich nicht um einen Virus selbst, aber da wir in diesem Beispiel einen Virus nach Verhalten definieren, ist dies per Definition wohl nicht der Fall.

guest271314
2019-01-28 02:13:56 UTC
view on stackexchange narkive permalink

Wurde mathematisch nachgewiesen, dass Antivirus nicht alle Viren erkennen kann?

Auf welche Analyse bezog sich Bruce Schneier, als er schrieb:

Viren haben keine "heilen." Es ist mathematisch bewiesen, dass es immer möglich ist, einen Virus zu schreiben, den jedes vorhandene Antivirenprogramm nicht stoppen kann. "[0]

[0] Geheimnisse & Lies. Bruce Schneier. Page 154

Diese Antwort bezieht sich nicht direkt auf die Analyse, auf die Bruce Schneier verwiesen hat. Eine Person, die daran interessiert ist, was eine primäre Quelle bedeutet, wenn sie eine Erklärung abgibt, sollte sich bemühen, Kontakt mit der Hauptquelle selbst, um ihre spezifischen Fragen zu stellen , um Spekulationen, Vermutungen oder Verwirrung zu vermeiden.

Kurt Gödels Unvollständigkeitssatz, der 1931 in Über formal unentscheidbare Sätze veröffentlicht wurde Die "Principia Mathematica" und verwandter Systeme (auf Englisch "Über formal unentscheidbare Sätze von" Principia Mathematica "und verwandten Systemen" genannt) sind bei sorgfältiger Prüfung sehr lehrreich und relevant für die Analyse von jedes formale System, von Computerviren bis zur Politik

1. Wenn ein (logisches oder axiomatisches formales) System konsistent ist, kann es nicht vollständig sein.
2. Die Konsistenz von Axiomen kann in ihrem eigenen System nicht bewiesen werden.

Diese Theoreme beendeten ein halbes Jahrhundert von Versuchen, beginnend mit der Arbeit von Frege und gipfelten in Principia Mathematica und Hilberts Formalismus, um eine Reihe von Axiomen zu finden, die für die gesamte Mathematik ausreichen.

Im Nachhinein ist die Grundidee im Kern des Unvollständigkeitssatzes ziemlich einfach. Gödel hat im Wesentlichen eine Formel konstruiert, die behauptet, dass sie in einem bestimmten formalen System nicht beweisbar ist. Wenn es beweisbar wäre, wäre es falsch. Es wird also immer mindestens einen geben wahre, aber unbeweisbare Aussage. Das heißt, für jede rechnerisch aufzählbare Menge von Axiomen für die Arithmetik (dh eine Menge, die im Prinzip von einem idealisierten Computer mit unbegrenzten Ressourcen ausgedruckt werden kann) gibt es eine Formel, die für die Arithmetik gilt, in der jedoch nicht nachweisbar ist dieses System. Um dies zu präzisieren, musste Gödel jedoch eine Methode entwickeln, um Aussagen, Beweise und das Konzept der Beweisbarkeit (als natürliche Zahlen) zu codieren. Er tat dies mit einem Prozess, der als Gödel-Nummerierung bekannt ist.

Mr. E
2019-01-24 01:17:27 UTC
view on stackexchange narkive permalink

Kein mathematischer Beweis, aber AFAIK Es gibt zwei Möglichkeiten, Malware zu erkennen:

Signaturen

Da neue Malware entwickelt werden kann - einschließlich Verschleierung oder Ändern vorhandener - Die Signatur der neuen Malware befindet sich nicht in der Antiviren-Datenbank und wird daher nicht erkannt.

Heuristiken

Diese Methode verwendet eine automatische dynamische und / oder statische Analyse, um das Verhalten der Software zu verstehen. Je nachdem, was sie tut, entscheidet das Antivirenprogramm, ob es böswillig ist oder nicht.

Und hier kommt der schwierige Teil, nicht alles, was heute als harmlos angesehen wird, kann in der Zukunft sein.

Vor 20 Jahren hat beispielsweise eine Software, die Verschlüsselungsbibliotheken verwendet, dies möglicherweise nicht getan wurde als etwas Bösartiges angesehen, jetzt wissen wir, dass es sich möglicherweise um eine Art Ransomware handelt, die Ihre Daten verschlüsselt. Gleichzeitig können (und sollten) Sie einen Kennwortmanager verwenden, der auch Verschlüsselungsbibliotheken verwendet, um Ihre Daten sicher zu speichern. Wie können wir also entscheiden, ob es sich um Malware handelt oder nicht nur aufgrund der Tatsache, dass Daten verschlüsselt werden? In ähnlicher Weise kann eine TCP-Verbindung verwendet werden, um Informationen zu verlieren oder Websites zu durchsuchen.

Der einzige Unterschied ist die Semantik, die sich nur schwer automatisch analysieren lässt, da sich Technologien ständig weiterentwickeln und sich Malware an diese Entwicklung anpasst. Schließlich unterscheidet sich Malware nicht von anderer Software, außer den schlechten Absichten des Besitzers

Sie beantworten die Frage wie ein Programmierer (der ich bin).Es ist sinnlos.Ihre Frage lebt nicht im Bereich der Realität, sondern in der Theorie.Es ist wie wenn ich versuche, Leute davon zu überzeugen, dass keine "KI" (Künstliche Intelligenz) böse sein oder eine Seele haben kann.Sie weisen auf einige Nachforschungen oder einen Artikel der Elon Musk / Alex Jones-Stufe hin, und ich weise auf das Wort "Künstlich" hin.Sie werden immer noch nicht zuhören.Ein Experte zu sein hilft Ihnen nicht, wenn Sie mit den meisten Menschen streiten.
"Ein Experte zu sein hilft dir nicht, wenn du mit den meisten Leuten streitest."Während dies zutrifft, fragen sie auf einer Website, deren einziger Zweck darin besteht, "Experten" zu diesem Thema zu befragen.Warum jemanden fragen, wenn er nicht bereit ist, seine Antwort zu akzeptieren?
Jeder ist ein Experte.
R.. GitHub STOP HELPING ICE
2019-01-23 22:24:54 UTC
view on stackexchange narkive permalink

Nein, es wurde nicht bewiesen und kann nicht bewiesen werden, weil es nicht wahr ist. Ein Antivirenprogramm, das tatsächlich funktioniert, ist einfach ein geeignetes Berechtigungs- / Zugriffssteuerungsmodell, das von der Laufzeitumgebung erzwungen wird. Der Satz von Rice ist irrelevant, da Sie nicht im Voraus feststellen müssen, ob ein Programm sicher ist. Sie führen es einfach unter den Zugriffskontrollen aus und brechen es ab (oder verweigern nur den Zugriff), wenn es versucht, etwas zu tun, das Ihrer Richtlinie widerspricht.

Mathematisch bedeutet dies, dass Sie einen berechenbaren Test haben, der Ihnen ein positives Ergebnis liefert Ergebnis, wenn ein Programm böswillig ist, aber möglicherweise nicht angehalten wird, wenn das Programm nicht böswillig ist. Das ist in Ordnung, da der Test das Programm ausführt und Sie einfach so lange weitermachen können, wie es nicht böswillig ist.

Natürlich tun echte Antivirenprogramme nicht das einfache, offensichtlich Richtige (was würde in das Betriebssystem, die Laufzeit-VM oder eine ähnliche Komponente integriert werden (kein separates AV-Produkt). Stattdessen verwenden sie falsche Signaturen und Heuristiken, um Programme zu klassifizieren. Es ist nachweisbar (siehe andere Antworten), dass ein solcher Ansatz nicht funktionieren kann.

"Nicht, was?Nicht wurde es nicht bewiesen?Aber lesen Sie die anderen Antworten, die zeigen, dass es bewiesen wurde?Ein sehr verwirrender Anfang Ihrer Antwort.Könntest Du das erläutern?
Das Nein ist eine direkte Antwort auf die Betreffzeile der Frage.Ich werde näher darauf eingehen.
Soll ich den Virus rausholen, der Rowhammer verwendet, um die Kernel-Sicherheitsüberprüfungen zu überschreiben?
@Joshua: Die Laufzeitumgebung kann dies vollständig erkennen oder verhindern.Zum Beispiel durch Ausführen des Programms unter einem Interpreter.Siehe "geeignetes Zugangskontrollmodell".In diesem Fall ist die Hardware fehlerhaft und es ist unzureichend, den direkten Zugriff auf diesen Teil des Systems auf niedriger Ebene zuzulassen (Anforderungen an den Speicherbus zu stellen).
Im Gegensatz zu Spectre (bisher) kann Rowhammer über einen Interpreter ausgenutzt werden.
Können Sie die vermutete Existenz dieser * geeigneten Laufzeitumgebung * * beweisen *?
Angenommen, Sie haben zwei Programme: ein legitimes Programm, das alte temporäre Dateien bereinigt, die bestimmten Kriterien entsprechen, und ein Malware-Programm, das wichtige Dateien löscht, die bestimmten Kriterien entsprechen.Wie unterscheiden Laufzeitzugriffskontrollen zuverlässig zwischen diesen Fällen?
@ulidtko: Ja.Formale Methoden Menschen tun solche Dinge ständig mit der Überprüfung von Logikentwürfen.Aber es hängt von einer Formalisierung Ihrer Regeln ab, was erlaubt ist und was nicht.Viele Menschen haben nicht einmal ein Modell dafür im Sinn, was bösartig ist und was nicht, und erwarten von einer Maschine (oder einer anderen Person), dass sie ihre Gedanken liest und soziale Normen von innen anwendet, um die Entscheidung zu treffen.Das scheint natürlich unwahrscheinlich zu sein.
@Ray: Die Zugriffssteuerung ermöglicht das Schreiben / Löschen für einen Satz von Dateien und nicht für einen anderen.So funktionieren normale Dateisystemberechtigungen.
@Joshua: Das hängt von der Art des Dolmetschers ab.Es kann mit Sicherheit nicht auf einem Interpreter ausgenutzt werden, der physische und virtuelle Adressen über eine starke kryptografische Verschlüsselung (ohne auch die Verschlüsselung zu unterbrechen) oder nur einen, der den Speicherzugriff auf geeignete Weise drosselt.* Wenn * Ihre physische Maschine solchen Fehlern ausgesetzt ist, * muss * Ihre Zugriffskontrolle Maßnahmen enthalten, die den Zugriff auf die Mechanismen zum Auslösen dieser Fehler ausschließen.Das ist keine Raketenwissenschaft, Leute.
Es ist zwar gut, verhindert aber nicht alle Viren.Mit @Ray konnten Sie das Problem mit diesem speziellen Beispiel umgehen, aber das wird nicht immer der Fall sein.Was ist, wenn genau dieselbe Software in einem Anwendungsfall als nützlich, in einem anderen als bösartig angesehen werden kann?Ziehen Sie eine Software in Betracht, die die Fernsteuerung Ihres Computers ermöglicht und ursprünglich geschrieben und verwendet wurde.Dann missbrauchen andere es.Der Spieler nennt es Awesomeware, wenn sein Kumpel ihm im Schlaf XP bringt, und sein Nachbar betrachtet es als Malware, wenn sein Feind widerliches weißes Rauschen auslöst.Der Müll einer Person ist der Schatz einer anderen Person.
@Aaron: ** Zum n-ten Mal ** ist dies eine Frage der Auswahl des geeigneten Zugriffskontrollmodells / der Definition von bösartig.
Abgesehen vom Ton ist meine Antwort hier im Grunde die gleiche wie die Antwort von [James_pic] (https://security.stackexchange.com/a/202047/2836), die später erschien und von Leuten, die dies nicht getan haben, nicht so lächerlich herabgestimmt wurdeLesen Sie die Kommentare.
Diese Antwort erklärt, wie verhindert werden kann, dass nicht autorisierte Programme ausgeführt werden, insbesondere keine Viren.Die Frage bezieht sich speziell auf Malware.
@forest: Malware ist nur ein Programm, das etwas tut, was Sie nicht wollen.
@R .. schrieb "Auswahl der geeigneten Zugangskontrolle ..." Wenn es so einfach ist, sollten Sie ein Papier darüber schreiben.Denn wenn Sie mit dem von mir angegebenen Beispiel tatsächlich eine solche Zugriffskontrolle oder Definition schreiben können, um zwischen "Aktion A ist in Ordnung" und "(genau dieselbe) Aktion A ist böswillig" zu unterscheiden, werden Sie Millionär.Nein, noch besser, denn Sie hätten sich der Logik selbst völlig widersetzt und eine völlig neue Art von Logik entdeckt, um dies zu ermöglichen. Vielleicht werden Sie Milliardär oder können sich mit der neuen Logik der Physik widersetzen und Superman werden.
... mein Punkt ist, genau das gleiche, das gleiche, die gleiche Aktion kann sowohl böswillig ** als auch ** nicht böswillig sein.Natürlich nicht am selben Ort zur selben Zeit.Aber an einem anderen Ort oder zu einer anderen Zeit.Vielleicht sogar auf demselben Computer, auf dem dieselben Zugriffskontrollen definiert sind und dieselbe Aktion ausführen (dieselbe Datei, dieselbe Änderung usw.), aber Susy hält das für eine gute Sache, dann eine halbe Stunde später, wenn ihr Bruder den PC verwendet, den er in Betracht ziehtes ist bösartig.Oder Susy hält es zum Zeitpunkt X für bösartig, aber nicht zum Zeitpunkt Y ("Play-Me-A-Tune-App" ist in der Freizeit cool, kann aber leicht als Malware verwendet werden).
@R .. Ich möchte wiederholen, Sie sind auf dem richtigen Weg.Meine Kommentare sind nicht anders gemeint.Bessere Zugriffskontrollen würden das Blockieren von Malware erheblich verbessern.Was Sie vorschlagen, ist eine enorme Verbesserung gegenüber modernen Antivirenprogrammen.Die Punkte, die dagegen vorgebracht werden, sind lediglich, dass der Fragesteller in diesen speziellen Fragen und Antworten ganz speziell nach mathematischen Beweisen gefragt hat, ob jede einzelne mögliche Malware erkannt werden könnte.Wir müssen davon ausgehen, dass dies mit minimalen Fehlalarmen bedeutet, andernfalls lautet die Antwort "Alles blockieren".Wenn also "p! = Q" und "p = q" beide wahr sind, deuten unsere Kommentare darauf hin, dass dies nicht möglich ist.
Die Kernidee in dieser Antwort scheint richtig zu sein, obwohl der Rahmen deaktiviert ist. Insbesondere sieht es so aus, als ob diese Antwort auf eine etwas andere Frage lautet, aber falsch gerahmt ist, um dieser Frage zu entsprechen.Das Problem ist, dass es bei dieser Frage darum geht, wie ein Programm analysiert werden kann, um festzustellen, ob es sich um einen Virus handelt, basierend auf seiner Spezifikation, z.eine Binärdatei davon, die diese Antwort nicht einmal zu adressieren versucht.Ich denke jedoch, dass diese Antwort insofern eine Art Frame-Herausforderung darstellt, als der Grund, warum sie nicht versucht, die Frage zu beantworten, darin besteht, dass sie eine bessere Lösung als Antivirus vorschlägt: Laufzeitverwaltung.
marshal craft
2019-01-24 13:47:47 UTC
view on stackexchange narkive permalink

Ich würde Najib selbst zustimmen. Modellsätze können immer nur auf eine sehr formale logische Teilmenge einer formalen Logik angewendet werden. Ich weiß nicht, dass irgendetwas über die Unvollständigkeit der Realität formuliert werden kann, basierend auf einer formalen logischen Grammatik. Irgendwann scheint es eine Frage größerer Philosophie zu sein. Vorausgesetzt, Sie können konkret beschreiben, was es bedeutet, Virus oder bösartig zu sein, das heißt, dass dies als mathematische Frage formuliert werden kann und dann sicher gezeigt werden kann.

Computer weisen begrenzte Ressourcen auf. Somit kann durch rohe Gewalt jeder Zustand betrachtet werden und wenn er bösartig ist.

Dies schlägt fehl, wenn möglicherweise zeitliche Kombinationen von Zuständen berücksichtigt werden. Ich kann es nicht selbst sagen.

kubanczyk
2019-01-23 17:10:37 UTC
view on stackexchange narkive permalink

Können wir ein Antivirus haben, das alle Viren erkennt?

Keine Mathematik erforderlich. Experimentierzeit. Ordnen wir einen Pool von Viren, einen Pool von Systemen, die versuchen, sich selbst zu verteidigen, und Mechanismen, die beide Parteien ständig verändern / verbessern.

Geben Sie ihnen einen Planeten. Warten Sie Milliarden von Jahren.

Haben wir immer noch Viren?

Für mich ist die schiere Anzahl der bereits getesteten Möglichkeiten bei weitem nicht zufriedenstellend.

Über "Beweisen"

Hier möchte ich erklären, warum ich Ihre Frage drastisch umformuliert habe.

Die direkte Antwort auf Ihre Frage "Wurde mathematisch bewiesen, dass <statement about real world>" lautet: Nein, Mathematiker haben Ihre Aussage über die reale Welt (oder eine andere solche Aussage) nie bewiesen. Mit realer Welt meine ich die, die Sie sehen, wenn Sie aus dem Fenster schauen.

Sie können nur alles in axiomatischen Systemen ("Welten", die von einer Reihe von regiert werden) beweisen Axiome - wobei Axiome selbst als unbeweisbar definiert sind. Ich kenne keine Axiome, die die echten Computerviren beherrschen, daher kann ich nichts darüber beweisen.

Ich werde versuchen, die Realität vorherzusagen, und ich werde oft richtig sein, sicher. Aber ich werde dafür fälschbare Theorien verwenden, keine Beweise.

Ihr Argument geht etwas zu viel in die andere Richtung - es gibt offensichtliche Lücken in dem, was die biologische Evolution praktisch erreichen kann (keine Kuh ist über den Mond gesprungen), und das Fehlen von "Lösungen" für bestimmte "Probleme" ist schwer zu akzeptierenals absoluter Beweis dafür, dass etwas nicht getan werden kann, wenn Sie nicht zeigen, warum wir es unmöglich besser machen könnten.Insbesondere die Mechanismen, mit denen Viren und Antivirensoftware "entwickelt" und "ausgewählt" werden, sind sehr unterschiedlich.Sogar das Wort "Virus" ist zu einer Fehlbezeichnung geworden, wenn es um aktuelle schädliche Software geht (die sich selten selbst kopiert).
@JeroenMostert Ich habe gerade eine Tatsache gemeldet.Während Sie implizieren, dass das Fummeln mit Gedanken in unseren Köpfen zufriedenstellendere Ergebnisse bringen würde, ist in diesem Fall die Anzahl der Wiederholungen und die riesigen Probenpools für mich gut genug.Das heißt, ich nehme an, es ist weitaus wahrscheinlicher, dass ein menschliches Gehirn hier etwas übersieht, als dass die gesamte Biosphäre es für so viele Generationen überprüft.(Aber - ja! - in einigen anderen Fällen kann unser Denken natürlich überlegen sein. Gut für uns!)
Autos sind unmöglich.Beweis: Milliarden Jahre Evolution haben keine Räder hervorgebracht.Q.E.D.Dies scheitert natürlich daran, dass die Parallelen zwischen Biologie und Ingenieurwesen nur so weit gehen - dafür müssen Sie nicht einmal kluge Erfinder voraussetzen.Ebenso rechnen.Wir haben vor langer Zeit einige nette Parallelen zwischen Replikationsprogrammen und biologischen Viren entdeckt, aber das ist soweit, und tatsächliche Replikationsprogramme sind nicht mehr als theoretische Kuriositäten geworden, während bösartige Programme tot sind und dennoch in die Knie gehen.Ist die biologische Parallele noch gültig und aufschlussreich?Ich würde nicht annehmen.
@JeroenMostert Ja, ich glaube, ich habe es auch erwähnt.
Ob Beweise möglich sind oder nicht, ist nicht die Frage.Sie haben die Frage umgangen.Es wurde ein Verweis gemacht und der Rahmen wird in diesem Zusammenhang gemacht.Dies ist keine Antwort.
@schroeder Ah, das ist ein berechtigtes Anliegen - ich habe mich selbst bearbeitet, um meine Auslassung zu korrigieren.
Zusätzlich zu den Mängeln, auf die in früheren Kommentaren hingewiesen wurde, beruht diese Antwort (wahrscheinlich aus Versehen) implizit auf falschen Annahmen über die Gleichwertigkeit zwischen biologischen und Computerviren.Nur weil beide als "Viren" bezeichnet werden, bedeutet dies nicht, dass sie identische relevante Eigenschaften haben.Der Name ist eine Metapher, keine genaue Definition.
** Evolutionäre Prozesse optimieren nicht **;Sie sind [zufriedenstellend] (https://en.wikipedia.org/wiki/Satisficing).Sie können nicht behaupten, dass das Versagen eines Evolutionssystems, eine optimale Strategie gegen einen gegnerischen Agenten zu entwickeln, seine Unmöglichkeit beweist.Ich bin mir auch ziemlich sicher, dass OP das im Beweis verwendete axiomatische System nicht interessiert.Niemand würde Sie dafür verurteilen, dass Sie [Zermelo-Fraenkel-Axiome] verwendet haben (https://en.wikipedia.org/wiki/Zermelo%E2%80%93Fraenkel_set_theory#Axioms), und es ist ein roter Hering, auf seine Probleme hinzuweisen.
Marshall Whittaker
2019-01-24 00:04:43 UTC
view on stackexchange narkive permalink

Mehr oder weniger ja. Die Mathematik dahinter ist für Laien ein Bootstrapping-Paradoxon, eine Art zeitliches Paradoxon, das die Herkunft der Informationen in Frage stellt. Dies hängt mit diesem Problem zusammen, da wenn Sie ein Antivirus haben, das alle bekannten Viren erkennt, aber am nächsten Tag jemand einen neuen Virus erstellt, im alten Virenscan keine Signatur vorhanden ist, um den neuen Virus zu erkennen stark>. Wenn Sie möglicherweise alle Computerviren vom Ende der Zeit nehmen könnten, dann strahlen Sie sie zurück zu vorher und erstellen Sie Virensignaturen von allen, woher stammen die Informationen ? Die Zukunft oder die Vergangenheit? Da der allgemeine Konsens darin besteht, dass Zeitreisen aus einer Reihe von mathematisch / physikalischen Gründen unmöglich sind, können Sie nicht alle Viren abdecken, sondern nur alle bekannten Viren.

Dies beruht auf der nicht angegebenen Annahme, dass "Antivirenprogramme keine Viren erkennen können, die zum Zeitpunkt der Erstellung / letzten Aktualisierung des Antivirenprogramms nicht vorhanden oder nicht bekannt waren".Dies ist der Schlüssel zu der Frage. Wenn Sie also davon ausgehen, dass sie wahr ist, bedeutet dies, dass Ihre Antwort keine tatsächliche Substanz hat.Auch für ** einige ** Viren ist diese Annahme eindeutig falsch, da Heuristiken bei einigen Viren funktionieren.Das ganze Gerede von Zeitreisen ist nur Flaum.


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