본문 바로가기
IT 이론/정보보호

[정보보안기사] 각종 취약점, 공격 및 대응방안

by 지식id 2018. 3. 3.
반응형

DoS공격


1. Land Attack 


o Land Attack의 원리 이해 


출발지와 목적지의 IP 주소를 공격자의 IP로 동일하게 만들어서 공격대상에게 보내는 공격으로 패킷을 받은 호스트는 응답을 위해서 수신한 패킷에서 출발 지 IP를 이용하여 패킷을 만들어 전송하더라도 자신의 IP이므로 외부로 전송 하지 못하고 자신의 컴퓨터에서 부하를 발생하게 된다. 즉, 루프 상태에 빠지 게 되어 IP 프로토콜 스택에 심각한 장애를 유발시킨다. 


o Land Attack의 대응 방안 


라우터나 패킷필터링 도구를 이용하여 네트워크로 유입되는 패킷 중에서 source 주소가 내부 IP인 패킷 차단 



2. Targa/NewTear/Nestea 공격 


o Teardrop 공격 


헤더가 조작된 일련의 IP 패킷조각(IP fragments)들을 전송함으로써 공격이 이 루어진다. 공격자가 패킷을 프레그먼트할 때 정상적으로 하지 않고 데이터 일 부가 겹치거나 일부 데이터를 포함하지 않고 다음 패킷으로 프레그먼트하여 전송하면 수신자는 패킷 재조합을 수행할 때 부하를 발생하게 된다. 공격당한 시스템은 네트워크 연결이 끊어지거나 일명 “죽음의 푸른 화면(Blue Screen of Death)”이라 불리는 오류 화면을 표시하면서 중단된다. 시스템이 정지될 경우, 사용자는 시스템을 재부팅하여야 하며, 이 경우, 시스템에 직접적인 피 해는 없으나 시스템이 정지될 때 저장하지 못한 데이터 등을 잃게 된다. 이 공격이 성공할 수 있는 원인은 윈도우 및 Linux 시스템의 IP 패킷 재조합 코 드의 버그에 있었으나 현재 대부분의 시스템에서는 IP 패킷의 재조합 시 0보 다 작은 패킷에 대한 처리 루틴이 포함되어 있어 이러한 teardrop 공격에 대 해서 방어하고 있다. 


o Targa 공격 


Targa는 여러 종류의 서비스 거부 공격을 실행할 수 있도록 만든 공격 도구 로서 Mixter에 의해 만들어졌다. 즉, 이미 나와 있는 여러 DoS 공격 소스들을 사용하여 통합된 공격도구를 만든 것이다. targa에서 지원하는 공격 기법은 bonk, jolt, land, nestea, newtear, syndrop, teardrop, winnuke 등이 있다. 




3. Ping of Death 공격 


o Ping of Death 공격의 원리 이해 


Ping을 이용하여 ICMP 패킷을 정상적인 크기보다 아주 크게 만들어 진 패킷 을 전송하면 네트워크를 통해 라우팅(Routing)되어 공격 네트워크에 도달하는 동안 아주 작은 조각(Fragment)이 되어 공격대상 시스템은 이렇게 작게 조각 화된 패킷을 모두 처리해야 하므로 정상적인 Ping의 경우보다 훨씬 많은 부 하가 걸리게 되므로 시스템의 성능을 떨어뜨리는 공격이다.


o Ping of Death 의 대응 방안  


ICMP Ping에 대해 응답을 하지 않도록 설정한다.


sysctl -w net, ipv4, icmp_echo_ignore_all=1




4. Inconsistent Fragmentation 공격 


o Bonk 


패킷을 프래그먼트하여 전송할 때 패킷 조작을 하여 결과적으로 공격대상자에 게 시스템 부하를 증가시키는 공격이다. 처음 패킷을 1번으로 보낸후 다음 패킷의 보낼때 순서번호를 모두 1번으로 조작하여 전송한다. 


o Boink 


Bonk를 수정한 DoS 공격도구로써 처음 패킷을 1번으로 보낸 후 다음 패킷을 100번, 다음 패킷을 200번 등 정상적으로 보내다가 20번째 패킷을 2002, 21번 째 패킷을 100, 22번째 패킷을 다시 2002 등으로 중간에 패킷 시퀀스 번호를 비정상적인 상태로 보내는 공격기술이다. 




5. Syn Flooding 공격 


o Syn Flooding 공격의 원리 이해 


