Forum: PC-Programmierung Programm abschotten


von CPP (Gast)


Lesenswert?

Hallo,

ein Programm mit langer Entwicklungsarbeit soll zum Schutz des geistigen 
Eigentums nicht geklaut werden können. Das Programm selbst verarbeitet 
in Echtzeit Daten aus dem Internet, muss also in irgendeiner Weise Daten 
austauschen können. Und nein, es ist natürlich nichts böses, es geht 
viel mehr einfach um das Thema oder die paranoide Überlegung, wie kann 
man ein Programm laufen lassen ohne das es durch eine Kompromittierung 
des OS geklaut werden kann (und dann dekompiliert wird). Das Programm 
wird nicht vertrieben oder verkauft, daher geht es nicht um 
Anti-Reverse-Ingineering des Codes, sondern nur darum, dass das Programm 
in einer Infrastruktur läuft die von aussen erst gar nicht erreicht 
werden soll.

Als konzeptionelle Überlegung dafür habe ich mir folgendes gedacht:
- Man nutzt zwei Computer A und B.
- Computer A dient als Datenquelle und ist mit dem Internet verbunden.
- Computer B ist Plattform für das eigentliche Programm B ohne 
Internetverbindung.
- Computer A und B sind per Lan mit eigener Netzwerkkarte für diese 
Verbindung verbunden.

Programm A auf Computer A holt die Daten aus dem Internet und sendet die 
empfangenen Daten direkt über TCP/IP über eine andere Netzwerkkarte an 
das Programm B auf Computer B. Das abgeschottete Programm B nimmt die 
Verbindung als Client zu Programm B auf.
Programm A hat zur Netzwerktrennung zwei Netzwerkkarten.
Beide Betriebsysteme sind eine Linuxdistru.

Sollte Computer A kompromittiert werden müsste doch so das Programm B 
auf Computer B besser gesichert sein als wenn es direkt auf dem Computer 
A mit der Internetverbindung läuft.

Ich Programmiere zwar schon eine Weile, hab aber noch nicht so viel 
Erfahrung mit solchen Sicherheitsüberlegungen. Die Banken oder ähnliche 
Institutionen müssten doch solche Lösungen oder Konzepte haben...? wie 
machen die das eigentlich.

Jetzt würde mich brennend interessieren:
- ist das vorgestellte Konzept mit der Netzwerktrennung gut und 
ausreichend oder Unsinn?
- ist TCP/IP dafür ein geeigentes Protokoll? Oder sollte man gar besser 
einer exotischere Verbindung zwischen Computer A und B wählen wie 
serielle Verbindung RS-232, Infrarot, etc...?
- Oder gibt es eine völlig andere oder bessere Lösungen?

Danke schon mal && Grüße

von Mampf F. (mampf) Benutzerseite


Lesenswert?

CPP schrieb:
> Beide Betriebsysteme sind eine Linuxdistru.

Netzwerk-Sockets zur Kommunikation sind üblich - ich würde aber nicht 
zwei Rechner verwenden.

Rechner A wäre bei mir ein Prozess, der in einem chroot mit 
nicht-Root-Rechten läuft und per App-Armor zusätzlich gesichert ist ... 
Dürfte kaum möglich sein, da raus zu kommen.

Dann gibt es noch die Möglichkeit wie Docker oder gleich richtige 
Virtualisierung.

So oder so, Netzwerk ist eine gute Schnittstelle zur Kommunikation.

: Bearbeitet durch User
von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Reverse Proxy (nginx) sollte dein Problem lösen

Korrektur: du brauchst nichtmal einen reverse proxy, ein normaler tuts 
auch

: Bearbeitet durch User
von Jan H. (j_hansen)


Lesenswert?

CPP schrieb:
> Als konzeptionelle Überlegung dafür habe ich mir folgendes gedacht:
> - Man nutzt zwei Computer A und B.
> - Computer A dient als Datenquelle und ist mit dem Internet verbunden.
> - Computer B ist Plattform für das eigentliche Programm B ohne
> Internetverbindung.
> - Computer A und B sind per Lan mit eigener Netzwerkkarte für diese
> Verbindung verbunden.

