MIT-Kurs "Computer Systems Security". Vorlesung 4: „Privilegien teilen“, Teil 3

Massachusetts Institute of Technology. Vorlesung # 6.858. "Sicherheit von Computersystemen." Nikolai Zeldovich, James Mickens. 2014 Jahr


Computer Systems Security ist ein Kurs zur Entwicklung und Implementierung sicherer Computersysteme. Die Vorträge behandeln Bedrohungsmodelle, Angriffe, die die Sicherheit gefährden, und Sicherheitstechniken, die auf jüngsten wissenschaftlichen Arbeiten basieren. Zu den Themen gehören Betriebssystemsicherheit, Funktionen, Informationsflussmanagement, Sprachsicherheit, Netzwerkprotokolle, Hardwaresicherheit und Sicherheit von Webanwendungen.

Vorlesung 1: „Einführung: Bedrohungsmodelle“ Teil 1 / Teil 2 / Teil 3
Vorlesung 2: „Kontrolle von Hackerangriffen“ Teil 1 / Teil 2 / Teil 3
Vorlesung 3: „Pufferüberläufe: Exploits und Schutz“ Teil 1 / Teil 2 / Teil 3
Vorlesung 4: „Trennung von Privilegien“ Teil 1 / Teil 2 / Teil 3

Unsere Zeichnung zeigt also ein „Kunstwerk“, das seine Schöpfer vor Bedrohungen schützen wollten. In ihrem Fall waren sie meiner Meinung nach sehr besorgt, weil sie mit der Erstellung der Dating- Website okcupid.com wirklich sicherstellen wollten, dass der Ruf der Benutzer der Website nicht durch die Offenlegung personenbezogener Daten beeinträchtigt wird. Aus einem Gespräch mit einem der Entwickler der Website, der den Artikel darüber geschrieben hat, ist bekannt, dass sie nicht wirklich kompromittiert wurden. Zumindest trat kein Datenverlust aufgrund der Verwendung der OKWS- Architektur und teilweise aufgrund der Überwachung böswilliger Aktivitäten auf.

Der Grund, warum Benutzer ihre Anwendungen nicht in kleinere Komponenten aufteilen, liegt darin, dass dieser Prozess einige Anstrengungen erfordert. Es ist notwendig, alle Teile des Codes auszuwählen, klare Schnittstellen zwischen ihnen zu definieren und zu entscheiden, auf welche Daten jede Komponente Zugriff haben soll. Wenn Sie eine neue Funktion implementieren möchten, müssen Sie die Daten ändern, auf die jede Komponente des Programms Zugriff hat, um ihr neue Berechtigungen zu erteilen oder einige auszuwählen, und so weiter. Dies ist also ein ziemlich zeitaufwändiger Prozess.



Versuchen wir zu verstehen, wie der Webserver aufgebaut ist. Eine Möglichkeit, dies zu tun, besteht darin, zu verfolgen, wie die http-Anforderung vom OKWS- Server verarbeitet wird. Ähnlich wie in der vorherigen Abbildung haben wir einen Webbrowser, der zu okcupid.com gehen möchte . Die Entwickler des Site-Projekts stellten sich vor, dass sie eine Reihe von Maschinen haben würden, aber wir werden uns nur die Oberfläche der Site ansehen, auf der OKWS arbeiten wird, und eine andere Maschine im Hintergrund, auf der die Datenbank gespeichert wird. Diese zweite Maschine verwendet MySQL, da sie für viele Aufgaben eine gute Software ist. Sie möchten diese Daten wirklich schützen, da es sehr schwierig ist, auf eine unformatierte Festplatte oder Datenbank mit rohen Rohdatagrammen zuzugreifen.

Wie funktioniert die Anfrage, wie wird die Anfrage vom OKWS- Server verarbeitet? Zuerst kommt es an und wird von einem Prozess namens okd für den OKWS- Dispatcher verarbeitet. Er prüft, ob er nach dieser Anfrage fragt, und erledigt dann einige Dinge. Da Sie diese Anforderung möglicherweise zuerst registrieren müssen, wird sie an eine Komponente namens oklogd umgeleitet. Anschließend müssen Sie einige Vorlagen erstellen, und es kann erforderlich sein, sie noch vor dem Eintreffen der Anforderung zu erstellen. Und es macht eine andere Komponente namens pubd .



