2021년에도 Black Hat Aisa 리뷰 보드로 활동을 하게 되어 보게 된 논문인데, 보안 관련 3대 학회로 손꼽히는 ACM CCS 2020에 채택된 논문입니다. 제목에서도 알 수 있듯이 리눅스 커널 공격에 사용되는 elastic object, 즉 우리말로 옮기면 크기가 가변적인 객체와 관련해서 체계화 연구를 수행한 내용입니다.

Elastic object의 핵심은 구조체 내부에 버퍼나 버퍼의 주소를 가리키는 포인터가 있고, 그리고 길이를 나타내는 필드가 있다는 점입니다. 이러한 특징으로 인해 elastic object의 버퍼 포인터나 길이를 조절하면 임의의 커널 메모리 읽기(arbitrary read)나 범위를 넘겨 읽기(out-of-bound read, OOB read)가 가능하고, KASLR(Kernel Address Space Layout Randomization)을 무력화할 수 있는 커널 함수 포인터나 Stack canary 등을 읽어낼 수 있죠.

Elastic object 공격으로 인한 영향 - 출처: A Systematic Study of Elastic Objects in Kernel Exploitation

사실 이러한 객체는 흔한 듯하면서도 흔치 않은데요, 커널 구조체의 대부분은 크기가 고정되어 있거든요. ^^;;; 이 논문에서는 아래처럼 elastic object를 찾아서 리스트를 만들어 놓고, 이와 관련해서 커널 데이터를 유출할 수 있는 함수들도 정리해두었습니다. 이 과정에서 정적/동적 분석 기법을 활용했다고 하는데, 오탐을 줄이기 위해 함수 리스트 같은 경우는 수동으로(manual) 선정했다고 하는군요.

Elastic kernel objects - 출처: A Systematic Study of Elastic Objects in Kernel Exploitation 
커널에서 유저로 데이터를 전달할 수 있는 함수 목록 - 출처:A Systematic Study of Elastic Objects in Kernel Exploitation

개인적으로 이 논문의 의의는 elastic object 관련 내용을 체계화했다는 것에 있다고 생각합니다. 임의 메모리 읽기나 범위 넘겨 읽기 같은 경우는 논문의 위협 모델(thread model)에도 나와 있지만, 공격자가 이미 임의 메모리 쓰기 취약점(arbitrary memory write)을 가지고 있다고 가정하기 때문에 영향력이 크지 않다고 생각합니다. 사실 임의 메모리 쓰기 취약점이 임의 메모리 읽기 취약점보다 귀하기 때문에 이런 취약점이 더 영향력이 크고 더 유용하거든요. 물론, 제대로 쓰기 위해서는 논문에서 기술한 것처럼, 임의 메모리 읽기 취약점을 이용해서 KASLR을 무력화해야 좀 더 공격 성공 확률이 올라가긴 하지만요. ^^;;;

해결책(mitigation)의 경우도 격리(isoloation) 기법을 사용했는데요, 이 방법 또한 일반적으로 활용하는 방법입니다. 격리를 하면 elastic object만 따로 떨어지는데, 인접해있는 kernel object를 통해 주요 정보를 유출할 수 있는 기회가 적어지긴 합니다. 다만, 메모리 풀(pool)을 분리해야 하므로 코드 수정이 필요하고, 이로 인한 부수효과(side effect)가 어떠한 형태로 나타나는지 심도 깊은 평가도 필요하지요. 논문에서도 성능 등의 여러 관점에서 평가를 하는데요, 실험실(lab) 환경과 실제 운영 환경은 다르기 때문에 논문의 결과가 실제 필드로 적용되기까지는 많은 시간이 필요합니다. ^^;; 참고로 최근에 도입된 꽤 유명하고 대표적인 격리 기법에는 KPTI(Kernel Page Table Isolation)가 있습니다. 바로, 세간을 떠들썩하게 한 멜트다운(meltdown) 취약점을 막기 위해 도입한 것이죠.

리뷰보드 활동 때문에 새해 첫날부터 머리가 아프... 여튼 흥미로운 논문이었습니다.

그럼 새해 복 많이 받으세요!!

