DoS와 DDoS 공격 DOS와 DDOS 공격의 이해 DOS 공격의 이해 DDOS 공격의 이해 한빛미디어(주)
DoS(Denial of Service) 공격의 개념 공격 대상이 수용할 수 있는 능력 이상의 정보나 사용자 또는 네트워크의 용량을 초과 시켜 정상적으로 작동하지 못하게 한다. DoS 공격의 분류 파괴 공격 : 디스크나 데이터, 시스템의 파괴 시스템 자원의 고갈 : CPU, 메모리, 디스크의 사용에 과다한 부하를 가중시킴. 네트워크 자원의 고갈 : 쓰레기 데이터로 네트워크의 대역폭을 고갈시킴.
Ping of Death 공격의 기본은 Ping을 이용하여 ICMP 패킷을 정상적인 크기보다 아주 크게 만드는 것이다. 이렇게 크게 만들어진 패킷은 네트워크를 통해 라우팅(Routing)되어 공격 네트워크에 도달하는 동안 아주 작은 조각(Fragment)이 된다. 공격 대상 시스템은 이렇게 작게 조각화된 패킷을 모두 처리해야 하므로 정상적인 Ping의 경우보다 훨씬 많은 부하가 걸린다. [그림 11-2] Ping of Death 공격 개념도
Ping of death 실행명령 C:\>ping -n 100 -l 65500 172.16.0.3 공격 대상에서의 TCPDump
Syn Flooding Syn Flooding은 서버별 한정되어 있는 동시 사용자 수를 존재하지 않는 클라이언트가 접속한 것처럼 속여 다른 사용자가 서버에서 제공하는 서비스를 받지 못하게 하는 것이다. [그림 11-6] SYN Flooding 공격 개념도
TCP 3Way 핸드쉐이킹(1/2) 정상적인 3Way 핸드쉐이킹 [그림 11-7] TCP 3-웨이 핸드셰이킹
TCP 3Way 핸드쉐이킹(2/2) Syn Flooding 공격 시 3Way 핸드쉐이킹
Syn Flooding 공격 컴파일 : gcc -o synk synk.c 공격 실행 : root# ./synk 0 172.16.0.3 80 80 [그림 11-10] SYN Flooding 공격 실행
Syn Flooding 공격의 TCP Dump Root# tcpdump eth0 [그림 11-11] SYN Flooding TCP Dump
Syn Flooding 공격 시 서버측의 ‘netstat –an’ 결과 Root# netstat -an [그림 11-12] SYN Flooding 공격을 받은 후, 서버에서의 netstat -an
Boink, Bonk, Teardrop 여러 가지 프로토콜은 기본적으로 신뢰성을 높이고자 하는 목적을 가지고 있다. 신뢰성은 다음의 세가지로 크게 생각할 수 있다. 패킷의 순서가 올바른가? 중간에 손실된 패킷은 없는가? 손실된 패킷의 재전송 요구 Boink, Bonk, TearDrop은 위의 사항을 위반함으로써 공격 대상 시스템에 DoS 공격을 가하게 된다 [그림 11-14] Boink와 Bonk 개념도
Syn Flooding 보안 대책 아직도 매우 효과적인 Syn Flooding 공격을 막는 방법은 보안 패치로서 대기 시간을 줄이는 것이다. 하지만 시스템의 특성상 무조건 대기 시간을 줄일 수 없는 경우가 있다. 방화벽에서도 정상적인 접속의 시도와 비정상적인 Syn Flooding 공격의 시도를 구분할 수 있는 방법이 없기 때문에 직접적인 차단은 불가능하다. 예방할 수 있는 방법은 일차적으로 시스템에 패치를 하는 것이며, 그 다음으로는 IDS의 설치다. 공격 대상의 TCP Dump에서 볼 수 있듯이 이 공격은 일정 시간 내에 동시 접속자 수를 점유해야 하므로 아주 짧은 시간 안에 똑같은 형태의 패킷을 보내게 된다. 이는 매우 정형화된 형태로 네트워크에서 쉽게 인지가 가능하며 해당 ISP 업체에 연락하여 그에 해당하는 IP 대역을 접속 금지시키거나 확인한 후 방화벽, 또는 라우터에서 해당 접속을 금지시킴으로서 시스템의 서비스 중지를 막을 수 있다.
Boink, Bonk Bonk는 처음 패킷을 1번으로 보낸 후 두번째, 세번째 패킷 모두 시퀀스 넘버를 1번으로 조작해서 보낸다. Bonk를 수정한 Boink 공격은 처음 패킷을 1번으로 보낸 후 두번째 패킷은 101번, 세번째 패킷은 201번으로 정상적으로 보내다가 중간에서 일정한 시퀀스 넘버로 보낸다. 열번째 패킷은 1001번, 열한번째 패킷도 100번, 열두번째 패킷도 1001번으로 보내는 것이다. TearDrop TearDrop 은 패킷을 겹치게 또는 일정한 간격의 데이터가 빠지게 전송한다. [그림 11-15] Teardrop 공격 시 패킷의 배치
New TearDrop 공격 시 서버측의 TCP Dump 결과 Root# tcpdump eth0 [그림 11-17] New Teardrop의 TCP Dump
New Tear Drop 공격 컴파일 : gcc -o newtear newtear.c 공격 실행 : root# ./newtear 222.222.222.222 172.16.0.3 –t 80 –n 180 [그림 11-16] Newtear 컴파일과 공격
LAND 패킷을 전송할 때 출발지 IP 주소와 목적지 IP 주소 값을 공격자의 IP 주소 값으로 똑같이 만들어서 공격 대상에게 보낸다. 시스템은 처음 시도된 Syn에 대한 Reply 패킷을 출발지 IP 주소 값을 참조하여 그 값을 목적지 IP 주소 값으로 설정하여 패킷을 보낸다. 하지만 이 값은 자기 자신의 IP 주소 값이므로 네트워크 밖으로 나가지 않고 자신에게 다시 돌아온다. 이 공격법은 Syn Flooding처럼 동시 사용자 수를 점유해버리며, CPU 부하까지 올리게 된다. [그림 11-18] Land 공격 개념도
LAND 컴파일 : gcc -o land land.c 공격 실행 : root# ./land 172.16.0.3 172.16.0.3 80 80 [그림 11-9] SYN Flooding 소스 컴파일 [그림 11-10] SYN Flooding 공격 실행
Win Nuke(OOB) 먼저 상대방 시스템에 139번 포트를 스캔하여 열려 있는지 확인한다 그리고 NetBIOS 패킷에 URG(Urgent)를 On 상태로 하여 패킷을 전송한다. URG가 On 상태는 송수신 중간에 발생할 수 있는 비정상적인 상태를 의미한다. 서비스 중 ‘Ctrl + Break’ 또는 ‘Ctrl + C’와 같은 역할을 한다 공격 대상은 수많은 Urgent 패킷을 인식하고 모든 시스템의 세션을 닫은 뒤 재연결을 요구하게 된다. 이때 CPU에 과부하가 걸리게 된다. 이 공격은 심한 경우 시스템을 망가지게 하기도 한다
LAND 공격 시 서버측의 TCP Dump 결과 Root# tcpdump eth0 [그림 11-21] LAND 공격의 TCP Dump
WinNUKE 공격 [그림 11-22] 윈도우용 Nuking 툴
Smurf, Fraggle 공격자가 172.16.0.255로 ICMP Request 패킷으로 Direct 브로드캐스트를 했을 경우 다음과 같이 패킷이 전달된다. [그림 11-25] 공격자에 의한 Smurf 공격의 실시
Smurf, Fraggle ICMP Requset 패킷을 전달받은 에이전트들은 공격 대상에게 ICMP Replay 패킷을 보낸다. [그림 11-26] 에이전트에 의한 Smurf 공격의 실행
Smurf 공격 컴파일 : root# gcc -o smurf smurf.c 공격 실행 : root# ./smurf 172.16.0.3 bcast 0 5 512 [그림 11-28] Smurf 공격의 실시
Smurf 공격의 TCP Dump [그림 11-29] Smurf 공격의 TCP Dump
Mail Bomb Mail Bomb는 흔히 폭탄 메일이라고 한다. 스팸 메일도 이와 같은 종류다. 메일 서버는 각 사용자에게 일정한 양의 디스크 공간을 할당하는데, 메일이 폭주하여 디스크 공간을 가득 채우면 정작 받아야 하는 메일을 받을 수 없다. 이 때문에 스팸 메일은 DoS 공격이 될 수도 있다 윈도우용 Mail Bomber Upyours [그림 11-30] 윈도우의 Anonymous Mailer
Sendmail을 이용한 메일 보내기 Sendmail은 telnet을 이용한다. telnet으로 로컬 IP 주소를 쓰고 있으며, SMTP 포트 번호인 25번을 뒤에 써주면 Sendmail에 접속할 수 있다 Sendmail에 접속한 후 ‘mail from :' 뒤에 보내는 사람의 주소를 써준다.이메일은 어떤 주소를 써도 무방하다 [그림 11-31] Sendmail 사용법
스팸 메일에 대한 보안 설정 SNMP Relay 기능을 정지 : /etc/mail/access 파일을 이용해서 해보자 ‘access’ 파일에서는 IP 주소, 이메일 주소, 도메인별로 제한하거나 Relay를 허락해줄 수 있다 [그림 11-32] Sendmail의 access 파일
System Resource Exhaustion Attack 가용 Disk 자원의 고갈 파일을 생성하고 생성한 파일에 1000바이트씩 계속해서 써 나가는 프로그램이다 [그림 11-34] 디스크 자원 고갈 소스
System Resource Exhaustion Attack 가용 Disk 자원의 고갈 공격 중 가용 디스크 공간의 확인 [그림 11-35] 디스크 자원의 공격 전, 실시, 공격 후의 상태
System Resource Exhaustion Attack 가용 Disk 자원의 고갈 프로세스 확인 및 제거 [그림 11-36] 디스크 자원 고갈 공격의 프로세스 확인 및 제거
System Resource Exhaustion Attack 가용 Memory 자원의 고갈 다른 특별한 함수 없이 malloc 함수를 통해 메모리 할당만 계속적으로 수행하는 프로그램이다. 디스크 고갈 공격보다 시스템 자원을 더 많이 차지하는 프로그램으로 터미널 창 하나만을 띄우는 데도 몇 분을 소모하게 만드는 공격이다 [그림 11-37] 메모리 고갈 공격 소스
System Resource Exhaustion Attack 가용 Process 자원의 고갈 fork( )라는 프로세스 할당 함수만이 무한대로 쓰이고 있다. [그림 11-38] 프로세스 고갈 공격 소스
Quota 설정 /etc/vfstab 파일을 vi 에디터로 연다. 쿼타를 설정하고자 하는 파티션의 뒷 부분에 usrquota 옵션을 더해준다. mount -o remount /home 명령을 통해 설정된 마운트를 적용할 수 있다 적용된 마운트를 확인하기 위해 mount를 실행시키면 usrquota 옵션이 들어가 있는 것을 확인할 수 있다. 이제 쿼타 적용을 위해 touch /home/quota.user로 쿼타를 적용하고자 하는 파티션의 가장 상위 디렉토리에 quota.user를 생성한다. 권한을 600(rw- --- ---)으로 주고, quotacheck를 하면 이제 quota.user 파일에 사용자별 쿼타 데이터베이스를 설정하고 적용할 수 있다.
Quota 설정 wishfree란 아이디에 quota를 적용하기 위해서 edquota wishfree 명령어를 입력하면 다음과 같이 vi 에디터가 뜬다. 소프트에 10MB, 하드에 15MB를 지정하였다. 15MB 이상은 절대로 쓸 수 없다. 사용자는 10MB 이상을 쓸 수 있지만, 1주일동안 경고를 받게 되며, 1주일이 지난 다음에는 파일을 생성할 수 없다. 이렇게 지정한 후 저장한 다음 quotaon /home이라고 입력하면 /home에 대한 쿼타가 적용되며, quotaoff /home이라고 입력하면 설정된 쿼타가 해제된다. [그림 11-41] 사용자별 쿼타 용량 설정
DDoS 공격 DoS 공격이 짧은 시간에 여러 곳에서 일어나게 하는 공격으로 피해 양상이 상당히 심각하며, 이에 대한 확실한 대책 역시 없다. 또한 공격자의 위치와 구체적인 발원지를 파악하는 것 역시 거의 불가능에 가깝다 DDoS 공격은 특성상 대부분의 공격이 자동화된 툴을 이용하고 있다. 공격의 범위가 방대하며 DDoS 공격을 하려면 최종 공격 대상 이외에도 공격을 증폭시켜주는 중간자가 필요하다.
DDoS 공격의 구성 요소 공격자(Attacker) : 공격을 주도하는 해커의 컴퓨터 마스터(Master) : 공격자에게서 직접 명령을 받는 시스템으로 여러 대의 에이전트(Agent)를 관리하는 시스템 에이전트(Agent) : 공격 대상(Target)에 직접적인 공격을 가하는 시스템 [그림 11-42] DDoS의 공격도
DDoS 공격의 일반적인 순서 많은 사용자가 사용하며, 밴드와이드(Bandwidth)가 크다. 관리자가 모든 시스템을 세세하게 관리할 수 없는 곳에 계정을 획득하여 스니핑이나 버퍼 오버플로우 등의 공격으로 설치 권한이나 루트 권한을 획득한다. 잠재적인 공격 대상을 파악하기 위해 네트워크 블록 별로 스캐닝을 실시하여, 원격지에서 버퍼 오버플로우를 일으킬 수 있는 취약한 서비스를 제공하는 서버를 파악한다. 취약한 시스템의 리스트를 확인한 뒤, 실제 공격을 위한 Exploit을 작성한다. 권한을 획득한 시스템에 침투하여 Exploit을 컴파일하여 설치한다. 설치한 Exploit로 공격을 시작한다.
Trinoo Trinoo는 1999년 6월 말부터 7월 사이에 퍼지기 시작했으며, 미네소타 대학의 사고 주범이었다. 원래 이름은 Trin00이다. 처음 솔라리스 2.x 시스템에서 발견되었으며, 최소 227 개의 시스템이 공격에 쓰였던 것으로 알려져 있다. UDP를 기본으로 하는 공격을 시행하며 ‘statd, cmsd, ttdb서버d’ 데몬이 주 공격 대상이다. 주요 이용 포트 접속자 접속대상 프로토콜 포트 공격자 마스터 TCP 27665 에이전트 UDP 27444 31335 공격 대상
DDoS 공격에 대한 대책 각각의 DDoS 툴은 통신을 위해 특정 포트를 사용한다. 때문에 특정 포트가 열려 있는지 검사하면, 마스터나 데몬이 설치되어 있는 시스템을 찾아낼 수 있다. 다양한 툴이 있으며, rid-1.0, DDoS ping, DDoS scan 등이 있다. [그림 11-50] DDoSPing [그림 11-51] DDoSPing 설정
DDoS 공격에 대한 대책 TCP dump로 네트워크의 패킷 중 마스터와 데몬의 통신 패킷을 찾는 것이다. 27444, 32770과 같이 특정한 포트를 알고 있으므로 평소에 TCP Dump 결과를 파일로 저장시켜둔 다음, 알고 있는 포트가 있는지 체크해본다.
TFN, TFN 2K TFN은 Teletubby Flood Network라고 불리기도 한다. TFN 역시 Trinoo와 마찬가지로 ‘statd, cmsd, ttdb' 데몬의 취약점을 공격한다 TFN은 마스터에 클라이언트라는 용어를 쓰고 있다. 클라이언트를 구동하면 패스워드가 사용되지 않고, 클라이언트와 데몬간에는 ICMP Echo Request 패킷이 사용되며, TCP, UDP 연결도 이루어지지 않는다. 따라서 이를 모니터링하는 일은 쉽지 않다. 클라이언트의 각 명령은 ICMP Echo Request 패킷에 16비트 이진수로 데몬에 전송되며, 시퀀스 넘버는 0x0000으로 설정되어 있어, TCP Dump로 모니터링하면 ping의 최초 패킷처럼 보이기 때문이다. TFN은 공격자 시스템과 마스터 시스템간 연결이 암호문이 아닌 평문으로 전달되는 약점을 가지고 있다. 이는 데이터가 다른 해커나 관리자에게 스니핑되거나 세션 하이재킹될 수 있으며, 공격자를 노출시키는 등 치명적일 수 있다.
TFN 2K의 특징 통신에 특정 포트가 사용되지 않고 암호화되어 있으며, 프로그램에 의해 UDP, TCP, ICMP가 복합적으로 사용되며 포트 또한 임의로 결정된다. TCP Syn Flooding, UDP Flooding, ICMP Flooding, Smurf 공격을 쓰고 있다. 모든 명령은 CAST-256 알고리즘으로 암호화된다 지정된 TCP 포트에 백도어를 실행시킬 수 있다 데몬은 인스톨 시 자신의 프로세스 이름을 변경함으로써, 프로세스 모니터링을 회피한다. UDP 패킷의 헤더가 실제 UDP 패킷보다 3바이트만큼 더 크다 TCP 패킷의 헤더의 길이는 항상 0이다. 정상적인 패킷이라면 절대로 0일 수 없다.
Stacheldraht Stacheldraht는 독일어로서 '철조망'이라는 뜻이다 1999년 10월 처음 출현한 것으로 알려져 있으며, TFN을 발전시킨 형태다. Stacheldraht 역시 TFN2K처럼 공격자와 마스터, 에이전트, 데몬과의 통신에 암호화 기능이 추가되었다. 공격자가 마스터에 접속하면, 마스터는 현재 접속을 시도한 이가 올바른 공격자인지 확인하기 위해 패스워드 입력을 요구한다. 이때 입력되는 패스워드는 최초 설치되기 전에 ‘Authentication‘의 ‘Passphrase’를 사용하여 암호화된 상태로 공격자에게서 핸들러로 보내진다.
DoS, DDoS 공격에 대한 대응책 방화벽 설치와 운영 IDS 설치와 운영 안정적인 네트워크의 설계 시스템 패치 스캐닝 서비스별 대역폭 제한
Thank you