untitled

Similar documents
제20회_해킹방지워크샵_(이재석)

UDP Flooding Attack 공격과 방어


< F5320B4EBC0C0C0E5BAF1BFA120B4EBC7D120BAB8BEC8B1E2B4C920B0A1C0CCB5E528C3D6C1BE292E687770>

<BBE7B0EDB3EBC6AE5FC7E3BAEAB0D4C0D32E687770>

시스템, 네트워크모니터링을통한보안강화 네트워크의미래를제시하는세미나 세미나 NetFocus 2003 : IT 관리자를위한네트워크보안방법론 피지피넷 /

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

TGDPX white paper

일반적인 네트워크의 구성은 다음과 같다

RVC Robot Vaccum Cleaner

1217 WebTrafMon II

Microsoft PowerPoint - thesis_rone.ppt

untitled

#Ȳ¿ë¼®

지능정보연구제 16 권제 1 호 2010 년 3 월 (pp.71~92),.,.,., Support Vector Machines,,., KOSPI200.,. * 지능정보연구제 16 권제 1 호 2010 년 3 월

Microsoft Word - NAT_1_.doc

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

<32382DC3BBB0A2C0E5BED6C0DA2E687770>

< FC1A4BAB8B9FDC7D D325FC3D6C1BEBABB2E687770>

#WI DNS DDoS 공격악성코드분석

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

슬라이드 1

<C0CCC8ADC1F82E687770>

KISA-GD

DBPIA-NURIMEDIA

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10

Cisco SDN 3.0 DDoS DDoS Cisco DDoS Real Demo 2008 Cisco Systems, Inc. All rights reserved. 2

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

C# Programming Guide - Types

PJTROHMPCJPS.hwp

김기남_ATDC2016_160620_[키노트].key

*2008년1월호진짜

슬라이드 제목 없음

Microsoft Word - [2017SMA][T8]OOPT_Stage_2040 ver2.docx

게시판 스팸 실시간 차단 시스템

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

2002년 2학기 자료구조

<33372EC6AEB7A1C7C820BAD0BCAEC0BB20C5EBC7D BABFB3DDB0FA BABFB3DDC0C720C6AFBCBA20BAF1B1B32E687770>

DoS 공격의유형분석및탐지방법 (Monitoring and Investigation of DoS Attack) 영산대학교 사이버경찰학과 이성진

XSS Attack - Real-World XSS Attacks, Chaining XSS and Other Attacks, Payloads for XSS Attacks

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - e pptx

< 목차 > 1. 악성코드은닉동향요약 1 2. 홈페이지은닉형악성코드통계 2 - 유포지탐지 국가별현황 2 - 대량경유지가탐지된유포지 TOP 악성코드유형별비율 4 - 악성코드취약점유형별비율 4 - 악성코드수집및분석결과 5 - 경유지탐지 업종별비율 9 3. 악성코

PowerPoint Template

Microsoft Word - [TP_3][T1]UTP.docx

Chap 6: Graphs

제목 레이아웃

Cloud Friendly System Architecture


DBPIA-NURIMEDIA

메일서버등록제(SPF) 인증기능적용안내서 (Exchange Windows 2000) OS Mail Server SPF 적용모듈 작성기준 Windows Server 2000 Exchange Server 2003 GFI MailEssentials 14 for

Microsoft Word - FunctionCall

<31305FBEC6C0CCC5DB2E687770>

Chap 6: Graphs

네트워크 안정성을 지켜줄 최고의 기술과 성능 TrusGuard는 국내 최초의 통합보안솔루션으로서 지난 5년간 약 4천여 고객 사이트에 구축 운영되면서 기술의 안정성과 성능면에서 철저한 시장 검증을 거쳤습니다. 또한 TrusGuard는 단독 기능 또는 복합 기능 구동 시

Windows 8에서 BioStar 1 설치하기

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

06_±è¼öö_0323

PowerPoint 프레젠테이션

Windows Server 2012

BMP 파일 처리

IP 심화 라우팅프로토콜적용시 라우팅테이블에서 이니셜이있는네트워크를설정하는것 : onnected 직접연결된네트워크를의미한다. 그러므로라우팅은 나는이런네트워크와연결되어있다. 를직접연결된라우터들에게알려주는것 1>en 1#conf t 1(config)#router rip 1

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint Predicates and Quantifiers.ppt

The Pocket Guide to TCP/IP Sockets: C Version

4 CD Construct Special Model VI 2 nd Order Model VI 2 Note: Hands-on 1, 2 RC 1 RLC mass-spring-damper 2 2 ζ ω n (rad/sec) 2 ( ζ < 1), 1 (ζ = 1), ( ) 1

< FBFF9B0A320BEC7BCBAC4DAB5E520C0BAB4D0BBE7C0CCC6AE20C5BDC1F620B5BFC7E220BAB8B0EDBCAD283131BFF E302028C8A8C6E4C0CCC1F620BEF7B

Microsoft PowerPoint - 04-UDP Programming.ppt

°í¼®ÁÖ Ãâ·Â

Chapter 4. LISTS

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트

Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University

2015 개정교육과정에따른정보과평가기준개발연구 연구책임자 공동연구자 연구협력관

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft Word - PLC제어응용-2차시.doc

Microsoft PowerPoint - G3-2-박재우.pptx

슬라이드 1

5th-KOR-SANGFOR NGAF(CC)

DBPIA-NURIMEDIA

bn2019_2

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word doc

USER GUIDE

딥러닝 첫걸음

2009년 상반기 사업계획

Slide 1

메일서버등록제(SPF) 인증기능적용안내서 (Exchange Windows 2003) OS Mail Server SPF 적용모듈 작성기준 Windows Server 2003 Exchange Server 2003 GFI MailEssentials 2010 fo

Vol.257 C O N T E N T S M O N T H L Y P U B L I C F I N A N C E F O R U M

별지 제10호 서식

- 1 -

chap 5: Trees

Microsoft PowerPoint - 2.Catalyst Switch Intrastructure Protection_이충용_V1 0.ppt [호환 모드]

Journal of Educational Innovation Research 2018, Vol. 28, No. 3, pp DOI: NCS : * A Study on

Microsoft Word - src.doc

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

Microsoft PowerPoint - 26.pptx

DBPIA-NURIMEDIA

Transcription:

최종연구보고서 KISA-WP-2009-0024 DDoS 공격근원지분류방법개발 Developing A Method for Discovering DDoS Attack Origins 수탁기관 : 고려대학교산학협력단 2009. 06.

제출문 한국정보보호진흥원원장귀하 본보고서를 DDoS 공격근원지분류방법개발 의최종연구개발결과보고서로제출합니다. 2009 년 6 월 30 일 수탁기관 : 고려대학교산학협력단연구책임자 : 교수이희조 ( 고려대학교컴퓨터통신공학부 ) 참여연구원 : 연구원최현상 ( 고려대학교컴퓨터통신공학부 ) 연구원이제현 ( 고려대학교컴퓨터통신공학부 ) 연구원김인환 ( 고려대학교컴퓨터통신공학부 ) 연구원정구현 ( 고려대학교컴퓨터통신공학부 ) 연구원이주석 ( 고려대학교컴퓨터통신공학부 ) 연구원도희성 ( 고려대학교컴퓨터통신공학부 )

요약문 1. 제목 DDoS 공격근원지분류방법개발 2. 연구개발의목적및중요성 서비스거부공격, 즉 DoS(Denial of Service) 공격은정상적인사용자가서비스를이용하지못하도록방해하는공격기법이다. 이러한 DoS 공격을극대화시키기위해서수천, 수만대에이르는다수의컴퓨터를동원하여공격을감행하는분산서비스거부 (DDoS: Distributed Denial-of-service) 공격이근래에인터넷을위협하는이슈로자리매김하였다. DDoS 공격에대응하기위하여공격주체, 공격대상, 그리고그사이의네트워크를대상으로다양한기법들이연구개발되고있으나모두완벽한답이되지는못하고있다. 본연구는 DDoS 공격이발생하는근원지에서공격의사전준비작업혹은공격에이용되는봇이나악성코드등이발생시키는네트워크트래픽의분석을통해발견된악성코드및봇을제거하거나공격트래픽을중도에서차단함으로써 DDoS 공격에대해효율적으로대응하는방법을개발하는것을목적으로한다. 3. 연구개발의내용및범위 DDoS 공격을차단하기위하여공격근원지를분류하는데필요한기법들을개발하는것을그주내용으로한다. 공격근원지에서악성코드와 - 5 -

봇의정보를얻을수있는네트워크요소중악성코드의활동을관찰할수있고, 그범위와효율성이가장좋은것은 DNS 이다. DDoS 공격근원지를분류방법을개발하기위하여공격자 DNS 트래픽과정상 DNS 트래픽분류기법의연구는탐색하고자하는대상인공격자의공격수행시나리오의 DNS 트래픽및정상 DNS 트래픽대조군을가상으로생성, 실험군의 DNS 트래픽분석한다. 그결과를통해그특징을관찰, 관찰된특징을기준으로트래픽의종류를구별하는기법을연구하고이기법을바탕으로분류결과로부터 DDoS 공격근원지의 IP/ 도메인을추출하고이정보를필터링시스템에등록하여차단할수있는형태의정보로제공하는시스템구조및알고리즘을설계한다. 4. 연구결과 DDoS 공격근원지의악성행위들의 DNS 트래픽을분석하고이를정상트래픽과분류하였다. 비정상행위의탐지, 악성행위의탐지, 악성 IP, 도메인정보추출의기능을수행하며, 그목적에따라총 3개의분리된시스템과내부모듈의트래픽분류시스템을설계하고, 악성행위를탐지하고트래픽을분류하는알고리즘을개발하였다. 설계한시스템은입력된 DNS 트래픽을평가, 분석하여악성 IP, 도메인정보를결과물로서출력한다. 개발된기법들은실제인터넷환경에서수집한 DNS 트래픽을사용하여그유효성을확인하였으며구동환경변화에따라세부적조정을거쳐대규모 DNS 환경에서넓은범위에걸쳐악성코드와 DDoS 공격코드, 봇넷의활동, DNS에대한공격들을탐지해낼수있는시스템과분류, 탐지알고리즘을설계, 제안하였다. 5. 활용에대한건의 DDoS 공격의근원지분류방법은봇과같은공격트래픽의발생근원을제거하거나활동을제한할수방어방법이다. 그러나봇과같이근원지에도피해를입히는경우를제외하고는기법의적용으로인해직접적이득을보지않기때문에널리이용되지않고있었다. 또한곧바로공격여부를알수있는방어지에비해근원지는네트워크규모에서관 - 6 -

찰하지않는이상개개의컴퓨터에서는공격의발생을탐지할수있는정보가많지않다. 제안한 DDoS 공격근원지분류방법에서는이러한제한을 DNS를이용함으로써상당부분해결하였다. 본연구결과를활용하여 DDoS 공격의예방과대응이원활이이뤄지기위해서는설계한시스템과 DNS를포함한정보제공시스템과도출한정보를활용하는시스템이유기적으로활동하여야한다. 정보제공시스템으로는공격근원지의지리, 행정적정보를제공하는시스템이활용가능하며, 도출된정보를이용하는시스템으로 DNS 싱크홀이나방화벽등을통하여공격근원지분류시스템과연동할수있다. 6. 기대효과 DDoS 공격근원지분류방법개발을통하여대규모 DNS 환경에서넓은네트워크범위에걸쳐악성코드와 DDoS 공격코드, 봇넷의활동, DNS에대한공격들을탐지하고그정보를제공함으로써, 이를활용하여악성코드의확산과활동을제한하고, 이로부터잠재적정보유출위험과경제적손실을예방할수있다. - 7 -

SUMMARY 1. Title Developing A Method for Discovering DDoS Attack Origins 2. Purpose of the study DoS attack, the short of Denial of Service attack is an internet intrusion technique which harasses service availability of legitimate users. Moreover, the Distributed Denial-of-service attack which exploit thousands, or tens of thousands of multiple computers to amplify damage of attack is growing to the significant internet threat. To respond the DDoS attack, a lot of methods focusing attack source, target and intermediate network, have been proposed, but there have not been a clear solution. In this study, we purpose the prevention of malicious activity and early detection of DDoS attack by detecting and removing the activity of botnets, or other malicious codes. For the purpose, the proposed method monitors the network traffic, especially DNS traffic, which is originated from botnets or malicious codes. 3. Contents and scope The main contents of this study is to developing a method for discovering DDoS attack origins. In the attack origins, we can observe and collect useful information of botnet activities from some network component, and the most widely effective and efficient one is the - 8 -

Domain Name System. To develope a method for discovering DDoS attack origins, this study includes the works of analyzing malicious and legitimate DNS traffic which are generated by virtual situation. From the result of the analysis, we found out some features of malicious attack code which make a detecting mechanism being able to classify the legitimate and malicious client, domain, and DNS traffic. Using this classification method, the proposed method discovers the DDoS attack origins and the information will be offered to the filtering system which can eliminate the malicious activity of attack origins. 4. Results of the study This system analyze DNS traffic that is the source of DDoS attack and malicious behaviors, and separate from normal DNS traffic. The system has three subsystems (detecting abnormal behavior module, finding malicious behavior module and extracting information of malicious IP and DNS name module). It analyzes and evaluates input DNS traffic, gives results of malicious IPs and domains. We evaluate availability of the mechanism using real-life DNS traffic. It can adjust in a large scale network for detecting malicious codes, DDoS attack codes, botnet behaviors and DNS related attacks. 5. Expected effects and application As the result of developing a method for discovering DDoS attack origins, the developed method and system which operates it will have the functionality for monitoring and detecting the malicious activities of botnets and other malicious codes. The system makes cooperations with the other systems which limit activities and spreading of malicious codes by sharing monitoring information. Consequently, reduction of malicious codes and its activities means that it can prevent much of potential loss of information leakage and economic values. - 9 -

목 차 제 1 장연구의필요성 23 제 2 장 DDoS 공격관련동향분석 26 제 1 절 DDoS 공격사례및국내외동향 26 제 2 절 DDoS 공격, 방어기법의기술동향 28 1. DDoS 공격기술동향 28 2. DDoS 방어기술동향 30 제 3 장 DNS와악성행위연관성및탐지기법분석 33 제 1 절 DNS와악성행위의연관관계 33 1. DDoS 공격을수행하는악성코드의 DNS 이용 34 2. DDoS 공격도구로서 DNS 서버이용 35 제 2 절 DNS를이용한 DDoS 공격및공격근원지탐지기법 37 1. 적용범위 37 2. 효율성 38 3. 유용성 38 제 4 장 DDoS 공격근원지분류시스템설계 39 제 1 절설계방법및시스템개요 39 제 2 절 DDoS 공격근원지탐지시스템의상세설계 42-10 -

1. 모듈 1-비정상 DNS 트래픽분류모듈설계 46 2. 모듈 2-악성행위분류 / 탐지모듈설계 47 3. 모듈 3-악성 IP/Domain 추출모듈설계 48 제 3 절 DDoS 공격근원지지역분류시스템설계 50 제 4 절공격근원지의차단연동시스템설계 51 제 5 장시스템 1 : 모듈 1 의사코드및자료구조 52 제 1 절공통자료구조 54 1. 패킷셋 (Packet Set) 54 제 2 절프로세스 1 : Rule Checker 1 56 1. 구조체 57 2. 동작설명 59 제 3 절프로세스 2 : Rule Checker 2 60 1. 구조체 61 2. 동작설명 63 제 4 절프로세스 3 : Rule Checker 3 64 1. 구조체 65 2. 동작설명 66 제 5 절프로세스 4 : Rule Checker 4 67 1. 구조체 68 2. 동작설명 70 제 6 절프로세스 5 : Rule Checker 5 71 1. 구조체 72 2. 동작설명 73 제 7 절프로세스 6 : Rule Checker 6 74 1. 구조체 75 2. 동작설명 78 제 8 절프로세스 7 : Rule Checker 7 79 1. 구조체 80-11 -

2. 동작설명 82 제 9 절프로세스 8 : Rule Checker 8 83 1. 구조체 84 2. 동작설명 86 제 10 절프로세스 9 : Abnormal Traffic Multiplexer 87 1. 구조체 88 2. 동작설명 91 제 6 장시스템 1 : 모듈 2 의사코드및자료구조 92 제 1 절프로세스 10 : Similarity Estimate 1 92 1. 구조체 94 2. 동작설명 100 제 2 절프로세스 11 : Similarity Estimate 2 102 1. 구조체 103 2. 동작설명 110 제 3 절프로세스 12 : Similarity Estimate 3 112 1. 구조체 113 2. 동작설명 118 제 4 절프로세스 13 : Similarity Estimate 4 120 1. 구조체 121 2. 동작설명 125 제 7 장 DDoS 공격근원지탐지실험결과 127 제 1 절. 모듈 1 의비정상행위탐지결과 127 제 2 절. 시스템 1 의 DDoS 공격근원지탐지결과 128 제 8 장결론 133 참고문헌 134-12 -

Contents Chapter 1 Motivation 23 Chapter 2 Background and Related work 26 Section 1 Trend and example of DDoS attack 26 Section 2 Defense mechanism of DDoS attack 28 1. Trend of DDoS Attack Techniques 28 2. Trend of DDoS Defense Techniques 30 Chapter 3 Relation of DNS to malicious behavior and analysis of detection mechanism 33 Section 1 Relation of DNS and malicious behavior 33 1. Malicious behavior using DNS service 34 2. Usage of DNS server as a DDoS attack object 35 Section 2 Detecting DDoS attack and attack origins using DNS 37 1. Coverage 37 2. Efficiency 38 3. Practicality 38 Chapter 4 System design for Discovering DDoS Attack Origins 39-13 -

Section 1 Method and system design overview 39 Section 2 Detail architecture of DDoS Attack Origins Discovering system 42 1. Module 1-Design of Abnormal DNS traffic classification module 46 2. Module 2-Design of Malicious behavior identification module 47 3. Module 3-Design of Malicious IP address & Domain refinement module 48 Section 3 Design of Location classification system of DDoS Attack Origins 50 Section 4 Design of Cooperated quarantine system of DDoS Attack Origins 51 Chapter 5 System1: Pseudo code and data structure of module 1 52 Section 1 Common data structure 54 1. Packet Set 54 Section 2 Process 1 : Rule Checker 1 56 1. Structure 57 2. Algorithm explanation 59 Section 3 Process 2 : Rule Checker 2 60 1. Structure 61 2. Algorithm explanation 63 Section 4 Process 3 : Rule Checker 3 64 1. Structure 65 2. Algorithm explanation 66 Section 5 Process 4 : Rule Checker 4 67 1. Structure 68-14 -

2. Algorithm explanation 70 Section 6 Process 5 : Rule Checker 5 71 1. Structure 72 2. Algorithm explanation 73 Section 7 Process 6 : Rule Checker 6 74 1. Structure 75 2. Algorithm explanation 78 Section 8 Process 7 : Rule Checker 7 79 1. Structure 80 2. Algorithm explanation 82 Section 9 Process 8 : Rule Checker 8 83 1. Structure 84 2. Algorithm explanation 86 Section 10 Process 9 : Abnormal Traffic Multiplexer 87 1. Structure 88 2. Algorithm explanation 91 Chapter 6 System2: Pseudo code and data structure of module 2 92 Section 1 Process 10 : Similarity Estimate 1 92 1. Structure 94 2. Algorithm explanation 100 Section 2 Process 11 : Similarity Estimate 2 102 1. Structure 103 2. Algorithm explanation 110 Section 3 Process 12 : Similarity Estimate 3 112 1. Structure 113 2. Algorithm explanation 118 Section 4 Process 13 : Similarity Estimate 4 120-15 -

1. Structure 121 2. Algorithm explanation 125 Chapter 7 Experiment result of Discovering DDoS Attack Origins system 127 Section 1 Classification example of Module 1 127 Section 2 Detection result of DDoS Attack origins discovering system 128 Chapter 8 Conclusion 133 Reference 134-16 -

