별빛의 낙하지 :: 'Sequrity' 카테고리의 글 목록

Search

'Sequrity'에 해당되는 글 2건

  1. 2012.07.07 checksum offload 해제하기.
  2. 2012.02.19 Windows 메모리 레이아웃 분석 시작

  와이어샤크를 이용해서 패킷을 캡쳐해서 분석을 하던중에 checksum값이 안맞다고 뜨는게 보였다.

IP헤더, TCP헤더 등의 체크섬 값이 0x0000으로 처리되어 있는 것이 보였다.

  패킷을 만드는데 필요한 헤더를 구성하면서 헤더 구성이 옳은지에 대한 시그니처인 체크섬값은 원래는 OS가 패킷을 만들면서 그 값을 채워넣었으나,  요즘 나오는 이더넷 카드들은 이더넷 카드와 같은 하드웨어 수준에서 체크섬값을 계산해서 패킷을 전송하기 전에 넣어준다고 한다.

  그런데 실제로 테스트 해본 결과 왠지 이 의미가 아닌것 같다. offload라고 하는 뜻은 

"(자기가 원치 않는 것을) 없애다" 로써 checksum 기능을 해제한다는 뜻이지 않나 싶다.  

   확인해본결과 체크섬 오프로드가 활성화된 상태에서 각각의 패킷들에 checksum 값이 0x000으로 되어 있었고, 옆에 친절히 may be caused by ip checksum offload?라고 되어 있다.  체크섬 오프로드에 의해서 0x00으로 채워져 있었다는 뜻일 것이다.  (모 블로그에서는 0x00 으로 채워지는 것에 대해서 패킷의 조작가능성에 대해서 언급을 하고 있다.  실제로 이더넷 카드가 0x00으로 채운다고 보면... 패킷 조작의 실체는 이더넷 카드부터) 

  아무튼 네트워크와 관련된 프로그램을 만들어서 테스트 하는 입장에서 자신이 만든 패킷이 제대로 되어있는지 아닌지 와이어샤크를 통해서 캡쳐링을 해서 보면 굉장히 찝찝한 기분이 들 것이다.

따라서 이더넷카드에서 하는 뻘짓을 해제를 한다.

[제어판] - [네트워크  환경 어쩌구] - [로컬 영역 연결 속성] 에서 [속성]-[구성] 그리고 [고급]탭으로 이동하면 아래의 화면이 나온다.


여기서 [IPv4 체크섬 오프로드]를 [사용 안함]으로 설정한다. 

패킷 캡쳐 결과 IP를 비롯해서 TCP 쪽도 체크섬 값이 0x0000으로 비워져 있어서 둘다 사용 안함으로 했다.



그러면 위와 같이 checksum 값이 0x53de(실제값)으로 채워지는 것을 볼 수 있다.

이제 개발을 하면서 체크섬 값이 이상하다는 것 같은 찝찝한 기분은 덜 느끼게 될것이다. 

적어도 하드웨어적으로 문제는 없으니 소프트웨어적으로 문제가 있겠군 정도?


Windows Program Memory Layout
<전역변수, 정적변수>
<스택>
<힙>
<텍스트(=코드)>

  그리고 그 뒤에 따라나오는 RuntimeCheck 관련된 설명들은 프로그램 실행파일을 만들때,  코드 영역에 추가된것으로 보인다.
  HxD로 정적파일과 비교 분석 결과 텍스트영역은 순차적으로 이루어져 있음을 알 수 있다.