Und schließlich gibt es einen bestimmten Dienst, an den diese Anforderung gesendet wird. In okd gibt es also eine Tabelle der unterstützten Dienste. Vermutlich kommt diese Anfrage zu einem dieser Dienste. Nach dem Überprüfen von okd wird diese Anforderung an einen bestimmten SVC- Dienstprozess weitergeleitet. Dieser Dienst wird genau das tun, was die Anforderung erfordert, z. B. den Benutzer für den Newsletter abonnieren oder es ermöglichen, das Verzeichnis der Benutzer von ocupid mithilfe der Datenbank usw. anzuzeigen .

Und dafür benötigen Sie wahrscheinlich den Dienst, um die Anwendungsinformationen im oklogd- Komponentenprotokoll zu belassen . Und am Ende des Tages sollte er mit der Datenbank "sprechen". Die Ersteller der Site haben diesen Prozess der "Kommunikation" etwas anders implementiert als normalerweise in Apache , wo Sie einfach mit der Datenbank kommunizieren und beliebige SQL- Abfragen ausgeben. Sie entwickelten das Konzept eines Datenbank-Proxys, dbproxy , der sich vor der MySQL-Datenbank befindet und Anforderungen des SVC- Dienstes zur Ausführung akzeptiert. Ich denke, diese Abbildung zeigt im Grunde, wie OKWS funktioniert.



Es gibt eine andere Komponente, die all dies initiiert. Sie heißt okld und ist für das Starten aller Prozesse in der Schnittstelle dieses Webservers verantwortlich. Ich hoffe, einige dieser Dinge kommen Ihnen bekannt vor, denn genau diese Architektur wurde im Labor berücksichtigt. Es sieht so aus, als wäre es ein gutes Design. Sie hatten nicht pubd , logd und dbproxy in LR , aber Sie hatten okd und svc . Haben Sie Fragen zu OKWS ?

Zielgruppe: Haben wir richtig verstanden, dass dbproxy keine SQL-Abfragen akzeptiert, sondern eine andere Art von Abfrage?

Professor: Ja, richtig! Wie sieht diese Schnittstelle aus? Sie beschreiben dies nicht sehr detailliert, aber eine Sache, die Sie mit diesem Datenbankproxy tun könnten, ist, viele Argumente für SQL- Abfragevorlagen aufzubewahren . Beispielsweise könnte es sich um eine Suchanfragevorlage für Ihre Freunde handeln, bei der diese nach ID ausgewählt werden .



Angenommen, es gibt eine Vorlage wie "Wählen Sie ^ ID aus Ihrer Freundesliste aus, wobei ^ ID ="% S " . Angenommen, Sie möchten Alice unter Ihren Freunden finden und eine S- Anfrage senden, in der das Argument „Alice“ lautet. Teilen Sie unserer in der Benutzeroberfläche verfügbaren Anwendung mit, dass dbproxy bereit ist, drei Arten von Anforderungen in seinem Namen auszuführen. Wenn Sie die Abfrage Nr. 1 ausführen möchten und das Argument "Alice" lautet, erhalten Sie Zugriff auf die Datenbank.

Zielgruppe: Kann ein externer Benutzer auf der Ebene eines Webbrowsers eine solche Anfrage an die Datenbank senden oder gilt dies nur für interne Benutzer des Netzwerks?

Professor: Ja, vielleicht. Wie funktioniert es? In der Tat ist es seltsam, dass sich diese Datenbank auf einem separaten Computer befindet, weil Sie einfach eine Verbindung zur OKWS- Datenbank oder zum MySQL- Server herstellen können. Was hält das auf?

Zielgruppe: Firewall?

Professor: Ja, wahrscheinlich auf einer bestimmten Ebene. Die Entwickler beschreiben dies nicht zu ausführlich, aber auf dem zweiten Computer befindet sich wahrscheinlich ein internes Netzwerk, und es gibt einen Wechsel zwischen der Schnittstelle und der Datenbank, der von außen nicht erreichbar ist. Tatsächlich befinden sich beide Computer im selben Netzwerk, aber es gibt eine Fw- Firewall mit bestimmten Regeln. Möglicherweise können Sie nur über Port 80 eine Verbindung zu diesem Schnittstellencomputer herstellen, nicht jedoch direkt zum internen Server. Dies ist eine der Schutzoptionen.



