Windows Rootkit vs Windows 10 그리고 VBS (Virtualization based security)

룻킷이란 무엇인가? 룻킷은 운영체제 시스템에 변형을 일으켜 자신의 존재를 숨기는 말웨어들을 통칭한다. 마이크로소프트의 설명에 의하면, 룻킷은 운영체제의 프로세스들을 중간에서 가로채고 변형시키는 방식으로 동작한다. 이를 통해 자신의 존재를 숨기거나 컴퍼넌트들을 숨기기도 한다. 이렇게 보면 굉장히 일반적이고 뜬구름 잡는 소리 같지만, 한마디로 운영체제의 코드 자체를 변형하거나 운영체제의 코드가 사용하는 메모리 상의 구조체 등을 변형하는 방식으로 사용자들에게 자신의 존재를 숨기고, 원래 의도한 다른 오퍼레이션을 행하는 말웨어를 통칭하여 룻킷이라고 부를 수 있다.

룻킷은 2000년대 초반정도까지 실제 In-the-wild에서 소소하게 여러 형태로 발견되기도 하고, 여러 언더그라운드 포럼을 통해서 논의되기도 하다가 2005년 Rootkits: Subverting the Windows Kernel: Subverting the Windows Kernel라는 책을 통해서 본격적으로 체계화되고 정리 되었다. 이 책에는 그 당시 가장 진보한 룻킷의 기법 중의 하나였던 DKOM(Direct Kernel Object Manipulation) 등도 논의 되었던것으로 기억한다. 어떻게 보면 그 당시 DKOM 기법등은 약간은 모든 세세한 디테일이 노출되거나 설명되지 않은 신비한 영역이었으니까. (이 책에 대한 초간략 리뷰는 다음 글 참조)

룻킷에 대한 원조와 같은 책:
https://www.amazon.com/Rootkits-Subverting-Windows-Greg-Hoglund/dp/0321294319

많은 시간이 지난 지금 왜 룻킷이 다시 문제가 될까? 윈도우즈 10은 룻킷을 당연히 막아 주지 않을까? 대답은 아니오이다. 이번 Return of the kernel rootkit malware (on windows 10) 이라는 토크는 내가 2018년 후반기 블루햇에서 발표했던 내용이다. 블루햇은 블랙햇이나 데프콘과 같은 시큐리티 컨퍼런스에 영감을 얻어 매년 마이크로스프에서 개최하는 시큐리티 컨퍼런스이다. 마이크로소프트 내부 세션과 외부 세션이 존재하는데 필자의 토크는 외부 세션으로 공개 되었다. 2018년 블루햇 v18의 자세한 토크들의 스케쥴은 여기에 공개 되어 있다.

General Audience 세션

내부 세션과 외부 세션의 차이점은 크게 내부 세션의 경우 마이크로소프트 내부 정보가 들어 가 있는 경우가 많다는 것 – 따라서 외부 청중들에게 공개할 수 없는 내용들이 많다. 외부 세션의 경우에는 그러한 위험 요소가 상대적으로 적은 내용들이 많다.

블루햇 발표 슬라이드 – 슬라이드에서 깨져 보이는 부분이 보이는 것은 슬라이드쉐어의 문제로 보입니다. 자세한 것은 pdf로 다운로드 하셔서 확인하시기 바랍니다.

이 룻킷 내용을 가지고, 사실 다음과 같은 유투브 영상도 만들었지만, 이후 영상 제작에 너무 많은 시간과 리소스가 필요한 면이 있어서 이후 2편은 제작 되지 못한 슬픈 사연을 가지고 있다. 이러한 대상이 제한된 컨텐츠의 경우 컨텐츠 생산자가 회사의 스폰서를 받거나 아니면 어지간한 공익에 대한 신념이 있지 않는한 피같은 개인의 시간을 쏟아서 만들기가 힘들다. 일반적인 대중적인 웃고 즐기거나 그냥 삶에 도움이 되는 정보들 같은 경우 대상 청중이 광범위하므로 그만큼 유투브 채널 자체를 통해서 수익을 창출할 수 있는 장점이 있다. 대신, 나는 블로그를 택했는데, 기술적인 내용의 경우 문자적인 정보 전달 방식이 무척 효율적이고, 두번째 컨텐츠 생산 비용이 유투브 영상 제작에 비해서 무척이나 낮다는 장점을 가지고 있다.

