커널에서 하는 것이 만능인가?




이달 초에 KOSR 세미나에 다녀왔습니다(생각해보니 한참 됐군요-_-). 발표자님께
오랫만에 인사도 하고 아는 사람들에게 간만에 얼굴도 비추고, 그런 부수적인 목적 외에
구경간 발표 자체도 꽤 깔끔하고 위트있게 진행된 터라 그럭저럭 재미있게 시간 보내고
왔습니다.

발표를 듣던 도중 키보드 보안 얘기가 나와서 중간에 많은 생각을 하게 되었습니다.
한때 키보드보안 개발회사에서 가장 괴로워 하던(귀찮아 하던... 분도 계셨구요) 쪽이
키보드 폴링을 이용한 키로깅에 대한 대응방안입니다. 여러 보안회사의 대책이
있었겠지만 사실 A 사의 대응방안이 예전부터 많이 흥미로웠습니다.

A 회사가 사용한 방법은 키보드 폴링 자체를 커널에서 원천적으로 제어할 수는
없다고 보고, 일단 키를 보내주되 다른 랜덤한 키와 섞고, 애플리케이션 단에서
그 랜덤한 키를 제외해주는 기법입니다(특허 문서에도 있으니 뭐 공개해도 괜찮겠죠).
사실 A 사의 대응방안에 대해 예전부터 여러가지 생각이 맴돌았지만, 커널 세미나를
하는 자리라는 점을 생각해 보면 기분이 더욱 묘했습니다.

왜냐하면 어쨌든 폴링에 대해서는 그냥 상식으로 생각하기에 커널 공격은 커널로
답을 찾을 것이다 라고 생각한 적이 있었거든요. 하지만 어쨌든 유저 레벨을 혼용한
방법으로 대응방법을 만든겁니다. 이 부분이 뭐가 문제냐고요, 이런 얘기가 있습니다.
"커널을 하는 사람들은 커널만이 최강인줄 안다. " 보안 쪽에서 일하거나 보안 쪽
공부를 하시는 분들 중에서는 이런 사람들 많이 보셨을 겁니다. 뭐 전혀 틀린 얘기는
아니지만 완전히 맞는 얘기도 아니라고 생각합니다.

보안쟁이들이 알고 있는 기존 상식 그리고, 비공식/공식적인 보안의 커리큘럼에는
항상 근원적으로는 커널에서 방어해야 하며, 그렇지 않고 유저에서만 버티고 서있는
것은 전혀 소용이 없다는 말을 합니다. 하지만 이 말은 완전히 정답이 아닙니다.
왜냐하면 굳이 커널로 내려가지 않더라도 유저 레벨에서 제어할 수 있는 내용이
생각보다 아주 많기 때문입니다. 조금 전 언급한 폴링 쪽도 그렇고요 생각 외로
native hooking 쪽도 그런 부분이 있습니다. 회사 업무라서 자세히 말은 못하겠고
(해외의 몇몇 rootkit detector 들은 ring3 mode 에서도 독특한 방식으로 rootkit 을
훌륭하게 잡아냅니다... 힌트는 여기까지....;; )

커널에서 대부분의 핵심 처리를 하는 두번째 문제점으로는, 커널에서 보호하는 양을
늘려가면 늘려갈 수록 그만큼 취약점이 증가하게 된다는 것입니다.

이 얘기는 무슨 의미냐 하면, 애플리케이션 레벨은 아무래도 영역이 방대하지만
커널 쪽은 상대적으로 코드 량도 적고, 현재 알려진 보호 영역이나 공격의 대상이
될만한 구간이 어느 정도 정해져 있기 때문입니다. 따라서 공격자가 커널 지식에
능하고, 보안 모듈 개발자가 기존 지식에 잘 길들여진 시스템 프로그래머라면,
커널에서 보호하고 있을 위치를 예상해 보는 것은 그렇게 어렵지 않습니다.

실제로 많은 사람들이 깨고 싶어하는 게임보안 솔루션이 가장 많은 공격을 당하면서
취약한 부분도 커널 부분이고, 유저 레벨에서 보호하는 부분은 오히려 훨씬 더
견고합니다 (물론 두 부분을 융합시키지 못한 미보완 상태의 구간도 많긴하지만요 ;; )

"커널만이 최고다" 라는 사람은 오히려 이제 막 커널을 시작한 쪼렙들에게 많이 봤습니다.
하지만 유저 레벨에서 충분한 보완이 된다면, 굳이 불안스러운 커널로 내려갈 필요가
있을까요? 또한 오버스러운 또는 초보스러운 커널 개발자의 경우 유저에서 해도 될
일을 일부러 커널로 내려가서 하는 경우도 있는데 그런 오버액션을 해야 될 필요도
있을까요?