Ein weiterer Grund ist wahrscheinlich, dass Sie beim Herstellen einer Verbindung zu diesem Datenbankproxy- Datenbankproxy ein 20-Byte-Kryptografietoken oder einen Schlüssel bereitstellen müssen. Wenn Sie diesen nicht bereitstellen, lehnt dbproxy Ihre Verbindung ab. Die Regel ist also, dass Sie eine TCP-Verbindung öffnen, Ihre 20 Bytes senden und wenn sie falsch sind, wird die Verbindung geschlossen. Ich denke, das ist die Bedeutung eines solchen Systemdesigns.

Versuchen wir also herauszufinden, wie diese verschiedenen Prozesse hier isoliert sind. Wie können Sie sicherstellen, dass sich alle diese Komponenten nicht gegenseitig überfordern?

Zielgruppe: Unterschiedliche Root-Rechte und unterschiedliche Benutzer-IDs?

Professor: Ja, fast jede dieser Komponenten arbeitet als eine andere UID. Daher gibt es hier in der Beschreibung des Systems eine ganze Tabelle, die für jede Komponente beschreibt, wo sie funktioniert und mit welcher UID . Wir können also schreiben, dass okd eine eigene UID hat , pubd eine eigene UID und oklogd auch eine eigene UID .

Okld arbeitet als Root , was eher erfolglos ist, aber vielleicht ist das keine große Sache. Dann gibt es eine ganze Reihe von dynamisch zugewiesenen Benutzer-IDs für jeden Dienst, zum Beispiel ID 51001 usw.



Auf diese Weise wird sichergestellt, dass nicht jeder Dienst die Prozesse anderer Dienste stören kann. Chroot wird auch hier häufig verwendet, sodass einige dieser Komponenten Chroot- Rechte in separaten Verzeichnissen haben. Zum Beispiel sind okd und svc in einigen Verzeichnissen mit gemeinsamen Chroot- Rechten ausgestattet. Warum haben diese beiden Komponenten Ihrer Meinung nach eine separate und nicht mit anderen Chroot- Komponenten gemeinsame?

Zielgruppe: Weil okd keine Root-Rechte hat.

Professor: Ja, aber warum setzen sie nicht pubd , oklogd und alle anderen in die gleiche Chroot ?

Zielgruppe: Ist es möglich, dass Dienste, die viele Daten gemeinsam nutzen müssen, voneinander isoliert werden sollten?

Professor: vielleicht. Ich denke, dass sie einige Daten teilen sollten, aber diese Daten sind nicht in den Dateien, sie werden über Sockets von okd zu Diensten übertragen. Tatsächlich speichert jedoch keine dieser Komponenten etwas Interessantes im Dateisystem.

Daher gibt es im chroot- Verzeichnis nichts Interessantes, und ich denke, dass die Leute von OKWS einfach beschlossen haben, die unproduktiven Kosten für chroot zu reduzieren, beispielsweise die Notwendigkeit, eine Kopie des Verzeichnisses zu erstellen. Vielleicht wollten sie auch den Verwaltungsaufwand für jeden Chroot- Befehl loswerden. Da es hier aber keine echten Dateien gibt, ist alles in Ordnung.

Der Grund, warum diese Leute den Umgebungskomponenten unterschiedliche Chroot zugewiesen haben, sind einige interessante Dinge. Möglicherweise gibt es Vorlagen, aber hier gibt es möglicherweise eine Protokolldatei, sodass die Protokolldatei nicht versehentlich gelesen werden soll, und dergleichen.

Zielgruppe: Verfügen diese Dienste beispielsweise über Dateien wie aspx ?

Professor: Wie im Artikel beschrieben, handelt es sich bei dem Dienst um eine einzelne kompilierte C ++ - Binärdatei, sodass tatsächlich keine zusätzlichen Dateien vorhanden sind.

Es gibt Vorlagen, aber sie werden wirklich über diesen seltsamen Mechanismus übertragen: pubd hat Vorlagen in seinem Verzeichnis, zeigt sie in einem Vorcomputer an , Home-Form in okd , und okd stellt bereits Vorlagen für alle Dienste über RPC- Aufrufe bereit. Sie befinden sich also im Speicher, sind jedoch direkt über das Dateisystem nicht zugänglich. Dies ist ein etwas paranoides Design, wenn ich die Vorlagen nicht einmal lesen kann.
Was bringt es also, all diese Komponenten zu trennen? Warum brauchen wir ein separates oklogd ?

