삽질의 현장/- 윈도우 커널

윈도우커널_#001_커널은 뭐다? 서버다!

shovelman 2015. 6. 9. 23:16

 

 



삽잡이라는 아주 훌륭한 친구는 이것을 다 들어주고 있습니다.

아 그렇군요...커널은 서버이군요~~!!


"가볍게 다리를 꼬고 살짝 브이를 눈 옆 30cm에 손을 두면 나는 바로 귀요미."

 

안녕하세요 귀요미 삽잡이 입니다.

요즘 계속 앉아있으니까 살만 디룩디룩 찌네요... 

적어도 뇌만큼은 디룩디룩 살찌지 않기 위해서 열심히 뇌운동을 해야겠습니다. 

나의 뇌가 뇌짱... 두되짱... 음... 머리짱...? ... 커...

... 아무튼... 머리의 웰빙을 위해 오늘도 달리겠습니다.

 

열정있고! 패기있게! 뽜이아!!    

 

 

자! 오늘부터 씹어먹을 맛있는 분야!  맛있... 맛... 맛있는!! 잘근 잘근 씹어 먹을!!!

바로 Window Kernel입니다!

 

여러분에게 우선 Kernel이 무엇인지 초장부터 말씀드리고 시작하겠습니다.

일단 그냥 받아들이세요! 이개 뭔 Dog Sound ??? 냐.. 라는 마음이 들어도.

일단 넣어두세요~

 

 




자! Kernel은 뭐다?? 바로!! Server다!

너무 중요하니까 한번만 더 말씀드릴래요...

 

자! Kernel은 뭐다?? 바로!! Server다! (복붙잼...ㅋㅋㅋ)

 

미친감자 커널은 서버라고
우기고 있습니다....
아무도 들어주질 않습니다....
커널이 커널이지..뭔 서버야?
게임서버라도 되는거야?
라고 하면서 말이죠....둘중에 하나는 무식한것입니다.
아니 둘다 무식할 수도 있고요.






왜 Kernel은 Server일까요?! 

쭉 보면서 왜 Kernel은 Server일지 느껴보시기 바랍니다.

 


 

 

자 마우스로 그려봤습니다. 뭔가 장인의 손길이 느껴지십니까? 허허허... ...

 




 삽잡이 대단한데~!!그림 솜씨 아주 좋아..

이 그림을 더 살려보자~~

삽잡이~~



우선, 저 빨간 친구 부터 살펴봅시다~

Kernel은 CPU를 중심으로 하드웨어를 클라이언트에게 서비스합니다.

 

저기 코파면서 앉아있는 친구 있죠? 저 친구는 고갱님께서 요구하시면

아래 있는 하드웨어들을 고갱님께 제공해드린답니다.

 

고갱님께서 무엇인가 필요하실때 Win32 (사실.. WIn32는 하나가 아닙니다... ㅎㄷㄷ)친구가 고갱님의 요청을 수렴받아 NTDLL.DLL에게 그 요청사항을 전달합니다. 
요청사항을 전달받은 NTDLL.DLL은 평화로운 User Land에서 Kernel Land로 이동을 하죠. Kenel Land에 도착한 NTDLL.DLL은 커널에게 고갱님의 요구사항을 전합니다.

 




 삽잡이 음 SDT .

이 그림을 더 살려보자~~

삽잡이~~

SSD->SSDT 

SSDT가 정확한 것인가봐~

http://en.wikipedia.org/wiki/SSDT 에 정확히 설명하고 있네요~

System 이라는 단어가 더 들어가는구나~!


System Service Dispatch Table, an internal data structure within Microsoft Windows



 

여기서 Service Dercription Table 이란,

커널 함수들의 주소가 위치하고 있는 테이블입니다.

뭐.. 프로세스의 요청에 의해 필요한 함수를 찾아가기 위한 함수들의 주소들이 저장되어있는 테이블이랄까요? (말이 참 길군요..)

 

결국 이곳에서 Interrupt Dercriptor Table이라는 곳에 가게 됩니다.

이곳은 뭐냐면... 고갱님의 요청으로부터 필요한 그것을 주는것이죠. 그것이란?

바로 Handle 입니다.

Handle을 주는 이유는 "직접 접근 못하니까 Handle로 접근해!"라는 이유입니다.

 

Handle은 대부분이 생각하시는 자동차 핸들, 자전가 핸들을 생각하실텐데,

Global한 Mind로 문에 달려있는 손잡이라고 생각하시는게 이해하시기 편하실거에요.

그렇다면 결국 Handle을 Kernel측에서 Client에게 던져준다는 뜻은

"이걸로 너가 필요한 그것의 문을 열어!"라는 뜻이 되겠네요.

물론 직접 접근은 안되지만 사용할 수 있도록 해주죠.

 

어떠십니까... 여러분에게 잘 받아들여졌을지 걱정이네요.. 허허..

오늘은 여기까지 하기로합시다~

 

제가 처음에 말씀드렸던 "Kernel은 Server다."의 이유를 어찌... 이제 좀 감을 잡으셨나요?

"Kernel은 서버다. 서버는 CPU를 중심을 H/W들을 고갱님에게 서비스한다."

오늘 내용의 핵심인거 같네요... 

추가적으로 "Kernel은 고갱님의 요청사항의 답변으로 Handle을 던져준다." 까지 알고 가시는게 좋겠네요 ㅎㅎ




 

이런 그림 하나 집어 넣자~^^

이곳에... 하드웨어 사진이랑...서비스를 하는 그림이나 사진을 집어 넣자~!

아니며 이런 그림도 좋을 것 같아..





아니 이런 서버 아니고~!!

서비스를 서버!!




이해가셨어요^^?



내일은 비가 온다고 하네요...

비온다고 축져지시지 마시고 그럴 수록 청개구리 Mind로 더욱 불타오르시길 바랍니다!

주안에서 승리하시길 바라며

다음에 뵙겠습니다.

 

이상 삽잡이였습니다!




 

다음 이야기에서는 정말 그렇다는 것을 보여주자고

증명해보여주자고~!!

오케?

어떻게?

일단은 디버깅으로 보여주고...

SSDT HOOKING이나...

증명을 할 수 있는 방안을 찾아보자..



 

[참고자료]

http://goo.gl/0XaqwQ  <-- SSDT 후킹에 대한 아주 훌륭한 글


http://www.malwaretech.com/2013/10/ring3-ring0-rootkit-hook-detection-22.html

<-- SSDT 에 대한 설명이 잘되어 있는 그림이 있다.


http://goo.gl/zMRjqB <-- SSDT Hooking 구글 이미지 검색


http://www.fmddlmyy.cn/text5.html <-- 일본분^^ 커널에 대해서 아주 친절하게 설명하고 있는 것 같다.


[구글 검색 키워드]

ntdll.dll 

SSDT HOOKING


http://sapzape.tistory.com/4