단일 명령으로 커널 패닉을 발생시키는 방법은 무엇입니까?


61

단일 명령 행으로 커널 패닉을 유발할 수 있습니까?

sudoing 사용자에게 가장 간단한 명령은 무엇이고 일반 사용자에게는 어떤 명령입니까?

명령의 일부로 무언가 다운로드를 제안하는 시나리오는 포함되지 않습니다.


11
:(){ :|:& };:아마도?
Carl

@ carleeto 그래, 우리 중 하나를 설명해 줄 수 있니?
채드 해리슨

14
@hydroparadise "폭탄"이라고 불립니다. 의 본문과 함께 :()호출 된 함수를 정의합니다. "run : and run : 백그라운드에서" 함수 정의를 종료하고 새 함수를 호출합니다.이 함수는 프로세스 한계에 도달하거나 시스템이 정지 될 때까지 새 버전의 자체를 끊임없이 생성합니다. 적절한 프로세스 제한을 설정하지 않고 시스템을 효과적으로 정지시키는 명령입니다. 집에서 시도하지 마십시오. ::|:&;:
Phoshi

1
@Kevin C 프로그램을 작성하고 컴파일 한 다음 드라이버로 설치하는 것을 하나의 명령 줄에서 모두 의미합니까? 실제 사례가 좋습니다.
Desmond Hume

1
포크 폭탄이 반드시 커널 패닉을 유발하지는 않습니다. OTOH, 한 가지 있습니다 그렇게는 (루트로) 작성하는 것은, 말,하는 것입니다 dd if=/dev/urandom of=/dev/mem(커널 버전에 따라, 당신은 할 수 없습니다 /dev/kmem). 그러나 그 후에는 시스템을 사용하지 않을 것입니다. :)
rbrito

답변:


80

FreeBSD :

sysctl debug.kdb.panic=1

리눅스 (자세한 내용은 여기 ) :

echo c > /proc/sysrq-trigger

8
echo c > /proc/sysrq-triggerLinux 시스템을 정지시키는 데 확실히 도움이됩니다. 그러나 개인적으로, 콜 스택의 극적인 발전에 대해 이야기하는 좋은 죽음의 검은 화면은 더 "정식적인"커널 패닉처럼 느껴질 것입니다.
Desmond Hume

4
Linux에서는 가능하기 echo 1 > /proc/sys/kernel/sysrq전에해야 할 수도 있습니다 echo c > /proc/sysrq-trigger.
Christian

OpenBSD는 어떻습니까?
mykhal

무고한 hw의 결함이 얼마나 결함이 있는지 증명할 필요가있을 때 이것은 유용 할 것이다.
nemesisfixx

@mykhal 참조 man.openbsd.org/ddb OpenBSD에서 커널 디버거에 들어가는 방법을 설명합니다.
Kusalananda

24
mkdir /tmp/kpanic && cd /tmp/kpanic && printf '#include <linux/kernel.h>\n#include <linux/module.h>\nMODULE_LICENSE("GPL");static int8_t* message = "buffer overrun at 0x4ba4c73e73acce54";int init_module(void){panic(message);return 0;}' > kpanic.c && printf 'obj-m += kpanic.o\nall:\n\tmake -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules' > Makefile && make && insmod kpanic.ko

panic함수 를 호출하여 커널을 크래시하는 모듈을 컴파일하고 루트가 필요 make하며 gcc

명령에서 "0x4ba4c73e73acce54의 버퍼 오버런"을 드라마에 대한 흥미로운 것으로 바꿉니다.


4
이 소스 코드는 충분히 무해 해 보입니다.
Mark Lakata

이로 인해 커널이 중단되었지만 커널에 메모리를 덤프하고 다시 시작하도록 어떻게 지시합니까? Raspbian은 이것을 사용하여 나를 매 달았습니다.
HeatfanJohn

업데이트 : apt-get install kdump-toolsRaspbian / Debian에서 해야 할 것 같습니다.
HeatfanJohn

8