Zielgruppe: Um die Möglichkeit des Überschreibens oder Zuschneidens des Journals auszuschließen?

Professor: Ja, also wollen wir wirklich sicherstellen, dass das Tagebuch zumindest nicht beschädigt wird, wenn etwas schief geht. Daher gibt es eine separate Protokolldatei, die von dieser UID geschrieben werden kann , und alle Protokollnachrichten werden als RPC für diesen Protokolldienst gesendet. Und selbst wenn alles andere ruiniert ist, bleibt das Magazin mit Ausnahme von okld unversehrt.

Teilnehmerin: Was ist, wenn Sie versehentlich einen Weg gefunden haben, das Magazin zu lesen und nicht sehen, was die anderen damit gemacht haben?

Professor: Nein, ich denke, wenn Sie einen Dienst, eine Kneipe oder etwas anderes „gehackt“ haben, können Sie alles in das Tagebuch schreiben. Daher ist es sinnvoll , einen separaten oklogd-Eintrag zu erstellen . Tatsächlich ist oklogd ein separater Prozess und wird nicht nur durch Anhängen von Dateien als Nur-Anhängen-Datei aktualisiert. Daher kann oklogd nicht jedem Protokolleintrag zusätzliche Informationen hinzufügen. Wenn das Betriebssystem die Nur-Anhängen- Datei unterstützt, wissen Sie in diesem Fall nicht, dass jemand in die Datei geschrieben hat. Während oklogd für jede Nachricht einen Zeitstempel setzt und Sie herausfinden können, welcher Dienst die Aufnahme gemacht hat oder von okd stammt . Daher erhalten Sie in dieser Protokolldatei tatsächlich zusätzliche Informationen, da es sich um einen separaten Dienst handelt.

Und was bedeutet okld Separation und warum sollte es mit Root-Rechten funktionieren? Ich denke, dafür gibt es mehrere Gründe.

Zielgruppe: Wenn Sie möchten, dass niemand anderes mit Root-Rechten handelt, müssen Sie die okld- Benutzerauthentifizierungsfunktion delegieren.



Professor: Ja. Jemand muss diese ganze Sache uid chroot konfigurieren, und Sie benötigen root für dieses Unix , also bietet okld dies an. Dies ist einer der Gründe. Noch etwas?

Zielgruppe: 80 Port Definition?

Professor: Ja natürlich! Sie müssen das Abhören von Port 80 binden, der okkld ist und noch etwas bietet?

Zielgruppe: Das Öffnen der oklogd- Protokolldatei wird abgeschlossen, da oklogd nicht geöffnet bleiben soll , um den Zugriff auf die Protokolldatei zu verhindern.

Professor: vielleicht. Aber ich weiß nicht, ob die Entwickler es wirklich getan haben, weil sie ihren Quellcode nicht angesehen haben. Denken Sie, dass okld die Protokolldatei öffnet und oklogd übergibt ? Möglicherweise.

Zielgruppe: Andernfalls könnte ein Angreifer, der oklogd kompromittiert hat, das gesamte Protokoll löschen.

Professor: Ja, das ist richtig. Vielleicht möchten Sie es im Anhänge- Modus öffnen und dann oklogd übergeben , dann haben Sie mehr Sicherheitsgarantien für das Protokoll. Dies ist etwas, was Sie ohne Root-Rechte nicht tun können.

Wir hatten also eine Frage zu den Hausaufgaben, was passieren wird, wenn dieses 20-Byte-Token für den Zugriff auf die Datenbank "durchgesickert" ist. Welchen Schaden kann dies verursachen? Sollten wir uns darüber Sorgen machen?

Zielgruppe: In diesem Fall kann ein Angreifer die Kontrolle über einen bestimmten Dienst übernehmen.

Professor: Ja, richtig, denn jetzt können Sie alle Abfragevorlagen verbinden und abrufen. Es scheint eigentlich ziemlich einfach. Sie müssen wahrscheinlich eine dieser Komponenten kompromittieren, um zuerst eine Verbindung zur Serverdatenbank herstellen zu können. Ich denke also, wenn Sie dieses Token haben und eine dieser in der Abbildung gezeigten Komponenten kompromittieren können, könnten Sie alle diese Abfragen verwenden.

