유니커널을 운영 환경에서 사용해 본 경험이 있는지 궁금함. 멀리서 보기에는 좋아 보이지만 관측 가능성이 걱정되며, 단순히 내가 잘 몰라서일 수도 있음. 유니커널 애플리케이션이나 시스템에서도 perf record 같은 도구를 실행할 수 있는지?
Hannes의 blog에 괜찮은 글이 있으며, 4.0.0 release notes에서는 꽤 널리 쓰이는 배포 사례도 다룸.
OCaml을 쓰는 회사에서 일하던 친구가 컨테이너 도구가 지금보다 훨씬 미흡하던 시절에 검토했지만, 격리 측면의 작은 이득에 비해 도입 과정의 어려움이 너무 컸다고 함. 정확히 같은 시기는 아니지만, 현재 Oxide로 알려진 Bryan Cantrill도 당시 유니커널의 어려움을 정리한 글이 있음.
프로파일링은 외부에서 perf kvm 으로 수행하게 될 가능성이 크며, 게스트 스택을 풀어낼 수 없어 호출 관계 없는 프로파일만 얻는 등의 제약이 따름. 다른 방법은 seccomp 필터가 적용된 일반 Unix 프로세스인 spt, 즉 Sandboxed Process Tender를 대상으로 빌드하는 것임. 이 경우 perf record가 그대로 동작할 것으로 보임.
배포가 꽤 까다로워서 사용을 포기했음.
현재 InfluxDB/Telegraf/Grafana로 유니커널을 장기간 모니터링하고 있으며, 지표 수집과 시각화 방법은 튜토리얼에 정리해 둠. perf도 사용 가능하며, 실험 중인 방법을 튜토리얼에 공개할 예정임. 다만 perf kvm의 동작과 업데이트에 관한 문서가 부족해 안정적인 방법을 제공하기가 상당히 어려움. Solo5는 gdb도 지원하므로 실행 중인 유니커널을 디버깅할 수 있으며, 문서에서 방법을 확인할 수 있음.
OCaml에서는 bechamel로 마이크로벤치마크를 실행하거나 memtrace로 메모리를 모니터링할 수 있음. 유니커널에서 Runtime_event를 제대로 내보내 https://perfetto.dev/ 등으로 스케줄러 동작을 살펴보는 방법도 연구 중임.
직접 손봐야 할 부분은 있지만 실제로 유니커널 내부를 관측할 수 있는 수단은 마련되어 있음. uniker.nl은 도메인 이름 처리, 콘텐츠 제공, TLS 종료 프록시를 담당하는 유니커널 3개로 운영 중임. 링크가 인터넷에 공개된 뒤로 세 유니커널이 어떻게 동작하는지 Grafana를 계속 열어보고 있음.
유니커널을 운영 환경에 쓰지는 않았지만 가볍게 실험해 봤으며, 아직 단점보다 장점이 큰 사용처를 찾지 못했음. POSIX 인터페이스가 꼭 필요한 것은 아니지만, 어차피 컴퓨터의 버퍼에 우회적으로 쓰는 프로그램을 만들 것이라면 직렬 포트에 쓰는 척하는 것이 왜 더 나은지 모르겠음. 결국 스케줄러와 VM 권한 수준의 버퍼, 하이퍼바이저 권한 수준의 버퍼를 거쳐 NIC나 다른 입출력 장치로 가는 것은 마찬가지임.
보안상 이점도 크게 와닿지 않음. 원격 공격자가 하려는 일을 실질적으로 바꾸기보다는 그 방법만 바꾸는 것처럼 보임. 비밀 정보를 훔치려 한다면 굳이 셸을 실행하지 않으면 그만임. 시작 시간, 구성 요소 축소에 따른 보안 이점, 낮은 오버헤드가 있다는 것은 알고 있음. 하지만 일반적인 커널→VM→가상 사용자 공간→애플리케이션 구조보다 이런 이점이 충분히 커서 실제로 더 나은 선택이 되는 사용처는 무엇인지?
모든 프로젝트를 대변할 수는 없지만, 단일 프로세스 시스템이라는 특성은 공격자가 할 수 있는 일을 크게 제한함. 셸은 본질적으로 여러 프로그램을 실행하도록 만들어져 있으므로 이런 시스템에는 둘 수 없음. 서버에 침입하려는 대부분의 공격자는 애플리케이션 취약점 자체보다 서버에서 자신의 프로그램을 실행하는 것에 관심이 있음.
최근 php2shell 취약점으로 암호화폐 채굴기를 설치하려 해도, 그 채굴기가 PHP로 작성됐을 가능성은 낮음. 이론적으로는 ROP로 구현할 수도 있겠지만 현실적인 방식은 아님. 봇넷도 마찬가지로, 운영자가 쓰는 악성코드 설치 도구는 돈을 받고 여러 종류의 악성 프로그램을 배포하도록 만들어져 있음.
최근 npm/GitHub 악성코드나 랜섬웨어·채굴기 공격 대부분은 결국 다른 소프트웨어를 실행하는 데 의존함. 내게는 흔히 강조되는 공격 표면 축소보다 이 특성이 더 흥미로운 보안상 이점임.
유니커널이 더 안전하다고 단정하지는 않겠음. 어떤 것도 완전히 안전하지 않으며, 우리가 주로 하려는 일은 공격자가 시스템을 침해하기 어렵게 만드는 것임.
친구는 SSH 포트만 바꿔도 접속 시도와 공격이 크게 줄었다고 했는데, 유니커널도 비슷하게 볼 수 있음. 반드시 더 안전한 것은 아니지만 공격자가 익숙한 대상과 다르므로 침입에 추가적인 노력이 필요함.
유니커널 형태의 WireGuard VPN과 Linux WireGuard 모듈은 같지 않음. OCaml과 C라는 구현 언어의 차이, 하이퍼바이저와 커널이라는 격리 경계의 차이가 있으며, 보안 관점에서는 이런 차이가 의미 있다고 봄.