Tiefgehende Analyse des neuen mseal-Systemaufrufs in Linux
mseal ist ein neuer Systemaufruf, der in Linux-Kernel Version 6.10 eingeführt wurde und die Funktion des „Memory Sealing“ zum Speicherschutz bereitstellt.
- Dieser Systemaufruf macht Speicherbereiche während der Programmausführung unveränderlich gegenüber unzulässigen Modifikationen, sodass Angreifer weder Speicherberechtigungen ändern noch das Speicherlayout manipulieren können.
mseal dient dazu, Codeausführung durch Remote-Angreifer zu verhindern, und unterscheidet sich damit von den bestehenden memfd_create und memfd_secret, die lokale Angreifer abwehren sollen, wenn sensible Daten im Speicher abgelegt werden.
Funktionsweise von mseal
- Die Funktionssignatur von
mseal ist einfach: Sie nimmt eine Startadresse und eine Länge entgegen und versiegelt damit den entsprechenden Speicherbereich.
- Die Funktion
do_mseal sperrt den Speicherbereich und prüft sowie versiegelt ihn über check_mm_seal und apply_mm_seal.
- Versiegelte Speicherbereiche können über Systemaufrufe wie
mprotect, munmap und mremap weder in ihren Berechtigungen geändert noch entmappt oder in der Größe verändert werden.
Angriffstechniken, gegen die mseal schützt
- NX-Härtung:
mseal verhindert Änderungen an den Ausführungsrechten einer VMA und schützt so vor shellcodebasierten Angriffen.
- Abschwächung von unmap-basierten Data-Only-Angriffen:
mseal verhindert das willkürliche Freigeben und erneute Mappen von Speicherbereichen und blockiert so Data-Only-Angriffe.
Software-Härtung mit mseal
mseal kann die Sicherheit erhöhen, indem bestimmte Speicherbereiche einer Software versiegelt werden.
- Entwickler können mit
mseal gezielt Speicherbereiche versiegeln, in denen sich möglicherweise nicht vertrauenswürdige Daten befinden.
- Mit der fortschreitenden Integration in
glibc besteht die Möglichkeit, dass künftig eine automatische Versiegelungsfunktion hinzukommt.
Zusammenfassung von GN⁺
mseal ist eine neu in den Linux-Kernel eingeführte Sicherheitsfunktion, die Speicherbereiche versiegelt und damit Codeausführung durch Remote-Angreifer verhindert.
- Anders als bestehende Speicherschutzmethoden verhindert dieser Systemaufruf Änderungen an Speicherberechtigungen und das Entmappen von Speicherbereichen und blockiert damit Data-Only-Angriffe.
- Die Einführung von
mseal spielt eine wichtige Rolle bei der Verbesserung der Software-Sicherheit, und durch die Integration in glibc werden weitere Anwendungsfälle erwartet.
- Ähnliche Projekte mit vergleichbarer Funktionalität sind
memfd_create und memfd_secret zum Speicherschutz.
1 Kommentare
Hacker-News-Kommentare
In der Kernel-Mailingliste wurde eine "hitzige Diskussion" erwähnt. Es gibt den Kommentar, ob jemand mit Insiderwissen die Einwände und Bedenken zusammenfassen könnte. Mailinglisten würden wegen ihrer Intensität eher gemieden.
Chrome möchte diesen Aufruf, kann aber versiegelte Seiten nicht entsiegeln, da ein Angreifer sie mit anderen Flags erneut mappen könnte.
Es werden Links zu
mseal()und zu darauf folgenden Artikeln bereitgestellt.Es wird Bedauern darüber geäußert, dass das Betriebssystem solche Aufrufe implementieren muss, obwohl moderne Architekturen (x86_64) viele Funktionen zur Förderung sicheren Programmierens besitzen.
Es gibt die Frage, ob sich der
mseal-Systemaufruf mit einemLD_PRELOAD-Trick unwirksam machen lässt.Der im Artikel enthaltene
mseal()-Prototyp ist syntaktisch nicht korrekt. Das erste Argument sollte nichtunsigned start addr, sondernunsigned long start_addrsein.OpenBSD verfügt schon seit Langem über diese Funktion. Es wird gefragt, warum sie erst jetzt in Linux eingeführt wird.