Frage:
Woher weiß ich, dass eine Software nur das tut, was der Autor behauptet?
user3533
2013-02-07 03:08:39 UTC
view on stackexchange narkive permalink

Wie kann ich ohne Programmierer oder Computerexperte feststellen, ob ein bestimmtes Programm oder eine bestimmte Software im Allgemeinen keine unerwünschten Funktionen enthält, die den Datenschutz und die Sicherheit gefährden?

Viele der Kommentare sind zutreffend. Wenn die Software auf einem * nix- oder bsd-Computer ausgeführt wird, können Sie außerdem einen Trace in die Software einfügen und die Funktionalität auf niedriger Ebene beobachten (d. H. Welche Systemaufrufe sie macht).
Wenn Sie ein Programmierexperte sind, können Sie eine statische Analyse verwenden. Grundsätzlich dekompilieren Sie das Programm mit IDAPro und sehen eine Karte aller System-APIs, die auch als solche bezeichnet werden, die Schaden anrichten könnten. Ansonsten können Sie mithilfe einer Firewall sehen, ob die App die zu öffnenden Ports öffnet oder nach Hause telefoniert.
Wenn eine bestimmte Software behauptet, genau nichts zu tun, ist dieses Problem einfach.
-1
Im Allgemeinen können Sie nicht wissen, dass eine Software nur das tut, was der Autor behauptet. Um jedoch Ihre spezielle Frage zu beantworten: Wie kann ich feststellen, ob ein bestimmtes Programm unerwünschte Funktionen verborgen hat, die den Datenschutz und die Sicherheit gefährden? Installieren Sie diese Software auf einem Computer, der völlig unverbunden ist - kein Internet, WLAN, LAN usw. Verwenden Sie diesen Computer nur zum Ausführen dieses Programms. Wenn versteckte unerwünschte Funktionen vorhanden sind, die versuchen, Datenschutz und Sicherheit zu gefährden, schlagen sie fehl.
Dieses Problem ist einer der Gründe, warum sich manche Menschen für Open Source Software entscheiden. Wenn jemand den Quellcode lesen kann, haben Sie eine viel bessere Chance zu wissen, ob das Programm etwas Unangenehmes tut.
Übrigens, erinnert sich jemand an diese echten Computerviren aus der Zeit vor dem Internet? - Sie würden ausführbare Dateien auf dem Computer des Opfers ändern und ihren eigenen Code in sie einfügen. Dies ist ein weiterer Fall, in dem niemand Aussagen über das Verhalten der Programme machen kann, selbst wenn diese sauber aus vertrauenswürdigem Quellcode erstellt wurden.
Sieben antworten:
Tom Leek
2013-02-07 03:39:59 UTC
view on stackexchange narkive permalink

Sie können feststellen, ob eine Software nur das tut, was sie ankündigt, auf die gleiche Weise, wie Sie wissen können, ob das Essen, das sie Ihnen in Restaurants serviert, vergiftet ist oder nicht. In einfachen Worten, das können Sie nicht, aber die Gesellschaft hat verschiedene Programme entwickelt, um das Problem zu lösen:

  • Sie können Freunden und Kritikern zuhören, um zu erfahren, ob das Essen in einem bestimmten Restaurant einen guten Ruf hat oder nicht.
  • Sie können eine Probe entnehmen und an ein Labor senden, in dem nach vielen (aber nicht allen) bekannten giftigen Substanzen gesucht wird.
  • Sie können freundlich fragen, ob Sie dies beobachten dürfen der Koch, während er das Geschirr zubereitet.
  • Der Koch hat ein begründetes geschäftliches Interesse daran, dass sein Kunde mit der Qualität des Essens zufrieden ist, und zum Glück gehört insbesondere, nicht tot zu sein.
  • Die Gesellschaft bestraft Giftmischer mit äußerster Härte, und es kann normalerweise davon ausgegangen werden, dass der Koch es weiß.
  • Sie haben immer die extreme Möglichkeit, dort nicht zu essen, wenn Sie zu besorgt sind.

All dies kann direkt in die Welt der Software übertragen werden. Zu den extremen Methoden zur Feststellung der Softwarequalität und zur Einhaltung des veröffentlichten Verhaltens gehören sehr teure und langweilige Dinge wie Common Criteria, bei denen es im Grunde darauf ankommt, zu wissen, wer das Programm mit welchen Tools erstellt hat.

