포크 폭탄(Fork Bomb)이란 무엇인가요? 정의, 코드, 예방 및 제거

포크 폭탄이란 서비스 거부 공격을 말합니다. 아주 작은 코드 하나로 인해 프로세스가 계속해서 복제되면서 그때마다 새로운 프로그램 인스턴스를 생성하여 사용할 수 있는 시스템 리소스를 고갈시킵니다. 이러한 공격이 서버를 한계 상태로 몰아 결국 충돌을 일으킵니다. 

포크 폭탄은 새로운 공격 형태가 아닙니다. 첫 번째 포크 폭탄 공격은 1969년에 발생했습니다. 하지만 오래전 위협이라고 해도 시스템을 오프라인으로 만드는 공격은 오늘날 새로운 위협만큼 피해를 입히기도 합니다.

포크 폭탄은 어떻게 일어나나요? 

컴퓨터에서 수백 개 내지 수천 개의 프로세스 인스턴스가 열린다고 생각해보십시오. 냉각 팬이 고속으로 돌아가고 성능이 떨어지면서, 결국 디바이스에서 충돌이 일어나게 됩니다. 포크 폭탄의 원리도 동일합니다.

포크 폭탄 코드는 프로그램 복제본을 생성합니다. 새로운 인스턴스가 실행되면 포크 공격이 또 다시 발생합니다. 사용할 수 있는 메모리가 모두 고갈될 때까지 이러한 프로세스가 무한 반복됩니다. 이러한 서비스 거부 공격은 엄청난 피해를 초래할 수 있습니다.

fork bomb image

경험이 많은 해커라면 비교적 손쉽게 포크 폭탄 공격을 감행할 수 있습니다. 그릇된 생각을 부추길 수도 있어서 여기에 자세히 다루지는 않겠지만, 대부분의 경우 아주 작은 코드 하나만 있으면 충분합니다.

포크 폭탄을 예방할 수 있나요?

개발자들을 일일이 살피며 유해한 코드를 삽입하지 못하도록 감시할 수는 없습니다. 하지만 포크 폭탄이 시스템을 중단시킬 가능성을 줄일 수 있는 두 가지 방법이 있습니다.

첫째, 사용자 한 명이 소유할 수 있는 최대 프로세스 수를 제한하십시오. Linux에서는 이 작업이 매우 간단합니다. 사용자가 일정 프로세스 이상 소유하지 못하도록 제한한다면 이러한 공격을 시작조차 못하기 때문입니다.

둘째, 프로세스당 메모리 사용량을 제한하십시오. 프로세스에 필요한 메모리 사용량이 설정값을 초과하면 복제를 의심하여 실행을 즉시 거부할 수 있습니다. 이렇게 간단한 방법만으로도 포크 폭탄으로 서버 용량이 고갈되는 것을 방지할 수 있습니다.

공격자에게 포크 폭탄 공격을 당하면 서버를 리셋해야 합니다. 또한 안타깝지만 코드 인스턴스를 모두 삭제해야 공격을 멈출 수 있습니다.

그 외에 Linux 환경에서 자신을 보호할 방법을 찾고 있다면 Linux 서버에 최소 권한 액세스를 적용하는 방법에 관한 Okta 백서를 참조하십시오. 또한 궁금한 점이 있다면 망설이지 마시고 Okta에게 연락 주십시오.

참고 자료

Understanding Bash Fork Bomb Code. (2019년 1월). NixCraft. 

Security Against Fork Bomb Attack in Linux-Based Systems. (2019년 4월). International Journal of Research in Advent Technology.