반응형
# 도커 환경에서 ASLR 해제/ read-only file system error SOLVED
일단 성과가 없어도 기록이 중요하니 시간순으로 시도했던 명령들을 기록합니다. 항상 했던 것들은 기록하지만 번번찮은 성과가 없어 블로그에 포스트하기도 좀 애매합니다.. 각설하고, 처음으로 시도한 명령어는 아래와 같습니다.
- sudo docker run -it --rm -v /proc:/writable-proc -u 0 klee/klee /bin/bash
- echo 0 > /proc/sys/kernel/randomize_va_space
- 결과 : read-only file system error
- 결과는 read-only 오류로 여전히 root로 로그인 함에도 수정이 불가합니다. 애시당초 sysctl.conf를 이용해서 수정을 한다해도 reboot이 되는 환경이 아니라. github들을 다 뒤져보았을때.. 재시작을 통한 수정도 불가능한 것 같습니다. 혹시나 제가 모르는 방법이 있다면 알려주시면 감사하겠습니다.
- 다음으로 시도한 명령어는 위 명령에 --sysctl 옵션을 추가한 명령입니다.
- sudo docker run -it --rm -v /proc:/writable-proc -u 0 --sysctl kernel.randomiz_va_space=0 klee/klee /bin/bash
- 결과 :
- 위 명령은 다음 주소에서 참고 했습니다 : [Configure namespaced kernel parameters (sysctls) at runtime] - https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime
- 쉘 프롬프트도 떨어지지 않고 --sysctl 옵션 인자를 인식하지 못하고 명령이 종료됩니다. 그렇다면 인자가 잘못 되었다는 소리인데.. 제가 수정하고자 하는 ASLR인자를 --sysctl 옵션에서 지원하지 않는다는 것밖에 예상이 안됩니다. 그래서 doc을 참고해봤는데 예상과 맞고 지원하는 인자는 아래와 같습니다.
- IPC Namespace:
kernel.msgmax, kernel.msgmnb, kernel.msgmni,
kernel.sem, kernel.shmall, kernel.shmmax,
kernel.shmmni, kernel.shm_rmid_forced
Sysctls beginning with fs.mqueue.*
If you use the --ipc=host option these sysctls will not be allowed. - Network Namespace:
Sysctls beginning with net.*
If you use the --network=host option using these sysctls will not be allowed.
- IPC 네임스페이스 관련 인자와 network 네임스페이스 관련 인자만 지원하는 것을 알 수 있습니다. 30분정도 서칭한 끝에 어쩌다가 방법을 찾았고,
- 결론적으로 container의 hostconfig 파일 값을 수정하여 해당 컨테이너를 privileged하게 시작할 수 있습니다.
- 먼저 sudo docker inspect [컨테이너 이름]을 통해서 해당 컨테이너의 설정 값을 봅니다. json 구조이며, Hostconfig 설정값의 하위 속성으로 privileged 값이 false로 되있었습니다.
- 수정을 하기위해 실행중인 해당 컨테이너를 종료시키고, /var/lib/docker/container/[컨테이너 이름]/hostconfig.json 파일을 수정하면 됩니다.
- vi 편집기로 간단히 열어보면 아래와 같고 아래사진은 중간 정도에 보이는 Privileged 값을 true 수정한 사진입니다. 아래와 같이 수정하고 저장한다음,
- root 계정으로 해당 컨테이너를 실행시킵니다.
sudo docker exec -u 0 -it [컨테이너] bash - echo 0 > /proc/sys/kernel/randomize_va_space 를 통해서 /proc 값이 수정되는 것을 볼 수 있습니다.
- /proc에 write가 가능하므로, 다른 메모리 보호기법의 설정값도 수정할 수 있을 것으로 생각됩니다.
1 | sudo docker restart [컨테이너 이름] |
위 명령을 통해서 해당 컨테이너를 재시작 한 후
반응형
'System > Linux' 카테고리의 다른 글
System/Linux/메모리 보호기법 해제 - 1 (0) | 2018.01.17 |
---|---|
System/Linux/'/proc'가 가상 파일 시스템이라는 것의 확인 (0) | 2018.01.16 |
Linux/Virtual Environment/Docker/Root계정으로 시작하기 (0) | 2018.01.15 |
Linux/Virtual Environment/Docker/Dockerfile 사용하기 (0) | 2017.12.18 |
Linux/Virtual Environment/Docker/도커 시작하기 (0) | 2017.12.18 |