SCW アイコン
ヒーロー背景(区切りなし)
ブログ

Programmierer erobern die Sicherheit: Serie „Teilen und Lernen“ — NoSQL Injection

Jaap Karan Singh
2018年12月20日 掲載
最終更新日: 2026年3月9日

NoSQL-Datenbanken sind wird immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, insbesondere angesichts der Tatsache, dass Entwicklungsteams mit zunehmend agilen Methoden arbeiten.

Entwickler brauchen Zeit, um Sicherheitslücken und andere Herausforderungen in neuen Technologien zu beheben. Erst wenn es einige Zeit in Produktionsanwendungen eingesetzt wurde, treten Probleme an die Oberfläche.

NoSQL-Datenbanken sind ähnlich. Es gibt wichtige Risiken, derer sich Entwickler bewusst sein sollten, damit sie ihre Anwendungen schützen können. Ein solches Risiko ist die NoSQL-Injektion.

Schauen wir uns an, was eine NoSQL-Injektion ist, welchen Schaden sie anrichten kann und wie sie behoben werden kann:

NoSQL Injection verstehen

NoSQL-Injection wird durch viele der gleichen Injection-Schwachstellen wie XML oder SQL-Injektion.

NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzufügen. Dadurch können sie Daten stehlen und sogar Änderungen an der Datenbank vornehmen, wenn ihre Rechte hoch genug sind.

Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, übernehmen diese Ausdrücke oft Funktionen oder verfügen über eingebaute Operatoren, die manipuliert werden können, um Daten zu stehlen oder zu ändern. Und wenn so etwas mit böswilliger Absicht ausgeführt wird, können die Folgen gravierend sein.

MongoDB-Datenbanken sind einer der beliebtesten Spielplätze, um diese Sicherheitsanfälligkeit auszunutzen. „$ne: „" 'ist der Operator, der 1=1 in der SQL-Welt entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne:"“ 'in die Felder für Benutzername und Passwort einer Benutzeroberfläche einfügen. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen der Benutzername und das Passwort keiner leeren Zeichenfolge entsprechen. Mit anderen Worten: alle. Huch.

Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers darin stehlen. Dazu gehören der Benutzername und die Passwörter des Administrators, sodass dieser Zugriff auf die gesamte Datenbank hat.

Angreifer versuchen oft, Werte weiterzugeben, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzuschleusen, die auf Funktionen festgelegt sind.

MongoDB verwendet beispielsweise eine Suchfunktion, die ein Objekt mit einer Eigenschaft namens $where akzeptiert. Die Eigenschaft $where ist auf eine Funktion gesetzt, die als wahr oder falsch ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise geändert wird, lauert dort wahrscheinlich eine NoSQL-Injektion.

Einen ausführlichen Einblick in die Feinheiten der NoSQL-Injektion finden Sie hier InfoQ-Artikel.

Erfahren Sie, warum NoSQL Injection gefährlich ist

NoSQL-Injection ist vor allem deshalb gefährlich, weil sie von der Sicherheitsgemeinschaft noch nicht die Prüfung erhalten hat, die sie verdient.

Die Auswirkungen der NoSQL-Injection sind weitgehend dieselben wie bei der herkömmlichen SQL-Injection. Daten können gestohlen oder geändert werden, Konten können durch Datendiebstahl gefährdet werden, und, was vielleicht am schlimmsten ist, Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.

Unter dem Strich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „Kein SQL“ bedeutet nicht, dass es keine Injektionen gibt.
Zum Glück nehmen es einige in der Community zur Kenntnis und das Wort verbreiten. Immer mehr Entwickler müssen sich weiterbilden, damit sie ihre Apps vor wenig bekannten Gefahren schützen können, die zu großen Kopfschmerzen führen können, wenn sie ausgenutzt werden.

Besiegen Sie NoSQL Injection