그림목차 ( 그림 3-1) 봇넷의동작방식 32 ( 그림 3-2) NS를이용한 Amplification 공격예 34 ( 그림 3-3) 봇넷과 NS를연동한 DDoS 공격예 34 ( 그림 4-1) 기법설계의계층구조도 38 ( 그림 4-2) DDoS 공격근원지분류시스템배치도 39 ( 그림 4-3) 전체시스템의주변시스템과의연동및정보흐름도 40 ( 그림 4-4) 비정상행위탐지를통한악성행위탐지과정 42 ( 그림 4-5) 시스템 1 구조도 43 ( 그림 4-6) 시스템 1 자료흐름도 43 ( 그림 4-7) 모듈 2 자료흐름도 45 ( 그림 4-8) 시스템 1의프로세스흐름도 47 ( 그림 4-9) 시스템 2의시스템1, 3와의 Use-case diagram 48 ( 그림 4-10) 시스템 3 구현을위한시스템배치도 49 ( 그림 7-1) 이상패턴탐지예 : 규칙적으로동일 DNS 요청을발생시키는악성코드 125-17 -

표목차 [ 표 3-1] 여러형태의봇넷과 DNS 사용특징 33 [ 표 4-1] DDoS 공격코드의비정상적 DNS 이용특징 41 [ 표 4-2] 봇 / 봇넷의비정상적 DNS 이용특징 41 [ 표 4-3] 악성코드의비정상적 DNS 이용특징 42 [ 표 4-4] DNS 캐쉬포이즈닝공격자의비정상적 DNS 이용특징 42 [ 표 4-5] 비정상 DNS 트래픽분류모듈의행위판단규칙목록 44 [ 표 4-6] 트래픽패턴유사도평가요소 46 [ 표 5-1] 시스템 1의프로세스의사코드, 상세설명색인 50 [ 표 5-2] 프로세스 1 ~ 8의입력데이터 DNS 패킷타입분류표 51 [ 표 5-3] 패킷셋 (Packet Set) 의구성변수 52 [ 표 5-4] 패킷셋 (Packet Set) 의구성함수 53 [ 표 5-5] 프로세스 1의의사코드 54 [ 표 5-6] 구조체 R1의구성변수 55 [ 표 5-7] 구조체 R1의구성함수 55 [ 표 5-8] 구조체 D, E의구성변수 56 [ 표 5-9] 구조체 D, E의구성함수 56 [ 표 5-10] 프로세스 1의동작설명 57 [ 표 5-11] 프로세스 2의의사코드 58 [ 표 5-12] 구조체 R2의구성변수 59 [ 표 5-13] 구조체 R2의구성함수 59 [ 표 5-14] 구조체 D, E의구성변수 60 [ 표 5-15] 구조체 D, E의구성함수 60 [ 표 5-16] 프로세스 2의동작설명 61 [ 표 5-17] 프로세스 3의의사코드 62 [ 표 5-18] 구조체 R3의구성변수 63 [ 표 5-19] 구조체 R3의구성함수 63 [ 표 5-20] 프로세스 3의동작설명 64-18 -

[ 표 5-21] 프로세스 4의의사코드 65 [ 표 5-22] 구조체 R4의구성변수 66 [ 표 5-23] 구조체 R4의구성함수 66 [ 표 5-24] 구조체 TR4의구성변수 67 [ 표 5-25] 프로세스 4의동작설명 68 [ 표 5-26] 프로세스 5의의사코드 69 [ 표 5-27] 구조체 R5의구성변수 70 [ 표 5-28] 구조체 R5의구성함수 70 [ 표 5-29] 프로세스 5의동작설명 71 [ 표 5-30] 프로세스 6의의사코드 72 [ 표 5-31] 구조체 R6의구성변수 73 [ 표 5-32] 구조체 R6의구성함수 73 [ 표 5-33] 구조체 D의구성변수 74 [ 표 5-34] 구조체 D의구성함수 74 [ 표 5-35] 구조체 E의구성변수 75 [ 표 5-36] 구조체 E의구성함수 75 [ 표 5-37] 프로세스 6의동작설명 76 [ 표 5-38] 프로세스 7의의사코드 77 [ 표 5-39] 구조체 R7의구성변수 78 [ 표 5-40] 구조체 R7의구성함수 78 [ 표 5-41] 구조체 R7의구성변수 79 [ 표 5-42] 구조체 D의구성함수 79 [ 표 5-43] 프로세스 7의동작설명 80 [ 표 5-44] 프로세스 8의의사코드 81 [ 표 5-45] 구조체 R8의구성변수 82 [ 표 5-46] 구조체 R8의구성함수 82 [ 표 5-47] 구조체 D의구성변수 83 [ 표 5-48] 구조체 D의구성함수 83 [ 표 5-49] 프로세스 8의동작설명 84-19 -

[ 표 5-50] 프로세스 9의의사코드 85 [ 표 5-51] 구조체 Rx 의구성변수 86 [ 표 5-52] 구조체 Rx의구성함수 86 [ 표 5-53] 구조체 T 의구성변수 87 [ 표 5-54] 구조체 T의구성함수 87 [ 표 5-55] 구조체 P 의구성변수 88 [ 표 5-56] 구조체 P의구성함수 88 [ 표 5-57] 구조체 A 의구성변수 88 [ 표 5-58] 구조체 A의구성함수 89 [ 표 5-59] 프로세스 9의동작설명 89 [ 표 6-1] 프로세스 10의의사코드 _1 90 [ 표 6-2] 프로세스 10의의사코드 _2 91 [ 표 6-3] 구조체 P의구성변수 92 [ 표 6-4] 구조체 P의구성함수 92 [ 표 6-5] 구조체 S1의구성변수 93 [ 표 6-6] 구조체 S1의구성함수 93 [ 표 6-7] 구조체 D c 의구성변수 93 [ 표 6-8] 구조체 D c 의구성함수 94 [ 표 6-9] 구조체 D i 의구성변수 95 [ 표 6-10] 구조체 D i 의구성함수 95 [ 표 6-11] 구조체 lt j 의구성변수 96 [ 표 6-12] 구조체 lt j 의구성함수 97 [ 표 6-13] 프로세스 10의동작설명 _1 98 [ 표 6-14] 프로세스 10의동작설명 _2 99 [ 표 6-15] 프로세스 11의의사코드 _1 100 [ 표 6-16] 프로세스 11의의사코드 _2 101 [ 표 6-17] 구조체 P의구성변수 102 [ 표 6-18] 구조체 P의구성함수 102 [ 표 6-19] 구조체 S2의구성변수 103-20 -

[ 표 6-20] 구조체 S2의구성함수 103 [ 표 6-21] 구조체 D c 의구성변수 103 [ 표 6-22] 구조체 D c 의구성함수 104 [ 표 6-23] 구조체 D i 의구성변수 105 [ 표 6-24] 구조체 D i 의구성함수 105 [ 표 6-25] 구조체 lc k 의구성변수 106 [ 표 6-26] 구조체 lc k 의구성변수 107 [ 표 6-27] 프로세스 11의동작설명 _1 108 [ 표 6-28] 프로세스 11의동작설명 _2 109 [ 표 6-29] 프로세스 12의의사코드 110 [ 표 6-30] 구조체 P의구성변수 111 [ 표 6-31] 구조체 P의구성함수 111 [ 표 6-32] 구조체 S3의구성변수 112 [ 표 6-33] 구조체 S3의구성함수 112 [ 표 6-34] 구조체 D c 의구성변수 113 [ 표 6-35] 구조체 D c 의구성함수 113 [ 표 6-36] 구조체 D i 의구성변수 114 [ 표 6-37] 구조체 D i 의구성함수 115 [ 표 6-38] 프로세스 12의동작설명 _1 116 [ 표 6-39] 프로세스 12의동작설명 _2 117 [ 표 6-40] 프로세스 13의의사코드 _1 118 [ 표 6-41] 프로세스 13의의사코드 _2 119 [ 표 6-42] 구조체 P의구성변수 119 [ 표 6-43] 구조체 P의구성함수 120 [ 표 6-44] 구조체 S4의구성변수 121 [ 표 6-45] 구조체 S4의구성함수 121 [ 표 6-46] 구조체 D의구성변수 122 [ 표 6-47] 구조체 D의구성함수 122 [ 표 6-48] 프로세스 13의동작설명 _1 123-21 -

[ 표 6-49] 프로세스 13의동작설명 _2 124 [ 표 7-1] 시스템 1 실험대상자료 126 [ 표 7-2] 시스템 1의 1차실험결과 _1 127 [ 표 7-3] 시스템 1의 1차실험결과 _2 128 [ 표 7-4] 시스템 1의 2차실험결과 129 [ 표 7-5] 시스템 1의 3차실험결과 130-22 -

제 1 장연구의필요성 본장에서는분산서비스거부 (DDoS) 공격의개요및보안취약성에따른공격근원지방어기법의필요성에대해서기술한다. 근원지방어기법이란 DDoS 공격에대응하는위치인공격근원지와공격대상지중공격이발생하는근원지에서사전공격활동을제한하거나, 사후에빠른대처를하는것을목표로하는기술이다. 서비스거부공격, 즉 DoS(Denial of Service) 공격은정상적인사용자가서비스를이용하지못하도록방해하는공격기법이다. 예를들어서버나네트워크에조작된패킷을반복적으로보내어정상트래픽이처리되는것을방해하거나두기기의통신연결을방해하는등의시도등이 DoS 공격이다. 이러한 DoS 공격을극대화시키기위해서수천, 수만대에이르는다수의컴퓨터를동원하여공격을감행하는 DDoS(Distributed Denial-of-service) 공격이근래에인터넷을위협하는이슈로자리매김하였다. DDoS 공격은 1990년대후반에나타났으나, 주목을받게된것은 2000년 2월 Yahoo, Buy.com, e-bay, Amazon, E-Trade, CNN등유명인터넷사이트가공격을받아몇시간동안접속할수없었던사건이후이다. DoS 공격이가능한이유는현재의인터넷은정보를주고받는두개체 ( 서버와클라이언트 ) 사이에정보를주고받음에있어서트래픽을감시하거나조정하는것보다는네트워크에서정보의전달이원활하고빨리주고받을수있도록서비스를제공하는것에초점을맞춰설계했기때문이라볼수있다. 따라서정보를보내는송신자측에서정보를받는수신자측의처리능력이상의과다한정보를전달할경우, 수신자가동시에수용할수있는정보량또는동시에처리할수있는정보량을초과하 - 23 -

게되고, 초과분은버려지거나처리가지연되게된다. 이러한상황을악 의적인목적으로발생시키는공격이바로서비스중단 (DoS) 공격이다. DDoS 공격에대응하기위하여공격주체, 공격대상, 그리고그사이의네트워크를대상으로다양한기법들이연구개발되고있으나모두완벽한답이되지는못하고있다. 공격주체가되는것은공격자에의해제어되는컴퓨터들이다. 인터넷상의컴퓨터들이공격에이용이되어공격주체가되는것을방지하기위하여충분한보안체계를갖추는것이근본적대안이라고할수있겠지만, 그규모와비용문제뿐아니라수많은현실적제약으로인하여불가능하다. 공격대상의측면에적용되는대응기법은 DDoS 공격트래픽을감소시켜주지만, 공격트래픽만을완벽히차단하는기법이존재하지않기때문에가용치이상의자원소모를유발시키는규모의공격에항상취약한상태에놓여있다. DDoS 공격에효과적으로대응하기위해서는네트워크침임을탐지하는시스템이나방어기술을적용할필요성이있다. 실제로최근 DDoS 공격으로피해를입은업체들은 IPS, 방화벽등기본적인보안솔루션을갖추지않은경우가대부분이었다. DDoS 공격에대한대응은시점에따라서는사전예방과사후대응기법이있으며, 대응위치에따라공격대상지방어와공격근원지방어의두가지접근방법이존재한다. 공격대상지방어기법은 DDoS 공격의목표가되는공격대상지에서방어하는방법이다. DDoS 공격으로판단되는트래픽을차단하거나일부제한하는등의방식으로대상을보호한다. 자원고갈이나웜의감염에이용되는소프트웨어의취약점이나 OS 취약점패치, 자원관리정책적용등의사전예방기법과방화벽, 싱크홀등의사후대응기법이있다. 공격근원지방어기법은 DDoS 공격을수행하는공격근원지에서공격발생을방어하는방법이다. DDoS 공격이발생하기전에공격을수행하는봇이나악성코드가감염되는것을막거나, 발견하여제거하는사전 - 24 -

예방기법과공격이발생한후외부로유출되는 DDoS 공격트래픽을 감지하여차단하는사후대응기법이있다. 공격대상지와공격근원지모두 DDoS 공격의방어주체로써활용될수있고, 각기다음과같은장단점을가진다. 공격대상지방어기법은대상을공격으로부터직접적으로보호하기때문에기법의효과가곧대상자의보호로이어지며, 따라서그관리나설치의동기와보상이직접적이다. 그러나사전대응기법들은 IP 스푸핑등의기술을사용하여공격자에의해회피되거나반사공격, 분산공격등으로강도가강화된공격에의해무시되기쉽고, 사후대응기법은피해를감소시킬뿐완전히방어하지는못하는한계점을지닌다. 공격근원지방어기법은봇과같이근원지에도피해를입히는경우를제외하고는기법의적용으로인해직접적이득을보지않기때문에널리이용되지않고있다. 또한곧바로공격여부를알수있는방어지에비해근원지는네트워크규모에서관찰하지않는이상개개의컴퓨터에서는공격의발생을탐지할수있는정보가많지않다. 공격근원지방어기법의장점은공격대상지가공격이전의징후를거의알수없는것에반해근원지에서는공격코드들이활동하는징후를보이며, 공격의발생지를상대적으로정확히탐지해낼수있다는것이다. 공격대상지가정상트래픽과공격트래픽을분류해야하는어려움이있는것에비해서공격근원지에서는공격코드와같은공격트래픽의발생근원을제거할수있는입장에있어근본적대책이가능한방어위치라고볼수있다. - 25 -

제 2 장 DDoS 공격관련동향분석 본장에서는 DDoS 공격이어떻게변화해왔으며어떠한공격으로어떠한피해들을발생시키고있는지조사하고, 앞으로의방향에대해분석한다. DDoS 공격과방어의기술동향을분석함으로써그한계점과보완기술에대해서파악한다. 제 1 절 DDoS 공격사례및국내외동향 DDoS 공격이공격의대상이되는기업 / 기관에미치는일차적피해는경제적손실이다. DDoS 공격으로인하여공격대상이완전히그기능을상실하지않더라도서비스가일시적으로지연되거나불안정해지는현상이발생한다. 서비스의중단및지연은그종류에따라매출감소, 사용자피해의배상등의직접적손실과서비스불만에의한고객감소, 서비스신용도하락, 기업이미지실추, 주가하락등의간접적손실이발생할수있다. 시장조사기관인포레스트, IDC 등에서집계한통계수치에따르면, 시스코사가 24시간동안서비스마비상황에이르게되면 3천만달러 ( 약 313억원 ) 의금전적인손실이직접적으로발생한다고추정하였다. 또다른세계적인시장조사기관인양키그룹의집계에의하면 2000년 2월에발생했던인터넷사이트들에대한대규모의 DDoS 공격에의한직접적인피해액수는 12억달러 ( 약 1조 2천5백억원 ) 에이른다고발표했다. 또한, 2001년 1월에마이크로소프트사의인터넷사이트가수일동안 DDoS 공격을받았을때발생했던손실규모는 5억달러 ( 약 5천2백억원 ) 로집계되었다. - 26 -

과거에는자기과시나영웅심리에의해특정대형웹사이트를대상으로시도되었던 DDoS 공격이최근에는중소형사이트를포함, 금전을갈취하는협박형 (ransom) 공격으로바뀌는양상을보이고있다. 지난 2007 년국가 민간부문의사이버침해위협과관련한 10대동향이슈중 DDoS 공격이첫번째이슈가될정도로중대한위협요소로평가되었다. 2007년들어중국인으로추정되는해커가국내특정웹사이트에대해메신저나이메일, 전화를통하여금품을요구하고, 이에응하지않을경우 DDoS공격을가하는등협박형 DDoS 공격이크게증가하였다. 공격대상역시법적보호를받기어려운불법사이트에서부터서비스중단이매출감소로이어지는온라인상거래사이트, 온라인예약예매사이트등으로다양화되었고공격트래픽의규모도수 ~ 수십 Gbps에달하면서국내인터넷에커다란위협으로대두되고있다. DDoS 공격은경제적목적이외의다른형태로도존재한다. 2007년 6 월 Czech Business Weekly 지에실린한기사에따르면에스토니아가 1991년소련에서독립한후 2007년 4월에수도에서있던 붉은군대병사 동상을끌어내렸고이로인해에스토니아에있던소수계층의러시아사람들이대규모폭동을일으켰다. 그후 5월에에스토니아의정부, 정당, 신문사, 은행, 기업들의웹사이트가 2주간서비스중단되는사태가발생했고이때에스토니아의웹사이트들을공격한해커들이사용한기법이 DDoS 공격인것으로알려졌다. 에스토니아에서는공격패킷중하나가러시아의푸틴대통령의측근의 IP 주소를가지고있었다고주장했지만러시아정부는부인하였고러시아의개입에대한증거를찾을수는없었다. 이와같은사례는 DDoS 공격이협박성금품갈취공격으로악용되는것외에도국가간의혹은다수의집단간의정치적목적으로사용될수도있음을보여준다. - 27 -

제 2 절 DDoS 공격, 방어기법의기술동향 1. DDoS 공격기술동향 DDoS 공격은몇단계의과정을거쳐서수행된다. 첫번째단계로공격자는우선공격을수행할공격코드를다수의컴퓨터에감염시키기위해주변컴퓨터들의보안취약점을탐색한다. 그다음, 공격코드들을발견한취약한컴퓨터들에감염시키고, 마지막으로원하는시점에공격코드들에공격명령을내려특정대상을공격하게한다. 이 3단계의과정중 1, 2단계는일반적으로자동화된소프트웨어에의해이뤄진다. 예를들어공격자가취약점을가진컴퓨터들을감염시키는코드에인접한컴퓨터중동일한취약점을가진컴퓨터를탐색하여감염시키는또다른코드를삽입해두었다면, 감염된컴퓨터는감염후 2차적으로다른컴퓨터들을감염시키기위한시도를하게된다. 그리고감염된컴퓨터들은다시이과정을반복한다. 컴퓨터에공격용도의코드를감염시키는다른기법은정상적소프트웨어로가장한공격소프트웨어를배포하는것이다. 실행파일을조작하여공격코드를사용자모르게설치하게하거나, 이메일에첨부하여이를열람한사용자의컴퓨터에공격코드가설치되게하는방법등이사용된다. 이와같은방법으로공격코드에감염된컴퓨터들은공격자의명령에의해공격패킷을보내는데사용된다. 공격자들은이감염된컴퓨터들이방어기법에의해탐지되고통제되는것을방지하기위하여패킷의송신 IP주소를조작하는데, 이것을 IP 스푸핑 (Spoofing) 이라고한다. DDoS 공격은여러가지형태로분류가가능하며, 다음 3 가지방법이가 장일반적으로사용되고있다. - 28 -

가. 공격자동화정도 공격의자동화정도따라서분류가가능하다. 위에언급한바와같이 DDoS는그준비단계부터공격까지총 3단계의단계를가지는데, 그중몇단계를자동화시켰느냐에따라서 완전자동화공격, 자동확산, 수동공격, 수동확산, 수동공격 의 3가지로나누어볼수있다. 완전자동화공격 은탐색, 감염, 공격이공격자의명령없이모두자동으로이뤄지는공격으로, 웜을예로들수있다. 자동확산, 수동공격 은자동으로탐색, 감염작업을수행하고, 감염된컴퓨터에숨어서공격자의명령을기다리다가명령을내리면공격을시작하는형태이다. 예로는웜을이용해확산되는봇을들수있다. 마지막으로 수동확산, 수동공격 방식은봇과같은 DDoS 공격코드를공격자가직접탐색및감염작업을수행하거나, 사용자가스스로악성코드를설치하기를기다렸다가공격명령을내려공격하는방식이다. 나. 공격대상의서비스를중단시키는방법 공격대상의서비스를중단시키는방법에따라구분할수있다. 공격대상이가진어느자원을소모시키느냐에따라, 네트워크마비, 서비스기아상태유발, 공간포화상태유발 로나누어볼수있다. 네트워크마비는네트워크하드웨어의성능을넘어서는과도한트래픽으로네트워크송수신능력을상실시키는방법이며, 서비스기아상태유발은사용자에게동시에제공할수있는자원이한정적인서비스에과도한요청을하여정상서비스가무한히지연되게하는방법이다. 세번째공간포화상태유발은공격대상이가진메모리혹은저장공간을과도하게점유함으로써그기능을상실하게하는방법이다. 네트워크마비 공격은서버의네트워크인터페이스와회선의속도 한계, 라우터또는허브의처리능력한계치이상의트래픽을발생시켜 - 29 -

