web-dev-qa-db-ja.com

警告:アドレス空間のランダム化を無効にするエラー:操作は許可されていません

gdbが適切に機能していないという間違った(またはしなかった)ことは何ですか?

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.
61
Jas

Dockerを使用している場合は、おそらく--security-opt seccomp=unconfinedオプション(およびptraceの有効化):

docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
101
wisbucky

何らかの理由で、ユーザーアカウントには、このプロセスのカーネルのアドレススペースレイアウトのランダム化を無効にする権限がありません。デフォルトでは、gdbはこれをオフにします。これは、ある種のデバッグを簡単にするためです(特に、プログラムを実行するたびにスタックオブジェクトのアドレスが同じになることを意味します)。続きを読む こちら

set disable-randomization offでgdbのこの機能を無効にすることで、この問題を回避できます。

ユーザーにASLRを無効にするために必要な権限を取得することに関しては、おそらく/proc/sys/kernel/randomize_va_spaceへの書き込み権限を持つことになります。続きを読む こちら

16
Chris Kitching

wisbucky's answer (ありがとう!)に基づいて、Docker作成の同じ設定を次に示します。

security_opt:
  - seccomp:unconfined
cap_add:
  - SYS_PTRACE

セキュリティオプションseccomp:unconfirmedを修正address space randomization警告。

Docker documentation にSYS_PTRACEが「デフォルトでは許可されていない」機能であると記載されていても、機能SYS_PTRACEには顕著な効果はないようでした。おそらく何を探すべきか分からない。

6