파편 공격이란 무엇입니까? 감사합니다
문제 설명:
파편 공격이란 무엇입니까? 감사합니다. 여러분들이 저를 도와 해결해 주시기를 바랍니다.
분석:
일반적인 IP 조각 공격에 대한 자세한 설명
이 문서에서는 IP 조각화의 원리를 간략하게 소개하고 Snort 패킷 캡처 결과와 함께 일반적인 IP 조각을 자세히 분석합니다.
공격의 원리와 특징, 마지막으로 IP 단편화 공격을 막기 위한 몇 가지 건의를 제시한다. IP 프로토콜 및
일부 DoS 공격은 도움이 될 것입니다.
1. 왜 IP 조각화가 발생합니까?
-=-=-=-=-=-=-=-=-=-= =-=
링크 계층은 최대 전송 단위 MTU 의 특징을 가지고 있어 데이터 프레임의 최대 길이를 제한하고
동일한 네트워크 유형에 상한이 있습니다. 이더넷의 MTU 는 1500 입니다. Stat -i 명령을 사용하여 확인할 수 있습니다.
이 값입니다. IP 계층에 전송할 패킷이 있고 패킷 길이가 MTU 를 초과하는 경우 IP 계층은 데이터를 전송합니다.
각 세그먼트의 길이가 MTU 보다 작거나 같도록 그룹화가 분할됩니다. 그것을 전달합시다.
UDP 패킷을 입력합니다. 이더넷의 MTU 는 1500 바이트, 일반 IP 헤더는 20 바이트, UDP 헤더는 8 바이트입니다.
데이터의 예약된 페이로드 부분은 1500-20-8= 1472 바이트입니다. 데이터 부분이 1472 자보다 큰 경우
단락, 조각화 현상이 있을 것이다.
IP 헤더에는 세그먼트 및 재구성에 필요한 정보가 포함되어 있습니다.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| id |R|DF|MF| 조각 오프셋
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|<-16->; |<-3->; |<-13->; |
식별: 발신자가 보낸 IP 패킷에 대한 식별 필드는 고유한 값입니다
분할 영역은 각 분할 영역에 복사됩니다.
R: 사용하지 마세요.
Df: 조각하지 마라, "조각하지 마라" 비트. 비트가 1 으로 설정되면 IP 계층에 오류가 발생합니다.
데이터보가 세그먼트화되다.
MF: 더 많은 조각, "더 많은 조각", 마지막 조각을 제외한 모든 구성 요소.
에스컬레이션된 모든 동영상은 이 비트를 1 으로 설정해야 한다.
조각 오프셋: 이 슬라이스는 원래 패키지의 시작 위치에서 오프셋됩니다. 오프셋된 바이트 수는 다음과 같습니다
이 값에 8 을 곱합니다.
또한 데이터가 세그먼트화되면 각 세그먼트의 총 길이 값을 해당 세그먼트의 길이 값으로 변경해야 합니다.
각 IP 조각은 개별적으로 라우팅되어 대상 호스트에 도착한 후 IP 계층에서 재조립됩니다. 안심하세요
데이터를 올바르게 재구성할 수 있습니다. 파편이 재편성될 수 있다면, 소위 조각 공격이라고 부르는 것은 어떨까요?
타격은 어떻게 생겼습니까?
2.IP 조각 공격
-=-=-=-=-=-=-=-=-=-= =-=
IP 헤더의 2 바이트는 전체 IP 패킷의 길이를 나타내므로 가장 긴 IP 패킷은
0xFFFF 는 65535 바이트입니다. 총 길이가 65535 를 넘는 IP 조각을 보내려는 경우 일부 구형 시스템 커널이 있습니다.
처리 중 문제가 발생하여 충돌 또는 서비스 거부가 발생할 수 있습니다. 또한 슬라이스 사이에 오프셋이 있는 경우
세심하게 건설되어, 일부 시스템은 처리할 수 없어, 붕괴를 초래한다. 따라서 취약점의 원인은 재구성 알고리즘이다.
유명한 조각 공격 프로그램을 하나씩 분석해 보고 IP 조각을 만들기 위해 시스템을 공격하는 방법을 알아보자.
3. 죽음의 평화
-=-=-=-=-=-=-=-=-=-= =-=
Ping o' death 는 ICMP 프로토콜을 사용하는 조각 공격입니다. 공격자가 길이를 초과하는 것을 보냅니다.
65535 의 Echo 요청 패키지를 전달한 후 대상 호스트는 조각을 재구성할 때 65535 자를 미리 할당할 수 있습니다.
세그먼트 버퍼 오버플로, 일반적으로 시스템이 충돌하거나 정지됩니다. Ping 은 ICMP Echo 요청 패키지를 보내지 않았습니까?
정말? 공격하자! IP 및 ICMP 헤더 길이에 관계없이 데이터 길이가 많을수록 좋습니다.
65535, 소포 보내기:
# ping-c1-s65535192.168.0.1
오류: 패킷 크기 65535 가 너무 큽니다. 최대값은 65507 입니다
유감스럽게도 Linux 자신의 ping 은 우리가 나쁜 일을 하는 것을 허락하지 않는 것 같다. : (
65507 은 65535-20-8=65507 로 계산됩니다. Win2K 에서의 Ping 은 비교적 인색하고, 데이터일 뿐이다
65500 사이즈 허용. 그래서 다른 프로그램을 찾아 도급을 해야 하는데, 새로운 버전의 운영 체제가 이미 만들어졌다.
이 결함은 이미 복구되었으니, 너는 계속 이 문장 보는 것이 좋겠다.
참, 99 년 당시 애국해커 ('홍객' 의 전신) 가 전국을 발동했던 기억이 납니다.
어느 시점에서 누리꾼들은 한 미국 사이트에 대해 ping 을 시작해 원격 서버에 대해 ping 을 시도했다. 이것은 실제로 핑 (ping) 입니다.
Flood 공격, 대량의 Echo 요청 패킷을 이용하여 호스트 응답 속도를 늦추고, 타겟 네트워크를 차단하고, 원리 및
평오의 죽음은 다르다. 이 점은 분명히 구분해야 한다.
4. 요동 2
-=-=-=-=-=-=-=-=-=-= =-=
Jolt2.c 는 무한 루프에서 ICMP/UDP IP 조각을 보내고 있습니다
Windows 시스템의 시스템 교착 상태. 저는 SP 없이 Windows 2000 을 테스트했습니다. CPU 활용도는 즉시 상승할 것입니다.
100%, 마우스가 움직이지 않습니다.
Snort 를 사용하여 ICMP 및 UDP 프로토콜에서 보낸 패킷을 각각 캡처했습니다.
보낸 ICMP 패킷:
01/07-15: 33: 26.974096192.168.0 192.168.0.1
Icmp TTL: 255 tos: 0x0id:1109 iplen: 20 dgm len: 29
조각 오프셋: 0x 1FFE 조각 크기: 0x9
08 00 00 00 00 00 00 00 00 .........
보낸 UDP 패킷:
01/10-14: 21:00.298282190 192.168.0.1
Udpttl: 255 tos: 0x0id:1109 iplen: 20 dgm len: 29
조각 오프셋: 0x 1FFE 조각 크기: 0x9
04 D3 04 D2 00 09 00 00 61...... a
위의 결과에서 알 수 있습니다.
* 조각 플래그 비트 MF=0 은 마지막 조각임을 나타냅니다.
* 오프셋은 0x 1FFE 이고 재조합된 계산 길이는 (0x 1FFE * 8)+29 = 65549 > 입니다
65535, 넘침.
* IP 패킷 ID 는 1 109 이며 IDS 감지의 특징으로 사용됩니다.
* ICMP 패킷:
유형 8, 코드 0, 에코 요청; 을 눌러 섹션을 인쇄할 수도 있습니다
체크섬은 0x0000 이고 프로그램은 체크섬을 계산하지 않으므로 이 ICMP 패키지는 정확히 불법입니다.
네.
* UDP 패킷:
대상 포트는 사용자가 명령 매개 변수에서 지정합니다.
소스 포트는 대상 포트와 1235 사이 또는 결과입니다.
체크섬은 0x0000 입니다. ICMP 와 마찬가지로 계산이 없고 잘못된 UDP 입니다.
페이로드 섹션에는 문자 "a" 만 있습니다.
Jolt2.c 는 소스 IP 주소를 위조할 수 있어야 하지만 소스 프로그램은 사용자를 위장하려고 시도하지 않았습니다.
IP 주소는 src_addr 에 할당됩니다. 저자가 고의인지 아닌지 모르겠다.
Jolt2 는 큰 영향을 미칩니다. 큰 오프셋이 있는 이 패킷을 끊임없이 전송함으로써, 그것은 단지 죽은 것이 아니다.
패치가 적용되지 않은 Windows 시스템을 잠그면 네트워크 트래픽도 크게 증가합니다. 누군가 jolt2 를 사용하여 네트워크를 시뮬레이션했습니다.
트래픽, 높은 로드 트래픽에서 IDS 의 공격 감지 효율성을 테스트하는 것이 이 기능을 활용하는 것입니다.
5. 눈물
-=-=-=-=-=-=-=-=-=-= =-=
눈물방울도 비교적 간단하다. 기본적으로 두 개의 UDP 패키지를 보내면 일부 리눅스 커널이 충돌합니다.
무너지다. Snort 캡처 결과는 다음과 같습니다.
첫 번째:
01/08-11:42: 21.9858531 192.168.0.1
Udpttl: 64tos: 0x0id: 242 iplen: 20 dgm len: 56mf
조각 오프셋: 0x0 조각 크기: 0x24
A0 A8 86 C7 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
..... .....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.....................................
00 00 00 00 ....
* MF= 1, offset =0, 조각의 첫 번째 IP 패킷.
* 맵:
|<-20->; |<-8->; |<-28->; |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP | UDP | 데이터
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
두 번째:
01/08-11:42: 21.9858531 192.168.0.1
Udpttl: 64tos: 0x0id: 242 iplen: 20 dgm len: 24
조각 오프셋: 0x3 조각 크기: 0x4
A0 A8 86 C7 ....
* MF=0, offset =0x3, 오프셋 바이트 수 0x3 * 8 = 24, 마지막 슬라이스.
* 맵:
|<-20->; |<-4->; |
+-+-+-+-+-+-+-+-+-+-+-+-+-+
IP | 데이터 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+
소스 코드를 수정하면 두 번째 IP 패킷의 오프셋도 0x4 가 될 수 있으며 오프셋 바이트 수는 다음과 같습니다
0x4 * 8 = 32.
다음 다이어그램은 오프셋 바이트 수 24 에 해당하는 수신측 조각 재구성 프로세스를 보여 줍니다.
그리고 32:
|<-20->; |<-8->; |<-28->; |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP | UDP | 데이터
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|+-+-+-+-+
|<-24->; 데이터 |
|+-+-+-+-+
|<-4->; |
|
|
+-+-+-+-+
|<-
32->; 데이터 |
|
+-+-+-+-+
|<-4->; |
두 번째 IP 패킷의 오프셋이 첫 번째 끝보다 작고 두 번째 IP 패킷이 포함되어 있음을 알 수 있습니다.
IP 패킷의 데이터는 첫 번째 조각의 꼬리를 초과하지 않습니다. 이것이 바로 겹침 현상입니다. 구형 리눅스 커널
(1.x-2.0.x) 이 겹치는 조각을 처리하는 데 문제가 있습니다. WinNT/95 가 10 ~ 50 개를 받았습니다.
눈물은 슬라이스할 때도 무너질 것이다. Teardrop.c 의 소스 코드를 읽어서 이것을 구성하고 보내는 방법을 배울 수 있습니다.
패킷。
6. 어떻게 IP 조각화 공격을 막을 수 있습니까?
-=-=-=-=-=-=-=-=-=-= =-=
* Windows 시스템에는 최신 서비스 팩을 설치해 주십시오. 현재 Linux 커널은 영향을 받지 않습니다.
반지.
* 가능한 경우 조각난 패킷이 네트워크 경계를 통과하거나 iptables 를 사용하여 초당 트래픽을 제한하는 것을 금지합니다.
조각 패킷 수입니다.
* 방화벽에 조각 모음 기능이 있는 경우 자체 알고리즘에 문제가 없는지 확인하십시오. 그렇지 않으면
DoS 는 전체 네트워크에 영향을 미칩니다.
* Win2K 시스템에서는 IP 보안 정책을 사용자 정의하고 조각 검사를 설정합니다.