공격한다. 서비스기아상태유발 은온라인게임서비스와같이동시사용자혹은서비스양에제한이있거나, 컴퓨팅부하가많은서비스를대상으로공격한다. 마지막 공간포화상태유발 은메일서버, FTP 서버와같이저장공간부족이곧바로서비스중단으로이어지는서비스를대상으로수행된다. 다. IP 스푸핑방식 IP 스푸핑방식에따른분류가가능하다. IP 스푸핑방식에따라 공격지은폐, 분산공격, 그리고 반사공격 으로나눠진다. 공격지은폐 는공격을수행하는컴퓨터의 IP 주소를노출시키지않기위하여 IP 주소를조작하는것이다. 분산공격 은한대의컴퓨터가마치여러대의컴퓨터인것처럼송신자 IP 주소를조작하여적은수의컴퓨터로다수컴퓨터의효과를얻는것이다. 반사공격은공격컴퓨터가공격대상컴퓨터의 IP로송신 IP를조작한요청을발생시켜그응답이공격대상컴퓨터에돌아가게하는방법이다. 후자일수록더고도화된방법이며, 앞의방법의효과를포함한다. 브로드캐스팅을이용한반사공격은자신의위치를숨김과동시에분산공격을일으킨다. 2. DDoS 방어기술동향 DoS 공격에효과적으로대응하기위해서는네트워크침임을탐지하는시스템이나방어기술을적용할필요성이있다. 실제로최근 DDoS 공격으로피해를입은업체들은 IPS, 방화벽등기본적인보안솔루션을갖추지않은경우가대부분이었다. DDoS 공격에대한대응은시점에따라서는사전예방과사후대응기법이있으며, 대응위치에따라공격대상지방어와공격근원지방어의두가지접근방법이존재한다. - 30 -

가. 공격대상지방어기법 DDoS 공격의목표가되는공격대상지에서방어하는방법. DDoS 공격으로판단되는트래픽을차단하거나일부제한하는등의방식으로대상을보호한다. 자원고갈이나웜의감염에이용되는소프트웨어의취약점이나 OS 취약점패치, 자원관리정책적용등의사전예방기법과방화벽, 싱크홀등의사후대응기법이있다. 공격대상지방어기법은대상을공격으로부터직접적으로보호하기때문에기법의효과가곧대상자의보호로이어지며, 따라서그관리나설치의동기와보상이직접적이다. 그러나사전대응기법들은 IP 스푸핑등의기술을사용하여공격자에의해회피되거나반사공격, 분산공격등으로강도가강화된공격에의해무시되기쉽고, 사후대응기법은피해를감소시킬뿐완전히방어하지는못하는한계점을지닌다. 나. 공격근원지방어기법 DDoS 공격을수행하는공격근원지에서공격발생을방어하는방법. DDoS 공격이발생하기전에공격을수행하는봇이나악성코드가감염되는것을막거나, 발견하여제거하는사전예방기법과공격이발생한후외부로유출되는 DDoS 공격트래픽을감지하여차단하는사후대응기법이있다. 공격근원지방어기법은봇과같이근원지에도피해를입히는경우를제외하고는기법의적용으로인해직접적이득을보지않기때문에널리이용되지않는다. 또한곧바로공격여부를알수있는방어지에비해근원지는네트워크규모에서관찰하지않는이상개개의컴퓨터에서는공격의발생을탐지할수있는정보가많지않다. 공격근원지방어기법의장점은공격대상지가공격이전의징후를거의알수없는것에반 - 31 -

해근원지에서는공격코드들이활동하는징후를보이며, 공격의발생지를상대적으로정확히탐지해낼수있다. 공격대상지가정상트래픽과공격트래픽을분류해야하는어려움이있는것에비해서공격근원지에서는공격코드와같은공격트래픽의발생근원을제거할수있는입장에있어근본적대책이가능한방어위치라고볼수있다. - 32 -

제 3 장 DNS 와악성행위연관성및탐지기법 분석 2장에서분석한것과같이 DDoS 공격은공격대상지에서대응하기에어려움이있다. 이에반해 DDoS 공격이발생하는근원지에서는공격의사전준비작업혹은공격에이용되는봇이나악성코드등이발생시키는네트워크트래픽의분석을통해대상지보다상대적으로더많은정보를획득하고, 발견된악성코드및봇의제거하거나공격트래픽을중도에서차단함으로써 DDoS 공격에대해효율적으로대응할수있다. 공격근원지에서악성코드와봇의정보를얻을수있는네트워크요소중악성코드의활동을관찰할수있고, 그범위와효율성이가장좋은것은 DNS 이다. 본장에서는 DNS와 DDoS 공격과의연관관계와 DNS를이용한 DDoS 공격근원지탐지의장점에대해서설명하였다. 제 1 절 DNS 와악성행위의연관관계 Domain Name System은현대인터넷서비스의한근간을이루고있는 Domain-to-IP 서비스를제공함과더불어, 서비스를제공하는네트워크내의서버및사용자 PC의네트워크활동을개괄적으로살펴볼수있는위치에있는요소이기도하다. DNS가 DDoS 공격에연관되는경우는크게 3가지로볼수있다. 첫번째는대다수의 DDoS 공격의원인인악성코드가공격준비단계나감염확산단계에서 DNS 서비스를이용한다는것이다. 두번째는 DNS 서비스와그네트워크인프라가 DDoS 공격의직접적공격의도구로서악용되는형태의공격이존재한다. 세번째로는 DNS 자체가 DDoS의공격의대상이된다. DDoS 공격의근원지 - 33 -

를분류하는접근방법에서볼때, 세번째의연관성은첫번째경우의악성코드를탐지하고대응함으로써포괄적으로보호될수있는사항으로둘수있다. 이와같은 DDoS 공격과 DNS의관계는 DNS 서비스의이용양상으로부터 DDoS 공격의근원지를찾아내는중요한근거가사용될수있다. 아래는 DNS와 DDoS 공격의두가지연관관계에대해구체적으로설명하였다. 1. DDoS 공격을수행하는악성코드의 DNS 이용 DDoS 공격을수행하는봇넷의동작 / 운영과정에서 DNS 서비스가이용되고있으며, 이는 ( 그림 3-1) 과같은방식으로 [ 표3-1] 에서그구체적인내용을살펴볼수있다. 봇은사용자컴퓨터에감염되어활동하는악성코드이다. 다수의봇은봇넷이라는네트워크를이루어공격자의명령에의해 DDoS 뿐아니라다양한형태의공격을수행한다. DDoS 공격의근원지의대다수는이봇에감염된 PC 이다. ( 그림 3-1) 봇넷의동작방식 봇넷은크게전파 (Propagation), 통신 (Communication) 그리고공격 (Attack) 의 3 가지의단계를거쳐동작한다. 전파단계에선다양한방법을 - 34 -

통해 PC의취약성을이용해악성코드를설치한다. 감염된 PC는실제봇코드를인터넷을통해다운로드하고자신이감염된사실을봇마스터에게알리기위해명령및제어채널에접속한다. 이후채널을통해봇마스터로부터명령을전달받고공격을수행하게된다. 이렇게채널에접속하여봇마스터로부터의명령을받아악성행위를수행하는감염 PC 의네트워크가봇넷이다. [ 표 3-1] 여러형태의봇넷과 DNS 사용특징 2. DDoS 공격도구로서 DNS 서버이용 DNS의 Name Server(NS) 는그컴퓨팅자원과네트워크대역등이공격도구로서사용되기도한다. 이경우 DDoS 공격은분산된여러대의공격지로부터 NS를거쳐공격대상지에도달하고, NS는패킷의크기를증가시켜 DDoS 공격의위력을강화시키는역할과더불어피해자가공격근원지를찾기힘들게하는효과까지부여한다. 이러한공격형태를 Amplification 공격이라한다. 공격근원지로부터피해자에게직접적공격을하는 DDoS 공격에서다량의 SYN 패킷이나서비스요청이이용되었던것과다르게 NS를거치는 DDoS 공격은 Resolution 패킷을이용한다. - 35 -

( 그림 3-2) NS 를이용한 Amplification 공격예 ( 그림 3-2) 와같이공격자가 NS에스푸핑된 Query를보내고, NS가 Query에비하여수배크기가큰 Reply 패킷을공격대상에게보냄으로써 DoS 공격이이뤄진다. 이것이다수의공격근원지에의해수행되게되면 ( 그림3-3) 과같이강화된 DDoS(Amplified DDoS) 공격이된다. ( 그림 3-3) 봇넷과 NS 를연동한 DDoS 공격예 이 DDoS 공격형태에서 DNS 는공격근원지로부터 Query 를받을뿐 - 36 -

아니라실제적으로공격대상에트래픽을전송하는직접적공격자로서의위치에있게된다. 이위치에서 NS는봇넷활동의탐지뿐아니라조기발견여부에따라공격차단에직접관여할수있다. 이뿐아니라 NS의 Cache 정보를조작 (DNS Cache Poisoning) 하여봇넷을이용하지않고도정상적인사용자들의요청을공격대상으로우회시킴으로써피해자가예상하지못한많은트래픽에의해 DoS 공격을받는공격또한가능하다. 이공격방식은공격대상의서버가수용할수있는네트워크트래픽과대형포탈등의다수사용자가이용하는서비스의네트워크트래픽의규모차이를이용한다. 제 2 절 DNS 를이용한 DDoS 공격및공격근원지 탐지기법 1. 적용범위 넓은범위의네트워크를대상으로보안기법을적용하는데에있어물리적으로분산되어있고그수가적지않은라우터혹은소규모지역 ISP 와비교하여 DNS는방어기법의설치가용이할뿐만아니라넓은범위에서모여드는정보를집중된한곳에서관찰하고관리할수있다는장점을가진다. DNS는서비스권역내에서가장중앙집중적인구조를가지고있다. 많은 ISP들이그비용및관리상의어려움을이유로자체적으로 NS를구축하기보다기존의 DNS 운용자에의존하고있으며대형 ISP 및기관에서운용하는한개의 DNS가서비스를제공하는네트워크의크기는수개의 B 클래스네트워크에달한다. 한번설치된기법에대하여 DNS 서비스를제공하는네트워크의범위만큼그관리범위에포함되어넓은지역의사용자및기관들이그혜택을받을수있다. - 37 -

2. 효율성 넓은지역의네트워크를대상으로적용되는네트워크공격방어기법들은관찰하고분석해야하는트래픽의양이많을뿐아니라그구성이다양하고복잡하다. 또한분석과정에서발생하는서비스지연은정상적사용자에게불편을안겨주어서비스의평가를떨어뜨리는원인이되기도한다. DNS는이런제약사항들에있어유리한조건을가지고있다. 우선 DNS 트래픽은통일된 1개의 Resolution 프로토콜을사용하며, 일반적상황에서패킷의크기가 50 Byte ~ 400 Byte 수준으로매우작다. 이는패킷의관찰및분석기법을단순화시킬수있어소모되는처리비용및지연시간에서유리하게작용한다. 또한프로토콜구성이단순하여 NS의운영체제, DNS 데몬등의구성요소나서비스네트워크의크기및구성이변화하더라도방어기법의큰수정없이범용될수있다. 3. 유용성 DNS는앞서 DNS와 DDoS/ 봇 / 악성코드의연관관계 절에서설명한것과같이공격이시작되기이전과공격상황에서악성코드, 봇, 악성도메인, 명령 / 제어서버로부터서비스요청을받는다. 따라서 DNS는유입되는트래픽속에서이런악성코드와악성도메인의트래픽을찾을수있으며, 그내용과특성을분석하여공격징후나공격행위를탐지하고그종류를분류할수있는위치에있다. 또한 DNS로들어오는패킷들은공격대상지에서받는공격패킷처럼일방적으로보내지는것이아니라답변을필요로하는서비스요청이기때문에그송신지주소와내용을조작하지못한다. 공격자가이점을고려하여탐지를회피하는의미없는요청이나패킷을섞어보내는시도가최신의봇들에서발견되었다는사례가있으나, 다수패킷집단을분석함으로써유효한 IP 주소나도메인을추출해낼수있다. - 38 -

제 4 장 DDoS 공격근원지분류시스템설계 본장에서는 DDoS 공격근원지분류방법개발의결과물인시스템과알고리즘의세부설계에대해기술한다. 전체시스템은총 3개의독립된세부시스템으로분리설계되었으며그중가장핵심적인공격근원지탐지시스템 ( 시스템 1) 의구조와내부알고리즘을구체적으로기술한다. 시스템 2와 3는시스템 1과연동되어전체시스템이유용히동작하기위해필요한시스템으로그개략적인구조와요구사항에대한분석을수행한다. 제 1 절설계방법및시스템개요 DDoS 공격근원지탐지시스템분류기법은가장추상화된수준의시스템배치에서시스템내부에서각기독립된기능을수행하는 3개의시스템, 각시스템내부의모듈, 모듈내부의데이터흐름과알고리즘의수준으로점차적세부설계를하는방식을사용하였다. - 39 -

( 그림 4-1) 기법설계의계층구조도 ( 그림 4-1) 의계층구조를참조하여설명하면, 첫번째로최상위계층에서는기법이설치되고운용되는환경과위치를표현하고기법이 DNS 서버와같은주변의네트워크요소들에서어떤정보를입력받아출력하는지나타낸다. 두번째로시스템계층에서는기법내에서동작하는서로다른기능의세개의시스템을설명하고각기능들이어떠한정보를입출력하는지를나타낸다. 마지막으로모듈계층에서는정보가알고리즘에의해처리되고저장되는과정을자료의흐름에따라구체적으로표현하고있다. - 40 -