Nun wollen wir sehen, wie dieses OKWS- Design verbessert werden kann. Beispielsweise wäre es möglich, jedem Benutzer eine separate UID- Einheit zuzuweisen und zusätzlich jedem Dienst eine separate UID zuzuweisen . Hier hat jeder Dienst, z. B. Nachrichten, die Suche nach Freunden oder das Erstellen eines Kontos, eine separate Benutzer-ID , aber jeder OKWS- Benutzer wird nicht als Unix-UID dargestellt . Eigentlich gibt es hier keine Benutzer-ID, hier sind nur Service- IDs vorhanden. Denken Sie, dass Sie für jeden OKWS- Client eine andere UID benötigen ?

Zielgruppe: In diesem Fall stellt sich heraus, dass ein Benutzer, der einen Dienst „hackt“, auf alle Daten anderer Benutzer dieses Servers zugreifen kann.

Professor: Ja, das stimmt!

Zielgruppe: Wenn Sie jedoch tatsächlich einen separaten Dienst und einen separaten Datenbankproxy für jeden Benutzer hätten, wäre es unmöglich, auf die Daten anderer Personen zuzugreifen.

Professor: Ja, aber könnte dies ein stärkeres Modell sein? Ich denke, dass OKWS- Entwickler aus zwei Gründen keinen solchen Schritt unternehmen. Das erste ist die Leistung. Wenn Sie ein paar Millionen Benutzer der okcupid- Site, mehrere Millionen laufende Prozesse und ein paar Millionen dbproxie haben , sind Leistungs-Overheads möglich. Dadurch kann nicht die gleiche Leistung erzielt werden , die die vorhandene OKWS- Architektur bietet .

Zielgruppe: Die OKWS- Beschreibung besagt, dass die Leistung dieses Systems besser ist als bei anderen Systemen. Wie wurde dies erreicht?

Professor: Ich denke, das liegt zum Teil daran, dass sie ihr Design auf eine bestimmte Arbeitslast abgestimmt haben. Außerdem haben sie dies alles in C ++ geschrieben . Eine Alternative besteht darin, einige Dinge in PHP zu schreiben, dann werden Sie wahrscheinlich Vorteile in dieser Hinsicht erzielen.

Darüber hinaus verfügen sie nicht über viele der Funktionen, die Apache bietet. Es hat ein universelles Design, hat also viele Arbeitsprozesse und lädt sie von Zeit zu Zeit neu. Es gibt viele TTP- Verbindungen, die die Dauer des Verbindungsprozesses sicherstellen und ihre Aktivität beibehalten. Es erhöht auch die Anzahl der auf dem System ausgeführten Prozesse. Apache wurde universeller gestaltet und kann alles tun, was Sie vom Internet-Server erwarten. Die Mitarbeiter von OKWS konzentrieren sich mehr auf die Lösung spezifischer Probleme.

Aber ich denke, es gibt heutzutage andere Webserver, die wahrscheinlich mit der OKWS- Leistung mithalten können. Zum Beispiel ist Nginx ein sehr optimierter Webserver, den Sie heutzutage ausführen können. Wenn Sie Hochleistungsanwendungen auf der Serverseite wünschen, möchten Sie wahrscheinlich, dass der lange Prozess dem OKWS- Service sehr ähnlich ist. Und damit es einen Mechanismus für eine schnelle gemeinsame CGI- Gateway-Schnittstelle zum Verbinden eines externen Programms mit einem Webserver oder eine Art Protokoll gibt, das auf der Serverseite verwendet werden könnte, um dies sogar in Apache oder Nginx zu implementieren. Daher denke ich, dass viele dieser Ideen nicht nur OKWS vorbehalten sind , sondern auch auf anderen Webservern implementiert werden können. Sie zeigen lediglich, dass die Verbesserung der Sicherheit die Verwendung dieser "Tricks" nicht ausschließt. Ich denke, sie haben mit einem ähnlichen Schema wie Apache begonnen , aber sie dachten, es wäre nicht sicher genug.

Daher denke ich, dass einer der Gründe, warum die Entwickler von OKWS keine separaten Berechtigungen für Benutzer einführen wollten, eine mögliche Leistungsverschlechterung war.



