Joo's
article thumbnail

시나리오

  • 오래된 버전의 관리 툴의 보안 이슈를 이용해 해커에 노출되어, 포크 폭탄 공격을 받게 됨.
  • 포크 폭탄 : 프로세스가 지속적으로 자신을 복제함으로써 이용 가능한 시스템 자원을 고갈시키고 시스템 속도를 떨어뜨려 결국엔 기아 상태로 인한 시스템 충돌을 일으키는 서비스 거부 공격

cgroup의 pids로 이동

cd /sys/fs/cgroup/pids/

컨트롤 그룹 만들기

mkdir police

police 그룹을 만들고 들어가보면 PID 제어와 관련된 다양한 속성들이 있다.

기본값을 확인하면 제한이 없다.

max로 되어 있는 상태.

시스템이 허용하는 최대 범위로 프로세스를 생성할 수 있다.

cat pids.max

max로 되어 있는 것을 5로 바꿔서 제한을 걸어준다.

echo 5 > pids.max

fork bomb 실행

이거 지금 실행하면 fork bomb 맞은 상태가 됨. cgroup 설정을 안했기 때문

서버 콘솔 가서 재부팅해야 함. 재부팅으로 안되면 정지 후 재시작 해야 함.

:(){ :|:& };:

재부팅과 정지, 재시작의 차이

재부팅은 호스트 머신은 그대로 있고, 가상 머신만 재부팅 됨.

정지, 재시작은 해당 물리적인 호스트 머신 위에서 가상 머신이 중단이 되고 반드시 다른 물리 호스트를 찾아서 그 호스트에 가상 머신이 설치가 됨.

 

재부팅하니까 아까 만든 police가 사라져있다.

다시 police 만들고, max를 20으로 변경

mkdir police
cd police
echo 20 > pids.max

현재 프로세스를 tasks에 등록

echo $$ > tasks

fork bomb이 제대로 안만들어져서 max를 20개로 변경한 후 한다.

cgroup 설정을 했기 때문에 fork bomb을 실행해도 전체 cpu가 죽지 않는다.

:(){ :|:& };:

실행중인 프로세스 확인

ps aux

grep으로 특정 프로세스 확인하기

ps aux | grep "0:00 bash" | wc -l

원래 이렇게하면 20개가 떠야 하는데 2개 밖에 안뜬다.

 

뭐가 뭔지 잘 모르겠음.

정리하면 fork bomb을 실행하면 프로세스가 엄청 많이 떠서 전체 프로세스가 죽어야 하는데 pids.max를 제한함으로써 프로세스가 무한히 실행되는 것을 막는 것 같다.

 

메인 워크로드가 아닌 경우 어플리케이션 관리형으로 쓰이는 설치하는 많은 어플리케이션이 존재하고 이럴 경우 PID나 메모리, CPU 등 제한을 걸어서 안정적인 운영 환경을 만들 수 있다.

profile

Joo's

@JooJY

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!