Werden Compiler in der Regel überprüft, um sicherzustellen, dass sie den Benutzercomputer beim Kompilieren eines cleveren Codeteils nicht beschädigen?
Im Allgemeinen sind sie zu komplex und werden oft in Sprachen geschrieben, in denen es nicht praktisch ist, diese Eigenschaft zu beweisen.
Möglicherweise nicht mit dieser speziellen Absicht, aber der Begriff der Fuzz-Test-Compiler ist zumindest bekannt ( LLVM kann sich jetzt selbst auf Fuzz testen ). Tests sollen Fang Eingang, der den Compiler aufgrund Compiler - Fehler abstürzt wird dazu neigen , auch verwertbare Fehler auftauchen.
Natürlich müssten Sie prüfen, ob der spezielle Compiler, an dem Sie interessiert sind, getestet oder fuzzgetestet ist, um mögliche Abstürze zu finden, und ob die so gefundenen Fehler tatsächlich behoben sind. Als Faustregel gilt: Wenn es zu Abstürzen kommt, die schlimmer sind als Ausnahmen aufgrund fehlenden Arbeitsspeichers, dann müssen Sie, ohne die Details weiter zu untersuchen, eine ernsthafte Möglichkeit in Betracht ziehen, dass sie zu Exploits führen können.
Wie sicher ist es, einen Code von einem Fremden zu kompilieren?
Leider, wie lang ist ein Stück Schnur. Im Prinzip kann die E-Mail Ihren E-Mail-Client ausnutzen, oder der Quellcode kann Ihren Texteditor oder Cppcheck ausnutzen, bevor er überhaupt Ihren Compiler erreicht. Sebastians Vorschlag in Kommentaren, einen Online-Compiler zu verwenden, ist ziemlich gut, aber natürlich muss der Code in einer Form vorliegen, die der Compiler akzeptieren wird.
Jede Sprache oder jeder Compiler, der die Möglichkeit hat, allgemeinen Code zur Kompilierungszeit auszuführen, ist natürlich sehr verdächtig. C ++ - Vorlagen sind funktional vollständig, haben jedoch keinen (beabsichtigten) Zugriff auf das System, sodass sie ein relativ geringes Risiko aufweisen. BЈовић erwähnt make
als extrem risikoreich (da es den Code des Fremden ausführt, ist es nur, dass der Code in der make
Sprache geschrieben ist, nicht in C ++). Wenn der Compiler ausgeführt wird, befinden system
Sie sich im selben Boot. Ich habe mit einem Assembler gearbeitet, der, wenn ich mich recht erinnere, eine beliebige Ausführung von Code zur Kompilierungszeit ausführen konnte. Es war für die Berechnung von Nachschlagetabellen gedacht, aber ich glaube, nichts hat Sie daran gehindert, Systemaufrufe zu tätigen.
In der Praxis , wenn der Code für mich in Ordnung aussieht und ich denke, dass ich ihn verstehe, würde ich das Risiko, ihn zu kompilieren, als äußerst gering einschätzen. Ich mache routinemäßig riskantere Dinge auf meinem Allzweckcomputer, aber viele davon würde ich nicht tun, z. B. in einem Virenlabor oder auf einem kritischen Server. Wenn der Code komisch aussieht oder offensichtlich verschleiert ist, riskiere ich möglicherweise nicht, ihn zu kompilieren, da er, abgesehen von dem Risiko, einen Exploit enthalten könnte, der im unlesbaren Müll versteckt ist, Müllcode ist. Hinterhältiger Code ist schwierig, aber möglich. Verdeckter Code, der den Computer über einen Compiler-Exploit pwnt, muss eine nicht triviale ausführbare Nutzlast enthalten, was äußerst schwierig ist.
Wenn Sie dies weiter untersuchen möchten, fragen Sie die Leute, die Online-Compiler hosten. Wenn es ihnen nicht angetan wurde (es sei denn, Sie werden von der NSA oder einer vergleichbaren Behörde darauf hingewiesen), können Sie davon ausgehen, dass es Ihnen nicht angetan wird. Sie geben sich etwas Mühe, ihren Compiler in einer richtigen Sandbox auszuführen, was möglicherweise mehr Aufwand bedeutet, als Sie bereit sind, aber sie können Ihnen möglicherweise zumindest mitteilen, wie oft diese Sandbox ihnen Probleme erspart.