Ein weiterer Grund ist, dass sich das vollständige Anwendungsmodell um einen Dienst dreht, der versucht, auf die Daten jedes Benutzers zuzugreifen, z. B. die Suche nach Freunden auf okcupid oder nach jemandem, den Sie zu einem Datum einladen können. Infolgedessen ist dieses Modell der Benutzerisolation nicht sehr sinnvoll, da es letztendlich einen Dienst geben sollte, für den Sie eine Anfrage senden, und der alle anderen Daten überprüft, um eine Übereinstimmung für Ihre Anfrage zu finden. Selbst wenn Sie über Benutzer-IDs oder einen Mechanismus zum Isolieren verfügen, müssen Sie dennoch für jeden Benutzer den Zugriff auf den Dienst öffnen.

Bei anderen Diensten wie Google Mail oder Dropbox , die sich viel stärker auf einen bestimmten Benutzer konzentrieren und keine offene Möglichkeit zum Freigeben ihrer Dateien bieten, kann das Isolieren von Benutzern weitere Vorteile bieten. Auf dem Dropbox- Server gibt es beispielsweise eine Benutzer-ID für jeden Dropbox- Client. Und wenn ein Prozess für Sie und ein Prozess für eine andere Person ausgeführt wird, können Sie selbst mit einem böswilligen Exploit nicht auf die Informationen anderer Personen zugreifen.
Lassen Sie uns nun sehen, ob es OKWS wirklich gelungen ist, die Sicherheit in einem solchen Servermodell zu verbessern. Um die Sicherheit zu bewerten, müssen Sie jede Komponente des Systems berücksichtigen und bestimmen, welche Art von Angriffen es beschädigen könnte.

Beginnen wir mit okd . Es kann beispielsweise mit Anfragen über den Browser angegriffen werden, was zu einem Pufferüberlauf führt. c++, , - , okd . ?



: ?

: , , . ?

: , .

: , . , , , http , , , . , .

: ?

: , . , , , , , match.com . , , OkCupid . , - ? ?

: , , okd . , ?

: . , okd .

: , ?

: ! , , , , , . , , , , . , , . «» okd , , , .

: DOS-?

: , , , «» «» , DOS- - .

: okd , , …

: , . , , okd , okd , . okd , . , okd , , , , .

: .

: , . , okd . , oklogd ? ?

: .

: , , , ? pubd , , , - .

: , , «» oklogd .

: , . , , append-only , .

: , …

: , , . .

svc ? , , . , , okd oklogd . , , .

svc - -, , , . , , , .

okld ? , root. ? , . dbproxy . okld ? «»? ?

: , - ?

: , . , , . , , - , , , - . - . root- .

: -, , - dbproxy .

: !

: , , , RPC , , , , , ! .



: , . dbproxy ? , . , «» , dbproxy - .

: , svc

: , svc , !

: , , !

: , , «» , …

: dbproxy .

: . , dbproxy , .

Ich hoffe, Sie verstehen, was uns das Teilen von Anwendungsberechtigungen gibt. Und wie wir sehen können, ist dies nicht perfekt. Es gibt noch viele andere Dinge, die schief gehen können. Es scheint jedoch, dass diese Lösung auf jeden Fall besser ist als das Entwerfen einzelner Anwendungen ohne Zugriffsrechte, mit denen wir begonnen haben.


Die Vollversion des Kurses finden Sie hier .

Vielen Dank für Ihren Aufenthalt bei uns. Gefällt dir unser Artikel? Möchten Sie weitere interessante Materialien sehen? Unterstützen Sie uns, indem Sie eine Bestellung aufgeben oder sie Ihren Freunden empfehlen. Habr-Benutzer erhalten 30% Rabatt auf ein einzigartiges Analogon von Einstiegsservern, das wir für Sie erfunden haben: Die ganze Wahrheit über VPS (KVM) E5-2650 v4 (6 Kerne) 10 GB DDR4 240 GB SSD 1 Gbit / s $ 20 oder wie teilt man den Server? (Optionen sind mit RAID1 und RAID10, bis zu 24 Kernen und bis zu 40 GB DDR4 verfügbar).

Dell R730xd 2 mal günstiger? Nur wir haben 2 x Intel Dodeca-Core Xeon E5-2650v4 128 GB DDR4 6 x 480 GB SSD 1 Gbit / s 100 TV von 249 US-Dollar in den Niederlanden und den USA! Lesen Sie mehr über den Aufbau eines Infrastrukturgebäudes. Klasse mit Dell R730xd E5-2650 v4 Servern für 9.000 Euro für einen Cent?

Source: https://habr.com/ru/post/de418211/


All Articles