외로운 Nova의 작업실

정보보안기사 실기 - 2(네트워크) 본문

Certification/정보보안기사

정보보안기사 실기 - 2(네트워크)

Nova_ 2023. 4. 1. 15:45

- 서문

필기와 겹치는게 많아 중요한 내용만 정리하겠습니다.

 

- 허브 환경에서의 스니핑

더미 허브는 전달받은 패킷을 단순히 연결된 모든 노드로 전송하기때문에 허브에 연결되어 있는 모든 노드는 스니퍼를 통한 스니핑이 용이합니다. 네트워크 카드의 동작모드를 무차별 모드(promiscuous mode)로 설정하면 패킷을 모두 수신합니다.

 

- 스위치 환경에서의 스니핑 공격 기법

<스위치 재밍/ MAC flooding 공격>

스위치 MAC Address Table의 버퍼를 오버플로우를 시키면 스위치는 스위칭기능을 못하고 더미 허브처럼 연결된 모든 노드에게 패킷을 전송합니다. 따라서 MAC 주소를 변경하면서 패킷을 지속적으로 전송해 오버플로우를 시킨후 스니핑을 시전합니다.

 

<ARP 스푸핑 공격> - 내가 특정 호스트이다!

공격자가 특정 호스트의 MAC 주소를 자신의 MAC 주소로 위조한 ARP Reply 패킷을 만들어 희생자에게 지속적으로 전송하면 희생자의 ARP Cache Table에 특정 호스트의 MAC 정보가 공격자의 MAC 정보로 변경됩니다. 그렇게되면 희생자로부터 특정 호스트에게 나가는 패킷을 스니핑할 수 있습니다.

 

<ARP 리다이렉트 공격> - 내가 게이트웨이/라우터 이다!

ARP 스푸핑 공격의 일종으로 공격자가 자신이 라우터/게이트웨이 인것처럼 MAC 주소를 위조하여 ARP Reply 패킷을 대상 네트워크에 지속적으로 보내 모든 호스트의 ARP Cache Table 에 라우터/게이트웨이 정보가 공격자의 MAC 정보로 변경되어 스니핑을 시전합니다.

 

- TCP/IP 프로토콜

<주요 프로토콜>

FTP : 20번은 데이터, 21번은 제어를 위해 통신합니다. TCP를 이용합니다.

SSH : 22번 포트로 통신합니다. TCP를 사용합니다.

SFTP : 22번 포트로 통신합니다. TCP로 통신합니다.

TELNET : 23번 포트로 통신합니다. TCP 통신합니다.

SMTP : 25번 포트로 통신합니다. TCP로 통신합니다.

DNS : 53번 포트에서 TCP,UDP를 이용해 통신합니다.

DHCP : 67,68번 포트에서 UDP를 이용해 통신합니다.

TFT : 69번 포트에서 UDP를 이용해 동작합니다.

HTTP : 80번포트에서 TCP를 이용해 통신합니다.

POP3 : 110번포트에서 TCP로 통신합니다.

IMAP : 143번 포트에서 TCP로 통신합니다. 

SNMP : 161번 포트에서 UDP를 이용해 통신합니다.

 

- APT/RAPRT 프로토콜

<ARP 동작방식>

1. ARP 요청 메시지를 만들어 브로드 캐스트 합니다.

2. Target 호스트에서는 ARP 응답 메시지를 만들어서 응답합니다.ARP reply에는 Target의 MAC주소가 담겨있으며 응답자는 요청자에게 유니캐스트 방식으로 응답합니다. 

3. 각시스템은 ARP Cache가 있고 Cache에 이정보를 보관해둡니다. 일정시간이 경과하면 삭제됩니다.

 

<ARP Spooping 실습>

ARP Spooping을 실습해보겠습니다. ARP reply 패킷 생성의 경우 파이썬의 scapy 라이브러리를 사용해서 진행하면됩니다. scapy 라이브러리를 사용하려면 winpcap 드라이버가 다운로드 되어있어야하니 다운로드 해주시면됩니다. 아래는 파이썬 코드입니다.

from scapy.all import *
import time

# ARP 응답 패킷 생성
arp_reply = Ether(dst='00:0C:29:8C:2E:05')/ARP(op='is-at', hwsrc='1C:1B:0D:A7:67:E1', psrc='192.168.219.100', hwdst='00:0C:29:8C:2E:05', pdst='192.168.219.120')

# 패킷 전송 10번
for i in range(0, 10):
    sendp(arp_reply)
    time.sleep(2)
    print("패킷 전송 완료")

아래는 ARP Spooping 당한 피해자의 화면입니다.

192.168.219.100번에대한 MAC주소가 끝자리 77에서 e1으로 공격자의 MAC주소로 변경된 것을 확인할 수 있습니다.

 

<ARP 캐시테이블 살펴보기>

ARP 요청을 통해 알아낸 MAC 정보는 OS에 따라 다르지만 통상 1~2분 정도 메모리에 저장합니다. arp -a 명령을 통해 ARP cache table을 살펴보면, 타입이 dynamic 또는 static으로 지정이 되어있습니다. dynamic으로 된 것은 arp에 의해 동적으로 설정된 것으로 일정 시간 동안 유지됩니다. static으로 된 것은 관리자에 의해 정적으로 설정된 것이므로 관리자가 삭제하거나 시스템이 종료하기전까지 유지됩니다. 아래는 arp -a 명령어로 캐시테이블을 보는 화면입니다.

