Statische Programmanalyse

Im Informatik, Statische Programmanalyse (oder Statische Analyse) ist der Analyse von Computerprogrammen durchgeführt, ohne sie auszuführen, im Gegensatz zu Computer mit Dynamische Programmanalyse, die während ihrer Ausführung an Programmen durchgeführt wird.[1][2]

Der Begriff wird normalerweise auf die Analyse angewendet, die von einem automatisierten Tool durchgeführt wird, wobei die menschliche Analyse normalerweise als "Programmverständnis" bezeichnet wird, Programmverständnis, oder Code-Review. In den letzten davon, Software -Inspektion und Softwarethroughs werden auch verwendet. In den meisten Fällen wird die Analyse auf einer Version eines Programms durchgeführt Quellcodeund in anderen Fällen in irgendeiner Form seiner Objektcode.

Begründung

Die Raffinesse der durch Werkzeuge durchgeführten Analyse variiert von denen, die nur das Verhalten einzelner Aussagen und Erklärungen berücksichtigen.[3] zu denen, die das komplette enthalten Quellcode eines Programms in ihrer Analyse. Die Verwendungen der aus der Analyse erhaltenen Informationen variieren von der Hervorhebung möglicher Codierungsfehler (z. B. die, die Fussel Werkzeug) zu Formale Methoden Das beweist mathematisch Eigenschaften über ein bestimmtes Programm (z. B. sein Verhalten stimmt dem seiner Spezifikation überein).

Software -Metriken und Reverse Engineering kann als Formen der statischen Analyse beschrieben werden. Das Abfertigung von Software-Metriken und statische Analysen werden zunehmend zusammen, insbesondere bei der Erstellung von eingebetteten Systemen, durch Definition sogenannter Software -Qualitätsziele.[4]

Eine wachsende kommerzielle Verwendung der statischen Analyse ist die Überprüfung der Eigenschaften der in verwendeten Software in Bezug Sicherheitskritisch Computersysteme und potenziell lokalisieren verletzlich Code.[5] Beispielsweise haben die folgenden Branchen die Verwendung der statischen Codeanalyse als Mittel zur Verbesserung der Qualität der zunehmend komplexen und komplexen Software identifiziert:

  1. Medizinische Software: Die USA Food and Drug Administration (FDA) hat die Verwendung statischer Analyse für Medizinprodukte identifiziert.[6]
  2. Nuklearsoftware: In Großbritannien empfiehlt das Büro für Kernregulierung (ONR) die Verwendung statischer Analysen auf Reaktorschutzsysteme.[7]
  3. Luftfahrtsoftware (in Kombination mit Dynamische Analyse)[8]
  4. Automobil- und Maschinen (Funktionssicherheitsfunktionen bilden einen integralen Bestandteil jeder Entwicklungsphase für Automobilprodukte, ISO 26262, Sec 8.)

Eine Studie von VDC -Forschung im Jahr 2012 berichtete, dass 28,7% der eingebetteten Software -Ingenieure derzeit statische Analyse -Tools verwenden und 39,7% erwarten, sie innerhalb von 2 Jahren zu verwenden.[9] Eine Studie aus dem Jahr 2010 ergab, dass 60% der befragten Entwickler in europäischen Forschungsprojekten zumindest ihre grundlegende statische Analyseer der IDE-integrierten IDE-Integration durchführten. Allerdings verwendeten nur etwa 10% ein zusätzliches (und möglicherweise fortgeschritteneres) Analyse -Tool.[10]

In der Anwendungssicherheitsbranche der Name Statische Anwendungssicherheitstests (SAST) wird ebenfalls verwendet. SAST ist ein wichtiger Bestandteil der Sicherheitsentwicklungslebenszyklen (SDLs) wie die von Microsoft definierte SDL[11] und eine gängige Praxis in Softwareunternehmen.[12]

Werkzeugtypen

Das omg (Objektverwaltungsgruppe) veröffentlichte eine Studie zu den Arten der Softwareanalyse, die für erforderlich sind Softwarequalität Messung und Bewertung. In diesem Dokument "Wie liefern Sie sichere, sichere, effiziente und leicht veränderte IT -Systeme im Einklang mit CISQ -Empfehlungen" werden drei Softwareanalysenebenen beschrieben.[13]