( 그림 4-2) DDoS 공격근원지분류시스템배치도 최상위계층에해당하는기법의배치도는 ( 그림4 2) 와같으며각시스템과모듈에대한상세설계는시스템설명단계에서다룬다. DDoS 공격근원지분류시스템은 DNS 서버에들어가거나서버로부터나오는 DNS 트래픽을미러링하여입력으로받아처리하는구조를가지고있다. 분류시스템은일반적데스크탑환경에서소프트웨어기반으로동작하며, 모니터, 키보드, 마우스등의일반적입출력장치이외의부가장치를필요로하지않는다. 다만시스템내부와외부의네트워크인터페이스의차이가존재할경우에는이를연결하기위한하드웨어가필요하다. 파일시스템은운영체제의파일시스템또는외부의데이터베이스를사용하는환경을고려하여설계되엇으며내부자료구조역시데이터베이스의사용을고려하여개발되었다. ( 그림 4-3 은 DDoS 공격근원지분류시스템을중심으로한정보의입 출력및주변시스템과의연동관계를표현한것이다. 시스템의핵심기 - 41 -

능인공격근원지의탐지기능은 3단계에걸쳐비정상트래픽의분류, 악성행위의탐지, 주변시스템과의연동으로수행되며, DNS 서버를통해봇에감염된클라이언트와명령 / 제어서버 (Command & Control Server) 의정보를획득한다. ( 그림 4-3) 전체시스템의주변시스템과의연동및정보흐름도 제 2 절 DDoS 공격근원지탐지시스템의상세설계 DDoS 공격근원지를탐지하기위해서는공격을수행하는봇과같은악성코드에감염된클라이언트와이를통제하는명령제어서버를찾는것이주된과제라고할수있다. DNS 트래픽으로부터봇넷또는악성코드, 그외 DDoS 공격이이용되는캐쉬포이즈닝등의공격주체를찾아내기위해서는우선이러한악성행위의존재를탐지하여야한다. 많은수의봇이나악성코드가악성행위의과정중에 DNS 서비스를이용하고있 - 42 -

으며, DNS 트래픽으로부터이러한정황을탐지하고그출처를추적하는 것이 DNS 트래픽분석을통한 DDoS 공격근원지탐지의방법론이라 할수있다. 제안한시스템은악성행위의주체를찾기위해서우선악성행위들에서나타나는비정상행위가무엇인지분석하고, 상습적이고규칙적인비정상행위들로부터악성행위와이를수행하는근원지를탐지해가는방식을사용하였다. 시스템의주탐지대상이되는 DDoS 공격코드, 봇넷, 악성코드, DNS 캐쉬포이즈닝공격도구등의 DNS 이용행위중정상사용자와구분되는비정상적특징을보이는행위들을분석한결과 [ 표 4-1], [ 표 4-2], [ 표 4-3], [ 표 4-4] 와같은분석결과를얻을수있었다. 이를이용하여비정상 DNS 행위를악성행위의탐지에사용하는과정을간단히표현하면 ( 그림 4-4) 와같다. [ 표 4-1] DDoS 공격코드의비정상적 DNS 이용특징 악성행위주체비정상적 DNS 이용특징표식어공격 / 감염대상검색 B11 DDoS 공격코드대형 RR 요청 B12 (A1) 공격코드그룹의 DNS 서비스동시이용 B13 [ 표 4-2] 봇 / 봇넷의비정상적 DNS 이용특징 악성행위주체 비정상적 DNS 이용특징 표식어 주기적 C&C Ping/Pong B21 배포도메인단체접속 B22 봇 / 봇넷 C&C 채널이주 B23 (A2) C&C 탐지회피를위한다중도메인 /IP 사용 B24 DNS 이용을최소화하기위한높은 TTL B25-43 -

[ 표 4-3] 악성코드의비정상적 DNS 이용특징 악성행위주체비정상적 DNS 이용특징표식어배포도메인단체접속 B31 악성코드기계적인중복 / 반복서비스요청 B32 (A3) Phishing, Pharming을위한다중도메인 /IP B33 [ 표 4-4] DNS 캐쉬포이즈닝공격자의비정상적 DNS 이용특징 악성행위주체 비정상적 DNS 이용특징 표식어 DNS 공격성공확률을높이기위한중복질의 B41 캐쉬포이즈닝 조작된다량의응답패킷 B42 공격자 중복된 IP/Domain 맵핑 RR 발생 B43 (A4) 공격효과장기화를위한높은 TTL B44 ( 그림 4-4) 비정상행위탐지를통한악성행위탐지과정 DDoS 공격근원지탐지시스템은설계구조에서시스템 1에해당하며, 수집된 DNS 트래픽으로부터악성이용 IP/Domain 탐지시스템으로비정상 DNS 트래픽을분류하여악성행위를분류, 탐지하고이를기반으로악성 IP 및 Domain 정보를추출한다. 시스템 1은세부적기능을 3개의모듈로분리하여설계되었으며, 각각의모듈은비정상트래픽의분류, 악성행위의탐지, 악성 IP, Domain 정보의추출및출력의기능을담당하 - 44 -

고, 각기순서대로모듈 1, 2, 3 로구분한다. 이구조는 ( 그림 4-3) 의구조 도에개략적으로도식되어있다. ( 그림 4-5) 시스템 1 구조도 ( 그림 4-5) 은시스템 1의입출력을포함한내부구조도이다. 시스템 1 은 3개의모듈로구성되어있으며각각의모듈은비정상트래픽분류, 악성행위탐지, 악성 IP/Domain추출의기능을담당하고선행모듈의출력이후방모듈의입력이되는선형배치를이루고있다. ( 그림 4-6) 시스템 1 자료흐름도 ( 그림 4-6) 는시스템 1 내부의자료흐름을도식한것이다. 시스템 1은 DNS 트래픽을입력으로제공받아각모듈간의처리르거쳐최종적으로시스템 2의입력이되는 IP, Domain 리스트를출력한다. 이과정에서 DNS 트래픽은모듈 1의처리의결과로서출력되는비정상분류된 DNS - 45 -

트래픽이모듈 2의입력으로서사용되는순차구조를기본으로하고, 구현방식에따라서는 DNS 트래픽은 3개모듈에서공유할수있는시스템을구축하고, 모듈간의입출력은 DNS 트래픽의색인정보로대체하여처리량을줄이는방식또한가능하다. 다음 1, 2, 3 단락은모듈 1, 2, 3 에대한각기세부설계에대해기술한다. 1. 모듈 1- 비정상 DNS 트래픽분류모듈설계 모듈 1은가공되지않은 DNS 트래픽을규칙기반트래픽분류 (Rule-based classification) 방식으로처리하여악성행위로의심되는 DNS 트래픽을분리한다. 유사한 DNS 이용특징이지속적, 중복적으로확인되면, 악성행위가존재함을추측할수있는점을바탕으로 [ 표4-5] 과같은 8개의규칙 (Rule) 을정의한다. [ 표 4-5] 비정상 DNS 트래픽분류모듈의행위판단규칙목록 규칙비정상행위측정기준관련악성행위 Rule 1 대량요청 (Query) Query/sec Bot, Cache Poisoning Rule 2 대량응답 (Reply) Reply/sec Cache Poisoning DDoS 공격 Rule 3 요청응답불균형 비율 Bot, Cache Poisoning Rule 4 극단적헤더값 수치 Bot, Cache Poisoning Rule 5 대형 RR 출입 크기증감율 Cache Poisoning, Bot, DDoS 공격 Rule 6 중복요청 규칙성 Bot, DDoS 공격 Rule 7 IP/Domain 다중맵핑 맵핑비율 Bot, Cache Poisoning Rule 8 무작위요청 분포도 DNS 취약점탐색 모듈 1에서는입력된 DNS 트래픽을 DNS 프로토콜을이용하여필요한정보를얻고, 각각의규칙을검사하는 8개의 Rule Checker를통해서비정상행위를탐지한다. 비정상행위정도를측정한측정값은각각규칙의번호를따라 r i 로, 탐지된비정상행위와비정상행위로분류된트 - 46 -

래픽 ( 분류된트래픽또는패킷의색인번호 ) 은 Ri 로표현한다. 비정상행 위 R1 부터 R8 에대한설명은세부설명에서구체적으로다룬다. 모듈 1에서는총 8개의 Rule Checker가평행하게동작한다. Rule Checker들은 DDoS 공격코드, 봇넷, 악성코드 (Malware), DNS 캐시포이즈닝공격등에서나타나는 DNS 이용형태중정상사용자와비교하여이상행위를검사하여경고한다. 대응대상으로삼는 4가지의악성행위는각기다른목적으로 DNS 사용하지만그과정중에나타나는비정상트래픽의특징은유사하여, 정의한 8개의비정상행위들이단독적혹은복합적으로나타나는것으로부터악성행위의존재를판별할수있다. 모듈 1의세부알고리즘에대한기술은 2절의마지막에자세히기술한다. 2. 모듈 2- 악성행위분류 / 탐지모듈설계 모듈 2는모듈 1에서분류된악성행위에대한규칙과실제트래픽을이용하여상세분석을수행한다. 입력된비정상 DNS 트래픽에대한패턴을분석하여 DB에저장된 DDoS, Botnet, 악성코드, DNS Cache Poisoning과관련된트래픽과비교, 확인작업을거쳐서어떤종류의악성행위인지판별한다. 알려진패턴혹은새로운패턴의악성코드, Botnet 리스트와이용된 DNS 트래픽정보를출력한다. ( 그림 4-7) 모듈 2 자료흐름도 - 47 -

패턴으로사용하는트래픽의특성은 [ 표 4-6] 와같이 4 가지이며, 등록 되어있는악성행위의패턴임계값과비교하여판단한다. 표현평가요소평가기준평가값범위 i 등장간격패킷과패킷간의시간간격의규칙성 0.0 ~ 1.0 r 반복규모동일질의의반복생성횟수의유사성 0.0 ~ 1.0 p 경로동일질의의근원지유사성 0.0 ~ 1.0 b 질의단체유사성 [ 표 4-6] 트래픽패턴유사도평가요소 동일질의발생근원지단체유사성 0.0 ~ 1.0 3. 모듈 3- 악성 IP/Domain 추출모듈설계 모듈 3는독립적인알고리즘이존재하지않고, 모듈 2에서제공된이상행위정보와 Log 정보로부터 IP, Domain을추출하여시스템 2에제공하기좋은형태로표현하는기능을한다. 이는 DB의튜플형태, 기록파일형태, 그리고이정보가필요한다른시스템들에전송을위한패킷형태, 시각적표시를위한화면표시형태등으로표현하는인터페이스모듈이다. - 48 -

( 그림 4-8) 시스템 1 의프로세스흐름도 - 49 -

제 3 절 DDoS 공격근원지지역분류시스템설계 시스템 2-DDoS 공격근원지지역분류시스템에대한설계는그기능과시스템 1으로부터제공되는입력정보에대응하기위한요구사항과시스템 3에필요한요구사항에대한설계가진행되었다. ( 그림 4-9) 은시스템 2의 Use-case 다이어그램이다. 이다이어그램은요구분석단계의설계에사용되는것으로시스템 1과시스템 3에서시스템 2에어떤기능을요청하는지에대해나타나있다. ( 그림 4-9) 시스템 2 의시스템 1, 3 와의 Use-case diagram - 50 -

제 4 절공격근원지의차단연동시스템설계 ( 그림 4-10) 은외부시스템과의연동기능을담당하는시스템 3가어떤위치에서어떤기능을수행하는지에대한모식도이다. 시스템 3는시스템 1과시스템 2에서도출된정보를외부시스템에전달하는인터페이스시스템으로써이종환경이나자료형에적용될수있도록자료변환, 관리기능을필요로한다. ( 그림 4-10) 시스템 3 구현을위한시스템배치도 - 51 -

제 5 장시스템 1 : 모듈 1 의사코드및 자료구조 본장에서기술하는이하의자료구조및의사코드는시스템 1의모듈 1, 모듈 2, 모듈 3에사용된알고리즘들의세부설계이다. [ 표 5-1] 은각프로세스의색인번호와명칭, 그리고기능에대한목차이다. 총 14개의프로세스가시스템 1을구성하고있으며, 프로세스 1~9가모듈 1, 프로세스 10 ~ 13이모듈 2, 그리고모듈 3는프로세스 14에해당한다. 모듈 3를구성하는프로세스 14는특정알고리즘을수행하는프로세스가아니므로상세설계에서제외하였다. Process List [ 표 5-1] 시스템 1 의프로세스의사코드, 상세설명색인 Index Name Functionality 1 Rule Checker 1 Client query per second counter 2 Rule Checker 2 Authoritative reply per second counter 3 Rule Checker 3 Packet type ratio checker 4 Rule Checker 4 Header field anomality checker 5 Rule Checker 5 Packet size anomality checker 6 Rule Checker 6 Iterated packet detecter 7 Rule Checker 7 IP per Domain anomality checker 8 Rule Checker 8 Scanning detecter 9 Abnormal Traffic Multiplexer Aggregate abnormal traffic 10 Similarity Estimate 1 Packet interval similarity checker 11 Similarity Estimate 2 Packet frequency similarity checker 12 Similarity Estimate 3 Packet path similarity checker 13 Similarity Estimate 4 BotGAD similality (Average of Kulczynski, Cosine, and extended Jaccard similarity) 14 Suspicious List out Printout suspicious IP/Domain List out - 52 -

[ 표 5-2] 프로세스 1 ~ 8 의입력데이터 DNS 패킷타입분류표 DNS Traffic-Process Input Packet Type Mapping Table From Client Query To Client Reply To Authoritative Query From Authoritative Reply Process 1 Process 2 Process 3 Process 4 Process 5 Process 6 Process 7 Process 8-53 -

제 1 절공통자료구조 1. 패킷셋 (Packet Set) 가. 패킷셋 (Packet Set) From Client Query(Cq), To Client Reply(Cr), To Authoritative Query(Aq), From Authoritative Reply(Ar) (1) Member [ 표 5-3] 패킷셋 (Packet Set) 의구성변수 자료형명칭설명 수치 Index 패킷셋에저장된순서상의간이색인번호 수치 PacketIndex 패킷이수집된순서대로할당되는패킷의고유한번호 시간 Time 패킷이수집된시간 IP주소 SrcAddr 패킷의근원지 IP 주소 IP주소 DstAddr 패킷의목적지 IP 주소 나열 Type 패킷의목적에 Answer,... ) 따른 분류형 ( Query, 수치 QuestionCount 질의문의개수 수치 AnswerCount 답변문의개수 수치 AuthoritativeCount 관할정보문의개수 수치 AdditionalCount 추가정보문의개수 문자열 Question 패킷의질의, 또는응답하고자하는질의내용 이진문자열 Answer 패킷의답변문필드의이진데이터 이진문자열 Authoritative 패킷의관할정보문필드의이진데이터 이진문자열 Additional 패킷의추가정보문필드의이진데이터 - 54 -

(2) Method [ 표 5-4] 패킷셋 (Packet Set) 의구성함수 반환형입력1 입력2 함수명설명자료형변수명자료형변수명 문자열 GetQuestionByIndex 수치 Index 없음없음 패킷셋의 Index 값을입력으로받아, Index 에해당하는패킷의 Question 문자열값을반환한다. 수치 GetPacketIndexByIndex 수치 Index 없음없음 패킷셋의 Index 값을입력으로받아, Index 에해당하는패킷의고유 PacketIndex 값을반환한다. 수치 GetQuestionCountByIndex 수치 Index 없음없음 패킷셋의 Index 값을입력으로받아, Index 에해당하는패킷의 Question Count 필드값을반환한다. 수치 GetAnswerCountByIndex 수치 Index 없음없음 패킷셋의 Index 값을입력으로받아, Index 에해당하는패킷의 Answer Count 필드값을반환한다. 수치 GetAuthoritativeCountByIndex 수치 Index 없음없음 패킷셋의 Index 값을입력으로받아, Index 에해당하는패킷의 Authoritative Count 필드값을반환한다. - 55 -

제 2 절프로세스 1 : Rule Checker 1 Process 1. Rule Checker 1 : Query per Second Counter Process 1. Rule Checker 1 : Query per Second Counter Input : Client query set C Previous VAR n Previous DATASTRUCT D Threshold T R1 // Absolute Threshold of Rule Checker 1 Threshold T V1 // Relative Threshold of Rule Checker 1 VAR n = C VAR m = Previous n DATASTRUCT D = { SrcAddr, QueryCount } DATASTRUCT E = Previous D DATASTRUCT R1 // Abnormal Packet Index Set of R1 LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) D.IncreaseCount ( C.SrcAddr ) VAR a = (n - m) / n VAR k = D LOOP ( INIT i = 0 ; WHILE i < k ; STEP i++ ) VAR cnt = D.GetQueryCountByIndex( i ) VAR src = D.GetSrcAddrByIndex( i ) VAR cntp = E.GetQueryCountByAddr( src ) VAR b = (cnt - cntp) / cnt IF ( cnt > T R1 ABS( b ) > ABS ( a ) + T V1 ABS( b ) < ABS ( a ) - T V1 ) LOOP ( INIT j = 0 ; WHILE j < n ; STEP j++ ) IF ( C.GetSrcAddrByIndex( j ) == src ) R1.InsertIndex ( C.GetPacketIndexByIndex ( j ) ) END IF END IF Output : DATASTRUCT R1, VAR n [ 표 5-5] 프로세스 1 의의사코드 - 56 -

1. 구조체 가. DATASTRUCT R1 패킷셋 C 중에서 Rule 1에서비정상으로판단된패킷들의색인번호를저장하는구조체. 구조체 R1은복수개의원소 ( 레코드 ) 를가질수있으며, 각각의원소를구분하는 Key값은 PacketIndex 필드가된다. 색인번호들이나열되는구조로, 색인번호그자체로선후관계가명시되므로스택이나큐, 연결리스트등의자료구조로구현될수있으며, 입력이나출력순서가유지되지않아도된다. (1) Member [ 표 5-6] 구조체 R1 의구성변수 자료형 변수명 설명 수치 PacketIndex 유일한색인번호값 (2) Method [ 표 5-7] 구조체 R1 의구성함수 반환형입력1 입력2 함수명설명자료형변수명자료형변수명없음 InsertIndex 수치 PacketIndex 없음없음 PacketIndex 값을입력으로받아새로운레코드를추가한다. 동일한레코드가이미존재할경우입력값을무시한다. 없음 InsertIndex 목록 PacketIndex 없음없음복수개의 PacketIndex 목록을입력으로받아새로운레코드를추가한다. 목록중에동일한레코드가이미존재할경우무시한다. - 57 -

나. DATASTRUCT D, E 구조체 D 는복수개의원소 ( 레코드 ) 를가질수있으며각각의원소를 구분하는 Key 값은 SrcAddr 필드가된다. 구조체 E 는프로세스가실행된 이전단위시간에사용된구조체 D 를참조하기위한구조체이다. (1) Member [ 표 5-8] 구조체 D, E 의구성변수 자료형 변수명 설명 IP주소 SrcAddr DNS 질의패킷의근원지주소 수치 QueryCount 질의개수 (2) Method [ 표 5-9] 구조체 D, E 의구성함수 반환형입력1 입력2 함수명설명자료형변수명자료형변수명없음 IncreaseCount IP주소 SrcAddr 없음없음 DNS 질의패킷의근원지주소 SrcAddr를입력으로받으며, 입력된 SrcAddr 의레코드가이미존재할경우, 해당레코드의 QueryCount 를 1 증가시킨다. 수치 GetItemCount 없음없음없음없음구조체에저장된고유한 Key값을가지는레코드의개수를반환한다. Key 값은 SrcAddr이다. 목록 PullEntirePacketIndexByIndex 수치 Index 없음없음 Index값을입력받아구조체에저장된해당 Index의레코드의 PacketIndex 목록을반환한다. 목록 GetQueryCountByIndex 수치 Index 없음없음 Index값을입력받아구조체에저장된해당 Index의레코드의 QueryCount값을반환한다. 목록 GetSrcAddrByIndex 수치 Index 없음없음 Index값을입력받아구조체에저장된해당 Index의레코드의 SrcAddr를반환한다. - 58 -

2. 동작설명 [ 표 5-10] 프로세스 1 의동작설명 VAR n = C VAR m = Previous n DATASTRUCT D = { SrcAddr, QueryCount } DATASTRUCT E = Previous D DATASTRUCT R1 // Abnormal Packet Index Set of R1 LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) D.IncreaseCount ( C.SrcAddr ) 코드 설명 VAR a = (n - m) / n VAR k = D LOOP ( INIT i = 0 ; WHILE i < k ; STEP i++ ) VAR cnt = D.GetQueryCountByIndex( i ) VAR src = D.GetSrcAddrByIndex( i ) VAR cntp = E.GetQueryCountByAddr( src ) VAR b = (cnt - cntp) / cnt IF ( cnt > T R1 ABS( b ) > ABS ( a ) + T V1 ABS( b ) < ABS ( a ) - T V1 ) LOOP ( INIT j = 0 ; WHILE j < n ; STEP j++ ) IF ( C.GetSrcAddrByIndex( j ) == src ) R1.InsertIndex ( C.GetPacketIndexByIndex ( j ) ) END IF END IF 1. 이전에계산되었던 n 값과구조체 D 를각각 m 과 E 에보존하고새로운 n 과 D 구조체를만든다 2. 근원지주소 (src) 를기준으로질의수를계산하여구조체 D 에넣는다 3. 0 에서부터 k 값까지아래의작업을반복수행한다 3.1. 임시변수에 Di 의근원지주소 (src), DNS 질의수 (cnt) 를저장하고, 근원지주소에따른이전 DNS 질의수 (cntp) 를저장한다. 3.2. 질의수가절대임계치 (T R1 ) 를넘거나, b 의비율이 a ± 상대임계치 (T V1 ) 를넘으면 R1 에 C 구조체에서해당 src 의색인를넣는다. - 59 -

제 3 절프로세스 2 : Rule Checker 2 Process 2. Rule Checker 2 : Reply per Second Counter Process 2. Rule Checker 2 : Reply per Second Counter Input : Authoritative reply set C Previous VAR n Previous DATASTRUCT D Threshold T R2 // Absolute Threshold of Rule Checker 2 Threshold T V2 // Relative Threshold of Rule Checker 2 VAR n = C VAR m = Previous n DATASTRUCT D = { SrcAddr, ReplyCount } DATASTRUCT E = Previous D DATASTRUCT R2 // Abnormal Packet Index Set of R2 LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) D.IncreaseCount ( C.SrcAddr ) VAR a = (n - m) / n VAR k = D LOOP ( INIT i = 0 ; WHILE i < k ; STEP i++ ) VAR cnt = D.GetReplyCountByIndex( i ) VAR src = D.GetSrcAddrByIndex( i ) VAR cntp = E.GetReplyCountByAddr( src ) VAR b = (cnt - cntp) / cnt IF ( cnt > T R2 ABS( b ) > ABS ( a ) + T V2 ABS( b ) < ABS ( a ) - T V2 ) LOOP ( INIT j = 0 ; WHILE j < n ; STEP j++ ) IF ( C.GetSrcAddrByIndex( j ) == src ) R2.InsertIndex ( C.GetPacketIndexByIndex ( j ) ) END IF END IF Output : DATASTRUCT R2, VAR n [ 표 5-11] 프로세스 2 의의사코드 - 60 -

1. 구조체 가. DATASTRUCT R2 패킷셋 C 중에서 Rule 2에서비정상으로판단된패킷들의색인번호를저장하는구조체. 구조체 R1은복수개의원소 ( 레코드 ) 를가질수있으며, 각각의원소를구분하는 Key값은 PacketIndex 필드가된다. 색인번호들이나열되는구조로, 색인번호그자체로선후관계가명시되므로스택이나큐, 연결리스트등의자료구조로구현될수있으며, 입력이나출력순서가유지되지않아도된다. (1) Member [ 표 5-12] 구조체 R2 의구성변수 자료형 변수명 설명 수치 PacketIndex 유일한색인번호값 (2) Method [ 표 5-13] 구조체 R2 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertIndex 수치 PacketIndex 없음없음 PacketIndex 값을입력으로받아새로운레코드를추가한다. 동일한레코드가이미존재할경우입력값을무시한다. 없음 InsertIndex 목록 PacketIndex 없음없음복수개의 PacketIndex 목록을입력으로받아새로운레코드를추가한다. 목록중에동일한레코드가이미존재할경우해당값을무시한다. - 61 -

나. DATASTRUCT D, E 구조체 D 는복수개의원소 ( 레코드 ) 를가질수있으며각각의원소를 구분하는 Key 값은 SrcAddr 필드가된다. 구조체 E 는프로세스가실행된 이전단위시간에사용된구조체 D 를참조하기위한구조체이다. (1) Member [ 표 5-14] 구조체 D, E 의구성변수 자료형 변수명 설명 IP주소 SrcAddr DNS 질의패킷의근원지주소 수치 ReplyCount 응답개수 (2) Method [ 표 5-15] 구조체 D, E 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 IncreaseCount IP주소 SrcAddr 없음없음 DNS 질의패킷의근원지주소 SrcAddr를입력으로받으며, 입력된 SrcAddr 의레코드가이미존재할경우, 해당레코드의 ReplyCount 를 1 증가시킨다. 수치 GetItemCount 없음없음없음없음구조체에저장된고유한 Key값을가지는레코드의개수를반환한다. Key 값은 SrcAddr이다. 목록 PullEntirePacketIndexByIndex 수치 Index 없음없음 Index값을입력받아구조체에저장된해당 Index의레코드의 PacketIndex 목록을반환한다. 목록 GetReplyCountByIndex 수치 Index 없음없음 Index값을입력받아구조체에저장된해당 Index의레코드의 ReplyCount 값을반환한다. 목록 GetSrcAddrByIndex 수치 Index 없음없음 Index값을입력받아구조체에저장된해당 Index의레코드의 SrcAddr를반환한다. - 62 -

2. 동작설명 [ 표 5-16] 프로세스 2 의동작설명 VAR n = C VAR m = Previous n DATASTRUCT D = { SrcAddr, ReplyCount } DATASTRUCT E = Previous D DATASTRUCT R2 // Abnormal Packet Index Set of R2 LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) D.IncreaseCount ( C.SrcAddr ) 코드 설명 VAR a = (n - m) / n VAR k = D LOOP ( INIT i = 0 ; WHILE i < k ; STEP i++ ) VAR cnt = D.GetReplyCountByIndex( i ) VAR src = D.GetSrcAddrByIndex( i ) VAR cntp = E.GetReplyCountByAddr( src ) VAR b = (cnt - cntp) / cnt IF ( cnt > T R2 ABS( b ) > ABS ( a ) + T V2 ABS( b ) < ABS ( a ) - T V2 ) LOOP ( INIT j = 0 ; WHILE j < n ; STEP j++ ) IF ( C.GetSrcAddrByIndex( j ) == src ) R2.InsertIndex ( C.GetPacketIndexByIndex ( j ) ) END IF END IF 1. 이전에계산되었던 n 값과 D 구조체를각각 m 과 E 에보존하고새로운 n 과 D 구조체를만든다. 2. 근원지주소 (src) 를기준으로 DNS 응답수를계산하여 D 구조체에넣는다. 3. 0 에서부터 k 값까지반복하여아래의작업을수행한다. 3-1. 임시변수에 Di 의근원지주소 (src), DNS 응답수 (cnt) 를저장하고, 근원지주소에따른이전 DNS 응답수 (cntp) 를저장한다. 3-2. cnt 가절대임계치 (T R2 ) 를넘거나, b 의비율이 a ± 상대임계치 (T V2) 를넘으면 R2 에 C 구조체에서해당 src 의 DNS 데이터를넣는다. - 63 -

제 4 절프로세스 3 : Rule Checker 3 Process 3. Rule Checker 3 : Packet Type Ratio Checker Process 3. Rule Checker 3 : Packet Type Ratio Checker Input : Client query set Cq Client reply set Cr Authoritative query set Aq Authoritative reply set Ar VAR ncq // Pre-processed variable by Process 1 VAR nar // Pre-processed variable by Process 2 Threshold T R3 // Absolute Threshold of Rule Checker 3 Threshold T V3 // Relative Threshold of Rule Checker 3 DATASTRUCT R3 // Abnormal Packet Index Set of R3 VAR ncr = Cr VAR naq = Aq VAR rq = naq / ncq VAR rr = nar / ncr IF ( rq > T R3 + T V3 rq < T R3 - T V3 ) R3.InsertIndex ( Cq.GetEntireIndex( ) ) R3.InsertIndex ( Aq.GetEntireIndex( ) ) END IF IF ( rr > T R3 + T V3 rr < T R3 - T V3 ) R3.InsertIndex ( Cr.GetEntireIndex( ) ) R3.InsertIndex ( Ar.GetEntireIndex( ) ) END IF Output : DATASTRUCT R3 [ 표 5-17] 프로세스 3 의의사코드 - 64 -

1. 구조체 가. DATASTRUCT R3 패킷셋 Cq, Cr, Aq, Ar 중에서 Rule Checker 3에서비정상으로판단된패킷들의색인번호를저장하는구조체. 구조체 R3은복수개의원소 ( 레코드 ) 를가질수있으며, 각각의원소를구분하는 Key값은 PacketIndex 필드가된다. 색인번호들이나열되는구조로, 색인번호그자체로선후관계가명시되므로스택이나큐, 연결리스트등의자료구조로구현될수있으며, 입력이나출력순서가유지되지않아도된다. (1) Member [ 표 5-18] 구조체 R3 의구성변수 자료형 변수명 설명 수치 PacketIndex 유일한색인번호값 (2) Method [ 표 5-19] 구조체 R3 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명설명 InsertIndex 수치 PacketIndex 없음없음 PacketIndex 값을입력으로받아새로운레코드를추가한다. 동일한레코드가이미존재할경우입력값을무시한다. 없음 InsertIndex 목록 PacketIndex 없음없음복수개의 PacketIndex 목록을입력으로받아새로운레코드를추가한다. 목록중에동일한레코드가이미존재할경우해당값을무시한다. - 65 -

2. 동작설명 [ 표 5-20] 프로세스 3 의동작설명 DATASTRUCT R3 VAR ncr = Cr VAR naq = Aq // Abnormal Packet Index Set of R3 VAR rq = naq / ncq VAR rr = nar / ncr 코드 설명 IF ( rq > T R3 + T V3 rq < T R3 - T V3 ) R3.InsertIndex ( Cq.GetEntireIndex( ) ) R3.InsertIndex ( Aq.GetEntireIndex( ) ) END IF IF ( rr > T R3 + T V3 rr < T R3 - T V3 ) R3.InsertIndex ( Cr.GetEntireIndex( ) ) R3.InsertIndex ( Ar.GetEntireIndex( ) ) END IF 1. Client에서보내고받은 DNS 질의수 (ncq) 와응답패킷수 (ncr) 를구하고, 인증된 DNS서버에서보내고받은 DNS 질의수 (naq) 와응답수 (nar) 를구한다 2. 전체패킷중인증된 DNS 서버에서보내온질의 (rq) 및응답 (rr) 패킷들의비율을구한다 3. rq 혹은 rr의비율이 T R3 ± T V3 이면 R3에 Client에서사용한 DNS 패킷정보와인증된 DNS서버에서사용한 DNS 패킷정보를저장한다. - 66 -

제 5 절프로세스 4 : Rule Checker 4 Process 4. Rule Checker 4 : Header Field Anomality Checker [ 표 5-21] 프로세스 4 의의사코드 Process 4. Rule Checker 4 : Header Field Anomality Checker Input : Client reply set Cr Authoritative reply set Ar DATASTRUCT T R4 = { T trxid, T qsc, T awc, T nsc, T adc } // Threshold of Rule Checker 4 DATASTRUCT R4 // Abnormal Packet Index Set of R4 VAR n = Cr VAR m = Aq LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR trxid = Cr.GetTrxIdByIndex( i ) VAR qscnt = Cr.GetQuestionCountByIndex( i ) VAR awcnt = Cr.GetAnswerCountByIndex( i ) VAR nscnt = Cr.GetAuthorityCountByIndex( i ) VAR adcnt = Cr.GetAddtionalCountByIndex( i ) IF ( trxid < T R4.T trxid trxid > 2 16 - T R4.T trxid qscnt > T R4.T qsc awcnt > T R4.T qsc nscnt > T R4.T nsc adcnt > T R4.T adc ) R4.InsertIndex( Cr.GetPacketIndexByIndex( i ) END IF LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR trxid = Ar.GetTrxIdByIndex( i ) VAR qscnt = Ar.GetQuestionCountByIndex( i ) VAR awcnt = Ar.GetAnswerCountByIndex( i ) VAR nscnt = Ar.GetAuthorityCountByIndex( i ) VAR adcnt = Ar.GetAddtionalCountByIndex( i ) IF ( trxid < T R4.T trxid trxid > 2 16 - T R4.T trxid qscnt > T R4.T qsc awcnt > T R4.T qsc nscnt > T R4.T nsc adcnt > T R4.T adc ) R4.InsertIndex( Ar.GetPacketIndexByIndex( i ) END IF Output : DATASTRUCT R4-67 -

1. 구조체 가. DATASTRUCT R4 패킷셋 Cr, Ar 중에서 Rule Checker 4에서비정상으로판단된패킷들의색인번호를저장하는구조체. 구조체 R4은복수개의원소 ( 레코드 ) 를가질수있으며, 각각의원소를구분하는 Key값은 PacketIndex 필드가된다. (1) Member [ 표 5-22] 구조체 R4 의구성변수 자료형 변수명 설명 수치 PacketIndex 유일한색인번호값 (2) Method [ 표 5-23] 구조체 R4 의구성함수 반환형입력1 입력2 함수명설명자료형변수명자료형변수명없음 InsertIndex 수치 PacketIndex 없음없음 PacketIndex 값을입력으로받아새로운레코드를추가한다. 동일한레코드가이미존재할경우입력값을무시한다. 없음 InsertIndex 목록 PacketIndex 없음없음복수개의 PacketIndex 목록을입력으로받아새로운레코드를추가한다. 목록중에동일한레코드가이미존재할경우해당값을무시한다. - 68 -

나. DATASTRUCT T R4 (1) Member [ 표 5-24] 구조체 T R4 의구성변수 자료형 변수명 설명 자연수 T trxid Transaction ID 임계값 자연수 T qsc Question 필드수임계값 자연수 T awc nswer 필드수임계값 자연수 T nsc Authority 필드수임계값 자연수 T adc Additional 필드수임계값 (2) Method : 해당없음 - 69 -

2. 동작설명 [ 표 5-25] 프로세스 4 의동작설명 DATASTRUCT R4 VAR n = Cr VAR m = Aq // Abnormal Packet Index Set of R4 LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR trxid = Cr.GetTrxIdByIndex( i ) VAR qscnt = Cr.GetQuestionCountByIndex( i ) VAR awcnt = Cr.GetAnswerCountByIndex( i ) VAR nscnt = Cr.GetAuthorityCountByIndex( i ) VAR adcnt = Cr.GetAddtionalCountByIndex( i ) 코드 IF ( trxid < T R4.T trxid trxid > 2 16 - T R4.T trxid qscnt > T R4.T qsc awcnt > T R4.T qsc nscnt > T R4.T nsc adcnt > T R4.T adc ) R4.InsertIndex( Cr.GetPacketIndexByIndex( i ) END IF LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR trxid = Ar.GetTrxIdByIndex( i ) VAR qscnt = Ar.GetQuestionCountByIndex( i ) VAR awcnt = Ar.GetAnswerCountByIndex( i ) VAR nscnt = Ar.GetAuthorityCountByIndex( i ) VAR adcnt = Ar.GetAddtionalCountByIndex( i ) 설명 IF ( trxid < T R4.T trxid trxid > 2 16 - T R4.T trxid qscnt > T R4.T qsc awcnt > T R4.T qsc nscnt > T R4.T nsc adcnt > T R4.T adc ) R4.InsertIndex( Ar.GetPacketIndexByIndex( i ) END IF 1. Client에서발생한 DNS 응답패킷개수 (n) 만큼아래의행위를한다. 1.1. 응답패킷에서 transaction ID와각각필드의개수를각각변수 (trxid, qscnt, awcnt, nscnt, adcnt) 에저장한다. 1.2. 각각의변수들이각각의임계값 (T trxid, T qsc, T awc, T nsc, T adc) 중하나라도넘으면 R4에패킷 Index 정보를저장한다. 2. 인증된 DNS 서버에서발생한 DNS 응답패킷개수 (m) 만큼아래의행위를한다 2.1. 응답패킷에서 transaction ID와각각필드의개수를각각변수 (trxid, qscnt, awcnt, nscnt, adcnt) 에저장한다. 2.2. 각각의변수들이각각의임계값 (T trxid, T qsc, T awc, T nsc, T adc) 중하나라도넘으면 R4에패킷 Index 정보를저장한다. - 70 -

제 6 절프로세스 5 : Rule Checker 5 Process 5. Rule Checker 5 : Packet Size Anomality Checker Process 5. Rule Checker 5 : Packet Size Anomality Checker Input : Client reply set Cr Authoritative reply set Ar Threshold T R5 // Absolute Threshold of Rule Checker 5 Threshold T V5 // Relative Threshold of Rule Checker 5 DATASTRUCT R5 // Abnormal Packet Index Set of R5 VAR n = Cr LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR v = Cr.GetPacketSizeByIndex( i ) VAR d = Cr.GetQuestionByIndex( i ) VAR k = Global::GetAverageReplySizeByDomain( d ) IF ( k == NULL ) IF ( v > T R5 ) R5.InsertIndex ( Cr.GetPacketIndexByIndex ( i ) ) END IF ELSE IF ( v > k + TV5 v < k - T V5 ) R5.InsertIndex ( Cr.GetPacketIndexByIndex ( i ) ) END IF END IF VAR m = Ar [ 표 5-26] 프로세스 5 의의사코드 LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR v = Ar.GetPacketSizeByIndex( i ) VAR d = Ar.GetQuestionByIndex( i ) VAR k = Global::GetAverageReplySizeByDomain( d ) IF ( k == NULL ) IF ( v > T R5 ) R5.InsertIndex ( Ar.GetPacketIndexByIndex ( i ) ) END IF ELSE IF ( v > k + TV5 v < k - T V5 ) R5.InsertIndex ( Ar.GetPacketIndexByIndex ( i ) ) END IF END IF Output : DATASTRUCT R5-71 -

1. 구조체 가. DATASTRUCT R5 Rule 5에서비정상으로판단된패킷들의색인번호를저장하는구조체. 구조체 R5은복수개의원소 ( 레코드 ) 를가질수있으며, 각각의원소를구분하는 Key값은 PacketIndex 필드가된다. 색인번호들이나열되는구조로, 색인번호그자체로선후관계가명시되므로스택이나큐, 연결리스트등의자료구조로구현될수있으며, 입력이나출력순서가유지되지않아도된다. (1) Member [ 표 5-27] 구조체 R5 의구성변수 자료형 변수명 설명 수치 PacketIndex 유일한색인번호값 (2) Method [ 표 5-28] 구조체 R5 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertIndex 수치 PacketIndex 없음없음 PacketIndex 값을입력으로받아새로운레코드를추가한다. 동일한레코드가이미존재할경우입력값을무시한다. 없음 InsertIndex 목록 PacketIndex 없음없음복수개의 PacketIndex 목록을입력으로받아새로운레코드를추가한다. 목록중에동일한레코드가이미존재할경우해당값을무시한다. - 72 -

2. 동작설명 [ 표 5-29] 프로세스 5 의동작설명 코드설명코드설명 VAR n = Cr LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR v = Cr.GetPacketSizeByIndex( i ) VAR d = Cr.GetQuestionByIndex( i ) VAR k = Global::GetAverageReplySizeByDomain( d ) IF ( k == NULL ) IF ( v > T R5 ) R5.InsertIndex ( Cr.GetPacketIndexByIndex ( i ) ) END IF ELSE IF ( v > k + TV5 v < k - T V5 ) R5.InsertIndex ( Cr.GetPacketIndexByIndex ( i ) ) END IF END IF 1. 패킷셋 Cr의패킷수만큼다음과정을반복수행한다. 1.1. Cr의 i번째패킷의크기 (v), 질의문 (d), 질의문에해당하는응답패킷의평균크기 (k) 를가져온다. 1.2. 저장된값이없을경우 (k== null) 패킷의크기가임계값 (T R5 ) 초과하면 R5에패킷색인을저장한다 1.3. 저장된평균값이있을경우패킷의크기의임계값 (T R5 ± T V5 ) 초과하면 R5에패킷색인을저장한다. VAR m = Ar LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR v = Ar.GetPacketSizeByIndex( i ) VAR d = Ar.GetQuestionByIndex( i ) VAR k = Global::GetAverageReplySizeByDomain( d ) IF ( k == NULL ) IF ( v > T R5 ) R5.InsertIndex ( Ar.GetPacketIndexByIndex ( i ) ) END IF ELSE IF ( v > k + TV5 v < k - T V5 ) R5.InsertIndex ( Ar.GetPacketIndexByIndex ( i ) ) END IF END IF 2. 패킷셋 Ar의패킷수만큼다음과정을반복수행한다. 2.1. Ar의 i번째패킷의크기 (v), 질의문 (d), 질의문에해당하는응답패킷의평균크기 (k) 를가져온다. 2.2. 저장된값이없을경우 (k== null) 패킷의크기가임계값 (T R5 ) 초과하면 R5에패킷색인을저장한다 2.3. 저장된평균값이있을경우패킷의크기의임계값 (T R5 ± T V5) 초과하면 R5에패킷색인을저장한다. - 73 -

제 7 절프로세스 6 : Rule Checker 6 Process 6. Rule Checker 6 : Iterated Packet Detecter Process 6. Rule Checker 6 : Iterated Packet Detecter Input : Client query set Cq Authoritative reply set Ar Threshold T R6 // Absolute Threshold of Rule Checker 6 DATASTRUCT R6 // Abnormal Packet Index Set of R6 DATASTRUCT D = { SrcAddr, Question, Count, LIST PacketIndex } DATASTRUCT E = { SrcAddr, Question, Answer, Authoritative, Count, LIST PacketIndex} VAR n = Cq VAR m = Ar LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) D.IncreaseCount( Cq.SrcAddr, Cq.Question, Cq.PacketIndex ) LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) E.IncreaseCount( Ar.SrcAddr, Ar.Question, Ar.Answer, Ar.Authoritative, Cq.PacketIndex ) VAR n = D.GetItemCount( ) VAR m = E.GetItemCount( ) LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR k = D.GetCountByIndex( i ) IF ( k > T R6 ) D.GetSrcAddrCq. R6.InsertIndex( D.PullEntirePacketIndexByIndex( i ) ) END IF LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR k = E.GetCountByIndex( i ) IF ( k > T R6 ) R6.InsertIndex( E.PullEntirePacketIndexByIndex( i ) ) END IF Output : DATASTRUCT R6 [ 표 5-30] 프로세스 6 의의사코드 - 74 -

1. 구조체 가. DATASTRUCT R6 패킷셋 Cq 에서 Rule Checker 6에서비정상으로판단된패킷들의색인번호를저장하는구조체. 구조체 R6은복수개의원소 ( 레코드 ) 를가질수있으며, 각각의원소를구분하는 Key값은 PacketIndex 필드가된다. 색인번호들이나열되는구조로, 색인번호그자체로선후관계가명시되므로스택이나큐, 연결리스트등의자료구조로구현될수있으며, 입력이나출력순서가유지되지않아도된다. (1) Member [ 표 5-31] 구조체 R6 의구성변수 자료형 변수명 설명 수치 PacketIndex 유일한색인번호값 (2) Method [ 표 5-32] 구조체 R6 의구성함수 반환형입력1 입력2 함수명설명자료형변수명자료형변수명없음 InsertIndex 수치 PacketIndex 없음없음 PacketIndex 값을입력으로받아새로운레코드를추가한다. 동일한레코드가이미존재할경우입력값을무시한다. 없음 InsertIndex 목록 PacketIndex 없음없음복수개의 PacketIndex 목록을입력으로받아새로운레코드를추가한다. 목록중에동일한레코드가이미존재할경우해당값을무시한다. - 75 -

나. DATASTRUCT D (1) Member [ 표 5-33] 구조체 D 의구성변수 자료형 변수명 설명 IP주소 SrcAddr 근원지주소 문자열 Question 질의문 목록 PacketIndex 패킷고유색인번호목록 (2) Method [ 표 5-34] 구조체 D 의구성함수 반환형 함수명 입력1 입력2 자료형변수명자료형변수명 없음 IncreaseCount IP주소 SrcAddr 문자열 Question 수치 PacketIndex 근원지주소, 질의문을기준으로레코드를검색하여패킷색인을목록에추가하고 Count 값을 1 증가. 레코드가없는경우 Count가 1인레코드를추가 없음 GetItemCount 없음 없음 없음 없음 데이터구조의원소개수반환 없음 GetCountByIndex 수치 Index 없음 없음 Index에해당하는 Count 값반환 목록 PullEntirePacketIndexByIndex 수치 Index 없음 없음 Index에해당하는레코드의패킷색인목록을반환 - 76 -

나. DATASTRUCT E (1) Member [ 표 5-35] 구조체 E 의구성변수 자료형 변수명 설명 IP주소 SrcAddr 근원지주소 문자열 Question 질의문 이진문자열 Answer 패킷의 Answer 필드 이진문자열 Authoritative 패킷의 Authoritative 필드 목록 PacketIndex 패킷의고유색인번호목록 (2) Method [ 표 5-36] 구조체 E 의구성함수 반환형입력1 입력2 함수명설명자료형변수명자료형변수명 IP주소 SrcAddr 문자열 Question 입력3 입력4 이진 Answer 이진없음 IncreaseCount 문자열문자열 Authoritative 입력5 입력6 목록 PacketIndex 근원지주소, 질의도메인이름, Answer필드정보, Authority 필드정보기준으로패킷고유색인을추가하고, 패킷개수를증가수치 GetItemCount 없음없음없음없음레코드개수반환없음 GetCountByIndex 수치 Index 없음없음 Index에해당하는레코드의 Count 반환목록 PullEntirePacketIndexB 수치 Index 없음없음 yindex Index에해당하는레코드의패킷고유색인목록을반환 - 77 -

2. 동작설명 [ 표 5-37] 프로세스 6 의동작설명 코드설명코드설명코드설명코드설명 VAR n = Cq LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) D.IncreaseCount( Cq.SrcAddr, Cq.Question, PacketIndex::Push( Cq.PacketIndex ) ) 1. Cq의레코드수 (m) 만큼아래의작업을반복수행한다 1.1. 근원지주소 (SrcAddr), 질의한질의문 (Question) 을기준으로패킷고유색인 (PacketIndex) 과질의수 (Count) 를획득하여구조체 D에넣는다. VAR m = Ar LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) E.IncreaseCount( Ar.SrcAddr, Ar.Question, Ar.Answer, Ar.Authoritative, Cq.PacketIndex ) 2. Ar의레코드수 (m) 만큼아래작업을반복수행한다 2.1. 근원지주소 (SrcAddr), 질의문 (Question), Answer필드, Authority 필드 (Authoritative) 를기준으로고유색인 (PacketIndex) 와질의수 (Count) 를획득여구조체 E에넣는다. VAR n = D.GetItemCount( ) LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR k = D.GetCountByIndex( i ) IF ( k > T R6 ) R6.InsertIndex( D.PullEntirePacketIndexByIndex( i ) ) END IF 3. 구조체 D의레코드수 (n) 만큼아래작업을반복수행한다 3.1. 구조체 D의원소의패킷수 (k) 가임계값 (T R6) 넘으면 R6에패킷고유색인목록을추가한다. VAR m = E.GetItemCount( ) LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR k = E.GetCountByIndex( i ) IF ( k > T R6 ) R6.InsertIndex( E.PullEntirePacketIndexByIndex( i ) ) END IF 4. 구조체 E의레코드수 (m) 만큼아래작업을반복수행한다 4.1. 구조체 E의 i번째레코드의 Count값이 (k) 가임계값 (T R6) 넘으면 R6에패킷고유색인목록을추가한다. - 78 -

