1. Foren
  2. Kommentare
  3. Security-Forum
  4. Alle Kommentare zum Artikel
  5. › Trojan Source…

Codebeispiel?

Neue Foren im Freiraum! Raumfahrt und freie Software haben jetzt einen Platz, die Games tummeln sich jetzt alle in einem Forum.
  1. Thema

Neues Thema


  1. Codebeispiel?

    Autor: AllDayPiano 02.11.21 - 12:59

    Wie sieht der Code dann aus?

    Fängt der Compiler dann an, den Code von rechts nach links zu compilieren, wenn die entsprechenden Anweisungen vorhanden sind? Dann wäre das ja immernoch der gleiche Code, nur rückwärts.

    Ich hab so gar keine Vorstellung davon, wie das aussieht. Gibt's da Beispiele?

    Alles, was oben steht, ist eine Meinung. Meine Meinung. Wenn ich eine absolute Aussage treffe, dann ist das ebenfalls eine Meinung. Meine Meinung. Wenn ich etwas mit Quellen belege, ist es entsprechend gekennzeichnet und damit keine Meinung, sondern eine Schlussfolgerung oder Tatsachendarstellung. Gut, dass wir das jetzt abschließend geklärt haben. Springen wird Golem.de trotzdem weiterhin.

  2. Re: Codebeispiel?

    Autor: Mel 02.11.21 - 13:06

    AllDayPiano schrieb:
    --------------------------------------------------------------------------------
    > Wie sieht der Code dann aus?
    >
    > Fängt der Compiler dann an, den Code von rechts nach links zu compilieren,
    > wenn die entsprechenden Anweisungen vorhanden sind? Dann wäre das ja
    > immernoch der gleiche Code, nur rückwärts.
    >
    > Ich hab so gar keine Vorstellung davon, wie das aussieht. Gibt's da
    > Beispiele?

    Beispiel:

    // Mach_boese_Dinge()

    Sieht für den Menschlichen Betrachter aus als wäre die Funktion ein Kommentar und damit ohne Wirkung.
    Tatsächlich verarbeitet der Compiler die Codezeile aber von hinten und interpretiert das als

    Mach_boese_Dinge() //

  3. Re: Codebeispiel?

    Autor: twothe 02.11.21 - 13:15

    > if (accessLevel != "user‮ ⁦// Check if admin⁩ ⁦") {

    So stehts im Code. Aber:
    https://i.postimg.cc/7hgMfQbd/unicodeissue.png

    So sieht das dann in meiner IDE (Netbeans) aus. Der Comment ist so manipuliert, das bei "user" das 2. " nach hinten verschoben wird, damit schlägt die Prüfung immer fehl. Netbeans stellt das aber ordentlich dar, so das das sofort auffällt. Andere IDEs sind nicht so gut.



    1 mal bearbeitet, zuletzt am 02.11.21 13:15 durch twothe.

  4. Re: Codebeispiel?

    Autor: lvds 02.11.21 - 13:19

    Müsste das nicht eher so sein?
    aus:
    // () od
    wird:
    do() //

  5. Re: Codebeispiel?

    Autor: franzropen 02.11.21 - 13:30

  6. Re: Codebeispiel?

    Autor: Black616Angel 02.11.21 - 13:55

    Coole Sache.
    Für alle Faulen, so sieht das dann aus: (Rust)
    In VSCode:
    > fn main() {
    > let is_admin = false;
    > /* begin admins only */ if is_admin {
    > println!("You are an admin.");
    > /* end admins only */
    > }
    Notepad:
    > fn main() {
    > let is_admin = false;
    > /*‮ }if is_adminbegin admins only */
    > println!("You are an admin.");
    > /* end admins only ‮ { */
    > }

    Der Compiler schmeißt da bei mir allerdings schon Fehler:
    "unicode codepoint changing visible direction of text present in comment.
    this comment contains invisible unicode text flow control codepoints."



    1 mal bearbeitet, zuletzt am 02.11.21 13:57 durch Black616Angel.

  7. Re: Codebeispiel?

    Autor: AllDayPiano 02.11.21 - 14:07

    Ok, das zeigt es anschaulich, aber es kommt halt auch absoluter Kauderwelsch heraus. Die Prüfung schlägt immer fehl - der Code ist tot.

    Es reicht ja nicht nur, den Compiler mit Kommentaren auszutricksen, sondern man muss ja den gesamten Schadcode so programmieren, dass er auf den ersten Blick syntaktisch korrekt ist, und sein wahres Ziel verschleiert. Und ich denke das ist der Punkt, ab dem es ziemlich unpraktikabel ist.

    Alles, was oben steht, ist eine Meinung. Meine Meinung. Wenn ich eine absolute Aussage treffe, dann ist das ebenfalls eine Meinung. Meine Meinung. Wenn ich etwas mit Quellen belege, ist es entsprechend gekennzeichnet und damit keine Meinung, sondern eine Schlussfolgerung oder Tatsachendarstellung. Gut, dass wir das jetzt abschließend geklärt haben. Springen wird Golem.de trotzdem weiterhin.

  8. Re: Codebeispiel?

    Autor: AllDayPiano 02.11.21 - 14:08

    Meldet er da keinen Fehler, dass die Kommentare nicht geschlossen sind? Immerhin wird ein */ zu einem /*?!

    (Ich kenne Rust nicht)

    Alles, was oben steht, ist eine Meinung. Meine Meinung. Wenn ich eine absolute Aussage treffe, dann ist das ebenfalls eine Meinung. Meine Meinung. Wenn ich etwas mit Quellen belege, ist es entsprechend gekennzeichnet und damit keine Meinung, sondern eine Schlussfolgerung oder Tatsachendarstellung. Gut, dass wir das jetzt abschließend geklärt haben. Springen wird Golem.de trotzdem weiterhin.

  9. Re: Codebeispiel?

    Autor: AllDayPiano 02.11.21 - 14:09

    Lustigerweise kann man den Code nichtmal kopieren, wenn man nicht genau weiß, wo die Verdrehung ist, da Firefox zumindest den Teil nicht mit markiert (außer, man fährt nochmal manuell mit der Maus von rechts nach links darüber).

    Alles, was oben steht, ist eine Meinung. Meine Meinung. Wenn ich eine absolute Aussage treffe, dann ist das ebenfalls eine Meinung. Meine Meinung. Wenn ich etwas mit Quellen belege, ist es entsprechend gekennzeichnet und damit keine Meinung, sondern eine Schlussfolgerung oder Tatsachendarstellung. Gut, dass wir das jetzt abschließend geklärt haben. Springen wird Golem.de trotzdem weiterhin.

  10. Re: Codebeispiel?

    Autor: Jakelandiar 02.11.21 - 14:21

    AllDayPiano schrieb:
    --------------------------------------------------------------------------------
    > Ok, das zeigt es anschaulich, aber es kommt halt auch absoluter
    > Kauderwelsch heraus. Die Prüfung schlägt immer fehl - der Code ist tot.
    >
    > Es reicht ja nicht nur, den Compiler mit Kommentaren auszutricksen, sondern
    > man muss ja den gesamten Schadcode so programmieren, dass er auf den ersten
    > Blick syntaktisch korrekt ist, und sein wahres Ziel verschleiert. Und ich
    > denke das ist der Punkt, ab dem es ziemlich unpraktikabel ist.

    Tut es doch im Beispiel. Dort ist man nun immer Admin. Liegt an der Prüfung da diese nicht prüft ob man Admin ist sonder das man kein User ist. Mit dem Code ist man immer kein User also immer admin.

  11. Re: Codebeispiel?

    Autor: TheRealDarklord 02.11.21 - 14:25

    Das betrifft ja nicht nur explizit kompilierende Sprachen, sondern auch sowas wie PHP, JavaScript usw.

    PHP Beispiel:
    <?php
    $secure = false;
    $admin = false;

    /* ‮} (eurt === nimda$) fi ‭ */
    $secure = true;
    /* ‮ { ‭ */

    var_dump($secure);


    Im Ergebnis ist $secure gleich true, obwohl die Zuweisung augenscheinlich mit einer Condition umschlossen ist. Und wenn man den Kommentar nicht nur exemplarisch leer lässt, sondern mit Text befüllt wie "start of admin check", dann wirkt der Kommentar nichtmal allzu deplatziert.

    Selbst wenn die IDE einem nett sagt, dass hier was faul ist, reicht das nur bedingt. Es müssten ja alle Dateien überprüft werden, nicht nur geöffnete. Und das eigentlich regelmäßig.

    Hier sehe ich einen Prüfschritt in der Pipeline als Möglichkeit.



    2 mal bearbeitet, zuletzt am 02.11.21 14:28 durch TheRealDarklord.

  12. Re: Codebeispiel?

    Autor: twothe 02.11.21 - 14:29

    TheRealDarklord schrieb:
    --------------------------------------------------------------------------------
    > /* ‮} (eurt === nimda$) fi ‭ */
    > $secure = true;
    > /* ‮ { ‭ */

    An der Stelle sollte aber jeder der sich ein bisschen mit CleanCode beschäftigt hat sofort die Kommentare löschen.

  13. Re: Codebeispiel?

    Autor: AllDayPiano 02.11.21 - 14:38

    Naja außer die copy paste Fraktion.

    Alles, was oben steht, ist eine Meinung. Meine Meinung. Wenn ich eine absolute Aussage treffe, dann ist das ebenfalls eine Meinung. Meine Meinung. Wenn ich etwas mit Quellen belege, ist es entsprechend gekennzeichnet und damit keine Meinung, sondern eine Schlussfolgerung oder Tatsachendarstellung. Gut, dass wir das jetzt abschließend geklärt haben. Springen wird Golem.de trotzdem weiterhin.

  14. Re: Codebeispiel?

    Autor: AllDayPiano 02.11.21 - 14:43

    Aber wie hilft das einem Angreifer?

    Ich verstehe das Szenario nicht. Der Kern ist doch, legitime Software ungewollt zur Schadsoftware zu machen.

    Dein Beispiel ergibt einen Bug, der beim testen auffallen muss. Was ein Angreifer will, ist sich Zugang zum System zu machen. Das klappt ja eigentlich nur, wenn eine legitime Bibliothek, die niemand im Source ansieht, infiltriert wird. Und dann hofft der Hacker, dass das Ziel dieses Modul eingebunden hat, und verwundbar ist.

    Ich sage nicht, dass das nicht plausibel ist, aber der Aufwand, so eine Vulnerabilität in einen verbreiteten Code einzufügen, ist schon enorm hoch.

    Alles, was oben steht, ist eine Meinung. Meine Meinung. Wenn ich eine absolute Aussage treffe, dann ist das ebenfalls eine Meinung. Meine Meinung. Wenn ich etwas mit Quellen belege, ist es entsprechend gekennzeichnet und damit keine Meinung, sondern eine Schlussfolgerung oder Tatsachendarstellung. Gut, dass wir das jetzt abschließend geklärt haben. Springen wird Golem.de trotzdem weiterhin.

  15. Re: Codebeispiel?

    Autor: Dakkaron 02.11.21 - 15:02

    AllDayPiano schrieb:
    --------------------------------------------------------------------------------
    > Aber wie hilft das einem Angreifer?
    >
    > Ich verstehe das Szenario nicht. Der Kern ist doch, legitime Software
    > ungewollt zur Schadsoftware zu machen.
    >
    > Dein Beispiel ergibt einen Bug, der beim testen auffallen muss. Was ein
    > Angreifer will, ist sich Zugang zum System zu machen. Das klappt ja
    > eigentlich nur, wenn eine legitime Bibliothek, die niemand im Source
    > ansieht, infiltriert wird. Und dann hofft der Hacker, dass das Ziel dieses
    > Modul eingebunden hat, und verwundbar ist.
    >
    > Ich sage nicht, dass das nicht plausibel ist, aber der Aufwand, so eine
    > Vulnerabilität in einen verbreiteten Code einzufügen, ist schon enorm hoch.

    Stell dir vor, jemand kriegt sowas in einen komplizierten, schwer zu testenden Code in den Linux-Kernel rein. Kann schon passieren, dass der Tester nicht brav alle Optionen durchtestet, sondern eine obskure Kombination vergisst. Und plötzlich hat der Bösnigel eine 0-Day-Lücke auf Milliarden von Geräten. Und für Privilege Escalation reicht oft nur ein einziges Zeichen.

    Der Demo-Code ist natürlich eher doof (soll ja kurz und verständlich sein), aber er verdeutlicht, was geht.

  16. Re: Codebeispiel?

    Autor: franzropen 02.11.21 - 16:42

    Du platzierst mehrere solcher Bugs und beim nächsten Release prüfst du ob welche durchgekommen sind. Du weißt ja wo du suchen musst, während die Prüfer keinen übersehen dürfen

  17. Re: Codebeispiel?

    Autor: robinx999 02.11.21 - 17:05

    Interessant sieht aber in jedem Editor anders aus und so dürfte es schwer durch kontrollen durchkommen, da zu viele Leute zu viele Editoren nutzen. Kate stellt plötzlich die ganze Zeile Rechtsbündig dar, was natürlich direkt ins Auge springt

    Aber ja die Warnung die Github jetzt zeigt könnte schon mal helfen, nicht das doch noch irgendwo ein derartiger Code durchrutscht

  18. Re: Codebeispiel?

    Autor: Dakkaron 02.11.21 - 19:25

    Man kann das auch wesentlich schöner manipulieren. Im Paper gibt es ein paar sehr schöne Code-Beispiele, die man wahrscheinlich sehr ähnlich in fast jedem Projekt unterbringen kann.

    https://trojansource.codes/trojan-source.pdf

  19. Re: Codebeispiel?

    Autor: Gamma Ray Burst 03.11.21 - 09:24

    Black616Angel schrieb:
    --------------------------------------------------------------------------------
    > Coole Sache.
    > Für alle Faulen, so sieht das dann aus: (Rust)
    > In VSCode:
    > > fn main() {
    > > let is_admin = false;
    > > /* begin admins only */ if is_admin {
    > > println!("You are an admin.");
    > > /* end admins only */
    > > }
    > Notepad:
    > > fn main() {
    > > let is_admin = false;
    > > /*‮ }if is_adminbegin admins only */
    > > println!("You are an admin.");
    > > /* end admins only ‮ { */
    > > }
    >
    > Der Compiler schmeißt da bei mir allerdings schon Fehler:
    > "unicode codepoint changing visible direction of text present in comment.
    > this comment contains invisible unicode text flow control codepoints."


    Interessant … Rust scheint das zu prüfen

  1. Thema

Neues Thema


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Sie müssen ausserdem in Ihrem Account-Profil unter Forum einen Nutzernamen vergeben haben. Zum Login

Stellenmarkt
  1. IT Security Analyst (m/w/d)
    Schaeffler Technologies AG & Co. KG, Herzogenaurach
  2. Wissenschaftliche Mitarbeiterin (w/m/d) für die Digitalisierung von Prozessen des Projektmanagements
    Deutsches Elektronen-Synchrotron DESY, Hamburg
  3. HPC Ingenieur*in / Softwareingenieur*in (m/w/d)
    ARTS Holding SE, Darmstadt
  4. IT-Spezialistin/IT-Spezialist Kommunikation & Kollaboration / Smart Work (m/w/d)
    Landschaftsverband Rheinland LVR-InfoKom, Köln

Detailsuche


Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Hardware-Angebote


Haben wir etwas übersehen?

E-Mail an news@golem.de