Wie würde also jemand Coins von meiner Seite stehlen?

Fast jeder Angriff, von dem ich je gelesen habe, war auf die eine oder andere Weise mit einer schlechten Website-Codierung verbunden. So wie dieser Angriff auf die Doge-Wallet-Site im Dezember, wo sie angeblich die Website injizierten und durch eine Eigenart in Apache eindrangen, um den Quellcode zu ändern, was es den angeblichen Gaunern ermöglichte, angeblich das Ziel der Transaktionen zu ändern, indem sie eine Variable ersetzten mit einer fest codierten Adresse, die zu ihrer Brieftasche führte – wodurch neue Transaktionen und Abhebungen gestohlen wurden. Bei den meisten anderen Angriffen auf Websites, die Wallets auf dem Server speichern, von denen ich gelesen habe, war es dasselbe oder ähnliches.

Daher ist es sehr wichtig, eine sichere mehrschichtige Website zu codieren. Ich muss auf Injection-Angriffe, Apache-Berechtigungsprobleme und offene Ports und all die üblichen Dinge achten, auf die ich auf einer Website achten würde, auf der Geld den Besitzer wechselt. Habe es.

Aber ist es immer schlechte Website-Codierung, die dazu führt, dass Website-Eigentümer Geld verlieren? Gibt es irgendetwas, was ein potenzieller Vandale oder Cracker tun kann, um meine Website auf andere Weise zu kompromittieren? Gibt es außerdem irgendwo ein Whitepaper zum sicheren Aufbau von Websites, die mit dem Bitcoin-Protokoll ausgestattet sind?

Vielen Dank im Voraus für Ihre Zeit.

Antworten (3)

Sie sollten davon ausgehen, dass Ihre Website gehackt wird, und dies im Hinterkopf behalten.

Dinge auf "schlechte Codierung" zu schieben, ist ein Ausweg. Es wird immer Bugs geben. Sie müssen sicher sein, dass Ihre Verfahren, Ihre Protokolle trotz dieser Fehler fehlerfrei sind.

Die Mehrheit der Bitcoins sollte sich im Offline-Speicher befinden, und Ihre Hot Wallet sollte sich auf einem eigenen dedizierten Server befinden, mit Zugriff über eine Art sehr eingeschränkte API, die Plausibilitätsprüfungen und Ratenbegrenzungen für alles durchführt. (Der Zugriff könnte über einen benutzerdefinierten und sehr sorgfältig geschriebenen Daemon erfolgen, dh nicht nur über eine Apache-HTTP-API mit zugehörigen Schwachstellen!)

Im Idealfall besitzt der Benutzer einen Verschlüsselungsschlüssel, der verwendet wird, um Transaktionen auf der Client-Seite irgendwie zu signieren (oder jede andere Aktion, die er durchführt), die auf sein Konto oder die Hot Wallet angewendet werden.

Selbst dann könnte ein Hacker vermutlich die Bereitstellung Ihrer Seiten entführen, die Krypto modifizieren usw., um ihren Schlüssel zu stehlen. Aber zumindest wenn der Schlüssel des Benutzers nur einmal generiert wurde und nur gelegentlich von ihm verwendet wird, wird die Chance auf massiven Diebstahl reduziert. Zwei-Faktor-Authentifizierung kann auch helfen.

Sie könnten Daemons auf anderen versteckten Servern haben, die Ihre Site und ihre Ressourcen regelmäßig auf Manipulationen überprüfen und bei Bedarf alles aussetzen. Veröffentlichen Sie möglicherweise ein Browser-Add-on, das Ihre Website überprüft. Ihre gesamte Website könnte signiert werden, und das Add-on könnte eine neue Signatur anfordern, um Änderungen zu überprüfen. (Und Sie führen diese Signierung offline durch). Solange der Browser des Benutzers oder das Add-On-Publishing-System nicht kompromittiert wird, ist alles in Ordnung ;)

Um das alles zusammenzufassen:

  • clientseitige Verschlüsselung/Autorisierung aller Aktionen, die ein Benutzer durchführen kann
  • Dies tunnelt einfach durch die schrecklich unsichere WWW/Apache-Schicht usw. zu einem hochsicheren "Hot Wallet"-Server mit sehr begrenztem Zugriff
  • eine Möglichkeit, zu überprüfen, ob die clientseitige Verschlüsselung nicht gefährdet ist, z. B. Watchdogs, die auf IPs ausgeführt werden, die Angreifern unbekannt sind
  • (und viele andere Wachhunde überall, die den Dienst beim geringsten Anlass zur Sorge einstellen)