제 8 절프로세스 7 : Rule Checker 7 Process 7. Rule Checker 7 : IP per Domain Anomaly Checker Process 7. Rule Checker 7 : IP per Domain Anomaly Checker Input : Client reply set Cr Threshold T R7 // Absolute Threshold of Rule Checker 7 DATASTRUCT R7 // Abnormal Packet Index Set of R7 DATASTRUCT D = { IpAddr, LIST Domain, DomainCount, LIST PacketIndex } VAR n = Cr LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR a = Cr.GetAnswerCountByIndex( i ) VAR r = Cr.AuthoritativeCountByIndex( i ) LOOP ( INIT j = 0 ; WHILE j < a ; STEP j++ ) IF ( Cr.GetAnswerTypeByIndex( j ) == A ) D.InsertDomain( Cr.GetAIpByIndex( i, j ), Cr.GetnAnswerDomaiByIndex( i ) ) END IF LOOP ( INIT j = 0 ; WHILE j < r ; STEP j++ ) D.InsertDomain( Cr.GetNsIpByIndex( i, j ), Cr.GetNsDomainByIndex( i ) ) VAR n = D.GetItemCount( ) [ 표 5-38] 프로세스 7 의의사코드 LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR k = D.GetDomainCountByIndex( i ) IF ( k > T R7 ) R7.InsertIndex( D.PullEntirePacketIndexByIndex( i ) ) END IF Output : DATASTRUCT R7-79 -