Computer A nennt sich "Firewall" oder "Proxy".

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

CPP schrieb:
> wie kann
> man ein Programm laufen lassen ohne das es durch eine Kompromittierung
> des OS geklaut werden kann (und dann dekompiliert wird). Das Programm
> wird nicht vertrieben oder verkauft, daher geht es nicht um
> Anti-Reverse-Ingineering des Codes, sondern nur darum, dass das Programm
> in einer Infrastruktur läuft die von aussen erst gar nicht erreicht
> werden soll.

Das sind zwei grundlegend verschiedene Dinge.

1. Um ein Reverse-Engineering zu verhindern (oder um zu Verhindern das 
bspw. ein anderes Programm mit dem gleichen Namen ausgeführt wird), kann 
man ein Executable verschlüsseln.

2. Um die Erreichbarkeit und damit zusammenhängende Dinge zu sichern 
benötigt man mehr Infos über die angewendete Architektur. Geht es dir um 
das Sichern des Programmes auf einen dedizierten Rechner?

von MaWin (Gast)


Lesenswert?

CPP schrieb:
> Oder gibt es eine völlig andere oder bessere Lösungen?

Schreib einfach dein Scheiss-Programm und fertig.

Komm von deinem hohen Ross herunter, es wäre eine besondere geistige 
Leistung. Es ist einfach nur geistige Überheblichkeit.

Nicht mal ein schnellerer Bitcoin-Miner wäre so wichtig.

Alles algorithmisch abarbeitbare ist algorithmisch nachvollziehbar, wenn 
ma  die Plattform nachbilden kann. Es ist nur in 99.999% der Fälle den 
Aufwand nicht wert.

Bei deinem Programm würde sich vermutlich nicht mal jemand den Source 
angucken wenn du ihn mitliefern würdest, also mach nicht so ein Geschiss 
drum.

Beitrag #5252534 wurde von einem Moderator gelöscht.
von Jim M. (turboj)


Lesenswert?

CPP schrieb:
> Als konzeptionelle Überlegung dafür habe ich mir folgendes gedacht:
> - Man nutzt zwei Computer A und B.
> - Computer A dient als Datenquelle und ist mit dem Internet verbunden.
> - Computer B ist Plattform für das eigentliche Programm B ohne
> Internetverbindung.
> - Computer A und B sind per Lan mit eigener Netzwerkkarte für diese
> Verbindung verbunden.