Alternative Antwort: Jede Software weist Fehler auf, sodass zu 100% garantiert wird, dass nicht genau das tut, was sie tun soll. (Diese Behauptung enthält übrigens die Software, die in etwa einem Dutzend kleiner Computer ausgeführt wird, die in Ihr Auto eingebettet sind.)

Eine der besten Analogien aller Zeiten
Das ist gut. Und die alternative Antwort ist auch brillant.
Ein Punkt: Ein Restaurant ist ziemlich bekannt und etabliert, während die Person, die eine Software herstellt, dies möglicherweise nicht ist. Einige anonyme Personen werden möglicherweise nicht bestraft, wenn die Software schlecht ist, und Sie kennen auch nicht unbedingt ihren Ruf. Wenn Sie wissen, wer tatsächlich eine Software hergestellt hat und einen guten Ruf hat, funktioniert die Analogie besser.
Die Analogie deckt auch das ab, @cpast. Sie essen sicherer in einem bekannten, gut bewerteten Restaurant als Sushi von einem Straßenhändler zu kaufen, der möglicherweise einfach verschwindet, nachdem er versehentlich schlechten Fisch verkauft hat.
Es gibt auch Dinge wie formale Spezifikation (Sie können die Spezifikation lesen, wenn Sie die Spezifikationssprache kennen) und zu testen, ob das SW-Stück dieser entspricht.
Sie können auch nach dem Rezept fragen oder es nachschlagen und das Essen selbst zu Hause zubereiten.
Oder Sie können nach den Zutaten fragen und sie selbst kochen (Quellcode herunterladen und kompilieren).
Dies ist die typische Antwort auf diese Art von Frage. Es ist nicht ganz wahr. Code! = Essen, weil der Sprachdesigner die Regeln des Universums wählt. Erfundenes Beispiel: In einer reinen Funktionssprache weiß ich bereits zu 100%, dass eine Funktion außerhalb der räumlichen / zeitlichen Nutzung keine Nebenwirkungen verursachen kann. "Jede Software hat Fehler", ist falsch; die Identitätsfunktion `id: a -> a; id x = x` hat keine Fehler, der Typ alleine ist bereits Beweis. Ich weiß auch, dass die Multi-Präzisions-Additionsfunktion in der x64-Assembly, die ich heute geschrieben habe, keine intuitiven Fehler aufweist - es ist offensichtlich, dass sie korrekt ist.
Jede Analogie bricht zusammen, wenn man sie zu genau betrachtet. So gehen Analogien: Sie veranschaulichen Konzepte, damit der menschliche Verstand sie verdauen kann. Was Ihre Funktion betrifft, da die Hardware selbst nicht fehlerfrei ist ...
Der Code, den ich geschrieben habe, ist fehlerfrei, unabhängig davon, ob die Hardware fehlerfrei ist. Ohne Annahmen kann man nie etwas "wissen". Davon abgesehen, vertrauen Sie nicht auf Intel-Hardware. Außerdem: "Die Gesellschaft bestraft Giftmischer mit äußerster Härte und es kann normalerweise angenommen werden, dass der Koch es weiß." Hat die Gesellschaft Debian für den Zufallsgenerator bestraft, der ihn 2 Jahre lang beeinflusst hat (entspricht einer Hintertür)? Nein, sie haben nicht einmal ihre Glaubwürdigkeit verloren.
@Longpoke Vielleicht ist der Code, den Sie geschrieben haben, fehlerfrei und die Hardware ist fehlerfrei. Ist der Compiler und / oder Interpreter fehlerfrei? Unabhängig davon kann die räumliche / zeitliche Nutzung selbst ein Problem sein. Stellen Sie sich vor, auf dem Computer wird (a) ein Lebenserhaltungssystem und (b) Ihre Identitätsfunktion ausgeführt. Das LFS hat einen seltsamen Parallelitätsfehler, der in einer Million Jahren niemals auftauchen würde, außer wenn Ihre ID-Funktionen die räumliche / zeitliche Nutzung erzwangen. Ihre ID-Funktion hat wohl etwas getan, das über das hinausgeht, was Sie behauptet haben.
@emory: Es ist einfach, eine nicht optimierende Implementierung einer FP-Sprache zu überprüfen. Die Ursache für den Parallelitätsfehler ist nicht "id". Das Problem ist, dass ein anderer Teil des Systems einen Parallelitätsfehler aufweist. Wenn Sie Wert auf Sicherheit legen, überprüfen Sie den gesamten TCB (was bedeutet, dass Sie keinen verrückten Stack wie gcc / * nix / x86 verwenden können) und stellen Sie sicher, dass keine derartigen Parallelitätsfehler darin enthalten sind. Das heißt, wenn es bei dieser Frage wirklich nur um die Überprüfung der * nix-Software geht, ist die Antwort ganz einfach: Sie können nicht. Jeder, der etwas anderes sagt, verwendet eine Branchendefinition von "sicher". Mit * nix meine ich BSD, Microsoft, Apple, UNIX usw.
"Der Koch hat ein begründetes Geschäftsinteresse daran, dass sein Kunde nicht tot ist." Ich schwöre, wenn ich jemals ein einführendes Lehrbuch über Betriebswirtschaft schreibe (wahrscheinlich nie, aber hey), wird dieser Satz dort drin sein.
Jetzt muss ich nur noch ein latentes Neurotoxin erfinden, das den Trinker veranlasst, seinen Willen kurz vor ihrem Tod auch mir neu zu schreiben. (Entschuldigung, ich bin auf einer Art Backdoor-Reise und dieser Analogie fehlte eine;))
David Stratton
2013-02-07 03:35:08 UTC
view on stackexchange narkive permalink