Syn flooding 공격은 TCP 연결 설정 과정 중에 3-Way Handshaking 과정에 서 Half-Open 연결 시도가 가능하다는 취약성을 이용한 공격으로 공격대상 시스템은 외부로부터 접속 요청을 더 이상 받아들일 수가 없게 되어 정상적 인 서비스를 제공할 수 없게 된다. 즉, 공격자가 다수의 syn 신호를 공격대상 자에게 전송하면 공격대상자는 ack/syn 신호를 공격자에게 전달하게 되는데 이때 공격자가 ack 신호를 반송하지 않으면 공격대상자의 시스템은 일정 시 간동안 신호를 기다리게 된다. 이 공격은 윈도우시스템 뿐만 아니라 인터넷에 연결되어 TCP 기반의 서비스(예를 들면, 웹서버, FTP서버, 또는 메일서버 등) 를 제공하는 모든 시스템들에 대해 피해를 줄 수 있다. 그러나 이 문제에 대 한 완벽한 해결책은 없으며 단지 영향을 감소시키는 방법들만이 알려져 있다. 


o Syn Flooding 공격 대응 방안 


SYN Flooding 공격은 3-Way Handshaking과정에서 고의적으로 Half-Open 연결을 하여 대기시간을 늘려 backing queue를 가득 채우는 공격이다. SYN Received의 대기시간을 줄임으로써 대응할 수 있다.




6. 스머프 공격 


o 스머프 공격의 원리 이해 


스머프(smurf)공격은 네트워크 수준에서 어떤 호스트의 서비스를 방해하는 서 비스거부 공격방법으로 공격자는 공격대상 호스트의 IP주소로 위장하여 ICMP 에코 요청을 특정 IP 브로드캐스트 주소로 보내게 된다. 공격대상 주소 로 소스 IP주소를 만들고 임의의 브로드캐스트 주소로 ICMP echo packet을 보내면 스푸핑된 IP를 가진 호스트는 ICMP reply 패킷들을 동시 다발적으로 수신하여 시스템 부하가 증가하게 된다. 


o 스머프 공격 대응 방안 


중간매개지로 쓰이는 것을 막기 위해서 라우터에서 다른 네트워크로부터 자신의 네트워크로 들어오는 IP broadcast 패킷을 막도록 설정한다. 호스트는 IP broadcast address로 전송된 ICMP 패킷에 대해 응답하지 않도록 시스템을 설정할 수 있다. 




7. UDP Flood 공격 


o UDP Flood 공격 


UDP는 비연결성 프로토콜로써 데이터를 전달하기 위한 연결 셋팅 절차가 필요없는 프로토콜이다. UDP Flood 공격은 공격대상자 시스템에 UDP 패킷을 전송하면 목적지 포트가 어떤 애플리케이션이 서비스하고 있는지 조사하고 그 포트를 이용하여 서비스하고 있는 애플리케이션이 없다고 파악되면 소스 어드레스에 ICMP Unreachable 패킷을 전송하는데, 이때 너무 많은 UDP 패킷이 공격대상자에게 전송되면 시스템에 부하가 걸리게 된다. 


o 공격 대응 방안 


- 사용하지 않는 UDP 서비스를 중지 

- 방화벽 등을 이용하여 패킷 필터링 

- 리눅스 시스템의 경우 chargen 또는 echo 서비스를 중지 



DDoS 공격 도구


1. 트리누(Trinoo) 


o 트리누 공격의 원리 이해 


- 트리누는 많은 호스트로부터 통합된 UDP flood 서비스거부 공격을 유발하는데 사용되는 도구로 몇 개의 서버들(혹은 마스터들)과 많은 수의 클 라이언트들(데몬)로 이루어진다. 공격자는 트리누 마스터에 접속하여 마스터에 게 하나 혹은 여러개의 IP 주소를 대상으로 서비스 거부공격을 수행하라고 명령을 내린다. 그러면 트리누 마스터는 특정한 시간에 하나 혹은 여러 개의 IP 주소를 대상으로 공격하도록 데몬들에게 명령을 내리게 되어 공격대상자에게 DoS 공격을 수행한다. 


.공격자 -------> 마스터 : 27665/tcp 포트 

.마스터 -------> 데몬들 : 27444/udp 포트 

.데몬들 -------> 희생 시스템 : 임의의 포트를 통한 UDP flood 


- 트리누에 의해 생성된 UDP flood 공격의 소스 IP 주소는 위장되지 않았지만 앞으로 위장된 IP 주소를 사용하는 도구가 나올 수도 있다. 