Tolle Idee, hilft nur z.B. gegen little booby tables 
(https://xkcd.com/327/) genau gar nix.

Außerdem wäre bei..
> Echtzeit Daten

..ein (D-)DOS der Infrastruktur u.U. viel teurer (für den Kunden) als 
der Klau des Programms.

Fazit: Sicherheit ist nicht so einfach...

von Horst (Gast)


Lesenswert?

CPP schrieb:
> - Oder gibt es eine völlig andere oder bessere Lösungen?

Deine Idee wurde sogar schon vom DIN aufgegriffen. Sieh Dir mal die 
DIN_SPEC_27099 'Hochsichere Netzwerk-Architektur zur Verwahrung hoch 
schutzbedürftiger Daten' an.
Wenn schon übertreiben, dann richtig.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

MaWin schrieb:
> Schreib einfach dein Scheiss-Programm und fertig.

Ich bin etwas erstaunt, das ist eigentlich der Tonfall von jemand 
anderem in diesem Forum, insbesondere, wenn es um eine von ihm 
hartnäckig unverstandene Programmiersprache geht ...

von CPP (Gast)


Lesenswert?

Wie gesagt mir geht es in erster Linie ums Interesse am Thema, natürlich 
sind Sicherheitsmassnahmen aufwändig und können weit über dem 
Angemessenen liegen aber man kann sich doch trotzdem mal damit 
beschäftigen auch ohne ein Bank zu gründen. Gibt ja schon genug der 
anderen Gruppe die zB lieber zocken, Fernsehn gucken, Windows 10 
benutzen und jetzt Angst vor Kaspersky haben ^^

Unter den Sicherheitsforschern ist man sich doch eigentlich einig, dass 
alle großen Betriebsysteme mit hoher Wahrscheinlichkeit hunderte 
Sicherheitslücken haben da sie einfach zu komplex sind. Zero Days sind 
also ungewollt drin. Und dazu kommt dann noch das Gewollte in Software, 
Treiber bis Hardware...
Die Wahrscheinlichkeit das ein OS welches mit dem Internet verbunden ist 
kompromitierbar ist, ist denke ich nicht gerade gering, selbst bei BSD 
oder Linux.

Daher finde ich das Konzept ein weiteren Computer als abgekoppelte 
Einheit zu nehmen nicht verkehrt. Eine "Demilitarized Zone" ist wenn ich 
es richtig verstanden hab ein ähnliches Vorgehen aber wohl ein bisschen 
komplizierter. Die Idee mit App-Armor oder Virtualisierung find ich auf 
jeden Fall auch gut, allerdings ist es dann nicht eine so klare 
pysikalische Trennung wie bei zwei getrennten PCs. (Nur als Beispiel bei 
Virtualisierungen können über den Palinopsia Bug schaffen es sogar VMs 
auf Speicherbereiche des Hosts zugreifen)

little booby tables = sql injection oder was ist damit gemeint? 
inwiefern würde das die Infrastruktur gefährden? Datenbank ist bei mir 
nicht vorhanden.
Klar wenn man Unsinn bei der Netzwerkkommunikation programmiert dann 
kann man ein Overflow riskieren aber wenn alle reinkommenden Daten auch 
brav nur in vorgesehenen Speicherbereichen landen sollte das Risiko 
gering sein.

> 2. Um die Erreichbarkeit und damit zusammenhängende Dinge zu sichern
> benötigt man mehr Infos über die angewendete Architektur. Geht es dir um
> das Sichern des Programmes auf einen dedizierten Rechner?
Ja also dedizierten Rechner im Sinne von ein Rechner, der nur für eine 
Aufgabe abgestellt wird, in dem Fall das Programm auszuführen.
Architektur wären zwei normale 64bit PCs mit einer beliebigen Linuxditro

von CPP (Gast)


Lesenswert?

> Deine Idee wurde sogar schon vom DIN aufgegriffen. Sieh Dir mal die
> DIN_SPEC_27099 'Hochsichere Netzwerk-Architektur zur Verwahrung hoch
> schutzbedürftiger Daten' an.
> Wenn schon übertreiben, dann richtig.

Danke, schaue ich mir mal an.

von Sheeva P. (sheevaplug)


Lesenswert?

CPP schrieb:
> Und nein, es ist natürlich nichts böses, es geht
> viel mehr einfach um das Thema oder die paranoide Überlegung, wie kann
> man ein Programm laufen lassen ohne das es durch eine Kompromittierung
> des OS geklaut werden kann (und dann dekompiliert wird).

Nunja, wenn in das Programm eine signifikante Entwicklungsarbeit 
geflossen ist, dürfte es so komplex sein, daß die Analyse eines 
Dekompilats deutlich aufwändiger ist als eine Neuimplementierung.

Außerdem sagst Du, daß das Programm nicht verkauft wird. Natürlich ist 
Security by Obscurity immer Quatsch, aber solange niemand weiß, was Dein 
Programm tut, hat auch niemand ein Motiv, aufwändig einzubrechen und 
dann eine noch viel aufwändigere Dekompilation und Analyse 
durchzuführen. Das macht doch keiner aus Spaß an der Freude.

> Als konzeptionelle Überlegung dafür habe ich mir folgendes gedacht:
> - Man nutzt zwei Computer A und B.
> - Computer A dient als Datenquelle und ist mit dem Internet verbunden.
> - Computer B ist Plattform für das eigentliche Programm B ohne
> Internetverbindung.
> - Computer A und B sind per Lan mit eigener Netzwerkkarte für diese
> Verbindung verbunden.

...und Computer B, auf dem ein ähnliches oder sogar dasselbe System 
läuft, wird dann über dieselbe Schwachstelle kompromittiert. Sorry, aber 
so ist das nicht besonders sinnvoll.

> Jetzt würde mich brennend interessieren:
> - ist das vorgestellte Konzept mit der Netzwerktrennung gut und
> ausreichend oder Unsinn?
> - ist TCP/IP dafür ein geeigentes Protokoll? Oder sollte man gar besser
> einer exotischere Verbindung zwischen Computer A und B wählen wie
> serielle Verbindung RS-232, Infrarot, etc...?
> - Oder gibt es eine völlig andere oder bessere Lösungen?

Einige sicherheitssensitive Umgebungen arbeiten mit einem mehrstufigen 
Firewall-Konzept, also hintereinander mehreren Firewalls auf 
verschiedenen Hard- und Softwareplattformen, jeweils mit striktem, 
proaktivem Monitoring und proaktiven Intrustion Detection Systemen, ... 
und oft wird am Ende gerne noch ein Protokollbruch auf RS-232, IPX/SPX 
oä. gemacht. Bei einem unserer Kunden soll dafür sogar noch AppleTalk 
benutzt werden, anderswo habe ich Gerüchte über TokenRing und FDDI 
gehört.

Nach allem, was ich aus dem Bereich gehört und gesehen habe, ist sowas 
aber ziemlich aufwändig und für private Anwender kaum leistbar 
hinsichtlich des Kosten- und Arbeitsumfangs. Andererseits sind die 
Kollegen, die mit solchen Dingen befaßt sind, meistens nicht sehr 
gesprächig, so sie sicher nicht einmal die halbe Wahrheit erzählt haben. 
;-)

