커널 패닉
[image]
Kernel panic
어떤 운영체제의 커널이 와장창 꼬여버리는 상태로 쉽게 말해 운영체제의 개판 5분 전 상태. 커널은 운영체제의 핵심이므로 이놈이 꼬여버리게 되면 컴퓨터를 사용할 수 없다. 이 경우엔 재부팅이 답이지만, 그 다음부터 아예 쓸 수 없는 경우도 가끔 발생한다.
대표적으로 Windows의 블루스크린이 이 중 하나이며,[1] 유닉스에도 macOS에도 있다. 사실 '''커널 패닉이 없는 운영체제는 없으며,''' iOS, 안드로이드에서도 발생한다. 따라서 어느 기계에서나 발생할 수 있으며, ATM, 스마트폰 등도 예외는 아니라는 소리. 단, 심각하게 불안한 Windows 95, Windows 98, Windows Me 등을 제외하곤 잘 보이지 않을 뿐이다.
커널 패닉은 커널에서 예기치 못한 형식이나 정상적으로 다룰 수 없는 명령어를 수신했을 때에 발생한다.[2] 대부분은 CPU가 이를 발생시키지만, 커널 내부에서 자체적으로 발생시키기도 하며, 어떤 방법으로도 더이상 진행할 수 없게 되면 재부팅 밖엔 답이 없다.
한편, 윈도우즈 98/Me 시절의 블루스크린은 서드파티 디바이스 드라이버의 탓이 크다.[3] OS와의 동작 호환이 완벽하게 검증되지 않은 디바이스 드라이버가 마구 양산되었고 디바이스 드라이버의 특성상(일반적인 프로그램과 달리 커널 내부에서 동작한다) 커널을 매우 불안정하게 만들었던 것으로 추정. 당장 빌 게이츠가 주관한 시연회에서부터 스캐너를 USB로 꽂자마자 블루스크린이 뜨면서 일반 사용자에게 이런 일이 일어날 것임을 예고하기도 하였다. 고질적인 메모리 누수와 오동작하는 디바이스 드라이버의 시너지는 유저들에게 인내심의 진정한 의미를 재발견하도록 만들었다.
이 때문에 윈도우즈 2000 이후의 디바이스 드라이버들은 마이크로소프트의 인증 센터에서 WHQL 서명을 받지 않는 한 설치시에 경고 메시지가 뜨게 된다.[4] 그래서 윈도우 2000이후부턴 어지간한 해서는 커널패닉 창이 뜨지 않는다.[5] 커널 모드 드라이버에서 문제가 발생하였다면? 잠시 정지했다가 드라이버 재시작을 시도한다. 재시작에 성공했다면 커널 패닉 메시지는 뜨지 않는다.
하지만 어디까지나 로드를 시도했을 때의 드라이버가 멀쩡한 경우의 이야기, 어차피 드라이버는 커널 모드에서 동작하므로[6] 로드된 드라이버가 커널 모드에서 에러를 발생시키면 그건 거의 100% 확률로 '''커널 패닉 크리'''가 발생한다. '''이건 어떠한 OS이건 간에 다 똑같으며,''' 커널 패닉이 없는 운영체제가 절대로 나타날 수 없는 좋은 이유가 된다.
어찌됐든 커널 패닉 자체는 더 이상의 장치 고장을 막기 위해 커널에서 수행하는 운영체제의 "최후통첩"이다. 그런 만큼 커널 패닉이 떴다고 좌절하지 말길 바라며, 너무 자주 뜬다 싶은 경우에는 모든 부분을 점검하는 자세도 필요하다.
[image]
[image]
사용자들에겐 이렇게 혈압을 올리는 커널 패닉이지만, 의외로 이를 좋아하는 사람도 있는데 바로 해커들이다. 커널에서 권한 상승을 위해 임의 코드 실행 취약점을 찾기 위해서는 커널 소스를 직접 눈으로 분석하여 취약점을 찾거나, 또는 퍼징(Fuzzing) 이라는 무작위 데이터 삽입 기법으로 취약점을 찾게 되는데 이 때 취약점에 작용하는 데이터가 들어갔을 경우, 비정상적인 데이터로 인해 커널 패닉이 출력될 수 있다.
이는 일반적인 유저 모드 소프트웨어에서 취약점을 찾을 때도 똑같이 적용되는 얘기인데, 단지 대상이 커널로 바뀌었을 뿐 유저 모드 소프트웨어 대상으로 퍼징을 할 경우 커널 패닉이 아닌 소프트웨어 크래시(Crash) 가 발생하여 종료되는 것을 모니터링하여 취약점을 찾게 된다.
1. 개요
Kernel panic
어떤 운영체제의 커널이 와장창 꼬여버리는 상태로 쉽게 말해 운영체제의 개판 5분 전 상태. 커널은 운영체제의 핵심이므로 이놈이 꼬여버리게 되면 컴퓨터를 사용할 수 없다. 이 경우엔 재부팅이 답이지만, 그 다음부터 아예 쓸 수 없는 경우도 가끔 발생한다.
대표적으로 Windows의 블루스크린이 이 중 하나이며,[1] 유닉스에도 macOS에도 있다. 사실 '''커널 패닉이 없는 운영체제는 없으며,''' iOS, 안드로이드에서도 발생한다. 따라서 어느 기계에서나 발생할 수 있으며, ATM, 스마트폰 등도 예외는 아니라는 소리. 단, 심각하게 불안한 Windows 95, Windows 98, Windows Me 등을 제외하곤 잘 보이지 않을 뿐이다.
2. 왜 생기는가?
커널 패닉은 커널에서 예기치 못한 형식이나 정상적으로 다룰 수 없는 명령어를 수신했을 때에 발생한다.[2] 대부분은 CPU가 이를 발생시키지만, 커널 내부에서 자체적으로 발생시키기도 하며, 어떤 방법으로도 더이상 진행할 수 없게 되면 재부팅 밖엔 답이 없다.
한편, 윈도우즈 98/Me 시절의 블루스크린은 서드파티 디바이스 드라이버의 탓이 크다.[3] OS와의 동작 호환이 완벽하게 검증되지 않은 디바이스 드라이버가 마구 양산되었고 디바이스 드라이버의 특성상(일반적인 프로그램과 달리 커널 내부에서 동작한다) 커널을 매우 불안정하게 만들었던 것으로 추정. 당장 빌 게이츠가 주관한 시연회에서부터 스캐너를 USB로 꽂자마자 블루스크린이 뜨면서 일반 사용자에게 이런 일이 일어날 것임을 예고하기도 하였다. 고질적인 메모리 누수와 오동작하는 디바이스 드라이버의 시너지는 유저들에게 인내심의 진정한 의미를 재발견하도록 만들었다.
이 때문에 윈도우즈 2000 이후의 디바이스 드라이버들은 마이크로소프트의 인증 센터에서 WHQL 서명을 받지 않는 한 설치시에 경고 메시지가 뜨게 된다.[4] 그래서 윈도우 2000이후부턴 어지간한 해서는 커널패닉 창이 뜨지 않는다.[5] 커널 모드 드라이버에서 문제가 발생하였다면? 잠시 정지했다가 드라이버 재시작을 시도한다. 재시작에 성공했다면 커널 패닉 메시지는 뜨지 않는다.
하지만 어디까지나 로드를 시도했을 때의 드라이버가 멀쩡한 경우의 이야기, 어차피 드라이버는 커널 모드에서 동작하므로[6] 로드된 드라이버가 커널 모드에서 에러를 발생시키면 그건 거의 100% 확률로 '''커널 패닉 크리'''가 발생한다. '''이건 어떠한 OS이건 간에 다 똑같으며,''' 커널 패닉이 없는 운영체제가 절대로 나타날 수 없는 좋은 이유가 된다.
어찌됐든 커널 패닉 자체는 더 이상의 장치 고장을 막기 위해 커널에서 수행하는 운영체제의 "최후통첩"이다. 그런 만큼 커널 패닉이 떴다고 좌절하지 말길 바라며, 너무 자주 뜬다 싶은 경우에는 모든 부분을 점검하는 자세도 필요하다.
3. 각종 OS들의 커널 패닉 화면
[image]
[image]
- macOS의 경우 초기에는 커널 패닉이 윈도 XP 블루스크린과 비슷한 모양이었고 맥이 완전히 정지했지만, 10.2판부터는 메시지가 뜨고 맥 자체는 정지하지 않는다. 영어, 프랑스어,[7] 스페인어, 독일어, 일본어, 중국어(간체)[8] 의 6개 국어로 컴퓨터를 재시동하라는 메시지가 표시된다. 그림 참조. 10.8부터는 커널 패닉이 발생할 경우 일단 저 창을 띄운후 컴퓨터가 재부팅된 뒤, 메시지 창을 띄운다. 이 때문에 멘트가 살짝 바뀌었고[9][10] 메시지 창의 서체가 Lucida Grande에서 Helvetica Neue로 변경되었고, 화면이 회색으로 덮이고 메시지가 뜬후, 재부팅후 NVRAM에 로깅을 하며 왜 이런 것이 나오는지에 대해 창을 띄울지 말지[11] 물어보는 창이 나타난다,
경우에 따라 저 두번째 사진처럼 부팅중에 이렇게 커널패닉이 발생하는 경우가 있는데, 대다수 사람들은 이게 커널 패닉 걸린지도 모른다(...) 보통 IOKIT 상에서 패닉이 걸리면 이 화면이 뜬다. S/W적인 원인도 있지만, 대부분은 H/W적인 원인에게서 발생한다. 따라서 애초에 일반 x86-64 PC와의 호환성을 전제로 만들어지지 않은 macOS를 해킨토시로 설치하는 과정에서 매우 자주 발생한다.
- 리눅스의 커널 패닉은 접하기 어려운 것이지만 별 거 없다. 시커먼 콘솔 화면에 Kernel panic 어쩌고 저쩌고 하는 메시지가 전부이다. 그리고 시스템 다운.[12] 가끔 모니터에 표시조차 할 수 없는 상황에서는 키보드의 Caps, Scroll, Num Lock 등으로 알려주거나 비프음 등으로 표시하기도 한다.
4. 여담
사용자들에겐 이렇게 혈압을 올리는 커널 패닉이지만, 의외로 이를 좋아하는 사람도 있는데 바로 해커들이다. 커널에서 권한 상승을 위해 임의 코드 실행 취약점을 찾기 위해서는 커널 소스를 직접 눈으로 분석하여 취약점을 찾거나, 또는 퍼징(Fuzzing) 이라는 무작위 데이터 삽입 기법으로 취약점을 찾게 되는데 이 때 취약점에 작용하는 데이터가 들어갔을 경우, 비정상적인 데이터로 인해 커널 패닉이 출력될 수 있다.
이는 일반적인 유저 모드 소프트웨어에서 취약점을 찾을 때도 똑같이 적용되는 얘기인데, 단지 대상이 커널로 바뀌었을 뿐 유저 모드 소프트웨어 대상으로 퍼징을 할 경우 커널 패닉이 아닌 소프트웨어 크래시(Crash) 가 발생하여 종료되는 것을 모니터링하여 취약점을 찾게 된다.
5. 관련 문서
[1] NT 계열에선 100%. 하지만 9x 계열의 Windows에서는 일부 블루스크린('''치명적인 오류 0E 어쩌구로 시작되는 경우''')만 해당한다. 그 이전의 버전(1.0, 2.xx, 3.xx)에서는 아예 커널 패닉이 아니다.[2] 소프트웨어나 하드웨어의 오동작, 전기적인 노이즈로 인한 꼬인 데이터 취급 등.[3] 물론 이 탓도 있으나 원래부터 9x 계열 자체가 여러가지 보안 허점들도 있었으며 '''무엇보다도 NT 계열의 Windows와는 그 구조가 너무나도 달랐었다!''' 예를 들다면, DLL과 같이 동적으로 로드해서 사용하는 라이브러리의 경우 NT 계열처럼 각각의 프로세스 주소 공간에 올라가는 게 아니라, 공유 메모리에 올라오게 된다. 만일 해당 DLL이 올라간 공간에 누군가가 조금이라도 잘못된 조작을 하면 어떨까? '''그냥 버틸 수가 없다!''' 게다가 덤으로 일반적으로 커널 모드에서만 사용이 가능했던 Port I/O 명령어 같은 권한이 필요한 명령어를 사용자 모드에서 실행되는 응용 프로그램까지도 제대로 사용할 수 있었다!(이러한 점을 악용한 대표적인 바이러스가 바로 CIH 바이러스) 어쨌든 OS 자체의 결함에다가 잘못된 서드파티 디바이스 드라이버에 의한 시너지 효과까지 받아서(...) 일어났다고 볼 수 있다.[4] Windows 8까지는 서명이 없는 드라이버라면 경고 메시지는 떠도 사용자 선택에 따라 여전히 설치는 가능했지만, Windows 10부터는 WHQL 서명이 없는 드라이버의 설치를 아예 막아버려서 일반적인 방법으론 설치할 수가 없다.[5] 뿐만 아니라 9x와는 달리 웬만한 오류들은 OS의 동작이 더 이상 불가능한 상황이 아니라면 그냥 가볍게 씹어주시는 위엄을 발휘한다. 9x시리즈는 도스 기반이었지만 2000부터는 NT계열로 커널이 바뀌었기 때문이다.[6] 모두 그렇다는 것은 아니다! Windows 의 경우 UMDF 라는 유저 모드에서 동작하는 드라이버 개발 프레임웍을 지원하고 있다. 이는 중간에 추상화 계층을 하나 더 두어서 구현되고, 이 드라이버에서 크래시가 나도 커널 패닉은 발생하지 않는다. 물론 모든 드라이버가 이렇게 개발할 수 있는 것은 아니다.(어쩔 수 없이 커널 모드에서 동작해야 하는 드라이버도 있기 때문이다)[7] 10.6 Snow Leopard 때 추가됨.[8] 电脑因出现问题而重新启动。请按一下按键,或等几秒钟以继续启动。10.8 Mountain Lion 때 추가됨.[9] You need to restart your computer. Hold down the Power button until it turns off, then press the Power button again. → Your computer restarted because of a problem. Press a key or wait a few seconds to continue starting up. 멘트 내용대로 아무 키를 누르거나 잠깐 기다리면 부팅이 진행된다.[10] 심각한 문제가 있다면 다시 커널 패닉이 발생하겠지만 가벼운 소프트웨어적인 문제라면 보통 정상 부팅된다. 그럴 때 원인이 될 것 같은 프로그램을 제거하면 된다. 만일 하드웨어 문제는 아니지만 소프트웨어 충돌이 심각한 경우, 안전 모드 부팅(부팅 시 shift 꾹 누르면 된다)을 하거나 이도 안 될 경우 복구 모드(cmd + r)로 들어가서 터미널을 띄우고 nvram boot-args="-x"를 입력하고 재시동하면 안전 모드 부팅을 할 수 있다. 이때 원인이 되는 프로그램을 제거하면 된다.[11] 애플에 리포트를 할지 말지에 대해서 [12] 메시지가 매우 많아 보이지만 Kernel panic 위의 한 두줄 정도 뭔가 꼬이기 시작하는 메시지를 제외하고는 모두 정상적인 동작 중에 현재 상태를 알리는 메시지이다. 저 아래 Palm Web OS도 마찬가지.