The 27th ACM Symposium on Operating System Principles (이하 SOSP ’19)은 컴퓨터 시스템 분야를 다루는 저명한 국제 학술 대회다. 유수 국제 기업과 대학교의 연구원, 대학원생들이 참여하여 서로의 연구 내용을 공유한다. 이번 학회에서는 머신 러닝, 보안, 디버깅, 일관성 유지, 데이터 처리, 분산 처리 시스템, 네트워크, Persistent Memory 등 총 11개의 세션으로 구성되었고, 38개의 논문이 발표되었다.

몇 가지 논문들이 눈에 띄었다. 첫 번째 논문은 보안 관련 세션에서 발표된 논문인 “Notary: A Device for Secure Transaction Approval” [1] 이었다. 본 논문은 인증 모듈을 완전히 고립된 환경에서 실행시키기는 USB stick을 개발하는 연구였다. 현재 USB stick의 인증 모듈은 완전 고립이 아니다. 인증이 진행되는 동안 커널의 취약점 등을 통해 외부로 노출될 수 있기 때문이다. 본 논문은 커널을 위한 아키텍쳐와 인증 모듈을 위한 아키텍쳐를 분리하여 완전 고립 인증 모듈을 설계했다. 커널 코드와 아키텍쳐 수준에서 분리되어 있기 때문에 완전한 고립이 가능하다. 인증 모듈은 uart, rst 등으로 커널 아키텍쳐와 통신할 수 있다. 최근 주목받는 이슈 중, Notary와는 다른 목적으로 커널의 기능을 다른 아키텍쳐로 옮기는 연구인 In-Storage Processing을 떠올리게 하는 연구였다. 커널과의 아키텍쳐 분리를 보안의 관점에서 보여주기에 흥미로운 연구 주제였다.

조지아 공대의 김태수 교수님 연구실에서 발표된 논문인 “Finding Semantic Bugs in File Systems with an Extensible Fuzzing Framework” [2] 도 흥미로운 논문 중 하나였다. 김태수 교수님께서 학교에 방문하셨을 때 해당 연구에 대해서 세미나를 진행해주신 바 있어서 더 흥미로웠다. 본 연구는 파일 시스템의 semantic 버그를 찾고 재현할 수 있게 하는 확장 Fuzzing 프레임워크를 소개하는 논문이었다. 파일 시스템의 코드량은 계속 증가하고 있다. 코드의 량은 버그 발생 가능성과 비례한다. EXT4, BtrFS, XFS, F2FS는 수많은 기관에서 사용하고 일반인이 사용하는 스마트폰에서도 사용하고 있기에 버그를 최소화하는 것은 매우 중요하다. 파일 시스템의 semantic이 위반되는 경우를 찾는 것 또한 매우 중요하다. 현재 파일 시스템 fuzzer는 memory-safety bug만 찾는다. 본 연구는 semantic bug를 찾고 재현할 수 있는 파일 시스템 fuzzing 프레임워크인 Hydra를 제안한다. 본 논문의 저자와 대화할 수 있는 기회가 있어서 몇 가지 질문을 드렸다.

Q1: 발표에서 보여주신 데모 중 시스템 크래쉬를 발생하기 위해 reboot sysreq 시그널을 커맨드로 실행하는 것을 봤습니다. 그렇다면 시스템 콜 실행 중에 크래쉬가 발생한 상황은 고려하지 않은 것인가요?

A1: 네, 시스템 콜 실행 중 발생한 크래쉬는 고려하지 않았습니다. 그리고, reboot sysrq 시그널로 크래쉬를 발생시킨 것은 데모를 간략히 보여드리기 위해서 사용한 것입니다. 원래는 해당 상태에서의 가상 머신 스냅샷을 기록하고 가상 머신을 종료합니다.

Q2: 그렇다면 시스템 콜 실행 중에 크래쉬가 발생한 상황을 고려하지 않은 이유가 있으신가요? 저희 연구실에서 EXT4와 F2FS의 fsync() 시스템 콜을 실행하는 중간에 크래쉬가 발생했을 때 파일의 consistency가 깨지는 것을 포착하고 리눅스 메인라인에 패치를 시도했다가 실패한 적이 있습니다. 이 때, 받은 답변이 `반환되지 않은 시스템 콜의 semantic을 지킬 필요가 없다’ 였는데, 이러한 이유인가요?

A2: 네, 말씀하신대로 반환하지 않은 시스템 콜에 대해서 semantic을 지켜줄 필요가 없다고 생각합니다. 저희는 반환이 성공했는데도 불구하고 파일 혹은 파일 시스템의 consistency가 깨지는 상황만을 가정했습니다.

Q3: 네, 감사합니다. 마지막으로, 저는 soft lockup이라는 버그를 굉장히 많이 겪었습니다. 이러한 버그에 관한 fuzzing은 연구하고 계신 바가 있나요?

A3: soft lockup처럼 커널 코드의 버그, 그리고 커널 패닉이 발생하는 경우에 대해서도 연구하고 있습니다. 저희 논문 저자 중 한명인 Meng Xu가 연구하고 있는 주제이기도 합니다.

학부생 혹은 대학원생들이 진행중인 연구를 발표하는 Student competition 세션도 흥미로웠다. Student competition 세션을 시작하기 전날에 Student competition 세션에서 발표될 주제들을 포스터로 발표하는 시간이 있었다. 그 중, 저널링의 recovery time을 다룬 포스터가 눈에 띄었다. 저널 트랜잭션을 복구하는데 드는 시간이 오래 걸리기 때문에 서브 저널이라는 개념을 도입하여 저널 트랜잭션 replay 시간을 줄이는 아이디어를 소개하는 논문이었다. 이미 많은 사람들이 질문을 하고 있어 많은 얘기를 나누지는 못했으나, 몇 가지 질문할 수 있었다.

Q1: 포스터에 보니 커밋 블록이 로그 블록들 혹은 저널 디스크립터 블록보다 먼저 써지는 경우를 가정하고 있는데, 가능한 일인가요?

A1: 네, 기본 옵션을 사용할 경우, 저널 커밋 블록에 FLUSH | FUA 플래그가 설정되어 저널 커밋 블록 쓰기와 저널 로그 블록들 쓰기 사이의 순서가 역전될 수 있지만, 저희 연구는 ASYNC_COMMIT 옵션을 설정하여 체크섬 값을 사용하는 경우를 가정한 것입니다.

Q2: 그렇다면, 저널 트랜잭션 replay에 시간이 많이 드는 것은 어떤 이유인가요?

A2: 체크섬을 갖고 있는 저널 커밋 블록이 먼저 써지는 경우, 저널 트랜잭션을 replay할 때, 로그 블록들의 내용으로 체크섬 값을 계산합니다. 이 때, 로그 블록들이 다 써졌는지 여부와 상관없이 모든 값을 전부 계산합니다. 저희는 이 문제를 해결하기 위해 서브 저널 개념을 디자인했습니다.

ACM SOSP는 시스템 분야에서 USENIX OSDI와 함께 시스템 분야에서 가장 규모가 큰 학회다. 이러한 학회에 참석하는 것은 매우 큰 기회이다. 이러한 학회에서 우리가 해야 하는 일은 최대한 많은 사람들과 교류하고 경험을 쌓아 견문을 넓히고 앞으로의 공부와 연구에 박차를 가하는 것이다. 연구실의 지원으로 좋은 경험을 쌓았으니 더욱 열심히 연구에 매진하여 이러한 학회에서 논문을 발표할 수 있