SCW 아이콘
영웅 배경, 구분선 없음
블로그

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

야프 카란 싱
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 로고
저자
야프 카란 싱
게시일: 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) 또는 보안 관련 업무를 담당하는 분이라면 누구든, 저희는 귀사가 안전하지 않은 코드로 인한 위험을 줄일 수 있도록 돕습니다.

보고서 보기데모 예약하기
리소스 보기
공유하기:
링크드인 브랜드사회적x 로고
더 알고 싶으신가요?

공유하기:
링크드인 브랜드사회적x 로고
저자
야프 카란 싱
게시일: 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 로고
자원 허브

시작을 위한 자료

더 많은 글
자원 허브

시작을 위한 자료

더 많은 글