Wenn Sie all dies tun, wird Ihr Hosting-Provider durch Social Engineering kompromittiert.

Am Ende des Tages, alles gesagt und getan, wird Ihr effektivster Schutz die Offline-Cold-Wallet mit manuellen (und langsamen und lästigen) Überweisungen von Kundengeldern und regelmäßigen Audits sein, um zu überprüfen, ob alle Gelder tatsächlich vorhanden sind (mtgox lol).

Übrigens, dies wurde von jemandem ohne Sicherheitshintergrund geschrieben, stellen Sie sich vor, was jemand mit einem solchen Hintergrund schreiben könnte;)

Letzter Punkt: Wenn Sie daran denken, einen Wallet-Service zu betreiben, tun Sie es nicht. Einfach nicht. Gib jetzt auf. Es wird in Tränen und Morddrohungen enden.

Es gibt zwei Dinge, die ein Hacker versuchen kann, an Ihre Coins zu kommen. Erstens ist es eine Schwachstelle in Ihrem Code und zweitens, Ihren Server brutal zu erzwingen, um Zugriff zu erhalten. In den meisten Fällen werden PHP-Schwachstellen gefunden, wenn sie sich auf der Website auswirken, weil jeder Programmierer denkt, dass sein Code sicher genug ist, um gehackt zu werden. Unter diesen beiden ist PHP leichter zu kompromittieren (ich sage nicht, dass PHP nicht sicher ist). Ich schlage vor, dass Sie Leute (wenn Sie einen Sicherheitsexperten oder Hacker kennen) bitten, in den Code einzudringen und zu versuchen, eine Schwachstelle zu finden, oder Sie können dafür ein Kopfgeld aussetzen.

Rechts. Ich kenne mich mit Sicherheit ziemlich gut aus, aber Sie haben vollkommen recht. Ein zweites und drittes Paar Augen sind toll! Ich lade einige lokale Freunde, die im Sicherheitsbereich arbeiten, zu einem Wochenend-Hackathon ein, bevor die Seite startet. Wir werden Pizza essen und jede erdenkliche Attacke gegen das Ding ausführen. Ich will nur nicht wie ein Idiot dastehen, falls mir vorher noch etwas einfällt, was ich nicht im Griff habe. Und ich will sicher nicht im Nachhinein gegoxt werden.
Ich wünsche Ihnen viel Glück mit Ihrer Website und empfehle Ihnen, nicht alle Bitcoins auf dem Server zu halten. Wenn Sie gehackt werden, bedeutet das, dass Sie wachsen :P

Beim Entwerfen eines Sicherheitssystems müssen Sie sich zunächst für das erforderliche Sicherheitsniveau entscheiden. Welches Sicherheitsniveau suchen Sie? Wie viele $/Coin werden dadurch geschützt? Vor welchen Angriffen schützen Sie sich?

Es gibt High-End-Geräte, die sich selbst zerstören, wenn Manipulationen oder Angriffe erkannt werden, die von der Bankenbranche und anderen Orten verwendet werden, an denen Schlüssel gesichert werden müssen. Wenn Sie eine große Website erstellen, sollten Sie diese Option unbedingt in Betracht ziehen. Als Beispiel verwendet Apple HSMs (Hardware Security Modules) zum Sichern seiner Benutzerschlüssel für Nachrichtendienste.

Wenn Sie Bedenken hinsichtlich PHP oder Skriptsprachen im Allgemeinen haben, verwenden Sie eine kompilierte Sprache für den sicheren Teil der Website. Trennen Sie den sicheren Teil vom benutzerseitigen Teil der Website. Durch die Aufteilung des Sicherheitsteils in einen in sich abgeschlossenen Abschnitt wird der eigentliche Sicherheitsteil kleiner und somit leichter zu überprüfen. Reduzieren Sie auch die Schnittstelle auf den sicheren Teil und validieren Sie alle Eingaben. Sie möchten nicht, dass der sichere Code mit der gesamten Website vermischt wird.

Als ich Sicherheitsprodukte für den Massenmarkt entwarf, bezahlte ich einen hochrangigen Sicherheitsexperten, um mein Design und meine Implementierung zu überprüfen. Seine ersten Fragen entsprachen dem, was ich oben gestellt hatte, und mehr. Die Kosten betrugen etwa 2.000 US-Dollar pro Tag.

Achten Sie auf die Antwort von @user18443.