Ist das ganze Message System nicht ein riesen Security Loch?



  • Ich meine, man kann es nicht verhindern, die Nachrichten eines anderen Senders zu verarbeiten, oder? Ich kann ja nicht zuverlässig herausfinden, ob das HWND Handle in wParam wirklich meines ist oder ob die Nachricht von einem anderen Prozess kommt. Es ist ja nicht wirklich schwierig das HWND Handle zu faken.
    Wieso hat MS hier keine Möglichkeit eingebaut, das zuverlässig herauszufinden?





  • Nachrichten für Dein Fenster kommen doch in aller Regel von einem anderen Prozess?! Oder schickst Du Dir selbst Nachrichten an Deine Fenster?



  • dot schrieb:

    http://en.wikipedia.org/wiki/User_Interface_Privilege_Isolation 😉

    Das hindert aber immer noch kein Programm daran mein Programm zu überwachen, Nachrichten zu schicken etc.
    Vllt bin ich einfach nur zu Amateur um es gut zu finden, dass ich nicht weiss woher die Nachricht kommt.
    Mich stört das jedenfalls.

    Belli schrieb:

    Nachrichten für Dein Fenster kommen doch in aller Regel von einem anderen Prozess?! Oder schickst Du Dir selbst Nachrichten an Deine Fenster?

    Die können vom System kommen, Kindfenstern etc. Und ja, du kannst selber Nachrichten an dich selber auslösen, was manchmal sehr sinnvoll ist. Man kann aber nie rausfinden, von wem die stammt.



  • Scorcher24 schrieb:

    dot schrieb:

    http://en.wikipedia.org/wiki/User_Interface_Privilege_Isolation 😉

    Das hindert aber immer noch kein Programm daran mein Programm zu überwachen, Nachrichten zu schicken etc.

    Ähm, doch!?



  • dot schrieb:

    Scorcher24 schrieb:

    dot schrieb:

    http://en.wikipedia.org/wiki/User_Interface_Privilege_Isolation 😉

    Das hindert aber immer noch kein Programm daran mein Programm zu überwachen, Nachrichten zu schicken etc.

    Ähm, doch!?

    Ähm, nein? Ich kann an jedes Programm Nachrichten schicken von dem ich das HWND habe.



  • Scorcher24 schrieb:

    dot schrieb:

    Scorcher24 schrieb:

    dot schrieb:

    http://en.wikipedia.org/wiki/User_Interface_Privilege_Isolation 😉

    Das hindert aber immer noch kein Programm daran mein Programm zu überwachen, Nachrichten zu schicken etc.

    Ähm, doch!?

    Ähm, nein? Ich kann an jedes Programm Nachrichten schicken von dem ich das HWND habe.

    Nur wenn du entsprechende Rechte hast!?



  • Scorcher24 schrieb:

    Und ja, du kannst selber Nachrichten an dich selber auslösen, was manchmal sehr sinnvoll ist. Man kann aber nie rausfinden, von wem die stammt.

    Klar kann man das. Aber in der Regel kommen Nachrichten doch von außen: Maus wurde bewegt, Maustaste wurde gedrückt, Taste auf Tastatur wurde gedrückt usw. Ich halte es für relativ uninteressant, woher GENAU die Nachricht kommt. Ich weiß ja auch nie, ob da nun Lieschen oder Fritz den Button gedrückt hat, auf den mein Programm nun reagieren soll.



  • @Belli
    Ach ne, so uninteressant ist das nicht.
    Man kann viel zu viel über Window-Messages machen als dass es in allen Fällen total uninteressant wäre.

    Wenn MS das nicht speziell abgesichert hätte könnte ein Programm auch seinen eigenen Elevation-Dialog wegklicken.



  • Hallo,

    mit diesem kleinen Testprogramm konnte ich eine andere Anwendung fernsteuern:

    #include <windows.h>
    
    #include <iostream.h>
    
    int main( void )
    {
    	HWND opfer = FindWindow( MAKEINTRESOURCE(32770), "CRESD MIDI Tools 2.0" );
    
    	if( opfer )
    	{
    		cout << "Opfer gefunden\n";
    		SendMessage( opfer, WM_COMMAND, IDCANCEL, NULL );
    	}
    	else
    		cout << "Pech gehabt\n";
    
    	return 0;
    

    Das zeigt ein potentieller Angreifer kann schon ziemlich viel Unfug treiben. Das ganze habe ich mit Windows 7 64-bit getestet. Beide Anwendungen waren aber 32-Bitanwendungen. Irgendwelche Schutzmassnahmen wurden nicht ergriffen.

    mfg Martin



  • Wenn es ein Programm schafft auf Deinem Rechner mit den gleichen Rechten ausgeführt zu werden, wie alle anderen Programm auch, dann hast Du ein Problem...



  • Jochen Kalmbach schrieb:

    Wenn es ein Programm schafft auf Deinem Rechner mit den gleichen Rechten ausgeführt zu werden, wie alle anderen Programm auch, dann hast Du ein Problem...

    Ja, aber es wäre ein leichtes für Kleinweich gewesen, der Windows Funktion GetMessage eine Möglichkeit mitzugeben, damit der Aufrufer herausfinden kann, woher die Message kommt. Man hört ja auch immer wieder, daß Angreifer eine Möglichkeit finden, in einen fremden Rechner einzudringen. Dann muß man ihnen nicht alle Türen und Tore öffnen. Man hätte es ihnen auch trotzdem möglichst schwer machen können.

    mfg Martin



  • Jochen Kalmbach schrieb:

    Wenn es ein Programm schafft auf Deinem Rechner mit den gleichen Rechten ausgeführt zu werden, wie alle anderen Programm auch, dann hast Du ein Problem...

    Ehm, entschuldige mal, so viele Rechte gibts hier nicht. Administrator und nicht Administrator. Ich bin der gleichen Meinung wie mgaeckler, hier gehört eine Möglichkeit rein herauszufinden, wer das ganze geschickt hat.



  • Jochen Kalmbach schrieb:

    Wenn es ein Programm schafft auf Deinem Rechner mit den gleichen Rechten ausgeführt zu werden, wie alle anderen Programm auch, dann hast Du ein Problem...

    Bei wem ist das denn nicht der Fall?



  • Scorcher24 schrieb:

    Jochen Kalmbach schrieb:

    Wenn es ein Programm schafft auf Deinem Rechner mit den gleichen Rechten ausgeführt zu werden, wie alle anderen Programm auch, dann hast Du ein Problem...

    Ehm, entschuldige mal, so viele Rechte gibts hier nicht. Administrator und nicht Administrator.

    Nope, hier kommen zusätzlich zu den Userrechten noch unterschiedliche Integrity Level zu tragen. Und wenn ein Prozess die Rechte hat, dir eine Nachricht zu schreiben, dann hat er sowieso auch die Rechte, direkt in deinem Speicher rumzumalen...

    Mir ist ehrlich gesagt nicht klar, wie genau du dir das vorstellst, dass ein Mechanismus, der es dir erlaubt irgendwie "nachzuschauen", von wem eine Nachricht gesendet wurde, irgendeine Form von Sicherheit bringt...



  • dot schrieb:

    Mir ist ehrlich gesagt nicht klar, wie genau du dir das vorstellst, dass ein Mechanismus, der es dir erlaubt irgendwie "nachzuschauen", von wem eine Nachricht gesendet wurde, irgendeine Form von Sicherheit bringt...

    Man kann Nachrichten, von Prozessen, die man nicht kennt, einfach verwerfen.

    mfg Martin



  • Da nun einmal Messages geschickt werden, interessiert es doch von wem.
    Also aus dem eigenen Prozess(en) oder von einem Fremdprozess.

    Die Frage ist: Wie erkennt man eine unerwünschte Message und fängt diese ab, bevor sie etwas
    schlimmes ausrichten kann? Was geben da die Hi/Lo-Werte von wparam und lparam her oder
    was gibt es sonst zum Schutz?



  • mgaeckler schrieb:

    dot schrieb:

    Mir ist ehrlich gesagt nicht klar, wie genau du dir das vorstellst, dass ein Mechanismus, der es dir erlaubt irgendwie "nachzuschauen", von wem eine Nachricht gesendet wurde, irgendeine Form von Sicherheit bringt...

    Man kann Nachrichten, von Prozessen, die man nicht kennt, einfach verwerfen.

    Ein Prozess, der in der Lage ist, dir Nachrichten zu schicken, kann aber auf viel einfachere Art und Weise sowieso schon in deinen Prozess rein (DLL Injection; anyone?). Und sobald du dich nichtmehr darauf verlassen kannst, dass dein Code nicht sowieso bereits durch den anderen Prozess modifiziert wurde, wird dir alles Testen eines Absenders nicht mehr helfen...



  • dot schrieb:

    Ein Prozess, der in der Lage ist, dir Nachrichten zu schicken, kann aber auf viel einfachere Art und Weise sowieso schon in deinen Prozess rein (DLL Injection; anyone?). Und sobald du dich nichtmehr darauf verlassen kannst, dass dein Code nicht sowieso bereits durch den anderen Prozess modifiziert wurde, wird dir alles Testen eines Absenders nicht mehr helfen...

    Dieser Einwand ist natürlich nicht unberechtigt, wobei ich allerdings jetzt nicht weiß, ob man DLL Injection mit normalen Benutzerrechten erzwingen kann. Das Beispiel von mir, habe ich mit normalen Benutzerrechten ausführen können.

    Es ist halt immer ein Problem, wenn man versucht ein System von einem Homecomputer in die professionelle Conmputerwelt zu migrieren. Hier merkt man halt ganz klar, wo die Wurzeln dieses Windows liegen.

    mfg Martin



  • Man kann Nachrichten, von Prozessen, die man nicht kennt, einfach verwerfen.

    Da nun einmal Messages geschickt werden, interessiert es doch von wem.
    Also aus dem eigenen Prozess(en) oder von einem Fremdprozess.

    Bringt nunmal nichts, zumindest nichts als Schutzmaßnahme. Wenn man überprüfen kann von wem die Message kommt gibt man halt vor das System zu sein...


Log in to reply