현재까지 컨테이너로 구성된 가상공간에 별다른 인증 없이 접근할 수 있는 많은 방법들이 개발되어 왔지만, 파일시스템 내부에 포함되는 UID / GID 에 대한 권한문제는 아직까지 문제의 소지가 있으며, James Bottomley 는 이번 2017 LFSMM 에서 이 부분을 다루었다고 한다.
Docker, LXC, rkt 등 많은 Linux container 솔루션들은 다양하게 존재하지만, 사실상 같은 컨테이너 인터페이스를 사용하고 있다고 하며, 그럼에도 불구하고, 각기 다른 컨테이너들 마다 또 각각의 방법을 사용하여 인터페이스를 사용하고들 있다고 한다. 하지만 모든 컨테이너들은 파일시스템 내부적으로 저장되는 UID/GID 에 관련된 문제들을 동일하게 갖고 있으며, 특히 많은 파일들을 소유하고 있는 루트파일시스템에서 주로 발생한다고 했다.
Bottomley 는 shiftfs 의 사용을 주장하였다. 이것은 Bind mount 와 비슷한 형태로 구현되며, User name space 기반으로 filesystem UIDs 를 번역하기 때문에, 권한을 따로 할당받지 않은 상태에서도 관리자에의해 특별히 표시된 다른 컨테이너가 해당 파일시스템을 서브트리 형태로 접근을 할 수 있는 방법을 사용한다.
일찌기, 문제해결을 위한 노력의 일환으로, UID Translation 과정에 s_userns 라는 필드를 수퍼블럭에 추가하는 방법이 사용되었으나, 수퍼블럭당 적용이 가능한 해결책이었을 뿐, 서로 다른 UID mapping 을 갖고 있는 컨테이너간에 특별히 공유하고 있는 파일시스템별로 적용하기에는 무리가 있는 작업이었다고 한다.
Shiftfs 방식에서는 Low level 에 대한 작업을 패스하기 전에, 파일시스템 아래 매핑되는 Namespace 영역을 기반으로 Translation 을 하는 inode operation 을 이용한다고 한다.
즉, VFS 레이어에 대한 변형을 필요로 하지 않기에 훨씬 간결, 정확한 동작을 기대할 수 있다고 했다.
여기에는 권한이 없는 컨테이너에서 사용자가 SetUID-root 바이너리파일을 생성할 수 있는 등의 서브트리에 대한 몇가지 특별한 보안적 기능이 포함되어 있는데, 그래서 마운트 된 서브트리가 안전하다는 것에 대한 표시를 해주는 확장된 속성등을 이용할 필요가 있다고 한다..
Al Viro 라는 개발자는, 이 경우, 직접 제작된 XFS 나 ext4 filesystem 의 이미지를 마운트 할 수 있다면, 이 방법으로 인해 Ring 0 에서 공격자의 코드를 실행할 수 있는 취약성이 있다는 점을 문제삼았다. 파일시스템들은 이런종류의 어뷰징 을 위해 제작되지 않았기 때문에, 이게 정말로 그렇게 쉬운일 (파일시스템을 이용해 커널을 망가뜨리는일) 인지 물었더니, '당근 빠따, 병신....' 이라고 대답했다고 한다.
Amir Goldstein 라는 참가자는 현재 권한이 없는 파일시스템을 컨테이너에 마운트하는 방법으로 이미 FUSE 를 사용하고 있음을 이야기 했고, Bottomley 는 이 FUSE 데몬이 취약하여 Exploit 될 수 있다는 것에 주목해야한다며, USB Stick 을 이용하거나 Loopback 디바이스 등을 사용할때 취약성에 대한 내용으로 답변했단다.
이와 별개로 Amir Goldstein 은 파일시스템 개발자들에게 OverayFS 아래 시스템이 실행되야 할 수 있으므로, 다양하고 많은 테스트가 필요함을 상기시켰다.
어쨋든... 코벳이제이크(Jake Edge) 가 보기에는 이 Unpriviliged filesystem 에 대한 논의 동안, 누구도 합의점을 찾거나 바른 방향이 무엇인지에 대한 일치를 노력하는 모습들은 전혀 없는, 개싸움 판이었다는 식으로 마무리지었다.
----
여기서 내가 궁금하고 흥미로운 건 말이지... 이게 정말이냐? 라는 것이다.
DevOpser 들에게 묻는거다.. 도커나 컨테이너 많이 쓰는 ... 많이들 쓴다며?
난 쓰는애들 제대로 본적이 없어서 묻는건데, 이런 권한문제들을 다들 어떻게 처리하고있는지 ...
이런것도 모르면서 우리나라에서 데브옵스를 해야한다 어쩐다 할 수 있을까? 라는 걱정이 들었다.
다들 어떤 방식으로 Unprivilege 의 파일시스템을 사용하고,
왜 필요한지 논의해 보면 좋겠다.
일단 여기까지 쓰고 나니 한 30분정도 걸린거같다... 술이 취해서 더이상 글을 보기가 싫다 -_-