아래는 arp -s 명령어로 정적 설정을 한 화면입니다.

아래는 arp -d 명령어로 arp 테이블을 삭제한 화면입니다.

 

<GARP>

gratittous란 불필요한이란 의미입니다. sender IP 와 Target IP가 동일한 ARP 요청을 GARP라고합니다. GARP가 있는 이유는 자신이 설정한 IP에대해서 다른 사람이 쓰고있는지 확인할떄 GARP를 보내기위해 존재합니다. 또한 자신이 여기에 있다는 것을 알리기위해 GARP를 보냅니다. 이때 수신자는 상대방을 인증하지않고 ARP cache table에 정보를 갱신하게되므로 악의적인 목적의 공격자에의해 MAC정보가 위변조 될 수 있습니다.

 

- IP 프로토콜

IP는 비연결형 프로토콜로 연결상태를 유지하지 않기 때문에 패킷 전송순서를 보장하지 않습니다. 비신뢰적 프로토콜입니다. 

<IP 패킷 구조>

  • Identification(16bit) : 단편화 재조합 관련 필드로 단편화 전 원본 IP 데이터그램을 식별하기위한 ID입니다.
  • Flags(3bit) : 첫번째 비트는 사용하지않고 두번째비트가 1이면 단편화 하지말라는 의미이며, 세번째 비트가 1이면 재조합할 단편이 남아있다는 의미이고 0이면 단편이 더이상 없다는 의미입니다.
  • Fragementation offset(13bit) : 단편이 순서대로 전송되는 것이 아니므로 이를 순서대로 조합하기위한 현재 단편의 상대적 위치(offset)을 저장한 필드로 8byte 단위로 표현합니다. 
  • Time to Live(8 bit) : 패킷의 생존시간이엿으나 라우터/L3 스위치 통과 횟수로 의미가 바뀌었습니다. 일반적으로 Linux는 64, window는 128, unix는 255를 설정하여 OS 핑거프린트 목적으로 사용합니다.

<IP 단편화>

가장 많이 사용하는 이더넷의 경우 MTU(maximum transmission unit)은 1500바이트이니다. 따라서 IP 패킷이 1500바이트보다 크면 1500바이트 이하로 단편화해 전송해야합니다.

<IP 라우팅>

아래는 netstat -rn으로 본 라우팅 테이블입니다.

 

<라우팅 경로계산>

192.168.123.123 목적지의 패킷을 어디로 보내야하는지 알기위해 시스템은 라우팅 테이블에서 네트워크 마스크와 일일이 모두 and 연산을 한후 네트워크 대상과 ip를 비교합니다. 이후 맞는 ip가 나오면 해당 게이트웨이로 내보내고, 만약 없다면 디폴트 게이트웨이(0.0.0.0)으로 내보냅니다. 이는 모든 네트워크에 해당 패킷을 보내는 것과 동일합니다.

 

<IP Spooping>

IP Spooping은 시스템의 트러스트 관계를 이용한 공격 방법입니다. 트러스트관계란 아이디 패스워드 기반의 로그인이 아닌 신뢰 관계에 있는 IP를 등록하여 해당 IP로 접근하는 것을 허용해주는 방식입니다. 이는 IP주소로 인증하고 로그인 없이 접속이 가능하도록 해주는 방식입니다. 따라서 트러스트 관계의 IP로 위조하여 서버에 접속할 수 있습니다. 

트러스트 설정은 /etc/host.equive 파일과 $HOME/.rhost 파일이 있습니다. host.equive 파일은 시스템 전체에 영향을 주는 파일이고 .rhost 파일은 각 사용자별로 설정하는 파일입니다. 해당 파일에 ip를 써놓으면 해당 ip는 접근을 허용하는 트러스트관계가 됩니다.

공격 서버와 신뢰관계에 있는 희생자가 공격 서버로 접속하게되면 공격자는 트러스트 관계임을 알아채고 희생자를 dos공격으로 무력화 시키고 희생자의 IP로 둔갑하여 공격 서버에 접속하면됩니다. 이를 IP Spooping이라고 합니다.

 

<IP Spooping 대책>

시스템간 트러스트 설정을 사용하지않고 반드시 사용해야할 경우에는 트러스트 된 시스템의 MAC 주소를 정적으로 구성하여 단순히 IP만을 위조한 접속을 차단해야합니다.

 

<IPv6 전환 기술>

듀얼 스택 : IPv4와 IPv6 프로토콜을 동시에 설정하여 통신 상대에 따라 선택적으로 사용할 수 있게 하는 방식입니다.

터널링 : 호스트와 라우터에서 IPv6 패킷을 IPv4 패킷으로 캡슐화하여 전송함으로써 캡슐화된 패킷이 IPv4 네트워크를 통과하게 하는 기술입니다.

주소 변환 또는 헤더 변환 : 주소 변환 방식은 IPv4 주소를 IPv6 주소로 변환하거나 IPv6 주소를 IPv4주소로 변환하여 통신하는 방식을 말합니다.

 

- ICMP 프로토콜

<ICMP 리다이렉트 공격>