Am Ende macht es jede zusätzliche Schicht für den Angreifer schwieriger, 
mit jeder zusächlichen Schicht wird die Entdeckungswahrscheinlichkeit 
größer. Irgendwann ist der Aufwand für einen Einbruch größer als der 
Wert, den der Angreifer erbeuten kann -- und dann verlieren Angreifer 
meistens schnell das Interesse, zumal gleich nebenan lukrativere Ziele 
winken, bei denen es etwas mit weniger Aufwand und Risiko zu erbeuten 
gibt.

von Sheeva P. (sheevaplug)


Lesenswert?

CPP schrieb:
> Die Wahrscheinlichkeit das ein OS welches mit dem Internet verbunden ist
> kompromitierbar ist, ist denke ich nicht gerade gering, selbst bei BSD
> oder Linux.

Ja. Alle verbreiteten Betriebssysteme sind prinzipiell unsicher.

> Daher finde ich das Konzept ein weiteren Computer als abgekoppelte
> Einheit zu nehmen nicht verkehrt. Eine "Demilitarized Zone" ist wenn ich
> es richtig verstanden hab ein ähnliches Vorgehen aber wohl ein bisschen
> komplizierter.

Nein, eigentlich ist eine DMZ nur ein Konzept zur Trennung von Netzen. 
Dabei gibt es -- vom Internet aus betrachtet -- meistens einen einfachen 
Paketfilter-Firewall als erste Stufe, welche nur Zugang zu den gewünscht 
öffentlichen Diensten auf den in der DMZ befindlichen Servern durchläßt, 
sowie vor der DMZ einen Proxy-Firewall, der nur den hinter diesem Proxy 
befindlichen Client-PCs einen Zugang auf die DMZ-Rechner und / oder das 
Internet zulässt. Die von extern erreichbaren Server befinden sich dann 
innerhalb der DMZ, alle Desktop-Clients hinter dem zweiten Firewall.

Fortschrittliche DMZ-Konzepte arbeiten stattdessen außen nicht mehr mit 
einem Paketfilter, sondern einem professionellen Reverse-Proxy wie etwa 
einer BigIP von F5 Networks oder einer Thunder ADC von A10 Networks, da 
bist Du aber schnell mit 50, 100 und mehr Kiloeuro dabei. Und dort wird 
beim internen Firewall dann auch eher auf ein Unified Threat Management 
zurückgegriffen, die meistens eine Kombination aus Firewall, Intrusion 
Detection System, Virenscanner, Spam-Filter, VPN-Gateway und Proxyserver 
bieten. Sowas kann dann aber locker nochmal dasselbe oder gerne auch mal 
das Vierfache des Reverse Proxy kosten.