Sie können nicht, zumindest nicht mit 100% iger Genauigkeit. Als Programmierer ist es sehr einfach, alles zu codieren, was ich will, und es ist nicht unbedingt nur das, was beworben wird.

Nicht alle unerwarteten Aktivitäten sind jedoch böswillig. Ich gehe davon aus, dass Sie sich mehr Sorgen über böswillige Aktivitäten machen. Auch das ist nicht immer zu 100% möglich, aber es gibt Hoffnung.

Sie können Software verwenden, die Dinge wie Netzwerkverkehr, Dateiaktivität usw. überwacht, um Hinweise darauf zu finden, dass sich Software unerwartet verhält Weg. Zum Beispiel (und ich weiß, dass dies nur ein grundlegendes Tool ist) können Sie mit Fiddler feststellen, ob eine bestimmte Anwendung über http (s) auf das Internet zugreift. (Ja, ich weiß, dass es bessere Tools gibt. Fiddler ist nur das erste, das mir in den Sinn kommt.) Unter Windows können Sie Process Monitor verwenden, um noch mehr Einblicke zu erhalten. Ähnliche Tools gibt es auch für andere Plattformen.

Es stehen Ihnen auch mehrere andere Dienste zur Verfügung, mit denen die Analyse für Sie durchgeführt werden kann.

Dynamische Analyse bringt Ihnen nichts. Sie sind in beiden Fällen mit dem Problem des Anhaltens konfrontiert. Eine einfache Logikbombe, die von einem 12-Jährigen geschrieben wurde, wird alle Arten der dynamischen Analyse vereiteln, solange der Code dicht genug ist.
Jeff Ferland
2013-02-07 03:41:27 UTC
view on stackexchange narkive permalink

Insbesondere wenn Software größer und komplizierter wird, wird es selbst Experten unmöglich, darauf zu antworten. Insofern werden Datenschutz und Sicherheit einer Anwendung am besten mit den Methoden Sandbox oder Obligatorische Zugriffskontrolle behandelt. Die Idee hinter diesen Methoden ist, dass die Software in einem System ausgeführt wird, das steuert, was sie kann, und dass Sie zulassen, dass sie nur das tut, was Sie von ihr erwarten. Bei ordnungsgemäßer Ausführung können Sie mögliche Verbindungen einschränken und benachrichtigt werden, wenn das Programm jemals versucht, auf Dateien zuzugreifen, die Sie nicht erwartet haben. Sehr fortschrittliche Methoden können verwendet werden, um den Speicher zu überwachen oder den Netzwerkverkehr über einen Proxy-Dienst zu entschlüsseln.

Kurz gesagt, wenn Sie nicht alles verstehen können, was er tut, besteht die Antwort darin, alles einzuschränken, was er mit etwas tun kann läuft innerhalb von (dem Betriebssystem).