Die NoSQL-Injektion kann schwer zu besiegen sein. Leider gibt es nicht die Möglichkeit parametrisierter Abfragen wie bei der SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt ein paar Möglichkeiten, dir zu helfen:

  • Fuzzers können als eine Methode zur Erkennung von Sicherheitslücken verwendet werden. Obwohl, wie es bei vielen Dingen im Leben der Fall ist, der einfachste Ansatz der effektivste sein kann. Hier ist der gute alte Code-Review dein stärkster Verbündeter.
  • Achten Sie beim Überprüfen des Codes auf mögliche Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie nicht, dass Benutzereingaben Ihre Abfragen ändern.
  • Stellen Sie sicher, dass Sie Benutzereingaben in die richtige Klasse umwandeln. Wenn es sich um eine Zahl handelt, wandeln Sie sie in eine Zahl um, wenn es sich um eine Zeichenfolge handelt, wandeln Sie sie in eine Zeichenfolge um und so weiter.
  • Verwenden Sie niemals $where oder ähnliche eval-Funktionen zusammen mit Benutzereingaben. In den meisten Fällen können Sie das Problem umgehen, indem Sie das Datenmodell oder Schema ändern.
  • Versuchen Sie es mit Mungo als dein MongoDB-Treiber. Mit Mongoose können Sie ein Schema für Ihre NoSQL-Datenbank definieren. Wenn du sag Mongoose, dass deine Eingaben Zeichenketten sind, sie werden in Saiten geworfen. Alle von einem Angreifer übergebenen Objekte werden also nicht als Objekte, sondern als Zeichenketten behandelt.
  • Verhärte deine DB! Erstellen Sie Benutzerkonten mit geringen Rechten, maximieren Sie die Ausführungszeit für Abfragen und halten Sie sich stets an die bewährten Sicherheitsmethoden, die für Ihr Unternehmen gelten.

Ein Nachteil der Benutzerfreundlichkeit von NoSQL-Datenbanken ist die Tendenz der Entwickler, sie abzulegen und sie zu verwenden, ohne an Sicherheit zu denken.

Es ist wichtig, dass Sie sich die Zeit nehmen, um zu lernen, wie Sie eine NoSQL-Datenbank sicher einrichten und sich vor NoSQL-Injektionen schützen können.

Zum Beispiel MongoDB Enterprise Ausgabe verfügt über erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Die Durchsetzung der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Sicherheitslücke in Ihrer Anwendung findet.

Zusammenfassend haben wir Folgendes:

  • Bereinigen Sie Ihre Eingabe, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
  • Benutze Treiber, die dir weiterhelfen, wie Mongoose
  • Führen Sie Code-Reviews durch, bei denen speziell untersucht wird, wie Eingabedaten in Abfragen verwendet werden
  • Verwenden Sie Fuzzer und Scanner, um Sicherheitslücken in Ihrem Code zu finden.

NoSQL ist nicht No Injections

NoSQL-Datenbanken werden aufgrund ihrer skalierbaren Funktionen und ihrer Geschwindigkeit bei der Einrichtung immer beliebter. Die Neuheit der Technologie kann Entwickler dazu veranlassen, NoSQL-Datenbanken zu verwenden, ohne darüber nachzudenken, wie sie gesichert werden können.

NoSQL-Datenbanken können genauso anfällig für Injektionsangriffe sein wie SQL-Datenbanken. Seien Sie also vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, schauen Sie sich unsere an Ressourcen zum Lernen oder testen Sie Ihre Fähigkeiten mit unserem kostenlose Demo.

Bereiten Sie sich im Voraus vor und Sie müssen sich keine Gedanken über NoSQL-Injektionen in Ihren Anwendungen machen. Zu einfach!

Denken Sie, Sie sind bereit, NoSQL-Injection jetzt zu lokalisieren, zu identifizieren und zu reparieren? Betritt die Secure-Code-Arena, Krieger:

Und das ist ein Abschluss für 2018! Dies wird unser letzter Beitrag für das Jahr sein, aber wir melden uns am 10. Januar 2019 mit dem nächsten Coders Conquer Security Guide zurück. Bis bald!

リソースを表示
リソースを表示

NoSQL-Datenbanken werden immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, aber mit zunehmender Nutzung kommen unweigerlich weitere Sicherheitslücken zum Vorschein.

もっと知りたいですか?

Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

もっと詳しく

Secure Code Warrior 、ソフトウェア開発サイクル全体を通じてコードの安全性を確保し、サイバーセキュリティを最優先とする文化を構築するため、貴社をSecure Code Warrior 。アプリセキュリティ管理者、開発者、CISO、あるいはセキュリティに関わるあらゆる立場の方々に対し、当社が貴社のビジネスにおける不安全なコードに関連するリスクの低減を支援します。

