Autoren:
(1) Anna-Katharina Wickert, Technische Universität Darmstadt, Darmstadt, Deutschland ([email protected]);
(2) Lars Baumgärtner, Technische Universität Darmstadt, Darmstadt, Deutschland ([email protected]);
(3) Florian Breitfelder, Technische Universität Darmstadt, Darmstadt, Deutschland ([email protected]);
(4) Mira Mezini, Technische Universität Darmstadt, Darmstadt, Deutschland ([email protected]).
Zusammenfassung und 1 Einleitung
3 Entwurf und Implementierung von Licma und 3.1 Entwurf
4 Methodik und 4.1 Suchen und Herunterladen von Python-Apps
4.2 Vergleich mit früheren Studien
5 Evaluierung und 5.1 GitHub Python Projekte
6 Vergleich mit früheren Studien
7 Bedrohungen für die Gültigkeit
9 Schlussfolgerung, Danksagungen und Referenzen
Hintergrund : Frühere Studien haben gezeigt, dass bis zu 99,59 % der Java-Apps, die Krypto-APIs verwenden, die API mindestens einmal missbrauchen. Diese Studien wurden jedoch für Java und C durchgeführt, während empirische Studien für andere Sprachen fehlen. Eine kontrollierte Benutzerstudie mit Krypto-Aufgaben in Python hat beispielsweise gezeigt, dass 68,5 % der professionellen Entwickler eine sichere Lösung für eine Krypto-Aufgabe schreiben.
Ziele : Um zu verstehen, ob diese Beobachtung für realen Code gilt, haben wir eine Studie zum Kryptomissbrauch in Python durchgeführt.
Methode : Wir haben ein statisches Analysetool entwickelt, das häufige Fehlanwendungen von 5 verschiedenen Python-Krypto-APIs abdeckt. Mit dieser Analyse haben wir 895 beliebte Python-Projekte von GitHub und 51 MicroPython-Projekte für eingebettete Geräte analysiert. Darüber hinaus haben wir unsere Ergebnisse mit den Erkenntnissen früherer Studien verglichen.
Ergebnisse : Unsere Analyse zeigt, dass 52,26 % der Python-Projekte mindestens einen Missbrauch aufweisen. Darüber hinaus hilft das API-Design einiger Python-Kryptobibliotheken Entwicklern, Kryptofunktionen nicht zu missbrauchen, was in Studien mit Java- und C-Code viel häufiger vorkam. Schlussfolgerung : Wir kommen zu dem Schluss, dass sich ein gutes API-Design positiv auf Kryptomissbrauch bei Python-Anwendungen auswirkt. Darüber hinaus zeigt unsere Analyse von MicroPython-Projekten die Bedeutung von Hybridanalysen.
Kryptographie, im Folgenden Krypto, wird heutzutage weithin verwendet, um unsere Daten zu schützen und Vertraulichkeit zu gewährleisten. Ohne Krypto könnten wir beispielsweise kein sicheres Online-Banking nutzen oder online einkaufen. Leider zeigen frühere Forschungsergebnisse, dass Krypto häufig auf unsichere Weise verwendet wird [3, 4, 7, 9, 11]. Ein solches Problem ist die Wahl eines unsicheren Parameters, wie beispielsweise eines unsicheren Blockmodus, für Kryptoprimitive wie Verschlüsselung. Es gibt viele statische Analysetools, um diese Missbräuche zu identifizieren, wie beispielsweise CryptoREX [13], CryptoLint [4], CogniCryptSAST [8] und Cryptoguard [12].
Während sich diese Tools und die entsprechenden In-the-Wild-Studien auf Java und C konzentrieren, deuten Benutzerstudien darauf hin, dass die vorhandenen Python-APIs die Anzahl von Krypto-Missbräuchen reduzieren. Acar et al. [2] führten ein Experiment mit 307 GitHub-Benutzern durch, die drei kryptobezogene Entwicklungsaufgaben lösen mussten. Sie beobachteten, dass 68,5 % der professionellen Entwickler für die gegebene Aufgabe eine sichere Lösung in Python schrieben. In einem kontrollierten Experiment mit 256 Python-Entwicklern, die versuchten, einfache Krypto-Aufgaben zu lösen, stellten Acar et al. [1] fest, dass ein einfaches API-Design, wie die Python-Bibliothek cryptography , Entwickler beim Schreiben von sicherem Code unterstützt. Allerdings hat bisher keine empirische In-the-Wild-Studie bestätigt, dass Krypto-Missbräuche in Python seltener auftreten als in Java oder C.
Um Krypto-Missbrauch in Python empirisch zu bewerten, führen wir LICMA ein, ein mehrsprachiges Analyseframework mit Unterstützung für 5 verschiedene Python-Krypto-APIs und Javas JCA-API. Wir bieten 5 verschiedene Regeln [4] für alle Python-APIs und 6 verschiedene Regeln [4] für JCA, um die häufigsten Krypto-Missbräuche zu erkennen. Mit LICMA haben wir 895 beliebte Python-Apps von GitHub und 51 MicroPython-Projekte analysiert, um Einblicke in den Missbrauch in Python zu erhalten. Wir haben festgestellt, dass 52,26 % der Python-GitHub-Apps mit Krypto-Verwendungen mindestens einen Missbrauch aufweisen, der 1.501 Missbrauchsfälle verursacht. Insgesamt liegen nur 7 % der Missbräuche im Anwendungscode selbst, während die restlichen Missbräuche durch Abhängigkeiten verursacht werden. Darüber hinaus zeigt unsere Studie von MicroPython-Projekten, dass Entwickler im eingebetteten Bereich dazu neigen, Krypto über C-Code zu verwenden. Dies verdeutlicht die Bedeutung hybrider statischer Analysen, mit denen Programminformationen, z. B. ein Aufrufdiagramm, über mehrere Sprachen hinweg verfolgt werden können [5, 10].
Um unser Verständnis darüber, ob Python-APIs weniger anfällig für Krypto-Missbrauch sind, weiter zu verbessern, leisten wir die folgenden Beiträge:
• Ein neuartiges, mehrsprachiges Analysetool zum Erkennen von Krypto-Missbrauch in Python und Java. Für Python decken wir Krypto-Missbrauch für 5 gängige Python-Krypto-APIs und für Java die Standard-API JCA ab.
• Eine empirische Studie zum Kryptomissbrauch in den 895 beliebtesten Python-Anwendungen auf GitHub deckte 1.501 Missbrauchsfälle auf.
• Ein Vergleich unserer Erkenntnisse in Python-Anwendungen mit früheren Studien über Krypto-Missbrauch in der Praxis für Android-Apps und Firmware-Images in C. Wir haben festgestellt, dass die meisten Python-Anwendungen sicherer sind und die Verteilung zwischen den konkreten Arten des Missbrauchs sehr unterschiedlich ist.
• Eine empirische Studie zum Kryptomissbrauch in MicroPython-Projekten, die die Bedeutung hybrider statischer Analysen verdeutlicht.
• Ein Replikationspaket, das beide für unsere Studie verwendeten Datensätze, die Ergebnisse unserer Analyse und den Code von LICMA[1] enthält.
Dieses Dokument ist auf arxiv unter der Lizenz CC BY 4.0 DEED verfügbar .
[1] dx.doi.org/10.6084/m9.figshare.16499085