Nach Ihrem "Unmöglichen" hängt ein Sternchen, aber zu Recht sollten Sie hier Donald Knuth und MetaPost zitieren.
Das baumelnde Sternchen impliziert, dass die Zeit nicht unendlich sein würde, nur zu verdammt lang.
Typische Sandboxen (VM, Java usw.) / MAC / ACL / DAC usw. sind alle fehlgeschlagen. Das einzige Modell, von dem ich weiß, dass es derzeit funktioniert, ist das Fähigkeitsmodell. Auf der anderen Seite, wenn Sie mit * nix nicht weiterkommen, ist Ihre einzige Wahl wirklich die Dinge, die Sie erwähnt haben.
Zumindest @Longpoke SELinux steuert jeden Systemaufruf und schließt somit die Fähigkeitssteuerung ein.
@JeffFerland Ich spreche nicht über Linux-Funktionen, ich spreche über das Funktionsmodell.
Mok-Kong Shen
2013-02-07 19:35:15 UTC
view on stackexchange narkive permalink

In seinem weithin bekannten ACM Turing Award-Vortrag "Reflections on Trusting Trust" (jetzt vor fast genau 30 Jahren!) sagte Ken Thompson: "Sie können Code nicht vertrauen, den Sie nicht vollständig selbst erstellt haben." In der Praxis sind kommerzielle Software keine Ausnahme von anderen kommerziellen Produkten, da diejenigen von Herstellern mit guten Namen auf dem Markt normalerweise eine höhere Wahrscheinlichkeit haben, besser zu werden. Dafür gibt es jedoch keine absolute Garantie. Vor Jahrzehnten habe ich Disketten von einem bekannten Hersteller bekommen, der Viren hatte. In diesem Fall glaube ich persönlich, dass dies keine böswillige Handlung von jemandem innerhalb der Firma war, sondern dass einige Computer der Firma von außen mit Viren infiziert wurden. Es ist jedoch offensichtlich im Allgemeinen nicht möglich, die Möglichkeit, dass Insider des Unternehmens Hintertüren in die Software einführen, zu 100% auszuschließen, unabhängig davon, ob dies dem CEO bekannt ist oder nicht. Hintertüren könnten meiner Meinung nach ein äußerst kritisches Thema sein, da sich in der Welt Cyberkriege abzeichnen. Eine Geheimagentur einer Regierung könnte nämlich auf irgendeine Weise (über Geld, Zwang oder sogar Malware) verwalten, dass solche Hintertüren in bestimmte Software implantiert werden, die normalerweise zur Gewährleistung der Sicherheit der Kommunikation dienen (z. B. solche, die für digitale Signaturen relevant sind) und verkauft werden zu und von bestimmten nicht-freundlichen oder möglicherweise nicht-freundlichen ausländischen Nationen verwendet und entweder sofort oder zu geeigneten späteren Zeitpunkten ("Zeitbomben" usw.) die Hintertüren ausnutzen, um ihre Ziele zu erreichen, die kritische Infrastruktur der Zielnationen usw. zu stören usw. Stuxnet, Flame und Gauss sind einige Namen, die einige Hinweise auf die Fähigkeiten der potenziellen Malfaiteure geben sollten.

Erweitern Sie Ihren Standpunkt ... Auch wenn Sie aus einer Quelle kompilieren, die Sie selbst geschrieben haben ... Wer soll sagen, dass der von Ihnen verwendete Compiler nichts Schändliches tut (vorausgesetzt, Sie haben den Compiler nicht aus Assembly geschrieben ...)
@Josh: Es hängt alles davon ab, wie hoch Ihr Einsatz ist. Nicht nur Anwendungssoftware, sondern auch Compiler, Betriebssystem und Firmware / Hardware können potenzielle Gefahrenquellen sein. Sie müssen mit Bedacht entscheiden, welche Sicherheitsmaßnahmen in Ihrem Fall erforderlich und welche überflüssig sind (und die Verantwortung für Auslassungen übernehmen). Im Dezember 2012 gab es eine US-amerikanische DAPRA-Konferenz mit dem Ziel, Backdoor-Malware-Lücken in kommerziellen IT-Geräten zu schließen (https://www.fbo.gov/?s=opportunity&mode=form&id=55b80a80971c739699e410584819e767&tab=core&_cview=0). Siehe insbesondere den Abschnitt "Hintergrund" in der PDF-Datei, auf die verwiesen wird.
@Josh - Dann gibt es die Hardware. Aus diesem Grund habe ich beim Bau meines Computers mit Sand begonnen, um Silizium herzustellen. Natürlich bin ich damit noch nicht ganz fertig ...;)
@NathanLong: Nach Angaben normaler Medien arbeitet mindestens ein Land an der Entwicklung eigener Chips, um unabhängig von den Designs von Intel zu sein. Ich spekuliere, weiß aber nicht, ob das Sicherheitsproblem letztendlich auch keine geringe Motivation für dieses Projekt sein könnte.
F. Hauri
2013-02-07 03:43:46 UTC
view on stackexchange narkive permalink