デモを予約する
共有する:
リンクトインのブランドソーシャルx ロゴ
著者
Jaap Karan Singh
2018年12月20日発行

Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

共有する:
リンクトインのブランドソーシャルx ロゴ

NoSQL-Datenbanken sind wird immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, insbesondere angesichts der Tatsache, dass Entwicklungsteams mit zunehmend agilen Methoden arbeiten.

Entwickler brauchen Zeit, um Sicherheitslücken und andere Herausforderungen in neuen Technologien zu beheben. Erst wenn es einige Zeit in Produktionsanwendungen eingesetzt wurde, treten Probleme an die Oberfläche.

NoSQL-Datenbanken sind ähnlich. Es gibt wichtige Risiken, derer sich Entwickler bewusst sein sollten, damit sie ihre Anwendungen schützen können. Ein solches Risiko ist die NoSQL-Injektion.

Schauen wir uns an, was eine NoSQL-Injektion ist, welchen Schaden sie anrichten kann und wie sie behoben werden kann:

NoSQL Injection verstehen

NoSQL-Injection wird durch viele der gleichen Injection-Schwachstellen wie XML oder SQL-Injektion.

NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzufügen. Dadurch können sie Daten stehlen und sogar Änderungen an der Datenbank vornehmen, wenn ihre Rechte hoch genug sind.

Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, übernehmen diese Ausdrücke oft Funktionen oder verfügen über eingebaute Operatoren, die manipuliert werden können, um Daten zu stehlen oder zu ändern. Und wenn so etwas mit böswilliger Absicht ausgeführt wird, können die Folgen gravierend sein.

MongoDB-Datenbanken sind einer der beliebtesten Spielplätze, um diese Sicherheitsanfälligkeit auszunutzen. „$ne: „" 'ist der Operator, der 1=1 in der SQL-Welt entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne:"“ 'in die Felder für Benutzername und Passwort einer Benutzeroberfläche einfügen. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen der Benutzername und das Passwort keiner leeren Zeichenfolge entsprechen. Mit anderen Worten: alle. Huch.

Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers darin stehlen. Dazu gehören der Benutzername und die Passwörter des Administrators, sodass dieser Zugriff auf die gesamte Datenbank hat.

Angreifer versuchen oft, Werte weiterzugeben, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzuschleusen, die auf Funktionen festgelegt sind.

MongoDB verwendet beispielsweise eine Suchfunktion, die ein Objekt mit einer Eigenschaft namens $where akzeptiert. Die Eigenschaft $where ist auf eine Funktion gesetzt, die als wahr oder falsch ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise geändert wird, lauert dort wahrscheinlich eine NoSQL-Injektion.

Einen ausführlichen Einblick in die Feinheiten der NoSQL-Injektion finden Sie hier InfoQ-Artikel.

Erfahren Sie, warum NoSQL Injection gefährlich ist

NoSQL-Injection ist vor allem deshalb gefährlich, weil sie von der Sicherheitsgemeinschaft noch nicht die Prüfung erhalten hat, die sie verdient.

Die Auswirkungen der NoSQL-Injection sind weitgehend dieselben wie bei der herkömmlichen SQL-Injection. Daten können gestohlen oder geändert werden, Konten können durch Datendiebstahl gefährdet werden, und, was vielleicht am schlimmsten ist, Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.

Unter dem Strich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „Kein SQL“ bedeutet nicht, dass es keine Injektionen gibt.
Zum Glück nehmen es einige in der Community zur Kenntnis und das Wort verbreiten. Immer mehr Entwickler müssen sich weiterbilden, damit sie ihre Apps vor wenig bekannten Gefahren schützen können, die zu großen Kopfschmerzen führen können, wenn sie ausgenutzt werden.

Besiegen Sie NoSQL Injection