1. 구조체 가. DATASTRUCT R7 패킷셋 Cr 에서 Rule Checker 7에서비정상으로판단된패킷들의색인번호를저장하는구조체. 구조체 R7은복수개의원소 ( 레코드 ) 를가질수있으며, 각각의원소를구분하는 Key값은 PacketIndex 필드가된다. 색인번호들이나열되는구조로, 색인번호그자체로선후관계가명시되므로스택이나큐, 연결리스트등의자료구조로구현될수있으며, 입력이나출력순서가유지되지않아도된다. (1) Member [ 표 5-39] 구조체 R7 의구성변수 자료형 변수명 설명 수치 PacketIndex 유일한색인번호값 (2) Method [ 표 5-40] 구조체 R7 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertIndex 수치 PacketIndex 없음없음 PacketIndex 값을입력으로받아새로운레코드를추가한다. 동일설명한레코드가이미존재할경우입력값을무시한다. 없음 InsertIndex 목록 PacketIndex 없음없음복수개의 PacketIndex 목록을입력으로받아새로운레코드를추설명가한다. 목록중에동일한레코드가이미존재할경우해당값을무시한다. - 80 -

나. DATASTRUCT D (1) Member [ 표 5-41] 구조체 R7 의구성변수 자료형 변수명 설명 IP주소 IpAddr A, NS필드의 RDATA 필드 목록 Domain A, NS필드의 Name 필드목록 자연수 DomainCount Domain 목록의레코드수 목록 PacketIndex 패킷고유색인목록 (2) Method [ 표 5-42] 구조체 D 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명 IP주소 IpAddr 문자열 Domain 없음 IncreaseCount 입력3 수치 PacketIndex 근원지주소, Domain을기준으로패킷고유색인을추가하고, DomainCount 값을증가없음 InsertDomain IP주소 IpAddr 문자열 Domain 입력 IP주소에해당하는 Domain 목록에입력 Domain을기준으로을추가없음 GetDomainCountByIndex 수치 Index 없음없음 Index번째레코드의 DomainCount를반환목록 PullEntirePacketIndexByIndex 수치 Index 없음없음 Index번째레코드의패킷고유색인목록을반환 - 81 -

2. 동작설명 VAR n = Cr [ 표 5-43] 프로세스 7 의동작설명 코드설명코드설명 LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR a = Cr.GetAnswerCountByIndex( i ) VAR r = Cr.AuthoritativeCountByIndex( i ) LOOP ( INIT j = 0 ; WHILE j < a ; STEP j++ ) IF ( Cr.GetAnswerTypeByIndex( j ) == A ) D.InsertDomain( Cr.GetAIpByIndex( i, j ), Cr.GetAnswerByIndex( i ) ) END IF LOOP ( INIT j = 0 ; WHILE j < r ; STEP j++ ) D.InsertDomain( Cr.GetNsIpByIndex( i, j ), Cr.GetNsDomainByIndex( i ) ) 1. Cr 패킷셋의패킷수만큼 i=0 ~ i=n-1에걸쳐다음작업을반복수행한다. 1.1. Cr의 i번째패킷의 AnswerCount 값만큼다음작업을반복수행한다. 1.1.1. Answer필드의타입이 A 라면구조체 D에 IP주소와 Answer Name Domain을저장한다. 1.2. Cr의 i번째패킷의 AuthoritativeCount 값만큼아래의행위를한다 1.2.1. 구조체 D에 RDATA의 IP주소와 Name Domain을저장한다. VAR n = D.GetItemCount( ) LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) VAR r = D.GetDomainCountByIndex( i ) IF ( r > T R7 ) R7.InsertIndex( D.PullEntirePacketIndexByIndex( i ) ) END IF 2. 구조체 D의레코드수 (n) 만큼다음작업을반복수행한다. 2.1. 구조체 D의 i번째레코드의 DomainCount 값이임계값 (T R7 ) 초과하면구조체 R7에패킷고유색인목록전체를추가한다. - 82 -

제 9 절프로세스 8 : Rule Checker 8 Process 8. Rule Check 8: Scanning Detecter Process 8. Rule Checker 8 : Scanning Detecter Input : Client query set Cq Threshold T R8 // Absolute Threshold of Rule Checker 8 DATASTRUCT R8 // Abnormal Packet Index Set of R8 DATASTRUCT D = { Question, Count, LSIT PacketIndex } VAR n = Cq LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) D.IncreaseCount( Cq.GetQuestionByIndex( i ), PacketIndex::Push( Cq.GetPacketIndexByIndex( i ) ) VAR r = D.GetItemCount( ) / n IF ( r > T R8 ) R8.InsertIndex( D.PullEntirePacketIndexByIndex( i ) ) END IF Output : DATASTRUCT R8 [ 표 5-44] 프로세스 8 의의사코드 - 83 -

1. 구조체 가. DATASTRUCT R8 패킷셋 Cq 중에서 Rule 8에서비정상으로판단된패킷들의색인번호를저장하는구조체. 구조체 R8은복수개의원소 ( 레코드 ) 를가질수있으며, 각각의원소를구분하는 Key값은 PacketIndex 필드가된다. 색인번호들이나열되는구조로, 색인번호그자체로선후관계가명시되므로스택이나큐, 연결리스트등의자료구조로구현될수있으며, 입력이나출력순서가유지되지않아도된다. (1) Member [ 표 5-45] 구조체 R8 의구성변수 자료형 변수명 설명 수치 PacketIndex 유일한색인번호값 (2) Method [ 표 5-46] 구조체 R8 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertIndex 수치 PacketIndex 없음없음 PacketIndex 값을입력으로받아새로운레코드를추가한다. 동일설명한레코드가이미존재할경우입력값을무시한다. 없음 InsertIndex 목록 PacketIndex 없음없음복수개의 PacketIndex 목록을입력으로받아새로운레코드를추설명가한다. 목록중에동일한레코드가이미존재할경우해당값을무시한다. - 84 -

나. DATASTRUCT D 구조체 D 는복수개의원소 ( 레코드 ) 를가질수있으며각각의원소를 구분하는 Key 값은 Question 필드가된다. (1) Member [ 표 5-47] 구조체 D 의구성변수 자료형 변수명 설명 문자열 Question DNS 질의패킷의질의문 수치 Count PacketIndex의개수 수치목록 PacketIndex PacketIndex의목록 (2) Method [ 표 5-48] 구조체 D 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 IncreaseCount 문자열 Question 수치 PacketIndex DNS 질의패킷의질의문 Question과수치 PacketIndex를입력으로받으며, 입력된 Question의레코드가이미존재할경우, 해당레코드의 Count를 1 증가시키고, PacketIndex 목록에입력된 PacketIndex를추가한다. 수치 GetItemCount 없음없음없음없음구조체에저장된고유한 Key값을가지는레코드의개수를반환한다. Key 값은 Question 문자열이다. 목록 PullEntirePacketIndexByIndex 수치 Index 없음없음 Index값을입력받아구조체에저장된해당 Index의레코드의 PacketIndex 목록을반환한다. - 85 -

2. 동작설명 [ 표 5-49] 프로세스 8 의동작설명 코드설명코드설명 VAR n = Cq LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) D.IncreaseCount( Cq.GetQuestionByIndex( i ), PacketIndex::Push( Cq.GetPacketIndexByIndex( i ) ) 1. 패킷셋 Cq의전체패킷수를구하여변수 n에할당한다. 2. 다음과정을 Cq의 0번째패킷부터 n-1번째패킷에대하여반복하여수행한다. 2.1. Cq의 i번째패킷의질의문과, 패킷색인번호를입력으로하여구조체 D의 IncreaseCount 함수를호출한다. VAR r = D.GetItemCount( ) / n IF ( r > T R8 ) R8.InsertIndex( D.PullEntirePacketIndexByIndex( i ) ) END IF 3. 구조체 D의레코드개수대비패킷셋 Cq의패킷개수에대한비율을구하여변수 r에저장한다. D의레코드개수가 n에가까울수록질의에중복이적은것이고, 1에가까울수록중복된질의가발생한것이다. 패킷셋 Cq가충분한시간동안수집되었을때, r의값이 1에근접하는것은의도된난수적질의발생으로판단할수있다. 반대로 r이 0에가까워지는경우는단위시간내에많은양의동일한질의가발생한것으로, 그시간과규모의유사도를측정하여기계적으로생성된것인지, 사용자집중에의한것인지를평가할필요성이있다. 4. 측정된수치 r이비정상분류기준 T R8 을넘을경우구조체 D에저장된저장된모든 PacketIndex를 R8에저장한다. - 86 -

제 10 절프로세스 9 : Abnormal Traffic Multiplexer Process 9. Abnormal Traffic Multiplexer Process 9. Abnormal Traffic Multiplexer Input : Client query set Cq Client reply set Cr Authoritative query set Aq Authoritative reply set Ar DATASTRUCT R1, R2, R3, R4, R5, R6, R7, R8 DATASTRUCT T LOOP ( INIT i = 1 ; WHILE i < 9 ; STEP i++ ) T.InsertPacketIndex( Ri.GetEntirePacketIndex( ) ) VAR n = T PACKETLIST P = Cq Cr Aq Ar PACKETLIST A LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) A.InsertPacket( P.GetPacket( T.GetPacketIndexByIndex( i ) ) Output : PACKETLIST A [ 표 5-50] 프로세스 9 의의사코드 - 87 -

1. 구조체 가. DATASTRUCT R1, R2, R3, R4, R5, R6, R7, R8 Process 1 ~ 8에서비정상으로판단된패킷들의색인번호를저장한구조체. 동일한레코드형식을가지며, 각각의구조체는같은레코드값을가질수있다. 색인번호들이나열되는구조로, 색인번호그자체로선후관계가명시되므로스택이나큐, 연결리스트등의자료구조로구현될수있으며, 입력이나출력순서가반드시유지되지않아도된다. 다만처리의효율성을위해정렬될필요성이있다. (1) Member [ 표 5-51] 구조체 Rx 의구성변수 자료형 변수명 설명 수치 PacketIndex 패킷의고유색인번호값 (2) Method [ 표 5-52] 구조체 Rx 의구성함수 반환형입력1 입력2 함수명설명자료형변수명자료형변수명목록 GetEntirePacketIndex 없음없음없음없음저장되어있는모든 PacketIndex 레코드를목록형태로반환한다. - 88 -

나. DATASTRUCT T R1 ~ R8 에저장되어있는패킷색인번호를중복을제거하면서통합하 기위한구조체. (1) Member [ 표 5-53] 구조체 T 의구성변수 자료형 변수명 설명 수치 PacketIndex 유일한색인번호값 (2) Method [ 표 5-54] 구조체 T 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertPacketIndex 목록 PacketIndex 없음없음 PacketIndex 목록을입력으로받아목록안에있는레코드를추가한다. 동일한레코드가이미존재할경우입력값을무시한다. 수치 GetPacketIndexByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드의 PacketIndex 수치를반환한다. 다. PACKETLIST P 목적에따라분리된 Cq, Cr, Aq, Ar 패킷셋을통합하기위한구조체. 분리하기이전의수집된패킷셋을보존하는경우에는별도로재생성할 필요성이없다 - 89 -

(1) Member [ 표 5-55] 구조체 P 의구성변수 자료형 변수명 설명 수치 PacketIndex 고유색인번호 패킷 Packet 패킷원형 (2) Method [ 표 5-56] 구조체 P 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명패킷 GetPacket 수치 PacketIndex 없음없음 PacketIndex 색인번호를입력으로받아번호에해당하는패킷내용설명전체를반환한다. 라. PACKETLIST A Process 1 ~ 8 에서비정상행위를보이는것으로분류된패킷들을추 출하여저장하기위한구조체. (1) Member [ 표 5-57] 구조체 A 의구성변수 자료형 변수명 설명 수치 PacketIndex 고유색인번호 패킷 Packet 패킷원형 - 90 -

(2) Method [ 표 5-58] 구조체 A 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertPacket 패킷 Packet 없음없음설명입력된패킷을순차적으로저장한다. 2. 동작설명 [ 표 5-59] 프로세스 9 의동작설명 코드설명코드설명 DATASTRUCT T LOOP ( INIT i = 1 ; WHILE i < 9 ; STEP i++ ) T.InsertPacketIndex( Ri.GetEntirePacketIndex( ) ) 1. 다음의행위를 i=1에서 i=8의경우까지총 8번반복하여수행한다. 1.1. 구조체 Ri에서저장된모든 PacketIndex를반환받아구조체 T에삽입한다. 구조체 T에중복값이저장될경우에는저장하지않는다. VAR n = T PACKETLIST P = Cq Cr Aq Ar PACKETLIST A LOOP ( INIT i = 0 ; WHILE i < n ; STEP i++ ) A.InsertPacket( P.GetPacket( T.GetPacketIndexByIndex( i ) ) 2. 변수 n에구조체 T의레코드의수를산출하여대입한다. 3. PACKETLIST P에패킷집합 Cq, Cr, Cq, Ar을중복을제거하여삽입한다. 4. 다음행위를 i=0부터 i=n-1의경우까지구조체 T의레코드개수인 n회만큼반복하여수행한다. 4.1 구조체 T의 i번째레코드에서반환되는색인번호를 PACKETLIST P에서검색하여그레코드전체를 PACKETLIST A에삽입한다. - 91 -

제 6 장시스템 1 : 모듈 2 의사코드및 자료구조 제 1 절프로세스 10 : Similarity Estimate 1 Process 10. Similarity Estimate 1 : Packet Interval Similarity [ 표 6-1] 프로세스 10 의의사코드 _1 Process 10. Similarity Estimate 1 : Packet Interval Similarity Input : PacketSet P // PacketSet of Current Time slot VAR n // Number of Time slots of a Detecting window Threshold T s1 // Threshold of Packet Interval Similarity DATASTRUCT S1 = { Domain, Similarity } DATASTRUCT D c = { Domain, LIST {SrcAddr, Time} } DATASTRUCT D k = { Domain, LIST {SrcAddr, Time} }(k = 0 ~ n-1 ) LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) D k = Global::GetCachedDomainIpTableOfTimeSlot( k ) VAR m = P LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) IF ( P.GetPacketType( i ) == Type::ClientQuery ) D c.insertitem( P.GetQuestionDomainByIndex( i ), P.GetSrcAddrByIndex( i ), P.GetTimeByIndex( i ) ) END IF Output : DATASTRUCT S1-92 -

[ 표 6-2] 프로세스 10 의의사코드 _2 Process 10. Similarity Estimate 1 : Packet Interval Similarity Input : PacketSet P // PacketSet of Current Time slot VAR n // Number of Time slots of a Detecting window Threshold T s1 // Threshold of Packet Interval Similarity VAR m = D c LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR a = D c.getdomainbyindex( i ) VAR ns = D c.getnumofsrcaddrbyindex( i ) VAR d = 0 LIST lt j = { LIST Time, Similarity }(j = 0 ~ ns-1 ) TIME tp LOOP ( INIT j = 0 ; WHILE j < ns ; STEP j++ ) VAR src = D c.getsrcaddrbyindex( i, j ) TIME tc = D c.gettimebyindex( i, j ) LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) VAR idx = D k.findsrcaddrbydomaininverse( a, src ) WHILE ( idx > -1) TIME tp = D k.gettimebysrcaddr( idx, src ) lt j.insertitem( tc - tp ) tc = tp idx = D k.findsrcaddrbydomaininverse( a, src ) END WHILE WHILE lt j.normalizebyaverage( ) lt j.setsimliarity( 1 - lt j.getvectordistance( ) / lt j.getmaxvectordistance( )) IF ( lt j.getmaxsimilarity( ) > T s1 ) S1.InsertItem( a, lt j. GetMaxSimilarity( ) ) END IF Output : DATASTRUCT S1-93 -

1. 구조체 가. PacketSet P 탐지단위시간안에수집된패킷집합. (1) Member [ 표 6-3] 구조체 P 의구성변수 자료형 변수명 설명 수치 PacketIndex 고유색인번호 패킷 Packet 패킷원형 (2) Method [ 표 6-4] 구조체 P 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명나열 GetPacketType 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의 Type을반환한설명다. ClientQuery, ClientReply, AuthoritativeQuery, AuthoritativeReply 中문자열 GetQuestionByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의 Question 문자열설명을반환한다. IP주소 GetSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의근원지주소를설명반환한다. 나 DATASTRUCT S1 Process 10. Packet Interval Similarity 에서측정된 DNS 요청의발생 시간간격유사도수치와요청된도메인목록을저장하는구조체. - 94 -

(1) Member [ 표 6-5] 구조체 S1 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 실수 Similarity 0.0 ~ 1.0의범위를가지는유사도 (2) Method [ 표 6-6] 구조체 S1 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명목록 InsertItem 문자열 Domain 수치 Similarity 입력된 Domain과 Similarity값을레코드에추가한다. 동일한설명 Domain이레코드중에존재할경우중복을허용하여추가한다. 다. DATASTRUCT D c 프로세스가처리하는현재단위시간의패킷셋정보를저장하기위한 구조체. Domain 을레코드의 Key 값으로하여해당 Domain 을질의한근 원지주소 (SrcAddr) 와패킷수집시간 (Time) 을목록형태로저장한다. (1) Member [ 표 6-7] 구조체 D c 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 목록 { SrcAddr, Time } IP주소 SrcAddr 패킷의근원지 IP 주소 시간 Time 패킷이수집된시간 - 95 -

(2) Method [ 표 6-8] 구조체 D c 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertItem 문자열 Domain IP주소 SrcAddr 입력 Domain을 Key값으로하여레코드를추가하고, SrcAddr과 Time을목록에추가한다. Domain에대한레코드가없을경우새로운레코드를생성하고, 존재할경우 SrcAddr과 Time만을해당 Domain 레코드의목록에추가한다. SrcAddr과 Time이모두일치하는경우에만추가하지않는다. 문자열 GetDomainByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드의 Domain 값을반환한다. 수치 GetNumOfSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드가가진 SrcAddr 목록의원소개수를반환한다. 시간 GetTimeByIndex 수치 Index 수치 ListIndex Index와 SrcAddr, Time 목록의색인을입력으로받아해당 Index 순서에있는레코드의 SrcAddr, Time 목록에서 ListIndex 순서에있는 Time을반환한다. 라. DATASTRUCT D i (i = 0 ~ i = n-1 ) 프로세스가처리하는단위시간의과거패킷셋정보를읽어오기위한구조체. Domain을레코드의 Key값으로하여해당 Domain을질의한근원지주소 (SrcAddr) 와패킷수집시간 (Time) 을목록형태로저장한다. i가 0일때, 현재를제외한가장최근의단위시간패킷셋에대한정보를저장하고 i가커질수록한단위시간씩과거의패킷셋정보를저장하는데사용된다. - 96 -

(1) Member [ 표 6-9] 구조체 D i 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 목록 { SrcAddr, Time } IP주소 SrcAddr 패킷의근원지 IP 주소 시간 Time 패킷이수집된시간 (2) Method [ 표 6-10] 구조체 D i 의구성함수 반환형입력1 입력2 함수명설명자료형변수명자료형변수명없음 InsertItem 문자열 Domain IP주소 SrcAddr 입력 Domain을 Key값으로하여레코드를추가하고, SrcAddr과 Time을목록에추가한다. Domain에대한레코드가없을경우새로운레코드를생성하고, 존재할경우 SrcAddr과 Time만을해당 Domain 레코드의목록에추가한다. SrcAddr과 Time이모두일치하는경우에만추가하지않는다. 문자열 GetDomainByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드의 Domain 값을반환한다. 수치 GetNumOfSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드가가진 SrcAddr 목록의원소개수를반환한다. 시간 GetTimeByIndex 수치 Index 수치 ListIndex Index와 SrcAddr, Time 목록의색인을입력으로받아해당 Index 순서에있는레코드의 SrcAddr, Time 목록에서 ListIndex 순서에있는 Time을반환한다. 수치 FindSrcAddrByDomain 문자열 Domain IP주소 SrcAddr Domain 문자열과근원지주소를입력으로받아전체레코드중에해당 Domain를 Key로하는레코드가존재하고, 레코드의 SrcAddr 목록안에입력 SrcAddr과일치하는원소가있는지검색하여, 존재하면해당 SrcAddr 목록의색인번호, 존재하지않을경우 -1을반환한다. - 97 -

마. LIST lt j (j=0 ~ j=ns-1) ns : Dc 의 i 번째레코드의 {SrcAddr, Time} 목록의원소개수 특정 Domain을요청한근원지에서발생한요청들이과거단위시간동안에도발생했을경우그시간을목록으로저장하여비교하기위한구조체. 한개의 lt j 는한개의 Domain에대한정보를가지며, lt0 부터 lt ns-1 까지현재단위시간동안해당 Domain을요청한모든 SrcAddr을총 ns 개의구조체로저장한다. 한개의구조체는측정에사용되는과거단위시간에발생한동일 Domain, 동일 SrcAddr의시간정보를저장하기위한 Time 목록을가지고있다. ns개의 lt j 를배열로구현할경우 [ SrcAddr( j ) ][ Time ] 의 2차원배열로구현될수있으며, Domain 마다구조체를재사용하지않고별개의저장공간을할당할경우 3차원구조체를구성하게된다. Similarity를측정하는데사용되는단위는 SrcAddr로, [ Time ] 을벡터로놓고, 벡터거리를사용하여유사도를측정한다. (1) Member [ 표 6-11] 구조체 lt j 의구성변수 자료형 변수명 설명 목록 Time k = 0 ~ n-1 수치 Similarity - 98 -

(2) Method [ 표 6-12] 구조체 lt j 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertItem 시간 Time 없음없음목록 Time에시간차 Time을레코드로추가한다. TimeSlot의값이증가하면서바로이전에추가된시간과의시간차를계산하여추가한다. 없음 NormalizeByAverage 없음없음없음없음목록구조체 lt j 에저장된목록 Time의값을평균값의편차값으로변환한다. 수치 GetVectorDistance 없음없음없음없음목록구조체 lt j 에저장된목록 Time의값들을 1차원벡터로변환하여그길이를구한다. 수치 GetMaxVectorDistance 없음없음없음없음목록구조체 lt j 에저장된목록 Time의값들이모두평균과동일한값이라고가정했을때의벡터의길이를산출한다. 없음 SetSimliarity 수치 Similarity 없음없음목록구조체 lt j 에저장된목록 Time의최대벡터길이대비를구하여 1에서감산한값을목록구조체 lt j 의 Similarity값으로할당한다. 수치 GetMaxSimliarity 없음없음없음없음목록구조체 lt j 에저장된 Similarity값중가장 1에가까운값을반환한다. - 99 -

2. 동작설명 [ 표 6-13] 프로세스 10 의동작설명 _1 코드설명코드설명코드설명 DATASTRUCT S1 = { Domain, Similarity } DATASTRUCT D c = { Domain, LIST {SrcAddr, Time} } DATASTRUCT D k = { Domain, LIST {SrcAddr, Time}}(k = 0 ~ n-1 ) 1. 유사도측정값의저장에사용할구조체와입력패킷셋을 Domain 을 Key로관리할구조체를선언 LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) D k = Global::GetCachedDomainIpTableOfTimeSlot( k ) 2. 과거의패킷셋에서 Domain과근원지주소 (SrcAddr), 수집시간 (Time) 의상관내역을저장한저장장소에서 n개단위시간만큼의정보를구조체 D 0 ~D n-1 에받아온다. VAR m = P LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) IF ( P.GetPacketType( i ) == Type::ClientQuery ) D c.insertitem( P.GetQuestionDomainByIndex( i ), P.GetSrcAddrByIndex( i ), P.GetTimeByIndex( i ) ) END IF 3. 다음의작업을현재단위시간의입력패킷셋 P의모든패킷 m개에대하여순차적으로반복한다. 3.1 P의 i번째패킷의 Domain, SrcAddr, Time 정보를구조체 D c 에삽입한다. - 100 -