o 트리누 공격 대응 방안 


- 라우터에서의 access-list 설정 


.access-list 171 deny tcp any any eq 27665 

.access-list 171 deny udp any any eq 27444 




2. TFN 


트리누와 거의 유사한 분산 서비스 거부 도구로 많은 소스에서 여러 목표 시스템에 대해 서비스거부 공격을 수행한다. TFN은 UDP flood 뿐만 아니라 TCP SYN flood 공격, ICMP echo 요청 공격, ICMP 브로드캐스트 공격(smurf 공격)을 할 수도 있다. TFN 서비스 거부 공격은 공격자가 클라이언트(혹은 마스터) 프로그램이 공격명령 을 일련의 TFN 서버들(혹은 데몬들)에게 보냄으로써 이루어진다. 그러면 데몬 은 특정 형태의 서비스거부 공격을 하나 혹은 여러 개의 목표 IP 주소를 대상으로 수행한다. 소스 IP 주소와 소스 포트는 임의로 주어지고, 패킷의 사이즈 도 바꿀 수 있다. 


TFN 마스터는 명령어라인에서 TFN 데몬에 명령을 보낸다. TFN 마스터는 ID 필드와 패킷의 위치 인수를 가진 16비트 바이너리 값의 ICMP echo reply 패 킷을 사용하여 데몬과 통신을 한다. TFN 마스터는 공격자가 제공한 데몬들의 IP 주소목록이 필요하다. 또한 어떤 TFN은 rcp와 같은 원격파일복사 기능을 가지고 있어 자동으로 새로운 TFN 데몬을 생성하거나 기존의 TFN을 업데이트하는데 사용하고 있다. 그러나 마스터 시스템과 공격자 시스템간 연결이 암호문이 아닌 평문으로 되어 있어 공격자 노출의 가능성이 높다.




3. TFN 2K 


TFN2K는 TFN의 발전된 형태로써 다음과 같은 특징이 있다. 


 - 통신에 특정 포트가 사용되지 않고 암호화되어 있으며, 프로그램에 의해 UDP, TCP, ICMP가 복합적으로 사용되며 포트도 임의로 결정된다. 

 - TCP Syn Flooding, UDP Flooding, ICMP Flooding, Smurf 공격이 가능하다. 

 - 모든 명령은 CAST-256 알고리즘으로 암호화된다. 

 - 지정된 TCP 포트에 백도어를 실행시킬 수 있다. 

 - 데몬은 인스톨 시 자신의 프로세스 이름을 변경함으로써 프로세스 모니터 링을 회피한다. 

 - UDP 패킷의 헤더가 실제 UDP 패킷보다 3바이트만큼 더 크다. 

 - TCP 패킷의 헤더의 길이는 항상 0이다. 정상적인 패킷이라면 절대로 0일 수 없다. 



4. Stacheldraht


Stacheldraht는 트리누와 TFN을 참고하여 제작된 도구로써 이들이 갖고 있는 특성을 대부분 가지고 있다. TFN 2K처럼 통신 시 암호화 기능이 추가되었다.


TFN이나 TFN2K처럼 ICMP flood, SYN flood, UDP flood와 Smurf 등의 공격에 의해서 DDoS 공격을 할 수 있는 기능을 가지고 있다. 




DDoS 공격 방어 


o 라우터에서의 공격주소에 의한 차단 

대규모 데이터를 보내는 DDoS 공격을 막기 위해서는 네트워크 차원에서의 접근통제가 필요하다. DDOS 공격의 특 성상 공격자 주소는 하나가 아닌 수십 수백개가 될 수도 있으며 위장된 주소 일 가능성도 있고, 공격이 시작된 후에 네트워크 이상을 사람이 인지하는데는 얼마 시간이 걸리지 않기 때문에 주소단위로 차단하는 것은 쉽지 않다. 


o 라우터의 egress 필터링 기능

ingress는 외부 인터넷으로부터 들어오는 packet을 의미하며, egress는 내부 네트워크에서 외부로 나가는 패킷을 말 한다. ingress 필터링이란 지정한 IP(도메인)로부터의 패킷만이 라우터를 통과하게 만들어 패킷 필터링을 하는 것이며, 지정되지 않은 IP로부터의 패킷은 모두 drop된다. 


o Unicast RPF를 이용한 차단