> Die Idee mit App-Armor oder Virtualisierung find ich auf
> jeden Fall auch gut, allerdings ist es dann nicht eine so klare
> pysikalische Trennung wie bei zwei getrennten PCs. (Nur als Beispiel bei
> Virtualisierungen können über den Palinopsia Bug schaffen es sogar VMs
> auf Speicherbereiche des Hosts zugreifen)

Virtualisierungen erhöhen die Komplexität des Gesamtsystems, egal, ob 
sie auf Hypervisor- oder auf Betriebssystemebene stattfinden. Etwas, das 
wegen seiner Komplexität inhärent unsicher ist, durch Hinzufügen von 
noch mehr Komplexität sicherer zu machen, ist Selbstmord aus Angst vor 
dem Tod.

> little booby tables = sql injection oder was ist damit gemeint?

Ganz genau.

> inwiefern würde das die Infrastruktur gefährden?

Naja, in professionellen Datenbanken kann man wesentlich mehr machen als 
nur ein paar CRUD-Operationen, zum Beispiel Stored Procedures anlegen. 
Diese Stored Procedures können dabei oft auch in gängigen Skriptsprachen 
verfaßt sein, zum Beispiel können in PostgreSQL Stored Procedures in den 
Skriptsprachen Tcl, Perl und Python angelegt werden. Solche Funktionen 
können dann im Prinzip alles, was auch ein lokales Skript im Kontext des 
Datenbank-Benutzers tun könnte, beispielsweise die Datenbank 
manipulieren oder Daten abziehen und an externe Datensenken schicken.

> Klar wenn man Unsinn bei der Netzwerkkommunikation programmiert dann
> kann man ein Overflow riskieren aber wenn alle reinkommenden Daten auch
> brav nur in vorgesehenen Speicherbereichen landen sollte das Risiko
> gering sein.

Nicht selten sind es dann das Parsen und Verarbeiten der Daten, bei 
denen ausnutzbare Fehler auftreten. Klassische Buffer Overflows gibt es 
zwar in den modernen Betriebssystemen immer noch, aber für den Angreifer 
sind sie zumindest bei Systemen mit Address Space Layout Randomization 
-- das alle gebräuchlichen Systeme nutzen -- schwierig auszunutzen. 
Securityframeworks wie AppArmor, SE-Linux, Linux Capabilities, Smack, 
TOMOYO und RSBAC machen die Sache für den Angreifer zwar schwieriger, 
aber eben nicht unmöglich.

Deswegen sind viele heutige Sicherheitsfehler im Grunde eher logischer 
Natur, wie die oben verlinkte SQL Injection. Bereits ein guter OR-Mapper 
hätte das geschilderte Problem abgefangen, man hätte halt einen benutzen 
müssen. Aber wer ungeprüfte Eingaben direkt an seine Datenbank übergibt, 
hat es ebenso verdient wie jene, die jeden E-Mail-Anhang anklicken oder 
jeden gefundenen USB-Stick gleich mal in ihren Rechner stecken... ;-)

Insofern sind gepflegte Serversysteme bei sorgfältiger Programmierung 
doch schon ganz gut geschützt, egal ob unter Linux, *BSD oder Windows. 
Da sitzt nämlich in der Regel kein Benutzer davor, der dann aus Neu- 
oder Habgier auf alles klickt, das nicht bei drei auf den Bäumen ist. 
Sogar die vielen un- und semiprofessionellen betreuten Linux-Webserver 
bei großen Hostern werden trotz weiter Verbreitung, schlechter Pflege 
und einer besonderes hohen Attraktivität für Angreifer nur recht selten 
geknackt.

von Sheeva P. (sheevaplug)


Lesenswert?