Einheitsebene
Analyse, die innerhalb eines bestimmten Programms oder Unterprogramms stattfindet, ohne sich mit dem Kontext dieses Programms zu verbinden.
Technologiestufe
Analyse, die die Interaktionen zwischen Einheitsprogrammen berücksichtigt, um eine ganzheitlichere und semantischere Sicht auf das Gesamtprogramm zu erhalten, um Probleme zu finden und offensichtliche Fehlalarme zu vermeiden. Beispielsweise ist es möglich, den Android -Technologie -Stack statisch zu analysieren, um Berechtigungsfehler zu finden.[14]
System Level
Analyse, die die Interaktionen zwischen Einheitsprogrammen berücksichtigt, ohne jedoch auf eine bestimmte Technologie- oder Programmiersprache beschränkt zu sein.

Ein weiteres Maß an Softwareanalyse kann definiert werden.

Missions-/Geschäftsebene
Analyse, die die Begriffe, Regeln und Prozesse der Geschäfts-/Missionsschicht berücksichtigt, die im Softwaresystem für seinen Betrieb im Rahmen von Unternehmens- oder Programm-/Missionsschichtaktivitäten implementiert sind. Diese Elemente werden implementiert, ohne auf eine bestimmte Technologie- oder Programmiersprache beschränkt zu sein, und in vielen Fällen werden über mehrere Sprachen hinweg verteilt, werden jedoch statisch extrahiert und auf das Systemverständnis für die Missionssicherung analysiert.

Formale Methoden

Formale Methoden sind der Begriff, der für die Analyse von angewendet wird Software (und Computerhardware), deren Ergebnisse nur durch die Verwendung strenger mathematischer Methoden erzielt werden. Die verwendeten mathematischen Techniken umfassen Denotationssemantik, Axiomatische Semantik, Betriebssemantik, und Abstrakte Interpretation.

Durch eine einfache Verringerung der Problem stoppenEs ist möglich zu beweisen (für jeden Turing vollständig Sprache) ist es, alle möglichen Laufzeitfehler in einem willkürlichen Programm zu finden (oder allgemeiner Verstoß gegen eine Spezifikation zum Endergebnis eines Programms) ist unentscheidbar: Es gibt keine mechanische Methode, die immer ehrlich beantworten kann, ob ein willkürliches Programm Laufzeitfehler aufweisen kann oder nicht. Dieses Ergebnis stammt aus den Werken von Kirche, Gödel und Turing In den 1930er Jahren (siehe: Halting problem und Reis Satz). Wie bei vielen unentscheidbaren Fragen kann man dennoch versuchen, nützliche ungefähre Lösungen zu geben.