[ 표 6-14] 프로세스 10 의동작설명 _2 코드 설명 VAR m = D c LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR a = D c.getdomainbyindex( i ) VAR ns = D c.getnumofsrcaddrbyindex( i ) VAR d = 0 LIST lt j = { LIST Time, Similarity }(j = 0 ~ ns-1 ) TIME tp LOOP ( INIT j = 0 ; WHILE j < ns ; STEP j++ ) VAR src = D c.getsrcaddrbyindex( i, j ) TIME tc = D c.gettimebyindex( i, j ) LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) VAR idx = D k.findsrcaddrbydomaininverse( a, src ) WHILE ( idx > -1) TIME tp = D k.gettimebysrcaddr( idx, src ) lt j.insertitem( tc - tp ) tc = tp idx = D k.findsrcaddrbydomaininverse( a, src ) END WHILE WHILE lt j.normalizebyaverage( ) lt j.setsimliarity( 1 - lt j.getvectordistance( ) / lt j.getmaxvectordistance( ) ) IF ( GetMaxSimilarity( lt j ) > T s1 ) S1.InsertItem( a, lt j. GetMaxSimilarity( ) ) END IF 4. 다음작업을구조체 D c 의모든고유한 Domain m개에대하여수행한다. 4.1. 다음작업을구조체 D c 의 i번째레코드의 Domain의 {SrcAddr, Time} 목록의모든원소 ns개에대하여 j=0에서 j=ns-1까지반복수행한다. 4.1.1. 다음작업을과거단위시간의패킷정보구조체 Dk에대하여 k=0 부터 k=n-1까지 n개에대하여반복수행한다. 4.1.1.1. 단위시간동안에수집된패킷에서발견된 Domain, SrcAddr을현재에서과거순으로탐색하여더이상원소가존재하지않을때까지검색하면서마지막발견된원소의시간과의편차를목록구조체 lt j 에삽입한다. 4.1.2. 목록구조체 lt j 의값들을평균값에대한편차로일반화한다. 4.1.3. 일반화된목록구조체 lt j 의값들을벡터길이로환산하여유사도를측정하고목록에삽입한다. 4.2. 목록구조체 lt j 의유사도중최고값을검색하여입계값 T s1 과비교한다. 임계값을초과한경우구조체 S1에추가한다. - 101 -

제 2 절프로세스 11 : Similarity Estimate 2 Process 11. Similarity Estimate 2 : Packet Frequency Similarity Process 11. Similarity Estimate 2 : Packet Frequency Similarity Input : PacketSet P // PacketSet of Current Time slot VAR n // Number of Time slots of a Detecting window Threshold T s2 // Threshold of Packet Frequency Similarity DATASTRUCT S2 = { Domain, Similarity } DATASTRUCT D c = { Domain, LIST {SrcAddr, Count } } DATASTRUCT D i = { Domain, LIST {SrcAddr, Count } }(i = 0 ~ n-1 ) LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) D i = Global::GetCachedDomainIpTableOfTimeSlot( i ) VAR m = P LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) IF ( P.GetPacketType( i ) == Type::ClientQuery ) D c.insertitem( P.GetQuestionDomainByIndex( i ), P.GetSrcAddrByIndex( i ) ) END IF Output : DATASTRUCT S2 [ 표 6-15] 프로세스 11 의의사코드 _1-102 -

Process 11. Similarity Estimate 2 : Packet Frequency Similarity Input : PacketSet P // PacketSet of Current Time slot VAR n // Number of Time slots of a Detecting window Threshold T s2 // Threshold of Packet Frequency Similarity VAR m = D c LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR a = D c.getdomainbyindex( i ) VAR ns = D c.getnumofsrcaddrbyindex( i ) VAR d = 0 LIST lc k = { LIST Count, Similarity }(k = 0 ~ n-1 ) LIST ccnt VAR cp LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) LOOP ( INIT j = 0 ; WHILE j < ns ; STEP j++ ) VAR src = D c.getsrcaddrbyindex( i, j ) VAR cc = D c.getcountbyindex( i, j ) ccnt.insertitem( cc ) VAR idx = D k.findsrcaddrbydomain( a, src ) IF ( idx > -1 ) VAR cp = D k.getcountbysrcaddr( idx, src ) lc k.insertitem( cp ) ELSE lck.insertitem( cc ) END IF lc k. SetSimliarity( lc k.getcosinesimilarity( ccnt ) ) IF ( GetMaxSimilarity( lc k ) > T s2 ) S2.InsertItem( a, GetMaxSimilarity( lc k ) ) END IF Output : DATASTRUCT S2 [ 표 6-16] 프로세스 11 의의사코드 _2 1. 구조체 가. PacketSet P 탐지단위시간안에수집된패킷집합. - 103 -

(1) Member [ 표 6-17] 구조체 P 의구성변수 자료형 변수명 설명 수치 PacketIndex 고유색인번호 패킷 Packet 패킷원형 (2) Method [ 표 6-18] 구조체 P 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명나열 GetPacketType 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의 Type을반환한설명다. ClientQuery, ClientReply, AuthoritativeQuery, AuthoritativeReply 中문자열 GetQuestionByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의 Question 문자열설명을반환한다. IP주소 GetSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의근원지주소를설명반환한다. 나. DATASTRUCT S2 Process 11. Packet Frequency Similarity 에서측정된단위시간당동일 DNS 요청의발생규모유사도수치와요청된도메인목록을저장하는 구조체. - 104 -

(1) Member [ 표 6-19] 구조체 S2 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 실수수치 Similarity 0.0 ~ 1.0의범위를가지는유사도 (2 Method [ 표 6-20] 구조체 S2 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명목록 InsertItem 문자열 Domain 수치 Similarity 입력된 Domain과 Similarity값을레코드에추가한다. 동일한설명 Domain이레코드중에존재할경우중복을허용하여추가한다. 다. DATASTRUCT D c 프로세스가처리하는현재단위시간의패킷셋정보를저장하기위한구조체. Domain을레코드의 Key값으로하여해당 Domain을질의한근원지주소 (SrcAddr) 와동일한근원지에서발생한요청의개수를목록형태로저장한다. (1) Member [ 표 6-21] 구조체 D c 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 목록 { SrcAddr, Count} IP주소 SrcAddr 패킷의근원지 IP 주소 수치 Count 동일근원지에서수집된패킷수 - 105 -

(2) Method [ 표 6-22] 구조체 D c 의구성함수 반환형입력1 입력2 함수명설명자료형변수명자료형변수명없음 InsertItem 문자열 Domain IP주소 SrcAddr 입력 Domain을 Key값으로하여레코드를추가하고, SrcAddr과 Time을목록에추가한다. Domain에대한레코드가없을경우새로운레코드를생성하고, SrcAddr을 Count값을 1로하여저장한다. 레코드가존재할경우 SrcAddr를해당레코드에서탐색하고, 동일한 SrcAddr이목록에존재하는경우 Count를 1증가, 존재하지않는경우목록에 Count를 1로하는새 SrcAddr 원소를추가한다. 문자열 GetDomainByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드의 Domain 값을반환한다. 수치 GetNumOfSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드가가진 {SrcAddr, Count} 목록의원소개수를반환한다. 수치 GetCountByIndex 수치 Index 수치 ListIndex Index와 {SrcAddr, Count} 목록의색인을입력으로받아해당 Index 순서에있는레코드의 SrcAddr, Count 목록에서 ListIndex 순서에있는 Count를반환한다. 라. DATASTRUCT D i (i = 0 ~ i = n-1 ) 프로세스가처리하는단위시간의과거패킷셋정보를읽어오기위한구조체. Domain을레코드의 Key값으로하여해당 Domain을질의한근원지주소 (SrcAddr) 와동일한근원지로부터발생한요청의수를목록형태로저장한다. i가 0일때, 현재를제외한가장최근의단위시간패킷셋에대한정보를저장하고 i가커질수록한단위시간씩과거의패킷셋정보를저장하는데사용된다. - 106 -

(1) Member [ 표 6-23] 구조체 D i 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 목록 { SrcAddr, Count } IP주소 SrcAddr 패킷의근원지 IP 주소 수치 Count 동일근원지에서수집된패킷수 (2) Method [ 표 6-24] 구조체 D i 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명수치 GetCountBySrcAddr 수치 Index IP주소 SrcAddr Index와 SrcAddr을입력으로받아해당순서에있는레코드의 {SrcAddr, Count} 목록에서입력된 SrcAddr과일치하는원소를찾는다. 원소가존재할경우해당원소의 Count값을반환하고, 존재하지않을경우 -1 값을반환한다. 문자열 GetDomainByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드의 Domain 값을반환한다. 수치 GetNumOfSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드가가진 {SrcAddr, Count} 목록의원소개수를반환한다. 수치 GetCountByIndex 수치 Index 수치 ListIndex Index와 {SrcAddr, Count} 목록의색인을입력으로받아해당 Index 순서에있는레코드의 SrcAddr, Count 목록에서 ListIndex 순서에있는 Count를반환한다. 수치 FindSrcAddrByDomain 문자열 Domain IP주소 SrcAddr Domain 문자열과근원지주소를입력으로받아전체레코드중에해당 Domain를 Key로하는레코드가존재하고, 레코드의 SrcAddr 목록안에입력 SrcAddr과일치하는원소가있는지검색하여, 존재하면해당 SrcAddr 목록의색인번호, 존재하지않을경우 -1을반환한다. - 107 -

마. LIST lc k (k=0 ~ k=n-1) n : 유사도비교대상과거 TimeSlot의개수특정 Domain을요청한근원지에서발생한요청들이과거단위시간동안에도발생했을경우그발생규모를목록으로저장하여비교하기위한구조체. 한개의 lc k (k=0 ~ k=n-1) 는한개의 Domain에대한정보를가지며, lc 0 부터 lc n-1 까지 n 개의비교대상과거 TimeSlot 동안의정보를저장한다. 현재 TimeSlot동안해당 Domain을요청한 SrcAddr이과거 TimeSlot동안에는몇건이나동일한요청을수행했는지를기록한다. 구조체는측정에사용되는과거단위시간에발생한동일 Domain, 동일 SrcAddr에서발생한요청의개수를저장하기위한 Count 목록을가지고있다. n개의 lc k 를배열로구현할경우 [ TimeSlot ][ SrcAddr( j ) ] 의 2차원배열로구현될수있으며, Domain 마다구조체를재사용하지않고별개의저장공간을할당할경우 3차원구조체를구성하게된다. Similarity를측정하는데사용되는단위는 TimeSlot으로, SrcAddr에대한 Count를벡터로놓고, 현재의 TimeSlot의 Count 벡터와의 Cosine 유사도를각 TimeSlot에대해산출한다. 대상 Domain에대해과거 TimeSlot들중최대유사도가임계값을넘을경우해당 Domain을의심목록에추가한다. (1) Member [ 표 6-25] 구조체 lc k 의구성변수 자료형 변수명 설명 목록 Count k = 0 ~ n-1 수치 Similarity - 108 -

(2) Method [ 표 6-26] 구조체 lc k 의구성변수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertItem 수치 Count 없음없음목록 Count에입력패킷개수 Count를레코드로추가한다. 수치 GetCosineSimilarity 목록 Count 없음없음목록구조체 lc k 에저장된목록 Count의값들을 1차원벡터로변환하고, 현재 TimeSlot의측정값목록을입력받아벡터간 Cosine 유사도의절대값을산출한다. 현재 TimeSlot의측정값과 SrdAddr별개수나비율이유사하거나역상관관계를가질수록 1에가깝게, 상이할수록 0에가깝게나타난다. 수치 GetMaxVectorDistance 없음없음없음없음목록구조체 lc k 에저장된 ns개의목록배열 Count[k] 의값이모두평균과동일한값이라고가정했을때의벡터의길이를산출한다. 평균값 5의 4개원소를가진벡터라고가정하면 [-5, -5, 5, 5] 를가정하여, 길이는 10 이된다. 없음 SetSimilarity 수치 Similarity 없음없음목록구조체 lc k 에입력된 Similarity값을할당한다. 수치 GetMaxSimliarity 없음없음없음없음모든 k에대해목록구조체 lc k 에저장된 Similarity값중가장 1에가까운값을반환한다. - 109 -

2. 동작설명 [ 표 6-27] 프로세스 11 의동작설명 _1 코드설명코드설명코드설명 DATASTRUCT S2 = { Domain, Similarity } DATASTRUCT D c = { Domain, LIST SrcAddr } DATASTRUCT D k = { Domain, LIST {SrcAddr,Count}}(k = 0 ~ n-1 ) 1. 유사도측정값의저장에사용할구조체와입력패킷셋을 Domain 을 Key로관리할구조체를선언 LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) D k = Global::GetCachedDomainIpTableOfTimeSlot( k ) 2. 과거의패킷셋에서 Domain과근원지주소 (SrcAddr), 수집개수 (Count) 의상관내역을저장한저장장소에서 n개단위시간만큼의정보를구조체 D 0 ~D n-1 에받아온다. VAR m = P LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) IF ( P.GetPacketType( i ) == Type::ClientQuery ) D c.insertitem( P.GetQuestionByIndex( i ), P.GetSrcAddrByIndex( i ) ) END IF 3. 다음의작업을현재단위시간의입력패킷셋 P의모든패킷 m개에대하여순차적으로반복한다. 3.1 P의 i번째패킷의 Domain, SrcAddr, Count 정보를구조체 D c 에삽입한다. - 110 -

