Frage

Ich habe die -Wstack-protector Warnung aktiviert, wenn das Projekt Kompilieren arbeite ich an (einen kommerziellen Multi-Plattform C ++ Spiel-Engine, Kompilieren unter Mac OS X 10.6 mit GCC 4.2). Diese Flagge warnt vor Funktionen, die geschützt werden nicht gegen Stack Smashing obwohl -fstack-protector aktiviert ist. GCC emittiert einige Warnungen, wenn das Projekt Aufbau:

  

nicht Schutzfunktion: kein Puffer mindestens 8 Byte lang
  nicht auf lokale Variablen zu schützen: Puffer variabler Länge

Für die erste Warnung, fand ich, dass es möglich ist, die Mindestgröße ein Puffer einstellen muß, wenn in einer Funktion verwendet hat, für diese Funktion gegen Stack Smashing geschützt werden: --param ssp-buffer-size=X kann verwendet werden, wobei X 8 standardmäßig und kann so niedrig wie 1 sein.

Für die zweite Warnung, ich kann sein Vorkommen nicht unterdrücken, wenn ich mit -Wstack-protector stoppen.

  1. Wann sollte -fstack-protector verwendet werden? (Wie in zum Beispiel der ganzen Zeit während des Entwicklers, oder einfach nur, wenn Tracking-Fehler nach unten?)
  2. Wann sollte -fstack-protector-all verwendet werden?
  3. Was sagt -Wstack-protector mich? Ist es was darauf hindeutet, dass ich die Pufferminimalgröße zu verringern?
  4. Wenn ja, gibt es Nachteile, die Größe auf 1 zu setzen?
  5. Es scheint, dass -Wstack-protector nicht die Art von Flag Sie jederzeit aktivieren möchten, wenn Sie eine Warnung frei bauen wollen. Ist das richtig?
War es hilfreich?

Lösung

Stapel-Schutz ist eine Verhärtung Strategie, nicht eine Debug-Strategie. Wenn Ihr Spiel ist netzwerkfähig oder sonst hat Daten aus einer nicht kontrollierten Quelle kommt, schalten Sie ihn ein. Wenn es keine Daten von irgendwo unkontrolliert kommen muss, kann es sich nicht einschalten.

Hier ist, wie er sich abspielt: Wenn Sie einen Fehler haben und einen Pufferwechsel auf etwas basiert machen kann ein Angreifer steuern kann, dass Angreifer die Absenderadresse oder ähnliche Teile des Stapels überschreiben, um zu bewirken sie ihren Code statt Ihrer auszuführen Code. Stapel Schutz wird Ihr Programm abbrechen, wenn es um dies feststellt. Ihre Benutzer werden nicht glücklich sein, aber sie werden auch nicht gehackt werden. Dies ist nicht die Art von Hacking, die über Betrug im Spiel ist, es ist die Art von Hacking, dass jemand über eine Schwachstelle in Ihrem Code eines Exploit zu schaffen, dass möglicherweise Ihre Benutzer infiziert.

Für das Debuggen orientierte Lösungen, Blick auf Dinge wie mudflap.

In Bezug auf Ihre speziellen Fragen:

  1. Verwenden Sie Stapelschutz, wenn Sie Daten aus unkontrollierten Quellen. Die Antwort ist wahrscheinlich ja. So verwenden. Auch wenn Sie Daten aus unkontrollierten Quellen nicht haben, werden Sie wahrscheinlich irgendwann oder bereits tun und erkennen nicht, es.
  2. Stack-Schutz für alle Puffer verwendet werden, wenn Sie im Austausch für einige Leistungseinbußen zusätzlichen Schutz wünschen. Von gcc4.4.2 Handbuch :

      
        
          

    -fstack-Protektor

                 

    Zusatzcode Emit für Pufferüberlauf zu überprüfen, wie Stack Smashing-Angriffe. Dies wird durch das Hinzufügen einer Wache Variable Funktionen mit empfindlichen Objekten gemacht. Dies umfasst Funktionen, die alloca nennen, und Funktionen mit Puffern größer als 8 Bytes. Die Wachen werden initialisiert, wenn eine Funktion eingegeben und dann überprüft, wenn die Funktion beendet. Wenn eine Schutzprüfung fehlschlägt, wird eine Fehlermeldung ausgegeben und das Programm beendet.

                 

    -fstack-Protektor-alle

                 

    Wie -fstack-Schutz außer, dass alle Funktionen geschützt sind.

        
      
  3. Die Warnungen Ihnen sagen, was puffert der Schutz Stapel kann nicht schützen.

  4. Es ist nicht unbedingt darauf hindeutet Sie Ihre minimale Puffergröße zu verringern, und bei einer Größe von 0/1, es ist die gleiche wie Stapelschutz-all. Es zeigt nur, um Sie aus, so dass Sie, wenn Sie den Code entscheiden, neu zu gestalten, so dass Puffer geschützt ist.
  5. Nein, diese Warnungen nicht darstellen Fragen, weisen sie nur Informationen, die Sie aus. Sie sie nicht regelmäßig verwenden.

Andere Tipps

Sie sollten in der Tat über die Warnung nicht Pflege für normale baut. Es ist wirklich eher eine Informationsnachricht. Ich hoffe, dass es offensichtlich ist, dass Sie ein inhärentes Sicherheitsproblem mit variabler Größe Puffern auf dem Stack zu tun haben; erhalten die Größe Berechnung falsch und Sie öffnen ein großes Loch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top