이 토크의 내용을 정리하자면, 한마디로 기존의 취약점을 이용하거나 아니면 커널의 메모리 상에 존재하는 여러 구조체들을 변형하는 식의 DKOM 기술등의 전통적인 기법은 패치 가드의 도입으로 사라진 반면, 최근 인증서의 헛점을 이용한 새로운 형태의 룻킷들이 많아지고 있다라는 것이다. 또한 패치가드에 디텍트 되지 않는 여러 커널 구조체들을 공격하는 방식으로 기존 보안 메커니즘들을 무력화하는 행위를 보여준다. 자세한 내용은 슬라이드를 확인하기 바란다.

그렇다면, 이러한 새로운 형태의 위협이 가지는 implication은 무엇일까? 기존에 기업 환경의 안전을 보장한다고 생각했던 많은 기술들, 특히 인증서(certificate)조차도 전혀 보안을 보장하는데에 도움이 되지 않는다는 사실이다. 기술 중심 주의 사고의 이면에는 항상 이러한 작은 헛점들을 무시하는 경향성을 가지고 있다. 그러한 근본적인 이유로 인해서 전반적인 사이버 시큐리티의 수준은 전반적인 보안 장치와 메카니즘의 발전에도 불구하고 급격하게 좋아지지는 않을 것으로 예상한다.

그렇다면, 이러한 위협을 일반적인 방법으로 막을 수 있는 방법은 있을까? 안타깝게도 손쉽게 이러한 위협들을 찾아서 기업 환경에서 제거하는 것은 쉬운 일이 아니다. 이 glitch 자체가 일종의 여러 하드웨어 드라이버들의 하위 호환성 보장을 위해 마련된 loophole이라는 점을 상기해 보면, 커널 모듈 로더 자체에서 어떠한 방법으로 이러한 드라이버를 막을 장치는 없는 것으로 보인다. 그러나 정말 심각하게 이러한 위협을 막고 싶어 한다면, 다음과 같은 approach는 가능할 수 있다

  1. 드라이버 화이트 리스팅: 기술적으로 VBS (Virtualization Based Security)를 기업 환경에 적용한 상태에서는 KMCI (Kernel Mode Code Integrity)를 이용하여 인가되지 않은 드라이버들의 로딩을 막을 수 있다. 다만, 기업 환경내의 다양한 환경에서 사용되는 드라이버들의 리스트를 먼저 프로파일링해야 하는 부담감이 있다.
  2. Side-effect 디텍션: 만약 여러 보안 솔루션을 이미 도입한 상태라면 여러 엔드포인트의 이상행동에 집중해 볼 필요가 있다. 이러한 커널 룻킷 모듈들은 시스템에서 전권을 행사할 수 입장에 있으며, 많은 경우 시스템에 존재하는 보안 장치들 (특히 anti-malware, HIPS 프러덕트)을 공격하고, 작동하지 못하도록 조용하게 드라이버 모듈과 메모리내의 구조체를 수정해 버리는 행위를 보이게 된다. 만약 SIEM등을 사용하면서 특정 엔드포인트로부터 의미 있는 텔레메트리들이 전달 되지 않는 경향성이 발견될 경우 더 자세한 조사가 필요하다라는 이상 신호로 볼 수 있다.

이로서 윈도우즈상의 커널 룻킷 위협에 대해서 알아 보았다. 많은 사람들의 생각과 다르게 룻킷 위협은 더 stealthy 해졌고, 더 강력해 졌다. 특히 요즘의 많은 threat들이 기존의 보안 제품들에 대해서 더더욱 신경을 쓰기 시작하면서 detection 될 수 있는 확률들도 낮아지고 있다. 자신의 네트워크에 룻킷이 없다라는 것을 어떻게 손쉽게 확신할 수 있을까? 거기에 대한 쉬운 답이 없다라는 것은 현재 사이버 시큐리티 인더스트리가 처한 상황을 단적으로 보여준다고 생각한다.

댓글 남기기