[ 표 6-28] 프로세스 11 의동작설명 _2 VAR m = D c LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR a = D c.getdomainbyindex( i ) VAR ns = D c.getnumofsrcaddrbyindex( i ) VAR d = 0 LIST lc k = { LIST Count, Similarity }(k = 0 ~ n-1 ) LIST ccnt VAR cp 코드 LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) LOOP ( INIT j = 0 ; WHILE j < ns ; STEP j++ ) VAR src = D c.getsrcaddrbyindex( i, j ) VAR cc = D c.getcountbyindex( i, j ) ccnt.insertitem( cc ) VAR idx = D k.findsrcaddrbydomain( a, src ) IF ( idx > -1 ) VAR cp = D k.getcountbysrcaddr( idx, src ) lc k.insertitem( cp ) ELSE lck.insertitem( cc ) END IF lc k.setsimliarity( lc k.getcosinesimilarity( ccnt ) ) 설명 IF ( GetMaxSimilarity( lc k ) > T s2 ) S2.InsertItem( a, GetMaxSimilarity( lc k ) ) END IF 4. 다음작업을구조체 D c 의모든고유한 Domain m개에대하여수행한다. 4.1. 다음작업을과거단위시간의패킷정보구조체 D k 에대하여 k=0 부터 k=n-1까지 n개에대하여반복수행한다. 4.1.1. 다음작업을구조체 D c 의 i번째레코드의 Domain의 {SrcAddr, Count} 목록의모든원소 ns개에대하여 j=0에서 j=ns-1까지반복수행한다. 4.1.1.1. 단위시간동안에수집된패킷에서발견된 Domain, SrcAddr을현재에서과거순으로탐색하여발견된레코드의 Count값을목록구조체 lc k 에삽입한다. 4.1.2. 목록구조체 lc k 의목록 Count를벡터로변환하여현재 TimeSlot 의목록 ccnt와 Consine 유사도를측정하고그절대값을도출한다. 4.1.3. 측정된유사도를측정하고목록구조체 lc k 에삽입한다. 4.2. 목록구조체 lc k 의유사도중최고값을검색하여입계값 T s2 과비교한다. 임계값을초과한경우구조체 S2에추가한다. - 111 -

제 3 절프로세스 12 : Similarity Estimate 3 Process 12. Similarity Estimate 3 : Packet Path Similarity Process 12. Similarity Estimate 3 : Packet path similarity Input : PacketSet P VAR n // Number of Time slots of a Detecting window Threshold T lps // Lower path similarity threshold Threshold T hps // Upper path similarity threshold DATASTRUCT S3 = { Domain, Similarity } DATASTRUCT D c = { Domain, LIST SrcAddr } DATASTRUCT D k = { Domain, LIST SrcAddr }(k = 0 ~ n-1 ) LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) D k = Global::GetCachedDomainIpTableOfTimeSlot( k ) VAR m = P LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) IF ( P.GetPacketType( i ) == Type::ClientQuery ) D c.insertitem( P.GetQuestionByIndex( i ), P.GetSrcAddrByIndex( i ) ) END IF VAR m = Dc LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR domain = D c.getdomainbyindex( i ) VAR ns = D c.getnumofsrcaddrbyindex( i ) VAR d = 0 LOOP ( INIT j = 0 ; WHILE j < ns ; STEP j++ ) VAR src = D c.getsrcaddrbyindex( i, j ) LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) IF ( D k.findsrcaddrbydomain( domain, src ) == TRUE ) d++ END IF VAR ps = d / ( ns * n ) IF ( ps < T lps ps > T hps ) S3.InsertItem( domain, ps ) END IF Output : DATASTRUCT S3 [ 표 6-29] 프로세스 12 의의사코드 - 112 -

1. 구조체 가. PacketSet P 탐지단위시간안에수집된패킷집합. (1) Member [ 표 6-30] 구조체 P 의구성변수 자료형 변수명 설명 수치 PacketIndex 고유색인번호 패킷 Packet 패킷원형 (2) Method [ 표 6-31] 구조체 P 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명나열 GetPacketType 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의 Type을반환한다. ClientQuery, ClientReply, AuthoritativeQuery, AuthoritativeReply 中문자열 GetQuestionByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의 Question 문자열을반환한다. IP주소 GetSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의근원지주소를반환한다. - 113 -

나. DATASTRUCT S3 Process 12. Packet Path Similarity 에서측정된단위시간당동일 DNS 요청의발생근원지유사도수치와요청된도메인목록을저장하는구조 체. (1) Member [ 표 6-32] 구조체 S3 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 실수수치 Similarity 0.0 ~ 1.0의범위를가지는유사도 (2) Method [ 표 6-33] 구조체 S3 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명목록 InsertItem 문자열 Domain 수치 Similarity 입력된 Domain과 Similarity값을레코드에추가한다. 동일한설명 Domain이레코드중에존재할경우중복을허용하여추가한다. 다. DATASTRUCT D c 프로세스가처리하는현재단위시간의패킷셋정보를저장하기위한구조체. Domain을레코드의 Key값으로하여해당 Domain을질의한근원지주소 (SrcAddr) 와동일한근원지에서발생한요청을목록형태로저장한다. - 114 -

(1) Member [ 표 6-34] 구조체 D c 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 목록 { SrcAddr } IP주소 SrcAddr 패킷의근원지 IP 주소 (2) Method [ 표 6-35] 구조체 D c 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertItem 문자열 Domain IP주소 SrcAddr 입력 Domain을 Key값으로하여레코드를추가하고, SrcAddr과 Time을목록에추가한다. Domain에대한레코드가없을경우새로운레코드를생성하고, SrcAddr을 Count값을 1로하여저장한다. 레코드가존재할경우 SrcAddr를해당레코드에서탐색하고, 동일한 SrcAddr이목록에존재하는경우 Count를 1증가, 존재하지않는경우목록에 Count를 1로하는새 SrcAddr 원소를추가한다. 문자열 GetDomainByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드의 Domain 값을반환한다. IP주소 GetSrcAddrByIndex 수치 Index 수치 ListIndex Index를입력으로받아해당순서에있는패킷의근원지주소목록중 LintIndex 색인에있는근원지주소를반환한다. 수치 GetNumOfSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드가가진 {SrcAddr, Count} 목록의원소개수를반환한다. 수치 GetCountByIndex 수치 Index 수치 ListIndex Index와 {SrcAddr, Count} 목록의색인을입력으로받아해당 Index 순서에있는레코드의 SrcAddr, Count 목록에서 ListIndex 순서에있는 Count를반환한다. - 115 -

라. DATASTRUCT D i (i = 0 ~ i = n-1 ) 프로세스가처리하는단위시간의과거패킷셋정보를읽어오기위한구조체. Domain을레코드의 Key값으로하여해당 Domain을질의한근원지주소 (SrcAddr) 와동일한근원지로부터발생한요청을목록형태로저장한다. i가 0일때, 현재를제외한가장최근의단위시간패킷셋에대한정보를저장하고 i가커질수록한단위시간씩과거의패킷셋정보를저장하는데사용된다. (1) Member [ 표 6-36] 구조체 D i 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 목록 {SrcAddr} IP주소 SrcAddr 패킷의근원지 IP 주소 - 116 -

(2) Method [ 표 6-37] 구조체 D i 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명수치 GetCountBySrcAddr 수치 Index IP주소 SrcAddr Index와 SrcAddr을입력으로받아해당순서에있는레코드의 {SrcAddr, Count} 목록에서입력된 SrcAddr과일치하는원소를찾는다. 원소가존재할경우해당원소의 Count값을반환하고, 존재하지않을경우 -1 값을반환한다. 문자열 GetDomainByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드의 Domain 값을반환한다. 수치 GetNumOfSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드가가진 {SrcAddr, Count} 목록의원소개수를반환한다. 수치 GetCountByIndex 수치 Index 수치 ListIndex Index와 {SrcAddr, Count} 목록의색인을입력으로받아해당 Index 순서에있는레코드의 SrcAddr, Count 목록에서 ListIndex 순서에있는 Count를반환한다. 수치 FindSrcAddrByDomain 문자열 Domain IP주소 SrcAddr Domain 문자열과근원지주소를입력으로받아전체레코드중에해당 Domain를 Key로하는레코드가존재하고, 레코드의 SrcAddr 목록안에입력 SrcAddr과일치하는원소가있는지검색하여, 존재하면해당 SrcAddr 목록의색인번호, 존재하지않을경우 -1을반환한다. - 117 -

2. 동작설명 [ 표 6-38] 프로세스 12 의동작설명 _1 코드설명코드설명코드설명 DATASTRUCT S3 = { Domain, Similarity } DATASTRUCT D c = { Domain, LIST SrcAddr } DATASTRUCT D k = { Domain, LIST SrcAddr }(k = 0 ~ n-1 ) 1. 유사도측정값의저장에사용할구조체와입력패킷셋을 Domain 을 Key로관리할구조체를선언 LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) D k = Global::GetCachedDomainIpTableOfTimeSlot( k ) 2. 과거의패킷셋에서 Domain과근원지주소 (SrcAddr), 수집개수 (Count) 의상관내역을저장한저장장소에서 n개단위시간만큼의정보를구조체 D 0 ~D n-1 에받아온다. VAR m = P LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) IF ( P.GetPacketType( i ) == Type::ClientQuery ) D c.insertitem( P.GetQuestionByIndex( i ), P.GetSrcAddrByIndex( i ) ) END IF 3. 다음의작업을현재단위시간의입력패킷셋 P의모든패킷 m개에대하여순차적으로반복한다. 3.1 P의 i번째패킷의 Domain, SrcAddr, Count 정보를구조체 D c 에삽입한다. - 118 -

[ 표 6-39] 프로세스 12 의동작설명 _2 VAR m = Dc LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) VAR domain = D c.getdomainbyindex( i ) VAR ns = D c.getnumofsrcaddrbyindex( i ) VAR d = 0 코드 설명 LOOP ( INIT j = 0 ; WHILE j < ns ; STEP j++ ) VAR src = D c.getsrcaddrbyindex( i, j ) LOOP ( INIT k = 0 ; WHILE k < n ; STEP k++ ) IF ( D k.findsrcaddrbydomain( domain, src ) == TRUE ) d++ END IF VAR ps = d / ( ns * n ) IF ( ps < T lps ps > T hps ) S3.InsertItem( domain, ps ) END IF 4. 다음작업을구조체 D c 의모든고유한 Domain m개에대하여수행한다. 4.1. 다음작업을구조체 D c 의 i번째레코드의 Domain의 {SrcAddr, Count} 목록의모든원소 ns개에대하여 j=0에서 j=ns-1까지반복수행한다. 4.1.1. 변수 src에 D c 의 i번째 Domain의 j번째근원지주소를대입한다. 4.1.2. 다음작업을과거단위시간의패킷정보구조체 D k 에대하여 k=0 부터 k=n-1까지 n개에대하여반복수행한다. 4.1.2.1. 단위시간동안에수집된패킷에서발견된 Domain, SrcAddr을현재에서과거순으로탐색하여일치하는레코드가발견되면변수 d를 1 증가시킨다. 4.2. 계산된 d의값을고유한 Domain, SrcAddr쌍의최대수인 (ns*n) 으로나누어패킷경로유사도변수 ps에대입한다. 4.3 ps의값이상한입계치 T hps 를초과하거나하한임계치 T lps 미만인경우, 구조체 S3에해당 Domain과유사도 ps를추가한다. - 119 -

제 4 절프로세스 13 : Similarity Estimate 4 Process 13. Similarity Estimate 4 : Group Activity Similarity [ 표 6-40] 프로세스 13 의의사코드 _1 Process 13. Similarity Estimate 4 : Group Activity Similarity Input : PacketSet P Threshold Tgs // Threshold of group activity similarity DATASTRUCT D = { Domain, LIST { IpAddr } } LIST Q t = { Domain, IpAddr } // DNS Queries on a TimeSlot t LIST A t = { Domain } VAR m = P LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) IF ( P.GetPacketType( i ) == Type::ClientQuery ) Q t.insertitem( P.GetQuestionByIndex( i ), P.GetSrcAddrByIndex( i ) ) END IF VAR n = Q t VAR cnt LIST IpList i LOOP (INIT i=0 ; UNTIL i = n ; STEP i++ ) D.InsertItem( Qt.GetDomainByIndex( i ), Qt.GetSrcAddrByIndex( i ) ) IF ( A t.finddomain( D.GetDomainByIndex( i ) ) < 0 ) A t.insertitem( D.GetDomainByIndex( i ) ) IpList i = D.GetIpListByIndex( i ) IpList i.insertitem( Qt.GetIpAddrByIndex( i ) ) ELSE IF ( IpList k.findaddr( Qt.GetIpAddrByIndex( i ) ) < 0 ) cnt i = IpList i IpList i.insertitem( Qt.GetIpAddrByIndex( i ) ) END IF Output : DATASTRUCT S4, LIST BL, LIST WL - 120 -

[ 표 6-41] 프로세스 13 의의사코드 _2 Process 13. Similarity Estimate 4 : Group Activity Similarity Input : PacketSet P Threshold T gs // Threshold of group activity similarity DATASTRUCT S4 LIST BL = { Domain } // Black List LIST WL = { Domain } // White List VAR m m = D LOOP (INIT k=0 ; UNTIL k = m ; STEP k++ ) VAR DN1 = A t1.getdomainbyindex( k ) VAR DN2 = A t2. GetDomainByIndex( k ) IF (A t1. GetDomainByIndex( k ) ) == (A t. GetDomainByIndex( k ) ) VAR S = GetSimilarity( A t1.getiplist( DN1 ), A t2.getiplist( DN2 ) ) IF ( S > T gs ) S4.InsertItem(D.GetDomainByIndex( k ), S) ELSE IF (S == -1) BL.Insert( D.GetDomainByIndex( k ) ) ELSE WL.InserItem( D.GetDomainByIndex( k ) ) END IF END IF Output : DATASTRUCT S4, LIST BL, LIST WL 1. 구조체 가. PacketSet P 탐지단위시간안에수집된패킷집합. (1) Member [ 표 6-42] 구조체 P 의구성변수 자료형 변수명 설명 수치 PacketIndex 고유색인번호 패킷 Packet 패킷원형 - 121 -

(2) Method [ 표 6-43] 구조체 P 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명나열 GetPacketType 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의 Type을반환한다. ClientQuery, ClientReply, AuthoritativeQuery, AuthoritativeReply 中문자열 GetQuestionByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의 Question 문자열을반환한다. IP주소 GetSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는패킷의근원지주소를반환한다. - 122 -

나. DATASTRUCT S4 Process 13. Group Activity Similarity 에서측정된단위시간당동일 DNS 요청의동일행동그룹의유사도수치와요청된도메인목록을저 장하는구조체. (1) Member [ 표 6-44] 구조체 S4 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 실수수치 Similarity 0.0 ~ 1.0의범위를가지는유사도 (2) Method [ 표 6-45] 구조체 S4 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명목록 InsertItem 문자열 Domain 수치 Similarity 입력된 Domain과 Similarity값을레코드에추가한다. 동일한설명 Domain이레코드중에존재할경우중복을허용하여추가한다. 다. DATASTRUCT D 프로세스가처리하는현재단위시간의패킷셋정보를저장하기위한구조체. Domain을레코드의 Key값으로하여해당 Domain을질의한근원지주소 (SrcAddr) 와동일한근원지에서발생한요청을목록형태로저장한다. D k 는 D의 k 번째레코드를가리킨다. - 123 -

(1) Member [ 표 6-46] 구조체 D 의구성변수 자료형 변수명 설명 문자열 Domain 패킷의 DNS Question 문자열 목록 { SrcAddr } IP주소 SrcAddr 패킷의근원지 IP 주소 (2) Method [ 표 6-47] 구조체 D 의구성함수 입력1 입력2 반환형함수명자료형변수명자료형변수명없음 InsertItem 문자열 Domain IP주소 SrcAddr 입력 Domain을 Key값으로하여레코드를추가하고, SrcAddr과 Time을목록에추가한다. Domain에대한레코드가없을경우새로운레코드를생성하고, SrcAddr을 Count값을 1로하여저장한다. 레코드가존재할경우 SrcAddr를해당레코드에서탐색하고, 동일한 SrcAddr이목록에존재하는경우 Count를 1증가, 존재하지않는경우목록에 Count를 1로하는새 SrcAddr 원소를추가한다. 문자열 GetDomainByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드의 Domain 값을반환한다. IP주소 GetSrcAddrByIndex 수치 Index 수치 ListIndex Index를입력으로받아해당순서에있는패킷의근원지주소목록중 LintIndex 색인에있는근원지주소를반환한다. 수치 GetNumOfSrcAddrByIndex 수치 Index 없음없음 Index를입력으로받아해당순서에있는레코드가가진 {SrcAddr, Count} 목록의원소개수를반환한다. 수치 GetCountByIndex 수치 Index 수치 ListIndex Index와 {SrcAddr, Count} 목록의색인을입력으로받아해당 Index 순서에있는레코드의 SrcAddr, Count 목록에서 ListIndex 순서에있는 Count를반환한다. - 124 -

2. 동작설명 [ 표 6-48] 프로세스 13 의동작설명 _1 코드 설명 코드 DATASTRUCT D = { Domain, LIST { IpAddr } } LIST Q t = { Domain, IpAddr } // DNS Queries on a TimeSlot t LIST A t = { Domain } 1. 유사도측정값의저장에사용할구조체와입력패킷셋을 Domain 을 Key로관리할구조체를선언 VAR m = P LOOP ( INIT i = 0 ; WHILE i < m ; STEP i++ ) IF ( P.GetPacketType( i ) == Type::ClientQuery ) Q t.insertitem( P.GetQuestionByIndex( i ), P.GetSrcAddrByIndex( i ) ) END IF 설명 2. 패킷셋 P에서 ClientQuery 타입의레코드를목록 Q t 에삽입한다. VAR n = Q t VAR cnt LIST IpList i LOOP (INIT i=0 ; UNTIL i = n ; STEP i++ ) D.InsertItem( Qt.GetDomainByIndex( i ), Qt.GetSrcAddrByIndex( i ) ) IF ( A t.finddomain( D.GetDomainByIndex( i ) ) < 0 ) 코드 A t.insertitem( D.GetItem( i ) ) IpList i = D.GetIpListByIndex( i ) IpList i.insertitem( IP i ) ELSE IF ( IpList k.findaddr( Qt.GetIpAddrByIndex( i ) ) < 0 ) cnt i = IpList i IpList i.insertitem( IP i ) END IF 3. 다음의작업을단위시간 t의패킷셋 Q t 의모든패킷 m개에대하여순차적으로반복한다. 3.1. Q t 의 i번째패킷의 Domain, SrcAddr보를구조체 D에삽입한다. 설명 3.2. Q t 의 Domain이목록 A t 에저장되어있지않으면저장하고, IpList 에해당레코드의 IpAddr을저장한다. 3.3. 목록 A t 에도메인이존재할경우, IpList에해당 IP 만을목록에추가한다. - 125 -

[ 표 6-49] 프로세스 13 의동작설명 _2 코드 설명 DATASTRUCT S4 LIST BL = { Domain } // Black List LIST WL = { Domain } // White List VAR m m = D LOOP (INIT k=0 ; UNTIL k = m ; STEP k++ ) VAR DN1 = A t1. GetDomainByIndex( k ) VAR DN2 = A t2. GetDomainByIndex( k ) IF (A t1.getdomainbyindex( k ) ) == (A t.getdomainbyindex( k ) ) VAR S = GetSimilarity( A t1. GetIpList( DN1 ), A t2.getiplist( DN2 ) ) IF ( S > T gs) S4.InsertItem(D.GetDomainByIndex( k ), S) ELSE IF (S == -1) BL.Insert( D.GetDomainByIndex( k ) ) ELSE WL.InserItem( D.GetDomainByIndex( k ) ) END IF END IF 4. 다음의작업을 Domain 목록 D의모든레코드 m개에대하여순차적으로반복한다. 4.1. k번째 Domain을단위시간 t1과 t2의 A에서찾아저장된 IpAddr 목록의유사도를비교한다. 4.3. 유사도가임계치를초과할경우, 구조체 S4와 Domain과유사도레코드를추가하고, 유사도가 -1인경우 BlackList에그외의경우는 WhiteList에추가한다. - 126 -

제 7 장 DDoS 공격근원지탐지실험결과 본장에서는설계시스템의기술검증을위해실제네트워크트래픽에적용하여결과를도출하였다. 실험은고려대학교의주 DNS에서수집된트래픽을사용하였으며, 총 3개의서로다른기간에수집된자료가실험대상으로사용되었다. 실험의결과로서탐지된도메인들은봇등의 C&C 또는배포도메인으로의심되는도메인들이며, 이미알려진봇넷의도메인또는주요악성도메인경고사이트들에서지목된도메인들이다수발견되는것을볼수있었다. 제 1 절. 모듈 1 의비정상행위탐지결과 ( 그림 7-1) 이상패턴탐지예 : 규칙적으로동일 DNS 요청을발생시키는악성코드 ( 그림 7-1) 은시스템 1 의모듈 1 과모듈 2 에서사용된악성행위탐지기법 - 127 -