Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++에서 C와 BASH 포크 폭탄 비교: 왜 BASH가 더 강력한가?

C 포크 폭탄과 BASH 포크 폭탄의 차이

BASH 포크 폭탄(fork bomb)이 C 프로그램으로 작성된 버전보다 훨씬 더 강력하다는 사실은 이미 널리 알려져 있습니다. 그 핵심 원인은 BASH에서 생성되는 프로세스는 부모 프로세스로부터 분리(detach)되기 때문입니다.

즉, 처음 실행했던 부모 프로세스가 파괴되거나 강제 종료되더라도, 이후에 생성된 나머지 자식 프로세스들은 그대로 살아남아 계속 동작합니다. 반면 C 언어로 구현한 포크 폭탄은 부모 프로세스가 종료되는 순간 하위에 있던 자식 프로세스들이 자동으로 함께 소멸됩니다. 셸 스크립트는 시스템과 직접 통신하기 때문에 이러한 차이가 발생하는 것입니다.

개선된 C 포크 폭탄 구현

다만 C 언어 기반의 포크 폭탄도 수정을 통해 성능을 높일 수 있습니다. 포크(fork) 프로세스를 생성하는 시점에 함께 메모리를 할당하도록 프로그램을 변경하면, 단순히 프로세스만 늘리는 것이 아니라 시스템의 RAM까지 고갈시켜 공격 효과를 극대화할 수 있습니다.

다음은 메모리 할당 기능이 추가된 개선된 C 포크 폭탄의 구현 예시입니다.

// Modified fork bomb
#include <unistd.h>
#include <malloc.h>
int main(){
    // 무한 루프
    while (1){
       // 자식 포크 프로세스 생성
       fork();
       // RAM에 메모리 할당
       int *p1 = (int *) malloc (sizeof (int) * 100000);
    }
}

정리

요약하자면, BASH 포크 폭탄은 프로세스가 부모로부터 독립적으로 분리되어 부모가 죽어도 지속적으로 증식하는 반면, 일반적인 C 포크 폭탄은 부모 프로세스에 의존적이라는 구조적 차이가 있습니다. C 버전이라도 위 예시처럼 메모리 할당 로직을 추가하면 CPU뿐 아니라 메모리 자원까지 소진시켜 그 위력을 상당히 끌어올릴 수 있습니다.