시스코 라우터에서 제공하는 Unicast Reverse Path Forwarding기능은 Source IP주소가 spoofing된 DoS공격을 하는 것을 막아주는데 사용될 수 있다. Unicast RPF는 라우터로 패킷이 들어올 때 패 킷의 input interface로의 reverse path route가 존재하는지를 확인한다. 이는 packet이 source IP주소로부터 input interface로의 route path를 가지고 있 는지를 CEF에서 주는 라우팅 정보(FIB)를 이용하여 확인하는 것이다. 


o 라우터의 Committed Access Rate(CAR) 기능

단위시간 동안 일정량 이상의 패킷이 라우터로 들어올 경우, 일정량 이상의 패킷은 통과시키지 않도록 하는 기능을 CAR 기능이라 한다. 





네트워크 스캐닝 


1. TCP/IP Fingerprinting


- telnet ip port의 형태로 하여 port를 서버스 포트로 지정하여 명령어를 실행 하면 OS 또는 서비스 프로그램의 정보를 얻을 수 있다. 


o TCP/IP Fingerprinting의 특성을 이용 원리 이해 


- TCP/IP 프로토콜의 특성을 이용한 Fingerprinting 방법은 RFC 문서를 이용하여 전송에 대한 응답 형태를 이용하는 방법이다. 


 


2. PORT Scan Attack 


o PORT Scan은 공격대상 시스템의 포트가 열려있는지 확인하는 공격 


- TCP Open 스캔 : 포트가 열려있을 경우, 세션이 성립되며, 포트가 닫혀 있을 경우에는 RST/ACK 패킷을 받게 된다. 


- Stealth 스캔(TCP Half-Open 스캔) : 포트가 열려있을 경우, 서버로부터 SYN/ACK 패킷을 받은 후, RST 패킷을 보내어 연결을 끊는다. 포트가 닫혀 있을 경우에는 Open 스캔의 경우와 같다. 


- FIN, Xmas, Null 스캔 : 포트가 열려 있을 경우에는 응답이 없고, 포트가 닫 혀 있는 경우에만 RST/ACK 패킷이 되돌아온다. 


- UDP Open 스캔 : 포트가 열려있을 경우, 아무런 응답이 없으며, 포트가 닫혀 있을 경우에는 ICMP Unreachable 패킷을 받게 된다. 





3.4 IP Spoofing, Session Hijacking 


3.4.1 IP Spoofing과 Session Hijacking의 원리 및 실제 


o 핵심가이드 


- IP Spoofing의 공격원리 이해 


- 공격종류와 특징 이해 


- 대응방안 이해 


- Session Hijacking의 공격 원리 및 대응 방안 




(1) IP Spoofing의 공격원리 이해 


o IP Spoofing은 그대로 자신의 ip를 속이는 행위를 말한다. IP스푸핑은 TCP/IP 의 구조적인 결함에서 출발한 방법으로 TCP sequence number, source routing, 소스 ip 주소를 이용해서 상대방 호스트가 자신의 호스트를 트러스트 하게 만 드는 방법이다. 




(2) 공격 종류와 특징 이해 


o IP spoofing은 IP를 속여서 공격하는 기법으로 TCP/IP 프로토콜의 약점을 이용 한 IP spoofing은 순서제어번호 추측, 반(Half)접속시도 공격, 접속가로채기, RST를 이용한 접속끊기, FIN을 이용한 접속끊기, SYN/RST패킷 생성공격, 네트 워크 데몬 정지, TCP 윈도우 위장 등이 있다. 그러나 일반적으로 IP spoofing은 케빈미트닉이 사용한 방법을 의미하며 순서제어번호추측 공격, 반(Half)접속시 도 공격 등이 함께 사용되는 수법이다. 




o 공격원리 


공격자(C) 


클라이언트(A) 


공격대상자(B) 


1. SYN, ISNc 4. ACK(ISNb) 


2,3,5,6,7 



SYN,ISNc 


ACK(ISNb) 


DATA 


(그림 2-12) IP Spoofing 흐름도 




- C는 A로 자신의 IP주소를 위장하여 SYN를 보내 접속요청을 한다.(1번 흐름 도) 요청에 대한 응답으로 A가 C에 대해 ACK와 함께 자신의 SYN을 전송하 지만 C가 이에 대해 ACK를 보내지 않으면 A는 자신이 보낸 ACK에 대한 C 의 응답을 기다리게 된다. 이 과정을 연속적으로 반복하면 A는 외부의 접속 요청에 응답할 수 없는 오버플로우 상태가 된다. 