Rufus Τ. F. schrieb:
> MaWin schrieb:
>> Schreib einfach dein Scheiss-Programm und fertig.
>
> Ich bin etwas erstaunt, das ist eigentlich der Tonfall von jemand
> anderem in diesem Forum, insbesondere, wenn es um eine von ihm
> hartnäckig unverstandene Programmiersprache geht ...

Wenn wir denselben meinen, dessen Name nicht genannt werden soll, dann 
hat dieser sich doch vor allem dadurch ausgezeichnet, auf plumpe 
Fäkalausdrücke und direkte Beleidigungen zu verzichten. Sonst hätten wir 
uns doch nicht so lange mit den "Argumenten" und mantraartig 
wiederholten Ausführungen dieses bedauerlichen Menschen befaßt. ;-)

von C++ (Gast)


Lesenswert?

Wie wäre es wenn du erst einmal den Quellcode hier posten würdest, damit 
wir wissen um was es geht?

von CPP (Gast)


Lesenswert?

@Sheeva: Danke für den interessanten Input

Das man mit unterschiedlichen Plattformen arbeiten sollte wäre natürlich 
ein guter Ansatz. Es ist eben die Frage wie weit man das treiben will 
(unterschiedliche Hardware, OS oder gar auch Protokolle).
Die DIN_SPEC_27099 scheint auch darauf aufzubauen, dass bei der dort 
beschriebenen dreistufigen Serveranordnung der mittlere Teil ein 
rudimentäres Betriebssystem ist wo immer nur eine Verbindung in eine 
Richtung existiert und die andere vorher getrennt wurde.
https://de.wikipedia.org/wiki/DIN_SPEC_27099
Wäre interessant wie trennen genau definiert ist (auch wegen 
Performance) und welches OS das sogenannte rudimentäres Betriebssystem 
ist. Die DIN_SPEC_27099 scheint es nur kostenpflichtig zu geben.

Das Parsen und Verarbeiten der Daten ist auch ein spannender Aspekt. 
Meistens kommt ja alles als Bytestrom rein, man könnte vielleicht sowas 
wie eine Datentypüberprüfung einbauen.


C++ schrieb:
> Wie wäre es wenn du erst einmal den Quellcode hier posten würdest, damit
> wir wissen um was es geht?

Social Engineering Pentest? ;-)

von Oliver S. (oliverso)


Lesenswert?

Rufus Τ. F. schrieb:
> MaWin schrieb:
>> Schreib einfach dein Scheiss-Programm und fertig.
>
> Ich bin etwas erstaunt, das ist eigentlich der Tonfall von jemand
> anderem in diesem Forum, insbesondere, wenn es um eine von ihm
> hartnäckig unverstandene Programmiersprache geht ...

Wo er recht hat, hat er trotzdem Recht...

Ansonsten:

Der Computer mit dem supergeheimen Wunderprogramm kommt in einen 
EMV-dichten Raum mit Zugangskomtrolle, ohne jede Vernindung zur 
Außenwelt.

Sämtliche Daten werden auf einem anderen Rechner aus dem Internet 
abgerufen und auf Papier ausgedrückt, und dann händisch in den 
abgeschotteten eingegeben.

Oliver

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Lesenswert?

CPP schrieb:
> Unter den Sicherheitsforschern ist man sich doch eigentlich einig, dass
> alle großen Betriebsysteme mit hoher Wahrscheinlichkeit hunderte
> Sicherheitslücken haben da sie einfach zu komplex sind.

Ganz ehrlich, ich würde dem Betriebssystem mehr trauen als einem selbst 
geschriebenen Protokoll zum Datenaustausch zwischen Rechner A und 
Rechner B, wo man potentiell viel falsch machen kann.

von Nase (Gast)


Lesenswert?

Mampf F. schrieb:
> Ganz ehrlich, ich würde dem Betriebssystem mehr trauen
Läuft das Betriebssystem denn auch auf einer Maschine, die so schöne 
Sachen wie UEFI und Intel ME hat?
Spätestens damit erübrigt sich eigentlich jede weitere Überlegung zur 
Sicherheit...