Die NoSQL-Injektion kann schwer zu besiegen sein. Leider gibt es nicht die Möglichkeit parametrisierter Abfragen wie bei der SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt ein paar Möglichkeiten, dir zu helfen:

  • Fuzzers können als eine Methode zur Erkennung von Sicherheitslücken verwendet werden. Obwohl, wie es bei vielen Dingen im Leben der Fall ist, der einfachste Ansatz der effektivste sein kann. Hier ist der gute alte Code-Review dein stärkster Verbündeter.
  • Achten Sie beim Überprüfen des Codes auf mögliche Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie nicht, dass Benutzereingaben Ihre Abfragen ändern.
  • Stellen Sie sicher, dass Sie Benutzereingaben in die richtige Klasse umwandeln. Wenn es sich um eine Zahl handelt, wandeln Sie sie in eine Zahl um, wenn es sich um eine Zeichenfolge handelt, wandeln Sie sie in eine Zeichenfolge um und so weiter.
  • Verwenden Sie niemals $where oder ähnliche eval-Funktionen zusammen mit Benutzereingaben. In den meisten Fällen können Sie das Problem umgehen, indem Sie das Datenmodell oder Schema ändern.
  • Versuchen Sie es mit Mungo als dein MongoDB-Treiber. Mit Mongoose können Sie ein Schema für Ihre NoSQL-Datenbank definieren. Wenn du sag Mongoose, dass deine Eingaben Zeichenketten sind, sie werden in Saiten geworfen. Alle von einem Angreifer übergebenen Objekte werden also nicht als Objekte, sondern als Zeichenketten behandelt.
  • Verhärte deine DB! Erstellen Sie Benutzerkonten mit geringen Rechten, maximieren Sie die Ausführungszeit für Abfragen und halten Sie sich stets an die bewährten Sicherheitsmethoden, die für Ihr Unternehmen gelten.

Ein Nachteil der Benutzerfreundlichkeit von NoSQL-Datenbanken ist die Tendenz der Entwickler, sie abzulegen und sie zu verwenden, ohne an Sicherheit zu denken.

Es ist wichtig, dass Sie sich die Zeit nehmen, um zu lernen, wie Sie eine NoSQL-Datenbank sicher einrichten und sich vor NoSQL-Injektionen schützen können.

Zum Beispiel MongoDB Enterprise Ausgabe verfügt über erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Die Durchsetzung der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Sicherheitslücke in Ihrer Anwendung findet.

Zusammenfassend haben wir Folgendes:

  • Bereinigen Sie Ihre Eingabe, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
  • Benutze Treiber, die dir weiterhelfen, wie Mongoose
  • Führen Sie Code-Reviews durch, bei denen speziell untersucht wird, wie Eingabedaten in Abfragen verwendet werden
  • Verwenden Sie Fuzzer und Scanner, um Sicherheitslücken in Ihrem Code zu finden.

NoSQL ist nicht No Injections

NoSQL-Datenbanken werden aufgrund ihrer skalierbaren Funktionen und ihrer Geschwindigkeit bei der Einrichtung immer beliebter. Die Neuheit der Technologie kann Entwickler dazu veranlassen, NoSQL-Datenbanken zu verwenden, ohne darüber nachzudenken, wie sie gesichert werden können.

NoSQL-Datenbanken können genauso anfällig für Injektionsangriffe sein wie SQL-Datenbanken. Seien Sie also vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, schauen Sie sich unsere an Ressourcen zum Lernen oder testen Sie Ihre Fähigkeiten mit unserem kostenlose Demo.

Bereiten Sie sich im Voraus vor und Sie müssen sich keine Gedanken über NoSQL-Injektionen in Ihren Anwendungen machen. Zu einfach!

Denken Sie, Sie sind bereit, NoSQL-Injection jetzt zu lokalisieren, zu identifizieren und zu reparieren? Betritt die Secure-Code-Arena, Krieger:

Und das ist ein Abschluss für 2018! Dies wird unser letzter Beitrag für das Jahr sein, aber wir melden uns am 10. Januar 2019 mit dem nächsten Coders Conquer Security Guide zurück. Bis bald!

リソースを表示
リソースを表示

以下のフォームに記入してレポートをダウンロードしてください

当社製品および/またはセキュアコーディングに関連する情報について、お客様にご案内させていただくことをお許しください。お客様の個人情報は常に細心の注意をもって取り扱い、マーケティング目的で他社に販売することは一切ありません。

提出
SCW成功アイコン
SCWエラーアイコン
フォームを送信するには、「アナリティクス」クッキーを有効にしてください。完了後、いつでも無効に戻せます。