- C는 B로 정상적인 접속을 시도하여 순서제어번호의 변화를 패킷 모니터링을 이용하여 관측한다.(2번 흐름도) 


- 순서제어번호의 변화를 관찰하여 추측한 순서제어번호를 이용하여 C는 자신 의 IP주소를 A로 가장한 후 B에 접속요청(SYN)을 보낸다.(3번 흐름도) 


- B는 수신된 SYN 패킷이 A에서 온 것으로 인식, A에게 ACK와 새로운 SYN를 보내지만 이미 A는 외부와 통신 불능상태이므로 응답을 할 수 없게 된 다.(4번 흐름도) 


- C는 자신의 IP 주소를 A주소로 위장하여 추측된 순서제어번호를 이용하여 A 로 보낸 SYN/ ACK에 대한 ACK를 B에 보낸다.(5번 흐름도) 


- 결국 C와 B는 불법적 접속이 이루어지고, B는 A와 연결되어 있는 것으로 착 각한다.(6번 흐름도) 


- 이후 rsh을 이용하여 echo '+ +' >/.rhosts과 같은 데이터를 보내면 된다.(7번 흐름도) 




(3) 대응방안 이해 


o 외부에서 들어오는 패킷 중에서 출발지 IP주소(Source IP Address)에 내부망 IP 주소를 가지고 있는 패킷을 라우터 등에서 패킷 필터링을 사용하여 막아낼 수 있다. 그러나 내부 사용자에 의한 공격은 막을 수 없으므로 각 시스템에서 TCP wrapper, ssh 등을 설치해서 운영하고, rlogin 등과 같이 패스워드의 인증 과정 


이 없는 서비스를 사용하지 않는 것이 바람직하다. 




(4) Session Hijacking 


o Session Hijacking의 공격 원리 


- TCP 세션 하이재킹은 연결의 신뢰성을 확보하기 위한 시퀀스 넘버를 이용한 공격으로 클라이언트와 서버간의 통신을 관찰할 수 있을 뿐만 아니라. 트러스 트를 이용한 거의 모든 세션의 갈취가 가능하다. - TCP는 두 지점간의 신뢰성 있는 전이중 접속을 제공한다. 그리고 호스트에 의해서 송신되어지는 모든 바이트는 32비트 정수 값인 순차번호가 매겨지고 수신자도 이 순차 번호로 승인한다. 첫 번째 송신 바이트를 위한 순차 번호는 연결 설정시 계산되어지고 매번 TCP 연결이 될 때마다 다른 순차 번호를 사 용하기 위하여 설계된 규칙에 근거하여 연결될 때마다 변화한다. 




- 기호정의 


.SVR_SEQ : 서버에 의해서 송신되어질 다음 바이트의 순차 번호 


.SVR_ACK : 서버에 의해 수신될 다음 바이트(수신된 바이트의 순차 번호+ 1) 


.SVR_WIND : 서버의 수신 윈도우 크기


.CLT_SEQ : 클라이언트에 의해서 송신되어질 다음 바이트의 순차 번호 


.CLT_ACK : 클라이언트에 의해 수신될 다음 바이트 (마지막 수신된 바이트 의 순차 번호 + 1) 


.SVR_WIND : 클라이언트의 수신 윈도우 크기 


.SEG_SEQ : 패킷의 순차 번호 


.SEG_ACK : 패킷의 확인 번호 


.SEG_FLAG : 제어 비트 


- 데이터 교환이 이루어지지 않은 초기에는 SVR_SEQ = CLT_ACK, CLT_SEQ = SVR_ACK 상태이다. 이런 상태는 접속 후 데이터의 전송이 이루어지지 않 은 “quiet" 상태에서도 마찬가지이다. 이러한 상태는 데이터가 전송되어지는 상태에서는 성립하지 않는다. 


- 비동기 상태는 양쪽이 확립된(established) 상태일 경우의 아무런 데이터 전송 이 없으면서 다음과 같이 서로의 순차 번호와 확인 번호가 일치하지 않는 접 속 상태를 말한다. 


.SVR_SEQ ≠ CLT_ACK 


.CLT_SEQ ≠ SVR_ACK 


- 이 상태는 데이터가 전송되기 전까지는 안정적이다. 하지만 데이터가 전송된 다면 다음 두 경우가 발생하게 된다. 


.CLT_SEQ < SVR_ACK + SVR_WIND 


