Erzeugt mein C++ Compiler Dateien mit Schadcode?



  • Ich habe gerade eben meine Platte mit F-Prot durchsucht und die einzige Datei wo er angeschlagen hat, war eine Datei, die ich selbst aus eigenem C++ Code erstellt habe.

    Mein Code enthält keinerlei Schadroutinen, daher wundert es mich doch sehr, dass der Virenkiller da anschlägt.

    Wäre es denkbar, dass der Compiler kompromittiert ist und schadhafte Binarys erstellt, also zu meinen EXE Dateien noch etwas hinzufügt?



  • Ja, ist denkbar. 🙂



  • Wenn der Compiler da etwas einbaut, dann sollte das auch bei anderen Compiliervorgängen der Fall sein, richtig?

    Wenn ja, dann könnte ich zumindest so den Compiler als Übel entlarven.



  • Wäre es denkbar, dass der Compiler kompromittiert ist und schadhafte Binarys erstellt, also zu meinen EXE Dateien noch etwas hinzufügt?

    Das wäre schon sehr außergewöhnlich 😮

    Ich schätze es ist einfach irgenwas in deinem Code dass vom Virenscanner erkannt wird (false positive).



  • Der Code ist nix besonders und war nur ein kleiner Test.

    Er sieht so aus:

    main.cpp

    #include "Main.h"
    #include <iostream>
    #include <cstdlib>
    
    int i;
    
    using namespace std;
    
    void aufzaehlung()
    {
      int j  = 0 ;
      cout << "Schleifeneinstieg\n";
      for (i = 1; i < 5; ++i)
      {
              cout << "  " << i << "\n";
    
          if (i == 4)
          {
                      cout << "fertig" << endl;
          }
      }
      cout << " j = " << j << endl;
      cout << " i = " << i << endl;
    
      for(j = 1; j < 10; ++j){
              cout << " " << j << "\n";
      }
      cout << "Gleich noch ne Ausgabe" << endl;
      cout << "fertig " << j << endl;
    }
    
    int main(){
              cout << "i = " << i << endl;
    
              aufzaehlung();
              cout << i << endl;
              system ("PAUSE");
              return 0;
    }
    

    main.h

    #ifndef MAIN_H_
    #define MAIN_H_
    
    class Main {
    
    public:
            Main();
            virtual ~Main();
    };
    
    #endif /* MAIN_H_ */
    

    compiliert wurde das ganze mit g++ und die IDE war Eclipse mit C++ Unterstützung.



  • was ist den das für ein Müll-Code?
    Kein Wunder dass der Virenscanner da anschlägt 😃

    Das ist C++ und nicht Java. Also nix da class Main und so...
    Auch system("PAUSE") ist Müll. Kannst ja noch ein Zeichen einlesen damit das Konsolenfesnter nicht sofort wieder zuklappt, aber bitte kein system() Aufruf!
    Auch die endl kannst du dir sparen, mach einfach ein '\n'. endl ist etwas mehr als nur ein Zeilenumbruch!



  • lolalter schrieb:

    was ist den das für ein Müll-Code?

    😃

    Das ist Müll-Code weil das Testcode ist, aber habe ich ja gesagt. 😃

    Auch die endl kannst du dir sparen, mach einfach ein '\n'. endl ist etwas mehr als nur ein Zeilenumbruch!

    Warum ist das mehr?

    Ich würde mal sagen, der Compiler wandelt das sowieso in \n um.



  • Security Break schrieb:

    Auch die endl kannst du dir sparen, mach einfach ein '\n'. endl ist etwas mehr als nur ein Zeilenumbruch!

    Warum ist das mehr?

    Ich würde mal sagen, der Compiler wandelt das sowieso in \n um.

    hast schon Recht, endl erzeugt genauso wie '\n' einen Zeilenumbruch, ABER es leert zusätzlich auch noch den Ausgabepuffer. Das ist aber meistens nicht nötig.

    Zum ursprünglichen Thema: AV Programme suchen oft nach bestimmten Mustern in Programmen, vielleicht hat dein Programm ja zufällig ein solches Muster.
    Lad die exe mal hoch und lass die im Inet checken, z.B. hier: https://www.virustotal.com/de/



  • Habe ich schon gemacht.

    6 andere Virenkiller melden auch etwas.



  • Du könntest uns auch sagen was sie melden.
    Also nur mal so ne Idee.
    Vielleicht gleicht ganz kühn das Ergebnis von VirusTotal verlinken.



  • Bkav 	W32.HfsAutoB.Ec04 	
    Commtouch 	W32/Symmi.I.gen!Eldorado 	
    F-Prot 	W32/Symmi.I.gen!Eldorado 	
    Ikarus 	Trojan.Win32.Menti 	
    K7GW 	Riskware ( 91dc986d0 )
    


  • Das Witzige ist der Effekt von std::system("foo"); ist implementation-defined, das heißt ein Compiler wäre sogar standardkonform, wenn er da Schadcode aufruft. 😋
    Aber ich hatte so etwas in der Art auch schon mal.
    Folgendes Programm wurde als Virus erkannt und sofort gelöscht:

    #include <iostream>
    
    int main()
    {
    
    }
    

    Lässt sich nach dem Compilerupdate aber leider nicht mehr reproduzieren.



  • Die Antiviren-Branche besteht aus absoluten Dilettanten und selbst wenn das auf manche nicht zutrifft, lassen diese sich das nicht anmerken.

    Wie oft ist es schon passiert, dass Signaturen von Compiler- oder Sprachruntimes in den Datenbanken der Antiviren-Pusher gelandet sind. Grund dafür war meist einfach nur, dass jemand ein Stück Malware in der entsprechenden Sprache geschrieben oder mit einem entsprechenden Compiler kompiliert hat. Kurz darauf bezeichneten die Antiviren plötzlich alle Binarys eines Compilers als bösartig.

    Das ganze Antiviren-Zeugs inkl. fast jeder Art von "Security-Software" ist einfach nur völlig unnütz. Schlagenöl. Niemand braucht das, aber es lässt sich prima ein Geschäft damit machen, also wird auch damit weitergemacht ein völlig kaputtes Konzept weiterzuentwickeln. Geht ja auch kaum besser als Kunden zu haben, die regelmäßig ihr Abo verlängern müssen. Sowas gibt man nicht so schnell auf.

    Auch unter Windows benötigt man keine Antiviren! Im Gegenteil, wahrscheinlich ist Windows ohne die Rumpfuschereien der Antiviren-Hersteller sogar sicherer. Robuster und schneller ist es auf jeden Fall.



  • <q>Das ganze Antiviren-Zeugs inkl. fast jeder Art von "Security-Software" ist einfach nur völlig unnütz. Schlagenöl. Niemand braucht das,</q>

    Wie erkennst du bei einer Datei die du von jemandem erhalten hast, dass sie keinen Schadcode enthält ohne jetzt einen umfangreich Code Audit durchzuführen?

    Erstellst du für jede Datei, die du erhälst eine Sandbox z.B. in Form eines Systems in einer VM?



  • Security Break schrieb:

    Erstellst du für jede Datei, die du erhälst eine Sandbox z.B. in Form eines Systems in einer VM?

    Eigentlich führe ich überhaupt keine Binaries aus, die andere mir schicken. Außer den Spammern schickt mir sowieso niemand Executables.

    Wenn ich es partout nicht lassen könnte, ein mir zugeschicktes Programm auszuführen, ja, dann wahrscheinlich in einer virtuellen Maschine.

    Übrigens ist es trivial an einem Schadprogramm solange rumzubasteln bis es keiner der 1e9 Virenscanner bei jotti oder virustotal mehr erkennt.



  • Antikasper schrieb:

    Security Break schrieb:

    Erstellst du für jede Datei, die du erhälst eine Sandbox z.B. in Form eines Systems in einer VM?

    Eigentlich führe ich überhaupt keine Binaries aus, die andere mir schicken. Außer den Spammern schickt mir sowieso niemand Executables.

    Ein präpariertes Bild reicht schon.

    Übrigens ist es trivial an einem Schadprogramm solange rumzubasteln bis es keiner der 1e9 Virenscanner bei jotti oder virustotal mehr erkennt.

    Klar geht das, solche Viren haben aber nur wenige Kanten zum Virenschreiber (Anfangsknoten).
    D.h. so ein Virus erreicht nicht die breite Masse in freier Wildbahn, tut er es doch, dann kennen ihn auch die Virenscanner.
    Die Wahrscheinlichkeit dass du von deinem Onkel einen ganz speziellen Virus bekommst, ist doch eher gering und wenn es jemand auf dich abgesehen hat, also extra für dich Schadcode schreibt, dann würde ich mich an deiner Stelle nicht einmal auf die VM verlassen.



  • Ich hab das gleiche Problem auch schon mal gehabt. Es war auch F-prot soweit ich mich erinnere.

    Es ging um ein absolut harmloses Programm das lediglich log-Dateien aufbereitet. Kompiliert mit Visual Studio.



  • Security Break schrieb:

    Ein präpariertes Bild reicht schon.

    Nun, das impliziert ja die Ausnutzung einer Sicherheitslücke im Bildbetrachter. Wir haben dann zwei Möglichkeiten:

    1. die genutzte Lücke ist bislang unbekannt. In dem Fall enthält die Datenbank des Antiviren-Produkts aber auch keine Signatur des passenden Exploits.
    2. das präparierte Bild greift eine bekannte Schwachstelle im Bildbetrachter an. Hier liegt die Lösung wohl eher darin, das betroffene Programm zu korrigieren anstatt mit irgendwelchen Antiviren rumzufummeln.

    Es gibt durchaus Umstände, in denen Antiviren nicht völlig nutzlos sind. Nämlich dann wenn man annimmt, dass Software mit bekannten Schwachstellen verwendet wird, aber ausgerechnet die Antiviren gleichzeitig topaktuell gehalten werden. Eine Lösung für dieses recht spezielle Problem wird uns aber als Essenz des Kampfes gegen Schadsoftware verkauft.

    Warum? Weil man ernsthafte Sicherheit nicht in Form eines Produkts in einer bunten Schachtel verkaufen kann. Und weil Antivirenhersteller nur allzu gerne ein Bedürfnis ihrer Kundschaft bedienen: Verantwortung möchte weitergegeben werden, dafür zahlt man auch gern. Immerhin kann man mit dem Finger auf den ollen Dr. Norton zeigen, wenn was schief geht und behaupten man hätte ja was gemacht. So funktioniert Sicherheit aber nicht.



  • DarkShadow44 schrieb:

    Ich schätze es ist einfach irgenwas in deinem Code dass vom Virenscanner erkannt wird (false positive).

    Gehe ich auch von aus, sofern nicht der Virus bereits auf dem Rechner ist und exen befällt. False Positiv ist ja nicht selten. Wir hatten auch schon ein paar mal mit Antivirenherstellern [u.a. Avira] Kontakt, die dann unser Programm genauer untersucht haben und ihre Virendefinitionsdatei entsprechend mit dem nächsten Update angepasst hatten um dieses Programm nicht mehr anzumarkeln.



  • Hatte mal auch das Vergnügen das eins meiner Programme als Virus erkannt wurde. Irgenteine dumme Heuristik motzte da herum.

    War ein einfaches Program. Zeigte nur seine GUI an und rufte ein paar externe Programm auf. Noch nicht einmal im Ansatz war Virencode erkennbar.

    Hab das Ganze mal dadurch verschlimmbessert, in dem ich an den Compileroptionen herum gedreht habe. Als ich das automatische Inlining ausgeschaltet habe, schlug kein Virenscanner mehr an.

    Das ganze Antiviren-Zeugs inkl. fast jeder Art von "Security-Software" ist einfach nur völlig unnütz.

    Du NSA Troll. :p


Log in to reply