NoSQL-Datenbanken sind wird immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, insbesondere angesichts der Tatsache, dass Entwicklungsteams mit zunehmend agilen Methoden arbeiten.

Entwickler brauchen Zeit, um Sicherheitslücken und andere Herausforderungen in neuen Technologien zu beheben. Erst wenn es einige Zeit in Produktionsanwendungen eingesetzt wurde, treten Probleme an die Oberfläche.

NoSQL-Datenbanken sind ähnlich. Es gibt wichtige Risiken, derer sich Entwickler bewusst sein sollten, damit sie ihre Anwendungen schützen können. Ein solches Risiko ist die NoSQL-Injektion.

Schauen wir uns an, was eine NoSQL-Injektion ist, welchen Schaden sie anrichten kann und wie sie behoben werden kann:

NoSQL Injection verstehen

NoSQL-Injection wird durch viele der gleichen Injection-Schwachstellen wie XML oder SQL-Injektion.

NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzufügen. Dadurch können sie Daten stehlen und sogar Änderungen an der Datenbank vornehmen, wenn ihre Rechte hoch genug sind.

Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, übernehmen diese Ausdrücke oft Funktionen oder verfügen über eingebaute Operatoren, die manipuliert werden können, um Daten zu stehlen oder zu ändern. Und wenn so etwas mit böswilliger Absicht ausgeführt wird, können die Folgen gravierend sein.

MongoDB-Datenbanken sind einer der beliebtesten Spielplätze, um diese Sicherheitsanfälligkeit auszunutzen. „$ne: „" 'ist der Operator, der 1=1 in der SQL-Welt entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne:"“ 'in die Felder für Benutzername und Passwort einer Benutzeroberfläche einfügen. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen der Benutzername und das Passwort keiner leeren Zeichenfolge entsprechen. Mit anderen Worten: alle. Huch.

Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers darin stehlen. Dazu gehören der Benutzername und die Passwörter des Administrators, sodass dieser Zugriff auf die gesamte Datenbank hat.

Angreifer versuchen oft, Werte weiterzugeben, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzuschleusen, die auf Funktionen festgelegt sind.

MongoDB verwendet beispielsweise eine Suchfunktion, die ein Objekt mit einer Eigenschaft namens $where akzeptiert. Die Eigenschaft $where ist auf eine Funktion gesetzt, die als wahr oder falsch ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise geändert wird, lauert dort wahrscheinlich eine NoSQL-Injektion.

Einen ausführlichen Einblick in die Feinheiten der NoSQL-Injektion finden Sie hier InfoQ-Artikel.

Erfahren Sie, warum NoSQL Injection gefährlich ist

NoSQL-Injection ist vor allem deshalb gefährlich, weil sie von der Sicherheitsgemeinschaft noch nicht die Prüfung erhalten hat, die sie verdient.

Die Auswirkungen der NoSQL-Injection sind weitgehend dieselben wie bei der herkömmlichen SQL-Injection. Daten können gestohlen oder geändert werden, Konten können durch Datendiebstahl gefährdet werden, und, was vielleicht am schlimmsten ist, Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.

Unter dem Strich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „Kein SQL“ bedeutet nicht, dass es keine Injektionen gibt.
Zum Glück nehmen es einige in der Community zur Kenntnis und das Wort verbreiten. Immer mehr Entwickler müssen sich weiterbilden, damit sie ihre Apps vor wenig bekannten Gefahren schützen können, die zu großen Kopfschmerzen führen können, wenn sie ausgenutzt werden.

Besiegen Sie NoSQL Injection