Leider können Sie nicht ...

Da ein guter Programmierer von seinen Benutzern als bezeichnet werden könnte, wäre ein guter Trojaner vollständig fälschen eine normale Umgebung, um das Opfer ruhig zu machen.

Einige Viren / Trojaner führen eine Desinfektion des Opfersystems durch, um

  • einen anderen Virus sicherzustellen wird seine Arbeit nicht unterbrechen
  • sicherstellen, dass ein Antivirenprogramm ihn nicht findet
  • das Opfersystem einwandfrei funktionieren lassen, um sicherzustellen, dass das Opfer zuversichtlich bleibt.

Also kannst du nicht !! Im Zweifelsfall wenden Sie sich an !!!!

AJ Henderson
2013-02-07 03:43:59 UTC
view on stackexchange narkive permalink

Letztendlich kommt es auf Vertrauen an. Vertrauen Sie dem Ruf des Unternehmens, das die Software veröffentlicht? Wenn es Open Source ist, wird es von genügend Entwicklern verwendet, um bei Problemen Flaggen zu setzen. Es gibt eine gewisse Stärke in Zahlen, da bei einem häufig verwendeten Produkt mit größerer Wahrscheinlichkeit umfangreiche Untersuchungen durchgeführt werden, wenn es vertrauenswürdig ist. Wenn Sie nicht sehr paranoid sind, ist es am besten, wenn Sie sich im Allgemeinen ansehen, was die Community zu einer bestimmten Software zu sagen hat, aber es wird immer Fehler geben und es wird immer Fehler geben.

Man sollte beachten, was in Bezug auf Open-Source-Software häufig übersehen wird: Es gibt keine technischen Mittel, die garantieren würden, dass ein binäres / kompiliertes Programm genau aus dem Quellcode erstellt wurde, aus dem es angeblich erstellt wurde.
@HannoBinder - wahr, obwohl Sie auch die Möglichkeit haben, Ihre eigene Version zu erstellen, und obwohl dies nicht einfach ist, sollte es für einen begrenzten technischen Benutzer machbar sein, wenn es gut gemacht ist.
Tim X
2013-02-08 03:36:01 UTC
view on stackexchange narkive permalink

Wie von anderen betont, gibt es keine garantierte Möglichkeit, dies zu wissen. In den meisten Fällen müssen Sie der Integrität und dem Ruf des Anbieters vertrauen. Das Befolgen sicherer Praktiken, z. B. das Installieren von Software aus vertrauenswürdigen Quellen, kann helfen, aber genau wie im wirklichen Leben vertrauen wir manchmal den falschen Personen.

Letztendlich denke ich, wir sollten ein gewisses Maß an Paranoia annehmen. Wenn Sie eine App auf Ihrem Telefon installieren, akzeptieren Sie nicht einfach oder sagen Sie "Ja", wenn Ihr Betriebssystem Sie darüber informiert, dass das Telefon Zugriff auf Ihre privaten Informationen, Ihren Standort usw. haben möchte. Fragen Sie sich, warum dieser Zugriff erforderlich ist. Wenn Sie der Meinung sind, dass der von der Anwendung angeforderte Zugriff aufgrund der von Ihnen erwarteten Leistung gerechtfertigt ist, sagen Sie "Ja", möglicherweise "OK". Auf der anderen Seite, wenn es darum geht, Zugang zu Informationen oder Diensten anzufordern, die weit außerhalb dessen liegen, was es brauchen oder interessiert sein sollte, dann seien Sie ein wenig misstrauisch und vorsichtig, bevor Sie nur Ja sagen.



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