저는 여전히 하고 싶은 일을 하면서 살고 있습니다 - 1편, 2편, 3편, 4편, 5편에 이은 무려 6편입니다. 예전에 누군가가 "애기 낳고 키우다 보면 꿈은 자연스럽게 멀어지고 퇴물이 되게 되어있어" 하길래 나는 안그래야지 하는 오기로 쓰기 시작한 글인데요, 벌써 6년째 쓰고 있군요. 제가 이렇게 꾸준할 수 있는건 어머님께 물려받은 끈기 때문인데요, 올해는 어머님이 돌아가시는 큰 불행이 있었지만... 그럼에도 불구하고 꾸준히 앞으로 나아가고 있습니다. 감사합니다. 어머님.

작년에 꽤 많은, 그리고 의미 깊은 일들이 있었는데요, 올해는 그에 못지 않은 더 대단한 일들이 있었습니다. 지금 생각해도 꿈같은 일인데, 크게 세 가지만 말씀을 드리자면...

첫 번째는 아시에 최대 보안 컨퍼런스인 Black Hat Asia 2018에 이번에도 논문을 낸 건데... 무려 2개나 되는 바람에 올해 초는 엄청 바쁘게 보냈습니다. Black Hat Asia(I Don’t Want to Sleep Tonight: Subverting Intel TXT with S3 Sleep)Black Hat Asia(Shadow-Box v2: The Practical and Omnipotent Sandbox for ARM)가 바로 그것인데요, 보안 뉴스에서 첫 번째 논문에 대해서 기사도 써주셨습니다. 해당 기사는 널리 사용되는 tBoot의 슬립모드 통해 인텔 TXT 무력화 가능에서 보실 수 있습니다.

보안뉴스에 소개된 Black Hat Asia 2018의 발표내용

두 번째는 학술적인 보안 컨퍼런스에서 가장 최고로 치는 3대 학회가 있는데요, IEEE Security and Privacy(S&P), ACM Conference on Computer and Communications Security(CCS), USENIX Security가 바로 그것인데, Black Hat Asia에 낸 논문을 확장해서 쓴 논문이 USENIX Security 2018에 수락되었습니다. 논문은 A Bad Dream: Subverting Trusted Platform Module While You Are Sleeping에서 보실 수 있습니다. 이건 정말 꿈같은 일이네요. ^^;;;

세계 3대 보안 컨퍼런스인 USENIX Security에 게재된 논문

세 번째는 홍콩에서 열리는 beVX Conference에 초청받은 일입니다. 아직 발표하러 가지는 않았지만 주제는 이미 정해진지라... 작년에 Black Hat Asia 2017에서 발표한 Shadow-box에 대해서 아마 이야기 할 것 같은데... 이 부분은 다녀와서 다시 올리겠습니다. ^^

돌이켜보면... 정말 정신없이 산 한 해인 것 같네요. 어머님께 부끄럽지 않도록 더 열심히해야 겠습니다.

그럼 좋은 밤 되세요. ^^

정말 오래간만에 쓰는 글이네요. ^^;; 그동안 회사일하랴 논문 발표하랴 석사 학위 하랴... 너무 정신없이 보냈습니다. 제 인생에서 이렇게 바빴던 시기가 또 있었나 하는 생각이 들 정도로 말이지요. ^^;;; 그래도 정신을 바짝 차린 덕분에 무사히 모든 일을 마칠 수 있었습니다.

가끔 블로그에도 글을 남겼지만, 작년부터 가상화 기술(Virtualization Technology)를 이용해서 운영체제를 보호하는 연구를 하고 있었습니다. 기존의 Xen이나 KVM, VirtualBox, VMware 등을 사용하지 않고 직접 인텔 가상화 기술 문서를 읽고 구현한 기술인데요, 컨셉은 호스트(Host)와 게스트(Guest) 간에 운영체제를 공유하여 가볍고 효율적인 운영체제 보호를 수행하는 겁니다. 관련 연구로는 SecVisor가 유명한데요, 이 연구의 오버헤드를 극복하고 실제 필드에서 사용가능하도록 만든 것이 제가 한 연구입니다.

Back Hat Asia 2017-Myth and Truth about Hypervisor-based Kernel Protector

<Back Hat Asia 2017-Myth and Truth about Hypervisor-based Kernel Protector>

연구의 핵심은 운영체제보다 한 단계 더 낮은 레벨, 즉 하이퍼바이저 레벨에서 운영체제의 무결성을 보장하는 것인데요. 그림자 놀이(Shadow Play)에서 영감을 얻었습니다. 하이퍼바이저(Light Box)가 게스트 운영체제(Actor)를 투영하면 운영체제 감시자(Shadow Watcher)가 그림자를 보고 이상징후를 탐지하는 아키텍쳐인거죠. ^^