Die NoSQL-Injektion kann schwer zu besiegen sein. Leider gibt es nicht die Möglichkeit parametrisierter Abfragen wie bei der SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt ein paar Möglichkeiten, dir zu helfen:

  • Fuzzers können als eine Methode zur Erkennung von Sicherheitslücken verwendet werden. Obwohl, wie es bei vielen Dingen im Leben der Fall ist, der einfachste Ansatz der effektivste sein kann. Hier ist der gute alte Code-Review dein stärkster Verbündeter.
  • Achten Sie beim Überprüfen des Codes auf mögliche Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie nicht, dass Benutzereingaben Ihre Abfragen ändern.
  • Stellen Sie sicher, dass Sie Benutzereingaben in die richtige Klasse umwandeln. Wenn es sich um eine Zahl handelt, wandeln Sie sie in eine Zahl um, wenn es sich um eine Zeichenfolge handelt, wandeln Sie sie in eine Zeichenfolge um und so weiter.
  • Verwenden Sie niemals $where oder ähnliche eval-Funktionen zusammen mit Benutzereingaben. In den meisten Fällen können Sie das Problem umgehen, indem Sie das Datenmodell oder Schema ändern.
  • Versuchen Sie es mit Mungo als dein MongoDB-Treiber. Mit Mongoose können Sie ein Schema für Ihre NoSQL-Datenbank definieren. Wenn du sag Mongoose, dass deine Eingaben Zeichenketten sind, sie werden in Saiten geworfen. Alle von einem Angreifer übergebenen Objekte werden also nicht als Objekte, sondern als Zeichenketten behandelt.
  • Verhärte deine DB! Erstellen Sie Benutzerkonten mit geringen Rechten, maximieren Sie die Ausführungszeit für Abfragen und halten Sie sich stets an die bewährten Sicherheitsmethoden, die für Ihr Unternehmen gelten.

Ein Nachteil der Benutzerfreundlichkeit von NoSQL-Datenbanken ist die Tendenz der Entwickler, sie abzulegen und sie zu verwenden, ohne an Sicherheit zu denken.

Es ist wichtig, dass Sie sich die Zeit nehmen, um zu lernen, wie Sie eine NoSQL-Datenbank sicher einrichten und sich vor NoSQL-Injektionen schützen können.

Zum Beispiel MongoDB Enterprise Ausgabe verfügt über erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Die Durchsetzung der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Sicherheitslücke in Ihrer Anwendung findet.

Zusammenfassend haben wir Folgendes:

  • Bereinigen Sie Ihre Eingabe, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
  • Benutze Treiber, die dir weiterhelfen, wie Mongoose
  • Führen Sie Code-Reviews durch, bei denen speziell untersucht wird, wie Eingabedaten in Abfragen verwendet werden
  • Verwenden Sie Fuzzer und Scanner, um Sicherheitslücken in Ihrem Code zu finden.

NoSQL ist nicht No Injections

NoSQL-Datenbanken werden aufgrund ihrer skalierbaren Funktionen und ihrer Geschwindigkeit bei der Einrichtung immer beliebter. Die Neuheit der Technologie kann Entwickler dazu veranlassen, NoSQL-Datenbanken zu verwenden, ohne darüber nachzudenken, wie sie gesichert werden können.

NoSQL-Datenbanken können genauso anfällig für Injektionsangriffe sein wie SQL-Datenbanken. Seien Sie also vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, schauen Sie sich unsere an Ressourcen zum Lernen oder testen Sie Ihre Fähigkeiten mit unserem kostenlose Demo.

Bereiten Sie sich im Voraus vor und Sie müssen sich keine Gedanken über NoSQL-Injektionen in Ihren Anwendungen machen. Zu einfach!

Denken Sie, Sie sind bereit, NoSQL-Injection jetzt zu lokalisieren, zu identifizieren und zu reparieren? Betritt die Secure-Code-Arena, Krieger:

Und das ist ein Abschluss für 2018! Dies wird unser letzter Beitrag für das Jahr sein, aber wir melden uns am 10. Januar 2019 mit dem nächsten Coders Conquer Security Guide zurück. Bis bald!

ウェビナーを見る
始めましょう
もっと詳しく

以下のリンクをクリックして、このリソースのPDFをダウンロードしてください。

Secure Code Warrior 、ソフトウェア開発サイクル全体を通じてコードの安全性を確保し、サイバーセキュリティを最優先とする文化を構築するため、貴社をSecure Code Warrior 。アプリセキュリティ管理者、開発者、CISO、あるいはセキュリティに関わるあらゆる立場の方々に対し、当社が貴社のビジネスにおける不安全なコードに関連するリスクの低減を支援します。

レポートを見るデモを予約する
PDFをダウンロード
リソースを表示
共有する:
リンクトインのブランドソーシャルx ロゴ
もっと知りたいですか?

共有する:
リンクトインのブランドソーシャルx ロゴ
著者
Jaap Karan Singh
2018年12月20日発行

Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