Wenn ich mich recht entsinne, dann hatten/haben die Leute von CAcert ein 
ähnliches Problem mit ihrem Root-Zertifikat zu lösen, mit dem die 
verteilten Zertifikate erzeugt werden aber an das ja prinzipbedingt 
sonst niemand herankommen darf.
Hatten die das nicht sogar über eine serielle Schnittstelle gemacht?

von (prx) A. K. (prx)


Lesenswert?

Mampf F. schrieb:
> Ganz ehrlich, ich würde dem Betriebssystem mehr trauen als einem selbst
> geschriebenen Protokoll zum Datenaustausch zwischen Rechner A und
> Rechner B, wo man potentiell viel falsch machen kann.

Wenn man zum Betriebssystem grosszügig auch jene Layer hinzuzählt, die 
heute routinemässig als Libraries und Services zur Verfügung stehen, um 
den Programmierern bei netzwerkweiter Programmierung den Job zu 
vereinfachen, kann die Einschätzung komplizierter werden.

Bei einer einfachen Aufgabe mit einfacher Kommunikationsstruktur kann 
ein komplexer Layer Löcher öffnen, die man ohne das komplexe Grundsystem 
überhaupt nicht hätte.

Bei einem einfachen TCP-Stream mit sorgfältigem Parser des Inhalts im 
eigenen Programm ist man einzig davon abhängig, dass der TCP/IP Layer 
des Kernels sauber ist. Das lässt sich mit einem Port-Filter auch simpel 
kontrollieren, d.h. genau dieser Port kommt durch und fertig. Eine 
Firewall tut mit der Überwachung des Verbindungszustands vielleicht 
etwas mehr als ein Portfilter, hat aber auch nicht viel Arbeit damit.

Setzt man hingegen auf irgendwelche high level Mechanismen auf (RPC, 
DCOM und moderneres), kann das anders aussehen. Wer weiss schon was da 
alles an bekannten und unbekannten Problemen drinsteckt. 
Connection-Broker, die für jede Client-Server Verbindung ein eigenes 
Port-Paar erzeugen, erschweren Firewalls die Arbeit oder machen sie 
gleich ganz unmöglich. Besonders effektiv wird dieses "Knüppel zwischen 
die Beine werfen", wenn man dann noch sicherheitshalber verschlüsselt.

Wenn das eigene Problem eine komplexe Kommunikationsstruktur beinhaltet, 
dann wird es sinnvoller sein, bereits getestete Werkzeuge zu verwenden, 
als das Rad neu zu erfinden. Man muss dann aber beim Ball bleiben und 
Neuigkeiten über diese Werkzeuge im Auge behalten und ab und zu updaten. 
Hat man hingegen ein einfaches Problem, entfalten komplexe Werkzeuge 
mehr Risiken als Nutzen.

von (prx) A. K. (prx)


Lesenswert?

Nase schrieb:
> Spätestens damit erübrigt sich eigentlich jede weitere Überlegung zur
> Sicherheit...

Pauschale Ausagen sind bekanntlich immer falsch. ;-)

Spässe wie ME sind nur ein Problem, wenn der Angreifer auf diese Ebene 
kommen kann. Wer es zulässt, dass man von aussen da drauf kommt, der ist 
schief gewickelt. Eine Firewall auf Basis von einfacher PC-Technik als 
Firewall ins Internet zu stellen ist eine Einladung (1). Andernfalls 
beschränkt sich das Risiko auf das innere Netz zwischen den relevanten 
Knoten - und das kann man recht übersichtlich gestalten.

Etwas komplizierter wird es, wenn auch die Situation im Inneren 
betrachtet werden muss. Wenn es also beispielsweise sein kann, dass 
jemand mit beschäftigter Miene unkontrolliert rumspaziert und USB-Sticks 
verteilt oder damit an Geräten hantiert. Oder mal eben WLAN-APs irgendwo 
reinsteckt und wieder geht. Etc.

Und natürlich: Um wen geht es eigentlich, also vor wem will man sich 
absichern? Botnets, Ransomware, Nachbarn, Trachtenträger, 
Business-Konkurrenz mit viel Geld, Geheimdienste, ...

