티어드롭 공격
IT 위키
더 많은 작업
- Teardrop Attack; 티어드롭
- IP 단편(fragment)의 순서 번호(fragment offset)를 겹치거나 어긋나게 조작해 보내, 받는 쪽 시스템이 단편을 재조합하는 과정에서 오류를 일으키게 하는 서비스 거부 공격
큰 IP 패킷은 경로의 MTU 를 넘으면 여러 조각으로 나뉘어 전송된다(IP 단편화). 각 단편의 헤더에는 원래 패킷에서 이 조각이 시작하는 위치인 Fragment Offset(8바이트 단위)과 뒤에 단편이 더 있는지를 알리는 More Fragments 플래그가 들어 있고, 수신 호스트는 이 값으로 조각을 제자리에 맞춰 원래 패킷을 복원한다.
티어드롭 공격은 이 오프셋을 정상과 다르게 만든다.
- 앞 단편이 0~1,479 바이트를 담고 있는데 다음 단편의 오프셋이 그 안쪽(예: 1,000 바이트 위치)을 가리켜 구간이 겹치게 한다
- 겹친 길이를 계산하는 과정에서 음수 길이가 나오는 등 예외 처리가 없는 운영체제는 메모리를 잘못 복사하거나 커널이 멈춘다
- 1997년 무렵의 리눅스·윈도우 95/NT 등에서 시스템이 다운되는 문제로 알려졌고, 지금은 대부분의 운영체제가 패치되어 있다
- Bonk: 순서 번호가 1번인 단편을 계속 보낸다
- Boink: 처음에는 정상 순서의 단편을 보내다가 점점 순서 번호가 어긋난 단편을 보낸다. Bonk 를 개선한 방식이다
- 이러한 공격들을 Inconsistent Fragmentation 공격이라 한다. 단편을 지나치게 잘게 쪼개 TCP 헤더를 두 단편에 걸치게 하는 Tiny Fragment 공격은 방화벽 우회가 목적이라 성격이 다르다
- 운영체제를 패치해 재조합 시 오프셋 겹침·범위 초과를 검사하고 비정상 단편을 버리게 한다
- 방화벽·침입 차단 시스템에서 오프셋이 겹치거나 비정상적인 단편을 차단하고, 일정 시간 안에 재조합이 끝나지 않는 단편을 폐기한다
- 경계에서 단편을 재조합해 검사한 뒤 내부로 넘긴다
| 공격 | 핵심 | 티어드롭과의 차이 |
|---|---|---|
| 티어드롭 | 단편의 오프셋(순서 번호) 조작 → 재조합 오류 | — |
| Ping of Death | 최대 크기(65,535바이트)를 넘는 ICMP 패킷을 단편으로 보냄 | 오프셋이 아니라 재조합 결과의 크기로 버퍼를 넘친다 |
| 스머프 공격 | 출발지를 대상으로 위조한 ICMP Echo Request 를 브로드캐스트 | 단편과 무관한 증폭형 대역폭 소진 공격 |
| ICMP 플러딩 | ICMP 패킷을 대량 전송 | 정상 모양의 패킷을 양으로 밀어붙인다 |
| 버퍼 오버플로우 | 버퍼보다 큰 입력으로 메모리를 덮어씀 | 네트워크 단편이 아니라 프로그램의 입력 처리 취약점이며, 서비스 중단보다 임의 코드 실행이 주된 목적인 경우가 많다 |
| Land 공격 | 출발지와 목적지 IP·포트를 같게 위조 | 대상이 자기 자신에게 응답하게 만든다 |