본문 바로가기

My Study/Programming&Theory

Create BSOD in usermode

이번에 해볼 것은 usermode에서 간단하게 BSOD를 발생시키는 방법입니다. 예전에도 포스팅한 적이 있지만 그 방법은..
가짜 BSOD창으로써.. 그냥 cmd창을 조작하여 만든 BSOD화면입니다.

하지만 이번엔 진짜 BSOD입니다.

보통 BSOD창을 띄우기 위해선 커널에서 KeDebugCheckEx함수를 호출해버리면 됩니다.
하지만 이건 .sys파일을 만들어서 커널에 로드시켜야 합니다.

제가 사용할 방법은 usermode상에서 해결하는 방법인데 크게 어렵지 않습니다.
간단하게 결론부터 말하면 winlogon.exe를 죽여버리면 됩니다.

winlogon.exe파일에 대한 정보입니다.
간단하게 말하자면 winlogon은 MS OS의 로그인시 중요한 구성요소이며 또한 컴퓨터를 잠궈놓을 때 또한 사용되는 프로세스입니다. 즉, 사용자의 자격 증명을 위한 중요한 프로세스라고 생각하시면 됩니다.

이 winlogon프로세스를 죽여버리면 BSOD가 발생하게 됩니다.
일단 이 프로세스를 죽이는 코드를 보시겠습니다.
간단하게 설명을 하면 먼저 권한 상승을 시킨 후 
해당 프로세스의 pid를 찾아 TerminateProcess함수를 사용해 죽여버리는 것입니다.

권한을 상승시키는 이유는 일반적인 어플리케이션에선 
winlogon같이 OS의 중요 프로세스가 가지고 있는 권한을 안가지고 있습니다.

먼저 일반 어플리케이션의 권한입니다.

SeDebugPrivilege가 Disabled되어 있습니다.

이번엔 winlogon의 권한을 봐보겠습니다.

Default Enabled 되어 있습니다. 
이건 강제적으로 권한을 바꿔준게 아니라 아에 OS에서 이 프로세스의 권한을 이렇게 설명해논 것입니다.

그러므로 우리는 Default까진 안되더라도 강제적으로 권한을 Enabled로 바꿔주므로써 해당 프로세스를 주물럭 주물럭 할수 있는 권한을 얻는 것입니다.

권한을 상승시킨 제 프로세스를 봐보겠습니다.

이제 권한 상승을 시켰으니 해당 프로세스를 꺼버리면 됩니다.

winlogon.exe를 꺼버리면 한 3~4초후에 BSOD화면이 나오는데 해당 화면은 이렇습니다.

딱 두줄만 있습니다. 보통 우리가 알던 BSOD화면은 한 화면에 글씨가 쫙~~나옵니다. 뭔가 다르군요.
일단 이것도 BSOD이므로 재부팅을 무조건해야됩니다.

시스템의 중요한 파일을 꺼버려서 문제가 생긴다는 것은 누구나 알수 있는 사실입니다.
하지만 왜 저 프로세스를 끄면 저렇게 BSOD화면이 떠버리는지는 더 자세히 분석해 봐야 알겠군요.

그래도 한번 왜 그런지 이유를 분석해보기 위해서 dump파일 분석을 하려고 했지만..
VM에서하면 minidump에 파일이 안생기더군요. ( VM환경은 Windows XP )
그래서 제 본컴을 희생시켜 한번 해보려 했으나.. -_-;; 제 본컴은 윈7인데 BSOD는 안뜨고
모든 프로세스가 꺼지고 다 꺼지더니.. 한 1분후에 로그인화면으로 넘어갔습니다.
OS에서 winlogon이 꺼진걸 감지하고 재부팅은 아니더라도 다시 winlogon을 켜버린거 같군요.

그래서 그냥 하지않았습니다.. :-)

결론입니다. winlogon을 꺼버리면 시스템에 문제를 줄수 있으며 XP같은 경우는 BSOD까지 띄워버리고
Win 7은 그냥 로그오프가 된다고 생각하시면 됩니다.