.CLT_SEQ > SVR_ACK 


- 이 상태에서 패킷 수신이 가능하며 데이터는 차후의 사용을 위해서 저장되지 만 사용자에게 SVR_ACK의 순차 번호는 전송하지는 않는다. 


.CLT_SEQ > SVR_ACK + SVR_WIND 


.CLT_SEQ < SVR_ACK 


- 패킷 수신이 불가능한 상태이며 데이터도 버려진다. 두 가지 경우의 이러한 상태는 존재할 수 있지만 상호간의 데이터 교환은 불가능한 상태이다. 


- 후기(post) 비동기 하이잭킹 공격 


.하이잭킹 공격은 TCP 접속 양단을 비동기 상태로 만들어 접속 쌍방이 더 이상 데이터 전송이 불가능하도록 하는데 있다. 그런 후 침입자는 실제 패 킷을 흉내내어 양쪽에서 수신될 수 있는 패킷을 생성한다. 침입자가 TCP 세션을 비동기화 시키는 데 성공하고, 클라이언트가 패킷의 헤더에 다음의 코드가 포함된 패킷을 보냈다고 가정하자. 


SEG_SEQ = CLT_SEQ


SEG_ACK = CLT_ACK 


침입자 


클라이언트 서버 


TCP패킷 


TCP패킷 


TCP패킷 


패킷 복사 


패킷 버림 


(그림 2-13) 침입자는 서버가 버린 패킷을 복사 




.패킷 헤더의 첫 번째 행, SEG_SEQ = CLT_SEQ는 패킷의 순차 번호가 클 라이언트의 다음 순차 번호라는 것을 나타낸다. 두 번째 행, SEG_ACK = CLT_ACK은 패킷의 ACK값을 다음 ACK값으로 설정한다. 침입자가 TCP 연결을 비동기화 시켰기 때문에 클라이언트 패킷의 순차 번호(CLT_SEQ)는 기대했던 순차 번호의 서버 ACK(SVR_ACK)와 결코 같을 수 없어서 서버는 데이터를 받아들이지 않고 패킷을 버린다. 침입자는 서버가 버린 패킷을 복 사한다. 그 후 침입자는 같은 패킷이지만 SEG_SEQ와 SEG_ACK(그리고 체 크섬)을 바꾼 패킷을 다음과 같이 변경하여 서버에게 보낸다. 


SEG_SEQ = SVR_ACK 


SEG_ACK = SVR_SEQ 


.패킷 헤더의 순차 번호는 옳기 때문에 패킷을 받아들이고, 데이터를 처리한 다. 그 동안 클라이언트가 보내고, 서버가 받아들이지 않은 패킷을 클라이언 트는 계속 전송할 것이다. 


.CLT_TO_SVR_OFFSET의 값을 SVR_ACK에서 CLT_SEQ의 값을 뺀 값과 같 게 설정하고, SVR_TO_CLT_OFFSET의 값을 CLT_ACK에서 SVR_SEQ의 값 을 뺀 값과 같게 설정하면 해커는 클라이언트가 서버에게 보내는 TCP 패킷 의 값을 패킷이 SEG_SEQ와 SEG_ACK값을 나타낼 수 있도록 고쳐야만 한 다. 


CLT_TO_SVR_OFFSET = SVR_ACK - CLT_SEQ 


SVR_TO_CLT_OFFSET = CLT_ACK - SVR_SEQ


.공격자는 클라이언트에서 서버로 가는 TCP 패킷을 다음과 같이 고치게 된 다. 


SEG_SEQ ← SEG_SEQ + CLT_TO_SVR_OFFSET 


SEG_ACK ← SEG_ACK - SVR_TO_CLT_OFFSE 


.공격자가 두 지점간에 교환되는 패킷을 감청 할 수 있고 IP 패킷을 가장할 수 있다면 모든 행동이 공격자의 컴퓨터를 통하게 된다. 이로써 데이터 흐 름에 데이터를 추가 및 삭제가 가능하다. 예를 들어 접속이 텔넷을 이용한 원격접속이라고 하면 공격자는 사용자를 대신하여 어떠한 명령어(예: "echo merit.edu lpj >& ~/.rhosts"와 같은)를 포함할 수 있고, 이때 생길 수 있는 원치 않는 화면출력을 제거할 수도 있어 사용자는 침입자의 존재를 전혀 눈 치채지 못한다. 




3.5 스니핑 및 암호화 프로토콜 


