Hintergrund
Ich wurde beauftragt, einem Unternehmen bei der Wartung seines Servers zu helfen. Ich arbeite an einigen kleineren PHP-Projekten, beschäftige mich aber auch mit Leistungsproblemen und scanne kürzlich die Protokolle nach Hackern.
Diese Jungs betreiben ihren Server seit einiger Zeit und haben eine Legacy-Anwendung, wie ich sie nennen würde, in den letzten Zügen. Es werden magische Anführungszeichen verwendet, globale Variablen (die $id
überschrieben werden können $_GET['id']
), .htaccess als einzige Sicherheit in einigen Fällen, wie Sie es nennen. Ein Albtraum für Sicherheit und Programmierung.
Wir wurden in der Vergangenheit hauptsächlich mit SQL-Injections gehackt, die SLEEP(99999999)
Befehle ausführen und als DOS-Angriff fungieren. Zum Glück haben sie keine "kleinen Bobbytische" betrieben,
XKCD: http://xkcd.com/327/
Also habe ich ihre anfälligen SQL-Anweisungen von mysql_query()
(nicht von mysqli) auf PDO-Transaktionen umgeschrieben. Ich analysiere auch die Abfragen für SLEEP
und UNION
, die wir nicht verwenden, aber die Injektionen haben. So weit, ist es gut.
Neueste Ausgabe
Kürzlich wurde uns mitgeteilt, dass sich Datensätze in der Datenbank für Benutzer ändern, z. B. deren E-Mail-Adressen zu denen, die vermutlich von Spammern erstellt wurden.
Mir ist aufgefallen, dass ihre Kolumnen keine hatten last_modified
Kolumne hatten, so dass wir nicht einmal wissen konnten, wann sie gewechselt wurden, geschweige denn von wem. Ich habe diese Spalte hinzugefügt, aber das ist kaum ein erster Schritt.
Als ich in diese Tabelle hineinguckte, bemerkte ich, dass die Passwörter weder gesalzen noch gehasht wurden, sondern nur als Klartext gespeichert wurden.
Client-Kommunikation
Wie kann ich als Bauunternehmer mit ihnen über die gesamte Situation sprechen, ohne meine Arme wie ein Verrückter zu bewegen? Irgendein Rat? Ich dachte eine ruhige Annäherung an,
FEHLER 1 Zusammenfassung Warum ist dies ein Problem Was kann passieren, wenn dies nicht behoben ist? Vorgeschlagene Lösung AUSGABE 2 Zusammenfassung Warum ist dies ein Problem Was kann passieren, wenn dies nicht behoben ist? Vorgeschlagene Lösung
Antworten:
Die ruhige Herangehensweise, die Sie vorschlagen, wäre am besten. Weisen Sie darauf hin, dass die meisten Ihrer Benutzer aufgrund der Wiederverwendung von Kennwörtern anfällig für Identitätsdiebstahl sind, wenn diese Daten offengelegt werden. Dies wäre ein guter Zeitpunkt, um darauf hinzuweisen, dass dies dasselbe Problem ist, das auch Target betroffen hat (vorausgesetzt, das Unternehmen ist kein Target). Und Ihr Manager sollte ziemlich empfänglich dafür sein, dies zu ändern.
In Bezug auf die Rechtmäßigkeit der Daten glaube ich nicht, dass Benutzername / Passwort mit CC-Daten, persönlichen Informationen usw. identisch sind. Dies kann jedoch davon abhängen, welche Informationen Sie für Ihre Benutzer haben. Ich bin kein Anwalt, und diese Aspekte sollten am besten in Ihrer Enthüllung zur Sprache gebracht werden.
https://en.wikipedia.org/wiki/Information_privacy_law
Und Sie haben diese XKCD, um Ihnen auch zu helfen:
quelle
Es kommt wirklich auf das Publikum an, in dem Sie sich damit zu nähern versuchen. Ich habe in Unternehmen mit schwerwiegenden Sicherheitsproblemen gearbeitet, von denen Sie behaupten, dass sie es nicht hören wollten, bis ich es ihnen zeigte.
Ein Ansatz, wenn möglich, besteht darin, im Grunde das zusammenzufassen, was Sie vorhaben, und das aufzuzählen, was möglicherweise bereits in diesen Hacks passiert ist. Wenn Ihr Publikum nicht technisch orientiert ist, müssen Sie wahrscheinlich auf die Geschäftskosten hinweisen, die diese Kompromisse mit sich bringen können. Offensichtlich gehackte Konten verringern die Glaubwürdigkeit Ihres Systems und den wahrgenommenen Kundennutzen Ihres Produkts. Ganz zu schweigen von einem kompromittierten System mit Klartextkennwörtern und E-Mail-Adressen für Benutzer, das zu ernsthaften Beeinträchtigungen führen kann.
Das nächste, was Sie tun sollten, wenn es überhaupt möglich ist, ist es zu beweisen. Wenn Sie dieses System in einer Testumgebung aushalten können, tun Sie dies. Zeigen Sie dann vor sich, welche Auswirkungen Sie auf das System von der Clientseite der Anwendung aus haben können. Selbst bei Technikern hat sich das für mich als ziemlich überzeugend erwiesen (obwohl sie in meinen Fällen normalerweise immer noch nicht gehandelt haben).
Natürlich müssen Sie, wie Sie sagten, gegebenenfalls erläutern, welche Maßnahmen ergriffen werden sollten, und eine Schätzung des Aufwands, um dies zu erreichen. Es wird ihnen helfen, die Kosten zu rechtfertigen, obwohl es manche Orte einfach sowieso nicht interessieren. Zumindest kannst du dein Bewusstsein klären und vorwärts gehen, wenn du weißt, dass du es versucht hast.
quelle
Wenn Sie, wie Sie sagen, mit der Wartung des Servers beauftragt wurden, muss dieser Vertrag in der Auftragsbeschreibung Aufgaben wie die Gewährleistung der Integrität, Sicherheit und Verfügbarkeit des Betriebssystems, der Anwendungssoftware und aller Daten usw. enthalten. Wenn es auch nur einen vagen Hinweis gibt, dass der Vertrag erwartet (und Sie dafür verantwortlich macht), dass der Server sicher ist, dann würde ich keine Zeit damit verschwenden, Geschäftsfälle zusammenzustellen und einfach gute Arbeit zu leisten, um sicherzustellen, dass die Probleme behoben werden (unter eine Sicherung davor und danach, wobei ein Versionsverlauf Ihrer Codeänderungen aufbewahrt wird).
Ich würde nicht erwarten, dass eine solche Änderung mehr als einen Morgen Arbeit kostet, und wenn sie fragen, woran Sie Ihre Zeit gearbeitet haben, können Sie ein Tagebuch führen, um Ihre Handlungen zu erklären und zu rechtfertigen. Vorausgesetzt, Sie arbeiten im Rahmen Ihres Vertrags, sollten hier keine Probleme auftreten. Manchmal verursacht es Panik, wenn alle Sicherheitsmaßnahmen vor Entscheidungsträgern verrückt sind, oder im schlimmsten Fall bietet sich ihnen die Gelegenheit, zu behaupten, dass sie sich nicht um diese Probleme kümmern eine Verletzung! Vielleicht ist dies nicht immer der geschäftsfreundlichste Ansatz, aber meine Berufsethik würde es mir nicht erlauben, unverschlüsselte Passwörter in einem System zu hinterlassen, für das ich jemals verantwortlich war, als ich darauf aufmerksam wurde.
Aus persönlicher Erfahrung kann ich feststellen, wann immer ich anfange, für einen neuen Arbeitgeber oder Kunden zu arbeiten. Wenn Sie Szenarien und Erwartungen im Voraus besprechen, kann dies Ihrerseits viel Stress ersparen. Wenn ich Sicherheitsprobleme finde, die ich beheben kann, sind Sie glücklich darüber Ich möchte fortfahren und diese Arbeit abschließen, ohne jedes Mal zu Ihnen zu kommen und Sie nur über vermutete Verstöße / Vorfälle zu benachrichtigen. Sie werden dies fast immer bejahen, weil sie aus ihrer Sicht nicht daran interessiert sind, sich um Sicherheit oder Computer zu kümmern - deshalb haben sie Sie engagiert! Vielleicht beantwortet dies die Frage nicht so, wie Sie es erwartet hatten, aber ich hoffe, es gibt Anlass zum Nachdenken. Ich wünsche Ihnen alles Gute und hoffe, dass das Problem behoben wird!
quelle
Wenn sich die E-Mail-Adresse des Kunden bereits ändert und dies als Problem angesehen wird, ist die Möglichkeit, Kennwörter zu ändern, sicherlich auch ein Problem.
Wenn Sie nun die Datenbank ausreichend gesichert haben, um dies in Zukunft zu verhindern, ist die Wahrscheinlichkeit, dass jemand das Kennwort des Benutzers bearbeiten kann, ähnlich hoch und Sie müssen nur prüfen, ob jemand das Kennwort jetzt lesen kann.
Natürlich sollten Sie die Passwörter sicher verschlüsseln, wenn dies möglich ist oder wenn Sie (im unwahrscheinlichen Fall) die Datenbank nicht vollständig gesichert haben - wie geht das? Stellen Sie es einfach in den gleichen Kontext wie das Problem "Aktualisieren von E-Mail-Adressen". Ob dies eine Änderung der Anwendung erfordert und ob dies ein "zu schwieriges" Problem ist, ist eine andere Frage, die angesprochen werden muss. Sehen Sie sich den Code an und prüfen Sie, wie hoch die Kosten für die Änderung sind, bevor Sie die vorgeschlagene Fehlerbehebung durchführen.
quelle