사실 논문 작성은 작년에 완료되었지만, 제가 너무 부족한지라 학술적인 학회에서는 계속 헛물만 들이켰습니다. 그러다가 실용적인 연구를 하는 학회에 눈을 돌리게되었고, 논문을 보강해서 제출한 결과!!! Black Hat Asia 2017에서 논문을 발표하게 되었습니다. ^^)/ 그동안 도와주신 많은 분들께 감사드립니다.

그럼 좋은 하루 되세요 >ㅁ<)/

100년만에 쓰는 글인 것 같습니다. ^^)/ 그간 많은 일이 있었는데요, 지난번에 저는 여전히 하고 싶은 일을 하면서 살고 있습니다 - 4편 말씀드렸듯이 5월에 글로벌 컨퍼런스 발표가 잡혀서 정신없이 달려왔습니다. 헥헥... 응원해주신 많은 분들 덕분에 발표를 무사히(?) 끝내고 왔습니다. 외국 애들이 질문하려고 줄까지 서는 바람에 좀 등에 식은 땀이 났던 것만 빼면 말이죠. ^^;;;;

발표만 끝나면 이제 좀 조용해질까 했는데, 이번에는 제가 만든 다른 자식에 버그가 발견되는 바람에 또 정신없이 하루 하루를 보내고 있습니다. 아우, 올해는 그냥 계속 정신없을 것 같네요. 할 것도 많은 데 벌써 6월이라니.... OTL...

외국 보안 학회는 몇 번 참석했는데, 확실히 그냥 들으러 가는 것과 논문내서 스피커로 초청되어 가는 것과는 차이가 있더라구요. 학회를 주체하는 애들이 얼마나 치밀하게 발표 스케줄을 조절하는지도 알게 되었고, 나름 스피커라고 대접도 해줘서 나름 좋았던 것 같습니다. 준비하는 게 엄청 힘들지만 기회가 된다면 다시 한 번 가보고 싶다는 생각을 할 정도로 말이죠. ^^)/

아우, 시차 적응이 안되서 이만 자러가야겠네요.

그날의 기억이 생생한 사진 두 장 올립니다.



그럼 좋은 밤 되세요. ^^

아시는 분들도 있겠지만 제가 원래 좀 저돌적입니다. ^^;; 무슨 이야기인고 하니 한 번 뭔가 해야되겠다고 생각하면 그대로 달리는 성격이란 것이죠. 그래서 앞뒤 안 가리고 덤비는 통에 고생도 많이 했는데요, 이번에도 고생을 엄청했습니다. ㅠㅠ

파트타임으로 석사를 하고 있어서 논문 준비를 해야했는데요, 연구 주제를 잡다가 키보드 관련 주제를 잡으면 좋겠다는 생각을 했습니다. 그게 아마 올해 초... 3월 쯤이었던 것 같네요. 그리고 관련 정보를 모으다가 방향을 잡은 게 6월이었습니다. 근데... 여기서 한 가지 큰 실수를 했는데요... 이왕 하는 거 크게 해보자는 생각이 든거죠. ㅠㅠ

크게 하려면 당연히 시간이 필요하고 그렇다고 이거 때문에 다른 일에 지장이 있으면 안되니까, 아침에 좀 일찍 일어나기 시작했습니다. 예전에 책 쓸 때는 새벽 시간을 주로 이용했는데요, 지금은 애기를 봐야되서 새벽시간은 좀 어렵더라구요. 5월 초부터 지금까지 휴일도 없이 계속 아침에 작업을 했던 것 같습니다. ^^;;; 와이프가 저보고 독하다고 그랬어요. ㅋㅋㅋ

약 5개월 동안 미친 듯이 달렸더니 이번에도 뭔가 뚝딱 나왔습니다. 시간으로 따지면 약 300시간 이상(2시간 * 30 * 5) 쓴 것 같네요. 사실 주말에는 와이프랑 애기 재우고 밤샘 작업한 적도 한두 번이 아니라서 실제로는 더 될 것 같은... ㅠㅠ. 논문에 대한 이야기는 나중에 또 하겠지만... 잘 되면 이걸로 학위도 받을 수 있을 것 같네요. >ㅁ<)/~ 아아... 드디어 졸업(할 수 있을까요 ㅠㅠ)...

이제 아침이 좀 한가로워지겠군요. 만세~!! 

그럼 좋은 하루 되세요 >ㅁ<)-b

ps) 올해도 목표 달성~!!

+ Recent posts