3.5.1 스니핑 공격의 이해 


o 핵심가이드 


- 스니핑 공격의 동작 원리 이해 


- 스니핑 공격 대응 방안 


(1) 스니핑 공격의 동작 원리 이해 


o 스니핑은 네트워크 상에서 자신이 아닌 다른 상대방들의 패킷 교환을 엿듣는 것을 의미한다. 간단히 말하여 네트워크 트래픽을 도청(eavesdropping)하는 과 정을 스니핑이라고 할 수 있다. TCP/IP 프로토콜을 이용한 통신에서는 통신매 체를 통과하는 패킷들이 암호화가 되지 않은 상태이므로 이 패킷을 도청하여 메시지 내용을 볼 수 있다. 




o 허브 환경에서의 스니핑 


- 허브(Hub)는 기본적으로 들어온 패킷에 대해 패킷이 들어온 포트를 제외한 모든 포트에 대해 패킷을 보내는 장비이다. 따라서, 기업에서 허브를 사용하 고 있다면 원하던 원치 않던 간에 계속하여 다른 사람의 패킷들을 받아보고 있었던 것이다. 물론 네트워크 드라이버, OS 커널 등의 수준에서 MAC 주소 를 보아 자신이 아닌 다른 이들의 패킷은 버려지기 때문에 그것을 쉽게 느낄 수는 없었을 것이다. 하지만 여러분 시스템의 NIC를 promiscuous 모드로 동 작하게 한다면 다른 이들의 패킷 또한 버리지 않고 받아볼 수 있다. 이때 스 


니핑 도구를 통해 해당 패킷을 저장하고 분석하는 것이 가능하다. 모든 패킷 은 실제 수신 대상이 아닌 호스트에게도 전달되며 Promiscuous 모드로 동작 하는 호스트는 다른 수신 대상의 패킷도 볼 수 있다 




o 스위치 환경에서의 스니핑 


- 일반적으로 스니핑을 방지하는 방법으로 스위칭 허브를 사용하는 방법이 있다. 스위 칭 허브는 로컬 네트워크를 여러 개의 세그먼트로 나누어 쓸 수 있도록 하는데, 각 세그먼트내의 트래픽은 다른 세그먼트로 전달되지 않는다. 따라서 스위칭 허브를 이 용하여 업무별로 또는 사이트별로 네트워크를 나누어 놓으면 원칙적으로는 다른 네트 워크 세그먼트내의 네트워크 트래픽을 도청할 수 없게 된다. 하지만 이러한 스위칭 허브를 사용하는 방법으로 스니핑 공격을 완벽하게 막을 수는 없다. 다음과 같은 Switch Jamming, ARP Redirct나 ICMP Redirct 등의 기법을 이용하여 다른 네트워 크 세그먼트의 데이터를 스니핑 할 수 있는 방법이 존재한다. 




- 스위칭 환경에서의 스니핑 공격 방법 


.Switch Jamming : 일반적으로 스위치 장치들은 MAC 주소 테이블이 가득 차게 되 면(Full) 모든 네트워크 세그먼트로 트래픽을 브로드캐스팅하는 특성을 가지고 있 다. 따라서 공격자는 위조된 MAC 주소를 지속적으로 네트워크에 흘림으로서 스위 칭 허브의 주소 테이블을 오버플로우시켜 허브처럼 동작하게 하여 다른 네트워크 세그먼트의 데이터를 스니핑 할 수 있게 된다. 이는 일반적인 스위칭 장비가 보안 원리의 하나인 "Fail close(시스템에 이상이 있을 경우 보안기능이 무력화되는 것을 방지하는 원리)를 따르지 않기 때문에 발생한다. 결국, 공격자가 만들어낸 임의의 arp 패킷의 MAC 주소는 스위치의 주소 테이블을 오버플로우 시키게 되는 것이 공 격 성공의 주요 요인이다. 


.ARP Redirect 공격 : ARP Redirect 공격은 위조된 arp reply를 보내는 방법을 사 용한다. 공격자가 "나의 MAC 주소가 라우터의 MAC 주소이다"라는 위조된 arp reply를 브로드캐스트로 네트워크에 주기적으로 보내어 스위칭 네트워크상의 다른 모든 호스트들이 공격자 호스트를 라우터로 믿게 한다. 결국 외부 네트워크와의 모 든 트래픽은 공격자 호스트를 통하여 지나가게 되고 공격자는 스니퍼를 통하여 필 요한 정보를 도청할 수 있게 된다. ARP Protocol specification에 의하면 이미 cache 에 저장하고 있는 IP에 대한 ARP request를 받게 되면 호스트는 ARP request를 보낸 호스트의 MAC 주소를 cache에 업데이트 하게 된다고 나와 있다. 그리고 이 러한 cache의 업데이트 기능은 arp reply에도 적용되는 것으로 보이며, 위의 공격이 


