본문 바로가기

System/Linux

Linux/Virtual Environment/Docker/도커 환경에서 ASLR 해제/read-only file system error SOLVED

반응형
# 도커 환경에서 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
- 쉘 프롬프트도 떨어지지 않고 --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 수정한 사진입니다. 아래와 같이 수정하고 저장한다음,
  • 1
    sudo docker restart [컨테이너 이름]
     위 명령을 통해서 해당 컨테이너를 재시작 한 후
  • root 계정으로 해당 컨테이너를 실행시킵니다.
    sudo docker exec -u 0 -it [컨테이너] bash
  • echo 0 > /proc/sys/kernel/randomize_va_space 를 통해서 /proc 값이 수정되는 것을 볼 수 있습니다.
  • /proc에 write가 가능하므로, 다른 메모리 보호기법의 설정값도 수정할 수 있을 것으로 생각됩니다.



반응형