서비스 거부 공격 (DoS)
서비스 거부 공격
Dos 공격은 정보를 훔치는 것이 아니라 서비스나 자원으로의 접근을 막는 공격으로 크게 서비스를 죽이는 공격과 서비스에 과부하를 주는 공격으로 나뉨.
서비스를 죽이는 DoS 공격은 네트워크 공격이라기보다는 프로그램 공격에 가까움. 이런 공격은 서비스 판매자가 엉성하게 구현한 프로그램의 부분을 이용함.
SYN Flooding
SYN Flooding 공격은 TCP/IP 스택의 상태 자원을 고갈시키는 공격임.
TCP는 ‘신뢰할 수 있는 연결’을 유지해야 하므로 각 연결을 추적 관리할 필요가 있는데 (커널의 TCP/IP 스택이 이를 처리함) 연결을 관리하는 테이블은 유한하므로 SYN Flooding 공격은 이 한계를 이용한 공격임.
공격자는 공격 대상의 시스템에 스푸핑된 출발지 주소 (실제로 존재하지 않음) 를 이용해 여러 SYN 패킷을 보냄.
SYN 패킷은 TCP 연결을 맺는데 쓰이므로 공격 대상 머신은 스푸핑된 출발지로 SYN/ACK
패킷을 보낸 뒤 ACK 응답 패킷을 기다릴 것임. 이런 대기 중인 연결 정보는 백로그backlog 큐에 저장되는데, 이곳의 저장 용량은 한계가 있음.
그러나 스푸핑된 출발지 주소는 실제로 존재하지 않으므로 공격 대상 머신은 이 큐에서 연결 정보를 제거하는데 필요한 ACK 응답을 받을 수 없음.
공격 대상 시스템은 각 연결 정보가 시간 만료돼 큐에서 제거되기를 기다리는 수 밖에 없음.
공격자가 공격 대상 시스템에 스푸핑된 SYN 패킷을 계속 보내는 동안에는 백로그 큐가 꽉 차 있으므로 실제로 유효한 SYN 패킷을 받지 못하고 유효한 TCP/IP 연결을 맺지 못함.
일부 운영체제는 SYN Flooding 공격을 막는데 SYN 쿠키 방법을 이용함.
SYN 쿠키를 사용하는 TCP 스택은 응답 공격을 막기 위해 호스트 세부 사항과 시간을 기반으로 한 값을 사용해 응답 SYN/ACK을 위한 초기 승인 번호를 조정함.
TCP 연결은 TCP Handshaking의 최종 ACK 패킷이 확인될 때까지 활성화되지 않음. 순서 번호가 일치하지 않거나 ACK이 도착하지 않는다면 연결은 생성되지 않음.
Ping of Death
ICMP echo 메시지의 데이터 부분에는 216가 들어갈 수 있음.
ICMP 패킷의 중요 정보는 헤더에 들어있으므로 데이터 부분은 별로 중요하지 않다고 생각하는 경우가 많은데 표준에 나와 있는 크기보다 많은 바이트를 ICMP 패킷의 데이터 부분에 넣으면 일부 운영체제가 비정상적으로 종료됨.
이렇게 매우 큰 ICMP echo 메시지를 보내는 공격을 Ping of Death
공격이라 함.
요즘 시스템에선 이 취약점이 모두 패치됨. 하지만 새로운 기술이 등장해 유사한 문제점을 일으킬 수 있는데 휴대전화에 사용하는 블루투스 프로토콜은 L2CAP 계층에 ICMP와 유사한 핑 패킷을 갖고 있음.
이 패킷은 생성된 링크의 통신 시간을 측정하는데 사용되는데, 많은 블루투스 시스템이 Ping of Death처럼 매우 큰 핑 패킷에 공격당함. 이런 공격을 블루스맥Bluesmack이라고 함.
TearDrop
TearDrop 공격은 IP 분할 패킷 재조합 기능의 약점을 공격함.
일반적으로 IP 패킷이 분할될 때에는 헤더의 오프셋이 서로 곂치지 않게 분할됨.
티어드랍 공격은 오프셋이 서로 중복되는 분할 패킷을 보내 오프셋을 제대로 검사하지 않는 운영체제가 패킷을 재조합할 때 비정상적으로 종료되게 함.
이 공격도 막혔지만 알고 있으면 다른 분야의 문제를 푸는데 도움이 될 것임.
Ping Flooding
과부하를 주는 DoS 공격은 서비스나 자원은 반드시 죽이려고 하는 대신 과부하를 줘서 제대로 응답하지 못하게 하는 데 목적이 있음.
과부하를 주는 대상은 CPU 사이클과 시스템 프로세스 같은 자원이 될 수 있지만 홍수 공격은 네트워크 자원을 공격 대상으로 함.
핑 홍수 공격은 가장 간단한 홍수 공격이며, 목적은 크기가 큰 패킷을 대량으로 공격 대상에게 보내 공격 대상의 네트워크 대역폭을 잠식하여 정상적인 트래픽이 오고 가지 못하게 하는 것임.
증폭 공격
대량의 대역폭을 사용하지 않고도 핑 홍수 공격을 수행하는 지능적인 방법이 있음.
증폭 공격amplification attack은 스푸핑과 브로드캐스트 주소를 사용해 하나의 패킷을 수백개로 증폭시킴.
먼저 공격자는 대상 증폭 시스템을 찾아야 함.
이 증폭 시스템이 속한 네트워크는 브로드캐스트 주소를 이용한 통신을 허용해야 하며 비교적 많은 수의 호스트가 있어야 함.
그 다음 공격자는 크기가 큰
ICMP echo request 패킷
을 증폭 네트워크의 브로드캐스트 주소로 보냄.이때 요청 패킷의 출발지 주소를 공격 대상 시스템의 출발지 주소로 스푸핑함.
- 증폭 시스템은 이 패킷을 증폭 네트워크의 모든 호스트로
broadcast
하고, 각 호스트는ICMP echo response 패킷
을 공격 대상 시스템으로 전송함.
이런 증폭 기법을 사용하면 공격자는 비교적 소수의 ICMP echo request packet
을 보내는 것만으로 공격 대상 시스템에 수많은 ICMP echo response packet
을 보낼 수 있음.
이 공격은 ICMP packet
과 UDP echo
패킷으로 할 수 있음. 이 공격을 각기 스머프smurf와 프래글fraggle 공격이라 부름.
DDoS
분산 DoSDDoS 공격은 서비스에 과부하를 주는 DoS 공격에 속하는데, 이런 DoS 공격의 목적은 대역폭을 소모하므로 공격자는 더 많은 대역폭을 확보해 더 많은 피해를 주고자 함.
DDoS에서 공격자는 먼저 여러 호스트를 해킹해 그곳에 데몬을 설치함.
그런 프로그램이 설치된 시스템은 보통 봇bot이라 불리며, 그 시스템들의 봇넷botnet을 형성함.
이 봇들은 공격자가 공격 대상을 선정해 실제로 공격을 하기 전까지 기다림.
공격자는 제어 프로그램을 이용해 봇을 관리하고, 공격을 개 시하면 여러 데몬이 동시에 DoS Flooding 공격을 이용해 공격 대상에 대량의 트래픽을 보냄.
이 공격은 여러 호스트를 사용하므로 대량의 대역폭 소모 외에도 근원 공격자를 추적하기 어렵다는 특징이 있음.