Warnung: Fehler beim Deaktivieren der Adressraum-Randomisierung: Vorgang nicht zulässig

78

Was habe ich falsch gemacht (oder nicht gemacht), gdbwas für mich nicht richtig funktioniert?

root@6be3d60ab7c6:/# cat minimal.c 
int main()
{
  int i = 1337;
  return 0;
}
root@6be3d60ab7c6:/# gcc -g minimal.c -o minimal
root@6be3d60ab7c6:/# gdb minimal
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
.
.
.
Reading symbols from minimal...done.
(gdb) break main
Breakpoint 1 at 0x4004f1: file minimal.c, line 3.
(gdb) run
Starting program: /minimal 
warning: Error disabling address space randomization: Operation not permitted
During startup program exited normally.
(gdb) 
(gdb) print i   
No symbol "i" in current context.
Jas
quelle
46
Beim Ausführen in einem Docker-Container wurde dieser Fehler angezeigt, bis ich ihn zum hinzugefügt --security-opt seccomp=unconfinedhabe docker run.
Cameron Taggart
@ CameronTaggart danke für den Tipp! Du hast meinen Tag gerettet.
Gaijin
@ CameronTaggart es funktioniert gut für mich, aber Sicherheitsproblem coms
Jia

Antworten:

139

Wenn Sie Docker verwenden, benötigen Sie wahrscheinlich die --security-opt seccomp=unconfinedOption (und aktivieren ptrace):

docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
wisbucky
quelle
5
danke dafür - ich habe keine Ahnung, wie viel Zeit ich verloren hätte, dies auf die harte Tour zu lernen!
VorpalSword
2
Ich denke, --cap-add=SYS_PTRACEwird nur benötigt, wenn gdban einen bereits laufenden Prozess angehängt wird.
ausgetrocknet
Könnten Sie die Sicherheitsprobleme angeben, die mit diesen Optionen verbunden sein könnten?
Ra'Jiska
2
Gibt es eine Möglichkeit, diesen Befehl auf eine bereits ausgeführte Instanz anzuwenden? Weil ich diese Instanz nicht entfernen und eine neue starten möchte
sh.3.ll
18

Aus irgendeinem Grund hat Ihr Benutzerkonto keine Berechtigung, die Randomisierung des Adressraumlayouts des Kernels für diesen Prozess zu deaktivieren. Standardmäßig deaktiviert gdb dies, da dadurch einige Arten des Debuggens vereinfacht werden (insbesondere bedeutet dies, dass die Adresse der Stapelobjekte bei jedem Ausführen Ihres Programms gleich ist). Lesen Sie hier mehr .

Sie können dieses Problem umgehen, indem Sie diese Funktion von gdb mit deaktivieren set disable-randomization off.

Wenn Sie Ihrem Benutzer die zum Deaktivieren von ASLR erforderliche Berechtigung erteilen möchten, müssen Sie wahrscheinlich über eine Schreibberechtigung für verfügen /proc/sys/kernel/randomize_va_space. Lesen Sie hier mehr .

Chris Kitching
quelle
12

Aufbauend auf der Antwort von wisbucky (danke!) Sind hier die gleichen Einstellungen für Docker compose:

security_opt:
  - seccomp:unconfined
cap_add:
  - SYS_PTRACE

Die Sicherheitsoption hat seccomp:unconfineddie address space randomizationWarnungen behoben .

Die Funktion SYS_PTRACE schien keine spürbaren Auswirkungen zu haben, obwohl in der Docker-Dokumentation angegeben ist , dass SYS_PTRACE eine Funktion ist, die "nicht standardmäßig gewährt" wird. Vielleicht weiß ich nicht, wonach ich suchen soll.

Kevin W Matthews
quelle
1
Sie haben einen Tippfehler, er ist nicht beschränkt, nicht unbestätigt
Marc43