보안 코드를 개발하는 우리는 "강력한" 프로그램을 만드는 것도 중요하지만
"안전한" 프로그램을 만드는 것 또한 잊어서는 안 될 내용이라고 생각합니다.
물론 커널로 만드는 것도 언젠가는 안전한 코드가 될 때가 올거고, 유저에서 하는 것
이상으로 안정한 상태로 돌아갈 수도 있습니다. 하지만 그런 날이 올때까지 피해를
보는 것은 개발자의 PC 일까요, 아니면 왜 블루가 나는지 알지도 못한채 계속
고객센터에 불이나도록 전화를 할 유저 PC 일까요? 또, 아무리 내가 안전하게
프로그래밍 하였다 하더라도 공공장소인 커널 공간에서 다른 모듈의 불안정한
후킹으로 인해 블루가 발생할 날이 반드시 오지 않는다고 보장할 수 있을까요.

물론 커널에서만 할 수 있는것은 당연히 커널에서 해야 한다고 생각합니다.
하지만 유저에서 해도 될 일을 굳이 커널에서 하고 있는 커널 만능주의 개발자들이
늘어나는 것을 막지 않는다면 아무리 드라이버 사이닝 제도가 버티고 서있다 하더라도
보안성이 점점 높아지는 각종 모듈 덕에 유저들 PC 에서 발생되는 블루스크린은
줄어들 것 같지 않을 거라는 생각이 듭니다.


window31.


ps. "커널에서만 할 수 있는것은 물론 당연히 커널에서 해야 한다"고 했습니다.
초딩들의 이상한 태클 댁글이나 이메일은 사절합니다 -_-;


신고
Posted by window31


댓글을 달아주세요

  1. 2009.12.28 09:39 신고
    댓글 주소 수정/삭제 댓글
    KOSR 세미나때 멀리서 뵈었었습니다. 여전히 간지나시더군요 ^^
    커널에서는 불가능하고 유저레벨에서만 가능한 일은 없겠지요. 하지만... 유저레벨에서 하는게 백만배정도 편하고 간단한 일은 무지 많습니다. 저도 요즘 원래 커널에서 하려고 했던 일들 몇가지를 유저레벨로 끌어올리고 있습니다. 훨씬 편하고 좋더구만요. ^^;
    • 2009.12.29 00:53 신고
      댓글 주소 수정/삭제
      아흠.. 간..간지라... 그날 뭘 입고 갔는지 기억이 ;;
      백만배 정도에 동의합니다 ㅎ kuaaan 님께서 국산 엔진의 자존심을 다시 부활시켜주세요 ^^
    • 2009.12.29 13:22 신고
      댓글 주소 수정/삭제
      종종 느낍니다.
      "유저레벨에서 이런일도 할수 있구나."
      전지전능은 아니겠지만 무궁무진하긴 한것 같습니다. ^^
      국산 엔진의 자존심을 다시 부활시켜주세요 ==> 헉.. 혹시 천리안이라도 가지신 건가요? ^^;;;
    • 2010.01.02 18:38 신고
      댓글 주소 수정/삭제
      그냥 느낌상 한 얘기인데
      진짜인가 보네요 기대하겠습니다 ! ^^
  2. 홍마니
    2009.12.28 16:28 신고
    댓글 주소 수정/삭제 댓글
    저도 초짜였었군요.. 커널을 공부한지 얼마 안되기도 했지만 커널만이 전부라고 생각하고 있었씁니다. 유저레벨에서도 가능한지 새롭게 알게되네요^-^
    좋은글 감사합니다.
    • 2009.12.29 00:54 신고
      댓글 주소 수정/삭제
      네 뭐 유저랜드도 찾아보면 의외로 많아요 : )
  3. vice
    2009.12.28 17:18 신고
    댓글 주소 수정/삭제 댓글
    좋은글 잘 읽구 갑니다. 많이 느끼게 되네요.. ^^
  4. 승네군
    2009.12.29 22:06 신고
    댓글 주소 수정/삭제 댓글
    뭘 커널에서 해야하고, 뭘 유저레벨에서 해야 하는지 모른다면...
    공부가 한참 많이 필요한거 ... 맞죠? T^T
  5. 2010.01.01 04:38 신고
    댓글 주소 수정/삭제 댓글
    좋은 글, 잘 읽고 갑니다.
  6. 2010.01.06 03:07 신고
    댓글 주소 수정/삭제 댓글
    ^_^ b...
  7. 2010.05.17 13:24 신고
    댓글 주소 수정/삭제 댓글
    키보드 암호화도 어찌보면 ring3를 혼용했네요.
    암호화는 커널레벨, 복호화는 유저레벨이니까요^^
    오랜만에 키보드 보안 얘기를 들으니까 솔깃합니다 ㅎㅎ

    커널은 시작점, ring3는 끝점.
    처음과 끝 모두가 중요하지 않나 생각되네요.

    식곤증을 물리친 좋은 글 감사합니다 :)

BLOG main image
by window31

카테고리

분류 전체보기 (285)
Reverse Engineering (22)
C, C++ (20)
Kernel (8)
Guitar (19)
잡담 (79)
etc (8)
who am i (8)
보안 이야기 (89)
Tools (3)
월간 마이크로소프트웨어/그.. (28)

글 보관함