ICMP redirect 공격이란 ICMP Redirection 메시지를 이용하여 패킷 경로를 악의적으로 재설정하는 공격을 말합니다. ICMP Redirection 메시지는 라우터가 자신이 관리하는 호스트에게 목적지 IP에대한 게이트웨이 주소를 재설정할때 보내는 메시지로 이를 악용하여 게이트웨이 주소를 공격자 자신의 ip로 설정함으로써 스니핑을 할 수 있습니다. ARP Redirect 공격과 차이점은 ARP Redirect 공격은 ARP cache table을 변조하여 스니핑하는 것이고 ICMP Redirect 는 희생자의 라우팅 테이블을 변조하여 스니핑한다는 차이점이 있습니다.

 

<대책>

ICMP Redirect 옵션을 해제해야합니다. 아래 명령어로 확인 가능합니다.

reg query HKLM\System\CurrentControlSet\Services\Tcpip\Parameters

0x1 이면 켜져있는 것으로 아래 명령어로 끌 수 있습니다.

reg add HKLM\System\CurrentControlSet\Services\Tcpip\Parameters /v EnableICMPRedirect /t REG_DWORD /d 0x1 /f

현재 대부분의 OS에서 보안상의 이유로 ICMP Redirect 옵션을 기본적으로 해제하고 있습니다. 리눅스는 아래 명령어로 ICMP Redirect를 끌 수 있습니다.

sysctl -w net.ipv4.conf.all.accept_redirects=0

 

- TCP 프로토콜

<TCP 프로토콜 구조>

 

<Control Flags>

URG : 긴급 데이터 설정

ACK : 수신 확인 응답 설정

PSH : 송수신 버퍼에 있는 데이터를 즉시 처리

RST : 연결 중단

SYN : 연결 설정 

FIN : 연결 종료

 

<MSS>

MSS(Maximum segment size)란 TCP 세그먼트 데이터부의 최대 바이트수를 의미하며 MTU 크기에서 IP 헤더와 TCP 헤더를 빼면 MSS를 알 수 있습니다.

 

<연결 설정 과정(3-handshake)>

 

<데이터 재전송 과정>

TCP는 모든 세그먼트 전송시마다 재전송 타이머가 동작합니다. 재전송 타임아웃동안 상대방으로부터 ACK 응답이 없으면 송신자는 해당 패킷이 누락된 것으로 판단하여 재전송을 수행합니다. 재전송 타이머 만료에 따른 재전송이 발생하는 상황은 매우 환잡한 상태로 판단합니다.

 

<빠른 재전송 과정>

TCP는 수신측이 기대했던 순서 번호가 아닌 그 이후 순서 번호의 세그먼트를 수신하면 즉시 기대하는 순서 번호의 세그먼트를 요청하는 ACK 패킷을 전송합니다. 재전송 타임아웃 발생 이전에 중복 ACK가 세번 발생하면 즉시 재선송을 수행하므로 이를 빠른 재전송이라합니다. 재전송 타이머 만료에따른 재전송에비해 덜 혼잡한 상태로 판단합니다.

 

<연결 종료 과정>

 

<연결 요청 거부(강제종료)>

 

<연결 중단>

 

<TCP 세션 하이재킹>

TCP는 연결설정 과정을 통해 상호간의 세션을 생성한 후 다음 식별자를 통해 상호간에 인식을 합니다. 

  • 출발지 IP와 port
  • 목적지 IP와 port
  • sequence number와 acknowledgment number

아무런 인증 키없이 위 정보만을 가지고 상호간에 인식하기때문에 위조해서 세션을 탈취할 수 있는 취약점이 있습니다. TCP 세션 하이재킹을 하기위해선 클라이언트에게 ARP redirection을 사용해 세션정보를 스니핑해야합니다.

서버 입장에서는 정상 클라이언트가 보낸 잘못된 ACK(교정용) 패킷을 다시 교정하기 위해 ACK 메시지를 보내게됩니다. 이러한 과정이 대량으로 발생하게 되는데 이를 ACK STORM이라 합니다. 정상 클라이언트와 서버 간에는 아무리 교정을 위한 ACK를 보낸다고 해도 공격자에 의해서 조작된 것이기 떄문에 이를 해결할 수 없습니다. 따라서 공격자는 최종적으로 정상 클라이언트에게 RST 메시지를 전달하고 서버와는 세션을 유지하며 통신합니다.

 

- 네트워크 관리 명령어

<윈도우 ping>

-n : 패킷 전송 횟수 설정입니다.

-l : 패킷 크기를 설정합니다.

 

<리눅스 ping>

-c : 패킷 전송 횟수 설정

-s : 패킷 크기 설정

 

<리눅스 traceroute>

TTL 필드를 1로 설정한 UDP 패킷을 보냅니다. 이후 라우터들은 TTL이 0이된 패킷을 폐기하고 ICMP Time Exceeded(TYPE11)을 최초 출발지로 보냅니다. 최종 목적지에 도착하면 포트가 닫혀있으므로 ICMP Destination Unreachable 패킷이 반환됩니다.

 

<윈도우 tracert>

TTL 필드를 1로 설정한 ICMP Echo Request 패킷을 보냅니다. 라우터는 TTL값이 9인 패킷을 대상으로 폐기한후 ICMP Time Exceeded 메시지를 최초 출발지로 보냅니다. 최종목적지에 도달하면 ICMP Echo Reply 패킷이 반환됩니다.

 

<promiscuous 설정>

리눅스에서 promiscuous 설정은 아래와 같은 명령어로 진행합니다.