共有する:
リンクトインのブランドソーシャルx ロゴ

NoSQL-Datenbanken sind wird immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, insbesondere angesichts der Tatsache, dass Entwicklungsteams mit zunehmend agilen Methoden arbeiten.

Entwickler brauchen Zeit, um Sicherheitslücken und andere Herausforderungen in neuen Technologien zu beheben. Erst wenn es einige Zeit in Produktionsanwendungen eingesetzt wurde, treten Probleme an die Oberfläche.

NoSQL-Datenbanken sind ähnlich. Es gibt wichtige Risiken, derer sich Entwickler bewusst sein sollten, damit sie ihre Anwendungen schützen können. Ein solches Risiko ist die NoSQL-Injektion.

Schauen wir uns an, was eine NoSQL-Injektion ist, welchen Schaden sie anrichten kann und wie sie behoben werden kann:

NoSQL Injection verstehen

NoSQL-Injection wird durch viele der gleichen Injection-Schwachstellen wie XML oder SQL-Injektion.

NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzufügen. Dadurch können sie Daten stehlen und sogar Änderungen an der Datenbank vornehmen, wenn ihre Rechte hoch genug sind.

Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, übernehmen diese Ausdrücke oft Funktionen oder verfügen über eingebaute Operatoren, die manipuliert werden können, um Daten zu stehlen oder zu ändern. Und wenn so etwas mit böswilliger Absicht ausgeführt wird, können die Folgen gravierend sein.

MongoDB-Datenbanken sind einer der beliebtesten Spielplätze, um diese Sicherheitsanfälligkeit auszunutzen. „$ne: „" 'ist der Operator, der 1=1 in der SQL-Welt entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne:"“ 'in die Felder für Benutzername und Passwort einer Benutzeroberfläche einfügen. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen der Benutzername und das Passwort keiner leeren Zeichenfolge entsprechen. Mit anderen Worten: alle. Huch.

Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers darin stehlen. Dazu gehören der Benutzername und die Passwörter des Administrators, sodass dieser Zugriff auf die gesamte Datenbank hat.

Angreifer versuchen oft, Werte weiterzugeben, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzuschleusen, die auf Funktionen festgelegt sind.

MongoDB verwendet beispielsweise eine Suchfunktion, die ein Objekt mit einer Eigenschaft namens $where akzeptiert. Die Eigenschaft $where ist auf eine Funktion gesetzt, die als wahr oder falsch ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise geändert wird, lauert dort wahrscheinlich eine NoSQL-Injektion.

Einen ausführlichen Einblick in die Feinheiten der NoSQL-Injektion finden Sie hier InfoQ-Artikel.

Erfahren Sie, warum NoSQL Injection gefährlich ist

NoSQL-Injection ist vor allem deshalb gefährlich, weil sie von der Sicherheitsgemeinschaft noch nicht die Prüfung erhalten hat, die sie verdient.

Die Auswirkungen der NoSQL-Injection sind weitgehend dieselben wie bei der herkömmlichen SQL-Injection. Daten können gestohlen oder geändert werden, Konten können durch Datendiebstahl gefährdet werden, und, was vielleicht am schlimmsten ist, Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.

Unter dem Strich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „Kein SQL“ bedeutet nicht, dass es keine Injektionen gibt.
Zum Glück nehmen es einige in der Community zur Kenntnis und das Wort verbreiten. Immer mehr Entwickler müssen sich weiterbilden, damit sie ihre Apps vor wenig bekannten Gefahren schützen können, die zu großen Kopfschmerzen führen können, wenn sie ausgenutzt werden.

Besiegen Sie NoSQL Injection