Einige der Implementierungstechniken der formalen statischen Analyse umfassen:[15]

  • Abstrakte Interpretation, um den Effekt zu modellieren, den jede Aussage auf den Status einer abstrakten Maschine hat (d. H. Die Software „führt“ die mathematische Eigenschaften jeder Aussage und Erklärung aus). Diese abstrakte Maschine überprüft das Verhalten des Systems: Das abstrakte System wird daher auf Kosten von einfacher zu analysieren Unvollständigkeit (Nicht jede Eigenschaft für das ursprüngliche System gilt für das abstrakte System). Wenn es jedoch ordnungsgemäß erledigt ist, ist die abstrakte Interpretation jedoch Klang (Jede Eigenschaft, die für das abstrakte System wahr ist, kann einer echten Eigenschaft des ursprünglichen Systems zugeordnet werden).[16]
  • Datenflussanalyse, eine gitterbasierte Technik zum Sammeln von Informationen über die möglichen Wertemenge;
  • Hoare Logik, a formelles System mit einer Reihe logischer Regeln, um streng über die zu argumentieren Korrektheit von Computerprogrammen. Einige Programmiersprachen gibt es Toolsunterstützung (z. B. die Funkenprogrammiersprache (eine Teilmenge von Ada) und die Java -Modellierungssprache- JML - Verwendung Esc/Java und ESC/Java2, Frama-C WP (Schwächste Voraussetzung) Plugin für die mit ACSL erweiterte C -Sprache (ACSL (ANSI/ISO C -Spezifikationssprache)).
  • Modellprüfung, betrachtet Systeme, die haben endlicher Zustand oder kann auf endlichen Zustand reduziert werden durch Abstraktion;
  • Symbolische Ausführung, wie verwendet, um mathematische Ausdrücke abzuleiten, die den Wert mutierter Variablen an bestimmten Punkten im Code darstellen.

Datengesteuerte statische Analyse

Die datengesteuerte statische Analyse verwendet große Codemengen, um Codierungsregeln zu schließen.[17] Zum Beispiel kann man alle Java Open-Source-Pakete auf GitHub verwenden, um eine gute Analysestrategie zu erlernen. Die Regelinferenz kann maschinelles Lerntechniken verwenden.[18] Zum Beispiel wurde gezeigt, dass man, wenn man zu viel in der Art und Weise abweicht, wie man eine objektorientierte API verwendet, wahrscheinlich ein Fehler ist.[19] Es ist auch möglich, aus einer großen Menge an früheren Korrekturen und Warnungen zu lernen.[17]

Siehe auch

Verweise

  1. ^ Wichmann, B. A.; Canning, A. A.; Clutterbuck, D. L.; Winsbarrow, L. A.; Ward, N. J.; Marsh, D. W. R. (März 1995). "Industrielle Perspektive auf die statische Analyse" (PDF). Software Engineering Journal. 10 (2): 69–75. doi:10.1049/sej.1995.0010. Archiviert von das Original (PDF) Am 2011-09-27.
  2. ^ Egele, Manuel; Scholte, Theodoor; Kirda, Engin; Krugel, Christopher (2008-03-05). "Eine Umfrage zu automatisierten dynamischen Malware-Analyse-Techniken und -Tools". ACM Computing -Umfragen. 44 (2): 6: 1–6: 42. doi:10.1145/2089125.2089126. ISSN 0360-0300. S2CID 1863333.
  3. ^ Khatiwada, Saket; Tushev, Miroslav; Mahmoud, Anas (2018-01-01). "Gerade genug Semantik: Ein Informationstheoretischer Ansatz für die IR-basierte Software-Fehlerlokalisierung". Informations- und Softwaretechnologie. 93: 45–57. doi:10.1016/j.infsof.2017.08.012.
  4. ^ "Softwarequalitätsziele für Quellcode" Archiviert 2015-06-04 bei der Wayback -Maschine (PDF). Proceedings: Eingebettete Echtzeit -Software und Systeme 2010 Konferenz, ERTS2010.org, Toulouse, Frankreich: Patrick Briand, Martin Brochet, Thierry Cambois, Emmanuel Coutenceau, Olivier Guetta, Daniel Mainberte, Frederic Mondot, Patrick Munier, Loic Noury, Philippe Spozio, Frederic Retailleau.
  5. ^ Verbesserung der Software -Sicherheit mit präziser statischer und Laufzeitanalyse Archiviert 2011-06-05 in der Wayback -Maschine (PDF), Benjamin Livshits, Abschnitt 7.3 "Statische Techniken für die Sicherheit". Stanford Doctoral Thesis, 2006.
  6. ^ FDA (2010-09-08). "Infusionspumpen -Software -Sicherheitsforschung bei FDA". Food and Drug Administration. Archiviert vom Original am 09.09.20101. Abgerufen 2010-09-09.
  7. ^ Computerbasierte Sicherheitssysteme - Technische Leitlinien zur Bewertung von Softwareaspekten digitaler computerbasierter Schutzsysteme, "Computerbasierte Sicherheitssysteme" (PDF). Archiviert von das Original (PDF) am 4. Januar 2013. Abgerufen 15. Mai, 2013.
  8. ^ Position Paper Cast-9. Überlegungen zur Bewertung von Sicherheitsentwicklungsansätzen zur Softwareversicherung Archiviert 2013-10-06 bei der Wayback -Maschine // FAA, Software -Team der Zertifizierungsbehörden (Cast), Januar 2002: "Überprüfung. Eine Kombination aus statischen und dynamischen Analysen sollte vom Antragsteller/Entwickler angegeben und auf die Software angewendet werden."
  9. ^ VDC Research (2012-02-01). "Automatisierte Defektprävention für eingebettete Softwarequalität". VDC -Forschung. Archiviert vom Original am 2012-04-11. Abgerufen 2012-04-10.
  10. ^ Prause, Christian R., René Reiners und Silviya Dencheva. "Empirische Studie zur Unterstützung der Werkzeugunterstützung in hochverteilten Forschungsprojekten." Global Software Engineering (ICGSE), 2010 5. IEEE International Conference on. IEEE, 2010 http://ieeexplore.ieee.org/ielx5/5581168/5581493/05581551.pdf
  11. ^ M. Howard und S. Lipner. Der Lebenszyklus der Sicherheitsentwicklung: SDL: Ein Prozess zur Entwicklung nachweislich sicherer Software. Microsoft Press, 2006. ISBN978-0735622142
  12. ^ Achim D. Brucker und Uwe Sodan. Bereitstellung statischer Anwendungssicherheitstests in großem Maßstab Archiviert 2014-10-21 bei der Wayback -Maschine. In GI Sicherheit 2014. Vorlesungsnotizen in Informatik, 228, Seiten 91-101, GI, 2014.
  13. ^ "OMG Whitepaper | CISQ - Konsortium für Informations- und Softwarequalität" (PDF). Archiviert (PDF) vom Original am 2013-12-28. Abgerufen 2013-10-18.
  14. ^ Bartel, Alexandre; Klein, Jacques; Monperrus, Martin; Le Traon, Yves (1. Juni 2014). "Statische Analyse zum Extrahieren von Berechtigungsüberprüfungen eines großen Rahmens: die Herausforderungen und Lösungen zur Analyse von Android". IEEE -Transaktionen auf Software -Engineering. 40 (6): 617–632. Arxiv:1408.3976. doi:10.1109/tse.2014.2322867. S2CID 6563188.
  15. ^ Vijay d'Ilva; et al. (2008). "Eine Übersicht über automatisierte Techniken für die formelle Softwareüberprüfung" (PDF). Transaktionen auf CAD. Archiviert (PDF) vom Original am 2016-03-04. Abgerufen 2015-05-11.
  16. ^ Jones, Paul (2010-02-09). "Ein formaler methodbasierter Verifizierungsansatz zur Softwareanalyse für Medizinprodukte". Design eingebetteter Systeme. Archiviert von das Original am 10. Juli 2011. Abgerufen 2010-09-09.
  17. ^ a b "Lernen aus den Fehlern anderer: datengesteuerte Codeanalyse". www.slideshare.net. 13. April 2015.
  18. ^ Oh, Hakjoo; Yang, Hongseok; Yi, Kwangkeun (2015). "Erlernen einer Strategie zur Anpassung einer Programmanalyse über Bayesian -Optimierung". Verfahren der ACM Sigplan Internationalen Konferenz 2015 über objektorientierte Programmierung, Systeme, Sprachen und Anwendungen - OOPSLA 2015. S. 572–588. doi:10.1145/2814270.2814309. ISBN 9781450336895. S2CID 13940725.
  19. ^ Monperrus, Martin; Mezini, Mira (2013). "Erkennen fehlender Methodenaufrufe als Verstöße gegen die Mehrheitsregel". ACM -Transaktionen zu Software -Engineering und -Methodik. 22 (1): 1–25. Arxiv:1306.0762. doi:10.1145/2430536.2430541. S2CID 1212778.

Weitere Lektüre

  • Ayewah, Nathaniel;Hovemeyer, David;Morgenthaler, J. David;Penix, John;Pugh, William (2008)."Verwenden der statischen Analyse, um Fehler zu finden". IEEE -Software. 25 (5): 22–29. Citeseerx 10.1.1.187.8985. doi:10.1109/ms.2008.130. S2CID 20646690.
  • Brian Chess, Jacob West (Sechify -Software) (2007). Sichere Programmierung mit statischer Analyse. Addison-Wesley. ISBN 978-0-321-42477-8.
  • Flemming Nielson;Hanne R. Nielson;Chris Hankin (2004-12-10). Prinzipien der Programmanalyse (1999 (Korrektur 2004) ed.).Springer. ISBN 978-3-540-65410-0.
  • "Abstrakte Interpretation und statische Analyse", " Internationale Winterschule für Semantik und Anwendungen 2003 von, von David A. Schmidt