2010년 3월 29일 월요일

헤더 체크섬 오류 Header checksum: 0x0000 [incorrect 메시지


패킷을 들여다 보면 IP 또는 TCP ,UDP 헤더 체크섬(Header Checksum)이 올바르지 않다고
나오는 경우를 보았을 것이다.  와이어샤크를 통해 보았다면, 헤더 체크섬 부분이
Incorrect 로 되어 있고, 어떤 값이 되어야 할지를 알려준다.

헤더 체크섬은 전송중에 깨질 수도 있기 때문에
기본적으로 패킷의 헤더를 보호하기 위해 만들어진 것이다. IP 헤더의 경우를 보면 2바이트(16비트)로
구성되어 있고, 네트워크를 이동하는 각 홉 에서(예를 들면, 라우터 통과) 체크섬을 검증한다.
체크섬이 올바르지 않으면 네트워크 장비는 해당 패킷을 버리게 될 것이다. 네트워크를 거치는 과정에서
체크섬은 재 계산되고 업데이트를 하게된다.

최근의 와이어샤크에서는 헤더 체크섬 값 계산은 기본적으로 disabled 되어 있다. 와이어샤크의 이전인
이더리얼만 해도 기본적으로 체크섬 값을 계산하였지만, 아무래도 이 계산 자체도
퍼포먼스에 영향을 주기 때문에 disabled 되어 있다. 와이어샤크로 열었을때
[validation disabled] 라고 이 기능을 사용하지 않고 있으므로 우측을 클릭해
Protocol References 에서 아래 내용을 체크해 주면 된다. (참고로, IP 헤더에
대해서는 기본적으로 enabled 되어 있다)

- Validate the TCP checksum if possible
- Validate the UDP checksum if possible

헤더의 체크섬 값이 0x0000 으로 되어 있는 경우도 나타나는 경우가 있다.

Header checksum: 0x0000 [incorrect, should be 0x????]

[그림] IP 헤더 Checksum 오류

이럴 경우 네트워크 장비나 기타 원인에 의해 헤더 체크섬 값이 계산되지 않았거나
또는 의도적으로 빠지는 경우도 있다. UDP 프로토콜을 정의한 RFC 768 를 보면
체크섬 값이 제로로 채워져 있는 경우는 보내는 측 쪽에서 계산되지 않는 경우라 정의하고 있다.

이외 나의 경험상 악성코드와 같은 의도적으로 만들어지는 패킷에서도 이런 경우를 종종
볼 수 있었다. 특히 2003~2004년 경에 발생한 악성코드에서 많이 체크섬 값을 계산하지 않는
경우가 많았는데 트래픽을 더욱 많이 생성하기 위해서 약간의 연산이 들어가는 이런 계산 부분도
생략한 것으로 보인다. 물론 제작자의 실수로 인한 부분도 있었을 것이다.

대부분은 정상적으로 체크섬을 계산하기 때문에 계산되지 않은 헤더가 있다면
패킷을 전송한 지점에서의 문제 (애플리케이션 제작 오류, 네트워크 카드 오류, 의도적으로 생성된
악의적 트래픽 등) 그리고, 네트워크 전송장비등이 이유가 있을 것이다.

아마 많은 경우가 전송된 지점의 문제가 아닐까 한다. 전체 덤프된 패킷에서
이렇게 발생되는 비중을 살펴보고 한 단계식 찾아들어가면 원인은 찾을 수 있을 것이다.

댓글 10개:

  1. 어제 오늘 다 둘러보았는데 정말 유용한 자료가 많이 있네요.



    종종 필요할때마다 들러서 참고하겠습니다..



    다음 포스팅도 기대할겠습니다.



    한가지 건의 사항은 방명록이 있으면 참 좋겠어요..ㅎㅎ

    답글삭제
  2. 감사합니다. 앞으로도 종종 들려주세요. ^.^

    답글삭제
  3. @Rigel - 2010/03/31 00:01
    싫습니다. 자주 들르겠습니다.

    답글삭제
  4. 안녕하세요, 좋은 사이트 구경 잘 하고 갑니다. ^^

    말씀하신 부분은 checksum offload라고 하여서 ip/tcp/udp checksum을 OS network stack에서 하지 않고 HW에서 처리가 되는 옵션이 켜져 있는 상태에서 자신의 NIC을 sniffing하는 경우 발생할 수 있는 오류립니다. 자신의 NIC이 아닌 중간단의 mirroring을 받아서 sniffing해 보면 해당 오륙가 나타나지 않게 됩니다. 저도 이것때문에 예전에 고생한 적이 있어서리... -_-

    http://www.gilgil.co.kr/bbs/view.php?id=lecture&no=642

    패킷 분석과 관련된 좋은 사이트 다시 한번 감사합니다. 앞으로 종종 들르겠습니다. ^^

    답글삭제
  5. @이경문 - 2010/06/22 03:30
    네, 감사합니다. 말씀해 주신 부분도 하나의 원인이 될 수 있겠네요. 앞으로도 그럼 종종 뵙겠습니다. ^^ 그런데 새벽 3시30분에 댓글을 달아주셨네요. ㅎㅎ

    답글삭제
  6. trackback from: 헤더 체크섬 오류 Header checksum: 0x0000 [incorrect 메시지
    열기 패킷을 들여다 보면 IP 또는 TCP ,UDP 헤더 체크섬(Header Checksum)이 올바르지 않다고 나오는 경우를 보았을 것이다. 와이어샤크를 통해 보았다면, 헤더 체크섬 부분이 Incorrect 로 되어 있고, 어떤 값이 되어야 할지를 알려준다. 헤더 체크섬은 전송중에 깨질 수도 있기 때문에 기본적으로 패킷의 헤더를 보호하기 위해 만들어진 것이다. IP 헤더의 경우를 보면 2바이트(16비트)로 구성되어 있고, 네트워크를 이동하는 각 홉..

    답글삭제
  7. 안녕하세요, 좋은 글 잘 읽고 갑니다! 저도 헤더 체크섬 오류라고 나온 것 때문에 구글링하다가 이 블로그에 들르게 되었는데요, 같은 문제에 대해서 트랙백을 보냈습니다. 원인이 어떤 것인지 ㅠㅠ 댓글로 알려주셨으면 합니다. 아직 공부가 많이 모자라서 잘 모르겠네요ㅠㅠ..

    답글삭제
  8. @SOMA - 2010/08/04 15:16
    화면 이미지 만으로는 정확히 판단하기 힘드네요. 딱 한 곳에서만 체크썸 오류가 발생한 것인가요? 클라이언트에서 -> 서버 쪽으로의 패킷에서 발생한 것이므로 일단 클라이어튼 단에서의 가능성이 높겠습니다.

    지속적 발생도 아니니 더 원인 추정이 힘드네요. 네트워크 어뎁터에서 일시적인 문제이거나 기타..

    딱 이것 때문에 문제가 발생한것 같습니다 하고 답을 드리기가 힘드네요. ^^

    답글삭제
  9. @Rigel - 2010/08/05 08:41
    답글 감사합니다! 좋은 포스팅 덕분에 공부 많이되네요:)

    답글삭제