1. 개요
커널 패닉(Kernel panic)은 컴퓨터 운영체제의 커널에 치명적인 오류(패닉)가 발생한 상태를 뜻한다. 커널은 운영체제의 핵심이므로 오류가 발생하면 컴퓨터를 사용할 수 없다. 이 경우엔 재부팅이 답이지만, 그 다음부터는 아예 쓸 수 없는 경우도 가끔 발생한다.대표적으로 Windows의 블루스크린이 있으며,[1] 유닉스에도 macOS에도 있다. 커널 패닉의 정의상 iOS, 안드로이드 등을 비롯한 거의 모든 운영체제에서 발생한다. 따라서 CPU가 있는 모든 기계에서 발생할 수 있으며, ATM, 스마트폰 등도 예외는 아니다. 단, 심각하게 불안정한 Windows 9x를 제외하곤 잘 보이지 않을 뿐이다.
2. 원인
커널 패닉은 커널에서 예기치 못한 형식이나 정상적으로 다룰 수 없는 명령어를 수신했을 때에 발생한다.[2] 대부분은 CPU가 이를 발생시키지만, 커널 내부에서 자체적으로 발생시키기도 하며, 어떤 방법으로도 더 이상 진행할 수 없게 되면 재부팅밖엔 답이 없다.한편, Windows 98/Windows Me 시절의 블루스크린은 서드파티 디바이스 드라이버의 탓이 크다.[3] OS와의 동작 호환이 완벽하게 검증되지 않은 디바이스 드라이버가 마구 양산되었고 디바이스 드라이버의 특성상(일반적인 프로그램과 달리 커널 내부에서 동작한다) 커널을 매우 불안정하게 만들었던 것으로 추정. 당장 빌 게이츠가 주관한 시연회에서부터 스캐너를 USB로 꽂자마자 블루스크린이 뜨면서 일반 사용자에게 이런 일이 일어날 것임을 예고하기도 하였다. 고질적인 메모리 누수와 오동작하는 디바이스 드라이버의 시너지는 유저들에게 인내심의 진정한 의미를 재발견하도록 만들었다.
이 때문에 윈도우즈 2000 이후의 디바이스 드라이버들은 마이크로소프트의 인증 센터에서 WHQL 서명을 받지 않는 한 설치시에 경고 메시지가 뜨게 된다.[4] 그래서 윈도우 2000이후부턴 어지간한 해서는 커널패닉 창이 뜨지 않는다.[5] 커널 모드 드라이버에서 문제가 발생하였다면? 잠시 정지했다가 드라이버 재시작을 시도한다.[6] 재시작에 성공했다면 커널 패닉 메시지는 뜨지 않는다.
하지만 어디까지나 로드를 시도했을 때의 드라이버가 멀쩡한 경우의 이야기, 어차피 드라이버는 커널 모드에서 동작하므로[7] 로드된 드라이버가 커널 모드에서 에러를 발생시키면 그건 거의 100% 확률로 커널 패닉 크리가 발생한다. 이건 어떠한 OS이건 간에 다 똑같으며, 커널 패닉이 없는 운영체제가 절대로 나타날 수 없는 좋은 이유가 된다.
어찌됐든 커널 패닉 자체는 더 이상의 장치 고장을 막기 위해 커널에서 수행하는 운영체제의 "최후통첩"이다. 그런 만큼 커널 패닉이 떴다고 좌절하지 말길 바라며, 너무 자주 뜬다 싶은 경우에는 모든 부분을 점검하는 자세도 필요하다.
3. 각종 OS들의 커널 패닉 화면
3.1. Windows
자세한 내용은 블루스크린 문서 참고하십시오. NT 커널 윈도우의 경우 (0x50 오류 화면) |
3.2. macOS
Mac OS X Jaguar (10.2) ~ OS X Lion (10.7) |
OS X Lion (10.7) |
OS X Mountain Lion (10.8) ~ macOS Monterey (12.0) (Intel) |
macOS Big Sur (11.0) ~ (Apple Silicon) |
macOS의 경우 초기에는 커널 패닉이 윈도 XP 블루스크린과 비슷한 모양이었고 Mac이 완전히 정지했지만, 10.2판부터는 메시지가 뜨고 Mac 자체는 정지하지 않는다. 영어, 프랑스어,[8] 스페인어, 독일어, 일본어, 중국어(간체)[9]의 6개 국어로 컴퓨터를 재시동하라는 메시지가 표시된다. 그림 참조. 10.8부터는 커널 패닉이 발생할 경우 일단 저 창을 띄운후 컴퓨터가 재부팅된 뒤, 메시지 창을 띄운다.
이 때문에 멘트가 살짝 바뀌었고[10][11] 메시지 창의 서체가 Lucida Grande에서 Helvetica Neue로 변경되었고, 화면이 회색으로 덮이고 메시지가 뜬 후, 재부팅 후 NVRAM에 로깅을 하며 왜 이런 것이 나오는지에 대해 창을 띄울지 말지[12] 물어보는 창이 나타난다.
경우에 따라 저 두 번째 사진처럼 부팅 중에 이렇게 커널 패닉이 발생하는 경우가 있는데, 대다수의 사람들은 이게 커널 패닉인지도 모른다. 보통 IOKIT 상에서 패닉이 발생하면 이 화면이 뜬다. 소프트웨어적인 원인도 있지만, 대부분은 하드웨어적인 원인에서 발생한다. 따라서 일반 x86-64 PC와의 호환성을 전제하고 만들어지지 않은 macOS를 해킨토시에 설치하는 과정에서 매우 자주 발생한다.
Apple Silicon을 장착한 Mac에서는 화면이 깜빡임과 동시에 Mac이 곧바로 재시동되고, 로그인을 하면 위의 팝업으로 커널 패닉 로그를 보여준다. 즉, 검은 바탕에 다국어 메시지로 재시동을 안내하는 화면은 더 이상 나오지 않는다. 이는 시스템 상에서 충돌이 일어났을 때 바로 재시동 혹은 리스프링[13]한 뒤 잠금 화면으로 돌아오는 iPhone, iPad의 특성과 유사하다.
3.3. 리눅스
리눅스의 커널 패닉 |
- 리눅스의 커널 패닉은 접하기 어려운 것이지만 별 거 없다. 시커먼 콘솔 화면에 Kernel panic 어쩌고 저쩌고 하는 메시지가 전부이다. 그리고 시스템 다운.[14] 가끔 모니터에 표시조차 할 수 없는 상황에서는 키보드의 Caps, Scroll, Num Lock 등으로 알려주거나 비프음 등으로 표시하기도 한다.
SPARC의 커널 패닉의 모습. 위쪽의 깨알같은 아스키 아트가 압권. |
Android에서의 커널 패닉 |
중요 파일이 삭제된 경우[15] |
4. 여담
사용자들에겐 이렇게 혈압을 올리는 커널 패닉이지만, 이를 좋아하는 사람도 있는데 바로 해커들이다. 커널에서 권한 상승을 위해 임의 코드 실행 취약점을 찾기 위해서는 커널 소스를 직접 눈으로 분석하여 취약점을 찾거나, 또는 퍼징(Fuzzing)이라는 무작위 데이터 삽입 기법으로 취약점을 찾게 되는데 이때 취약점에 작용하는 데이터가 들어갔을 경우, 비정상적인 데이터로 인해 커널 패닉이 출력될 수 있다.이는 일반적인 유저 모드 소프트웨어에서 취약점을 찾을 때도 똑같이 적용되는 얘기인데, 단지 대상이 커널로 바뀌었을 뿐 유저 모드 소프트웨어 대상으로 퍼징을 할 경우 커널 패닉이 아닌 소프트웨어 크래시(Crash)가 발생하여 종료되는 것을 모니터링하여 취약점을 찾게 된다.
5. 관련 문서
[1] 2000 이후의 NT 계열 운영체제 한정이다. 9x 계열의 Windows에서는 일부 블루스크린, 그것도 치명적인 오류 0E 어쩌구로 시작되는 경우만 해당하며 그 이전의 버전(1.0, 2.xx, 3.xx)이나 2000 이전의 NT 계열 운영체제(3.xx, 4.0)의 경우 단순 부팅 화면이 푸른색인 경우가 있어 파란색 화면이 떴다고 해서 무조건 오류라고 판단할 수는 없다.[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] 보통 그래픽카드가 맛이 가기 시작할 때 자주 확인할 수 있는데, 잠시 화면이 나갔다가 오류 보고가 뜨며 창이 뜨는 식이다.[7] 모두 그렇다는 것은 아니다! Windows 의 경우 UMDF 라는 유저 모드에서 동작하는 드라이버 개발 프레임웍을 지원하고 있다. 이는 중간에 추상화 계층을 하나 더 두어서 구현되고, 이 드라이버에서 크래시가 나도 커널 패닉은 발생하지 않는다. 물론 모든 드라이버가 이렇게 개발할 수 있는 것은 아니다.(어쩔 수 없이 커널 모드에서 동작해야 하는 드라이버도 있기 때문이다)[8] 10.6 Snow Leopard 때 추가됨.[9] 电脑因出现问题而重新启动。请按一下按键,或等几秒钟以继续启动。10.8 Mountain Lion 때 추가됨.[10] 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. 멘트 내용대로 아무 키를 누르거나 잠깐 기다리면 부팅이 진행된다.[11] 심각한 문제가 있다면 다시 커널 패닉이 발생하겠지만 가벼운 소프트웨어적인 문제라면 보통 정상 부팅된다. 그럴 때 원인이 될 것 같은 프로그램을 제거하면 된다. 만일 하드웨어 문제는 아니지만 소프트웨어 충돌이 심각한 경우, 안전 모드 부팅(부팅 시 shift를 꾹 누르면 된다)을 하거나 이도 안 될 경우 복구 모드(cmd + r)로 들어가서 터미널을 띄우고 nvram boot-args="-x"를 입력하고 재시동하면 안전 모드 부팅을 할 수 있다. 이때 원인이 되는 프로그램을 제거하면 된다.[12] 애플에 리포트를 할지 말지에 대해서[13] 검은 바탕에 스프링이 빙글빙글 도는 화면. iOS의 홈 화면을 렌더링하는 프로그램을 'SpringBoard'라고 부르는데, 이 스프링보드를 리로드한다는 의미에서 리스프링이라고 부른다. 재부팅과는 달리 OS의 근본적인 기능들은 재시작 없이 그대로 유지되기 때문에 리스프링이 일어난 후에도 암호를 입력할 필요 없이 곧바로 Face ID, Touch ID 사용이 가능하다.[14] 메시지가 매우 많아 보이지만 Kernel panic 위의 한 두줄 정도 뭔가 꼬이기 시작하는 메시지를 제외하고는 모두 정상적인 동작 중에 현재 상태를 알리는 메시지이다. 저 아래 Palm Web OS도 마찬가지.[15] 이런 경우 Windows의 0xc21a 오류와 유사한 상황으로 재설치밖에 방법이 없어 커널 패닉 중 가장 암울한 경우에 속한다.예시