ifconfig eth1 promisc

해제는 아래 명령어로 진행합니다.

ifconfig eth1 -promisc

 

- 포트 스캐닝

<TCP Connect 스캔>

 

<TCP SYN 스캔>

<TCP FIN 스캔>

<TCP NULL 스캔>

<TCP Xmass 스캔>

<TCP FIN/NULL/XMASS filtered>

 

<TCP ACK 스캔>

포트 오픈 여부를 판단하는 것이 아닌 방화벽 룰셋을 알아내기 위한 스캔 방식입니다. 즉, 방화벽이 어떤 포트를 막고 어떤 포트를 안막는지 스캔합니다.

<UDP 스캔>

<정리>

스캔 방식 port open response port closed response
connect 스캔 SYN+ACK RST+ACK
SYN 스캔 SYN+ACK RST+ACK
FIN,NULL,XMASS 스캔   RST+ACK
UDP 스캔   ICMP Unreachable

 

<Decoy 스캔>

Decoy 스캔은 다양한 포트 스캔을 수행할때 스캔을 당하는 Target 호스트에서 스캐너 주소를 식별하기 어렵도록 실제 스캐너 주소 외에 다양한 위조 주소로 스캔하는 방식을 말합니다. 다양한 IP로 스캐너 주소를 위조하여 Target 호스트의 관리자가 스캔을 누가 하는지 알아채기 어렵게 만듭니다. 명령어는 아래와 같습니다.

nmap -p 23,80 192.168.56.100 -D RND #RND는 임의의 주소로 바꾸라는 의미입니다.

 

- 서비스 거부 공격

<Ping Of Death Attack>

Ping 명령을 통해 TCMP를 정상적인크기 보다 아주 크게 만들어 전송하면 MTU에의해 다수의 IP 단편화가 발생하게되는데, 이 단편화를 타겟은 재조합해야합니다. 이때 많은 부하가 발생하거나 재조합 버퍼의 오버플로우가 발생하여 정상적인 서비스를 하지 못하도록 합니다. 아래는 Ping Of Death Attack의 파이썬 코드입니다.

from scapy.all import *

# Define the IP address of the target
target_ip = "192.168.1.1"

# Create an ICMP packet with the maximum payload size
max_size = 65535
icmp_packet = IP(dst=target_ip)/ICMP()/("X" * max_size)

# Send the packet and wait for a response
response = sr1(icmp_packet, timeout=2)

# Check if we received a response
if response:
    print(f"Response received from {response.src}")
else:
    print("No response received")

대응책은 보통의 ICMP 패킷은 분할하지 않으므로 패킷 중 분할이 일어난 패킷을 공격으로 의심하여 탐지하는 방식을 사용합니다. 또한 현재 대부분의 시스템은 반복적으로 들어오는 일정 수 이상의 ICMP 패킷을 무시하게 설정되어 해당 공격을 막고 있습니다.

 

<Land Attack>

공격자가 출발지와 목적지 IP가 같은 패킷을 만들어 공격 대상 시스템에 보냄으로써 수신자가 자기 자신에게 응답을 보내 무한 루프 상태에 빠지도록하여 시스템 자원을 소모시키는 형태의 도스 공격을 말합니다. 아래는 해당 공격의 파이썬 코드입니다.

from scapy.all import *

# Define the source and destination IP addresses
ip_address = "192.168.1.1"

# Create an IP packet with the same source and destination IP
packet = IP(src=ip_address, dst=ip_address)

# Print the packet summary
print(packet.summary())

대응책은 현재 대부분의 운영체제는 보안 패치가 적용되어있고, 침입차단시스템, 라우터 등 패킷 필터링 장비를 통해 출발지 IP와 목적지 IP가 같으면 차단하도록 설정합니다.

 

<Smurf Attack>

스머프 공격은 추발지 IP를 희생자 IP로 위조한 후 증폭 네트워크로 ICMP Echo Request를 브로드캐스트 함으로써 다수의 ICMP Echo Reply가 희생자에게 전달되어 서비스거부를 유발시키는 공격입니다. 요즘에는 라우터에서 Directed Broadcast가 비활성화되어 있어 대응이 가능합니다. 또한 동일한 ICMP Echo Reply 패킷이 다량으로 발생한다면 해당 패킷들을 침입차단 시스템을 통해 모두 차단 시켜야합니다.

 

<Teardrop Attack>

IP패킷 재조함 과정에서 조작된 단편의 오프셋 정보로 인해 수신시스템에 오류나 부하가 발생하도록 만드는 도스 공격을 말합니다. 공격자는 IP fragment offset을 서로 중첩되도록 조작하여 전송하고 이를 수신한 시스템이 재조합하는 과정에서 오류나 부하가 발생하여 시스템의 기능을 마비시키는 공격입니다. 현재 대부분의 운영체제는 이를 방어하고있기때문에 최신 os 버전을 유지하면 대응이 가능합니다. 아래는 관련 파이썬 코드입니다.

from scapy.all import *

# Create an IP packet with the fragment offset field set to 0
packet = IP(dst="192.168.1.1", frag=0)

# Modify the fragment offset field to 100
packet.frag = 100

# Print the packet summary
print(packet.summary())

 

<Tiny Fragment 공격>

TCP 헤더가 2개의 IP 단편에 나누어질 정도로 작게 MTU의 크기를 조작해 최초의 단편을 아주 작게 만들어서 패킷 필터링 장비를 우회하는 공격 기법을 말합니다.