성공할 수 있는 요인이 된다. 


.ARP Spoofing 공격 : 공격자가 특정 공격대상자를 대상으로 ARP Redirect 공격처 


럼 arp 테이블을 조작하여 공격대상자의 패킷을 스니핑하는 공격이다. 




(2) 스니핑 공격 대응 방안 


o 암호화 기능 및 보안 프로토콜을 사용한다. 


- SSL, IPSEC, PGP 등 여러 암호화 프로토콜 및 응용 프로그램을 통하여 인터 넷 통신에 사용되는 모든 데이터를 암호화하여 사용한다. 


o 스니핑 탐지 방안 


- 스니핑을 탐지하는 방안은 Ping이나 ARP를 이용하는 방법과 anti-sniff와 같 은 전문 탐지 도구를 이용하는 방법이 있다. 


- Ping request를 이용하는 방법 : MAC 주소를 위조(로컬 네트워크에 존재하지 않는 MAC 주소 사용)하여 ping echo request 메시지를 다른 시스템에게 보 낸다. 만약 이때 ping echo reply를 받게 되면, 해당 호스트가 스니핑하고 있 는 것이다. 왜냐하면 존재하지 않는 MAC 주소를 사용했기 때문에 스니핑하 지 않는 호스트는 누구도 ping request를 볼 수 없게 되기 때문에 reply를 보 낼수 없다. 


- ARP를 이용한 방법 : ping과 유사한 방법으로 non-broadcast로 위조된 ARP request를 보냈을 때, ARP response가 오면 상대방 호스트가 스니핑하고 있 다고 볼 수 있다. 


- Anti-sniffer 도구 : 로컬 네트워크에서 네트워크 카드의 promiscuous 유무를 체크하여 스니퍼가 돌고 있는가를 체크한다. 또한 Anti-Sniffer 프로그램은 DNS test, ICMP time test, Ether ping test, UDP echo test 등 여러 테스트를 지원한다. 


- Sentinel 등 도구 활용 



o Mountd 버퍼 오버플로우 취약점 및 대책 


- NFS는 네트워크를 통하여 다른 컴퓨터 간에 파일 시스템을 공유하기 위한 클 라이언트/서버 프로그램이다. NFS 클라이언트측 컴퓨터가 NFS 서버의 파일 에 접근하기 위해서는 클라이언트가 먼저 파일 시스템에 마운트하겠다는 요 청을 해야 한다. 


- NFS 마운트 요청을 처리하는 소프트웨어(Mountd 프로그램)에 취약점이 발견 되었다. 공격자는 NFS에 대한 접근을 처리하기 위한 코드 영역에 버퍼 오버 플로우를 일으킬 수 있는데, 리눅스 시스템에서는 기본적으로 NFS 서버가 Mountd를 구동한다. 이 취약점은 NFS 서버가 파일 시스템을 공유하고 있지 않더라도 공격당할 수 있다. 


- 클라이언트가 파일 시스템 을 사용하기 위한 요청을 하게 되면 그 파일 시스 템을 마치 지역 파일시스템처럼 사용할 수 있게 되는데 취약점은 NFS 서버가 파일 시스템 마운트 요청을 처리하는 소프트웨어에 존재한다. 이 소프트웨어 는 일반적으로 mountd나 rpc.mountd라고 불린다. 이 취약점으로 인해 공격 자는 취약한 NFS 파일 서버에 시스템 관리자 접근권한을 획득할 수 있다. 이 취약점은 원격지에서 공격당할 수도 있어서 공격목표 시스템에 계정이 필요 없다. 즉, 이 버퍼오버플로우 취약점으로 인해 원격지의 공격자는 시스템 관 리자 권한으로 임의의 코드를 실행할 수 있다. 


- 대책 : 리눅스 시스템 제공업체로부터 패치를 설치한다. 해당 시스템이 반드시 NFS 서버 역할을 할 필요가 없을 경우에는 시스템에서 mountd 데몬을 사용 중지시켜야 한다. 

반응형

댓글