Es ist wichtig anzumerken, dass das "Spiel" von Angriff und Verteidigung, das von Hackern und Besitzern von Computersystemen gespielt wird, ein unehrliches Spiel ist. Es reicht aus, wenn der Angreifer in das System eindringt und nur einmal gewinnt. Und wer verteidigt, kann nur gewinnen, wenn er immer gewinnt. Die Hauptschwierigkeit besteht darin, zu wissen, worauf Sie achten müssen. Nachdem der Verteidiger jedoch weiß, welche virtuellen „Türen“ ein Hacker in sein System eingeben kann, können diese „Türen“ mit relativ einfachen Mechanismen geschützt werden. Ich glaube, dass die Einfachheit dieser Mechanismen manchmal ihre Bedeutung verringert und der Grund dafür ist, dass viele Verteidiger von Computersystemen diese Mechanismen übersehen.
Hier sind die Grundregeln zum Schutz von Systemen, die ich in diesem Artikel offenlegen werde. Sie sind einfach, aber das bedeutet nicht, dass Sie sie ungestraft vergessen können:
- (multi-factor authentication, MFA) , . Google GitHub, , VPN-. MFA — .
- , .
- , . .
- . , .
In Bezug auf die Verhinderung des Verlusts von Verschlusssachen und die Verhinderung des Auftretens von "Löchern" in Sicherheitssystemen gilt das Pareto-Prinzip , wonach 20% der Bemühungen 80% des Ergebnisses ergeben.
Wie funktionieren Hacker, wenn sie Passwörter und geheime Schlüssel finden? Welche Tools verwenden sie?
Hacker finden geheime Daten in JavaScript-Dateien
API-Schlüssel sind über das Internet verteilt. Jeder kann sie benutzen. Es ist eine Tatsache. Oft gibt es keinen besonderen Grund dafür, dass die Schlüssel öffentlich verfügbar sind. Entwickler vergessen sie einfach überall. Beispielsweise werden Schlüssel aus folgenden Gründen in den Code eingegeben:
- Zum Debuggen.
- Für lokale Entwicklungszwecke.
- In Form von Kommentaren für diejenigen, die das Projekt später unterstützen werden.
Codeblöcke, die den folgenden ähneln, sind im Internet häufig zu finden:
// DEBUG ONLY
// TODO: remove -->
API_KEY=t0psecr3tkey00237948
Obwohl viele Hacker JavaScript-Dateien selbst lesen, suchen sie meistens mit Tools wie meg nach solchen Dateien und überprüfen dann, ob sie passende Muster finden.
Wie machen Sie das? Nach der Verwendung des Scanners scheinen
megsie in den gefundenen Dateien nach Zeichenfolgen zu suchen, die verschiedenen Mustern entsprechen. Derjenige, der erstellt hat meg, hat ein weiteres ausgezeichnetes Programm geschrieben, und genau das ist beabsichtigt. Es heißt gf und ist eine verbesserte Version grep. In diesem Fall kann das Tool mithilfe der gfOption beim Start truffleHogoder in einer anderen Variante des Schreibens trufflehogZeichenfolgen mit hoher Entropie finden, die Schlüssel für die API sind. Gleiches gilt für die ZeichenfolgensucheAPI_KEY... Suchergebnisse für eine solche Zeichenfolge sind oft (zu oft) erfolgreich.
Oft gibt es ganz normale Gründe dafür, dass Schlüssel im Code erscheinen, aber solche Schlüssel sind nicht vor Außenstehenden geschützt. Lassen Sie mich Ihnen ein Beispiel geben. Ein Kunde, mit dem ich zusammengearbeitet habe, hat einen externen Karteninformationsdienst verwendet. Dies geschieht in vielen Projekten. Um Karteninformationen herunterzuladen und damit zu arbeiten, musste die entsprechende API mit einem Schlüssel aufgerufen werden. Mein Client hat jedoch vergessen, den von ihm verwendeten Dienst zu konfigurieren, um die Quellen einzuschränken, von denen der Dienst mit diesem bestimmten Schlüssel Anforderungen empfangen kann. Es ist nicht schwer, sich einen einfachen Angriff vorzustellen, der darin besteht, das Ressourcennutzungskontingent eines Kartendienstes zu verringern, indem viele Anforderungen an ihn gesendet werden. Dies kann den Benutzer eines solchen Dienstes viel Geld kosten. Oder,Noch "besser" (aus Sicht des Angreifers) kann ein solcher Angriff dazu führen, dass die Teile des Kundenprojekts, die an Karten gebunden sind, einfach "fallen".
JS-Dateien werden von Hackern nicht nur zum Auffinden geheimer Daten verwendet. Schließlich sind solche Dateien der Code Ihrer Anwendung, der von jedem gesehen werden kann, der an diesem Code interessiert ist. Ein guter Hacker kann nach sorgfältigem Lesen des Codes den darin verwendeten Ansatz zur Benennung von Entitäten verstehen, die Pfade zur API herausfinden und wertvolle Kommentare finden. Ergebnisse wie diese werden als Liste von Wörtern formatiert, die an automatische Scanner übergeben werden. Dies wird als "intelligenter automatisierter Scan" bezeichnet, bei dem ein Hacker automatisierte Tools und die Informationen kombiniert, die er über ein bestimmtes Projekt gesammelt hat.
Hier ist ein echter Kommentar von der Homepage eines Projekts, der im Klartext über unsichere APIs spricht, von denen jeder Daten abrufen kann:
/* Debug ->
domain.com/api/v3 not yet in production
and therefore not using auth guards yet
use only for debugging purposes until approved */
»Was ist zu tun?
- . . , , .
- API. , . , .
- , , . , , , , , , . , .
- , . . , .
grepgf. . , , . - -. , - . 100% . - — .
, -
Das Internetarchiv (auch als "Wayback Machine" bekannt) speichert regelmäßig Schnappschüsse von Websites. Mit diesem Projekt können Sie sehen, wie das Internet vor vielen Jahren war. Die Archivdaten sind für Hacker von großem Interesse, die Informationen über ein bestimmtes Projekt sammeln müssen. Sie können Dateien mit Tools wie waybackurls (basierend auf waybackurls.py ) nach alten Varianten von Websites durchsuchen . Dies bedeutet, dass Hacker diesen Schlüssel in der alten Version der Site finden und diesen Schlüssel zum Hacken des Systems verwenden können, selbst wenn Sie einen Schlüssel im Site-Code gefunden und von dort entfernt, die Schlüssel jedoch nicht gedreht haben.
Folgendes tun, wenn Sie einen Schlüssel finden, der nicht vorhanden sein sollte:
- Erstellen Sie einen Schlüssel, der den gefährdeten Schlüssel ersetzen soll.
- Geben Sie eine neue Version des Codes frei, der den neuen Schlüssel verwendet. Dieser Code sollte so umgeschrieben werden, dass keine Zeilen enthalten sind, die die Identifizierung des Schlüssels erleichtern.
- Entfernen oder deaktivieren Sie den alten Schlüssel.
▍ Das Internetarchiv ist nicht der einzige Ort, an dem Schlüssel gefunden werden
Der alte Code bietet Angreifern eine Vielzahl von Informationen, die sie interessieren.
- Geheime API-Pfade. Wir sprechen von ungesicherten API-Endpunkten, von denen der Entwickler dachte, dass sie niemals geteilt werden würden. Während die Pfade, die ein Hacker entdeckt, für ihn möglicherweise nicht nützlich sind, können diese Pfade zum Verständnis des Entwurfs der Projekt-API und ihrer API-Konventionen beitragen. Nachdem der Site-Code in Produktion gegangen ist, hat der Entwickler keine Möglichkeit, diesen Code vor neugierigen Blicken zu verbergen. Es ist sehr wichtig, sich daran zu erinnern.
- -. , API, . , . , , . , -. , , . , , . ,
shttps.
GitHub
GitHub ist eine Goldmine für Hacker. Wenn Sie wissen, wo Sie suchen müssen, können Sie mit einfachen Suchwerkzeugen viele interessante Dinge finden. Wenn das GitHub-Konto Ihres Unternehmens nicht durch eine Multi-Faktor-Authentifizierung geschützt ist, sind alle Mitarbeiter des Unternehmens ausnahmslos Sicherheitslücken. Es ist durchaus möglich, dass einige Mitarbeiter überall dasselbe Passwort verwenden und dass ihnen dieses Passwort bereits über ein anderes System gestohlen wurde. Ein Hacker, der an einer bestimmten Organisation interessiert ist, kann die Suche nach kompromittierten Passwörtern leicht automatisieren, aber was soll ich sagen, er kann solche Passwörter manuell finden.
Die Mitarbeiterliste eines Unternehmens kann mithilfe von Open Source Intelligence (OSINT) -Techniken erstellt werden. LinkedIn oder eine öffentliche Liste von Mitarbeitern des Unternehmens von GitHub können dem Angreifer dabei helfen.
Wenn sich zum Beispiel jemand dazu entschlossen hat, Tesla zu hacken, kann er von dieser Seite aus das Unternehmen studieren:
https://api.github.com/orgs/teslamotors/members
Und selbst wenn ein Unternehmen GitHub nicht als Git-Plattform verwendet, gibt es auf GitHub immer noch etwas Wertvolles zu finden. Es reicht aus, dass diese Plattform von mindestens einem Mitarbeiter des Unternehmens beispielsweise für ein Heimprojekt genutzt wird. Wenn im Code dieses Projekts (oder in der Git-Historie) etwas Geheimnisvolles über ein Unternehmen erscheint, reicht dies aus, um in die Systeme dieses Unternehmens einzudringen.
Es liegt in der Natur von git, den vollständigen Verlauf der an jedem Projekt vorgenommenen Änderungen im Auge zu behalten. In Anbetracht von Sicherheitsproblemen spielt diese Tatsache eine große Rolle. Mit anderen Worten, jede Änderung am Code durch jeden, der Zugriff auf eines der Systeme einer Organisation hat, gefährdet diese Organisation.
»Warum passiert das?
- Unternehmen überprüfen ihre Systeme nicht auf Schwachstellen.
- , , .
- , , ( , , 1%), ( — git, , , ).
- , . .
▍ GitHub
Es gibt so etwas wie "Dorks" - spezielle Suchanfragen, die unterschiedliche Funktionen von Suchmaschinen verwenden, um herauszufinden, was mit bestimmten Daten zusammenhängt. Hier ist eine interessante Liste ähnlicher Suchanfragen für Google von Exploit-db.com.
Wenn Sie tiefer in dieses Thema eintauchen möchten, und ich empfehle dies, bevor Sie eine kurze Liste der Zeichenfolgen erhalten, die zum Suchen von Schlüsseln und Kennwörtern auf GitHub verwendet werden, empfehle ich Ihnen, dieses wertvolle Material zu lesen , das von einem talentierten System-Sicherheitsforscher geschrieben wurde. Er spricht darüber, wie, was und wo auf GitHub gesucht werden soll, wie Dorken verwendet werden sollen, und erläutert ausführlich den manuellen Prozess des Findens geheimer Daten.
Die auf GitHub verwendeten Straßen sind nicht so komplex wie die bei Google verwendeten. Der Punkt ist, dass GitHub dem Nutzer einfach nicht die gleichen erweiterten Suchfunktionen bietet wie Google. Unabhängig davon kann eine ordnungsgemäße Suche in den GitHub-Repositorys Wunder wirken. Versuchen Sie, in dem Repository, an dem Sie interessiert sind, nach den folgenden Zeilen zu suchen:
password
dbpassword
dbuser
access_key
secret_access_key
bucket_password
redis_password
root_password
Wenn Sie versuchen, mithilfe von Abfragen wie
filename:.npmrc _authoder nach bestimmten Dateien zu suchen filename:.htpasswd, können Sie die Suchergebnisse nach Arten von Datenlecks filtern. Hier ist ein weiteres gutes Stück zu diesem Thema.
▍Risikominderungsmaßnahmen im Zusammenhang mit GitHub
- Machen Sie das Scannen Ihres Codes auf Schwachstellen zu einem Teil des CI-Prozesses. Das hervorragende GitRob- Tool kann Ihnen dabei helfen .
- . GitRob . ,
no-expand-orgs. - . GitRob, , 500 , ,
-commit-depth <#number>. - GitHub !
- , , , , . G Suite Active Directory. , .
Nach der Veröffentlichung dieses Materials machten einige seiner Leser wertvolle Kommentare zur Komplexität von Passwörtern und ihrer Rotation sowie zur Verwendung des Hardwareschutzes von Informationen.
Hier sind die Kommentare von @ codemouse92 :
Verwenden Sie komplexe und eindeutige Kennwörter überall dort, wo die Kennwortanmeldung verwendet wird. Beachten Sie jedoch, dass ein komplexes Passwort nicht unbedingt ein mysteriöses Durcheinander von Buchstaben, Zahlen und Sonderzeichen ist. Die beste Strategie besteht jetzt darin, lange Phrasen als Passwörter zu verwenden. Ich möchte eine Anmerkung zu Passwort-Managern machen. Es lohnt sich auf jeden Fall, solche Programme zu verwenden, aber es ist immer noch besser, Passwörter zu verwenden. Dies sind Sätze, an die sich Benutzer erinnern und die sie selbst eingeben können.
Folgendes sagt Benutzer @corymcdonald :
Wo ich arbeite, erhält jeder Hardware zur Multifaktorauthentifizierung. Jeder hat 2 YubiKey-Geräte. Darüber hinaus verwendet jedes Team den 1Password-Passwort-Manager und jedes Team verfügt über einen eigenen Passwortspeicher. Wenn ein Mitarbeiter das Unternehmen verlässt, dreht das Support-Team Kennwörter in jedem Tresor, auf den der Mitarbeiter Zugriff hatte. Persönlich habe ich zum Beispiel einen unverzeihlichen Fehler gemacht, indem ich Schlüssel hochgeladen habe, um auf AWS auf GitHub zuzugreifen. Es wird empfohlen, dass Sie Materialien vor dem Festschreiben mit Git-Geheimnissen überprüfen . Dadurch wird verhindert, dass Verschlusssachen weitergegeben werden.
Hacker nutzen Google
Nachdem wir ein grundlegendes Verständnis der Dorken haben, können wir über die Verwendung spezifischer Suchanfragen bei Google sprechen. Hier finden Sie mit ihrer Hilfe unglaubliche Dinge. Google ist eine leistungsstarke Suchmaschine, mit der Sie Abfragen erstellen können, die Zeichenfolgen beschreiben, die in den gesuchten Daten vorhanden sein sollten und nicht. Mit Google können Sie unter anderem nach Dateien mit bestimmten Erweiterungen suchen und nach bestimmten Domains anhand der URL suchen. Sehen Sie sich die folgende Suchzeichenfolge an:
"MySQL_ROOT_PASSWORD:" "docker-compose" ext:yml
Diese Zeichenfolge dient zur Suche nach Dateien mit der Erweiterung
yml. Außerdem sollten dies Dateien sein, docker-composein denen Entwickler häufig Kennwörter speichern. Nicht besonders eindeutige Passwörter. Versuchen Sie, eine Google-Suche nach dieser Zeichenfolge durchzuführen. Sie werden überrascht sein, was Sie finden.
Andere interessante Suchzeichenfolgen suchen möglicherweise nach RSA-Schlüsseln oder AWS-Anmeldeinformationen. Hier ist ein weiteres Beispiel:
"-----BEGIN RSA PRIVATE KEY-----" ext:key
Hier eröffnen sich uns endlose Möglichkeiten. Die Qualität der Suche hängt nur von der Kreativität des Forschers ab und davon, wie gut er mit verschiedenen Systemen vertraut ist. Hier ist eine große Liste von Google Dorks, wenn Sie experimentieren möchten.
Hacker hinterfragen die Systeme, an denen sie interessiert sind
Wenn ein Sicherheitsforscher (oder ein motivierter Hacker) sehr an einem bestimmten System interessiert ist, beginnt er, das System eingehend zu untersuchen. Er lernt sie genau kennen. Er interessiert sich für API-Endpunkte, Namenskonventionen für Entitäten, Merkmale der Interaktion interner Systemteile und den Zugriff auf verschiedene Versionen des Systems, wenn verschiedene Versionen gleichzeitig verwendet werden.
Ein nicht so guter Ansatz zum Sichern von APIs besteht darin, die Zugriffspfade zu komplizieren und sie mithilfe eines Zufallszeichengenerators auszublenden. Dies ist kein Ersatz für echte Sicherheitsmechanismen. Sicherheitsforscher versuchen, ungesicherte Zugriffspfade zu Systemen und API-Endpunkten zu finden, indem sie beispielsweise Tools für die "Fuzzy" -Suche nach Schwachstellen verwenden. Solche Tools verwenden Wortlisten, erstellen daraus Pfade und testen diese Pfade, indem sie die Antworten analysieren, die sie erhalten, wenn sie versuchen, auf sie zuzugreifen. Ein solcher Scanner findet keinen Endpunkt, dessen Pfad durch einen völlig zufälligen Zeichensatz dargestellt wird. Solche Tools eignen sich jedoch hervorragend zum Identifizieren von Mustern und zum Auffinden von Endpunkten, die die Besitzer des Systems entweder vergessen haben oder von denen sie nie etwas gewusst haben.
Denken Sie daran, dass "Sicherheit durch Dunkelheit" nicht der beste Weg ist, um Systeme zu schützen (obwohl Sie dies nicht vollständig ignorieren sollten).
Hier helfen die GitHub-Dorken, über die wir oben gesprochen haben, Cyberkriminellen. Zu wissen, welche Regeln beim Erstellen von Pfaden zu den Endpunkten des Systems verwendet werden (z. B. so etwas
api.mydomain.com/v1/payments/...), kann für einen Hacker eine immense Hilfe sein. Wenn Sie das GitHub-Repository des Unternehmens (und die Repositorys seiner Mitarbeiter) nach API-bezogenen Zeichenfolgen durchsuchen, werden häufig Pfade gefunden, die zufällige Zeichen enthalten.
"Zufällige Zeichenketten" haben jedoch ihren Platz in Systemen. Ihre Verwendung ist immer besser als die Verwendung von Sequenzen aus Ressourcenkennungen, Zeichenfolgen wie
usersund in den Pfaden zur API orders.
Hier ist das fantastische SecLists-Repository, das viele Zeichenfolgen enthält, die beim Benennen von Entitäten verwendet werden. Es wird von fast jedem in der Datenschutzbranche verwendet. Oft werden diese Materialien für ein bestimmtes System modifiziert. Ein weiteres Tool, mit dem "verschlüsselte" Pfade gefunden werden können, ist FFuf , ein extrem schnelles Fuzzy-Logik-Programm, das in Go geschrieben wurde.
Ergebnis
Sicherheitsprobleme werden bei Startups häufig übersehen. Programmierer und Manager priorisieren normalerweise die Entwicklungsgeschwindigkeit und -häufigkeit von Produktfreigaben, wodurch Qualität und Sicherheit beeinträchtigt werden. Hier sehen wir die Aufnahme geheimer Informationen in den Code, der in die Repositorys gelangt, die Verwendung derselben Schlüssel an verschiedenen Stellen im System und die Verwendung von Zugriffsschlüsseln, an denen Sie etwas anderes verwenden können. Manchmal scheint es so, als ob Sie mit so etwas die Arbeit am Projekt beschleunigen können, aber im Laufe der Zeit kann dies zu sehr schlimmen Konsequenzen führen.
In diesem Beitrag habe ich versucht, Ihnen zu zeigen, wie Zeichenfolgen, die durch das Speichern in einem privaten Repository geschützt zu sein scheinen, leicht öffentlich werden können. Gleiches gilt für einen Klon eines Repositorys, der von einem wohlmeinenden Mitarbeiter erstellt wurde und nicht für neugierige Blicke gedacht ist, sich jedoch als öffentlich herausstellte. Sie können jedoch eine Grundlage für einen sicheren Betrieb schaffen, indem Sie ein Tool zur sicheren Kennwortfreigabe verwenden , ein zentrales Repository mit Geheimnissen verwenden, Kennwortsicherheitsrichtlinien konfigurieren und die Multi-Faktor-Authentifizierung durchführen. Dies ermöglicht es, ohne die Sicherheit zu ignorieren, die Arbeitsgeschwindigkeit am Projekt nicht zu verlangsamen.
Wenn es um den Schutz von Informationen geht, funktioniert die Idee, dass Geschwindigkeit das Wichtigste ist, hier nicht sehr gut.
Das Erlernen der Funktionsweise von Hackern ist normalerweise ein sehr guter erster Schritt, um zu verstehen, was Informationssicherheit ist. Dies ist der erste Schritt zur Sicherung von Systemen. Berücksichtigen Sie beim Sichern von Systemen die oben genannten Methoden, um sie zu durchdringen, und die Tatsache, dass Hacker einen relativ begrenzten Satz solcher Methoden verwenden. Aus Sicherheitsgründen wird empfohlen, absolut alles zu berücksichtigen, was auf die eine oder andere Weise mit einem bestimmten System zusammenhängt, unabhängig davon, ob es sich um externe oder interne Mechanismen handelt.
Systemsicherheit kann manchmal als nicht sehr wichtig, aber zeitaufwändig und hektisch empfunden werden. Aber seien Sie versichert, die einfachen Schritte, die Sie zur Sicherung Ihrer Systeme unternehmen, können Ihnen viel Ärger ersparen.
Wie schützen Sie Ihre Systeme?