MTU란 아래 그림처럼 2계층의 body 부분의 최대 크기를 말합니다.

MTU를 조작하는 방법은 리눅스에서 아래 명령어를 사용합니다.

sudo ifconfig eth0 mtu 1500

 

<Fragement Overlap(단편 중첩) 공격>

IP 단편의 오프셋을 조작하여 첫번째 단편의 일부분을 두 번째 단편이 덮어쓰도록 함으로써 패킷 필터링 장비를 우회하는 공격 기법을 말합니다.

대응책으로는 단편화된 패킷들을 재조합하여 IP 단편화를 이용한 우회 공격의 탐지가 가능한 패킷 필터링 장비를 적용합니다.

 

- 분산 서비스 공격 거부(DDOS)

<봇넷 명령 제어 방식>

 

<DNS 싱크홀 서비스>

악성 봇에 감염된 PC가 해커의 명령을 받기 위해 C&C 서버로 연결을 시도할때 C&C 서버 대신 싱크홀 서버로 우회시켜 더이상 해커로부터 조종 명령을 받지 않도록 해주는 서비스/시스템을 말합니다.

 

<봇넷 보안장비 우회기법>

DNS 싱크홀 서버와 같이 C&C 서버 접속 과정에서 보안 장비에의해 탐지되지 않도록 하기 위해 공격자들은 다양한 기법을 사용합니다. 그중 대표적인 것이 아래 3가지 입니다.

  • Fast Flux 기법
  • DGA 기법
  • Domain Shadowung 기법

<Fast Flux 기법>

먼저  Fast Flux 기법에대해 알아보겠습니다. Fast Flux 기법은 하나의 C&C 서버 도메인에 다수의 IP 주소를 할당하여 DNS 질의 시마다 지속적으로 IP주소가 변경되도록 하는 기법을 말합니다. IP주소를 A레코드에 추가하고 TTL값을 매우 작게 주어 빠르게 라운드 로빈 방식으로 응답이 되도록 합니다.

 

<DGA 기법>

DGA(domain generation alogorithm)은 약속된 규칙에 따라 C&C 서버 도메인을 지속적으로 동적 생성하여 도메인 기반의 탐지 및 차단을 우회할 수 있는 기법을 말합니다. 이를 모두 탐지하고 차단하기란 매우 어렵습니다.

 

<Domain Shadowing 기법>

도메인을 해킹하여 도메인 소유자 몰래 많은 서브 도메인을 등록시켜놓고 사용하는 기법입니다.

 

<네트워크 대역폭 소진 공격 실습>

네트워크 대역폭을 소진 시켯을때 공격 모습을 공부해보도록 하겠습니다.

 

<UDP Flooding 공격>

DNS에게 수많은 query를 보내 네트워크를 마비시키는 공격입니다. 아래는 패킷 캡처 사진입니다.

 

<ICMP flooding 공격>

다량의 ICMP 패킷을 서버로 전송하여 네트워크를 마비시키는 공격입니다. 아래는 패킷 캡처 사진입니다.

 

<서버/서비스 자원 소진 공격 실습>

이번에는 네트워크가 목표가 아닌 서버 및 서비스의 자원을 소진 시키는 공격에대해 공부해보도록 하겠습니다.

 

<TCP SYN Flooding 공격>

TCP 연결 설정 과정에서 서버가 SYN을 받으면 ACK+SYN을 보내고 응답을 기다리게됩니다. 이때 ACK를 서버에게 보내지않으면 서버는 계속 기다리게됩니다. 이를 이용해서 SYN만 보내고 튀어버리는 공격을 실시할 수 있습니다.

위 사진에서 SYN만 받으면 Incomplete Connection Queue에 채워지게되는데 이 ICQ를 엄청 채우면 서비스가 마비됩니다. 아래는 관련 패킷사진입니다.

대응책으로는 아래와 같습니다.

  • Syn 쿠키를 사용해서 적절한 ACK 응답을 받을때 까지 Queue에 담지 않습니다. ex) sysctl -w net.ipc4.tcp_syncookies=1
  • SYN 요청에 임계치를 설정합니다. ex)iptables -A input -p TCP --dport 80 --syn -m connlimit --connlimit-above 5 -j DROP
  • First SYN Drop 설정을해서 첫번째 SYN은 버리고 그 다음에 오는 SYN으로 연결을 시도합니다.

<HTTP GET Flooding 공격>

HTTP GET 요청을 다량으로 발생시켜 공격 대상 웹서버가 해당 요청을 처리하지못하게 공격하느 방법입니다.

 

<Hulk Dos 공격>

Hulk Dos 공격은 공격 대상 웹사이트 주소를 지속적으로 변경하면서 다량으로 Get 요청을 발생시키는 서비스 거부 공격입니다. 이는 임계치 기반의 디도스 대응 장비를 우회하기 위함입니다. 아래는 관련 패킷 캡처 화면입니다.

 

<hash Dos 공격>

웹서버는 HTTP 요청을 통해 전달되는 파라미터를 효율적으로 저장하고 검색하기위한 자료구조로 해시 테이블을 주로 사용합니다. 공격자는 이러한 특성을 악용하여 많은 수의 파라미터를 POST 방식으로 웹서버에 전달하고 웹서버는 다수의 해시 충돌이 발생하게되고 결과적으로 정상적인 파라미터 조회시 많은 CPU 자원을 소모하게됩니다.

