590 likes | 988 Views
13. DoS 와 DDoS 공격. 학습목표 DoS, DDoS 공격의 패턴을 이해한다 . DoS, DDoS 공격을 실행할 수 있다 . DoS, DDoS 공격을 탐지할 수 있다 . DoS, DDoS 공격에 적절히 대처할 수 있다 . 내용 DoS 와 DDoS 공격의 이해 DoS 공격 DDoS 공격 DoS, DDoS 공격에 대한 대응책. DoS 와 DDoS 공격의 이해. DoS(Denial of Service, 서비스 거부 )
E N D
13 DoS와 DDoS 공격
학습목표 • DoS, DDoS 공격의 패턴을 이해한다. • DoS, DDoS 공격을 실행할 수 있다. • DoS, DDoS 공격을 탐지할 수 있다. • DoS, DDoS 공격에 적절히 대처할 수 있다. • 내용 • DoS와 DDoS 공격의 이해 • DoS 공격 • DDoS 공격 • DoS, DDoS 공격에 대한 대응책
DoS와 DDoS 공격의 이해 • DoS(Denial of Service, 서비스 거부) • 공격 대상이 수용할 수 있는 능력 이상의 정보를 제공하거나, 사용자 또는 네트워크의 용량을 초과시켜 정상적으로 작동하지 못하게 하는 공격 • 파괴 공격 : 디스크, 데이터, 시스템 파괴 • 시스템 자원 고갈 공격 : CPU, 메모리, 디스크의 사용에 과다한 부하 가중 • 네트워크 자원 고갈 공격 : 쓰레기 데이터로 네트워크의 대역폭 고갈 • DDoS(Distributed Denial of Service) • DoS 공격의 업그레이드판 • 1999년 8월 17일에 미네소타 대학에서 대대적으로 DDoS 공격이 일어나 CNN, Yahoo, NBC 같은 대규모 사이트를 마비시킴
DoS 공격 • Ping of Death • ping을 이용하여 ICMP 패킷을 정상 크기보다 아주 크게 만드는 것 • 크게 만들어진 패킷은 네트워크를 통해 라우팅(routing)되어 공격 네트워크에 도달하는 동안 아주 작은 조각(fragment)으로 쪼개지고 공격 대상은 조각화된 패킷을 모두 처리해야 하므로 정상적인 ping보다 부하가 훨씬 많이 걸림
DoS 공격 • 라우팅은 출발지 주소와 목적지 주소를 확인하고 최적의 거리를 찾아 패킷을 전달해주는 것 • 전달 과정에서 패킷은 항상 특성이 똑같은 네트워크를 지나지는 않음. 프레임 릴레이ATM, 토큰 링, 이더넷 등 다양한 네트워크를 지나 목적지에 도달 • 네트워크마다 최대 전송 가능 패킷 길이가 달라 최대 전송 가능 패킷 길이가 더 작은 네트워크를 지날 때 데이터는 작게 분할됨 • 한 번 분할된 패킷은 더 긴 패킷 길이를 허용하는 네트워크를 지나도 다시 커지지 않음
DoS 공격 • Ping of Death 보안 대책 • 현재 대부분의 시스템은 Ping of Death 공격을 받을 때 반복적으로 들어오는 일정 수 이상의 ICMP 패킷을 무시하게 설정되어 있음 • 관리하는 시스템이 Ping of Death 공격에 취약하다면 가장 일반적으로 할 수 있는 방법은 패치 • 운영체제별 패치는 각 벤더의 홈페이지에서 구할 수 있음
실습 13-1 Ping of Death 공격하기 • hping3 설치 1-1hping3 설치 ➊ yum list hping ➋ yum install hping3.i686 1-2man hping3 실행 man hping3 실습환경 • 공격자 시스템 : 리눅스 페도라 12 • 공격 대상 시스템 : 리눅스 페도라 12 • 필요 프로그램 : hping3 1
실습 13-1 Ping of Death 공격하기 • Ping of Death 공격 수행 hping3 --icmp --rand-source 192.168.0.100 -d 65000 –flood • ⓐ --icmp : 패킷 종류를 ICMP로 선택한다. • ⓑ --rand-source : 공격자의 IP 주소를 랜덤하게 생성한다. • ⓒ 192.168.0.100 : 공격 대상 시스템의 IP 주소다. • ⓓ -d 65000 : 전송하는 패킷의 길이는 65,000바이트로 한다. 참고로 최대 전송 가능 길이는 65,535바이트다. • ⓔ --flood : 시스템이 생성 가능한 만큼 빠른 속도로 패킷을 보낸다. 2
실습 13-1 Ping of Death 공격하기 • Ping of Death 공격의 패킷 분석 3-1Ping of Death 공격 시 공격자 시스템에서의 TCP Dump 3-2Ping of Death 공격 시 공격 대상 시스템에서의 TCP Dump • ⓐ 16:11:27.484297 : 패킷을 읽어 들인 시각이다. • ⓑ 24.100.77.232 > 192.168.0.100 : 패킷의 송신/수신 시스템의 IP 주소다. • ⓒ ICMP echo request : 프로토콜의 종류다. • ⓓ id 11533 : 패킷의 IP 헤더의 Identification 값이다. 이 값이 같으면 한 패킷이 단편화된 것이다. • ⓔ length 1480 : IP 헤더 길이를 포함한 패킷의 전체 길이다. 3
DoS 공격 • SYN Flooding • 네트워크에서 서비스를 제공하는 시스템은 동시 사용자 수가 제한되어 있음 • SYN Flooding(플러딩)은 존재하지 않는 클라이언트가 서버별로 한정되어 있는 접속 가능 공간에 접속한 것처럼 속여 다른 사용자가 서비스를 제공받지 못하게 하는 것
DoS 공격 • 공격자는 쓰리웨이 핸드셰이킹 과정에서 서버를 다운시키기 위해 짧은 시간 안에 많은 양의 SYN만 보냄 • 시스템은 보통 SYN에 대한 연결을 무한정 기다리지 않고 일정 시간 동안만 연결을 시도하고 기다리도록 설정되어 있음 • SYN Flooding 공격을 성공하려면 서버에 설정된 대기 시간 안에 서버가 수용할 수 있는 동시 사용자 수의 한계를 넘는 연결을 시도해야 함 • 서버가‘SYN Received’상태로 ACK 패킷을 기다리는 상태를‘백로그(backlog)에 빠졌 • 다’고 표현하며,‘ SYN Received’상태로 ACK 패킷을 기다리는 시간은 설정 사항으로 변경할 수 있음
DoS 공격 • SYN Flooding 보안 대책 • 보안 패치로 대기 시간을 줄이는 것이 효과적이지만 시스템의 특성상 무조건 대기 시간을 줄일 수 없는 경우가 있음. 방화벽에서도 정상적인 접속 시도와 비정상적인 SYN Flooding 공격 시도를 구분할 수 있는 방법이 없기 때문에 직접적인 차단은 불가능 • 일차 예방법은 시스템에 패치를 하는 것이며, 다음으로는 침입 탐지 시스템(IDS) 또는 침입 차단 시스템(IPS)을 설치하는 것 • SYN Flooding 공격은 일정 시간 안에 동시 접속자 수를 점유해야 하므로 아주 짧은 시간 안에 똑같은 형태의 패킷을 보내게 됨. 이는 매우 정형화된 형태로, 네트워크에서 쉽게 인지가 가능 • 해당 ISP 업체에 연락하여 그에 해당하는 IP 주소 대역을 접속 금지시키거나 확인한 후 방화벽 또는 라우터에서 해당 접속을 금지시킴으로써 시스템 서비스 중지를 막을 수 있음 • 또 다른 대응 방법은 Syn_Cookie • Syn_Cookie는 서버에서 클라이언트로 보내는 SYN+ACK 패킷에 임의로 생성되는 시퀀스넘버 대신 서버에서 암호화 기술을 이용해서 인증 정보가 담긴 시퀀스 넘버를 생성하여 클라이언트에 보내는 것
DoS 공격 • TCP 쓰리웨이 핸드셰이킹 시 SYN Flooding 공격에 대한 Syn_Cookie 대응 방법 ① 클라이언트로부터 SYN 패킷을 받으면, 간단한 인증 정보가 담긴 Syn_Cookie를 시퀀스 넘버 값에 넣는다. SYN으로 인해 원래는 TCP SYN Received 상태가 되어야 하지만 세션을 닫는다. ② 클라이언트가 Syn_Cookie가 포함된 값으로 ACK를 보내면, 서버는 그제서야 세션을 다시 열고 통신을 시작한다.
실습 13-2 SYN Flooding 공격하기 • 웹 서비스 시작 service httpd start • SYN Flooding 공격 수행 hping3 --rand-source 192.168.0.100 -p 80 -S –flood • -p 80 : 80번 포트에 대해 패킷을 전송한다. • -S : TCP 패킷 중SYN만 전송한다. 실습환경 • 공격자 시스템 : 리눅스 페도라 12 • 공격 대상 시스템 : 리눅스 페도라 12 • 필요 프로그램 : hping3 1 2
실습 13-2 SYN Flooding 공격하기 • SYN Flooding 공격의 패킷 분석 • ⓐ id 28001 : Ping of Death와는 달리 id가 모두 다른데, 이는 패킷이 모두 단편화된 것이 아니기 때문이다. • ⓑ offset 0 : 단편화될 만한 패킷이 없기 때문에 모두 0이다. • ⓒ proto TCP (6) : IP 헤더를 통해 전송되는 패킷이TCP(6)임을 나타낸다. • ⓓ length 40 : IP 헤더와 TCP 헤더가 각각 20바이트씩, 총 40바이트가 패킷 길이가 된다. 따라서 데이터 부분은 0바이트가 된다. • ⓔ 95.166.9.130.21526 > 192.168.0.100.http : 패킷 송신/수신 시스템의 IP와 포트 번호다. • ⓕ S : SYN 패킷임을 나타낸다. 3
실습 13-2 SYN Flooding 공격하기 • 공격의 확인 netstat -an 4
DoS 공격 • Boink, Bonk, Teardrop • 프로토콜은 목적에 따라 정도의 차이는 있지만 신뢰성 있는 연결을 제공하려 함 • 신뢰성 있는 연결은 패킷의 순서가 올바른가, 중간에 손실된 패킷은 없는가를 확인하는 기능을 기본으로 제공 • 프로토콜은 신뢰도를 확보하고자 반복적으로 재요구하고 수정을 하게 됨 • Boink, Bonk, Teardrop은 이런 반복적인 재요구와 수정을 계속하게 함으로써 시스템 자원을 고갈시키는 공격
DoS 공격 • TCP를 통해 데이터를 전송할 경우 각 데이터 패킷은 순번, 즉 시퀀스 넘버를 가짐 • Bonk는 처음 패킷을 1번으로 보낸 후 두 번째, 세 번째 패킷 모두 시퀀스 넘버를 1번으로 조작해서 보냄 • Boink는 처음 패킷을 1번으로 보낸 후 두 번째 패킷은 101번, 세 번째 패킷은 201번으로 정상적으로 보내다가 중간에서 일정한 시퀀스 넘버로 보냄 • Teardrop은 UDP를 이용. 단순히 시퀀스 넘버를 일정하게 바꾸는 것을 넘어 중첩과 빈 공간을 만들며, 시퀀스 넘버를 좀 더 복잡하게 섞음
DoS 공격 • Teardrop 공격 시 패킷의 시퀀스 넘버와 패킷의 배치
DoS 공격 • Boink, Bonk, Teardrop 보안 대책 • 최근에 나온 시스템을 파괴할 수 있는 경우는 거의 없지만 일부 응용 프로그램에서는 이러한 공격이 동작하는 경우를 가끔 발견할 수 있음 • SYN Flooding이나 Ping of Death 공격에 대한 대응책과 같음
실습 13-3 Bonk, Boink 공격하기 • Bonk, Boink 공격 수행 1-1Bonk, Boink 공격 실행 1/2 hping3 -a 200.200.200.200 192.168.0.10 --id 3200 -O 12345 -M 34343 -p 21 –d 320 --flood 1-2Bonk, Boink 공격 실행 2/2 hping3 -a 200.200.200.200 192.168.0.10 --id 3200 -O 12343 -M 34343 -p 21 –d 320 --flood 실습환경 • 공격자 시스템 : 리눅스 페도라 12 • 공격 대상 시스템 : 리눅스 페도라 12 • 필요 프로그램 : hping3 1
실습 13-3 Bonk, Boink 공격하기 • Bonk, Boink 공격의 패킷 분석 • ⓐ id 3200 : id는 필자가 정하여 보낸 값으로 3200이다. 이 값이 같으면 패킷을 수신하는 시스템은 모두 한 패킷이라고 생각하게 된다. 필자는 3200과 3201로 패킷을 순차적인 패킷이라고 생각하게끔 전송했다. • ⓑ length 360 : 패킷 길이다. 두 종류의 패킷은 각각 IP 헤더와 TCP 헤더를 포함하여 360바이트와 512바이트로 전송되었다. • ⓒ 34343:34647 : 시퀀스 넘버다. 다음 패킷의 번호와 중첩되는 구간이 있게 보냈다. 2
DoS 공격 • Land • Land를 사전에서 찾아보면‘땅’또는‘착륙하다’외에‘(나쁜 상태에) 빠지게 하다’라는 의미 • Land(랜드) 공격은 의미 그대로 시스템을 나쁜 상태에 빠지게 하는 것이며, 방법도 아주 간단 • 패킷을 전송할 때 출발지 IP 주소와 목적지 IP 주소 값을 똑같이 만들어서 공격 대상에 보내는 것. 이때 조작된 IP 주소 값은 당연히 공격 대상의 IP 주소여야 함 • SYN Flooding처럼 동시 사용자 수를 점유해버리며, CPU 부하까지 올림
DoS 공격 • Land 보안 대책 • Land 공격도 현재의 시스템에서는 대부분 효과가 없음 • 현재의 시스템은 출발지 주소와 목적지 주소를 확인하여 동일한 패킷은 인식하고 버림 • 라우터나 방화벽에서 출발지 IP 주소가 내부 IP 주소와 동일한 패킷은 처음부터 차단하는 것이 좋음
실습 13-4 Land 공격하기 • Land 공격 수행 hping3 192.168.0.10 -a 192.168.0.10 --icmp –flood 실습환경 • 공격자 시스템 : 리눅스 페도라 12 • 공격 대상 시스템 : 리눅스 페도라 12 • 필요 프로그램 : hping3 1
실습 13-4 Land 공격하기 • Land 공격의 패킷 분석 2
DoS 공격 • Smurf, Fraggle • 웜이 네트워크를 공격하는 데 아직도 많이 쓰는데, Ping of Death처럼 ICMP 패킷을 이용 • 출발지 주소가 공격 대상으로 바뀐 ICMP Request 패킷을 시스템이 매우 많은 네트워크로 브로드캐스트함 • 브드캐스트란 확성기를 들고 청중 모두에게 얘기하는 것 • 기본적인 브로드캐스트는 목적지 IP 주소255.255.255.255를 가지고 네트워크의 임의의 시스템에 패킷을 보내는 것
DoS 공격 • 다이렉트 브로드캐스트(Direct Broadcast) • 172.16.0.0 네트워크에 IP 주소가10.10.10.24인 공격자가 브로드캐스트하려면 목적지 IP 주소를172.16.0.255와 같이 설정하여 패킷을 보내야 함 • 공격자가 172.16.0.255로 다이렉트 브로드캐스트하면 [그림 13-27]과 같이 패킷이 전달됨 • ICMP Request를 받게 된 172.16.0.0 네트워크는 ICMP Request 패킷의 위조된 시작 IP 주소로 ICMP Reply를 [그림13-28]과 같이 다시 보냄
DoS 공격 • Smurf, Fraggle 보안 대책 • Smurf는 DDoS 공격의 한 방편으로 이용되기도 함 • 이 공격을 막는 방법은 다이렉트 브로드캐스트를 막는 것
실습 13-5 Smurf, Fraggle 공격하기 • Smurf 공격 수행 hping 192.168.0.255 -a 10.10.10.5 --icmp --flood 실습환경 • 공격자 시스템 : 리눅스 페도라 12 • 공격 대상 시스템 : 리눅스 페도라 12 • 필요 프로그램 : hping3 1
실습 13-5 Smurf, Fraggle 공격하기 • Smurf 공격의 패킷 분석 2
DoS 공격 • Mail Bomb • 흔히 폭탄 메일이라 하고스팸 메일도 같은 종류 • 메일 서버는 각 사용자에게 일정한 디스크 공간을 할당하는데, 메일이 폭주하여 디스크 공간을 가득 채우면 정작 받아야 하는 메일을 받을 수 없음 • Mail Bomb 보안 대책 • /etc/mail/access 파일을 이용해 IP 주소, 이메일 주소, 도메인별로 제한하거나 Relay를 허용
DoS 공격 • 설정된 /etc/mail/access 파일 Sendmail에 적용 • makemap hash /etc/mail/access < /etc/mail/access를 실행하면 같은 폴더의 access.db에 vi 에디터로 입력한 값이 적용되었는지 strings 명령으로 확인 가능 ➊ makemap hash /etc/mail/access < /etc/mail/access ➋ strings /etc/mail/access.db ➊ ➋
실습 13-6 Mail Bomb 공격하기 • Sendmail을 통한 메일 전송 telnet 127.0.0.1 25 • ⓐ Sendmail은 텔넷을 이용한다. 텔넷으로 로컬 IP 주소(127.0.0.1)를 쓰고 있으며, SMTP 포트 번호인 25번을 뒤에 써주면 Sendmail에 접속할 수 있다. • ⓑ Sendmail에 접속한 후‘mail from :’뒤에 보내는 사람의 주소를 쓴다. 이메일은 어떤 주소를 써도 무방하다. • ⓒ‘rcpt to’: 다음에 받는 사람의 주소를 쓴다. • ⓓ‘DATA’라고 입력하면 메일의 본문을 입력할 수 있다. • ⓔ 보내는 내용을 적은 다음‘.’을 누르고 키를 입력하면 메일이 보내진다. 필자는 ‘ Hello. I’m wishfree’라고 간단하게 보냈다. 실습환경 • 공격자 시스템 : 리눅스 페도라 12 • 필요 프로그램 : Sendmail 1
실습 13-6 Mail Bomb 공격하기 • Sendmail에서 전송한 메일 확인 2
DoS 공격 • 시스템 자원 고갈 공격 • 가용 디스크 자원 고갈 • 가용 메모리 자원 고갈 • 가용 프로세스 자원 고갈 • 시스템 자원 고갈 공격 보안 대책 • Tripwire • 무결성 체크 • 쿼타(quota) 설정 • 디스크 자원 고갈과 앞 절에서 다룬 스팸 메일 공격으로부터 시스템의 파괴를 막을 수 있는 방법은 쿼타(quota)를 설정
실습 13-7 자원 고갈 공격하기 • 가용 디스크 자원 고갈 공격 1-1디스크 자원 고갈을 위한 소스 vi disk.c 1-2디스크 자원 공격 전 상태 확인 df 실습환경 • 공격자 시스템 : 리눅스 페도라 12 • 필요 프로그램 : disk.c, memory.c, process.c 1
실습 13-7 자원 고갈 공격하기 1-3disk.c 파일 컴파일 ➊ gcc -o disk disk.c ➋ ./disk 1-4디스크 자원 공격 전, 실시, 공격 후 상태 확인 df
실습 13-7 자원 고갈 공격하기 1-5디스크 자원 고갈 공격의 프로세스 확인 및 제거 ➊ ps –ef ➋ kill -9 2628 • 가용 디스크 자원 고갈 공격 소스 2
DDoS 공격 • DDoS 공격에 대한 이해 • 공격자(Attacker) : 공격을 주도하는 해커의 컴퓨터다. • 마스터(Master) : 공격자에게서 직접 명령을 받는 시스템으로, 여러 대의 에이전트(Agent)를 관리한다. • 핸들러(Handler) 프로그램 : 마스터 시스템의 역할을 수행하는 프로그램이다. • 에이전트(Agent) : 공격 대상에 직접 공격을 가하는 시스템이다. • 데몬(Daemon) 프로그램 : 에이전트 시스템 역할을 수행하는 프로그램이다.
DDoS 공격 • 공격자가 마스터와 에이전트를 획득하여 실제적으로 DDoS 공격을 하는 순서 ① 많은 사용자가 사용하며, 대역폭이 넓다. 관리자가 모든 시스템을 세세하게 관리할 수 없는 곳의 계정을 획득하여 스니핑이나 버퍼 오버플로우 등의 공격으로 설치 권한이나 루트 권한을 획득한다. ② 잠재적인 공격 대상을 파악하기 위해 네트워크 블록별로 스캐닝을 실시한다. 그리고 원격지에서 버퍼 오버플로우를 일으킬 수 있는 취약한 서비스를 제공하는 서버를 파악한다. ③ 취약한 시스템 목록을 확인한 후 실제 공격을 위한 Exploit을 작성한다. ④ 권한을 획득한 시스템에 침투하여 Exploit을 컴파일하여 설치한다. ⑤ 설치한 Exploit으로 공격을 시작한다
DDoS 공격 • Trinoo • 1999년 6월 말부터 7월 사이에 퍼지기 시작했으며, 미네소타 대학 사고의 주범. 원래 이름은 Trin00 • 처음 솔라리스 2.x 시스템에서 발견되었으며, 최소 227개 시스템이 공격에 쓰인 것으로 알려져 있음 • UDP를 기본으로 하는 공격을 시행하며‘statd, cmsd, ttdbserverd’데몬이 주 공격 대상 • Trinoo는 기본적으로 [표 13-3]과 같은 포트 번호를 사용하지만 소스 코드에서 임의로 변경 가능
DDoS 공격 • Trinoo
DDoS 공격 • TFN(TribedFlood Network) • 1999년 8월 사고를 일으켰던 Trinoo의 약간 발전된 형태로 믹스터 (Mixter)라는 사람이 개발 • Teletubby Flood Network라고 부르기도 함 • TFN도Trinoo처럼 statd, cmsd, ttdb 데몬의 취약점을 공격 • 클라이언트를 구동하면 패스워드를 사용하지 않고, 클라이언트와 데몬 간에는 ICMP Echo Request 패킷을 사용 • 클라이언트의 각 명령은 ICMP Echo Request 패킷에 16비트 이진수로 데몬에 전송 • TFN은 공격자 시스템과 마스터 시스템 간 연결이 암호문이 아닌 평문으로 전달되는 약점이 있음. 이는 데이터가 다른 해커나 관리자에게 스니핑되거나 세션 하이재킹될 수 있으며, 공격자를 노출시키는 등 치명적일 수 있음
DDoS 공격 • TFN 2K • TFN의 발전된 형태로, 역시 믹스터가 개발 • 특징 • 통신에 특정 포트를 사용하지 않고 암호화되어 있으며, 프로그램을 통해 UDP, TCP, ICMP를 복합적으로 사용하며 포트도 임의로 결정한다. • TCP SYN Flooding, UDP Flooding, ICMP Flooding, Smurf 공격을 쓰고 있다. • 모든 명령은 CAST-256 알고리즘으로 암호화된다. • 지정된TCP 포트에 백도어를 실행할 수 있다. • 데몬은 설치 시 자신의 프로세스 이름을 변경함으로써 프로세스 모니터링을 회피한다. • UDP 패킷의 헤더가 실제UDP 패킷보다 3바이트만큼 더 크다. • TCP 패킷의 헤더의 길이는 항상 0이다. 정상 패킷이라면 절대로 0일 수 없다.
DDoS 공격 • Stacheldraht • 독일어로‘철조망’이라는 뜻 • 1999년 10월에 처음 출현한 것으로 알려져 있으며, TFN을 발전시킨 형태 • Stacheldraht(슈타첼드라트) 역시 TFN 2K처럼 공격자와 마스터, 에이전트, 데몬과의 통신에 암호화 기능이 추가됨 • 공격자가 마스터에 접속하면 마스터는 현재 접속을 시도한 이가 올바른 공격자인지 확인하기 위해 패스워드 입력을 요구 • 입력된 패스워드는 최초 설치되기 전에‘Authentication’의‘Passphrase’를 사용하여 암호화된 상태로 공격자에게서 핸들러로 보내짐
DDoS 공격 • Stacheldraht
실습 13-8 Trinoo를 이용해 DDoS 공격하기 • Trinoo 컴파일 1-1Trinoo 소스 압축 풀기tar -xvf trinoo.tar 실습환경 • 공격자 시스템과 마스터 시스템 : 리눅스 페도라 12 • 에이전트 시스템 : 리눅스 페도라 12 • 공격 대상 시스템 : 윈도우 XP • 필요 프로그램 : Trinoo 소스, gcc 컴파일러 1