(1): Soviel zu Mini-PC-Boards als Selbstbau-Router, und ähnliche Ansätze 
etablierter Firewalls. Grüsse an ipCop/pfSense/... Auch Checkpoint nutzt 
normale Hardware, aber hoffentlich nicht die für ME relevanten 
Interfaces.

: Bearbeitet durch User
von Nase (Gast)


Lesenswert?

A. K. schrieb:
> Spässe wie ME sind nur ein Problem, wenn der Angreifer auf diese Ebene
> kommen kann.

Der Angreifer ist ja schon auf der Ebene, ohne dass man überhaupt etwas 
tut. UEFI und ME haben vollwertige Netzwerkstacks an Board und sind 
bisweilen closed-source.
D.h., jeglicher Netzwerkverkehr geht potentiell dort vorbei. Und beim 
durchschnittlich anzunehmenden Wartungsstau der Hersteller dürfte UEFI 
und ME hinreichend löchrig sein, denn Hersteller können per Definition 
keine "gute" Software schreiben... ;-)

von (prx) A. K. (prx)


Lesenswert?

Nase schrieb:
> D.h., jeglicher Netzwerkverkehr geht potentiell dort vorbei.

IMHO lauschen die nur auf bestimmten Interfaces.

Gegen einen Gauner, der bereits im UEFI/ME drin sitzt und schnüffelt ist 
natürlich kein Kraut gewachsen. Die können ins System gucken, brauchen 
kein Netzwerk.

Aber ab einem gewissen Grad an berechtigter oder unberechtigter Paranoia 
wärs eigentlich besser, du baust dir dein System gleich mit FPGAs 
selber, und eigenen darin definierten Prozessoren. Mit eigenem 
VHDL-zu-Hardware-Generator, denn wer weiss was in gekauften Prozessoren 
und Entwicklungswerkzeugen unbekannterweise drin ist, um Amis und 
Chinesen das Leben zu erleichtern. ;-)

: Bearbeitet durch User
von MaWin O. (Gast)


Lesenswert?

MaWin schrieb:

Mal wieder ein Beitrag des Psychopathen, der seinen Namen nicht kennt,
und stattdessen MaWin ins Namensfeld schreibt.

> CPP schrieb:
>> Oder gibt es eine völlig andere oder bessere Lösungen?
>
> Schreib einfach dein Scheiss-Programm und fertig.
>
> Komm von deinem hohen Ross herunter, es wäre eine besondere geistige
> Leistung. Es ist einfach nur geistige Überheblichkeit.
>
> Nicht mal ein schnellerer Bitcoin-Miner wäre so wichtig.
>
> Alles algorithmisch abarbeitbare ist algorithmisch nachvollziehbar, wenn
> ma  die Plattform nachbilden kann. Es ist nur in 99.999% der Fälle den
> Aufwand nicht wert.
>
> Bei deinem Programm würde sich vermutlich nicht mal jemand den Source
> angucken wenn du ihn mitliefern würdest, also mach nicht so ein Geschiss
> drum.

Wenn es etwas sachlicher formuliert wäre, würde ich durchaus zustimmen.

Sehr oft wird der Wert eines Programms maßlos überschätzt.
Und meistens ist ein reverse-engineering auch nicht sinnvoll. Denn oft 
ist es wesentlich weniger Aufwand einfach die Funktionalität neu zu 
implementieren. Dann ist es auch Urheberrechtlich sauber.
Dagehen kannst du auch mit 1000 Firewalls nichts tun.

von postscripter (Gast)


Lesenswert?

Klassiker.

Wenn mich der Quellcode eines Mitbewerbers interessiert hat, hab ich 
erstmal geschaut, ob er GPL V2/V3 (oder andere schöne Lizenzen) Code 
enthält :-)

Rest übernehmen die Bluthunde der Rechtsabteilung.

von (prx) A. K. (prx)


Lesenswert?

postscripter schrieb:
> Rest übernehmen die Bluthunde der Rechtsabteilung.

Die dann erst einmal einen der Urheber auftreiben und ihn zu einer Klage 
überreden müssen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.