콘텐츠길이가 1375852바이트가 됨을 알 수 있습니다. 아래는 컨텐츠 내용입니다.

해시명=해시값 으로 이루어진 많은 값들을 써서 POST 합니다.

 

<slow http header Dos 공격>

공격자가 만약 요청 헤더의 끝 즉 빈라인을 전달하지 않고 지속적으로 천천히 불필요한 헤더 필드 정보만 전달한다면 웹서버는 요청 헤더를 모두 수신해야 요청 메시지 처리가 가능하기 때문에 이를 모두 수신할 때까지 연결 상태를 유지하면서 대기합니다. 이때 다수의 연결을 지속시키기게되면 대상 웹서버의 연결 자원이 모두 소진되어 정상적인 요청을 받을 수 없는 상태가 됩니다. 이를 slowloris 공격이라고 합니다.

빈라인 없이 0d0a가있으므로 헤더 필드가 더 남아있음으로 서버는 인식하고 다음 요청을 대기합니다.

그 다음도 빈라인을 주지않고 0d0a를 줍니다. 이런식으로 연결을 끌게됩니다.

 

<slow HTTP POST Dos 공격>

웹서버는 Content-Length 길이만큰 읽어들이는 작업을 수행합니다. 공격자는 Content-Length 길이를 비정상적으로 크게 설정한 후 데이터를 지속적으로 천천히 웹서버에 전송하면 서버는 데이터를 모두 수신하기위해 연결 상태를 유지하면서 대기하게됩니다. 이런 방식으로 다수의 연결을 지속시키게되면 정상적인 요청을 받을 수 없는 상태가됩니다. 이를 RUDY 공격이라고도 불립니다.

콘텐츠 길이를 100000바이트 임을 알 수 있습니다. 마지막에 0d0a0d0a값으로 헤더파일의 끝을 알렸습니다. 이후 서버는 콘텐츠 길이를 다 못받았으므로 계속 연결을 유지하게됩니다.

이렇게 1바이트만 천천히 전송하면서 연결이 계속 끌게됩니다.

 

<slow HTTP read dos 공격>

수신측의 수신 버퍼가 만약 여유공간이 0이되면 window 필드를 0으로 설정한 zero window packet을 서버에게 전달하고 이를 수신한 서버는 일정시간 대기후 수신측 상태를 확인하기위한 zero window probe packet을 전달합니다. 이때여유공간이 있다면 해당 공간의 크기만큼 window 필드를 설정하여 응답하고 여전히 여유 공간이 없다면 zero window packet으로 응답합니다. 이를 이용해서 zero window packet을 지속적으로 서버에전달하여 연결을 끌게합니다.

window size가 0인 패킷을 서버로 보냅니다.

서버는 알겠다고 기다리겠다고합니다.

 

<slow HTTP header/post 공격 대응책>

동시 연결에대한 임계치 설정을 통한 차단 : 동일한 출발지 IP에서 동시에 연결할 수 있는 연결 개수에대한 임계치를 설정합니다. iptables 방화벽이라면 아래와 같은 룰을 설정합니다.

iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP

연결 타임아웃 설정을 통한 차단 : 아무런 데이터 송수신 없이 세션을 유지하는 시간에 대한 타임아웃을 설정합니다. 아파치의 경우 httpd.conf의 Timeout 지시자를 120에서 5로 설정합니다.

읽기 타임아웃 설정을 통한 차단 : 요청 헤더 정보가 5초 이내에 모두 수신되지 않거나 요청 바디정보가 10초 이내에 모두 수신되지 않으면 오류 응답을 합니다. apache라면 httpd.conf를 아래와 같이 수정합니다.

RequestReadTimeout header = 5 body = 10

 

<DRDos>

DRDost는 distribution reflection dos의 약자입니다. 좀비pc가 아닌 reflection 서버들을 이용하여 Dos 공격을 하는 기법입니다. 반사와 증폭이 특징입니다.

 

<TCP 기반 DRdos 공격>

SYN_ACK 패킷에대한 응답이 없을경우 TCP 동작 구조 상 재전송을 다수 수행하기 떄문에 응답이 증폭됩니다.

 

<DNS 증폭 DRdos 공격>

출발지 주소를 희생자의 IP주소로 위조한후 요청 대비 응답이 큰 DNS 질의타입인 ANY타입과 TXT 타입을 다수 요청하여 희생자에게 대량의 트래픽을 유발시킵니다. 아래는 패킷 덤프의 예시들입니다.

 

<DRDos 공격과 일반적인 Dos 와의 차이점>

  • 증폭 및 반사공격에 활용되는 서비스를 제공하는 서버를 공격 기기로 이용합니다,
  • 공격 근원지를 파악하는 것이 어렵습니다.
  • 요청대비 응답이 크기때문에 공격 트래픽 효율이 증가합니다.