Die NoSQL-Injektion kann schwer zu besiegen sein. Leider gibt es nicht die Möglichkeit parametrisierter Abfragen wie bei der SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt ein paar Möglichkeiten, dir zu helfen:

  • Fuzzers können als eine Methode zur Erkennung von Sicherheitslücken verwendet werden. Obwohl, wie es bei vielen Dingen im Leben der Fall ist, der einfachste Ansatz der effektivste sein kann. Hier ist der gute alte Code-Review dein stärkster Verbündeter.
  • Achten Sie beim Überprüfen des Codes auf mögliche Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie nicht, dass Benutzereingaben Ihre Abfragen ändern.
  • Stellen Sie sicher, dass Sie Benutzereingaben in die richtige Klasse umwandeln. Wenn es sich um eine Zahl handelt, wandeln Sie sie in eine Zahl um, wenn es sich um eine Zeichenfolge handelt, wandeln Sie sie in eine Zeichenfolge um und so weiter.
  • Verwenden Sie niemals $where oder ähnliche eval-Funktionen zusammen mit Benutzereingaben. In den meisten Fällen können Sie das Problem umgehen, indem Sie das Datenmodell oder Schema ändern.
  • Versuchen Sie es mit Mungo als dein MongoDB-Treiber. Mit Mongoose können Sie ein Schema für Ihre NoSQL-Datenbank definieren. Wenn du sag Mongoose, dass deine Eingaben Zeichenketten sind, sie werden in Saiten geworfen. Alle von einem Angreifer übergebenen Objekte werden also nicht als Objekte, sondern als Zeichenketten behandelt.
  • Verhärte deine DB! Erstellen Sie Benutzerkonten mit geringen Rechten, maximieren Sie die Ausführungszeit für Abfragen und halten Sie sich stets an die bewährten Sicherheitsmethoden, die für Ihr Unternehmen gelten.

Ein Nachteil der Benutzerfreundlichkeit von NoSQL-Datenbanken ist die Tendenz der Entwickler, sie abzulegen und sie zu verwenden, ohne an Sicherheit zu denken.

Es ist wichtig, dass Sie sich die Zeit nehmen, um zu lernen, wie Sie eine NoSQL-Datenbank sicher einrichten und sich vor NoSQL-Injektionen schützen können.

Zum Beispiel MongoDB Enterprise Ausgabe verfügt über erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Die Durchsetzung der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Sicherheitslücke in Ihrer Anwendung findet.

Zusammenfassend haben wir Folgendes:

  • Bereinigen Sie Ihre Eingabe, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
  • Benutze Treiber, die dir weiterhelfen, wie Mongoose
  • Führen Sie Code-Reviews durch, bei denen speziell untersucht wird, wie Eingabedaten in Abfragen verwendet werden
  • Verwenden Sie Fuzzer und Scanner, um Sicherheitslücken in Ihrem Code zu finden.

NoSQL ist nicht No Injections

NoSQL-Datenbanken werden aufgrund ihrer skalierbaren Funktionen und ihrer Geschwindigkeit bei der Einrichtung immer beliebter. Die Neuheit der Technologie kann Entwickler dazu veranlassen, NoSQL-Datenbanken zu verwenden, ohne darüber nachzudenken, wie sie gesichert werden können.

NoSQL-Datenbanken können genauso anfällig für Injektionsangriffe sein wie SQL-Datenbanken. Seien Sie also vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, schauen Sie sich unsere an Ressourcen zum Lernen oder testen Sie Ihre Fähigkeiten mit unserem kostenlose Demo.

Bereiten Sie sich im Voraus vor und Sie müssen sich keine Gedanken über NoSQL-Injektionen in Ihren Anwendungen machen. Zu einfach!

Denken Sie, Sie sind bereit, NoSQL-Injection jetzt zu lokalisieren, zu identifizieren und zu reparieren? Betritt die Secure-Code-Arena, Krieger:

Und das ist ein Abschluss für 2018! Dies wird unser letzter Beitrag für das Jahr sein, aber wir melden uns am 10. Januar 2019 mit dem nächsten Coders Conquer Security Guide zurück. Bis bald!

目次

PDFをダウンロード
リソースを表示
もっと知りたいですか?

Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

もっと詳しく

Secure Code Warrior 、ソフトウェア開発サイクル全体を通じてコードの安全性を確保し、サイバーセキュリティを最優先とする文化を構築するため、貴社をSecure Code Warrior 。アプリセキュリティ管理者、開発者、CISO、あるいはセキュリティに関わるあらゆる立場の方々に対し、当社が貴社のビジネスにおける不安全なコードに関連するリスクの低減を支援します。

デモを予約するダウンロード
共有する:
リンクトインのブランドソーシャルx ロゴ
リソースハブ

入門リソース

さらに多くの投稿
リソースハブ

入門リソース

さらに多くの投稿