요약

  • RFC 5961은 확립된 연결에 대한 RST를 시퀀스 번호가 정확히RCV.NXT와 일치할 때만 즉시 수용하며, 창 안에 있으나 정확히 일치하지 않는 리셋은 챌린지 ACK를 받고 폐기된다.
  • 동일한 증명 패턴이 동기화된 연결을 블라인드 SYN 공격으로부터 보호하고, 더 좁은 ACK 검사는 데이터 주입을 줄이며, 조정 가능한 스로틀링이 새로운 응답 면을 한계 내로 묶는다.

원래의 약점은 TCP에 시퀀스 번호가 없다는 것이 아니었다. 파괴적인 명령이 수신 창 전체에 걸쳐 수용될 수 있다는 점이었다. 오프패스 공격자는 연결을 관찰할 필요가 없었다. 가능한 창 범위에 걸쳐 간격을 두고 반복되는 위조 RST는 결국 어느 하나의 창 안에 들어가 연결을 끊어버릴 수 있었다. 창이 커질수록 필요한 추측 횟수는 줄어들었다.

RFC 5961은 권한 검사를 바꾼다. 창 밖의 RST는 조용히 폐기된다. 시퀀스 번호가 다음 예상 바이트인RCV.NXT와 정확히 일치하는 리셋은 여전히 연결을 종료한다. 창 안에 있으나 정확히 일치하지 않는 리셋은 더 이상 즉시 통과하지 못한다: 엔드포인트는<SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>를 보내고, 의심 세그먼트를 버리며, 연결을 정상적으로 계속 처리한다.

챌린지는 피어에게 상태를 드러내도록 요구한다

이 ACK는 인증이 아니다. 상태 챌린지다. 실제로 연결을 닫은 정당한 원격 엔드포인트는 더 이상 해당 전송 제어 블록을 갖고 있지 않다. ACK를 받으면 일반적인 TCP 동작에 따라 승인 번호에서 파생된 시퀀스 번호를 가진 또 다른 RST로 응답한다. 이 두 번째 리셋은 이제 정확히 일치하므로 로컬 연결을 닫을 수 있다. 블라인드 공격자는 통상 챌린지를 볼 수 없으므로 확인 리셋을 만들어낼 수 없다.

이는 진짜 종료에 왕복 한 번을 추가할 수 있고, 순서가 어긋난 정당한 RST는 먼저 챌린지를 받을 수 있다. 이 설계는 그 지연을 받아들이는데, 대안이 넓은 확률 창에 파괴 권한을 허용하기 때문이다.

SYN 규칙은 동기화된 상태에서 같은 아이디어를 사용한다. 수용 가능한 위조 SYN이 리셋을 유발하도록 두는 대신, 엔드포인트는 SYN 시퀀스 번호와 무관하게 챌린지 ACK를 보내고 세그먼트를 폐기하며, 재시작한 정당한 피어가 유효한 RST로 종료를 확인하기를 기다린다.SYN-SENT상태에서는 오래된 경계가 유지된다: RST는 그 ACK가 SYN을 승인하는 경우에만 수용된다.

RFC 5961은 드문 코너 케이스를 만드는 것이 아니라 보존한다. 재시작한 피어가 같은 주소와 포트를 재사용하고 우연히 초기 시퀀스 번호를 정확히RCV.NXT-1로 선택하면, 챌린지를 수용 가능한 중복 ACK로 간주해 무시하고 연결 수립이 실패할 때까지 SYN을 재전송할 수 있다.

데이터 주입에는 범위가 지정된 두 번의 추측이 필요하다

블라인드 데이터 주입에는 서로 다른 선택적 검사가 있다. 구현은 들어오는 승인 번호가SND.UNA-MAX.SND.WND와SND.NXT사이에 있을 때만 수용할 수 있다.MAX.SND.WND는 스케일링을 포함하여 로컬 송신자가 피어로부터 받은 가장 큰 창을 기록한다. 그 ACK 범위 밖의 세그먼트는 폐기되고 승인된다.

이 추가 차원은 블라인드 공격자가 사용 가능한 수신 시퀀스와 연결별 범위 안의 ACK를 모두 추측해야 하게 만든다. 위조 FIN 세그먼트에 대한 저항도 강화된다. 이는 확률을 줄이지만 거짓 주입을 제거하지는 않는다. 그에 따라 RFC는 RST와 SYN 완화 조치에는 SHOULD 수준의 강도를 부여하고, 데이터 검사는 MAY로 둔다.

방어는 자원 결정을 만든다

모든 챌린지 응답은 대역폭과 처리 능력을 소모한다. 따라서 RFC 5961은 조정 가능한 ACK 스로틀링을 권고한다. 그 예시—5초 안에 10개 이하의 챌린지 ACK—는 경험적 것이며 보편적 상수가 아니다. 더 타이트한 한도는 대역폭과 CPU를 보호하고, 더 느슨한 한도는 정당한 오래된 상태를 더 빨리 정리할 수 있다. 빈번한 스로틀링 자체가 비정상적이거나 적대적인 조건의 신호일 수 있다.

미들박스는 경계를 복잡하게 만든다. 비준수 리셋을 캐시하거나 생성하는 장치는 챌린지 ACK를 계속 유발할 수 있으며, 스로틀링이 감당해야 하는 RST/ACK 교환을 만들어낸다. 위조된 창 안 RST 또는 SYN은 하나의 ACK를 피해자 쪽으로 반사시킬 수도 있지만, 유도된 ACK 하나마다 위조 세그먼트 하나가 필요하므로 증폭 공격은 아니다.

유일한 출처는 2010년 8월에 Standards Track으로 발표된RFC 5961이다. 이 RFC는 오프패스 추측의 작업량을 올리지만, TCP를 인증하거나 온패스 공격자를 막거나 위조 ICMP 및 그 밖의 모든 방해 벡터를 다루지는 않는다. RFC는 IPsec AH 또는 ESP를 완전한 보호 경계로 명시한다. 챌린지 ACK는 첫 세그먼트가 권한을 증명하지 못했다는 뜻이지, 악의를 증명하는 것이 아니다.