< Zurück zu den Artikeln

Wie geht man mit Sicherheitslücken in Apps um? Diese Tools werden sie für dich schließen

Michal VlasákMichal Vlasák
30. April 2020

Auch wenn die Sicherheit des Projekts und seine Abhängigkeiten bei der App-Entwicklung Priorität haben sollten, wächst die Zahl der Sicherheitslücken in Apps und der gezielten Angriffe auf genau diese Sicherheitslücken Jahr für Jahr. Glücklicherweise gibt es Tools, die dir helfen können, sie aufzudecken.

Wenn du ein nicht-triviales (also ziemlich aufwendiges und komplexes) Projekt entwickelst, ist es fast sicher, dass du Code von Drittanbietern verwenden wirst. Du lädst externe Abhängigkeiten in dein Projekt, die einen Teil der Logik lösen oder weitere Funktionen bereitstellen. Vor allem im letzten Jahr hat sich dieser Trend der Dekomposition und des Outsourcings immer mehr beschleunigt - vor allem wegen der wachsenden Popularität und Menge von Open-Source-Software. In einem typischen Javascript-Projekt gibt es zum Beispiel Dutzende von Abhängigkeiten - einschließlich der transitiven Abhängigkeiten kann die Zahl in die unteren Hunderte gehen.

Minimierung der Risiken für den Benutzer

So nützlich und manchmal notwendig es auch ist, Code von Drittanbietern zu verwenden, bringt es auch einige Sicherheitsrisiken mit sich. Einer der letzten Fälle, der durch die Medien ging, war zum Beispiel das Package 1337qq-js, das angeblich sensible Benutzerdateien verschickte. Das Sicherheitsteam von Microsoft hat die Community über das Package informiert und man wird es nicht mehr von npm installiert bekommen. Dies ist jedoch nur einer der kleineren "Angriffe", die oft auch auf den Diebstahl von Zugangsdaten zu Krypto-Wallets abzielen.

Wenn wir von gezielten und oft sehr spezifischen Angriffen absehen, kann auch in gutem Glauben geschriebener Code Probleme mit einer bestimmten Benutzereingabe verursachen oder ein anderes problematisches Verhalten in dein Projekt einschleusen. Einer Analyse zufolge bleiben bis zu 59 % der Sicherheitslücken in Open-Source-Software unbehoben. Bei den verbleibenden 41 % beträgt die durchschnittliche Implementierungszeit für die Behebung 265 Tage.

Snyk: viel Leistung für wenig Geld

In einer solchen Umgebung ist es natürlich am besten, so schnell wie möglich und idealerweise automatisch über jede Sicherheitslücke informiert zu werden. Eine der einfachsten Möglichkeiten, Javascript-Projekte zu schützen, ist der Befehl npm audit, der die Abhängigkeiten deines Projekts scannt und mit der Liste der bekannten Sicherheitslücken abgleicht. Bei manchen ist die Behebung super einfach. In solchen Fällen kann die Lücke automatisch mit dem Befehl "npm audit fix" gelöst werden.

Ein weiteres Tool, das ich dir auch empfehlen kann, ist Snyk. Damit haben wir bei Ackee gute Erfahrungen gemacht - und es ist für Open-Source-Projekte kostenlos. Es ist ein Online- und CLI-Tool, das nicht nur in Javascript-Code, sondern auch in Typescript, PHP, Java, C#, Python und vielen anderen Sprachen nach Sicherheitslücken sucht. Bei seiner Analyse nutzt Snyk nicht nur öffentliche Datenbanken mit Sicherheitslücken einzelner Plattformen, sondern verfügt auch über ein Forschungsteam, das nach Sicherheitslücken in den Packages sucht. Gleichzeitig kannst du dich auf ihrem Blog informieren, wie du dich zum Beispiel bei der Verwendung von npm am besten schützt.

In einer solchen Umgebung ist es natürlich am besten, so schnell wie möglich und idealerweise automatisch über jede Sicherheitslücke informiert zu werden. Eine der einfachsten Möglichkeiten, Javascript-Projekte zu schützen, ist der Befehl npm audit, der die Abhängigkeiten deines Projekts scannt und mit der Liste der bekannten Sicherheitslücken abgleicht. Bei manchen ist die Behebung super einfach. In solchen Fällen kann die Lücke automatisch mit dem Befehl "npm audit fix" gelöst werden.

Ein weiteres Tool, das ich dir auch empfehlen kann, ist Snyk. Damit haben wir bei Ackee gute Erfahrungen gemacht - und es ist für Open-Source-Projekte kostenlos. Es ist ein Online- und CLI-Tool, das nicht nur in Javascript-Code, sondern auch in Typescript, PHP, Java, C#, Python und vielen anderen Sprachen nach Sicherheitslücken sucht. Bei seiner Analyse nutzt Snyk nicht nur öffentliche Datenbanken mit Sicherheitslücken einzelner Plattformen, sondern verfügt auch über ein Forschungsteam, das nach Sicherheitslücken in den Packages sucht. Gleichzeitig kannst du dich auf ihrem Blog informieren, wie du dich zum Beispiel bei der Verwendung von npm schützen kannst.

Als entwicklerzentrierte Plattform bietet Snyk neben CLI und einer Online-Umgebung auch die Integration von Repository-Diensten und CI/CD-Tools. Neben der Analyse von Sicherheitslücken im Code kann es auch Sicherheitslücken direkt in einem Docker-Container auf Betriebssystemebene aufdecken. Es gibt auch eine öffentliche Datenbank mit Sicherheitslücken, in der du zum Beispiel das eingangs erwähnte Package nachschlagen kannst.

Sicherheit steht an erster Stelle

Die Sicherheit eines Projekts und seiner Abhängigkeiten ist natürlich ein komplexeres Thema, als es in einen Artikel passen würde. Die beiden oben erwähnten Werkzeuge - "npm audit" und Snyk - sind jedoch sehr einfach und ihre Verwendung nimmt nicht viel Zeit in Anspruch. Für den Anfang ist es ein idealer Weg, wenn man viel für sein Geld haben möchte und kann daher als "notwendiges Minimum" angesehen werden.

In Ackee verwenden wir "npm audit" in allen unseren Projekten, an denen wir derzeit arbeiten. Wenn wir eine größere Sicherheitslücke finden, schlägt der Build fehl und diese Version wird gar nicht erst eingesetzt. Das Projekt läuft weiterhin auf einer älteren Version und für die Bereitstellung einer neuen Version muss ein Entwickler das Sicherheitsproblem beheben - zum Beispiel durch Aktualisierung der Abhängigkeit. Auch bei neuen Open-Source-Paketen setzen wir Snyk ein, zum Beispiel im Rahmen des cosmas-Projekts.

Michal Vlasák
Michal Vlasák
Backend-EntwicklerMichal ist Backend-Entwickler mit AI und Psychologie Background. Für ihn bedeutet Coden vor allem Probleme lösen.

Beratungsbedarf? Lassen Sie uns über Ihr Projekt sprechen.

Kontakt aufnehmen >