<대응 방법>

  • Ingress 패킷 필터링 : 외부에서 내부 네트워크로 들어오는 패킷중 출발지 IP가 외부에 존재하지 않는 IP는 차단합니다.
  • Egress 패킷 필터링 : 내부에서 외부로 나가는 패킷에대해서 출발지 IP를 체크하여 내부에서 관리하고 있는 주소가 아니면 차단합니다.
  • Unicast RPF 기법 : 유입된 인터페이스로 다시 전송되는지 여부를 체크하여 만약 유입된 곳으로 나가지않는다면 차단합니다.
  • ICMP 프로토콜을 차단합니다.
  • 내부 DNS서버라면 내부 ip만 질의할 수 있게 제한하고 초당 요청 개수 제한을 설정하거나 특정 바이트 이상의 DNS 응답을 차단합니다.

- 무선랜

<기본 용어>

 

<WEP 매커니즘>

아래는 동작 방식입니다.

아래는 암호화 방식입니다.

아래는 복호화 방식입니다.

아래는 wep의 문제점들입니다.

  • 24비트의 짧은 초기벡터를 사용해서 재사용될 가능성이 높습니다. 또한 평문을 알고 있는 암호문을 이용해 다른 암호문을 복호화할 수 있습니다.
  • 불안전한 RC4 암호 알고리즘으로 암호키 노출 가능성이 높습니다.
  • 고정된 암호키 사용으로 인한 공격 가능성이 높습니다.
  • 사용자 입장에서는 악의적으로 설치된 불법 AP인지 알수없습니다.
  • 고정된 공유키 사용으로 주기적으로 변경해야하지만 장비가 많을경우엔 하기 어려워 취약점이 존재합니다.

 

<WPA IEEE 802.11i 보안 표준>

 

<RC4-TKIP>

무선 구간 패킷을 암호화하고 하드웨어 고체없이 사용할 수 있습니다. 그리고 WEP의 취약성을 보안하고 있습니다.

 

<AES-CCMP>

AES가 제공하는 블록 암호 모드중 CCMP는 Counter 모드 기반으로 CBC-MAC을 결합한 CCM을 기반으로합니다. 패킷의 영역과 헤더의 무결성을 보장하고 패킷 번호를 이용하여 재전송 공격을 방지합니다.

 

<WPA-PSK 인증방식 문제점>

  • 접속/인증 패스워드를 짧게 설정하거나 추측하기 쉬운 값으로 설정할 경우 사전 공격을 통해 손쉽게 패스워드를 크랙할 수 있는 취약점이 있습니다.
  • 패스워드를 기반으로 생성한 PSK(PMK)를 제외하고 모두 네트워크 상에 노출됩니다.
  • 노출된 파라미터를 이용해 PTK를 생성하고 이를 노출된 MIC값을 통해 검증함으로써 패스워드를 크랙할 수 있습니다.

<기타 무선랜 접속 인증 기술>

  • SSID 설정을 토한 접속 제한 : 무선 AP의 SSID를 브로드캐스트하지 않도록 설정하여 SSID를 모르는 사용자는 무선랜에 접속할 수 없게 만드는 인증방식을 말합니다. 하지만 무선 데이터 분석도구를 이용하면 손쉽게 SSID를 알아낼 수 있습니다.
  • MAC 주소 인증 : AP에 MAC을 사전등록하여 등록된 MAC에 대해서만 접속을 허용해주는 인증 방식을 말합니다.

- 네트워크 보안 프로토콜

<VPN 프로토콜>

PPTP : 2계층 프로토콜로 PPP의 Packet을 캡슐화하여 IP 네트워크에서 전송하기 위한 터널링 기법

L2F : 2계층 프로토콜로 시스코사에서 제안했고 원격지 사용자의 home site에서 주소를 할당하며 home site의 게이트웨이에서 사용자 인증을 합니다.

L2TP : 2계층 프로토콜로 마이크로소포트와 시스코에서 제안했고 L2F에 기반을 두고 PPTP와의 호환성을 고려하여 만들어진 터널링 프로토콜

IPSec : 3계층 프로토콜로 인증 무결성 기밀성을 제공합니다.

 

<IPSec>

IPSec이 주는 기능은 아래와 같습니다. 부인방지 뺴고 거의 다 지원합니다.

  • 기밀성 : AH는 무결성을 지원하고 ESP 프로토콜은 암호화를 지원합니다.
  • 비연결형 무결성 
  • 데이터 원천 인증/송신처 인증
  • 재전송 공격 방지
  • 접근 제어
  • 제한된 트래픽 흐름의 기밀성 : 원본 헤더 암호화에따른 트래픽 흐름 기밀성 보장 구간 생성

<IPSec 전송모드>

아래는 보호구간입니다.

IP헤더의는 암호화되지않아 네트워크 트래픽이 분석될 수 있습니다.

<IPSec 터널모드>

아래는 보호구간입니다.

ip헤더까지 암호화시켜서 트래픽 기밀성을 보호해줍니다. 다만 새로운 ip헤더의 트래픽정보는 노출될 수 있습니다.

 

<IPSec 세부 프로토콜 - AH>

AH는 무결성과 송신처 인증을 제공하고 기밀성은 제공하지 않습니다. 또한 전송모드에따라 동작이 다릅니다.

  • 전송모드는 IP 헤더의 전송 중 변경가능한 필드를 제외한 IP 패킷 전체를 인증합니다. 
  • 터널모드는 New IPO 헤더의 전송 변경 가능한 필드를 제외한 New IP 패킷 전체를 인증합니다.

패킷을 보면 아래와 같습니다.

인증 헤더부분으로 ICV가 무결성 값이며 데이터부분은 암호화되지 않았습니다.

 

<ESP 프로토콜>