커널은 무엇에 관계없이 계속 실행됩니다. 따라서 사용자 상호 작용으로 커널 패닉을 유발하는 방법 (Bruce Ediger가 제안한 것처럼 강력한 루트에 의한 고의적 파괴 행위 제외)는 오늘날 대부분의 커널이 만들어 지므로 대부분의 장난은 처음에는 작동하지 않습니다. 매우 심각한 버그, 그것은 빨리 고쳐질 것입니다.


글쎄, 비슷한 방식으로 명령을 실행 한 비 출발 사용자에 의해 시스템이 완전히 정지 된 경우 커널을 많이 사용하지 않습니다 :(){ :|:& };:.
Desmond Hume

4
@DesmondHume 너무 많은 프로세스로 인해 올바른 설정이 중단되지 않습니다. /etc/security/limits.conf파일 을 살펴보십시오 .
Vreality

4

왜 이것이 이전에 언급되지 않았는지 모르겠습니다 ...

sudo kill -9 1

"초기화 시도"메시지와 함께 패닉이 발생했습니다.


내 테스트 시스템에 아무것도 없었습니다.
kgutwin

@kgutwin 테스트 시스템에서 어떤 커널을 사용하고 있었습니까?
NieDzejkob

2

이 시도:

dd if=/dev/urandom of=/proc/sysrq-trigger 


이것은 나를 위해 매우 빠른 커널 패닉을 겪었지만 라이브 우분투 설치에서 프로세스를 수행했기 때문에 프로세스가 얼마나 안전한지 잘 모르겠습니다. 그러나 순수한 터미널 환경에서 커널 오류 메시지를 보냈을 때 커널에서 나에게 스팸 오류 메시지를 표시했습니다.


2
투표가 거부 된 이유는 무엇입니까? 질문 된 내용을 다룹니다.
Josua Robson

1
이 문제는 파일에 'c'를 쓰기 전에 모든 사용자 프로세스를 종료하기 위해 명령을 실행할 수 있다는 것입니다.
사용자

1

다음 코드를 모듈로 컴파일하고 insmod하면 패닉이 발생합니다.

static int crash_module_init(void)

{
     printf("crash module starting\n");
     int *p = 0;

     printk("%d\n", *p);

     return 0;
}

static void crash_module_exit(void)
{
    printf("crash module exiting\n");
}

module_init(crash_module_init);
module_exit(crash_module_exit);

2
이로 인해 oops패닉 이 발생 하지는 않습니다.
SkyDan

1

가장 쉬운 방법은 alt + print screen (sysrq)을 누른 상태에서 c를 누르는 것입니다 echo c > /proc/sysrq-trigger . 약간의 설명 과 동일 합니다. sysrq 키는 최후의 수단으로 커널 자체에 저수준 명령을 보내는 데 사용됩니다 시스템을 저장하려고합니다. alt + print screen (sysrq)을 누른 상태에서 옆에있는 다른 키를 누르면 해당 sysrq-trigger 파일에서 키를 에코하는 것과 같습니다. 그들은 이유를 위해 그것을 트리거라고 부릅니다 .3 'c'는 커널이 충돌하게합니다

그러나 'proc / sys / kernel / sysrq'의 내용을보고 싶을 수도 있습니다. 178 또는 그 밖의 다른 값이면 1로 변경해야합니다. 0은 모두 비활성화되어 있고, 1은 모두 활성화되어 있으며, 1보다 큰 것은 커널이 sysrq로 수행 할 수있는 특정 작업에 대한 비트 맵입니다.


1
리눅스에서 완전히 멈췄을 때 컴퓨터를 다시 시작하기 위해 마법의 키를 누른 상태에서 "REISUB"를 천천히 입력 할 수도 있습니다. 키보드 모드를 Xlate로 변경 || 모든 프로세스에 SigTerm을 E- 전송 I- SigKill을 모든 프로세스에 전송 (물론 초기화 제외) || S- 마운트 된 모든 드라이브 동기화 || U- 읽기 전용으로 모든 장치 마운트 |||| B- 프로세스 종료 또는 마운트 해제없이 즉시 다시 시작 약 전에). 당신은 또한 대신 재시작의 종료 O 대신 B로 사용할 수 있습니다 D는 좋은 시간 시스템 충돌이
야쿠쇼
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.