무결성, 송신처 인증, 기밀성을 제공합니다. 동작모드는 아래와 같습니다.

전송모드는 IP 페이로드와 ESP 트레일러를 암호화하고 암호화된 데이터와 ESP 헤더를 인증합니다.

터널모드는 원본 IP 패킷 전체와 ESP 트레일러를 암호화하고 암호화된 데이터와 ESP 헤더를 인증합니다.

실제 패킷 사진을 보면 Encapsulatiing security payload값으로 나오며, 데이터값은 암호화 되어 있는걸 확인할 수 있습니다.

 

<SA>

SA란 둘 사이에 논리적인 연결상태를 유지하는 동안 적용할 보안 설정 정보를 보안연관이라고 합니다.

 

<인터넷 키교환(IKE) 프로토콜>

보안 관련 설정들을 생성 협상 및 관리하는 프로토콜로 500/udp 포트를 사용합니다.

 

<SSL/TLS>

웹 브라우저를 위한 보안 프로토콜로 처음 제안되었습니다. 클라이언트 서버 환경에서 TCP 기반의 앱에대한 종단간 보안 서비스를 제공하기 위해 만들어진 전송 계층 보안 프로토콜입니다. 아래와 같은 보안 서비스를 제공합니다.

  • 기밀성
  • 무결성
  • 인증

<SSL/TLS 프로토콜 기능>

  • Handshake 프로토콜 : 종단간에 보안 파라미터를 협상하기위한 프로토콜입니다.
  • Change Ciper Spec 프로토콜 : 종단간에 협상된 보안 파라미터를 이후부터 적용 변경함을 알리기위한 프로토콜입니다.
  • Alert 프로토콜 : SSL/TLS 통신 과정에서 발생하는 오류를 통보하기위한 프로토콜입니다.
  • Application Data 프로토콜 : Application 계층의 데이터를 전달하기 위한 프로토콜입니다.
  • Record 프로토콜 : 암호화 복호화 무결성 보호 압축 해제등의 기능을 제공하는 프로토콜입니다.

<SSL/TLS 키 생성 과정>

<완전협상 과정>

 

<client hello message>

클라이언트가 지원 가능한 SSL/TLS 버전, 암호 도구 목록, 압축 방식등을 서버에 전달하는 메시지입니다. 암호도구 형식은 아래와 같습니다.

SSL/TLS_(a)_WITH(b) : a는 키교환 및 인증 알고리즘 B는 암호 스펙입니다. 더 자세히 예를 들자면 아래와 같이 쓸 수 있습니다.

TLS_RAS_WITHE_AES_256_CBC_SHA256 : 키교환은 RSA를 사용하고 대칭 암호 알고리즘으로 AES를 사용하며 블록 암호모드는 CBC이고 HMAC용 인증 해시 알고르짐은 SHA를 사용하겠다는 의미입니다. 

 

<client key exchange message>

클라인어트가 서버에게 보내는 것으로 키교환에 필요한 사전 마스터 비밀을 생성하여 서버에 전달하는 메시지로 키 교환 알고리즘에따라 사전 마스터 비밀을 생성하는 방식이 다릅니다.

  • RSA 방식 : 난수값 생성후 수신한 서버 인증서의 공개키를 이용하여 암호화하여 전송하빈다.
  • DH 방식 : 클라이너트는 DH 공개키를 생성하여 서버에 전달하고 클라이언트와 서버는 각각 DH 연산을 통해 공통오의 사전 마스터 비밀키를 생성합니다.

<Record 프로토콜 동작방식>

단편화 : 어플리케이션 데이터를 일정 크기로 단편화 합니다.

압축 후 MAC 추가 : 압축알고리즘으로 압축한 후 MAC을 계산하여 추가합니다.

암호화 : 압축된 데이터와 MAC값을 협상을 통해 적용된 암호 알고리즘으로 암호화합니다.

Record 헤더 추가 : 암호화된 데이터에 Record 헤더를 추가하여 전송합니다.

 

- 라우터 보안

<비밀번호>

privileged 모드로 변경할때 사용하는 enable 패스워드를 설정하기 위해서는 enable password와 enable secret의 두가지 명령어를 사용할 수 있습니다. 안전한 운영을 위하여 enable secret 명령ㅇ어를 사용할 것을 권장합니다.

 

<라우터와 접근제어>

standard access-list : 퍄킷의 소스 ip만으로 패킷을 허용하거나 차단합니다.

extended access-list : 패킷의 ip뿐만아니라 목적지 ip 포트 프로토콜 등을 이용하여 차단합니다.

 

<filtering 유형>

ingress : 외부에서 내부로 들어오는 패킷 필터링

Egress : 내부에서 외부로 나가는 패킷 필터링

blackhole : 비정상적인 시도가 감지되었을 경우 가상의 쓰레기 인터페이스로 보내는 필터링 기법

unicast RPF : 동일한 인터페이스로 들어오고 나가는지 확인하여 비정상 여부를 판단한느 기법

 

<콘솔 패스워드 보안>

콘솔 포트는 라우터에 케이블을 이용하여 직접 터미널에 연결하는 방식입니다. 이때 사용하는 패스워드를 반드시 설정해야합니다.

vt

vty와 aux의 경우에는 원격지에서 텔넷을 통하여 접속하는 방식으로 이때도 패스워드를 무조건 설정해야합니다.

Comments